summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorYunataSavior <58997725+YunataSavior@users.noreply.github.com>2025-09-30 09:49:33 -0700
committerGitHub <noreply@github.com>2025-09-30 10:49:33 -0600
commitc7703d106915675940de73b6c9ea059b059fd300 (patch)
tree861394a78315f01d0d9be3b57fd5cfb9aa2f3b54 /include
parent0520ce17570cd3973c244b297542f5903e5af412 (diff)
d_a_obj_pumpkin OK (#2715)
* Initial obj_pumpkin work * pumpkin execute done * d_a_obj_pumpkin OK * Remove NONMATCHING in obj_pumpkin * obj_pumpkin PR comments
Diffstat (limited to 'include')
-rw-r--r--include/d/actor/d_a_npc_jagar.h110
-rw-r--r--include/d/actor/d_a_obj_pumpkin.h181
2 files changed, 213 insertions, 78 deletions
diff --git a/include/d/actor/d_a_npc_jagar.h b/include/d/actor/d_a_npc_jagar.h
index c548104028..00b177757e 100644
--- a/include/d/actor/d_a_npc_jagar.h
+++ b/include/d/actor/d_a_npc_jagar.h
@@ -12,58 +12,37 @@
*
*/
+struct daNpc_Jagar_HIOParam {
+ /* 0x00 */ daNpcT_HIOParam common;
+ /* 0x8C */ f32 pumpkin_watch_range;
+ /* 0x90 */ f32 pumpkin_watch_Ymax;
+ /* 0x94 */ f32 pumpkin_watch_Ymin;
+ /* 0x98 */ f32 running_speed;
+ /* 0x9C */ f32 hidden_state_release_dist;
+};
+
class daNpc_Jagar_Param_c {
- public:
- /* 80A1A2C4 */ virtual ~daNpc_Jagar_Param_c() {}
-
- struct Data {
- /* 0x00 */ f32 field_0x00; // 170.0f
- /* 0x04 */ f32 field_0x04; // -3.0f
- /* 0x08 */ f32 field_0x08; // 1.0f
- /* 0x0C */ f32 field_0x0c; // 400.0f
- /* 0x10 */ f32 field_0x10; // 255.0f
- /* 0x14 */ f32 field_0x14; // 160.0f
- /* 0x18 */ f32 field_0x18; // 35.0f
- /* 0x1C */ f32 field_0x1c; // 30.0f
- /* 0x20 */ f32 field_0x20; // 0.0f
- /* 0x24 */ f32 field_0x24; // 0.0f
- /* 0x28 */ f32 field_0x28; // 10.0f
- /* 0x2C */ f32 field_0x2c; // -10.0f
- /* 0x30 */ f32 field_0x30; // 30.0f
- /* 0x34 */ f32 field_0x34; // -10.0f
- /* 0x38 */ f32 field_0x38; // 45.0f
- /* 0x3C */ f32 field_0x3c; // -45.0f
- /* 0x40 */ f32 field_0x40; // 0.6f
- /* 0x44 */ f32 field_0x44; // 12.0f
- /* 0x48 */ s16 field_0x48;
- /* 0x4A */ s16 field_0x4a;
- /* 0x4C */ s16 field_0x4c;
- /* 0x4E */ s16 field_0x4e;
- /* 0x50 */ f32 field_0x50; // 110.0f
- /* 0x54 */ f32 field_0x54; // 500.0f
- /* 0x58 */ f32 field_0x58; // 300.0f
- /* 0x5C */ f32 field_0x5c; // -300.0f
- /* 0x60 */ s16 field_0x60; // 60
- /* 0x62 */ s16 field_0x62; // 8
- /* 0x64 */ f32 field_0x64; // 0.0f
- /* 0x68 */ f32 field_0x68; // 0.0f
- /* 0x6C */ f32 field_0x6c; // 4.0f
- /* 0x70 */ f32 field_0x70; // 0.0f
- /* 0x74 */ f32 field_0x74; // 0.0f
- /* 0x78 */ f32 field_0x78; // 0.0f
- /* 0x7C */ f32 field_0x7c; // 0.0f
- /* 0x80 */ f32 field_0x80; // 0.0f
- /* 0x84 */ f32 field_0x84; // 0.0f
- /* 0x88 */ f32 field_0x88; // 0.0f
- /* 0x8C */ f32 field_0x8c; // 1400.0f
- /* 0x90 */ f32 field_0x90; // 200.0f
- /* 0x94 */ f32 field_0x94; // -800.0f
- /* 0x98 */ f32 field_0x98; // 16.0f
- /* 0x9C */ f32 field_0x9c; // 1800.0f
- };
-
- static const Data m;
- };
+public:
+ /* 80A1A2C4 */ virtual ~daNpc_Jagar_Param_c() {}
+
+ static const daNpc_Jagar_HIOParam m;
+};
+
+#if DEBUG
+class daNpc_Jagar_HIO_c : public mDoHIO_entry_c {
+public:
+ daNpc_Jagar_HIO_c();
+
+ void listenPropertyEvent(const JORPropertyEvent*);
+ void genMessage(JORMContext*);
+
+ daNpc_Jagar_HIOParam m;
+};
+
+#define NPC_JAGAR_HIO_CLASS daNpc_Jagar_HIO_c
+#else
+#define NPC_JAGAR_HIO_CLASS daNpc_Jagar_Param_c
+#endif
class daNpc_Jagar_c : public daNpcT_c {
public:
@@ -181,9 +160,9 @@ public:
BOOL chkFindWolf() {
int uVar3 = (int)daNpcT_getDistTableIdx(field_0xff0, field_0xff4);
- return daNpcT_c::chkFindWolf(mCurAngle.y, uVar3, field_0xfec, daNpc_Jagar_Param_c::m.field_0x54,
- daNpc_Jagar_Param_c::m.field_0x50, daNpc_Jagar_Param_c::m.field_0x58,
- daNpc_Jagar_Param_c::m.field_0x5c, 1);
+ return daNpcT_c::chkFindWolf(mCurAngle.y, uVar3, field_0xfec, mpHIO->m.common.search_distance,
+ mpHIO->m.common.fov, mpHIO->m.common.search_height,
+ mpHIO->m.common.search_depth, 1);
}
int chkCondition(int i_val) {
@@ -225,10 +204,29 @@ public:
u8 getPathID() { return (fopAcM_GetParam(this) & 0xff00) >> 8; }
+ int crashPumpkin(fopAc_ac_c* pumpkin_p) {
+ int reg_r30;
+ if (mType == 0 && fopAcM_GetName(pumpkin_p) == PROC_OBJ_PUMPKIN && !daNpcT_chkEvtBit(0xAE)
+ && daNpcT_chkEvtBit(0x25B) && !daNpcT_chkEvtBit(0x235)) {
+ ++field_0xffc;
+ reg_r30 = chkPointInArea(pumpkin_p->current.pos, current.pos, mpHIO->m.pumpkin_watch_range,
+ mpHIO->m.pumpkin_watch_Ymax, mpHIO->m.pumpkin_watch_Ymin, 0);
+ if (reg_r30) {
+ if (field_0xffc >= 4) {
+ daNpcT_onTmpBit(0x1B);
+ }
+
+ return 1;
+ }
+ }
+
+ return 0;
+ }
+
static char* mCutNameList[7];
static cutFunc mCutList[7];
private:
- /* 0x0E40 */ int field_0xe40;
+ /* 0x0E40 */ NPC_JAGAR_HIO_CLASS* mpHIO;
/* 0x0E44 */ dCcD_Cyl mCyl1;
/* 0x0F80 */ u8 mType;
/* 0x0F84 */ daNpcT_ActorMngr_c mActorMngr[5];
@@ -239,7 +237,7 @@ private:
/* 0x0FF0 */ int field_0xff0;
/* 0x0FF4 */ int field_0xff4;
/* 0x0FF8 */ int field_0xff8;
- /* 0x0FFC */ u8 field_0xffc[0x1000 - 0xffc];
+ /* 0x0FFC */ int field_0xffc;
/* 0x1000 */ u8 field_0x1000;
/* 0x1001 */ u8 field_0x1001;
/* 0x1002 */ u8 field_0x1002;
diff --git a/include/d/actor/d_a_obj_pumpkin.h b/include/d/actor/d_a_obj_pumpkin.h
index 1d0d446d55..b95481f9ee 100644
--- a/include/d/actor/d_a_obj_pumpkin.h
+++ b/include/d/actor/d_a_obj_pumpkin.h
@@ -2,6 +2,50 @@
#define D_A_OBJ_PUMPKIN_H
#include "f_op/f_op_actor_mng.h"
+#include "d/d_bg_s_acch.h"
+#include "d/d_cc_d.h"
+#include "d/actor/d_a_player.h"
+
+struct daObj_Pumpkin_HIOParam {
+ /* 0x00 */ f32 featured_offset;
+ /* 0x04 */ f32 gravity;
+ /* 0x08 */ f32 scale;
+ /* 0x0C */ f32 real_shadow_size;
+ /* 0x10 */ f32 weight;
+ /* 0x14 */ f32 height;
+ /* 0x18 */ f32 knee_length;
+ /* 0x1C */ f32 width;
+ /* 0x20 */ f32 fire_rate;
+ /* 0x24 */ f32 launch_angle;
+ /* 0x28 */ f32 floating_offset;
+ /* 0x2C */ s16 hold_on;
+ /* 0x2E */ s16 pull_sound_delay;
+ /* 0x30 */ s16 growth_time_1;
+ /* 0x32 */ s16 growth_time_2;
+};
+
+class daObj_Pumpkin_Param_c {
+public:
+ /* 80CB8304 */ virtual ~daObj_Pumpkin_Param_c() {}
+
+ static const daObj_Pumpkin_HIOParam m;
+};
+
+#if DEBUG
+class daObj_Pumpkin_HIO_c : public mDoHIO_entry_c {
+public:
+ daObj_Pumpkin_HIO_c();
+
+ void listenPropertyEvent(const JORPropertyEvent*);
+ void genMessage(JORMContext*);
+
+ daObj_Pumpkin_HIOParam m;
+};
+
+#define OBJ_PUMPKIN_HIO_CLASS daObj_Pumpkin_HIO_c
+#else
+#define OBJ_PUMPKIN_HIO_CLASS daObj_Pumpkin_Param_c
+#endif
/**
* @ingroup actors-objects
@@ -12,21 +56,78 @@
*
*/
class daObj_Pumpkin_c : public fopAc_ac_c {
+private:
+ /* 0x568 */ OBJ_PUMPKIN_HIO_CLASS* mpHIO;
+ /* 0x56C */ request_of_phase_process_class mPhaseReq;
+ /* 0x574 */ J3DModel* mpModel;
+ /* 0x578 */ dBgS_ObjAcch mObjAcch;
+ /* 0x750 */ dCcD_Stts mStts;
+ /* 0x78C */ dBgS_AcchCir mAcchCir;
+ /* 0x7CC */ cBgS_GndChk mGndChk;
+ /* 0x808 */ dCcD_Cyl mCyl0;
+ /* 0x944 */ dCcD_Cyl mCyl1;
+ /* 0xA80 */ daPy_boomerangMove_c mBoomerangMove;
+ /* 0xA8C */ cM3dGLin mLin;
+ /* 0xAA8 */ dBgS_LinChk mLinChk;
+ /* 0xB18 */ f32 mPumpkinScale;
+ /* 0xB1C */ u8 mType;
+ /* 0xB20 */ cXyz field_0xB20;
+ /* 0xB2C */ cXyz field_0xB2C;
+ /* 0xB38 */ csXyz field_0xB38;
+ /* 0xB40 */ fpc_ProcID mItemProcId;
+ /* 0xB44 */ int field_0xB44;
+ /* 0xB48 */ int field_0xB48;
+ /* 0xB4C */ int field_0xB4C;
+ /* 0xB50 */ int field_0xB50;
+ /* 0xB54 */ int field_0xB54;
+ /* 0xB58 */ int field_0xB58;
+ /* 0xB5C */ f32 field_0xB5C;
+ /* 0xB60 */ f32 field_0xB60;
+ /* 0xB64 */ f32 mWaterY;
+ /* 0xB68 */ f32 field_0xB68;
+ /* 0xB6C */ u8 field_0xB6C[0xB70 - 0xB6C];
+ /* 0xB70 */ f32 field_0xB70;
+ /* 0xB74 */ f32 field_0xB74;
+ /* 0xB78 */ s16 field_0xB78;
+ /* 0xB7A */ s16 field_0xB7A;
+ /* 0xB7C */ s16 field_0xB7C;
+ /* 0xB7E */ s16 field_0xB7E;
+ /* 0xB80 */ s16 field_0xB80;
+ /* 0xB82 */ u8 field_0xB82[0xB88 - 0xB82];
+ /* 0xB88 */ u32 mWaterPrtcls[4];
+ /* 0xB98 */ u32 mHamonPrtcl;
+ /* 0xB9C */ u8 field_0xB9C[0xBA0 - 0xB9C];
+ /* 0xBA0 */ u32 mSmokePrtcl1;
+ /* 0xBA4 */ u32 mSmokePrtcl2;
+ /* 0xBA8 */ u8 field_0xBA8;
+ /* 0xBA9 */ u8 field_0xBA9;
+ /* 0xBAA */ u8 field_0xBAA;
+ /* 0xBAB */ u8 field_0xBAB;
+ /* 0xBAC */ u8 field_0xBAC;
+ /* 0xBAD */ u8 field_0xBAD;
+ /* 0xBAE */ u8 field_0xBAE;
+ /* 0xBAF */ u8 field_0xBAF;
+ /* 0xBB0 */ u8 field_0xBB0;
+ /* 0xBB1 */ u8 field_0xBB1;
+ /* 0xBB2 */ u8 field_0xBB2;
+ /* 0xBB3 */ u8 field_0xbb3;
+ /* 0xBB4 */ u8 field_0xbb4;
+
public:
- /* 80CB578C */ ~daObj_Pumpkin_c();
- /* 80CB5A04 */ void create();
- /* 80CB5F88 */ void CreateHeap();
- /* 80CB6018 */ void Delete();
- /* 80CB604C */ void Execute();
- /* 80CB7638 */ void Draw();
- /* 80CB7824 */ void createHeapCallBack(fopAc_ac_c*);
- /* 80CB7844 */ void isDelete();
+ /* 80CB578C */ virtual ~daObj_Pumpkin_c();
+ /* 80CB5A04 */ int create();
+ /* 80CB5F88 */ int CreateHeap();
+ /* 80CB6018 */ int Delete();
+ /* 80CB604C */ int Execute();
+ /* 80CB7638 */ int Draw();
+ /* 80CB7824 */ static int createHeapCallBack(fopAc_ac_c*);
+ /* 80CB7844 */ int isDelete();
/* 80CB78C8 */ void setEnvTevColor();
/* 80CB7924 */ void setRoomNo();
/* 80CB7968 */ void reset();
/* 80CB79DC */ void setMtx();
- /* 80CB7AE4 */ void calcRollAngle(s16, int);
- /* 80CB7B84 */ void getWallAngle(s16, s16*);
+ /* 80CB7AE4 */ s16 calcRollAngle(s16, int);
+ /* 80CB7B84 */ int getWallAngle(s16, s16*);
/* 80CB7D14 */ void setSmokePrtcl();
/* 80CB7D98 */ void setWaterPrtcl();
/* 80CB7E98 */ void setHamonPrtcl();
@@ -42,22 +143,58 @@ public:
mpModel->setBaseTRMtx(mtx);
}
-private:
- /* 0x568 */ u8 field_0x568[0x574 - 0x568];
- /* 0x574 */ J3DModel* mpModel;
- /* 0x578 */ u8 field_0x578[0xbb3 - 0x578];
- /* 0xB7C */ u8 field_0xbb3;
- /* 0xB7E */ u8 field_0xbb4[0xbbc - 0xbb4];
-};
+ int getItemTableNo() {
+ u8 prm = fopAcM_GetParam(this) & 0xFF;
+ if (prm == 0xFF) {
+ return -1;
+ }
-STATIC_ASSERT(sizeof(daObj_Pumpkin_c) == 0xbbc);
+ return prm;
+ }
-class daObj_Pumpkin_Param_c {
-public:
- /* 80CB8304 */ ~daObj_Pumpkin_Param_c();
+ u8 getType() {
+ u8 prm = (fopAcM_GetParam(this) & 0xFF00) >> 8;
+ switch (prm) {
+ case 0:
+ return 0;
+ case 1:
+ return 1;
+ case 2:
+ return 2;
+ case 3:
+ return 3;
+ default:
+ return 0;
+ }
+ }
- static u8 const m[52];
+ u8 getProcType() {
+ u8 prm = (fopAcM_GetParam(this) & 0xF0000000) >> 0x1C;
+ if (prm == 0xF) {
+ return 0;
+ }
+
+ return prm;
+ }
+
+ void popup(f32 i_f0, f32 i_deg, cXyz* ip_vec) {
+ if (ip_vec != NULL) {
+ current.pos = *ip_vec;
+ old.pos = current.pos;
+ }
+
+ s16 temp_r30 = cM_deg2s(i_deg);
+ speed.setall(0.0f);
+ speed.y = i_f0 * cM_ssin(temp_r30);
+ speedF = i_f0 * cM_scos(temp_r30);
+ field_0xB50 = 6;
+ field_0xB7C = 0x4000;
+ field_0xBAD = 1;
+ field_0xB74 = 0.0f;
+ }
};
+STATIC_ASSERT(sizeof(daObj_Pumpkin_c) == 0xbbc);
+
#endif /* D_A_OBJ_PUMPKIN_H */