From 17a76564509f61c82f537eb0d53b4178f5cc0355 Mon Sep 17 00:00:00 2001 From: SuperDude88 <82904174+SuperDude88@users.noreply.github.com> Date: Tue, 9 Jul 2024 23:52:54 -0400 Subject: [PATCH] Bit of Figurine Work (#665) * Bit of Figurine Work Not super complete, was just poking around to figure a few things out * Fix Build I really need to stop having this every single time --- include/d/actor/d_a_npc_mt.h | 35 +- include/d/actor/d_a_obj_figure.h | 60 +- include/d/d_snap.h | 2 +- include/m_Do/m_Do_ext.h | 4 +- src/d/actor/d_a_npc_mt.cpp | 72 +- src/d/actor/d_a_obj_figure.cpp | 1536 +++++++++++++++++++++++++++++- src/d/d_snap.cpp | 2 +- src/m_Do/m_Do_ext.cpp | 6 - 8 files changed, 1601 insertions(+), 116 deletions(-) diff --git a/include/d/actor/d_a_npc_mt.h b/include/d/actor/d_a_npc_mt.h index 51d5f406b..3fb1fb1c4 100644 --- a/include/d/actor/d_a_npc_mt.h +++ b/include/d/actor/d_a_npc_mt.h @@ -11,13 +11,13 @@ struct sMtAnmDat { }; -class daNpcMt_c : public fopAc_ac_c { +class daNpcMt_c : public fopNpc_npc_c { public: void attnOff() {} void attnOn() {} void getNpcNo() {} void getPhaseP() {} - void setResFlag(unsigned char) {} + void setResFlag(u8) {} daNpcMt_c(); s32 _create(); @@ -27,7 +27,7 @@ public: BOOL _draw(); BOOL _execute(); void executeCommon(); - void executeSetMode(unsigned char); + void executeSetMode(u8); void executeWaitInit(); void executeWait(); void executeTalkInit(); @@ -40,10 +40,10 @@ public: void eventMesSet(); void eventGetItemInit(); void talk2(int); - void next_msgStatus(unsigned long*); - void getMsg(); + u16 next_msgStatus(u32*); + u32 getMsg(); void chkMsg(); - void setMessage(unsigned long); + void setMessage(u32); void setAnmFromMsgTag(); void getPrmNpcNo(); void setMtx(); @@ -52,27 +52,18 @@ public: void initTexPatternAnm(bool); void playTexPatternAnm(); void playAnm(); - void setAnm(unsigned char, int, float); + void setAnm(u8, int, f32); void setAnmTbl(sMtAnmDat*); void XyCheckCB(int); - void setCollision(dCcD_Cyl*, cXyz, float, float); + void setCollision(dCcD_Cyl*, cXyz, f32, f32); void chkEndEvent(); - void isFigureGet(unsigned char); - void setFigure(unsigned char); - void getFigureMakeNum(); - void isComp(); - void changePhotoNo(unsigned char); + bool isFigureGet(u8); + void setFigure(u8); + int getFigureMakeNum(); + bool isComp(); + void changePhotoNo(u8); public: - /* 0x290 */ dNpc_JntCtrl_c mJnt; - /* 0x2C4 */ dNpc_EventCut_c mEventCut; - /* 0x328 */ u8 m328[0x330 - 0x328]; - /* 0x330 */ mDoExt_McaMorf* mpMorf; - /* 0x334 */ dBgS_Acch mAcch; - /* 0x4F8 */ dBgS_AcchCir mAcchCir; - /* 0x538 */ dCcD_Stts mStts; - /* 0x574 */ dCcD_GObjInf mGObjInf; - /* 0x66C */ u8 m66C[0x6C4 - 0x66C]; /* 0x6C4 */ request_of_phase_process_class mPhsArcname; /* 0x6CC */ request_of_phase_process_class mPhs; /* 0x6D4 */ u8 m6D4[0x6D8 - 0x6D4]; diff --git a/include/d/actor/d_a_obj_figure.h b/include/d/actor/d_a_obj_figure.h index 1e52b79b3..7f89d53e1 100644 --- a/include/d/actor/d_a_obj_figure.h +++ b/include/d/actor/d_a_obj_figure.h @@ -10,15 +10,15 @@ class daObjFigure_c : public fopAc_ac_c { public: daObjFigure_c(); - void getFigureNo() {} - void getPhase1P() {} - void getPhase2P() {} - void isDispFigure() {} - void setResFlag(unsigned char) {} + u8 getFigureNo() { return mFigureNo; } + request_of_phase_process_class* getPhase1P() { return &mPhsFigure; } + request_of_phase_process_class* getPhase2P() { return &mPhsRoomArc; } + bool isDispFigure() { return mbDisplay; } + void setResFlag(u8 flag) { mLoadFlags |= flag; } s32 _create(); - void createHeap(); - void createInit(); + BOOL createHeap(); + s32 createInit(); BOOL _delete(); BOOL _draw(); BOOL _execute(); @@ -26,17 +26,22 @@ public: void eventMove(); void privateCut(); void eventMesSetInit(int); - void eventMesSet(); + bool eventMesSet(); void eventOnPlrInit(); void eventOffPlrInit(); - void talk(int); - void next_msgStatus(unsigned long*); - void getMsg(); - void setMessage(unsigned long); - void getPrmFigureNo(); + u16 talk(int); + u16 next_msgStatus(u32*); + u32 getMsg(); + void setMessage(u32); + u8 getPrmFigureNo(); void setMtx(); - void isFigureGet(unsigned char); - void getFigureBmd(unsigned char); + BOOL isFigureGet(u8); + int getFigureBmd(u8); + + enum Prm_e { + PRM_FIGURE_NO_W = 8, + PRM_FIGURE_NO_S = 0, + }; public: /* 0x290 */ request_of_phase_process_class mPhsLoad; @@ -56,22 +61,27 @@ public: /* 0x3F8 */ dCcD_Stts mStts; /* 0x434 */ dCcD_Cyl mCyl1; /* 0x564 */ dCcD_Cyl mCyl2; - /* 0x694 */ int m694; - /* 0x698 */ u8 m698[0x69C - 0x698]; - /* 0x69C */ int m69C; + /* 0x694 */ uint m694; + /* 0x698 */ msg_class* mpCurrMsg; + /* 0x69C */ u32 m69C; /* 0x6A0 */ dNpc_EventCut_c mEventCut; - /* 0x704 */ u8 m704[0x72C - 0x704]; - /* 0x72C */ int m72C; + /* 0x70C */ cXyz m70C; + /* 0x718 */ cXyz m718; + /* 0x724 */ f32 m724; + /* 0x728 */ f32 m728; + /* 0x72C */ u32* m72C; /* 0x730 */ s16 mFigureCheckEvtIdx; /* 0x732 */ s16 m732; /* 0x734 */ s16 m734; /* 0x736 */ s16 m736; - /* 0x738 */ u8 m738[0x73C - 0x738]; + /* 0x738 */ s16 m738; + /* 0x73A */ s16 m73A; /* 0x73C */ u8 m73C; - /* 0x73D */ u8 mPrmFigureNo; - /* 0x73E */ u8 mbIsFigureGet; - /* 0x73F */ u8 m73F[0x741 - 0x73F]; - /* 0x741 */ u8 m741; + /* 0x73D */ u8 mFigureNo; + /* 0x73E */ u8 mbDisplay; + /* 0x73F */ u8 m73F; + /* 0x740 */ u8 m740; + /* 0x741 */ s8 m741; /* 0x742 */ u8 mLoadFlags; /* 0x743 */ u8 m743[0x744 - 0x743]; }; diff --git a/include/d/d_snap.h b/include/d/d_snap.h index e4d9e4d94..163657e1b 100644 --- a/include/d/d_snap.h +++ b/include/d/d_snap.h @@ -320,7 +320,7 @@ public: }; int dSnap_PhotoIndex2TableIndex(int); -u8 dSnap_GetFigRoomId(int); +int dSnap_GetFigRoomId(int); void dSnap_MatDl(); void dSnap_AlphaClearDL(); void dSnap_Create(); diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 1dd331c9f..a2b7688ce 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -540,7 +540,7 @@ public: class mDoExt_offCupOnAupPacket : public J3DPacket { public: - ~mDoExt_offCupOnAupPacket(); + ~mDoExt_offCupOnAupPacket() {} void draw(); @@ -549,7 +549,7 @@ public: class mDoExt_onCupOffAupPacket : public J3DPacket { public: - ~mDoExt_onCupOffAupPacket(); + ~mDoExt_onCupOffAupPacket() {} void draw(); diff --git a/src/d/actor/d_a_npc_mt.cpp b/src/d/actor/d_a_npc_mt.cpp index 879df28a8..f11a1e755 100644 --- a/src/d/actor/d_a_npc_mt.cpp +++ b/src/d/actor/d_a_npc_mt.cpp @@ -4,8 +4,29 @@ // #include "d/actor/d_a_npc_mt.h" +#include "d/d_com_inf_game.h" #include "d/d_procname.h" +static u16 l_figure_comp[] = { + 0x95FF, + 0x94FF, + 0x93FF, + 0x92FF, + 0x91FF, + 0x90FF, + 0x8FFF, + 0x8EFF, + 0x8DFF, + 0x8CFF, + 0xB1FF, + 0x9CFF, + 0x84FF, + 0x83FF, + 0x82FF, + 0x81FF, + 0x80FF, +}; + /* 00000078-00000228 .text __ct__9daNpcMt_cFv */ daNpcMt_c::daNpcMt_c() { /* Nonmatching */ @@ -72,7 +93,7 @@ void daNpcMt_c::executeCommon() { } /* 00001240-00001294 .text executeSetMode__9daNpcMt_cFUc */ -void daNpcMt_c::executeSetMode(unsigned char) { +void daNpcMt_c::executeSetMode(u8) { /* Nonmatching */ } @@ -137,12 +158,12 @@ void daNpcMt_c::talk2(int) { } /* 000019BC-00001A8C .text next_msgStatus__9daNpcMt_cFPUl */ -void daNpcMt_c::next_msgStatus(unsigned long*) { +u16 daNpcMt_c::next_msgStatus(u32*) { /* Nonmatching */ } /* 00001A8C-00001FC8 .text getMsg__9daNpcMt_cFv */ -void daNpcMt_c::getMsg() { +u32 daNpcMt_c::getMsg() { /* Nonmatching */ } @@ -152,7 +173,7 @@ void daNpcMt_c::chkMsg() { } /* 00001FCC-00001FD4 .text setMessage__9daNpcMt_cFUl */ -void daNpcMt_c::setMessage(unsigned long) { +void daNpcMt_c::setMessage(u32) { /* Nonmatching */ } @@ -197,7 +218,7 @@ void daNpcMt_c::playAnm() { } /* 0000280C-000028E4 .text setAnm__9daNpcMt_cFUcif */ -void daNpcMt_c::setAnm(unsigned char, int, float) { +void daNpcMt_c::setAnm(u8, int, f32) { /* Nonmatching */ } @@ -212,7 +233,7 @@ void daNpcMt_c::XyCheckCB(int) { } /* 00002A28-00002AA0 .text setCollision__9daNpcMt_cFP8dCcD_Cyl4cXyzff */ -void daNpcMt_c::setCollision(dCcD_Cyl*, cXyz, float, float) { +void daNpcMt_c::setCollision(dCcD_Cyl*, cXyz, f32, f32) { /* Nonmatching */ } @@ -222,27 +243,52 @@ void daNpcMt_c::chkEndEvent() { } /* 00002AFC-00002B98 .text isFigureGet__9daNpcMt_cFUc */ -void daNpcMt_c::isFigureGet(unsigned char) { +bool daNpcMt_c::isFigureGet(u8) { /* Nonmatching */ } /* 00002B98-00002C38 .text setFigure__9daNpcMt_cFUc */ -void daNpcMt_c::setFigure(unsigned char) { +void daNpcMt_c::setFigure(u8 figure) { /* Nonmatching */ + + if(figure < 0x86) { + u8 reg = dComIfGs_getEventReg(l_figure_comp[figure / 8]); + reg |= 1 << (figure & 7); + dComIfGs_setEventReg(l_figure_comp[figure / 8], reg); + dComIfGs_onEventBit(0x3A01); + } } /* 00002C38-00002CA0 .text getFigureMakeNum__9daNpcMt_cFv */ -void daNpcMt_c::getFigureMakeNum() { - /* Nonmatching */ +int daNpcMt_c::getFigureMakeNum() { + int num = 0; + + for(u8 i = 0; i < 0x86; i++) { + if(isFigureGet(i)) { + num++; + } + } + + return num; } /* 00002CA0-00002D08 .text isComp__9daNpcMt_cFv */ -void daNpcMt_c::isComp() { - /* Nonmatching */ +bool daNpcMt_c::isComp() { + int ownedNum = getFigureMakeNum(); + int totalNum = 0x84; + if(isFigureGet(0x32)) { + totalNum = 0x85; + } + + if(ownedNum >= totalNum) { + return true; + } + + return false; } /* 00002D08-00002D4C .text changePhotoNo__9daNpcMt_cFUc */ -void daNpcMt_c::changePhotoNo(unsigned char) { +void daNpcMt_c::changePhotoNo(u8) { /* Nonmatching */ } diff --git a/src/d/actor/d_a_obj_figure.cpp b/src/d/actor/d_a_obj_figure.cpp index 752e721ba..1dc18484a 100644 --- a/src/d/actor/d_a_obj_figure.cpp +++ b/src/d/actor/d_a_obj_figure.cpp @@ -4,161 +4,1605 @@ // #include "d/actor/d_a_obj_figure.h" +#include "f_op/f_op_actor_mng.h" +#include "d/d_com_inf_game.h" +#include "d/d_com_lib_game.h" +#include "d/d_snap.h" +#include "d/d_camera.h" +#include "d/d_a_obj.h" #include "d/d_procname.h" +#include "d/actor/d_a_player_main.h" +#include "m_Do/m_Do_controller_pad.h" + +static u8 dummy_bss[0x4C]; + +static const char* l_arcname_tbl[] = { + "Figure", + "Figure2", + "Figure1", + "Figure0", + "Figure6", + "Figure5", + "Figure3", + "Figure4", + "Figure2a", + "Figure2b", + "Figure6a", + "Figure6b", + "Figure6c", +}; + +static u16 l_figure_comp[] = { + 0x95FF, + 0x94FF, + 0x93FF, + 0x92FF, + 0x91FF, + 0x90FF, + 0x8FFF, + 0x8EFF, + 0x8DFF, + 0x8CFF, + 0xB1FF, + 0x9CFF, + 0x84FF, + 0x83FF, + 0x82FF, + 0x81FF, + 0x80FF, +}; + +static dCcD_SrcCyl l_cyl_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ AT_TYPE_ALL, + /* SrcObjTg SPrm */ TG_SPRM_SET | TG_SPRM_IS_ENEMY, + /* SrcObjCo SPrm */ CO_SPRM_SET | CO_SPRM_IS_UNK8 | CO_SPRM_VSGRP, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ G_TG_SPRM_NO_HIT_MARK, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGCylS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 60.0f, + /* Height */ 150.0f, + }, +}; + +struct FigureData { + /* 0x00 */ int mBmdId; + /* 0x04 */ int mModelAttr; + /* 0x08 */ int mRoomId; +}; // Size: 0x0C + +static const FigureData l_figure_dat_tbl[] = { + { + 0, + 0x37441422, + -1 + }, + { + 1, + 0x37441422, + -1 + }, + { + 2, + 0x37441422, + -1 + }, + { + 3, + 0x37441422, + -1 + }, + { + 0xA, + 0x37441422, + -1 + }, + { + 4, + 0x37441422, + -1 + }, + { + 5, + 0x37441422, + -1 + }, + { + 6, + 0x37441422, + -1 + }, + { + 7, + 0x37441422, + -1 + }, + { + 8, + 0x37441422, + -1 + }, + { + 9, + 0x11001222, + -1 + }, + { + 0xB, + 0x37441422, + -1 + }, + { + 0xC, + 0x37441422, + -1 + }, + { + 0xD, + 0x37441422, + -1 + }, + { + 0, + 0x37441422, + -1 + }, + { + 1, + 0x37441422, + -1 + }, + { + 2, + 0x37441422, + -1 + }, + { + 4, + 0x37441422, + -1 + }, + { + 5, + 0x37441422, + -1 + }, + { + 7, + 0x37441422, + -1 + }, + { + 8, + 0x37441422, + -1 + }, + { + 9, + 0x37441422, + -1 + }, + { + 0xA, + 0x37441422, + -1 + }, + { + 0xB, + 0x37441422, + -1 + }, + { + 0xC, + 0x37441422, + -1 + }, + { + 0xD, + 0x37441422, + -1 + }, + { + 0xE, + 0x37441422, + -1 + }, + { + 0xF, + 0x37441422, + -1 + }, + { + 0x10, + 0x37441422, + -1 + }, + { + 0x11, + 0x37441422, + -1 + }, + { + 0x12, + 0x37441422, + -1 + }, + { + 0x13, + 0x37441422, + -1 + }, + { + 0x14, + 0x37441422, + -1 + }, + { + 0x15, + 0x37441422, + -1 + }, + { + 0x16, + 0x37441422, + -1 + }, + { + 0x17, + 0x37441422, + -1 + }, + { + 0x18, + 0x37441422, + -1 + }, + { + 0x19, + 0x37441422, + -1 + }, + { + 0x1A, + 0x37441422, + -1 + }, + { + 0x1B, + 0x37441422, + -1 + }, + { + 0x1C, + 0x37441422, + -1 + }, + { + 0, + 0x37441422, + 8 + }, + { + 1, + 0x37441422, + 8 + }, + { + 2, + 0x37441422, + 8 + }, + { + 3, + 0x37441422, + 8 + }, + { + 4, + 0x37441422, + 8 + }, + { + 5, + 0x37441422, + 8 + }, + { + 6, + 0x37441422, + 8 + }, + { + 7, + 0x37441422, + 8 + }, + { + 8, + 0x37441422, + 8 + }, + { + 9, + 0x37441422, + 8 + }, + { + 0xA, + 0x37441422, + 8 + }, + { + 0xB, + 0x37441422, + 8 + }, + { + 0xC, + 0x37441422, + 8 + }, + { + 0xD, + 0x37441422, + 8 + }, + { + 0xE, + 0x37441422, + 8 + }, + { + 0xF, + 0x37441422, + 8 + }, + { + 0x10, + 0x37441422, + 8 + }, + { + 0x11, + 0x37441422, + 8 + }, + { + 0x12, + 0x37441422, + 8 + }, + { + 0x13, + 0x37441422, + 8 + }, + { + 6, + 0x37441422, + 9 + }, + { + 1, + 0x37441422, + 9 + }, + { + 2, + 0x37441422, + 9 + }, + { + 5, + 0x37441422, + 9 + }, + { + 0, + 0x11001222, + -1 + }, + { + 1, + 0x37441422, + -1 + }, + { + 2, + 0x37441422, + -1 + }, + { + 3, + 0x37441422, + -1 + }, + { + 4, + 0x37441422, + -1 + }, + { + 5, + 0x37441422, + -1 + }, + { + 6, + 0x37441422, + -1 + }, + { + 7, + 0x37441422, + -1 + }, + { + 8, + 0x37441422, + -1 + }, + { + 9, + 0x37441422, + -1 + }, + { + 0xA, + 0x37441422, + -1 + }, + { + 0xB, + 0x37441422, + -1 + }, + { + 0xC, + 0x37441422, + -1 + }, + { + 0xD, + 0x37441422, + -1 + }, + { + 0xE, + 0x37441422, + -1 + }, + { + 0xF, + 0x37441422, + -1 + }, + { + 0x10, + 0x37441422, + -1 + }, + { + 0x11, + 0x11001222, + -1 + }, + { + 0, + 0x37441422, + -1 + }, + { + 5, + 0x37441422, + -1 + }, + { + 6, + 0x37441422, + -1 + }, + { + 7, + 0x37441422, + -1 + }, + { + 8, + 0x37441422, + -1 + }, + { + 9, + 0x37441422, + -1 + }, + { + 0xA, + 0x37441422, + -1 + }, + { + 0xB, + 0x37441422, + -1 + }, + { + 0xC, + 0x37441422, + -1 + }, + { + 0xD, + 0x37441422, + -1 + }, + { + 1, + 0x37441422, + -1 + }, + { + 2, + 0x37441422, + -1 + }, + { + 3, + 0x37441422, + -1 + }, + { + 4, + 0x37441422, + -1 + }, + { + 0, + 0x37441422, + -1 + }, + { + 1, + 0x37441422, + -1 + }, + { + 2, + 0x37441422, + -1 + }, + { + 3, + 0x37441422, + -1 + }, + { + 4, + 0x37441422, + -1 + }, + { + 5, + 0x37441422, + -1 + }, + { + 6, + 0x37441422, + -1 + }, + { + 7, + 0x37441422, + -1 + }, + { + 8, + 0x37441422, + -1 + }, + { + 9, + 0x37441422, + -1 + }, + { + 0x12, + 0x37441422, + -1 + }, + { + 0xA, + 0x11001222, + -1 + }, + { + 0xB, + 0x11001222, + -1 + }, + { + 0xC, + 0x11001222, + -1 + }, + { + 0xD, + 0x37441422, + -1 + }, + { + 0xE, + 0x37441422, + -1 + }, + { + 0xF, + 0x37441422, + -1 + }, + { + 0x10, + 0x37441422, + -1 + }, + { + 0x11, + 0x37441422, + -1 + }, + { + 0, + 0x37441422, + 0xA + }, + { + 1, + 0x37441422, + 0xA + }, + { + 2, + 0x11001222, + 0xA + }, + { + 3, + 0x11001222, + 0xA + }, + { + 4, + 0x11001222, + 0xA + }, + { + 5, + 0x37441422, + 0xA + }, + { + 6, + 0x37441422, + 0xA + }, + { + 7, + 0x37441422, + 0xA + }, + { + 0, + 0x37441422, + 0xB + }, + { + 1, + 0x11001222, + 0xB + }, + { + 2, + 0x11001222, + 0xB + }, + { + 3, + 0x37441422, + 0xB + }, + { + 4, + 0x37441422, + 0xB + }, + { + 0, + 0x11001222, + 0xC + }, + { + 1, + 0x37441422, + 0xC + }, + { + 2, + 0x11001222, + 0xC + }, + { + 3, + 0x11001222, + 0xC + }, + { + 4, + 0x37441422, + 0xC + }, +}; + +struct FigureCheckTbl { + /* 0x00 */ f32 field_0x00; + /* 0x04 */ f32 field_0x04; + /* 0x08 */ f32 field_0x08; + /* 0x0C */ f32 field_0x0C; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1C; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ s16 field_0x28; + /* 0x2A */ s16 field_0x2A; + /* 0x2C */ s16 field_0x2C; + /* 0x2E */ s16 field_0x2E; + /* 0x30 */ s16 field_0x30; + /* 0x32 */ s16 field_0x32; +}; // Size: 0x34 + +static const FigureCheckTbl l_figure_check_tbl[] = { + { + 200.0f, + 5.0f, + 118.0f, + 80.0f, + 150.0f, + 30.0f, + 50.0f, + 2.0f, + 20.0f, + 60.0f, + 0x0000, + 0x0200, + 0x0200, + 0xE3E0, + 0x0FA0, + 0x0000, + }, + { + 200.0f, + 5.0f, + 118.0f, + 80.0f, + 150.0f, + 30.0f, + 50.0f, + 2.0f, + 20.0f, + 60.0f, + 0x0000, + 0x0200, + 0x0200, + 0xE3E0, + 0x0FA0, + 0x0000, + }, + { + 200.0f, + 5.0f, + 150.0f, + 80.0f, + 200.0f, + 30.0f, + 50.0f, + 2.0f, + 20.0f, + 60.0f, + 0x0000, + 0x0200, + 0x0200, + 0xE3E0, + 0x0FA0, + 0x0000, + }, + { + 200.0f, + 5.0f, + 150.0f, + 80.0f, + 200.0f, + 30.0f, + 50.0f, + 2.0f, + 20.0f, + 60.0f, + 0x0000, + 0x0200, + 0x0200, + 0xE3E0, + 0x0FA0, + 0x0000, + }, +}; /* 000000EC-0000032C .text __ct__13daObjFigure_cFv */ daObjFigure_c::daObjFigure_c() { - /* Nonmatching */ + mFigureNo = getPrmFigureNo(); + if(mFigureNo == 0xFF) { + mFigureNo = 0; + } + if(mFigureNo >= 0x86) { + mFigureNo = 0; + } + + m734 = current.angle.y; + mbDisplay = isFigureGet(mFigureNo); + m732 = 0; + m734 = 0; + m736 = current.angle.y; + m73C = 0; } /* 00000588-000005A8 .text CheckCreateHeap__FP10fopAc_ac_c */ -static BOOL CheckCreateHeap(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL CheckCreateHeap(fopAc_ac_c* i_this) { + return static_cast(i_this)->createHeap(); } /* 000005A8-00000624 .text phase_1__FP13daObjFigure_c */ -void phase_1(daObjFigure_c*) { - /* Nonmatching */ +static s32 phase_1(daObjFigure_c* i_this) { + fopAcM_SetupActor(i_this, daObjFigure_c) + i_this->setResFlag(0x1); + + int status = dComIfG_resLoad(i_this->getPhase1P(), "Figure"); + if(status != cPhs_ERROR_e && status == cPhs_COMPLEATE_e) { + return cPhs_NEXT_e; + } + + return status; } /* 00000624-000006F0 .text phase_2__FP13daObjFigure_c */ -void phase_2(daObjFigure_c*) { - /* Nonmatching */ +static s32 phase_2(daObjFigure_c* i_this) { + i_this->setResFlag(0x2); + u8 figureNo = i_this->getFigureNo(); + int id = dSnap_GetFigRoomId(figureNo); + if(l_figure_dat_tbl[figureNo].mRoomId >= 0) { + id = l_figure_dat_tbl[figureNo].mRoomId; + } + + int status = dComIfG_resLoad(i_this->getPhase2P(), l_arcname_tbl[id]); + + if(status == cPhs_COMPLEATE_e) { + if(fopAcM_entrySolidHeap(i_this, CheckCreateHeap, figureNo == 0x40 ? 0x25000 : 0xCD90)) { + return i_this->createInit(); + } + else { + return cPhs_ERROR_e; + } + } + + return status; } /* 000006F0-00000720 .text _create__13daObjFigure_cFv */ s32 daObjFigure_c::_create() { - /* Nonmatching */ + static cPhs__Handler l_method[] = { + (cPhs__Handler)&phase_1, + (cPhs__Handler)&phase_2, + NULL, + }; + + dComLbG_PhaseHandler(&mPhsLoad, l_method, this); } /* 00000720-00000A90 .text createHeap__13daObjFigure_cFv */ -void daObjFigure_c::createHeap() { +BOOL daObjFigure_c::createHeap() { /* Nonmatching */ + + int id = dSnap_GetFigRoomId(getFigureNo()); + if(l_figure_dat_tbl[getFigureNo()].mRoomId >= 0) { + id = l_figure_dat_tbl[getFigureNo()].mRoomId; + } + + const char* arcname = l_arcname_tbl[id]; + J3DModelData* pModelData = static_cast(dComIfG_getObjectIDRes(arcname, getFigureBmd(mFigureNo))); + if(pModelData == NULL) { + return false; + } + + mpModel = mDoExt_J3DModel__create(pModelData, 0x80000, l_figure_dat_tbl[mFigureNo].mModelAttr); + if(mpModel == NULL) { + return false; + } + + if(mFigureNo == 0x3D) { + J3DAnmTevRegKey* pBrkData = static_cast(dComIfG_getObjectIDRes(arcname, 7)); + if(pBrkData == NULL) { + return false; + } + + mpBrkAnm = new mDoExt_brkAnm; + if(mpBrkAnm == NULL) { + return false; + } + + if(!mpBrkAnm->init(pModelData, pBrkData, true, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0)) { + return false; + } + } + if(mFigureNo == 0x40) { + J3DModelData* p1 = (J3DModelData*)dComIfG_getObjectIDRes(arcname, 4); + mpMorf = new mDoExt_McaMorf( + p1, + NULL, NULL, + (J3DAnmTransformKey*)dComIfG_getObjectIDRes(arcname, 0), + J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, 1, + NULL, + 0x80000, + 0x11001222 + ); + + if(mpMorf == NULL || mpMorf->getModel() == NULL) { + return false; + } + + J3DSkinDeform* pDeform = new J3DSkinDeform; + if(pDeform == NULL) { + return false; + } + + if(mpMorf->getModel()->setSkinDeform(pDeform, 1) != 0) { + return false; + } + } + + J3DModelData* pPedestalData = static_cast(dComIfG_getObjectIDRes("Figure", 1)); + if(pPedestalData == NULL) { + return false; + } + + mpPedestalModel = mDoExt_J3DModel__create(pPedestalData, 0x80000, 0x11020022); + if(mpPedestalModel == NULL) { + return false; + } + + mpPedestalBtp = static_cast(dComIfG_getObjectIDRes("Figure", 2)); + if(mpPedestalBtp == NULL) { + return false; + } + + if(!mBtpAnm1.init(pPedestalData, mpPedestalBtp, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0)) { + return false; + } + + return true; } /* 00000A90-00000BF4 .text createInit__13daObjFigure_cFv */ -void daObjFigure_c::createInit() { - /* Nonmatching */ +s32 daObjFigure_c::createInit() { + mStts.Init(0xFF, 0xFF, this); + mCyl1.Set(l_cyl_src); + mCyl1.SetStts(&mStts); + mCyl2.Set(l_cyl_src); + mCyl2.SetStts(&mStts); + mCyl2.SetCoSPrm(0x129); + mCyl2.SetR(200.0f); + mCyl2.SetH(100.0f); + fopAcM_SetMtx(this, mpPedestalModel->getBaseTRMtx()); + fopAcM_setCullSizeBox(this, -50.0f, 0.0f, -50.0f, 50.0f, 200.0f, 50.0f); + mFigureCheckEvtIdx = dComIfGp_evmng_getEventIdx("FIGURE_CHECK"); + mEventCut.setActorInfo("Figure", this); + eventInfo.setEventId(mFigureCheckEvtIdx); + attention_info.distances[fopAc_Attn_TYPE_TALK_e] = 0xA8; + attention_info.distances[fopAc_Attn_TYPE_SPEAK_e] = 0xA8; + attention_info.flags = fopAc_Attn_LOCKON_TALK_e | fopAc_Attn_ACTION_SPEAK_e | fopAc_Attn_TALKFLAG_CHECK_e; + shape_angle = current.angle; + dKy_tevstr_init(&mTevStrBG2, fopAcM_GetHomeRoomNo(this), 0xFF); + cMtx_copy(mDoMtx_getIdentity(), mMtx); + setMtx(); + + return cPhs_COMPLEATE_e; } /* 00000BF4-00000C78 .text _delete__13daObjFigure_cFv */ BOOL daObjFigure_c::_delete() { - /* Nonmatching */ + dComIfG_resDelete(getPhase1P(), "Figure"); + + int id = dSnap_GetFigRoomId(getFigureNo()); + if(l_figure_dat_tbl[getFigureNo()].mRoomId >= 0) { + id = l_figure_dat_tbl[getFigureNo()].mRoomId; + } + + dComIfG_resDelete(getPhase2P(), l_arcname_tbl[id]); + + return true; } +void linkDraw(mDoExt_McaMorf*); + /* 00000C78-00000DE8 .text _draw__13daObjFigure_cFv */ BOOL daObjFigure_c::_draw() { - /* Nonmatching */ + g_env_light.settingTevStruct(TEV_TYPE_BG2, ¤t.pos, &mTevStrBG2); + g_env_light.setLightTevColorType(mpModel, &mTevStrBG2); + g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &tevStr); + g_env_light.setLightTevColorType(mpPedestalModel, &tevStr); + + J3DModelData* pModelData = mpPedestalModel->getModelData(); + if(mbDisplay) { + if(mpBrkAnm) { + J3DModelData* pModelData2 = mpModel->getModelData(); + mpBrkAnm->entry(pModelData2, mpBrkAnm->getFrame()); + } + + mBtpAnm1.entry(pModelData, 1); + mDoExt_modelUpdateDL(mpPedestalModel); + mDoExt_modelUpdateDL(mpModel); + mBtpAnm1.remove(pModelData); + + if(mpBrkAnm) { + mpBrkAnm->remove(mpModel->getModelData()); + } + + if(mpMorf) { + g_env_light.setLightTevColorType(mpMorf->getModel(), &mTevStrBG2); + linkDraw(mpMorf); + } + } + else { + if(mFigureNo != 0x40 && mFigureNo != 0x32) { + mBtpAnm1.entry(pModelData, 0); + mDoExt_modelUpdateDL(mpPedestalModel); + mBtpAnm1.remove(pModelData); + } + } + + return true; } +typedef void(daObjFigure_c::*ProcFunc_t)(); +static const ProcFunc_t moveProc[] = { + &daObjFigure_c::executeNormal, +}; + /* 00000DE8-00000F10 .text _execute__13daObjFigure_cFv */ BOOL daObjFigure_c::_execute() { - /* Nonmatching */ + if(!dComIfGp_event_runCheck()) { + (this->*moveProc[m73C])(); + } + else { + eventMove(); + } + + if(mbDisplay || (getFigureNo() != 0x40 && getFigureNo() != 0x32)) { + mCyl1.SetC(current.pos); + mCyl2.SetC(current.pos); + dComIfG_Ccsp()->Set(&mCyl1); + dComIfG_Ccsp()->Set(&mCyl2); + } + + attention_info.position.set(current.pos.x, current.pos.y + 200.0f, current.pos.z); + eyePos.set(current.pos.x, current.pos.y + 150.0f, current.pos.z); + + if(mpBrkAnm) { + mpBrkAnm->play(); + } + + setMtx(); + + return true; } /* 00000F10-00000FD4 .text executeNormal__13daObjFigure_cFv */ void daObjFigure_c::executeNormal() { - /* Nonmatching */ + if(mbDisplay) { + fopAc_ac_c* pLink = dComIfGp_getLinkPlayer(); + + f32 temp1; + s16 temp2; + dNpc_calc_DisXZ_AngY(current.pos, pLink->current.pos, &temp1, &temp2); + temp2 -= current.angle.y; + + if(150.0f > temp1 && abs(temp2) < 0x32C8) { + eventInfo.onCondition(dEvtCnd_CANTALK_e); + } + } } /* 00000FD4-00001060 .text eventMove__13daObjFigure_cFv */ void daObjFigure_c::eventMove() { - /* Nonmatching */ + if(dComIfGp_evmng_endCheck(mFigureCheckEvtIdx)) { + dComIfGp_event_reset(); + } + else { + bool attn = mEventCut.getAttnFlag(); + if (mEventCut.cutProc()) { + if (!mEventCut.getAttnFlag()) { + mEventCut.setAttnFlag(attn); + } + } else { + privateCut(); + } + } } /* 00001060-0000119C .text privateCut__13daObjFigure_cFv */ void daObjFigure_c::privateCut() { - /* Nonmatching */ + static char* cut_name_tbl[] = { + "MES_SET", + "ON_PLR", + "OFF_PLR", + }; + + int staffIdx = dComIfGp_evmng_getMyStaffId("Figure"); + if(staffIdx != -1) { + m741 = dComIfGp_evmng_getMyActIdx(staffIdx, cut_name_tbl, ARRAY_SIZE(cut_name_tbl), TRUE, 0); + if(m741 == -1) { + dComIfGp_evmng_cutEnd(staffIdx); + } + else { + if(dComIfGp_evmng_getIsAddvance(staffIdx)) { + switch(m741) { + case 0: + eventMesSetInit(staffIdx); + break; + case 1: + eventOnPlrInit(); + break; + case 2: + eventOffPlrInit(); + break; + } + } + + bool end; + switch(m741) { + case 0: + end = eventMesSet(); + break; + default: + end = true; + break; + } + + if(end) { + dComIfGp_evmng_cutEnd(staffIdx); + } + } + } } /* 0000119C-00001294 .text eventMesSetInit__13daObjFigure_cFi */ -void daObjFigure_c::eventMesSetInit(int) { - /* Nonmatching */ +void daObjFigure_c::eventMesSetInit(int staffIdx) { + u32* pMsgNo = dComIfGp_evmng_getMyIntegerP(staffIdx, "MsgNo"); + if(pMsgNo) { + m72C = NULL; + switch(*pMsgNo) { + case 0: + setMessage(getMsg()); + break; + case 1: + break; + default: + setMessage(*pMsgNo); + break; + } + + if(m72C) { + setMessage(*m72C); + } + } + else { + m72C++; + setMessage(*m72C); + } + + m724 = l_figure_check_tbl[0].field_0x18; + m728 = l_figure_check_tbl[0].field_0x08; + m738 = 0; + m73F = 0; + m73A = 10; } /* 00001294-00001600 .text eventMesSet__13daObjFigure_cFv */ -void daObjFigure_c::eventMesSet() { +bool daObjFigure_c::eventMesSet() { /* Nonmatching */ + + switch(m73F) { + case 0: + if(m73A != 0) { + m73A--; + } + else { + dComIfGp_setDoStatusForce(0x21); + dComIfGp_setAStatusForce(0x27); + if(g_mDoCPd_cpadInfo[0].mMainStickPosX != 0.0f || g_mDoCPd_cpadInfo[0].mMainStickPosY != 0.0f || g_mDoCPd_cpadInfo[0].mCStickPosY != 0.0f) { + m738 = l_figure_check_tbl[0].field_0x32; + m734 += (s16)(g_mDoCPd_cpadInfo[0].mMainStickPosX * l_figure_check_tbl[0].field_0x2C); + m728 += (s16)(g_mDoCPd_cpadInfo[0].mMainStickPosY * l_figure_check_tbl[0].field_0x04); + + if(m728 < l_figure_check_tbl[0].field_0x0C) { + m728 = l_figure_check_tbl[0].field_0x0C; + } + else if(m728 > l_figure_check_tbl[0].field_0x10) { + m728 = l_figure_check_tbl[0].field_0x10; + } + + m724 -= g_mDoCPd_cpadInfo[0].mCStickPosY * l_figure_check_tbl[0].field_0x1C; + if(m724 < l_figure_check_tbl[0].field_0x20) { + m724 = l_figure_check_tbl[0].field_0x20; + } + else if(m724 > l_figure_check_tbl[0].field_0x24) { + m724 = l_figure_check_tbl[0].field_0x24; + } + } + else { + if(m738 != 0) { + m738--; + } + else { + m736 += l_figure_check_tbl[0].field_0x28; + } + } + + dComIfGp_setDoStatusForce(0x21); + dComIfGp_setAStatusForce(0x27); + if(CPad_CHECK_TRIG_B(0)) { + m732 = 0; + m734 = 0; + m736 = current.angle.y; + + return true; + } + + if(CPad_CHECK_TRIG_A(0)) { + m73F = 1; + } + } + + f32 temp = m728 + l_figure_check_tbl[0].field_0x14; + m70C.set(0.0f, temp, 0.0f); + temp = m728 + l_figure_check_tbl[0].field_0x14; + m718.x = 0.0f; + m718.y = temp; + m718.z = l_figure_check_tbl[0].field_0x00; + mDoMtx_stack_c::YrotS(current.angle.y + m734); + mDoMtx_stack_c::multVec(&m718, &m718); + m70C += current.pos; + m718 += current.pos; + dCam_getBody()->Set(m70C, m718, m724, 0); + + break; + case 1: + talk(0); + if(m694 != fpcM_ERROR_PROCESS_ID_e) { + m73F = 2; + } + + break; + case 2: + if(talk(0) == fopMsgStts_BOX_CLOSED_e) { + m73F = 0; + } + + break; + } + + return false; } /* 00001600-00001658 .text eventOnPlrInit__13daObjFigure_cFv */ void daObjFigure_c::eventOnPlrInit() { - /* Nonmatching */ + ((daPy_lk_c*)dComIfGp_getLinkPlayer())->offPlayerNoDraw(); + dCam_getBody()->Reset(); + dCam_getBody()->Start(); + dComIfGs_offTmpBit(0x408); } /* 00001658-000016A8 .text eventOffPlrInit__13daObjFigure_cFv */ void daObjFigure_c::eventOffPlrInit() { - /* Nonmatching */ + ((daPy_lk_c*)dComIfGp_getLinkPlayer())->onPlayerNoDraw(); + dCam_getBody()->Stop(); + dComIfGs_onTmpBit(0x408); } /* 000016A8-00001788 .text talk__13daObjFigure_cFi */ -void daObjFigure_c::talk(int) { - /* Nonmatching */ +u16 daObjFigure_c::talk(int param_1) { + u16 msgStatus = 0xFF; + + if(m694 == fpcM_ERROR_PROCESS_ID_e) { + if(param_1 == 1) { + m69C = getMsg(); + } + + m694 = fopMsgM_messageSet(m69C, this); + mpCurrMsg = NULL; + } + else { + if(mpCurrMsg) { + msgStatus = mpCurrMsg->mStatus; + + if (msgStatus == fopMsgStts_MSG_DISPLAYED_e) { + mpCurrMsg->mStatus = next_msgStatus(&m69C); + if(mpCurrMsg->mStatus == fopMsgStts_MSG_CONTINUES_e) { + fopMsgM_messageSet(m69C); + } + } + else if (msgStatus == fopMsgStts_BOX_CLOSED_e) { + mpCurrMsg->mStatus = fopMsgStts_MSG_DESTROYED_e; + m694 = fpcM_ERROR_PROCESS_ID_e; + } + } + else { + mpCurrMsg = fopMsgM_SearchByID(m694); + } + } + + return msgStatus; } /* 00001788-000017D8 .text next_msgStatus__13daObjFigure_cFPUl */ -void daObjFigure_c::next_msgStatus(unsigned long*) { - /* Nonmatching */ +u16 daObjFigure_c::next_msgStatus(u32* pMsgNo) { + u16 msgStatus = fopMsgStts_MSG_CONTINUES_e; + + if(m72C) { + m72C++; + switch(*m72C) { + case 0: + m72C = NULL; + msgStatus = fopMsgStts_MSG_ENDS_e; + break; + default: + *pMsgNo = *m72C; + break; + } + } + else { + msgStatus = fopMsgStts_MSG_ENDS_e; + } + + return msgStatus; } /* 000017D8-000017EC .text getMsg__13daObjFigure_cFv */ -void daObjFigure_c::getMsg() { - /* Nonmatching */ +u32 daObjFigure_c::getMsg() { + m72C = NULL; + + return 0x37DD + getFigureNo(); } /* 000017EC-000017FC .text setMessage__13daObjFigure_cFUl */ -void daObjFigure_c::setMessage(unsigned long) { - /* Nonmatching */ +void daObjFigure_c::setMessage(u32 msgNo) { + m694 = fpcM_ERROR_PROCESS_ID_e; + m69C = msgNo; } /* 000017FC-00001828 .text getPrmFigureNo__13daObjFigure_cFv */ -void daObjFigure_c::getPrmFigureNo() { - /* Nonmatching */ +u8 daObjFigure_c::getPrmFigureNo() { + return daObj::PrmAbstract(this, PRM_FIGURE_NO_W, PRM_FIGURE_NO_S); } /* 00001828-00001954 .text setMtx__13daObjFigure_cFv */ void daObjFigure_c::setMtx() { - /* Nonmatching */ + mpPedestalModel->setBaseScale(scale); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(current.angle.y); + mpPedestalModel->setBaseTRMtx(mDoMtx_stack_c::get()); + cXyz scale(1.0f, 1.0f, 1.0f); + mpModel->setBaseScale(scale); + mDoMtx_stack_c::transS(current.pos.x, current.pos.y + 100.0f, current.pos.z); + mDoMtx_stack_c::YrotM(m736); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); + + if(mpMorf) { + mpMorf->getModel()->setBaseScale(scale); + mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + } + } /* 00001954-000019DC .text isFigureGet__13daObjFigure_cFUc */ -void daObjFigure_c::isFigureGet(unsigned char) { +BOOL daObjFigure_c::isFigureGet(u8 figureNo) { /* Nonmatching */ + + if(figureNo / 8 < 0x11) { + return dComIfGs_getEventReg(l_figure_comp[figureNo / 8]) & (1 << (figureNo & 7)); + } + + return false; } /* 000019DC-00001A80 .text getFigureBmd__13daObjFigure_cFUc */ -void daObjFigure_c::getFigureBmd(unsigned char) { - /* Nonmatching */ +int daObjFigure_c::getFigureBmd(u8 figureNo) { + u32 bmd = l_figure_dat_tbl[figureNo].mBmdId; + switch(figureNo) { + case 0x10: + if(dComIfGs_isEventBit(0x2D01)) { + bmd = 3; + } + + break; + case 0x12: + if(dComIfGs_isEventBit(0x2D01)) { + bmd = 6; + } + + break; + default: + break; + } + + return bmd; } /* 00001A80-00001AA0 .text daSampleCreate__FPv */ -static s32 daSampleCreate(void*) { - /* Nonmatching */ +static s32 daSampleCreate(void* i_this) { + return static_cast(i_this)->_create(); } /* 00001AA0-00001AC0 .text daSampleDelete__FPv */ -static BOOL daSampleDelete(void*) { - /* Nonmatching */ +static BOOL daSampleDelete(void* i_this) { + return static_cast(i_this)->_delete(); } /* 00001AC0-00001AE0 .text daSampleExecute__FPv */ -static BOOL daSampleExecute(void*) { - /* Nonmatching */ +static BOOL daSampleExecute(void* i_this) { + return static_cast(i_this)->_execute(); } /* 00001AE0-00001B00 .text daSampleDraw__FPv */ -static BOOL daSampleDraw(void*) { - /* Nonmatching */ +static BOOL daSampleDraw(void* i_this) { + return static_cast(i_this)->_draw(); } /* 00001B00-00001B08 .text daSampleIsDelete__FPv */ static BOOL daSampleIsDelete(void*) { - /* Nonmatching */ + return true; } /* 00001B08-00002148 .text linkDraw__FP14mDoExt_McaMorf */ -void linkDraw(mDoExt_McaMorf*) { +void linkDraw(mDoExt_McaMorf* pMorf) { /* Nonmatching */ + + pMorf->calc(); + j3dSys.setModel(pMorf->getModel()); + j3dSys.setTexture(j3dSys.getModel()->getModelData()->getTexture()); + j3dSys.getModel()->unlock(); + + static mDoExt_offCupOnAupPacket l_offCupOnAupPacket1; + static mDoExt_offCupOnAupPacket l_offCupOnAupPacket2; + static mDoExt_onCupOffAupPacket l_onCupOffAupPacket1; + static mDoExt_onCupOffAupPacket l_onCupOffAupPacket2; + + J3DShape* ZOffBlendShape[4]; + J3DShape* ZOffNoneShape[4]; + J3DShape* ZOnShape[4]; + + int i; + J3DMaterial* mat = j3dSys.getModel()->getModelData()->getJointNodePointer(0x13)->getMesh(); + int zoff_blend_cnt = 0; + int zoff_none_cnt = 0; + int zon_cnt = 0; + for (i = 0; i < 2; i++) { + while (mat) { + mat->setMaterialMode(1); + if (mat->getZMode()->getCompareEnable() == 0) { + if (mat->getBlend()->mBlendMode == 1) { + ZOffBlendShape[zoff_blend_cnt] = mat->getShape(); + zoff_blend_cnt++; + JUT_ASSERT(0x6E7, zoff_blend_cnt <= 4); + } else { + ZOffNoneShape[zoff_none_cnt] = mat->getShape(); + zoff_none_cnt++; + JUT_ASSERT(0x6EA, zoff_none_cnt <= 4); + } + } else { + ZOnShape[zon_cnt] = mat->getShape(); + zon_cnt++; + JUT_ASSERT(0x6EE, zon_cnt <= 4); + } + mat = mat->getNext(); + } + mat = j3dSys.getModel()->getModelData()->getJointNodePointer(0x15)->getMesh(); + } + + dComIfGd_setListP0(); + l_onCupOffAupPacket2.entryOpa(); + + for(int i = 0; i < 4; i++) { + ZOffBlendShape[i]->hide(); + ZOnShape[i]->hide(); + ZOffNoneShape[i]->show(); + } + + j3dSys.getModel()->getModelData()->getJointNodePointer(0x13)->entryIn(); + j3dSys.getModel()->getModelData()->getJointNodePointer(0x15)->entryIn(); + l_offCupOnAupPacket2.entryOpa(); + + for(int i = 0; i < 4; i++) { + ZOffBlendShape[i]->show(); + ZOffNoneShape[i]->hide(); + } + + j3dSys.getModel()->getModelData()->getJointNodePointer(0x13)->entryIn(); + j3dSys.getModel()->getModelData()->getJointNodePointer(0x15)->entryIn(); + + i = 0; + for (J3DMaterial* pMaterial = j3dSys.getModel()->getModelData()->getJointNodePointer(0)->getMesh(); pMaterial != NULL; pMaterial = pMaterial->getNext()) { + if(i != 2 && i != 5) { + pMaterial->getShape()->hide(); + } + i++; + } + + j3dSys.getModel()->getModelData()->getJointNodePointer(0)->entryIn(); + + i = 0; + for (J3DMaterial* pMaterial = j3dSys.getModel()->getModelData()->getJointNodePointer(0)->getMesh(); pMaterial != NULL; pMaterial = pMaterial->getNext()) { + if(i != 2 && i != 5) { + pMaterial->getShape()->show(); + } + else { + pMaterial->getShape()->hide(); + } + i++; + } + + l_onCupOffAupPacket1.entryOpa(); + + for(int i = 0; i < 4; i++) { + ZOffBlendShape[i]->hide(); + ZOnShape[i]->show(); + ZOffNoneShape[i]->hide(); + } + + j3dSys.getModel()->getModelData()->getJointNodePointer(0x13)->entryIn(); + j3dSys.getModel()->getModelData()->getJointNodePointer(0x15)->entryIn(); + + l_offCupOnAupPacket1.entryOpa(); + + for(int i = 0; i < 4; i++) { + ZOnShape[i]->hide(); + } + + dComIfGd_setListInvisisble(); + mDoExt_modelEntryDL(pMorf->getModel()); + + for (J3DMaterial* pMaterial = j3dSys.getModel()->getModelData()->getJointNodePointer(0)->getMesh(); pMaterial != NULL; pMaterial = pMaterial->getNext()) { + pMaterial->getShape()->hide(); + } + + j3dSys.getModel()->getModelData()->getJointNodePointer(0x13)->getMesh()->getShape()->show(); + j3dSys.getModel()->getModelData()->getJointNodePointer(0x15)->getMesh()->getShape()->show(); } static actor_method_class daSampleMethodTable = { diff --git a/src/d/d_snap.cpp b/src/d/d_snap.cpp index 6220b1c90..53b56c124 100644 --- a/src/d/d_snap.cpp +++ b/src/d/d_snap.cpp @@ -1446,7 +1446,7 @@ int dSnap_PhotoIndex2TableIndex(int photoIndex) { } /* 800CCFE4-800CD00C .text dSnap_GetFigRoomId__Fi */ -u8 dSnap_GetFigRoomId(int tableIndex) { +int dSnap_GetFigRoomId(int tableIndex) { if (tableIndex >= (int)ARRAY_SIZE(l_CharaData)) { return 0xFF; } diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 8835f0b85..3a70bb1f1 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -2641,12 +2641,6 @@ int mDoExt_3DlineMat0_c::getMaterialID() { return 0; } -/* 80016D88-80016DE4 .text __dt__24mDoExt_onCupOffAupPacketFv */ -mDoExt_onCupOffAupPacket::~mDoExt_onCupOffAupPacket() {} - -/* 80016DE4-80016E40 .text __dt__24mDoExt_offCupOnAupPacketFv */ -mDoExt_offCupOnAupPacket::~mDoExt_offCupOnAupPacket() {} - /* 80016E40-80016F14 .text __dt__15mDoExt_McaMorf2Fv */ mDoExt_McaMorf2::~mDoExt_McaMorf2() {}