summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2025-07-19 00:41:46 +0300
committerGitHub <noreply@github.com>2025-07-18 14:41:46 -0700
commit9f65aa92a7b670384cd471abd7b2b8dfdea3bc96 (patch)
tree92a9540ddcb409b4ae0173c0d0973491379526c4
parent6bc4faa5f7e6bc5b3f8c67e71bd4a42e58d5afc8 (diff)
d_a_obj_tombo OK (#2537)
-rw-r--r--config/GZ2E01/rels/d_a_obj_tombo/symbols.txt2
-rw-r--r--config/GZ2J01/rels/d_a_obj_tombo/symbols.txt2
-rw-r--r--config/GZ2P01/rels/d_a_obj_tombo/symbols.txt2
-rwxr-xr-xconfigure.py2
-rw-r--r--include/d/actor/d_a_obj_tombo.h58
-rw-r--r--src/d/actor/d_a_obj_ari.cpp2
-rw-r--r--src/d/actor/d_a_obj_cho.cpp2
-rw-r--r--src/d/actor/d_a_obj_dan.cpp2
-rw-r--r--src/d/actor/d_a_obj_kabuto.cpp2
-rw-r--r--src/d/actor/d_a_obj_kamakiri.cpp2
-rw-r--r--src/d/actor/d_a_obj_kuwagata.cpp8
-rw-r--r--src/d/actor/d_a_obj_nan.cpp2
-rw-r--r--src/d/actor/d_a_obj_tombo.cpp1330
13 files changed, 659 insertions, 757 deletions
diff --git a/config/GZ2E01/rels/d_a_obj_tombo/symbols.txt b/config/GZ2E01/rels/d_a_obj_tombo/symbols.txt
index e1f158c128..0447e763cc 100644
--- a/config/GZ2E01/rels/d_a_obj_tombo/symbols.txt
+++ b/config/GZ2E01/rels/d_a_obj_tombo/symbols.txt
@@ -109,6 +109,6 @@ __vt__14dBgS_ObjGndChk = .data:0x000000A4; // type:object size:0x30 scope:global
__vt__12J3DFrameCtrl = .data:0x000000D4; // type:object size:0xC scope:global
__vt__14daObj_TomHIO_c = .data:0x000000E0; // type:object size:0xC scope:global
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
-lbl_666_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte
+l_HIOInit = .bss:0x00000008; // type:object size:0x1 scope:local data:byte
@3770 = .bss:0x0000000C; // type:object size:0xC scope:local
l_HIO = .bss:0x00000018; // type:object size:0x14 scope:global align:4 data:float
diff --git a/config/GZ2J01/rels/d_a_obj_tombo/symbols.txt b/config/GZ2J01/rels/d_a_obj_tombo/symbols.txt
index e1f158c128..fb642bbc7b 100644
--- a/config/GZ2J01/rels/d_a_obj_tombo/symbols.txt
+++ b/config/GZ2J01/rels/d_a_obj_tombo/symbols.txt
@@ -109,6 +109,6 @@ __vt__14dBgS_ObjGndChk = .data:0x000000A4; // type:object size:0x30 scope:global
__vt__12J3DFrameCtrl = .data:0x000000D4; // type:object size:0xC scope:global
__vt__14daObj_TomHIO_c = .data:0x000000E0; // type:object size:0xC scope:global
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
-lbl_666_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte
+l_HIOInit = .bss:0x00000008; // type:object size:0x1 data:byte scope:local
@3770 = .bss:0x0000000C; // type:object size:0xC scope:local
l_HIO = .bss:0x00000018; // type:object size:0x14 scope:global align:4 data:float
diff --git a/config/GZ2P01/rels/d_a_obj_tombo/symbols.txt b/config/GZ2P01/rels/d_a_obj_tombo/symbols.txt
index e1f158c128..fb642bbc7b 100644
--- a/config/GZ2P01/rels/d_a_obj_tombo/symbols.txt
+++ b/config/GZ2P01/rels/d_a_obj_tombo/symbols.txt
@@ -109,6 +109,6 @@ __vt__14dBgS_ObjGndChk = .data:0x000000A4; // type:object size:0x30 scope:global
__vt__12J3DFrameCtrl = .data:0x000000D4; // type:object size:0xC scope:global
__vt__14daObj_TomHIO_c = .data:0x000000E0; // type:object size:0xC scope:global
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
-lbl_666_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte
+l_HIOInit = .bss:0x00000008; // type:object size:0x1 data:byte scope:local
@3770 = .bss:0x0000000C; // type:object size:0xC scope:local
l_HIO = .bss:0x00000018; // type:object size:0x14 scope:global align:4 data:float
diff --git a/configure.py b/configure.py
index 1ef0aab01a..f9e9506264 100755
--- a/configure.py
+++ b/configure.py
@@ -2143,7 +2143,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_obj_toby"),
ActorRel(NonMatching, "d_a_obj_tobyhouse"),
ActorRel(NonMatching, "d_a_obj_togeTrap"),
- ActorRel(NonMatching, "d_a_obj_tombo"),
+ ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tombo"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tornado"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tornado2"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tp"),
diff --git a/include/d/actor/d_a_obj_tombo.h b/include/d/actor/d_a_obj_tombo.h
index 89ed3c42eb..f52fd5027e 100644
--- a/include/d/actor/d_a_obj_tombo.h
+++ b/include/d/actor/d_a_obj_tombo.h
@@ -1,6 +1,9 @@
#ifndef D_A_OBJ_TOMBO_H
#define D_A_OBJ_TOMBO_H
+#include "JSystem/JHostIO/JORReflexible.h"
+#include "d/actor/d_a_player.h"
+#include "d/d_cc_d.h"
#include "d/d_insect.h"
/**
@@ -11,14 +14,20 @@
* @details
*
*/
-class daObjTOMBO_c : public fopAc_ac_c {
+class daObjTOMBO_c : public dInsect_c {
public:
+ enum Action {
+ ACTION_WAIT,
+ ACTION_MOVE,
+ ACTION_LINK,
+ };
+
/* 80D19200 */ void InitCcSph();
/* 80D1926C */ void SetCcSph();
- /* 80D192E4 */ void CreateHeap();
+ /* 80D192E4 */ int CreateHeap();
/* 80D19658 */ void WaitAction();
/* 80D19744 */ void SpeedSet();
- /* 80D19834 */ void CheckWater();
+ /* 80D19834 */ bool CheckWater();
/* 80D199F4 */ void CheckGround();
/* 80D19B48 */ void CheckWall();
/* 80D19C34 */ void SearchLink();
@@ -29,25 +38,44 @@ public:
/* 80D1A514 */ void Insect_Release();
/* 80D1A524 */ void ParticleSet();
/* 80D1A648 */ void BoomChk();
- /* 80D1A904 */ void Execute();
+ /* 80D1A904 */ int Execute();
/* 80D1AB20 */ void ObjHit();
/* 80D1AC84 */ void Z_BufferChk();
- /* 80D1AE00 */ void Delete();
+ /* 80D1AE00 */ int Delete();
/* 80D1AE68 */ void setBaseMtx();
- /* 80D1AFC8 */ void CreateChk();
- /* 80D1B174 */ void create();
+ /* 80D1AFC8 */ bool CreateChk();
+ /* 80D1B174 */ int create();
+
+ inline int Draw();
private:
- /* 0x568 */ u8 field_0x568[0xa18 - 0x568];
+ /* 0x590 */ dCcD_Stts mStts;
+ /* 0x5CC */ dCcD_Sph mSph;
+ /* 0x704 */ daPy_boomerangMove_c mBoomerangMove;
+ /* 0x710 */ bool mIsHitByBoomerang;
+ /* 0x711 */ u8 mAction;
+ /* 0x712 */ u8 field_0x712;
+ /* 0x714 */ s16 field_0x714[2];
+ /* 0x718 */ s16 field_0x718;
+ /* 0x71C */ f32 field_0x71c;
+ /* 0x720 */ f32 field_0x720;
+ /* 0x724 */ s16 field_0x724;
+ /* 0x726 */ u8 field_0x726[0x73c - 0x726];
+ /* 0x73C */ cXyz field_0x73c;
+ /* 0x748 */ mDoExt_brkAnm* mBrk;
+ /* 0x74C */ mDoExt_btkAnm* mBtk;
+ /* 0x750 */ f32 field_0x750;
+ /* 0x754 */ u32 field_0x754;
+ /* 0x758 */ f32 mParticleScale;
+ /* 0x75C */ u8 field_0x75c;
+ /* 0x760 */ Z2Creature mCreature;
+ /* 0x7F0 */ dBgS_AcchCir mAcchCir;
+ /* 0x830 */ mDoExt_McaMorfSO* mpMorf;
+ /* 0x834 */ dBgS_ObjAcch mAcch;
+ /* 0xA0C */ request_of_phase_process_class mPhase;
+ /* 0xA14 */ bool mIsHIOOwner;
};
STATIC_ASSERT(sizeof(daObjTOMBO_c) == 0xa18);
-class daObj_TomHIO_c {
-public:
- /* 80D191CC */ daObj_TomHIO_c();
- /* 80D1B618 */ ~daObj_TomHIO_c();
-};
-
-
#endif /* D_A_OBJ_TOMBO_H */
diff --git a/src/d/actor/d_a_obj_ari.cpp b/src/d/actor/d_a_obj_ari.cpp
index a6d3dcc22c..7104407584 100644
--- a/src/d/actor/d_a_obj_ari.cpp
+++ b/src/d/actor/d_a_obj_ari.cpp
@@ -24,7 +24,7 @@ daObj_AriHIO_c::daObj_AriHIO_c() {
}
/* 80BA5410-80BA5414 000008 0002+02 1/2 0/0 0/0 .rodata l_ari_itemno */
-static u8 const l_ari_itemno[2] = {0xD4, 0xD5};
+static u8 const l_ari_itemno[2] = {fpcNm_ITEM_M_ANT, fpcNm_ITEM_F_ANT};
/* 80BA26BC-80BA2728 00011C 006C+00 1/1 0/0 0/0 .text InitCcSph__10daObjARI_cFv */
void daObjARI_c::InitCcSph() {
diff --git a/src/d/actor/d_a_obj_cho.cpp b/src/d/actor/d_a_obj_cho.cpp
index efe8e21006..bc4e02ec1d 100644
--- a/src/d/actor/d_a_obj_cho.cpp
+++ b/src/d/actor/d_a_obj_cho.cpp
@@ -292,7 +292,7 @@ void daObjCHO_c::Insect_Release() {
}
/* 80BCC630-80BCC634 0000B8 0002+02 1/2 0/0 0/0 .rodata l_cho_itemno */
-static u8 const l_cho_itemno[2] = {0xC2, 0xC3};
+static u8 const l_cho_itemno[2] = {fpcNm_ITEM_M_BUTTERFLY, fpcNm_ITEM_F_BUTTERFLY};
// Some unused function went here.
// This fake function is here in its place to make the literals match
diff --git a/src/d/actor/d_a_obj_dan.cpp b/src/d/actor/d_a_obj_dan.cpp
index e7460db9ef..e933e876f7 100644
--- a/src/d/actor/d_a_obj_dan.cpp
+++ b/src/d/actor/d_a_obj_dan.cpp
@@ -274,7 +274,7 @@ void daObjDAN_c::Insect_Release() {
}
/* 80BDC42C-80BDC430 00007C 0002+02 1/2 0/0 0/0 .rodata l_dan_itemno */
-static u8 const l_dan_itemno[2] = {0xCA, 0xCB};
+static u8 const l_dan_itemno[2] = {fpcNm_ITEM_M_DANGOMUSHI, fpcNm_ITEM_F_DANGOMUSHI};
/* 80BDB0E8-80BDB264 000C48 017C+00 1/1 0/0 0/0 .text Z_BufferChk__10daObjDAN_cFv */
void daObjDAN_c::Z_BufferChk() {
diff --git a/src/d/actor/d_a_obj_kabuto.cpp b/src/d/actor/d_a_obj_kabuto.cpp
index 35691d4cfd..937539f222 100644
--- a/src/d/actor/d_a_obj_kabuto.cpp
+++ b/src/d/actor/d_a_obj_kabuto.cpp
@@ -512,7 +512,7 @@ void daObjKABUTO_c::Insect_Release() {
}
/* 80C2E1E0-80C2E1E4 0000D0 0002+02 1/2 0/0 0/0 .rodata l_kab_itemno */
-static u8 const l_kab_itemno[2] = {0xC0, 0xC1};
+static u8 const l_kab_itemno[2] = {fpcNm_ITEM_M_BEETLE, fpcNm_ITEM_F_BEETLE};
// Some unused function went here.
// This fake function is here in its place to make the literals match
diff --git a/src/d/actor/d_a_obj_kamakiri.cpp b/src/d/actor/d_a_obj_kamakiri.cpp
index 229e4acf8b..592ddfefa5 100644
--- a/src/d/actor/d_a_obj_kamakiri.cpp
+++ b/src/d/actor/d_a_obj_kamakiri.cpp
@@ -520,7 +520,7 @@ void daObjKAM_c::Insect_Release() {
field_0x980 = 1;
}
-static u8 const l_kam_itemno[2] = {0xCC, 0xCD};
+static u8 const l_kam_itemno[2] = {fpcNm_ITEM_M_MANTIS, fpcNm_ITEM_F_MANTIS};
f32 floatDummy() {
return -9.0f;
diff --git a/src/d/actor/d_a_obj_kuwagata.cpp b/src/d/actor/d_a_obj_kuwagata.cpp
index 9f391cec6b..614afc4dcc 100644
--- a/src/d/actor/d_a_obj_kuwagata.cpp
+++ b/src/d/actor/d_a_obj_kuwagata.cpp
@@ -6,6 +6,7 @@
#include "d/actor/d_a_obj_kuwagata.h"
#include "d/d_cc_d.h"
#include "dol2asm.h"
+#include "f_pc/f_pc_name.h"
@@ -550,12 +551,9 @@ void daObjKUW_c::Insect_Release() {
/* ############################################################################################## */
/* 80C4D548-80C4D54C 0000B8 0002+02 1/2 0/0 0/0 .rodata l_kuw_itemno */
-SECTION_RODATA static u16 const l_kuw_itemno[1 + 1 /* padding */] = {
- 0xC4C5,
- /* padding */
- 0x0000,
+static u8 const l_kuw_itemno[2] = {
+ fpcNm_ITEM_M_STAG_BEETLE, fpcNm_ITEM_F_STAG_BEETLE,
};
-COMPILER_STRIP_GATE(0x80C4D548, &l_kuw_itemno);
/* 80C4D54C-80C4D550 0000BC 0004+00 0/0 0/0 0/0 .rodata @4438 */
#pragma push
diff --git a/src/d/actor/d_a_obj_nan.cpp b/src/d/actor/d_a_obj_nan.cpp
index 81cf43917c..d57827be52 100644
--- a/src/d/actor/d_a_obj_nan.cpp
+++ b/src/d/actor/d_a_obj_nan.cpp
@@ -552,7 +552,7 @@ void daObjNAN_c::action() {
/* ############################################################################################## */
/* 80CA3270-80CA3274 0000B4 0002+02 0/1 0/0 0/0 .rodata l_nan_itemno */
static u8 const l_nan_itemno[2] = {
- 0xC8, 0xC9,
+ fpcNm_ITEM_M_NANAFUSHI, fpcNm_ITEM_F_NANAFUSHI,
};
/* 80CA276C-80CA2904 0022AC 0198+00 1/1 0/0 0/0 .text execute__10daObjNAN_cFv */
diff --git a/src/d/actor/d_a_obj_tombo.cpp b/src/d/actor/d_a_obj_tombo.cpp
index f9f7672e98..cf77cf7410 100644
--- a/src/d/actor/d_a_obj_tombo.cpp
+++ b/src/d/actor/d_a_obj_tombo.cpp
@@ -4,859 +4,735 @@
*/
#include "d/actor/d_a_obj_tombo.h"
+#include "d/actor/d_a_player.h"
+#include "d/d_menu_insect.h"
#include "d/d_cc_d.h"
+#include "d/d_com_inf_game.h"
#include "dol2asm.h"
-
-
-
-//
-// Forward References:
-//
-
-extern "C" void __ct__14daObj_TomHIO_cFv();
-extern "C" void InitCcSph__12daObjTOMBO_cFv();
-extern "C" void SetCcSph__12daObjTOMBO_cFv();
-extern "C" static void useHeapInit__FP10fopAc_ac_c();
-extern "C" void CreateHeap__12daObjTOMBO_cFv();
-extern "C" void __dt__12J3DFrameCtrlFv();
-extern "C" static void daObjTOMBO_Create__FP10fopAc_ac_c();
-extern "C" static void daObjTOMBO_Delete__FP12daObjTOMBO_c();
-extern "C" void WaitAction__12daObjTOMBO_cFv();
-extern "C" void SpeedSet__12daObjTOMBO_cFv();
-extern "C" void CheckWater__12daObjTOMBO_cFv();
-extern "C" void __dt__14dBgS_ObjGndChkFv();
-extern "C" void CheckGround__12daObjTOMBO_cFv();
-extern "C" void CheckWall__12daObjTOMBO_cFv();
-extern "C" void SearchLink__12daObjTOMBO_cFv();
-extern "C" void LinkAction__12daObjTOMBO_cFv();
-extern "C" void MoveAction__12daObjTOMBO_cFv();
-extern "C" void Action__12daObjTOMBO_cFv();
-extern "C" void ShopAction__12daObjTOMBO_cFv();
-extern "C" void Insect_Release__12daObjTOMBO_cFv();
-extern "C" void ParticleSet__12daObjTOMBO_cFv();
-extern "C" void BoomChk__12daObjTOMBO_cFv();
-extern "C" void __dt__8cM3dGPlaFv();
-extern "C" void Execute__12daObjTOMBO_cFv();
-extern "C" void ObjHit__12daObjTOMBO_cFv();
-extern "C" void Z_BufferChk__12daObjTOMBO_cFv();
-extern "C" void Delete__12daObjTOMBO_cFv();
-extern "C" void setBaseMtx__12daObjTOMBO_cFv();
-extern "C" static void daObjTOMBO_Draw__FP12daObjTOMBO_c();
-extern "C" static void daObjTOMBO_Execute__FP12daObjTOMBO_c();
-extern "C" void CreateChk__12daObjTOMBO_cFv();
-extern "C" void create__12daObjTOMBO_cFv();
-extern "C" void __dt__12dBgS_ObjAcchFv();
-extern "C" void __dt__8cM3dGSphFv();
-extern "C" void __dt__8cM3dGAabFv();
-extern "C" static bool daObjTOMBO_IsDelete__FP12daObjTOMBO_c();
-extern "C" void __dt__14daObj_TomHIO_cFv();
-extern "C" void __sinit_d_a_obj_tombo_cpp();
-extern "C" static void func_80D1B69C();
-extern "C" static void func_80D1B6A4();
-extern "C" static void func_80D1B6AC();
-extern "C" static void func_80D1B6B4();
-extern "C" static void func_80D1B6BC();
-extern "C" extern char const* const d_a_obj_tombo__stringBase0;
-
-//
-// External References:
-//
-
-extern "C" void mDoMtx_YrotS__FPA4_fs();
-extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
-extern "C" void scaleM__14mDoMtx_stack_cFRC4cXyz();
-extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz();
-extern "C" void play__14mDoExt_baseAnmFv();
-extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss();
-extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef();
-extern "C" void init__13mDoExt_brkAnmFP16J3DMaterialTableP15J3DAnmTevRegKeyiifss();
-extern "C" void entry__13mDoExt_brkAnmFP16J3DMaterialTablef();
-extern "C" void
-__ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl();
-extern "C" void setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff();
-extern "C" void play__16mDoExt_McaMorfSOFUlSc();
-extern "C" void entryDL__16mDoExt_McaMorfSOFv();
-extern "C" void modelCalc__16mDoExt_McaMorfSOFv();
-extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv();
-extern "C" void mDoLib_project__FP3VecP3Vec();
-extern "C" void mDoLib_pos2camera__FP3VecP3Vec();
-extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
-extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff();
-extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff();
-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 dComIfGd_setSimpleShadow__FP4cXyzffR13cBgS_PolyInfosfP9_GXTexObj();
-extern "C" void isEventBit__11dSv_event_cCFUs();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void getEmitter__Q213dPa_control_c7level_cFUl();
-extern "C" void
-set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
-extern "C" void newData__13dDlst_peekZ_cFssPUl();
-extern "C" void LineCross__4cBgSFP11cBgS_LinChk();
-extern "C" void GroundCross__4cBgSFP11cBgS_GndChk();
-extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla();
-extern "C" void GetPolyAtt0__4dBgSFRC13cBgS_PolyInfo();
-extern "C" void __ct__12dBgS_AcchCirFv();
-extern "C" void SetWall__12dBgS_AcchCirFff();
-extern "C" void __dt__9dBgS_AcchFv();
-extern "C" void __ct__9dBgS_AcchFv();
-extern "C" void Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz();
-extern "C" void CrrPos__9dBgS_AcchFR4dBgS();
-extern "C" void __ct__11dBgS_GndChkFv();
-extern "C" void __dt__11dBgS_GndChkFv();
-extern "C" void __dt__18dBgS_ObjGndChk_AllFv();
-extern "C" void __ct__11dBgS_LinChkFv();
-extern "C" void __dt__11dBgS_LinChkFv();
-extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c();
-extern "C" void SetObj__16dBgS_PolyPassChkFv();
-extern "C" void __ct__10dCcD_GSttsFv();
-extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
-extern "C" void __ct__12dCcD_GObjInfFv();
-extern "C" void ChkTgHit__12dCcD_GObjInfFv();
-extern "C" void GetTgHitObj__12dCcD_GObjInfFv();
-extern "C" void GetTgHitGObj__12dCcD_GObjInfFv();
-extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph();
-extern "C" void __ct__9dInsect_cFv();
-extern "C" void Insect_GetDemoMain__9dInsect_cFv();
-extern "C" void initOffset__20daPy_boomerangMove_cFPC4cXyz();
-extern "C" void posMove__20daPy_boomerangMove_cFP4cXyzPsP10fopAc_ac_cs();
-extern "C" void bgCheckAfterOffset__20daPy_boomerangMove_cFPC4cXyz();
-extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
-extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
-extern "C" void isCatchNotGiveInsect__14dMenu_Insect_cFUc();
-extern "C" void Set__4cCcSFP8cCcD_Obj();
-extern "C" void __mi__4cXyzCFRC3Vec();
-extern "C" void cM_atan2s__Fff();
-extern "C" void cM_rndF__Ff();
-extern "C" void cM_rndFX__Ff();
-extern "C" void SetPos__11cBgS_GndChkFPC4cXyz();
-extern "C" void SetC__8cM3dGSphFRC4cXyz();
-extern "C" void SetR__8cM3dGSphFf();
-extern "C" void cLib_addCalc2__FPffff();
-extern "C" void cLib_addCalcPos__FP4cXyzRC4cXyzfff();
-extern "C" void cLib_addCalcAngleS2__FPssss();
-extern "C" void cLib_chasePos__FP4cXyzRC4cXyzf();
-extern "C" void cLib_targetAngleY__FPC3VecPC3Vec();
-extern "C" void MtxPosition__FP4cXyzP4cXyz();
-extern "C" void __ct__10Z2CreatureFv();
-extern "C" void init__10Z2CreatureFP3VecP3VecUcUc();
-extern "C" void* __nw__FUl();
-extern "C" void __dl__FPv();
-extern "C" void init__12J3DFrameCtrlFs();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */];
-extern "C" extern void* __vt__18dBgS_ObjGndChk_All[12];
-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" extern void* calc_mtx[1 + 1 /* padding */];
-extern "C" void __register_global_object();
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
-/* 80D1B6D8-80D1B6DC 000000 0004+00 14/14 0/0 0/0 .rodata @3775 */
-SECTION_RODATA static f32 const lit_3775 = 9.0f / 10.0f;
-COMPILER_STRIP_GATE(0x80D1B6D8, &lit_3775);
-
-/* 80D1B6DC-80D1B6E0 000004 0004+00 3/8 0/0 0/0 .rodata @3776 */
-SECTION_RODATA static f32 const lit_3776 = 1.0f;
-COMPILER_STRIP_GATE(0x80D1B6DC, &lit_3776);
-
-/* 80D1B7F8-80D1B818 -00001 0020+00 1/0 0/0 0/0 .data l_daObjTOMBO_Method */
-static actor_method_class l_daObjTOMBO_Method = {
- (process_method_func)daObjTOMBO_Create__FP10fopAc_ac_c,
- (process_method_func)daObjTOMBO_Delete__FP12daObjTOMBO_c,
- (process_method_func)daObjTOMBO_Execute__FP12daObjTOMBO_c,
- (process_method_func)daObjTOMBO_IsDelete__FP12daObjTOMBO_c,
- (process_method_func)daObjTOMBO_Draw__FP12daObjTOMBO_c,
-};
-
-/* 80D1B818-80D1B848 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Tombo */
-extern actor_process_profile_definition g_profile_Obj_Tombo = {
- fpcLy_CURRENT_e, // mLayerID
- 7, // mListID
- fpcPi_CURRENT_e, // mListPrio
- PROC_Obj_Tombo, // mProcName
- &g_fpcLf_Method.base, // sub_method
- sizeof(daObjTOMBO_c), // mSize
- 0, // mSizeOther
- 0, // mParameters
- &g_fopAc_Method.base, // sub_method
- 487, // mPriority
- &l_daObjTOMBO_Method, // sub_method
- 0x000C0100, // mStatus
- fopAc_ENV_e, // mActorType
- fopAc_CULLBOX_CUSTOM_e, // cullType
-};
-
-/* 80D1B848-80D1B86C 000050 0024+00 2/2 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_80D1B6BC,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80D1B6B4,
-};
-
-/* 80D1B86C-80D1B878 000074 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGSph */
-SECTION_DATA extern void* __vt__8cM3dGSph[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGSphFv,
-};
-
-/* 80D1B878-80D1B884 000080 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGAab */
-SECTION_DATA extern void* __vt__8cM3dGAab[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGAabFv,
-};
-
-/* 80D1B884-80D1B890 00008C 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGPla */
-SECTION_DATA extern void* __vt__8cM3dGPla[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGPlaFv,
-};
-
-/* 80D1B890-80D1B89C 000098 000C+00 1/1 0/0 0/0 .data __vt__12daObjTOMBO_c */
-SECTION_DATA extern void* __vt__12daObjTOMBO_c[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)Insect_Release__12daObjTOMBO_cFv,
-};
-
-/* 80D1B89C-80D1B8CC 0000A4 0030+00 3/3 0/0 0/0 .data __vt__14dBgS_ObjGndChk */
-SECTION_DATA extern void* __vt__14dBgS_ObjGndChk[12] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__14dBgS_ObjGndChkFv,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80D1B69C,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80D1B6AC,
- (void*)NULL,
- (void*)NULL,
- (void*)func_80D1B6A4,
-};
-
-/* 80D1B8CC-80D1B8D8 0000D4 000C+00 2/2 0/0 0/0 .data __vt__12J3DFrameCtrl */
-SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__12J3DFrameCtrlFv,
-};
-
-/* 80D1B8D8-80D1B8E4 0000E0 000C+00 2/2 0/0 0/0 .data __vt__14daObj_TomHIO_c */
-SECTION_DATA extern void* __vt__14daObj_TomHIO_c[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__14daObj_TomHIO_cFv,
+#include "f_pc/f_pc_name.h"
+#include "m_Do/m_Do_lib.h"
+
+class daObj_TomHIO_c : public JORReflexible {
+public:
+ /* 80D191CC */ daObj_TomHIO_c();
+ /* 80D1B618 */ virtual ~daObj_TomHIO_c() {}
+
+ #ifdef DEBUG
+ void genMessage(JORMContext* context) {
+ // Golden dragonfly
+ context->genLabel("黄金蟲(トンボ)", 0x80000001, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // Model Scale (male)
+ context->genSlider("モデルスケール(オス)", &mFemaleModelScale, 0.1f, 4.0f, 0, NULL, 0xffff, 0xffff,
+ 0x200, 0x18);
+ // Model Scale (female)
+ context->genSlider("モデルスケール(メス)", &mMaleModelScale, 0.1f, 4.0f, 0, NULL, 0xffff, 0xffff,
+ 0x200, 0x18);
+ // btk speed
+ context->genSlider("btkスピード", &field_0x10, 0.0f, 4.0f, 0, NULL, 0xffff, 0xffff, 0x200,
+ 0x18);
+ }
+ #endif
+
+ /* 0x04 */ s8 mId;
+ /* 0x08 */ f32 mFemaleModelScale;
+ /* 0x0C */ f32 mMaleModelScale;
+ /* 0x10 */ f32 mBtkSpeed;
};
/* 80D191CC-80D19200 0000EC 0034+00 1/1 0/0 0/0 .text __ct__14daObj_TomHIO_cFv */
daObj_TomHIO_c::daObj_TomHIO_c() {
- // NONMATCHING
+ mId = -1;
+ mMaleModelScale = 0.9f;
+ mFemaleModelScale = 0.9f;
+ mBtkSpeed = 1.0f;
}
/* ############################################################################################## */
/* 80D1B6E0-80D1B6E4 000008 0002+02 1/2 0/0 0/0 .rodata l_tom_itemno */
-SECTION_RODATA static u16 const l_tom_itemno[1 + 1 /* padding */] = {
- 0xD2D3,
- /* padding */
- 0x0000,
-};
-COMPILER_STRIP_GATE(0x80D1B6E0, &l_tom_itemno);
-
-/* 80D1B6E4-80D1B724 00000C 0040+00 1/1 0/0 0/0 .rodata ccSphSrc$3780 */
-const static dCcD_SrcSph ccSphSrc = {
- {
- {0x0, {{0x0, 0x0, 0x0}, {0x14002, 0x11}, 0x0}}, // mObj
- {dCcD_SE_STONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
- {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg
- {0x0}, // mGObjCo
- }, // mObjInf
- {
- {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph
- } // mSphAttr
+static u8 const l_tom_itemno[2] = {
+ fpcNm_ITEM_M_DRAGONFLY, fpcNm_ITEM_F_DRAGONFLY,
};
/* 80D19200-80D1926C 000120 006C+00 1/1 0/0 0/0 .text InitCcSph__12daObjTOMBO_cFv */
void daObjTOMBO_c::InitCcSph() {
- // NONMATCHING
+ const static dCcD_SrcSph ccSphSrc = {
+ {
+ {0x0, {{0x0, 0x0, 0x0}, {0x14002, 0x11}, 0x0}}, // mObj
+ {dCcD_SE_STONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt
+ {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjTg
+ {0x0}, // mGObjCo
+ }, // mObjInf
+ {
+ {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph
+ } // mSphAttr
+ };
+
+ mStts.Init(1, 0, this);
+ mSph.Set(ccSphSrc);
+ mSph.SetStts(&mStts);
+ mSph.SetC(current.pos);
+ mSph.OnTgNoHitMark();
}
-/* ############################################################################################## */
-/* 80D1B724-80D1B728 00004C 0004+00 1/3 0/0 0/0 .rodata @3789 */
-SECTION_RODATA static f32 const lit_3789 = 20.0f;
-COMPILER_STRIP_GATE(0x80D1B724, &lit_3789);
-
/* 80D1926C-80D192C4 00018C 0058+00 1/1 0/0 0/0 .text SetCcSph__12daObjTOMBO_cFv */
void daObjTOMBO_c::SetCcSph() {
- // NONMATCHING
+ mSph.SetC(current.pos);
+ mSph.SetR(20.0f);
+ dComIfG_Ccsp()->Set(&mSph);
}
/* 80D192C4-80D192E4 0001E4 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */
-static void useHeapInit(fopAc_ac_c* param_0) {
- // NONMATCHING
+static int useHeapInit(fopAc_ac_c* i_this) {
+ return ((daObjTOMBO_c*)i_this)->CreateHeap();
}
-/* ############################################################################################## */
-/* 80D1B7E8-80D1B7E8 000110 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80D1B7E8 = "Tombo";
-#pragma pop
-
/* 80D192E4-80D195CC 000204 02E8+00 1/1 0/0 0/0 .text CreateHeap__12daObjTOMBO_cFv */
-void daObjTOMBO_c::CreateHeap() {
- // NONMATCHING
-}
-
-/* 80D195CC-80D19614 0004EC 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */
-// J3DFrameCtrl::~J3DFrameCtrl() {
-extern "C" void __dt__12J3DFrameCtrlFv() {
- // NONMATCHING
+int daObjTOMBO_c::CreateHeap() {
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Tombo", 9);
+ JUT_ASSERT(259, modelData != 0);
+ mpMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL,
+ (J3DAnmTransform*)dComIfG_getObjectRes("Tombo", 6), 2, 1.0, 0, -1,
+ &mCreature, 0, 0x11000284);
+ if (mpMorf == NULL || mpMorf->getModel() == NULL) {
+ return 0;
+ }
+
+ J3DModel* morfModel = mpMorf->getModel();
+ mBrk = new mDoExt_brkAnm();
+ if (mBrk == NULL) {
+ return 0;
+ }
+
+ if (mSex == SEX_FEMALE) {
+ if (!mBrk->init(morfModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes("Tombo", 12), 1, 2, 1.0f, 0, -1)) {
+ return 0;
+ }
+ } else {
+ if (!mBrk->init(morfModel->getModelData(), (J3DAnmTevRegKey*)dComIfG_getObjectRes("Tombo", 13), 1, 2, 1.0f, 0, -1)) {
+ return 0;
+ }
+ }
+ mBtk = new mDoExt_btkAnm();
+ if (mBtk == NULL) {
+ return 0;
+ }
+
+ if (mSex == SEX_FEMALE) {
+ if (!mBtk->init(morfModel->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Tombo", 16), 1, 2, 1.0f, 0, -1)) {
+ return 0;
+ }
+ } else {
+ if (!mBtk->init(morfModel->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Tombo", 17), 1, 2, 1.0f, 0, -1)) {
+ return 0;
+ }
+ }
+ return 1;
}
/* 80D19614-80D19634 000534 0020+00 1/0 0/0 0/0 .text daObjTOMBO_Create__FP10fopAc_ac_c
*/
-static void daObjTOMBO_Create(fopAc_ac_c* param_0) {
- // NONMATCHING
+static int daObjTOMBO_Create(fopAc_ac_c* i_this) {
+ return ((daObjTOMBO_c*)i_this)->create();
}
/* 80D19634-80D19658 000554 0024+00 1/0 0/0 0/0 .text daObjTOMBO_Delete__FP12daObjTOMBO_c
*/
-static void daObjTOMBO_Delete(daObjTOMBO_c* param_0) {
- // NONMATCHING
+static int daObjTOMBO_Delete(daObjTOMBO_c* i_this) {
+ i_this->Delete();
+ return 1;
}
-/* ############################################################################################## */
-/* 80D1B728-80D1B72C 000050 0004+00 0/1 0/0 0/0 .rodata @3922 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3922 = 1.0f / 5.0f;
-COMPILER_STRIP_GATE(0x80D1B728, &lit_3922);
-#pragma pop
-
-/* 80D1B72C-80D1B730 000054 0004+00 0/7 0/0 0/0 .rodata @3923 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3923 = 10.0f;
-COMPILER_STRIP_GATE(0x80D1B72C, &lit_3923);
-#pragma pop
-
/* 80D19658-80D19744 000578 00EC+00 2/2 0/0 0/0 .text WaitAction__12daObjTOMBO_cFv */
void daObjTOMBO_c::WaitAction() {
- // NONMATCHING
+ cXyz cStack_28;
+ switch (field_0x712) {
+ case 0:
+ field_0x71c = field_0x71c * 0.2f;
+ field_0x720 = 1.0f * field_0x720;
+ field_0x714[0] = cM_rndF(10.0f) + 20.0f;
+ field_0x712++;
+ break;
+ case 1:
+ if (field_0x714[0] == 0) {
+ mAction = ACTION_MOVE;
+ field_0x712 = 0;
+ field_0x714[0] = cM_rndF(10.0f) + 10.0f;
+ if (field_0x714[1] == 0) {
+ SearchLink();
+ }
+ }
+ break;
+ }
+ SpeedSet();
}
-/* ############################################################################################## */
-/* 80D1B730-80D1B734 000058 0004+00 3/12 0/0 0/0 .rodata @3942 */
-SECTION_RODATA static u8 const lit_3942[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-COMPILER_STRIP_GATE(0x80D1B730, &lit_3942);
-
-/* 80D1B734-80D1B738 00005C 0004+00 0/1 0/0 0/0 .rodata @3943 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3943 = 1.0f / 10.0f;
-COMPILER_STRIP_GATE(0x80D1B734, &lit_3943);
-#pragma pop
-
/* 80D19744-80D19834 000664 00F0+00 2/2 0/0 0/0 .text SpeedSet__12daObjTOMBO_cFv */
void daObjTOMBO_c::SpeedSet() {
- // NONMATCHING
+ current.pos.y += speed.y;
+ cXyz cStack_1c(0.0f, 0.0f, speedF);
+ cXyz local_28(0.0f, 0.0f, 0.0f);
+ mDoMtx_stack_c::YrotS(current.angle.y);
+ mDoMtx_stack_c::multVec(&cStack_1c, &local_28);
+ current.pos.x += local_28.x;
+ current.pos.z += local_28.z;
+ cLib_addCalc2(&speedF, field_0x71c, 0.1f, 10.0f);
+ cLib_addCalc2(&speed.y, field_0x720, 0.1f, 10.0f);
+ cLib_addCalcAngleS2(&current.angle.y, field_0x724, 0x10, 0x1000);
+ shape_angle.y = current.angle.y;
}
-/* ############################################################################################## */
-/* 80D1B738-80D1B73C 000060 0004+00 0/3 0/0 0/0 .rodata @3971 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3971 = 100.0f;
-COMPILER_STRIP_GATE(0x80D1B738, &lit_3971);
-#pragma pop
-
-/* 80D1B73C-80D1B740 000064 0004+00 0/2 0/0 0/0 .rodata @3972 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3972 = -1000000000.0f;
-COMPILER_STRIP_GATE(0x80D1B73C, &lit_3972);
-#pragma pop
-
-/* 80D1B740-80D1B744 000068 0004+00 0/3 0/0 0/0 .rodata @3973 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_3973 = 50.0f;
-COMPILER_STRIP_GATE(0x80D1B740, &lit_3973);
-#pragma pop
-
/* 80D19834-80D1997C 000754 0148+00 1/1 0/0 0/0 .text CheckWater__12daObjTOMBO_cFv */
-void daObjTOMBO_c::CheckWater() {
- // NONMATCHING
-}
-
-/* 80D1997C-80D199F4 00089C 0078+00 4/3 0/0 0/0 .text __dt__14dBgS_ObjGndChkFv */
-// dBgS_ObjGndChk::~dBgS_ObjGndChk() {
-extern "C" void __dt__14dBgS_ObjGndChkFv() {
- // NONMATCHING
+bool daObjTOMBO_c::CheckWater() {
+ dBgS_ObjGndChk_All adStack_6c;
+ cXyz gndPos(current.pos.x, current.pos.y + 100.0f, current.pos.z);
+ adStack_6c.SetPos(&gndPos);
+ gndPos.y = dComIfG_Bgsp().GroundCross(&adStack_6c);
+ if (gndPos.y != -1e9f) {
+ if (dComIfG_Bgsp().GetPolyAtt0(adStack_6c) == 7 && current.pos.y - gndPos.y < 50.0f) {
+ return TRUE;
+ }
+ }
+ return FALSE;
}
-/* ############################################################################################## */
-/* 80D1B744-80D1B748 00006C 0004+00 0/3 0/0 0/0 .rodata @4003 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4003 = 3.0f;
-COMPILER_STRIP_GATE(0x80D1B744, &lit_4003);
-#pragma pop
-
-/* 80D1B748-80D1B74C 000070 0004+00 0/1 0/0 0/0 .rodata @4004 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4004 = 300.0f;
-COMPILER_STRIP_GATE(0x80D1B748, &lit_4004);
-#pragma pop
-
-/* 80D1B74C-80D1B750 000074 0004+00 0/1 0/0 0/0 .rodata @4005 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4005 = -3.0f;
-COMPILER_STRIP_GATE(0x80D1B74C, &lit_4005);
-#pragma pop
-
/* 80D199F4-80D19B48 000914 0154+00 1/1 0/0 0/0 .text CheckGround__12daObjTOMBO_cFv */
void daObjTOMBO_c::CheckGround() {
- // NONMATCHING
+ dBgS_ObjGndChk_All adStack_6c;
+ cXyz gndPos(current.pos.x, current.pos.y + 100.0f, current.pos.z);
+ adStack_6c.SetPos(&gndPos);
+ gndPos.y = dComIfG_Bgsp().GroundCross(&adStack_6c);
+ if (gndPos.y != -1e9f) {
+ if (current.pos.y - gndPos.y < 100.0f) {
+ field_0x720 = 3.0f;
+ } else if (current.pos.y - gndPos.y > 300.0f) {
+ field_0x720 = -3.0f;
+ }
+
+ if (current.pos.y - gndPos.y < 10.0f) {
+ speed.y = 0.0f;
+ }
+ }
}
-/* ############################################################################################## */
-/* 80D1B750-80D1B758 000078 0004+04 0/1 0/0 0/0 .rodata @4022 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4022[1 + 1 /* padding */] = {
- 200.0f,
- /* padding */
- 0.0f,
-};
-COMPILER_STRIP_GATE(0x80D1B750, &lit_4022);
-#pragma pop
-
/* 80D19B48-80D19C34 000A68 00EC+00 1/1 0/0 0/0 .text CheckWall__12daObjTOMBO_cFv */
void daObjTOMBO_c::CheckWall() {
- // NONMATCHING
+ dBgS_LinChk linChk;
+ cXyz cStack_8c(0.0f, 0.0f, 200.0f);
+ cXyz cStack_98;
+ cMtx_YrotS(*calc_mtx, current.angle.y);
+ MtxPosition(&cStack_8c, &cStack_98);
+ cStack_98 += current.pos;
+ linChk.Set(&current.pos, &cStack_98, this);
+ if (dComIfG_Bgsp().LineCross(&linChk)) {
+ field_0x724 += 0x1000;
+ field_0x714[0] = cM_rndF(10.0f) + 10.0f;
+ }
}
-/* ############################################################################################## */
-/* 80D1B758-80D1B760 000080 0008+00 0/2 0/0 0/0 .rodata @4079 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4079[8] = {
- 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D1B758, &lit_4079);
-#pragma pop
-
-/* 80D1B760-80D1B768 000088 0008+00 0/2 0/0 0/0 .rodata @4080 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4080[8] = {
- 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D1B760, &lit_4080);
-#pragma pop
-
-/* 80D1B768-80D1B770 000090 0008+00 0/2 0/0 0/0 .rodata @4081 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4081[8] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D1B768, &lit_4081);
-#pragma pop
-
-/* 80D1B770-80D1B774 000098 0004+00 0/1 0/0 0/0 .rodata @4082 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4082 = 400.0f;
-COMPILER_STRIP_GATE(0x80D1B770, &lit_4082);
-#pragma pop
-
-/* 80D1B774-80D1B778 00009C 0004+00 0/1 0/0 0/0 .rodata @4083 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4083 = 150.0f;
-COMPILER_STRIP_GATE(0x80D1B774, &lit_4083);
-#pragma pop
-
-/* 80D1B778-80D1B77C 0000A0 0004+00 0/3 0/0 0/0 .rodata @4084 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4084 = 30.0f;
-COMPILER_STRIP_GATE(0x80D1B778, &lit_4084);
-#pragma pop
-
-/* 80D1B77C-80D1B780 0000A4 0004+00 0/2 0/0 0/0 .rodata @4085 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4085 = 70.0f;
-COMPILER_STRIP_GATE(0x80D1B77C, &lit_4085);
-#pragma pop
-
/* 80D19C34-80D19E48 000B54 0214+00 1/1 0/0 0/0 .text SearchLink__12daObjTOMBO_cFv */
void daObjTOMBO_c::SearchLink() {
- // NONMATCHING
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ cXyz& playerPos = fopAcM_GetPosition(player);
+ if (current.pos.absXZ(playerPos) < 400.0f && current.pos.y - playerPos.y < 150.0f &&
+ fopAcM_GetSpeedF(player) == 0.0f && player->checkItemSwordEquip())
+ {
+ mAction = ACTION_LINK;
+ field_0x712 = 0;
+ cXyz cStack_28(30.0f, 70.0f, 0.0f);
+ MTXCopy(daPy_getLinkPlayerActorClass()->getModelJointMtx(9), *calc_mtx);
+ MtxPosition(&cStack_28, &field_0x73c);
+ }
}
-/* ############################################################################################## */
-/* 80D1B780-80D1B784 0000A8 0004+00 0/1 0/0 0/0 .rodata @4149 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4149 = 1.0f / 20.0f;
-COMPILER_STRIP_GATE(0x80D1B780, &lit_4149);
-#pragma pop
-
-/* 80D1B784-80D1B788 0000AC 0004+00 0/3 0/0 0/0 .rodata @4150 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4150 = 5.0f;
-COMPILER_STRIP_GATE(0x80D1B784, &lit_4150);
-#pragma pop
-
-/* 80D1B788-80D1B78C 0000B0 0004+00 0/1 0/0 0/0 .rodata @4151 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4151 = 2.0f;
-COMPILER_STRIP_GATE(0x80D1B788, &lit_4151);
-#pragma pop
-
/* 80D19E48-80D1A138 000D68 02F0+00 2/2 0/0 0/0 .text LinkAction__12daObjTOMBO_cFv */
void daObjTOMBO_c::LinkAction() {
- // NONMATCHING
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ fopAcM_GetPosition(player);
+ cXyz cStack_1c(30.0f, 70.0f, 0.0f);
+ cXyz cStack_28;
+ MTXCopy(daPy_getLinkPlayerActorClass()->getModelJointMtx(9), *calc_mtx);
+ MtxPosition(&cStack_1c, &cStack_28);
+ switch (field_0x712) {
+ case 0:
+ if (cLib_addCalcPos(&current.pos, cStack_28, 0.05f, 5.0f, 0.0f) < 10.0f) {
+ field_0x712++;
+ field_0x714[0] = 200;
+ mpMorf->setPlaySpeed(0.0f);
+ }
+ field_0x724 = cLib_targetAngleY(&current.pos, &cStack_28);
+ cLib_addCalcAngleS2(&current.angle.y, field_0x724, 8, 0x1000);
+ shape_angle.y = current.angle.y;
+ break;
+ case 1:
+ cLib_chasePos(&current.pos, cStack_28, 3.0f);
+ if (field_0x714[0] == 0) {
+ mAction = ACTION_WAIT;
+ field_0x712 = 1;
+ field_0x714[1] = 100;
+ speedF = 0.0f;
+ speed.y = 0.0f;
+ field_0x714[0] = 0;
+ mpMorf->setPlaySpeed(1.0f);
+ }
+ break;
+ }
+
+ if ((!player->checkItemSwordEquip() || cStack_28.abs(field_0x73c) > 2.0f) &&
+ !player->checkCutCharge())
+ {
+ mAction = ACTION_WAIT;
+ field_0x712 = 1;
+ field_0x714[1] = 100;
+ speedF = 0.0f;
+ speed.y = 0.0f;
+ field_0x714[0] = 0;
+ mpMorf->setPlaySpeed(1.0f);
+ }
+ field_0x73c = cStack_28;
}
-/* ############################################################################################## */
-/* 80D1B78C-80D1B790 0000B4 0004+00 0/1 0/0 0/0 .rodata @4175 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4175 = 4.0f;
-COMPILER_STRIP_GATE(0x80D1B78C, &lit_4175);
-#pragma pop
-
-/* 80D1B790-80D1B794 0000B8 0004+00 0/1 0/0 0/0 .rodata @4176 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4176 = 1000.0f;
-COMPILER_STRIP_GATE(0x80D1B790, &lit_4176);
-#pragma pop
-
/* 80D1A138-80D1A280 001058 0148+00 2/2 0/0 0/0 .text MoveAction__12daObjTOMBO_cFv */
void daObjTOMBO_c::MoveAction() {
- // NONMATCHING
+ cXyz local_1c;
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ switch (field_0x712) {
+ case 0: {
+ field_0x71c = cM_rndF(10.0f) + 4.0f;
+ field_0x720 = cM_rndFX(3.0f);
+ speedF = 4.0f;
+ cXyz local_1c = home.pos - current.pos;
+ local_1c.x += cM_rndFX(1000.0f);
+ local_1c.z += cM_rndFX(1000.0f);
+ field_0x724 = cM_atan2s(local_1c.x, local_1c.z);
+ CheckGround();
+ field_0x712++;
+ break;
+ }
+ case 1:
+ SpeedSet();
+ cXyz* flamePos = player->getKandelaarFlamePos();
+ if (flamePos != NULL) {
+ field_0x724 = cLib_targetAngleY(&current.pos, flamePos);
+ }
+ if (field_0x714[0] == 0) {
+ mAction = ACTION_WAIT;
+ field_0x712 = 0;
+ CheckWall();
+ }
+ break;
+ }
}
-/* ############################################################################################## */
-/* 80D1B794-80D1B798 0000BC 0004+00 2/2 0/0 0/0 .rodata @4210 */
-SECTION_RODATA static u32 const lit_4210 = 0xBA83126F;
-COMPILER_STRIP_GATE(0x80D1B794, &lit_4210);
-
-/* 80D1B798-80D1B7A0 0000C0 0008+00 2/2 0/0 0/0 .rodata @4212 */
-SECTION_RODATA static u8 const lit_4212[8] = {
- 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D1B798, &lit_4212);
-
/* 80D1A280-80D1A3EC 0011A0 016C+00 1/1 0/0 0/0 .text Action__12daObjTOMBO_cFv */
void daObjTOMBO_c::Action() {
- // NONMATCHING
+ if (fopAcM_checkHookCarryNow(this)) {
+ if (CheckWater()) {
+ fopAcM_cancelHookCarryNow(this);
+ }
+ home.pos = current.pos;
+ }
+ for (int i = 0; i < 3; i++) {
+ field_0x714[i]--;
+ if (field_0x714[i] <= 0) {
+ field_0x714[i] = 0;
+ }
+ }
+
+ switch (mAction) {
+ case ACTION_WAIT:
+ WaitAction();
+ break;
+ case ACTION_MOVE: {
+ MoveAction();
+ cLib_addCalcAngleS2(
+ &shape_angle.x,
+ cM_atan2s(field_0x720, JMAFastSqrt(speed.x * speed.x + speed.z * speed.z)) * -0.001f, 2,
+ 0x600);
+ break;
+ }
+ case ACTION_LINK:
+ LinkAction();
+ break;
+ }
+
+ Insect_GetDemoMain();
}
/* 80D1A3EC-80D1A514 00130C 0128+00 1/1 0/0 0/0 .text ShopAction__12daObjTOMBO_cFv */
void daObjTOMBO_c::ShopAction() {
- // NONMATCHING
+ for (int i = 0; i < 3; i++) {
+ field_0x714[i]--;
+ if (field_0x714[i] <= 0) {
+ field_0x714[i] = 0;
+ }
+ }
+ switch (mAction) {
+ case ACTION_WAIT:
+ WaitAction();
+ break;
+ case ACTION_MOVE: {
+ MoveAction();
+ cLib_addCalcAngleS2(
+ &shape_angle.x,
+ cM_atan2s(field_0x720, JMAFastSqrt(speed.x * speed.x + speed.z * speed.z)) * -0.001f, 2,
+ 0x600);
+ break;
+ }
+ case ACTION_LINK:
+ LinkAction();
+ break;
+ }
}
/* 80D1A514-80D1A524 001434 0010+00 1/0 0/0 0/0 .text Insect_Release__12daObjTOMBO_cFv */
void daObjTOMBO_c::Insect_Release() {
- // NONMATCHING
+ field_0x56c = 1;
+ mAction = ACTION_MOVE;
}
-/* ############################################################################################## */
-/* 80D1B7A0-80D1B7A4 0000C8 0004+00 0/0 0/0 0/0 .rodata @4311 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4311 = 3.5f;
-COMPILER_STRIP_GATE(0x80D1B7A0, &lit_4311);
-#pragma pop
-
-/* 80D1B7A4-80D1B7A8 0000CC 0004+00 0/0 0/0 0/0 .rodata @4312 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4312 = 12000.0f;
-COMPILER_STRIP_GATE(0x80D1B7A4, &lit_4312);
-#pragma pop
-
-/* 80D1B7A8-80D1B7AC 0000D0 0004+00 0/0 0/0 0/0 .rodata @4313 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4313 = 4096.0f;
-COMPILER_STRIP_GATE(0x80D1B7A8, &lit_4313);
-#pragma pop
-
-/* 80D1B7AC-80D1B7B0 0000D4 0004+00 0/1 0/0 0/0 .rodata @4314 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4314 = 0.5f;
-COMPILER_STRIP_GATE(0x80D1B7AC, &lit_4314);
-#pragma pop
-
-/* 80D1B7B0-80D1B7B4 0000D8 0004+00 0/0 0/0 0/0 .rodata @4315 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4315 = 7.0f / 10.0f;
-COMPILER_STRIP_GATE(0x80D1B7B0, &lit_4315);
-#pragma pop
-
-/* 80D1B7B4-80D1B7B8 0000DC 0004+00 0/0 0/0 0/0 .rodata @4316 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4316 = 0.25f;
-COMPILER_STRIP_GATE(0x80D1B7B4, &lit_4316);
-#pragma pop
-
-/* 80D1B7B8-80D1B7C0 0000E0 0008+00 1/2 0/0 0/0 .rodata @4347 */
-SECTION_RODATA static u8 const lit_4347[8] = {
- 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80D1B7B8, &lit_4347);
+static f32 dummyLiteral1() { return 3.5f; }
+static f32 dummyLiteral2() { return 12000.0f; }
+static f32 dummyLiteral3() { return 4096.0f; }
+static f32 dummyLiteral4() { return 0.5f; }
+static f32 dummyLiteral5() { return 0.7f; }
+static f32 dummyLiteral6() { return 0.25f; }
/* 80D1A524-80D1A648 001444 0124+00 1/1 0/0 0/0 .text ParticleSet__12daObjTOMBO_cFv */
void daObjTOMBO_c::ParticleSet() {
- // NONMATCHING
+ if (field_0x750 > field_0x754) {
+ cLib_addCalc2(&mParticleScale, 0.0f, 1.0f, 1.0f);
+ } else {
+ cLib_addCalc2(&mParticleScale, 1.0f, 1.0f, 1.0f);
+ }
+ mParticleKey1 = dComIfGp_particle_set(mParticleKey1, 0xa1b, &current.pos, &tevStr, &shape_angle,
+ 0, 0xff, 0, -1, 0, 0, 0);
+ f32 scale = mParticleScale;
+ JPABaseEmitter* pEmitter = dComIfGp_particle_getEmitter(mParticleKey1);
+ if (pEmitter != NULL) {
+ pEmitter->setGlobalParticleScale(scale, scale);
+ }
}
-/* ############################################################################################## */
-/* 80D1B7C0-80D1B7C4 0000E8 0004+00 0/2 0/0 0/0 .rodata @4420 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4420 = -1.0f;
-COMPILER_STRIP_GATE(0x80D1B7C0, &lit_4420);
-#pragma pop
-
/* 80D1A648-80D1A8BC 001568 0274+00 1/1 0/0 0/0 .text BoomChk__12daObjTOMBO_cFv */
void daObjTOMBO_c::BoomChk() {
- // NONMATCHING
-}
-
-/* 80D1A8BC-80D1A904 0017DC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGPlaFv */
-// cM3dGPla::~cM3dGPla() {
-extern "C" void __dt__8cM3dGPlaFv() {
- // NONMATCHING
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ if (mIsHitByBoomerang) {
+ cXyz& playerPos = fopAcM_GetPosition(player);
+ cXyz cStack_a8(playerPos);
+ cStack_a8.y += 100.0f;
+ if (mBoomerangMove.posMove(&current.pos, &shape_angle.y, NULL, 0x1c00)) {
+ mBoomerangMove.bgCheckAfterOffset(&current.pos);
+ current.pos.y += 0.5f;
+ } else {
+ dBgS_LinChk linChk;
+ linChk.Set(&cStack_a8, &current.pos, NULL);
+ if (dComIfG_Bgsp().LineCross(&linChk)) {
+ cM3dGPla pla;
+ dComIfG_Bgsp().GetTriPla(linChk, &pla);
+ current.pos = old.pos = linChk.GetCross();
+ mAction = ACTION_MOVE;
+ field_0x712 = 0;
+ speedF = 5.0f;
+ field_0x71c = 5.0f;
+ mIsHitByBoomerang = false;
+ field_0x718 = 100;
+ mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Tombo", 6), 2, 5.0f, 1.0f,
+ 0.0f, -1.0f);
+ home.pos = current.pos;
+ } else {
+ home.pos = current.pos;
+ mAction = ACTION_MOVE;
+ field_0x712 = 0;
+ mIsHitByBoomerang = false;
+ speedF = 5.0f;
+ field_0x71c = 5.0f;
+ field_0x718 = 100;
+ mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Tombo", 6), 2, 5.0f, 1.0f,
+ 0.0f, -1.0f);
+ current.pos.y = old.pos.y = playerPos.y + 100.0f;
+ }
+ }
+ }
}
-/* ############################################################################################## */
-/* 80D1B7C4-80D1B7C8 0000EC 0004+00 0/1 0/0 0/0 .rodata @4454 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4454 = 10000.0f;
-COMPILER_STRIP_GATE(0x80D1B7C4, &lit_4454);
-#pragma pop
-
/* 80D1B8F0-80D1B8F4 000008 0004+00 2/2 0/0 0/0 .bss None */
-static u8 data_80D1B8F0[4];
-
-/* 80D1B8F4-80D1B900 00000C 000C+00 1/1 0/0 0/0 .bss @3770 */
-static u8 lit_3770[12];
+static bool l_HIOInit;
/* 80D1B900-80D1B914 000018 0014+00 3/3 0/0 0/0 .bss l_HIO */
-static u8 l_HIO[20];
+static daObj_TomHIO_c l_HIO;
/* 80D1A904-80D1AB20 001824 021C+00 1/1 0/0 0/0 .text Execute__12daObjTOMBO_cFv */
-void daObjTOMBO_c::Execute() {
- // NONMATCHING
+int daObjTOMBO_c::Execute() {
+ if (ChkGetDemo()) {
+ field_0x750 = field_0x754 + 10000.0f;
+ mCreature.startCreatureSoundLevel(Z2SE_INSCT_KIRA, 0, -1);
+ Insect_GetDemoMain();
+ ParticleSet();
+ return 1;
+ }
+
+ attention_info.position = current.pos;
+ eyePos = current.pos;
+ eyePos.y += 10.0f;
+ switch (field_0x75c) {
+ case 0:
+ Action();
+ mParticleKey2 = dComIfGp_particle_set(mParticleKey2, 0xa1c,
+ &current.pos, &tevStr, &shape_angle, 0,
+ 0xff, 0, -1, 0, 0, 0);
+ SetCcSph();
+ ObjHit();
+ BoomChk();
+ ParticleSet();
+ break;
+ case 1:
+ ShopAction();
+ break;
+ }
+
+ mCreature.startCreatureSoundLevel(Z2SE_INSCT_KIRA, 0, -1);
+ mAcch.CrrPos(dComIfG_Bgsp());
+ mpMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
+ mBtk->setPlaySpeed(l_HIO.mBtkSpeed);
+ mBtk->play();
+ mBrk->play();
+ setBaseMtx();
+ return 1;
}
-/* ############################################################################################## */
-/* 80D1B7C8-80D1B7CC 0000F0 0004+00 0/1 0/0 0/0 .rodata @4485 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4485 = 8.0f;
-COMPILER_STRIP_GATE(0x80D1B7C8, &lit_4485);
-#pragma pop
-
/* 80D1AB20-80D1AC84 001A40 0164+00 1/1 0/0 0/0 .text ObjHit__12daObjTOMBO_cFv */
void daObjTOMBO_c::ObjHit() {
- // NONMATCHING
+ if (mSph.ChkTgHit()) {
+ cCcD_Obj* tgHitObj = mSph.GetTgHitObj();
+ if (tgHitObj->ChkAtType(AT_TYPE_BOOMERANG)) {
+ if (!mIsHitByBoomerang) {
+ mIsHitByBoomerang = true;
+ dCcD_GObjInf* tgHitObj = (dCcD_GObjInf*)mSph.GetTgHitGObj();
+ mBoomerangMove.initOffset(&current.pos, tgHitObj);
+ }
+ } else if (!tgHitObj->ChkAtType(AT_TYPE_NORMAL_SWORD) &&
+ tgHitObj->ChkAtType(AT_TYPE_HOOKSHOT))
+ {
+ cXyz cStack_28(0.0f, 0.0f, 0.0f);
+ daPy_getPlayerActorClass()->setHookshotCarryOffset(fopAcM_GetID(this), &cStack_28);
+ mAction = ACTION_MOVE;
+ field_0x712 = 0;
+ mIsHitByBoomerang = false;
+ mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Tombo", 6), 2, 5.0f, 1.0f, 0.0f,
+ -1.0f);
+ speedF = 8.0f;
+ field_0x71c = cM_rndF(5.0f) + 8.0f;
+ }
+ mSph.ClrTgHit();
+ }
}
-/* ############################################################################################## */
-/* 80D1B7CC-80D1B7D0 0000F4 0004+00 0/1 0/0 0/0 .rodata @4523 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4523 = 608.0f;
-COMPILER_STRIP_GATE(0x80D1B7CC, &lit_4523);
-#pragma pop
-
-/* 80D1B7D0-80D1B7D4 0000F8 0004+00 0/1 0/0 0/0 .rodata @4524 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4524 = 448.0f;
-COMPILER_STRIP_GATE(0x80D1B7D0, &lit_4524);
-#pragma pop
-
-/* 80D1B7D4-80D1B7D8 0000FC 0004+00 0/1 0/0 0/0 .rodata @4525 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4525 = 16777215.0f;
-COMPILER_STRIP_GATE(0x80D1B7D4, &lit_4525);
-#pragma pop
-
/* 80D1AC84-80D1AE00 001BA4 017C+00 1/1 0/0 0/0 .text Z_BufferChk__12daObjTOMBO_cFv */
void daObjTOMBO_c::Z_BufferChk() {
- // NONMATCHING
+ cXyz local_5c;
+ cXyz cStack_68;
+ cStack_68 = current.pos;
+ cStack_68.y += 20.0f;
+ mDoLib_project(&cStack_68, &local_5c);
+ camera_class* pCamera = dComIfGp_getCamera(0);
+ f32 trimHeight;
+ if (pCamera != NULL) {
+ trimHeight = pCamera->mCamera.TrimHeight();
+ } else {
+ trimHeight = 0.0f;
+ }
+ if (local_5c.x > 0.0f && local_5c.x < 608.0f && local_5c.y > trimHeight &&
+ local_5c.y < 448.0f - trimHeight)
+ {
+ dComIfGd_peekZ(local_5c.x, local_5c.y, &field_0x754);
+ }
+ f32 near = dComIfGd_getView()->near;
+ f32 far = dComIfGd_getView()->far;
+ mDoLib_pos2camera(&cStack_68, &local_5c);
+ local_5c.z += 50.0f;
+ if (local_5c.z > 0.0f) {
+ local_5c.z = 0.0f;
+ }
+ field_0x750 =
+ ((near + ((far * near) / local_5c.z)) / (far - near) + 1.0f) * 16777215.0f;
}
/* 80D1AE00-80D1AE68 001D20 0068+00 1/1 0/0 0/0 .text Delete__12daObjTOMBO_cFv */
-void daObjTOMBO_c::Delete() {
- // NONMATCHING
+int daObjTOMBO_c::Delete() {
+ dComIfG_resDelete(&mPhase, "Tombo");
+ if (mIsHIOOwner) {
+ l_HIOInit = false;
+ mDoHIO_DELETE_CHILD(l_HIO.mId);
+ }
+ if (heap != NULL) {
+ mpMorf->stopZelAnime();
+ }
+ return 1;
}
/* 80D1AE68-80D1AEC8 001D88 0060+00 1/1 0/0 0/0 .text setBaseMtx__12daObjTOMBO_cFv */
void daObjTOMBO_c::setBaseMtx() {
- // NONMATCHING
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
+ mDoMtx_stack_c::scaleM(scale);
+ mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get());
+ mpMorf->modelCalc();
+}
+
+inline int daObjTOMBO_c::Draw() {
+ if (mDraw) {
+ Z_BufferChk();
+ J3DModel* morfModel = mpMorf->getModel();
+ g_env_light.settingTevStruct(0x10, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType_MAJI(morfModel, &tevStr);
+ mBtk->entry(morfModel->getModelData());
+ mBrk->entry(morfModel->getModelData());
+ mpMorf->entryDL();
+ if (!field_0x75c) {
+ dComIfGd_setSimpleShadow(&current.pos, mAcch.GetGroundH(), 15.0f, mAcch.m_gnd, 0, -0.6f,
+ dDlst_shadowControl_c::getSimpleTex());
+ }
+ }
+ return 1;
}
-/* ############################################################################################## */
-/* 80D1B7D8-80D1B7DC 000100 0004+00 1/1 0/0 0/0 .rodata @4590 */
-SECTION_RODATA static f32 const lit_4590 = 15.0f;
-COMPILER_STRIP_GATE(0x80D1B7D8, &lit_4590);
-
-/* 80D1B7DC-80D1B7E0 000104 0004+00 1/1 0/0 0/0 .rodata @4591 */
-SECTION_RODATA static f32 const lit_4591 = -3.0f / 5.0f;
-COMPILER_STRIP_GATE(0x80D1B7DC, &lit_4591);
-
/* 80D1AEC8-80D1AFA8 001DE8 00E0+00 1/0 0/0 0/0 .text daObjTOMBO_Draw__FP12daObjTOMBO_c
*/
-static void daObjTOMBO_Draw(daObjTOMBO_c* param_0) {
- // NONMATCHING
+static int daObjTOMBO_Draw(daObjTOMBO_c* i_this) {
+ return i_this->Draw();
}
/* 80D1AFA8-80D1AFC8 001EC8 0020+00 2/1 0/0 0/0 .text daObjTOMBO_Execute__FP12daObjTOMBO_c */
-static void daObjTOMBO_Execute(daObjTOMBO_c* param_0) {
- // NONMATCHING
+static int daObjTOMBO_Execute(daObjTOMBO_c* i_this) {
+ return i_this->Execute();
}
-/* ############################################################################################## */
/* 80D1B7E0-80D1B7E4 000108 0004+00 1/2 0/0 0/0 .rodata l_musiya_num */
-SECTION_RODATA static u32 const l_musiya_num = 0x01A301A4;
-COMPILER_STRIP_GATE(0x80D1B7E0, &l_musiya_num);
-
-/* 80D1B7E8-80D1B7E8 000110 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80D1B7EE = "R_SP160";
-#pragma pop
+static u16 const l_musiya_num[2] = {0x01A3, 0x01A4};
/* 80D1AFC8-80D1B174 001EE8 01AC+00 1/1 0/0 0/0 .text CreateChk__12daObjTOMBO_cFv */
-void daObjTOMBO_c::CreateChk() {
- // NONMATCHING
+bool daObjTOMBO_c::CreateChk() {
+ u8 uVar4 = (fopAcM_GetParam(this) & 0xf00) >> 8;
+ if (uVar4 == 0xf) {
+ uVar4 = 0;
+ }
+
+ if (field_0x75c != 2) {
+ if (uVar4 != 0) {
+ if (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[l_musiya_num[0]]) || !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[l_musiya_num[1]])) {
+ return 0;
+ }
+ } else if (strcmp("R_SP160", dComIfGp_getStartStageName()) == 0 &&
+ dComIfGp_getStartStageRoomNo() == 3)
+ {
+ if (dMenu_Insect_c::isCatchNotGiveInsect(l_tom_itemno[mSex])) {
+ return 0;
+ }
+
+ if ((mSex == SEX_MALE &&
+ !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[l_musiya_num[mSex]])) ||
+ (mSex == SEX_FEMALE &&
+ !dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[l_musiya_num[mSex]])))
+ {
+ return 0;
+ }
+ }
+ }
+ return 1;
}
-/* ############################################################################################## */
-/* 80D1B7E4-80D1B7E8 00010C 0004+00 0/1 0/0 0/0 .rodata @4744 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4744 = -50.0f;
-COMPILER_STRIP_GATE(0x80D1B7E4, &lit_4744);
-#pragma pop
-
/* 80D1B174-80D1B510 002094 039C+00 1/1 0/0 0/0 .text create__12daObjTOMBO_cFv */
-void daObjTOMBO_c::create() {
- // NONMATCHING
-}
-
-/* 80D1B510-80D1B580 002430 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */
-// dBgS_ObjAcch::~dBgS_ObjAcch() {
-extern "C" void __dt__12dBgS_ObjAcchFv() {
- // NONMATCHING
-}
-
-/* 80D1B580-80D1B5C8 0024A0 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */
-// cM3dGSph::~cM3dGSph() {
-extern "C" void __dt__8cM3dGSphFv() {
- // NONMATCHING
-}
-
-/* 80D1B5C8-80D1B610 0024E8 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
-// cM3dGAab::~cM3dGAab() {
-extern "C" void __dt__8cM3dGAabFv() {
- // NONMATCHING
+int daObjTOMBO_c::create() {
+ fopAcM_SetupActor(this, daObjTOMBO_c);
+ int phase = dComIfG_resLoad(&mPhase, "Tombo");
+ if (phase == cPhs_COMPLEATE_e) {
+ OS_REPORT("TOMBO PARAM %x\n", fopAcM_GetParam(this));
+ field_0x75c = fopAcM_GetParam(this) & 0xf;
+ if (field_0x75c == 2) {
+ field_0x56c = 0;
+ shape_angle.x -= 0x2000;
+ fopAcM_OnStatus(this, fopAcM_STATUS_UNK_004000);
+ } else {
+ mDraw = true;
+ }
+ attention_info.distances[fopAc_attn_CARRY_e] = 0x5d;
+ mSex = (fopAcM_GetParam(this) & 0x10) >> 4;
+ setItemNo(l_tom_itemno[mSex]);
+ setSaveBitNo(l_musiya_num[mSex]);
+ if (mSex == SEX_FEMALE) {
+ scale.set(l_HIO.mFemaleModelScale, l_HIO.mFemaleModelScale, l_HIO.mFemaleModelScale);
+ } else if (mSex == SEX_MALE) {
+ scale.set(l_HIO.mMaleModelScale, l_HIO.mMaleModelScale, l_HIO.mMaleModelScale);
+ }
+ if (!CreateChk()) {
+ return cPhs_ERROR_e;
+ }
+ if (!fopAcM_entrySolidHeap(this, useHeapInit, 0xaa0)) {
+ return cPhs_ERROR_e;
+ }
+ if (!l_HIOInit) {
+ l_HIOInit = true;
+ mIsHIOOwner = true;
+ // Golden Dragonfly
+ l_HIO.mId = mDoHIO_CREATE_CHILD("黄金蟲(トンボ)", &l_HIO);
+ }
+ mAcchCir.SetWall(30.0f, 50.0f);
+ mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir,
+ fopAcM_GetSpeed_p(this), NULL, NULL);
+ mAcch.ClrWaterNone();
+ if (field_0x75c == 0) {
+ attention_info.flags = 0;
+ InitCcSph();
+ }
+ if (field_0x75c == 2) {
+ if (strcmp("R_SP160", dComIfGp_getStartStageName()) == 0 &&
+ dComIfGp_getStartStageRoomNo() == 3)
+ {
+ field_0x75c = 3;
+ }
+ }
+ mAction = ACTION_WAIT;
+ field_0x712 = 0;
+ gravity = 0.0f;
+ fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
+ fopAcM_SetMin(this, -50.0f, -50.0f, -50.0f);
+ fopAcM_SetMax(this, 50.0f, 50.0f, 50.0f);
+ mCreature.init(&current.pos, &eyePos, 3, 1);
+ daObjTOMBO_Execute(this);
+ }
+ return phase;
}
/* 80D1B610-80D1B618 002530 0008+00 1/0 0/0 0/0 .text daObjTOMBO_IsDelete__FP12daObjTOMBO_c */
-static bool daObjTOMBO_IsDelete(daObjTOMBO_c* param_0) {
- return true;
-}
-
-/* 80D1B618-80D1B660 002538 0048+00 2/1 0/0 0/0 .text __dt__14daObj_TomHIO_cFv */
-daObj_TomHIO_c::~daObj_TomHIO_c() {
- // NONMATCHING
-}
-
-/* 80D1B660-80D1B69C 002580 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_tombo_cpp */
-void __sinit_d_a_obj_tombo_cpp() {
- // NONMATCHING
-}
-
-#pragma push
-#pragma force_active on
-REGISTER_CTORS(0x80D1B660, __sinit_d_a_obj_tombo_cpp);
-#pragma pop
-
-/* 80D1B69C-80D1B6A4 0025BC 0008+00 1/0 0/0 0/0 .text @20@__dt__14dBgS_ObjGndChkFv */
-static void func_80D1B69C() {
- // NONMATCHING
-}
-
-/* 80D1B6A4-80D1B6AC 0025C4 0008+00 1/0 0/0 0/0 .text @76@__dt__14dBgS_ObjGndChkFv */
-static void func_80D1B6A4() {
- // NONMATCHING
-}
-
-/* 80D1B6AC-80D1B6B4 0025CC 0008+00 1/0 0/0 0/0 .text @60@__dt__14dBgS_ObjGndChkFv */
-static void func_80D1B6AC() {
- // NONMATCHING
+static int daObjTOMBO_IsDelete(daObjTOMBO_c* param_0) {
+ return 1;
}
-/* 80D1B6B4-80D1B6BC 0025D4 0008+00 1/0 0/0 0/0 .text @36@__dt__12dBgS_ObjAcchFv */
-static void func_80D1B6B4() {
- // NONMATCHING
-}
+/* 80D1B7F8-80D1B818 -00001 0020+00 1/0 0/0 0/0 .data l_daObjTOMBO_Method */
+static actor_method_class l_daObjTOMBO_Method = {
+ (process_method_func)daObjTOMBO_Create,
+ (process_method_func)daObjTOMBO_Delete,
+ (process_method_func)daObjTOMBO_Execute,
+ (process_method_func)daObjTOMBO_IsDelete,
+ (process_method_func)daObjTOMBO_Draw,
+};
-/* 80D1B6BC-80D1B6C4 0025DC 0008+00 1/0 0/0 0/0 .text @20@__dt__12dBgS_ObjAcchFv */
-static void func_80D1B6BC() {
- // NONMATCHING
-}
+/* 80D1B818-80D1B848 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Tombo */
+extern actor_process_profile_definition g_profile_Obj_Tombo = {
+ fpcLy_CURRENT_e, // mLayerID
+ 7, // mListID
+ fpcPi_CURRENT_e, // mListPrio
+ PROC_Obj_Tombo, // mProcName
+ &g_fpcLf_Method.base, // sub_method
+ sizeof(daObjTOMBO_c), // mSize
+ 0, // mSizeOther
+ 0, // mParameters
+ &g_fopAc_Method.base, // sub_method
+ 487, // mPriority
+ &l_daObjTOMBO_Method, // sub_method
+ 0x000C0100, // mStatus
+ fopAc_ENV_e, // mActorType
+ fopAc_CULLBOX_CUSTOM_e, // cullType
+};
/* 80D1B7E8-80D1B7E8 000110 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */