Skip to content

Commit 8410e4f

Browse files
authored
mvstair done, obj_tks equivalent (#2565)
* mvstair done, obj_tks equivalent * fix
1 parent e0bbad1 commit 8410e4f

File tree

5 files changed

+1345
-1645
lines changed

5 files changed

+1345
-1645
lines changed

configure.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2055,7 +2055,7 @@ def MatchingFor(*versions) -> bool:
20552055
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_mirror_screw"),
20562056
ActorRel(NonMatching, "d_a_obj_mirror_table"),
20572057
ActorRel(NonMatching, "d_a_obj_msima"),
2058-
ActorRel(NonMatching, "d_a_obj_mvstair"),
2058+
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_mvstair"),
20592059
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_myogan"),
20602060
ActorRel(NonMatching, "d_a_obj_nagaisu"),
20612061
ActorRel(Equivalent, "d_a_obj_nan"), # weak function order
@@ -2137,7 +2137,7 @@ def MatchingFor(*versions) -> bool:
21372137
ActorRel(NonMatching, "d_a_obj_thashi"),
21382138
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_thdoor"),
21392139
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_timeFire"),
2140-
ActorRel(NonMatching, "d_a_obj_tks"),
2140+
ActorRel(Equivalent, "d_a_obj_tks", extra_cflags=[DANPCF_C_HACK]), # weak function order, sinShort inline issue
21412141
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tmoon"),
21422142
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_toaru_maki"),
21432143
ActorRel(NonMatching, "d_a_obj_toby"),

include/d/actor/d_a_obj_mvstair.h

Lines changed: 68 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#define D_A_OBJ_MVSTAIR_H
33

44
#include "f_op/f_op_actor_mng.h"
5+
#include "d/d_bg_s_movebg_actor.h"
6+
#include "d/d_particle.h"
57

68
/**
79
* @ingroup actors-objects
@@ -11,35 +13,80 @@
1113
* @details
1214
*
1315
*/
14-
class daObjStair_c : public fopAc_ac_c {
16+
class daObjStair_c : public dBgS_MoveBgActor {
1517
public:
18+
enum Action_e {
19+
ACTION_WAIT_e,
20+
ACTION_ORDER_EVENT_e,
21+
ACTION_EVENT_e,
22+
ACTION_END_e,
23+
};
24+
25+
enum MODE_e {
26+
MODE_WAIT_UPPER_e,
27+
MODE_UPPER_e,
28+
MODE_WAIT_LOWER_e,
29+
MODE_LOWER_e,
30+
};
31+
1632
/* 80C9D098 */ void initBaseMtx();
1733
/* 80C9D0D4 */ void setBaseMtx();
18-
/* 80C9D148 */ void Create();
19-
/* 80C9D2B8 */ void CreateHeap();
20-
/* 80C9D338 */ void create1st();
34+
/* 80C9D338 */ int create1st();
2135
/* 80C9D41C */ void event_proc_call();
2236
/* 80C9D4D8 */ void mode_proc_call();
23-
/* 80C9D594 */ void Execute(f32 (**)[3][4]);
24-
/* 80C9D710 */ void Draw();
25-
/* 80C9D7B4 */ void Delete();
26-
/* 80C9D82C */ void actionWait();
27-
/* 80C9D8EC */ void actionOrderEvent();
28-
/* 80C9D95C */ void actionEvent();
29-
/* 80C9D9BC */ bool actionEnd();
30-
/* 80C9D9C4 */ void modeWaitUpperInit();
31-
/* 80C9D9F4 */ void modeWaitUpper();
32-
/* 80C9DA98 */ void modeUpperInit();
33-
/* 80C9DADC */ void modeUpper();
34-
/* 80C9DF18 */ void modeWaitLowerInit();
35-
/* 80C9DF60 */ void modeWaitLower();
36-
/* 80C9E004 */ void modeLowerInit();
37-
/* 80C9E034 */ void modeLower();
37+
/* 80C9D82C */ int actionWait();
38+
/* 80C9D8EC */ int actionOrderEvent();
39+
/* 80C9D95C */ int actionEvent();
40+
/* 80C9D9BC */ int actionEnd();
41+
/* 80C9D9C4 */ int modeWaitUpperInit();
42+
/* 80C9D9F4 */ int modeWaitUpper();
43+
/* 80C9DA98 */ int modeUpperInit();
44+
/* 80C9DADC */ int modeUpper();
45+
/* 80C9DF18 */ int modeWaitLowerInit();
46+
/* 80C9DF60 */ int modeWaitLower();
47+
/* 80C9E004 */ int modeLowerInit();
48+
/* 80C9E034 */ int modeLower();
3849
/* 80C9E3D8 */ void setParticle();
3950
/* 80C9E5A0 */ void removeParticle();
4051

41-
private:
42-
/* 0x568 */ u8 field_0x568[0x66c - 0x568];
52+
/* 80C9D2B8 */ virtual int CreateHeap();
53+
/* 80C9D148 */ virtual int Create();
54+
/* 80C9D594 */ virtual int Execute(f32 (**)[3][4]);
55+
/* 80C9D710 */ virtual int Draw();
56+
/* 80C9D7B4 */ virtual int Delete();
57+
58+
u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); }
59+
u8 getSwbit2() { return fopAcM_GetParamBit(this, 8, 8); }
60+
u8 getEvNo() { return fopAcM_GetParamBit(this, 16, 8); }
61+
u8 getDir() { return fopAcM_GetParamBit(this, 28, 1); }
62+
u8 getType() { return fopAcM_GetParamBit(this, 24, 4); }
63+
u8 getMdlType() { return fopAcM_GetParamBit(this, 29, 3); }
64+
65+
void setAction(u8 i_action) { mAction = i_action; }
66+
67+
/* 0x5A0 */ request_of_phase_process_class mPhase;
68+
/* 0x5A8 */ J3DModel* mpModel;
69+
/* 0x5AC */ JPABaseEmitter* mSmokeEmitter;
70+
/* 0x5B0 */ dPa_followEcallBack mParticleLeftEmitter[2];
71+
/* 0x5D8 */ dPa_followEcallBack mParticleRightEmitter[2];
72+
/* 0x600 */ cXyz mParticleLeftPos[2];
73+
/* 0x618 */ cXyz mParticleRightPos[2];
74+
/* 0x630 */ cXyz mSoundPos;
75+
/* 0x63C */ u8 mType;
76+
/* 0x63D */ u8 mAction;
77+
/* 0x63E */ u8 mMode;
78+
/* 0x63F */ u8 mIsSwitch;
79+
/* 0x640 */ s16 mEventId;
80+
/* 0x644 */ f32 mMoveAccel;
81+
/* 0x648 */ f32 mMoveStep;
82+
/* 0x64C */ u8 field_0x64C[0x650 - 0x64C];
83+
/* 0x650 */ cXyz mModelPos;
84+
/* 0x65C */ u16 mMoveStartShakeTimer;
85+
/* 0x65E */ s16 mMoveEndShakeTimer;
86+
/* 0x660 */ f32 mMoveStartShakeAmount;
87+
/* 0x664 */ u8 field_0x664[0x668 - 0x664];
88+
/* 0x668 */ u8 mMoveMode;
89+
/* 0x669 */ u8 mResType;
4390
};
4491

