d_a_obj_mirror_screw OK, work on d_a_obj_mirror_chain and d_a_obj_mirror_table (#2057)

This commit is contained in:
Caroline Madsen
2024-01-31 13:49:22 -05:00
committed by GitHub
parent 4a081109bd
commit 9774b42db8
56 changed files with 1210 additions and 3116 deletions
+5
View File
@@ -814,6 +814,11 @@ public:
void i_onEndResetFlg1(daPy_ERFLG1 i_flag) { mEndResetFlg1 |= i_flag; }
cXyz* getLeftHandPosP() { return &mLeftHandPos; }
cXyz* getRightHandPosP() { return &mRightHandPos; }
cXyz* i_getLeftFootPosP() { return &mLeftFootPos; }
cXyz* i_getRightFootPosP() { return &mRightFootPos; }
u32 i_checkWolf() const { return i_checkNoResetFlg1(FLG1_IS_WOLF); }
BOOL i_checkEquipHeavyBoots() const { return i_checkNoResetFlg0(FLG0_EQUIP_HVY_BOOTS); }
BOOL i_checkMagneBootsOn() const { return i_checkNoResetFlg0(FLG0_MAGNE_BOOTS_ON); }
+1 -1
View File
@@ -230,7 +230,7 @@ public:
/* 0x7C */ cXyz mTransVel;
/* 0x88 */ u8 mFlags;
/* 0x89 */ u8 mNeedsFullTransform;
/* 0x8A */ u8 field_0x8a[6];
/* 0x8C */ u32 field_0x8c;
/* 0x90 */ u8 mMoveCounter;
/* 0x91 */ u8 field_0x91;
/* 0x92 */ u16 m_rootGrpIdx;
+4
View File
@@ -3804,6 +3804,10 @@ inline J3DDrawBuffer* dComIfGd_getOpaListDark() {
return g_dComIfG_gameInfo.drawlist.getOpaListDark();
}
inline J3DDrawBuffer* dComIfGd_getXluListBG() {
return g_dComIfG_gameInfo.drawlist.getXluListBG();
}
inline void dComIfGd_init() {
g_dComIfG_gameInfo.drawlist.init();
}
+1
View File
@@ -311,6 +311,7 @@ public:
J3DDrawBuffer* getOpaListPacket() { return mDrawBuffers[DB_OPA_LIST_PACKET]; }
J3DDrawBuffer* getOpaListBG() { return mDrawBuffers[DB_OPA_LIST_BG]; }
J3DDrawBuffer* getOpaListDark() { return mDrawBuffers[DB_OPA_LIST_DARK]; }
J3DDrawBuffer* getXluListBG() { return mDrawBuffers[DB_XLU_LIST_BG]; }
void setXluDrawList(J3DDrawBuffer* buffer) { j3dSys.setDrawBuffer(buffer, J3DSys_XLU_BUFFER_e); }
void setOpaDrawList(J3DDrawBuffer* buffer) { j3dSys.setDrawBuffer(buffer, J3DSys_OPA_BUFFER_e); }
void setXluListSky() { setXluDrawList(mDrawBuffers[DB_XLU_LIST_SKY]); }
+1
View File
@@ -28,6 +28,7 @@ public:
void setPlaySpeed(f32 speed) { mFrameCtrl.setRate(speed); }
f32 getFrame() { return mFrameCtrl.getFrame(); }
f32 getEndFrame() { return mFrameCtrl.getEnd(); }
void setEndFrame(f32 frame) { mFrameCtrl.setEnd(frame); }
void setFrame(f32 frame) { mFrameCtrl.setFrame(frame); }
void setPlayMode(int i_mode) { mFrameCtrl.setAttribute(i_mode); }
void setLoopFrame(f32 i_frame) { mFrameCtrl.setLoop(i_frame); }
+1
View File
@@ -38,6 +38,7 @@ struct daMirror_c : public fopAc_ac_c {
/* 80031990 */ static int remove();
s32 getType() { return fopAcM_GetParamBit(this, 0, 8); }
s32 getSw() { return fopAcM_GetParamBit(this, 8, 8); }
static u32 getMirrorRoomPrm() { return 0xff03; }
typedef int (daMirror_c::*entryModelFunc)(J3DModel*);
static entryModelFunc m_entryModel;
@@ -19,7 +19,9 @@ public:
/* 80C95E2C */ void executeWait();
/* 80C95E88 */ void initDemo();
/* 80C95E8C */ void executeDemo();
/* 80C95EFC */ void setBaseMtx();
/* 80C95EFC */ inline void setBaseMtx();
inline void initBaseMtx();
inline void create_init();
/* 80C95F50 */ static int createHeapCallBack(fopAc_ac_c* i_this);
/* 80C95F70 */ int CreateHeap();
@@ -29,25 +31,10 @@ public:
inline int create();
inline int draw();
void initBaseMtx() {
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
// setBaseMtx();
// this is supposed to be setBaseMtx, but it gets inlined here for some reason?
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(shape_angle.y);
mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get());
}
void create_init() {
initBaseMtx();
mAttentionInfo.mFlags = 0;
setAction(MODE_WAIT_e);
}
u8 getSwitchNo() { return (fopAcM_GetParam(this) >> 8) & 0xFF; }
void setAnmSpeed(f32 speed) { mpBck->setPlaySpeed(speed); }
bool isSwitch() {
return i_fopAcM_isSwitch(this, getSwitchNo()) ||
i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[361]) ||
@@ -1,6 +1,57 @@
#ifndef D_A_OBJ_MIRROR_CHAIN_H
#define D_A_OBJ_MIRROR_CHAIN_H
#include "dolphin/types.h"
#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
#include "f_op/f_op_actor_mng.h"
#include "d/bg/d_bg_w.h"
class dScissorBegin_packet_c : public J3DPacket {
public:
/* 80C96698 */ void draw();
/* 80C97F98 */ ~dScissorBegin_packet_c() {}
cXyz* getQuad() { return mQuad; }
void entryPacket() { j3dSys.getDrawBuffer(1)->entryImm(this, 0); }
/* 0x10 */ cXyz mQuad[4];
};
class dScissorEnd_packet_c : public J3DPacket {
public:
/* 80C96DE8 */ void draw();
/* 80C97F3C */ ~dScissorEnd_packet_c() {}
void entryPacket() { j3dSys.getDrawBuffer(1)->entryImm(this, 0); }
};
class daObjMirrorChain_c : public fopAc_ac_c {
public:
/* 80C96E40 */ int createHeap();
/* 80C975EC */ void initBaseMtx();
/* 80C97618 */ void setBaseMtx();
/* 80C976B8 */ int draw();
/* 80C97988 */ int execute();
inline ~daObjMirrorChain_c();
inline void create_init();
inline cPhs__Step create();
u8 getSwitchNo() { return (fopAcM_GetParam(this) >> 8) & 0xff; }
void setAnmSpeed(f32 speed) { mpBckAnm->setPlaySpeed(speed); }
/* 0x568 */ J3DModel* mpModel;
/* 0x56C */ J3DModel* mpPortalModel;
/* 0x570 */ mDoExt_bckAnm* mpBckAnm;
/* 0x574 */ mDoExt_brkAnm* mpBrkAnm;
/* 0x578 */ mDoExt_brkAnm* mpPortalBrkAnm;
/* 0x57C */ request_of_phase_process_class mPhaseReq;
/* 0x584 */ dBgW* mpActiveBgW;
/* 0x588 */ dBgW mBgW[2];
/* 0x708 */ JPABaseEmitter* mpEmitter;
/* 0x70C */ Mtx mMtx;
/* 0x73C */ dScissorBegin_packet_c mScissorBegin;
/* 0x77C */ dScissorEnd_packet_c mScissorEnd;
};
STATIC_ASSERT(sizeof(daObjMirrorChain_c) == 0x78C);
#endif /* D_A_OBJ_MIRROR_CHAIN_H */
@@ -20,6 +20,7 @@ public:
inline void create_init();
u8 getSwitchNo() { return (fopAcM_GetParam(this) >> 8) & 0xFF; }
void setAnmSpeed(f32 speed) { mpBck->setPlaySpeed(speed); }
bool isSwitch() {
return i_fopAcM_isSwitch(this, getSwitchNo()) ||
@@ -1,6 +1,82 @@
#ifndef D_A_OBJ_MIRROR_SCREW_H
#define D_A_OBJ_MIRROR_SCREW_H
#include "dolphin/types.h"
#include "f_op/f_op_actor_mng.h"
#include "d/bg/d_bg_s_movebg_actor.h"
#include "rel/d/a/obj/d_a_obj_swspinner/d_a_obj_swspinner.h"
#include "rel/d/a/obj/mirror/d_a_obj_mirror_6pole/d_a_obj_mirror_6pole.h"
#include "rel/d/a/obj/mirror/d_a_obj_mirror_chain/d_a_obj_mirror_chain.h"
#include "rel/d/a/obj/mirror/d_a_obj_mirror_sand/d_a_obj_mirror_sand.h"
#include "rel/d/a/obj/mirror/d_a_obj_mirror_table/d_a_obj_mirror_table.h"
#include "rel/d/a/tag/d_a_tag_sppath/d_a_tag_sppath.h"
class daObjMirrorScrew_c;
typedef void (daObjMirrorScrew_c::*daObjMirrorScrew_actionFunc)();
class daObjMirrorScrew_c : public dBgS_MoveBgActor {
public:
struct attr {
f32 mDownDist;
f32 mRotSpeedThreshold;
int mSpinCount;
int mResetSpinCount;
f32 mSpeedStep;
f32 mDownSpeed;
};
enum Action {
/* 0 */ ACT_WAIT,
/* 1 */ ACT_DOWN,
};
/* 80C98AD8 */ void initWait();
/* 80C98AE4 */ void executeWait();
/* 80C98C00 */ void initDown();
/* 80C98F04 */ void executeDown();
inline cPhs__Step create();
/* 80C992F4 */ int CreateHeap();
inline void setBaseMtx();
inline void initBaseMtx();
/* 80C99364 */ int Create();
/* 80C99490 */ int Execute(Mtx**);
/* 80C99608 */ int Draw();
/* 80C996AC */ int Delete();
u8 getSwitchNo() { return (fopAcM_GetParam(this) >> 8) & 0xff; }
u8 getEventID() { return (fopAcM_GetParam(this) >> 0x10) & 0xff; }
void setAction(int i_action) {
mAction = i_action;
mpActionFunc = ActionTable[mAction];
callInit();
}
void callInit() {
(this->*mpActionFunc[0])();
}
void callExecute() {
(this->*mpActionFunc[1])();
}
/* 0x5A0 */ J3DModel* mpModel;
/* 0x5A4 */ request_of_phase_process_class mPhaseReq;
/* 0x5AC */ daObjMirrorScrew_actionFunc* mpActionFunc;
/* 0x5B0 */ int mAction;
/* 0x5B4 */ daObjSwSpinner_c* mpSwSpinner;
/* 0x5B8 */ daTagSppath_c* mpSpPath;
/* 0x5BC */ daObjMirrorChain_c* mpChain;
/* 0x5C0 */ daObjMirrorTable_c* mpTable;
/* 0x5C4 */ daObjMirror6Pole_c* mp6Pole;
/* 0x5C8 */ daObjMirrorSand_c* mpSand;
/* 0x5CC */ int mSpinCount;
/* 0x5D0 */ u8 field_0x5d0[8];
/* 0x5D8 */ cBgS_PolyInfo field_0x5d8;
static attr const M_attr;
static daObjMirrorScrew_actionFunc ActionTable[2][2];
};
STATIC_ASSERT(sizeof(daObjMirrorScrew_c) == 0x5E8);
#endif /* D_A_OBJ_MIRROR_SCREW_H */
@@ -1,6 +1,45 @@
#ifndef D_A_OBJ_MIRROR_TABLE_H
#define D_A_OBJ_MIRROR_TABLE_H
#include "dolphin/types.h"
#include "f_op/f_op_actor_mng.h"
#include "d/bg/d_bg_w.h"
class daObjMirrorTable_c : public fopAc_ac_c {
public:
/* 80C99938 */ int createHeap();
/* 80C99F7C */ /* inline */ bool isSwitch(); // should be inlined once createHeap matches
inline void checkOnPanel();
/* 80C9A298 */ int draw();
inline void setBaseMtx();
/* 80C9A4D0 */ int execute();
inline ~daObjMirrorTable_c();
/* 80C9AB30 */ cPhs__Step create();
/* 80C9ABFC */ void create_init();
/* 80C9AFD0 */ void initBaseMtx();
u8 getSwitchNo() { return (fopAcM_GetParam(this) >> 8) & 0xff; }
void setAnmSpeed(f32 speed) { mpTableUpBckAnm->setPlaySpeed(speed); }
/* 0x568 */ J3DModel* mpTableModel;
/* 0x56C */ J3DModel* mpMirrorModel;
/* 0x570 */ J3DModel* mpStairModel;
/* 0x574 */ J3DModel* mpPanelModel;
/* 0x578 */ J3DModel* mpLightModel;
/* 0x57C */ J3DModel* mpMSquareModel;
/* 0x580 */ mDoExt_bckAnm* mpTableUpBckAnm;
/* 0x584 */ mDoExt_bckAnm* mpMSquareBckAnm;
/* 0x588 */ mDoExt_brkAnm* mpStairBrkAnm;
/* 0x58C */ mDoExt_brkAnm* mpMSquareBrkAnm;
/* 0x590 */ mDoExt_btkAnm* mpLightBtkAnm;
/* 0x594 */ request_of_phase_process_class mPhaseReq;
/* 0x59C */ dBgW mBgW[3];
/* 0x7DC */ Mtx mMtx[3];
/* 0x86C */ JPABaseEmitter* mpEmitter1;
/* 0x870 */ JPABaseEmitter* mpEmitter2;
/* 0x874 */ bool field_0x874;
/* 0x875 */ s8 field_0x875;
};
STATIC_ASSERT(sizeof(daObjMirrorTable_c) == 0x878);
#endif /* D_A_OBJ_MIRROR_TABLE_H */
@@ -1,6 +1,15 @@
#ifndef D_A_TAG_SPPATH_H
#define D_A_TAG_SPPATH_H
#include "dolphin/types.h"
#include "f_op/f_op_actor.h"
#include "d/d_path.h"
class daTagSppath_c : public fopAc_ac_c {
public:
/* 80D61C18 */ void create();
/* 80D61EC4 */ ~daTagSppath_c();
/* 80D62024 */ void getNearPathPos(cXyz*, dPath*);
/* 80D629C0 */ void execute();
};
#endif /* D_A_TAG_SPPATH_H */