Compare commits

...

2 Commits

Author SHA1 Message Date
Tom 91e84ecd33
d_a_obj_crvhahen matching (#2564)
* useHeapInit 73%, ctor and dtor 100%, Delete 94%, wallcheck 43%, create 42%

* useHeapInit 100%

* Wall_Check 85%

* Update fields and return types

* crvhahen Wall_Check and Execute 100

* update createheap return type for matching

* crvhahen create 70 draw 57

* Revert change that made useHeapInit non-matching

* delete matching, .rodata 91

* create 94%

* crvhahen draw 85%

* setBaseMtx matching

* CheckCull and checkViewArea 100%

* rename & cleanup fields

* cleanup fields, rodata. hahenset and hahen_hakai partials

* cleanup and remove SECTION_RODATA

* d_a_obj_crvhahen OK

* cleanup and fix various inconsistancies or issues

---------

Co-authored-by: StuckInLimbo <tbosley@limbofps.net>
2025-08-01 20:32:39 +03:00
TakaRikka 8410e4fd40
mvstair done, obj_tks equivalent (#2565)
* mvstair done, obj_tks equivalent

* fix
2025-08-01 20:29:50 +03:00
7 changed files with 1627 additions and 1996 deletions

View File

@ -1905,7 +1905,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_obj_crope"),
ActorRel(NonMatching, "d_a_obj_crvfence"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_crvgate"),
ActorRel(NonMatching, "d_a_obj_crvhahen"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_crvhahen"),
ActorRel(NonMatching, "d_a_obj_crvlh_down"),
ActorRel(NonMatching, "d_a_obj_crvlh_up"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_crvsteel"),
@ -2055,7 +2055,7 @@ config.libs = [
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_mirror_screw"),
ActorRel(NonMatching, "d_a_obj_mirror_table"),
ActorRel(NonMatching, "d_a_obj_msima"),
ActorRel(NonMatching, "d_a_obj_mvstair"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_mvstair"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_myogan"),
ActorRel(NonMatching, "d_a_obj_nagaisu"),
ActorRel(Equivalent, "d_a_obj_nan"), # weak function order
@ -2137,7 +2137,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_obj_thashi"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_thdoor"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_timeFire"),
ActorRel(NonMatching, "d_a_obj_tks"),
ActorRel(Equivalent, "d_a_obj_tks", extra_cflags=[DANPCF_C_HACK]), # weak function order, sinShort inline issue
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tmoon"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_toaru_maki"),
ActorRel(NonMatching, "d_a_obj_toby"),

View File

@ -1,33 +1,54 @@
#ifndef D_A_OBJ_CRVHAHEN_H
#define D_A_OBJ_CRVHAHEN_H
#include "d/d_com_inf_game.h"
#include "f_op/f_op_actor_mng.h"
#include "m_Do/m_Do_ext.h"
#include "m_Do/m_Do_lib.h"
/**
* @ingroup actors-objects
* @class daObjCRVHAHEN_c
* @brief Caravan Wood
* @brief Bulblin Camp Caraven Wooden Fence Fragments
*
* @details
* @details Hahen () a fragment, shard, or splinter.
* physics-enabled shards or fragments that simulate debris from destruction.
*
*/
class daObjCRVHAHEN_c : public fopAc_ac_c {
public:
/* 80BD342C */ void HahenSet(cXyz, cXyz, cXyz, cXyz, f32);
/* 80BD3628 */ void Wall_Check(cXyz, cXyz);
/* 80BD342C */ int HahenSet(cXyz, cXyz, cXyz, cXyz, f32);
/* 80BD3628 */ bool Wall_Check(cXyz, cXyz);
/* 80BD3720 */ void Hahen_Hakai(int, int);
/* 80BD38DC */ void CheckCull();
/* 80BD3A9C */ void checkViewArea(cXyz*);
/* 80BD3B20 */ void Execute();
/* 80BD3B74 */ void Delete();
/* 80BD3A9C */ bool checkViewArea(cXyz*);
/* 80BD3B20 */ int Execute();
/* 80BD3B74 */ int Delete();
/* 80BD3C0C */ void setBaseMtx();
/* 80BD3DBC */ void create();
/* 80BD3DBC */ int create();
private:
/* 0x568 */ u8 field_0x568[0x794 - 0x568];
/* 80BD3338 */ int CreateHeap();
/* 80BD3CA0 */ int Draw();
/* 0x568 */ cXyz mPos[10];
/* 0x5e0 */ cXyz mVelocity[10];
/* 0x658 */ cXyz mInitialPos[10];
/* 0x6d0 */ csXyz mRotation[10];
/* 0x70c */ csXyz mRotSpeed[10];
/* 0x748 */ u32 mFlags;
/* 0x74c */ f32 mGroundHeight;
/* 0x750 */ bool mDrawHahen;
/* 0x751 */ u8 mStatus[10];
/* 0x75b */ u8 field_0x75b;
/* 0x75c */ f32 mTimer;
/* 0x760 */ J3DModel* mpModel[10];
/* 0x788 */ request_of_phase_process_class mPhase;
/* 0x790 */ u8 mEffectState;
/* 0x791 */ bool mInitialized;
/* 0x792 */ u8 mCounter;
/* 0x793 */ u8 mDrawState;
};
STATIC_ASSERT(sizeof(daObjCRVHAHEN_c) == 0x794);
#endif /* D_A_OBJ_CRVHAHEN_H */

View File

@ -2,6 +2,8 @@
#define D_A_OBJ_MVSTAIR_H
#include "f_op/f_op_actor_mng.h"
#include "d/d_bg_s_movebg_actor.h"
#include "d/d_particle.h"
/**
* @ingroup actors-objects
@ -11,35 +13,80 @@
* @details
*
*/
class daObjStair_c : public fopAc_ac_c {
class daObjStair_c : public dBgS_MoveBgActor {
public:
enum Action_e {
ACTION_WAIT_e,
ACTION_ORDER_EVENT_e,
ACTION_EVENT_e,
ACTION_END_e,
};
enum MODE_e {
MODE_WAIT_UPPER_e,
MODE_UPPER_e,
MODE_WAIT_LOWER_e,
MODE_LOWER_e,
};
/* 80C9D098 */ void initBaseMtx();
/* 80C9D0D4 */ void setBaseMtx();
/* 80C9D148 */ void Create();
/* 80C9D2B8 */ void CreateHeap();
/* 80C9D338 */ void create1st();
/* 80C9D338 */ int create1st();
/* 80C9D41C */ void event_proc_call();
/* 80C9D4D8 */ void mode_proc_call();
/* 80C9D594 */ void Execute(f32 (**)[3][4]);
/* 80C9D710 */ void Draw();
/* 80C9D7B4 */ void Delete();
/* 80C9D82C */ void actionWait();
/* 80C9D8EC */ void actionOrderEvent();
/* 80C9D95C */ void actionEvent();
/* 80C9D9BC */ bool actionEnd();
/* 80C9D9C4 */ void modeWaitUpperInit();
/* 80C9D9F4 */ void modeWaitUpper();
/* 80C9DA98 */ void modeUpperInit();
/* 80C9DADC */ void modeUpper();
/* 80C9DF18 */ void modeWaitLowerInit();
/* 80C9DF60 */ void modeWaitLower();
/* 80C9E004 */ void modeLowerInit();
/* 80C9E034 */ void modeLower();
/* 80C9D82C */ int actionWait();
/* 80C9D8EC */ int actionOrderEvent();
/* 80C9D95C */ int actionEvent();
/* 80C9D9BC */ int actionEnd();
/* 80C9D9C4 */ int modeWaitUpperInit();
/* 80C9D9F4 */ int modeWaitUpper();
/* 80C9DA98 */ int modeUpperInit();
/* 80C9DADC */ int modeUpper();
/* 80C9DF18 */ int modeWaitLowerInit();
/* 80C9DF60 */ int modeWaitLower();
/* 80C9E004 */ int modeLowerInit();
/* 80C9E034 */ int modeLower();
/* 80C9E3D8 */ void setParticle();
/* 80C9E5A0 */ void removeParticle();
private:
/* 0x568 */ u8 field_0x568[0x66c - 0x568];
/* 80C9D2B8 */ virtual int CreateHeap();
/* 80C9D148 */ virtual int Create();
/* 80C9D594 */ virtual int Execute(f32 (**)[3][4]);
/* 80C9D710 */ virtual int Draw();
/* 80C9D7B4 */ virtual int Delete();
u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); }
u8 getSwbit2() { return fopAcM_GetParamBit(this, 8, 8); }
u8 getEvNo() { return fopAcM_GetParamBit(this, 16, 8); }
u8 getDir() { return fopAcM_GetParamBit(this, 28, 1); }
u8 getType() { return fopAcM_GetParamBit(this, 24, 4); }
u8 getMdlType() { return fopAcM_GetParamBit(this, 29, 3); }
void setAction(u8 i_action) { mAction = i_action; }
/* 0x5A0 */ request_of_phase_process_class mPhase;
/* 0x5A8 */ J3DModel* mpModel;
/* 0x5AC */ JPABaseEmitter* mSmokeEmitter;
/* 0x5B0 */ dPa_followEcallBack mParticleLeftEmitter[2];
/* 0x5D8 */ dPa_followEcallBack mParticleRightEmitter[2];
/* 0x600 */ cXyz mParticleLeftPos[2];
/* 0x618 */ cXyz mParticleRightPos[2];
/* 0x630 */ cXyz mSoundPos;
/* 0x63C */ u8 mType;
/* 0x63D */ u8 mAction;
/* 0x63E */ u8 mMode;
/* 0x63F */ u8 mIsSwitch;
/* 0x640 */ s16 mEventId;
/* 0x644 */ f32 mMoveAccel;
/* 0x648 */ f32 mMoveStep;
/* 0x64C */ u8 field_0x64C[0x650 - 0x64C];
/* 0x650 */ cXyz mModelPos;
/* 0x65C */ u16 mMoveStartShakeTimer;
/* 0x65E */ s16 mMoveEndShakeTimer;
/* 0x660 */ f32 mMoveStartShakeAmount;
/* 0x664 */ u8 field_0x664[0x668 - 0x664];
/* 0x668 */ u8 mMoveMode;
/* 0x669 */ u8 mResType;
};
STATIC_ASSERT(sizeof(daObjStair_c) == 0x66c);

View File

@ -2,6 +2,23 @@
#define D_A_OBJ_TKS_H
#include "f_op/f_op_actor_mng.h"
#include "d/actor/d_a_npc.h"
struct daObjTks_HIOParam {
/* 0x00 */ daNpcF_HIOParam common;
/* 0x6C */ f32 offset_x;
/* 0x70 */ f32 offset_y;
/* 0x74 */ f32 offset_z;
/* 0x78 */ f32 spring_factor;
/* 0x7C */ f32 spring_atten;
};
class daObjTks_Param_c {
public:
/* 80D126D0 */ virtual ~daObjTks_Param_c() {}
static const daObjTks_HIOParam m;
};
/**
* @ingroup actors-objects
@ -11,53 +28,79 @@
* @details
*
*/
class daObjTks_c : public fopAc_ac_c {
class daObjTks_c : public daNpcF_c {
public:
/* 80D0F28C */ daObjTks_c();
/* 80D0F480 */ ~daObjTks_c();
/* 80D0F640 */ void Create();
/* 80D0F904 */ void CreateHeap();
/* 80D0FD34 */ void Delete();
/* 80D0FD68 */ void Execute();
/* 80D0FE60 */ void Draw();
/* 80D0FED0 */ void ctrlJoint(J3DJoint*, J3DModel*);
/* 80D10094 */ void createHeapCallBack(fopAc_ac_c*);
/* 80D100B4 */ void ctrlJointCallBack(J3DJoint*, int);
/* 80D10100 */ void setMtx();
/* 80D10184 */ void setExpressionAnm(int, bool);
/* 80D102D0 */ void setExpressionBtp(int);
/* 80D103A4 */ void setMotion(int, f32, int);
/* 80D0F480 */ virtual ~daObjTks_c();
/* 80D0F640 */ int Create();
/* 80D0F904 */ int CreateHeap();
/* 80D0FD34 */ int Delete();
/* 80D0FD68 */ int Execute();
/* 80D0FE60 */ int Draw();
/* 80D0FED0 */ int ctrlJoint(J3DJoint*, J3DModel*);
/* 80D10094 */ static int createHeapCallBack(fopAc_ac_c*);
/* 80D100B4 */ static int ctrlJointCallBack(J3DJoint*, int);
/* 80D103E8 */ void reset();
/* 80D10578 */ void setAction(void (daObjTks_c::*)());
/* 80D10578 */ inline int setAction(void (daObjTks_c::*)());
/* 80D10618 */ void wait();
/* 80D106C8 */ void setExpression(int, f32);
/* 80D106F4 */ void talk();
/* 80D10A80 */ void demo();
/* 80D11104 */ bool setMotionAnm(int, f32);
/* 80D11228 */ void warp();
/* 80D11670 */ void setParam();
/* 80D116C8 */ void main();
/* 80D118E8 */ void ctrlBtk();
/* 80D119BC */ void setAttnPos();
/* 80D11CB4 */ void lookat();
/* 80D11E94 */ bool drawDbgInfo();
/* 80D11E9C */ void drawOtherMdls();
/* 80D11CB4 */ inline void lookat();
/* 80D11670 */ virtual void setParam();
/* 80D116C8 */ virtual BOOL main();
/* 80D118E8 */ virtual BOOL ctrlBtk();
/* 80D10100 */ virtual void setMtx();
/* 80D119BC */ virtual void setAttnPos();
/* 80D10184 */ virtual bool setExpressionAnm(int, bool);
/* 80D102D0 */ virtual bool setExpressionBtp(int);
/* 80D106C8 */ virtual void setExpression(int, f32);
/* 80D11104 */ virtual void setMotionAnm(int, f32);
/* 80D103A4 */ virtual void setMotion(int, f32, int);
/* 80D11E94 */ virtual BOOL drawDbgInfo();
/* 80D11E9C */ virtual void drawOtherMdls();
void calcSpringF(f32* param_0, f32 param_1, f32* param_2) {
*param_2 = daObjTks_Param_c::m.spring_atten * (*param_2 + (daObjTks_Param_c::m.spring_factor * (*param_0 - param_1)));
*param_0 += *param_2;
}
inline void playExpression();
inline void playMotion();
bool chkAction(void (daObjTks_c::*i_action)()) { return i_action == mAction; }
void setStart() { field_0xde0 = 1; }
private:
/* 0x568 */ u8 field_0x568[0xDE0 - 0x568];
void setLookMode(int i_mode) {
if (i_mode >= 0 && i_mode < 6 && i_mode != mLookMode) {
mLookMode = i_mode;
}
}
void setExpressionTalkAfter() {
(void)mExpression;
setExpression(1, -1.0f);
}
/* 0xB48 */ Z2Creature mSound;
/* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm;
/* 0xBDC */ daNpcF_Lookat_c mLookat;
/* 0xC78 */ u8 field_0xC78[0xC7C - 0xC78];
/* 0xC7C */ dCcD_Cyl mCcCyl;
/* 0xDB8 */ void (daObjTks_c::*mAction)();
/* 0xDC4 */ request_of_phase_process_class mPhase;
/* 0xDCC */ f32 field_0xdcc;
/* 0xDD0 */ f32 field_0xdd0;
/* 0xDD4 */ u8 field_0xDD4[0xDDC - 0xDD4];
/* 0xDDC */ s16 mLookMode;
/* 0xDDE */ u16 field_0xdde;
/* 0xDE0 */ u8 field_0xde0;
/* 0xDE1 */ u8 field_0xde1[0xDE4 - 0xDE1];
/* 0xDE1 */ u8 field_0xde1;
};
STATIC_ASSERT(sizeof(daObjTks_c) == 0xDE4);
class daObjTks_Param_c {
public:
/* 80D126D0 */ ~daObjTks_Param_c();
static u8 const m[128];
};
#endif /* D_A_OBJ_TKS_H */

View File

@ -4,348 +4,260 @@
*/
#include "d/actor/d_a_obj_crvhahen.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" static void useHeapInit__FP10fopAc_ac_c();
extern "C" static void daObjCRVHAHEN_Create__FP10fopAc_ac_c();
extern "C" static void daObjCRVHAHEN_Delete__FP15daObjCRVHAHEN_c();
extern "C" void HahenSet__15daObjCRVHAHEN_cF4cXyz4cXyz4cXyz4cXyzf();
extern "C" void Wall_Check__15daObjCRVHAHEN_cF4cXyz4cXyz();
extern "C" void __dt__4cXyzFv();
extern "C" void Hahen_Hakai__15daObjCRVHAHEN_cFii();
extern "C" void CheckCull__15daObjCRVHAHEN_cFv();
extern "C" void checkViewArea__15daObjCRVHAHEN_cFP4cXyz();
extern "C" void Execute__15daObjCRVHAHEN_cFv();
extern "C" void Delete__15daObjCRVHAHEN_cFv();
extern "C" void setBaseMtx__15daObjCRVHAHEN_cFv();
extern "C" static void daObjCRVHAHEN_Draw__FP15daObjCRVHAHEN_c();
extern "C" static void daObjCRVHAHEN_Execute__FP15daObjCRVHAHEN_c();
extern "C" void create__15daObjCRVHAHEN_cFv();
extern "C" void __dt__5csXyzFv();
extern "C" void __ct__5csXyzFv();
extern "C" void __ct__4cXyzFv();
extern "C" static bool daObjCRVHAHEN_IsDelete__FP15daObjCRVHAHEN_c();
extern "C" extern char const* const d_a_obj_crvhahen__stringBase0;
//
// External References:
//
extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
extern "C" void scaleM__14mDoMtx_stack_cFRC4cXyz();
extern "C" void ZXYrotS__14mDoMtx_stack_cFRC5csXyz();
extern "C" void ZXYrotM__14mDoMtx_stack_cFRC5csXyz();
extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
extern "C" void mDoLib_project__FP3VecP3Vec();
extern "C" void __ct__10fopAc_ac_cFv();
extern "C" void fopAcM_delete__FP10fopAc_ac_c();
extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff();
extern "C" void addSimpleModel__14dComIfG_play_cFP12J3DModelDataiUc();
extern "C" void removeSimpleModel__14dComIfG_play_cFP12J3DModelDatai();
extern "C" void entrySimpleModel__14dComIfG_play_cFP8J3DModeli();
extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
extern "C" void getRes__14dRes_control_cFPCcPCcP11dRes_info_ci();
extern "C" void LineCross__4cBgSFP11cBgS_LinChk();
extern "C" void __ct__11dBgS_LinChkFv();
extern "C" void __dt__11dBgS_LinChkFv();
extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c();
extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
extern "C" void cM_rndF__Ff();
extern "C" void cM_rndFX__Ff();
extern "C" void __dl__FPv();
extern "C" void __construct_array();
extern "C" void _savegpr_21();
extern "C" void _savegpr_24();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_29();
extern "C" void _restgpr_21();
extern "C" void _restgpr_24();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" extern u8 g_dComIfG_gameInfo[122384];
//
// Declarations:
//
/* ############################################################################################## */
/* 80BD4048-80BD4048 000058 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_80BD4048 = "CrvFence";
SECTION_DEAD static char const* const stringBase_80BD4051 = "CaravanPiece.bmd";
#pragma pop
/* 80BD4064-80BD4068 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */
SECTION_DATA static void* l_arcName = (void*)&d_a_obj_crvhahen__stringBase0;
static const char* l_arcName = "CrvFence";
inline int daObjCRVHAHEN_c::CreateHeap() {
J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(l_arcName, "CaravanPiece.bmd");
for (int i = 0; i < 10; i++) {
mpModel[i] = mDoExt_J3DModel__create(model_data, 0x20000, 0x11000084);
if (mpModel[i] == NULL) {
return 0;
}
}
return 1;
}
/* 80BD3338-80BD33E8 000078 00B0+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 ((daObjCRVHAHEN_c*)i_this)->CreateHeap();
}
/* 80BD33E8-80BD3408 000128 0020+00 1/0 0/0 0/0 .text daObjCRVHAHEN_Create__FP10fopAc_ac_c */
static void daObjCRVHAHEN_Create(fopAc_ac_c* param_0) {
// NONMATCHING
static int daObjCRVHAHEN_Create(fopAc_ac_c* i_this) {
static_cast<daObjCRVHAHEN_c*>(i_this)->create();
}
/* 80BD3408-80BD342C 000148 0024+00 1/0 0/0 0/0 .text daObjCRVHAHEN_Delete__FP15daObjCRVHAHEN_c */
static void daObjCRVHAHEN_Delete(daObjCRVHAHEN_c* param_0) {
// NONMATCHING
static int daObjCRVHAHEN_Delete(daObjCRVHAHEN_c* i_this) {
i_this->Delete();
return 1;
}
/* ############################################################################################## */
/* 80BD3FF0-80BD3FF4 000000 0004+00 5/5 0/0 0/0 .rodata @3703 */
SECTION_RODATA static f32 const lit_3703 = 0.5f;
COMPILER_STRIP_GATE(0x80BD3FF0, &lit_3703);
/* 80BD3FF4-80BD3FF8 000004 0004+00 0/1 0/0 0/0 .rodata @3704 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3704 = 1.0f;
COMPILER_STRIP_GATE(0x80BD3FF4, &lit_3704);
#pragma pop
/* 80BD3FF8-80BD3FFC 000008 0004+00 0/1 0/0 0/0 .rodata @3705 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3705 = 5000.0f;
COMPILER_STRIP_GATE(0x80BD3FF8, &lit_3705);
#pragma pop
/* 80BD3FFC-80BD4000 00000C 0004+00 0/1 0/0 0/0 .rodata @3706 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3706 = 65536.0f;
COMPILER_STRIP_GATE(0x80BD3FFC, &lit_3706);
#pragma pop
/* 80BD342C-80BD3628 00016C 01FC+00 0/0 0/0 2/2 .text
* HahenSet__15daObjCRVHAHEN_cF4cXyz4cXyz4cXyz4cXyzf */
void daObjCRVHAHEN_c::HahenSet(cXyz param_0, cXyz param_1, cXyz param_2, cXyz param_3,
f32 param_4) {
// NONMATCHING
int daObjCRVHAHEN_c::HahenSet(cXyz i_param_1, cXyz i_param_2, cXyz i_param_3, cXyz i_param_4,
f32 duration) {
mDrawHahen = true;
mTimer = duration;
for (int i = 0; i < 10; i++) {
mPos[i].set(i_param_2.x + cM_rndFX(i_param_1.x), i_param_2.y + cM_rndF(i_param_1.y),
i_param_2.z + cM_rndFX(i_param_1.z));
mInitialPos[i].set(cM_rndF(1.0f) + 0.5f, cM_rndF(1.0f) + 0.5f, cM_rndF(1.0f) + 0.5f);
mVelocity[i].set(i_param_4.x + cM_rndFX(i_param_3.x), i_param_4.y + cM_rndF(i_param_3.y),
i_param_4.z + cM_rndF(i_param_3.z));
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(shape_angle);
mDoMtx_stack_c::multVec(&mPos[i], &mPos[i]);
mDoMtx_stack_c::ZXYrotS(shape_angle);
mDoMtx_stack_c::multVec(&mVelocity[i], &mVelocity[i]);
mRotSpeed[i].x = cM_rndFX(5000.0f);
mRotSpeed[i].y = cM_rndFX(5000.0f);
mRotation[i].x = cM_rndFX(65536.0f);
mRotation[i].y = cM_rndFX(65536.0f);
}
return 1;
}
/* 80BD3628-80BD36E4 000368 00BC+00 1/1 0/0 0/0 .text Wall_Check__15daObjCRVHAHEN_cF4cXyz4cXyz */
void daObjCRVHAHEN_c::Wall_Check(cXyz param_0, cXyz param_1) {
// NONMATCHING
bool daObjCRVHAHEN_c::Wall_Check(cXyz i_origin, cXyz i_target) {
dBgS_LinChk line_check;
cXyz linePos(i_origin.x + i_target.x, i_origin.y, i_origin.z + i_target.z);
line_check.Set(&i_origin, &linePos, NULL);
bool did_line_cross = dComIfG_Bgsp().LineCross(&line_check);
if (did_line_cross == true) {
return true;
} else {
return false;
}
/* 80BD36E4-80BD3720 000424 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */
// cXyz::~cXyz() {
extern "C" void __dt__4cXyzFv() {
// NONMATCHING
return did_line_cross;
}
/* ############################################################################################## */
/* 80BD4000-80BD4004 000010 0004+00 0/2 0/0 0/0 .rodata @3773 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3773 = -9.0f;
COMPILER_STRIP_GATE(0x80BD4000, &lit_3773);
#pragma pop
/* 80BD4004-80BD4008 000014 0004+00 0/1 0/0 0/0 .rodata @3774 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3774 = 13.0f;
COMPILER_STRIP_GATE(0x80BD4004, &lit_3774);
#pragma pop
/* 80BD4008-80BD400C 000018 0004+00 0/1 0/0 0/0 .rodata @3775 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3775 = -3.0f / 5.0f;
COMPILER_STRIP_GATE(0x80BD4008, &lit_3775);
#pragma pop
/* 80BD400C-80BD4010 00001C 0004+00 0/1 0/0 0/0 .rodata @3776 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3776 = 4.0f / 5.0f;
COMPILER_STRIP_GATE(0x80BD400C, &lit_3776);
#pragma pop
/* 80BD3720-80BD38DC 000460 01BC+00 1/1 0/0 0/0 .text Hahen_Hakai__15daObjCRVHAHEN_cFii
*/
void daObjCRVHAHEN_c::Hahen_Hakai(int param_0, int param_1) {
// NONMATCHING
void daObjCRVHAHEN_c::Hahen_Hakai(int i_start, int i_end) {
for (int i = i_start; i < i_end; ++i) {
if (mStatus[i] > 3) {
mPos[i].y = mGroundHeight;
mRotation[i].x = 0x4000;
} else {
mVelocity[i].y += +-9.0f;
Wall_Check(mPos[i], mVelocity[i]);
// mPos[i].x = mPos[i].x + mVelocity[i].x;
// mPos[i].y = mPos[i].y + mVelocity[i].y;
// mPos[i].z = mPos[i].z + mVelocity[i].z;
mPos[i].x += mVelocity[i].x;
mPos[i].y += mVelocity[i].y;
mPos[i].z += mVelocity[i].z;
mRotation[i].x += mRotSpeed[i].x;
mRotation[i].y += mRotSpeed[i].y;
mRotation[i].z += mRotSpeed[i].z;
if ((mGroundHeight + 13.0f) >= mPos[i].y) {
++mStatus[i];
mPos[i].y = mGroundHeight + 13.0f;
mVelocity[i].y = mVelocity[i].y * -0.6f;
mVelocity[i].x = mVelocity[i].x * 0.8f;
mVelocity[i].z = mVelocity[i].z * 0.8f;
// mVelocity[i].y *= -0.6f;
// mVelocity[i].x *= 0.8f;
// mVelocity[i].z *= 0.8f;
mRotation[i].x = 0x4000;
mRotation[i].y = mRotation[i].y + mRotSpeed[i].y;
}
}
}
}
/* ############################################################################################## */
/* 80BD4010-80BD4018 000020 0004+04 0/2 0/0 0/0 .rodata @3836 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3836[4 + 4 /* padding */] = {
0x00,
0x00,
0x00,
0x00,
/* padding */
0x00,
0x00,
0x00,
0x00,
};
COMPILER_STRIP_GATE(0x80BD4010, &lit_3836);
#pragma pop
/* 80BD4018-80BD4020 000028 0008+00 0/1 0/0 0/0 .rodata @3837 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3837[8] = {
0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80BD4018, &lit_3837);
#pragma pop
/* 80BD4020-80BD4028 000030 0008+00 0/1 0/0 0/0 .rodata @3838 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3838[8] = {
0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80BD4020, &lit_3838);
#pragma pop
/* 80BD4028-80BD4030 000038 0008+00 0/1 0/0 0/0 .rodata @3839 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3839[8] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80BD4028, &lit_3839);
#pragma pop
/* 80BD38DC-80BD3A9C 00061C 01C0+00 1/1 0/0 0/0 .text CheckCull__15daObjCRVHAHEN_cFv */
void daObjCRVHAHEN_c::CheckCull() {
// NONMATCHING
daPy_py_c* player_actor = daPy_getPlayerActorClass();
cXyz& player_pos = fopAcM_GetPosition((fopAc_ac_c*)player_actor);
int culled_num = 1;
for (int i = 0; i < 10; i++) {
if ((mPos[i].absXZ(player_pos) > mTimer) && !checkViewArea(&mPos[i])) {
culled_num++;
if (culled_num == 10) {
fopAcM_delete(this);
}
}
}
}
/* ############################################################################################## */
/* 80BD4030-80BD4034 000040 0004+00 0/1 0/0 0/0 .rodata @3852 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3852 = 608.0f;
COMPILER_STRIP_GATE(0x80BD4030, &lit_3852);
#pragma pop
/* 80BD4034-80BD4038 000044 0004+00 0/1 0/0 0/0 .rodata @3853 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3853 = 448.0f;
COMPILER_STRIP_GATE(0x80BD4034, &lit_3853);
#pragma pop
/* 80BD3A9C-80BD3B20 0007DC 0084+00 1/1 0/0 0/0 .text checkViewArea__15daObjCRVHAHEN_cFP4cXyz */
void daObjCRVHAHEN_c::checkViewArea(cXyz* param_0) {
// NONMATCHING
bool daObjCRVHAHEN_c::checkViewArea(cXyz* i_this) {
Vec proj;
mDoLib_project(i_this, &proj);
bool ret = false;
if (proj.x >= 0.0f && proj.x <= 608.0f && proj.y >= 0.0f && proj.y <= 448.0f) {
ret = true;
}
return ret;
}
/* 80BD3B20-80BD3B74 000860 0054+00 1/1 0/0 0/0 .text Execute__15daObjCRVHAHEN_cFv */
void daObjCRVHAHEN_c::Execute() {
// NONMATCHING
int daObjCRVHAHEN_c::Execute() {
if (mDrawHahen) {
daObjCRVHAHEN_c::Hahen_Hakai(0, 10);
}
daObjCRVHAHEN_c::setBaseMtx();
daObjCRVHAHEN_c::CheckCull();
return 1;
}
/* 80BD3B74-80BD3C0C 0008B4 0098+00 1/1 0/0 0/0 .text Delete__15daObjCRVHAHEN_cFv */
void daObjCRVHAHEN_c::Delete() {
// NONMATCHING
int daObjCRVHAHEN_c::Delete() {
if (mInitialized) {
J3DModelData* model_data = (J3DModelData*)dRes_control_c::getRes(
l_arcName, "CaravanPiece.bmd", g_dComIfG_gameInfo.mResControl.mObjectInfo, 0x80);
dComIfGp_removeSimpleModel(model_data, (int)(char)current.roomNo);
}
dComIfG_resDelete(&mPhase, l_arcName);
return 1;
}
/* 80BD3C0C-80BD3CA0 00094C 0094+00 1/1 0/0 0/0 .text setBaseMtx__15daObjCRVHAHEN_cFv */
void daObjCRVHAHEN_c::setBaseMtx() {
// NONMATCHING
for (int i = 0; i < 10; i++) {
mDoMtx_stack_c::transS(mPos[i]);
mDoMtx_stack_c::ZXYrotM(mRotation[i]);
mDoMtx_stack_c::scaleM(mInitialPos[i]);
mpModel[i]->setBaseTRMtx(mDoMtx_stack_c::get());
}
}
inline int daObjCRVHAHEN_c::Draw() {
g_env_light.settingTevStruct(0, &current.pos, &tevStr);
for (int i = 0, j = i; i < 10; i = i + 1) {
g_env_light.setLightTevColorType_MAJI(mpModel[i], &tevStr);
}
dComIfGd_setListBG();
if (mDrawHahen) {
for (int i = 0; i < 10; i = i + 1) {
s8 roomno = fopAcM_GetRoomNo(this);
dComIfGp_entrySimpleModel(mpModel[i], roomno);
}
}
dComIfGd_setList();
return 1;
}
/* 80BD3CA0-80BD3D9C 0009E0 00FC+00 1/0 0/0 0/0 .text daObjCRVHAHEN_Draw__FP15daObjCRVHAHEN_c */
static void daObjCRVHAHEN_Draw(daObjCRVHAHEN_c* param_0) {
// NONMATCHING
static int daObjCRVHAHEN_Draw(daObjCRVHAHEN_c* i_this) {
return i_this->Draw();
}
/* 80BD3D9C-80BD3DBC 000ADC 0020+00 2/1 0/0 0/0 .text daObjCRVHAHEN_Execute__FP15daObjCRVHAHEN_c
*/
static void daObjCRVHAHEN_Execute(daObjCRVHAHEN_c* param_0) {
// NONMATCHING
/* 80BD3D9C-80BD3DBC 000ADC 0020+00 2/1 0/0 0/0 .text daObjCRVHAHEN_Execute__FP15daObjCRVHAHEN_c */
static int daObjCRVHAHEN_Execute(daObjCRVHAHEN_c* i_this) {
i_this->Execute();
}
/* ############################################################################################## */
/* 80BD4038-80BD403C 000048 0004+00 0/1 0/0 0/0 .rodata @3993 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3993 = -1000.0f;
COMPILER_STRIP_GATE(0x80BD4038, &lit_3993);
#pragma pop
/* 80BD403C-80BD4040 00004C 0004+00 0/1 0/0 0/0 .rodata @3994 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3994 = -500.0f;
COMPILER_STRIP_GATE(0x80BD403C, &lit_3994);
#pragma pop
/* 80BD4040-80BD4044 000050 0004+00 0/1 0/0 0/0 .rodata @3995 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3995 = 1000.0f;
COMPILER_STRIP_GATE(0x80BD4040, &lit_3995);
#pragma pop
/* 80BD4044-80BD4048 000054 0004+00 0/1 0/0 0/0 .rodata @3996 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3996 = 500.0f;
COMPILER_STRIP_GATE(0x80BD4044, &lit_3996);
#pragma pop
/* 80BD3DBC-80BD3F9C 000AFC 01E0+00 1/1 0/0 0/0 .text create__15daObjCRVHAHEN_cFv */
void daObjCRVHAHEN_c::create() {
// NONMATCHING
int daObjCRVHAHEN_c::create() {
fopAcM_SetupActor(this, daObjCRVHAHEN_c);
int phase_state = dComIfG_resLoad(&mPhase, l_arcName);
if (phase_state == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x1320)) {
return cPhs_ERROR_e;
}
mDrawHahen = 0;
gravity = -9.0f;
J3DModelData* model_data = (J3DModelData*)dRes_control_c::getRes(
l_arcName, "CaravanPiece.bmd", g_dComIfG_gameInfo.mResControl.mObjectInfo, 0x80);
dComIfGp_addSimpleModel(model_data, (int)(char)current.roomNo, '\0');
mInitialized = true;
mGroundHeight = current.pos.y;
fopAcM_setCullSizeBox(this, -1000.0, -500.0, -1000.0, 1000.0, 500.0, 1000.0);
daObjCRVHAHEN_Execute(this);
}
return phase_state;
}
/* 80BD3F9C-80BD3FD8 000CDC 003C+00 1/1 0/0 0/0 .text __dt__5csXyzFv */
// csXyz::~csXyz() {
extern "C" void __dt__5csXyzFv() {
// NONMATCHING
}
/* 80BD3FD8-80BD3FDC 000D18 0004+00 1/1 0/0 0/0 .text __ct__5csXyzFv */
// csXyz::csXyz() {
extern "C" void __ct__5csXyzFv() {
/* empty function */
}
/* 80BD3FDC-80BD3FE0 000D1C 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */
// cXyz::cXyz() {
extern "C" void __ct__4cXyzFv() {
/* empty function */
}
/* 80BD3FE0-80BD3FE8 000D20 0008+00 1/0 0/0 0/0 .text daObjCRVHAHEN_IsDelete__FP15daObjCRVHAHEN_c
*/
static bool daObjCRVHAHEN_IsDelete(daObjCRVHAHEN_c* param_0) {
/* 80BD3FE0-80BD3FE8 000D20 0008+00 1/0 0/0 0/0 .text daObjCRVHAHEN_IsDelete__FP15daObjCRVHAHEN_c */
static int daObjCRVHAHEN_IsDelete(daObjCRVHAHEN_c* i_this) {
return true;
}
/* ############################################################################################## */
/* 80BD4068-80BD4088 -00001 0020+00 1/0 0/0 0/0 .data l_daObjCRVHAHEN_Method */
static actor_method_class l_daObjCRVHAHEN_Method = {
(process_method_func)daObjCRVHAHEN_Create__FP10fopAc_ac_c,
(process_method_func)daObjCRVHAHEN_Delete__FP15daObjCRVHAHEN_c,
(process_method_func)daObjCRVHAHEN_Execute__FP15daObjCRVHAHEN_c,
(process_method_func)daObjCRVHAHEN_IsDelete__FP15daObjCRVHAHEN_c,
(process_method_func)daObjCRVHAHEN_Draw__FP15daObjCRVHAHEN_c,
(process_method_func)daObjCRVHAHEN_Create, (process_method_func)daObjCRVHAHEN_Delete,
(process_method_func)daObjCRVHAHEN_Execute, (process_method_func)daObjCRVHAHEN_IsDelete,
(process_method_func)daObjCRVHAHEN_Draw,
};
/* 80BD4088-80BD40B8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_CRVHAHEN */
@ -365,5 +277,3 @@ extern actor_process_profile_definition g_profile_Obj_CRVHAHEN = {
fopAc_ACTOR_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};
/* 80BD4048-80BD4048 000058 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */

View File

@ -4,487 +4,502 @@
*/
#include "d/actor/d_a_obj_mvstair.h"
#include "dol2asm.h"
#include "d/d_com_inf_game.h"
#include "d/d_s_play.h"
/* 80C9E8AC-80C9E8B4 000000 0008+00 4/4 0/0 0/0 .rodata l_bmdName */
static const int l_bmdName[] = {4, 4};
//
// Forward References:
//
/* 80C9E8B4-80C9E8BC 000008 0008+00 1/1 0/0 0/0 .rodata l_dzbName */
static const int l_dzbName[] = {7, 7};
extern "C" void initBaseMtx__12daObjStair_cFv();
extern "C" void setBaseMtx__12daObjStair_cFv();
extern "C" void Create__12daObjStair_cFv();
extern "C" void CreateHeap__12daObjStair_cFv();
extern "C" void create1st__12daObjStair_cFv();
extern "C" void event_proc_call__12daObjStair_cFv();
extern "C" void mode_proc_call__12daObjStair_cFv();
extern "C" void Execute__12daObjStair_cFPPA3_A4_f();
extern "C" void Draw__12daObjStair_cFv();
extern "C" void Delete__12daObjStair_cFv();
extern "C" void actionWait__12daObjStair_cFv();
extern "C" void actionOrderEvent__12daObjStair_cFv();
extern "C" void actionEvent__12daObjStair_cFv();
extern "C" bool actionEnd__12daObjStair_cFv();
extern "C" void modeWaitUpperInit__12daObjStair_cFv();
extern "C" void modeWaitUpper__12daObjStair_cFv();
extern "C" void modeUpperInit__12daObjStair_cFv();
extern "C" void modeUpper__12daObjStair_cFv();
extern "C" void __dt__4cXyzFv();
extern "C" void modeWaitLowerInit__12daObjStair_cFv();
extern "C" void modeWaitLower__12daObjStair_cFv();
extern "C" void modeLowerInit__12daObjStair_cFv();
extern "C" void modeLower__12daObjStair_cFv();
extern "C" void setParticle__12daObjStair_cFv();
extern "C" void removeParticle__12daObjStair_cFv();
extern "C" static void daObjStair_create1st__FP12daObjStair_c();
extern "C" void __ct__4cXyzFv();
extern "C" void __dt__19dPa_followEcallBackFv();
extern "C" void cleanup__18dPa_levelEcallBackFv();
extern "C" void __defctor__19dPa_followEcallBackFv();
extern "C" static void daObjStair_MoveBGDelete__FP12daObjStair_c();
extern "C" static void daObjStair_MoveBGExecute__FP12daObjStair_c();
extern "C" static void daObjStair_MoveBGDraw__FP12daObjStair_c();
extern "C" void __dt__18dPa_levelEcallBackFv();
extern "C" void execute__18JPAEmitterCallBackFP14JPABaseEmitter();
extern "C" void executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter();
extern "C" void draw__18JPAEmitterCallBackFP14JPABaseEmitter();
extern "C" void drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter();
extern "C" extern char const* const d_a_obj_mvstair__stringBase0;
/* 80C9E8BC-80C9E8D4 000010 0018+00 1/2 0/0 0/0 .rodata l_move_len */
static const f32 l_move_len[] = {
150.0f,
300.0f,
450.0f,
600.0f,
500.0f,
550.0f,
};
//
// External References:
//
extern "C" void mDoMtx_YrotM__FPA4_fs();
extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData();
extern "C" void fopAcM_orderOtherEventId__FP10fopAc_ac_csUcUsUsUs();
extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
extern "C" void isSwitch__10dSv_info_cCFii();
extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
extern "C" void reset__14dEvt_control_cFv();
extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cUc();
extern "C" void endCheck__16dEvent_manager_cFs();
extern "C" void __ct__19dPa_followEcallBackFUcUc();
extern "C" void
set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
extern "C" void StartShock__12dVibration_cFii4cXyz();
extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
extern "C" void __ct__16dBgS_MoveBgActorFv();
extern "C" bool IsDelete__16dBgS_MoveBgActorFv();
extern "C" bool ToFore__16dBgS_MoveBgActorFv();
extern "C" bool ToBack__16dBgS_MoveBgActorFv();
extern "C" void
MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f();
extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv();
extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv();
extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
extern "C" void cLib_addCalc0__FPfff();
extern "C" void cLib_chaseF__FPfff();
extern "C" void __dt__18JPAEmitterCallBackFv();
extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
extern "C" void __dl__FPv();
extern "C" void __construct_array();
extern "C" void __ptmf_scall();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__19dPa_followEcallBack[10];
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" extern u8 g_dComIfG_gameInfo[122384];
extern "C" u8 sincosTable___5JMath[65536];
extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
extern "C" extern u8 struct_80C9EAA8[4];
//
// Declarations:
//
/* 80C9E8D4-80C9E8DC 000028 0008+00 1/1 0/0 0/0 .rodata l_heap_size */
static const u32 l_heap_size[] = {0xB40, 0x2C60};
/* 80C9D098-80C9D0D4 000078 003C+00 1/1 0/0 0/0 .text initBaseMtx__12daObjStair_cFv */
void daObjStair_c::initBaseMtx() {
// NONMATCHING
mpModel->setBaseScale(scale);
setBaseMtx();
}
/* 80C9D0D4-80C9D148 0000B4 0074+00 2/2 0/0 0/0 .text setBaseMtx__12daObjStair_cFv */
void daObjStair_c::setBaseMtx() {
// NONMATCHING
mDoMtx_stack_c::transS(mModelPos.x, mModelPos.y, mModelPos.z);
mDoMtx_stack_c::YrotM(shape_angle.y);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
}
/* ############################################################################################## */
/* 80C9E8AC-80C9E8B4 000000 0008+00 4/4 0/0 0/0 .rodata l_bmdName */
SECTION_RODATA static u8 const l_bmdName[8] = {
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04,
};
COMPILER_STRIP_GATE(0x80C9E8AC, &l_bmdName);
/* 80C9E8B4-80C9E8BC 000008 0008+00 1/1 0/0 0/0 .rodata l_dzbName */
SECTION_RODATA static u8 const l_dzbName[8] = {
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07,
};
COMPILER_STRIP_GATE(0x80C9E8B4, &l_dzbName);
/* 80C9E8BC-80C9E8D4 000010 0018+00 1/2 0/0 0/0 .rodata l_move_len */
SECTION_RODATA static u8 const l_move_len[24] = {
0x43, 0x16, 0x00, 0x00, 0x43, 0x96, 0x00, 0x00, 0x43, 0xE1, 0x00, 0x00,
0x44, 0x16, 0x00, 0x00, 0x43, 0xFA, 0x00, 0x00, 0x44, 0x09, 0x80, 0x00,
};
COMPILER_STRIP_GATE(0x80C9E8BC, &l_move_len);
/* 80C9E8D4-80C9E8DC 000028 0008+00 1/1 0/0 0/0 .rodata l_heap_size */
SECTION_RODATA static u8 const l_heap_size[8] = {
0x00, 0x00, 0x0B, 0x40, 0x00, 0x00, 0x2C, 0x60,
};
COMPILER_STRIP_GATE(0x80C9E8D4, &l_heap_size);
/* 80C9E8DC-80C9E8E0 000030 0004+00 1/3 0/0 0/0 .rodata @3709 */
SECTION_RODATA static f32 const lit_3709 = 600.0f;
COMPILER_STRIP_GATE(0x80C9E8DC, &lit_3709);
/* 80C9D148-80C9D2B8 000128 0170+00 1/0 0/0 0/0 .text Create__12daObjStair_cFv */
void daObjStair_c::Create() {
// NONMATCHING
int daObjStair_c::Create() {
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
fopAcM_setCullSizeBox2(this, mpModel->getModelData());
mEventId = dComIfGp_getEventManager().getEventIdx(this, getEvNo());
u8 swbit = getSwbit();
u8 swbit2 = getSwbit2();
if (fopAcM_isSwitch(this, swbit2)) {
setAction(ACTION_END_e);
modeWaitLowerInit();
} else {
if (getEvNo() == 0xFF) {
setAction(ACTION_END_e);
} else {
setAction(ACTION_WAIT_e);
}
/* ############################################################################################## */
/* 80C9E90C-80C9E90C 000060 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_80C9E90C = "K_mvkai00";
SECTION_DEAD static char const* const stringBase_80C9E916 = "Lv9_mvkai";
#pragma pop
BOOL is_swbit = fopAcM_isSwitch(this, swbit);
int dir = getDir();
/* 80C9E920-80C9E92C 000000 000C+00 2/2 0/0 0/0 .data cNullVec__6Z2Calc */
SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
if ((dir == 0 && is_swbit) || (dir == 1 && !is_swbit)) {
modeWaitLowerInit();
} else {
modeWaitUpperInit();
}
}
/* 80C9E92C-80C9E940 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
#pragma push
#pragma force_active on
SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
0x02000201,
/* padding */
0x40080000,
0x00000000,
0x3FE00000,
0x00000000,
};
#pragma pop
initBaseMtx();
mIsSwitch = fopAcM_isSwitch(this, getSwbit());
mSoundPos = home.pos;
mSoundPos.y = 600.0f + home.pos.y;
return 1;
}
UNK_REL_DATA
/* 80C9E940-80C9E948 -00001 0008+00 3/3 0/0 0/0 .data l_arcName */
SECTION_DATA static void* l_arcName[2] = {
(void*)&d_a_obj_mvstair__stringBase0,
(void*)(((char*)&d_a_obj_mvstair__stringBase0) + 0xA),
static char* l_arcName[2] = {
"K_mvkai00",
"Lv9_mvkai",
};
/* 80C9D2B8-80C9D338 000298 0080+00 1/0 0/0 0/0 .text CreateHeap__12daObjStair_cFv */
void daObjStair_c::CreateHeap() {
// NONMATCHING
int daObjStair_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[mResType], l_bmdName[mResType]);
JUT_ASSERT(250, modelData != 0);
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
if (mpModel == NULL) {
return 0;
}
return 1;
}
/* 80C9D338-80C9D41C 000318 00E4+00 1/1 0/0 0/0 .text create1st__12daObjStair_cFv */
void daObjStair_c::create1st() {
// NONMATCHING
int daObjStair_c::create1st() {
mType = getType();
if (getMdlType() == 7 || getMdlType() == 0) {
mResType = 0;
} else if (getMdlType() == 1) {
mResType = 1;
}
/* ############################################################################################## */
/* 80C9E948-80C9E954 -00001 000C+00 0/1 0/0 0/0 .data @3754 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3754[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)actionWait__12daObjStair_cFv,
};
#pragma pop
int phase_state = dComIfG_resLoad(&mPhase, l_arcName[mResType]);
if (phase_state == cPhs_COMPLEATE_e) {
phase_state = MoveBGCreate(l_arcName[mResType], l_dzbName[mResType], dBgS_MoveBGProc_TypicalRotY, l_heap_size[mResType], NULL);
if (phase_state == cPhs_ERROR_e) {
return phase_state;
}
/* 80C9E954-80C9E960 -00001 000C+00 0/1 0/0 0/0 .data @3755 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3755[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)actionOrderEvent__12daObjStair_cFv,
};
#pragma pop
OS_REPORT("MVSTAIR PARAM:0x%x\n", fopAcM_GetParam(this));
}
/* 80C9E960-80C9E96C -00001 000C+00 0/1 0/0 0/0 .data @3756 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3756[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)actionEvent__12daObjStair_cFv,
};
#pragma pop
/* 80C9E96C-80C9E978 -00001 000C+00 0/1 0/0 0/0 .data @3757 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3757[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)actionEnd__12daObjStair_cFv,
};
#pragma pop
/* 80C9E978-80C9E9A8 000058 0030+00 0/1 0/0 0/0 .data l_func$3753 */
#pragma push
#pragma force_active on
SECTION_DATA static u8 l_func_3753[48] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
#pragma pop
return phase_state;
}
/* 80C9D41C-80C9D4D8 0003FC 00BC+00 1/1 0/0 0/0 .text event_proc_call__12daObjStair_cFv
*/
void daObjStair_c::event_proc_call() {
// NONMATCHING
static int (daObjStair_c::*l_func[])() = {
&daObjStair_c::actionWait,
&daObjStair_c::actionOrderEvent,
&daObjStair_c::actionEvent,
&daObjStair_c::actionEnd,
};
(this->*l_func[mAction])();
}
/* ############################################################################################## */
/* 80C9E9A8-80C9E9B4 -00001 000C+00 0/1 0/0 0/0 .data @3765 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3765[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)modeWaitUpper__12daObjStair_cFv,
};
#pragma pop
/* 80C9E9B4-80C9E9C0 -00001 000C+00 0/1 0/0 0/0 .data @3766 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3766[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)modeUpper__12daObjStair_cFv,
};
#pragma pop
/* 80C9E9C0-80C9E9CC -00001 000C+00 0/1 0/0 0/0 .data @3767 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3767[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)modeWaitLower__12daObjStair_cFv,
};
#pragma pop
/* 80C9E9CC-80C9E9D8 -00001 000C+00 0/1 0/0 0/0 .data @3768 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3768[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)modeLower__12daObjStair_cFv,
};
#pragma pop
/* 80C9E9D8-80C9EA08 0000B8 0030+00 0/1 0/0 0/0 .data l_func$3764 */
#pragma push
#pragma force_active on
SECTION_DATA static u8 l_func_3764[48] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
#pragma pop
/* 80C9D4D8-80C9D594 0004B8 00BC+00 1/1 0/0 0/0 .text mode_proc_call__12daObjStair_cFv */
void daObjStair_c::mode_proc_call() {
// NONMATCHING
}
/* ############################################################################################## */
/* 80C9E8E0-80C9E8E4 000034 0004+00 2/5 0/0 0/0 .rodata @3802 */
SECTION_RODATA static u8 const lit_3802[4] = {
0x00,
0x00,
0x00,
0x00,
static int (daObjStair_c::*l_func[])() = {
&daObjStair_c::modeWaitUpper,
&daObjStair_c::modeUpper,
&daObjStair_c::modeWaitLower,
&daObjStair_c::modeLower,
};
COMPILER_STRIP_GATE(0x80C9E8E0, &lit_3802);
/* 80C9E8E4-80C9E8E8 000038 0004+00 0/1 0/0 0/0 .rodata @3803 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3803 = -140.0f;
COMPILER_STRIP_GATE(0x80C9E8E4, &lit_3803);
#pragma pop
/* 80C9E8E8-80C9E8EC 00003C 0004+00 0/1 0/0 0/0 .rodata @3804 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3804 = 140.0f;
COMPILER_STRIP_GATE(0x80C9E8E8, &lit_3804);
#pragma pop
/* 80C9E8EC-80C9E8F0 000040 0004+00 0/1 0/0 0/0 .rodata @3805 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3805 = -450.0f;
COMPILER_STRIP_GATE(0x80C9E8EC, &lit_3805);
#pragma pop
/* 80C9E8F0-80C9E8F4 000044 0004+00 0/1 0/0 0/0 .rodata @3806 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3806 = 450.0f;
COMPILER_STRIP_GATE(0x80C9E8F0, &lit_3806);
#pragma pop
(this->*l_func[mMode])();
}
/* 80C9D594-80C9D710 000574 017C+00 1/0 0/0 0/0 .text Execute__12daObjStair_cFPPA3_A4_f
*/
void daObjStair_c::Execute(f32 (**param_0)[3][4]) {
// NONMATCHING
int daObjStair_c::Execute(f32 (**param_0)[3][4]) {
event_proc_call();
mode_proc_call();
*param_0 = &mBgMtx;
setBaseMtx();
mIsSwitch = fopAcM_isSwitch(this, getSwbit());
mParticleLeftPos[0].set(0.0f, 0.0f, -140.0f);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(shape_angle.y);
mDoMtx_stack_c::multVec(&mParticleLeftPos[0], &mParticleLeftPos[0]);
mParticleLeftPos[1].set(0.0f, 0.0f, 140.0f);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(shape_angle.y);
mDoMtx_stack_c::multVec(&mParticleLeftPos[1], &mParticleLeftPos[1]);
mParticleRightPos[0].set(-450.0f, 0.0f, 0.0f);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(shape_angle.y);
mDoMtx_stack_c::multVec(&mParticleRightPos[0], &mParticleRightPos[0]);
mParticleRightPos[1].set(450.0f, 0.0f, 0.0f);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(shape_angle.y);
mDoMtx_stack_c::multVec(&mParticleRightPos[1], &mParticleRightPos[1]);
return 1;
}
/* 80C9D710-80C9D7B4 0006F0 00A4+00 1/0 0/0 0/0 .text Draw__12daObjStair_cFv */
void daObjStair_c::Draw() {
// NONMATCHING
int daObjStair_c::Draw() {
g_env_light.settingTevStruct(16, &current.pos, &tevStr);
g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr);
dComIfGd_setListBG();
mDoExt_modelUpdateDL(mpModel);
dComIfGd_setList();
return 1;
}
/* 80C9D7B4-80C9D82C 000794 0078+00 1/0 0/0 0/0 .text Delete__12daObjStair_cFv */
void daObjStair_c::Delete() {
// NONMATCHING
int daObjStair_c::Delete() {
if (mSmokeEmitter != NULL) {
mSmokeEmitter->becomeInvalidEmitter();
mSmokeEmitter = NULL;
}
removeParticle();
dComIfG_resDelete(&mPhase, l_arcName[mResType]);
return 1;
}
/* 80C9D82C-80C9D8EC 00080C 00C0+00 1/0 0/0 0/0 .text actionWait__12daObjStair_cFv */
void daObjStair_c::actionWait() {
// NONMATCHING
int daObjStair_c::actionWait() {
if (fopAcM_isSwitch(this, getSwbit2())) {
setAction(ACTION_END_e);
return 1;
}
if (mIsSwitch != fopAcM_isSwitch(this, getSwbit())) {
setAction(ACTION_ORDER_EVENT_e);
fopAcM_orderOtherEventId(this, mEventId, getEvNo(), 0xFFFF, 0, 1);
eventInfo.onCondition(2);
}
return 1;
}
/* 80C9D8EC-80C9D95C 0008CC 0070+00 1/0 0/0 0/0 .text actionOrderEvent__12daObjStair_cFv
*/
void daObjStair_c::actionOrderEvent() {
// NONMATCHING
int daObjStair_c::actionOrderEvent() {
if (eventInfo.checkCommandDemoAccrpt()) {
setAction(ACTION_EVENT_e);
} else {
fopAcM_orderOtherEventId(this, mEventId, getEvNo(), 0xFFFF, 0, 1);
eventInfo.onCondition(2);
}
return 1;
}
/* 80C9D95C-80C9D9BC 00093C 0060+00 1/0 0/0 0/0 .text actionEvent__12daObjStair_cFv */
void daObjStair_c::actionEvent() {
// NONMATCHING
int daObjStair_c::actionEvent() {
if (dComIfGp_evmng_endCheck(mEventId)) {
setAction(ACTION_WAIT_e);
dComIfGp_event_reset();
}
return 1;
}
/* 80C9D9BC-80C9D9C4 00099C 0008+00 1/0 0/0 0/0 .text actionEnd__12daObjStair_cFv */
bool daObjStair_c::actionEnd() {
return true;
int daObjStair_c::actionEnd() {
return 1;
}
/* 80C9D9C4-80C9D9F4 0009A4 0030+00 2/2 0/0 0/0 .text modeWaitUpperInit__12daObjStair_cFv
*/
void daObjStair_c::modeWaitUpperInit() {
// NONMATCHING
int daObjStair_c::modeWaitUpperInit() {
current.pos.y = home.pos.y;
mModelPos = current.pos;
mMode = MODE_WAIT_UPPER_e;
return 1;
}
/* 80C9D9F4-80C9DA98 0009D4 00A4+00 1/0 0/0 0/0 .text modeWaitUpper__12daObjStair_cFv */
void daObjStair_c::modeWaitUpper() {
// NONMATCHING
int daObjStair_c::modeWaitUpper() {
int is_swbit = fopAcM_isSwitch(this, getSwbit());
int dir = getDir();
if (!fopAcM_isSwitch(this, getSwbit2()) && ((is_swbit && dir == 0) || (!is_swbit && dir == 1))) {
modeUpperInit();
}
/* ############################################################################################## */
/* 80C9E8F4-80C9E8F8 000048 0004+00 1/2 0/0 0/0 .rodata @3946 */
SECTION_RODATA static f32 const lit_3946 = 3.0f;
COMPILER_STRIP_GATE(0x80C9E8F4, &lit_3946);
return 1;
}
/* 80C9DA98-80C9DADC 000A78 0044+00 1/1 0/0 0/0 .text modeUpperInit__12daObjStair_cFv */
void daObjStair_c::modeUpperInit() {
// NONMATCHING
int daObjStair_c::modeUpperInit() {
mMoveStartShakeTimer = 30;
mMoveEndShakeTimer = 15;
mMoveStartShakeAmount = 3.0f;
mMoveMode = 0;
mMoveAccel = 0.0f;
mMoveStep = 0.0f;
mMode = MODE_UPPER_e;
return 1;
}
/* ############################################################################################## */
/* 80C9E8F8-80C9E8FC 00004C 0004+00 1/3 0/0 0/0 .rodata @4061 */
SECTION_RODATA static f32 const lit_4061 = 1.0f;
COMPILER_STRIP_GATE(0x80C9E8F8, &lit_4061);
/* 80C9E8FC-80C9E900 000050 0004+00 0/2 0/0 0/0 .rodata @4062 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4062 = -1.0f;
COMPILER_STRIP_GATE(0x80C9E8FC, &lit_4062);
#pragma pop
/* 80C9E900-80C9E904 000054 0004+00 0/2 0/0 0/0 .rodata @4063 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4063 = 9.0f / 20.0f;
COMPILER_STRIP_GATE(0x80C9E900, &lit_4063);
#pragma pop
/* 80C9E904-80C9E908 000058 0004+00 0/2 0/0 0/0 .rodata @4064 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4064 = 0.5f;
COMPILER_STRIP_GATE(0x80C9E904, &lit_4064);
#pragma pop
/* 80C9E908-80C9E90C 00005C 0004+00 0/2 0/0 0/0 .rodata @4065 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4065 = 50.0f;
COMPILER_STRIP_GATE(0x80C9E908, &lit_4065);
#pragma pop
/* 80C9DADC-80C9DEDC 000ABC 0400+00 1/0 0/0 0/0 .text modeUpper__12daObjStair_cFv */
void daObjStair_c::modeUpper() {
// NONMATCHING
int daObjStair_c::modeUpper() {
f32 move_speed = 50.0f;
s16 shake_speed = 15000;
switch (mMoveMode) {
case 0:
if (mMoveStartShakeTimer == 0) {
if (mSmokeEmitter == NULL) {
cXyz effpos(home.pos);
effpos.y += 600.0f;
mSmokeEmitter = dComIfGp_particle_set(0x833E, &effpos, &home.angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL);
}
setParticle();
mMoveMode = 1;
} else if (mMoveStartShakeTimer == 2 && getMdlType() != 1) {
mDoAud_seStart(Z2SE_OBJ_STEP_MOVESTART, &mSoundPos, 0, 0);
}
/* 80C9DEDC-80C9DF18 000EBC 003C+00 1/1 0/0 0/0 .text __dt__4cXyzFv */
// cXyz::~cXyz() {
extern "C" void __dt__4cXyzFv() {
// NONMATCHING
mMoveStartShakeTimer--;
break;
case 1: {
cLib_chaseF(&mMoveAccel, 0.45f, 0.5f + KREG_F(0));
cLib_chaseF(&mMoveStep, move_speed, mMoveAccel);
int is_move_end = cLib_chaseF(&current.pos.y, home.pos.y + l_move_len[mType], mMoveStep);
mModelPos.y = current.pos.y;
if (is_move_end) {
mMoveMode = 2;
if (mSmokeEmitter != NULL) {
mSmokeEmitter->becomeInvalidEmitter();
mSmokeEmitter = NULL;
}
removeParticle();
if (getMdlType() != 1) {
mDoAud_seStart(Z2SE_OBJ_STEP_MOVEEND, &mSoundPos, 0, 0);
} else {
mDoAud_seStart(Z2SE_OBJ_L6_UD_BLOCK_UP_ST, &mSoundPos, 0, 0);
}
} else if (getMdlType() != 1) {
mDoAud_seStartLevel(Z2SE_OBJ_STEP_MOVE, &mSoundPos, 0, 0);
} else {
mDoAud_seStartLevel(Z2SE_OBJ_L6_UD_BLOCK_UP, &mSoundPos, 0, 0);
}
mModelPos = current.pos;
break;
}
case 2:
dComIfGp_getVibration().StartShock(4, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
mMoveMode = 3;
mMoveStartShakeTimer = 15;
break;
case 3:
mMoveStartShakeTimer--;
mModelPos = current.pos;
if (mMoveStartShakeTimer == 0) {
modeWaitLowerInit();
}
break;
}
mModelPos.y += mMoveStartShakeAmount * cM_scos(mMoveStartShakeTimer * shake_speed);
cLib_addCalc0(&mMoveStartShakeAmount, 0.5f + KREG_F(1), 0.5f + KREG_F(3));
return 1;
}
/* 80C9DF18-80C9DF60 000EF8 0048+00 2/2 0/0 0/0 .text modeWaitLowerInit__12daObjStair_cFv
*/
void daObjStair_c::modeWaitLowerInit() {
// NONMATCHING
int daObjStair_c::modeWaitLowerInit() {
current.pos.y = home.pos.y + l_move_len[mType];
mModelPos = current.pos;
mMode = MODE_WAIT_LOWER_e;
return 1;
}
/* 80C9DF60-80C9E004 000F40 00A4+00 1/0 0/0 0/0 .text modeWaitLower__12daObjStair_cFv */
void daObjStair_c::modeWaitLower() {
// NONMATCHING
int daObjStair_c::modeWaitLower() {
int is_swbit = fopAcM_isSwitch(this, getSwbit());
int dir = getDir();
if (!fopAcM_isSwitch(this, getSwbit2()) && ((!is_swbit && dir == 0) || (is_swbit && dir == 1))) {
modeLowerInit();
}
return 1;
}
/* 80C9E004-80C9E034 000FE4 0030+00 1/1 0/0 0/0 .text modeLowerInit__12daObjStair_cFv */
void daObjStair_c::modeLowerInit() {
// NONMATCHING
int daObjStair_c::modeLowerInit() {
mMoveAccel = 0.0f;
mMoveStep = 0.0f;
mMoveMode = 0;
mMoveStartShakeTimer = 30;
mMode = MODE_LOWER_e;
return 1;
}
/* 80C9E034-80C9E3D8 001014 03A4+00 1/0 0/0 0/0 .text modeLower__12daObjStair_cFv */
void daObjStair_c::modeLower() {
// NONMATCHING
int daObjStair_c::modeLower() {
f32 move_speed = 50.0f;
f32 shake_amount = 3.0f;
s16 shake_speed = 15000;
if (mMoveMode == 0) {
if (mMoveStartShakeTimer == 0) {
cLib_chaseF(&mMoveAccel, 0.45f, 0.5f + KREG_F(4));
cLib_chaseF(&mMoveStep, move_speed, mMoveAccel);
int is_move_end = cLib_chaseF(&current.pos.y, home.pos.y, mMoveStep);
mModelPos.y = current.pos.y;
if (is_move_end) {
mMoveMode = 1;
if (mSmokeEmitter != NULL) {
mSmokeEmitter->becomeInvalidEmitter();
mSmokeEmitter = NULL;
}
if (getMdlType() != 1) {
mDoAud_seStart(Z2SE_OBJ_STEP_MOVEEND, &mSoundPos, 0, 0);
} else {
mDoAud_seStart(Z2SE_OBJ_L6_UD_BLOCK_DW_ST, &mSoundPos, 0, 0);
}
} else if (getMdlType() != 1) {
mDoAud_seStartLevel(Z2SE_OBJ_STEP_MOVE, &mSoundPos, 0, 0);
} else {
mDoAud_seStartLevel(Z2SE_OBJ_L6_UD_BLOCK_DW, &mSoundPos, 0, 0);
}
} else {
mMoveStartShakeTimer--;
if (mMoveStartShakeTimer == 0) {
if (mSmokeEmitter == NULL) {
cXyz effpos(home.pos);
effpos.y += 600.0f;
mSmokeEmitter = dComIfGp_particle_set(0x833E, &effpos, &home.angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL);
}
} else if (mMoveStartShakeTimer == 2 && getMdlType() != 1) {
mDoAud_seStart(Z2SE_OBJ_STEP_MOVESTART, &mSoundPos, 0, 0);
}
}
} else {
if (mMoveStartShakeTimer == 0 && mMoveMode == 1) {
mMoveStartShakeTimer = 15;
mMoveMode = 2;
dComIfGp_getVibration().StartShock(4, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
}
mMoveStartShakeTimer--;
mModelPos = current.pos;
mModelPos.y += shake_amount * cM_scos(mMoveStartShakeTimer * shake_speed);
if (mMoveStartShakeTimer == 0) {
modeWaitUpperInit();
}
}
return 1;
}
/* 80C9E3D8-80C9E5A0 0013B8 01C8+00 1/1 0/0 0/0 .text setParticle__12daObjStair_cFv */
void daObjStair_c::setParticle() {
// NONMATCHING
if (mParticleLeftEmitter[0].getEmitter() == NULL) {
dComIfGp_particle_set(0x833C, &mParticleLeftPos[0], &home.angle, NULL, 0xFF, &mParticleLeftEmitter[0], fopAcM_GetRoomNo(this), NULL, NULL, NULL);
}
if (mParticleLeftEmitter[1].getEmitter() == NULL) {
dComIfGp_particle_set(0x833C, &mParticleLeftPos[1], &home.angle, NULL, 0xFF, &mParticleLeftEmitter[1], fopAcM_GetRoomNo(this), NULL, NULL, NULL);
}
if (mParticleRightEmitter[0].getEmitter() == NULL) {
dComIfGp_particle_set(0x833D, &mParticleRightPos[0], &home.angle, NULL, 0xFF, &mParticleRightEmitter[0], fopAcM_GetRoomNo(this), NULL, NULL, NULL);
}
if (mParticleRightEmitter[1].getEmitter() == NULL) {
dComIfGp_particle_set(0x833D, &mParticleRightPos[1], &home.angle, NULL, 0xFF, &mParticleRightEmitter[1], fopAcM_GetRoomNo(this), NULL, NULL, NULL);
// "Up/Down Stairs: Right Effect set"
OS_REPORT("上下階段:右エフェクトセット\n");
}
}
/* 80C9E5A0-80C9E614 001580 0074+00 2/2 0/0 0/0 .text removeParticle__12daObjStair_cFv */
void daObjStair_c::removeParticle() {
// NONMATCHING
for (int i = 0; i < 2; i++) {
mParticleLeftEmitter[i].remove();
mParticleRightEmitter[i].remove();
}
}
/* 80C9E614-80C9E700 0015F4 00EC+00 1/0 0/0 0/0 .text daObjStair_create1st__FP12daObjStair_c */
static int daObjStair_create1st(daObjStair_c* i_this) {
fopAcM_SetupActor(i_this, daObjStair_c);
return i_this->create1st();
}
/* 80C9E7B4-80C9E7D4 001794 0020+00 1/0 0/0 0/0 .text daObjStair_MoveBGDelete__FP12daObjStair_c */
static int daObjStair_MoveBGDelete(daObjStair_c* i_this) {
return i_this->MoveBGDelete();
}
/* 80C9E7D4-80C9E7F4 0017B4 0020+00 1/0 0/0 0/0 .text daObjStair_MoveBGExecute__FP12daObjStair_c
*/
static int daObjStair_MoveBGExecute(daObjStair_c* i_this) {
return i_this->MoveBGExecute();
}
/* 80C9E7F4-80C9E820 0017D4 002C+00 1/0 0/0 0/0 .text daObjStair_MoveBGDraw__FP12daObjStair_c */
static int daObjStair_MoveBGDraw(daObjStair_c* i_this) {
return i_this->MoveBGDraw();
}
/* ############################################################################################## */
/* 80C9EA08-80C9EA28 -00001 0020+00 1/0 0/0 0/0 .data daObjStair_METHODS */
static actor_method_class daObjStair_METHODS = {
(process_method_func)daObjStair_create1st__FP12daObjStair_c,
(process_method_func)daObjStair_MoveBGDelete__FP12daObjStair_c,
(process_method_func)daObjStair_MoveBGExecute__FP12daObjStair_c,
0,
(process_method_func)daObjStair_MoveBGDraw__FP12daObjStair_c,
(process_method_func)daObjStair_create1st,
(process_method_func)daObjStair_MoveBGDelete,
(process_method_func)daObjStair_MoveBGExecute,
(process_method_func)NULL,
(process_method_func)daObjStair_MoveBGDraw,
};
/* 80C9EA28-80C9EA58 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_MvStair */
@ -504,112 +519,3 @@ extern actor_process_profile_definition g_profile_Obj_MvStair = {
fopAc_ACTOR_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};
/* 80C9EA58-80C9EA7C 000138 0024+00 2/2 0/0 0/0 .data __vt__18dPa_levelEcallBack */
SECTION_DATA extern void* __vt__18dPa_levelEcallBack[9] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__18dPa_levelEcallBackFv,
(void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter,
(void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter,
(void*)draw__18JPAEmitterCallBackFP14JPABaseEmitter,
(void*)drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter,
(void*)NULL,
(void*)cleanup__18dPa_levelEcallBackFv,
};
/* 80C9EA7C-80C9EAA4 00015C 0028+00 1/1 0/0 0/0 .data __vt__12daObjStair_c */
SECTION_DATA extern void* __vt__12daObjStair_c[10] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)CreateHeap__12daObjStair_cFv,
(void*)Create__12daObjStair_cFv,
(void*)Execute__12daObjStair_cFPPA3_A4_f,
(void*)Draw__12daObjStair_cFv,
(void*)Delete__12daObjStair_cFv,
(void*)IsDelete__16dBgS_MoveBgActorFv,
(void*)ToFore__16dBgS_MoveBgActorFv,
(void*)ToBack__16dBgS_MoveBgActorFv,
};
/* 80C9E614-80C9E700 0015F4 00EC+00 1/0 0/0 0/0 .text daObjStair_create1st__FP12daObjStair_c */
static void daObjStair_create1st(daObjStair_c* param_0) {
// NONMATCHING
}
/* 80C9E700-80C9E704 0016E0 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */
// cXyz::cXyz() {
extern "C" void __ct__4cXyzFv() {
/* empty function */
}
/* 80C9E704-80C9E788 0016E4 0084+00 1/1 0/0 0/0 .text __dt__19dPa_followEcallBackFv */
// dPa_followEcallBack::~dPa_followEcallBack() {
extern "C" void __dt__19dPa_followEcallBackFv() {
// NONMATCHING
}
/* 80C9E788-80C9E78C 001768 0004+00 1/0 0/0 0/0 .text cleanup__18dPa_levelEcallBackFv */
// void dPa_levelEcallBack::cleanup() {
extern "C" void cleanup__18dPa_levelEcallBackFv() {
/* empty function */
}
/* 80C9E78C-80C9E7B4 00176C 0028+00 1/1 0/0 0/0 .text __defctor__19dPa_followEcallBackFv
*/
// void dPa_followEcallBack::__defctor() {
extern "C" void __defctor__19dPa_followEcallBackFv() {
// NONMATCHING
}
/* 80C9E7B4-80C9E7D4 001794 0020+00 1/0 0/0 0/0 .text daObjStair_MoveBGDelete__FP12daObjStair_c */
static void daObjStair_MoveBGDelete(daObjStair_c* param_0) {
// NONMATCHING
}
/* 80C9E7D4-80C9E7F4 0017B4 0020+00 1/0 0/0 0/0 .text daObjStair_MoveBGExecute__FP12daObjStair_c
*/
static void daObjStair_MoveBGExecute(daObjStair_c* param_0) {
// NONMATCHING
}
/* 80C9E7F4-80C9E820 0017D4 002C+00 1/0 0/0 0/0 .text daObjStair_MoveBGDraw__FP12daObjStair_c */
static void daObjStair_MoveBGDraw(daObjStair_c* param_0) {
// NONMATCHING
}
/* 80C9E820-80C9E894 001800 0074+00 1/0 0/0 0/0 .text __dt__18dPa_levelEcallBackFv */
// dPa_levelEcallBack::~dPa_levelEcallBack() {
extern "C" void __dt__18dPa_levelEcallBackFv() {
// NONMATCHING
}
/* 80C9E894-80C9E898 001874 0004+00 1/0 0/0 0/0 .text
* execute__18JPAEmitterCallBackFP14JPABaseEmitter */
// void JPAEmitterCallBack::execute(JPABaseEmitter* param_0) {
extern "C" void execute__18JPAEmitterCallBackFP14JPABaseEmitter() {
/* empty function */
}
/* 80C9E898-80C9E89C 001878 0004+00 1/0 0/0 0/0 .text
* executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter */
// void JPAEmitterCallBack::executeAfter(JPABaseEmitter* param_0) {
extern "C" void executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter() {
/* empty function */
}
/* 80C9E89C-80C9E8A0 00187C 0004+00 1/0 0/0 0/0 .text draw__18JPAEmitterCallBackFP14JPABaseEmitter
*/
// void JPAEmitterCallBack::draw(JPABaseEmitter* param_0) {
extern "C" void draw__18JPAEmitterCallBackFP14JPABaseEmitter() {
/* empty function */
}
/* 80C9E8A0-80C9E8A4 001880 0004+00 1/0 0/0 0/0 .text
* drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter */
// void JPAEmitterCallBack::drawAfter(JPABaseEmitter* param_0) {
extern "C" void drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter() {
/* empty function */
}
/* 80C9E90C-80C9E90C 000060 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */

File diff suppressed because it is too large Load Diff