4592
STATIC_ASSERT(sizeof(daObjStair_c) == 0x66c);

include/d/actor/d_a_obj_tks.h

Lines changed: 77 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,23 @@
22
#define D_A_OBJ_TKS_H
33

44
#include "f_op/f_op_actor_mng.h"
5+
#include "d/actor/d_a_npc.h"
6+
7+
struct daObjTks_HIOParam {
8+
/* 0x00 */ daNpcF_HIOParam common;
9+
/* 0x6C */ f32 offset_x;
10+
/* 0x70 */ f32 offset_y;
11+
/* 0x74 */ f32 offset_z;
12+
/* 0x78 */ f32 spring_factor;
13+
/* 0x7C */ f32 spring_atten;
14+
};
15+
16+
class daObjTks_Param_c {
17+
public:
18+
/* 80D126D0 */ virtual ~daObjTks_Param_c() {}
19+
20+
static const daObjTks_HIOParam m;
21+
};
522

623
/**
724
* @ingroup actors-objects
@@ -11,53 +28,79 @@
1128
* @details
1229
*
1330
*/
14-
class daObjTks_c : public fopAc_ac_c {
31+
class daObjTks_c : public daNpcF_c {
1532
public:
1633
/* 80D0F28C */ daObjTks_c();
17-
/* 80D0F480 */ ~daObjTks_c();
18-
/* 80D0F640 */ void Create();
19-
/* 80D0F904 */ void CreateHeap();
20-
/* 80D0FD34 */ void Delete();
21-
/* 80D0FD68 */ void Execute();
22-
/* 80D0FE60 */ void Draw();
23-
/* 80D0FED0 */ void ctrlJoint(J3DJoint*, J3DModel*);
24-
/* 80D10094 */ void createHeapCallBack(fopAc_ac_c*);
25-
/* 80D100B4 */ void ctrlJointCallBack(J3DJoint*, int);
26-
/* 80D10100 */ void setMtx();
27-
/* 80D10184 */ void setExpressionAnm(int, bool);
28-
/* 80D102D0 */ void setExpressionBtp(int);
29-
/* 80D103A4 */ void setMotion(int, f32, int);
34+
/* 80D0F480 */ virtual ~daObjTks_c();
35+
36+
/* 80D0F640 */ int Create();
37+
/* 80D0F904 */ int CreateHeap();
38+
/* 80D0FD34 */ int Delete();
39+
/* 80D0FD68 */ int Execute();
40+
/* 80D0FE60 */ int Draw();
41+
/* 80D0FED0 */ int ctrlJoint(J3DJoint*, J3DModel*);
42+
/* 80D10094 */ static int createHeapCallBack(fopAc_ac_c*);
43+
/* 80D100B4 */ static int ctrlJointCallBack(J3DJoint*, int);
3044
/* 80D103E8 */ void reset();
31-
/* 80D10578 */ void setAction(void (daObjTks_c::*)());
45+
/* 80D10578 */ inline int setAction(void (daObjTks_c::*)());
3246
/* 80D10618 */ void wait();
33-
/* 80D106C8 */ void setExpression(int, f32);
3447
/* 80D106F4 */ void talk();
3548
/* 80D10A80 */ void demo();
36-
/* 80D11104 */ bool setMotionAnm(int, f32);
3749
/* 80D11228 */ void warp();
38-
/* 80D11670 */ void setParam();
39-
/* 80D116C8 */ void main();
40-
/* 80D118E8 */ void ctrlBtk();
41-
/* 80D119BC */ void setAttnPos();
42-
/* 80D11CB4 */ void lookat();
43-
/* 80D11E94 */ bool drawDbgInfo();
44-
/* 80D11E9C */ void drawOtherMdls();
50+
/* 80D11CB4 */ inline void lookat();
51+
52+
/* 80D11670 */ virtual void setParam();
53+
/* 80D116C8 */ virtual BOOL main();
54+
/* 80D118E8 */ virtual BOOL ctrlBtk();
55+
/* 80D10100 */ virtual void setMtx();
56+
/* 80D119BC */ virtual void setAttnPos();
57+
/* 80D10184 */ virtual bool setExpressionAnm(int, bool);
58+
/* 80D102D0 */ virtual bool setExpressionBtp(int);
59+
/* 80D106C8 */ virtual void setExpression(int, f32);
60+
/* 80D11104 */ virtual void setMotionAnm(int, f32);
61+
/* 80D103A4 */ virtual void setMotion(int, f32, int);
62+
/* 80D11E94 */ virtual BOOL drawDbgInfo();
63+
/* 80D11E9C */ virtual void drawOtherMdls();
64+
65+
void calcSpringF(f32* param_0, f32 param_1, f32* param_2) {
66+
*param_2 = daObjTks_Param_c::m.spring_atten * (*param_2 + (daObjTks_Param_c::m.spring_factor * (*param_0 - param_1)));
67+
*param_0 += *param_2;
68+
}
69+
70+
inline void playExpression();
71+
inline void playMotion();
72+
73+
bool chkAction(void (daObjTks_c::*i_action)()) { return i_action == mAction; }
4574

4675
void setStart() { field_0xde0 = 1; }
4776

48-
private:
49-
/* 0x568 */ u8 field_0x568[0xDE0 - 0x568];
77+
void setLookMode(int i_mode) {
78+
if (i_mode >= 0 && i_mode < 6 && i_mode != mLookMode) {
79+
mLookMode = i_mode;
80+
}
81+
}
82+
83+
void setExpressionTalkAfter() {
84+
(void)mExpression;
85+
setExpression(1, -1.0f);
86+
}
87+
88+
/* 0xB48 */ Z2Creature mSound;
89+
/* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm;
90+
/* 0xBDC */ daNpcF_Lookat_c mLookat;
91+
/* 0xC78 */ u8 field_0xC78[0xC7C - 0xC78];
92+
/* 0xC7C */ dCcD_Cyl mCcCyl;
93+
/* 0xDB8 */ void (daObjTks_c::*mAction)();
94+
/* 0xDC4 */ request_of_phase_process_class mPhase;
95+
/* 0xDCC */ f32 field_0xdcc;
96+
/* 0xDD0 */ f32 field_0xdd0;
97+
/* 0xDD4 */ u8 field_0xDD4[0xDDC - 0xDD4];
98+
/* 0xDDC */ s16 mLookMode;
99+
/* 0xDDE */ u16 field_0xdde;
50100
/* 0xDE0 */ u8 field_0xde0;
51-
/* 0xDE1 */ u8 field_0xde1[0xDE4 - 0xDE1];
101+
/* 0xDE1 */ u8 field_0xde1;
52102
};
53103

54104
STATIC_ASSERT(sizeof(daObjTks_c) == 0xDE4);
55105

56-
class daObjTks_Param_c {
57-
public:
58-
/* 80D126D0 */ ~daObjTks_Param_c();
59-
60-
static u8 const m[128];
61-
};
62-
63106
#endif /* D_A_OBJ_TKS_H */

0 commit comments

Comments
 (0)