summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorEmma <zerox029@gmail.com>2025-03-25 21:04:00 -0400
committerGitHub <noreply@github.com>2025-03-25 18:04:00 -0700
commite876797c3d1e1192755e554deb9fce49af5f280b (patch)
tree47d1782dbca9b3364c46827041c8cbc6caca6a4f /include
parentacad3dba2a69e631021ed073c94249a0a9787d16 (diff)
d_a_obj_flag 95% (#2341)
* Started work on d_a_obj_stick * Lots of green * Fixed mAcch vtable * Only missing switch/if problem in create * All green * Set stick matching * Cleanup * Addressed PR comments * Reset vscode config * Started d_a_obj_flag * More work on flag * More work on flag * Flag 60% * Flag progress * 80% done * 87% done * 95% * Some more work * Addressed PR comments * Switched c for 99
Diffstat (limited to 'include')
-rw-r--r--include/d/actor/d_a_obj_flag.h140
1 files changed, 136 insertions, 4 deletions
diff --git a/include/d/actor/d_a_obj_flag.h b/include/d/actor/d_a_obj_flag.h
index 1c05a39454..e808921ca7 100644
--- a/include/d/actor/d_a_obj_flag.h
+++ b/include/d/actor/d_a_obj_flag.h
@@ -2,11 +2,21 @@
#define D_A_OBJ_FLAG_H
#include "f_op/f_op_actor_mng.h"
+#include "d/d_com_inf_game.h"
+#include "d/actor/d_a_set_bgobj.h"
+
+static int createSolidHeap(fopAc_ac_c*);
+static int nodeCallBack(J3DJoint*, int);
class FlagJoint_c {
public:
/* 80BEC3BC */ ~FlagJoint_c();
/* 80BEC4E0 */ FlagJoint_c();
+
+ csXyz mJoint1;
+ csXyz mJoint2;
+ csXyz mJoint3;
+ s16 mRv;
};
/**
@@ -18,6 +28,21 @@ public:
*
*/
class daObjFlag_c : public fopAc_ac_c {
+private:
+ /* 0x568 */ J3DModel* mpModel1;
+ /* 0x56c */ J3DModel* mpModel2;
+ /* 0x570 */ request_of_phase_process_class mPhase;
+ /* 0x578 */ request_of_phase_process_class mPhase2;
+ /* 0x580 */ FlagJoint_c mFlagJoints[4];
+ /* 0x5d0 */ cXyz mPos;
+ /* 0x5dc */ f32 field_0x5dc;
+ /* 0x5e0 */ s16 field_0x5e0;
+ /* 0x5e2 */ s16 field_0x5e2;
+ /* 0x5e4 */ s16 field_0x5e4;
+ /* 0x5e6 */ s16 field_0x5e6;
+ /* 0x5e8 */ s16 field_0x5e8;
+ /* 0x5ea */ u8 field_0x568[0x5ec - 0x5ea];
+
public:
/* 80BEB778 */ void create_init();
/* 80BEB8F0 */ void initBaseMtx();
@@ -25,12 +50,119 @@ public:
/* 80BEB9AC */ void calcJointAngle();
/* 80BEBC58 */ void calcAngleSwingZ(FlagJoint_c*, f32);
/* 80BEBDAC */ void calcAngleSwingX(FlagJoint_c*, f32);
- /* 80BEBE64 */ void getSwingY(f32);
+ /* 80BEBE64 */ f32 getSwingY(f32);
- static u8 const M_attr[52];
+ ~daObjFlag_c() {
+ dComIfG_resDelete(&this->mPhase, "FlagObj");
+ dComIfG_resDelete(&this->mPhase2, daSetBgObj_c::getArcName(this));
+ }
-private:
- /* 0x568 */ u8 field_0x568[0x5ec - 0x568];
+ int create() {
+ fopAcM_SetupActor(this, daObjFlag_c);
+
+ int phase_state = dComIfG_resLoad(&mPhase, "FlagObj");
+ if (phase_state != cPhs_COMPLEATE_e) {
+ return phase_state;
+ }
+
+ phase_state = dComIfG_resLoad(&mPhase2, daSetBgObj_c::getArcName(this));
+ if(phase_state == cPhs_COMPLEATE_e) {
+ if(!fopAcM_entrySolidHeap(this, createSolidHeap, 0x4000)) {
+ return cPhs_ERROR_e;
+ }
+
+ create_init();
+ }
+
+ return phase_state;
+ }
+
+ int execute() {
+ if (mpModel1 == NULL) {
+ return 1;
+ }
+
+ calcJointAngle();
+ return 1;
+ }
+
+ int draw() {
+ g_env_light.settingTevStruct(0x10, &current.pos, &tevStr);
+ dComIfGd_setListBG();
+ g_env_light.setLightTevColorType_MAJI(mpModel2, &tevStr);
+ mDoExt_modelUpdateDL(mpModel2);
+
+ if(mpModel1 != NULL) {
+ g_env_light.setLightTevColorType_MAJI(mpModel1, &tevStr);
+ mDoExt_modelUpdateDL(mpModel1);
+ }
+
+ dComIfGd_setList();
+
+ return 1;
+ }
+
+ int createHeap() {
+ bool tmp = 0;
+ s8 angle = (u8)shape_angle.x;
+ if(angle <= -1 || angle > 99) {
+ tmp = false;
+ }
+ else {
+ tmp = true;
+
+ char resName[12];
+ sprintf(resName, "flag%02d.bmd");
+
+ shape_angle.setall(0);
+ current.angle.setall(0);
+
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("FlagObj", resName);
+ mpModel1 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
+
+ for(u8 i = 0; i < 5; i += 1) {
+ J3DJoint* nodePtr = (J3DJoint*)((u64)mpModel1->getModelData()->getJointNodePointer(i));
+ if(nodePtr != NULL) {
+ nodePtr->setCallBack(nodeCallBack);
+ mpModel1->setUserArea((u64)this);
+ }
+ }
+ }
+
+ mpModel2 = mDoExt_J3DModel__create((J3DModelData *)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), "model0.bmd"), 0x80000, 0x11000084);
+ if(mpModel2 == NULL && tmp && mpModel1 == NULL) {
+ return 0;
+ }
+
+ return 1;
+ }
+
+ struct M_attrs {
+ /* 0x00 */ f32 field_0x00;
+ /* 0x04 */ f32 field_0x04;
+ /* 0x08 */ f32 field_0x08;
+ /* 0x0c */ s16 field_0x0c;
+ /* 0x0e */ s16 field_0x0e;
+ /* 0x10 */ s16 fielx_0x10;
+ /* 0x12 */ s16 fielx_0x12;
+ /* 0x14 */ s16 field_0x14;
+ /* 0x16 */ s16 field_0x16;
+ /* 0x18 */ s16 field_0x18;
+ /* 0x1a */ s16 field_0x1a;
+ /* 0x1c */ s16 field_0x1c;
+ /* 0x1e */ s16 field_0x1e;
+ /* 0x20 */ s16 field_0x20;
+ /* 0x22 */ s16 field_0x22;
+ /* 0x24 */ u8 field_0x24;
+ /* 0x25 */ u8 field_0x25;
+ /* 0x26 */ u8 field_0x26;
+ /* 0x28 */ f32 field_0x28;
+ /* 0x2c */ f32 field_0x2c;
+ /* 0x30 */ f32 field_0x30;
+ };
+
+ static M_attrs const M_attr;
+ static M_attrs const& attr() { return M_attr; }
};
STATIC_ASSERT(sizeof(daObjFlag_c) == 0x5ec);