// // Generated by dtk // Translation Unit: d_a_item.cpp // #include "d/d_item.h" #include "d/d_item_data.h" #include "d/actor/d_a_itembase_static.h" #include "d/actor/d_a_item.h" #include "d/actor/d_a_player_link.h" #include "d/d_com_inf_game.h" #include "JSystem/JKernel/JKRHeap.h" #include "d/d_procname.h" #include "dolphin/types.h" class dCcD_GObjInf; dCcD_SrcCyl daItem_c::m_cyl_src = { // dCcD_SrcGObjInf { /* Flags */ 0, /* SrcObjAt Type */ 0, /* SrcObjAt Atp */ 0, /* SrcObjAt SPrm */ 0, /* SrcObjTg Type */ 0xFFFFFFFF, /* SrcObjTg SPrm */ 0x09, /* SrcObjCo SPrm */ 0x59, /* SrcGObjAt Se */ 0, /* SrcGObjAt HitMark */ 0, /* SrcGObjAt Spl */ 0, /* SrcGObjAt Mtrl */ 0, /* SrcGObjAt GFlag */ 0, /* SrcGObjTg Se */ 0, /* SrcGObjTg HitMark */ 0, /* SrcGObjTg Spl */ 0, /* SrcGObjTg Mtrl */ 0, /* SrcGObjTg GFlag */ 0x04, /* SrcGObjCo GFlag */ 0, }, // cM3dGCylS { /* Center */ 0.0f, 0.0f, 0.0f, /* Radius */ 10.0f, /* Height */ 50.0f, }, }; /* 800F4BC8-800F4BD4 .text getData__12daItemBase_cFv */ daItemBase_c_m_data* daItemBase_c::getData() { return &daItemBase_c::m_data; } /* 800F4BD4-800F4C4C .text setArrowTrans__Fs4cXyz */ void setArrowTrans(short, cXyz) { /* Nonmatching */ } /* 800F4C4C-800F4CD8 .text getYOffset__8daItem_cFv */ float daItem_c::getYOffset() { switch (m_itemNo) { case HEART: return 0.0f; case SKULL_NECKLACE: return 0.0f; case BOKOBABA_SEED: return 0.0f; case GOLDEN_FEATHER: return 0.0f; case BOKO_BELT: return 0.0f; case RED_JELLY: case GREEN_JELLY: case BLUE_JELLY: return 0.0f; case SWORD: return 20.0f; case SHIELD: return 23.0f; case DROPPED_SWORD: return 10.0f; case GREEN_RUPEE: case BLUE_RUPEE: case YELLOW_RUPEE: case RED_RUPEE: case PURPLE_RUPEE: case ORANGE_RUPEE: case SILVER_RUPEE: return 0.0f; case KAKERA_HEART: case UTUWA_HEART: return 0.0f; case SMALL_KEY: case BOSS_KEY: return 0.0f; default: return 0.0f; } } /* 800F4CD8-800F4E6C .text set_mtx__8daItem_cFv */ void daItem_c::set_mtx() { /* Nonmatching */ } /* 800F4E6C-800F4FDC .text set_mtx_base__8daItem_cFP8J3DModel4cXyz5csXyz */ void daItem_c::set_mtx_base(J3DModel*, cXyz, csXyz) { /* Nonmatching */ } /* 800F4FDC-800F5044 .text itemGetCallBack__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ void itemGetCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*) { /* Nonmatching */ } /* 800F5044-800F53EC .text CreateInit__8daItem_cFv */ void daItem_c::CreateInit() { /* Nonmatching */ mAcchCir.SetWall(30.0f, 30.0f); cXyz* speedPtr; mAcch.Set(¤t.pos, &next.pos, this, 1, &mAcchCir, speedPtr = &speed, NULL, NULL); mAcch.m_flags &= ~0x400; mAcch.m_flags &= ~0x8; mCullMtx = mpModel->mBaseTransformMtx; mStts.Init(0, 0xFF, this); mCyl.Set(m_cyl_src); mCyl.SetStts(&mStts); mCyl.SetCoHitCallback(&itemGetCallBack); // Regswaps if the inlines are used. // f32 height = dItem_data::getH(m_itemNo); // f32 radius = dItem_data::getR(m_itemNo); f32 height = dItem_data::item_info[m_itemNo].mCollisionH; f32 radius = dItem_data::item_info[m_itemNo].mCollisionR; if (mScale.x > 1.0f) { height *= mScale.x; radius *= mScale.x; } mCyl.SetR(radius); mCyl.SetH(height); mItemTimer = getData()->mDuration; field7_0x65a = getData()->field7_0x18; field3_0x650 = speedPtr->y; mCurState = 0; mUnknownParam = (fpcM_GetParam(this) & 0x03000000) >> 0x18; // TODO: should probably add inlines here // e.g. getType__10daItem_prmFP8daItem_c etc if ((fpcM_GetParam(this) & 0x03000000) >> 0x18 == 3 || (fpcM_GetParam(this) & 0x03000000) >> 0x18 == 1) { mStatusFlags |= 2; } mItemAction = (fpcM_GetParam(this) & 0xFC000000) >> 0x1A; show(); if (dItem_data::checkSpecialEffect(m_itemNo) && (m_itemNo != SMALL_KEY || (m_itemNo == SMALL_KEY && (mStatusFlags & 2)))) { u16 particleID = dItem_data::getSpecialEffect(m_itemNo); dComIfGp_particle_set(particleID, ¤t.pos, NULL, NULL, 0xFF, &mPtclFollowCb, -1, NULL, NULL, NULL); } switch (m_itemNo) { case BOMB_5: case BOMB_10: case BOMB_20: case BOMB_30: mScaleTarget.x = 0.6f; mScaleTarget.y = 0.6f; mScaleTarget.z = 0.6f; break; default: mScaleTarget.x = 1.0f; mScaleTarget.y = 1.0f; mScaleTarget.z = 1.0f; break; } mSwitchId = (fpcM_GetParam(this) & 0x00FF0000) >> 0x10; if (mSwitchId != 0xFF && !fopAcM_isSwitch(this, mSwitchId)) { hide(); mStatusFlags |= 2; } mActivationSwitch = (orig.angle.z & 0x00FF) >> 0; current.angle.z = 0; orig.angle.z = 0; initAction(); switch (m_itemNo) { case SWORD: case SHIELD: mStatus |= 0x4000; break; case DROPPED_SWORD: current.angle.x = 0x4000; break; } set_mtx(); animPlay(1.0f, 1.0f, 1.0f, 1.0f, 1.0f); s16 procname = PROC_BST; // Gohdan if (fopAcIt_Judge(&fpcSch_JudgeForPName, &procname)) { mpParticleEmitter = dComIfGp_particle_set(0x81E1, ¤t.pos, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); } } /* 800F53EC-800F5668 .text _daItem_create__8daItem_cFv */ s32 daItem_c::_daItem_create() { /* Nonmatching */ fopAcM_SetupActor(this, daItem_c); m_itemNo = (fpcM_GetParam(this) & 0x000000FF) >> 0x00; if (!dItem_data::getFieldArc(m_itemNo)) { setLoadError(); return cPhs_ERROR_e; } mPickupFlag = (fpcM_GetParam(this) & 0x0000FF00) >> 0x08; if (m_itemNo != BLUE_JELLY) { // Blue Chu Jelly uses mPickupFlag as if it was a switch. mPickupFlag &= 0x7F; if (dComIfGs_isItem(mPickupFlag, orig.roomNo) && mPickupFlag != 0x7F) { // Already picked up, don't create the item again. setLoadError(); return cPhs_ERROR_e; } } s32 phase_state = dComIfG_resLoad(&mPhs, dItem_data::getFieldArc(m_itemNo)); if (phase_state == cPhs_COMPLEATE_e) { s32 result = fopAcM_entrySolidHeap(this, &CheckFieldItemCreateHeap, dItem_data::getFieldHeapSize(m_itemNo)); if (!result) { return cPhs_ERROR_e; } CreateInit(); } return phase_state; } /* 800F5668-800F5834 .text _daItem_execute__8daItem_cFv */ s32 daItem_c::_daItem_execute() { /* Nonmatching */ } /* 800F5834-800F59CC .text mode_proc_call__8daItem_cFv */ void daItem_c::mode_proc_call() { /* Nonmatching */ } /* 800F59CC-800F5AFC .text execInitNormalDirection__8daItem_cFv */ void daItem_c::execInitNormalDirection() { /* Nonmatching */ daPy_getPlayerActorClass()->getHeadTopPos(); field8_0x65c = getData()->field45_0x40; f32 speedY = getData()->mPickedUpInitialSpeedY; speed.x = 0; speed.y = speedY; speed.z = 0; mGravity = getData()->mPickedUpGravity; show(); // TODO dPa_smokeEcallBack // TODO mpParticleEmitter } /* 800F5AFC-800F5BC8 .text execMainNormalDirection__8daItem_cFv */ void daItem_c::execMainNormalDirection() { /* Nonmatching */ } /* 800F5BC8-800F5C68 .text execInitGetDemoDirection__8daItem_cFv */ void daItem_c::execInitGetDemoDirection() { /* Nonmatching */ } /* 800F5C68-800F5CDC .text execWaitGetDemoDirection__8daItem_cFv */ void daItem_c::execWaitGetDemoDirection() { /* Nonmatching */ } /* 800F5CDC-800F5D44 .text execMainGetDemoDirection__8daItem_cFv */ void daItem_c::execMainGetDemoDirection() { /* Nonmatching */ } /* 800F5D44-800F5D88 .text execBringNezumi__8daItem_cFv */ void daItem_c::execBringNezumi() { if (mUnknownParam != 1) { fopAcM_posMoveF(this, mStts.GetCCMoveP()); } mode_proc_call(); } /* 800F5D88-800F5F40 .text execWaitMain__8daItem_cFv */ void daItem_c::execWaitMain() { /* Nonmatching */ } /* 800F5F40-800F5FC0 .text execWaitMainFromBoss__8daItem_cFv */ void daItem_c::execWaitMainFromBoss() { /* Nonmatching */ } /* 800F5FC0-800F60C0 .text scaleAnimFromBossItem__8daItem_cFv */ void daItem_c::scaleAnimFromBossItem() { /* Nonmatching */ } /* 800F60C0-800F6110 .text _daItem_draw__8daItem_cFv */ s32 daItem_c::_daItem_draw() { if (chkDraw()) { return DrawBase(); } return 1; } /* 800F6110-800F61C8 .text setTevStr__8daItem_cFv */ void daItem_c::setTevStr() { g_env_light.settingTevStruct(TEV_TYPE_ACTOR, getPositionP(), &mTevStr); mTevStr.mColorC0.r = 0x96; mTevStr.mColorC0.g = 0x96; mTevStr.mColorC0.b = 0x96; mTevStr.mColorK0.r = 0xFF; mTevStr.mColorK0.g = 0xFF; mTevStr.mColorK0.b = 0xFF; g_env_light.setLightTevColorType(mpModel, &mTevStr); for (int i = 0; i < 2; i++) { if (!mpModelArrow[i]) { continue; } g_env_light.setLightTevColorType(mpModelArrow[i], &mTevStr); } } /* 800F61C8-800F6268 .text _daItem_delete__8daItem_cFv */ s32 daItem_c::_daItem_delete() { /* Nonmatching */ mPtclRippleCb.end(); // TODO DeleteBase(dItem_data::getFieldArc(m_itemNo)); } /* 800F6268-800F6434 .text Reflect__FR4cXyzP4cXyzff */ void Reflect(cXyz&, cXyz*, float, float) { /* Nonmatching */ } /* 800F6434-800F6D24 .text itemGetExecute__8daItem_cFv */ void daItem_c::itemGetExecute() { /* Nonmatching */ execItemGet(m_itemNo); } /* 800F6D24-800F6D78 .text itemDefaultRotateY__8daItem_cFv */ void daItem_c::itemDefaultRotateY() { // Rotates at a fixed speed. s16 rotationSpeed = 0xFFFF / getData()->mNumFramesPerFullSpin; fopAcM_addAngleY(this, current.angle.y + rotationSpeed, rotationSpeed); } /* 800F6D78-800F6E54 .text checkItemDisappear__8daItem_cFv */ bool daItem_c::checkItemDisappear() { bool disappearing = true; if (mCurState == 3) { disappearing = false; show(); } if (mStatusFlags & 0x02) { disappearing = false; } if (mStatusFlags & 0x10) { disappearing = false; } if (dItem_data::chkFlag(m_itemNo, 0x01)) { disappearing = false; } if (g_dComIfG_gameInfo.play.mEvtCtrl.mMode != 0) { disappearing = false; } if (mCurState == 4) { disappearing = false; } if ((mStatusFlags & 0x08) || (mStatusFlags & 0x40) || (mStatus & 0x100000)) { disappearing = false; show(); } return disappearing; } /* 800F6E54-800F6E74 .text setItemTimer__8daItem_cFi */ void daItem_c::setItemTimer(int timer) { if (timer == -1) { mStatusFlags |= 0x10; return; } mItemTimer = timer; } /* 800F6E74-800F6EC8 .text checkPlayerGet__8daItem_cFv */ BOOL daItem_c::checkPlayerGet() { if (field_0x638 < getData()->field47_0x42) { return FALSE; } if (mCurState == 3) { return FALSE; } return TRUE; } /* 800F6EC8-800F7028 .text itemActionForRupee__8daItem_cFv */ void daItem_c::itemActionForRupee() { /* Nonmatching */ } /* 800F7028-800F713C .text itemActionForHeart__8daItem_cFv */ void daItem_c::itemActionForHeart() { /* Nonmatching */ } /* 800F713C-800F72A4 .text itemActionForKey__8daItem_cFv */ void daItem_c::itemActionForKey() { /* Nonmatching */ } /* 800F72A4-800F73A4 .text itemActionForEmono__8daItem_cFv */ void daItem_c::itemActionForEmono() { /* Nonmatching */ } /* 800F73A4-800F7898 .text itemActionForSword__8daItem_cFv */ void daItem_c::itemActionForSword() { /* Nonmatching */ } /* 800F7898-800F7AF0 .text itemActionForArrow__8daItem_cFv */ void daItem_c::itemActionForArrow() { /* Nonmatching */ } /* 800F7AF0-800F7BF8 .text checkWall__8daItem_cFv */ void daItem_c::checkWall() { /* Nonmatching */ } /* 800F7BF8-800F7DDC .text set_bound_se__8daItem_cFv */ void daItem_c::set_bound_se() { /* Nonmatching */ } /* 800F7DDC-800F7E6C .text checkGetItem__8daItem_cFv */ s32 daItem_c::checkGetItem() { if (!checkPlayerGet()) { return 0; } if (mCyl.ChkTgHit()) { cCcD_Obj* hitObj = mCyl.GetTgHitObj(); if (hitObj) { u32 atType = hitObj->GetAtType(); if (atType & AT_TYPE_SWORD) { itemGetExecute(); return 1; } else if (atType & AT_TYPE_BOOMERANG) { mStatusFlags |= 0x08; } } } return 0; } /* 800F7E6C-800F7F0C .text timeCount__8daItem_cFv */ void daItem_c::timeCount() { /* Nonmatching */ } /* 800F7F0C-800F7F50 .text mode_wait_init__8daItem_cFv */ void daItem_c::mode_wait_init() { /* Nonmatching */ } /* 800F7F50-800F80CC .text mode_water_init__8daItem_cFv */ void daItem_c::mode_water_init() { /* Nonmatching */ } /* 800F80CC-800F844C .text mode_wait__8daItem_cFv */ void daItem_c::mode_wait() { /* Nonmatching */ } /* 800F844C-800F8528 .text mode_water__8daItem_cFv */ void daItem_c::mode_water() { /* Nonmatching */ } /* 800F8528-800F8950 .text initAction__8daItem_cFv */ void daItem_c::initAction() { /* Nonmatching */ } /* 800F8950-800F8970 .text daItem_Draw__FP8daItem_c */ s32 daItem_Draw(daItem_c* i_this) { return i_this->_daItem_draw(); } /* 800F8970-800F8990 .text daItem_Execute__FP8daItem_c */ s32 daItem_Execute(daItem_c* i_this) { return i_this->_daItem_execute(); } /* 800F8990-800F89B0 .text daItem_IsDelete__FP8daItem_c */ s32 daItem_IsDelete(daItem_c* i_this) { return i_this->_daItem_isdelete(); } /* 800F89B0-800F89D0 .text daItem_Delete__FP8daItem_c */ s32 daItem_Delete(daItem_c* i_this) { return i_this->_daItem_delete(); } /* 800F89D0-800F89F0 .text daItem_Create__FP10fopAc_ac_c */ s32 daItem_Create(fopAc_ac_c* i_this) { return ((daItem_c*)i_this)->_daItem_create(); } /* 800F89F0-800F89F8 .text _daItem_isdelete__8daItem_cFv */ s32 daItem_c::_daItem_isdelete() { return 1; } static actor_method_class l_daItem_Method = { (process_method_func)daItem_Create, (process_method_func)daItem_Delete, (process_method_func)daItem_Execute, (process_method_func)daItem_IsDelete, (process_method_func)daItem_Draw, }; extern actor_process_profile_definition g_profile_ITEM = { /* LayerID */ fpcLy_CURRENT_e, /* ListID */ 7, /* ListPrio */ fpcPi_CURRENT_e, /* ProcName */ PROC_ITEM, /* Proc SubMtd */ &g_fpcLf_Method.mBase, /* Size */ sizeof(daItem_c), /* SizeOther */ 0, /* Parameters */ 0, /* Leaf SubMtd */ &g_fopAc_Method.base, /* Priority */ 0x00F5, /* Actor SubMtd */ &l_daItem_Method, /* Status */ 0x000C0100, /* Group */ fopAc_ACTOR_e, /* CullType */ fopAc_CULLBOX_0_e, };