diff --git a/include/d/actor/d_a_andsw.h b/include/d/actor/d_a_andsw.h index 1053330a09c..a2d777a604d 100644 --- a/include/d/actor/d_a_andsw.h +++ b/include/d/actor/d_a_andsw.h @@ -1,7 +1,7 @@ #ifndef D_A_ANDSW_H #define D_A_ANDSW_H -#include "d/d_com_inf_game.h" +#include "f_op/f_op_actor.h" /** * @ingroup actors-unsorted @@ -10,43 +10,24 @@ * * @details * - */ +*/ + class daAndsw_c : public fopAc_ac_c { public: - u8 getSwNo() { - return fopAcM_GetParamBit(this,0,8); - } - - u8 getSwNo2() { - return fopAcM_GetParamBit(this,8,8); - } - - u8 getTimer() { - return fopAcM_GetParamBit(this,16,8); - } - - u8 getType() { - return fopAcM_GetParamBit(this,24,8); - } - /* 80457978 */ int Create(); /* 804579B8 */ int create(); /* 80457A20 */ int execute(); /* 80457ABC */ int _delete(); + inline u8 getTimer(); + inline u8 getSwNo2(); + inline u8 getSwNo(); + inline daAndsw_c(); + inline u8 getType(); + /* 0x568 */ u8 mSwNo; /* 0x568 */ u8 mSwNo2; /* 0x56A */ s16 mTimer; }; -class daAndsw_HIO_c : public mDoHIO_entry_c { -public: - daAndsw_HIO_c(); - - void genMessage(JORMContext*); - - /* 0x06 */ u8 field_0x6; -}; - - #endif /* D_A_ANDSW_H */ diff --git a/include/d/actor/d_a_bg_obj.h b/include/d/actor/d_a_bg_obj.h index 375b244f365..9b93d158ca4 100644 --- a/include/d/actor/d_a_bg_obj.h +++ b/include/d/actor/d_a_bg_obj.h @@ -20,7 +20,8 @@ typedef int (daBgObj_c::*actionFunc)(); * * @details * - */ +*/ + class daBgObj_c : public dBgS_MoveBgActor { public: class spec_data_c { @@ -89,24 +90,24 @@ class daBgObj_c : public dBgS_MoveBgActor { void setAction(u8 i_action) { mAction = i_action; } - static createHeapFunc mCreateHeapFunc[]; - static createInitFunc mCreateInitFunc[]; - static executeFunc mExecuteFunc[]; - static tgSetFunc mTgSetFunc[]; + static createHeapFunc const mCreateHeapFunc[]; + static createInitFunc const mCreateInitFunc[]; + static executeFunc const mExecuteFunc[]; + static tgSetFunc const mTgSetFunc[]; /* 0x5A0 */ request_of_phase_process_class mPhase; - /* 0x5A8 */ J3DModel* field_0x5a8[2][2]; - /* 0x5B8 */ mDoExt_btkAnm* field_0x5b8[2][2]; - /* 0x5C8 */ mDoExt_brkAnm* field_0x5c8[2][2]; + /* 0x5A8 */ J3DModel* mpModelMtx[2][2]; + /* 0x5B8 */ mDoExt_btkAnm* mpBtkAnms[2][2]; + /* 0x5C8 */ mDoExt_brkAnm* mpBrkAnms[2][2]; /* 0x5D8 */ dBgW* mpBgW2; /* 0x5DC */ dCcD_Stts mStts; /* 0x618 */ dCcD_Tri mTris[4]; /* 0xB88 */ dCcD_Cyl mCyl; - /* 0xCC4 */ u8 field_0xcc4; + /* 0xCC4 */ u8 mTriNum; /* 0xCC5 */ u8 mAction; /* 0xCC6 */ s16 mEventIdx; /* 0xCC8 */ u8 field_0xcc8; - /* 0xCC9 */ u8 field_0xcc9; + /* 0xCC9 */ u8 mCreateFirstFlag; /* 0xCCA */ u16 field_0xcca; /* 0xCCC */ u16 field_0xccc; /* 0xCD0 */ spec_data_c mSpecData; @@ -114,7 +115,7 @@ class daBgObj_c : public dBgS_MoveBgActor { /* 0xCFC */ u32 mAttnActorID; /* 0xD00 */ u8 field_0xd00; /* 0xD01 */ u8 field_0xd01; - /* 0xD02 */ u8 field_0xd02; + /* 0xD02 */ u8 mSetSpecDataFlag; }; namespace daBgObj_prm { @@ -127,7 +128,7 @@ inline u8 getSwBit(daBgObj_c* i_this) { } inline u8 getSwBit2(daBgObj_c* i_this) { - return (i_this->field_0xccc >> 8) & 0xFF; + return (int)(i_this->field_0xccc & ~0xFFFF00FF) >> 8; } inline u8 getObjArg0(daBgObj_c* i_this) { diff --git a/include/d/actor/d_a_dmidna.h b/include/d/actor/d_a_dmidna.h index 9f015c0803d..23db9639c4d 100644 --- a/include/d/actor/d_a_dmidna.h +++ b/include/d/actor/d_a_dmidna.h @@ -1,7 +1,8 @@ #ifndef D_A_DMIDNA_H #define D_A_DMIDNA_H -#include "d/d_com_inf_game.h" +#include "SSystem/SComponent/c_phase.h" +#include "f_op/f_op_actor.h" /** * @ingroup actors-unsorted @@ -10,7 +11,8 @@ * * @details * - */ +*/ + class daDmidna_c : public fopAc_ac_c { public: /* 8045CED8 */ int createHeap(); @@ -20,6 +22,8 @@ class daDmidna_c : public fopAc_ac_c { /* 8045D1A0 */ int execute(); /* 8045D204 */ int draw(); + inline daDmidna_c(); + /* 0x568 */ request_of_phase_process_class mPhase; /* 0x570 */ u8 unk_0x570[4]; /* 0x574 */ mDoExt_McaMorfSO* mpModelMorf; diff --git a/include/d/actor/d_a_door_dbdoor00.h b/include/d/actor/d_a_door_dbdoor00.h index bbbe980fb9c..0d40cd5619f 100644 --- a/include/d/actor/d_a_door_dbdoor00.h +++ b/include/d/actor/d_a_door_dbdoor00.h @@ -11,7 +11,8 @@ * * @details * - */ +*/ + class daDbDoor00_c : public fopAc_ac_c { public: /* 8045D470 */ char* getAlwaysArcName(); @@ -20,6 +21,9 @@ class daDbDoor00_c : public fopAc_ac_c { /* 8045D4A0 */ char* getBmdArcName(); /* 8045D4B0 */ char* getBmdName(); /* 8045D504 */ J3DModelData* getDoorModelData(); + #if DEBUG + /* 80819530 */ bool debugCheckParam(); + #endif /* 8045D594 */ int CreateHeap(); /* 8045D744 */ void calcMtx(); /* 8045D8F4 */ int CreateInit(); @@ -41,7 +45,6 @@ class daDbDoor00_c : public fopAc_ac_c { void setAction(u8 i_action) { mAction = i_action; } -// private: /* 0x568 */ request_of_phase_process_class mPhaseReq; /* 0x570 */ request_of_phase_process_class mPhaseReq2; /* 0x578 */ J3DModel* mpModel; @@ -63,6 +66,9 @@ class daDbDoor00_c : public fopAc_ac_c { /* 0x5C0 */ s8 field_0x5c0; /* 0x5C1 */ s8 field_0x5c1; /* 0x5C2 */ s16 field_0x5c2; + #if DEBUG + /* 0x5CC */ u8 field_0x5cc; + #endif }; STATIC_ASSERT(sizeof(daDbDoor00_c) == 0x5C4); diff --git a/include/d/actor/d_a_door_shutter.h b/include/d/actor/d_a_door_shutter.h index 028e710c2fd..43f713101bd 100644 --- a/include/d/actor/d_a_door_shutter.h +++ b/include/d/actor/d_a_door_shutter.h @@ -1,7 +1,6 @@ #ifndef D_A_DOOR_SHUTTER_H #define D_A_DOOR_SHUTTER_H -#include "dolphin/types.h" #include "f_op/f_op_actor.h" #include "SSystem/SComponent/c_phase.h" #include "d/d_bg_w.h" @@ -35,7 +34,8 @@ class dDoor_stop_c { * * @details Multi-purpose door actor. This actor is used for vertical sliding doors in the game. * - */ +*/ + class daDoor20_c : public fopAc_ac_c { public: enum ActionType { @@ -53,6 +53,9 @@ class daDoor20_c : public fopAc_ac_c { /* 80460CF0 */ char* getBtk(); /* 80460D5C */ J3DModelData* getModelData(); /* 80460D80 */ f32 getSize2X(); + #if DEBUG + /* 8081DA40 */ bool debugCheckParam(); + #endif /* 80460DAC */ int CreateHeap(); /* 8046129C */ void setEventPrm(); /* 804616EC */ int checkOpenMsgDoor(int*); @@ -93,8 +96,8 @@ class daDoor20_c : public fopAc_ac_c { /* 80464858 */ int createKey(); /* 80464AE4 */ int deleteKey(); /* 80464B3C */ int adjoinPlayer(); - /* 80464BD8 */ int frontCheckOld(); - /* 80464C68 */ int frontCheck(); + /* 80464BD8 */ u8 frontCheckOld(); + /* 80464C68 */ u8 frontCheck(); /* 80464CEC */ int drawCheck(int); /* 80464E18 */ int checkExecute(); /* 80464EC4 */ void startDemoProc(); @@ -124,6 +127,9 @@ class daDoor20_c : public fopAc_ac_c { void setAction(u8 action) { mAction = action; } private: + #if DEBUG + /* 0x574 */ u8 field_0x574; + #endif /* 0x56C */ request_of_phase_process_class mPhase1; /* 0x574 */ request_of_phase_process_class mPhase2; /* 0x57C */ J3DModel* mModel1; @@ -131,8 +137,8 @@ class daDoor20_c : public fopAc_ac_c { /* 0x584 */ mDoExt_bckAnm field_0x584; /* 0x5A0 */ mDoExt_bckAnm field_0x5a0; /* 0x5BC */ J3DModel* field_0x5bc; - /* 0x5C0 */ mDoExt_btkAnm* field_0x5c0; - /* 0x5C4 */ dBgW* field_0x5c4; + /* 0x5C0 */ mDoExt_btkAnm* mBtkAnm; + /* 0x5C4 */ dBgW* mpBgW; /* 0x5C8 */ s8 field_0x5c8; /* 0x5C9 */ bool field_0x5c9; /* 0x5CA */ u8 field_0x5ca[0x5dd - 0x5ca]; @@ -142,7 +148,7 @@ class daDoor20_c : public fopAc_ac_c { /* 0x5F0 */ bool field_0x5f0; /* 0x5F1 */ u8 field_0x5f1; /* 0x5F4 */ Mtx field_0x5f4; - /* 0x624 */ dMsgFlow_c field_0x624; + /* 0x624 */ dMsgFlow_c mMsgFlow; /* 0x670 */ s16 field_0x670; /* 0x672 */ bool field_0x672; /* 0x673 */ u8 field_0x673; @@ -164,8 +170,8 @@ class daDoor20_c : public fopAc_ac_c { /* 0x6CC */ u32 field_0x6cc; /* 0x6D0 */ dDoor_stop_c mDoorStop; /* 0x6DC */ s16 field_0x6dc; - /* 0x6DE */ dBgS_ObjAcch field_0x6de; - /* 0x8B8 */ dBgS_AcchCir field_0x8b8; + /* 0x6DE */ dBgS_ObjAcch mBgc; + /* 0x8B8 */ dBgS_AcchCir mAcchCir; /* 0x8F8 */ u32 field_0x8f8; }; diff --git a/include/d/actor/d_a_door_spiral.h b/include/d/actor/d_a_door_spiral.h index d4503a90aab..8bf501e53b7 100644 --- a/include/d/actor/d_a_door_spiral.h +++ b/include/d/actor/d_a_door_spiral.h @@ -1,6 +1,125 @@ #ifndef D_A_DOOR_SPIRAL_H #define D_A_DOOR_SPIRAL_H -#include "dolphin/types.h" +#if DEBUG + +#include "SSystem/SComponent/c_phase.h" +#include "d/d_bg_w.h" +#include "f_op/f_op_actor.h" + +class daSpiral_c; + +class dSpiral_stop_c { +public: + /* 80827980 */ BOOL create(daSpiral_c*); + /* 80827AF0 */ int remove(daSpiral_c*); + /* 80827B40 */ void calcMtx(daSpiral_c*); + /* 80827C80 */ void openInit(daSpiral_c*); + /* 80827CA0 */ bool openProc(daSpiral_c*); + /* 80827D20 */ void closeInit(daSpiral_c*); + /* 80827D40 */ bool closeProc(daSpiral_c*); + /* 80827DB0 */ void draw(daSpiral_c*); + /* 80827E30 */ BOOL regist(daSpiral_c*); + /* 80827EB0 */ BOOL release(daSpiral_c*); + + /* 0x00 */ J3DModel* mModel; + /* 0x04 */ dBgW* mpBgW; + /* 0x08 */ u8 field_0x8[0x38 - 0x8]; + /* 0x38 */ Mtx mMtx; + /* 0x68 */ f32 field_0x68; + /* 0x6C */ f32 field_0x6c; + /* 0x70 */ u8 field_0x70; + /* 0x71 */ u8 field_0x71; + /* 0x72 */ u8 field_0x72; +}; + +class daSpiral_c : public fopAc_ac_c { +public: + /* 80825050 */ char* getAlwaysArcName(); + /* 80825080 */ char* getSpiralDzbName(int); + /* 808250A0 */ char* getDzb(); + /* 808250B0 */ char* getBmdArcName(); + /* 808250C0 */ char* getEvArcName(); + /* 808250D0 */ char* getBmd(int); + /* 808250F0 */ char* getBmd2(int); + /* 80825160 */ J3DModelData* getModelData(); + /* 808251E0 */ char* getStopBmd(); + /* 808251F0 */ char* getStopBmd2(); + /* 80825200 */ J3DModelData* getStopModelData(); + /* 80825280 */ char* getStopDzb(); + /* 808252D0 */ bool debugCheckParam(); + /* 80825380 */ cPhs__Step create(); + /* 80825520 */ int CreateHeap(); + /* 808257D0 */ int CreateInit(); + /* 80825940 */ void setAction(u8); + /* 80825950 */ void makeEventId(int); + /* 808259D0 */ void setEventPrm(); + /* 80825B20 */ void settingStartRoom(); + /* 80825B90 */ void settingEndRoom(); + /* 80825C30 */ void EndCommon(); + /* 80825D90 */ BOOL checkArea(); + /* 80825EC0 */ void calcMtx(); + /* 80825F70 */ void initProc(int); + /* 80826000 */ void initOpenDemo(int); + /* 808260D0 */ int getDemoAction(); + /* 80826120 */ int demoProc(); + /* 80826410 */ int actionWait(); + /* 80826640 */ int actionDemo(); + /* 808266E0 */ int actionStopClose(); + /* 80826740 */ int actionInit(); + /* 808267A0 */ void setPartner(); + /* 80826880 */ void clrPartner(); + /* 808268B0 */ void setGoal(); + /* 80826980 */ void setNextSpiral(); + /* 80826AB0 */ BOOL RunPlayerSpiral(); + /* 80826BB0 */ u8 frontCheck(); + /* 80826C10 */ int checkExecute(); + /* 80826CD0 */ int execute(); + /* 80826DF0 */ BOOL adjoinPlayer(); + /* 80826E80 */ BOOL drawCheck_local(); + /* 80826EC0 */ BOOL drawCheck(int); + /* 80826F40 */ void debugDraw(); + /* 80827260 */ int draw(); + /* 80827420 */ int Delete(); + /* 808274E0 */ BOOL checkMakeStop(); + /* 80827540 */ int checkStopF(); + /* 80827610 */ void setStopDemo(); + /* 80827700 */ BOOL checkStopClose(); + /* 808277E0 */ void setStop(); + /* 80827850 */ BOOL checkStopOpen(); + + /* 0x570 */ request_of_phase_process_class mPhase1; + /* 0x578 */ request_of_phase_process_class mPhase2; + /* 0x580 */ request_of_phase_process_class mPhase3; + /* 0x588 */ J3DModel* mModel; + /* 0x58C */ dBgW* mpBgW1; + /* 0x590 */ Mtx mMtx1; + /* 0x5C0 */ dBgW* mpBgW2; + /* 0x5C4 */ Mtx mMtx2; + /* 0x5F4 */ u8 mIdx; + /* 0x5F5 */ s8 field_0x5f5; + /* 0x5F6 */ u8 field_0x5f6; + /* 0x5F7 */ u8 mAction; + /* 0x5F8 */ int field_0x5f8; + /* 0x5FC */ s16 mEventIDs[8]; + /* 0x60C */ u8 mMapToolIDs[8]; + /* 0x614 */ u8 field_0x614; + /* 0x618 */ int mStaffId; + /* 0x61C */ s8 field_0x61c; + /* 0x61D */ u8 field_0x61d; + /* 0x61E */ u8 field_0x61e; + /* 0x61F */ u8 field_0x61f; + /* 0x620 */ cXyz field_0x620; + /* 0x62C */ u8 mFrontCheck; + /* 0x62D */ u8 field_0x62d; + /* 0x630 */ cXyz field_0x630; + /* 0x63C */ dSpiral_stop_c mSpiralStop; + /* 0x6AF */ u8 field_0x6af[0x6b2 - 0x6af]; + /* 0x6B4 */ s16 field_0x6b4; + /* 0x6B8 */ cXyz field_0x6b8[2]; + /* 0x6D0 */ bool field_0x6d0; +}; + +#endif #endif /* D_A_DOOR_SPIRAL_H */ diff --git a/include/d/actor/d_a_dshutter.h b/include/d/actor/d_a_dshutter.h index 63746b43696..db11b54cde1 100644 --- a/include/d/actor/d_a_dshutter.h +++ b/include/d/actor/d_a_dshutter.h @@ -11,9 +11,30 @@ * * @details * - */ +*/ + class daDsh_c : public dBgS_MoveBgActor { public: + #if DEBUG + class Hio_c : public mDoHIO_entry_c { + public: + void genMessage(JORMContext*); + + /* 0x08 */ f32 open_acceleration; + /* 0x0C */ f32 open_spd; + /* 0x10 */ f32 open_bound_max_spd; + /* 0x14 */ f32 open_bound_rate; + /* 0x18 */ f32 close_acceleration; + /* 0x1C */ f32 close_spd; + /* 0x20 */ f32 close_bound_max_spd; + /* 0x24 */ f32 close_bound_rate; + /* 0x28 */ s16 open_vibration_time; + /* 0x2A */ s16 close_vibration_time; + }; + + static Hio_c mHIO; + #endif + class action_c { public: typedef int (daDsh_c::*actionFunc)(); @@ -51,19 +72,79 @@ class daDsh_c : public dBgS_MoveBgActor { inline int create(); u8 getType() { return (fopAcM_GetParam(this) >> 8) & 0xF; } - int getSw() { return fopAcM_GetParam(this) & 0xFF; } - - u8 getOpenTiltTime() { return 0; } - f32 getOpenAccel() { return OPEN_ACCEL; } - f32 getOpenSpeed() { return OPEN_SPEED; } - f32 getOpenBoundSpeed() { return OPEN_BOUND_SPEED; } - f32 getOpenBoundRatio() { return OPEN_BOUND_RATIO; } - - u8 getCloseTiltTime() { return 0; } - f32 getCloseAccel() { return CLOSE_ACCEL; } - f32 getCloseSpeed() { return CLOSE_SPEED; } - f32 getCloseBoundSpeed() { return CLOSE_BOUND_SPEED; } - f32 getCloseBoundRatio() { return CLOSE_BOUND_RATIO; } + u8 getSw() { return fopAcM_GetParam(this) & 0xFF; } + + s16 getOpenTiltTime() { + #if DEBUG + return mHIO.open_vibration_time; + #else + return 0; + #endif + } + f32 getOpenAccel() { + #if DEBUG + return mHIO.open_acceleration; + #else + return OPEN_ACCEL; + #endif + } + f32 getOpenSpeed() { + #if DEBUG + return mHIO.open_spd; + #else + return OPEN_SPEED; + #endif + } + f32 getOpenBoundSpeed() { + #if DEBUG + return mHIO.open_bound_max_spd; + #else + return OPEN_BOUND_SPEED; + #endif + } + f32 getOpenBoundRatio() { + #if DEBUG + return mHIO.open_bound_rate; + #else + return OPEN_BOUND_RATIO; + #endif + } + + s16 getCloseTiltTime() { + #if DEBUG + return mHIO.close_vibration_time; + #else + return 0; + #endif + } + f32 getCloseAccel() { + #if DEBUG + return mHIO.close_acceleration; + #else + return CLOSE_ACCEL; + #endif + } + f32 getCloseSpeed() { + #if DEBUG + return mHIO.close_spd; + #else + return CLOSE_SPEED; + #endif + } + f32 getCloseBoundSpeed() { + #if DEBUG + return mHIO.close_bound_max_spd; + #else + return CLOSE_BOUND_SPEED; + #endif + } + f32 getCloseBoundRatio() { + #if DEBUG + return mHIO.close_bound_rate; + #else + return CLOSE_BOUND_RATIO; + #endif + } static f32 const OPEN_SIZE; static f32 const OPEN_ACCEL; diff --git a/include/d/actor/d_a_ep.h b/include/d/actor/d_a_ep.h index 281663b45c0..dfabacf21d5 100644 --- a/include/d/actor/d_a_ep.h +++ b/include/d/actor/d_a_ep.h @@ -54,8 +54,8 @@ class ep_class : public fopAc_ac_c { /* 0x05E8 */ cXyz field_0x5e8; /* 0x05F4 */ cXyz field_0x5f4; /* 0x0600 */ u8 field_0x600; - /* 0x0601 */ u8 field_0x601; - /* 0x0602 */ u8 field_0x602; + /* 0x0601 */ bool field_0x601; + /* 0x0602 */ bool field_0x602; /* 0x0603 */ u8 field_0x603[0x609 - 0x603]; /* 0x0609 */ u8 field_0x609; /* 0x060A */ u8 field_0x60a; diff --git a/include/d/actor/d_a_hitobj.h b/include/d/actor/d_a_hitobj.h index 40e470f8603..79d117ca697 100644 --- a/include/d/actor/d_a_hitobj.h +++ b/include/d/actor/d_a_hitobj.h @@ -10,15 +10,15 @@ * * @details * - */ +*/ + class hitobj_class : public fopAc_ac_c { public: /* 0x568 */ request_of_phase_process_class mPhase; - /* 0x570 */ u8 field_0x570; - /* 0x571 */ u8 field_0x571; - /* 0x572 */ s16 field_0x572; - /* 0x574 */ dCcD_Stts field_0x574; - /* 0x5B0 */ dCcD_Sph field_0x5b0; + /* 0x570 */ u8 arg0; + /* 0x572 */ s16 mTimer; + /* 0x574 */ dCcD_Stts mStts; + /* 0x5B0 */ dCcD_Sph mSph; }; #endif /* D_A_HITOBJ_H */ diff --git a/include/d/actor/d_a_kytag00.h b/include/d/actor/d_a_kytag00.h index dbb73250681..665ab26e184 100644 --- a/include/d/actor/d_a_kytag00.h +++ b/include/d/actor/d_a_kytag00.h @@ -10,7 +10,8 @@ * * @details * - */ +*/ + class kytag00_class : public fopAc_ac_c { public: /* 0x568 */ u8 field_0x568[0x56C - 0x568]; diff --git a/include/d/actor/d_a_obj_brakeeff.h b/include/d/actor/d_a_obj_brakeeff.h index 758385dc536..4159c07025e 100644 --- a/include/d/actor/d_a_obj_brakeeff.h +++ b/include/d/actor/d_a_obj_brakeeff.h @@ -17,7 +17,8 @@ class dBgW; * * @details * - */ +*/ + class obj_brakeeff_class : public fopAc_ac_c { public: /* 0x568 */ request_of_phase_process_class mRequestOfPhase; diff --git a/include/d/actor/d_a_obj_burnbox.h b/include/d/actor/d_a_obj_burnbox.h index d4ee6b28f7b..da4e0e6ec2f 100644 --- a/include/d/actor/d_a_obj_burnbox.h +++ b/include/d/actor/d_a_obj_burnbox.h @@ -12,7 +12,8 @@ * * @details * - */ +*/ + class daObjBurnBox_c : public dBgS_MoveBgActor { public: /* 8046E698 */ void initBaseMtx(); @@ -35,9 +36,7 @@ class daObjBurnBox_c : public dBgS_MoveBgActor { /* 0x5E8 */ dCcD_Cyl mCyl; /* 0x724 */ u32 field_0x724; /* 0x728 */ s16 field_0x728; - /* 0x72a */ u8 field_0x72a; - /* 0x72b */ u8 field_0x72b; - /* 0x72c */ JPABaseEmitter* mpEmitters[5]; + /* 0x72C */ JPABaseEmitter* mpEmitters[5]; }; STATIC_ASSERT(sizeof(daObjBurnBox_c) == 0x740); diff --git a/include/d/actor/d_a_obj_carry.h b/include/d/actor/d_a_obj_carry.h index 59d22f3730c..c371fa44671 100644 --- a/include/d/actor/d_a_obj_carry.h +++ b/include/d/actor/d_a_obj_carry.h @@ -7,13 +7,24 @@ #include "d/d_cc_d.h" #include "d/d_jnt_col.h" +/** + * @ingroup actors-objects + * @class daObjCarry_c + * @brief Carryable Object + * + * @details This is a multi-use class for carryable objects. + * It's used by: small and large blue pot, small and large red pot, box, cannon ball, barrel, skull, + * deku nut, Sols, small and large Twilight pots. + * +*/ + struct daObjCarry_dt_t { /* 0x00 */ f32 m_throwInitSpeedY; /* 0x04 */ f32 m_throwInitSpeedXZ; /* 0x08 */ f32 m_wolfThrowInitSpeedY; /* 0x0C */ f32 m_wolfThrowInitSpeedXZ; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ f32 field_0x14; + /* 0x10 */ f32 m_velocityReflCoeffY; + /* 0x14 */ f32 m_velocityReflCoeffXZ; /* 0x18 */ f32 m_gravity; /* 0x1C */ f32 m_Buoyancy; /* 0x20 */ f32 m_urnWindEffRatio; @@ -51,16 +62,44 @@ struct daObjCarry_dt_t { /* 0x90 */ u32 m_heapSize; }; -/** - * @ingroup actors-objects - * @class daObjCarry_c - * @brief Carryable Object - * - * @details This is a multi-use class for carryable objects. - * It's used by: small and large blue pot, small and large red pot, box, cannon ball, barrel, skull, - * deku nut, Sols, small and large Twilight pots. - * - */ +class daObj_HIO_c : public JORReflexible { +public: + daObj_HIO_c(int); + void entry(); + void remove(); + void genMessage(JORMContext*); + + /* 0x04 */ u8 type; + /* 0x08 */ daObjCarry_dt_t dt; + /* 0x9C */ s8 field_0x9c; +}; + +class daObj_HIO_common_c : public JORReflexible { +public: + daObj_HIO_common_c(); + void entry(); + void remove(); + void genMessage(JORMContext*); + + /* 0x04 */ u8 field_0x4; + /* 0x05 */ u8 field_0x5; + /* 0x06 */ u8 field_0x6; + /* 0x07 */ u8 field_0x7; + /* 0x08 */ u8 field_0x8; + /* 0x09 */ u8 field_0x9; + /* 0x0A */ u8 field_0xa; + /* 0x0B */ u8 field_0xb; + /* 0x0C */ u8 field_0xc; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ u8 field_0x1c; + /* 0x1D */ u8 field_0x1d; + /* 0x20 */ cXyz field_0x20; + /* 0x2C */ J3DGXColor field_0x2c[2]; + /* 0x34 */ J3DGXColorS10 field_0x34; +}; + class daObjCarry_c : public fopAc_ac_c { public: enum { @@ -107,7 +146,7 @@ class daObjCarry_c : public fopAc_ac_c { /* 80031D38 */ static void savePos(int, cXyz); /* 80031D64 */ static void onSttsFlag(int, u8); /* 80031D78 */ static void offSttsFlag(int, u8); - /* 80031D8C */ static u8 chkSttsFlag(int, u8); + /* 80031D8C */ static bool chkSttsFlag(int, u8); /* 80031DAC */ static void setRoomNo(int, s8); /* 80031DB8 */ static s8 getRoomNo(int); /* 8046F6A4 */ const daObjCarry_dt_t& data(); @@ -258,17 +297,17 @@ class daObjCarry_c : public fopAc_ac_c { s32 getType() { return mType; } u8 getSwbit() { return fopAcM_GetParamBit(this, 6, 8); } - u32 getSwbit2() { return fopAcM_GetParamBit(this, 14, 8); } + u8 getSwbit2() { return fopAcM_GetParamBit(this, 14, 8); } s8 getRoomNo() { return fopAcM_GetParamBit(this, 0, 6); } - u32 checkOnMoveBg() { return ~((field_0xd18 >> 0xc) & 1); } - u32 checkCrashRoll() { return field_0xd18 >> 6 & 1; } + u8 checkOnMoveBg() { return ~((field_0xd18 >> 0xc) & 1); } + u8 checkCrashRoll() { return field_0xd18 >> 6 & 1; } u8 getItemNo() { return mItemNo; } - u8 getItemBit() { return mItemNo >> 8; } + u8 getItemBit() { return (mItemNo >> 8) & 0xFF; } u8 getItemType() { return field_0xd18 & 1; } u8 getSaveID() { return getItemNo(); } u8 getTrboxBit() { return (mItemNo >> 8) & 0x3F; } - u32 getSetType() { return (field_0xd18 >> 13) & 0x7; } + u8 getSetType() { return (field_0xd18 >> 13) & 0x7; } bool prm_chk_type_ironball() { return getType() == TYPE_IRON_BALL; } bool prm_chk_type_lightball() { return getType() == TYPE_BALL_S || getType() == TYPE_BALL_S_2; } void startCtrl() { mCtrl = 1; } @@ -304,6 +343,9 @@ class daObjCarry_c : public fopAc_ac_c { } static const daObjCarry_dt_t mData[]; + #if DEBUG + static daObj_HIO_c mHIO[14]; + #endif static cXyz mPos[5]; static u8 mSttsFlag[5]; static s8 mRoomNo[5]; @@ -329,13 +371,12 @@ class daObjCarry_c : public fopAc_ac_c { /* 0xD00 */ s16 mRotation; /* 0xD02 */ u8 field_0xD02[0xD04 - 0xD02]; /* 0xD04 */ s16 field_0xd04; - /* 0xD08 */ cXyz field_0xd08; + /* 0xD08 */ cXyz mGrabCollisionOffset; /* 0xD14 */ u8 field_0xd14; /* 0xD15 */ bool mInitParams; /* 0xD16 */ u16 mItemNo; /* 0xD18 */ u16 field_0xd18; - /* 0xD1A */ u8 field_0xD1A[0xD1C - 0xD1A]; - /* 0xD1C */ cXyz field_0xd1c; + /* 0xD1C */ cXyz mInitSpeed; /* 0xD28 */ daPy_boomerangMove_c mBoomerangMove; /* 0xD34 */ u8 field_0xD34[0xD3C - 0xD34]; /* 0xD3C */ Quaternion field_0xd3c; @@ -352,16 +393,15 @@ class daObjCarry_c : public fopAc_ac_c { /* 0xD75 */ u8 field_0xd75; /* 0xD76 */ u8 field_0xd76; /* 0xD77 */ u8 field_0xd77; - /* 0xD78 */ u8 field_0xD78[0xD79 - 0xD78]; - /* 0xD79 */ u8 field_0xd79; + /* 0xD78 */ u8 field_0xd78; + /* 0xD79 */ u8 mBokkuriExecProcMode; /* 0xD7A */ u8 field_0xd7a; /* 0xD7B */ s8 field_0xd7b; /* 0xD7C */ csXyz field_0xd7c; - /* 0xD82 */ u8 field_0xD82[0xD84 - 0xD82]; /* 0xD84 */ f32 field_0xd84; /* 0xD88 */ Z2SoundObjSimple mSound; /* 0xDA8 */ u8 field_0xda8; - /* 0xDA9 */ bool field_0xda9; + /* 0xDA9 */ bool mCarryNowFlag; /* 0xDAA */ u8 field_0xdaa; /* 0xDAB */ u8 field_0xdab; /* 0xDAC */ bool field_0xdac; @@ -375,7 +415,7 @@ class daObjCarry_c : public fopAc_ac_c { /* 0xDB4 */ u8 field_0xdb4; /* 0xDB5 */ bool mCanCrashRoll; /* 0xDB6 */ u8 mDeleteTimer; - /* 0xDB7 */ bool mDraw; + /* 0xDB7 */ u8 mDraw; /* 0xDB8 */ u8 mCtrl; /* 0xDB9 */ u8 field_0xdb9; /* 0xDBA */ bool mReset; @@ -386,7 +426,7 @@ class daObjCarry_c : public fopAc_ac_c { /* 0xDC8 */ f32 field_0xdc8; /* 0xDCC */ f32 field_0xdcc; /* 0xDD0 */ fopAc_ac_c* mpCannonActor; - /* 0xDD4 */ u32 field_0xdd4; + /* 0xDD4 */ u32 mHamonPrtcl; /* 0xDD8 */ u8 field_0xDD8[0xDDC - 0xDD8]; /* 0xDDC */ f32 field_0xddc; /* 0xDE0 */ f32 field_0xde0; @@ -398,16 +438,13 @@ class daObjCarry_c : public fopAc_ac_c { /* 0xDF8 */ DALKMIST_INFLUENCE mDalkmistInf; /* 0xE0C */ u8 field_0xe0c; /* 0xE0D */ u8 field_0xe0d; - /* 0xE0E */ u8 field_0xE0E[0xE10 - 0xE0E]; /* 0xE10 */ dJntCol_c mJntCol; /* 0xE20 */ f32 field_0xe20; /* 0xE24 */ s8 field_0xe24; /* 0xE25 */ u8 field_0xe25; - /* 0xE26 */ u8 field_0xe26; - /* 0xE27 */ u8 field_0xe27; private: - u16 getType_private() { return field_0xd18 >> 1 & 0x1f; } + u8 getType_private() { return field_0xd18 >> 1 & 0x1f; } }; STATIC_ASSERT(sizeof(daObjCarry_c) == 0xE28); diff --git a/include/d/actor/d_a_obj_ito.h b/include/d/actor/d_a_obj_ito.h index 58e05ec3aa0..192fdb676a8 100644 --- a/include/d/actor/d_a_obj_ito.h +++ b/include/d/actor/d_a_obj_ito.h @@ -58,10 +58,12 @@ class obj_ito_class { STATIC_ASSERT(sizeof(obj_ito_class) == 0x150c); -class daObj_Ito_HIO_c { +class daObj_Ito_HIO_c : public JORReflexible { public: /* 8047B2EC */ daObj_Ito_HIO_c(); /* 8047D778 */ virtual ~daObj_Ito_HIO_c() {} + void genMessage(JORMContext*); + /* ぶら下りOBJ糸 */ /* 0x04 */ s8 field_0x4; diff --git a/include/d/actor/d_a_passer_mng.h b/include/d/actor/d_a_passer_mng.h index c48a5723848..16f179345ad 100644 --- a/include/d/actor/d_a_passer_mng.h +++ b/include/d/actor/d_a_passer_mng.h @@ -5,6 +5,8 @@ #include "f_op/f_op_actor_mng.h" class dPath; +class daPasserMng_Hio_c; +class daPasserMng_Attr_c; /** * @ingroup actors-unsorted @@ -13,12 +15,14 @@ class dPath; * * @details * - */ +*/ + class daPasserMng_c : public fopAc_ac_c { public: + inline daPasserMng_c(); /* 80D45738 */ int execute(); /* 80D4597C */ int getPasserParam(); - /* 80D45E14 */ int getLuggageParamHigh(u32); + /* 80D45E14 */ inline int getLuggageParamHigh(u32); /* 80D46768 */ int create(); /* 80D467C0 */ void create_init(); ~daPasserMng_c() { delete [] childProcIds; } @@ -26,7 +30,7 @@ class daPasserMng_c : public fopAc_ac_c { u8 getDetailLevel() { return argument; } u8 getPathID() { return fopAcM_GetParam(this); } u8 getIntervalTime() { return fopAcM_GetParam(this) >> 24; } - int getStartTime() { return (fopAcM_GetParam(this) >> 8) & 0xff; } + u8 getStartTime() { return (fopAcM_GetParam(this) >> 8) & 0xff; } u8 getEndTime() { return (fopAcM_GetParam(this) >> 16) & 0xff; } u8 getMaxNum() { return shape_angle.x; } u8 getGroupNo() { return (shape_angle.x >> 8) & 0xff; } @@ -254,9 +258,12 @@ class daPasserMng_c : public fopAc_ac_c { u8 field_0x00; int field_0x04[0]; }; - static Group* mGroupTbl[4]; + #if DEBUG + static daPasserMng_Attr_c const M_attr; + static daPasserMng_Hio_c M_hio; + #endif private: /* 0x568 */ fpc_ProcID* childProcIds; /* 0x56C */ dPath* mPath; @@ -271,9 +278,8 @@ class daPasserMng_c : public fopAc_ac_c { /* 0x594 */ s16 field_0x594; /* 0x596 */ u8 field_0x596; /* 0x597 */ u8 field_0x597; - }; +}; STATIC_ASSERT(sizeof(daPasserMng_c) == 0x598); - #endif /* D_A_PASSER_MNG_H */ diff --git a/include/d/d_a_obj.h b/include/d/d_a_obj.h index 50eb03abd2e..259919f61ee 100644 --- a/include/d/d_a_obj.h +++ b/include/d/d_a_obj.h @@ -8,8 +8,11 @@ namespace daObj { void eff_break_tsubo(fopAc_ac_c*, cXyz, int); void make_eff_break_kotubo(fopAc_ac_c*); void make_eff_break_kotubo2(fopAc_ac_c*); +void make_eff_break_ootubo(fopAc_ac_c*); void make_eff_break_gm_kotubo(fopAc_ac_c*); void make_eff_break_gm_ootubo(fopAc_ac_c*); +void get_wind_spd(fopAc_ac_c*, f32); +void get_path_spd(cBgS_PolyInfo&, f32); void posMoveF_stream(fopAc_ac_c*, cXyz const*, cXyz const*, f32, f32); void posMoveF_grade(fopAc_ac_c*, cXyz const*, cXyz const*, f32, f32, cXyz const*, f32, f32, cXyz const*); @@ -24,16 +27,80 @@ T PrmAbstract(const fopAc_ac_c* i_actor, T i_nbits, T i_shift) { class HioVarious_c : public JORReflexible { public: - static void init(JORReflexible* node_ptr, const char* node_name); - static void clean(JORReflexible* node_ptr); + HioVarious_c(); + static void init(JORReflexible*, const char*); + static void clean(JORReflexible*); + void genMessage(JORMContext*); + + static HioVarious_c M_hio; + +private: + /* 0x04 */ JORReflexible* field_0x4[16]; + /* 0x44 */ const char* field_0x44[16]; + /* 0x84 */ s8 field_0x84; +}; + +class HioThrow_c : public JORReflexible { +public: + HioThrow_c(); + static void init(JORReflexible*, const char*); + static void clean(JORReflexible*); + void genMessage(JORMContext*); + void listen(u32, const JOREvent*); + void genObjectInfo(const JORGenEvent*); + void listenNodeEvent(const JORNodeEvent*); + void listenPropertyEvent(const JORPropertyEvent*); + + static HioThrow_c M_hio; + static cXyz M_throw_pos_st; + static cXyz M_throw_pos_now; + +private: + /* 0x04 */ JORReflexible* field_0x4[20]; + /* 0x54 */ const char* field_0x54[20]; + /* 0xA4 */ s8 field_0xa4; +}; +class HioField_c : public JORReflexible { +public: + HioField_c(); void genMessage(JORMContext*); - /* 0x04 */ JORReflexible* node_ptrs[16]; - /* 0x44 */ const char* node_names[16]; - /* 0x84 */ u8 field_0x84; + static HioField_c M_hio; + +private: + /* 0x04 */ JORReflexible* field_0x4[16]; + /* 0x44 */ const char* field_0x44[16]; + /* 0x84 */ s8 field_0x84; }; +class HioSpot_c : public JORReflexible { +public: + HioSpot_c(); + void genMessage(JORMContext*); + + static HioSpot_c M_hio; + +private: + /* 0x04 */ JORReflexible* field_0x4[16]; + /* 0x44 */ const char* field_0x44[16]; + /* 0x84 */ s8 field_0x84; +}; + +class HioObj_c : public JORReflexible { +public: + HioObj_c(); + void init(); + void clean(); + void genMessage(JORMContext*); + + static HioObj_c M_hio; + static const char* M_node_name[4]; + static const JORReflexible* M_node_ptr[4]; + +private: + /* 0x4 */ s8 M_no; +}; }; // namespace daObj #endif /* D_A_D_A_OBJ_H */ diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 40171a164e9..0f7b478743e 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -3695,6 +3695,10 @@ inline fopAc_ac_c* dComIfGp_event_getDoorPartner() { return g_dComIfG_gameInfo.play.getEvent().getPtD(); } +inline void dComIfGp_event_setDoorPartner(void* i_actor) { + g_dComIfG_gameInfo.play.getEvent().setPtD(i_actor); +} + inline int dComIfGp_evmng_getMyStaffId(const char* i_staffname, fopAc_ac_c* i_actor, int i_tagId) { return dComIfGp_getPEvtManager()->getMyStaffId(i_staffname, i_actor, i_tagId); } diff --git a/include/d/d_jnt_col.h b/include/d/d_jnt_col.h index bdc3a71fac5..5aac09bf281 100644 --- a/include/d/d_jnt_col.h +++ b/include/d/d_jnt_col.h @@ -26,6 +26,10 @@ class dJntCol_c { /* 80036C44 */ int getHitmarkPosAndAngle(cXyz const*, csXyz const*, cXyz*, csXyz*, int) const; /* 80036FA8 */ void setArrowPosAndAngle(cXyz const*, cXyz const*, int, cXyz*, csXyz*); + #if DEBUG + /* 80072FA0 */ void debugDraw(); + #endif + bool checkPassNum(int bit) { return field_0xc & (1 << bit); } void onPassNum(int num) { field_0xc |= (1 << num); } void offPassNum(int num) { field_0xc &= ~(1 << num); } diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index b71590829e3..4ee308e0d5c 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -220,6 +220,10 @@ inline void fopAcM_OffStatus(fopAc_ac_c* i_actor, u32 flag) { i_actor->actor_status &= ~flag; } +inline void fopAcM_SetStatusMap(fopAc_ac_c* i_actor, u32 flag) { + /* empty function */ +} + inline fopAc_ac_c* fopAcM_Search(fopAcIt_JudgeFunc i_judgeFunc, void* i_process) { return (fopAc_ac_c*)fopAcIt_Judge(i_judgeFunc, i_process); } diff --git a/src/d/actor/d_a_andsw.cpp b/src/d/actor/d_a_andsw.cpp index c3e5e63879a..8016b73de25 100644 --- a/src/d/actor/d_a_andsw.cpp +++ b/src/d/actor/d_a_andsw.cpp @@ -1,13 +1,22 @@ /** * d_a_andsw.cpp * AND - Switch - */ +*/ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_andsw.h" #include "d/d_procname.h" +class daAndsw_HIO_c : public mDoHIO_entry_c { +public: + daAndsw_HIO_c(); + + void genMessage(JORMContext*); + + /* 0x06 */ u8 field_0x6; +}; + #ifdef DEBUG daAndsw_HIO_c l_HIO; @@ -21,6 +30,10 @@ void daAndsw_HIO_c::genMessage(JORMContext* ctx) { } #endif +u8 daAndsw_c::getTimer() { return fopAcM_GetParamBit(this,16,8); } +u8 daAndsw_c::getSwNo2() { return fopAcM_GetParamBit(this,8,8); } +u8 daAndsw_c::getSwNo() { return fopAcM_GetParamBit(this,0,8); } + /* 80457978-804579B8 000078 0040+00 1/1 0/0 0/0 .text Create__9daAndsw_cFv */ int daAndsw_c::Create() { mSwNo = getSwNo(); @@ -37,6 +50,8 @@ int daAndsw_c::Create() { return 1; } +daAndsw_c::daAndsw_c() {} + /* 804579B8-80457A20 0000B8 0068+00 1/1 0/0 0/0 .text create__9daAndsw_cFv */ int daAndsw_c::create() { fopAcM_ct(this, daAndsw_c); @@ -51,6 +66,8 @@ int daAndsw_c::create() { return cPhs_COMPLEATE_e; } +u8 daAndsw_c::getType() { return fopAcM_GetParamBit(this,24,8); } + /* 80457A20-80457ABC 000120 009C+00 1/1 0/0 0/0 .text execute__9daAndsw_cFv */ int daAndsw_c::execute() { if (fopAcM_isSwitch(this,mSwNo2)) { @@ -109,7 +126,6 @@ static int daAndsw_Create(fopAc_ac_c* i_this) { return a_this->create(); } -/* ############################################################################################## */ /* 80457B2C-80457B4C -00001 0020+00 1/0 0/0 0/0 .data l_daAndsw_Method */ static actor_method_class l_daAndsw_Method = { (process_method_func)daAndsw_Create, diff --git a/src/d/actor/d_a_bg_obj.cpp b/src/d/actor/d_a_bg_obj.cpp index 5aa22856eac..b48ec355c2d 100644 --- a/src/d/actor/d_a_bg_obj.cpp +++ b/src/d/actor/d_a_bg_obj.cpp @@ -13,9 +13,22 @@ #include "d/d_s_play.h" #include "SSystem/SComponent/c_math.h" -// -// Declarations: -// +/* 8045CAE4-8045CB38 000020 0054+00 4/4 0/0 0/0 .data l_tri_src */ +static dCcD_SrcTri l_tri_src = { + { + {0, {{0, 0, 0}, {0xD8400422, 0x11}, 0}}, + {dCcD_SE_NONE, 0, 0, 0, {0}}, + {dCcD_SE_NONE, 0, 0, 0, {4}}, + {0}, + }, + { + { + {0.0f, 0.0f, 0.0f}, + {0.0f, 0.0f, 0.0f}, + {0.0f, 0.0f, 0.0f}, + }, + }, +}; /* 80459658-804596C4 000078 006C+00 2/2 0/0 0/0 .text getBmdName__Fii */ static const char* getBmdName(int param_0, int param_1) { @@ -72,61 +85,90 @@ static const char* getDzbName(int param_0) { return l_dzbName; } -static const char* dummy() { - return "spec.dat"; -} +/* 8045CB38-8045CB3C -00001 0004+00 1/1 0/0 0/0 .data l_specName */ +static char* l_specName = "spec.dat"; -/* 804597E8-80459814 000208 002C+00 1/1 0/0 0/0 .text - * initParticleBlock__Q29daBgObj_c11spec_data_cFPUc */ +/* 804597E8-80459814 000208 002C+00 1/1 0/0 0/0 .text initParticleBlock__Q29daBgObj_c11spec_data_cFPUc */ u8* daBgObj_c::spec_data_c::initParticleBlock(u8* i_dataPtr) { + if (mpParticleBlock != NULL) { + OS_REPORT_ERROR("パーティクルデータブロックが複数見つかりました!!\n"); // Multiple particle data blocks were found!! + JUT_ASSERT(340, FALSE); + } + mpParticleBlock = i_dataPtr; - mParticleNum = *(u32*)mpParticleBlock >> 4 & 0xFFFFF; + mParticleNum = (*(u32*)(mpParticleBlock) & 0xFFFFFF) >> 4; - return i_dataPtr + ((*(u32*)mpParticleBlock & 0xFFFFFF) + 4); + i_dataPtr += ((*(u32*)mpParticleBlock & 0xFFFFFF) + 4); + return i_dataPtr; } -/* 80459814-80459840 000234 002C+00 1/1 0/0 0/0 .text - * initSoundBlock__Q29daBgObj_c11spec_data_cFPUc */ +/* 80459814-80459840 000234 002C+00 1/1 0/0 0/0 .text initSoundBlock__Q29daBgObj_c11spec_data_cFPUc */ u8* daBgObj_c::spec_data_c::initSoundBlock(u8* i_dataPtr) { + if (mpSoundBlock != NULL) { + OS_REPORT_ERROR("サウンドデータブロックが複数見つかりました!!\n"); // Multiple sound data blocks were found!! + JUT_ASSERT(362, FALSE); + } + + mpSoundBlock = i_dataPtr; - mSoundNum = *(u32*)mpSoundBlock >> 2 & 0x3FFFFF; + mSoundNum = ((*(u32*)mpSoundBlock) & 0xFFFFFF) >> 2; - return i_dataPtr + ((*(u32*)mpSoundBlock & 0xFFFFFF) + 4); + i_dataPtr += ((*(u32*)mpSoundBlock & 0xFFFFFF) + 4); + return i_dataPtr; } -/* 80459840-804598F4 000260 00B4+00 1/1 0/0 0/0 .text - * initTexShareBlock__Q29daBgObj_c11spec_data_cFPUc */ +/* 80459840-804598F4 000260 00B4+00 1/1 0/0 0/0 .text initTexShareBlock__Q29daBgObj_c11spec_data_cFPUc */ u8* daBgObj_c::spec_data_c::initTexShareBlock(u8* i_dataPtr) { char sp48[64]; char sp8[64]; + if (mpTexShareBlock != NULL) { + OS_REPORT_ERROR("テクスチャ共有ブロックが複数見つかりました!!\n"); // Multiple texture sharing blocks were found!! + JUT_ASSERT(384, FALSE); + } + mpTexShareBlock = i_dataPtr; - mTexShareNum = i_dataPtr[4]; + i_dataPtr += 4; + mTexShareNum = *i_dataPtr; + i_dataPtr += 4; + + if (mTexShareNum == 0) { + OS_REPORT_ERROR("テクスチャ共有データ数が0です!\n"); // The number of texture sharing data is 0! + JUT_ASSERT(397, FALSE); + } int i = 0; - u8* dataPos = i_dataPtr + 8; + u8* dataPos = i_dataPtr; for (; i < mTexShareNum; i++) { strcpy(sp48, (char*)dataPos); - int len = strlen((char*)dataPos); - - dataPos += len + 1; + dataPos += strlen((char*)dataPos) + 1; if (*dataPos != 0) { strcpy(sp8, (char*)dataPos); dataPos += strlen((char*)dataPos) + 1; } else if (*dataPos == 0 && dataPos[1] == 1) { dataPos += 2; + } else { + OS_REPORT_ERROR("被共有テクスチャモデルの設定が不正です\n"); // The shared texture model setting is invalid. + OS_REPORT("<%x><%x>\n", *dataPos, dataPos[1]); + JUT_ASSERT(458, FALSE); } } return dataPos; } -/* 804598F4-80459904 000314 0010+00 1/1 0/0 0/0 .text - * initFarInfoBlock__Q29daBgObj_c11spec_data_cFPUc */ +/* 804598F4-80459904 000314 0010+00 1/1 0/0 0/0 .text initFarInfoBlock__Q29daBgObj_c11spec_data_cFPUc */ u8* daBgObj_c::spec_data_c::initFarInfoBlock(u8* i_dataPtr) { + if (mpFarInfoBlock != 0.0f) { + OS_REPORT_ERROR("ファー情報ブロックが複数見つかりました!!\n"); // Multiple far information blocks were found!! + JUT_ASSERT(475, FALSE); + } + mpFarInfoBlock = *(f32*)(i_dataPtr + 4); - return i_dataPtr + 8; + i_dataPtr += 8; + OS_REPORT("ファー情報発見!<%f>\n", mpFarInfoBlock); // Far information discovered! <%f> + return i_dataPtr; } /* 80459904-80459B64 000324 0260+00 1/1 0/0 1/1 .text Set__Q29daBgObj_c11spec_data_cFPv @@ -351,11 +393,11 @@ void daBgObj_c::initAtt() { eyePos.y += 0.5f * box->y; } -/* 80459D0C-80459D3C 00072C 0030+00 2/2 0/0 0/0 .text setAttentionInfo__9daBgObj_cFP10fopAc_ac_c - */ +/* 80459D0C-80459D3C 00072C 0030+00 2/2 0/0 0/0 .text setAttentionInfo__9daBgObj_cFP10fopAc_ac_c */ void daBgObj_c::setAttentionInfo(fopAc_ac_c* param_0) { - param_0->eyePos.y += 0.5f * fopAcM_getCullSizeBoxMax(this)->y; - param_0->attention_info.position.y += fopAcM_getCullSizeBoxMax(this)->y; + Vec& cullSizeBoxMax = (Vec&)*fopAcM_getCullSizeBoxMax(this); + param_0->eyePos.y += 0.5f * cullSizeBoxMax.y; + param_0->attention_info.position.y += cullSizeBoxMax.y; } /* 80459D3C-80459D94 00075C 0058+00 2/2 0/0 0/0 .text initBaseMtx__9daBgObj_cFv */ @@ -369,28 +411,26 @@ void daBgObj_c::initBaseMtx() { /* 80459D94-80459E04 0007B4 0070+00 2/2 0/0 0/0 .text setBaseMtx__9daBgObj_cFv */ void daBgObj_c::setBaseMtx() { for (int i = 0; i < 2; i++) { - if (field_0x5a8[field_0xcc8][i] != NULL) { - field_0x5a8[field_0xcc8][i]->setBaseTRMtx(mBgMtx); + if (mpModelMtx[field_0xcc8][i] != NULL) { + mpModelMtx[field_0xcc8][i]->setBaseTRMtx(mBgMtx); } } } /* 80459E04-80459F14 000824 0110+00 1/1 0/0 0/0 .text settingCullSizeBoxForCo__9daBgObj_cFi */ void daBgObj_c::settingCullSizeBoxForCo(int param_0) { - J3DModel* cur_model = field_0x5a8[param_0][0]; - if (cur_model != NULL) { + if (mpModelMtx[param_0][0] != NULL) { Vec min_transformed; Vec max_transformed; - J3DModelData* model_data = cur_model->mModelData; + J3DModelData* model_data = mpModelMtx[param_0][0]->getModelData(); mDoMtx_stack_c::identity(); - J3DJointTree& joint_tree = model_data->getJointTree(); J3DJoint* joint; - for (u16 i = 0; i < joint_tree.getJointNum(); i++) { - joint = joint_tree.getJointNodePointer(i); + for (u16 i = 0; i < model_data->getJointNum(); i++) { + joint = model_data->getJointNodePointer(i); Mtx trans_rot_mat; J3DGetTranslateRotateMtx(joint->getTransformInfo(), trans_rot_mat); - mDoMtx_stack_c::concat(trans_rot_mat); + MTXConcat(mDoMtx_stack_c::get(), trans_rot_mat, mDoMtx_stack_c::get()); } PSMTXMultVec(mDoMtx_stack_c::get(), joint->getMin(), &min_transformed); @@ -403,15 +443,14 @@ void daBgObj_c::settingCullSizeBoxForCo(int param_0) { } } -/* 80459F14-8045A0EC 000934 01D8+00 3/3 0/0 0/0 .text settingCullSizeBoxForCull__9daBgObj_cFi */ +/* 80459F14-8045A0EC 000934 01D8+00 3/3 0/0 0/0 .text settingCullSizeBoxForCull__9daBgObj_cFi */ void daBgObj_c::settingCullSizeBoxForCull(int param_0) { cXyz max(G_CM3D_F_INF, G_CM3D_F_INF, G_CM3D_F_INF); cXyz min(-G_CM3D_F_INF, -G_CM3D_F_INF, -G_CM3D_F_INF); for (int i = 0; i < 2; i++) { - J3DModel* cur_model = field_0x5a8[param_0][i]; - if (cur_model != NULL) { - J3DModelData* model_data = cur_model->mModelData; + if (mpModelMtx[param_0][i] != NULL) { + J3DModelData* model_data = mpModelMtx[param_0][i]->getModelData(); mDoMtx_stack_c::identity(); J3DJoint* joint; for (u16 j = 0; j < model_data->getJointNum(); j++) { @@ -458,7 +497,7 @@ void daBgObj_c::settingCullSizeBoxForCull(int param_0) { int daBgObj_c::CreateInitType0() { field_0xcc8 = 0; initBaseMtx(); - fopAcM_SetMtx(this, field_0x5a8[field_0xcc8][0]->getBaseTRMtx()); + fopAcM_SetMtx(this, mpModelMtx[field_0xcc8][0]->getBaseTRMtx()); settingCullSizeBoxForCull(field_0xcc8); if (0.0f != mSpecData.mpFarInfoBlock) { @@ -474,18 +513,18 @@ int daBgObj_c::CreateInitType1() { field_0xcc8 = 1; release(mpBgW); regist(mpBgW2); - mAction = 3; + setAction(3); } else { field_0xcc8 = 0; - mAction = 0; + setAction(0); } initBaseMtx(); - if (field_0xcc8 == 1 && field_0x5a8[field_0xcc8][0] == NULL) { - fopAcM_SetMtx(this, field_0x5a8[0][0]->getBaseTRMtx()); + if (field_0xcc8 == 1 && mpModelMtx[field_0xcc8][0] == NULL) { + fopAcM_SetMtx(this, mpModelMtx[0][0]->getBaseTRMtx()); } else { - fopAcM_SetMtx(this, field_0x5a8[field_0xcc8][0]->getBaseTRMtx()); + fopAcM_SetMtx(this, mpModelMtx[field_0xcc8][0]->getBaseTRMtx()); } settingCullSizeBoxForCo(field_0xcc8); @@ -509,28 +548,8 @@ int daBgObj_c::CreateInitType1() { return 1; } -/* 8045CAE4-8045CB38 000020 0054+00 4/4 0/0 0/0 .data l_tri_src */ -static dCcD_SrcTri l_tri_src = { - { - {0, {{0, 0, 0}, {0xD8400422, 0x11}, 0}}, - {dCcD_SE_NONE, 0, 0, 0, {0}}, - {dCcD_SE_NONE, 0, 0, 0, {4}}, - {0}, - }, - { - { - {0.0f, 0.0f, 0.0f}, - {0.0f, 0.0f, 0.0f}, - {0.0f, 0.0f, 0.0f}, - }, - }, -}; - -/* 8045CB38-8045CB3C -00001 0004+00 1/1 0/0 0/0 .data l_specName */ -static char* l_specName = "spec.dat"; - /* 8045CB6C-8045CB9C 0000A8 0030+00 1/2 0/0 0/0 .data mCreateHeapFunc__9daBgObj_c */ -createHeapFunc daBgObj_c::mCreateHeapFunc[] = { +createHeapFunc const daBgObj_c::mCreateHeapFunc[] = { &daBgObj_c::CreateHeapType0, &daBgObj_c::CreateHeapType1, &daBgObj_c::CreateHeapType1, @@ -538,7 +557,7 @@ createHeapFunc daBgObj_c::mCreateHeapFunc[] = { }; /* 8045CBCC-8045CBFC 000108 0030+00 1/2 0/0 0/0 .data mCreateInitFunc__9daBgObj_c */ -createInitFunc daBgObj_c::mCreateInitFunc[] = { +createInitFunc const daBgObj_c::mCreateInitFunc[] = { &daBgObj_c::CreateInitType0, &daBgObj_c::CreateInitType1, &daBgObj_c::CreateInitType1, @@ -551,7 +570,7 @@ int daBgObj_c::Create() { } /* 8045CC2C-8045CC5C 000168 0030+00 1/2 0/0 0/0 .data mExecuteFunc__9daBgObj_c */ -executeFunc daBgObj_c::mExecuteFunc[] = { +executeFunc const daBgObj_c::mExecuteFunc[] = { &daBgObj_c::ExecuteType0, &daBgObj_c::ExecuteType1, &daBgObj_c::ExecuteType1, @@ -559,7 +578,7 @@ executeFunc daBgObj_c::mExecuteFunc[] = { }; /* 8045CC98-8045CCD4 0001D4 003C+00 1/2 0/0 0/0 .data mTgSetFunc__9daBgObj_c */ -tgSetFunc daBgObj_c::mTgSetFunc[] = { +tgSetFunc const daBgObj_c::mTgSetFunc[] = { &daBgObj_c::set_tri_0, &daBgObj_c::set_tri_1, &daBgObj_c::set_cyl_0, &daBgObj_c::set_tri_2, &daBgObj_c::set_tri_3, }; @@ -570,43 +589,43 @@ int daBgObj_c::CreateHeapType0() { J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), getBmdName(0, i)); if (modelData != NULL) { - field_0x5a8[0][i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11001284); - if (field_0x5a8[0][i] == NULL) { + mpModelMtx[0][i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11001284); + if (mpModelMtx[0][i] == NULL) { return 0; } - field_0x5b8[0][i] = NULL; - field_0x5c8[0][i] = NULL; + mpBtkAnms[0][i] = NULL; + mpBrkAnms[0][i] = NULL; J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes( daSetBgObj_c::getArcName(this), getBtkName(0, i)); if (btk != NULL) { - field_0x5b8[0][i] = new mDoExt_btkAnm(); - if (field_0x5b8[0][i] == NULL || - !field_0x5b8[0][i]->init(modelData, btk, TRUE, 2, 1.0f, 0, -1)) + mpBtkAnms[0][i] = new mDoExt_btkAnm(); + if (mpBtkAnms[0][i] == NULL || + !mpBtkAnms[0][i]->init(modelData, btk, TRUE, 2, 1.0f, 0, -1)) { return 0; } - field_0x5b8[0][i]->setPlaySpeed(1.0f); + mpBtkAnms[0][i]->setPlaySpeed(1.0f); } J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes( daSetBgObj_c::getArcName(this), getBrkName(0, i)); if (brk != NULL) { - field_0x5c8[0][i] = new mDoExt_brkAnm(); - if (field_0x5c8[0][i] == NULL || - !field_0x5c8[0][i]->init(modelData, brk, TRUE, 2, 1.0f, 0, -1)) + mpBrkAnms[0][i] = new mDoExt_brkAnm(); + if (mpBrkAnms[0][i] == NULL || + !mpBrkAnms[0][i]->init(modelData, brk, TRUE, 2, 1.0f, 0, -1)) { return 0; } - field_0x5c8[0][i]->setPlaySpeed(1.0f); + mpBrkAnms[0][i]->setPlaySpeed(1.0f); } - field_0x5a8[1][i] = NULL; - field_0x5b8[1][i] = NULL; - field_0x5c8[1][i] = NULL; + mpModelMtx[1][i] = NULL; + mpBtkAnms[1][i] = NULL; + mpBrkAnms[1][i] = NULL; } } @@ -618,44 +637,44 @@ int daBgObj_c::CreateHeapType0() { int daBgObj_c::CreateHeapType1() { for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { - field_0x5a8[i][j] = NULL; - field_0x5b8[i][j] = NULL; - field_0x5c8[i][j] = NULL; + mpModelMtx[i][j] = NULL; + mpBtkAnms[i][j] = NULL; + mpBrkAnms[i][j] = NULL; J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes( daSetBgObj_c::getArcName(this), getBmdName(i, j)); if (modelData != NULL) { - field_0x5a8[i][j] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11001284); - if (field_0x5a8[i][j] == NULL) { + mpModelMtx[i][j] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11001284); + if (mpModelMtx[i][j] == NULL) { return 0; } J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes( daSetBgObj_c::getArcName(this), getBtkName(i, j)); if (btk != NULL) { - field_0x5b8[i][j] = new mDoExt_btkAnm(); - if (field_0x5b8[i][j] == NULL || - !field_0x5b8[i][j]->init(modelData, btk, TRUE, 2, 1.0f, 0, + mpBtkAnms[i][j] = new mDoExt_btkAnm(); + if (mpBtkAnms[i][j] == NULL || + !mpBtkAnms[i][j]->init(modelData, btk, TRUE, 2, 1.0f, 0, -1)) { return 0; } - field_0x5b8[i][j]->setPlaySpeed(1.0f); + mpBtkAnms[i][j]->setPlaySpeed(1.0f); } J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes( daSetBgObj_c::getArcName(this), getBrkName(i, j)); if (brk != NULL) { - field_0x5c8[i][j] = new mDoExt_brkAnm(); - if (field_0x5c8[i][j] == NULL || - !field_0x5c8[i][j]->init(modelData, brk, TRUE, 2, 1.0f, 0, + mpBrkAnms[i][j] = new mDoExt_brkAnm(); + if (mpBrkAnms[i][j] == NULL || + !mpBrkAnms[i][j]->init(modelData, brk, TRUE, 2, 1.0f, 0, -1)) { return 0; } - field_0x5c8[i][j]->setPlaySpeed(1.0f); + mpBrkAnms[i][j]->setPlaySpeed(1.0f); } } } @@ -681,37 +700,48 @@ void daBgObj_c::doShareTexture() { char share_res_name[64]; u8* spec_res_name = mSpecData.mpTexShareBlock + 8; + OS_REPORT("テクスチャ共有数:%d\n", mSpecData.mTexShareNum); // Number of shared textures: %d for (int i = 0; i < mSpecData.mTexShareNum; i++) { strcpy(res_name, (char*)spec_res_name); spec_res_name += strlen((char*)spec_res_name) + 1; - J3DModelData* modelData = - (J3DModelData*)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), res_name); + OS_REPORT("共有側:%s\n"); // Shared side: + + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), res_name); + JUT_ASSERT(1273, modelData != NULL) if (*spec_res_name != 0) { strcpy(share_res_name, (char*)spec_res_name); spec_res_name += strlen((char*)spec_res_name) + 1; - J3DModelData* shareModelData = - (J3DModelData*)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), share_res_name); + OS_REPORT("被共有側:%s\n"); // Shared with: + + J3DModelData* shareModelData = (J3DModelData*)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), share_res_name); + JUT_ASSERT(1290, modelData != NULL); mDoExt_setupShareTexture(modelData, shareModelData); } else if (*spec_res_name == 0 && spec_res_name[1] == 1) { + OS_REPORT("非共有側:地形\n"); // Non-shared side: Terrain spec_res_name += 2; mDoExt_setupStageTexture(modelData); + } else { + OS_REPORT_ERROR("被共有テクスチャモデルの設定が不正です\n"); // The shared texture model setting is invalid. + OS_REPORT("<%x><%x>\n", *spec_res_name, spec_res_name[1]); + JUT_ASSERT(1310, FALSE); } } } /* 8045A940-8045A9E8 001360 00A8+00 1/0 0/0 0/0 .text CreateHeap__9daBgObj_cFv */ int daBgObj_c::CreateHeap() { - const char* const specName = l_specName; - void* spec_data_p = dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), specName); - if (field_0xd02 == 0) { + void* spec_data_p = dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), l_specName); + JUT_ASSERT(1329, spec_data_p != NULL); + + if (mSetSpecDataFlag == 0) { if (!mSpecData.Set(spec_data_p)) { return 0; } - field_0xd02 = 1; + mSetSpecDataFlag = 1; } return (this->*mCreateHeapFunc[mSpecData.mSpecType])(); @@ -719,23 +749,19 @@ int daBgObj_c::CreateHeap() { /* 8045A9E8-8045AAF0 001408 0108+00 1/1 0/0 0/0 .text create1st__9daBgObj_cFv */ int daBgObj_c::create1st() { - if (field_0xcc9 == 0) { + if (mCreateFirstFlag == 0) { field_0xcca = home.angle.x; field_0xccc = home.angle.z; - field_0xcc9 = 1; + mCreateFirstFlag = 1; - home.angle.z = 0; - home.angle.x = 0; - current.angle.z = 0; - current.angle.x = 0; - shape_angle.z = 0; - shape_angle.x = 0; + home.angle.x = home.angle.z = 0; + current.angle.x = current.angle.z = 0; + shape_angle.x = shape_angle.z = 0; } int phase = dComIfG_resLoad(&mPhase, daSetBgObj_c::getArcName(this)); if (phase == cPhs_COMPLEATE_e) { - int resnameIdx = - dComIfG_getObjctResName2Index(daSetBgObj_c::getArcName(this), getDzbName(0)); + int resnameIdx = dComIfG_getObjctResName2Index(daSetBgObj_c::getArcName(this), getDzbName(0)); phase = MoveBGCreate(daSetBgObj_c::getArcName(this), resnameIdx, NULL, 0x80022110, NULL); if (phase == cPhs_ERROR_e) { @@ -757,7 +783,7 @@ void daBgObj_c::setColCommon() { if (mSpecData.field_0x16 == 1) { u32 tg_type = mTris[0].GetTgType(); - for (int i = 0; i < field_0xcc4; i++) { + for (int i = 0; i < mTriNum; i++) { mTris[i].SetTgType(tg_type | 0x40); } @@ -767,45 +793,50 @@ void daBgObj_c::setColCommon() { /* 8045AB80-8045ACC0 0015A0 0140+00 1/0 0/0 0/0 .text set_tri_0__9daBgObj_cFv */ void daBgObj_c::set_tri_0() { - field_0xcc4 = 2; - for (int i = 0; i < field_0xcc4; i++) { + mTriNum = 2; + for (int i = 0; i < mTriNum; i++) { mTris[i].Set(l_tri_src); mTris[i].SetStts(&mStts); } + Vec& cullSizeBoxMin = (Vec&)*fopAcM_getCullSizeBoxMin(this); + Vec& cullSizeBoxMax = (Vec&)*fopAcM_getCullSizeBoxMax(this); cXyz cull_params[4]; - cull_params[0].set(fopAcM_getCullSizeBoxMax(this)->x, fopAcM_getCullSizeBoxMin(this)->y, 0.0f); - cull_params[1].set(fopAcM_getCullSizeBoxMin(this)->x, fopAcM_getCullSizeBoxMin(this)->y, 0.0f); - cull_params[2].set(fopAcM_getCullSizeBoxMin(this)->x, fopAcM_getCullSizeBoxMax(this)->y, 0.0f); - cull_params[3].set(fopAcM_getCullSizeBoxMax(this)->x, fopAcM_getCullSizeBoxMax(this)->y, 0.0f); + cull_params[0].set(cullSizeBoxMax.x, cullSizeBoxMin.y, 0.0f); + cull_params[1].set(cullSizeBoxMin.x, cullSizeBoxMin.y, 0.0f); + cull_params[2].set(cullSizeBoxMin.x, cullSizeBoxMax.y, 0.0f); + cull_params[3].set(cullSizeBoxMax.x, cullSizeBoxMax.y, 0.0f); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(current.angle.y); for (int i = 0; i < (s32)(sizeof(cull_params) / sizeof(Vec)); i++) { mDoMtx_stack_c::multVec(&cull_params[i], &cull_params[i]); } + mTris[0].setPos(&cull_params[0], &cull_params[1], &cull_params[2]); mTris[1].setPos(&cull_params[0], &cull_params[2], &cull_params[3]); } /* 8045ACC0-8045AE00 0016E0 0140+00 1/0 0/0 0/0 .text set_tri_1__9daBgObj_cFv */ void daBgObj_c::set_tri_1() { - field_0xcc4 = 2; - for (int i = 0; i < field_0xcc4; i++) { + mTriNum = 2; + for (int i = 0; i < mTriNum; i++) { mTris[i].Set(l_tri_src); mTris[i].SetStts(&mStts); } + Vec& cullSizeBoxMin = (Vec&)*fopAcM_getCullSizeBoxMin(this); + Vec& cullSizeBoxMax = (Vec&)*fopAcM_getCullSizeBoxMax(this); cXyz cull_bounds[4]; - cull_bounds[0].set(fopAcM_getCullSizeBoxMax(this)->x, 0.0f, fopAcM_getCullSizeBoxMin(this)->z); - cull_bounds[1].set(fopAcM_getCullSizeBoxMin(this)->x, 0.0f, fopAcM_getCullSizeBoxMin(this)->z); - cull_bounds[2].set(fopAcM_getCullSizeBoxMin(this)->x, 0.0f, fopAcM_getCullSizeBoxMax(this)->z); - cull_bounds[3].set(fopAcM_getCullSizeBoxMax(this)->x, 0.0f, fopAcM_getCullSizeBoxMax(this)->z); + cull_bounds[0].set(cullSizeBoxMax.x, 0.0f, cullSizeBoxMin.z); + cull_bounds[1].set(cullSizeBoxMin.x, 0.0f, cullSizeBoxMin.z); + cull_bounds[2].set(cullSizeBoxMin.x, 0.0f, cullSizeBoxMax.z); + cull_bounds[3].set(cullSizeBoxMax.x, 0.0f, cullSizeBoxMax.z); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(current.angle.y); for (int i = 0; i < (s32)(sizeof(cull_bounds) / sizeof(Vec)); i++) { - PSMTXMultVec(mDoMtx_stack_c::get(), &cull_bounds[i], &cull_bounds[i]); + mDoMtx_stack_c::multVec(&cull_bounds[i], &cull_bounds[i]); } mTris[0].setPos(&cull_bounds[0], &cull_bounds[1], &cull_bounds[2]); mTris[1].setPos(&cull_bounds[0], &cull_bounds[2], &cull_bounds[3]); @@ -813,48 +844,44 @@ void daBgObj_c::set_tri_1() { /* 8045AE00-8045AE98 001820 0098+00 1/0 0/0 0/0 .text set_cyl_0__9daBgObj_cFv */ void daBgObj_c::set_cyl_0() { - field_0xcc4 = 0; + mTriNum = 0; mCyl.Set(l_cyl_src); mCyl.SetStts(&mStts); f32 radius; - if (fopAcM_getCullSizeBoxMax(this)->x > fopAcM_getCullSizeBoxMax(this)->z) { - radius = fopAcM_getCullSizeBoxMax(this)->x; + Vec& cullSizeBoxMax2 = (Vec&)*fopAcM_getCullSizeBoxMax(this); + Vec& cullSizeBoxMax = (Vec&)*fopAcM_getCullSizeBoxMax(this); + if (cullSizeBoxMax.x > cullSizeBoxMax.z) { + radius = cullSizeBoxMax.x; } else { - radius = fopAcM_getCullSizeBoxMax(this)->z; + radius = cullSizeBoxMax.z; } mCyl.SetC(current.pos); - mCyl.SetH(fopAcM_getCullSizeBoxMax(this)->y); + mCyl.SetH(cullSizeBoxMax.y); mCyl.SetR(radius); } /* 8045AE98-8045AFD4 0018B8 013C+00 1/0 0/0 0/0 .text set_tri_2__9daBgObj_cFv */ void daBgObj_c::set_tri_2() { - field_0xcc4 = 2; - for (int i = 0; i < field_0xcc4; i++) { + mTriNum = 2; + for (int i = 0; i < mTriNum; i++) { mTris[i].Set(l_tri_src); mTris[i].SetStts(&mStts); } + Vec& cullSizeBoxMin = (Vec&)*fopAcM_getCullSizeBoxMin(this); + Vec& cullSizeBoxMax = (Vec&)*fopAcM_getCullSizeBoxMax(this); cXyz cull_bounds[4]; - cull_bounds[0].set(fopAcM_getCullSizeBoxMax(this)->x, - fopAcM_getCullSizeBoxMin(this)->y, - fopAcM_getCullSizeBoxMax(this)->z); - cull_bounds[1].set(fopAcM_getCullSizeBoxMin(this)->x, - fopAcM_getCullSizeBoxMin(this)->y, - fopAcM_getCullSizeBoxMax(this)->z); - cull_bounds[2].set(fopAcM_getCullSizeBoxMin(this)->x, - fopAcM_getCullSizeBoxMax(this)->y, - fopAcM_getCullSizeBoxMax(this)->z); - cull_bounds[3].set(fopAcM_getCullSizeBoxMax(this)->x, - fopAcM_getCullSizeBoxMax(this)->y, - fopAcM_getCullSizeBoxMax(this)->z); + cull_bounds[0].set(cullSizeBoxMax.x, cullSizeBoxMin.y, cullSizeBoxMax.z); + cull_bounds[1].set(cullSizeBoxMin.x, cullSizeBoxMin.y, cullSizeBoxMax.z); + cull_bounds[2].set(cullSizeBoxMin.x, cullSizeBoxMax.y, cullSizeBoxMax.z); + cull_bounds[3].set(cullSizeBoxMax.x, cullSizeBoxMax.y, cullSizeBoxMax.z); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(current.angle.y); for (int i = 0; i < (s32)(sizeof(cull_bounds) / sizeof(Vec)); i++) { - PSMTXMultVec(mDoMtx_stack_c::get(), &cull_bounds[i], &cull_bounds[i]); + mDoMtx_stack_c::multVec(&cull_bounds[i], &cull_bounds[i]); } mTris[0].setPos(&cull_bounds[0], &cull_bounds[1], &cull_bounds[2]); mTris[1].setPos(&cull_bounds[0], &cull_bounds[2], &cull_bounds[3]); @@ -862,43 +889,28 @@ void daBgObj_c::set_tri_2() { /* 8045AFD4-8045B17C 0019F4 01A8+00 1/0 0/0 0/0 .text set_tri_3__9daBgObj_cFv */ void daBgObj_c::set_tri_3() { - field_0xcc4 = 4; - for (int i = 0; i < field_0xcc4; i++) { + mTriNum = 4; + for (int i = 0; i < mTriNum; i++) { mTris[i].Set(l_tri_src); mTris[i].SetStts(&mStts); } + Vec& cullSizeBoxMin = (Vec&)*fopAcM_getCullSizeBoxMin(this); + Vec& cullSizeBoxMax = (Vec&)*fopAcM_getCullSizeBoxMax(this); cXyz cull_bounds[8]; - cull_bounds[0].set(fopAcM_getCullSizeBoxMax(this)->x, - fopAcM_getCullSizeBoxMin(this)->y, - fopAcM_getCullSizeBoxMin(this)->z); - cull_bounds[1].set(fopAcM_getCullSizeBoxMin(this)->x, - fopAcM_getCullSizeBoxMin(this)->y, - fopAcM_getCullSizeBoxMin(this)->z); - cull_bounds[2].set(fopAcM_getCullSizeBoxMin(this)->x, - fopAcM_getCullSizeBoxMax(this)->y, - fopAcM_getCullSizeBoxMin(this)->z); - cull_bounds[3].set(fopAcM_getCullSizeBoxMax(this)->x, - fopAcM_getCullSizeBoxMax(this)->y, - fopAcM_getCullSizeBoxMin(this)->z); - cull_bounds[4].set(fopAcM_getCullSizeBoxMax(this)->x, - fopAcM_getCullSizeBoxMin(this)->y, - fopAcM_getCullSizeBoxMax(this)->z); - cull_bounds[5].set(fopAcM_getCullSizeBoxMin(this)->x, - fopAcM_getCullSizeBoxMin(this)->y, - fopAcM_getCullSizeBoxMax(this)->z); - cull_bounds[6].set(fopAcM_getCullSizeBoxMin(this)->x, - fopAcM_getCullSizeBoxMax(this)->y, - fopAcM_getCullSizeBoxMax(this)->z); - cull_bounds[7].set(fopAcM_getCullSizeBoxMax(this)->x, - fopAcM_getCullSizeBoxMax(this)->y, - fopAcM_getCullSizeBoxMax(this)->z); + cull_bounds[0].set(cullSizeBoxMax.x, cullSizeBoxMin.y, cullSizeBoxMin.z); + cull_bounds[1].set(cullSizeBoxMin.x, cullSizeBoxMin.y, cullSizeBoxMin.z); + cull_bounds[2].set(cullSizeBoxMin.x, cullSizeBoxMax.y, cullSizeBoxMin.z); + cull_bounds[3].set(cullSizeBoxMax.x, cullSizeBoxMax.y, cullSizeBoxMin.z); + cull_bounds[4].set(cullSizeBoxMax.x, cullSizeBoxMin.y, cullSizeBoxMax.z); + cull_bounds[5].set(cullSizeBoxMin.x, cullSizeBoxMin.y, cullSizeBoxMax.z); + cull_bounds[6].set(cullSizeBoxMin.x, cullSizeBoxMax.y, cullSizeBoxMax.z); + cull_bounds[7].set(cullSizeBoxMax.x, cullSizeBoxMax.y, cullSizeBoxMax.z); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(current.angle.y); for (int i = 0; i < 8; i++) { - Vec* src = &cull_bounds[i]; - mDoMtx_stack_c::multVec(src, src); + mDoMtx_stack_c::multVec(&cull_bounds[i], &cull_bounds[i]); } mTris[0].setPos(&cull_bounds[0], &cull_bounds[1], &cull_bounds[2]); mTris[1].setPos(&cull_bounds[0], &cull_bounds[2], &cull_bounds[3]); @@ -1049,8 +1061,7 @@ BOOL daBgObj_c::checkDestroy() { return false; } -/* 8045B534-8045B5E0 001F54 00AC+00 2/2 0/0 0/0 .text checkHitAt__9daBgObj_cFP8cCcD_Obj - */ +/* 8045B534-8045B5E0 001F54 00AC+00 2/2 0/0 0/0 .text checkHitAt__9daBgObj_cFP8cCcD_Obj */ BOOL daBgObj_c::checkHitAt(cCcD_Obj* i_hitObj) { u32 hit_flags = 0; u32 var_r8 = 0; @@ -1080,7 +1091,7 @@ BOOL daBgObj_c::checkHitAt(cCcD_Obj* i_hitObj) { /* 8045B5E0-8045B7FC 002000 021C+00 1/1 0/0 0/0 .text orderWait_tri__9daBgObj_cFv */ void daBgObj_c::orderWait_tri() { - for (int i = 0; i < field_0xcc4; i++) { + for (int i = 0; i < mTriNum; i++) { if (mTris[i].ChkTgHit()) { if (checkHitAt(mTris[i].GetTgHitObj())) { setSe(); @@ -1092,10 +1103,10 @@ void daBgObj_c::orderWait_tri() { mDoMtx_stack_c::YrotS(-shape_angle.y); mDoMtx_stack_c::multVec(&sp1C, &sp1C); + cXyz sp28; mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(shape_angle.y); - cXyz sp28; if (sp1C.z > 0.0f) { sp28 = cXyz(0.0, 0.0, 1.0); } else { @@ -1117,7 +1128,7 @@ void daBgObj_c::orderWait_tri() { } } - for (int i = 0; i < field_0xcc4; i++) { + for (int i = 0; i < mTriNum; i++) { dComIfG_Ccsp()->Set(&mTris[i]); } } @@ -1208,6 +1219,10 @@ int daBgObj_c::actionOrderWait() { case 2: orderWait_cyl(); break; + + default: + JUT_ASSERT(2022, FALSE); + break; } } else if (fopAcM_isSwitch(this, daBgObj_prm::getSwBit(this))) { orderWait_spec(); @@ -1248,6 +1263,10 @@ int daBgObj_c::actionOrder() { fopAcM_onSwitch(this, daBgObj_prm::getSwBit(this)); field_0xd00 = 0; + + if (daBgObj_prm::getSwBit(this) == 0xFF) { + OS_REPORT("\x1b[43;30m地形ユニットMoveBG:スイッチ指定無し!!!\n\x1b[m"); + } } } @@ -1304,7 +1323,7 @@ int daBgObj_c::ExecuteType0() { /* 8045BED0-8045BFBC 0028F0 00EC+00 3/0 0/0 0/0 .text ExecuteType1__9daBgObj_cFv */ int daBgObj_c::ExecuteType1() { - static actionFunc l_func[] = {&daBgObj_c::actionOrderWait, &daBgObj_c::actionOrder, + static actionFunc const l_func[] = {&daBgObj_c::actionOrderWait, &daBgObj_c::actionOrder, &daBgObj_c::actionEvent, &daBgObj_c::actionWait}; (this->*l_func[mAction])(); @@ -1321,12 +1340,12 @@ int daBgObj_c::Execute(Mtx** param_0) { (this->*mExecuteFunc[mSpecData.mSpecType])(); for (int i = 0; i < 2; i++) { - if (field_0x5b8[field_0xcc8][i] != NULL) { - field_0x5b8[field_0xcc8][i]->play(); + if (mpBtkAnms[field_0xcc8][i] != NULL) { + mpBtkAnms[field_0xcc8][i]->play(); } - if (field_0x5c8[field_0xcc8][i] != NULL) { - field_0x5c8[field_0xcc8][i]->play(); + if (mpBrkAnms[field_0xcc8][i] != NULL) { + mpBrkAnms[field_0xcc8][i]->play(); } } @@ -1339,7 +1358,7 @@ int daBgObj_c::Execute(Mtx** param_0) { int daBgObj_c::Draw() { bool bvar = true; for (int i = 0; i < 2; i++) { - if (field_0x5a8[field_0xcc8][i] != NULL) { + if (mpModelMtx[field_0xcc8][i] != NULL) { bvar = false; } } @@ -1351,26 +1370,26 @@ int daBgObj_c::Draw() { g_env_light.settingTevStruct(0x20, ¤t.pos, &tevStr); for (int i = 0; i < 2; i++) { - if (field_0x5a8[field_0xcc8][i] != NULL) { - g_env_light.setLightTevColorType_MAJI(field_0x5a8[field_0xcc8][i], &tevStr); + if (mpModelMtx[field_0xcc8][i] != NULL) { + g_env_light.setLightTevColorType_MAJI(mpModelMtx[field_0xcc8][i], &tevStr); } } for (int i = 0; i < 2; i++) { dComIfGd_setListBG(); - if (field_0x5a8[field_0xcc8][i] != NULL) { - indirectProc(field_0x5a8[field_0xcc8][i]); - dKy_bg_MAxx_proc(field_0x5a8[field_0xcc8][i]); + if (mpModelMtx[field_0xcc8][i] != NULL) { + indirectProc(mpModelMtx[field_0xcc8][i]); + dKy_bg_MAxx_proc(mpModelMtx[field_0xcc8][i]); - if (field_0x5b8[field_0xcc8][i] != NULL) { - field_0x5b8[field_0xcc8][i]->entry(field_0x5a8[field_0xcc8][i]->getModelData()); + if (mpBtkAnms[field_0xcc8][i] != NULL) { + mpBtkAnms[field_0xcc8][i]->entry(mpModelMtx[field_0xcc8][i]->getModelData()); } - if (field_0x5c8[field_0xcc8][i] != NULL) { - field_0x5c8[field_0xcc8][i]->entry(field_0x5a8[field_0xcc8][i]->getModelData()); + if (mpBrkAnms[field_0xcc8][i] != NULL) { + mpBrkAnms[field_0xcc8][i]->entry(mpModelMtx[field_0xcc8][i]->getModelData()); } - mDoExt_modelUpdateDL(field_0x5a8[field_0xcc8][i]); + mDoExt_modelUpdateDL(mpModelMtx[field_0xcc8][i]); } } @@ -1379,14 +1398,14 @@ int daBgObj_c::Draw() { return 1; } -/* 8045C25C-8045C2E8 002C7C 008C+00 1/1 0/0 0/0 .text indirectProc__9daBgObj_cFP8J3DModel - */ +/* 8045C25C-8045C2E8 002C7C 008C+00 1/1 0/0 0/0 .text indirectProc__9daBgObj_cFP8J3DModel */ void daBgObj_c::indirectProc(J3DModel* i_model) { if (i_model != NULL) { J3DModelData* modelData = i_model->getModelData(); for (u16 i = 0; i < modelData->getMaterialNum(); i++) { J3DMaterial* mat_p = modelData->getMaterialNodePointer(i); + JUTNameTab* mat_name_p = modelData->getMaterialName(); mat_p->change(); mat_p->setCullMode(0); } diff --git a/src/d/actor/d_a_dmidna.cpp b/src/d/actor/d_a_dmidna.cpp index d23ffd5e564..d95e27aa052 100644 --- a/src/d/actor/d_a_dmidna.cpp +++ b/src/d/actor/d_a_dmidna.cpp @@ -6,7 +6,6 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_dmidna.h" -#include "f_op/f_op_actor_mng.h" /* 8045D290-8045D298 000000 0007+01 3/3 0/0 0/0 .rodata l_arcName */ static const char l_arcName[] = "Dmidna"; @@ -23,12 +22,13 @@ int daDmidna_c::createHeap() { return 1; } -/* 8045CFC4-8045CFE4 000164 0020+00 1/1 0/0 0/0 .text daDmidna_createHeap__FP10fopAc_ac_c - */ +/* 8045CFC4-8045CFE4 000164 0020+00 1/1 0/0 0/0 .text daDmidna_createHeap__FP10fopAc_ac_c */ static int daDmidna_createHeap(fopAc_ac_c* i_this) { return static_cast(i_this)->createHeap(); } +daDmidna_c::daDmidna_c() {} + /* 8045CFE4-8045D094 000184 00B0+00 1/1 0/0 0/0 .text create__10daDmidna_cFv */ int daDmidna_c::create() { fopAcM_ct(this, daDmidna_c); @@ -47,8 +47,10 @@ int daDmidna_c::create() { } /* 8045D094-8045D0B4 000234 0020+00 1/0 0/0 0/0 .text daDmidna_Create__FP10fopAc_ac_c */ -static int daDmidna_Create(fopAc_ac_c* i_this) { - return static_cast(i_this)->create(); +static int daDmidna_Create(fopAc_ac_c* a_this) { + daDmidna_c* i_this = (daDmidna_c*)a_this; + fpc_ProcID id = fopAcM_GetID(a_this); + return i_this->create(); } /* 8045D0B4-8045D11C 000254 0068+00 1/1 0/0 0/0 .text __dt__10daDmidna_cFv */ @@ -58,6 +60,7 @@ daDmidna_c::~daDmidna_c() { /* 8045D11C-8045D144 0002BC 0028+00 1/0 0/0 0/0 .text daDmidna_Delete__FP10daDmidna_c */ static int daDmidna_Delete(daDmidna_c* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); i_this->~daDmidna_c(); return 1; } @@ -95,11 +98,12 @@ static int daDmidna_Draw(daDmidna_c* i_this) { return i_this->draw(); } -/* ############################################################################################## */ /* 8045D29C-8045D2BC -00001 0020+00 1/0 0/0 0/0 .data l_daDmidna_Method */ static actor_method_class l_daDmidna_Method = { - (process_method_func)daDmidna_Create, (process_method_func)daDmidna_Delete, - (process_method_func)daDmidna_Execute, (process_method_func)NULL, + (process_method_func)daDmidna_Create, + (process_method_func)daDmidna_Delete, + (process_method_func)daDmidna_Execute, + (process_method_func)NULL, (process_method_func)daDmidna_Draw, }; diff --git a/src/d/actor/d_a_door_dbdoor00.cpp b/src/d/actor/d_a_door_dbdoor00.cpp index a85b58a4bb4..32278df7164 100644 --- a/src/d/actor/d_a_door_dbdoor00.cpp +++ b/src/d/actor/d_a_door_dbdoor00.cpp @@ -5,7 +5,6 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_door_dbdoor00.h" -#include "printf.h" #include "SSystem/SComponent/c_math.h" #include "d/actor/d_a_player.h" #include "d/d_door_param2.h" @@ -13,10 +12,11 @@ /* 8045D378-8045D470 000078 00F8+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */ static int nodeCallBack(J3DJoint* i_joint, int param_1) { if (param_1 == 0) { - u16 jointNo = i_joint->getJntNo(); + J3DJoint* joint = i_joint; + int jointNo = joint->getJntNo(); J3DModel* model = j3dSys.getModel(); daDbDoor00_c* area = (daDbDoor00_c*)model->getUserArea(); - MTXCopy(model->getAnmMtx(jointNo), mDoMtx_stack_c::get()); + cMtx_copy(model->getAnmMtx(jointNo), mDoMtx_stack_c::get()); if (jointNo == area->field_0x5c0 && area->field_0x585 == 1) { mDoMtx_stack_c::YrotM(-area->field_0x58a); } else if (jointNo == area->field_0x5c1 && area->field_0x585 == 0) { @@ -64,8 +64,7 @@ char* daDbDoor00_c::getBmdName() { return l_bmdName; } -/* 8045D504-8045D574 000204 0070+00 1/1 0/0 0/0 .text getDoorModelData__12daDbDoor00_cFv - */ +/* 8045D504-8045D574 000204 0070+00 1/1 0/0 0/0 .text getDoorModelData__12daDbDoor00_cFv */ J3DModelData* daDbDoor00_c::getDoorModelData() { J3DModelData* res = (J3DModelData*)dComIfG_getStageRes(getBmdName()); if (res == NULL) { @@ -74,21 +73,56 @@ J3DModelData* daDbDoor00_c::getDoorModelData() { return res; } +#if DEBUG +bool daDbDoor00_c::debugCheckParam() { + bool rv = false; + + if (field_0x5cc == 0) { + u8 frontOption = door_param2_c::getFrontOption(this); + u8 backOption = door_param2_c::getBackOption(this); + if (frontOption != 0) { + // Double-opening push door: There are options specified on the front! <%d> + OS_REPORT_ERROR("両開き押しドア:表のオプション指定があります!<%d>\n", frontOption); + rv = 1; + } + + if (backOption != 0) { + // Double-opening push door: There is an option specified for the back! <%d> + OS_REPORT_ERROR("両開き押しドア:裏のオプション指定があります!<%d>\n", backOption); + rv = 1; + } + + u8 exitNo = door_param2_c::getExitNo(this); + if (exitNo == 63) { + // Double-opening push door: No scene switch number specified! + OS_REPORT_ERROR("両開き押しドア:シーン切り替え番号指定がありません!\n"); + rv = 1; + } + + field_0x5cc = 1; + } + + return rv; +} +#endif + /* 8045D574-8045D594 000274 0020+00 1/1 0/0 0/0 .text CheckCreateHeap__FP10fopAc_ac_c */ -static int CheckCreateHeap(fopAc_ac_c* i_this) { - return static_cast(i_this)->CreateHeap(); +static int CheckCreateHeap(fopAc_ac_c* a_this) { + daDbDoor00_c* i_this = (daDbDoor00_c*)a_this; + return i_this->CreateHeap(); } /* 8045D594-8045D744 000294 01B0+00 1/1 0/0 0/0 .text CreateHeap__12daDbDoor00_cFv */ int daDbDoor00_c::CreateHeap() { - J3DModelData* modelData = - (J3DModelData*)dComIfG_getObjectRes(getAlwaysArcName(), getDummyBmdName()); + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(getAlwaysArcName(), getDummyBmdName()); + JUT_ASSERT(160, modelData != NULL); mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); if (mpModel == NULL) { return 0; } modelData = getDoorModelData(); + JUT_ASSERT(171, modelData != NULL); mpModel2 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); if (mpModel2 == NULL) { return 0; @@ -96,11 +130,12 @@ int daDbDoor00_c::CreateHeap() { field_0x5c0 = modelData->getJointName()->getIndex("DbDoor00_L"); field_0x5c1 = modelData->getJointName()->getIndex("DbDoor00_R"); - modelData = mpModel2->getModelData(); - J3DJoint* nodePointerL = modelData->getJointNodePointer(field_0x5c0); - J3DJoint* nodePointerR = modelData->getJointNodePointer(field_0x5c1); - nodePointerL->setCallBack(nodeCallBack); - nodePointerR->setCallBack(nodeCallBack); + J3DJoint* l_joint = mpModel2->getModelData()->getJointNodePointer(field_0x5c0); + J3DJoint* r_joint = mpModel2->getModelData()->getJointNodePointer(field_0x5c1); + JUT_ASSERT(185, l_joint != NULL); + JUT_ASSERT(186, r_joint != NULL); + l_joint->setCallBack(nodeCallBack); + r_joint->setCallBack(nodeCallBack); mpModel2->setUserArea((uintptr_t)this); mpBgW = new dBgW(); @@ -108,8 +143,14 @@ int daDbDoor00_c::CreateHeap() { if (dzb == NULL) { return 0; } + calcMtx(); - return mpBgW->Set(dzb, 1, &mpModel->getBaseTRMtx()) != 1 ? 1 : 0; + bool isSet = mpBgW->Set(dzb, 1, &mpModel->getBaseTRMtx()); + if (isSet == 1) { + return 0; + } + + return 1; } /* 8045D744-8045D8F4 000444 01B0+00 4/4 0/0 0/0 .text calcMtx__12daDbDoor00_cFv */ @@ -151,7 +192,12 @@ int daDbDoor00_c::CreateInit() { fopAcM_SetRoomNo(this, fRoomNo); tevStr.room_no = current.roomNo; } - dComIfG_Bgsp().Regist(mpBgW, this); + + bool isRegist = dComIfG_Bgsp().Regist(mpBgW, this); + if (isRegist) { + JUT_ASSERT(277, FALSE); + } + field_0x584 = 1; setAction(4); field_0x594 = 0x1e; @@ -167,6 +213,12 @@ int daDbDoor00_c::CreateInit() { int daDbDoor00_c::create() { fopAcM_ct(this, daDbDoor00_c); + #if DEBUG + if (debugCheckParam()) { + return cPhs_ERROR_e; + } + #endif + int phase = dComIfG_resLoad(&mPhaseReq2, getAlwaysArcName()); if (phase != cPhs_COMPLEATE_e) { return phase; @@ -235,7 +287,7 @@ void daDbDoor00_c::demoProc() { switch (demoAction) { case 4: if (field_0x58c < 0xfa) { - field_0x58c += 0x32; + field_0x58c += (s16)0x32; } if (field_0x58a - field_0x58c < -0x1c71) { field_0x58a = -0x1c71; @@ -251,10 +303,13 @@ void daDbDoor00_c::demoProc() { doorAngle = current.angle.y + 0x7fff + field_0x58a; } player->setPlayerPosAndAngle(&field_0x59c, doorAngle, 0); + if (field_0x5c2 == 0) { - daPy_getPlayerActorClass()->onSceneChangeArea(door_param2_c::getExitNo(this), 0xff, - NULL); + player = daPy_getPlayerActorClass(); + player->onSceneChangeArea(door_param2_c::getExitNo(this), 0xff, NULL); + OS_REPORT("ドア:切替番号<%d>へ切替します!\n", door_param2_c::getExitNo(this)); // Door: Switching to toggle number <%d>! } + field_0x5c2--; case 3: case 5: @@ -262,7 +317,8 @@ void daDbDoor00_c::demoProc() { case 8: doorAngle = player->shape_angle.y; - cLib_addCalcAngleS2(&doorAngle, current.angle.y + 0x7fff, 10, 0x800); + s16 target = current.angle.y + 0x7fff; + cLib_addCalcAngleS2(&doorAngle, target, 10, 0x800); xyz = player->current.pos; xyz.x = xyz.x * 0.9f + field_0x59c.x * 0.1f; xyz.z = xyz.z * 0.9f + field_0x59c.z * 0.1f; @@ -383,7 +439,11 @@ int daDbDoor00_c::execute() { /* 8045E2DC-8045E31C 000FDC 0040+00 1/1 0/0 0/0 .text checkDraw__12daDbDoor00_cFv */ int daDbDoor00_c::checkDraw() { - return dComIfGp_roomControl_checkRoomDisp(fopAcM_GetRoomNo(this)) != 0 ? 1 : 0; + if (dComIfGp_roomControl_checkRoomDisp(fopAcM_GetRoomNo(this))) { + return 1; + } + + return 0; } /* 8045E31C-8045E428 00101C 010C+00 1/1 0/0 0/0 .text draw__12daDbDoor00_cFv */ @@ -396,7 +456,7 @@ int daDbDoor00_c::draw() { return 1; } if (field_0x584 == 0) { - dComIfG_Bgsp().Regist(mpBgW, this); + bool isRegist = dComIfG_Bgsp().Regist(mpBgW, this); field_0x584 = 1; } g_env_light.settingTevStruct(16, ¤t.pos, &tevStr); @@ -417,8 +477,7 @@ int daDbDoor00_c::Delete() { return 1; } -/* 8045E49C-8045E4BC 00119C 0020+00 1/0 0/0 0/0 .text daDbdoor00_Draw__FP12daDbDoor00_c - */ +/* 8045E49C-8045E4BC 00119C 0020+00 1/0 0/0 0/0 .text daDbdoor00_Draw__FP12daDbDoor00_c */ static int daDbdoor00_Draw(daDbDoor00_c* i_this) { return i_this->draw(); } @@ -434,23 +493,26 @@ static int daDbdoor00_IsDelete(daDbDoor00_c* i_this) { return 1; } -/* 8045E4E8-8045E50C 0011E8 0024+00 1/0 0/0 0/0 .text daDbdoor00_Delete__FP12daDbDoor00_c - */ +/* 8045E4E8-8045E50C 0011E8 0024+00 1/0 0/0 0/0 .text daDbdoor00_Delete__FP12daDbDoor00_c */ static int daDbdoor00_Delete(daDbDoor00_c* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); i_this->Delete(); return 1; } -/* 8045E50C-8045E52C 00120C 0020+00 1/0 0/0 0/0 .text daDbdoor00_Create__FP10fopAc_ac_c - */ -static int daDbdoor00_Create(fopAc_ac_c* i_this) { - return static_cast(i_this)->create(); +/* 8045E50C-8045E52C 00120C 0020+00 1/0 0/0 0/0 .text daDbdoor00_Create__FP10fopAc_ac_c */ +static int daDbdoor00_Create(fopAc_ac_c* a_this) { + daDbDoor00_c* i_this = (daDbDoor00_c*)a_this; + fpc_ProcID id = fopAcM_GetID(a_this); + return i_this->create(); } /* 8045E760-8045E780 -00001 0020+00 1/0 0/0 0/0 .data l_daDbdoor00_Method */ static actor_method_class l_daDbdoor00_Method = { - (process_method_func)daDbdoor00_Create, (process_method_func)daDbdoor00_Delete, - (process_method_func)daDbdoor00_Execute, (process_method_func)daDbdoor00_IsDelete, + (process_method_func)daDbdoor00_Create, + (process_method_func)daDbdoor00_Delete, + (process_method_func)daDbdoor00_Execute, + (process_method_func)daDbdoor00_IsDelete, (process_method_func)daDbdoor00_Draw, }; diff --git a/src/d/actor/d_a_door_knob00.cpp b/src/d/actor/d_a_door_knob00.cpp index 5c3e764fc8b..1d1bffddfb6 100644 --- a/src/d/actor/d_a_door_knob00.cpp +++ b/src/d/actor/d_a_door_knob00.cpp @@ -6,39 +6,33 @@ #include "d/actor/d_a_door_knob00.h" #include "f_op/f_op_actor_mng.h" -#include "d/d_com_inf_game.h" #include "d/d_msg_object.h" #include "d/actor/d_a_player.h" #include "d/d_meter2_info.h" -#include "SSystem/SComponent/c_math.h" -#include "printf.h" -/* 8045E858-8045E864 000078 000C+00 1/1 0/0 0/0 .text getDoorModel__12knob_param_cFP10fopAc_ac_c - */ +/* 80460894-80460898 -00001 0004+00 1/1 0/0 0/0 .data l_bmd_base_name */ +static char* l_bmd_base_name = "door-knob_"; + +/* 8045E858-8045E864 000078 000C+00 1/1 0/0 0/0 .text getDoorModel__12knob_param_cFP10fopAc_ac_c */ u32 knob_param_c::getDoorModel(fopAc_ac_c* i_this) { return fopAcM_GetParamBit(i_this, 5, 3); } -/* 8045E864-8045E870 000084 000C+00 1/1 0/0 0/0 .text - * getDoorLightInf__12knob_param_cFP10fopAc_ac_c */ +/* 8045E864-8045E870 000084 000C+00 1/1 0/0 0/0 .text getDoorLightInf__12knob_param_cFP10fopAc_ac_c */ u32 knob_param_c::getDoorLightInf(fopAc_ac_c* i_this) { return fopAcM_GetParamBit(i_this, 8, 3); } -/* 8045E870-8045E87C 000090 000C+00 2/2 0/0 0/0 .text getMsgNo__12knob_param_cFP10fopAc_ac_c */ +/* 8045E870-8045E87C 000090 000C+00 2/2 0/0 0/0 .text getMsgNo__12knob_param_cFP10fopAc_ac_c */ u16 knob_param_c::getMsgNo(fopAc_ac_c* i_this) { return i_this->home.angle.x; } -/* 8045E87C-8045E888 00009C 000C+00 2/2 0/0 0/0 .text getExitNo__12knob_param_cFP10fopAc_ac_c */ +/* 8045E87C-8045E888 00009C 000C+00 2/2 0/0 0/0 .text getExitNo__12knob_param_cFP10fopAc_ac_c */ u8 knob_param_c::getExitNo(fopAc_ac_c* i_this) { return fopAcM_GetParamBit(i_this, 25, 6); } -static char* dummyStringFunc() { - return "door-knob_"; -} - /* 8045E888-8045E898 0000A8 0010+00 4/4 0/0 0/0 .text getAlwaysArcName__10daKnob20_cFv */ char* daKnob20_c::getAlwaysArcName() { return "static"; @@ -59,9 +53,6 @@ char* daKnob20_c::getDummyBmd() { return "door-knobDummy.bmd"; } -/* 80460894-80460898 -00001 0004+00 1/1 0/0 0/0 .data l_bmd_base_name */ -static char* l_bmd_base_name = "door-knob_"; - /* 80460A98-80460AB8 000000 0020+00 1/1 0/0 0/0 .bss l_bmdName$3809 */ static char l_bmdName[32]; @@ -383,12 +374,13 @@ int daKnob20_c::demoProc() { case 3: field_0x610 = 10; break; - case 10: + case 10: { int msgNo = knob_param_c::getMsgNo(this); if (msgNo != 0xffff) { field_0x5c0.init(this, msgNo, 0, NULL); } break; + } case 0xe: field_0x612 = 0; field_0x614 = 1000; diff --git a/src/d/actor/d_a_door_shutter.cpp b/src/d/actor/d_a_door_shutter.cpp index be9481839ee..b40196afa63 100644 --- a/src/d/actor/d_a_door_shutter.cpp +++ b/src/d/actor/d_a_door_shutter.cpp @@ -10,20 +10,25 @@ #include "d/actor/d_a_midna.h" #include "d/d_door_param2.h" #include "d/actor/d_a_player.h" -#include "d/d_com_inf_game.h" #include "d/d_msg_object.h" #include "d/d_map_path_dmap.h" -#include "SSystem/SComponent/c_math.h" -#include "printf.h" +#include "d/d_s_play.h" /* 80460B38-80460B70 000078 0038+00 1/1 0/0 0/0 .text getStopBmdName__10daDoor20_cFv */ char* daDoor20_c::getStopBmdName() { - switch (door_param2_c::getKind(this)) { - case 3: - case 11: + int kind = door_param2_c::getKind(this); + switch (kind) { default: - return "door-stop.bmd"; + case 0: + case 1: + case 2: + case 9: + case 10: + case 12: + break; } + + return "door-stop.bmd"; } /* 80460B70-80460B94 0000B0 0024+00 1/1 0/0 0/0 .text getStopModelData__10daDoor20_cFv */ @@ -38,7 +43,8 @@ char* daDoor20_c::getAlwaysArcName() { /* 80460BA4-80460C40 0000E4 009C+00 9/8 0/0 0/0 .text getArcName__10daDoor20_cFv */ char* daDoor20_c::getArcName() { - switch (door_param2_c::getKind(this)) { + int kind = door_param2_c::getKind(this); + switch (kind) { default: return "DoorT00"; case 1: @@ -54,12 +60,11 @@ char* daDoor20_c::getArcName() { } } -/* 80467340-80467360 000000 0020+00 1/1 0/0 0/0 .bss bmdName$3984 */ -static char bmdName[32]; - /* 80460C40-80460CF0 000180 00B0+00 1/1 0/0 0/0 .text getBmdName__10daDoor20_cFv */ char* daDoor20_c::getBmdName() { - switch(door_param2_c::getKind(this)) { + static char bmdName[32]; + int kind = door_param2_c::getKind(this); + switch(kind) { case 0: case 1: case 2: @@ -82,7 +87,8 @@ char* daDoor20_c::getBtk() { /* 80460D00-80460D5C 000240 005C+00 1/0 0/0 0/0 .text getDzbName__10daDoor20_cFv */ char* daDoor20_c::getDzbName() { - switch(door_param2_c::getKind(this)) { + int kind = door_param2_c::getKind(this); + switch(kind) { case 0: case 1: case 2: @@ -106,10 +112,89 @@ f32 daDoor20_c::getSize2X() { } /* 80460D8C-80460DAC 0002CC 0020+00 1/1 0/0 0/0 .text CheckCreateHeap__FP10fopAc_ac_c */ -static int CheckCreateHeap(fopAc_ac_c* i_this) { - return static_cast(i_this)->CreateHeap(); +static int CheckCreateHeap(fopAc_ac_c* a_this) { + daDoor20_c* i_this = (daDoor20_c*)a_this; + return i_this->CreateHeap(); } +#if DEBUG +bool daDoor20_c::debugCheckParam() { + // NONMATCHING + bool rv = false; + + if (!field_0x574) { + if (door_param2_c::getFRoomNo(this) == 63) { + OS_REPORT_ERROR("シャッター:表の部屋番号指定がありません!\n"); // Shutter: No front room number specified! + rv = true; + } + + if (door_param2_c::getBRoomNo(this) == 63) { + OS_REPORT_ERROR("シャッター:裏の部屋番号指定がありません!\n"); // Shutter: No back room number specified! + rv = true; + } + + u8 frontOption = door_param2_c::getFrontOption(this); + u8 backOption = door_param2_c::getBackOption(this); + u8 swBit = door_param2_c::getSwbit(this); + u8 swBit2 = door_param2_c::getSwbit2(this); + + if (swBit == 0xFF) { + if (frontOption == 1) { + OS_REPORT_ERROR("シャッター:表のスイッチ指定がありません!(鉄格子)\n"); // Shutter: No switch specified on the front! (Iron bars) + rv = true; + } + + if (frontOption == 2) { + OS_REPORT_ERROR("シャッター:表のスイッチ指定がありません!(鍵)\n"); // Shutter: No switch specified on the front! (Key) + rv = true; + } + + if (frontOption == 3) { + OS_REPORT_ERROR("シャッター:表のスイッチ指定がありません!(全滅鉄格子)\n"); // Shutter: No switch specified on the exterior! (Total metal grille) + rv = true; + } + } else if (swBit >= 0x80 && frontOption == 2) { + OS_REPORT_ERROR("シャッター:鍵のスイッチが完全セーブではありません!\n"); // Shutter: The key switch is not fully saved! + rv = true; + } + + if (swBit2 == 0xFF) { + if (backOption == 1) { + OS_REPORT_ERROR("シャッター:裏のスイッチ指定がありません!(鉄格子)\n"); // Shutter: No switch specified on the back! (Iron bars) + rv = true; + } + + if (backOption == 2) { + OS_REPORT_ERROR("シャッター:裏のスイッチ指定がありません!(鍵)\n"); // Shutter: No back switch specified! (Key) + rv = true; + } + + if (backOption == 3) { + OS_REPORT_ERROR("シャッター:裏のスイッチ指定がありません!(全滅鉄格子)\n"); // Shutter: No switch specified at the back! (Total destruction iron bars) + rv = true; + } + } else if (swBit2 >= 0x80 && backOption == 2) { + OS_REPORT_ERROR("シャッター:裏のスイッチ指定がありません!(全滅鉄格子)\n"); // Shutter: No switch specified at the back! (Total destruction iron grille) + rv = true; + } + + if (backOption == 4 || backOption == 5) { + OS_REPORT_ERROR("シャッター:螺旋階段はを配置してください\n"); // Shutter: Please place on the spiral staircase + rv = true; + } + + if (door_param2_c::getSwbit3(this) != 0xFF && (door_param2_c::getKind(this) == 2 || strcmp(dComIfGp_getStartStageName(), "D_MN06") == 0)) { + OS_REPORT_ERROR("シャッター:エフェクトSWbit未対応のドアです\n"); // Shutter: This door does not support the effect SW bit. + rv = true; + } + + field_0x574 = 1; + } + + return rv; +} +#endif + /* 80460DAC-80461254 0002EC 04A8+00 2/1 0/0 0/0 .text CreateHeap__10daDoor20_cFv */ int daDoor20_c::CreateHeap() { int kind = door_param2_c::getKind(this); @@ -119,31 +204,35 @@ int daDoor20_c::CreateHeap() { if (kind == 2) { dListFlag |= 0x200; } + mModel1 = mDoExt_J3DModel__create(modelData, 0x80000, dListFlag); if (mModel1 == NULL) { return 0; } + J3DAnmTransform* anm; if (kind == 9) { - - if (!field_0x584.init((J3DAnmTransform*)dComIfG_getObjectRes(getAlwaysArcName(), "FDoorA.bck"), 1, 0, 1.0f, 0, -1, false)) { + anm = (J3DAnmTransform*)dComIfG_getObjectRes(getAlwaysArcName(), "FDoorA.bck"); + JUT_ASSERT(375, anm != NULL); + if (!field_0x584.init(anm, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false)) { return 0; } + field_0x584.entry(mModel1->getModelData()); mModel1->calc(); mModel2 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); if (mModel2 == NULL) { return 0; } + J3DAnmTransform* anm = (J3DAnmTransform*)dComIfG_getObjectRes(getAlwaysArcName(), "FDoorA.bck"); JUT_ASSERT(394, anm != NULL); - if (!field_0x5a0.init(anm, 1, 0, 1.0f, 0, -1, false)) { + if (!field_0x5a0.init(anm, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false)) { return 0; } field_0x5a0.entry(mModel1->getModelData()); mModel2->calc(); } else { - switch (kind) { case 0: case 3: @@ -154,32 +243,40 @@ int daDoor20_c::CreateHeap() { default: anm = (J3DAnmTransform*)dComIfG_getObjectRes(getArcName(), "oj_DoorOpD.bck"); break; + case 1: anm = (J3DAnmTransform*)dComIfG_getObjectRes(getArcName(), "oj_DoorOpC.bck"); break; - case 2: + + case 2: { J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getStageRes(getBtk()); JUT_ASSERT(421, pbtk != NULL); - field_0x5c0 = new mDoExt_btkAnm(); - if (field_0x5c0 == NULL || !field_0x5c0->init(mModel1->getModelData(), pbtk, 1, 0, 1.0f, 0, -1)) { + mBtkAnm = new mDoExt_btkAnm(); + if (mBtkAnm == NULL || !mBtkAnm->init(mModel1->getModelData(), pbtk, 1, 0, 1.0f, 0, -1)) { return 0; } anm = (J3DAnmTransform*)dComIfG_getObjectRes(getArcName(), "oj_DoorOpD.bck"); break; + } + case 10: anm = (J3DAnmTransform*)dComIfG_getObjectRes(getArcName(), "oj_DoorOpF.bck"); break; } + JUT_ASSERT(375, anm != NULL); - if (field_0x584.init(anm, 1, 0, 1.0f, 0, -1, false) == 0) { + if (field_0x584.init(anm, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false) == 0) { return 0; } + field_0x584.entry(mModel1->getModelData()); mModel1->calc(); } + if (chkMakeStop() && !mDoorStop.create(this)) { return 0; } + calcMtx(); mDoorStop.calcMtx(this); mDoMtx_stack_c::transS(home.pos); @@ -187,11 +284,13 @@ int daDoor20_c::CreateHeap() { if (kind == 9) { mDoMtx_stack_c::scaleM(1.0f, 1.4f, 1.0f); } + MTXCopy(mDoMtx_stack_c::get(), field_0x5f4); - field_0x5c4 = new dBgW(); - if (field_0x5c4 == 0 || field_0x5c4->Set((cBgD_t*)dComIfG_getObjectRes(getAlwaysArcName(), getDzbName()), 1, &field_0x5f4)) { + mpBgW = new dBgW(); + if (mpBgW == 0 || mpBgW->Set((cBgD_t*)dComIfG_getObjectRes(getAlwaysArcName(), getDzbName()), 1, &field_0x5f4)) { return 0; } + return 1; } @@ -201,17 +300,14 @@ void daDoor20_c::setEventPrm() { setStop(); int FRoomNo = door_param2_c::getFRoomNo(this); int BRoomNo = door_param2_c::getBRoomNo(this); - u32 roomNo; - if (FRoomNo == dComIfGp_roomControl_getStayNo()) { - roomNo = BRoomNo; - } else { - roomNo = FRoomNo; - } + u32 roomNo = FRoomNo == dComIfGp_roomControl_getStayNo() ? BRoomNo : FRoomNo; + if (dComIfGp_roomControl_checkStatusFlag(roomNo, 1)) { if (door_param2_c::getKind(this) == 9) { if (daPy_py_c::checkNowWolf()) { return; } + int iStack_48; if (checkOpenMsgDoor(&iStack_48) == 0) { field_0x6cb = 18; @@ -225,6 +321,7 @@ void daDoor20_c::setEventPrm() { } else { field_0x6cb = 12; } + if (mDoorStop.field_0xa == 0xff) { mDoorStop.field_0xa = chkStopB(); } @@ -234,6 +331,7 @@ void daDoor20_c::setEventPrm() { } else { field_0x6cb = 13; } + if (mDoorStop.field_0xa == 0xff) { mDoorStop.field_0xa = chkStopF(); } @@ -245,6 +343,7 @@ void daDoor20_c::setEventPrm() { return; } } + if (field_0x68c == 0) { field_0x6cb = 4; if (mDoorStop.field_0xa == 0xff) { @@ -257,10 +356,12 @@ void daDoor20_c::setEventPrm() { } } } + if (mDoorStop.field_0x8 == 0) { if (mDoorStop.field_0xa == 1) { - field_0x6cb += 2; + field_0x6cb += (u8)2; } + if (chkMakeKey()) { if (field_0x5f0) { if (daPy_py_c::checkNowWolf()) { @@ -295,10 +396,12 @@ void daDoor20_c::setEventPrm() { } else { swBit = door_param2_c::getSwbit2(this); } + if (swBit != 0xff && !dComIfGs_isSwitch(swBit, 0xffffffff)) { return; } } + if (checkArea(getSize2X(), 12100.0f, 62500.0f)) { eventInfo.setEventId(field_0x692[field_0x6cb]); eventInfo.setMapToolId(field_0x6b8[field_0x6cb]); @@ -308,19 +411,20 @@ void daDoor20_c::setEventPrm() { } } -/* 804616EC-8046178C 000C2C 00A0+00 1/1 0/0 0/0 .text checkOpenMsgDoor__10daDoor20_cFPi - */ +/* 804616EC-8046178C 000C2C 00A0+00 1/1 0/0 0/0 .text checkOpenMsgDoor__10daDoor20_cFPi */ int daDoor20_c::checkOpenMsgDoor(int* param_1) { if (!door_param2_c::isMsgDoor(this)) { return 1; } + int msgNo = door_param2_c::getMsgNo(this); if (msgNo == 0xffff) { *param_1 = 0; return 1; } - field_0x624.init(NULL, msgNo, NULL, NULL); - int rv = field_0x624.checkOpenDoor(this, param_1); + + mMsgFlow.init(NULL, msgNo, NULL, NULL); + int rv = mMsgFlow.checkOpenDoor(this, param_1); dMsgObject_endFlowGroup(); return rv; } @@ -331,8 +435,8 @@ int daDoor20_c::adjustmentAngle() { cXyz playerPos; playerPos = player->current.pos; s16 angle = player->shape_angle.y; - cLib_addCalcAngleS2(&angle, shape_angle.y + 0x7fff, 5, - 3000); + cLib_addCalcAngleS2(&angle, shape_angle.y + 0x7fff, 5, 3000); + if (field_0x6dc > 0) { player->setPlayerPosAndAngle(&playerPos, angle, 0); field_0x6dc--; @@ -351,17 +455,19 @@ int daDoor20_c::adjustmentProc() { local_38 = player->current.pos; s16 angle = shape_angle.y + 0x7fff; local_38 = player->current.pos; - local_2c.z = 0.0f; - local_2c.y = 0.0f; + local_2c.y = local_2c.z = 0.0f; + if (field_0x6cb == 12 || field_0x6cb == 14 || field_0x6cb == 16) { local_2c.x = 75.0f; } else { local_2c.x = -75.0f; } + s16 sVar3 = home.angle.y; if (field_0x68c == 0) { - sVar3 += 0x7fff; + sVar3 += (s16)0x7fff; } + mDoMtx_stack_c::YrotS(sVar3); mDoMtx_stack_c::multVec(&local_2c, &local_2c); local_2c += current.pos; @@ -376,35 +482,35 @@ int daDoor20_c::adjustmentProc() { player->setPlayerPosAndAngle(&local_2c, player->current.angle.y, 0); return 1; } + return 0; } /* 80461A44-80461A60 000F84 001C+00 1/1 0/0 0/0 .text setAngle__10daDoor20_cFv */ void daDoor20_c::setAngle() { daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); - player->changeDemoMoveAngle(shape_angle.y + 0x7fff); + s16 angle = shape_angle.y + 0x7fff; + player->changeDemoMoveAngle(angle); } -/* 8046684C-80466858 00002C 000A+02 0/1 0/0 0/0 .rodata l_eff_id_lv3$4376 */ -static u16 const l_eff_id_lv3[5] = { - 0x8762, - 0x8763, - 0x8764, - 0x8765, - 0x8766, -}; - -/* 80466858-80466864 000038 000A+02 0/1 0/0 0/0 .rodata l_eff_id_lv4$4377 */ -static u16 const l_eff_id_lv4[5] = { - 0x8AEB, - 0x8AEC, - 0x8AED, - 0x8AEE, - 0x8AEF, -}; - /* 80461A60-80461D24 000FA0 02C4+00 1/1 0/0 0/0 .text openInit_0__10daDoor20_cFv */ void daDoor20_c::openInit_0() { + static u16 const l_eff_id_lv3[5] = { + dPa_RM(ID_ZF_S_LV3SLIDEDOOROPEN00SMK), + dPa_RM(ID_ZF_S_LV3SLIDEDOOROPEN01SMK), + dPa_RM(ID_ZF_S_LV3SLIDEDOOROPEN02SMK), + dPa_RM(ID_ZF_S_LV3SLIDEDOOROPEN03ROCK), + dPa_RM(ID_ZF_S_LV3SLIDEDOOROPEN04DUST), + }; + + static u16 const l_eff_id_lv4[5] = { + dPa_RM(ID_ZF_S_LV4SLIDEDOOROPEN00SMK), + dPa_RM(ID_ZF_S_LV4SLIDEDOOROPEN01SMK), + dPa_RM(ID_ZF_S_LV4SLIDEDOOROPEN02SMK), + dPa_RM(ID_ZF_S_LV4SLIDEDOOROPEN03ROCK), + dPa_RM(ID_ZF_S_LV4SLIDEDOOROPEN04DUST), + }; + J3DAnmTransform* anm; if (daPy_py_c::checkNowWolf()) { if (door_param2_c::getKind(this) == 10) { @@ -412,20 +518,22 @@ void daDoor20_c::openInit_0() { } else { anm = (J3DAnmTransform*)dComIfG_getObjectRes(getArcName(), "md_oj_DoorOpD.bck"); } + } else if (door_param2_c::getKind(this) == 10) { + anm = (J3DAnmTransform*)dComIfG_getObjectRes(getArcName(), "oj_DoorOpF.bck"); } else { - if (door_param2_c::getKind(this) == 10) { - anm = (J3DAnmTransform*)dComIfG_getObjectRes(getArcName(), "oj_DoorOpF.bck"); - } else { - anm = (J3DAnmTransform*)dComIfG_getObjectRes(getArcName(), "oj_DoorOpD.bck"); - } + anm = (J3DAnmTransform*)dComIfG_getObjectRes(getArcName(), "oj_DoorOpD.bck"); } + JUT_ASSERT(832, anm != NULL); - int rt = field_0x584.init(anm, 1, 0, 1.0f, 0, -1, true); - JUT_ASSERT(835, rt == 0); + + if (!field_0x584.init(anm, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, true)) { + JUT_ASSERT(835, FALSE); + } + daPy_py_c* player = daPy_getPlayerActorClass(); field_0x584.setPlaySpeed(player->getBaseAnimeFrameRate()); - u8 bVar5 = door_param2_c::getSwbit3(this); - if (bVar5 != 0xff && !fopAcM_isSwitch(this, bVar5)) { + u8 swBit = door_param2_c::getSwbit3(this); + if (swBit != 0xFF && !fopAcM_isSwitch(this, swBit)) { csXyz acStack_2c(0, field_0x670, 0); for (u32 i = 0; i < 5; i++) { if (strcmp(dComIfGp_getStartStageName(), "D_MN10") == 0) { @@ -436,8 +544,10 @@ void daDoor20_c::openInit_0() { fopAcM_GetRoomNo(this), NULL, NULL, NULL); } } - fopAcM_onSwitch(this, bVar5); + + fopAcM_onSwitch(this, swBit); field_0x672 = true; + OS_REPORT("横開きドア:エフェクトSWONしました<%d>\n", swBit); // Side-opening door: Effect SWON<%d>\n } else { field_0x672 = false; } @@ -451,18 +561,24 @@ void daDoor20_c::openInit_1() { } else { anm = (J3DAnmTransform*)dComIfG_getObjectRes(getArcName(), "oj_DoorOpC.bck"); } + JUT_ASSERT(915, anm != NULL); - int rt = field_0x584.init(anm, 1, 0, 1.0f, 0, -1, true); - JUT_ASSERT(918, rt == 0); - u8 bVar5 = door_param2_c::getSwbit3(this); - if (bVar5 != 0xff && !fopAcM_isSwitch(this, bVar5)) { - static u16 const l_eff_id[2] = {0x8295, 0x8296}; + + if (!field_0x584.init(anm, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, true)) { + JUT_ASSERT(918, FALSE); + } + + u8 swBit = door_param2_c::getSwbit3(this); + if (swBit != 0xFF && !fopAcM_isSwitch(this, swBit)) { + static u16 const l_eff_id[2] = {dPa_RM(ID_ZM_S_MDDOOROPENDUST00), dPa_RM(ID_ZM_S_MDDOOROPENDUST01)}; for (int i = 0; i < 2; i++) { dComIfGp_particle_set(l_eff_id[i], ¤t.pos, &shape_angle, NULL, 0xff, NULL, fopAcM_GetRoomNo(this), NULL, NULL, NULL); } - fopAcM_onSwitch(this, bVar5); + + fopAcM_onSwitch(this, swBit); field_0x672 = true; + OS_REPORT("横開きドア:エフェクトSWONしました<%d>\n", swBit); } else { field_0x672 = false; } @@ -473,7 +589,7 @@ int daDoor20_c::openInit(int param_1) { openInitCom(1); dMapInfo_c::setNextRoomNoForMapPat0(field_0x67f); onFlag(1); - dComIfG_Bgsp().Release(field_0x5c4); + dComIfG_Bgsp().Release(mpBgW); switch (door_param2_c::getKind(this)) { case 0: case 3: @@ -496,28 +612,31 @@ int daDoor20_c::openProc(int param_1) { u32 sfx; f32 frame = field_0x584.getFrame(); int rv = field_0x584.play(); + switch (door_param2_c::getKind(this)) { case 1: if (field_0x584.getFrame() == 17.0f) { - dComIfGp_getVibration().StartShock(4, 15, cXyz(0.0f, 1.0f, 0.0f)); - } else { - if (field_0x584.getFrame() == 18.0f) { - if (daPy_py_c::checkNowWolf()) { - u32 mdnfx; - if (field_0x672) { - mdnfx = Z2SE_OBJ_WOOD_DR_OP_MDN_FX; - } else { - mdnfx = Z2SE_OBJ_WOOD_DR_OP_MDN; - } - sfx = mdnfx; + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER4, 15, cXyz(0.0f, 1.0f, 0.0f)); + } else if (field_0x584.getFrame() == 18.0f) { + if (daPy_py_c::checkNowWolf()) { + #if DEBUG + sfx = field_0x672 ? Z2SE_OBJ_WOOD_DR_OP_MDN_FX : Z2SE_OBJ_WOOD_DR_OP_MDN; + #else + u32 mdnfx; + if (field_0x672) { + mdnfx = Z2SE_OBJ_WOOD_DR_OP_MDN_FX; } else { - sfx = - field_0x672 ? Z2SE_OBJ_WOOD_DOOR_ROLLOPEN : Z2SE_OBJ_WOOD_DOOR_ROLLOPEN2; + mdnfx = Z2SE_OBJ_WOOD_DR_OP_MDN; } - mDoAud_seStart(sfx, &field_0x5e0, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + sfx = mdnfx; + #endif + } else { + sfx = field_0x672 ? Z2SE_OBJ_WOOD_DOOR_ROLLOPEN : Z2SE_OBJ_WOOD_DOOR_ROLLOPEN2; } + mDoAud_seStart(sfx, &field_0x5e0, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); } break; + case 0: case 3: case 4: @@ -525,41 +644,36 @@ int daDoor20_c::openProc(int param_1) { case 11: case 12: default: - if ((door_param2_c::getKind(this) == 0 || door_param2_c::getKind(this) == 10) && - field_0x584.getFrame() == 17.0f) - { - dComIfGp_getVibration().StartShock(4, 15, cXyz(0.0f, 1.0f, 0.0f)); + if ((door_param2_c::getKind(this) == 0 || door_param2_c::getKind(this) == 10) && field_0x584.getFrame() == 17.0f) { + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER4, 15, cXyz(0.0f, 1.0f, 0.0f)); } + if (daPy_py_c::checkNowWolf()) { if (field_0x584.getFrame() == 20.0f) { if (door_param2_c::getKind(this) == 2) { sfx = Z2SE_OBJ_L8_SHTR_OP; + } else if (door_param2_c::getKind(this) == 10) { + sfx = Z2SE_OBJ_LV9_SHTR_OP; } else { - if (door_param2_c::getKind(this) == 10) { - sfx = Z2SE_OBJ_LV9_SHTR_OP; - } else { - sfx = field_0x672 ? Z2SE_OBJ_LV3_SHTR_OP_FX : Z2SE_OBJ_LV3_SHTR_OP_MDN; - } + sfx = field_0x672 ? Z2SE_OBJ_LV3_SHTR_OP_FX : Z2SE_OBJ_LV3_SHTR_OP_MDN; } + fopAcM_seStart(this, sfx, 0); } - } else { - if (field_0x584.getFrame() == 20.0f || (frame < 20.0f && field_0x584.getFrame() >= 20.0f)) - { - if (door_param2_c::getKind(this) == 2) { - sfx = Z2SE_OBJ_L8_SHTR_OP; - } else { - if (door_param2_c::getKind(this) == 10) { - sfx = Z2SE_OBJ_LV9_SHTR_OP; - } else { - sfx = field_0x672 ? Z2SE_OBJ_LV3_SHTR_OP_FX : Z2SE_OBJ_LV3_SHTR_OP; - } - } - fopAcM_seStart(this, sfx, 0); + } else if (field_0x584.getFrame() == 20.0f || (frame < 20.0f && field_0x584.getFrame() >= 20.0f)) { + if (door_param2_c::getKind(this) == 2) { + sfx = Z2SE_OBJ_L8_SHTR_OP; + } else if (door_param2_c::getKind(this) == 10) { + sfx = Z2SE_OBJ_LV9_SHTR_OP; + } else { + sfx = field_0x672 ? Z2SE_OBJ_LV3_SHTR_OP_FX : Z2SE_OBJ_LV3_SHTR_OP; } + + fopAcM_seStart(this, sfx, 0); } break; } + return rv; } @@ -585,10 +699,12 @@ int daDoor20_c::openEnd(int param_1) { default: openEnd_0(); break; + case 1: openEnd_1(); break; } + return 1; } @@ -600,47 +716,50 @@ void daDoor20_c::closeInit_0() { } else { anm = (J3DAnmTransform*)dComIfG_getObjectRes(getArcName(), "oj_DoorCloseD.bck"); } + JUT_ASSERT(1178, anm != NULL); - int rt = field_0x584.init(anm, 1, 0, 1.0f, 0, -1, true); - JUT_ASSERT(1181, rt == 0); + + if (!field_0x584.init(anm, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, true)) { + JUT_ASSERT(1181, FALSE); + } + cXyz acStack_40(home.pos.x, home.pos.y + 200.0f, home.pos.z); bool waterCheck = fopAcM_wt_c::waterCheck(&acStack_40); - fopAcM_gc_c::gndCheck(&acStack_40); + bool gndChk = fopAcM_gc_c::gndCheck(&acStack_40); if (waterCheck != 0 && fopAcM_wt_c::getWaterY() > fopAcM_gc_c::getGroundY()) { fopAcM_seStart(this, Z2SE_OBJ_LV3_SHTR_CL_WTR, 0); + } else if (door_param2_c::getKind(this) == 2) { + fopAcM_seStart(this, Z2SE_OBJ_L8_SHTR_CL, 0); + } else if (door_param2_c::getKind(this) == 10) { + fopAcM_seStart(this, Z2SE_OBJ_LV9_SHTR_CL, 0); } else { - if (door_param2_c::getKind(this) == 2) { - fopAcM_seStart(this, Z2SE_OBJ_L8_SHTR_CL, 0); - } else { - if (door_param2_c::getKind(this) == 10) { - fopAcM_seStart(this, Z2SE_OBJ_LV9_SHTR_CL, 0); - } else { - fopAcM_seStart(this, Z2SE_OBJ_LV3_SHTR_CL, 0); - } - } + fopAcM_seStart(this, Z2SE_OBJ_LV3_SHTR_CL, 0); } + if (door_param2_c::getKind(this) != 10) { - dComIfGp_particle_setPolyColor(0x8c50, field_0x6de.m_gnd, ¤t.pos, &tevStr, + dComIfGp_particle_setPolyColor(dPa_RM(ID_ZI_S_SHUTTERSMOKE_B), mBgc.m_gnd, ¤t.pos, &tevStr, &shape_angle, NULL, 0, NULL, dComIfGp_roomControl_getStayNo(), 0); } } /* 8046266C-80462738 001BAC 00CC+00 1/1 0/0 0/0 .text closeInit_1__10daDoor20_cFv */ void daDoor20_c::closeInit_1() { - J3DAnmTransform* anm = - (J3DAnmTransform*)dComIfG_getObjectRes(getArcName(), "oj_DoorCloseC.bck"); + J3DAnmTransform* anm = (J3DAnmTransform*)dComIfG_getObjectRes(getArcName(), "oj_DoorCloseC.bck"); JUT_ASSERT(1236, anm != NULL); - int rt = field_0x584.init(anm, 1, 0, 1.0f, 0, -1, true); - JUT_ASSERT(1239, rt == 0); - mDoAud_seStart(Z2SE_OBJ_WOOD_DOOR_ROLLCLOSE, ¤t.pos, 0, - dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + + if (!field_0x584.init(anm, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, true)) { + JUT_ASSERT(1239, FALSE); + } + + mDoAud_seStart(Z2SE_OBJ_WOOD_DOOR_ROLLCLOSE, ¤t.pos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); } /* 80462738-804627C4 001C78 008C+00 1/1 0/0 0/0 .text closeInit__10daDoor20_cFi */ int daDoor20_c::closeInit(int param_1) { onFlag(2); - int rt = dComIfG_Bgsp().Regist(field_0x5c4, this); + bool rt = dComIfG_Bgsp().Regist(mpBgW, this); JUT_ASSERT(1264, !rt); + switch(door_param2_c::getKind(this)) { case 0: case 2: @@ -648,16 +767,19 @@ int daDoor20_c::closeInit(int param_1) { default: closeInit_0(); break; + case 1: closeInit_1(); break; } + return 1; } /* 804627C4-804627E8 001D04 0024+00 1/1 0/0 0/0 .text closeProc__10daDoor20_cFi */ int daDoor20_c::closeProc(int param_0) { - return field_0x584.play(); + int rv = field_0x584.play(); + return rv; } /* 804627E8-804627EC 001D28 0004+00 1/1 0/0 0/0 .text closeEnd_0__10daDoor20_cFv */ @@ -673,7 +795,8 @@ void daDoor20_c::closeEnd_1() { int daDoor20_c::closeEnd(int param_0) { offFlag(2); closeEndCom(); - dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f)); + dComIfGp_getVibration().StartShock(VIBMODE_S_POWER4, 31, cXyz(0.0f, 1.0f, 0.0f)); + switch (door_param2_c::getKind(this)) { case 0: case 3: @@ -684,10 +807,12 @@ int daDoor20_c::closeEnd(int param_0) { default: closeEnd_0(); break; + case 1: closeEnd_1(); break; } + deleteKey(); setDoorAngleSpec(); return 1; @@ -703,12 +828,13 @@ void daDoor20_c::openInit2() { openInitCom(1); dMapInfo_c::setNextRoomNoForMapPat0(field_0x67f); onFlag(1); - dComIfG_Bgsp().Release(field_0x5c4); + dComIfG_Bgsp().Release(mpBgW); if (field_0x5f1 == 0) { field_0x5bc = mModel2; } else { field_0x5bc = mModel1; } + mDoMtx_stack_c::copy(field_0x5bc->getAnmMtx(0)); mDoMtx_stack_c::multVecZero(&field_0x5e0); field_0x5e0.y += 100.0f; @@ -744,12 +870,14 @@ void daDoor20_c::calcMtx() { case 9: calcMtx_2(); break; + case 1: mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(field_0x670); mModel1->setBaseTRMtx(mDoMtx_stack_c::get()); mDoMtx_stack_c::multVecZero(&field_0x5e0); break; + case 0: case 3: case 4: @@ -765,15 +893,16 @@ void daDoor20_c::calcMtx() { /* 80462C2C-80462EB4 00216C 0288+00 2/1 0/0 0/0 .text CreateInit__10daDoor20_cFv */ int daDoor20_c::CreateInit() { - shape_angle.z = 0; - shape_angle.x = 0; - current.angle.z = 0; - current.angle.x = 0; - field_0x8b8.SetWall(30.0f, 30.0f); - field_0x6de.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, - &field_0x8b8, fopAcM_GetSpeed_p(this), NULL, NULL); - int rt = dComIfG_Bgsp().Regist(field_0x5c4, this); - JUT_ASSERT(1512, !rt); + shape_angle.x = shape_angle.z = 0; + current.angle.x = current.angle.z = 0; + mAcchCir.SetWall(30.0f, 30.0f); + mBgc.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), NULL, NULL); + + bool rt = dComIfG_Bgsp().Regist(mpBgW, this); + if (rt) { + JUT_ASSERT(1512, FALSE); + } + tevStr.room_no = current.roomNo; setAction(ACTION_INIT); attention_info.position.y += 150.0f; @@ -785,6 +914,7 @@ int daDoor20_c::CreateInit() { } else { fopAcM_setCullSizeBox(this, -200.0f, 0, -50.0f, 200.0f, 500.0f, 50.0f); } + fopAcM_setCullSizeFar(this, 10.0f); setKey(); field_0x5ec = -1; @@ -793,32 +923,40 @@ int daDoor20_c::CreateInit() { } else { field_0x673 = 0; } + if (door_param2_c::getFRoomNo(this) == dComIfGp_getStartStageRoomNo() || door_param2_c::getBRoomNo(this) == dComIfGp_getStartStageRoomNo()) { createKey(); } + calcMtx(); - field_0x5c4->Move(); - field_0x5c4->SetRoomId(door_param2_c::getFRoomNo(this)); + mpBgW->Move(); + mpBgW->SetRoomId(door_param2_c::getFRoomNo(this)); switch (door_param2_c::getKind(this)) { case 1: field_0x691 = 3; break; + default: field_0x691 = 1; break; + case 2: field_0x691 = 2; break; + case 9: field_0x691 = 4; break; + case 12: field_0x691 = 5; break; + case 10: field_0x691 = 6; break; } + eventInfo.setArchiveName(getArcName()); initProc(); field_0x68d = 65; @@ -838,24 +976,36 @@ void daDoor20_c::setKey() { /* 80462F2C-80462FE0 00246C 00B4+00 1/1 0/0 0/0 .text create__10daDoor20_cFv */ int daDoor20_c::create() { - int rv = dComIfG_resLoad(&mPhase1, getAlwaysArcName()); - if (rv != cPhs_COMPLEATE_e) { - return rv; + #if DEBUG + if (debugCheckParam()) { + return cPhs_ERROR_e; + } + #endif + + int phase = dComIfG_resLoad(&mPhase1, getAlwaysArcName()); + if (phase != cPhs_COMPLEATE_e) { + return phase; } + if (getArcName() != NULL) { - rv = dComIfG_resLoad(&mPhase2, getArcName()); - if (rv != cPhs_COMPLEATE_e) { - return rv; + phase = dComIfG_resLoad(&mPhase2, getArcName()); + if (phase != cPhs_COMPLEATE_e) { + return phase; } } + fopAcM_SetRoomNo(this, door_param2_c::getFRoomNo(this)); - if (fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x80003800) == 0) { - rv = cPhs_ERROR_e; + + u32 i_size = 0x80000000; + i_size |= 0x3800; + if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, i_size)) { + phase = cPhs_ERROR_e; } else { CreateInit(); - rv = cPhs_COMPLEATE_e; + phase = cPhs_COMPLEATE_e; } - return rv; + + return phase; } /* 80462FE0-80463E30 002520 0E50+00 5/3 0/0 0/0 .text demoProc__10daDoor20_cFv */ @@ -864,7 +1014,7 @@ int daDoor20_c::demoProc() { int demoAction = getDemoAction(); if (dComIfGp_evmng_getIsAddvance(field_0x6cc)) { switch (demoAction) { - case 0: + case 0: { int* pTimer = dComIfGp_evmng_getMyIntegerP( field_0x6cc, "Timer"); if (pTimer == NULL) { @@ -873,36 +1023,40 @@ int daDoor20_c::demoProc() { field_0x5dd = *pTimer; } break; + } + case 3: openInit(0); break; + case 4: closeInit(0); break; + case 7: setGoal(); break; - case 8: + + case 8: { if (field_0x673 == 1) { - daObjLv5Key_c* lv5Key = - (daObjLv5Key_c*)fopAcM_SearchByID(field_0x5ec); + daObjLv5Key_c* lv5Key = (daObjLv5Key_c*)fopAcM_SearchByID(field_0x5ec); if (lv5Key != NULL) { lv5Key->keylock_open_start(); + OS_REPORT("ノブドア:鍵オープンスタート!\n"); // Knob door: Open the lock and start!\n } } else { - obj_keyhole_class* keyhole = (obj_keyhole_class*)fopAcM_SearchByID( - field_0x5ec); + obj_keyhole_class* keyhole = (obj_keyhole_class*)fopAcM_SearchByID(field_0x5ec); if (keyhole != NULL) { keyhole->setOpen(); } } + int swBit = door_param2_c::getSwbit(this); - if (swBit != 0xff && - !dComIfGs_isSwitch(swBit, 0xffffffff) && + if (swBit != 0xFF && !dComIfGs_isSwitch(swBit, 0xffffffff) && (door_param2_c::getFrontOption(this) == 2 || door_param2_c::getBackOption(this) == 2)) { - dComIfGs_onSwitch(swBit, 0xffffffff); - dComIfGp_setItemKeyNumCount(0xffffffff); + dComIfGs_onSwitch(swBit, -1); + dComIfGp_setItemKeyNumCount(-1); if (field_0x673 == 1) { fopAcM_seStart(this, Z2SE_OBJ_DOOR_LOCK_OPEN, 0); } else { @@ -910,79 +1064,92 @@ int daDoor20_c::demoProc() { } } break; + } + case 2: setStop(); if (mDoorStop.field_0x8 != 0) { mDoorStop.closeInit(this); } break; + case 1: mDoorStop.openInit(this); break; + case 11: field_0x6dc = 5; break; + case 24: field_0x6dc = 5; setAngle(); break; + case 13: - J3DAnmTransform* anm = (J3DAnmTransform*)dComIfG_getObjectRes( - getAlwaysArcName(), "FDoorB.bck"); + J3DAnmTransform* anm = (J3DAnmTransform*)dComIfG_getObjectRes(getAlwaysArcName(), "FDoorB.bck"); JUT_ASSERT(1796, anm != NULL); - if (!field_0x584.init(anm, 1, 0, 1.0f, 0, -1, true) || !field_0x5a0.init(anm, - 1, 0, 1.0f, 0, -1, true)) + if (!field_0x584.init(anm, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, true) || + !field_0x5a0.init(anm, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, true)) { JUT_ASSERT(1799, FALSE); } + field_0x67c = 0; openInit2(); break; + case 12: - anm = - (J3DAnmTransform*)dComIfG_getObjectRes(getAlwaysArcName(), "FDoorA.bck"); + anm = (J3DAnmTransform*)dComIfG_getObjectRes(getAlwaysArcName(), "FDoorA.bck"); JUT_ASSERT(1809, anm != NULL); - if (!field_0x584.init(anm, 1, 0, 1.0f, 0, -1, true) || !field_0x5a0.init(anm, - 1, 0, 1.0f, 0, -1, true)) + if (!field_0x584.init(anm, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, true) || + !field_0x5a0.init(anm, 1, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, true)) { JUT_ASSERT(1812, FALSE); } field_0x67c = 0; openInit2(); break; + case 26: if (door_param2_c::isMsgDoor(this)) { int msgNo = door_param2_c::getMsgNo(this); if (msgNo != 0xffff) { - field_0x624.init(this, msgNo, 0, NULL); + mMsgFlow.init(this, msgNo, 0, NULL); } } break; + case 25: if (field_0x673 == 1) { daObjLv5Key_c* lv5Key = (daObjLv5Key_c*)fopAcM_SearchByID(field_0x5ec); if (lv5Key != NULL) { lv5Key->keylock_shake_start(); mDoAud_seStart(Z2SE_OBJ_KNOB_DOOR_LOCKED, &field_0x5e0, 0, 0); + OS_REPORT("ノブドア:鍵揺れ!\n"); // Knob door: key shaking!\n } } break; + case 27: fopAcM_seStart(this, Z2SE_OBJ_L8_SHTR_CREST_ON, 0); - field_0x5c0->setPlaySpeed(1.0f); + mBtkAnm->setPlaySpeed(1.0f); break; + case 28: fopAcM_seStart(this, Z2SE_OBJ_L8_SHTR_CREST_OFF, 0); - field_0x5c0->setPlaySpeed(-1.0f); + mBtkAnm->setPlaySpeed(-1.0f); break; } } + switch (demoAction) { case 0: if (cLib_calcTimer(&field_0x5dd) == 0) { dComIfGp_evmng_cutEnd(field_0x6cc); } break; + case 3: if (checkFlag(1)) { if (openProc(0)) { @@ -993,6 +1160,7 @@ int daDoor20_c::demoProc() { dComIfGp_evmng_cutEnd(field_0x6cc); } break; + case 4: if (checkFlag(2)) { if (closeProc(0)) { @@ -1003,12 +1171,14 @@ int daDoor20_c::demoProc() { dComIfGp_evmng_cutEnd(field_0x6cc); } break; + case 8: if (field_0x673 == 1) { daObjLv5Key_c* lv5Key = (daObjLv5Key_c*)fopAcM_SearchByID(field_0x5ec); if ((lv5Key != NULL && lv5Key->is_open()) || !field_0x5f0) { field_0x5f0 = false; dComIfGp_evmng_cutEnd(field_0x6cc); + OS_REPORT("ノブドア:鍵オープン終了!\n"); // Knob door: Lock open completed!\n } } else if (field_0x673 == 0) { obj_keyhole_class* keyhole = (obj_keyhole_class*)fopAcM_SearchByID(field_0x5ec); @@ -1018,35 +1188,39 @@ int daDoor20_c::demoProc() { } } break; + case 2: if (mDoorStop.closeProc(this)) { dComIfGp_evmng_cutEnd(field_0x6cc); } mDoorStop.calcMtx(this); break; + case 1: if (mDoorStop.openProc(this)) { dComIfGp_evmng_cutEnd(field_0x6cc); } mDoorStop.calcMtx(this); break; + case 19: - field_0x5c4->Move(); + mpBgW->Move(); field_0x5c8 = dComIfGp_roomControl_getStayNo(); dComIfGp_evmng_cutEnd(field_0x6cc); break; + case 11: if (adjustmentAngle()) { dComIfGp_evmng_cutEnd(field_0x6cc); } break; + case 24: if (adjustmentProc()) { dComIfGp_evmng_cutEnd(field_0x6cc); } break; - case 12: int local_48; f32 dVar19; @@ -1057,6 +1231,7 @@ int daDoor20_c::demoProc() { local_48 = field_0x5a0.play(); dVar19 = field_0x5a0.getFrame(); } + if (dVar19 == 24.0f) { if (strcmp(dComIfGp_getStartStageName(), "D_MN01") == 0) { mDoAud_seStart(Z2SE_OBJ_LV3_KNOB_DR_OP, &field_0x5e0, 0, 0); @@ -1076,6 +1251,7 @@ int daDoor20_c::demoProc() { mDoAud_seStart(Z2SE_OBJ_LV3_KNOB_DR_CL, &field_0x5e0, 0, 0); } } + field_0x678 = dComIfGp_evmng_getMyStaffId("CAMERA", 0, 0); if (field_0x67c != 0 || dComIfGp_evmng_getIsAddvance(field_0x678)) @@ -1085,15 +1261,17 @@ int daDoor20_c::demoProc() { } else { field_0x674 = field_0x67e; } + if (local_48 != 0) { closeEnd2(); - if (!field_0x5c4->ChkUsed()) { - dComIfG_Bgsp().Regist(field_0x5c4, this); + if (!mpBgW->ChkUsed()) { + dComIfG_Bgsp().Regist(mpBgW, this); } shape_angle.y = current.angle.y; dComIfGp_evmng_cutEnd(field_0x6cc); } break; + case 13: if (field_0x5f1 == 0) { local_48 = field_0x5a0.play(); @@ -1102,27 +1280,26 @@ int daDoor20_c::demoProc() { local_48 = field_0x584.play(); dVar19 = field_0x584.getFrame(); } + if (dVar19 == 19.0f) { if (strcmp(dComIfGp_getStartStageName(), "D_MN01") == 0) { mDoAud_seStart(Z2SE_OBJ_LV3_KNOB_DR_OP, &field_0x5e0, 0, 0); - } else { - if (strcmp(dComIfGp_getStartStageName(), "D_MN11") == 0 || - strcmp(dComIfGp_getStartStageName(), "D_MN11B") == 0 || - strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) - { - mDoAud_seStart(Z2SE_OBJ_KNOB_DOOR_LV5_OP, &field_0x5e0, 0, 0); - } + } else if (strcmp(dComIfGp_getStartStageName(), "D_MN11") == 0 || + strcmp(dComIfGp_getStartStageName(), "D_MN11B") == 0 || + strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) + { + mDoAud_seStart(Z2SE_OBJ_KNOB_DOOR_LV5_OP, &field_0x5e0, 0, 0); } } else if (dVar19 == 76.0f) { if (strcmp(dComIfGp_getStartStageName(), "D_MN11") == 0 || strcmp(dComIfGp_getStartStageName(), "D_MN11B") == 0 || strcmp(dComIfGp_getStartStageName(), "D_MN09") == 0) { mDoAud_seStart(Z2SE_OBJ_KNOB_DOOR_LV5_CL, 0, 0, 0); - } else if (strcmp(dComIfGp_getStartStageName(), "D_MN01") == 0) { mDoAud_seStart(Z2SE_OBJ_LV3_KNOB_DR_CL, &field_0x5e0, 0, 0); } } + field_0x678 = dComIfGp_evmng_getMyStaffId("CAMERA", 0, 0); if (field_0x67c != 0 || dComIfGp_evmng_getIsAddvance(field_0x678)) { field_0x674 = field_0x67f; @@ -1130,41 +1307,49 @@ int daDoor20_c::demoProc() { } else { field_0x674 = field_0x67e; } + if (local_48 != 0) { closeEnd2(); - if (!field_0x5c4->ChkUsed()) { - dComIfG_Bgsp().Regist(field_0x5c4, this); + if (!mpBgW->ChkUsed()) { + dComIfG_Bgsp().Regist(mpBgW, this); } shape_angle.y = current.angle.y; dComIfGp_evmng_cutEnd(field_0x6cc); } break; + case 16: break; + case 25: dComIfGp_evmng_cutEnd(field_0x6cc); break; + case 26: int msgNo = door_param2_c::getMsgNo(this); if (door_param2_c::isMsgDoor(this) && msgNo != 0xffff) { dComIfGp_event_offHindFlag(1); - if (field_0x624.doFlow(this, NULL, 0)) { + if (mMsgFlow.doFlow(this, NULL, 0)) { + OS_REPORT("会話終了!\n"); // End of conversation!\n dComIfGp_evmng_cutEnd(field_0x6cc); } } else { dComIfGp_evmng_cutEnd(field_0x6cc); } break; + case 27: case 28: - if (field_0x5c0->play()) { + if (mBtkAnm->play()) { dComIfGp_evmng_cutEnd(field_0x6cc); } break; + default: dComIfGp_evmng_cutEnd(field_0x6cc); break; } + return 0; } @@ -1188,8 +1373,8 @@ int daDoor20_c::orderStopEvent() { field_0x692[field_0x6cb] = dComIfGp_getEventManager().getEventIdx(this, field_0x6b8[field_0x6cb]); } - fopAcM_orderOtherEventId(this, field_0x692[field_0x6cb], field_0x6b8[field_0x6cb], 0xffff, 0, - 1); + + fopAcM_orderOtherEventId(this, field_0x692[field_0x6cb], field_0x6b8[field_0x6cb], 0xffff, 0, 1); return 1; } @@ -1205,12 +1390,14 @@ int daDoor20_c::actionWait() { field_0x6cc = dComIfGp_evmng_getMyStaffId("SHUTTER_DOOR", 0, 0); shape_angle.y = current.angle.y; if (field_0x68c == 1) { - shape_angle.y += 0x7fff; + shape_angle.y += (s16)0x7fff; } + setAction(ACTION_DEMO); demoProc(); return 1; } + if (chkStopOpen()) { setStopDemo(); if (orderStopEvent()) { @@ -1218,6 +1405,7 @@ int daDoor20_c::actionWait() { } } } + if (mDoorStop.field_0x8 == 0 && chkStopClose()) { mDoorStop.field_0x8 = 1; mDoorStop.closeInit(this); @@ -1229,6 +1417,7 @@ int daDoor20_c::actionWait() { setEventPrm(); } } + return 1; } @@ -1237,6 +1426,7 @@ int daDoor20_c::actionStopClose() { if (mDoorStop.closeProc(this)) { setAction(ACTION_WAIT); } + mDoorStop.calcMtx(this); return 1; } @@ -1250,6 +1440,7 @@ int daDoor20_c::actionDemo() { } else { demoProc(); } + return 1; } @@ -1266,31 +1457,42 @@ int daDoor20_c::actionInit() { /* 80464240-804643B0 003780 0170+00 1/1 0/0 0/0 .text execute__10daDoor20_cFv */ int daDoor20_c::execute() { field_0x678 = -1; - switch(checkExecute()) { + int chkExecute = checkExecute(); + switch(chkExecute) { case 0: setAction(ACTION_INIT); break; + case 2: switch(mAction) { case ACTION_INIT: actionInit(); break; + case ACTION_WAIT: actionWait(); break; + case ACTION_STOP_CLOSE: actionStopClose(); break; + case ACTION_DEMO: actionDemo(); break; } break; + case 1: startDemoProc(); demoProc(); break; + + default: + JUT_ASSERT(2354, FALSE); + break; } + field_0x67d = dComIfGp_roomControl_getStayNo(); u32 lightInf; if (dComIfGp_roomControl_getStayNo() == door_param2_c::getFRoomNo(this)) { @@ -1298,40 +1500,49 @@ int daDoor20_c::execute() { } else { lightInf = door_param2_c::getBLightInf(this); } + tevStr.mLightInf.r = lightInf; if (strcmp(dComIfGp_getStartStageName(), "D_MN05") != 0 && strcmp(dComIfGp_getStartStageName(), "D_MN04") != 0) { - field_0x6de.CrrPos(dComIfG_Bgsp()); + mBgc.CrrPos(dComIfG_Bgsp()); } + return 1; } /* 804643B0-80464638 0038F0 0288+00 1/1 0/0 0/0 .text draw__10daDoor20_cFv */ int daDoor20_c::draw() { - if (!drawCheck(0)) { + BOOL chkDraw = drawCheck(0); + if (!chkDraw) { if (field_0x5c9 == false) { field_0x5c9 = true; - dComIfG_Bgsp().Release(field_0x5c4); + dComIfG_Bgsp().Release(mpBgW); } + deleteKey(); return 1; } + if (field_0x5c9) { field_0x5c9 = false; if (dComIfGp_event_getDoorPartner() != this) { - int rt = dComIfG_Bgsp().Regist(field_0x5c4, this); + int rt = dComIfG_Bgsp().Regist(mpBgW, this); JUT_ASSERT(2407, !rt); } + createKey(); setDoorAngleSpec(); } + if (fopAcM_cullingCheck(this)) { return 1; } + calcMtx(); if (!eventInfo.checkCommandDoor() && field_0x5c8 != dComIfGp_roomControl_getStayNo()) { - field_0x5c4->Move(); + mpBgW->Move(); field_0x5c8 = dComIfGp_roomControl_getStayNo(); } + g_env_light.settingTevStruct(20, ¤t.pos, &tevStr); g_env_light.setLightTevColorType_MAJI(mModel1, &tevStr); dComIfGd_setListBG(); @@ -1343,18 +1554,27 @@ int daDoor20_c::draw() { mDoExt_modelUpdateDL(mModel2); mDoExt_bckAnmRemove(mModel2->getModelData()); } else { - if (field_0x5c0 != 0) { - field_0x5c0->entry(mModel1->getModelData()); + if (mBtkAnm != 0) { + mBtkAnm->entry(mModel1->getModelData()); } + field_0x584.entry(mModel1->getModelData()); mDoExt_modelUpdateDL(mModel1); mDoExt_bckAnmRemove(mModel1->getModelData()); mDoExt_btkAnmRemove(mModel1->getModelData()); } + dComIfGd_setList(); if (mDoorStop.field_0x8 != 0) { mDoorStop.draw(this); } + + #if DEBUG + if (KREG_S(5) == 1000) { + mpBgW->CalcPlane(); + } + #endif + return 1; } @@ -1362,25 +1582,26 @@ int daDoor20_c::draw() { void daDoor20_c::setDoorAngleSpec() { daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); cXyz cStack_1c; + switch(door_param2_c::getKind(this)) { case 1: if (strcmp(dComIfGp_getStartStageName(), "F_SP115") == 0) { cStack_1c = player->current.pos - current.pos; mDoMtx_stack_c::YrotS(-home.angle.y); mDoMtx_stack_c::multVec(&cStack_1c, &cStack_1c); + if (cStack_1c.z > 0.0f) { field_0x670 = current.angle.y + 0x7fff; } else { field_0x670 = current.angle.y; } + } else if (door_param2_c::getFRoomNo(this) == dComIfGp_roomControl_getStayNo()) { + field_0x670 = current.angle.y + 0x7fff; } else { - if (door_param2_c::getFRoomNo(this) == dComIfGp_roomControl_getStayNo()) { - field_0x670 = current.angle.y + 0x7fff; - } else { - field_0x670 = current.angle.y; - } + field_0x670 = current.angle.y; } break; + case 0: case 2: case 12: @@ -1396,15 +1617,17 @@ void daDoor20_c::setDoorAngleSpec() { /* 804647BC-80464858 003CFC 009C+00 1/1 0/0 0/0 .text _delete__10daDoor20_cFv */ int daDoor20_c::_delete() { if (heap != NULL && - field_0x5c4->ChkUsed()) + mpBgW->ChkUsed()) { - dComIfG_Bgsp().Release(field_0x5c4); + dComIfG_Bgsp().Release(mpBgW); } + deleteKey(); dComIfG_resDelete(&mPhase1, getAlwaysArcName()); if (getArcName() != NULL) { dComIfG_resDelete(&mPhase2, getArcName()); } + return 1; } @@ -1416,21 +1639,24 @@ int daDoor20_c::createKey() { csXyz cStack_30(0, 0, 0); cXyz cStack_28; int roomNo; + switch (field_0x673) { case 1: if (door_param2_c::getFrontOption(this) == 2) { - cStack_28.set(0.0f, 107.0f, 17.0f); + cStack_28.set(0.0f, 107.0f, KREG_F(3) + 17.0f); cStack_30.y = 0; roomNo = door_param2_c::getFRoomNo(this); } else if (door_param2_c::getBackOption(this) == 2) { - cStack_28.set(0.0f, 107.0f, -17.0f); + cStack_28.set(0.0f, 107.0f, -17.0f - KREG_F(3)); cStack_30.y = 0x7fff; roomNo = door_param2_c::getBRoomNo(this); } + field_0x5ec = fopAcM_createChildFromOffset(PROC_Obj_Lv5Key, fopAcM_GetID(this), 0xffffffff, &cStack_28, roomNo, &cStack_30, &scale, 0xffffffff, 0); break; + default: OSReport_Error("シャッタードア:鍵タイプが不明です\n"); // Shutter door: key type unknown // fallthrough @@ -1439,13 +1665,12 @@ int daDoor20_c::createKey() { cStack_28.set(0.0f, 0.0f, 35.0f); cStack_30.y = 0; roomNo = door_param2_c::getFRoomNo(this); - } else { - if (door_param2_c::getBackOption(this) == 2) { - cStack_28.set(0.0f, 0.0f, -35.0f); - cStack_30.y = 0x7fff; - roomNo = door_param2_c::getBRoomNo(this); - } + } else if (door_param2_c::getBackOption(this) == 2) { + cStack_28.set(0.0f, 0.0f, -35.0f); + cStack_30.y = 0x7fff; + roomNo = door_param2_c::getBRoomNo(this); } + field_0x5ec = fopAcM_createChildFromOffset(PROC_OBJ_KEYHOLE, fopAcM_GetID(this), 0xffffffff, &cStack_28, roomNo, &cStack_30, &scale, 0xffffffff, 0); @@ -1453,9 +1678,11 @@ int daDoor20_c::createKey() { current.pos = prevPos; if (field_0x5ec == -1) { + OS_REPORT_ERROR("シャッタードア:鍵生成できませんでした。\n"); // Shutter Door: Key generation failed. return 0; } } + return 1; } @@ -1465,6 +1692,7 @@ int daDoor20_c::deleteKey() { fopAcM_delete(field_0x5ec); field_0x5ec = -1; } + return 1; } @@ -1475,6 +1703,7 @@ int daDoor20_c::adjoinPlayer() { if (fRoomNo == 63 || bRoomNo == 63) { return 1; } + if (dComIfGp_roomControl_checkRoomDisp(fRoomNo) || dComIfGp_roomControl_checkRoomDisp(bRoomNo)) { return 1; @@ -1484,7 +1713,7 @@ int daDoor20_c::adjoinPlayer() { } /* 80464BD8-80464C68 004118 0090+00 1/1 0/0 0/0 .text frontCheckOld__10daDoor20_cFv */ -int daDoor20_c::frontCheckOld() { +u8 daDoor20_c::frontCheckOld() { fopAc_ac_c* player = dComIfGp_getPlayer(0); cSGlobe acStack_30(player->current.pos - current.pos); cSAngle acStack_34; @@ -1498,7 +1727,7 @@ int daDoor20_c::frontCheckOld() { } /* 80464C68-80464CEC 0041A8 0084+00 1/1 0/0 0/0 .text frontCheck__10daDoor20_cFv */ -int daDoor20_c::frontCheck() { +u8 daDoor20_c::frontCheck() { int stayno = dComIfGp_roomControl_getStayNo(); int fRoomNo = door_param2_c::getFRoomNo(this); int bRoomNo = door_param2_c::getBRoomNo(this); @@ -1519,23 +1748,24 @@ int daDoor20_c::drawCheck(int param_1) { { return 0; } + int fRoomNo = door_param2_c::getFRoomNo(this); int bRoomNo = door_param2_c::getBRoomNo(this); - door_param2_c::getFrontOption(this); - door_param2_c::getBackOption(this); + u8 frontOption = door_param2_c::getFrontOption(this); + u8 backOption = door_param2_c::getBackOption(this); int stayNo = dComIfGp_roomControl_getStayNo(); if (fRoomNo == stayNo || bRoomNo == stayNo) { tevStr.room_no = stayNo; - } else { - if (dComIfGp_roomControl_checkRoomDisp(fRoomNo)) { - tevStr.room_no = fRoomNo; - } else if (dComIfGp_roomControl_checkRoomDisp(bRoomNo)) { - tevStr.room_no = bRoomNo; - } + } else if (dComIfGp_roomControl_checkRoomDisp(fRoomNo)) { + tevStr.room_no = fRoomNo; + } else if (dComIfGp_roomControl_checkRoomDisp(bRoomNo)) { + tevStr.room_no = bRoomNo; } + if (field_0x678 != -1) { tevStr.room_no = field_0x674; } + fopAcM_SetRoomNo(this, tevStr.room_no); if (!dComIfGp_roomControl_checkRoomDisp(tevStr.room_no)) { return 1; @@ -1550,12 +1780,15 @@ int daDoor20_c::checkExecute() { if (fopAcM_CheckStatus(this, 0x1000)) { return 1; } + if (eventInfo.checkCommandDemoAccrpt() || eventInfo.checkCommandDoor()) { return 2; } + if (field_0x67d != dComIfGp_roomControl_getStayNo()) { return 0; } + if (field_0x68c != 2 && adjoinPlayer()) { return 2; } else { @@ -1576,130 +1809,119 @@ void daDoor20_c::startDemoProc() { // !@bug should probably be -0x1000 if (angleDiff < 0x1000 && angleDiff > -1000) { - shape_angle.y += 0x7fff; - } -} - -static char* table[19] = { - "DEFAULT_STOP_OPEN", - "DEFAULT_STOP_OPEN", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, -}; - -/* 80467170-80467180 -00001 0010+00 0/1 0/0 0/0 .data tate_table$5815 */ -static char* tate_table[4] = { - "DEFAULT_SHUTTER_DOOR_10", - "DEFAULT_SHUTTER_DOOR_10", - "DEFAULT_SHUTTER_DOOR_F_STOP", - "DEFAULT_SHUTTER_DOOR_F_STOP", -}; - -/* 80467180-80467190 -00001 0010+00 0/1 0/0 0/0 .data tate_w_table$5816 */ -static char* tate_w_table[4] = { - "WOLF_SHUTTER_DOOR_10", - "WOLF_SHUTTER_DOOR_10", - "WOLF_SHUTTER_DOOR_F_STOP", - "WOLF_SHUTTER_DOOR_F_STOP", -}; - -/* 80467190-804671A0 -00001 0010+00 0/1 0/0 0/0 .data yoko_table$5817 */ -static char* yoko_table[4] = { - "DEFAULT_SHUTTER_DOOR_14", - "DEFAULT_SHUTTER_DOOR_14", - "DEFAULT_SHUTTER_DOOR_F_STOP_14", - "DEFAULT_SHUTTER_DOOR_F_STOP_14", -}; - -/* 804671A0-804671B0 -00001 0010+00 0/1 0/0 0/0 .data yoko_w_table$5818 */ -static char* yoko_w_table[4] = { - "WOLF_SHUTTER_DOOR_14", - "WOLF_SHUTTER_DOOR_14", - "WOLF_SHUTTER_DOOR_F_STOP_14", - "WOLF_SHUTTER_DOOR_F_STOP_14", -}; - -/* 804671B0-804671C0 -00001 0010+00 0/1 0/0 0/0 .data lv8_table$5819 */ -static char* lv8_table[4] = { - "DEFAULT_SHUTTER_DOOR_18", - "DEFAULT_SHUTTER_DOOR_18", - "DEFAULT_SHUTTER_DOOR_F_STOP_18", - "DEFAULT_SHUTTER_DOOR_F_STOP_18", -}; - -/* 804671C0-804671D0 -00001 0010+00 0/1 0/0 0/0 .data lv8_w_table$5820 */ -static char* lv8_w_table[4] = { - "WOLF_SHUTTER_DOOR_18", - "WOLF_SHUTTER_DOOR_18", - "WOLF_SHUTTER_DOOR_F_STOP_18", - "WOLF_SHUTTER_DOOR_F_STOP_18", -}; - -/* 804671D0-804671EC -00001 001C+00 0/1 0/0 0/0 .data knob_table$5821 */ -static char* knob_table[7] = { - "DEFAULT_KNOB_DOOR_F", - "DEFAULT_KNOB_DOOR_B", - "DEFAULT_KNOB_DOOR_F_STOP", - "DEFAULT_KNOB_DOOR_B_STOP", - "DEFAULT_KNOB_DOOR_NOTOPEN_F", - "DEFAULT_KNOB_DOOR_NOTOPEN_B", - "DEFAULT_KNOB_DOOR_TALK_NOTOPEN_F", -}; - -/* 804671EC-804671FC -00001 0010+00 0/1 0/0 0/0 .data lv7_table$5822 */ -static char* lv7_table[4] = { - "DEFAULT_SHUTTER_DOOR_20", - "DEFAULT_SHUTTER_DOOR_20", - "DEFAULT_SHUTTER_DOOR_F_STOP_20", - "DEFAULT_SHUTTER_DOOR_F_STOP_20", -}; - -/* 804671FC-8046720C -00001 0010+00 0/1 0/0 0/0 .data lv7_w_table$5823 */ -static char* lv7_w_table[4] = { - "WOLF_SHUTTER_DOOR_20", - "WOLF_SHUTTER_DOOR_20", - "WOLF_SHUTTER_DOOR_F_STOP_20", - "WOLF_SHUTTER_DOOR_F_STOP_20", -}; - -/* 8046720C-8046721C -00001 0010+00 0/1 0/0 0/0 .data lv9_table$5824 */ -static char* lv9_table[4] = { - "DEFAULT_SHUTTER_DOOR_22", - "DEFAULT_SHUTTER_DOOR_22", - "DEFAULT_SHUTTER_DOOR_F_STOP_22", - "DEFAULT_SHUTTER_DOOR_F_STOP_22", -}; - -/* 8046721C-8046722C -00001 0010+00 0/1 0/0 0/0 .data lv9_w_table$5825 */ -static char* lv9_w_table[4] = { - "WOLF_SHUTTER_DOOR_22", - "WOLF_SHUTTER_DOOR_22", - "WOLF_SHUTTER_DOOR_F_STOP_22", - "WOLF_SHUTTER_DOOR_F_STOP_22", -}; - + shape_angle.y += (s16)0x7fff; + } +} /* 80464F64-804653B0 0044A4 044C+00 2/2 0/0 0/0 .text makeEventId__10daDoor20_cFv */ void daDoor20_c::makeEventId() { + static char* table[19] = { + "DEFAULT_STOP_OPEN", + "DEFAULT_STOP_OPEN", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + }; + + static char* tate_table[4] = { + "DEFAULT_SHUTTER_DOOR_10", + "DEFAULT_SHUTTER_DOOR_10", + "DEFAULT_SHUTTER_DOOR_F_STOP", + "DEFAULT_SHUTTER_DOOR_F_STOP", + }; + + static char* tate_w_table[4] = { + "WOLF_SHUTTER_DOOR_10", + "WOLF_SHUTTER_DOOR_10", + "WOLF_SHUTTER_DOOR_F_STOP", + "WOLF_SHUTTER_DOOR_F_STOP", + }; + + static char* yoko_table[4] = { + "DEFAULT_SHUTTER_DOOR_14", + "DEFAULT_SHUTTER_DOOR_14", + "DEFAULT_SHUTTER_DOOR_F_STOP_14", + "DEFAULT_SHUTTER_DOOR_F_STOP_14", + }; + + static char* yoko_w_table[4] = { + "WOLF_SHUTTER_DOOR_14", + "WOLF_SHUTTER_DOOR_14", + "WOLF_SHUTTER_DOOR_F_STOP_14", + "WOLF_SHUTTER_DOOR_F_STOP_14", + }; + + static char* lv8_table[4] = { + "DEFAULT_SHUTTER_DOOR_18", + "DEFAULT_SHUTTER_DOOR_18", + "DEFAULT_SHUTTER_DOOR_F_STOP_18", + "DEFAULT_SHUTTER_DOOR_F_STOP_18", + }; + + static char* lv8_w_table[4] = { + "WOLF_SHUTTER_DOOR_18", + "WOLF_SHUTTER_DOOR_18", + "WOLF_SHUTTER_DOOR_F_STOP_18", + "WOLF_SHUTTER_DOOR_F_STOP_18", + }; + + static char* knob_table[7] = { + "DEFAULT_KNOB_DOOR_F", + "DEFAULT_KNOB_DOOR_B", + "DEFAULT_KNOB_DOOR_F_STOP", + "DEFAULT_KNOB_DOOR_B_STOP", + "DEFAULT_KNOB_DOOR_NOTOPEN_F", + "DEFAULT_KNOB_DOOR_NOTOPEN_B", + "DEFAULT_KNOB_DOOR_TALK_NOTOPEN_F", + }; + + static char* lv7_table[4] = { + "DEFAULT_SHUTTER_DOOR_20", + "DEFAULT_SHUTTER_DOOR_20", + "DEFAULT_SHUTTER_DOOR_F_STOP_20", + "DEFAULT_SHUTTER_DOOR_F_STOP_20", + }; + + static char* lv7_w_table[4] = { + "WOLF_SHUTTER_DOOR_20", + "WOLF_SHUTTER_DOOR_20", + "WOLF_SHUTTER_DOOR_F_STOP_20", + "WOLF_SHUTTER_DOOR_F_STOP_20", + }; + + static char* lv9_table[4] = { + "DEFAULT_SHUTTER_DOOR_22", + "DEFAULT_SHUTTER_DOOR_22", + "DEFAULT_SHUTTER_DOOR_F_STOP_22", + "DEFAULT_SHUTTER_DOOR_F_STOP_22", + }; + + static char* lv9_w_table[4] = { + "WOLF_SHUTTER_DOOR_22", + "WOLF_SHUTTER_DOOR_22", + "WOLF_SHUTTER_DOOR_F_STOP_22", + "WOLF_SHUTTER_DOOR_F_STOP_22", + }; + for (int i = 0; i < 19; i++) { - field_0x692[i] = dComIfGp_getEventManager().getEventIdx(this, table[i], 0xff); - field_0x6b8[i] = 0xff; + field_0x692[i] = (s16)dComIfGp_getEventManager().getEventIdx(this, table[i], 0xFF); + field_0x6b8[i] = 0xFF; } + daPy_py_c* player = dComIfGp_getLinkPlayer(); int i; switch (field_0x691) { @@ -1718,6 +1940,7 @@ void daDoor20_c::makeEventId() { } } break; + case 3: if (player != NULL && player->checkNowWolf()) { int j = 0; @@ -1733,6 +1956,7 @@ void daDoor20_c::makeEventId() { } } break; + case 2: if (player != NULL && player->checkNowWolf()) { int j = 0; @@ -1748,13 +1972,16 @@ void daDoor20_c::makeEventId() { } } break; - case 4: + + case 4: { int j = 0; for (i = 12; i < 19; i++, j++) { field_0x692[i] = dComIfGp_getEventManager().getEventIdx(this, knob_table[j], field_0x6b8[i]); } break; + } + case 5: if (player != NULL && player->checkNowWolf()) { int j = 0; @@ -1770,6 +1997,7 @@ void daDoor20_c::makeEventId() { } } break; + case 6: if (player != NULL && player->checkNowWolf()) { int j = 0; @@ -1784,7 +2012,6 @@ void daDoor20_c::makeEventId() { dComIfGp_getEventManager().getEventIdx(this, lv9_table[j], field_0x6b8[i]); } } - break; } } @@ -1798,8 +2025,9 @@ void daDoor20_c::initProc() { void daDoor20_c::initOpenDemo(int param_1) { shape_angle.y = current.angle.y; if (field_0x68c == 1) { - shape_angle.y += 0x7fff; + shape_angle.y += (s16)0x7fff; } + field_0x6cc = dComIfGp_evmng_getMyStaffId("SHUTTER_DOOR", 0, 0); if (param_1 != 0) { dComIfGp_event_onEventFlag(2); @@ -1817,20 +2045,25 @@ int daDoor20_c::checkArea(f32 param_1, f32 param_2, f32 param_3) { if (dVar10 > param_3) { return 0; } + acStack_68.normalize(); f32 dVar11 = acStack_68.inprodXZ(field_0x680); dVar11 = (dVar11 * (dVar10 * dVar11)); if (dVar11 > param_2) { return 0; } + if (dVar10 - dVar11 > param_1) { return 0; } + s16 sVar8 = current.angle.y; if (field_0x68c == 1) { - sVar8 += 0x7fff; + sVar8 += (s16)0x7fff; } - if (abs((s16)(sVar8 - player->current.angle.y)) < 0x5000) { + + s16 angle_delta = sVar8 - player->current.angle.y; + if (abs(angle_delta) < 0x5000) { return 0; } else { return 1; @@ -1849,10 +2082,12 @@ void daDoor20_c::openInitCom(int param_1) { field_0x67e = bRoomNo; field_0x67f = fRoomNo; } + if (field_0x67e != field_0x67f && field_0x67e != 63 && field_0x67f != 63) { dComIfGp_roomControl_offStatusFlag(field_0x67f, 8); dComIfGp_roomControl_onStatusFlag(field_0x67e, 0x20); } + dStage_roomControl_c::setNextStayNo(field_0x67f); Z2GetAudioMgr()->setSceneExist(false); } @@ -1864,6 +2099,7 @@ void daDoor20_c::closeEndCom() { { dComIfGp_roomControl_onStatusFlag(field_0x67e, 8); } + cXyz cStack_2c; fopAc_ac_c* player = dComIfGp_getPlayer(0); cXyz cStack_38 = player->current.pos - current.pos; @@ -1876,12 +2112,12 @@ void daDoor20_c::closeEndCom() { } else { angle = current.angle.y + 0x8000; } + dComIfGs_setRestartRoom(cStack_2c, angle, roomNo); Z2GetAudioMgr()->setSceneExist(true); } -/* 8046581C-80465918 004D5C 00FC+00 1/1 0/0 0/0 .text getRestartPos__10daDoor20_cFP4cXyz - */ +/* 8046581C-80465918 004D5C 00FC+00 1/1 0/0 0/0 .text getRestartPos__10daDoor20_cFP4cXyz */ void daDoor20_c::getRestartPos(cXyz* param_1) { fopAc_ac_c* player = dComIfGp_getPlayer(0); cXyz acStack_78 = player->current.pos - current.pos; @@ -1893,53 +2129,51 @@ void daDoor20_c::getRestartPos(cXyz* param_1) { } else { fVar1 = -300.0f; } + } else if (dVar9 < 0.0f) { + fVar1 = 200.0f; } else { - if (dVar9 < 0.0f) { - fVar1 = 200.0f; - } else { - fVar1 = -200.0f; - } + fVar1 = -200.0f; } + param_1->x = current.pos.x - fVar1 * field_0x680.x; param_1->y = current.pos.y; param_1->z = current.pos.z - fVar1 * field_0x680.z; } -/* 8046722C-804672A0 -00001 0074+00 1/1 0/0 0/0 .data action_table$6155 */ -static char* action_table[29] = { - "WAIT", - "STOP_OPEN", - "STOP_CLOSE", - "OPEN", - "CLOSE", - "SMOKE", - "SMOKE_END", - "SETGOAL", - "UNLOCK", - "SETSTART", - "SETANGLE", - "ADJUSTMENT", - "OPEN_PUSH", - "OPEN_PULL", - "OPEN_PUSH2", - "OPEN_PULL2", - "TALK", - "SETSTART_PUSH", - "SETSTART_PULL", - "END_CHECK", - "DROP_BF", - "DROP_AF", - "DELETE_LOCK", - "OPEN_INIT", - "ADJUSTMENT2", - "NOT_OPEN", - "MESSAGE", - "LIGHT_ANM", - "LIGHT_ANM2", -}; - /* 80465918-80465960 004E58 0048+00 1/0 0/0 0/0 .text getDemoAction__10daDoor20_cFv */ int daDoor20_c::getDemoAction() { + static char* action_table[29] = { + "WAIT", + "STOP_OPEN", + "STOP_CLOSE", + "OPEN", + "CLOSE", + "SMOKE", + "SMOKE_END", + "SETGOAL", + "UNLOCK", + "SETSTART", + "SETANGLE", + "ADJUSTMENT", + "OPEN_PUSH", + "OPEN_PULL", + "OPEN_PUSH2", + "OPEN_PULL2", + "TALK", + "SETSTART_PUSH", + "SETSTART_PULL", + "END_CHECK", + "DROP_BF", + "DROP_AF", + "DELETE_LOCK", + "OPEN_INIT", + "ADJUSTMENT2", + "NOT_OPEN", + "MESSAGE", + "LIGHT_ANM", + "LIGHT_ANM2", + }; + return dComIfGp_evmng_getMyActIdx(field_0x6cc, action_table, 29, 0, 0); } @@ -1954,13 +2188,15 @@ void daDoor20_c::setGoal() { local_1c.x = local_1c.x * 0.8f; local_1c.y = 0.0f; if (daPy_py_c::checkNowWolf()) { - local_1c.z = -300.0f; + local_1c.z = KREG_F(0) + -300.0f; } else { local_1c.z = -200.0f; } + if (field_0x68c == 1) { local_1c.z = -local_1c.z; } + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); mDoMtx_stack_c::YrotM(homeY); mDoMtx_stack_c::multVec(&local_1c, &local_1c); @@ -1989,14 +2225,17 @@ int daDoor20_c::chkStopF() { if (swBit == 0xff) { return 0; } + switch (frontOption) { case 1: case 3: if (!dComIfGp_roomControl_checkStatusFlag(fRoomNo, 1)) { return -1; } + return dComIfGs_isSwitch(swBit, fRoomNo) == 0; } + return 0; } @@ -2008,12 +2247,15 @@ int daDoor20_c::chkStopB() { if (swBit == 0xff) { return 0; } + if (backOption != 1 && backOption != 3) { return 0; } + if (!dComIfGp_roomControl_checkStatusFlag(bRoomNo, 1)) { return -1; } + return dComIfGs_isSwitch(swBit, bRoomNo) == 0; } @@ -2022,6 +2264,7 @@ void daDoor20_c::setStopDemo() { u8 frontOption = door_param2_c::getFrontOption(this); u8 backOption = door_param2_c::getBackOption(this); int isMsgDoor = door_param2_c::isMsgDoor(this); + if (field_0x68c == 0) { if (frontOption == 3 || frontOption == 1) { u8 eventNo = door_param2_c::getEventNo(this); @@ -2033,7 +2276,7 @@ void daDoor20_c::setStopDemo() { } } else if (backOption == 3 || backOption == 1) { u8 eventNo = door_param2_c::getEventNo2(this); - if (isMsgDoor == 0 && eventNo != 0xff) { + if (isMsgDoor == 0 && eventNo != 0xFF) { field_0x6cb = 3; } else { field_0x6cb = 1; @@ -2045,31 +2288,37 @@ void daDoor20_c::setStopDemo() { int daDoor20_c::chkStopClose() { if (mDoorStop.field_0x0 == 0) { return 0; - } + } + int frontOption = door_param2_c::getFrontOption(this); int backOption = door_param2_c::getBackOption(this); u8 swBit; u8 roomNo; + if (field_0x68c == 0) { if (frontOption != 1) { return 0; } + swBit = door_param2_c::getSwbit(this); roomNo = door_param2_c::getFRoomNo(this); } else { if (backOption != 1) { return 0; } + swBit = door_param2_c::getSwbit2(this); roomNo = door_param2_c::getBRoomNo(this); } + if (swBit == 0xff) { return 0; } - if (dComIfGs_isSwitch(swBit, roomNo)) { - return 0; - } else { + + if (!dComIfGs_isSwitch(swBit, roomNo)) { return 1; + } else { + return 0; } } @@ -2101,6 +2350,7 @@ int daDoor20_c::chkStopOpen() { swBit = door_param2_c::getSwbit2(this); roomNo = door_param2_c::getBRoomNo(this); } + if ((field_0x68c == 0 && frontOption == 3) || (field_0x68c == 1 && backOption == 3)) { if (dComIfGp_event_runCheck() == 0 || (field_0x68d == 0)) { if (dComIfGp_roomControl_checkRoomDisp(roomNo) && @@ -2110,16 +2360,19 @@ int daDoor20_c::chkStopOpen() { field_0x68d--; return 0; } - if (swBit != 0xff) { - g_dComIfG_gameInfo.info.onSwitch(swBit, roomNo); + + if (swBit != 0xFF) { + dComIfGs_onSwitch(swBit, roomNo); } return 1; } + field_0x68d = 65; } } else if (swBit != 0xff && dComIfGs_isSwitch(swBit, roomNo)) { return 1; } + return 0; } @@ -2163,11 +2416,13 @@ int dDoor_stop_c::closeProc(daDoor20_c* i_this) { if (field_0xb == 0) { return 1; } + cLib_chaseF(&i_this->speedF, 60.0f, 6.0f); if (cLib_chaseF(&field_0x4, 0.0f, i_this->speedF)) { field_0xb = 0; return 2; - } + } + return 0; } @@ -2188,13 +2443,14 @@ int dDoor_stop_c::openProc(daDoor20_c* i_this) { if (field_0xb == 0) { return 1; } + cLib_chaseF(&i_this->speedF, 30.0f, 4.0f); - ; if (cLib_chaseF(&field_0x4, 300.0f, i_this->speedF)) { field_0xb = 0; field_0x8 = 0; return 2; } + return 0; } @@ -2203,11 +2459,10 @@ int dDoor_stop_c::create(daDoor20_c* i_this) { J3DModelData* stopModelData = i_this->getStopModelData(); JUT_ASSERT(3923, stopModelData != NULL); field_0x0 = mDoExt_J3DModel__create(stopModelData, 0x80000, 0x11000084); - return field_0x0 != NULL ? 1 : 0; + return field_0x0 == NULL ? 0 : 1; } -/* 80466538-804665B0 005A78 0078+00 1/1 0/0 0/0 .text draw__12dDoor_stop_cFP10daDoor20_c - */ +/* 80466538-804665B0 005A78 0078+00 1/1 0/0 0/0 .text draw__12dDoor_stop_cFP10daDoor20_c */ void dDoor_stop_c::draw(daDoor20_c* i_this) { if (field_0x0 != NULL) { g_env_light.settingTevStruct(16, &i_this->current.pos, &i_this->tevStr); @@ -2229,20 +2484,25 @@ static int daDoor20_Execute(daDoor20_c* i_this) { /* 804665F4-80466618 005B34 0024+00 1/0 0/0 0/0 .text daDoor20_Delete__FP10daDoor20_c */ static int daDoor20_Delete(daDoor20_c* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); i_this->_delete(); return 1; } /* 80466618-8046670C 005B58 00F4+00 1/0 0/0 0/0 .text daDoor20_Create__FP10fopAc_ac_c */ -static int daDoor20_Create(fopAc_ac_c* i_this) { +static int daDoor20_Create(fopAc_ac_c* a_this) { + daDoor20_c* i_this = (daDoor20_c*)a_this; + fpc_ProcID id = fopAcM_GetID(a_this); fopAcM_ct(i_this, daDoor20_c); - return static_cast(i_this)->create(); + return i_this->create(); } /* 804672A0-804672C0 -00001 0020+00 1/0 0/0 0/0 .data l_daDoor20_Method */ static actor_method_class l_daDoor20_Method = { - (process_method_func)daDoor20_Create, (process_method_func)daDoor20_Delete, - (process_method_func)daDoor20_Execute, (process_method_func)NULL, + (process_method_func)daDoor20_Create, + (process_method_func)daDoor20_Delete, + (process_method_func)daDoor20_Execute, + (process_method_func)NULL, (process_method_func)daDoor20_Draw, }; diff --git a/src/d/actor/d_a_door_spiral.cpp b/src/d/actor/d_a_door_spiral.cpp index 83b8fe063c2..30a567b6a6e 100644 --- a/src/d/actor/d_a_door_spiral.cpp +++ b/src/d/actor/d_a_door_spiral.cpp @@ -5,7 +5,1204 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_door_spiral.h" + +#if DEBUG + +#include "d/d_door_param2.h" #include "f_op/f_op_actor.h" +#include "d/actor/d_a_player.h" +#include "SSystem/SComponent/c_counter.h" +#include "d/d_s_play.h" +#include "d/d_debug_viewer.h" + +static void* searchSpiralSub(void* i_actor, void* i_data) { + daSpiral_c* actor1 = (daSpiral_c*)i_actor; + daSpiral_c* actor2 = (daSpiral_c*)i_data; + if (actor1 != NULL && fopAcM_IsActor(actor1)) { + if (fopAcM_GetProfName(actor1) == PROC_SPIRAL_DOOR && actor1 != actor2) { + if (door_param2_c::getBRoomNo(actor1) == door_param2_c::getBRoomNo(actor2)) { + return actor1; + } + } + } + + return NULL; +} + +char* daSpiral_c::getAlwaysArcName() { + return getBmdArcName(); +} + +char* daSpiral_c::getSpiralDzbName(int idx) { + static char* dzb[2] = { + "door-stepD.dzb", + "door-stepU.dzb", + }; + return dzb[idx]; +} + +char* daSpiral_c::getDzb() { + return "door-dark.dzb"; +} + +char* daSpiral_c::getBmdArcName() { + return "K_step"; +} + +char* daSpiral_c::getEvArcName() { + return "DoorEvt"; +} + +char* daSpiral_c::getBmd(int idx) { + static char* bmd[2] = { + "K_stepd.bmd", + "K_stepu.bmd", + }; + return bmd[idx]; +} + +char* daSpiral_c::getBmd2(int idx) { + static char bmdName; + if (idx == 0) { + sprintf(&bmdName, "door-stairSpiralU.bmd"); + } else { + sprintf(&bmdName, "door-stairSpiralD.bmd"); + } + + return &bmdName; +} + +J3DModelData* daSpiral_c::getModelData() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getStageRes(getBmd2(mIdx)); + if (modelData == NULL) { + modelData = (J3DModelData*)dComIfG_getObjectRes(getBmdArcName(), getBmd(mIdx)); + } + + return modelData; +} + +char* daSpiral_c::getStopBmd() { + return "door-spiralStop.bmd"; +} + +char* daSpiral_c::getStopBmd2() { + return "door-stop.bmd"; +} + +J3DModelData* daSpiral_c::getStopModelData() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getStageRes(getStopBmd2()); + if (modelData == NULL) { + modelData = (J3DModelData*)dComIfG_getObjectRes(getBmdArcName(), getStopBmd()); + } + + return modelData; +} + +char* daSpiral_c::getStopDzb() { + return "door-spiralStop.dzb"; +} + +static int CheckCreateHeap(fopAc_ac_c* a_this) { + daSpiral_c* i_this = (daSpiral_c*)a_this; + return i_this->CreateHeap(); +} + +bool daSpiral_c::debugCheckParam() { + bool rv = false; + + if (!field_0x6d0) { + u8 fRoomNo = door_param2_c::getFRoomNo(this); + if (fRoomNo == 63) { + OS_REPORT_ERROR("螺旋階段:部屋番号指定がありません!\n"); // Spiral staircase: No room number specified! + rv = true; + } + + u8 frontOption = door_param2_c::getFrontOption(this); + if (frontOption == 2) { + OS_REPORT_ERROR("螺旋階段:鍵オプションは対応していません!\n"); // Spiral staircase: Key option not supported! + rv = true; + } + + field_0x6d0 = true; + } + + return rv; +} + +cPhs__Step daSpiral_c::create() { + if (debugCheckParam()) { + return cPhs_ERROR_e; + } + + cPhs__Step phase = (cPhs__Step)dComIfG_resLoad(&mPhase1, getAlwaysArcName()); + if (phase != cPhs_COMPLEATE_e) { + return phase; + } + + phase = (cPhs__Step)dComIfG_resLoad(&mPhase3, getEvArcName()); + if (phase != cPhs_COMPLEATE_e) { + return phase; + } + + phase = (cPhs__Step)dComIfG_resLoad(&mPhase2, getBmdArcName()); + if (phase != cPhs_COMPLEATE_e) { + return phase; + } + + fopAcM_SetRoomNo(this, door_param2_c::getFRoomNo(this)); + + u8 backOption = door_param2_c::getBackOption(this); + switch (backOption) { + case 4: + mIdx = 0; + break; + + case 5: + mIdx = 1; + break; + + default: + OS_REPORT_ERROR("螺旋階段の裏オプション設定が正しくありません!<%d>\n", backOption); // Spiral staircase back option setting is incorrect! <%d> + JUT_ASSERT(300, FALSE); + break; + } + + if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x7000)) { + return cPhs_ERROR_e; + } + + CreateInit(); + + return cPhs_COMPLEATE_e; +} + +static cXyz l_step_offset(0.0f, 0.0f, 150.0f); +static cXyz l_dzb_offset(0.0f, 0.0f, 100.0f); + +int daSpiral_c::CreateHeap() { + /* NONMATCHING */ + bool isSet; + J3DModelData* modelData = getModelData(); + + JUT_ASSERT(338, modelData != NULL); + + mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + + if (mModel == NULL) { + return 0; + } + + mpBgW1 = new dBgW(); + + if (mpBgW1 == NULL) { + return 0; + } + + cBgD_t* bgd = (cBgD_t*)dComIfG_getObjectRes(getAlwaysArcName(), getSpiralDzbName(mIdx)); + + JUT_ASSERT(356, bgd != NULL); + + isSet = mpBgW1->Set(bgd, 1, &mMtx1); + if (isSet == true) { + return 0; + } + + mpBgW2 = new dBgW(); + if (mpBgW2 == NULL) { + return 0; + } + + bgd = (cBgD_t*)dComIfG_getObjectRes(getAlwaysArcName(), getDzb()); + JUT_ASSERT(375, bgd != NULL); + + cXyz offset(l_dzb_offset); + mDoMtx_stack_c::YrotS(home.angle.y); + mDoMtx_stack_c::multVec(&offset, &offset); + mDoMtx_stack_c::transS(current.pos.x + offset.x, current.pos.y + offset.y, current.pos.z + offset.z); + mDoMtx_stack_c::YrotM(home.angle.y); + cMtx_copy(mDoMtx_stack_c::get(), mMtx2); + + isSet = mpBgW2->Set(bgd, 1, &mMtx2); + if (isSet == true) { + return 0; + } + + if (checkMakeStop() && !mSpiralStop.create(this)) { + return 0; + } + + return 1; +} + +int daSpiral_c::CreateInit() { + int rt = dComIfG_Bgsp().Regist(mpBgW1, this); + JUT_ASSERT(416, rt == 0); + + rt = dComIfG_Bgsp().Regist(mpBgW2, this); + JUT_ASSERT(419, rt == 0); + + tevStr.room_no = current.roomNo; + setAction(0); + attention_info.position.y += 150.0f; + eyePos.y += 150.0f; + attention_info.flags = fopAc_AttnFlag_DOOR_e; + calcMtx(); + + mpBgW1->SetRoomId(door_param2_c::getFRoomNo(this) & 0xFFFF); + mpBgW2->SetRoomId(door_param2_c::getFRoomNo(this) & 0xFFFF); + mpBgW1->Move(); + mpBgW2->Move(); + initProc(1); + + return 1; +}; + +void daSpiral_c::setAction(u8 i_action) { + mAction = i_action; +} + +void daSpiral_c::makeEventId(int param_1) { + /* NONMATCHING */ + static char* table[8] = { + "DEFAULT_SPIRAL_DOOR_F", + "DEFAULT_SPIRAL_DOOR_F", + "DEFAULT_STOP_OPEN", + "DEFAULT_STOP_OPEN", + "DEFAULT_SPIRAL_DOOR_F_STOP", + "DEFAULT_SPIRAL_DOOR_F_STOP", + NULL, + NULL, + }; + + for (int i = 0; i < 8; i++) { + mEventIDs[i] = dComIfGp_getEventManager().getEventIdx(this, table[i], 0xFF); + mMapToolIDs[i] = 0xFF; + } +} + +void daSpiral_c::setEventPrm() { + /* NONMATCHING */ + field_0x614 = 0; + + daSpiral_c* actor = (daSpiral_c*)fopAcM_Search(searchSpiralSub, this); + if (actor == NULL) { + OS_REPORT_ERROR("螺旋階段:対になる螺旋階段がありません!\n"); // Spiral staircase: There is no matching spiral staircase! + JUT_ASSERT(488, FALSE); + } + + if (actor->mSpiralStop.field_0x70 == 1) { + field_0x614 = 4; + } else { + field_0x614 = 0; + } + + if (checkArea()) { + daPy_py_c* player = daPy_getPlayerActorClass(); + eventInfo.setEventId(mEventIDs[field_0x614]); + eventInfo.setMapToolId(mMapToolIDs[field_0x614]); + eventInfo.onCondition(fopAcCnd_NODRAW_e); + fopAcM_orderOtherEventId(this, mEventIDs[field_0x614], 0xFF, 0xFFFF, 0, 1); + field_0x630 = player->current.pos; + } +} + +void daSpiral_c::settingStartRoom() { + if (field_0x61d != field_0x61e && field_0x61d != 63 && field_0x61e != 63) { + dComIfGp_roomControl_onStatusFlag(field_0x61d, 8); + } +} + +void daSpiral_c::settingEndRoom() { + fopAc_ac_c* actor = dComIfGp_event_getDoorPartner(); + field_0x61d = door_param2_c::getFRoomNo(this) & 0xFF; + field_0x61e = door_param2_c::getFRoomNo(actor) & 0xFF; + + if (field_0x61d != field_0x61e && field_0x61d != 63 && field_0x61e != 63) { + dComIfGp_roomControl_offStatusFlag(field_0x61e, 8); + } + + dStage_roomControl_c::setNextStayNo(field_0x61e); +} + +void daSpiral_c::EndCommon() { + /* NONMATCHING */ + fopAc_ac_c* player = dComIfGp_getPlayer(0); + cXyz pos_delta = player->current.pos - current.pos; + f32 fVar1 = pos_delta.inprodXZ(field_0x620); + f32 fVar2 = fVar1 < 0.0f ? 180.0f : -180.0f; + + cXyz pos(current.pos.x - fVar2 * field_0x620.x, current.pos.y, current.pos.z - fVar2 * field_0x620.z); + s16 angle = fVar1 > 0.0f ? current.angle.y : current.angle.y + 0x8000; + + dComIfGs_setRestartRoom(pos, angle, fopAcM_GetRoomNo(player)); +} + +BOOL daSpiral_c::checkArea() { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz pos = player->current.pos - current.pos; + s16 angle = current.angle.y; + + if (mFrontCheck == 1) { + angle += (s16)0x7FFF; + } + + mDoMtx_stack_c::YrotS(-angle); + mDoMtx_stack_c::multVec(&pos, &pos); + + f32 fabsValX = std::fabs(pos.x); + if (fabsValX > 225.0f) { + return FALSE; + } + + f32 fabsValY = std::fabs(pos.y); + if (fabsValY > 300.0f) { + return FALSE; + } + + f32 posZ = pos.z; + if (posZ < 0.0f && posZ > -450.0f) { + return TRUE; + } + + return FALSE; +} + +void daSpiral_c::calcMtx() { + cXyz offset(l_step_offset); + + mDoMtx_stack_c::YrotS(home.angle.y); + mDoMtx_stack_c::multVec(&offset, &offset); + mDoMtx_stack_c::transS(current.pos.x + offset.x, current.pos.y + offset.y, current.pos.z + offset.z); + mDoMtx_stack_c::YrotM(home.angle.y); + cMtx_copy(mDoMtx_stack_c::get(), mMtx1); + mModel->setBaseTRMtx(mDoMtx_stack_c::get()); + mpBgW1->Move(); + field_0x5f5 = dComIfGp_roomControl_getStayNo(); +} + +void daSpiral_c::initProc(int param_1) { + field_0x620.set(cM_ssin(home.angle.y), 0.0f, cM_scos(home.angle.y)); + eventInfo.setArchiveName(getEvArcName()); + makeEventId(param_1); +} + +void daSpiral_c::initOpenDemo(int param_1) { + shape_angle.y = current.angle.y; + + if (mFrontCheck == 1) { + shape_angle.y += (s16)0x7FFF; + } + + mStaffId = dComIfGp_evmng_getMyStaffId("SHUTTER_DOOR", NULL, 0); + + if (param_1 != 0) { + dComIfGp_event_onEventFlag(2); + } + + dComIfGp_event_onEventFlag(0x40); +} + +int daSpiral_c::getDemoAction() { + static char* action_table[12] = { + "WAIT", + "START", + "SETGOAL", + "SETSTART", + "SETPOS", + "L_SET", + "SETROOM", + "SETROOM2", + "RUN", + "STOP_OPEN", + "STOP_CLOSE", + "END_CHECK", + }; + + return dComIfGp_evmng_getMyActIdx(mStaffId, action_table, 12, FALSE, FALSE); +} + +static cXyz l_spiral_path_point_d[9] = { + cXyz(360.0f, 0.0f, -600.0f) + l_step_offset, + cXyz(250.0f, 0.0f, -600.0f) + l_step_offset, + cXyz(150.0f, 0.0f, -600.0f) + l_step_offset, + cXyz(82.0f, 0.0f, -560.0f) + l_step_offset, + cXyz(10.0f, 0.0f, -500.0f) + l_step_offset, + cXyz(0.0f, 0.0f, -400.0f) + l_step_offset, + cXyz(0.0f, 0.0f, -300.0f) + l_step_offset, + cXyz(0.0f, 0.0f, -150.0f) + l_step_offset, + cXyz(0.0f, 0.0f, 270.0f) + l_step_offset, +}; + +static cXyz l_spiral_path_point_u[9] = { + cXyz(-360.0f, 0.0f, -600.0f) + l_step_offset, + cXyz(-250.0f, 0.0f, -600.0f) + l_step_offset, + cXyz(-150.0f, 0.0f, -600.0f) + l_step_offset, + cXyz(-82.0f, 0.0f, -560.0f) + l_step_offset, + cXyz(-10.0f, 0.0f, -500.0f) + l_step_offset, + cXyz(0.0f, 0.0f, -400.0f) + l_step_offset, + cXyz(0.0f, 0.0f, -300.0f) + l_step_offset, + cXyz(0.0f, 0.0f, -150.0f) + l_step_offset, + cXyz(0.0f, 0.0f, 270.0f) + l_step_offset, +}; + +int daSpiral_c::demoProc() { + daSpiral_c* actor = (daSpiral_c*)dComIfGp_event_getDoorPartner(); + if (actor == this) { + mStaffId = dComIfGp_evmng_getMyStaffId("PARTNER_DOOR", NULL, 0); + } else { + mStaffId = dComIfGp_evmng_getMyStaffId("SHUTTER_DOOR", NULL, 0); + } + + int demoAction = getDemoAction(); + int rv = 0; + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz pos; + + if (dComIfGp_evmng_getIsAddvance(mStaffId)) { + switch (demoAction) { + case 1: + setPartner(); + break; + + case 2: + setGoal(); + break; + + case 8: + field_0x6b4 = 1; + + cXyz* path_point; + if (mIdx == 0) { + path_point = l_spiral_path_point_d; + } else { + path_point = l_spiral_path_point_u; + } + + pos = path_point[field_0x6b4]; + mDoMtx_stack_c::YrotS(home.angle.y); + mDoMtx_stack_c::multVec(&pos, &pos); + pos += current.pos; + dComIfGp_evmng_setGoal(&pos); + break; + + case 6: + settingEndRoom(); + break; + + case 7: + settingStartRoom(); + break; + + case 4: + setNextSpiral(); + OS_REPORT("\x1b[33m螺旋階段:プレイヤー強制移動!<%d>\n\x1b[m", g_Counter.mCounter0); + field_0x62d = 10; + break; + + case 9: + mSpiralStop.openInit(this); + break; + + case 10: + setStop(); + + if (mSpiralStop.field_0x70 != 0) { + mSpiralStop.closeInit(this); + mSpiralStop.regist(this); + } + break; + + case 5: + field_0x62d = 2; + break; + + case 11: + clrPartner(); + EndCommon(); + } + } + + switch (demoAction) { + case 11: + shape_angle.y = current.angle.y; + setAction(1); + dComIfGp_evmng_cutEnd(mStaffId); + break; + + case 9: + if (mSpiralStop.openProc(this)) { + mSpiralStop.release(this); + dComIfGp_evmng_cutEnd(mStaffId); + } + + mSpiralStop.calcMtx(this); + break; + + case 10: + if (mSpiralStop.closeProc(this)) { + dComIfGp_evmng_cutEnd(mStaffId); + } + + mSpiralStop.calcMtx(this); + break; + + case 6: + if (RunPlayerSpiral()) { + dComIfGp_evmng_cutEnd(mStaffId); + } + break; + + case 5: + if (cLib_calcTimer(&field_0x62d) == 0) { + dComIfGp_evmng_cutEnd(mStaffId); + } + break; + + default: + dComIfGp_evmng_cutEnd(mStaffId); + break; + } + + return rv; +} + +int daSpiral_c::actionWait() { + fopAc_ac_c* door = dComIfGp_event_getDoorPartner(); + if (door == this) { + shape_angle.y = current.angle.y; + shape_angle.y += (s16)0x7FFF; + mStaffId = dComIfGp_evmng_getMyStaffId("PARTNER_DOOR", NULL, 0); + setAction(2); + eventInfo.setEventId(mEventIDs[field_0x614]); + eventInfo.setMapToolId(mMapToolIDs[field_0x614]); + eventInfo.onCondition(fopAcCnd_NODRAW_e); + return 1; + } + + if (mSpiralStop.field_0x70 != 0) { + if (eventInfo.checkCommandDemoAccrpt()) { + mStaffId = dComIfGp_evmng_getMyStaffId("SHUTTER_DOOR", NULL, 0); + shape_angle.y = current.angle.y; + + if (mFrontCheck == 1) { + shape_angle.y += (s16)0x7FFF; + } + + setAction(2); + demoProc(); + } else if (checkStopOpen()) { + setStopDemo(); + fopAcM_orderOtherEventId(this, mEventIDs[field_0x614], mMapToolIDs[field_0x614], 0xFFFF, 0, 1); + } + } else if (eventInfo.checkCommandDemoAccrpt()) { + initOpenDemo(0); + setAction(2); + demoProc(); + } else { + if (checkStopClose()) { + mSpiralStop.field_0x70 = 1; + mSpiralStop.regist(this); + mSpiralStop.closeInit(this); + mSpiralStop.calcMtx(this); + setAction(3); + return 1; + } + + makeEventId(1); + setEventPrm(); + } + + return 1; +} + +int daSpiral_c::actionDemo() { + fopAc_ac_c* door = dComIfGp_event_getDoorPartner(); + if (door == this) { + demoProc(); + } else if (dComIfGp_evmng_endCheck(mEventIDs[field_0x614])) { + setAction(1); + dComIfGp_event_reset(); + shape_angle.y = current.angle.y; + } else { + demoProc(); + } + + return 1; +} + +int daSpiral_c::actionStopClose() { + if (mSpiralStop.closeProc(this)) { + setAction(1); + } + + mSpiralStop.calcMtx(this); + return 1; +} + +int daSpiral_c::actionInit() { + actionWait(); + setAction(1); + setStop(); + mSpiralStop.calcMtx(this); + return 1; +} + +void daSpiral_c::setPartner() { + fopAc_ac_c* actor = fopAcM_Search(searchSpiralSub, this); + JUT_ASSERT(1065, actor); + + dComIfGp_event_setDoorPartner(actor); + fopAcM_OnStatus(actor, fopAcM_STATUS_UNK_0x8000); +} + +void daSpiral_c::clrPartner() { + dComIfGp_event_setDoorPartner(NULL); +} + +void daSpiral_c::setGoal() { + BOOL bVar1 = (int)daPy_getPlayerActorClass(); + cXyz pos(current.pos); + f32 fVar1 = 450.0f; + s16 angle = shape_angle.y + 0x7FFF; + bVar1 = this == dComIfGp_event_getDoorPartner(); + + pos.x += cM_ssin(angle) * fVar1; + pos.y = current.pos.y; + pos.z += cM_scos(angle) * fVar1; + dComIfGp_evmng_setGoal(&pos); +} + +void daSpiral_c::setNextSpiral() { + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + fopAc_ac_c* door = dComIfGp_event_getDoorPartner(); + JUT_ASSERT(1121, door != NULL); + + cXyz pos; + s16 angle = (s16)door->current.angle.y; + + if (mIdx == 0) { + pos = l_spiral_path_point_u[0]; + angle += (s16)0x4000; + } else { + pos = l_spiral_path_point_d[0]; + angle -= (s16)0x4000; + } + + mDoMtx_stack_c::transS(door->current.pos.x, door->current.pos.y, door->current.pos.z); + mDoMtx_stack_c::YrotM(door->current.angle.y); + mDoMtx_stack_c::multVec(&pos, &pos); + + if (mIdx == 0) { + pos.y += 200.0f; + } + + player->setPlayerPosAndAngle(&pos, angle, 0); +} + +BOOL daSpiral_c::RunPlayerSpiral() { + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + cXyz* path_point; + if (mIdx == 0) { + path_point = l_spiral_path_point_d; + } else { + path_point = l_spiral_path_point_u; + } + + cXyz& goal = *dComIfGp_evmng_getGoal(); + if (goal.absXZ(player->current.pos) < KREG_F(4) + 80.0f) { + field_0x6b4++; + if (field_0x6b4 == 9) { + return TRUE; + } + + cXyz pos(path_point[field_0x6b4]); + mDoMtx_stack_c::YrotS(home.angle.y); + mDoMtx_stack_c::multVec(&pos, &pos); + pos += current.pos; + dComIfGp_evmng_setGoal(&pos); + } + + return FALSE; +} + +u8 daSpiral_c::frontCheck() { + int stayNo = dComIfGp_roomControl_getStayNo(); + int fRoomNo = door_param2_c::getFRoomNo(this); + + if (stayNo == fRoomNo) { + return 0; + } + + return 1; +} + +int daSpiral_c::checkExecute() { + mFrontCheck = frontCheck(); + + if (eventInfo.checkCommandDemoAccrpt() || eventInfo.checkCommandDoor()) { + return 2; + } + + fopAc_ac_c* door = dComIfGp_event_getDoorPartner(); + if (door == this) { + return 2; + } + + if (field_0x61c != dComIfGp_roomControl_getStayNo()) { + return 0; + } + + if (mFrontCheck != 2 && adjoinPlayer()) { + return 2; + } + + return 0; +} + +int daSpiral_c::execute() { + int executeNo = checkExecute(); + switch (executeNo) { + case 0: + setAction(0); + break; + + case 2: + switch (mAction) { + case 0: + actionInit(); + break; + + case 1: + actionWait(); + break; + + case 2: + actionDemo(); + break; + + case 3: + actionStopClose(); + break; + } + break; + + default: + JUT_ASSERT(1364, FALSE); + break; + } + + field_0x61c = dComIfGp_roomControl_getStayNo(); + return 1; +}; + +BOOL daSpiral_c::adjoinPlayer() { + int fRoomNo = door_param2_c::getFRoomNo(this); + if (dComIfGp_roomControl_checkRoomDisp(fRoomNo)) { + return TRUE; + } + + return FALSE; +} + +BOOL daSpiral_c::drawCheck_local() { + if (!adjoinPlayer()) { + return FALSE; + } + + return TRUE; +} + +BOOL daSpiral_c::drawCheck(int param_1) { + /* NONMATCHING */ + BOOL drawCheckLocal = drawCheck_local(); + if (drawCheckLocal) { + fopAcM_SetStatusMap(this, 9); + } else { + fopAcM_OffStatus(this, 0); + } + + return drawCheckLocal; +} + +void daSpiral_c::debugDraw() { + GXColor color = {0xFF, 0xFF, 0xFF, 0xFF}; + GXColor* pcVar1 = &color; + GXColor* pcVar2 = &color; + cXyz sp78[4], spa8[4]; + f32 fVar1 = 225.0f; + f32 fVar2 = 0.0f; + sp78[0] = sp78[1] = sp78[2] = sp78[3] = current.pos; + + spa8[0].x = spa8[1].x = fVar1; + spa8[2].x = spa8[3].x = -fVar1; + spa8[0].y = spa8[1].y = spa8[2].y = spa8[3].y = 5.0f; + spa8[0].z = spa8[3].z = -450.0f; + spa8[1].z = spa8[2].z = fVar2; + + s16 angle = current.angle.y; + if (mFrontCheck == 1) { + angle += (s16)0x7FFF; + } + + mDoMtx_stack_c::YrotS(angle); + + for (int i = 0; i < 4; i++) { + mDoMtx_stack_c::multVec(&spa8[i], &spa8[i]); + } + + for (int i = 0; i < 4; i++) { + sp78[i] = (sp78[i] + spa8[i]); + } + + if (KREG_S(9) == 1000) { + dDbVw_drawQuadOpa(sp78, color, 1); + dDbVw_drawSphereXlu(current.pos, 30.0f, color, 1); + } + + if (KREG_S(9) == 2000) { + cXyz* path_point = l_spiral_path_point_d; + if (mIdx == 1) { + path_point = l_spiral_path_point_u; + } + + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::YrotM(home.angle.y); + + cXyz start, end; + for (int i = 0; i < 8; i++) { + start = path_point[0]; + end = path_point[1]; + mDoMtx_stack_c::multVec(&start, &start); + mDoMtx_stack_c::multVec(&end, &end); + dDbVw_drawLineXlu(start, end, color, 1, 12); + path_point++; + } + } +} + +int daSpiral_c::draw() { + BOOL isDraw = drawCheck(0); + if (!isDraw) { + if (field_0x5f6 == 0) { + field_0x5f6 = 1; + dComIfG_Bgsp().Release(mpBgW1); + dComIfG_Bgsp().Release(mpBgW2); + mSpiralStop.release(this); + } + + return 1; + } + + if (field_0x5f6 != 0) { + field_0x5f6 = 0; + bool rt = dComIfG_Bgsp().Regist(mpBgW1, this); + JUT_ASSERT(1544, !rt); + rt = dComIfG_Bgsp().Regist(mpBgW2, this); + JUT_ASSERT(1546, !rt); + + if (mSpiralStop.field_0x70 != 0) { + mSpiralStop.regist(this); + } + } + + g_env_light.settingTevStruct(16, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType_MAJI(mModel, &tevStr); + dComIfGd_setListBG(); + mDoExt_modelUpdateDL(mModel); + dComIfGd_setList(); + + if (mSpiralStop.field_0x70 != 0) { + mSpiralStop.draw(this); + } + + debugDraw(); + + return 1; +} + +int daSpiral_c::Delete() { + if (heap != NULL) { + if (mpBgW1->ChkUsed()) { + dComIfG_Bgsp().Release(mpBgW1); + } + + if (mpBgW2->ChkUsed()) { + dComIfG_Bgsp().Release(mpBgW2); + } + } + + mSpiralStop.remove(this); + dComIfG_resDelete(&mPhase1, getAlwaysArcName()); + dComIfG_resDelete(&mPhase3, getEvArcName()); + dComIfG_resDelete(&mPhase2, getBmdArcName()); + + return 1; +} + +BOOL daSpiral_c::checkMakeStop() { + u8 frontOption = door_param2_c::getFrontOption(this); + if (frontOption == 1 || frontOption == 3) { + return TRUE; + } + + return FALSE; +} + +int daSpiral_c::checkStopF() { + int fRoomNo = door_param2_c::getFRoomNo(this); + u8 frontOption = door_param2_c::getFrontOption(this); + u8 swBit = door_param2_c::getSwbit(this); + + if (swBit == 0xFF) { + return 0; + } + + if (frontOption != 1 && frontOption != 3) { + return 0; + } + + if (!dComIfGp_roomControl_checkStatusFlag(fRoomNo, 1)) { + return -1; + } + + return !dComIfGs_isSwitch(swBit, fRoomNo); +} + +void daSpiral_c::setStopDemo() { + u8 frontOption = door_param2_c::getFrontOption(this); + int isMsgDoor = door_param2_c::isMsgDoor(this); + u8 eventNo = door_param2_c::getEventNo(this); + + if (mFrontCheck == 0) { + if ((frontOption == 3 || frontOption == 1) && isMsgDoor == 0 && eventNo != 0xFF) { + field_0x614 = 6; + mMapToolIDs[field_0x614] = door_param2_c::getEventNo(this); + mEventIDs[field_0x614] = dComIfGp_getEventManager().getEventIdx(this, mMapToolIDs[field_0x614]); + } else { + field_0x614 = 2; + } + } +} + +BOOL daSpiral_c::checkStopClose() { + /* NONMATCHING */ + u8 swBit = 0xFF; + u8 fRoomNo = door_param2_c::getFRoomNo(this); + + if (mSpiralStop.mModel == NULL) { + return FALSE; + } + + u8 frontOption = door_param2_c::getFrontOption(this) & 0xFF; + + if (mFrontCheck == 0) { + if (fRoomNo == 3) { + return FALSE; + } + + swBit = door_param2_c::getSwbit(this); + fRoomNo = door_param2_c::getFRoomNo(this); + } + + if (swBit == 0xFF) { + return FALSE; + } + + if (!dComIfGs_isSwitch(swBit, fRoomNo)) { + return 1; + } + + return 0; +} + +void daSpiral_c::setStop() { + if (checkMakeStop() && mSpiralStop.mModel != NULL) { + mSpiralStop.field_0x72 = mFrontCheck; + mSpiralStop.field_0x70 = checkStopF(); + mSpiralStop.field_0x68 = 0.0f; + } +} + +BOOL daSpiral_c::checkStopOpen() { + u8 frontOption = door_param2_c::getFrontOption(this); + u8 swBit = door_param2_c::getSwbit(this); + u8 fRoomNo = door_param2_c::getFRoomNo(this); + + if (mFrontCheck == 0 && frontOption == 3) { + if (!dComIfGp_event_runCheck() || field_0x5f8 == 0) { + if (dComIfGp_roomControl_checkRoomDisp(fRoomNo) && fopAcM_myRoomSearchEnemy(fRoomNo) == NULL) { + if (field_0x5f8 > 0) { + field_0x5f8--; + return FALSE; + } + + if (swBit != 0xFF) { + dComIfGs_onSwitch(swBit, fRoomNo); + } + + return TRUE; + } + + field_0x5f8 = 65; + } + } else if (swBit != 0xFF && dComIfGs_isSwitch(swBit, fRoomNo)) { + return TRUE; + } + + return FALSE; +} + +BOOL dSpiral_stop_c::create(daSpiral_c* i_this) { + /* NONMATCHING */ + J3DModelData* modelData = i_this->getStopModelData(); + JUT_ASSERT(1830, modelData != NULL); + + mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); + if (mModel == NULL) { + return FALSE; + } + + mpBgW = new dBgW(); + if (mpBgW == NULL) { + return FALSE; + } + + cBgD_t* bgd = (cBgD_t*)dComIfG_getObjectRes(i_this->getAlwaysArcName(), i_this->getStopDzb()); + JUT_ASSERT(1849, bgd != NULL); + + bool isSet = mpBgW->Set(bgd, 1, &mMtx); + if (isSet == true) { + return FALSE; + } + + return TRUE; +} + +int dSpiral_stop_c::remove(daSpiral_c* i_this) { + release(i_this); + field_0x70 = 0; + return 1; +} + +void dSpiral_stop_c::calcMtx(daSpiral_c* i_this) { + f32 fVar1 = -40.0f; + cXyz offset(i_this->current.pos); + cXyz pos; + pos.set(0.0f, 0.0f, 100.0f); + if (field_0x72 == 1) { + pos.set(0.0f, 0.0f, -100.0f); + } + + cLib_offsetPos(&offset, &i_this->home.pos, i_this->home.angle.y, &pos); + + s16 angle = i_this->current.angle.y; + if (field_0x72 == 1) { + angle += (s16)0x7FFF; + } + + mDoMtx_stack_c::transS(offset.x, offset.y, offset.z); + mDoMtx_stack_c::YrotM(angle); + mDoMtx_stack_c::transM(0.0f, field_0x68, 0.0f); + cMtx_copy(mDoMtx_stack_c::get(), mMtx); + + if (mpBgW != NULL) { + mpBgW->Move(); + } + + if (mModel != NULL) { + mModel->setBaseTRMtx(mDoMtx_stack_c::get()); + } +} + +void dSpiral_stop_c::openInit(daSpiral_c* i_this) { + field_0x68 = 0.0f; + field_0x6c = 0.0f; +} + +bool dSpiral_stop_c::openProc(daSpiral_c* i_this) { + cLib_chaseF(&field_0x6c, 30.0f, 4.0f); + if (cLib_chaseF(&field_0x68, 300.0f, field_0x6c) != 0) { + field_0x70 = 0; + return true; + } + + return false; +} + +void dSpiral_stop_c::closeInit(daSpiral_c* i_this) { + field_0x68 = 300.0f; + field_0x6c = 0.0f; +} + +bool dSpiral_stop_c::closeProc(daSpiral_c* i_this) { + cLib_chaseF(&field_0x6c, 60.0f, 6.0f); + if (cLib_chaseF(&field_0x68, 0.0f, field_0x6c) != 0) { + return true; + } + + return false; +} + +void dSpiral_stop_c::draw(daSpiral_c* i_this) { + if (mModel != NULL) { + g_env_light.settingTevStruct(16, &i_this->current.pos, &i_this->tevStr); + g_env_light.setLightTevColorType_MAJI(mModel, &i_this->tevStr); + mDoExt_modelUpdateDL(mModel); + } +} + +BOOL dSpiral_stop_c::regist(daSpiral_c* i_this) { + if (mpBgW != NULL) { + bool rt = dComIfG_Bgsp().Regist(mpBgW, i_this); + if (!rt) { + return TRUE; + } + } + + return FALSE; +} + +BOOL dSpiral_stop_c::release(daSpiral_c* i_this) { + if (mpBgW != NULL && mpBgW->ChkUsed()) { + dComIfG_Bgsp().Release(mpBgW); + } + + return TRUE; +} + +static int daSpiral_Draw(daSpiral_c* i_this) { + return i_this->draw(); +} + +static int daSpiral_Execute(daSpiral_c* i_this) { + i_this->execute(); + return 1; +} + +static int daSpiral_Delete(daSpiral_c* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); + i_this->Delete(); + i_this->~daSpiral_c(); + return 1; +} + +static int daSpiral_Create(fopAc_ac_c* a_this) { + daSpiral_c* i_this = (daSpiral_c*)a_this; + fpc_ProcID id = fopAcM_GetID(a_this); + fopAcM_ct(i_this, daSpiral_c); + return static_cast(i_this)->create(); +} + +static actor_method_class l_daSpiral_Method = { + (process_method_func)daSpiral_Create, + (process_method_func)daSpiral_Delete, + (process_method_func)daSpiral_Execute, + (process_method_func)NULL, + (process_method_func)daSpiral_Draw, +}; + +#endif extern actor_process_profile_definition g_profile_SPIRAL_DOOR = { fpcLy_CURRENT_e, // mLayerID @@ -13,12 +1210,20 @@ extern actor_process_profile_definition g_profile_SPIRAL_DOOR = { fpcPi_CURRENT_e, // mListPrio PROC_SPIRAL_DOOR, // mProcName &g_fpcLf_Method.base, // sub_method - 0x6b0, // mSize + #if DEBUG + 0x6D4, // mSize + #else + 0x6B0, // mSize + #endif 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method 301, // mPriority + #if DEBUG + &l_daSpiral_Method, // sub_method + #else NULL, // sub_method + #endif 0x44000, // mStatus fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_6_e, // cullType diff --git a/src/d/actor/d_a_dshutter.cpp b/src/d/actor/d_a_dshutter.cpp index c5ea74bc1f5..e26a97c0dcb 100644 --- a/src/d/actor/d_a_dshutter.cpp +++ b/src/d/actor/d_a_dshutter.cpp @@ -7,6 +7,7 @@ #include "d/actor/d_a_dshutter.h" #include "SSystem/SComponent/c_math.h" +#include "d/d_s_play.h" #include "Z2AudioLib/Z2Instances.h" /* 80467F7C-80467F88 -00001 000C+00 2/2 0/0 0/0 .data l_arcName */ @@ -16,8 +17,27 @@ static char* l_arcName[] = { "S_lv7saku", }; +#if DEBUG +void daDsh_c::Hio_c::genMessage(JORMContext* ctx) { + ctx->genSlider("オープン加速", &open_acceleration, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("オープン速度", &open_spd, -100.0f, 0.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("オープンバウンド可速度", &open_bound_max_spd, -100.0f, 0.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("オープンバウンド率", &open_bound_rate, -1.0f, 0.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("オープン振動時間", &open_vibration_time, 0, 200, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("クローズ加速", &close_acceleration, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("クローズ速度", &close_spd, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("クローズバウンド可速度", &close_bound_max_spd, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("クローズバウンド率", &close_bound_rate, -1.0f, 0.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("クローズ振動時間", &close_vibration_time, 0, 200, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); +} +#endif + /* 80467498-8046751C 000078 0084+00 1/1 0/0 0/0 .text __dt__7daDsh_cFv */ -daDsh_c::~daDsh_c() {} +daDsh_c::~daDsh_c() { + #if DEBUG + mHIO.removeHIO(); + #endif +} /* 80467F04-80467F10 000000 000C+00 2/2 0/0 0/0 .rodata l_bmd */ static int const l_bmd[] = { @@ -29,7 +49,7 @@ static int const l_bmd[] = { /* 8046751C-8046759C 0000FC 0080+00 1/0 0/0 0/0 .text CreateHeap__7daDsh_cFv */ int daDsh_c::CreateHeap() { J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[mType], l_bmd[mType]); - + JUT_ASSERT(146, modelData != NULL); mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084); if (mpModel == NULL) { return 0; @@ -64,7 +84,11 @@ void daDsh_c::setMtx() { mDoMtx_stack_c::YrotM(shape_angle.y); mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + #if DEBUG + cMtx_copy(mDoMtx_stack_c::get(), mBgMtx); + #else MTXCopy(mDoMtx_stack_c::get(), mBgMtx); + #endif } /* 80467708-8046772C 0002E8 0024+00 5/5 0/0 0/0 .text setAction__7daDsh_cFPQ27daDsh_c8action_c */ @@ -130,8 +154,10 @@ int daDsh_c::initOpen() { if (water_check && fopAcM_wt_c::getWaterY() > fopAcM_gc_c::getGroundY()) { fopAcM_seStart(this, Z2SE_OBJ_SW_FENCE_DWN_WTR, 0); + OS_REPORT("下りる柵:開くSE(水有り)\n"); // Descending Fence: Opening SE (with water) } else { fopAcM_seStart(this, Z2SE_OBJ_SW_FENCE_DOWN, 0); + OS_REPORT("下りる柵:開くSE(水無し)\n"); // Descending fence: Opening SE (no water) } return 1; @@ -143,7 +169,7 @@ static daDsh_c::action_c l_closeWaitAction(&daDsh_c::initCloseWait, &daDsh_c::ex /* 80467988-80467A64 000568 00DC+00 1/0 0/0 0/0 .text executeOpen__7daDsh_cFv */ int daDsh_c::executeOpen() { if (mTiltTime != 0) { - current.pos.y = home.pos.y + cM_rndFX(2.0f); + current.pos.y = home.pos.y + cM_rndFX(IREG_F(10) + 2.0f); } else { cLib_chaseF(&speed.y, getOpenSpeed(), gravity); current.pos.y += speed.y; @@ -154,7 +180,7 @@ int daDsh_c::executeOpen() { if (speed.y < getOpenBoundSpeed()) { speed.y *= getOpenBoundRatio(); - gravity = 8.0f; + gravity = IREG_F(11) + 8.0f; } else { setAction(&l_closeWaitAction); } @@ -194,7 +220,7 @@ int daDsh_c::initClose() { /* 80467B04-80467BE0 0006E4 00DC+00 1/0 0/0 0/0 .text executeClose__7daDsh_cFv */ int daDsh_c::executeClose() { if (mTiltTime != 0) { - current.pos.y = (home.pos.y - OPEN_SIZE) + cM_rndFX(2.0f); + current.pos.y = (home.pos.y - OPEN_SIZE) + cM_rndFX(IREG_F(10) + 2.0f); } else { cLib_chaseF(&speed.y, getCloseSpeed(), gravity); current.pos.y += speed.y; @@ -204,7 +230,7 @@ int daDsh_c::executeClose() { if (speed.y > getCloseBoundSpeed()) { speed.y *= getCloseBoundRatio(); - gravity = 8.0f; + gravity = IREG_F(11) + 8.0f; } else { setAction(&l_openWaitAction); } @@ -248,24 +274,29 @@ int daDsh_c::create() { int phase = mResLoader.load(l_resName, NULL); if (phase == cPhs_COMPLEATE_e) { - phase = MoveBGCreate(l_arcName[mType], l_dzb[mType], dBgS_MoveBGProc_Typical, - l_heap_size[mType], NULL); + phase = MoveBGCreate(l_arcName[mType], l_dzb[mType], dBgS_MoveBGProc_Typical, l_heap_size[mType], NULL); if (phase == cPhs_ERROR_e) { - phase = cPhs_ERROR_e; - } else { - mSw = getSw(); - - setAction(dComIfGs_isSwitch(mSw, fopAcM_GetHomeRoomNo(this)) ? &l_closeWaitAction : &l_openWaitAction); - setMtx(); - fopAcM_SetMtx(this, model->getBaseTRMtx()); + return cPhs_ERROR_e; } + + mSw = getSw(); + daDsh_c::action_c* action; + setAction(dComIfGs_isSwitch(mSw, fopAcM_GetHomeRoomNo(this)) ? &l_closeWaitAction : &l_openWaitAction); + + setMtx(); + fopAcM_SetMtx(this, model->getBaseTRMtx()); + + #if DEBUG + mHIO.entryHIO("鉄壁ドア"); // Ironclad door + #endif } return phase; } -static int daDsh_Create(fopAc_ac_c* i_this) { - return static_cast(i_this)->create(); +static int daDsh_Create(fopAc_ac_c* a_this) { + daDsh_c* i_this = (daDsh_c*)a_this; + return i_this->create(); } /* 80467FF0-80468010 -00001 0020+00 1/0 0/0 0/0 .data l_daDsh_Method */ diff --git a/src/d/actor/d_a_ep.cpp b/src/d/actor/d_a_ep.cpp index 898dd82e925..072d9450d42 100644 --- a/src/d/actor/d_a_ep.cpp +++ b/src/d/actor/d_a_ep.cpp @@ -38,7 +38,7 @@ static void hahen_draw(ep_class* i_this) { static int move_calc(ep_class* i_this, ep_hahen_s* hahen_s) { fopAc_ac_c* a_this = i_this; static u16 w_eff_id[4] = { - 0x01B8, 0x01B9, 0x01BA, 0x01BB, + ID_ZI_J_DOWNWTRA_A, ID_ZI_J_DOWNWTRA_B, ID_ZI_J_DOWNWTRA_C, ID_ZI_J_DOWNWTRA_D, }; dBgS_LinChk dStack_bc; @@ -191,7 +191,7 @@ static void hahen_water(ep_class* i_this, ep_hahen_s* hahen_s) { hahen_s->field_0x28.y += hahen_s->field_0x92; cLib_addCalcAngleS2(&hahen_s->field_0x92, 0, 1, 0x28); - cLib_addCalcAngleS2(&hahen_s->field_0x28.z, (200.0f * cM_ssin(hahen_s->field_0x94 * 0x708)), 1, 0x800); + cLib_addCalcAngleS2(&hahen_s->field_0x28.z, ((NREG_F(14) + 200.0f) * cM_ssin(hahen_s->field_0x94 * 0x708)), 1, 0x800); cLib_addCalcAngleS2(&hahen_s->field_0x28.x, 0, 4, 0x1000); if (hahen_s->field_0x98 == 0) { @@ -211,7 +211,7 @@ static void hahen_water(ep_class* i_this, ep_hahen_s* hahen_s) { } } - fopAcM_effHamonSet(&hahen_s->field_0xa0, &hahen_s->field_0x4, 1.0f, 0.05f); + fopAcM_effHamonSet(&hahen_s->field_0xa0, &hahen_s->field_0x4, KREG_F(2) + 1.0f, 0.05f); } /* 80468E50-80469034 000CD0 01E4+00 1/1 0/0 0/0 .text hahen_carry__FP8ep_classP10ep_hahen_s */ @@ -230,16 +230,14 @@ static void hahen_carry(ep_class* i_this, ep_hahen_s* hahen_s) { fopAc_ac_c* lockOnTarget = dComIfGp_getAttention()->LockonTarget(0); if (lockOnTarget) { - cXyz local_34, cStack_28; - local_34 = lockOnTarget->current.pos - hahen_s->field_0x4; + cXyz local_34 = lockOnTarget->current.pos - hahen_s->field_0x4; + cXyz cStack_28; hahen_s->field_0x28.y = cM_atan2s(local_34.x, local_34.z); - f32 fVar1 = JMAFastSqrt(local_34.x * local_34.x + local_34.z * local_34.z); - s16 sVar1 = -cM_atan2s(local_34.y, fVar1); + s16 sVar1 = -cM_atan2s(local_34.y, JMAFastSqrt(local_34.x * local_34.x + local_34.z * local_34.z)); cMtx_XrotS(*calc_mtx, -0x800 + sVar1); - local_34.y = 0.0f; - local_34.x = 0.0f; + local_34.x = local_34.y = 0.0f; local_34.z = hahen_s->field_0x30; MtxPosition(&local_34, &cStack_28); hahen_s->field_0x1c.y = cStack_28.y; @@ -261,7 +259,7 @@ static void hahen_carry(ep_class* i_this, ep_hahen_s* hahen_s) { static void hahen_cast(ep_class* i_this, ep_hahen_s* hahen_s) { cXyz local_1c, local_28; - hahen_s->field_0x28.x += 0x1450; + hahen_s->field_0x28.x += KREG_S(7) + 0x1450; cMtx_YrotS(*calc_mtx, hahen_s->field_0x28.y); local_1c.x = 0.0f; @@ -271,7 +269,8 @@ static void hahen_cast(ep_class* i_this, ep_hahen_s* hahen_s) { hahen_s->field_0x1c.x = local_28.x; hahen_s->field_0x1c.z = local_28.z; - if (move_calc(i_this, hahen_s)) { + int moveCalc = move_calc(i_this, hahen_s); + if (moveCalc != 0) { hahen_s->field_0x97 = 1; } @@ -357,10 +356,12 @@ static void hahen_move(ep_class* i_this) { /* 80469568-804695F8 0013E8 0090+00 1/0 0/0 0/0 .text daEp_Draw__FP8ep_class */ static int daEp_Draw(ep_class* i_this) { + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; + if (i_this->mpModel) { if (i_this->field_0x602 != 1) { - g_env_light.settingTevStruct(16, &i_this->current.pos, &i_this->tevStr); - g_env_light.setLightTevColorType_MAJI(i_this->mpModel->mModelData, &i_this->tevStr); + g_env_light.settingTevStruct(16, &a_this->current.pos, &a_this->tevStr); + g_env_light.setLightTevColorType_MAJI(i_this->mpModel, &a_this->tevStr); mDoExt_modelUpdateDL(i_this->mpModel); } } @@ -374,24 +375,28 @@ static int daEp_Draw(ep_class* i_this) { /* 804695F8-80469658 001478 0060+00 2/2 0/0 0/0 .text ep_switch_event_end__FP8ep_class */ static BOOL ep_switch_event_end(ep_class* i_this) { - int rv = FALSE; + BOOL rv = FALSE; + if (dComIfGp_evmng_endCheck("SHOKUDAI_SWITCH") != 0) { dComIfGp_event_reset(); rv = TRUE; } + return rv; } /* 80469658-80469700 0014D8 00A8+00 1/1 0/0 0/0 .text ep_switch_event_begin__FP8ep_class */ static BOOL ep_switch_event_begin(ep_class* i_this) { - BOOL rv = 0; + BOOL rv = FALSE; + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; - if (!i_this->eventInfo.checkCommandDemoAccrpt()) { - fopAcM_orderOtherEvent(i_this, "SHOKUDAI_SWITCH", 0xffff, 1, 0); + if (!a_this->eventInfo.checkCommandDemoAccrpt()) { + fopAcM_orderOtherEvent(a_this, "SHOKUDAI_SWITCH", 0xffff, 1, 0); } else { - i_this->eventInfo.onCondition(2); + a_this->eventInfo.onCondition(dEvtCnd_CANDEMO_e); rv = dComIfGp_evmng_getMyStaffId("SHOKUDAI", 0, 0); if (rv == -1) { + OS_REPORT("イベントに(SHOKUDAI)がない。\n"); // (SHOKUDAI) is not in the event. ep_switch_event_end(i_this); } } @@ -406,8 +411,7 @@ static int ep_switch_event_move(ep_class* i_this) { "FIRE", }; - fopAc_ac_c* a_this = i_this; - (void) a_this; + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; int rv = 0; if (dComIfGp_evmng_getIsAddvance(i_this->field_0xa5c)) { @@ -433,13 +437,13 @@ static int ep_switch_event_move(ep_class* i_this) { /* 804697F4-80469EDC 001674 06E8+00 1/1 0/0 0/0 .text ep_move__FP8ep_class */ static void ep_move(ep_class* i_this) { static u16 l_particle_fire_A[2] = { - 0x0100, 0x8110, + ID_ZI_J_O_FIRE_A, dPa_RM(ID_ZI_S_O_FIRE2_A), }; static u16 l_particle_fire_B[2] = { - 0x0101, 0x8111 + ID_ZI_J_O_FIRE_B, dPa_RM(ID_ZI_S_O_FIRE2_B) }; static u16 l_particle_kagerou[2] = { - 0x0103, 0x8112 + ID_ZI_J_O_KAGEROU, dPa_RM(ID_ZI_S_O_KAGEROU2) }; fopAc_ac_c* a_this = i_this; @@ -480,19 +484,18 @@ static void ep_move(ep_class* i_this) { mDoAud_seStart(Z2SE_OBJ_FIRE_IGNITION, &i_this->field_0x634, 0, 0); } + i_this->field_0x60d = 0; } } - } else { - if (i_this->field_0x60b != 0xFF && i_this->field_0xa5c != -1) { - if (ep_switch_event_move(i_this)) { - i_this->field_0x5a4 = 3; - i_this->field_0x5b4 = a_this->scale.x; - } - } else { + } else if (i_this->field_0x60b != 0xFF && i_this->field_0xa5c != -1) { + if (ep_switch_event_move(i_this)) { i_this->field_0x5a4 = 3; i_this->field_0x5b4 = a_this->scale.x; } + } else { + i_this->field_0x5a4 = 3; + i_this->field_0x5b4 = a_this->scale.x; } break; @@ -500,10 +503,11 @@ static void ep_move(ep_class* i_this) { case 3: i_this->field_0x5a4++; + // fallthrough case 4: cLib_addCalc2(&i_this->field_0x5b0, i_this->field_0x5b4, 0.5f, 0.2f); if (i_this->field_0xa79 == 0) { - if ( i_this->field_0xa50 < (s16)(7 + TREG_S(3)) ) { + if ( i_this->field_0xa50 < (s16)(TREG_S(7) + 7) ) { dComIfGp_particle_setSimple(l_particle_fire_A[i_this->field_0x60c], &sp1C, 0xff, g_whiteColor, g_whiteColor, 0, 0.0f); @@ -513,11 +517,12 @@ static void ep_move(ep_class* i_this) { if (i_this->field_0xa50 == 0 && i_this->mSph1.ChkTgHit()) { cCcD_Obj* tg_hit_obj = i_this->mSph1.GetTgHitObj(); + OS_REPORT("...........FIRE SET !\n"); fopAc_ac_c* pfVar4 = dCc_GetAc(tg_hit_obj->GetAc()); f32 x_diff = a_this->current.pos.x - pfVar4->current.pos.x; f32 z_diff = a_this->current.pos.z - pfVar4->current.pos.z; i_this->field_0xa58 = cM_atan2s(x_diff, z_diff); - i_this->field_0xa50 = 0x28; + i_this->field_0xa50 = TREG_S(2) + 0x28; } } @@ -552,6 +557,7 @@ static void ep_move(ep_class* i_this) { } } break; + case 10: cLib_addCalc0(&i_this->field_0x5b0, 1.0f, 0.1f); if (i_this->field_0x5b0 < 0.05f) { @@ -618,16 +624,18 @@ static void ep_move(ep_class* i_this) { /* 80469EDC-8046A0A8 001D5C 01CC+00 1/1 0/0 0/0 .text daEp_set_mtx__FP8ep_class */ static void daEp_set_mtx(ep_class* i_this) { + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; + if (i_this->mpModel) { f32 fVar1 = 70.0f; if ((i_this->field_0xa5a & 1) != 0) { - fVar1 = 140.0f; + fVar1 = NREG_F(1) + 140.0f; } - MtxTrans(i_this->current.pos.x, i_this->current.pos.y, i_this->current.pos.z, 0); - cMtx_YrotM(*calc_mtx, i_this->current.angle.y); + MtxTrans(a_this->current.pos.x, a_this->current.pos.y, a_this->current.pos.z, 0); + cMtx_YrotM(*calc_mtx, (s16)a_this->current.angle.y); MtxTrans(0.0f, fVar1, 0.0f, 1); - cMtx_XrotM(*calc_mtx, i_this->shape_angle.x); + cMtx_XrotM(*calc_mtx, (s16)a_this->shape_angle.x); MtxTrans(0.0f, -fVar1, 0.0f, 1); i_this->mpModel->setBaseTRMtx(*calc_mtx); @@ -635,34 +643,33 @@ static void daEp_set_mtx(ep_class* i_this) { i_this->field_0x5f4 = i_this->field_0x5e8; cXyz local_28; - local_28.z = 0.0f; - local_28.x = 0.0f; + local_28.x = local_28.z = 0.0f; if ((i_this->field_0xa5a & 1) != 0) { - local_28.y = 280.0f; + local_28.y = NREG_F(0) + 140.0f + 140.0f; } else { - local_28.y = 140.0f; + local_28.y = TREG_F(0) + 140.0f; } MtxPosition(&local_28, &i_this->field_0x634); - i_this->eyePos = i_this->field_0x634; - i_this->eyePos.y += 20.0f; - i_this->attention_info.position = i_this->eyePos; - i_this->attention_info.position.y += 30.0f; + a_this->eyePos = i_this->field_0x634; + a_this->eyePos.y += 20.0f; + a_this->attention_info.position = a_this->eyePos; + a_this->attention_info.position.y += 30.0f; local_28.y = 0.0f; MtxPosition(&local_28, &i_this->field_0x5e8); } else { - i_this->field_0x634 = i_this->current.pos; + i_this->field_0x634 = a_this->current.pos; } } /* 8046A0A8-8046A6D4 001F28 062C+00 1/0 0/0 0/0 .text daEp_Execute__FP8ep_class */ static int daEp_Execute(ep_class* i_this) { static u16 eff_name[3] = { - 0x8340, 0x8341, 0x8342, + dPa_RM(ID_ZI_S_KSYOKU_BREAK_A), dPa_RM(ID_ZI_S_KSYOKU_BREAK_B), dPa_RM(ID_ZI_S_KSYOKU_BREAK_C), }; - fopAc_ac_c* a_this = i_this; + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; i_this->field_0x601 = 0; i_this->field_0x602 = 0; if (i_this->field_0x640) { @@ -705,8 +712,8 @@ static int daEp_Execute(ep_class* i_this) { } if (!i_this->field_0x5c8[0]) { - i_this->field_0x5c8[0] = cM_rndF(5.0f); - i_this->field_0x5c4 = cM_rndF(4.0f) + 8.0f; + i_this->field_0x5c8[0] = TREG_F(3) + cM_rndF(TREG_F(2) + 5.0f); + i_this->field_0x5c4 = cM_rndF(TREG_F(6) + 4.0f) + 8.0f + TREG_F(7); } if (!i_this->field_0x5c8[1]) { @@ -719,7 +726,7 @@ static int daEp_Execute(ep_class* i_this) { } } - cLib_addCalc2(&i_this->field_0x5c0, i_this->field_0x5c4, 1.0f, 1.0f); + cLib_addCalc2(&i_this->field_0x5c0, i_this->field_0x5c4, 1.0f, TREG_F(4) + 0.1f + 0.9f); cLib_addCalc2(&i_this->field_0x5b8, i_this->field_0x5bc, 0.4f, 0.04f); mDoLib_clipper::changeFar(1000000.0f); @@ -759,13 +766,13 @@ static int daEp_Execute(ep_class* i_this) { epHahenS->field_0x97 = 1; epHahenS->field_0x4 = a_this->home.pos; if (i < 3) { - epHahenS->field_0x4.y += 40.0f; - epHahenS->field_0x28.z = 0x363c; + epHahenS->field_0x4.y += AREG_F(7) + 40.0f; + epHahenS->field_0x28.z = AREG_S(7) + 0x363C; } else { - epHahenS->field_0x4.y += 110.0f; - epHahenS->field_0x28.z = -0x363c; + epHahenS->field_0x4.y += AREG_F(8) + 110.0f; + epHahenS->field_0x28.z = -(AREG_S(7) + 0x363C); } - epHahenS->field_0x28.y = (i * 0x5555) + 1000; + epHahenS->field_0x28.y = (i * 0x5555) + 1000 + AREG_S(8); cMtx_YrotS(*calc_mtx, epHahenS->field_0x28.y); local_84.x = 0.0f; @@ -776,9 +783,9 @@ static int daEp_Execute(ep_class* i_this) { epHahenS->field_0x90 = 3000.0f + cM_rndF(1000.0f); epHahenS->field_0x92 = cM_rndFX(2000.0f); - epHahenS->field_0x1c.y = 20.0f + cM_rndF(15.0f); - epHahenS->field_0x1c.x = cM_rndFX(15.0f); - epHahenS->field_0x1c.z = cM_rndFX(15.0f); + epHahenS->field_0x1c.y = AREG_F(1) + (20.0f + cM_rndF(15.0f)); + epHahenS->field_0x1c.x = cM_rndFX(AREG_F(2) + 15.0f); + epHahenS->field_0x1c.z = cM_rndFX(AREG_F(2) + 15.0f); epHahenS->field_0x96 = 0; } @@ -806,6 +813,9 @@ static int daEp_IsDelete(ep_class* i_this) { static int daEp_Delete(ep_class* i_this) { dComIfG_resDelete(&i_this->mPhase, "Ep"); dKy_plight_cut(&i_this->mLightInf); + #if DEBUG + mDoAud_seDeleteObject(&i_this->field_0x634); + #endif return 1; } @@ -849,9 +859,9 @@ static void daEp_CreateInit(fopAc_ac_c* a_this) { i_this->field_0x5a4 = 0; i_this->field_0x60d = 0; - fopAcM_SetMtx(i_this, i_this->field_0x570); - fopAcM_SetMin(i_this, -160.0f, -160.0f, -160.0f); - fopAcM_SetMax(i_this, 160.0f, 160.0f, 160.0f); + fopAcM_SetMtx(a_this, i_this->field_0x570); + fopAcM_SetMin(a_this, -160.0f, -160.0f, -160.0f); + fopAcM_SetMax(a_this, 160.0f, 160.0f, 160.0f); daEp_set_mtx(i_this); i_this->field_0x601 = 0; i_this->field_0x602 = 0; @@ -897,28 +907,28 @@ static int daEp_Create(fopAc_ac_c* a_this) { } // mSphAttr }; - int rv; ep_class* i_this = (ep_class*)a_this; fopAcM_ct(a_this, ep_class); - rv = dComIfG_resLoad(&i_this->mPhase, "Ep"); + int rv = dComIfG_resLoad(&i_this->mPhase, "Ep"); if (rv == cPhs_COMPLEATE_e) { - if (fopAcM_GetParam(i_this) & 8) { - i_this->field_0x60c = fopAcM_GetParam(i_this) & 7; - i_this->field_0x60c += 1; + OS_REPORT(" ///// EP PARAM %x\n", fopAcM_GetParam(a_this)); + if (fopAcM_GetParam(a_this) & 8) { + i_this->field_0x60c = fopAcM_GetParam(a_this) & 7; + i_this->field_0x60c++; i_this->field_0x60c &= 1; i_this->field_0xa5a = -1; } else { - i_this->field_0xa5a = fopAcM_GetParam(i_this) & 7; - i_this->field_0xa5a += 1; + i_this->field_0xa5a = fopAcM_GetParam(a_this) & 7; + i_this->field_0xa5a++; i_this->field_0xa5a &= 7; } - i_this->field_0x609 = fopAcM_GetParam(i_this) >> 8; - i_this->field_0x60b = fopAcM_GetParam(i_this) >> 16; - i_this->field_0x60a = fopAcM_GetParam(i_this) >> 24; + i_this->field_0x609 = (fopAcM_GetParam(a_this) & 0xFF00) >> 8; + i_this->field_0x60b = (fopAcM_GetParam(a_this) & 0xFF0000) >> 16; + i_this->field_0x60a = (fopAcM_GetParam(a_this) & 0xFF000000) >> 24; - i_this->mStts.Init(0xff, 0xff, i_this); + i_this->mStts.Init(0xff, 0xff, a_this); i_this->mSph1.Set(sph_src); i_this->mSph1.SetStts(&i_this->mStts); @@ -926,10 +936,8 @@ static int daEp_Create(fopAc_ac_c* a_this) { i_this->mSph1.SetR(70.0f); } - if (i_this->field_0xa5a < 0) { - OS_REPORT(" ///// EP PARAM %x\n"); - } else { - if (!fopAcM_entrySolidHeap(i_this, daEp_CreateHeap, 0x4b000)) { + if (i_this->field_0xa5a >= 0) { + if (!fopAcM_entrySolidHeap(a_this, daEp_CreateHeap, 0x4B000)) { return cPhs_ERROR_e; } @@ -940,10 +948,12 @@ static int daEp_Create(fopAc_ac_c* a_this) { if ((i_this->field_0xa5a & 1) != 0) { i_this->mCyl.SetH(240.0f); } + } else { + OS_REPORT("bonbori 燭台無し Create\n"); } - daEp_CreateInit(i_this); - if (i_this->field_0x60a != 0xff) { + daEp_CreateInit(a_this); + if (i_this->field_0x60a != 0xFF) { if (!dComIfGs_isSwitch(i_this->field_0x60a, fopAcM_GetRoomNo(i_this))) { i_this->field_0x60d = i_this->field_0x60a + 1; } @@ -955,8 +965,8 @@ static int daEp_Create(fopAc_ac_c* a_this) { } i_this->field_0xa5c = -1; - i_this->attention_info.distances[4] = 7; - fopAcM_OnCarryType(i_this, fopAcM_CARRY_UNK_30); + a_this->attention_info.distances[fopAc_attn_CARRY_e] = 7; + fopAcM_OnCarryType(a_this, fopAcM_CARRY_UNK_30); i_this->mSph2.Set(at_sph_src); i_this->mSph2.SetStts(&i_this->mStts); diff --git a/src/d/actor/d_a_hitobj.cpp b/src/d/actor/d_a_hitobj.cpp index a33609f94e0..2d522df7d59 100644 --- a/src/d/actor/d_a_hitobj.cpp +++ b/src/d/actor/d_a_hitobj.cpp @@ -1,7 +1,7 @@ /** * d_a_hitobj.cpp * - */ +*/ #include "d/dolzel_rel.h" // IWYU pragma: keep @@ -13,13 +13,14 @@ static int daHitobj_Draw(hitobj_class* i_this) { return 1; } -/* 8046B360-8046B3C8 000080 0068+00 1/0 0/0 0/0 .text daHitobj_Execute__FP12hitobj_class - */ +/* 8046B360-8046B3C8 000080 0068+00 1/0 0/0 0/0 .text daHitobj_Execute__FP12hitobj_class */ static int daHitobj_Execute(hitobj_class* i_this) { - if (i_this->field_0x572 != 0) { - i_this->field_0x572--; - i_this->field_0x5b0.SetC(i_this->current.pos); - dComIfG_Ccsp()->Set(&i_this->field_0x5b0); + fopAc_ac_c* actor = (fopAc_ac_c*)i_this; + + if (i_this->mTimer != 0) { + i_this->mTimer--; + i_this->mSph.SetC(actor->current.pos); + dComIfG_Ccsp()->Set(&i_this->mSph); } else { fopKyM_Delete(i_this); } @@ -27,54 +28,62 @@ static int daHitobj_Execute(hitobj_class* i_this) { return 1; } -/* 8046B3C8-8046B3D0 0000E8 0008+00 1/0 0/0 0/0 .text daHitobj_IsDelete__FP12hitobj_class - */ +/* 8046B3C8-8046B3D0 0000E8 0008+00 1/0 0/0 0/0 .text daHitobj_IsDelete__FP12hitobj_class */ static int daHitobj_IsDelete(hitobj_class* i_this) { return 1; } -/* 8046B3D0-8046B400 0000F0 0030+00 1/0 0/0 0/0 .text daHitobj_Delete__FP12hitobj_class - */ +#if DEBUG +static char* dat_114287 = "Delete -> Hitobj(id=%d)\n"; +#endif + +/* 8046B3D0-8046B400 0000F0 0030+00 1/0 0/0 0/0 .text daHitobj_Delete__FP12hitobj_class */ static int daHitobj_Delete(hitobj_class* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); dComIfG_resDelete(&i_this->mPhase,"Hitobj"); return 1; } -/* ############################################################################################## */ -/* 8046B5DC-8046B61C 000000 0040+00 1/1 0/0 0/0 .data cc_sph_src$3657 */ -static dCcD_SrcSph cc_sph_src = { - { - {0, {{0, 0, 0x13}, {0, 3}, 0}}, - {dCcD_SE_NONE, 0, 0, 0, {0}}, - {dCcD_SE_NONE, 0, 0, 0, {0}}, - {0}, - }, - { - { - {0.0f, 0.0f, 0.0f}, - 100.0f, - }, - } -}; - /* 8046B400-8046B53C 000120 013C+00 1/0 0/0 0/0 .text daHitobj_Create__FP10fopAc_ac_c */ -static int daHitobj_Create(fopAc_ac_c* i_this) { - hitobj_class* hitobj = (hitobj_class*)i_this; - fopAcM_ct(i_this, hitobj_class); +static int daHitobj_Create(fopAc_ac_c* a_this) { + fopAc_ac_c* player = dComIfGp_getPlayer(0); + fpc_ProcID id = fopAcM_GetID(a_this); + fopAcM_ct(a_this, hitobj_class); + hitobj_class* i_this = (hitobj_class*)a_this; - int ret = dComIfG_resLoad(&hitobj->mPhase,"Hitobj"); + int ret = dComIfG_resLoad(&i_this->mPhase,"Hitobj"); if (ret == cPhs_COMPLEATE_e) { - hitobj->field_0x570 = fopAcM_GetParam(hitobj); - hitobj->field_0x574.Init(0xff,0xff,hitobj); - hitobj->field_0x5b0.Set(cc_sph_src); - hitobj->field_0x5b0.SetStts(&hitobj->field_0x574); - hitobj->field_0x572 = 3; + i_this->arg0 = fopAcM_GetParam(a_this); + i_this->mStts.Init(0xFF, 0xFF, a_this); + + static dCcD_SrcSph cc_sph_src = { + { + {0, {{0, 0, 0x13}, {0, 3}, 0}}, + {dCcD_SE_NONE, 0, 0, 0, {0}}, + {dCcD_SE_NONE, 0, 0, 0, {0}}, + {0}, + }, + { + { + {0.0f, 0.0f, 0.0f}, + 100.0f, + }, + } + }; + + i_this->mSph.Set(cc_sph_src); + i_this->mSph.SetStts(&i_this->mStts); + i_this->mTimer = 3; } return ret; } +#if DEBUG +static char* dat_114317 = "Create -> Hitobj(id=%d)\n"; +#endif + /* 8046B61C-8046B63C -00001 0020+00 1/0 0/0 0/0 .data l_daHitobj_Method */ static actor_method_class l_daHitobj_Method = { (process_method_func)daHitobj_Create, diff --git a/src/d/actor/d_a_kytag00.cpp b/src/d/actor/d_a_kytag00.cpp index a60f4d3250d..dc0041395e2 100644 --- a/src/d/actor/d_a_kytag00.cpp +++ b/src/d/actor/d_a_kytag00.cpp @@ -31,8 +31,7 @@ static cXyz get_check_pos(kytag00_class* i_this) { return pos; } -/* 8046B9DC-8046BA10 00033C 0034+00 2/2 0/0 0/0 .text wether_tag_reset__FP13kytag00_class - */ +/* 8046B9DC-8046BA10 00033C 0034+00 2/2 0/0 0/0 .text wether_tag_reset__FP13kytag00_class */ static void wether_tag_reset(kytag00_class* i_this) { i_this->field_0x56d = 0; @@ -42,8 +41,7 @@ static void wether_tag_reset(kytag00_class* i_this) { g_env_light.mColPatModeGather = 1; } -/* 8046BA10-8046BD60 000370 0350+00 1/1 0/0 0/0 .text wether_tag_move__FP13kytag00_class - */ +/* 8046BA10-8046BD60 000370 0350+00 1/1 0/0 0/0 .text wether_tag_move__FP13kytag00_class */ static void wether_tag_move(kytag00_class* i_this) { cXyz spC; cXyz check_pos = get_check_pos(i_this); @@ -142,7 +140,8 @@ static void wether_tag_move(kytag00_class* i_this) { /* 8046BD60-8046BDA4 0006C0 0044+00 1/1 0/0 0/0 .text raincnt_set__Ff */ static void raincnt_set(f32 param_0) { - int cnt = param_0 * param_0 * param_0 * 250.0f; + int cnt = 0; + cnt = param_0 * param_0 * param_0 * 250.0f; if (cnt > g_env_light.base_raincnt) { g_env_light.raincnt = cnt; } @@ -205,8 +204,8 @@ static void wether_tag_efect_reset(kytag00_class* i_this) { /* 8046BEB8-8046C660 000818 07A8+00 3/2 0/0 0/0 .text wether_tag_efect_move__FP13kytag00_class */ static void wether_tag_efect_move(kytag00_class* i_this) { - cXyz spC; - cXyz check_pos = get_check_pos(i_this); + cXyz spC, check_pos; + check_pos = get_check_pos(i_this); f32 temp_f31 = i_this->field_0x57c * 100.0f; @@ -389,15 +388,15 @@ static void wether_tag_efect_move(kytag00_class* i_this) { } } -/* 8046C660-8046C684 000FC0 0024+00 1/0 0/0 0/0 .text daKytag00_Draw__FP13kytag00_class - */ +/* 8046C660-8046C684 000FC0 0024+00 1/0 0/0 0/0 .text daKytag00_Draw__FP13kytag00_class */ static int daKytag00_Draw(kytag00_class* i_this) { wether_tag_efect_move(i_this); return 1; } -/* 8046C684-8046C76C 000FE4 00E8+00 1/0 0/0 0/0 .text daKytag00_Execute__FP13kytag00_class */ +/* 8046C684-8046C76C 000FE4 00E8+00 1/0 0/0 0/0 .text daKytag00_Execute__FP13kytag00_class */ static int daKytag00_Execute(kytag00_class* i_this) { + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; BOOL var_r30 = TRUE; if (i_this->field_0x571 != 0xFF && dComIfGs_isSwitch(i_this->field_0x571, dComIfGp_roomControl_getStayNo())) { @@ -416,34 +415,36 @@ static int daKytag00_Execute(kytag00_class* i_this) { return 1; } -/* 8046C76C-8046C774 0010CC 0008+00 1/0 0/0 0/0 .text daKytag00_IsDelete__FP13kytag00_class */ +/* 8046C76C-8046C774 0010CC 0008+00 1/0 0/0 0/0 .text daKytag00_IsDelete__FP13kytag00_class */ static int daKytag00_IsDelete(kytag00_class* i_this) { return 1; } -/* 8046C774-8046C7BC 0010D4 0048+00 1/0 0/0 0/0 .text daKytag00_Delete__FP13kytag00_class - */ +/* 8046C774-8046C7BC 0010D4 0048+00 1/0 0/0 0/0 .text daKytag00_Delete__FP13kytag00_class */ static int daKytag00_Delete(kytag00_class* i_this) { wether_tag_reset(i_this); wether_tag_efect_reset(i_this); + fpc_ProcID id = fopAcM_GetID(i_this); g_env_light.mMoyaCount = 0; return 1; } /* 8046C7BC-8046C978 00111C 01BC+00 1/0 0/0 0/0 .text daKytag00_Create__FP10fopAc_ac_c */ static int daKytag00_Create(fopAc_ac_c* i_this) { - fopAcM_ct(i_this, kytag00_class); kytag00_class* a_this = (kytag00_class*)i_this; + BOOL var_r30; + fpc_ProcID id = fopAcM_GetID(i_this); + fopAcM_ct(a_this, kytag00_class); a_this->field_0x56e = 0; - a_this->field_0x56f = fopAcM_GetParam(a_this) & 0xFF; - a_this->field_0x570 = (fopAcM_GetParam(a_this) >> 8) & 0xFF; - a_this->field_0x578 = (fopAcM_GetParam(a_this) >> 0x10) & 0xFF; - a_this->field_0x57c = (fopAcM_GetParam(a_this) >> 0x18) & 0xFF; - a_this->field_0x571 = a_this->current.angle.x & 0xFF; - a_this->field_0x572 = (a_this->current.angle.x >> 8) & 0xFF; + a_this->field_0x56f = fopAcM_GetParam(i_this) & 0xFF; + a_this->field_0x570 = (fopAcM_GetParam(i_this) & 0xFF00) >> 8; + a_this->field_0x578 = (fopAcM_GetParam(i_this) & 0xFF0000) >> 0x10; + a_this->field_0x57c = (fopAcM_GetParam(i_this) & 0xFF000000) >> 0x18; + a_this->field_0x571 = i_this->current.angle.x & 0xFF; + a_this->field_0x572 = (i_this->current.angle.x & 0xFF00) >> 8; - BOOL var_r30 = TRUE; + var_r30 = TRUE; if (a_this->field_0x571 != 0xFF && dComIfGs_isSwitch(a_this->field_0x571, dComIfGp_roomControl_getStayNo())) { var_r30 = FALSE; @@ -465,8 +466,8 @@ static int daKytag00_Create(fopAc_ac_c* i_this) { a_this->field_0x57c = 10; } - a_this->field_0x580 = a_this->scale.x * 5000.0f; - a_this->field_0x584 = a_this->scale.x * 5000.0f + a_this->field_0x578 * 100.0f; + a_this->field_0x580 = i_this->scale.x * 5000.0f; + a_this->field_0x584 = i_this->scale.x * 5000.0f + a_this->field_0x578 * 100.0f; a_this->field_0x56c = 0; a_this->field_0x56d = 0; g_env_light.mMoyaCount = 0; diff --git a/src/d/actor/d_a_kytag04.cpp b/src/d/actor/d_a_kytag04.cpp index d813d7fd7ee..6af1423e839 100644 --- a/src/d/actor/d_a_kytag04.cpp +++ b/src/d/actor/d_a_kytag04.cpp @@ -9,8 +9,7 @@ #include "d/actor/d_a_npc.h" #include "d/d_com_inf_game.h" -/* 8046CB58-8046CFE8 000078 0490+00 1/0 0/0 0/0 .text daKytag04_Draw__FP13kytag04_class - */ +/* 8046CB58-8046CFE8 000078 0490+00 1/0 0/0 0/0 .text daKytag04_Draw__FP13kytag04_class */ static int daKytag04_Draw(kytag04_class* i_this) { dScnKy_env_light_c* kankyo = dKy_getEnvlight(); camera_class* camera = dComIfGp_getCamera(0); @@ -200,8 +199,7 @@ static int daKytag04_IsDelete(kytag04_class* i_this) { return 1; } -/* 8046D35C-8046D474 00087C 0118+00 1/0 0/0 0/0 .text daKytag04_Delete__FP13kytag04_class - */ +/* 8046D35C-8046D474 00087C 0118+00 1/0 0/0 0/0 .text daKytag04_Delete__FP13kytag04_class */ static int daKytag04_Delete(kytag04_class* i_this) { dComIfG_resDelete(&i_this->mPhase, "Kytag04"); diff --git a/src/d/actor/d_a_obj_brakeeff.cpp b/src/d/actor/d_a_obj_brakeeff.cpp index 16002a3185f..af9bfc71ed0 100644 --- a/src/d/actor/d_a_obj_brakeeff.cpp +++ b/src/d/actor/d_a_obj_brakeeff.cpp @@ -16,6 +16,7 @@ #include "dolphin/mtx.h" #include "d/d_com_inf_game.h" #include "d/d_cc_uty.h" +#include "d/d_s_play.h" //Particle IDS u16 e_name[5] = { @@ -34,13 +35,13 @@ u32 bef_brk[2] = { 10, }; -/* 8046DCB8-8046DD38 000078 0080+00 1/0 0/0 0/0 .text daObj_Brakeeff_Draw__FP18obj_brakeeff_class - */ +/* 8046DCB8-8046DD38 000078 0080+00 1/0 0/0 0/0 .text daObj_Brakeeff_Draw__FP18obj_brakeeff_class */ int daObj_Brakeeff_Draw(obj_brakeeff_class* i_this) { + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; J3DModel* model = i_this->mpModel; - g_env_light.settingTevStruct(64, &i_this->current.pos, &i_this->tevStr); - g_env_light.setLightTevColorType_MAJI(model->mModelData, &i_this->tevStr); + g_env_light.settingTevStruct(64, &a_this->current.pos, &i_this->tevStr); + g_env_light.setLightTevColorType_MAJI(model, &a_this->tevStr); i_this->mpBrk->entry(model->getModelData()); mDoExt_modelUpdateDL(model); @@ -49,29 +50,34 @@ int daObj_Brakeeff_Draw(obj_brakeeff_class* i_this) { /* 8046DD38-8046DF80 0000F8 0248+00 1/1 0/0 0/0 .text obj_brakeeff_1__FP18obj_brakeeff_class */ void obj_brakeeff_1(obj_brakeeff_class* i_this) { - cXyz pos (i_this->current.pos); - cXyz misc_vector(1.0f, 1.0f, 1.0f); + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; + cXyz pos, misc_vector; + pos = a_this->current.pos; + misc_vector.set(1.0f, 1.0f, 1.0f); if(i_this->mEffectType == 0){ - pos.y += 75.0f; + pos.y += TREG_F(5) + 75.0f; } else if(i_this->mEffectType == 1){ - pos.y += 50.0f; + pos.y += TREG_F(6) + 50.0f; misc_vector.set(0.56f, 0.56f, 0.56f); } + switch (i_this->mMiscTimer3) { default: return; + case 0: i_this->mMiscTimer3 = 1; i_this->mMiscTimers[0] = 60; break; + case 1: break; } for(int i = 0; i < 2; i++){ - i_this->mRuntimeParticleIds[i] = dComIfGp_particle_set(i_this->mRuntimeParticleIds[i], e_name[i],&pos, &i_this->current.angle, &misc_vector); + i_this->mRuntimeParticleIds[i] = dComIfGp_particle_set(i_this->mRuntimeParticleIds[i], e_name[i],&pos, &a_this->current.angle, &misc_vector); } if(i_this->mMiscTimers[0] == 0){ @@ -86,19 +92,22 @@ void obj_brakeeff_1(obj_brakeeff_class* i_this) { atInfo.mpCollider = i_this->mDCcD_Sph.GetTgHitObj(); at_power_check(&atInfo); - cXyz result = i_this->current.pos - atInfo.mpActor->current.pos; - i_this->current.angle.y = cM_atan2s(result.x, result.z); + cXyz result = a_this->current.pos - atInfo.mpActor->current.pos; + a_this->current.angle.y = cM_atan2s(result.x, result.z); for(int i = 2; i < 5; i++){ - dComIfGp_particle_set(e_name[i], &pos, &i_this->current.angle, &misc_vector); + dComIfGp_particle_set(e_name[i], &pos, &a_this->current.angle, &misc_vector); } - fopAcM_delete(i_this); + fopAcM_delete(a_this); } } } /* 8046DF80-8046DFB0 000340 0030+00 1/1 0/0 0/0 .text action__FP18obj_brakeeff_class */ void action(obj_brakeeff_class* i_this) { + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; + cXyz sp1c, sp28; + switch (i_this->mMiscTimer2){ case 0: obj_brakeeff_1(i_this); @@ -106,9 +115,10 @@ void action(obj_brakeeff_class* i_this) { } } -/* 8046DFB0-8046E098 000370 00E8+00 2/1 0/0 0/0 .text - * daObj_Brakeeff_Execute__FP18obj_brakeeff_class */ +/* 8046DFB0-8046E098 000370 00E8+00 2/1 0/0 0/0 .text daObj_Brakeeff_Execute__FP18obj_brakeeff_class */ int daObj_Brakeeff_Execute(obj_brakeeff_class* i_this) { + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; + i_this->mMiscTimer1++; for(int i = 0; i < 2; i++) { @@ -119,10 +129,10 @@ int daObj_Brakeeff_Execute(obj_brakeeff_class* i_this) { action(i_this); - mDoMtx_stack_c::transS(i_this->current.pos.x, i_this->current.pos.y, i_this->current.pos.z); - mDoMtx_stack_c::YrotM(i_this->shape_angle.y); - mDoMtx_stack_c::XrotM(i_this->shape_angle.x); - mDoMtx_stack_c::ZrotM(i_this->shape_angle.z); + mDoMtx_stack_c::transS(a_this->current.pos.x, a_this->current.pos.y, a_this->current.pos.z); + mDoMtx_stack_c::YrotM((s16)a_this->shape_angle.y); + mDoMtx_stack_c::XrotM((s16)a_this->shape_angle.x); + mDoMtx_stack_c::ZrotM(a_this->shape_angle.z); i_this->mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); MTXCopy(mDoMtx_stack_c::get(), i_this->mStoredMatrix); @@ -132,15 +142,15 @@ int daObj_Brakeeff_Execute(obj_brakeeff_class* i_this) { return 1; } -/* 8046E098-8046E0A0 000458 0008+00 1/0 0/0 0/0 .text - * daObj_Brakeeff_IsDelete__FP18obj_brakeeff_class */ +/* 8046E098-8046E0A0 000458 0008+00 1/0 0/0 0/0 .text daObj_Brakeeff_IsDelete__FP18obj_brakeeff_class */ int daObj_Brakeeff_IsDelete(obj_brakeeff_class* i_this) { return 1; } -/* 8046E0A0-8046E0F0 000460 0050+00 1/0 0/0 0/0 .text - * daObj_Brakeeff_Delete__FP18obj_brakeeff_class */ +/* 8046E0A0-8046E0F0 000460 0050+00 1/0 0/0 0/0 .text daObj_Brakeeff_Delete__FP18obj_brakeeff_class */ int daObj_Brakeeff_Delete(obj_brakeeff_class* i_this) { + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; + fpc_ProcID id = fopAcM_GetID(i_this); dComIfG_resDelete(&i_this->mRequestOfPhase, "Obj_Bef"); dComIfG_Bgsp().Release(i_this->mpDBgW); @@ -152,7 +162,7 @@ int useHeapInit(fopAc_ac_c* i_this) { obj_brakeeff_class* a_this = static_cast(i_this); J3DModelData* modelData = static_cast(dComIfG_getObjectRes("Obj_Bef", bef_bmd[a_this->mEffectType])); - + JUT_ASSERT(339, modelData != NULL); a_this->mpModel = mDoExt_J3DModel__create(modelData, 0x80000,0x11000084); if (a_this->mpModel == NULL) { @@ -177,10 +187,7 @@ int useHeapInit(fopAc_ac_c* i_this) { return 0; } - cBgD_t* cbgd = (cBgD_t *)dComIfG_getObjectRes("Obj_Bef", 13); - - u32 res = a_this->mpDBgW->Set(cbgd, 1, &a_this->mStoredMatrix); - if(res == 1){ + if(a_this->mpDBgW->Set((cBgD_t *)dComIfG_getObjectRes("Obj_Bef", 13), 1, &a_this->mStoredMatrix) == 1){ return 0; } @@ -203,20 +210,23 @@ int daObj_Brakeeff_Create(fopAc_ac_c* i_this) { }; obj_brakeeff_class* a_this = static_cast(i_this); - - fopAcM_ct(a_this, obj_brakeeff_class); + fopAcM_ct(i_this, obj_brakeeff_class); int res_load_result = dComIfG_resLoad(&a_this->mRequestOfPhase, "Obj_Bef"); if(res_load_result == cPhs_COMPLEATE_e){ + OS_REPORT("OBJ_BRAKEEFF PARAM %x\n", fopAcM_GetParam(i_this)); a_this->mEffectType = fopAcM_GetParam(i_this); + + OS_REPORT("OBJ_BRAKEEFF//////////////OBJ_BRAKEEFF SET 1 !!\n"); - bool is_heap_set = fopAcM_entrySolidHeap(i_this, useHeapInit,0x4b000); - - if(!is_heap_set) return cPhs_ERROR_e; + if(!fopAcM_entrySolidHeap(i_this, useHeapInit,0x4B000)) { + OS_REPORT("//////////////OBJ_BRAKEEFF SET NON !!\n"); + return cPhs_ERROR_e; + } - bool is_registered = dComIfG_Bgsp().Regist(a_this->mpDBgW, i_this); - if(is_registered) return cPhs_ERROR_e; + OS_REPORT("//////////////OBJ_BRAKEEFF SET 2 !!\n"); + if(dComIfG_Bgsp().Regist(a_this->mpDBgW, i_this)) return cPhs_ERROR_e; fopAcM_SetMtx(i_this, a_this->mpModel->getBaseTRMtx()); a_this->mDCcD_Stts.Init(255, 0, i_this); @@ -225,6 +235,7 @@ int daObj_Brakeeff_Create(fopAc_ac_c* i_this) { daObj_Brakeeff_Execute(a_this); } + return res_load_result; } diff --git a/src/d/actor/d_a_obj_burnbox.cpp b/src/d/actor/d_a_obj_burnbox.cpp index 19106d69d72..d31b553e147 100644 --- a/src/d/actor/d_a_obj_burnbox.cpp +++ b/src/d/actor/d_a_obj_burnbox.cpp @@ -1,16 +1,11 @@ /** * @file d_a_obj_burnbox.cpp * - */ +*/ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_burnbox.h" -#include "d/d_com_inf_game.h" - -// -// Declarations: -// /* 8046E698-8046E6D4 000078 003C+00 1/1 0/0 0/0 .text initBaseMtx__14daObjBurnBox_cFv */ void daObjBurnBox_c::initBaseMtx() { @@ -26,7 +21,6 @@ void daObjBurnBox_c::setBaseMtx() { MTXCopy(mDoMtx_stack_c::get(), mBgMtx); } -/* ############################################################################################## */ /* 8046EE48-8046EE54 000000 000C+00 2/2 0/0 0/0 .rodata l_bmd */ const u32 l_bmd[3] = { 0x04, @@ -59,20 +53,19 @@ const dCcD_SrcCyl l_cyl_src = { /* 8046E738-8046E8BC 000118 0184+00 1/0 0/0 0/0 .text Create__14daObjBurnBox_cFv */ int daObjBurnBox_c::Create() { static const u16 particle_id[5] = { - 0x8526, 0x8527, 0x8528, 0x8529, 0x8746, + dPa_RM(ID_ZI_S_OBJ_BURN_A), dPa_RM(ID_ZI_S_OBJ_BURN_B), dPa_RM(ID_ZI_S_OBJ_BURN_C), dPa_RM(ID_ZI_S_OBJ_BURN_D), dPa_RM(ID_ZI_S_OBJ_BURN_E), }; initBaseMtx(); fopAcM_SetMtx(this, mpBoxModel->getBaseTRMtx()); - mStts.Init(0xff, 0xff, this); + mStts.Init(0xFF, 0xFF, this); mCyl.Set(l_cyl_src); mCyl.SetStts(&mStts); fopAcM_setCullSizeBox2(this, mpBoxModel->getModelData()); cXyz particlePos = current.pos; cXyz particleScale = scale; - int type = getType(); - switch (type) { + switch (getType()) { case 0: case 2: particlePos.y += 37.5f; @@ -90,7 +83,6 @@ int daObjBurnBox_c::Create() { return 1; } -/* ############################################################################################## */ /* 8046EED4-8046EEE0 -00001 000C+00 3/3 0/0 0/0 .data l_arcName */ const char* l_arcName[3] = { "Kkiba_00", // crate @@ -100,14 +92,14 @@ const char* l_arcName[3] = { /* 8046E8BC-8046E93C 00029C 0080+00 1/0 0/0 0/0 .text CreateHeap__14daObjBurnBox_cFv */ int daObjBurnBox_c::CreateHeap() { - u8 type = getType(); - J3DModelData* modelData = (J3DModelData*) dComIfG_getObjectRes(l_arcName[type], l_bmd[type]); + J3DModelData* modelData = (J3DModelData*) dComIfG_getObjectRes(l_arcName[getType()], l_bmd[getType()]); JUT_ASSERT(0x106, modelData != NULL); mpBoxModel = mDoExt_J3DModel__create(modelData, J3DMdlFlag_DifferedDLBuffer, 0x11000084); if (mpBoxModel == NULL) { return 0; } + return 1; } @@ -116,15 +108,14 @@ cPhs__Step daObjBurnBox_c::create1st() { cPhs__Step phaseStep = (cPhs__Step) dComIfG_resLoad(&mPhaseReq, l_arcName[getType()]); if (phaseStep == cPhs_COMPLEATE_e) { int dzb_id = -1; - u8 type = getType(); - switch (type) { + switch (getType()) { case 1: dzb_id = 7; } - phaseStep = (cPhs__Step) MoveBGCreate(l_arcName[type], dzb_id, dBgS_MoveBGProc_TypicalRotY, - l_heap_size[type], NULL); + phaseStep = (cPhs__Step)MoveBGCreate(l_arcName[getType()], dzb_id, dBgS_MoveBGProc_TypicalRotY, + l_heap_size[getType()], NULL); if (phaseStep == cPhs_ERROR_e) { return phaseStep; } @@ -132,13 +123,13 @@ cPhs__Step daObjBurnBox_c::create1st() { return phaseStep; } -/* 8046E9EC-8046EABC 0003CC 00D0+00 1/0 0/0 0/0 .text Execute__14daObjBurnBox_cFPPA3_A4_f - */ +/* 8046E9EC-8046EABC 0003CC 00D0+00 1/0 0/0 0/0 .text Execute__14daObjBurnBox_cFPPA3_A4_f */ int daObjBurnBox_c::Execute(Mtx** mtx) { field_0x724++; if (field_0x724 % 3 == 0) { field_0x728--; if (field_0x728 == -20) { + OS_REPORT("燃える木箱:消滅\n"); // Burning Crate: Disappeared fopAcM_delete(this); } } @@ -164,14 +155,17 @@ int daObjBurnBox_c::Draw() { J3DModelData* boxModelData = mpBoxModel->getModelData(); for (u16 index = 0; index < boxModelData->getMaterialNum(); index++) { - J3DGXColorS10* tevColor = boxModelData->getMaterialNodePointer(index)->getTevColor(0); + J3DMaterial* matNodeP = boxModelData->getMaterialNodePointer(index); + J3DGXColorS10* tevColor = matNodeP->getTevColor(0); tevColor->r = field_0x728; tevColor->g = field_0x728; tevColor->b = field_0x728; } mDoExt_modelUpdateDL(mpBoxModel); + for (u16 index = 0; index < boxModelData->getMaterialNum(); index++) { - J3DGXColorS10* tevColor = boxModelData->getMaterialNodePointer(index)->getTevColor(0); + J3DMaterial* matNodeP = boxModelData->getMaterialNodePointer(index); + J3DGXColorS10* tevColor = matNodeP->getTevColor(0); tevColor->r = 0; tevColor->g = 0; tevColor->b = 0; @@ -186,36 +180,33 @@ int daObjBurnBox_c::Delete() { return 1; } -/* 8046EC50-8046ED44 000630 00F4+00 1/0 0/0 0/0 .text daObjBurnBox_create1st__FP14daObjBurnBox_c - */ +/* 8046EC50-8046ED44 000630 00F4+00 1/0 0/0 0/0 .text daObjBurnBox_create1st__FP14daObjBurnBox_c */ int daObjBurnBox_create1st(daObjBurnBox_c* i_this) { fopAcM_ct(i_this, daObjBurnBox_c); return i_this->create1st(); } -/* 8046EDD4-8046EDF4 0007B4 0020+00 1/0 0/0 0/0 .text - * daObjBurnBox_MoveBGDelete__FP14daObjBurnBox_c */ +/* 8046EDD4-8046EDF4 0007B4 0020+00 1/0 0/0 0/0 .text daObjBurnBox_MoveBGDelete__FP14daObjBurnBox_c */ int daObjBurnBox_MoveBGDelete(daObjBurnBox_c* i_this) { return i_this->MoveBGDelete(); } -/* 8046EDF4-8046EE14 0007D4 0020+00 1/0 0/0 0/0 .text - * daObjBurnBox_MoveBGExecute__FP14daObjBurnBox_c */ +/* 8046EDF4-8046EE14 0007D4 0020+00 1/0 0/0 0/0 .text daObjBurnBox_MoveBGExecute__FP14daObjBurnBox_c */ int daObjBurnBox_MoveBGExecute(daObjBurnBox_c* i_this) { return i_this->MoveBGExecute(); } -/* 8046EE14-8046EE40 0007F4 002C+00 1/0 0/0 0/0 .text daObjBurnBox_MoveBGDraw__FP14daObjBurnBox_c - */ +/* 8046EE14-8046EE40 0007F4 002C+00 1/0 0/0 0/0 .text daObjBurnBox_MoveBGDraw__FP14daObjBurnBox_c */ int daObjBurnBox_MoveBGDraw(daObjBurnBox_c* i_this) { return i_this->MoveBGDraw(); } -/* ############################################################################################## */ /* 8046EEE0-8046EF00 -00001 0020+00 1/0 0/0 0/0 .data daObjBurnBox_METHODS */ actor_method_class daObjBurnBox_METHODS = { - (process_method_func) daObjBurnBox_create1st, (process_method_func)daObjBurnBox_MoveBGDelete, - (process_method_func) daObjBurnBox_MoveBGExecute, NULL, + (process_method_func) daObjBurnBox_create1st, + (process_method_func)daObjBurnBox_MoveBGDelete, + (process_method_func) daObjBurnBox_MoveBGExecute, + NULL, (process_method_func) daObjBurnBox_MoveBGDraw, }; diff --git a/src/d/actor/d_a_obj_carry.cpp b/src/d/actor/d_a_obj_carry.cpp index 937e860954c..e75eb1fe56d 100644 --- a/src/d/actor/d_a_obj_carry.cpp +++ b/src/d/actor/d_a_obj_carry.cpp @@ -1,11 +1,12 @@ /** * @file d_a_obj_carry.cpp * @brief Actor - Various carriable objects - */ +*/ #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_carry.h" +#include "d/d_a_obj.h" #include "d/actor/d_a_player.h" #include #include "d/d_com_inf_game.h" @@ -21,6 +22,27 @@ #include "d/d_debug_viewer.h" #include "f_op/f_op_kankyo_mng.h" +#if DEBUG + +static char* l_node_name[14] = { + "小壷", + "大壷", + "小さい木箱", + "鉄玉", + "樽", + "ドクロ", + "ボックリの実", + "小壷・赤茶色", + "光の玉(A)", + "光の玉(B)", + "大壷・青色", + "Lv8用テスト玉", + "Lv8用小壷", + "Lv8用大壷", +}; + +#endif + /* 8047990C-80479A24 000000 0118+00 29/29 0/0 0/0 .rodata l_cyl_info */ static const cM3dGCylS l_cyl_info[] = { { 0.0f, 0.0f, 0.0f, 30.0f, 100.0f }, @@ -751,6 +773,121 @@ static dJntColData_c kibako_jc_data = {1, 1, 0, 45.0f, kibako_jv_offset}; /* 8047A71C-8047A728 -00001 000C+00 1/1 0/0 0/0 .data taru_jc_data */ static dJntColData_c taru_jc_data = {1, 1, 0, 45.0f, taru_jv_offset}; +#if DEBUG + +daObj_HIO_c::daObj_HIO_c(int i_type) { + field_0x9c = 0; + type = i_type; + dt = daObjCarry_c::mData[type]; +} + +void daObj_HIO_c::entry() { + if (field_0x9c == 0) { + daObj::HioThrow_c::init(this, l_node_name[type]); + } + + field_0x9c++; +} + +void daObj_HIO_c::remove() { + field_0x9c--; + if (field_0x9c == 0) { + daObj::HioThrow_c::clean(this); + } +} + +void daObj_HIO_c::genMessage(JORMContext* ctx) { + ctx->genLabel("--持ち上げOBJ--", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genLabel(l_node_name[type], 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genLabel("【 移動性能 】", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("重力", &dt.m_gravity, -40.0f, 0.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("垂直速度反射係数", &dt.m_velocityReflCoeffY, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("水平速度反射係数", &dt.m_velocityReflCoeffXZ, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("転がり角度", &dt.m_rollAngle, 1, 89, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("摩擦", &dt.m_friction, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("傾斜の影響", &dt.m_slopeInfluence, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genLabel("【 投げ性能 】", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("鉛直初速度", &dt.m_throwInitSpeedY, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("水平初速度", &dt.m_throwInitSpeedXZ, 0.0f, 200.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("狼・鉛直初速度", &dt.m_wolfThrowInitSpeedY, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("狼・水平初速度", &dt.m_wolfThrowInitSpeedXZ, 0.0f, 200.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("浮力", &dt.m_Buoyancy, 0.0f, 40.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genLabel("-- 壷系のみ --", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("風の影響率", &dt.m_urnWindEffRatio, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("回転係数", &dt.m_urnRotateFactor, 0, 500, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); +} + +daObj_HIO_common_c::daObj_HIO_common_c() { + field_0x4 = 0; + field_0x5 = 0; + field_0x6 = 0; + field_0x10 = 0.75f; + field_0x14 = 100.0f; + field_0xb = 25; + field_0xc = 15; + field_0x7 = 0; + field_0x8 = 0; + field_0x9 = 0; + field_0x1d = 0; + field_0x20 = cXyz(1.0f, 1.0f, 1.0f); + field_0x1c = 0; + field_0x18 = 0.05f; + field_0x2c[0] = (GXColor){0x00, 0x3C, 0x8C, 0xFF}; + field_0x2c[1] = (GXColor){0x8C, 0xD2, 0xFF, 0xFF}; + field_0x34 = (GXColorS10){0x82, 0xC8, 0xFA, 0xFF}; +} + +void daObj_HIO_common_c::entry() { + if (field_0x4 == 0) { + daObj::HioThrow_c::init(this, "共通テスト用"); // For the common test + } + + field_0x4++; +} + +void daObj_HIO_common_c::remove() { + field_0x4--; + if (field_0x4 == 0) { + daObj::HioThrow_c::clean(this); + } +} + +void daObj_HIO_common_c::genMessage(JORMContext* ctx) { + ctx->genLabel("持ち上げOBJ共通のテスト用", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genCheckBox("ここの機能ON", &field_0x5, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genCheckBox("BGヒット破壊無し", &field_0x6, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("水抵抗", &field_0x10, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("水中最高速度", &field_0x14, 0.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genCheckBox("Draw Stop", &field_0x7, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genCheckBox("ExecStop", &field_0x8, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genCheckBox("破壊時のアイテム指定有効", &field_0x9, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("アイテム番号", &field_0xa, 0, 0xFF, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genLabel("--ボックリの実--", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("変化するフレーム", &field_0xb, 1, 100, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("変化開始時間(落ちてから)", &field_0xc, 0, 100, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genLabel("-- 鉄玉 --", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("砲撃・水平速度反射係数", &field_0x18, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genCheckBox("スケール調整", &field_0x1d, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("スケール", &field_0x20.x, 0.1f, 5.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genLabel("-- 光の玉 --", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genLabel(" cc_ball ", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("カラレジ1R", &field_0x34.r, -0x400, 0x3FF, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("カラレジ1G", &field_0x34.g, -0x400, 0x3FF, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("カラレジ1B", &field_0x34.b, -0x400, 0x3FF, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("カラレジ1A", &field_0x34.a, -0x400, 0x3FF, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("コンレジ1R", &field_0x2c[0].r, 0, 0xFF, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("コンレジ1G", &field_0x2c[0].g, 0, 0xFF, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("コンレジ1B", &field_0x2c[0].b, 0, 0xFF, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("コンレジ1A", &field_0x2c[0].a, 0, 0xFF, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genLabel(" aa_hikari ", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("コンレジ1R", &field_0x2c[1].r, 0, 0xFF, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("コンレジ1G", &field_0x2c[1].g, 0, 0xFF, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("コンレジ1B", &field_0x2c[1].b, 0, 0xFF, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("コンレジ1A", &field_0x2c[1].a, 0, 0xFF, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); +} + +#endif + /* 8046EFF8-8046F2F4 000078 02FC+00 1/1 0/0 0/0 .text bound__FP4cXyzRC13cBgS_PolyInfof */ static f32 bound(cXyz* param_0, const cBgS_PolyInfo& param_1, f32 param_2) { cM3dGPla plane; @@ -768,15 +905,13 @@ static f32 bound(cXyz* param_0, const cBgS_PolyInfo& param_1, f32 param_2) { } } -/* 8046F33C-8046F340 0003BC 0004+00 1/0 0/0 0/0 .text - * TgHitCallBackBase__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ -static void TgHitCallBackBase(fopAc_ac_c* i_tgActor, dCcD_GObjInf* i_tgObjInf, - fopAc_ac_c* i_atActor, dCcD_GObjInf* i_atObjInf) {} +/* 8046F33C-8046F340 0003BC 0004+00 1/0 0/0 0/0 .text TgHitCallBackBase__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ +static void TgHitCallBackBase(fopAc_ac_c* i_tgActor, dCcD_GObjInf* i_tgObjInf, fopAc_ac_c* i_atActor, dCcD_GObjInf* i_atObjInf) { + daObjCarry_c* objCarry = (daObjCarry_c*)i_tgActor; +} -/* 8046F340-8046F3E0 0003C0 00A0+00 1/0 0/0 0/0 .text - * TgHitCallBackBokkuri__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ -static void TgHitCallBackBokkuri(fopAc_ac_c* i_tgActor, dCcD_GObjInf* i_tgObjInf, - fopAc_ac_c* i_atActor, dCcD_GObjInf* i_atObjInf) { +/* 8046F340-8046F3E0 0003C0 00A0+00 1/0 0/0 0/0 .text TgHitCallBackBokkuri__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ +static void TgHitCallBackBokkuri(fopAc_ac_c* i_tgActor, dCcD_GObjInf* i_tgObjInf, fopAc_ac_c* i_atActor, dCcD_GObjInf* i_atObjInf) { daObjCarry_c* objCarry = (daObjCarry_c*)i_tgActor; if (objCarry != NULL && i_atActor != NULL && i_atObjInf->ChkAtType(AT_TYPE_SHIELD_ATTACK) && fopAcM_IsActor(i_atActor) && fopAcM_GetName(i_atActor) == PROC_ALINK) @@ -787,13 +922,12 @@ static void TgHitCallBackBokkuri(fopAc_ac_c* i_tgActor, dCcD_GObjInf* i_tgObjInf } } -/* 8046F3E0-8046F3E4 000460 0004+00 1/0 0/0 0/0 .text - * CoHitCallBackBase__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ -static void CoHitCallBackBase(fopAc_ac_c* i_coActorA, dCcD_GObjInf* i_coObjInfA, - fopAc_ac_c* i_coActorB, dCcD_GObjInf* i_coObjInfB) {} +/* 8046F3E0-8046F3E4 000460 0004+00 1/0 0/0 0/0 .text CoHitCallBackBase__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ +static void CoHitCallBackBase(fopAc_ac_c* i_coActorA, dCcD_GObjInf* i_coObjInfA, fopAc_ac_c* i_coActorB, dCcD_GObjInf* i_coObjInfB) { + daObjCarry_c* objCarry = (daObjCarry_c*)i_coActorA; +} -/* 8046F3E4-8046F4AC 000464 00C8+00 1/0 0/0 0/0 .text - * CoHitCallBackBokkuri__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ +/* 8046F3E4-8046F4AC 000464 00C8+00 1/0 0/0 0/0 .text CoHitCallBackBokkuri__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */ static void CoHitCallBackBokkuri(fopAc_ac_c* i_coActorA, dCcD_GObjInf* i_coObjInfA, fopAc_ac_c* i_coActorB, dCcD_GObjInf* i_coObjInfB) { daObjCarry_c* objCarry = (daObjCarry_c*)i_coActorA; @@ -833,6 +967,27 @@ static void* s_swA_sub(void* i_actor, void* i_data) { /* 8047B1D8-8047B1DC 000000 0004+00 3/3 0/0 0/0 .bss l_sw_id */ static int l_sw_id; +#if DEBUG +daObj_HIO_c daObjCarry_c::mHIO[14] = { + daObj_HIO_c(0), + daObj_HIO_c(1), + daObj_HIO_c(2), + daObj_HIO_c(3), + daObj_HIO_c(4), + daObj_HIO_c(5), + daObj_HIO_c(6), + daObj_HIO_c(7), + daObj_HIO_c(8), + daObj_HIO_c(9), + daObj_HIO_c(10), + daObj_HIO_c(11), + daObj_HIO_c(12), + daObj_HIO_c(13), +}; + +static daObj_HIO_common_c l_HIO; +#endif + /* 8046F52C-8046F59C 0005AC 0070+00 2/2 0/0 0/0 .text s_sw_sub__FPvPv */ static void* s_sw_sub(void* i_actor, void* i_data) { daObjSwBallB_c* swball = (daObjSwBallB_c*)i_actor; @@ -873,8 +1028,9 @@ static void* s_setB_sub(void* i_actor, void* i_data) { } /* 8046F684-8046F6A4 000704 0020+00 1/1 0/0 0/0 .text CheckCreateHeap__FP10fopAc_ac_c */ -static int CheckCreateHeap(fopAc_ac_c* i_this) { - return ((daObjCarry_c*)i_this)->CreateHeap(); +static int CheckCreateHeap(fopAc_ac_c* a_this) { + daObjCarry_c* i_this = (daObjCarry_c*)a_this; + return i_this->CreateHeap(); } /* 8046F6A4-8046F6BC 000724 0018+00 40/40 0/0 0/0 .text data__12daObjCarry_cFv */ @@ -901,8 +1057,7 @@ BOOL daObjCarry_c::checkFlag(u8 i_flag) { void daObjCarry_c::initBaseMtx() { mRotAxis = cXyz::Zero; mRotation = 0; - field_0xd3c = ZeroQuat; - field_0xd4c = field_0xd3c; + field_0xd4c = field_0xd3c = ZeroQuat; setBaseMtx(); } @@ -917,6 +1072,7 @@ void daObjCarry_c::setBaseMtx() { } if (mType == TYPE_BOKKURI) { + daPy_py_c* player = daPy_getPlayerActorClass(); mDoMtx_stack_c::transS(current.pos.x, current.pos.y + data().field_0x28, current.pos.z); mDoMtx_stack_c::transM(0.0f, scale.x * data().field_0x2c, 0.0f); mDoMtx_stack_c::concat(rot_mtx); @@ -941,6 +1097,15 @@ void daObjCarry_c::setBaseMtx() { } mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + + #if DEBUG + if (l_HIO.field_0x1d != 0) { + scale.x = l_HIO.field_0x20.x; + scale.y = l_HIO.field_0x20.x; + scale.z = l_HIO.field_0x20.x; + } + #endif + mpModel->setBaseScale(scale); } @@ -951,12 +1116,9 @@ int daObjCarry_c::preInit() { if (!mInitParams) { mItemNo = home.angle.x; field_0xd18 = home.angle.z; - home.angle.z = 0; - home.angle.x = 0; - current.angle.z = 0; - current.angle.x = 0; - shape_angle.z = 0; - shape_angle.x = 0; + home.angle.x = home.angle.z = 0; + current.angle.x = current.angle.z = 0; + shape_angle.x = shape_angle.z = 0; mOnMoveBG = checkOnMoveBg(); mInitParams = true; } @@ -1028,8 +1190,7 @@ BOOL daObjCarry_c::checkCarryWolf() { return FALSE; } -/* 804700B4-804700F0 001134 003C+00 1/1 0/0 0/0 .text checkCarryOneHand__12daObjCarry_cFv - */ +/* 804700B4-804700F0 001134 003C+00 1/1 0/0 0/0 .text checkCarryOneHand__12daObjCarry_cFv */ BOOL daObjCarry_c::checkCarryOneHand() { if (mType == TYPE_TSUBO || mType == TYPE_DOKURO || @@ -1081,7 +1242,8 @@ int daObjCarry_c::Create() { } fopAcM_SetCullSize(this, fopAc_CULLSPHERE_CUSTOM_e); - fopAcM_setCullSizeSphere(this, data().m_cullsph_min_x, data().m_cullsph_min_y, data().m_cullsph_min_z, mpModel->getModelData()->getJointNodePointer(0)->getRadius() * data().scale); + J3DJoint* jointNodeP = mpModel->getModelData()->getJointNodePointer(0); + fopAcM_setCullSizeSphere(this, data().m_cullsph_min_x, data().m_cullsph_min_y, data().m_cullsph_min_z, jointNodeP->getRadius() * data().scale); cLib_onBit(attention_info.flags, fopAc_AttnFlag_CARRY_e); attention_info.distances[fopAc_attn_CARRY_e] = data().m_carry_attn_dist; @@ -1097,18 +1259,21 @@ int daObjCarry_c::Create() { field_0xd70 = cM_rndF(100.0f); field_0xd04 = field_0xd70; + u32 tg_type; if (checkBreakWolfAttack()) { - mCyl.SetTgType(mCyl.GetTgType() | 0x20000000); + tg_type = mCyl.GetTgType(); + mCyl.SetTgType(tg_type | 0x20000000); } - u32 tg_type = mCyl.GetTgType(); + tg_type = mCyl.GetTgType(); if (!checkCarryBoomerang()) { mCyl.SetTgType(tg_type & ~0x10000); } if (checkCarryHookshot()) { fopAcM_OnStatus(this, 0x80000); - mCyl.SetTgType(mCyl.GetTgType() | 0x4000); + tg_type = mCyl.GetTgType(); + mCyl.SetTgType(tg_type | 0x4000); } if (checkCarryWolf()) { @@ -1120,7 +1285,8 @@ int daObjCarry_c::Create() { } if (mType == TYPE_TSUBO || mType == TYPE_OOTSUBO || mType == TYPE_TSUBO_2 || mType == TYPE_AOTSUBO) { - mCyl.SetTgType(mCyl.GetTgType() | 0x2000000); + tg_type = mCyl.GetTgType(); + mCyl.SetTgType(tg_type | 0x2000000); } if (mType != TYPE_TSUBO && mType != TYPE_TSUBO_2 && mType != TYPE_TSUBO_S && mType != TYPE_OOTSUBO && mType != TYPE_AOTSUBO && mType != TYPE_TSUBO_B) { @@ -1163,8 +1329,7 @@ int daObjCarry_c::Create() { return 1; } -/* 804705DC-80470650 00165C 0074+00 3/0 0/0 0/0 .text CreateInit_tsubo__12daObjCarry_cFv - */ +/* 804705DC-80470650 00165C 0074+00 3/0 0/0 0/0 .text CreateInit_tsubo__12daObjCarry_cFv */ int daObjCarry_c::CreateInit_tsubo() { if (!checkCrashRoll()) { mCanCrashRoll = true; @@ -1179,15 +1344,13 @@ int daObjCarry_c::CreateInit_tsubo() { return 1; } -/* 80470650-80470674 0016D0 0024+00 3/0 0/0 0/0 .text CreateInit_ootubo__12daObjCarry_cFv - */ +/* 80470650-80470674 0016D0 0024+00 3/0 0/0 0/0 .text CreateInit_ootubo__12daObjCarry_cFv */ int daObjCarry_c::CreateInit_ootubo() { mode_init_wait(); return 1; } -/* 80470674-804706D4 0016F4 0060+00 1/0 0/0 0/0 .text CreateInit_kibako__12daObjCarry_cFv - */ +/* 80470674-804706D4 0016F4 0060+00 1/0 0/0 0/0 .text CreateInit_kibako__12daObjCarry_cFv */ int daObjCarry_c::CreateInit_kibako() { if (!mJntCol.init(this, &kibako_jc_data, mpModel, 1)) { return 0; @@ -1197,7 +1360,7 @@ int daObjCarry_c::CreateInit_kibako() { return 1; } -/* 804706D4-804707E0 001754 010C+00 1/0 0/0 0/0 .text CreateInit_ironball__12daObjCarry_cFv */ +/* 804706D4-804707E0 001754 010C+00 1/0 0/0 0/0 .text CreateInit_ironball__12daObjCarry_cFv */ int daObjCarry_c::CreateInit_ironball() { if (chkSaveFlag()) { u8 l_saveID = getSaveID(); @@ -1213,6 +1376,8 @@ int daObjCarry_c::CreateInit_ironball() { if (chkSttsFlag(l_saveID, 1)) { mDraw = true; } + + OS_REPORT("\x1b[33m鉄玉ID<%d>:Pos(%.2f,%.2f,%.2f)にセット\n\x1b[m", l_saveID, current.pos.x, current.pos.y, current.pos.z); } mAcch.SetLink(); @@ -1220,13 +1385,13 @@ int daObjCarry_c::CreateInit_ironball() { mode_init_wait(); - mCyl.SetAtType(mCyl.GetAtType() | AT_TYPE_IRON_BALL); + u32 tg_type = mCyl.GetAtType(); + mCyl.SetAtType(tg_type | AT_TYPE_IRON_BALL); mCyl.SetAtSe(6); return 1; } -/* 804707E0-80470840 001860 0060+00 1/0 0/0 0/0 .text CreateInit_taru__12daObjCarry_cFv - */ +/* 804707E0-80470840 001860 0060+00 1/0 0/0 0/0 .text CreateInit_taru__12daObjCarry_cFv */ int daObjCarry_c::CreateInit_taru() { if (!mJntCol.init(this, &taru_jc_data, mpModel, 1)) { return 0; @@ -1236,28 +1401,35 @@ int daObjCarry_c::CreateInit_taru() { return 1; } -/* 80470840-80470890 0018C0 0050+00 1/0 0/0 0/0 .text CreateInit_dokuro__12daObjCarry_cFv - */ +/* 80470840-80470890 0018C0 0050+00 1/0 0/0 0/0 .text CreateInit_dokuro__12daObjCarry_cFv */ int daObjCarry_c::CreateInit_dokuro() { mode_init_wait(); - return fopAcM_isSwitch(this, getSwbit()) == FALSE ? TRUE : FALSE; + + if (fopAcM_isSwitch(this, getSwbit())) { + OS_REPORT("ドクロ:スイッチONなので出ません!<%d>\n", getSwbit()); // Skull: The switch is ON, so it won't appear! + return FALSE; + } + + return TRUE; } -/* 80470890-804709DC 001910 014C+00 1/0 0/0 0/0 .text CreateInit_bokkuri__12daObjCarry_cFv */ +/* 80470890-804709DC 001910 014C+00 1/0 0/0 0/0 .text CreateInit_bokkuri__12daObjCarry_cFv */ int daObjCarry_c::CreateInit_bokkuri() { mCyl.SetTgHitMark(CcG_Tg_UNK_MARK_0); mCyl.OnTgNoHitMark(); field_0xd76 = 0; - field_0xd79 = 3; + mBokkuriExecProcMode = 3; field_0xd7a = 100; mSound.init(¤t.pos, 1); - switch (getSetType()) { + u8 setType = getSetType(); + switch (setType) { case 0: mode_init_wait(); break; + case 1: field_0xd76 = 255; speedF = 15.0f; @@ -1265,19 +1437,23 @@ int daObjCarry_c::CreateInit_bokkuri() { scale.set(1.0f, 1.0f, 1.0f); mode_init_dbDrop(1); break; + case 2: fopAcM_OnCarryType(this, fopAcM_CARRY_TYPE_1); field_0xdb0 = 1; field_0xd7a = 0; mode_init_wait(); break; + case 3: fopAcM_OnCarryType(this, fopAcM_CARRY_TYPE_1); field_0xd76 = 255; field_0xd7a = 0; mode_init_growth(); break; + default: + OS_REPORT_ERROR("ボックリの実:初期状態設定が異常です\n"); // Bokkuri Fruit: The initial state settings are abnormal mode_init_wait(); } @@ -1345,31 +1521,32 @@ int daObjCarry_c::CreateHeap() { int daObjCarry_c::create() { preInit(); -#ifdef DEBUG - if (prm_chk_type_lightball() && strcmp(dComIfGp_getStartStageName(), "T_ENE02") == 0) { - goto next; - } -#endif - - int create_phase = cPhs_NEXT_e; + #if DEBUG + if (!prm_chk_type_lightball() || strcmp(dComIfGp_getStartStageName(), "T_ENE02") != 0) { + #endif + + int create_phase = cPhs_NEXT_e; + + switch (mType) { + case TYPE_BALL_S: + create_phase = (cPhs__Step)checkCreate_LightBallA(); + break; + case TYPE_BALL_S_2: + create_phase = (cPhs__Step)checkCreate_LightBallB(); + break; + case TYPE_LV8_BALL: + create_phase = (cPhs__Step)checkCreate_Lv8Ball(); + break; + } - switch (mType) { - case TYPE_BALL_S: - create_phase = (cPhs__Step)checkCreate_LightBallA(); - break; - case TYPE_BALL_S_2: - create_phase = (cPhs__Step)checkCreate_LightBallB(); - break; - case TYPE_LV8_BALL: - create_phase = (cPhs__Step)checkCreate_Lv8Ball(); - break; - } + if (create_phase != cPhs_NEXT_e) { + return create_phase; + } - if (create_phase != cPhs_NEXT_e) { - return create_phase; + #if DEBUG } + #endif -next: int phase_state = dComIfG_resLoad(&mPhaseReq, getArcName()); if (phase_state == cPhs_COMPLEATE_e) { if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, data().m_heapSize)) { @@ -1379,6 +1556,11 @@ int daObjCarry_c::create() { if (!Create()) { return cPhs_ERROR_e; } + + #if DEBUG + mHIO[mType].entry(); + l_HIO.entry(); + #endif } return phase_state; @@ -1735,6 +1917,12 @@ void daObjCarry_c::resetIconPosForLightBallB() { /* 804718E8-8047233C 002968 0A54+00 1/1 0/0 0/0 .text execute__12daObjCarry_cFv */ // NONMATCHING - sp10 supposed to have an extra copy on the stack int daObjCarry_c::execute() { + #if DEBUG + if (l_HIO.field_0x8 != 0) { + return 1; + } + #endif + mRecover = 0; if (prm_chk_type_ironball()) { @@ -1878,7 +2066,7 @@ int daObjCarry_c::execute() { } } - field_0xd1c = speed; + mInitSpeed = speed; field_0xd04++; cc_damage_proc_call(); @@ -1911,7 +2099,7 @@ int daObjCarry_c::execute() { attention_info.position.z = current.pos.z; eyePos = attention_info.position; - field_0xda9 = fopAcM_checkCarryNow(this); + mCarryNowFlag = fopAcM_checkCarryNow(this); field_0xdac = mCyl.ChkCoHit(); field_0xdad = mAcch.ChkWaterIn(); @@ -1980,6 +2168,33 @@ BOOL daObjCarry_c::checkCulling() { /* 80472460-80472730 0034E0 02D0+00 1/1 0/0 0/0 .text draw__12daObjCarry_cFv */ int daObjCarry_c::draw() { + #if DEBUG + if (l_HIO.field_0x7 != 0) { + return 1; + } + + if (KREG_S(7) == 10000) { + if (getRoomNo() != 63) { + dDbVw_drawSphereOpa(current.pos, 60.0f, (GXColor){0x00, 0x00, 0xFF, 0xFF}, 1); + } + + cXyz sp40(0.0f, 100.0f, 0.0f); + cXyz sp4c, sp58; + sp4c = current.pos; + sp58 = sp40; + s16 sVar1 = KREG_S(0); + Quaternion quat; + quat.w = KREG_F(20) * cM_ssin(sVar1); + quat.x = KREG_F(21) * cM_ssin(sVar1); + quat.y = KREG_F(22) * cM_ssin(sVar1); + quat.z = cM_scos(sVar1); + mDoMtx_stack_c::quatS(&quat); + mDoMtx_stack_c::multVec(&sp58, &sp58); + sp58 += current.pos; + dDbVw_drawLineOpa(sp4c, sp58, (GXColor){0xFF, 0xFF, 0xFF, 0xFF}, 1, 12); + } + #endif + if (checkCulling()) { return 1; } @@ -2003,6 +2218,17 @@ int daObjCarry_c::draw() { J3DGXColorS10* tev_color = material->getTevColor(1); if (strcmp(nametab->getName(i), "cc_ball") == 0) { + #if DEBUG + tev_color->r = l_HIO.field_0x34.r; + tev_color->g = l_HIO.field_0x34.g; + tev_color->b = l_HIO.field_0x34.b; + tev_color->a = l_HIO.field_0x34.a; + + tev_kcolor->r = l_HIO.field_0x2c[0].r; + tev_kcolor->g = l_HIO.field_0x2c[0].g; + tev_kcolor->b = l_HIO.field_0x2c[0].b; + tev_kcolor->a = l_HIO.field_0x2c[0].a; + #else tev_color->r = 0x82; tev_color->g = 0xC8; tev_color->b = 0xFA; @@ -2012,11 +2238,19 @@ int daObjCarry_c::draw() { tev_kcolor->g = 0x3C; tev_kcolor->b = 0x8C; tev_kcolor->a = 0xFF; + #endif } else if (strcmp(nametab->getName(i), "aa_hikari") == 0) { + #if DEBUG + tev_kcolor->r = l_HIO.field_0x2c[1].r; + tev_kcolor->g = l_HIO.field_0x2c[1].g; + tev_kcolor->b = l_HIO.field_0x2c[1].b; + tev_kcolor->a = l_HIO.field_0x2c[1].a; + #else tev_kcolor->r = 0x8C; tev_kcolor->g = 0xD2; tev_kcolor->b = 0xFF; tev_kcolor->a = 0xFF; + #endif } } } @@ -2050,22 +2284,19 @@ void daObjCarry_c::debugDraw() { cXyz end = current.pos + (mRotAxis.norm() * 100.0f); end.y += 35.0f; - GXColor color = {0xFF, 0xFF, 0xFF, 0xFF}; - dDbVw_drawLineOpa(start, end, color, TRUE, 12); + dDbVw_drawLineOpa(start, end, (GXColor){0xFF, 0xFF, 0xFF, 0xFF}, TRUE, 12); } if (KREG_S(8) == 20000) { cXyz start(daPy_getPlayerActorClass()->current.pos); cXyz end(home.pos); - GXColor color = {0xFF, 0xFF, 0xFF, 0xFF}; - dDbVw_drawLineOpa(start, end, color, TRUE, 12); + dDbVw_drawLineOpa(start, end, (GXColor){0xFF, 0xFF, 0xFF, 0xFF}, TRUE, 12); } if (KREG_S(8) == 20001) { cXyz start(daPy_getPlayerActorClass()->current.pos); cXyz end(home.pos); - GXColor color = {0xFF, 0x00, 0x00, 0xFF}; - dDbVw_drawLineOpa(start, end, color, TRUE, 12); + dDbVw_drawLineOpa(start, end, (GXColor){0xFF, 0x00, 0x00, 0xFF}, TRUE, 12); } if (KREG_S(7) == 4000) { @@ -2090,7 +2321,8 @@ void daObjCarry_c::debugDraw() { cXyz sp68; int sp28; - if (fopAcM_getWaterStream(¤t.pos, mAcch.m_gnd, &sp68, &sp28, 0)) { + s32 waterStream = fopAcM_getWaterStream(¤t.pos, mAcch.m_gnd, &sp68, &sp28, 0); + if (waterStream) { cXyz sp5C = sp68 * 100.0f; sp5C += current.pos; dDbVw_drawArrowOpa(current.pos, sp5C, color, TRUE, 12); @@ -2190,6 +2422,12 @@ int daObjCarry_c::_delete() { } dComIfG_resDelete(&mPhaseReq, getArcName()); + + #if DEBUG + mHIO[mType].remove(); + l_HIO.remove(); + #endif + return 1; } @@ -2225,7 +2463,7 @@ void daObjCarry_c::crr_pos() { } } - field_0xd08 = current.pos - sp20; + mGrabCollisionOffset = current.pos - sp20; if (dComIfG_Bgsp().ChkMoveBG_NoDABg(mAcch.m_gnd) && mOnMoveBG) { var_r29 = false; @@ -2368,11 +2606,11 @@ void daObjCarry_c::mode_proc_call() { if (player->setForceGrab(this, 0, 1)) { mode_init_carry(); fopAcM_cancelHookCarryNow(this); - field_0xda9 = 1; + mCarryNowFlag = 1; } } } - } else if (field_0xda9 == 0) { + } else if (mCarryNowFlag == 0) { mode_init_carry(); } @@ -2423,7 +2661,9 @@ int daObjCarry_c::mode_proc_wait() { } else { if (mCanCrashRoll) { daPy_py_c* player = dComIfGp_getLinkPlayer(); - if (player->current.pos.absXZ(current.pos) < (500.0f + KREG_F(9)) && (player->checkFrontRollCrash() || player->checkWolfAttackReverse())) { + f32 fVar1 = player->current.pos.absXZ(current.pos); + f32 fVar2 = KREG_F(9) + 500.0f; + if (fVar1 < fVar2 && (player->checkFrontRollCrash() || player->checkWolfAttackReverse())) { do_crash_roll = true; mCanCrashRoll = false; } @@ -2445,7 +2685,7 @@ int daObjCarry_c::mode_proc_wait() { } if (do_crash_roll) { - speedF = 30.0f + KREG_F(8); + speedF = KREG_F(8) + 30.0f; mode_init_walk(0); return 1; } @@ -2484,9 +2724,15 @@ void daObjCarry_c::mode_init_walk(u8 unused) { /* 804737CC-80473ED8 00484C 070C+00 1/0 0/0 0/0 .text mode_proc_walk__12daObjCarry_cFv */ int daObjCarry_c::mode_proc_walk() { + #if DEBUG + bool gnd_hit = mAcch.ChkGroundHit(); + bool gnd_landing = mAcch.ChkGroundLanding(); + bool gnd_away = mAcch.ChkGroundAway(); + #else bool gnd_hit = mAcch.ChkGroundHit() != 0; bool gnd_landing = mAcch.ChkGroundLanding() != 0; bool gnd_away = mAcch.ChkGroundAway() != 0; + #endif if (gnd_hit) { field_0xcec = current.pos.y; @@ -2657,8 +2903,7 @@ void daObjCarry_c::mode_init_carry() { mMode = MODE_CARRY; } -/* 804741A8-80474448 005228 02A0+00 1/0 0/0 0/0 .text mode_proc_carry__12daObjCarry_cFv - */ +/* 804741A8-80474448 005228 02A0+00 1/0 0/0 0/0 .text mode_proc_carry__12daObjCarry_cFv */ int daObjCarry_c::mode_proc_carry() { daPy_py_c* player = (daPy_py_c*)daPy_getPlayerActorClass(); @@ -2672,13 +2917,13 @@ int daObjCarry_c::mode_proc_carry() { if (mCyl.ChkCoHit()) { cXyz* cc_move_p = mStts.GetCCMoveP(); if (cc_move_p != NULL) { - field_0xd08 += *cc_move_p; + mGrabCollisionOffset += *cc_move_p; } } mStts.ClrCcMove(); mCyl.ClrCoHit(); - player->setGrabCollisionOffset(field_0xd08.x, field_0xd08.z, NULL); + player->setGrabCollisionOffset(mGrabCollisionOffset.x, mGrabCollisionOffset.z, NULL); } if (!fopAcM_checkCarryNow(this)) { @@ -2817,8 +3062,7 @@ void daObjCarry_c::mode_init_float() { mMode = MODE_FLOAT; } -/* 80474734-80474A08 0057B4 02D4+00 1/0 0/0 0/0 .text mode_proc_float__12daObjCarry_cFv - */ +/* 80474734-80474A08 0057B4 02D4+00 1/0 0/0 0/0 .text mode_proc_float__12daObjCarry_cFv */ int daObjCarry_c::mode_proc_float() { field_0xdc4++; gravity = 0.0f; @@ -2827,7 +3071,8 @@ int daObjCarry_c::mode_proc_float() { f32 speed_target; int spC = 0; - if (fopAcM_getWaterStream(¤t.pos, mAcch.m_gnd, &sp34, &spC, 0)) { + s32 waterStream = fopAcM_getWaterStream(¤t.pos, mAcch.m_gnd, &sp34, &spC, 0); + if (waterStream) { s16 sp8 = cM_atan2s(sp34.x, sp34.z); cXyz sp28(speedF * cM_ssin(current.angle.y), 0.0f, speedF * cM_scos(current.angle.y)); @@ -2914,7 +3159,8 @@ int daObjCarry_c::mode_proc_sink() { cXyz sp24; f32 speed_target; int sp8 = 0; - if (fopAcM_getWaterStream(¤t.pos, mAcch.m_gnd, &sp24, &sp8, 0)) { + s32 waterStream = fopAcM_getWaterStream(¤t.pos, mAcch.m_gnd, &sp24, &sp8, 0); + if (waterStream) { s16 var_r27 = cM_atan2s(sp24.x, sp24.z); cXyz sp18(speedF * cM_ssin(current.angle.y), 0.0f, speedF * cM_scos(current.angle.y)); @@ -3021,8 +3267,12 @@ void daObjCarry_c::mode_init_boomCarry() { fopAcM_SetMaxFallSpeed(this, -100.0f); mStts.SetWeight(data().m_colliderWeight); + #if DEBUG + mBoomerangMove.initOffset(¤t.pos, mCyl.GetTgHitGObj()); + #else mCyl.GetTgHitGObj(); mBoomerangMove.initOffset(¤t.pos); + #endif if (field_0xdb0 == 1) { field_0xdb0 = 0; @@ -3064,13 +3314,12 @@ void daObjCarry_c::mode_init_growth() { field_0xdb0 = 1; scale.setall(0.0f); - field_0xd79 = 2; + mBokkuriExecProcMode = 2; mStts.SetWeight(data().m_colliderWeight); mMode = MODE_GROWTH; } -/* 804750C8-8047515C 006148 0094+00 1/0 0/0 0/0 .text mode_proc_growth__12daObjCarry_cFv - */ +/* 804750C8-8047515C 006148 0094+00 1/0 0/0 0/0 .text mode_proc_growth__12daObjCarry_cFv */ int daObjCarry_c::mode_proc_growth() { f32 sp8 = scale.x; f32 temp_f31 = cLib_addCalc(&sp8, data().scale, 0.05f, 0.1f, 0.01f); @@ -3106,7 +3355,7 @@ void daObjCarry_c::mode_init_dbDrop(u8 param_0) { gravity = calc_gravity(); field_0xd75 = 1; - field_0xd79 = 0; + mBokkuriExecProcMode = 0; mMode = MODE_DB_DROP; } @@ -3133,8 +3382,12 @@ void daObjCarry_c::mode_init_hookCarry() { fopAcM_SetMaxFallSpeed(this, -100.0f); mStts.SetWeight(data().m_colliderWeight); + #if DEBUG + mBoomerangMove.initOffset(¤t.pos, mCyl.GetTgHitGObj()); + #else mCyl.GetTgHitGObj(); mBoomerangMove.initOffset(¤t.pos); + #endif if (prm_chk_type_ironball()) { mAcch.ClrIronBall(); @@ -3218,8 +3471,7 @@ void daObjCarry_c::mode_init_resetLightBall() { mMode = MODE_RESET_LIGHTBALL; } -/* 80475598-80475618 006618 0080+00 1/0 0/0 0/0 .text mode_proc_resetLightBall__12daObjCarry_cFv - */ +/* 80475598-80475618 006618 0080+00 1/0 0/0 0/0 .text mode_proc_resetLightBall__12daObjCarry_cFv */ int daObjCarry_c::mode_proc_resetLightBall() { if (cLib_chaseF(&scale.x, 1.0f, 0.05f)) { field_0xcf3 = 10; @@ -3235,12 +3487,14 @@ int daObjCarry_c::mode_proc_resetLightBall() { /* 80475618-8047567C 006698 0064+00 1/1 0/0 0/0 .text chkSinkAll__12daObjCarry_cFv */ BOOL daObjCarry_c::chkSinkAll() { - return mAcch.m_wtr.GetHeight() > current.pos.y + data().field_0x2c * 2.0f; + f32 height = mAcch.m_wtr.GetHeight(); + return height > current.pos.y + data().field_0x2c * 2.0f; } /* 8047567C-804756D4 0066FC 0058+00 3/3 0/0 0/0 .text chkWaterLineIn__12daObjCarry_cFv */ BOOL daObjCarry_c::chkWaterLineIn() { - return mAcch.m_wtr.GetHeight() > current.pos.y + data().field_0x24; + f32 height = mAcch.m_wtr.GetHeight(); + return height > current.pos.y + data().field_0x24; } /* 804756D4-8047573C 006754 0068+00 2/2 0/0 0/0 .text chkSinkObj__12daObjCarry_cFv */ @@ -3268,13 +3522,17 @@ void daObjCarry_c::bg_check() { if (var_f27 < 0.0f) { if (speed.abs() > 8.0f) { - f32 sp30 = field_0xd1c.y; + f32 sp30 = mInitSpeed.y; cXyz sp94(speed); cXyz sp88(speed); - f32 var_f31 = data().field_0x14; + f32 var_f31 = data().m_velocityReflCoeffXZ; if (mCannon) { + #if DEBUG + var_f31 = l_HIO.field_0x18; + #else var_f31 = 0.05f; + #endif } switch (dComIfG_Bgsp().GetPolyAtt0(mAcchCir)) { @@ -3317,11 +3575,11 @@ void daObjCarry_c::bg_check() { } if (gnd_landing) { - f32 temp_f30 = field_0xd1c.y; + f32 temp_f30 = mInitSpeed.y; if (speed.abs() > 1.0f) { - f32 var_f29 = data().field_0x14; - f32 var_f28 = data().field_0x10; + f32 var_f29 = data().m_velocityReflCoeffXZ; + f32 var_f28 = data().m_velocityReflCoeffY; switch (dComIfG_Bgsp().GetPolyAtt0(mAcch.m_gnd)) { case 3: @@ -3333,7 +3591,7 @@ void daObjCarry_c::bg_check() { var_f29 = 0.2f; var_f28 = 0.2f; - if (std::fabs(field_0xd1c.y) > 10.0f) { + if (std::fabs(mInitSpeed.y) > 10.0f) { cXyz sp70(0.9f + KREG_F(10), 0.9f + KREG_F(10), 0.9f + KREG_F(10)); dComIfGp_particle_setPolyColor(0x881F, mAcch.m_gnd, ¤t.pos, &tevStr, ¤t.angle, &sp70, 0, NULL, -1, NULL); dComIfGp_particle_setPolyColor(0x8820, mAcch.m_gnd, ¤t.pos, &tevStr, ¤t.angle, &sp70, 0, NULL, -1, NULL); @@ -3341,7 +3599,7 @@ void daObjCarry_c::bg_check() { } break; default: - if (mType == TYPE_IRON_BALL && std::fabs(field_0xd1c.y) > 10.0f) { + if (mType == TYPE_IRON_BALL && std::fabs(mInitSpeed.y) > 10.0f) { cXyz sp64(0.9f + KREG_F(10), 0.9f + KREG_F(10), 0.9f + KREG_F(10)); dComIfGp_particle_setPolyColor(0xE7, mAcch.m_gnd, ¤t.pos, &tevStr, ¤t.angle, &sp64, 0, NULL, -1, NULL); } @@ -3468,7 +3726,7 @@ void daObjCarry_c::bg_check() { sp34.y = mAcch.m_wtr.GetHeight(); if (water_hit && sp34.y > current.pos.y && (mMode == MODE_FLOAT || (mMode == MODE_SINK && !chkSinkAll()) || (mMode == MODE_WAIT && gnd_hit) || (mMode == MODE_WALK && gnd_hit) || (mMode == MODE_CARRY && water_in && !chkSinkAll()))) { - fopAcM_effHamonSet(&field_0xdd4, &sp34, 1.0f, 0.1f); + fopAcM_effHamonSet(&mHamonPrtcl, &sp34, 1.0f, 0.1f); } if (mType == TYPE_IRON_BALL && roof_hit && gnd_hit) { @@ -3480,15 +3738,16 @@ void daObjCarry_c::bg_check() { field_0xe0d = wall_hit; } -/* 80476618-80476764 007698 014C+00 2/2 0/0 0/0 .text check_bg_damage_proc_base__12daObjCarry_cFv - */ +/* 80476618-80476764 007698 014C+00 2/2 0/0 0/0 .text check_bg_damage_proc_base__12daObjCarry_cFv */ bool daObjCarry_c::check_bg_damage_proc_base() { bool gnd_landing = mAcch.ChkGroundLanding(); bool wall_hit = mAcch.ChkWallHit(); bool var_r30 = false; + int polyAtt0 = 16; if (gnd_landing) { - var_r30 = dComIfG_Bgsp().GetPolyAtt0(mAcch.m_gnd) != 3; + polyAtt0 = dComIfG_Bgsp().GetPolyAtt0(mAcch.m_gnd); + var_r30 = polyAtt0 != 3; } if (mMode == MODE_DROP) { @@ -3516,7 +3775,7 @@ bool daObjCarry_c::check_bg_damage_proc_base() { return 0; } -/* 80476764-804767C4 0077E4 0060+00 7/4 0/0 0/0 .text bg_damage_proc_kotubo__12daObjCarry_cFv */ +/* 80476764-804767C4 0077E4 0060+00 7/4 0/0 0/0 .text bg_damage_proc_kotubo__12daObjCarry_cFv */ bool daObjCarry_c::bg_damage_proc_kotubo() { bool rt = check_bg_damage_proc_base(); if (rt) { @@ -3527,32 +3786,36 @@ bool daObjCarry_c::bg_damage_proc_kotubo() { return rt; } -/* 804767C4-804767E4 007844 0020+00 3/0 0/0 0/0 .text bg_damage_proc_ootubo__12daObjCarry_cFv */ +/* 804767C4-804767E4 007844 0020+00 3/0 0/0 0/0 .text bg_damage_proc_ootubo__12daObjCarry_cFv */ bool daObjCarry_c::bg_damage_proc_ootubo() { - return bg_damage_proc_kotubo(); + bool proc_kotubo = bg_damage_proc_kotubo(); + return proc_kotubo; } -/* 804767E4-80476804 007864 0020+00 1/0 0/0 0/0 .text bg_damage_proc_kibako__12daObjCarry_cFv */ +/* 804767E4-80476804 007864 0020+00 1/0 0/0 0/0 .text bg_damage_proc_kibako__12daObjCarry_cFv */ bool daObjCarry_c::bg_damage_proc_kibako() { - return bg_damage_proc_kotubo(); + bool proc_kotubo = bg_damage_proc_kotubo(); + return proc_kotubo; } -/* 80476804-8047680C 007884 0008+00 1/0 0/0 0/0 .text bg_damage_proc_ironball__12daObjCarry_cFv */ +/* 80476804-8047680C 007884 0008+00 1/0 0/0 0/0 .text bg_damage_proc_ironball__12daObjCarry_cFv */ bool daObjCarry_c::bg_damage_proc_ironball() { return false; } -/* 8047680C-8047682C 00788C 0020+00 1/0 0/0 0/0 .text bg_damage_proc_taru__12daObjCarry_cFv */ +/* 8047680C-8047682C 00788C 0020+00 1/0 0/0 0/0 .text bg_damage_proc_taru__12daObjCarry_cFv */ bool daObjCarry_c::bg_damage_proc_taru() { - return bg_damage_proc_kotubo(); + bool proc_kotubo = bg_damage_proc_kotubo(); + return proc_kotubo; } -/* 8047682C-8047684C 0078AC 0020+00 1/0 0/0 0/0 .text bg_damage_proc_dokuro__12daObjCarry_cFv */ +/* 8047682C-8047684C 0078AC 0020+00 1/0 0/0 0/0 .text bg_damage_proc_dokuro__12daObjCarry_cFv */ bool daObjCarry_c::bg_damage_proc_dokuro() { - return bg_damage_proc_kotubo(); + bool proc_kotubo = bg_damage_proc_kotubo(); + return proc_kotubo; } -/* 8047684C-80476930 0078CC 00E4+00 1/0 0/0 0/0 .text bg_damage_proc_bokkuri__12daObjCarry_cFv */ +/* 8047684C-80476930 0078CC 00E4+00 1/0 0/0 0/0 .text bg_damage_proc_bokkuri__12daObjCarry_cFv */ bool daObjCarry_c::bg_damage_proc_bokkuri() { bool rt = check_bg_damage_proc_base(); if (field_0xd74 != 0) { @@ -3573,8 +3836,7 @@ bool daObjCarry_c::bg_damage_proc_bokkuri() { return rt; } -/* 80476930-80476938 0079B0 0008+00 2/0 0/0 0/0 .text bg_damage_proc_LightBall__12daObjCarry_cFv - */ +/* 80476930-80476938 0079B0 0008+00 2/0 0/0 0/0 .text bg_damage_proc_LightBall__12daObjCarry_cFv */ bool daObjCarry_c::bg_damage_proc_LightBall() { return false; } @@ -3589,6 +3851,12 @@ void daObjCarry_c::obj_break(bool i_createItem, bool i_cancelCarry, bool i_doBre int item_no = getItemNo(); int item_bit = getItemBit(); + #if DEBUG + if (l_HIO.field_0x9 != 0) { + item_no = l_HIO.field_0xa; + } + #endif + if (i_createItem) { if (getItemType() == 0) { csXyz angle(0, home.angle.y, 0); @@ -3610,8 +3878,7 @@ void daObjCarry_c::obj_break(bool i_createItem, bool i_cancelCarry, bool i_doBre } } -/* 80476A5C-80476B04 007ADC 00A8+00 1/1 0/0 0/0 .text check_cc_damage_proc_base__12daObjCarry_cFb - */ +/* 80476A5C-80476B04 007ADC 00A8+00 1/1 0/0 0/0 .text check_cc_damage_proc_base__12daObjCarry_cFb */ bool daObjCarry_c::check_cc_damage_proc_base(bool param_0) { bool rt = false; @@ -3629,7 +3896,7 @@ bool daObjCarry_c::check_cc_damage_proc_base(bool param_0) { return rt; } -/* 80476B04-80476B68 007B84 0064+00 5/2 0/0 0/0 .text cc_damage_proc_kotubo__12daObjCarry_cFv */ +/* 80476B04-80476B68 007B84 0064+00 5/2 0/0 0/0 .text cc_damage_proc_kotubo__12daObjCarry_cFv */ bool daObjCarry_c::cc_damage_proc_kotubo() { bool rt = check_cc_damage_proc_base(false); if (rt) { @@ -3640,12 +3907,12 @@ bool daObjCarry_c::cc_damage_proc_kotubo() { return rt; } -/* 80476B68-80476B88 007BE8 0020+00 3/0 0/0 0/0 .text cc_damage_proc_ootubo__12daObjCarry_cFv */ +/* 80476B68-80476B88 007BE8 0020+00 3/0 0/0 0/0 .text cc_damage_proc_ootubo__12daObjCarry_cFv */ bool daObjCarry_c::cc_damage_proc_ootubo() { return cc_damage_proc_kotubo(); } -/* 80476B88-80476CE4 007C08 015C+00 1/0 0/0 0/0 .text cc_damage_proc_kibako__12daObjCarry_cFv */ +/* 80476B88-80476CE4 007C08 015C+00 1/0 0/0 0/0 .text cc_damage_proc_kibako__12daObjCarry_cFv */ bool daObjCarry_c::cc_damage_proc_kibako() { bool break_obj = false; bool do_break_eff = false; @@ -3692,7 +3959,8 @@ bool daObjCarry_c::cc_damage_proc_kibako() { return break_obj; } -/* 80476CE4-80476E04 007D64 0120+00 1/0 0/0 0/0 .text cc_damage_proc_ironball__12daObjCarry_cFv */ +/* 80476CE4-80476E04 007D64 0120+00 1/0 0/0 0/0 .text cc_damage_proc_ironball__12daObjCarry_cFv */ +// NONMATCHING - regalloc, equivalent bool daObjCarry_c::cc_damage_proc_ironball() { bool var_r26 = false; bool var_r27 = true; @@ -3719,7 +3987,7 @@ bool daObjCarry_c::cc_damage_proc_ironball() { return var_r26; } -/* 80476E04-80476F88 007E84 0184+00 1/0 0/0 0/0 .text cc_damage_proc_taru__12daObjCarry_cFv */ +/* 80476E04-80476F88 007E84 0184+00 1/0 0/0 0/0 .text cc_damage_proc_taru__12daObjCarry_cFv */ bool daObjCarry_c::cc_damage_proc_taru() { bool break_obj = false; bool do_break_eff = false; @@ -3768,12 +4036,12 @@ bool daObjCarry_c::cc_damage_proc_taru() { return break_obj; } -/* 80476F88-80476FA8 008008 0020+00 1/0 0/0 0/0 .text cc_damage_proc_dokuro__12daObjCarry_cFv */ +/* 80476F88-80476FA8 008008 0020+00 1/0 0/0 0/0 .text cc_damage_proc_dokuro__12daObjCarry_cFv */ bool daObjCarry_c::cc_damage_proc_dokuro() { return cc_damage_proc_kotubo(); } -/* 80476FA8-804771B0 008028 0208+00 1/0 0/0 0/0 .text cc_damage_proc_bokkuri__12daObjCarry_cFv */ +/* 80476FA8-804771B0 008028 0208+00 1/0 0/0 0/0 .text cc_damage_proc_bokkuri__12daObjCarry_cFv */ bool daObjCarry_c::cc_damage_proc_bokkuri() { daPy_py_c* player = daPy_getPlayerActorClass(); bool break_obj = false; @@ -3831,18 +4099,18 @@ bool daObjCarry_c::cc_damage_proc_bokkuri() { return break_obj; } -/* 804771B0-804771B8 008230 0008+00 2/0 0/0 0/0 .text cc_damage_proc_LightBall__12daObjCarry_cFv +/* 804771B0-804771B8 008230 0008+00 2/0 0/0 0/0 .text cc_damage_proc_LightBall__12daObjCarry_cFv */ bool daObjCarry_c::cc_damage_proc_LightBall() { return false; } -/* 804771B8-804771C0 008238 0008+00 1/0 0/0 0/0 .text cc_damage_proc_Lv8Ball__12daObjCarry_cFv */ +/* 804771B8-804771C0 008238 0008+00 1/0 0/0 0/0 .text cc_damage_proc_Lv8Ball__12daObjCarry_cFv */ bool daObjCarry_c::cc_damage_proc_Lv8Ball() { return false; } -/* 804771C0-8047731C 008240 015C+00 7/7 0/0 0/0 .text eff_break_tuboBmd__12daObjCarry_cFUs4cXyz */ +/* 804771C0-8047731C 008240 015C+00 7/7 0/0 0/0 .text eff_break_tuboBmd__12daObjCarry_cFUs4cXyz */ void daObjCarry_c::eff_break_tuboBmd(u16 param_0, cXyz param_1) { J3DModelData* tubo_bmd = (J3DModelData*)dComIfG_getObjectRes("Always", 0x20); J3DAnmTexPattern* tubo_btp = (J3DAnmTexPattern*)dComIfG_getObjectRes("Always", 0x42); @@ -3857,7 +4125,7 @@ void daObjCarry_c::eff_break_tuboBmd(u16 param_0, cXyz param_1) { dComIfGp_particle_set(0x15D, ¤t.pos, NULL, NULL, 0xFF, dPa_control_c::getTsuboSelectTexEcallBack(param_0), fopAcM_GetRoomNo(this), NULL, NULL, ¶m_1); } -/* 8047731C-8047747C 00839C 0160+00 2/2 0/0 0/0 .text eff_break_kibakoBmd__12daObjCarry_cF4cXyz */ +/* 8047731C-8047747C 00839C 0160+00 2/2 0/0 0/0 .text eff_break_kibakoBmd__12daObjCarry_cF4cXyz */ void daObjCarry_c::eff_break_kibakoBmd(cXyz i_size) { cXyz pos(current.pos); @@ -3874,8 +4142,7 @@ void daObjCarry_c::eff_break_kibakoBmd(cXyz i_size) { } } -/* 8047747C-804774D4 0084FC 0058+00 1/0 0/0 0/0 .text eff_break_tsubo__12daObjCarry_cFv - */ +/* 8047747C-804774D4 0084FC 0058+00 1/0 0/0 0/0 .text eff_break_tsubo__12daObjCarry_cFv */ void daObjCarry_c::eff_break_tsubo() { u16 var_r31 = 0; @@ -3883,8 +4150,7 @@ void daObjCarry_c::eff_break_tsubo() { eff_break_tuboBmd(var_r31, spC); } -/* 804774D4-8047752C 008554 0058+00 1/0 0/0 0/0 .text eff_break_ootubo__12daObjCarry_cFv - */ +/* 804774D4-8047752C 008554 0058+00 1/0 0/0 0/0 .text eff_break_ootubo__12daObjCarry_cFv */ void daObjCarry_c::eff_break_ootubo() { u16 var_r31 = 1; @@ -3892,14 +4158,13 @@ void daObjCarry_c::eff_break_ootubo() { eff_break_tuboBmd(var_r31, spC); } -/* 8047752C-80477574 0085AC 0048+00 1/0 0/0 0/0 .text eff_break_kibako__12daObjCarry_cFv - */ +/* 8047752C-80477574 0085AC 0048+00 1/0 0/0 0/0 .text eff_break_kibako__12daObjCarry_cFv */ void daObjCarry_c::eff_break_kibako() { cXyz size(scale); eff_break_kibakoBmd(size); } -/* 80477574-80477578 0085F4 0004+00 1/0 0/0 0/0 .text eff_break_ironball__12daObjCarry_cFv */ +/* 80477574-80477578 0085F4 0004+00 1/0 0/0 0/0 .text eff_break_ironball__12daObjCarry_cFv */ void daObjCarry_c::eff_break_ironball() {} /* 80477578-804775BC 0085F8 0044+00 1/0 0/0 0/0 .text eff_break_taru__12daObjCarry_cFv */ @@ -3908,8 +4173,7 @@ void daObjCarry_c::eff_break_taru() { eff_break_kibakoBmd(size); } -/* 804775BC-80477614 00863C 0058+00 1/0 0/0 0/0 .text eff_break_dokuro__12daObjCarry_cFv - */ +/* 804775BC-80477614 00863C 0058+00 1/0 0/0 0/0 .text eff_break_dokuro__12daObjCarry_cFv */ void daObjCarry_c::eff_break_dokuro() { u16 var_r31 = 2; @@ -3917,8 +4181,7 @@ void daObjCarry_c::eff_break_dokuro() { eff_break_tuboBmd(var_r31, spC); } -/* 80477614-80477798 008694 0184+00 1/0 0/0 0/0 .text eff_break_bokkuri__12daObjCarry_cFv - */ +/* 80477614-80477798 008694 0184+00 1/0 0/0 0/0 .text eff_break_bokkuri__12daObjCarry_cFv */ void daObjCarry_c::eff_break_bokkuri() { cXyz pos(current.pos); pos.y += 50.0f; @@ -3939,8 +4202,7 @@ void daObjCarry_c::eff_break_bokkuri() { } } -/* 80477798-804777F0 008818 0058+00 1/0 0/0 0/0 .text eff_break_kotubo2__12daObjCarry_cFv - */ +/* 80477798-804777F0 008818 0058+00 1/0 0/0 0/0 .text eff_break_kotubo2__12daObjCarry_cFv */ void daObjCarry_c::eff_break_kotubo2() { u16 var_r31 = 1; @@ -3948,11 +4210,10 @@ void daObjCarry_c::eff_break_kotubo2() { eff_break_tuboBmd(var_r31, spC); } -/* 804777F0-804777F4 008870 0004+00 2/0 0/0 0/0 .text eff_break_LightBall__12daObjCarry_cFv */ +/* 804777F0-804777F4 008870 0004+00 2/0 0/0 0/0 .text eff_break_LightBall__12daObjCarry_cFv */ void daObjCarry_c::eff_break_LightBall() {} -/* 804777F4-8047784C 008874 0058+00 1/0 0/0 0/0 .text eff_break_ootubo2__12daObjCarry_cFv - */ +/* 804777F4-8047784C 008874 0058+00 1/0 0/0 0/0 .text eff_break_ootubo2__12daObjCarry_cFv */ void daObjCarry_c::eff_break_ootubo2() { u16 var_r31 = 0; @@ -3960,12 +4221,10 @@ void daObjCarry_c::eff_break_ootubo2() { eff_break_tuboBmd(var_r31, spC); } -/* 8047784C-80477850 0088CC 0004+00 1/0 0/0 0/0 .text eff_break_Lv8Ball__12daObjCarry_cFv - */ +/* 8047784C-80477850 0088CC 0004+00 1/0 0/0 0/0 .text eff_break_Lv8Ball__12daObjCarry_cFv */ void daObjCarry_c::eff_break_Lv8Ball() {} -/* 80477850-804778A8 0088D0 0058+00 1/0 0/0 0/0 .text eff_break_tsuboL8__12daObjCarry_cFv - */ +/* 80477850-804778A8 0088D0 0058+00 1/0 0/0 0/0 .text eff_break_tsuboL8__12daObjCarry_cFv */ void daObjCarry_c::eff_break_tsuboL8() { u16 var_r31 = 7; @@ -3973,7 +4232,7 @@ void daObjCarry_c::eff_break_tsuboL8() { eff_break_tuboBmd(var_r31, spC); } -/* 804778A8-80477900 008928 0058+00 1/0 0/0 0/0 .text eff_break_ootuboL8__12daObjCarry_cFv */ +/* 804778A8-80477900 008928 0058+00 1/0 0/0 0/0 .text eff_break_ootuboL8__12daObjCarry_cFv */ void daObjCarry_c::eff_break_ootuboL8() { u16 var_r31 = 7; @@ -3981,14 +4240,14 @@ void daObjCarry_c::eff_break_ootuboL8() { eff_break_tuboBmd(var_r31, spC); } -/* 80477900-80477990 008980 0090+00 1/1 0/0 0/0 .text se_break__12daObjCarry_cFP13cBgS_PolyInfo */ +/* 80477900-80477990 008980 0090+00 1/1 0/0 0/0 .text se_break__12daObjCarry_cFP13cBgS_PolyInfo */ void daObjCarry_c::se_break(cBgS_PolyInfo*) { if (field_0xdb3 == 0) { fopAcM_seStart(this, data().m_breakSound, 0); } } -/* 80477990-80477A14 008A10 0084+00 1/1 0/0 0/0 .text se_put__12daObjCarry_cFP13cBgS_PolyInfo */ +/* 80477990-80477A14 008A10 0084+00 1/1 0/0 0/0 .text se_put__12daObjCarry_cFP13cBgS_PolyInfo */ void daObjCarry_c::se_put(cBgS_PolyInfo*) { fopAcM_seStart(this, data().m_putSound, 0); } @@ -4003,16 +4262,18 @@ void daObjCarry_c::se_fall_water() { fopAcM_seStart(this, data().m_fallWaterSound, 0); } -/* 80477B1C-80477FE0 008B9C 04C4+00 7/7 0/0 0/0 .text calc_rot_axis_base__12daObjCarry_cFUc */ +/* 80477B1C-80477FE0 008B9C 04C4+00 7/7 0/0 0/0 .text calc_rot_axis_base__12daObjCarry_cFUc */ void daObjCarry_c::calc_rot_axis_base(u8 param_0) { field_0xd4c = ZeroQuat; if (fopAcM_checkCarryNow(this)) { if (field_0xd7b < 0) { - mDoMtx_quatSlerp(&field_0xd3c, &ZeroQuat, &field_0xd3c, 0.25f * daPy_getLinkPlayerActorClass()->getBaseAnimeFrameRate()); - } else { - field_0xd7b--; + f32 fVar1 = 0.25f * daPy_getLinkPlayerActorClass()->getBaseAnimeFrameRate(); + mDoMtx_quatSlerp(&field_0xd3c, &ZeroQuat, &field_0xd3c, fVar1); + return; } + + field_0xd7b--; return; } @@ -4063,7 +4324,7 @@ void daObjCarry_c::calc_rot_axis_base(u8 param_0) { field_0xd7b = param_0; } -/* 80477FE0-80478004 009060 0024+00 2/0 0/0 0/0 .text calc_rot_axis_tsubo__12daObjCarry_cFv */ +/* 80477FE0-80478004 009060 0024+00 2/0 0/0 0/0 .text calc_rot_axis_tsubo__12daObjCarry_cFv */ void daObjCarry_c::calc_rot_axis_tsubo() { cXyz sp20; int var_r30 = 0; @@ -4107,12 +4368,12 @@ void daObjCarry_c::calc_rot_axis_tsubo() { } } -/* 80478004-80478028 009084 0024+00 3/0 0/0 0/0 .text calc_rot_axis_ootubo__12daObjCarry_cFv */ +/* 80478004-80478028 009084 0024+00 3/0 0/0 0/0 .text calc_rot_axis_ootubo__12daObjCarry_cFv */ void daObjCarry_c::calc_rot_axis_ootubo() { calc_rot_axis_base(10); } -/* 80478028-8047814C 0090A8 0124+00 2/1 0/0 0/0 .text calc_rot_axis_kibako__12daObjCarry_cFv */ +/* 80478028-8047814C 0090A8 0124+00 2/1 0/0 0/0 .text calc_rot_axis_kibako__12daObjCarry_cFv */ void daObjCarry_c::calc_rot_axis_kibako() { if (fopAcM_checkCarryNow(this)) { mRotAxis = cXyz::Zero; @@ -4131,22 +4392,22 @@ void daObjCarry_c::calc_rot_axis_kibako() { } } -/* 8047814C-80478170 0091CC 0024+00 1/0 0/0 0/0 .text calc_rot_axis_ironball__12daObjCarry_cFv */ +/* 8047814C-80478170 0091CC 0024+00 1/0 0/0 0/0 .text calc_rot_axis_ironball__12daObjCarry_cFv */ void daObjCarry_c::calc_rot_axis_ironball() { calc_rot_axis_base(10); } -/* 80478170-80478190 0091F0 0020+00 1/0 0/0 0/0 .text calc_rot_axis_taru__12daObjCarry_cFv */ +/* 80478170-80478190 0091F0 0020+00 1/0 0/0 0/0 .text calc_rot_axis_taru__12daObjCarry_cFv */ void daObjCarry_c::calc_rot_axis_taru() { calc_rot_axis_kibako(); } -/* 80478190-804781B4 009210 0024+00 1/0 0/0 0/0 .text calc_rot_axis_dokuro__12daObjCarry_cFv */ +/* 80478190-804781B4 009210 0024+00 1/0 0/0 0/0 .text calc_rot_axis_dokuro__12daObjCarry_cFv */ void daObjCarry_c::calc_rot_axis_dokuro() { calc_rot_axis_base(5); } -/* 804781B4-804783C0 009234 020C+00 1/0 0/0 0/0 .text calc_rot_axis_bokkuri__12daObjCarry_cFv */ +/* 804781B4-804783C0 009234 020C+00 1/0 0/0 0/0 .text calc_rot_axis_bokkuri__12daObjCarry_cFv */ void daObjCarry_c::calc_rot_axis_bokkuri() { if (mMode == MODE_DROP || mMode == MODE_DB_DROP) { if (fopAcM_checkCarryNow(this)) { @@ -4169,25 +4430,22 @@ void daObjCarry_c::calc_rot_axis_bokkuri() { } else { mRotAxis = cXyz::Zero; mRotation = 0; - field_0xd60 = 0.0f; - field_0xd5c = 0.0f; - field_0xd68 = 0; - field_0xd66 = 0; - field_0xd64 = 0; + field_0xd5c = field_0xd60 = 0.0f; + field_0xd64 = field_0xd66 = field_0xd68 = 0; } } -/* 804783C0-804783E4 009440 0024+00 1/0 0/0 0/0 .text calc_rot_axis_kotubo2__12daObjCarry_cFv */ +/* 804783C0-804783E4 009440 0024+00 1/0 0/0 0/0 .text calc_rot_axis_kotubo2__12daObjCarry_cFv */ void daObjCarry_c::calc_rot_axis_kotubo2() { calc_rot_axis_base(5); } -/* 804783E4-80478408 009464 0024+00 2/0 0/0 0/0 .text calc_rot_axis_LightBall__12daObjCarry_cFv */ +/* 804783E4-80478408 009464 0024+00 2/0 0/0 0/0 .text calc_rot_axis_LightBall__12daObjCarry_cFv */ void daObjCarry_c::calc_rot_axis_LightBall() { calc_rot_axis_base(10); } -/* 80478408-8047842C 009488 0024+00 1/0 0/0 0/0 .text calc_rot_axis_Lv8Ball__12daObjCarry_cFv */ +/* 80478408-8047842C 009488 0024+00 1/0 0/0 0/0 .text calc_rot_axis_Lv8Ball__12daObjCarry_cFv */ void daObjCarry_c::calc_rot_axis_Lv8Ball() { calc_rot_axis_base(10); } @@ -4229,23 +4487,20 @@ void daObjCarry_c::set_wind_power() { } } -/* 80478808-80478828 009888 0020+00 3/0 0/0 0/0 .text exec_proc_tsubo__12daObjCarry_cFv - */ +/* 80478808-80478828 009888 0020+00 3/0 0/0 0/0 .text exec_proc_tsubo__12daObjCarry_cFv */ void daObjCarry_c::exec_proc_tsubo() { set_wind_power(); } -/* 80478828-80478848 0098A8 0020+00 3/0 0/0 0/0 .text exec_proc_ootubo__12daObjCarry_cFv - */ +/* 80478828-80478848 0098A8 0020+00 3/0 0/0 0/0 .text exec_proc_ootubo__12daObjCarry_cFv */ void daObjCarry_c::exec_proc_ootubo() { set_wind_power(); } -/* 80478848-8047884C 0098C8 0004+00 1/0 0/0 0/0 .text exec_proc_kibako__12daObjCarry_cFv - */ +/* 80478848-8047884C 0098C8 0004+00 1/0 0/0 0/0 .text exec_proc_kibako__12daObjCarry_cFv */ void daObjCarry_c::exec_proc_kibako() {} -/* 8047884C-804788C4 0098CC 0078+00 1/0 0/0 0/0 .text exec_proc_ironball__12daObjCarry_cFv */ +/* 8047884C-804788C4 0098CC 0078+00 1/0 0/0 0/0 .text exec_proc_ironball__12daObjCarry_cFv */ void daObjCarry_c::exec_proc_ironball() { if (mAcch.GetGroundH() != -G_CM3D_F_INF) { savePos(getSaveID(), current.pos); @@ -4256,18 +4511,20 @@ void daObjCarry_c::exec_proc_ironball() { /* 804788C4-804788C8 009944 0004+00 1/0 0/0 0/0 .text exec_proc_taru__12daObjCarry_cFv */ void daObjCarry_c::exec_proc_taru() {} -/* 804788C8-804788CC 009948 0004+00 1/0 0/0 0/0 .text exec_proc_dokuro__12daObjCarry_cFv - */ +/* 804788C8-804788CC 009948 0004+00 1/0 0/0 0/0 .text exec_proc_dokuro__12daObjCarry_cFv */ void daObjCarry_c::exec_proc_dokuro() {} -/* 804788CC-80478C18 00994C 034C+00 1/0 0/0 0/0 .text exec_proc_bokkuri__12daObjCarry_cFv - */ +/* 804788CC-80478C18 00994C 034C+00 1/0 0/0 0/0 .text exec_proc_bokkuri__12daObjCarry_cFv */ void daObjCarry_c::exec_proc_bokkuri() { - switch (field_0xd79) { + switch (mBokkuriExecProcMode) { case 0: if (mAcch.ChkGroundLanding()) { - field_0xd79 = 1; + mBokkuriExecProcMode = 1; + #if DEBUG + field_0xd77 = l_HIO.field_0xc; + #else field_0xd77 = 15; + #endif } break; case 1: @@ -4277,14 +4534,14 @@ void daObjCarry_c::exec_proc_bokkuri() { if (field_0xd77 == 0) { mSound.startSound(Z2SE_EN_DB_SHRINK, 0, -1); - field_0xd79 = 2; + mBokkuriExecProcMode = 2; } break; case 2: cLib_chaseUC(&field_0xd76, 0, 0xFF / 24); if (field_0xd76 == 0) { field_0xd75 = 0; - field_0xd79 = 3; + mBokkuriExecProcMode = 3; } break; case 3: @@ -4335,30 +4592,41 @@ void daObjCarry_c::exec_proc_bokkuri() { } } -/* 80478C18-80478CE4 009C98 00CC+00 2/0 0/0 0/0 .text exec_proc_LightBall__12daObjCarry_cFv */ +/* 80478C18-80478CE4 009C98 00CC+00 2/0 0/0 0/0 .text exec_proc_LightBall__12daObjCarry_cFv */ void daObjCarry_c::exec_proc_LightBall() { mDalkmistInf.mPos = current.pos; mLightAtSph.SetC(current.pos); dComIfG_Ccsp()->Set(&mLightAtSph); - if (mCyl.ChkTgHit() && mCyl.GetTgHitObj()) { - mSound.startCollisionSE(mCyl.GetTgHitObjHitSeID(1), 2, NULL); + #if DEBUG + mDalkmistInf.field_0xc = KREG_F(10) + 750.0f; + #endif + + if (mCyl.ChkTgHit()) { + cCcD_Obj* tgHitObj = mCyl.GetTgHitObj(); + if (tgHitObj) { + u32 hitSeID = mCyl.GetTgHitObjHitSeID(1); + mSound.startCollisionSE(hitSeID, 2, NULL); + } } mSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); } -/* 80478CE4-80478D78 009D64 0094+00 1/0 0/0 0/0 .text exec_proc_Lv8Ball__12daObjCarry_cFv - */ +/* 80478CE4-80478D78 009D64 0094+00 1/0 0/0 0/0 .text exec_proc_Lv8Ball__12daObjCarry_cFv */ void daObjCarry_c::exec_proc_Lv8Ball() { - if (mCyl.ChkTgHit() && mCyl.GetTgHitObj()) { - mSound.startCollisionSE(mCyl.GetTgHitObjHitSeID(1), 2, NULL); + if (mCyl.ChkTgHit()) { + cCcD_Obj* tgHitObj = mCyl.GetTgHitObj(); + if (tgHitObj) { + u32 hitSeID = mCyl.GetTgHitObjHitSeID(1); + mSound.startCollisionSE(hitSeID, 2, NULL); + } } mSound.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); } -/* 80478D78-80478F50 009DF8 01D8+00 1/1 0/0 0/0 .text bg_damage_proc_call__12daObjCarry_cFv */ +/* 80478D78-80478F50 009DF8 01D8+00 1/1 0/0 0/0 .text bg_damage_proc_call__12daObjCarry_cFv */ void daObjCarry_c::bg_damage_proc_call() { typedef bool (daObjCarry_c::*type_func)(); static type_func l_type_func[] = { @@ -4371,12 +4639,20 @@ void daObjCarry_c::bg_damage_proc_call() { &daObjCarry_c::bg_damage_proc_kotubo, &daObjCarry_c::bg_damage_proc_ootubo, }; - if (field_0xdae == 0) { - field_0xdae |= (this->*l_type_func[mType])(); + #if DEBUG + if (mType == 3 || l_HIO.field_0x5 == 0 || l_HIO.field_0x6 == 0) { + #endif + + if (field_0xdae == 0) { + field_0xdae |= (this->*l_type_func[mType])(); + } + + #if DEBUG } + #endif } -/* 80478F50-80479128 009FD0 01D8+00 1/1 0/0 0/0 .text cc_damage_proc_call__12daObjCarry_cFv */ +/* 80478F50-80479128 009FD0 01D8+00 1/1 0/0 0/0 .text cc_damage_proc_call__12daObjCarry_cFv */ void daObjCarry_c::cc_damage_proc_call() { typedef bool (daObjCarry_c::*type_func)(); static type_func l_type_func[] = { @@ -4389,9 +4665,17 @@ void daObjCarry_c::cc_damage_proc_call() { &daObjCarry_c::cc_damage_proc_kotubo, &daObjCarry_c::cc_damage_proc_ootubo, }; + #if DEBUG + if (l_HIO.field_0x5 == 0 || l_HIO.field_0x6 == 0) { + #endif + if (field_0xdae == 0) { field_0xdae |= (this->*l_type_func[mType])(); } + + #if DEBUG + } + #endif } /* 80479128-804792D4 00A1A8 01AC+00 1/1 0/0 0/0 .text eff_break_call__12daObjCarry_cFv */ @@ -4426,7 +4710,7 @@ void daObjCarry_c::calc_rot_call() { (this->*l_type_func[mType])(); } -/* 80479480-8047962C 00A500 01AC+00 1/1 0/0 0/0 .text obj_execute_proc_call__12daObjCarry_cFv */ +/* 80479480-8047962C 00A500 01AC+00 1/1 0/0 0/0 .text obj_execute_proc_call__12daObjCarry_cFv */ void daObjCarry_c::obj_execute_proc_call() { typedef void (daObjCarry_c::*type_func)(); static type_func l_type_func[] = { @@ -4442,8 +4726,7 @@ void daObjCarry_c::obj_execute_proc_call() { (this->*l_type_func[mType])(); } -/* 8047962C-80479648 00A6AC 001C+00 1/1 0/0 0/0 .text setTgHitCallBack__12daObjCarry_cFv - */ +/* 8047962C-80479648 00A6AC 001C+00 1/1 0/0 0/0 .text setTgHitCallBack__12daObjCarry_cFv */ void daObjCarry_c::setTgHitCallBack() { typedef void (*TgCallBack)(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*); static TgCallBack l_callback[] = { @@ -4457,8 +4740,7 @@ void daObjCarry_c::setTgHitCallBack() { mCyl.SetTgHitCallback(l_callback[mType]); } -/* 80479648-80479664 00A6C8 001C+00 1/1 0/0 0/0 .text setCoHitCallBack__12daObjCarry_cFv - */ +/* 80479648-80479664 00A6C8 001C+00 1/1 0/0 0/0 .text setCoHitCallBack__12daObjCarry_cFv */ void daObjCarry_c::setCoHitCallBack() { typedef void (*CoCallBack)(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*); static CoCallBack l_callback[] = { @@ -4488,27 +4770,27 @@ int daObjCarry_c::CreateInitCall() { return (this->*l_func[mType])(); } -/* 80479810-80479830 00A890 0020+00 1/0 0/0 0/0 .text daObjCarry_Draw__FP12daObjCarry_c - */ +/* 80479810-80479830 00A890 0020+00 1/0 0/0 0/0 .text daObjCarry_Draw__FP12daObjCarry_c */ static int daObjCarry_Draw(daObjCarry_c* i_this) { return i_this->draw(); } -/* 80479830-80479850 00A8B0 0020+00 1/0 0/0 0/0 .text daObjCarry_Execute__FP12daObjCarry_c */ +/* 80479830-80479850 00A8B0 0020+00 1/0 0/0 0/0 .text daObjCarry_Execute__FP12daObjCarry_c */ static int daObjCarry_Execute(daObjCarry_c* i_this) { return i_this->execute(); } -/* 80479850-80479870 00A8D0 0020+00 1/0 0/0 0/0 .text daObjCarry_Delete__FP12daObjCarry_c - */ +/* 80479850-80479870 00A8D0 0020+00 1/0 0/0 0/0 .text daObjCarry_Delete__FP12daObjCarry_c */ static int daObjCarry_Delete(daObjCarry_c* i_this) { + fpc_ProcID id = fopAcM_GetID(i_this); return i_this->_delete(); } -/* 80479870-80479890 00A8F0 0020+00 1/0 0/0 0/0 .text daObjCarry_Create__FP10fopAc_ac_c - */ -static int daObjCarry_Create(fopAc_ac_c* i_this) { - return ((daObjCarry_c*)i_this)->create(); +/* 80479870-80479890 00A8F0 0020+00 1/0 0/0 0/0 .text daObjCarry_Create__FP10fopAc_ac_c */ +static int daObjCarry_Create(fopAc_ac_c* a_this) { + daObjCarry_c* i_this = (daObjCarry_c*)a_this; + fpc_ProcID id = fopAcM_GetID(a_this); + return i_this->create(); } /* 8047B110-8047B130 -00001 0020+00 1/0 0/0 0/0 .data l_daObjCarry_Method */ diff --git a/src/d/actor/d_a_obj_flag2.cpp b/src/d/actor/d_a_obj_flag2.cpp index 526491796ea..5e5b08006ec 100644 --- a/src/d/actor/d_a_obj_flag2.cpp +++ b/src/d/actor/d_a_obj_flag2.cpp @@ -159,8 +159,7 @@ cXyz FlagCloth_c::calcFlagFactor(cXyz* param_1, cXyz* param_2, cXyz* param_3, in return flagFactor; } -/* 80BEC928-80BECAE0 000348 01B8+00 1/1 0/0 0/0 .text - * calcFlagFactorSub__11FlagCloth_cFP4cXyzP4cXyzP4cXyzf */ +/* 80BEC928-80BECAE0 000348 01B8+00 1/1 0/0 0/0 .text calcFlagFactorSub__11FlagCloth_cFP4cXyzP4cXyzP4cXyzf */ void FlagCloth_c::calcFlagFactorSub(cXyz* param_1, cXyz* param_2, cXyz* param_3, f32 param_4) { cXyz acStack_2c = *param_2 - *param_1; param_4 = acStack_2c.abs() - param_4; @@ -170,7 +169,7 @@ void FlagCloth_c::calcFlagFactorSub(cXyz* param_1, cXyz* param_2, cXyz* param_3, *param_3 += cStack_38; } -/* 80BECAE0-80BECC34 000500 0154+00 2/2 0/0 0/0 .text calcFlagNormal__11FlagCloth_cFP4cXyzi */ +/* 80BECAE0-80BECC34 000500 0154+00 2/2 0/0 0/0 .text calcFlagNormal__11FlagCloth_cFP4cXyzi */ void FlagCloth_c::calcFlagNormal(cXyz* o_normal, int param_2) { static int rel_pos_idx_tbl[147] = { 1, 2, -1, -1, -1, -1, -1, 3, 4, 2, 0, -1, -1, -1, 0, 1, 4, 5, -1, -1, -1, diff --git a/src/d/actor/d_a_obj_ito.cpp b/src/d/actor/d_a_obj_ito.cpp index f3e9dcf036a..2bbc2b1128d 100644 --- a/src/d/actor/d_a_obj_ito.cpp +++ b/src/d/actor/d_a_obj_ito.cpp @@ -19,6 +19,14 @@ daObj_Ito_HIO_c::daObj_Ito_HIO_c() { field_0x10 = 1; } +#ifdef DEBUG +void daObj_Ito_HIO_c::genMessage(JORMContext* ctx) { + ctx->genLabel(" ぶら下りOBJ糸", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("糸長さ基準値", &field_0x8, 0.0f, 10.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + ctx->genSlider("糸位置補正値", &field_0xc, -100.0f, 100.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); +} +#endif + /* 8047D9C8-8047D9CC 000008 0004+00 2/2 0/0 0/0 .bss None */ static u8 l_initHio; diff --git a/src/d/actor/d_a_passer_mng.cpp b/src/d/actor/d_a_passer_mng.cpp index dd3e566c393..193313e9c7b 100644 --- a/src/d/actor/d_a_passer_mng.cpp +++ b/src/d/actor/d_a_passer_mng.cpp @@ -10,6 +10,217 @@ #include "d/d_path.h" #include "d/d_stage.h" +class daPasserMng_Attr_c { +public: + /* 0x0 */ int appearance_interval; + /* 0x4 */ s16 npc_type; +}; + +class daPasserMng_Hio_c : public mDoHIO_entry_c { +public: + daPasserMng_Hio_c(); + void default_set(); + void ct(); + void dt(); + void genMessage(JORMContext*); + + /* 0x8 */ int field_0x8; + /* 0xC */ daPasserMng_Attr_c mAttr; +}; + +#if DEBUG + +daPasserMng_Hio_c::daPasserMng_Hio_c() { + field_0x8 = 0; + default_set(); +} + +void daPasserMng_Hio_c::default_set() { + mAttr = daPasserMng_c::M_attr; +} + +void daPasserMng_Hio_c::ct() { + if (field_0x8++ == 0) { + entryHIO("通行人管理アクター"); + } +} + +void daPasserMng_Hio_c::dt() { + if (--field_0x8 == 0) { + removeHIO(); + } +} + +void daPasserMng_Hio_c::genMessage(JORMContext* ctx) { + ctx->genLabel("§ 通行人管理パラメータ設定 §\n", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); // § Pedestrian Management Parameter Settings § + ctx->startComboBox("NPC種類", (s16*)&mAttr.npc_type, 0, NULL, 0xFFFF, 0xFFFF, 0x100, 0x1A); // NPC Type + ctx->genComboBoxItem("ランダム", -1); // Random + ctx->genComboBoxItem("兵士A\t\t手ぶら", 0); + ctx->genComboBoxItem("兵士B\t\t手ぶら", 1); + ctx->genComboBoxItem("男の子A\t手ぶら", 2); + ctx->genComboBoxItem("じいさんA\t手ぶら", 3); + ctx->genComboBoxItem("町人B\t\t手ぶら", 4); + ctx->genComboBoxItem("町人D\t\t手ぶら", 5); + ctx->genComboBoxItem("町人C\t\t手ぶら", 6); + ctx->genComboBoxItem("少年A\t\t手ぶら", 7); + ctx->genComboBoxItem("町人F標準\t手ぶら", 8); + ctx->genComboBoxItem("町人E標準\t手ぶら", 9); + ctx->genComboBoxItem("男の子B\t手ぶら", 10); + ctx->genComboBoxItem("じいさんB\t手ぶら", 11); + ctx->genComboBoxItem("町人G標準\t手ぶら", 12); + ctx->genComboBoxItem("町人H標準\t手ぶら", 13); + ctx->genComboBoxItem("町人Iチビ\t手ぶら", 14); + ctx->genComboBoxItem("少年B\t\t手ぶら", 15); + ctx->genComboBoxItem("町娘A\t\t手ぶら", 16); + ctx->genComboBoxItem("町おばさんA\t手ぶら", 17); + ctx->genComboBoxItem("町人A\t\t手ぶら", 18); + ctx->genComboBoxItem("女の子A\t手ぶら", 19); + ctx->genComboBoxItem("ばあさんA\t手ぶら", 20); + ctx->genComboBoxItem("少女A\t\t手ぶら", 21); + ctx->genComboBoxItem("町娘B\t\t手ぶら", 22); + ctx->genComboBoxItem("町娘C\t\t手ぶら", 23); + ctx->genComboBoxItem("町おばさんB\t手ぶら", 24); + ctx->genComboBoxItem("町人Jスカート\t手ぶら", 25); + ctx->genComboBoxItem("女の子B\t手ぶら", 26); + ctx->genComboBoxItem("ばあさんB\t手ぶら", 27); + ctx->genComboBoxItem("少女B\t\t手ぶら", 28); + ctx->genComboBoxItem("町娘D\t\t手ぶら", 29); + ctx->genComboBoxItem("兵士A\t\t槍", 30); + ctx->genComboBoxItem("兵士B\t\t槍", 31); + ctx->genComboBoxItem("男の子A\t槍", 32); + ctx->genComboBoxItem("じいさんA\t壺♂", 33); + ctx->genComboBoxItem("町人B\t\t壺♂", 34); + ctx->genComboBoxItem("町人D\t\t壺♂", 35); + ctx->genComboBoxItem("町人C\t\t壺♂", 36); + ctx->genComboBoxItem("少年A\t\t壺♂", 37); + ctx->genComboBoxItem("町人F標準\t壺♂", 38); + ctx->genComboBoxItem("町人E標準\t壺♂", 39); + ctx->genComboBoxItem("男の子B\t壺♂", 40); + ctx->genComboBoxItem("じいさんB\t壺♂", 41); + ctx->genComboBoxItem("町人G標準\t壺♂", 42); + ctx->genComboBoxItem("町人H標準\t壺♂", 43); + ctx->genComboBoxItem("町人Iチビ\t壺♂", 44); + ctx->genComboBoxItem("少年B\t\t壺♂", 45); + ctx->genComboBoxItem("町娘A\t\t壺♀", 46); + ctx->genComboBoxItem("町おばさんA\t壺♀", 47); + ctx->genComboBoxItem("町人A\t\t壺♀", 48); + ctx->genComboBoxItem("女の子\tA\t壺♀", 49); + ctx->genComboBoxItem("ばあさんA\t壺♀", 50); + ctx->genComboBoxItem("少女A\t\t壺♀", 51); + ctx->genComboBoxItem("町娘B\t\t壺♀", 52); + ctx->genComboBoxItem("町娘C\t\t壺♀", 53); + ctx->genComboBoxItem("町おばさんB\t壺♀", 54); + ctx->genComboBoxItem("町人Jスカート\t壺♀", 55); + ctx->genComboBoxItem("女の子B\t壺♀", 56); + ctx->genComboBoxItem("ばあさんB\t壺♀", 57); + ctx->genComboBoxItem("少女B\t\t壺♀", 58); + ctx->genComboBoxItem("町娘D\t\t壺♀", 59); + ctx->genComboBoxItem("町娘A\t\tほうき", 60); + ctx->genComboBoxItem("町おばさんA\tほうき", 61); + ctx->genComboBoxItem("町人A\t\tほうき", 62); + ctx->genComboBoxItem("女の子\tA\tほうき", 63); + ctx->genComboBoxItem("ばあさんA\tほうき", 64); + ctx->genComboBoxItem("少女A\t\tほうき", 65); + ctx->genComboBoxItem("町娘B\t\tほうき", 66); + ctx->genComboBoxItem("町娘C\t\tほうき", 67); + ctx->genComboBoxItem("町おばさんB\tほうき", 68); + ctx->genComboBoxItem("町人Jスカート\tほうき", 69); + ctx->genComboBoxItem("女の子B\tほうき", 70); + ctx->genComboBoxItem("ばあさんB\tほうき", 71); + ctx->genComboBoxItem("少女B\t\tほうき", 72); + ctx->genComboBoxItem("町娘D\t\tほうき", 73); + ctx->genComboBoxItem("じいさんA\t籠♂", 74); + ctx->genComboBoxItem("町人B\t\t籠♂", 75); + ctx->genComboBoxItem("町人D\t\t籠♂", 76); + ctx->genComboBoxItem("町人C\t\t籠♂", 77); + ctx->genComboBoxItem("少年A\t\t籠♂", 78); + ctx->genComboBoxItem("町人F標準\t籠♂", 79); + ctx->genComboBoxItem("町人E標準\t籠♂", 80); + ctx->genComboBoxItem("男の子B\t籠♂", 81); + ctx->genComboBoxItem("じいさんB\t籠♂", 82); + ctx->genComboBoxItem("町人G標準\t籠♂", 83); + ctx->genComboBoxItem("町人H標準\t籠♂", 84); + ctx->genComboBoxItem("町人Iチビ\t籠♂", 85); + ctx->genComboBoxItem("少年B\t\t籠♂", 86); + ctx->genComboBoxItem("町娘A\t\t籠♀", 87); + ctx->genComboBoxItem("町おばさんA\t籠♀", 88); + ctx->genComboBoxItem("町人A\t\t籠♀", 89); + ctx->genComboBoxItem("女の子\tA\t籠♀", 90); + ctx->genComboBoxItem("ばあさんA\t籠♀", 91); + ctx->genComboBoxItem("少女A\t\t籠♀", 92); + ctx->genComboBoxItem("町娘B\t\t籠♀", 93); + ctx->genComboBoxItem("町娘C\t\t籠♀", 94); + ctx->genComboBoxItem("町おばさんB\t籠♀", 95); + ctx->genComboBoxItem("町人Jスカート\t籠♀", 96); + ctx->genComboBoxItem("女の子B\t籠♀", 97); + ctx->genComboBoxItem("ばあさんB\t籠♀", 98); + ctx->genComboBoxItem("少女B\t\t籠♀", 99); + ctx->genComboBoxItem("町娘D\t\t籠♀", 100); + ctx->genComboBoxItem("じいさんA\tセレブバッグ♂", 101); + ctx->genComboBoxItem("町人B\t\tセレブバッグ♂", 102); + ctx->genComboBoxItem("町人D\t\tセレブバッグ♂", 103); + ctx->genComboBoxItem("町人C\t\tセレブバッグ♂", 104); + ctx->genComboBoxItem("少年A\t\tセレブバッグ♂", 105); + ctx->genComboBoxItem("町人F標準\tセレブバッグ♂", 106); + ctx->genComboBoxItem("町人E標準\tセレブバッグ♂", 107); + ctx->genComboBoxItem("男の子B\tセレブバッグ♂", 108); + ctx->genComboBoxItem("じいさんB\tセレブバッグ♂", 109); + ctx->genComboBoxItem("町人G標準\tセレブバッグ♂", 110); + ctx->genComboBoxItem("町人H標準\tセレブバッグ♂", 111); + ctx->genComboBoxItem("町人Iチビ\tセレブバッグ♂", 112); + ctx->genComboBoxItem("少年B\t\tセレブバッグ♂", 113); + ctx->genComboBoxItem("じいさんA\tマロバッグ♂", 114); + ctx->genComboBoxItem("町人B\t\tマロバッグ♂", 115); + ctx->genComboBoxItem("町人D\t\tマロバッグ♂", 116); + ctx->genComboBoxItem("町人C\t\tマロバッグ♂", 117); + ctx->genComboBoxItem("少年A\t\tマロバッグ♂", 118); + ctx->genComboBoxItem("町人F標準\tマロバッグ♂", 119); + ctx->genComboBoxItem("町人E標準\tマロバッグ♂", 120); + ctx->genComboBoxItem("男の子B\tマロバッグ♂", 121); + ctx->genComboBoxItem("じいさんB\tマロバッグ♂", 122); + ctx->genComboBoxItem("町人G標準\tマロバッグ♂", 123); + ctx->genComboBoxItem("町人H標準\tマロバッグ♂", 124); + ctx->genComboBoxItem("町人Iチビ\tマロバッグ♂", 125); + ctx->genComboBoxItem("少年B\t\tマロバッグ♂", 126); + ctx->genComboBoxItem("町娘A\t\tセレブバッグ♀", 127); + ctx->genComboBoxItem("町おばさんA\tセレブバッグ♀", 128); + ctx->genComboBoxItem("町人A\t\tセレブバッグ♀", 129); + ctx->genComboBoxItem("女の子\tA\tセレブバッグ♀", 130); + ctx->genComboBoxItem("ばあさんA\tセレブバッグ♀", 131); + ctx->genComboBoxItem("少女A\t\tセレブバッグ♀", 132); + ctx->genComboBoxItem("町娘B\t\tセレブバッグ♀", 133); + ctx->genComboBoxItem("町娘C\t\tセレブバッグ♀", 134); + ctx->genComboBoxItem("町おばさんB\tセレブバッグ♀", 135); + ctx->genComboBoxItem("町人Jスカート\tセレブバッグ♀", 136); + ctx->genComboBoxItem("女の子B\tセレブバッグ♀", 137); + ctx->genComboBoxItem("ばあさんB\tセレブバッグ♀", 138); + ctx->genComboBoxItem("少女B\t\tセレブバッグ♀", 139); + ctx->genComboBoxItem("町娘D\t\tセレブバッグ♀", 140); + ctx->genComboBoxItem("町娘A\t\tマロバッグ♀", 141); + ctx->genComboBoxItem("町おばさんA\tマロバッグ♀", 142); + ctx->genComboBoxItem("町人A\t\tマロバッグ♀", 143); + ctx->genComboBoxItem("女の子\tA\tマロバッグ♀", 144); + ctx->genComboBoxItem("ばあさんA\tマロバッグ♀", 145); + ctx->genComboBoxItem("少女A\t\tマロバッグ♀", 146); + ctx->genComboBoxItem("町娘B\t\tマロバッグ♀", 147); + ctx->genComboBoxItem("町娘C\t\tマロバッグ♀", 148); + ctx->genComboBoxItem("町おばさんB\tマロバッグ♀", 149); + ctx->genComboBoxItem("町人Jスカート\tマロバッグ♀", 150); + ctx->genComboBoxItem("女の子B\tマロバッグ♀", 151); + ctx->genComboBoxItem("ばあさんB\tマロバッグ♀", 152); + ctx->genComboBoxItem("少女B\t\tマロバッグ♀", 153); + ctx->genComboBoxItem("町娘D\t\tマロバッグ♀", 154); + ctx->endComboBox(); + ctx->genSlider("出現間隔", (s32*)&mAttr.appearance_interval, 0, 0xE10, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); +} + +daPasserMng_Attr_c const daPasserMng_c::M_attr = { + 0, + 0xFFFF, +}; + +#endif + /* 80D45718-80D45738 000078 0020+00 1/0 0/0 0/0 .text daPasserMng_Execute__FP13daPasserMng_c */ static int daPasserMng_Execute(daPasserMng_c* i_this) { return i_this->execute(); @@ -124,12 +335,14 @@ int daPasserMng_c::getPasserParam() { /* 80D45E14-80D466FC 000774 08E8+00 2/1 0/0 0/0 .text getLuggageParamHigh__13daPasserMng_cFUl */ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { int paramLow; + int rndValue; paramLow = 0; switch (param_1) { case 0: case 1: - if (cLib_getRndValue(0, 2) != 0) { + rndValue = cLib_getRndValue(0, 2); + if (rndValue != 0) { paramLow = 2; } break; @@ -139,8 +352,9 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { case 10: case 0xf: /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x119])) { - switch(cLib_getRndValue(0, 4)) { + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[0x119])) { + rndValue = cLib_getRndValue(0, 4); + switch(rndValue) { case 0: paramLow = 0; break; @@ -155,7 +369,8 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { break; } } else { - switch(cLib_getRndValue(0, 3)) { + rndValue = cLib_getRndValue(0, 3); + switch(rndValue) { case 0: paramLow = 0; break; @@ -171,8 +386,9 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { case 3: case 0xb: /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x119])) { - switch(cLib_getRndValue(0, 3)) { + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[0x119])) { + rndValue = cLib_getRndValue(0, 3); + switch(rndValue) { case 0: paramLow = 0; break; @@ -184,7 +400,8 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { break; } } else { - switch (cLib_getRndValue(0, 2)) { + rndValue = cLib_getRndValue(0, 2); + switch (rndValue) { case 0: paramLow = 0; break; @@ -199,8 +416,9 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { case 0xc: case 0xd: /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x119])) { - switch(cLib_getRndValue(0, 4)) { + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[0x119])) { + rndValue = cLib_getRndValue(0, 4); + switch(rndValue) { case 0: paramLow = 0; break; @@ -215,7 +433,8 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { break; } } else { - switch(cLib_getRndValue(0, 4)) { + rndValue = cLib_getRndValue(0, 4); + switch(rndValue) { case 0: paramLow = 0; break; @@ -234,8 +453,9 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { case 6: case 0xe: /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x119])) { - switch(cLib_getRndValue(0, 3)) { + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[0x119])) { + rndValue = cLib_getRndValue(0, 3); + switch(rndValue) { case 0: paramLow = 0; break; @@ -247,7 +467,8 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { break; } } else { - switch (cLib_getRndValue(0, 2)) { + rndValue = cLib_getRndValue(0, 2); + switch (rndValue) { case 0: paramLow = 0; break; @@ -259,8 +480,9 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { break; case 7: /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x119])) { - switch(cLib_getRndValue(0, 3)) { + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[0x119])) { + rndValue = cLib_getRndValue(0, 3); + switch(rndValue) { case 0: paramLow = 0; break; @@ -272,7 +494,8 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { break; } } else { - switch (cLib_getRndValue(0, 2)) { + rndValue = cLib_getRndValue(0, 2); + switch (rndValue) { case 0: paramLow = 0; break; @@ -285,8 +508,9 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { case 0x10: case 0x17: /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x119])) { - switch(cLib_getRndValue(0, 4)) { + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[0x119])) { + rndValue = cLib_getRndValue(0, 4); + switch(rndValue) { case 0: paramLow = 0; break; @@ -301,7 +525,8 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { break; } } else { - switch(cLib_getRndValue(0, 4)) { + rndValue = cLib_getRndValue(0, 4); + switch(rndValue) { case 0: paramLow = 0; break; @@ -320,8 +545,9 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { case 0x11: case 0x18: /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x119])) { - switch(cLib_getRndValue(0, 4)) { + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[0x119])) { + rndValue = cLib_getRndValue(0, 4); + switch(rndValue) { case 0: paramLow = 0; break; @@ -336,7 +562,8 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { break; } } else { - switch(cLib_getRndValue(0, 3)) { + rndValue = cLib_getRndValue(0, 3); + switch(rndValue) { case 0: paramLow = 0; break; @@ -352,8 +579,9 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { case 0x12: case 0x19: /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x119])) { - switch(cLib_getRndValue(0, 5)) { + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[0x119])) { + rndValue = cLib_getRndValue(0, 5); + switch(rndValue) { case 0: paramLow = 0; break; @@ -371,7 +599,8 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { break; } } else { - switch(cLib_getRndValue(0, 4)) { + rndValue = cLib_getRndValue(0, 4); + switch(rndValue) { case 0: paramLow = 0; break; @@ -390,8 +619,9 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { case 0x13: case 0x1a: /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x119])) { - switch(cLib_getRndValue(0, 3)) { + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[0x119])) { + rndValue = cLib_getRndValue(0, 3); + switch(rndValue) { case 0: paramLow = 0; break; @@ -403,7 +633,8 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { break; } } else { - switch (cLib_getRndValue(0, 2)) { + rndValue = cLib_getRndValue(0, 2); + switch (rndValue) { case 0: paramLow = 0; break; @@ -416,8 +647,9 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { case 0x14: case 0x1b: /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x119])) { - switch(cLib_getRndValue(0, 3)) { + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[0x119])) { + rndValue = cLib_getRndValue(0, 3); + switch(rndValue) { case 0: paramLow = 0; break; @@ -429,7 +661,8 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { break; } } else { - switch (cLib_getRndValue(0, 2)) { + rndValue = cLib_getRndValue(0, 2); + switch (rndValue) { case 0: paramLow = 0; break; @@ -442,8 +675,9 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { case 0x15: case 0x1c: /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x119])) { - switch(cLib_getRndValue(0, 3)) { + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[0x119])) { + rndValue = cLib_getRndValue(0, 3); + switch(rndValue) { case 0: paramLow = 0; break; @@ -455,7 +689,8 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { break; } } else { - switch(cLib_getRndValue(0, 3)) { + rndValue = cLib_getRndValue(0, 3); + switch(rndValue) { case 0: paramLow = 0; break; @@ -471,8 +706,9 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { case 0x16: case 0x1d: /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[0x119])) { - switch(cLib_getRndValue(0, 4)) { + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[0x119])) { + rndValue = cLib_getRndValue(0, 4); + switch(rndValue) { case 0: paramLow = 0; break; @@ -487,7 +723,8 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { break; } } else { - switch(cLib_getRndValue(0, 3)) { + rndValue = cLib_getRndValue(0, 3); + switch(rndValue) { case 0: paramLow = 0; break; @@ -507,25 +744,27 @@ int daPasserMng_c::getLuggageParamHigh(u32 param_1) { return paramLow << 8; } -/* 80D466FC-80D46704 00105C 0008+00 1/0 0/0 0/0 .text daPasserMng_IsDelete__FP13daPasserMng_c */ +/* 80D466FC-80D46704 00105C 0008+00 1/0 0/0 0/0 .text daPasserMng_IsDelete__FP13daPasserMng_c */ static int daPasserMng_IsDelete(daPasserMng_c* i_this) { return 1; } /* 80D46704-80D46748 001064 0044+00 1/0 0/0 0/0 .text daPasserMng_Delete__FP13daPasserMng_c */ static int daPasserMng_Delete(daPasserMng_c* i_this) { - fopAcM_GetID(i_this); + fpc_ProcID id = fopAcM_GetID(i_this); i_this->~daPasserMng_c(); return 1; } -/* 80D46748-80D46768 0010A8 0020+00 1/0 0/0 0/0 .text daPasserMng_Create__FP10fopAc_ac_c - */ -static int daPasserMng_Create(fopAc_ac_c* i_this) { - fopAcM_GetID(i_this); - return static_cast(i_this)->create(); +/* 80D46748-80D46768 0010A8 0020+00 1/0 0/0 0/0 .text daPasserMng_Create__FP10fopAc_ac_c */ +static int daPasserMng_Create(fopAc_ac_c* a_this) { + daPasserMng_c* i_this = (daPasserMng_c*)a_this; + fpc_ProcID id = fopAcM_GetID(a_this); + return i_this->create(); } +daPasserMng_c::daPasserMng_c() {} + /* 80D46768-80D467C0 0010C8 0058+00 1/1 0/0 0/0 .text create__13daPasserMng_cFv */ int daPasserMng_c::create() { fopAcM_ct(this, daPasserMng_c); @@ -535,6 +774,10 @@ int daPasserMng_c::create() { /* 80D467C0-80D46B9C 001120 03DC+00 1/1 0/0 0/0 .text create_init__13daPasserMng_cFv */ void daPasserMng_c::create_init() { + #if DEBUG + M_hio.ct(); + #endif + npcId = getDetailLevel() == 0 ? PROC_NPC_PASSER : PROC_NPC_PASSER2; mPath = dPath_GetRoomPath(getPathID(), fopAcM_GetHomeRoomNo(this)); JUT_ASSERT(542, mPath != NULL); @@ -548,7 +791,7 @@ void daPasserMng_c::create_init() { intervalTime = getIntervalTime() * 5; mTime = time; dayOfWeek = getDayOfWeek(); - if ((u8)getStartTime() != 0xff && (u8)getEndTime() != 0xff) { + if (getStartTime() != 0xff && (u8)getEndTime() != 0xff) { startTime = (getStartTime() / 10) * 60 + (getStartTime() % 10) * 10; endTime = (getEndTime() / 10) * 60 + (getEndTime() % 10) * 10; if (mTime > endTime) { @@ -561,47 +804,52 @@ void daPasserMng_c::create_init() { } else { field_0x596 = 1; } + for (int i = 0; i < 5; i++) { field_0x58a[i] = 0xffff; } + field_0x597 = 0; if (field_0x596 != 0 || (startTime < time && endTime > time)) { int max; if (getMaxNum() < mPath->m_num - 2) { max = getMaxNum(); } else { - max = mPath->m_num - 2; + int num = mPath->m_num - 2; + max = num; } - int i; + int* arr = new int[max]; - int ind = 0; - while (ind < max) { + int i = 0; + for (; i < max;) { int rnd = cLib_getRndValue(1, mPath->m_num - 2); bool bVar1 = true; - for (int i = 0; i < ind; i++) { - if (rnd == arr[i]) { + for (int j = 0; j < i; j++) { + if (rnd == arr[j]) { bVar1 = false; break; } } + if (bVar1) { - arr[ind] = rnd; - ind++; + arr[i] = rnd; + i++; } } + #ifdef DEBUG OS_REPORT("初期ばらまき位置 Path=%d ", getPathID()); - for (int i = 0; i < max; i++) { + for (i = 0; i < max; i++) { OS_REPORT("%d, ", arr[i]); } #endif + OS_REPORT("\n"); for (i = 0; i < max; i++) { dPnt* pnti0 = dPath_GetPnt(mPath, arr[i]); dPnt* pnti1 = dPath_GetPnt(mPath, arr[i] + 1); cXyz cStack_28(pnti0->m_position); - s16 sVar11 = cLib_targetAngleY(cStack_28, pnti1->m_position); - csXyz cStack_30(endTime, sVar11, 0); + csXyz cStack_30(endTime, cLib_targetAngleY(cStack_28, pnti1->m_position), 0); childProcIds[currentChildIndex] = fopAcM_createChild(npcId, fopAcM_GetID(this), getPasserParam(), &cStack_28, fopAcM_GetRoomNo(this), &cStack_30, 0, -1, 0); @@ -611,7 +859,6 @@ void daPasserMng_c::create_init() { } } -/* ############################################################################################## */ /* 80D46DB0-80D46DD0 -00001 0020+00 1/0 0/0 0/0 .data l_daPasserMng_Method */ static actor_method_class l_daPasserMng_Method = { (process_method_func)daPasserMng_Create, diff --git a/src/d/d_a_obj.cpp b/src/d/d_a_obj.cpp index 2f661e697fc..7fa5935f107 100644 --- a/src/d/d_a_obj.cpp +++ b/src/d/d_a_obj.cpp @@ -1,7 +1,7 @@ /** * d_a_obj.cpp * - */ +*/ #include "d/dolzel.h" // IWYU pragma: keep @@ -13,64 +13,71 @@ namespace daObj { -/* 80037038-80037180 031978 0148+00 4/4 0/0 0/0 .text eff_break_tsubo__5daObjFP10fopAc_ac_c4cXyzi - */ +/* 80037038-80037180 031978 0148+00 4/4 0/0 0/0 .text eff_break_tsubo__5daObjFP10fopAc_ac_c4cXyzi */ void eff_break_tsubo(fopAc_ac_c* i_actor, cXyz i_scale, int i_type) { J3DModelData* tubo_bmd = (J3DModelData*)dComIfG_getObjectRes("Always", 0x20); J3DAnmTexPattern* tubo_btp = (J3DAnmTexPattern*)dComIfG_getObjectRes("Always", 0x42); + JUT_ASSERT(29, tubo_bmd != NULL); + JUT_ASSERT(30, tubo_btp != NULL); JPABaseEmitter* emitter = dComIfGp_particle_set( ID_ZI_J_M_TUBOHAHEN, &i_actor->current.pos, NULL, NULL, 0xFF, - &dPa_modelEcallBack::mEcallback, fopAcM_GetRoomNo(i_actor), NULL, NULL, &i_scale); + &dPa_modelEcallBack::getEcallback(), fopAcM_GetRoomNo(i_actor), NULL, NULL, &i_scale); - dPa_modelEcallBack::setModel(emitter, tubo_bmd, i_actor->tevStr, 3, tubo_btp, 0, i_type); + dPa_modelEcallBack::setModel(emitter, tubo_bmd, i_actor->tevStr, 3, tubo_btp, i_type); dComIfGp_particle_set(ID_ZI_J_TUBOHAHEN, &i_actor->current.pos, NULL, NULL, 0xFF, dPa_control_c::getTsuboSelectTexEcallBack(i_type), fopAcM_GetRoomNo(i_actor), NULL, NULL, &i_scale); } -/* 80037180-80037210 031AC0 0090+00 0/0 0/0 2/2 .text make_eff_break_kotubo__5daObjFP10fopAc_ac_c - */ +/* 80037180-80037210 031AC0 0090+00 0/0 0/0 2/2 .text make_eff_break_kotubo__5daObjFP10fopAc_ac_c */ void make_eff_break_kotubo(fopAc_ac_c* i_actor) { static cXyz scale(1.0f, 1.0f, 1.0f); eff_break_tsubo(i_actor, scale, 0); } -/* 80037210-800372A0 031B50 0090+00 0/0 0/0 2/2 .text make_eff_break_kotubo2__5daObjFP10fopAc_ac_c - */ +/* 80037210-800372A0 031B50 0090+00 0/0 0/0 2/2 .text make_eff_break_kotubo2__5daObjFP10fopAc_ac_c */ void make_eff_break_kotubo2(fopAc_ac_c* i_actor) { static cXyz scale(1.0f, 1.0f, 1.0f); eff_break_tsubo(i_actor, scale, 1); } -/* 800372A0-80037330 031BE0 0090+00 0/0 0/0 1/1 .text - * make_eff_break_gm_kotubo__5daObjFP10fopAc_ac_c */ +void make_eff_break_ootubo(fopAc_ac_c* i_actor) { + static cXyz scale(1.0f, 1.0f, 1.0f); +} + +/* 800372A0-80037330 031BE0 0090+00 0/0 0/0 1/1 .text make_eff_break_gm_kotubo__5daObjFP10fopAc_ac_c */ void make_eff_break_gm_kotubo(fopAc_ac_c* i_actor) { static cXyz scale(1.0f, 1.0f, 1.0f); eff_break_tsubo(i_actor, scale, 3); } -/* 80037330-800373C0 031C70 0090+00 0/0 0/0 1/1 .text - * make_eff_break_gm_ootubo__5daObjFP10fopAc_ac_c */ +/* 80037330-800373C0 031C70 0090+00 0/0 0/0 1/1 .text make_eff_break_gm_ootubo__5daObjFP10fopAc_ac_c */ void make_eff_break_gm_ootubo(fopAc_ac_c* i_actor) { static cXyz scale(2.0f, 2.0f, 2.0f); eff_break_tsubo(i_actor, scale, 4); } -/* 800373C0-800373F0 031D00 0030+00 0/0 0/0 4/4 .text - * posMoveF_stream__5daObjFP10fopAc_ac_cPC4cXyzPC4cXyzff */ +void get_wind_spd(fopAc_ac_c* i_actor, f32 param_2) { + static cXyz total_spd; +} + +void get_path_spd(cBgS_PolyInfo& param_1, f32 param_2) { + static cXyz path_spd; +} + +/* 800373C0-800373F0 031D00 0030+00 0/0 0/0 4/4 .text posMoveF_stream__5daObjFP10fopAc_ac_cPC4cXyzPC4cXyzff */ void posMoveF_stream(fopAc_ac_c* i_actor, cXyz const* param_1, cXyz const* param_2, f32 param_3, f32 param_4) { posMoveF_grade(i_actor, param_1, param_2, param_3, param_4, NULL, 0.0f, 0.0f, NULL); } -/* 800373F0-800374EC 031D30 00FC+00 1/1 0/0 0/0 .text - * posMoveF_resist_acc__Q25daObj21@unnamed@d_a_obj_cpp@FP4cXyzPC10fopAc_ac_cPC4cXyzff */ +/* 800373F0-800374EC 031D30 00FC+00 1/1 0/0 0/0 .text posMoveF_resist_acc__Q25daObj21@unnamed@d_a_obj_cpp@FP4cXyzPC10fopAc_ac_cPC4cXyzff */ namespace { void posMoveF_resist_acc(cXyz* pos, const fopAc_ac_c* i_actor, cXyz const* stream_spd, f32 param_3, @@ -86,9 +93,7 @@ void posMoveF_resist_acc(cXyz* pos, const fopAc_ac_c* i_actor, cXyz const* strea pos->set(sp14); } -/* 800374EC-80037620 031E2C 0134+00 1/1 0/0 0/0 .text - * posMoveF_grade_acc__Q25daObj21@unnamed@d_a_obj_cpp@FP4cXyzPC10fopAc_ac_cPC4cXyzffPC4cXyzPC4cXyz - */ +/* 800374EC-80037620 031E2C 0134+00 1/1 0/0 0/0 .text posMoveF_grade_acc__Q25daObj21@unnamed@d_a_obj_cpp@FP4cXyzPC10fopAc_ac_cPC4cXyzffPC4cXyzPC4cXyz */ void posMoveF_grade_acc(cXyz* pos, const fopAc_ac_c* i_actor, cXyz const* param_2, f32 friction, f32 no_grade_cos, const cXyz* param_5, const cXyz* param_6) { pos->set(cXyz::Zero); @@ -116,8 +121,7 @@ void posMoveF_grade_acc(cXyz* pos, const fopAc_ac_c* i_actor, cXyz const* param_ } } // namespace -/* 80037620-80037788 031F60 0168+00 1/1 0/0 0/0 .text - * posMoveF_grade__5daObjFP10fopAc_ac_cPC4cXyzPC4cXyzffPC4cXyzffPC4cXyz */ +/* 80037620-80037788 031F60 0168+00 1/1 0/0 0/0 .text posMoveF_grade__5daObjFP10fopAc_ac_cPC4cXyzPC4cXyzffPC4cXyzffPC4cXyz */ void posMoveF_grade(fopAc_ac_c* i_actor, cXyz const* param_1, cXyz const* stream_spd, f32 param_3, f32 param_4, cXyz const* param_5, f32 friction, f32 no_grade_cos, cXyz const* param_8) { @@ -156,8 +160,7 @@ void posMoveF_grade(fopAc_ac_c* i_actor, cXyz const* param_1, cXyz const* stream fopAcM_posMove(i_actor, param_1); } -/* 80037788-80037900 0320C8 0178+00 0/0 0/0 1/1 .text quat_rotBaseY__5daObjFP10QuaternionRC4cXyz - */ +/* 80037788-80037900 0320C8 0178+00 0/0 0/0 1/1 .text quat_rotBaseY__5daObjFP10QuaternionRC4cXyz */ void quat_rotBaseY(Quaternion* quat, cXyz const& param_1) { static const Quaternion zero_quat = {0.0f, 0.0f, 0.0f, 1.0f}; @@ -168,7 +171,11 @@ void quat_rotBaseY(Quaternion* quat, cXyz const& param_1) { f32 var_f30 = sp4C.abs2(); if (var_f30 > 9.999999E-9f) { cXyz sp58 = param_1 / var_f31; + #if DEBUG + f32 var_f1 = acosf(cXyz::BaseY.inprod(sp58)); + #else f32 var_f1 = acos(cXyz::BaseY.inprod(sp58)); + #endif sp4C /= JMAFastSqrt(var_f30); mDoMtx_quatRotAxisRad(quat, &sp4C, var_f1); } else { @@ -179,8 +186,7 @@ void quat_rotBaseY(Quaternion* quat, cXyz const& param_1) { } } -/* 80037900-80037A4C 032240 014C+00 0/0 0/0 3/3 .text - * HitSeStart__5daObjFPC4cXyziPC12dCcD_GObjInfUl */ +/* 80037900-80037A4C 032240 014C+00 0/0 0/0 3/3 .text HitSeStart__5daObjFPC4cXyziPC12dCcD_GObjInfUl */ void HitSeStart(cXyz const* i_sePos, int i_roomNo, dCcD_GObjInf const* i_CcObj, u32 param_3) { int hit_se = const_cast(i_CcObj)->GetTgHitObjSe(); fopAc_ac_c* hit_actor = const_cast(i_CcObj)->GetTgHitAc(); @@ -228,4 +234,228 @@ static cXyz dummy2(cCcD_SphAttr* sph) { return sph->GetCoCP(); } +#if DEBUG + +HioVarious_c HioVarious_c::M_hio; + +HioVarious_c::HioVarious_c() { + field_0x84 = -1; + + for (int i = 0; i < 16; i++) { + field_0x4[i] = NULL; + field_0x44[i] = NULL; + } +} + +void HioVarious_c::init(JORReflexible* node_ptr, const char* node_name) { + JUT_ASSERT(849, node_ptr && node_name); + + int i = 0; + for (; i < 16; i++) { + if (M_hio.field_0x4[i] == NULL) { + M_hio.field_0x4[i] = node_ptr; + M_hio.field_0x44[i] = node_name; + JORMContext* ctx = attachJORMContext(12); + ctx->startNode(&M_hio, 1, node_name, node_ptr, 0, 0); + node_ptr->genMessage(ctx); + ctx->endNode(); + releaseJORMContext(ctx); + break; + } + } + + if (i >= 16) { + // Generic object node buffer full (%s %d) + OS_REPORT_ERROR("汎用オブジェノードバッファがパンク(%s %d)\n", __FILE__, 872); + } +} + +void HioVarious_c::clean(JORReflexible* node_ptr) { + JUT_ASSERT(882, node_ptr); + + int i = 0; + for (; i < 16; i++) { + if (M_hio.field_0x4[i] == node_ptr) { + JORMContext* ctx = attachJORMContext(5); + M_hio.field_0x4[i] = NULL; + M_hio.field_0x44[i] = NULL; + ctx->invalidNode(node_ptr, 3); + releaseJORMContext(ctx); + break; + } + } + + if (i >= 16) { + OS_REPORT_ERROR("汎用オブジェノード削除失敗(%s %d)\n", "d_a_obj.cpp", 898); // Failed to delete generic object node (%s %d) + } +} + +void HioVarious_c::genMessage(JORMContext* ctx) { + for (int i = 0; i < 16; i++) { + if (field_0x4[i] != NULL) { + ctx->genNode(field_0x44[i], this->field_0x4[i], 0, 0); + } + } +} + +HioThrow_c HioThrow_c::M_hio; +cXyz HioThrow_c::M_throw_pos_st = cXyz::Zero; +cXyz HioThrow_c::M_throw_pos_now = cXyz::Zero; + +HioThrow_c::HioThrow_c() { + field_0xa4 = -1; + + for (int i = 0; i < 20; i++) { + field_0x4[i] = NULL; + field_0x54[i] = NULL; + } +} + +void HioThrow_c::init(JORReflexible* node_ptr, const char* node_name) { + JUT_ASSERT(945, node_ptr && node_name); + + int i = 0; + for (; i < 20; i++) { + if (M_hio.field_0x4[i] == NULL) { + M_hio.field_0x4[i] = node_ptr; + M_hio.field_0x54[i] = node_name; + JORMContext* ctx = attachJORMContext(12); + ctx->startNode(&M_hio, 1, node_name, node_ptr, 0, 0); + node_ptr->genMessage(ctx); + ctx->endNode(); + releaseJORMContext(ctx); + break; + } + } + + if (i >= 20) { + OS_REPORT_ERROR("投げ物ノードバッファがパンク(%s %d)\n", "d_a_obj.cpp", 970); // Throw node buffer full (%s %d) + } +} + +void HioThrow_c::clean(JORReflexible* node_ptr) { + JUT_ASSERT(980, node_ptr); + + int i = 0; + for (; i < 20; i++) { + if (M_hio.field_0x4[i] == node_ptr) { + JORMContext* ctx = attachJORMContext(5); + M_hio.field_0x4[i] = NULL; + M_hio.field_0x54[i] = NULL; + ctx->invalidNode(node_ptr, 3); + releaseJORMContext(ctx); + break; + } + } + + if (i >= 20) { + OS_REPORT_ERROR("投げ物ノード削除失敗(%s %d)\n", "d_a_obj.cpp", 997); // Failed to delete thrown object node (%s %d) + } +} + +void HioThrow_c::genMessage(JORMContext* ctx) { + for (int i = 0; i < 20; i++) { + if (field_0x4[i] != NULL) { + ctx->genNode(field_0x54[i], this->field_0x4[i], 0, 0); + } + } +} + +void HioThrow_c::listen(u32 param_1, const JOREvent* event) { + JORReflexible::listen(param_1, event); +} + +void HioThrow_c::genObjectInfo(const JORGenEvent* event) { + JORReflexible::genObjectInfo(event); +} + +void HioThrow_c::listenNodeEvent(const JORNodeEvent* event) { + JORReflexible::listenNodeEvent(event); +} + +void HioThrow_c::listenPropertyEvent(const JORPropertyEvent* event) { + JORReflexible::listenPropertyEvent(event); +} + +HioField_c HioField_c::M_hio; + +HioField_c::HioField_c() { + field_0x84 = -1; + + for (int i = 0; i < 16; i++) { + field_0x4[i] = NULL; + field_0x44[i] = NULL; + } +} + +void HioField_c::genMessage(JORMContext* ctx) { + for (int i = 0; i < 16; i++) { + if (field_0x4[i] != NULL) { + ctx->genNode(field_0x44[i], this->field_0x4[i], 0, 0); + } + } +} + +HioSpot_c HioSpot_c::M_hio; + +HioSpot_c::HioSpot_c() { + field_0x84 = -1; + + for (int i = 0; i < 16; i++) { + field_0x4[i] = NULL; + field_0x44[i] = NULL; + } +} + +void HioSpot_c::genMessage(JORMContext* ctx) { + for (int i = 0; i < 16; i++) { + if (field_0x4[i] != NULL) { + ctx->genNode(field_0x44[i], this->field_0x4[i], 0, 0); + } + } +} + +HioObj_c HioObj_c::M_hio; + +// FAKEMATCH +__declspec(section ".rodata") +const char* HioObj_c::M_node_name[4] = { + "汎用オブジェ", // General purpose object + "投げ物", // Throwing + "フィールドオブジェ", // Field object + "スポット", // Spot +}; + +// FAKEMATCH +__declspec(section ".rodata") +const JORReflexible* HioObj_c::M_node_ptr[4] = { + &daObj::HioVarious_c::M_hio, + &daObj::HioThrow_c::M_hio, + &daObj::HioField_c::M_hio, + &daObj::HioSpot_c::M_hio, +}; + +HioObj_c::HioObj_c() { + M_no = -1; +} + +void HioObj_c::init() { + /* NONMATCHING */ + JUT_ASSERT(1332, M_hio.M_no < 0); + M_hio.M_no = mDoHIO_CREATE_CHILD("オブジェクト", &M_hio); // object +} + +void HioObj_c::clean() { + mDoHIO_deleteChild(M_hio.M_no); + M_hio.M_no = -1; +} + +void HioObj_c::genMessage(JORMContext* ctx) { + for (int i = 0; i < 4; i++) { + ctx->genNode(M_node_name[i], (JORReflexible*)M_node_ptr[i], 0, 0); + } +} + +#endif + } // namespace daObj diff --git a/src/d/d_com_static.cpp b/src/d/d_com_static.cpp index 3f63771a177..1855926949e 100644 --- a/src/d/d_com_static.cpp +++ b/src/d/d_com_static.cpp @@ -554,7 +554,7 @@ void daObjCarry_c::offSttsFlag(int idx, u8 flag) { } /* 80031D8C-80031DAC 02C6CC 0020+00 0/0 0/0 1/1 .text chkSttsFlag__12daObjCarry_cFiUc */ -u8 daObjCarry_c::chkSttsFlag(int idx, u8 flag) { +bool daObjCarry_c::chkSttsFlag(int idx, u8 flag) { return (u8)(mSttsFlag[idx] & flag) ? 1 : 0; }