diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2023-04-21 07:18:49 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-21 08:18:49 -0600 |
| commit | e1a0f636e5c68d53b4e00a4cff85700f6588ef1b (patch) | |
| tree | 6e3419441ec2cdfbedf4dbb5abfd6017ac5b3156 /rel | |
| parent | f5fc527d39c754fde87aeb90033d2efd698ad7e2 (diff) | |
e_ym / obj_volcball wip. obj_mgate done (#318)
* e_ym / obj_volcball wip. obj_mgate done
* remove asm
---------
Co-authored-by: root <root@DESKTOP-BTVP2BC>
Diffstat (limited to 'rel')
| -rw-r--r-- | rel/d/a/e/d_a_e_ym/d_a_e_ym.cpp | 832 | ||||
| -rw-r--r-- | rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate.cpp | 606 | ||||
| -rw-r--r-- | rel/d/a/obj/d_a_obj_volcball/Makefile | 2 | ||||
| -rw-r--r-- | rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball.cpp | 1484 | ||||
| -rw-r--r-- | rel/d/a/obj/d_a_obj_volcball/unknown_translation_unit_bss.cpp | 27 |
5 files changed, 1699 insertions, 1252 deletions
diff --git a/rel/d/a/e/d_a_e_ym/d_a_e_ym.cpp b/rel/d/a/e/d_a_e_ym/d_a_e_ym.cpp index 961689a0b1..3715acc39b 100644 --- a/rel/d/a/e/d_a_e_ym/d_a_e_ym.cpp +++ b/rel/d/a/e/d_a_e_ym/d_a_e_ym.cpp @@ -4,8 +4,9 @@ */ #include "rel/d/a/e/d_a_e_ym/d_a_e_ym.h" +#include "d/d_path.h" +#include "SSystem/SComponent/c_math.h" #include "dol2asm.h" -#include "dolphin/types.h" // // Types: @@ -15,20 +16,8 @@ struct daTag_FWall_c { /* 80815958 */ void getPos(u8); }; -struct daPy_py_c { - /* 8015F424 */ void checkNowWolfEyeUp(); - /* 8081593C */ void getLeftHandPos() const; - - static u8 m_midnaActor[4]; -}; - -struct daE_YM_HIO_c { - /* 8080812C */ daE_YM_HIO_c(); - /* 80815458 */ ~daE_YM_HIO_c(); -}; - struct E_YM_n { - static u8 cc_sph_src[64]; + static dCcD_SrcSph cc_sph_src; }; // @@ -268,14 +257,12 @@ extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" void strcmp(); extern "C" extern void* __vt__8dCcD_Sph[36]; extern "C" extern void* __vt__9dCcD_Stts[11]; extern "C" extern void* __vt__12cCcD_SphAttr[25]; extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; extern "C" extern void* __vt__9cCcD_Stts[8]; extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; extern "C" u8 sincosTable___5JMath[65536]; extern "C" extern u8 JPTracePCB4[4]; @@ -437,11 +424,17 @@ SECTION_DATA static u8 eff_id[6 + 2 /* padding */] = { #pragma pop /* 80815B3C-80815B7C 000038 0040+00 1/1 0/0 0/0 .data cc_sph_src__6E_YM_n */ -SECTION_DATA u8 E_YM_n::cc_sph_src[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x75, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, +dCcD_SrcSph E_YM_n::cc_sph_src = { + { + {0, {{0x400, 1, 13}, {0xD8FBFDFF, 3}, 0x75}}, + {dCcD_SE_METAL, 0, 0, 0, {0}}, + {dCcD_SE_NONE, 0, 0, 0, {2}}, + {0}, + }, + { + {0.0f, 0.0f, 0.0f}, + 40.0f, + }, }; /* 80815B7C-80815B84 000078 0008+00 0/0 0/0 0/0 .data w_eff_id$5427 */ @@ -480,9 +473,7 @@ SECTION_DATA static void* lit_7049[11] = { }; /* 80815BD0-80815BDC 0000CC 000C+00 1/1 0/0 0/0 .data YM_DIG_POS_Y$7355 */ -SECTION_DATA static u8 YM_DIG_POS_Y[12] = { - 0xC1, 0x70, 0x00, 0x00, 0xC1, 0xF0, 0x00, 0x00, 0xC2, 0x8C, 0x00, 0x00, -}; +SECTION_DATA static Vec YM_DIG_POS_Y = {-15.0f, -30.0f, -70.0f}; /* 80815BDC-80815C28 -00001 004C+00 1/1 0/0 0/0 .data @8522 */ SECTION_DATA static void* lit_8522[19] = { @@ -598,6 +589,19 @@ SECTION_DATA extern void* __vt__12daE_YM_HIO_c[3] = { }; /* 8080812C-80808184 0000EC 0058+00 1/1 0/0 0/0 .text __ct__12daE_YM_HIO_cFv */ +// matches with literals +#ifdef NONMATCHING +daE_YM_HIO_c::daE_YM_HIO_c() { + field_0x4 = -1; + mFlyMoveSpeed = 20.0f; + mFlyAttackSpeed = 30.0f; + mModelSize = 0.6f; + mElectricInvincibilityTimeExtension = 3.0f; + mMoveSpeed = 13.0f; + mSurpriseDistance = 400.0f; + mMoveRange = 300.0f; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -606,16 +610,12 @@ asm daE_YM_HIO_c::daE_YM_HIO_c() { #include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/__ct__12daE_YM_HIO_cFv.s" } #pragma pop +#endif /* 80808184-808081E0 000144 005C+00 3/3 0/0 0/0 .text checkBck__8daE_YM_cFPCci */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::checkBck(char const* param_0, int param_1) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/checkBck__8daE_YM_cFPCci.s" +BOOL daE_YM_c::checkBck(char const* i_arcName, int i_resNo) { + return field_0x5b4->getAnm() == (J3DAnmTransform*)dComIfG_getObjectRes(i_arcName, i_resNo); } -#pragma pop /* ############################################################################################## */ /* 808159DC-808159E0 000048 0004+00 0/4 0/0 0/0 .rodata @3987 */ @@ -629,32 +629,42 @@ COMPILER_STRIP_GATE(0x808159DC, &lit_3987); SECTION_RODATA static f32 const lit_3988 = -1.0f; COMPILER_STRIP_GATE(0x808159E0, &lit_3988); -/* 80815AEC-80815AEC 000158 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80815AEC = "E_TM"; -SECTION_DEAD static char const* const stringBase_80815AF1 = "E_YM"; -#pragma pop - /* 808081E0-80808328 0001A0 0148+00 18/18 0/0 0/0 .text bckSet__8daE_YM_cFiUcff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::bckSet(int param_0, u8 param_1, f32 param_2, f32 param_3) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/bckSet__8daE_YM_cFiUcff.s" +void daE_YM_c::bckSet(int i_resID, u8 i_attribute, f32 i_morf, f32 i_speed) { + int tm_res_id; + + if (mFlyType == true) { + switch (i_resID) { + case 6: + tm_res_id = 8; + break; + case 15: + tm_res_id = 9; + break; + case 16: + i_speed = FLOAT_LABEL(lit_3987); + tm_res_id = 10; + break; + case 14: + tm_res_id = 10; + break; + default: + tm_res_id = 9; + } + + field_0x5b4->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_TM", tm_res_id), i_attribute, + i_morf, i_speed, FLOAT_LABEL(lit_3926), FLOAT_LABEL(lit_3988)); + } else { + field_0x5b4->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_YM", i_resID), i_attribute, + i_morf, i_speed, FLOAT_LABEL(lit_3926), FLOAT_LABEL(lit_3988)); + } } -#pragma pop /* 80808328-808083CC 0002E8 00A4+00 4/4 0/0 0/0 .text bckSetFly__8daE_YM_cFiUcff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::bckSetFly(int param_0, u8 param_1, f32 param_2, f32 param_3) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/bckSetFly__8daE_YM_cFiUcff.s" +void daE_YM_c::bckSetFly(int i_resID, u8 i_attribute, f32 i_morf, f32 i_speed) { + field_0x5b4->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_TM", i_resID), i_attribute, + i_morf, i_speed, FLOAT_LABEL(lit_3926), FLOAT_LABEL(lit_3988)); } -#pragma pop /* ############################################################################################## */ /* 808159E4-808159E8 000050 0004+00 0/1 0/0 0/0 .rodata @4101 */ @@ -672,24 +682,90 @@ COMPILER_STRIP_GATE(0x808159E8, &lit_4102); #pragma pop /* 808083CC-80808678 00038C 02AC+00 1/1 0/0 0/0 .text draw__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::draw() { +// one instruction order mismatch (probably causes regalloc issue) +#ifdef NONMATCHING +int daE_YM_c::draw() { + if (field_0x71d) { + return 1; + } + + if (daPy_py_c::checkNowWolfEyeUp()) { + cLib_addCalc2(&field_0x6d4, 255.0f, 1.0f, 30.0f); + } else if (mAction == ACT_DOWN) { + cLib_addCalc2(&field_0x6d4, 255.0f, 1.0f, 30.0f); + } else { + cLib_addCalc2(&field_0x6d4, 0.0f, 1.0f, 30.0f); + } + + bool bvar = true; + + if (field_0x710 != 0) { + if (field_0x6d4 == 0.0f) { + return 1; + } + + if (mIsHide && mAction != ACT_RAIL && mAction != ACT_BACK_RAIL) { + bvar = false; + } + } else { + field_0x710 = 1; + } + + if (mFlyType == true) { + J3DShape* shape_p = + field_0x5b4->getModel()->getModelData()->getMaterialNodePointer(1)->getShape(); + + if (shape_p != NULL) { + if (field_0x6cc) { + shape_p->show(); + } else { + shape_p->hide(); + } + } + } + + J3DModel* model_p = field_0x5b4->getModel(); + g_env_light.settingTevStruct(6, ¤t.pos, &mTevStr); + g_env_light.setLightTevColorType_MAJI(model_p->getModelData(), &mTevStr); + + J3DModelData* modelData_p = model_p->getModelData(); + for (u16 i = 0; i < modelData_p->getMaterialNum(); i++) { + modelData_p->getMaterialNodePointer(i)->getTevKColor(3)->a = field_0x6d4; + } + + if (bvar) { + if (field_0x6dc != -70.0f) { + field_0x5b8->entry(model_p->getModelData()); + dComIfGd_setListDark(); + field_0x5b4->entryDL(); + dComIfGd_setList(); + } + + cXyz sp40; + sp40.set(current.pos.x, current.pos.y + 100.0f, current.pos.z); + + field_0x69c = dComIfGd_setShadow(field_0x69c, 1, model_p, &sp40, 400.0f, 0.0f, + current.pos.y, field_0x760.GetGroundH(), field_0x760.m_gnd, + &mTevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + } + + return 1; +} +#else +#pragma push +#pragma optimization_level 0 +#pragma optimizewithasm off +asm int daE_YM_c::draw() { nofralloc #include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/draw__8daE_YM_cFv.s" } #pragma pop +#endif /* 80808678-80808698 000638 0020+00 1/0 0/0 0/0 .text daE_YM_Draw__FP8daE_YM_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daE_YM_Draw(daE_YM_c* param_0) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/daE_YM_Draw__FP8daE_YM_c.s" +static int daE_YM_Draw(daE_YM_c* i_this) { + return i_this->draw(); } -#pragma pop /* ############################################################################################## */ /* 80815D28-80815D2C 000008 0004+00 2/2 0/0 0/0 .bss None */ @@ -702,22 +778,47 @@ static u8 lit_3941[12]; static u8 l_HIO[36]; /* 80815D5C-80815D60 00003C 0004+00 3/3 0/0 0/0 .bss m_near_obj */ -static u8 m_near_obj[4]; +static fopAc_ac_c* m_near_obj; /* 80815D60-80815D64 000040 0004+00 3/3 0/0 0/0 .bss m_obj_dist */ -static u8 m_obj_dist[4]; +static f32 m_obj_dist; /* 80808698-80808768 000658 00D0+00 2/2 0/0 0/0 .text s_obj_sub__FPvPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void s_obj_sub(void* param_0, void* param_1) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/s_obj_sub__FPvPv.s" +static void* s_obj_sub(void* param_0, void* param_1) { + fopAc_ac_c* e_ym; + fopAc_ac_c* near_obj; + + near_obj = (fopAc_ac_c*)param_0; + e_ym = (fopAc_ac_c*)param_1; + + if (fopAcM_IsActor(near_obj) && fopAcM_GetName(near_obj) == PROC_Obj_Carry) { + if (!fpcM_IsCreating(fopAcM_GetID(near_obj))) { + f32 obj_dist = fopAcM_searchActorDistanceXZ(near_obj, e_ym); + + if (obj_dist < FLOAT_LABEL(lit_3925) && obj_dist < m_obj_dist && + fabsf(fopAcM_searchActorDistanceY(near_obj, e_ym)) < FLOAT_LABEL(lit_3947)) + { + m_near_obj = near_obj; + m_obj_dist = obj_dist; + } + } + } + + return 0; } -#pragma pop /* 80808768-80808884 000728 011C+00 1/1 0/0 0/0 .text setDigEffect__8daE_YM_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_YM_c::setDigEffect() { + cXyz sp1C(field_0x68c, field_0x68c, field_0x68c); + cXyz sp28(current.pos); + sp28.y += field_0x6dc; + + field_0xad8 = dComIfGp_particle_set(field_0xad8, 0x83A8, &sp28, &shape_angle, &sp1C); + field_0xadc = dComIfGp_particle_set(field_0xadc, 0x83A9, &sp28, &shape_angle, &sp1C); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -726,6 +827,7 @@ asm void daE_YM_c::setDigEffect() { #include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/setDigEffect__8daE_YM_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 808159EC-808159F0 000058 0004+00 0/16 0/0 0/0 .rodata @4214 */ @@ -781,14 +883,36 @@ COMPILER_STRIP_GATE(0x808159F4, &lit_4416); #pragma pop /* 80808E34-80809000 000DF4 01CC+00 3/3 0/0 0/0 .text checkWallCrash__8daE_YM_cFv */ +// matches with literals +#ifdef NONMATCHING +bool daE_YM_c::checkWallCrash() { + if (mType == 1 && (daPy_getPlayerActorClass()->checkFrontRollCrash() || + daPy_getPlayerActorClass()->checkWolfAttackReverse())) + { + cXyz tmp = daPy_getPlayerActorClass()->current.pos - field_0x670; + if (tmp.absXZ() < 600.0f) { + if (mTagPosP != NULL) { + setActionMode(ACT_FLY); + } else { + setActionMode(ACT_FALL); + } + + return true; + } + } + + return false; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_YM_c::checkWallCrash() { +asm bool daE_YM_c::checkWallCrash() { nofralloc #include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/checkWallCrash__8daE_YM_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 808159F8-808159FC 000064 0004+00 0/1 0/0 0/0 .rodata @4472 */ @@ -874,24 +998,21 @@ asm void daE_YM_c::checkSurpriseNear() { #pragma pop /* 80809D6C-80809D84 001D2C 0018+00 6/6 0/0 0/0 .text setNormalCc__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::setNormalCc() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/setNormalCc__8daE_YM_cFv.s" +void daE_YM_c::setNormalCc() { + mSphCc.SetCoSPrm(0x75); + mSphCc.SetTgType(0xD8FBFDFF); } -#pragma pop /* 80809D84-80809DA8 001D44 0024+00 7/7 0/0 0/0 .text setAppear__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::setAppear() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/setAppear__8daE_YM_cFv.s" +void daE_YM_c::setAppear() { + mIsHide = false; + + if (field_0x6a6 != 4) { + mType = 0; + } + + field_0x714 = 4; } -#pragma pop /* ############################################################################################## */ /* 80815A10-80815A14 00007C 0004+00 0/1 0/0 0/0 .rodata @4871 */ @@ -933,14 +1054,14 @@ asm void daE_YM_c::setTurnSound() { #pragma pop /* 80809F9C-80809FC4 001F5C 0028+00 26/26 0/0 0/0 .text setActionMode__8daE_YM_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::setActionMode(int param_0) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/setActionMode__8daE_YM_cFi.s" +void daE_YM_c::setActionMode(int i_action) { + mLastAction = mAction; + mAction = i_action; + mMode = 0; + field_0x6f2 = 0; + field_0x6f0 = 0; + current.angle.y = shape_angle.y; } -#pragma pop /* ############################################################################################## */ /* 80815A1C-80815A20 000088 0004+00 0/7 0/0 0/0 .rodata @5021 */ @@ -1104,14 +1225,46 @@ extern "C" asm void __dt__8cM3dGPlaFv() { #pragma pop /* 8080BB7C-8080BCFC 003B3C 0180+00 1/1 0/0 0/0 .text damage_check__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::damage_check() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/damage_check__8daE_YM_cFv.s" +void daE_YM_c::damage_check() { + if (field_0x6f4 != 0 || mAction == ACT_RIVER || mAction == ACT_DOWN) { + return; + } + + field_0x938.Move(); + + if (mSphCc.ChkTgHit()) { + mAtInfo.mpCollider = mSphCc.GetTgHitObj(); + + if (field_0x700 == 0 || !mAtInfo.mpCollider->ChkAtType(0xD8000000)) { + cc_at_check(this, &mAtInfo); + + if (mAtInfo.mpCollider->ChkAtType(0xD8000000)) { + field_0x6f4 = 20; + } else { + field_0x6f4 = 10; + } + + if (mAtInfo.mAttackPower <= 1) { + field_0x6f4 = 10; + } + + if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_BOOMERANG)) { + if (mIsHide) { + setActionMode(ACT_WIND); + } + } else if (mType != 2) { + field_0x5bc.startCreatureSound(Z2SE_EN_YM_DEATH, 0, -1); + + if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_10000000)) { + i_dComIfGp_setHitMark(3, this, &mEyePos, NULL, NULL, 0); + } + + setActionMode(ACT_DOWN); + executeDown(); + } + } + } } -#pragma pop /* ############################################################################################## */ /* 80815A58-80815A5C 0000C4 0004+00 0/5 0/0 0/0 .rodata @5724 */ @@ -1358,14 +1511,20 @@ asm void daE_YM_c::checkFlyTerritory() { #pragma pop /* 8080E630-8080E6A0 0065F0 0070+00 1/1 0/0 0/0 .text initFly__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::initFly() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/initFly__8daE_YM_cFv.s" +void daE_YM_c::initFly() { + mAttentionInfo.field_0x0[2] = 46; + mGravity = FLOAT_LABEL(lit_3926); + field_0x6e4 = 0; + + if (mTagPosP != NULL) { + field_0x670 = mTagPos; + } else { + field_0x670 = orig.pos; + } + + mType = 3; + shape_angle.x = 0; } -#pragma pop /* ############################################################################################## */ /* 80815A98-80815A9C 000104 0004+00 0/2 0/0 0/0 .rodata @7042 */ @@ -1393,14 +1552,18 @@ asm void daE_YM_c::executeFly() { #pragma pop /* 8080F8C8-8080F92C 007888 0064+00 1/1 0/0 0/0 .text setInclination__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::setInclination() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/setInclination__8daE_YM_cFv.s" +void daE_YM_c::setInclination() { + s16 tan = cM_atan2s(speedF, speed.y) - 0x4000; + if (tan < -6000) { + tan = -6000; + } + + if (tan > 6000) { + tan = 6000; + } + + cLib_chaseAngleS(&shape_angle.x, tan, 0x0180); } -#pragma pop /* 8080F92C-80810084 0078EC 0758+00 1/1 0/0 0/0 .text executeFlyAttack__8daE_YM_cFv */ #pragma push @@ -1453,14 +1616,23 @@ asm void daE_YM_c::executeBackRail() { #pragma pop /* 80810DF8-80810E64 008DB8 006C+00 1/1 0/0 0/0 .text checkElectricStart__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::checkElectricStart() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/checkElectricStart__8daE_YM_cFv.s" +void daE_YM_c::checkElectricStart() { + if (field_0x6a1 == 1) { + if (mAction != ACT_WAIT && mAction != ACT_SURPRISE) { + field_0x6c9 = 0; + field_0x708 = 0; + } else if (field_0x708 != 0) { + field_0x708--; + + if (field_0x708 == 0) { + field_0x6c9 = 1; + } + } + } else { + field_0x6c9 = 0; + field_0x708 = 0; + } } -#pragma pop /* ############################################################################################## */ /* 80815AA0-80815AA4 00010C 0004+00 0/2 0/0 0/0 .rodata @7044 */ @@ -1587,14 +1759,9 @@ asm void daE_YM_c::setRiverAttention() { #pragma pop /* 808123C4-808123D0 00A384 000C+00 0/0 0/0 1/1 .text setLockByCargo__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::setLockByCargo() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/setLockByCargo__8daE_YM_cFv.s" +void daE_YM_c::setLockByCargo() { + field_0x6f2 = 90; } -#pragma pop /* ############################################################################################## */ /* 80815AC8-80815ACC 000134 0004+00 0/1 0/0 0/0 .rodata @8350 */ @@ -1622,24 +1789,34 @@ asm void daE_YM_c::executeRiver() { #pragma pop /* 80812F0C-80812FCC 00AECC 00C0+00 1/1 0/0 0/0 .text s_ym_sub__FPvPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void s_ym_sub(void* param_0, void* param_1) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/s_ym_sub__FPvPv.s" +static void* s_ym_sub(void* param_0, void* param_1) { + daE_YM_c* actor_a = (daE_YM_c*)param_0; + daE_YM_c* actor_b = (daE_YM_c*)param_1; + + if (fopAcM_IsActor(actor_a) && fopAcM_GetName(actor_a) == PROC_E_YM) { + if (!fpcM_IsCreating(fopAcM_GetID(actor_a)) && actor_a != actor_b && + actor_a->current.pos == actor_b->current.pos) + { + if (actor_b->getFriendFlag() & 1) { + actor_a->setFriendFlag(0x84); + } else { + actor_a->setFriendFlag(0x82); + } + + actor_b->setFriendFlag(0x81); + } + } + + return 0; } -#pragma pop /* 80812FCC-8081300C 00AF8C 0040+00 1/1 0/0 0/0 .text checkFrinedSamePos__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::checkFrinedSamePos() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/checkFrinedSamePos__8daE_YM_cFv.s" +void daE_YM_c::checkFrinedSamePos() { + if (mFriendFlag == 0) { + setFriendFlag(0x80); + i_fpcM_Search(s_ym_sub, this); + } } -#pragma pop /* 8081300C-80813528 00AFCC 051C+00 2/1 0/0 0/0 .text action__8daE_YM_cFv */ #pragma push @@ -1652,14 +1829,15 @@ asm void daE_YM_c::action() { #pragma pop /* 80813528-808135B0 00B4E8 0088+00 1/1 0/0 0/0 .text mtx_set__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::mtx_set() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/mtx_set__8daE_YM_cFv.s" +void daE_YM_c::mtx_set() { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y + field_0x6dc, current.pos.z); + mDoMtx_stack_c::ZXYrotM(field_0x668); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::scaleM(field_0x68c, field_0x68c, field_0x68c); + + field_0x5b4->getModel()->i_setBaseTRMtx(mDoMtx_stack_c::get()); + field_0x5b4->modelCalc(); } -#pragma pop /* ############################################################################################## */ /* 80815AD0-80815AD4 00013C 0004+00 0/1 0/0 0/0 .rodata @8621 */ @@ -1687,55 +1865,109 @@ asm void daE_YM_c::cc_set() { #pragma pop /* 808138AC-80813A10 00B86C 0164+00 1/1 0/0 0/0 .text execute__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::execute() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/execute__8daE_YM_cFv.s" +int daE_YM_c::execute() { + if (field_0x71d) { + return 1; + } + + if (field_0x6f0 != 0) { + field_0x6f0--; + } + + if (field_0x6f2 != 0) { + field_0x6f2--; + } + + if (field_0x6f4 != 0) { + field_0x6f4--; + } + + if (field_0x6f6 != 0) { + field_0x6f6--; + } + + if (field_0x6f8 != 0) { + field_0x6f8--; + } + + if (field_0x6fc != 0) { + field_0x6fc--; + } + + if (field_0x6fe != 0) { + field_0x6fe--; + } + + if (field_0x700 != 0) { + field_0x700--; + } + + if (field_0x6fa != 0) { + field_0x6fa--; + } + + if (field_0x704 != 0) { + field_0x704--; + } + + if (field_0x70a != 0) { + field_0x70a--; + } + + if (field_0x70c != 0) { + field_0x70c--; + } + + if (field_0x70e != 0) { + field_0x70e--; + } + + checkElectricStart(); + action(); + mtx_set(); + cc_set(); + return 1; } -#pragma pop /* 80813A10-80813A30 00B9D0 0020+00 2/1 0/0 0/0 .text daE_YM_Execute__FP8daE_YM_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daE_YM_Execute(daE_YM_c* param_0) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/daE_YM_Execute__FP8daE_YM_c.s" +static int daE_YM_Execute(daE_YM_c* i_this) { + return i_this->execute(); } -#pragma pop /* 80813A30-80813A38 00B9F0 0008+00 1/0 0/0 0/0 .text daE_YM_IsDelete__FP8daE_YM_c */ -static bool daE_YM_IsDelete(daE_YM_c* param_0) { - return true; +static int daE_YM_IsDelete(daE_YM_c* i_this) { + return 1; } /* 80813A38-80813AD0 00B9F8 0098+00 1/1 0/0 0/0 .text _delete__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::_delete() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/_delete__8daE_YM_cFv.s" +int daE_YM_c::_delete() { + if (mFlyType == true) { + dComIfG_resDelete(&mPhase, "E_TM"); + } else { + dComIfG_resDelete(&mPhase, "E_YM"); + } + + if (field_0xaf4) { + data_80815D28[0] = 0; + } + + if (mHeap != NULL) { + field_0x5bc.deleteObject(); + } + + return 1; } -#pragma pop /* 80813AD0-80813AF0 00BA90 0020+00 1/0 0/0 0/0 .text daE_YM_Delete__FP8daE_YM_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daE_YM_Delete(daE_YM_c* param_0) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/daE_YM_Delete__FP8daE_YM_c.s" +static int daE_YM_Delete(daE_YM_c* i_this) { + return i_this->_delete(); } -#pragma pop /* 80813AF0-80813E38 00BAB0 0348+00 1/1 0/0 0/0 .text CreateHeap__8daE_YM_cFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_YM_c::CreateHeap() { +asm int daE_YM_c::CreateHeap() { nofralloc #include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/CreateHeap__8daE_YM_cFv.s" } @@ -1752,21 +1984,16 @@ extern "C" asm void __ct__4cXyzFv() { #pragma optimization_level 0 #pragma optimizewithasm off // asm J3DFrameCtrl::~J3DFrameCtrl() { -extern "C" asm void __dt__12J3DFrameCtrlFv(){ +extern "C" asm void __dt__12J3DFrameCtrlFv() { nofralloc #include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/__dt__12J3DFrameCtrlFv.s" } #pragma pop /* 80813E84-80813EA4 00BE44 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void useHeapInit(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/useHeapInit__FP10fopAc_ac_c.s" +static int useHeapInit(fopAc_ac_c* i_this) { + return static_cast<daE_YM_c*>(i_this)->CreateHeap(); } -#pragma pop /* ############################################################################################## */ /* 80815AD8-80815ADC 000144 0004+00 0/2 0/0 0/0 .rodata @8964 */ @@ -1832,14 +2059,26 @@ asm void daE_YM_c::checkWall() { #pragma pop /* 80814AF0-80814BA4 00CAB0 00B4+00 1/1 0/0 0/0 .text setHideType__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::setHideType() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/setHideType__8daE_YM_cFv.s" +void daE_YM_c::setHideType() { + mIsHide = true; + mSphCc.SetCoSPrm(0x145); + mSphCc.SetTgType(0x10000); + + m_near_obj = NULL; + m_obj_dist = FLOAT_LABEL(lit_3925); + + i_fpcM_Search(s_obj_sub, this); + + if (m_near_obj != NULL) { + cXyz obj_pos(m_near_obj->current.pos); + + current.pos.x = obj_pos.x; + current.pos.z = obj_pos.z; + field_0x6a6 = 1; + } else { + field_0x6a6 = 3; + } } -#pragma pop /* ############################################################################################## */ /* 80815AE4-80815AEC 000150 0008+00 0/1 0/0 0/0 .rodata @9420 */ @@ -1858,14 +2097,192 @@ SECTION_DEAD static char const* const stringBase_80815AFE = "E_ym"; #pragma pop /* 80814BA4-80815224 00CB64 0680+00 2/1 0/0 0/0 .text create__8daE_YM_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_YM_c::create() { +// literals / small issue +#ifdef NONMATCHING +int daE_YM_c::create() { + if (!fopAcM_CheckCondition(this, 8)) { + new (this) daE_YM_c(); + fopAcM_OnCondition(this, 8); + } + + mType = fopAcM_GetParam(this); + if (mType == 0xFF) { + mType = 0; + } + + mSwitchBit = fopAcM_GetParam(this) >> 0x18; + + u8 prm2 = fopAcM_GetParam(this) >> 0x10; + if (prm2 == 0xFF) { + prm2 = 0; + } + + field_0x6e0 = prm2 * 100.0f; + + u8 prm1 = fopAcM_GetParam(this) >> 0x8; + u8 tmp0 = current.angle.z >> 8; + + mTagNo = (u8)current.angle.z; + field_0x6a1 = 1; + + if ((current.angle.x & 3) != 0) { + field_0x6a1 = 0; + } + + if ((current.angle.x & 12) != 0) { + field_0x6cb = 1; + } + + field_0x6a3 = (u8)(current.angle.x >> 8); + + if (mSwitchBit != 0xFF && dComIfGs_isSwitch(mSwitchBit, fopAcM_GetRoomNo(this))) { + return cPhs_ERROR_e; + } + + if ((mTagNo != 0 && mTagNo != 0xFF) || (mType == 6 || mType == 3 || mType == 7)) { + mFlyType = true; + } else { + mFlyType = false; + } + + int phase; + if (mFlyType == true) { + phase = dComIfG_resLoad(&mPhase, "E_TM"); + } else { + phase = dComIfG_resLoad(&mPhase, "E_YM"); + } + + if (phase == cPhs_COMPLEATE_e) { + current.angle.z = 0; + current.angle.x = 0; + shape_angle.z = 0; + shape_angle.x = 0; + + if (!fopAcM_entrySolidHeap(this, (heapCallbackFunc)useHeapInit, 0x28B0)) { + return cPhs_ERROR_e; + } + + if (!data_80815D28[0]) { + field_0xaf4 = 1; + data_80815D28[0] = true; + l_HIO.field_0x4 = -1; + } + + field_0x714 = 4; + mAttentionInfo.field_0x0[2] = 58; + fopAcM_SetMtx(this, field_0x5b4->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -200.0f, -100.0f, -200.0f); + fopAcM_SetMax(this, 200.0f, 100.0f, 200.0f); + + field_0x760.Set(¤t.pos, &next.pos, this, 1, &field_0x720, &speed, NULL, NULL); + field_0x760.OnLineCheck(); + field_0x720.SetWall(30.0f, 60.0f); + + mHealth = 10; + field_0x560 = 10; + + field_0x938.Init(100, 0, this); + mSphCc.Set(E_YM_n::cc_sph_src); + mSphCc.SetStts(&field_0x938); + + field_0x5bc.init(¤t.pos, &mEyePos, 3, 1); + field_0x5bc.setEnemyName("E_ym"); + mAtInfo.mpSound = &field_0x5bc; + mAtInfo.mPowerType = 1; + field_0x68c = 0.6f; + + switch (mType) { + case 0: + field_0x670 = current.pos; + setActionMode(ACT_WAIT); + break; + case 1: + checkInitialWall(); + field_0x670 = current.pos; + setActionMode(ACT_WAIT); + break; + case 2: + setActionMode(ACT_WAIT); + mMode = 100; + break; + case 3: + setActionMode(ACT_FLY); + mMode = 2; + break; + case 4: + if (tmp0 != 0xFF) { + mpPath = dPath_GetRoomPath(tmp0, fopAcM_GetRoomNo(this)); + + if (mpPath != NULL) { + mAttentionInfo.field_0x4[3] = 31; + field_0x6a6 = 4; + field_0x670 = current.pos; + setActionMode(ACT_WAIT); + break; + } + } + + mType = 0; + field_0x670 = current.pos; + setActionMode(ACT_WAIT); + break; + case 5: + if (field_0x6a3 == 0xFF) { + mType = 0; + field_0x670 = current.pos; + setActionMode(ACT_WAIT); + } else { + if (tmp0 != 0xFF) { + mpPath = dPath_GetRoomPath(tmp0, fopAcM_GetRoomNo(this)); + } + + setActionMode(ACT_SWITCH); + if (dComIfGs_isSwitch(field_0x6a3, fopAcM_GetRoomNo(this))) { + mMode = 10; + } + } + break; + case 6: + setActionMode(ACT_FIRE); + break; + case 7: + if (tmp0 != 0xFF) { + mpPath = dPath_GetRoomPath(tmp0, fopAcM_GetRoomNo(this)); + } + + if (prm1 != 0xFF) { + field_0x6b0 = dPath_GetRoomPath(prm1, fopAcM_GetRoomNo(this)); + } + + if (mpPath != NULL || field_0x6b0 != NULL) { + field_0x68c = 1.5f; + setActionMode(ACT_RIVER); + break; + } + + return cPhs_ERROR_e; + } + + field_0x6cc = 1; + if (mFlyType == true && mType != 3) { + field_0x6cc = 0; + } + + daE_YM_Execute(this); + } + + return phase; +} +#else +#pragma push +#pragma optimization_level 0 +#pragma optimizewithasm off +asm int daE_YM_c::create() { nofralloc #include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/create__8daE_YM_cFv.s" } #pragma pop +#endif /* 80815224-8081526C 00D1E4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */ #pragma push @@ -1923,14 +2340,9 @@ extern "C" asm void __dt__12dBgS_AcchCirFv() { #pragma pop /* 808153F0-80815410 00D3B0 0020+00 1/0 0/0 0/0 .text daE_YM_Create__FP8daE_YM_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daE_YM_Create(daE_YM_c* param_0) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/daE_YM_Create__FP8daE_YM_c.s" +static int daE_YM_Create(daE_YM_c* i_this) { + return i_this->create(); } -#pragma pop /* 80815410-80815458 00D3D0 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ #pragma push @@ -1957,8 +2369,7 @@ asm daE_YM_HIO_c::~daE_YM_HIO_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __sinit_d_a_e_ym_cpp() { - nofralloc +asm void __sinit_d_a_e_ym_cpp(){nofralloc #include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/__sinit_d_a_e_ym_cpp.s" } #pragma pop @@ -2015,7 +2426,8 @@ extern "C" asm void __dt__4cXyzFv() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daPy_py_c::getLeftHandPos() const { +// asm void daPy_py_c::getLeftHandPos() const { +extern "C" asm void getLeftHandPos__9daPy_py_cCFv() { nofralloc #include "asm/rel/d/a/e/d_a_e_ym/d_a_e_ym/getLeftHandPos__9daPy_py_cCFv.s" } diff --git a/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate.cpp b/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate.cpp index 59642804c2..03f192914d 100644 --- a/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate.cpp +++ b/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate.cpp @@ -1,254 +1,92 @@ -// -// Generated By: dol2asm -// Translation Unit: d_a_obj_mgate -// +/** + * d_a_obj_mgate.cpp + * Ordon Spring / Bridge Gates + */ #include "rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate.h" -#include "dol2asm.h" -#include "dolphin/types.h" - -// -// Types: -// - -struct request_of_phase_process_class {}; - -struct cXyz {}; - -struct mDoMtx_stack_c { - /* 8000CDD4 */ void transM(cXyz const&); - - static u8 now[48]; -}; - -struct fopAc_ac_c {}; - -struct daObjMGate_c { - /* 805935B8 */ void initBaseMtx(); - /* 80593630 */ void setBaseMtx(); - /* 80593760 */ void Create(); - /* 805937AC */ void CreateHeap(); - /* 8059388C */ void create1st(); - /* 80593988 */ void Execute(f32 (**)[3][4]); - /* 80593C4C */ void Draw(); - /* 80593D18 */ void Delete(); -}; - -struct dKy_tevstr_c {}; - -struct J3DModelData {}; - -struct dScnKy_env_light_c { - /* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*); - /* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*); -}; - -struct dRes_info_c {}; - -struct dRes_control_c { - /* 8003C37C */ void getRes(char const*, char const*, dRes_info_c*, int); - /* 8003C6B8 */ void getObjectResName2Index(char const*, char const*); -}; - -struct dBgW {}; - -struct cBgS_PolyInfo {}; - -struct csXyz {}; - -struct dBgS_MoveBgActor { - /* 80078624 */ dBgS_MoveBgActor(); - /* 800786B0 */ bool IsDelete(); - /* 800786B8 */ bool ToFore(); - /* 800786C0 */ bool ToBack(); - /* 800787BC */ void MoveBGCreate(char const*, int, - void (*)(dBgW*, void*, cBgS_PolyInfo const&, bool, cXyz*, - csXyz*, csXyz*), - u32, f32 (*)[3][4]); - /* 800788DC */ void MoveBGDelete(); - /* 80078950 */ void MoveBGExecute(); -}; - -struct JAISoundID {}; - -struct Vec {}; - -struct Z2SeMgr { - /* 802AB984 */ void seStart(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); -}; - -struct Z2AudioMgr { - static u8 mAudioMgrPtr[4 + 4 /* padding */]; -}; - -struct JMath { - static u8 sincosTable_[65536]; -}; - -struct J3DModel {}; - -// -// Forward References: -// - -extern "C" void initBaseMtx__12daObjMGate_cFv(); -extern "C" void setBaseMtx__12daObjMGate_cFv(); -extern "C" void Create__12daObjMGate_cFv(); -extern "C" void CreateHeap__12daObjMGate_cFv(); -extern "C" void create1st__12daObjMGate_cFv(); -extern "C" void Execute__12daObjMGate_cFPPA3_A4_f(); -extern "C" void Draw__12daObjMGate_cFv(); -extern "C" void Delete__12daObjMGate_cFv(); -extern "C" static void daObjMGate_create1st__FP12daObjMGate_c(); -extern "C" static void daObjMGate_MoveBGDelete__FP12daObjMGate_c(); -extern "C" static void daObjMGate_MoveBGExecute__FP12daObjMGate_c(); -extern "C" static void daObjMGate_MoveBGDraw__FP12daObjMGate_c(); -extern "C" extern char const* const d_a_obj_mgate__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void transM__14mDoMtx_stack_cFRC4cXyz(); -extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfGp_getReverb__Fi(); -extern "C" void dLib_checkActorInRectangle__FP10fopAc_ac_cP10fopAc_ac_cPC4cXyzPC4cXyz(); -extern "C" void getRes__14dRes_control_cFPCcPCcP11dRes_info_ci(); -extern "C" void getObjectResName2Index__14dRes_control_cFPCcPCc(); -extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz(); -extern "C" void __ct__16dBgS_MoveBgActorFv(); -extern "C" bool IsDelete__16dBgS_MoveBgActorFv(); -extern "C" bool ToFore__16dBgS_MoveBgActorFv(); -extern "C" bool ToBack__16dBgS_MoveBgActorFv(); -extern "C" void -MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f(); -extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv(); -extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv(); -extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c(); -extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); -extern "C" void cLib_addCalc0__FPfff(); -extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); -extern "C" void PSMTXCopy(); -extern "C" void PSMTXTrans(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_env_light[4880]; -extern "C" extern u8 j3dSys[284]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; - -// -// Declarations: -// +#include "SSystem/SComponent/c_math.h" /* ############################################################################################## */ /* 80593E48-80593E60 000000 0018+00 2/2 0/0 0/0 .rodata l_key_offset */ -SECTION_RODATA static u8 const l_key_offset[24] = { - 0x43, 0x4D, 0x00, 0x00, 0x43, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x43, 0x66, 0x00, 0x00, 0x43, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static Vec const l_key_offset[2] = { + {205.0f, 180.0f, 0.0f}, + {230.0f, 180.0f, 0.0f}, }; -COMPILER_STRIP_GATE(0x80593E48, &l_key_offset); /* 80593E60-80593E74 000018 0014+00 0/0 0/0 0/0 .rodata l_col_offsetX */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_col_offsetX[20] = { - 0x42, 0xA0, 0x00, 0x00, 0x43, 0x20, 0x00, 0x00, 0x43, 0x70, - 0x00, 0x00, 0x43, 0xA0, 0x00, 0x00, 0x43, 0xC8, 0x00, 0x00, +static f32 const l_col_offsetX[5] = { + 80.0f, 160.0f, 240.0f, 320.0f, 400.0f, }; -COMPILER_STRIP_GATE(0x80593E60, &l_col_offsetX); -#pragma pop /* 80593E74-80593EA4 00002C 0030+00 0/1 0/0 0/0 .rodata l_roll_crash_check_areaL */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_roll_crash_check_areaL[48] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x0C, 0x00, 0x00, 0x43, 0xCD, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC3, 0x0C, 0x00, 0x00, 0x43, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x43, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x0C, 0x00, 0x00, +static Vec const l_roll_crash_check_areaL[4] = { + {0.0f, 0.0f, -140.0f}, + {410.0f, 0.0f, -140.0f}, + {410.0f, 0.0f, 140.0f}, + {0.0f, 0.0f, 140.0f}, }; -COMPILER_STRIP_GATE(0x80593E74, &l_roll_crash_check_areaL); -#pragma pop /* 80593EA4-80593ED4 00005C 0030+00 0/1 0/0 0/0 .rodata l_roll_crash_check_areaL2 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const l_roll_crash_check_areaL2[48] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x0C, 0x00, 0x00, 0x43, 0xE6, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xC3, 0x0C, 0x00, 0x00, 0x43, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x43, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x0C, 0x00, 0x00, +static Vec const l_roll_crash_check_areaL2[4] = { + {0.0f, 0.0f, -140.0f}, + {460.0f, 0.0f, -140.0f}, + {460.0f, 0.0f, 140.0f}, + {0.0f, 0.0f, 140.0f}, }; -COMPILER_STRIP_GATE(0x80593EA4, &l_roll_crash_check_areaL2); -#pragma pop - -/* 80593ED4-80593ED8 00008C 0004+00 1/2 0/0 0/0 .rodata @3670 */ -SECTION_RODATA static f32 const lit_3670 = -1.0f; -COMPILER_STRIP_GATE(0x80593ED4, &lit_3670); /* 805935B8-80593630 000078 0078+00 1/1 0/0 0/0 .text initBaseMtx__12daObjMGate_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjMGate_c::initBaseMtx() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate/initBaseMtx__12daObjMGate_cFv.s" +void daObjMGate_c::initBaseMtx() { + if (mpKeyModel != NULL) { + mpKeyModel->setBaseScale(mScale); + } + + if (getType() == TYPE_LEFT) { + mScale.z = -1.0f; + } + + mpModel->setBaseScale(mScale); + setBaseMtx(); } -#pragma pop /* 80593630-80593760 0000F0 0130+00 2/2 0/0 0/0 .text setBaseMtx__12daObjMGate_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjMGate_c::setBaseMtx() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate/setBaseMtx__12daObjMGate_cFv.s" +void daObjMGate_c::setBaseMtx() { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::ZXYrotM(mGateAngle.x, mGateAngle.y, mGateAngle.z); + mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); + PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c); + + if (mpKeyModel != NULL) { + cXyz key_offset(l_key_offset[mKind]); + + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::ZXYrotM(mGateAngle.x, mGateAngle.y, mGateAngle.z); + mDoMtx_stack_c::transM(key_offset); + mDoMtx_stack_c::XrotM(mGateKeyAngle); + mpKeyModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); + } } -#pragma pop /* 80593760-805937AC 000220 004C+00 1/0 0/0 0/0 .text Create__12daObjMGate_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjMGate_c::Create() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate/Create__12daObjMGate_cFv.s" -} -#pragma pop +int daObjMGate_c::Create() { + initBaseMtx(); -/* ############################################################################################## */ -/* 80593EFC-80593EFC 0000B4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80593EFC = "M_IGate"; -SECTION_DEAD static char const* const stringBase_80593F04 = "M_HGate"; -SECTION_DEAD static char const* const stringBase_80593F0C = "M_IzumiGate.bmd"; -SECTION_DEAD static char const* const stringBase_80593F1C = "M_HashiGate.bmd"; -SECTION_DEAD static char const* const stringBase_80593F2C = "M_IzumiGate.dzb"; -SECTION_DEAD static char const* const stringBase_80593F3C = "M_HashiGate.dzb"; -SECTION_DEAD static char const* const stringBase_80593F4C = "M_GateKey"; -SECTION_DEAD static char const* const stringBase_80593F56 = "M_IGateKey.bmd"; -#pragma pop + fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); + fopAcM_setCullSizeBox2(this, mpModel->getModelData()); + return 1; +} /* 80593F68-80593F74 000000 000C+00 2/2 0/0 0/0 .data cNullVec__6Z2Calc */ -SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { +static u8 cNullVec__6Z2Calc[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; /* 80593F74-80593F88 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ +// unused but still left in? #pragma push #pragma force_active on -SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { +static u32 lit_1787[1 + 4 /* padding */] = { 0x02000201, /* padding */ 0x40080000, @@ -259,234 +97,206 @@ SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { #pragma pop /* 80593F88-80593F90 -00001 0008+00 1/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName[2] = { - (void*)&d_a_obj_mgate__stringBase0, - (void*)(((char*)&d_a_obj_mgate__stringBase0) + 0x8), +static char* l_arcName[] = { + "M_IGate", + "M_HGate", }; /* 80593F90-80593F98 -00001 0008+00 0/1 0/0 0/0 .data l_bmdName */ -#pragma push -#pragma force_active on -SECTION_DATA static void* l_bmdName[2] = { - (void*)(((char*)&d_a_obj_mgate__stringBase0) + 0x10), - (void*)(((char*)&d_a_obj_mgate__stringBase0) + 0x20), +static char* l_bmdName[] = { + "M_IzumiGate.bmd", + "M_HashiGate.bmd", }; -#pragma pop /* 80593F98-80593FA0 -00001 0008+00 0/1 0/0 0/0 .data l_dzbName */ -#pragma push -#pragma force_active on -SECTION_DATA static void* l_dzbName[2] = { - (void*)(((char*)&d_a_obj_mgate__stringBase0) + 0x30), - (void*)(((char*)&d_a_obj_mgate__stringBase0) + 0x40), +static char* l_dzbName[] = { + "M_IzumiGate.dzb", + "M_HashiGate.dzb", }; -#pragma pop /* 80593FA0-80593FA4 -00001 0004+00 1/3 0/0 0/0 .data l_keyArcName */ -SECTION_DATA static void* l_keyArcName = (void*)(((char*)&d_a_obj_mgate__stringBase0) + 0x50); +static char* l_keyArcName = "M_GateKey"; /* 80593FA4-80593FA8 -00001 0004+00 0/1 0/0 0/0 .data l_keyBmdName */ -#pragma push -#pragma force_active on -SECTION_DATA static void* l_keyBmdName = (void*)(((char*)&d_a_obj_mgate__stringBase0) + 0x5A); -#pragma pop +static char* l_keyBmdName = "M_IGateKey.bmd"; /* 805937AC-8059388C 00026C 00E0+00 1/0 0/0 0/0 .text CreateHeap__12daObjMGate_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjMGate_c::CreateHeap() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate/CreateHeap__12daObjMGate_cFv.s" +int daObjMGate_c::CreateHeap() { + J3DModelData* modelData = + (J3DModelData*)dComIfG_getObjectRes(l_arcName[mKind], l_bmdName[mKind]); + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpModel == NULL) { + return 0; + } + + if (!checkLock()) { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_keyArcName, l_keyBmdName); + mpKeyModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mpKeyModel == NULL) { + return 0; + } + } + + return 1; } -#pragma pop /* 8059388C-80593988 00034C 00FC+00 1/1 0/0 0/0 .text create1st__12daObjMGate_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjMGate_c::create1st() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate/create1st__12daObjMGate_cFv.s" +int daObjMGate_c::create1st() { + mKind = getKind(); + mType = getType(); + + int phase = dComIfG_resLoad(&mKeyPhase, l_keyArcName); + if (phase != cPhs_COMPLEATE_e) { + return phase; + } + + phase = dComIfG_resLoad(&mPhase, l_arcName[mKind]); + if (phase == cPhs_COMPLEATE_e) { + int dzb_id = dComIfG_getObjctResName2Index(l_arcName[mKind], l_dzbName[mKind]); + + phase = + MoveBGCreate(l_arcName[mKind], dzb_id, dBgS_MoveBGProc_TypicalRotY, 0x80004000, NULL); + if (phase == cPhs_ERROR_e) { + return phase; + } + } + + return phase; } -#pragma pop /* ############################################################################################## */ /* 80593ED8-80593EDC 000090 0004+00 0/0 0/0 0/0 .rodata @3752 */ +// unused but still left in? #pragma push #pragma force_active on -SECTION_RODATA static u8 const lit_3752[4] = { +static u8 const lit_3752[4] = { 0x00, 0x00, 0x00, 0x00, }; -COMPILER_STRIP_GATE(0x80593ED8, &lit_3752); -#pragma pop - -/* 80593EDC-80593EE0 000094 0004+00 0/1 0/0 0/0 .rodata @3880 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3880 = 700.0f; -COMPILER_STRIP_GATE(0x80593EDC, &lit_3880); -#pragma pop - -/* 80593EE0-80593EE4 000098 0004+00 0/1 0/0 0/0 .rodata @3881 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3881 = 1000.0f; -COMPILER_STRIP_GATE(0x80593EE0, &lit_3881); -#pragma pop - -/* 80593EE4-80593EE8 00009C 0004+00 0/1 0/0 0/0 .rodata @3882 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3882 = 1.0f; -COMPILER_STRIP_GATE(0x80593EE4, &lit_3882); -#pragma pop - -/* 80593EE8-80593EEC 0000A0 0004+00 0/1 0/0 0/0 .rodata @3883 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3883 = -700.0f; -COMPILER_STRIP_GATE(0x80593EE8, &lit_3883); -#pragma pop - -/* 80593EEC-80593EF0 0000A4 0004+00 0/1 0/0 0/0 .rodata @3884 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3884 = -1000.0f; -COMPILER_STRIP_GATE(0x80593EEC, &lit_3884); -#pragma pop - -/* 80593EF0-80593EF4 0000A8 0004+00 0/1 0/0 0/0 .rodata @3885 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3885 = 1.0f / 10.0f; -COMPILER_STRIP_GATE(0x80593EF0, &lit_3885); -#pragma pop - -/* 80593EF4-80593EF8 0000AC 0004+00 0/1 0/0 0/0 .rodata @3886 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3886 = 20.0f; -COMPILER_STRIP_GATE(0x80593EF4, &lit_3886); -#pragma pop - -/* 80593EF8-80593EFC 0000B0 0004+00 0/1 0/0 0/0 .rodata @3887 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3887 = 7.0f / 100.0f; -COMPILER_STRIP_GATE(0x80593EF8, &lit_3887); #pragma pop /* 80593988-80593C4C 000448 02C4+00 1/0 0/0 0/0 .text Execute__12daObjMGate_cFPPA3_A4_f */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjMGate_c::Execute(f32 (**param_0)[3][4]) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate/Execute__12daObjMGate_cFPPA3_A4_f.s" +int daObjMGate_c::Execute(Mtx** param_0) { + daPy_py_c* player_p = dComIfGp_getLinkPlayer(); + mCounter++; + + if (player_p->checkFrontRollCrash()) { + cXyz check_area_posA; + cXyz check_area_posB; + + switch (mKind) { + case KIND_IZUMI: + check_area_posA = l_roll_crash_check_areaL[0]; + check_area_posB = l_roll_crash_check_areaL[2]; + break; + case KIND_HASHI: + check_area_posA = l_roll_crash_check_areaL2[0]; + check_area_posB = l_roll_crash_check_areaL2[2]; + break; + } + + if (dLib_checkActorInRectangle(player_p, this, &check_area_posA, &check_area_posB)) { + if (mType == TYPE_RIGHT) { + mGateSwingMultiplier = 700.0f; + mGateKeySwingMultiplier = 1000.0f; + + if (checkOpen() == true) { + fopAcM_seStart(this, Z2SE_OBJ_IGATE_ATK_OP, 0); + } else { + fopAcM_seStart(this, Z2SE_OBJ_IGATE_ATK_CL, 0); + } + } else { + mGateSwingMultiplier = -700.0f; + mGateKeySwingMultiplier = -1000.0f; + + if (checkOpen() == true) { + fopAcM_seStart(this, Z2SE_OBJ_IGATE_ATK_OP, 0); + } + } + } + } + + *param_0 = &field_0x56c; + setBaseMtx(); + + mGateAngle.y = mGateSwingMultiplier * cM_ssin(mCounter * 4000); + mGateKeyAngle = mGateKeySwingMultiplier * cM_ssin(mCounter * 6000); + cLib_addCalc0(&mGateSwingMultiplier, 0.1f, 20.0f); + cLib_addCalc0(&mGateKeySwingMultiplier, 0.07f, 20.0f); + return 1; } -#pragma pop /* 80593C4C-80593D18 00070C 00CC+00 1/0 0/0 0/0 .text Draw__12daObjMGate_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjMGate_c::Draw() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate/Draw__12daObjMGate_cFv.s" -} -#pragma pop +int daObjMGate_c::Draw() { + g_env_light.settingTevStruct(0x10, ¤t.pos, &mTevStr); + g_env_light.setLightTevColorType_MAJI(mpModel, &mTevStr); -/* 80593D18-80593D74 0007D8 005C+00 1/0 0/0 0/0 .text Delete__12daObjMGate_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjMGate_c::Delete() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate/Delete__12daObjMGate_cFv.s" -} -#pragma pop + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mpModel); + dComIfGd_setList(); -/* ############################################################################################## */ -/* 80593FA8-80593FC8 -00001 0020+00 1/0 0/0 0/0 .data daObjMGate_METHODS */ -SECTION_DATA static void* daObjMGate_METHODS[8] = { - (void*)daObjMGate_create1st__FP12daObjMGate_c, - (void*)daObjMGate_MoveBGDelete__FP12daObjMGate_c, - (void*)daObjMGate_MoveBGExecute__FP12daObjMGate_c, - (void*)NULL, - (void*)daObjMGate_MoveBGDraw__FP12daObjMGate_c, - (void*)NULL, - (void*)NULL, - (void*)NULL, -}; + if (mpKeyModel != NULL) { + g_env_light.setLightTevColorType_MAJI(mpKeyModel, &mTevStr); + mDoExt_modelUpdateDL(mpKeyModel); + } -/* 80593FC8-80593FF8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_MGate */ -SECTION_DATA extern void* g_profile_Obj_MGate[12] = { - (void*)0xFFFFFFFD, (void*)0x0003FFFD, - (void*)0x00640000, (void*)&g_fpcLf_Method, - (void*)0x000005D0, (void*)NULL, - (void*)NULL, (void*)&g_fopAc_Method, - (void*)0x01C40000, (void*)&daObjMGate_METHODS, - (void*)0x00040100, (void*)0x000E0000, -}; + return 1; +} -/* 80593FF8-80594020 000090 0028+00 1/1 0/0 0/0 .data __vt__12daObjMGate_c */ -SECTION_DATA extern void* __vt__12daObjMGate_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)CreateHeap__12daObjMGate_cFv, - (void*)Create__12daObjMGate_cFv, - (void*)Execute__12daObjMGate_cFPPA3_A4_f, - (void*)Draw__12daObjMGate_cFv, - (void*)Delete__12daObjMGate_cFv, - (void*)IsDelete__16dBgS_MoveBgActorFv, - (void*)ToFore__16dBgS_MoveBgActorFv, - (void*)ToBack__16dBgS_MoveBgActorFv, -}; +/* 80593D18-80593D74 0007D8 005C+00 1/0 0/0 0/0 .text Delete__12daObjMGate_cFv */ +int daObjMGate_c::Delete() { + dComIfG_resDelete(&mPhase, l_arcName[mKind]); + dComIfG_resDelete(&mKeyPhase, l_keyArcName); + return 1; +} /* 80593D74-80593DD4 000834 0060+00 1/0 0/0 0/0 .text daObjMGate_create1st__FP12daObjMGate_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjMGate_create1st(daObjMGate_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate/daObjMGate_create1st__FP12daObjMGate_c.s" +static int daObjMGate_create1st(daObjMGate_c* i_this) { + if (!fopAcM_CheckCondition(i_this, 8)) { + new (i_this) daObjMGate_c(); + fopAcM_OnCondition(i_this, 8); + } + + return i_this->create1st(); } -#pragma pop /* 80593DD4-80593DF4 000894 0020+00 1/0 0/0 0/0 .text daObjMGate_MoveBGDelete__FP12daObjMGate_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjMGate_MoveBGDelete(daObjMGate_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate/daObjMGate_MoveBGDelete__FP12daObjMGate_c.s" +static int daObjMGate_MoveBGDelete(daObjMGate_c* i_this) { + return i_this->MoveBGDelete(); } -#pragma pop /* 80593DF4-80593E14 0008B4 0020+00 1/0 0/0 0/0 .text daObjMGate_MoveBGExecute__FP12daObjMGate_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjMGate_MoveBGExecute(daObjMGate_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate/daObjMGate_MoveBGExecute__FP12daObjMGate_c.s" +static int daObjMGate_MoveBGExecute(daObjMGate_c* i_this) { + return i_this->MoveBGExecute(); } -#pragma pop /* 80593E14-80593E40 0008D4 002C+00 1/0 0/0 0/0 .text daObjMGate_MoveBGDraw__FP12daObjMGate_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjMGate_MoveBGDraw(daObjMGate_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate/daObjMGate_MoveBGDraw__FP12daObjMGate_c.s" +static int daObjMGate_MoveBGDraw(daObjMGate_c* i_this) { + return i_this->MoveBGDraw(); } -#pragma pop -/* 80593EFC-80593EFC 0000B4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ +/* ############################################################################################## */ +/* 80593FA8-80593FC8 -00001 0020+00 1/0 0/0 0/0 .data daObjMGate_METHODS */ +static actor_method_class daObjMGate_METHODS = { + (process_method_func)daObjMGate_create1st, (process_method_func)daObjMGate_MoveBGDelete, + (process_method_func)daObjMGate_MoveBGExecute, (process_method_func)NULL, + (process_method_func)daObjMGate_MoveBGDraw, +}; + +/* 80593FC8-80593FF8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_MGate */ +extern actor_process_profile_definition g_profile_Obj_MGate = { + -3, 3, + 0xFFFD, PROC_Obj_MGate, + 0, &g_fpcLf_Method.mBase, + 0x5D0, 0, + 0, &g_fopAc_Method.base, + 0x01C4, 0, + 0, &daObjMGate_METHODS, + 0x00040100, 0, + 14, 0, + 0, +}; diff --git a/rel/d/a/obj/d_a_obj_volcball/Makefile b/rel/d/a/obj/d_a_obj_volcball/Makefile index 3bde1eb3b7..ae36e2f9b8 100644 --- a/rel/d/a/obj/d_a_obj_volcball/Makefile +++ b/rel/d/a/obj/d_a_obj_volcball/Makefile @@ -8,12 +8,10 @@ M675_MAP := $(BUILD_DIR)/rel/d/a/obj/d_a_obj_volcball.map M675_CPP_FILES := \ rel/executor.cpp \ - rel/d/a/obj/d_a_obj_volcball/unknown_translation_unit_bss.cpp \ rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball.cpp \ M675_O_FILES := \ $(BUILD_DIR)/rel/executor.o \ - $(BUILD_DIR)/rel/d/a/obj/d_a_obj_volcball/unknown_translation_unit_bss.o \ $(BUILD_DIR)/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball.o \ M675_LIBS := \ diff --git a/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball.cpp b/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball.cpp index f07c991df8..966d29ab06 100644 --- a/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball.cpp +++ b/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball.cpp @@ -1,55 +1,89 @@ -// -// Generated By: dol2asm -// Translation Unit: d_a_obj_volcball -// +/** + * d_a_obj_volcball.cpp + * Volcano Eruption Falling Rocks + */ #include "rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball.h" +#include "SSystem/SComponent/c_math.h" +#include "d/com/d_com_inf_game.h" +#include "d/event/d_event_lib.h" #include "dol2asm.h" -#include "dolphin/types.h" // // Types: // -struct request_of_phase_process_class {}; - -struct csXyz {}; - -struct Vec {}; - -struct cXyz { - /* 80266AE4 */ void operator+(Vec const&) const; -}; - -struct mDoMtx_stack_c { - /* 8000CD64 */ void transS(cXyz const&); - /* 8000CF44 */ void ZXYrotM(csXyz const&); - - static u8 now[48]; -}; - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); - /* 80018C8C */ ~fopAc_ac_c(); -}; - -struct fopAcM_gc_c { - /* 8001DCBC */ void gndCheck(cXyz const*); -}; +class daObjVolcBall_c : public fopAc_ac_c, public dEvLib_callback_c { +public: + enum mode_e { + /* 0 */ MODE_PLAYER_WAIT, + /* 1 */ MODE_SWITCH_WAIT, + /* 2 */ MODE_STOP, + /* 3 */ MODE_QUAKE, + /* 4 */ MODE_ERUPT, + /* 5 */ MODE_END, + }; -struct daObjVolcBall_c { struct vball_s { /* 80D21FA8 */ ~vball_s(); /* 80D2214C */ vball_s(); + + /* 0x000 */ J3DModel* mpModel; + /* 0x004 */ cXyz field_0x4; + /* 0x010 */ cXyz field_0x10; + /* 0x01C */ cXyz field_0x1c; + /* 0x028 */ cXyz field_0x28; + /* 0x034 */ csXyz field_0x34; + /* 0x03C */ cXyz field_0x3c; + /* 0x048 */ f32 field_0x48; + /* 0x04C */ f32 field_0x4c; + /* 0x050 */ f32 field_0x50; + /* 0x054 */ dBgS_ObjAcch mAcch; + /* 0x22C */ dCcD_Sph mSphCc; + /* 0x364 */ cXyz field_0x364; + /* 0x370 */ u32 field_0x370; + /* 0x374 */ s16 field_0x374; + /* 0x376 */ u8 field_0x376; + /* 0x378 */ csXyz field_0x378; + /* 0x37E */ u8 field_0x37E[0x0390 - 0x037E]; + /* 0x390 */ dPa_followEcallBack field_0x390[4]; }; - /* 80D21B18 */ void getData(); + class volc_param_c { + public: + /* 0x00 */ f32 mGravity; + /* 0x04 */ f32 mMaxFallSpeed; + /* 0x08 */ f32 mBallSpeedH; + /* 0x0C */ f32 mBallSetShortRange; + /* 0x10 */ f32 mBallSetRandom; + /* 0x14 */ f32 mNormalScale; + /* 0x18 */ f32 mScaleRandValue; + /* 0x1C */ f32 mNormalInterval; + /* 0x20 */ f32 mRandInterval; + /* 0x24 */ f32 mNormalWaitTime; + /* 0x28 */ f32 mRandWaitTime; + /* 0x2C */ f32 mNormalWarningTime; + /* 0x30 */ f32 mRandWarningTime; + /* 0x34 */ f32 mNormalEruptTime; + /* 0x38 */ f32 mRandEruptTime; + /* 0x3C */ f32 mSearchBallFreq; + /* 0x40 */ f32 mSearchBallBaseScale; + /* 0x44 */ f32 mSearchBallRandScale; + /* 0x48 */ f32 mSearchBallSetHeight; + /* 0x4C */ f32 mSearchBallShadowIntensity; + /* 0x50 */ u8 mSearchBallCreateTime; + /* 0x51 */ u8 mPlayerSearchTime; + }; + + daObjVolcBall_c() : dEvLib_callback_c(this) {} + + /* 80D21B18 */ volc_param_c* getData(); /* 80D21BA0 */ void initBaseMtx(); /* 80D21BC0 */ void setBaseMtx(); - /* 80D21C40 */ void Create(); - /* 80D21D80 */ void CreateHeap(); - /* 80D21E28 */ void create(); - /* 80D22424 */ void execute(); + /* 80D21C40 */ int Create(); + /* 80D21D80 */ int CreateHeap(); + /* 80D21E28 */ int create(); + /* 80D22424 */ int execute(); /* 80D22484 */ void action(); /* 80D22570 */ void initActionPlayerWait(); /* 80D2257C */ void initActionWarning(); @@ -61,176 +95,54 @@ struct daObjVolcBall_c { /* 80D22944 */ void actionEruption(); /* 80D22C6C */ void initActionEnd(); /* 80D22CD4 */ void actionEnd(); - /* 80D22DDC */ void eventStart(); /* 80D22E24 */ void setEruptEffect(int); /* 80D22ED4 */ void setFallEffect(int); /* 80D22FCC */ void endFallEffect(int); - /* 80D23034 */ void createSearchBall(); - /* 80D23188 */ void createNormalBall(); - /* 80D23438 */ void executeBall(); + /* 80D23034 */ bool createSearchBall(); + /* 80D23188 */ bool createNormalBall(); + /* 80D23438 */ int executeBall(); /* 80D23868 */ void startQuake(); - /* 80D23904 */ void draw(); - /* 80D23A0C */ void _delete(); - /* 80D23B24 */ ~daObjVolcBall_c(); -}; - -struct dVibration_c { - /* 8006FB10 */ void StartQuake(int, int, cXyz); - /* 8006FD94 */ void StopQuake(int); - /* 8006FE5C */ void CheckQuake(); -}; - -struct dSv_info_c { - /* 80035360 */ void isSwitch(int, int) const; -}; - -struct dKy_tevstr_c {}; - -struct J3DModelData {}; - -struct dScnKy_env_light_c { - /* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*); - /* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*); -}; - -struct dRes_info_c {}; - -struct dRes_control_c { - /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); -}; - -struct dPa_levelEcallBack { - /* 80D22148 */ void cleanup(); - /* 80D23CE0 */ ~dPa_levelEcallBack(); -}; - -struct dPa_followEcallBack { - /* 80049580 */ dPa_followEcallBack(u8, u8); - /* 80D220C4 */ ~dPa_followEcallBack(); - /* 80D22230 */ void __defctor(); -}; - -struct _GXColor {}; - -struct dPa_control_c { - /* 8004CA90 */ void set(u8, u16, cXyz const*, dKy_tevstr_c const*, csXyz const*, cXyz const*, - u8, dPa_levelEcallBack*, s8, _GXColor const*, _GXColor const*, - cXyz const*, f32); -}; - -struct dEvLib_callback_c { - /* 8004886C */ void eventUpdate(); - /* 80048940 */ void orderEvent(int, int, int); - /* 80D23C40 */ ~dEvLib_callback_c(); - /* 80D23C88 */ bool eventRun(); - /* 80D23C90 */ bool eventEnd(); - /* 80D23D64 */ bool eventStart(); + /* 80D23904 */ int draw(); + /* 80D23A0C */ int _delete(); + + /* 80D23B24 */ virtual ~daObjVolcBall_c(); + /* 80D22DDC */ virtual BOOL eventStart(); + + u8 getSwBit() { return fopAcM_GetParamBit(this, 0, 8); } + u8 getSwBit2() { return fopAcM_GetParamBit(this, 8, 8); } + u8 checkBigVolc() { return fopAcM_GetParamBit(this, 0x1F, 1); } + u8 getEvNo() { return fopAcM_GetParamBit(this, 0x10, 8); } + + void setAction(u8 i_action) { mMode = i_action; } + + /* 0x057C */ request_of_phase_process_class mPhase; + /* 0x0584 */ dBgS_AcchCir mAcchCir; + /* 0x05C4 */ dCcD_Stts mCcStts; + /* 0x0600 */ u8 mIsBigVolc; + /* 0x0601 */ u8 mMode; + /* 0x0602 */ u8 mNormalBallCreateTimer; + /* 0x0603 */ u8 field_0x603; + /* 0x0604 */ u32 mTime; + /* 0x0608 */ u32 mSearchBallCreateTimer; + /* 0x060C */ vball_s mBall[9]; + /* 0x28EC */ Mtx field_0x28ec; + /* 0x291C */ f32 field_0x291c; + /* 0x2920 */ u32 mBigVolcActorID; + /* 0x2924 */ u8 field_0x2924; + /* 0x2925 */ u8 field_0x2925; + /* 0x2926 */ u8 field_0x2926; }; -struct dDlst_shadowControl_c { - static u8 mSimpleTexObj[32]; -}; - -struct dCcD_Stts { - /* 80083860 */ void Init(int, int, fopAc_ac_c*); -}; - -struct dCcD_SrcSph {}; - -struct dCcD_Sph { - /* 80084A34 */ void Set(dCcD_SrcSph const&); -}; - -struct dCcD_GStts { - /* 80083760 */ dCcD_GStts(); - /* 80D22358 */ ~dCcD_GStts(); -}; - -struct dCcD_GObjInf { - /* 80083A28 */ dCcD_GObjInf(); - /* 800840E4 */ ~dCcD_GObjInf(); -}; - -struct dBgS_PolyPassChk { - /* 80078E68 */ void SetObj(); -}; - -struct dBgS_ObjAcch { - /* 80D222E8 */ ~dBgS_ObjAcch(); -}; - -struct dBgS_AcchCir { - /* 80075EAC */ dBgS_AcchCir(); - /* 80075F58 */ void SetWall(f32, f32); - /* 80D223B4 */ ~dBgS_AcchCir(); -}; - -struct dBgS {}; - -struct dBgS_Acch { - /* 80075F94 */ ~dBgS_Acch(); - /* 800760A0 */ dBgS_Acch(); - /* 80076248 */ void Set(cXyz*, cXyz*, fopAc_ac_c*, int, dBgS_AcchCir*, cXyz*, csXyz*, csXyz*); - /* 80076AAC */ void CrrPos(dBgS&); -}; - -struct cM3dGSph { - /* 8026F648 */ void SetC(cXyz const&); - /* 8026F708 */ void SetR(f32); - /* 80D22258 */ ~cM3dGSph(); -}; - -struct cM3dGCir { - /* 8026EF18 */ ~cM3dGCir(); -}; +class daObjVolcBom_c { +public: + void startFall() { field_0x95f = 1; } + void startSearch() { field_0x960 = 1; } -struct cM3dGAab { - /* 80D222A0 */ ~cM3dGAab(); + u8 temp[0x95F]; + /* 0x95F */ u8 field_0x95f; + /* 0x960 */ u8 field_0x960; }; -struct cCcD_Obj {}; - -struct cCcS { - /* 80264BA8 */ void Set(cCcD_Obj*); -}; - -struct cCcD_GStts { - /* 80D23C98 */ ~cCcD_GStts(); -}; - -struct cBgS_PolyInfo { - /* 802680B0 */ ~cBgS_PolyInfo(); -}; - -struct _GXTexObj {}; - -struct JAISoundID {}; - -struct Z2SeMgr { - /* 802AB984 */ void seStart(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); - /* 802AC50C */ void seStartLevel(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); -}; - -struct Z2AudioMgr { - static u8 mAudioMgrPtr[4 + 4 /* padding */]; -}; - -struct JPABaseEmitter {}; - -struct JPAEmitterCallBack { - /* 8027E6A4 */ ~JPAEmitterCallBack(); - /* 80D23D54 */ void execute(JPABaseEmitter*); - /* 80D23D58 */ void executeAfter(JPABaseEmitter*); - /* 80D23D5C */ void draw(JPABaseEmitter*); - /* 80D23D60 */ void drawAfter(JPABaseEmitter*); -}; - -struct JMath { - static u8 sincosTable_[65536]; -}; - -struct J3DModel {}; - // // Forward References: // @@ -281,17 +193,21 @@ extern "C" static void daObjVolcBall_Delete__FP15daObjVolcBall_c(); extern "C" static void daObjVolcBall_Create__FP10fopAc_ac_c(); extern "C" void __dt__15daObjVolcBall_cFv(); extern "C" void __dt__17dEvLib_callback_cFv(); -extern "C" bool eventRun__17dEvLib_callback_cFv(); -extern "C" bool eventEnd__17dEvLib_callback_cFv(); +extern "C" int eventRun__17dEvLib_callback_cFv(void* this_); +extern "C" int eventEnd__17dEvLib_callback_cFv(void* this_); extern "C" void __dt__10cCcD_GSttsFv(); extern "C" void __dt__18dPa_levelEcallBackFv(); -extern "C" void execute__18JPAEmitterCallBackFP14JPABaseEmitter(); -extern "C" void executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter(); -extern "C" void draw__18JPAEmitterCallBackFP14JPABaseEmitter(); -extern "C" void drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter(); -extern "C" bool eventStart__17dEvLib_callback_cFv(); -extern "C" void func_80D23D6C(void* _this, u8*); -extern "C" void func_80D23D88(void* _this, u32*); +extern "C" void execute__18JPAEmitterCallBackFP14JPABaseEmitter(JPAEmitterCallBack* this_, + JPABaseEmitter* param_0); +extern "C" void executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter(JPAEmitterCallBack* this_, + JPABaseEmitter* param_0); +extern "C" void draw__18JPAEmitterCallBackFP14JPABaseEmitter(JPAEmitterCallBack* this_, + JPABaseEmitter* param_0); +extern "C" void drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter(JPAEmitterCallBack* this_, + JPABaseEmitter* param_0); +extern "C" int eventStart__17dEvLib_callback_cFv(void* this_); +extern "C" u8 func_80D23D6C(u8*); +extern "C" u32 func_80D23D88(u32*); extern "C" static void func_80D23DA4(); extern "C" static void func_80D23DAC(); extern "C" static void func_80D23DB4(); @@ -359,12 +275,6 @@ extern "C" void __dt__18JPAEmitterCallBackFv(); extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); extern "C" void __dl__FPv(); -extern "C" void PSMTXCopy(); -extern "C" void PSMTXTrans(); -extern "C" void PSMTXMultVec(); -extern "C" void PSVECAdd(); -extern "C" void PSVECScale(); -extern "C" void PSVECSquareDistance(); extern "C" void __destroy_arr(); extern "C" void __construct_array(); extern "C" void __ptmf_scall(); @@ -381,8 +291,6 @@ extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; extern "C" extern void* __vt__19dPa_followEcallBack[10]; extern "C" extern void* __vt__8dCcD_Sph[36]; extern "C" extern void* __vt__9dCcD_Stts[11]; @@ -390,14 +298,21 @@ extern "C" extern void* __vt__12cCcD_SphAttr[25]; extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; extern "C" extern void* __vt__9cCcD_Stts[8]; extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -extern "C" extern u8 g_env_light[4880]; extern "C" u8 sincosTable___5JMath[65536]; -extern "C" extern u32 __float_nan; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; extern "C" extern u8 data_80D24100[4]; +extern void* __vt__15daObjVolcBall_c[10]; +extern void* __vt__12dBgS_AcchCir[3]; +extern void* __vt__10cCcD_GStts[3]; +extern void* __vt__10dCcD_GStts[3]; +extern void* __vt__18dPa_levelEcallBack[9]; +extern void* __vt__12dBgS_ObjAcch[9]; +extern void* __vt__8cM3dGAab[3]; +extern void* __vt__8cM3dGSph[3]; +extern void* __vt__17dEvLib_callback_c[6]; + // // Declarations: // @@ -428,82 +343,72 @@ SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = { #pragma pop /* 80D23EAC-80D23EB0 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */ -SECTION_DATA static void* l_arcName = (void*)&d_a_obj_volcball__stringBase0; +SECTION_DATA static const char* l_arcName = "M_Volcbal"; /* 80D23EB0-80D23F58 000024 00A8+00 1/1 0/0 0/0 .data l_param */ -SECTION_DATA static u8 l_param[168] = { - 0xC0, 0x40, 0x00, 0x00, 0xC2, 0x8C, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x44, 0xD4, 0x80, 0x00, - 0x43, 0xC8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x40, 0xA0, 0x00, 0x00, - 0x40, 0xA0, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, 0x40, 0xC0, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x3F, 0x19, 0x99, 0x9A, - 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x9C, 0x40, 0x00, 0x3F, 0x99, 0x99, 0x9A, - 0x08, 0x46, 0x00, 0x00, 0xC1, 0x20, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, - 0x44, 0xD4, 0x80, 0x00, 0x43, 0xC8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3E, 0x99, 0x99, 0x9A, 0x45, 0x9C, 0x40, 0x00, - 0x3F, 0x99, 0x99, 0x9A, 0x02, 0x2B, 0x00, 0x00, +static daObjVolcBall_c::volc_param_c l_param[] = { + { + -3.0f, -70.0f, 1.0f, 1700.0f, 400.0f, 1.0f, 0.5f, 5.0f, 5.0f, 50.0f, 20.0f, + 6.0f, 2.0f, 20.0f, 4.0f, 0.6f, 2.0f, 0.0f, 5000.0f, 1.2f, 8, 70, + }, + { + -10.0f, -100.0f, 1.0f, 1700.0f, 400.0f, 1.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, + 1.0f, 0.0f, 9.0f, 0.0f, 1.0f, 2.0f, 0.3f, 5000.0f, 1.2f, 2, 43, + }, }; /* 80D21B18-80D21B30 000078 0018+00 8/8 0/0 0/0 .text getData__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::getData() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/getData__15daObjVolcBall_cFv.s" +daObjVolcBall_c::volc_param_c* daObjVolcBall_c::getData() { + return &l_param[mIsBigVolc]; } -#pragma pop /* 80D21B30-80D21B50 000090 0020+00 1/1 0/0 0/0 .text CheckCreateHeap__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void CheckCreateHeap(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/CheckCreateHeap__FP10fopAc_ac_c.s" +static int CheckCreateHeap(fopAc_ac_c* i_this) { + return static_cast<daObjVolcBall_c*>(i_this)->CreateHeap(); } -#pragma pop /* 80D21B50-80D21BA0 0000B0 0050+00 1/1 0/0 0/0 .text search_big_volc__FPvPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void search_big_volc(void* param_0, void* param_1) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/search_big_volc__FPvPv.s" +static void* search_big_volc(void* i_actor, void*) { + if (i_actor != NULL && fopAcM_IsActor(i_actor) && + fopAcM_GetProfName(i_actor) == PROC_Obj_VolcanicBomb) + { + return i_actor; + } + + return NULL; } -#pragma pop /* 80D21BA0-80D21BC0 000100 0020+00 1/1 0/0 0/0 .text initBaseMtx__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::initBaseMtx() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/initBaseMtx__15daObjVolcBall_cFv.s" +void daObjVolcBall_c::initBaseMtx() { + setBaseMtx(); } -#pragma pop /* 80D21BC0-80D21C40 000120 0080+00 1/1 0/0 0/0 .text setBaseMtx__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::setBaseMtx() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/setBaseMtx__15daObjVolcBall_cFv.s" +void daObjVolcBall_c::setBaseMtx() { + daPy_py_c* player_p = daPy_getPlayerActorClass(); + + if (mIsBigVolc == 0) { + current.pos = player_p->current.pos; + } + + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + PSMTXCopy(mDoMtx_stack_c::get(), field_0x28ec); } -#pragma pop /* ############################################################################################## */ /* 80D23DCC-80D23E0C 000000 0040+00 7/7 0/0 0/0 .rodata l_sph_src */ -SECTION_RODATA static u8 const l_sph_src[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xC8, 0x00, 0x00, +static const dCcD_SrcSph l_sph_src = { + { + {0, {{AT_TYPE_BOMB, 1, 0x1F}, {0, 0x11}, 0}}, + {dCcD_SE_NONE, 0, 1, 0, {8}}, + {dCcD_SE_NONE, 0, 0, 0, {2}}, + {0}, + }, + { + {0.0f, 0.0f, 0.0f}, + 100.0f, + }, }; -COMPILER_STRIP_GATE(0x80D23DCC, &l_sph_src); /* 80D23E0C-80D23E10 000040 0004+00 2/6 0/0 0/0 .rodata @3715 */ SECTION_RODATA static f32 const lit_3715 = 30.0f; @@ -533,214 +438,102 @@ COMPILER_STRIP_GATE(0x80D23E18, &lit_3718); #pragma pop /* 80D21C40-80D21D80 0001A0 0140+00 1/1 0/0 0/0 .text Create__15daObjVolcBall_cFv */ +// matches with literals +#ifdef NONMATCHING +int daObjVolcBall_c::Create() { + initBaseMtx(); + fopAcM_SetMtx(this, field_0x28ec); + + for (int i = 0; i < 9; i++) { + mAcchCir.SetWall(30.0f, 30.0f); + mBall[i].mAcch.Set(&mBall[i].field_0x4, &mBall[i].field_0x10, this, 1, &mAcchCir, + &mBall[i].field_0x3c, NULL, NULL); + mCcStts.Init(0, 0xFF, this); + mBall[i].mSphCc.Set(l_sph_src); + mBall[i].mSphCc.SetStts(&mCcStts); + } + + fopAcM_setCullSizeBox(this, -1000.0f, 0.0f, -1000.0f, 1000.0f, 1000.0f, 1000.0f); + + if (mIsBigVolc == 0) { + if (i_fopAcM_isSwitch(this, getSwBit())) { + initActionWarning(); + } else { + initActionSwWait(); + } + } else { + initActionPlayerWait(); + } + + mBigVolcActorID = -1; + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daObjVolcBall_c::Create() { +asm int daObjVolcBall_c::Create() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/Create__15daObjVolcBall_cFv.s" } #pragma pop +#endif /* 80D21D80-80D21E28 0002E0 00A8+00 1/1 0/0 0/0 .text CreateHeap__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::CreateHeap() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/CreateHeap__15daObjVolcBall_cFv.s" -} -#pragma pop - -/* ############################################################################################## */ -/* 80D23F58-80D23F64 -00001 000C+00 0/1 0/0 0/0 .data @3929 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3929[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionPlayerWait__15daObjVolcBall_cFv, -}; -#pragma pop +int daObjVolcBall_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 3); -/* 80D23F64-80D23F70 -00001 000C+00 0/1 0/0 0/0 .data @3930 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3930[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionSwWait__15daObjVolcBall_cFv, -}; -#pragma pop - -/* 80D23F70-80D23F7C -00001 000C+00 0/1 0/0 0/0 .data @3931 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3931[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionStop__15daObjVolcBall_cFv, -}; -#pragma pop - -/* 80D23F7C-80D23F88 -00001 000C+00 0/1 0/0 0/0 .data @3932 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3932[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionWarning__15daObjVolcBall_cFv, -}; -#pragma pop - -/* 80D23F88-80D23F94 -00001 000C+00 0/1 0/0 0/0 .data @3933 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3933[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionEruption__15daObjVolcBall_cFv, -}; -#pragma pop - -/* 80D23F94-80D23FA0 -00001 000C+00 0/1 0/0 0/0 .data @3934 */ -#pragma push -#pragma force_active on -SECTION_DATA static void* lit_3934[3] = { - (void*)NULL, - (void*)0xFFFFFFFF, - (void*)actionEnd__15daObjVolcBall_cFv, -}; -#pragma pop - -/* 80D23FA0-80D23FE8 000114 0048+00 0/1 0/0 0/0 .data l_func$3928 */ -#pragma push -#pragma force_active on -SECTION_DATA static u8 l_func[72] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -#pragma pop - -/* 80D23FE8-80D24008 -00001 0020+00 1/0 0/0 0/0 .data l_daObjVolcBall_Method */ -SECTION_DATA static void* l_daObjVolcBall_Method[8] = { - (void*)daObjVolcBall_Create__FP10fopAc_ac_c, - (void*)daObjVolcBall_Delete__FP15daObjVolcBall_c, - (void*)daObjVolcBall_Execute__FP15daObjVolcBall_c, - (void*)NULL, - (void*)daObjVolcBall_Draw__FP15daObjVolcBall_c, - (void*)NULL, - (void*)NULL, - (void*)NULL, -}; + for (int i = 0; i < 9; i++) { + mBall[i].mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mBall[i].mpModel == NULL) { + return 0; + } + } -/* 80D24008-80D24038 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_VolcanicBall */ -SECTION_DATA extern void* g_profile_Obj_VolcanicBall[12] = { - (void*)0xFFFFFFFD, (void*)0x0003FFFD, - (void*)0x00E00000, (void*)&g_fpcLf_Method, - (void*)0x00002928, (void*)NULL, - (void*)NULL, (void*)&g_fopAc_Method, - (void*)0x02510000, (void*)&l_daObjVolcBall_Method, - (void*)0x00040000, (void*)0x000E0000, -}; - -/* 80D24038-80D24060 0001AC 0028+00 2/2 0/0 0/0 .data __vt__15daObjVolcBall_c */ -SECTION_DATA extern void* __vt__15daObjVolcBall_c[10] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)func_80D23DBC, - (void*)func_80D23DB4, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)eventEnd__17dEvLib_callback_cFv, - (void*)eventStart__15daObjVolcBall_cFv, - (void*)__dt__15daObjVolcBall_cFv, -}; - -/* 80D24060-80D2406C 0001D4 000C+00 2/2 0/0 0/0 .data __vt__12dBgS_AcchCir */ -SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_AcchCirFv, -}; - -/* 80D2406C-80D24078 0001E0 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */ -SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10cCcD_GSttsFv, -}; - -/* 80D24078-80D24084 0001EC 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */ -SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dCcD_GSttsFv, -}; - -/* 80D24084-80D240A8 0001F8 0024+00 2/2 0/0 0/0 .data __vt__18dPa_levelEcallBack */ -SECTION_DATA extern void* __vt__18dPa_levelEcallBack[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__18dPa_levelEcallBackFv, - (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter, - (void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter, - (void*)draw__18JPAEmitterCallBackFP14JPABaseEmitter, - (void*)drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter, - (void*)NULL, - (void*)cleanup__18dPa_levelEcallBackFv, -}; - -/* 80D240A8-80D240CC 00021C 0024+00 3/3 0/0 0/0 .data __vt__12dBgS_ObjAcch */ -SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__12dBgS_ObjAcchFv, - (void*)NULL, - (void*)NULL, - (void*)func_80D23DAC, - (void*)NULL, - (void*)NULL, - (void*)func_80D23DA4, -}; - -/* 80D240CC-80D240D8 000240 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 80D240D8-80D240E4 00024C 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGSph */ -SECTION_DATA extern void* __vt__8cM3dGSph[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGSphFv, -}; - -/* 80D240E4-80D240FC 000258 0018+00 3/3 0/0 0/0 .data __vt__17dEvLib_callback_c */ -SECTION_DATA extern void* __vt__17dEvLib_callback_c[6] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__17dEvLib_callback_cFv, - (void*)eventStart__17dEvLib_callback_cFv, - (void*)eventRun__17dEvLib_callback_cFv, - (void*)eventEnd__17dEvLib_callback_cFv, -}; + return 1; +} /* 80D21E28-80D21FA8 000388 0180+00 1/1 0/0 0/0 .text create__15daObjVolcBall_cFv */ +// matches with vtable data +#ifdef NONMATCHING +int daObjVolcBall_c::create() { + if (!fopAcM_CheckCondition(this, 8)) { + new (this) daObjVolcBall_c(); + fopAcM_OnCondition(this, 8); + } + + mIsBigVolc = checkBigVolc(); + if (mIsBigVolc == 1) { + if (i_fopAcM_isSwitch(this, getSwBit2())) { + return cPhs_ERROR_e; + } + + field_0x2926 = 1; + } + + int phase = dComIfG_resLoad(&mPhase, l_arcName); + if (phase == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x4900)) { + return cPhs_ERROR_e; + } + + if (!Create()) { + return cPhs_ERROR_e; + } + } + + return phase; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daObjVolcBall_c::create() { +asm int daObjVolcBall_c::create() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/func_80D21E28.s" } #pragma pop +#endif /* 80D21FA8-80D220C4 000508 011C+00 2/2 0/0 0/0 .text __dt__Q215daObjVolcBall_c7vball_sFv */ @@ -757,7 +550,8 @@ asm daObjVolcBall_c::vball_s::~vball_s() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dPa_followEcallBack::~dPa_followEcallBack() { +// asm dPa_followEcallBack::~dPa_followEcallBack() { +extern "C" asm void __dt__19dPa_followEcallBackFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/__dt__19dPa_followEcallBackFv.s" } @@ -794,7 +588,8 @@ asm void dPa_followEcallBack::__defctor() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGSph::~cM3dGSph() { +// asm cM3dGSph::~cM3dGSph() { +extern "C" asm void __dt__8cM3dGSphFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/__dt__8cM3dGSphFv.s" } @@ -804,7 +599,8 @@ asm cM3dGSph::~cM3dGSph() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGAab::~cM3dGAab() { +// asm cM3dGAab::~cM3dGAab() { +extern "C" asm void __dt__8cM3dGAabFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/__dt__8cM3dGAabFv.s" } @@ -814,7 +610,8 @@ asm cM3dGAab::~cM3dGAab() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dBgS_ObjAcch::~dBgS_ObjAcch() { +// asm dBgS_ObjAcch::~dBgS_ObjAcch() { +extern "C" asm void __dt__12dBgS_ObjAcchFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/__dt__12dBgS_ObjAcchFv.s" } @@ -824,7 +621,8 @@ asm dBgS_ObjAcch::~dBgS_ObjAcch() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dCcD_GStts::~dCcD_GStts() { +// asm dCcD_GStts::~dCcD_GStts() { +extern "C" asm void __dt__10dCcD_GSttsFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/__dt__10dCcD_GSttsFv.s" } @@ -834,61 +632,53 @@ asm dCcD_GStts::~dCcD_GStts() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dBgS_AcchCir::~dBgS_AcchCir() { +// asm dBgS_AcchCir::~dBgS_AcchCir() { +extern "C" asm void __dt__12dBgS_AcchCirFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/__dt__12dBgS_AcchCirFv.s" } #pragma pop /* 80D22424-80D22484 000984 0060+00 1/1 0/0 0/0 .text execute__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::execute() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/execute__15daObjVolcBall_cFv.s" +int daObjVolcBall_c::execute() { + f32 gravity = getData()->mGravity; + f32 fall_speed = getData()->mMaxFallSpeed; + + mGravity = gravity; + mMaxFallSpeed = fall_speed; + + action(); + return 1; } -#pragma pop + +typedef void (daObjVolcBall_c::*actionFunc)(); /* 80D22484-80D22570 0009E4 00EC+00 1/1 0/0 0/0 .text action__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::action() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/action__15daObjVolcBall_cFv.s" +void daObjVolcBall_c::action() { + static actionFunc l_func[] = { + &daObjVolcBall_c::actionPlayerWait, &daObjVolcBall_c::actionSwWait, + &daObjVolcBall_c::actionStop, &daObjVolcBall_c::actionWarning, + &daObjVolcBall_c::actionEruption, &daObjVolcBall_c::actionEnd, + }; + + (this->*l_func[mMode])(); } -#pragma pop /* 80D22570-80D2257C 000AD0 000C+00 1/1 0/0 0/0 .text initActionPlayerWait__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::initActionPlayerWait() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/initActionPlayerWait__15daObjVolcBall_cFv.s" +void daObjVolcBall_c::initActionPlayerWait() { + setAction(MODE_PLAYER_WAIT); } -#pragma pop /* 80D2257C-80D225A4 000ADC 0028+00 3/3 0/0 0/0 .text initActionWarning__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::initActionWarning() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/initActionWarning__15daObjVolcBall_cFv.s" +void daObjVolcBall_c::initActionWarning() { + setAction(MODE_QUAKE); + startQuake(); } -#pragma pop /* 80D225A4-80D225B0 000B04 000C+00 1/1 0/0 0/0 .text initActionSwWait__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::initActionSwWait() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/initActionSwWait__15daObjVolcBall_cFv.s" +void daObjVolcBall_c::initActionSwWait() { + setAction(MODE_SWITCH_WAIT); } -#pragma pop /* ############################################################################################## */ /* 80D23E1C-80D23E20 000050 0004+00 0/1 0/0 0/0 .rodata @3969 */ @@ -906,6 +696,20 @@ COMPILER_STRIP_GATE(0x80D23E20, &lit_3970); #pragma pop /* 80D225B0-80D2267C 000B10 00CC+00 1/0 0/0 0/0 .text actionPlayerWait__15daObjVolcBall_cFv */ +// matches with literals +#ifdef NONMATCHING +void daObjVolcBall_c::actionPlayerWait() { + daPy_py_c* player_p = daPy_getPlayerActorClass(); + + if (fopAcM_searchPlayerDistanceXZ(this) < 2500.0f) { + if (fabsf(current.pos.y - player_p->current.pos.y) < 300.0f) { + mTime = getData()->mNormalWarningTime * 30.0f + + cM_rndFX(getData()->mRandWarningTime * 30.0f); + initActionWarning(); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -914,27 +718,30 @@ asm void daObjVolcBall_c::actionPlayerWait() { #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/actionPlayerWait__15daObjVolcBall_cFv.s" } #pragma pop +#endif /* 80D2267C-80D22724 000BDC 00A8+00 1/0 0/0 0/0 .text actionSwWait__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::actionSwWait() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/actionSwWait__15daObjVolcBall_cFv.s" +void daObjVolcBall_c::actionSwWait() { + if (i_fopAcM_isSwitch(this, getSwBit())) { + setAction(MODE_STOP); + mTime = getData()->mNormalWaitTime * FLOAT_LABEL(lit_3715) + + cM_rndFX(getData()->mRandWaitTime * FLOAT_LABEL(lit_3715)); + } } -#pragma pop /* 80D22724-80D227E4 000C84 00C0+00 1/0 0/0 0/0 .text actionStop__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::actionStop() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/actionStop__15daObjVolcBall_cFv.s" +void daObjVolcBall_c::actionStop() { + if (!i_fopAcM_isSwitch(this, getSwBit())) { + setAction(MODE_SWITCH_WAIT); + } + + if (func_80D23D88(&mTime) == 0) { + mTime = getData()->mNormalWarningTime * FLOAT_LABEL(lit_3715) + + cM_rndFX(getData()->mRandWarningTime * FLOAT_LABEL(lit_3715)); + initActionWarning(); + } } -#pragma pop /* ############################################################################################## */ /* 80D23E24-80D23E28 000058 0004+00 2/7 0/0 0/0 .rodata @4031 */ @@ -950,6 +757,32 @@ COMPILER_STRIP_GATE(0x80D23E28, &lit_4032); /* 80D227E4-80D22944 000D44 0160+00 1/0 0/0 0/0 .text actionWarning__15daObjVolcBall_cFv */ +// matches with literals +#ifdef NONMATCHING +void daObjVolcBall_c::actionWarning() { + if (!dComIfGp_getVibration().CheckQuake()) { + startQuake(); + } + + if (getSwBit() != 0xFF) { + if (!i_fopAcM_isSwitch(this, getSwBit())) { + dComIfGp_getVibration().StopQuake(31); + setAction(MODE_SWITCH_WAIT); + } + } + + if (func_80D23D88(&mTime) == 0) { + setAction(MODE_ERUPT); + mTime = getData()->mNormalEruptTime * FLOAT_LABEL(lit_3715) + + cM_rndFX(getData()->mRandEruptTime * FLOAT_LABEL(lit_3715)); + + mSearchBallCreateTimer = getData()->mSearchBallCreateTime * 30; + } + + i_mDoAud_seStartLevel(Z2SE_ENV_VOLCANO_SHAKE, NULL, 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(this))); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -958,6 +791,7 @@ asm void daObjVolcBall_c::actionWarning() { #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/actionWarning__15daObjVolcBall_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80D23E2C-80D23E34 000060 0004+04 0/1 0/0 0/0 .rodata @4095 */ @@ -982,6 +816,77 @@ COMPILER_STRIP_GATE(0x80D23E34, &lit_4097); /* 80D22944-80D22C6C 000EA4 0328+00 1/0 0/0 0/0 .text actionEruption__15daObjVolcBall_cFv */ +// small regalloc / literals +#ifdef NONMATCHING +void daObjVolcBall_c::actionEruption() { + if (!dComIfGp_getVibration().CheckQuake()) { + startQuake(); + } + + daPy_py_c* player_p = daPy_getPlayerActorClass(); + u32 timer = func_80D23D88(&mTime); + bool disable_ball_create = true; + + if (timer != 0) { + bool bvar2 = false; + if (getSwBit() != 0xFF && !i_fopAcM_isSwitch(this, getSwBit())) { + bvar2 = true; + } + + if (!bvar2) { + disable_ball_create = false; + } + } + + if (!disable_ball_create) { + if (func_80D23D88(&mSearchBallCreateTimer) == 0) { + createSearchBall(); + } + + if (func_80D23D6C(&mNormalBallCreateTimer) == 0) { + createNormalBall(); + } + } + + if (mBall[8].field_0x376 != 0) { + field_0x603++; + + u8 search_time = getData()->mPlayerSearchTime; + f32 shadow_intensity = getData()->mSearchBallShadowIntensity; + + if (field_0x603 < search_time) { + mBall[8].field_0x4.x = player_p->current.pos.x; + mBall[8].field_0x4.z = player_p->current.pos.z; + mBall[8].field_0x364 = player_p->current.pos; + } + + cLib_chaseF(&mBall[8].field_0x1c.x, field_0x291c, field_0x291c / (f32)search_time); + cLib_chaseF(&mBall[8].field_0x1c.y, field_0x291c, field_0x291c / (f32)search_time); + cLib_chaseF(&mBall[8].field_0x1c.z, field_0x291c, field_0x291c / (f32)search_time); + cLib_chaseF(&mBall[8].field_0x50, shadow_intensity, shadow_intensity / (f32)search_time); + + mBall[8].field_0x28 = mBall[8].field_0x1c; + mBall[8].mSphCc.SetR(field_0x291c * 100.0f); + mBall[8].mSphCc.SetC(mBall[8].field_0x4); + dComIfG_Ccsp()->Set(&mBall[8].mSphCc); + } + + if (!executeBall() && disable_ball_create) { + if (mIsBigVolc == 0) { + setAction(MODE_STOP); + mTime = getData()->mNormalWaitTime * FLOAT_LABEL(lit_3715) + + cM_rndFX(getData()->mRandWaitTime * FLOAT_LABEL(lit_3715)); + } else if (mIsBigVolc == 1) { + initActionEnd(); + } + + dComIfGp_getVibration().StopQuake(31); + } + + i_mDoAud_seStartLevel(Z2SE_ENV_VOLCANO_SHAKE, NULL, 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(this))); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -990,19 +895,56 @@ asm void daObjVolcBall_c::actionEruption() { #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/actionEruption__15daObjVolcBall_cFv.s" } #pragma pop +#endif /* 80D22C6C-80D22CD4 0011CC 0068+00 1/1 0/0 0/0 .text initActionEnd__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::initActionEnd() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/initActionEnd__15daObjVolcBall_cFv.s" +void daObjVolcBall_c::initActionEnd() { + field_0x2925 = 0; + field_0x2924 = 0; + + fopAc_ac_c* big_volc = fopAcM_Search(search_big_volc, this); + if (big_volc != NULL) { + mBigVolcActorID = fopAcM_GetID(big_volc); + } + + setAction(MODE_END); } -#pragma pop /* 80D22CD4-80D22DDC 001234 0108+00 1/0 0/0 0/0 .text actionEnd__15daObjVolcBall_cFv */ +// weird branching +#ifdef NONMATCHING +void daObjVolcBall_c::actionEnd() { + if (mIsBigVolc == 1 ||) { + if (mIsBigVolc == 1 && i_fopAcM_isSwitch(this, getSwBit())) { + return; + } + + daObjVolcBom_c* bom_p = (daObjVolcBom_c*)fopAcM_SearchByID(mBigVolcActorID); + if (bom_p != NULL) { + switch (field_0x2924) { + case 0: + bom_p->startSearch(); + field_0x2924 = 1; + case 1: + if (field_0x2925 == 60) { + field_0x2924 = 2; + } + + field_0x2925++; + break; + case 2: + orderEvent(getEvNo(), 0xFF, 1); + field_0x2924 = 3; + break; + case 3: + eventUpdate(); + break; + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1011,73 +953,106 @@ asm void daObjVolcBall_c::actionEnd() { #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/actionEnd__15daObjVolcBall_cFv.s" } #pragma pop +#endif /* 80D22DDC-80D22E24 00133C 0048+00 2/1 0/0 0/0 .text eventStart__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::eventStart() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/eventStart__15daObjVolcBall_cFv.s" -} -#pragma pop +BOOL daObjVolcBall_c::eventStart() { + daObjVolcBom_c* bom_p = (daObjVolcBom_c*)fopAcM_SearchByID(mBigVolcActorID); + if (bom_p != NULL) { + bom_p->startFall(); + } -/* ############################################################################################## */ -/* 80D23E3C-80D23E48 000070 000C+00 1/1 0/0 0/0 .rodata l_effect_id$4157 */ -SECTION_RODATA static u8 const l_effect_id[12] = { - 0x84, 0xA8, 0x84, 0xA9, 0x84, 0xAA, 0x84, 0xAB, 0x84, 0xAC, 0x84, 0xAD, -}; -COMPILER_STRIP_GATE(0x80D23E3C, &l_effect_id); + return TRUE; +} /* 80D22E24-80D22ED4 001384 00B0+00 1/1 0/0 0/0 .text setEruptEffect__15daObjVolcBall_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::setEruptEffect(int param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/setEruptEffect__15daObjVolcBall_cFi.s" -} -#pragma pop +void daObjVolcBall_c::setEruptEffect(int i_ballNo) { + static u16 const l_effect_id[6] = {0x84A8, 0x84A9, 0x84AA, 0x84AB, 0x84AC, 0x84AD}; -/* ############################################################################################## */ -/* 80D23E48-80D23E50 00007C 0008+00 1/1 0/0 0/0 .rodata l_fall_effect_id$4173 */ -SECTION_RODATA static u8 const l_fall_effect_id[8] = { - 0x84, 0xAE, 0x84, 0xAF, 0x84, 0xB0, 0x84, 0xB1, -}; -COMPILER_STRIP_GATE(0x80D23E48, &l_fall_effect_id); + vball_s* ball = &mBall[i_ballNo]; + + for (int i = 0; i < 6; i++) { + dComIfGp_particle_setColor(l_effect_id[i], &ball->field_0x4, &mTevStr, NULL, NULL, + FLOAT_LABEL(lit_3717), 0xFF, NULL, &ball->field_0x1c, NULL, -1, + NULL); + } +} /* 80D22ED4-80D22FCC 001434 00F8+00 2/2 0/0 0/0 .text setFallEffect__15daObjVolcBall_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::setFallEffect(int param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/setFallEffect__15daObjVolcBall_cFi.s" +void daObjVolcBall_c::setFallEffect(int i_ballNo) { + static u16 const l_fall_effect_id[4] = {0x84AE, 0x84AF, 0x84B0, 0x84B1}; + + vball_s* ball = &mBall[i_ballNo]; + + for (int i = 0; i < 4; i++) { + cXyz sp28; + + if (i_ballNo == 8) { + sp28.setAll(field_0x291c); + } else { + sp28 = ball->field_0x1c; + } + + dComIfGp_particle_setColor(l_fall_effect_id[i], &ball->field_0x4, &mTevStr, NULL, NULL, + FLOAT_LABEL(lit_3717), 0xFF, &ball->field_0x34, &sp28, + &ball->field_0x390[i], -1, NULL); + } } -#pragma pop /* 80D22FCC-80D23034 00152C 0068+00 2/2 0/0 0/0 .text endFallEffect__15daObjVolcBall_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::endFallEffect(int param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/endFallEffect__15daObjVolcBall_cFi.s" +void daObjVolcBall_c::endFallEffect(int i_ballNo) { + vball_s* ball = &mBall[i_ballNo]; + + for (int i = 0; i < 4; i++) { + ball->field_0x390[i].remove(); + } } -#pragma pop /* 80D23034-80D23188 001594 0154+00 1/1 0/0 0/0 .text createSearchBall__15daObjVolcBall_cFv */ +// matches with literals +#ifdef NONMATCHING +bool daObjVolcBall_c::createSearchBall() { + daPy_py_c* player_p = daPy_getPlayerActorClass(); + bool var_r30 = false; + + if (mBall[8].field_0x376 == 0) { + f32 create_freq = getData()->mSearchBallFreq; + f32 scale = getData()->mSearchBallBaseScale + cM_rndFX(getData()->mSearchBallRandScale); + f32 height = getData()->mSearchBallSetHeight; + + if (cM_rndF(1.0f) < create_freq) { + mBall[8].field_0x376 = 1; + mBall[8].field_0x4 = player_p->current.pos; + mBall[8].field_0x4.y += height; + mBall[8].field_0x4c = mBall[8].field_0x4.y; + mBall[8].field_0x1c.set(0.0f, 0.0f, 0.0f); + mBall[8].field_0x3c.set(0.0f, 0.0f, 0.0f); + mBall[8].field_0x50 = 0.0f; + + field_0x291c = scale; + field_0x603 = 0; + setFallEffect(8); + var_r30 = true; + } + + mSearchBallCreateTimer = getData()->mSearchBallCreateTime * 30; + } + + return var_r30; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daObjVolcBall_c::createSearchBall() { +asm bool daObjVolcBall_c::createSearchBall() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/createSearchBall__15daObjVolcBall_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80D23E50-80D23E54 000084 0004+00 0/1 0/0 0/0 .rodata @4279 */ @@ -1095,14 +1070,76 @@ COMPILER_STRIP_GATE(0x80D23E54, &lit_4280); #pragma pop /* 80D23188-80D23438 0016E8 02B0+00 1/1 0/0 0/0 .text createNormalBall__15daObjVolcBall_cFv */ +// matches with literals +#ifdef NONMATCHING +bool daObjVolcBall_c::createNormalBall() { + daPy_py_c* player_p = daPy_getPlayerActorClass(); + + bool bvar = false; + + f32 fvar11 = getData()->mBallSetShortRange; + f32 fvar1 = getData()->mBallSetRandom; + + cXyz sp8C(1.0f, 0.0f, 0.0f); + cXyz sp98; + + mDoMtx_stack_c::YrotS(cM_rndFX(32767.0f)); + mDoMtx_stack_c::multVec(&sp8C, &sp8C); + sp98 = sp8C; + sp8C *= fvar11; + + cXyz spA4 = player_p->current.pos + sp8C; + sp98 *= cM_rndF(fvar1); + + spA4 += sp98; + spA4.y = player_p->current.pos.y + 3000.0f; + + if (!fopAcM_gc_c::gndCheck(&spA4)) { + return false; + } + + f32 scale = getData()->mNormalScale + cM_rndFX(getData()->mScaleRandValue); + f32 ball_speedH = getData()->mBallSpeedH; + + int ball_no = -1; + for (int i = 0; i < 8; i++) { + if (mBall[i].field_0x376 == 0) { + ball_no = i; + break; + } + } + + if (ball_no != -1) { + vball_s* ball = &mBall[ball_no]; + + ball->field_0x4 = spA4; + ball->field_0x10 = spA4; + ball->field_0x1c.set(scale, scale, scale); + ball->field_0x28.set(0.0f, 0.0f, 0.0f); + ball->field_0x3c.set(0.0f, 0.0f, 0.0f); + ball->field_0x34.y = cM_rndF(32767.0f); + ball->field_0x4c = ball->field_0x4.y; + ball->field_0x48 = ball_speedH; + ball->field_0x374 = ball->field_0x34.y; + ball->field_0x376 = 1; + + setFallEffect(ball_no); + mNormalBallCreateTimer = getData()->mNormalInterval + cM_rndFX(getData()->mRandInterval); + bvar = true; + } + + return bvar; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daObjVolcBall_c::createNormalBall() { +asm bool daObjVolcBall_c::createNormalBall() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/createNormalBall__15daObjVolcBall_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80D23E58-80D23E5C 00008C 0004+00 0/1 0/0 0/0 .rodata @4407 */ @@ -1151,16 +1188,94 @@ COMPILER_STRIP_GATE(0x80D23E74, &lit_4411); #pragma pop /* 80D23438-80D23868 001998 0430+00 1/1 0/0 0/0 .text executeBall__15daObjVolcBall_cFv */ +// small regalloc / literals +#ifdef NONMATCHING +int daObjVolcBall_c::executeBall() { + int ret = 0; + vball_s* ball = mBall; + + for (int i = 0; i < 9; i++) { + if (ball->field_0x376 != 0) { + ball->field_0x10 = ball->field_0x4; + ball->field_0x364.y = ball->field_0x4.y; + ball->field_0x3c.y += fopAcM_GetGravity(this); + + if (ball->field_0x3c.y < fopAcM_GetMaxFallSpeed(this)) { + ball->field_0x3c.y = fopAcM_GetMaxFallSpeed(this); + } + + ball->field_0x3c.x = ball->field_0x48 * cM_scos(ball->field_0x374); + ball->field_0x3c.z = ball->field_0x48 * cM_ssin(ball->field_0x374); + + ball->field_0x4 += ball->field_0x3c; + ball->field_0x34.x += 2000; + + if (i != 8) { + cLib_chaseF(&ball->field_0x28.x, ball->field_0x1c.x, 0.1f); + cLib_chaseF(&ball->field_0x28.x, ball->field_0x1c.x, 0.1f); + cLib_chaseF(&ball->field_0x28.x, ball->field_0x1c.x, 0.1f); + } + + mDoMtx_stack_c::transS(ball->field_0x4); + mDoMtx_stack_c::ZXYrotM(ball->field_0x34); + + ball->mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get()); + ball->mpModel->setBaseScale(ball->field_0x28); + + ball->mAcch.CrrPos(dComIfG_Bgsp()); + + if (ball->mAcch.ChkGroundHit() || ball->mAcch.GetGroundH() == -1000000000.0f) { + mDoAud_seStart(Z2SE_OBJ_BREAK_ROCK, &mBall[i].field_0x4, 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + endFallEffect(i); + setEruptEffect(i); + ball->field_0x376 = 0; + } else { + if (i == 8) { + i_mDoAud_seStartLevel(Z2SE_OBJ_ROCK_FALL_DIRECT, &ball->field_0x4, 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + } else { + i_mDoAud_seStartLevel(Z2SE_OBJ_ROCK_FALL_DUMMY, &ball->field_0x4, 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + } + + ball->field_0x378.x = cM_atan2s(ball->field_0x4.y - ball->field_0x10.y, + ball->field_0x4.absXZ(ball->field_0x10)); + ball->field_0x378.y = cM_atan2s(ball->field_0x4.z - ball->field_0x10.z, + ball->field_0x4.x - ball->field_0x10.x); + ball->field_0x378.z = 0; + } + + ret++; + } + + ball++; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daObjVolcBall_c::executeBall() { +asm int daObjVolcBall_c::executeBall() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/executeBall__15daObjVolcBall_cFv.s" } #pragma pop +#endif /* 80D23868-80D23904 001DC8 009C+00 3/3 0/0 0/0 .text startQuake__15daObjVolcBall_cFv */ +// matches with literals +#ifdef NONMATCHING +void daObjVolcBall_c::startQuake() { + if (mIsBigVolc == 0) { + dComIfGp_getVibration().StartQuake(2, 31, cXyz(0.0f, 1.0f, 0.0f)); + } else { + dComIfGp_getVibration().StartQuake(4, 31, cXyz(0.0f, 1.0f, 0.0f)); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1169,6 +1284,7 @@ asm void daObjVolcBall_c::startQuake() { #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/startQuake__15daObjVolcBall_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80D23E7C-80D23E80 0000B0 0004+00 0/1 0/0 0/0 .rodata @4447 */ @@ -1179,71 +1295,195 @@ COMPILER_STRIP_GATE(0x80D23E7C, &lit_4447); #pragma pop /* 80D23904-80D23A0C 001E64 0108+00 1/1 0/0 0/0 .text draw__15daObjVolcBall_cFv */ +// matches with literals +#ifdef NONMATCHING +int daObjVolcBall_c::draw() { + g_env_light.settingTevStruct(0, ¤t.pos, &mTevStr); + + mTevStr.mLightPosWorld.x = mBall[8].field_0x4.x; + mTevStr.mLightPosWorld.y = mBall[8].field_0x4.y; + mTevStr.mLightPosWorld.z = mBall[8].field_0x4.z; + mTevStr.field_0x344 = mBall[8].field_0x50; + + vball_s* ball = mBall; + for (int i = 0; i < 9; i++) { + if (ball->field_0x376 != 0) { + g_env_light.setLightTevColorType_MAJI(ball->mpModel, &mTevStr); + mDoExt_modelUpdateDL(ball->mpModel); + } + + ball++; + } + + if (mBall[8].field_0x376 != 0) { + mBall[8].field_0x370 = dComIfGd_setShadow( + mBall[8].field_0x370, 0, mBall[8].mpModel, &mBall[8].field_0x364, 2000.0f, 0.0f, + mBall[8].field_0x364.y, mBall[8].mAcch.GetGroundH(), mBall[8].mAcch.m_gnd, &mTevStr, 0, + 1.0f, dDlst_shadowControl_c::getSimpleTex()); + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daObjVolcBall_c::draw() { +asm int daObjVolcBall_c::draw() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/draw__15daObjVolcBall_cFv.s" } #pragma pop +#endif /* 80D23A0C-80D23AA4 001F6C 0098+00 1/1 0/0 0/0 .text _delete__15daObjVolcBall_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daObjVolcBall_c::_delete() { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/_delete__15daObjVolcBall_cFv.s" +int daObjVolcBall_c::_delete() { + dComIfG_resDelete(&mPhase, l_arcName); + + if (mIsBigVolc == 0 || (mIsBigVolc == 1 && field_0x2926 != 0)) { + dComIfGp_getVibration().StopQuake(31); + } + + for (int i = 0; i < 9; i++) { + endFallEffect(i); + } + + return 1; } -#pragma pop /* 80D23AA4-80D23AC4 002004 0020+00 1/0 0/0 0/0 .text daObjVolcBall_Draw__FP15daObjVolcBall_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjVolcBall_Draw(daObjVolcBall_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/daObjVolcBall_Draw__FP15daObjVolcBall_c.s" +static int daObjVolcBall_Draw(daObjVolcBall_c* i_this) { + return i_this->draw(); } -#pragma pop /* 80D23AC4-80D23AE4 002024 0020+00 1/0 0/0 0/0 .text daObjVolcBall_Execute__FP15daObjVolcBall_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjVolcBall_Execute(daObjVolcBall_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/daObjVolcBall_Execute__FP15daObjVolcBall_c.s" +static int daObjVolcBall_Execute(daObjVolcBall_c* i_this) { + return i_this->execute(); } -#pragma pop /* 80D23AE4-80D23B04 002044 0020+00 1/0 0/0 0/0 .text daObjVolcBall_Delete__FP15daObjVolcBall_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjVolcBall_Delete(daObjVolcBall_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/daObjVolcBall_Delete__FP15daObjVolcBall_c.s" +static int daObjVolcBall_Delete(daObjVolcBall_c* i_this) { + return i_this->_delete(); } -#pragma pop /* 80D23B04-80D23B24 002064 0020+00 1/0 0/0 0/0 .text daObjVolcBall_Create__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daObjVolcBall_Create(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/daObjVolcBall_Create__FP10fopAc_ac_c.s" +static int daObjVolcBall_Create(fopAc_ac_c* i_this) { + return static_cast<daObjVolcBall_c*>(i_this)->create(); } -#pragma pop + +/* 80D23FE8-80D24008 -00001 0020+00 1/0 0/0 0/0 .data l_daObjVolcBall_Method */ +SECTION_DATA static void* l_daObjVolcBall_Method[8] = { + (void*)daObjVolcBall_Create__FP10fopAc_ac_c, + (void*)daObjVolcBall_Delete__FP15daObjVolcBall_c, + (void*)daObjVolcBall_Execute__FP15daObjVolcBall_c, + (void*)NULL, + (void*)daObjVolcBall_Draw__FP15daObjVolcBall_c, + (void*)NULL, + (void*)NULL, + (void*)NULL, +}; + +/* 80D24008-80D24038 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_VolcanicBall */ +SECTION_DATA extern void* g_profile_Obj_VolcanicBall[12] = { + (void*)0xFFFFFFFD, (void*)0x0003FFFD, + (void*)0x00E00000, (void*)&g_fpcLf_Method, + (void*)0x00002928, (void*)NULL, + (void*)NULL, (void*)&g_fopAc_Method, + (void*)0x02510000, (void*)&l_daObjVolcBall_Method, + (void*)0x00040000, (void*)0x000E0000, +}; + +/* 80D24038-80D24060 0001AC 0028+00 2/2 0/0 0/0 .data __vt__15daObjVolcBall_c */ +SECTION_DATA extern void* __vt__15daObjVolcBall_c[10] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)NULL, + (void*)NULL, + (void*)func_80D23DBC, + (void*)func_80D23DB4, + (void*)eventRun__17dEvLib_callback_cFv, + (void*)eventEnd__17dEvLib_callback_cFv, + (void*)eventStart__15daObjVolcBall_cFv, + (void*)__dt__15daObjVolcBall_cFv, +}; + +/* 80D24060-80D2406C 0001D4 000C+00 2/2 0/0 0/0 .data __vt__12dBgS_AcchCir */ +SECTION_DATA extern void* __vt__12dBgS_AcchCir[3] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__12dBgS_AcchCirFv, +}; + +/* 80D2406C-80D24078 0001E0 000C+00 3/3 0/0 0/0 .data __vt__10cCcD_GStts */ +SECTION_DATA extern void* __vt__10cCcD_GStts[3] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__10cCcD_GSttsFv, +}; + +/* 80D24078-80D24084 0001EC 000C+00 2/2 0/0 0/0 .data __vt__10dCcD_GStts */ +SECTION_DATA extern void* __vt__10dCcD_GStts[3] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__10dCcD_GSttsFv, +}; + +/* 80D24084-80D240A8 0001F8 0024+00 2/2 0/0 0/0 .data __vt__18dPa_levelEcallBack */ +SECTION_DATA extern void* __vt__18dPa_levelEcallBack[9] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__18dPa_levelEcallBackFv, + (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)draw__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)NULL, + (void*)cleanup__18dPa_levelEcallBackFv, +}; + +/* 80D240A8-80D240CC 00021C 0024+00 3/3 0/0 0/0 .data __vt__12dBgS_ObjAcch */ +SECTION_DATA extern void* __vt__12dBgS_ObjAcch[9] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__12dBgS_ObjAcchFv, + (void*)NULL, + (void*)NULL, + (void*)func_80D23DAC, + (void*)NULL, + (void*)NULL, + (void*)func_80D23DA4, +}; + +/* 80D240CC-80D240D8 000240 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */ +SECTION_DATA extern void* __vt__8cM3dGAab[3] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__8cM3dGAabFv, +}; + +/* 80D240D8-80D240E4 00024C 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGSph */ +SECTION_DATA extern void* __vt__8cM3dGSph[3] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__8cM3dGSphFv, +}; + +/* 80D240E4-80D240FC 000258 0018+00 3/3 0/0 0/0 .data __vt__17dEvLib_callback_c */ +SECTION_DATA extern void* __vt__17dEvLib_callback_c[6] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__17dEvLib_callback_cFv, + (void*)eventStart__17dEvLib_callback_cFv, + (void*)eventRun__17dEvLib_callback_cFv, + (void*)eventEnd__17dEvLib_callback_cFv, +}; /* 80D23B24-80D23C40 002084 011C+00 2/1 0/0 0/0 .text __dt__15daObjVolcBall_cFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daObjVolcBall_c::~daObjVolcBall_c() { +// asm daObjVolcBall_c::~daObjVolcBall_c() { +extern "C" asm void __dt__15daObjVolcBall_cFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/__dt__15daObjVolcBall_cFv.s" } @@ -1253,19 +1493,22 @@ asm daObjVolcBall_c::~daObjVolcBall_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dEvLib_callback_c::~dEvLib_callback_c() { +// asm dEvLib_callback_c::~dEvLib_callback_c() { +extern "C" asm void __dt__17dEvLib_callback_cFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/__dt__17dEvLib_callback_cFv.s" } #pragma pop /* 80D23C88-80D23C90 0021E8 0008+00 2/0 0/0 0/0 .text eventRun__17dEvLib_callback_cFv */ -bool dEvLib_callback_c::eventRun() { +// int dEvLib_callback_c::eventRun() { +extern "C" int eventRun__17dEvLib_callback_cFv(void* this_) { return true; } /* 80D23C90-80D23C98 0021F0 0008+00 2/0 0/0 0/0 .text eventEnd__17dEvLib_callback_cFv */ -bool dEvLib_callback_c::eventEnd() { +// int dEvLib_callback_c::eventEnd() { +extern "C" int eventEnd__17dEvLib_callback_cFv(void* this_) { return true; } @@ -1273,7 +1516,8 @@ bool dEvLib_callback_c::eventEnd() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cCcD_GStts::~cCcD_GStts() { +// asm cCcD_GStts::~cCcD_GStts() { +extern "C" asm void __dt__10cCcD_GSttsFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/__dt__10cCcD_GSttsFv.s" } @@ -1283,7 +1527,8 @@ asm cCcD_GStts::~cCcD_GStts() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dPa_levelEcallBack::~dPa_levelEcallBack() { +// asm dPa_levelEcallBack::~dPa_levelEcallBack() { +extern "C" asm void __dt__18dPa_levelEcallBackFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/__dt__18dPa_levelEcallBackFv.s" } @@ -1291,31 +1536,40 @@ asm dPa_levelEcallBack::~dPa_levelEcallBack() { /* 80D23D54-80D23D58 0022B4 0004+00 1/0 0/0 0/0 .text * execute__18JPAEmitterCallBackFP14JPABaseEmitter */ -void JPAEmitterCallBack::execute(JPABaseEmitter* param_0) { +// void JPAEmitterCallBack::execute(JPABaseEmitter* param_0) { +extern "C" void execute__18JPAEmitterCallBackFP14JPABaseEmitter(JPAEmitterCallBack* this_, + JPABaseEmitter* param_0) { /* empty function */ } /* 80D23D58-80D23D5C 0022B8 0004+00 1/0 0/0 0/0 .text * executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter */ -void JPAEmitterCallBack::executeAfter(JPABaseEmitter* param_0) { +// void JPAEmitterCallBack::executeAfter(JPABaseEmitter* param_0) { +extern "C" void executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter(JPAEmitterCallBack* this_, + JPABaseEmitter* param_0) { /* empty function */ } /* 80D23D5C-80D23D60 0022BC 0004+00 1/0 0/0 0/0 .text draw__18JPAEmitterCallBackFP14JPABaseEmitter */ -void JPAEmitterCallBack::draw(JPABaseEmitter* param_0) { +// void JPAEmitterCallBack::draw(JPABaseEmitter* param_0) { +extern "C" void draw__18JPAEmitterCallBackFP14JPABaseEmitter(JPAEmitterCallBack* this_, + JPABaseEmitter* param_0) { /* empty function */ } /* 80D23D60-80D23D64 0022C0 0004+00 1/0 0/0 0/0 .text * drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter */ -void JPAEmitterCallBack::drawAfter(JPABaseEmitter* param_0) { +// void JPAEmitterCallBack::drawAfter(JPABaseEmitter* param_0) { +extern "C" void drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter(JPAEmitterCallBack* this_, + JPABaseEmitter* param_0) { /* empty function */ } /* 80D23D64-80D23D6C 0022C4 0008+00 1/0 0/0 0/0 .text eventStart__17dEvLib_callback_cFv */ -bool dEvLib_callback_c::eventStart() { +// bool dEvLib_callback_c::eventStart() { +extern "C" int eventStart__17dEvLib_callback_cFv(void* this_) { return true; } @@ -1323,7 +1577,7 @@ bool dEvLib_callback_c::eventStart() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -extern "C" asm void func_80D23D6C(void* _this, u8* param_0) { +extern "C" asm u8 func_80D23D6C(u8* param_0) { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/func_80D23D6C.s" } @@ -1333,7 +1587,7 @@ extern "C" asm void func_80D23D6C(void* _this, u8* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -extern "C" asm void func_80D23D88(void* _this, u32* param_0) { +extern "C" asm u32 func_80D23D88(u32* param_0) { nofralloc #include "asm/rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball/func_80D23D88.s" } diff --git a/rel/d/a/obj/d_a_obj_volcball/unknown_translation_unit_bss.cpp b/rel/d/a/obj/d_a_obj_volcball/unknown_translation_unit_bss.cpp deleted file mode 100644 index 73003f1d86..0000000000 --- a/rel/d/a/obj/d_a_obj_volcball/unknown_translation_unit_bss.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// -// Generated By: dol2asm -// Translation Unit: unknown_translation_unit_bss -// - -#include "rel/d/a/obj/d_a_obj_volcball/unknown_translation_unit_bss.h" -#include "dol2asm.h" -#include "dolphin/types.h" - -// -// Forward References: -// - -extern "C" extern u8 data_80D24100[4]; - -// -// External References: -// - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80D24100-80D24104 000000 0004+00 0/0 1/1 0/0 .bss None */ -extern u8 data_80D24100[4]; -u8 data_80D24100[4]; |
