diff --git a/include/d/actor/d_a_door10.h b/include/d/actor/d_a_door10.h index d6138a3be..ccabccd7f 100644 --- a/include/d/actor/d_a_door10.h +++ b/include/d/actor/d_a_door10.h @@ -3,8 +3,9 @@ #include "f_op/f_op_actor.h" #include "d/d_bg_w.h" +#include "d/d_door.h" -class daDoor10_c : public fopAc_ac_c { +class daDoor10_c : public dDoor_info_c { public: void checkFlag(unsigned short) {} inline BOOL execute(); @@ -39,7 +40,6 @@ public: BOOL draw(); public: - /* 0x000 */ dDoor_info_c parent; /* 0x2D0 */ dDoor_smoke_c m2D0; /* 0x306 */ u8 m306[0x308 - 0x306]; /* 0x308 */ dDoor_key2_c mKeyLock; diff --git a/include/d/actor/d_a_door12.h b/include/d/actor/d_a_door12.h index 71010bf0e..99972bc58 100644 --- a/include/d/actor/d_a_door12.h +++ b/include/d/actor/d_a_door12.h @@ -4,8 +4,9 @@ #include "f_op/f_op_actor.h" #include "d/d_bg_w.h" #include "SSystem/SComponent/c_phase.h" +#include "d/d_door.h" -class daDoor12_c : public fopAc_ac_c { +class daDoor12_c : public dDoor_info_c { public: void checkFlag(unsigned short) {} inline BOOL execute(); @@ -43,7 +44,6 @@ public: BOOL draw(); public: - /* 0x000 */ dDoor_info_c parent; /* 0x2D0 */ request_of_phase_process_class m2D0; /* 0x2D8 */ J3DModel* mpLeftModel; /* 0x2DC */ J3DModel* mpRightModel; diff --git a/include/d/actor/d_a_kddoor.h b/include/d/actor/d_a_kddoor.h index 4186c47f5..74b2e6dff 100644 --- a/include/d/actor/d_a_kddoor.h +++ b/include/d/actor/d_a_kddoor.h @@ -2,8 +2,41 @@ #define D_A_KDDOOR_H #include "f_op/f_op_actor.h" +#include "d/d_door.h" -class daKddoor_c : public fopAc_ac_c { +class dDoor_ssk_sub_c { +public: + void init(); + void end(); + void openInit(); + void openProc(dDoor_info_c*); + void closeInit(); + void closeProc(dDoor_info_c*); + dDoor_ssk_sub_c(); + void drawSet(); + void calcMtx(dDoor_info_c*, float, float, unsigned char); + +public: + /* Place member variables here */ +}; + +class dDoor_ssk_c { +public: + void init(dDoor_info_c*); + void end(); + void calcMtx(dDoor_info_c*); + void execute(dDoor_info_c*); + void draw(dDoor_info_c*); + void closeInit(); + void closeProc(dDoor_info_c*); + void openInit(); + void openProc(dDoor_info_c*); + +public: + /* Place member variables here */ +}; + +class daKddoor_c : public dDoor_info_c { public: void checkFlag(unsigned short) {} inline BOOL execute(); diff --git a/include/d/actor/d_a_knob00.h b/include/d/actor/d_a_knob00.h index 704e77529..fbb3d58d0 100644 --- a/include/d/actor/d_a_knob00.h +++ b/include/d/actor/d_a_knob00.h @@ -4,8 +4,9 @@ #include "f_op/f_op_actor.h" #include "d/d_bg_w.h" #include "m_Do/m_Do_ext.h" +#include "d/d_door.h" -class daKnob00_c : public fopAc_ac_c { +class daKnob00_c : public dDoor_info_c { public: void checkFlag(unsigned short) {} inline BOOL execute(); @@ -45,7 +46,6 @@ public: BOOL draw(); public: - /* 0x000 */ dDoor_info_c parent; /* 0x2D0 */ dDoor_msg_c m2D0; /* 0x2DC */ u8 m2DC[0x2E4 - 0x2DC]; /* 0x2E4 */ J3DModel* mpModel; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 6803eacb0..a08ae0b82 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1761,6 +1761,10 @@ inline int dComIfGp_roomControl_loadRoom(int roomCount, u8* rooms) { return g_dComIfG_gameInfo.play.getRoomControl()->loadRoom(roomCount, rooms); } +inline BOOL dComIfGp_roomControl_checkRoomDisp(int i_roomNo) { + return g_dComIfG_gameInfo.play.getRoomControl()->checkRoomDisp(i_roomNo); +} + inline dBgS* dComIfG_Bgsp() { return &g_dComIfG_gameInfo.play.mBgS; } @@ -1856,6 +1860,14 @@ inline void dComIfGp_map_deleteImage(int param_0) { dMap_c::deleteImage(param_0); } +inline void dComIfGp_map_setAGBMapSendStopFlg() { + // dMap_c::setAGBMapSendStopFlg(); +} + +inline void dComIfGp_map_clrAGBMapSendStopFlg() { + // dMap_c::clrAGBMapSendStopFlg(); +} + inline dDemo_manager_c* dComIfGp_demo_get() { return g_dComIfG_gameInfo.play.getDemo(); } diff --git a/include/d/d_door.h b/include/d/d_door.h new file mode 100644 index 000000000..29f24e326 --- /dev/null +++ b/include/d/d_door.h @@ -0,0 +1,168 @@ +#ifndef D_DOOR_H +#define D_DOOR_H + +#include "f_op/f_op_actor.h" +#include "d/d_particle.h" +#include "SSystem/SComponent/c_phase.h" + +class dDoor_info_c : public fopAc_ac_c { +public: + void valShipId() {} + + u8 getSwbit(); + u8 getSwbit2(); + u8 getType(); + void setType(u8); + u8 getEventNo(); + u8 getFRoomNo(); + u8 getBRoomNo(); + u8 getShipId(); + u8 getArg1(); + BOOL adjoinPlayer(); + void getViewRoomNo(); + void frontCheckOld(); + void frontCheck(); + void drawCheck_local(); + void drawCheck(int); + void checkExecute(); + void startDemoProc(); + void makeEventId(int); + void initProc(int); + void initOpenDemo(int); + void checkArea(f32, f32, f32); + void openInitCom(int); + void openProcCom(); + void closeEndCom(); + void getDemoAction(); + void setGoal(); + void setPlayerAngle(int); + void setPosAndAngle(cXyz*, s16); + +public: + /* 0x290 */ u8 mRoomNo2; + /* 0x291 */ u8 mFRoomNo; + /* 0x292 */ u8 mBRoomNo; + /* 0x293 */ u8 m293[0x294 - 0x293]; + /* 0x294 */ cXyz mAngleVec; + /* 0x2A0 */ u8 mFrontCheck; + /* 0x2A1 */ u8 m2A1; + /* 0x2A2 */ u8 m2A2[0x2A4 - 0x2A2]; + /* 0x2A4 */ void* m2A4; + /* 0x2A8 */ s16 m2A8; + /* 0x2AA */ u8 m2AA[0x2AC - 0x2AA]; + /* 0x2AC */ void* m2AC; + /* 0x2B0 */ void* m2B0; + /* 0x2B4 */ void* m2B4; + /* 0x2B8 */ void* m2B8; + /* 0x2BC */ u8 m2BC; + /* 0x2BD */ u8 m2BD; + /* 0x2BE */ u8 m2BE[0x2C0 - 0x2BE]; + /* 0x2C0 */ void* m2C0; + /* 0x2C4 */ void* m2C4; + /* 0x2C8 */ int mStaffId; + /* 0x2CC */ u8 mRoomNo; + /* 0x2CD */ u8 m2CD[0x2D0 - 0x2CD]; +}; + +class dDoor_smoke_c { +public: + void smokeInit(dDoor_info_c*); + void smokeProc(dDoor_info_c*); + void smokeEnd(); + +public: + /* 0x00 */ dPa_smokeEcallBack mSmokeCb; + /* 0x04 */ u8 m04[0x22 - 0x04]; + /* 0x22 */ s16 m22; + /* 0x24 */ u8 m24[0x28 - 0x24]; + /* 0x28 */ f32 m28; + /* 0x2C */ f32 m2C; + /* 0x30 */ f32 m30; + /* 0x34 */ s8 m34; + /* 0x35 */ u8 m35; +}; + +class dDoor_key2_c { +public: + void keyResLoad(); + void keyResDelete(); + void keyInit(dDoor_info_c*); + void keyProc(); + void keyCreate_Nkey(); + void keyCreate_Bkey(); + void keyCreate(int); + void keyOn(); + void keyOff(); + void calcMtx(dDoor_info_c*); + void draw(dDoor_info_c*); + +public: + /* 0x00 */ bool mbEnabled; + /* 0x01 */ u8 m01[0x04 - 0x01]; + /* 0x04 */ J3DModel* mpModel; + /* 0x08 */ mDoExt_bckAnm mBckAnim; + /* 0x18 */ request_of_phase_process_class mPhs; + /* 0x20 */ u8 m20; + /* 0x21 */ u8 mbIsBossDoor; + /* 0x22 */ u8 m22[0x24 - 0x22]; +}; + +class dDoor_stop_c { +public: + void calcMtx(dDoor_info_c*); + void closeInit(dDoor_info_c*); + void closeProc(dDoor_info_c*); + void openInit(dDoor_info_c*); + void openProc(dDoor_info_c*); + void create(); + +public: + /* 0x0 */ J3DModel* mpModel; + /* 0x4 */ f32 m4; + /* 0x8 */ u8 m8; + /* 0x9 */ u8 mFrontCheck; + /* 0xA */ u8 mA; + /* 0xB */ u8 mB; +}; + +class dDoor_msg_c { +public: + void init(s16); + void proc(cXyz*); + +public: + /* 0x0 */ u32 m0; + /* 0x4 */ int mMsg; + /* 0x8 */ s8 m8; + /* 0x9 */ u8 m9[0xA - 0x9]; + /* 0xA */ s16 mA; +}; + +class dDoor_hkyo_c { +public: + void chkUse() {} + void offUse() {} + void onUse(u8) {} + + s32 resLoad(); + void resDelete(); + void create(); + void setAnm(u8); + void init(); + void calcMtx(dDoor_info_c*, f32); + void draw(dDoor_info_c*); + void proc(dDoor_info_c*); + void chkFirst(); + void onFirst(); + BOOL chkStart(); + +public: + /* 0x00 */ request_of_phase_process_class mPhs; + /* 0x08 */ J3DModel* mpModel; + /* 0x0C */ mDoExt_brkAnm* mpBrkAnm; + /* 0x10 */ u8 mAnmIdx; + /* 0x11 */ u8 m11; + /* 0x12 */ u8 m12[0x14 - 0x12]; +}; + +#endif /* D_DOOR_H */ diff --git a/include/d/d_map.h b/include/d/d_map.h index beb160552..44215f84a 100644 --- a/include/d/d_map.h +++ b/include/d/d_map.h @@ -7,6 +7,32 @@ class fopAc_ac_c; class dMap_c { public: + void clrAGBMapSendStopFlg() {} + void getIconDispMode() {} + void getMapAlpha() {} + void getMapDspPosLeftUpX() {} + void getMapDspPosLeftUpY() {} + void getMapDspSizeHeight() {} + void getMapDspSizeWidth() {} + void getNowRoom() {} + void isAGBMapSendStopFlg() {} + void isMapDispTypeEnlargementSize() {} + void isMapDispTypeRealSize() {} + void setAGBMapSendStopFlg() {} + void setIconDispMode(u8) {} + void setIconFreeAlpha(u8) {} + void setIconFreePosX(s16) {} + void setIconFreePosY(s16) {} + void setIconFreeScale(f32) {} + void setIconSelfAlpha(u8) {} + void setIconSelfScale(f32) {} + void setMapAlpha(u8) {} + void setMapChgSizeEnlargementSize() {} + void setMapChgSizeRealSize() {} + void setMapDispMode(u8) {} + void setMapDispPosLeftUpX(s16) {} + void setMapDispPosLeftUpY(s16) {} + static void create(); void isEnableEnlargementScroll(); static bool isEnableDispMap(); diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 266150fa8..8bac3d202 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -10,7 +10,6 @@ #include "m_Do/m_Do_ext.h" class mDoDvdThd_toMainRam_c; -class dPa_levelEcallBack; class dKy_tevstr_c; class cBgS_PolyInfo; class JPADrawInfo; diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 19d5de4d5..56bf3c23c 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -821,7 +821,7 @@ public: void init(); dStage_roomDt_c* getStatusRoomDt(int); - bool checkRoomDisp(int) const; + BOOL checkRoomDisp(int) const; int loadRoom(int, u8*); void zoneCountCheck(int) const; void checkDrawArea() const; diff --git a/src/d/d_door.cpp b/src/d/d_door.cpp index a06ad8c92..ae7b006dd 100644 --- a/src/d/d_door.cpp +++ b/src/d/d_door.cpp @@ -3,57 +3,70 @@ // Translation Unit: d_door.cpp // -#include "d_door.h" -#include "dolphin/types.h" +#include "d/d_door.h" +#include "d/d_com_inf_game.h" +#include "d/actor/d_a_player.h" /* 8006B39C-8006B3A8 .text getSwbit__12dDoor_info_cFv */ -void dDoor_info_c::getSwbit() { - /* Nonmatching */ +u8 dDoor_info_c::getSwbit() { + return fopAcM_GetParam(this) & 0xFF; } /* 8006B3A8-8006B3B4 .text getSwbit2__12dDoor_info_cFv */ -void dDoor_info_c::getSwbit2() { - /* Nonmatching */ +u8 dDoor_info_c::getSwbit2() { + return (fopAcM_GetParam(this) >> 0x14) & 0xFF; } /* 8006B3B4-8006B3C0 .text getType__12dDoor_info_cFv */ -void dDoor_info_c::getType() { - /* Nonmatching */ +u8 dDoor_info_c::getType() { + return (fopAcM_GetParam(this) >> 0x08) & 0xF; } /* 8006B3C0-8006B3EC .text setType__12dDoor_info_cFUc */ -void dDoor_info_c::setType(unsigned char) { - /* Nonmatching */ +void dDoor_info_c::setType(u8 type) { + if (type >= 0x10) + return; + fopAcM_SetParam(this, fopAcM_GetParam(this) & ~(0xF << 0x08)); + fopAcM_SetParam(this, fopAcM_GetParam(this) | ((type << 0x08) & (0xFF << 0x08))); } /* 8006B3EC-8006B3F8 .text getEventNo__12dDoor_info_cFv */ -void dDoor_info_c::getEventNo() { - /* Nonmatching */ +u8 dDoor_info_c::getEventNo() { + return (fopAcM_GetParam(this) >> 0x0C) & 0xFF; } /* 8006B3F8-8006B404 .text getFRoomNo__12dDoor_info_cFv */ -void dDoor_info_c::getFRoomNo() { - /* Nonmatching */ +u8 dDoor_info_c::getFRoomNo() { + return orig.angle.x & 0x3F; } /* 8006B404-8006B410 .text getBRoomNo__12dDoor_info_cFv */ -void dDoor_info_c::getBRoomNo() { - /* Nonmatching */ +u8 dDoor_info_c::getBRoomNo() { + return (orig.angle.x >> 0x06) & 0x3F; } /* 8006B410-8006B41C .text getShipId__12dDoor_info_cFv */ -void dDoor_info_c::getShipId() { - /* Nonmatching */ +u8 dDoor_info_c::getShipId() { + return orig.angle.z & 0x3F; } /* 8006B41C-8006B428 .text getArg1__12dDoor_info_cFv */ -void dDoor_info_c::getArg1() { - /* Nonmatching */ +u8 dDoor_info_c::getArg1() { + return (orig.angle.z >> 0x08) & 0xFF; } /* 8006B428-8006B4C4 .text adjoinPlayer__12dDoor_info_cFv */ -void dDoor_info_c::adjoinPlayer() { - /* Nonmatching */ +BOOL dDoor_info_c::adjoinPlayer() { + int frontRoomNo = getFRoomNo(); + int backRoomNo = getBRoomNo(); + if (frontRoomNo == 0x3F || backRoomNo == 0x3F) + return TRUE; + if (dComIfGp_roomControl_checkRoomDisp(frontRoomNo) || + dComIfGp_roomControl_checkRoomDisp(backRoomNo)) + { + return TRUE; + } + return FALSE; } /* 8006B4C4-8006B554 .text getViewRoomNo__12dDoor_info_cFv */ @@ -107,7 +120,7 @@ void dDoor_info_c::initOpenDemo(int) { } /* 8006BC50-8006BDBC .text checkArea__12dDoor_info_cFfff */ -void dDoor_info_c::checkArea(float, float, float) { +void dDoor_info_c::checkArea(f32, f32, f32) { /* Nonmatching */ } @@ -137,13 +150,28 @@ void dDoor_info_c::setGoal() { } /* 8006C1D8-8006C200 .text setPlayerAngle__12dDoor_info_cFi */ -void dDoor_info_c::setPlayerAngle(int) { - /* Nonmatching */ +void dDoor_info_c::setPlayerAngle(BOOL flip) { + s16 angle = shape_angle.y; + daPy_py_c* link = (daPy_py_c*)dComIfGp_getLinkPlayer(); + if (flip) { + angle += 0x7FFF; + } + link->changeDemoMoveAngle(angle); } /* 8006C200-8006C2BC .text setPosAndAngle__12dDoor_info_cFP4cXyzs */ -void dDoor_info_c::setPosAndAngle(cXyz*, short) { - /* Nonmatching */ +void dDoor_info_c::setPosAndAngle(cXyz* pPos, s16 angle) { + if (mEvtInfo.checkCommandDemoAccrpt() || mEvtInfo.checkCommandDoor()) { + return; + } + if (pPos) { + mAttentionInfo.mPosition = current.pos = *pPos; + mAttentionInfo.mPosition.y += 150.0f; + mEyePos = mAttentionInfo.mPosition; + } + current.angle.y = angle; + shape_angle.y = current.angle.y; + mAngleVec.set(cM_ssin(current.angle.y), 0.0f, cM_scos(current.angle.y)); } /* 8006C2BC-8006C388 .text smokeInit__13dDoor_smoke_cFP12dDoor_info_c */ @@ -158,17 +186,17 @@ void dDoor_smoke_c::smokeProc(dDoor_info_c*) { /* 8006C41C-8006C448 .text smokeEnd__13dDoor_smoke_cFv */ void dDoor_smoke_c::smokeEnd() { - /* Nonmatching */ + mSmokeCb.end(); } /* 8006C448-8006C478 .text keyResLoad__12dDoor_key2_cFv */ void dDoor_key2_c::keyResLoad() { - /* Nonmatching */ + dComIfG_resLoad(&mPhs, "Key"); } /* 8006C478-8006C4A8 .text keyResDelete__12dDoor_key2_cFv */ void dDoor_key2_c::keyResDelete() { - /* Nonmatching */ + dComIfG_resDelete(&mPhs, "Key"); } /* 8006C4A8-8006C5E8 .text keyInit__12dDoor_key2_cFP12dDoor_info_c */ @@ -198,12 +226,12 @@ void dDoor_key2_c::keyCreate(int) { /* 8006C948-8006C954 .text keyOn__12dDoor_key2_cFv */ void dDoor_key2_c::keyOn() { - /* Nonmatching */ + mbEnabled = true; } /* 8006C954-8006C960 .text keyOff__12dDoor_key2_cFv */ void dDoor_key2_c::keyOff() { - /* Nonmatching */ + mbEnabled = false; } /* 8006C960-8006CA10 .text calcMtx__12dDoor_key2_cFP12dDoor_info_c */ @@ -247,8 +275,11 @@ void dDoor_stop_c::create() { } /* 8006CE8C-8006CEA8 .text init__11dDoor_msg_cFs */ -void dDoor_msg_c::init(short) { - /* Nonmatching */ +void dDoor_msg_c::init(s16 param_1) { + mA = param_1; + m0 = -1; + mMsg = 0; + m8 = 0; } /* 8006CEA8-8006D0DC .text proc__11dDoor_msg_cFP4cXyz */ @@ -257,13 +288,19 @@ void dDoor_msg_c::proc(cXyz*) { } /* 8006D0DC-8006D11C .text resLoad__12dDoor_hkyo_cFv */ -void dDoor_hkyo_c::resLoad() { - /* Nonmatching */ +s32 dDoor_hkyo_c::resLoad() { + if (m11 == 0) { + return 4; + } + dComIfG_resLoad(&mPhs, "Hkyo"); } /* 8006D11C-8006D154 .text resDelete__12dDoor_hkyo_cFv */ void dDoor_hkyo_c::resDelete() { - /* Nonmatching */ + if (m11 == 0) { + return; + } + dComIfG_resDelete(&mPhs, "Hkyo"); } /* 8006D154-8006D2D4 .text create__12dDoor_hkyo_cFv */ @@ -272,17 +309,17 @@ void dDoor_hkyo_c::create() { } /* 8006D2D4-8006D3A8 .text setAnm__12dDoor_hkyo_cFUc */ -void dDoor_hkyo_c::setAnm(unsigned char) { +void dDoor_hkyo_c::setAnm(u8) { /* Nonmatching */ } /* 8006D3A8-8006D3B4 .text init__12dDoor_hkyo_cFv */ void dDoor_hkyo_c::init() { - /* Nonmatching */ + mAnmIdx = 0; } /* 8006D3B4-8006D464 .text calcMtx__12dDoor_hkyo_cFP12dDoor_info_cf */ -void dDoor_hkyo_c::calcMtx(dDoor_info_c*, float) { +void dDoor_hkyo_c::calcMtx(dDoor_info_c*, f32) { /* Nonmatching */ } @@ -307,7 +344,6 @@ void dDoor_hkyo_c::onFirst() { } /* 8006D7E8-8006D800 .text chkStart__12dDoor_hkyo_cFv */ -void dDoor_hkyo_c::chkStart() { - /* Nonmatching */ +BOOL dDoor_hkyo_c::chkStart() { + return daPy_getPlayerActorClass()->getGrabUpEnd(); } - diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index 948f491a6..09868172b 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -207,7 +207,7 @@ int createRoomScene(int param_0) { } /* 80040E38-80040E6C .text checkRoomDisp__20dStage_roomControl_cCFi */ -bool dStage_roomControl_c::checkRoomDisp(int i_roomNo) const { +BOOL dStage_roomControl_c::checkRoomDisp(int i_roomNo) const { if (checkStatusFlag(i_roomNo, 8)) { return false; }