summaryrefslogtreecommitdiff
path: root/rel
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2023-04-21 07:18:49 -0700
committerGitHub <noreply@github.com>2023-04-21 08:18:49 -0600
commite1a0f636e5c68d53b4e00a4cff85700f6588ef1b (patch)
tree6e3419441ec2cdfbedf4dbb5abfd6017ac5b3156 /rel
parentf5fc527d39c754fde87aeb90033d2efd698ad7e2 (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.cpp832
-rw-r--r--rel/d/a/obj/d_a_obj_mgate/d_a_obj_mgate.cpp606
-rw-r--r--rel/d/a/obj/d_a_obj_volcball/Makefile2
-rw-r--r--rel/d/a/obj/d_a_obj_volcball/d_a_obj_volcball.cpp1484
-rw-r--r--rel/d/a/obj/d_a_obj_volcball/unknown_translation_unit_bss.cpp27
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, &current.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(&current.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(&current.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, &current.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, &current.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];