From fdaeb3437d447b5a8cff31f56edc00f5ed671b1b Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Thu, 24 Feb 2022 14:04:56 -0800 Subject: [PATCH] shop_system stuff --- include/d/a/d_a_npc.h | 309 +++ include/d/a/d_a_shop_item_static.h | 48 + include/d/com/d_com_inf_game.h | 27 + include/d/d_attention.h | 1 + include/d/d_lib.h | 5 + include/d/d_select_cursor.h | 9 + include/d/meter/d_meter2_info.h | 5 + include/d/msg/d_msg_flow.h | 18 +- include/d/msg/d_msg_object.h | 25 +- include/d/particle/d_particle_copoly.h | 16 + include/d/shop/d_shop_item_ctrl.h | 20 + include/d/shop/d_shop_system.h | 161 ++ include/f_op/f_op_actor.h | 2 + include/f_op/f_op_actor_mng.h | 4 + include/f_op/f_op_msg_mng.h | 1 + include/m_Do/m_Do_lib.h | 2 + .../d/a/tag/d_a_tag_escape/d_a_tag_escape.h | 8 + .../rel/d/a/tag/d_a_tag_telop/d_a_tag_telop.h | 18 + rel/d/a/d_a_horse/d_a_horse.cpp | 5 - rel/d/a/tag/d_a_tag_escape/d_a_tag_escape.cpp | 38 +- .../a/tag/d_a_tag_lv5soup/d_a_tag_lv5soup.cpp | 2 +- rel/d/a/tag/d_a_tag_telop/d_a_tag_telop.cpp | 111 +- src/d/a/d_a_npc.cpp | 491 +---- src/d/a/d_a_shop_item_static.cpp | 439 +--- src/d/msg/d_msg_flow.cpp | 6 +- src/d/msg/d_msg_object.cpp | 4 +- src/d/particle/d_particle_copoly.cpp | 14 - src/d/shop/d_shop_item_ctrl.cpp | 121 +- src/d/shop/d_shop_system.cpp | 1812 ++++++++++++----- src/f_op/f_op_actor.cpp | 2 +- 30 files changed, 2110 insertions(+), 1614 deletions(-) diff --git a/include/d/a/d_a_npc.h b/include/d/a/d_a_npc.h index 371fecaf1f6..2c77d4d274b 100644 --- a/include/d/a/d_a_npc.h +++ b/include/d/a/d_a_npc.h @@ -2,5 +2,314 @@ #define D_A_D_A_NPC_H #include "dolphin/types.h" +#include "d/com/d_com_inf_game.h" +#include "global.h" + +class daNpcT_MotionSeqMngr_c { +public: + struct sequenceStepData_c {}; + + /* 80145898 */ void initialize(); + /* 801458C0 */ void play(u16, int*, f32*); + /* 80145A24 */ void checkEndSequence(); + +private: + /* 0x00 */ sequenceStepData_c* field_0x0; + /* 0x04 */ int field_0x4; + /* 0x08 */ int mNo; + /* 0x0C */ int mOffset; + /* 0x10 */ int mStepNo; + /* 0x14 */ int field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ u8 field_0x1c; + +public: + /* 8014D0C0 */ virtual ~daNpcT_MotionSeqMngr_c(); +}; + +class daNpcT_ActorMngr_c { +private: + /* 0x0 */ u32 mActorID; + +public: + /* 801456D4 */ void initialize(); + /* 801456E0 */ void entry(fopAc_ac_c*); + /* 801456FC */ void remove(); + /* 80145708 */ void getActorP(); + + /* 8014D108 */ virtual ~daNpcT_ActorMngr_c(); +}; + +class daNpcT_JntAnm_c { +private: + /* 0x000 */ daNpcT_ActorMngr_c field_0x0; + /* 0x008 */ cXyz field_0x8; + /* 0x014 */ cXyz field_0x14; + /* 0x020 */ cXyz* field_0x20; + /* 0x024 */ cXyz field_0x24; + /* 0x030 */ cXyz field_0x30[3]; + /* 0x054 */ cXyz field_0x54[3]; + /* 0x078 */ cXyz field_0x78[3]; + /* 0x09C */ cXyz field_0x9c[3]; + /* 0x0C0 */ cXyz mRad[3]; + /* 0x0E4 */ cXyz field_0xe4[3]; + /* 0x108 */ cXyz field_0x108; + /* 0x114 */ cXyz field_0x114; + /* 0x120 */ cXyz field_0x120; + /* 0x12C */ csXyz mEyeAngle; + /* 0x132 */ csXyz field_0x132; + /* 0x138 */ int mMode; + /* 0x13C */ u8 field_0x13c[4]; + /* 0x140 */ int field_0x140; + /* 0x144 */ u8 field_0x144[4]; + /* 0x148 */ f32 field_0x148; + /* 0x14C */ f32 field_0x14c; + /* 0x150 */ csXyz field_0x150; + /* 0x156 */ u8 field_0x156; + /* 0x157 */ u8 mDirectFlag; + /* 0x158 */ u8 field_0x158; + +public: + /* 80146C98 */ void initialize(); + /* 80146CD8 */ void setParam(fopAc_ac_c*, J3DModel*, cXyz*, int, int, int, f32, f32, f32, f32, + f32, f32, f32, f32, f32, f32, cXyz*); + /* 80147858 */ void calc(f32); + /* 80147C38 */ void calcJntRad(f32, f32, f32); + + /* 8014D150 */ virtual ~daNpcT_JntAnm_c(); +}; + +class daNpcT_DmgStagger_c { +public: + /* 80147DCC */ void setParam(fopAc_ac_c*, fopAc_ac_c*, s16); + /* 80147E3C */ void calc(int); + +private: + /* 0x00 */ csXyz field_0x0[2]; + /* 0x0C */ f32 field_0xc[2]; + /* 0x14 */ s16 mStagger; + /* 0x16 */ s16 field_0x16; + /* 0x18 */ u8 mRebirth; +}; + +struct daNpcT_evtData_c {}; + +struct daNpcT_faceMotionAnmData_c {}; + +struct daNpcT_pntData_c {}; + +struct daNpcT_motionAnmData_c {}; + +class mDoExt_McaMorfSO; + +class daNpcT_c : public fopAc_ac_c { +public: + /* 0x568 */ daNpcT_faceMotionAnmData_c* field_0x568; + /* 0x56C */ daNpcT_motionAnmData_c* field_0x56c; + /* 0x570 */ daNpcT_evtData_c* field_0x570; + /* 0x574 */ char** field_0x574; + /* 0x578 */ mDoExt_McaMorfSO* mMcaMorfAnm[2]; + /* 0x580 */ Z2Creature field_0x580; + /* 0x610 */ mDoExt_bckAnm mBckAnm; + /* 0x62C */ mDoExt_btpAnm mBtpAnm; + /* 0x644 */ mDoExt_btkAnm mBtkAnm; + /* 0x65C */ mDoExt_brkAnm mBrkAnm; + /* 0x674 */ mDoExt_bpkAnm mBpkAnm; + /* 0x68C */ dBgS_ObjAcch field_0x68c; + /* 0x864 */ dCcD_Stts field_0x864; + /* 0x8A0 */ dBgS_AcchCir field_0x8a0; + /* 0x8E0 */ request_of_phase_process_class field_0x8e0[10]; + /* 0x930 */ cBgS_GndChk field_0x930; + /* 0x96C */ u8 field_0xa6c[8]; + /* 0x974 */ dMsgFlow_c mFlow; + /* 0x9C0 */ dPaPoT_c field_0x9c0; + /* 0xA40 */ dCcD_Stts field_0xa40; + /* 0xA7C */ u8 field_0xa7c[4]; + /* 0xA80 */ f32 field_0xa80; + /* 0xA84 */ f32 field_0xa84; + /* 0xA89 */ u8 field_0xa88; + /* 0xA89 */ u8 field_0xa89; + /* 0xA8C */ dBgS_GndChk field_0xa8c; + /* 0xAE0 */ dBgS_LinChk field_0xae0; + /* 0xB50 */ daNpcT_MotionSeqMngr_c field_0xb50; + /* 0xB74 */ daNpcT_MotionSeqMngr_c field_0xb74; + /* 0xB98 */ daNpcT_ActorMngr_c field_0xb98; + /* 0xBA0 */ daNpcT_ActorMngr_c field_0xba0; + /* 0xBA8 */ daNpcT_JntAnm_c field_0xba8; + /* 0xD08 */ daNpcT_DmgStagger_c field_0xd08; + /* 0xD24 */ cXyz field_0xd24; + /* 0xD30 */ cXyz field_0xd30; + /* 0xD3C */ cXyz field_0xd3c; + /* 0xD48 */ cXyz field_0xd48; + /* 0xD54 */ cXyz field_0xd54; + /* 0xD60 */ cXyz field_0xd60; + /* 0xD6C */ cXyz field_0xd6c; + /* 0xD78 */ csXyz field_0xd78; + /* 0xD7E */ csXyz field_0xd7e; + /* 0xD84 */ csXyz field_0xd84; + /* 0xD8A */ csXyz field_0xd8a; + /* 0xD90 */ u32 field_0xd90; + /* 0xD94 */ u32 field_0xd94; + /* 0xD98 */ u32 field_0xd98; + /* 0xD9C */ u32 field_0xd9c; + /* 0xDA0 */ u8 field_0xda0[8]; + /* 0xDA8 */ u32 field_0xda8; + /* 0xDAC */ int field_0xdac; + /* 0xDB0 */ int mCutType; + /* 0xDB4 */ int field_0xdb4; + /* 0xDB8 */ int field_0xdb8; + /* 0xDBC */ int mTimer; + /* 0xDC0 */ int field_0xdc0; + /* 0xDC4 */ u8 field_0xdc4[4]; + /* 0xDC8 */ s16 field_0xdc8; + /* 0xDCA */ s16 field_0xdca; + /* 0xDCC */ u8 field_0xdcc[8]; + /* 0xDD4 */ s16 field_0xdd4; + /* 0xDD8 */ s16 field_0xdd8; + /* 0xDDA */ s16 field_0xdda; + /* 0xDDC */ f32 field_0xddc; + /* 0xDE0 */ f32 field_0xde0; + /* 0xDE4 */ f32 field_0xde4; + /* 0xDE8 */ u8 field_0xde8[0xC]; + /* 0xDF4 */ f32 field_0xdf4; + /* 0xDF8 */ u8 field_0xdf8[4]; + /* 0xDFC */ f32 field_0xdfc; + /* 0xE00 */ cXyz field_0xe00; + /* 0xE0C */ cXyz field_0xe0c; + /* 0xE18 */ s16 field_0xe18; + /* 0xE1A */ s16 field_0xe1a; + /* 0xE1C */ s16 field_0xe1c; + /* 0xE1E */ u16 field_0xe1e; + /* 0xE20 */ u16 field_0xe20; + /* 0xE22 */ u16 field_0xe22; + /* 0xE24 */ u8 field_0xe24; + /* 0xE25 */ u8 field_0xe25; + /* 0xE26 */ u8 field_0xe26; + /* 0xE27 */ u8 field_0xe27; + /* 0xE28 */ u8 field_0xe28; + /* 0xE29 */ u8 field_0xe29; + /* 0xE2A */ u8 field_0xe2a; + /* 0xE2B */ u8 field_0xe2b; + /* 0xE2C */ u8 field_0xe2c; + /* 0xE2D */ u8 field_0xe2d; + /* 0xE2E */ u8 field_0xe2e[2]; + /* 0xE30 */ u16 field_0xe30; + /* 0xE32 */ u8 field_0xe32; + /* 0xE33 */ u8 field_0xe33; + /* 0xE34 */ u8 field_0xe34; + /* 0xE35 */ u8 field_0xe35[7]; + /* 0xE3C vtable */ + +public: + /* 80147FA4 */ void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*); + /* 80147FD4 */ void srchActor(void*, void*); + /* 80148058 */ void getTrnsfrmAnmP(char const*, int); + /* 80148094 */ void getTrnsfrmKeyAnmP(char const*, int); + /* 801480D0 */ void getTexPtrnAnmP(char const*, int); + /* 8014810C */ void getTexSRTKeyAnmP(char const*, int); + /* 80148148 */ void getTevRegKeyAnmP(char const*, int); + /* 80148184 */ void getColorAnmP(char const*, int); + /* 801481C0 */ void setBckAnm(J3DAnmTransform*, f32, int, int, int, bool); + /* 80148204 */ void setMcaMorfAnm(J3DAnmTransformKey*, f32, f32, int, int, int); + /* 801482F8 */ void setBtpAnm(J3DAnmTexPattern*, J3DModelData*, f32, int); + /* 80148338 */ void setBtkAnm(J3DAnmTextureSRTKey*, J3DModelData*, f32, int); + /* 80148378 */ void setBrkAnm(J3DAnmTevRegKey*, J3DModelData*, f32, int); + /* 801483B8 */ void setBpkAnm(J3DAnmColor*, J3DModelData*, f32, int); + /* 801483F8 */ void loadRes(s8 const*, char const**); + /* 801484AC */ void deleteRes(s8 const*, char const**); + /* 8014852C */ void execute(); + /* 8014886C */ void draw(int, int, f32, _GXColorS10*, f32, int, int, int); + /* 80148C70 */ void setEnvTevColor(); + /* 80148CCC */ void setRoomNo(); + /* 80148D10 */ void checkEndAnm(f32); + /* 80148DD0 */ void checkEndAnm(J3DFrameCtrl*, f32); + /* 80148E4C */ void playAllAnm(); + /* 80149190 */ void setMtx(); + /* 8014924C */ void ctrlFaceMotion(); + /* 80149300 */ void ctrlMotion(); + /* 801493B8 */ void ctrlMsgAnm(int*, int*, fopAc_ac_c*, int); + /* 8014A224 */ void evtChange(); + /* 8014A388 */ void setFaceMotionAnm(int, bool); + /* 8014A908 */ void setPos(cXyz); + /* 8014AA18 */ void setAngle(s16); + /* 8014A99C */ void setAngle(csXyz); + /* 8014AA40 */ void hitChk(dCcD_GObjInf*, u32); + /* 8014AAD0 */ void setDamage(int, int, int); + /* 8014ABD0 */ void chkActorInSight(fopAc_ac_c*, f32, s16); + /* 8014ACF0 */ void chkPointInArea(cXyz, cXyz, f32, f32, f32, s16); + /* 8014ADA0 */ void chkPointInArea(cXyz, cXyz, cXyz, s16); + /* 8014AE1C */ void chkFindActor(fopAc_ac_c*, int, s16); + /* 8014B024 */ void chkWolfAction(); + /* 8014B0C8 */ void chkFindWolf(s16, int, int, f32, f32, f32, f32, int); + /* 8014B338 */ void srchPlayerActor(); + /* 8014B3EC */ void getAttnPos(fopAc_ac_c*); + /* 8014B4A4 */ void turn(s16, int, int); + /* 8014B648 */ void step(s16, int, int, int, int); + /* 8014B808 */ void calcSpeedAndAngle(cXyz, int, s16, s16); + /* 8014BB00 */ void getActorDistance(fopAc_ac_c*, int, int); + /* 8014BBF0 */ void initTalk(int, fopAc_ac_c**); + /* 8014BC78 */ void talkProc(int*, int, fopAc_ac_c**, int); + /* 8014BE2C */ void getNearestActorP(s16); + /* 8014BEE4 */ void getEvtAreaTagP(int, int); + /* 8014BFB0 */ void getShopItemTagP(); + /* 8014C030 */ void setHitodamaPrtcl(); + + /* 8014CD20 */ virtual ~daNpcT_c(); + /* 801490D4 */ virtual void ctrlBtk(); + /* 8014CC14 */ virtual void ctrlSubFaceMotion(int); + /* 8014CC40 */ virtual bool checkChangeJoint(int); + /* 8014CC38 */ virtual bool checkRemoveJoint(int); + /* 8014CC5C */ virtual s32 getBackboneJointNo(); + /* 8014CC54 */ virtual s32 getNeckJointNo(); + /* 8014CC4C */ virtual s32 getHeadJointNo(); + /* 8014CC90 */ virtual s32 getFootLJointNo(); + /* 8014CC88 */ virtual s32 getFootRJointNo(); + /* 8014D0A8 */ virtual bool getEyeballLMaterialNo(); + /* 8014D0B0 */ virtual bool getEyeballRMaterialNo(); + /* 8014D0B8 */ virtual bool getEyeballMaterialNo(); + /* 8014951C */ virtual void ctrlJoint(J3DJoint*, J3DModel*); + /* 8014CC48 */ virtual void afterJntAnm(int); + /* 8014CC24 */ virtual void setParam(); + /* 8014CC80 */ virtual bool checkChangeEvt(); + /* 8014CC78 */ virtual bool evtTalk(); + /* 8014CC70 */ virtual bool evtEndProc(); + /* 8014CC68 */ virtual bool evtCutProc(); + /* 8014CC64 */ virtual void setAfterTalkMotion(); + /* 8014997C */ virtual void evtProc(); + /* 8014CC20 */ virtual void action(); + /* 8014CC1C */ virtual void beforeMove(); + /* 8014CC18 */ virtual void afterMoved(); + /* 8014CC10 */ virtual void setAttnPos(); + /* 80149BB4 */ virtual void setFootPos(); + /* 8014CC0C */ virtual void setCollision(); + /* 80149D7C */ virtual void setFootPrtcl(cXyz*, f32, f32); + /* 8014A05C */ virtual bool checkCullDraw(); + /* 8014A064 */ virtual void twilight(); + /* 8014CC98 */ virtual bool chkXYItems(); + /* 8014A0B0 */ virtual void evtOrder(); + /* 8014CBF4 */ virtual void decTmr(); + /* 8014A324 */ virtual void clrParam(); + /* 8014CC30 */ virtual bool drawDbgInfo(); + /* 8014CC28 */ virtual void drawOtherMdl(); + /* 8014CC2C */ virtual void drawGhost(); + /* 8014CCA0 */ virtual bool afterSetFaceMotionAnm(int, int, f32, int); + /* 8014CCE0 */ virtual bool afterSetMotionAnm(int, int, f32, int); + /* 8014CCB0 */ virtual void getFaceMotionAnm(daNpcT_faceMotionAnmData_c); + /* 8014CCF0 */ virtual void getMotionAnm(daNpcT_motionAnmData_c); + /* 8014CCEC */ virtual void changeAnm(int*, int*); + /* 8014CCAC */ virtual void changeBck(int*, int*); + /* 8014CCA8 */ virtual void changeBtp(int*, int*); + /* 8014CCE8 */ virtual void changeBtk(int*, int*); + /* 8014A628 */ virtual void setMotionAnm(int, f32, int); + + static u8 const mCcDObjData[48]; + static u8 mCcDCyl[68]; + static u8 mCcDSph[64]; + static u8 mFindActorPtrs[200]; + static u8 mSrchName[2 + 2 /* padding */]; + static u8 mFindCount[4]; +}; + +STATIC_ASSERT(sizeof(daNpcT_c) == 0xE40); #endif /* D_A_D_A_NPC_H */ diff --git a/include/d/a/d_a_shop_item_static.h b/include/d/a/d_a_shop_item_static.h index c8e7d7359c3..d6bc8342df3 100644 --- a/include/d/a/d_a_shop_item_static.h +++ b/include/d/a/d_a_shop_item_static.h @@ -2,5 +2,53 @@ #define D_A_D_A_SHOP_ITEM_STATIC_H #include "dolphin/types.h" +#include "d/a/d_a_itembase.h" + +struct ResourceData { + char* get_arcName() const { return mArcName; } + s16 get_bmdName() const { return mBmdName; } + s16 get_btk1Name() const { return mBtkName; } + s16 get_bpk1Name() const { return mBpkName; } + s16 get_bck1Name() const { return mBckName; } + s16 get_bxa1Name() const { return mBxaName; } + s16 get_brk1Name() const { return mBrkName; } + s16 get_btp1Name() const { return mBtpName; } + + /* 0x00 */ char* mArcName; + /* 0x04 */ s16 mBmdName; + /* 0x06 */ s16 mBtkName; + /* 0x08 */ s16 mBpkName; + /* 0x0A */ s16 mBckName; + /* 0x0C */ s16 mBxaName; + /* 0x0E */ s16 mBrkName; + /* 0x10 */ s16 mBtpName; + /* 0x14 */ f32 mOffsetY; + /* 0x18 */ f32 mScale; + /* 0x1C */ s16 mAngleOffsetX; + /* 0x1E */ SVec mAngle; + /* 0x24 */ u32 mFlag; + /* 0x28 */ u8 mShadowSize; + /* 0x29 */ u8 mCollisionH; + /* 0x2A */ u8 mCollisionR; + /* 0x2B */ s8 mTevFrm; + /* 0x2C */ s8 mBtpFrm; +}; // Size: 0x30 + +class daShopItem_c : public daItemBase_c { +public: + /* 80037C14 */ csXyz* getRotateP(); + /* 80037C1C */ cXyz* getPosP(); + + u8 getShopItemID() const { return mShopItemID; } + + static ResourceData const mData[23]; + +private: + /* 0x92C */ Mtx mMtx; + /* 0x95C */ int field_0x95c; + /* 0x960 */ s16 mAngleX; + /* 0x962 */ s16 mAngleY; + /* 0x964 */ u8 mShopItemID; +}; #endif /* D_A_D_A_SHOP_ITEM_STATIC_H */ diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h index 85a78ee2d1e..d8dc4a74785 100644 --- a/include/d/com/d_com_inf_game.h +++ b/include/d/com/d_com_inf_game.h @@ -252,6 +252,16 @@ public: m3DSetFlag = flag; } + void setDoStatusForce(u8 status, u8 flag) { + mDoStatusForce = status; + mDoSetFlagForce = flag; + } + + void setAStatusForce(u8 status, u8 flag) { + mAStatusForce = status; + mASetFlagForce = flag; + } + void setItemRupeeCount(int rupees) { mItemRupeeCount += rupees; } void setItemMagicCount(s16 magic) { mItemMagicCount += magic; } void setItemMaxMagicCount(s16 max) { mItemMaxMagicCount += max; } @@ -341,6 +351,7 @@ public: void offPauseFlag() { mPauseFlag = false; } void show2dOn() { mShow2D = 1; } s8 getLayerOld() { return mLayerOld; } + void setMesgCancelButton(u8 button) { mMesgCancelButton = button; } public: /* 0x00000 */ dBgS mBgs; @@ -955,6 +966,10 @@ inline void dComIfGs_onSaveSwitch(int i_stageNo, int i_no) { g_dComIfG_gameInfo.info.getSavedata().getSave(i_stageNo).getBit().onSwitch(i_no); } +inline void dComIfGs_onSaveSwitch(int i_no) { + g_dComIfG_gameInfo.info.getMemory().getBit().onSwitch(i_no); +} + inline void dComIfGs_offSaveSwitch(int i_stageNo, int i_no) { g_dComIfG_gameInfo.info.getSavedata().getSave(i_stageNo).getBit().offSwitch(i_no); } @@ -1444,6 +1459,14 @@ inline void dComIfGp_setSButtonStatusForce(u8 status, u8 flag) { g_dComIfG_gameInfo.play.setSButtonStatusForce(status, flag); } +inline void dComIfGp_setDoStatusForce(u8 status, u8 flag) { + g_dComIfG_gameInfo.play.setDoStatusForce(status, flag); +} + +inline void dComIfGp_setAStatusForce(u8 status, u8 flag) { + g_dComIfG_gameInfo.play.setAStatusForce(status, flag); +} + inline u8 dComIfGp_getAStatus() { return g_dComIfG_gameInfo.play.getAStatus(); } @@ -1676,6 +1699,10 @@ inline void dComIfGp_offPauseFlag() { g_dComIfG_gameInfo.play.offPauseFlag(); } +inline void dComIfGp_setMesgCancelButton(u8 button) { + g_dComIfG_gameInfo.play.setMesgCancelButton(button); +} + inline s32 dComIfGp_checkStatus(u16 flags) { return g_dComIfG_gameInfo.play.checkStatus(flags); } diff --git a/include/d/d_attention.h b/include/d/d_attention.h index 4f35de56040..faafe287d95 100644 --- a/include/d/d_attention.h +++ b/include/d/d_attention.h @@ -200,6 +200,7 @@ public: /* 8016E424 */ void LockEdge(); /* 80182994 */ void GetCheckObjectCount(); /* 80182AD0 */ void keepLock(int); + /* 8014B010 */ void getDistTable(int); dAttCatch_c& getCatghTarget() { return mCatghTarget; } bool chkFlag(u32 flag) { return mFlags & flag; } diff --git a/include/d/d_lib.h b/include/d/d_lib.h index 27a0715dce1..028b9b68e99 100644 --- a/include/d/d_lib.h +++ b/include/d/d_lib.h @@ -7,6 +7,11 @@ struct JKRAramArchive; u32 dLib_getExpandSizeFromAramArchive(JKRAramArchive* arc, char const* resName); struct STControl { + STControl() { + setWaitParm(15, 15, 0, 0, 0.9f, 0.5f, 0, 0x2000); + init(); + } + /* 80032044 */ STControl(s16, s16, s16, s16, f32, f32, s16, s16); /* 80032088 */ void setWaitParm(s16, s16, s16, s16, f32, f32, s16, s16); /* 800320AC */ void init(); diff --git a/include/d/d_select_cursor.h b/include/d/d_select_cursor.h index 5cb8af07a78..eee23d7f3a5 100644 --- a/include/d/d_select_cursor.h +++ b/include/d/d_select_cursor.h @@ -42,7 +42,16 @@ public: /* 80194C30 */ virtual void draw(); /* 801949EC */ virtual ~dSelect_cursor_c(); + void setPos(f32 x, f32 y) { + field_0x58 = x; + field_0x5c = y; + } + private: + u8 field_0x4[0x54]; + f32 field_0x58; + f32 field_0x5c; + u8 field_0x60[0x58]; }; #endif /* D_D_SELECT_CURSOR_H */ diff --git a/include/d/meter/d_meter2_info.h b/include/d/meter/d_meter2_info.h index 8028c7daffc..3615280b07e 100644 --- a/include/d/meter/d_meter2_info.h +++ b/include/d/meter/d_meter2_info.h @@ -148,6 +148,7 @@ public: void offLifeGaugeSE() { mLifeGaugeSE = 0; } u8 getLifeGaugeSE() { return mLifeGaugeSE; } const char* getSaveStageName() { return mSaveStageName; } + void onShopTalkFlag() { mShopTalkFlag = true; } public: /* 0x04 */ u8 unk4[4]; @@ -430,6 +431,10 @@ inline const char* dMeter2Info_getSaveStageName() { return g_meter2_info.getSaveStageName(); } +inline void dMeter2Info_onShopTalkFlag() { + g_meter2_info.onShopTalkFlag(); +} + char* dMeter2Info_getNumberTextureName(int pIndex); #endif /* D_METER_D_METER2_INFO_H */ diff --git a/include/d/msg/d_msg_flow.h b/include/d/msg/d_msg_flow.h index f387463e3e5..7682cafab4a 100644 --- a/include/d/msg/d_msg_flow.h +++ b/include/d/msg/d_msg_flow.h @@ -22,10 +22,10 @@ public: /* 80249F48 */ ~dMsgFlow_c(); /* 80249F90 */ void init(fopAc_ac_c*, int, int, fopAc_ac_c**); /* 8024A13C */ void checkOpenDoor(fopAc_ac_c*, int*); - /* 8024A2D8 */ void doFlow(fopAc_ac_c*, fopAc_ac_c**, int); + /* 8024A2D8 */ int doFlow(fopAc_ac_c*, fopAc_ac_c**, int); /* 8024A424 */ void checkEventRender(int*, int*, int*, int*); /* 8024A4C4 */ void remove(); - /* 8024A528 */ void getEventId(int*); + /* 8024A528 */ u16 getEventId(int*); /* 8024A538 */ void getMsgNo(); /* 8024A540 */ void getNowMsgNo(); /* 8024A548 */ void getMsg(); @@ -47,7 +47,7 @@ public: /* 8024B180 */ void query002(mesg_flow_node_branch*, fopAc_ac_c*, int); /* 8024B208 */ void query003(mesg_flow_node_branch*, fopAc_ac_c*, int); /* 8024B250 */ void query004(mesg_flow_node_branch*, fopAc_ac_c*, int); - /* 8024B2C0 */ void query005(mesg_flow_node_branch*, fopAc_ac_c*, int); + /* 8024B2C0 */ u16 query005(mesg_flow_node_branch*, fopAc_ac_c*, int); /* 8024B2F8 */ void query006(mesg_flow_node_branch*, fopAc_ac_c*, int); /* 8024B32C */ void query007(mesg_flow_node_branch*, fopAc_ac_c*, int); /* 8024B45C */ void query008(mesg_flow_node_branch*, fopAc_ac_c*, int); @@ -140,19 +140,23 @@ public: /* 8024DA78 */ void event041(mesg_flow_node_event*, fopAc_ac_c*); /* 8024DAA8 */ bool event042(mesg_flow_node_event*, fopAc_ac_c*); + u8 isSelectMessage() { return mSelectMessage; } + void onNonStopJunpFlowFlag() { mNonStopJunpFlowFlag = 1; } + u16 getSelectNum() { return query005(NULL, NULL, 0); } + static u8 mQueryList[636]; static u8 mEventList[516]; private: /* 0x00 */ void* vtable; - /* 0x04 */ void* field_0x04; - /* 0x08 */ void* field_0x08; - /* 0x0C */ void* field_0x0c; + /* 0x04 */ void* mFlow_p; + /* 0x08 */ void* mLabelInfo_p; + /* 0x0C */ void* mFlowNodeTBL; /* 0x10 */ u16 field_0x10; /* 0x12 */ u16 field_0x12; /* 0x14 */ fopAc_ac_c* field_0x14; /* 0x18 */ int field_0x18; - /* 0x1C */ u16 field_0x1c; + /* 0x1C */ u16 mFlow; /* 0x1E */ u8 field_0x1e[2]; /* 0x20 */ int mMsg; /* 0x24 */ u8 mSelectMessage; diff --git a/include/d/msg/d_msg_object.h b/include/d/msg/d_msg_object.h index b9d4b0f6f95..df2380affc0 100644 --- a/include/d/msg/d_msg_object.h +++ b/include/d/msg/d_msg_object.h @@ -79,7 +79,7 @@ public: /* 8023768C */ void getSelectBombPriceLocal(); /* 8023773C */ void setEquipBombInfoLocal(); /* 80237748 */ void updateEquipBombInfoLocal(); - /* 802378B8 */ void setShopWaitTimer(u8); + /* 802378B8 */ static void setShopWaitTimer(u8); /* 802378CC */ void setSelectWordFlagLocal(u8); /* 802378D4 */ void isHowlHearingModeLocal(); /* 80237934 */ void isCameraCancelFlag(); @@ -123,12 +123,12 @@ public: /* 8023826C */ void setTalkActor(fopAc_ac_c*); /* 8023829C */ void onMsgSendControl(); /* 802382C8 */ void offMsgSendControl(); - /* 802382F4 */ void isMsgSendControl(); - /* 80238320 */ void onMsgSend(); + /* 802382F4 */ static int isMsgSendControl(); + /* 80238320 */ static void onMsgSend(); /* 8023834C */ void offMsgSend(); /* 80238378 */ void isMsgSend(); /* 802383A4 */ void isMouthCheck(); - /* 802383D0 */ void getMessageID(); + /* 802383D0 */ static u32 getMessageID(); /* 802383E4 */ void getSmellTypeMessageID(); /* 80238410 */ void setSmellType(u8); /* 80238440 */ void getSelectCursorPos(); @@ -150,7 +150,16 @@ public: /* 80238638 */ void getItemEquipButton(); /* 8023864C */ void setSelectCancelPos(u8); + void setShopWaitTimerLocal(u8 timer) { field_0x4c9 = timer; } + u8 getSelectPushFlag() { return mSelectPushFlag; } + u8 getSelectCancelPos() { return mSelectCancelPos; } + /* 0x100 */ fopAc_ac_c* field_0x100; + /* 0x104 */ u8 field_0x104[0x9D]; + /* 0x1A1 */ u8 mSelectCancelPos; + /* 0x1A2 */ u8 mSelectPushFlag; + /* 0x1A3 */ u8 field_0x1a3[0x326]; + /* 0x4C9 */ u8 field_0x4c9; }; s16 dMsgObject_getGroupID(); @@ -163,8 +172,16 @@ inline bool dMsgObject_isTalkNowCheck() { return dMsgObject_getMsgObjectClass()->getStatus() != 1 ? true : false; } +inline u32 dMsgObject_getMessageID() { + return dMsgObject_c::getMessageID(); +} + inline void dMsgObject_readMessageGroup(mDoDvdThd_mountXArchive_c** param_0) { dMsgObject_getMsgObjectClass()->readMessageGroup(param_0); } +inline void dMsgObject_setShopWaitTimer(u8 timer) { + dMsgObject_c::setShopWaitTimer(timer); +} + #endif /* D_MSG_D_MSG_OBJECT_H */ diff --git a/include/d/particle/d_particle_copoly.h b/include/d/particle/d_particle_copoly.h index 561b75ea19d..6364c0bee73 100644 --- a/include/d/particle/d_particle_copoly.h +++ b/include/d/particle/d_particle_copoly.h @@ -28,4 +28,20 @@ public: /* 0x37 */ u8 field_0x37; }; +struct dPaPoT_c { + /* 8005115C */ void setEffectTwo(dKy_tevstr_c const*, cXyz const*, u32, u32, cXyz const*, + cXyz const*, cXyz const*, csXyz const*, cXyz const*, s8, f32, + f32); + /* 80051294 */ void clearTwoAllID(); + /* 80051470 */ void getRightEffType(int) const; + /* 8005147C */ void getLeftEffType(int) const; + /* 80051494 */ void getRightEmitter(int, int); + /* 800514DC */ void getLeftEmitter(int, int); + + static u8 m_typeTwoData[36]; + static u8 m_emitterTwoData[36]; + + u8 field_0x0[0x80]; +}; + #endif /* D_PARTICLE_D_PARTICLE_COPOLY_H */ diff --git a/include/d/shop/d_shop_item_ctrl.h b/include/d/shop/d_shop_item_ctrl.h index 662cb26b8db..72f6aa01745 100644 --- a/include/d/shop/d_shop_item_ctrl.h +++ b/include/d/shop/d_shop_item_ctrl.h @@ -2,5 +2,25 @@ #define D_SHOP_D_SHOP_ITEM_CTRL_H #include "dolphin/types.h" +#include "d/a/d_a_shop_item_static.h" + +class dShopItemCtrl_c { +public: + /* 80196914 */ dShopItemCtrl_c(); + /* 801969A0 */ cXyz getCurrentPos(int); + /* 80196A3C */ bool isHomePos(int); + /* 80196AF0 */ void setRotateAnime(int); + /* 80196BA4 */ void setZoomAnime(int, cXyz*, s16, bool); + + /* 80196958 */ virtual ~dShopItemCtrl_c(); + + void setItemIndex(int i, u32 index) { mItemIndex[i] = index; } + u32 getItemIndex(int i) { return mItemIndex[i]; } + u16 getMessageIndex(int i) { return mMessageIndex[i]; } + +private: + /* 0x04 */ u32 mItemIndex[7]; + /* 0x20 */ u16 mMessageIndex[7]; +}; #endif /* D_SHOP_D_SHOP_ITEM_CTRL_H */ diff --git a/include/d/shop/d_shop_system.h b/include/d/shop/d_shop_system.h index 9728f22184c..7408358232a 100644 --- a/include/d/shop/d_shop_system.h +++ b/include/d/shop/d_shop_system.h @@ -2,5 +2,166 @@ #define D_SHOP_D_SHOP_SYSTEM_H #include "dolphin/types.h" +#include "d/shop/d_shop_item_ctrl.h" +#include "d/a/d_a_npc.h" + +typedef int (*ShopCam_actionFunc)(void); + +class ShopCam_action_c { +public: + /* 80196544 */ void setCamDataIdx(fopAc_ac_c*, fopAc_ac_c*, fopAc_ac_c*, fopAc_ac_c*, cXyz*, + cXyz*); + /* 80196608 */ void setCamDataIdx2(fopAc_ac_c*, fopAc_ac_c*, fopAc_ac_c*, fopAc_ac_c*, + fopAc_ac_c*, fopAc_ac_c*, fopAc_ac_c*, cXyz*, cXyz*); + /* 801968B8 */ void setMasterCamCtrPos(cXyz*); + + void setCameraSpeed(f32 param_0, f32 param_1, f32 param_2, f32 param_3) { + field_0xc0 = param_0; + field_0xc4 = param_1; + field_0xc8 = param_2; + field_0xcc = param_3; + } + + void SetSelectIdx(s16 idx) { + mSelectIdx = idx; + setCameraSpeed(0.25f, 20.0f, 0.25f, 5.0f); + } + + /* 0x00 */ int field_0x0; + /* 0x04 */ int field_0x4; + /* 0x08 */ ShopCam_actionFunc mCamActionFunc; + /* 0x0C */ u8 field_0xc[0xC]; + /* 0x18 */ fopAc_ac_c* field_0x18; + /* 0x1C */ fopAc_ac_c* field_0x1c; + /* 0x20 */ fopAc_ac_c* field_0x20; + /* 0x24 */ fopAc_ac_c* field_0x24; + /* 0x28 */ fopAc_ac_c* field_0x28; + /* 0x2C */ fopAc_ac_c* field_0x2c; + /* 0x30 */ fopAc_ac_c* field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ cXyz field_0x38; + /* 0x44 */ cXyz field_0x44; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ cXyz field_0x54; + /* 0x60 */ cXyz field_0x60; + /* 0x6C */ f32 field_0x6c; + /* 0x70 */ cXyz field_0x70; + /* 0x7C */ cXyz field_0x7c; + /* 0x88 */ cXyz field_0x88; + /* 0x94 */ f32 field_0x94; + /* 0x98 */ cXyz field_0x98; + /* 0xA4 */ cXyz field_0xa4; + /* 0xB0 */ cXyz field_0xb0; + /* 0xBC */ f32 field_0xbc; + /* 0xC0 */ f32 field_0xc0; + /* 0xC4 */ f32 field_0xc4; + /* 0xC8 */ f32 field_0xc8; + /* 0xCC */ f32 field_0xcc; + /* 0xD0 */ u8 field_0xd0[4]; + /* 0xD4 */ s16 mSelectIdx; + /* 0xD6 */ s16 field_0xd6; + /* 0xD8 */ s16 field_0xd8; + /* 0xDA */ u8 field_0xda; +}; + +class dShopSystem_c : public daNpcT_c { +public: + enum { + /* 0x0 */ SEQ_WAIT, + /* 0x1 */ SEQ_START, + /* 0x2 */ SEQ_SELECT_WAIT, + /* 0x3 */ SEQ_SELECT_START, + /* 0x4 */ SEQ_SELECT, + /* 0x5 */ SEQ_MOVING, + /* 0x6 */ SEQ_DECIDE, + /* 0x7 */ SEQ_CHOOSE, + /* 0x8 */ SEQ_DECIDE_YES, + /* 0x9 */ SEQ_DECIDE_NO, + /* 0xA */ SEQ_FINISH, + }; + + /* 80197338 */ void initShopSystem(); + /* 801975C0 */ void onFlag(int); + /* 801975DC */ void offFlag(int); + /* 801975F8 */ BOOL isFlag(int); + /* 80197618 */ void onSoldOutItemFlag(int); + /* 80197634 */ void offSoldOutItemFlag(int); + /* 80197650 */ BOOL isSoldOutItemFlag(int); + /* 80197670 */ int checkController(u8, dMsgFlow_c*); + /* 80197808 */ int chooseItem3(u8); + /* 80197DD0 */ int chooseItem5(u8); + /* 80198250 */ int chooseItem4(u8); + /* 80198444 */ int moveCursor(int, u8); + /* 80198488 */ int moveCursor0(int, u8); + /* 80198708 */ int moveCursor1(int, u8); + /* 80198878 */ int drawCursor(); + /* 80198950 */ int itemRotate(); + /* 80198A2C */ int itemZoom(cXyz*); + /* 801990B0 */ int seq_wait(fopAc_ac_c*, dMsgFlow_c*); + /* 801990B8 */ int seq_start(fopAc_ac_c*, dMsgFlow_c*); + /* 8019936C */ int seq_select_wait(fopAc_ac_c*, dMsgFlow_c*); + /* 801993C4 */ int seq_select_start(fopAc_ac_c*, dMsgFlow_c*); + /* 8019959C */ int seq_select(fopAc_ac_c*, dMsgFlow_c*); + /* 80199A18 */ int seq_moving(fopAc_ac_c*, dMsgFlow_c*); + /* 80199BF8 */ int seq_decide(fopAc_ac_c*, dMsgFlow_c*); + /* 80199D14 */ int seq_choose(fopAc_ac_c*, dMsgFlow_c*); + /* 80199E28 */ int seq_decide_yes(fopAc_ac_c*, dMsgFlow_c*); + /* 80199FA4 */ int seq_decide_no(fopAc_ac_c*, dMsgFlow_c*); + /* 8019A020 */ int seq_finish(fopAc_ac_c*, dMsgFlow_c*); + /* 8019A0C0 */ bool seq_event(fopAc_ac_c*, dMsgFlow_c*); + /* 8019A0D0 */ int shop_init(bool); + /* 8019A158 */ void shop_process(fopAc_ac_c*, dMsgFlow_c*); + /* 8019A238 */ void createShopItem(int); + /* 8019A344 */ void setSeq(u8); + /* 8019A354 */ void setSoldOutFlag(); + /* 8019A364 */ void setSoldOut(); + /* 8019A4F4 */ void setSoldOutItemHide(); + /* 8019A564 */ void deleteObject(); + /* 8019A5D0 */ void searchItemActor(); + /* 8019AB00 */ int getFlowNodeNum(); + /* 8019AB1C */ void setSellItemMax(u8); + /* 8019AB24 */ bool checkShopOpen(); + /* 8019AB60 */ bool checkLeftTrigger(STControl*); + /* 8019AB84 */ bool checkRightTrigger(STControl*); + /* 8019ABA8 */ bool dpdMove(); + + /* 801974E4 */ virtual ~dShopSystem_c(); + /* 8019ACF0 */ virtual bool getResName2(int); + /* 8019ACE0 */ virtual int beforeStartSeqAction(dMsgFlow_c*, int); + /* 8019ACE8 */ virtual int beforeSelectSeqAction(dMsgFlow_c*, int); + + bool chkSpMode() { return mSpMode == 1; } + void offSpMode() { mSpMode = 0; } + u8 getEventParamU8(int param_0) { return (mEventParam >> (3 - param_0) * 8) & 0xFF; } + +private: + /* 0xE40 */ STControl* mpStick; + /* 0xE44 */ dSelect_cursor_c* mpDrawCursor; + /* 0xE48 */ dShopItemCtrl_c mItemCtrl; + /* 0xE78 */ ShopCam_action_c mShopCamAction; + /* 0xF54 */ u32 mEventParam; + /* 0xF58 */ int field_0xf58; + /* 0xF5C */ int field_0xf5c; + /* 0xF60 */ int field_0xf60; + /* 0xF64 */ int field_0xf64; + /* 0xF68 */ s16 field_0xf68; + /* 0xF6A */ u16 mFlag; + /* 0xF6C */ u16 field_0xf6c; + /* 0xF6E */ u8 mCursorPos; + /* 0xF6F */ u8 mLastCursorPos; + /* 0xF70 */ u8 mSeq; + /* 0xF71 */ u8 field_0xf71; + /* 0xF72 */ u8 mWaitTimer; + /* 0xF73 */ u8 mSoldOutFlag; + /* 0xF74 */ u8 mSoldOutItemFlags; + /* 0xF75 */ u8 mSpMode; + /* 0xF76 */ u8 field_0xf76; + /* 0xF77 */ u8 field_0xf77; + /* 0xF78 */ u8 field_0xf78; + /* 0xF79 */ u8 field_0xf79; + /* 0xF7A */ u8 field_0xf7a; +}; + +typedef int (dShopSystem_c::*processFunc)(fopAc_ac_c*, dMsgFlow_c*); #endif /* D_SHOP_D_SHOP_SYSTEM_H */ diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index e452160da30..576474fc8ec 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -121,4 +121,6 @@ public: const csXyz& getAngle() const { return mCurrent.mAngle; } }; // Size: 0x568 +s32 fopAc_IsActor(void* actor); + #endif diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index 1c3e630f9d6..0a238b9e16b 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -154,6 +154,10 @@ inline void fopAcM_OnCondition(fopAc_ac_c* p_actor, u32 flag) { p_actor->mCondition |= flag; } +inline BOOL fopAcM_IsActor(void* actor) { + return fopAc_IsActor(actor); +} + void* fopAcM_FastCreate(s16 pProcTypeID, FastCreateReqFunc param_2, void* param_3, void* pData); void fopAcM_setStageLayer(void*); int fopAcM_setRoomLayer(void*, int); diff --git a/include/f_op/f_op_msg_mng.h b/include/f_op/f_op_msg_mng.h index c3972f23f95..d5d50f90746 100644 --- a/include/f_op/f_op_msg_mng.h +++ b/include/f_op/f_op_msg_mng.h @@ -11,5 +11,6 @@ u32 fopMsgM_Create(s16, fopMsgCreateFunc, void*); void fopMsgM_setMessageID(unsigned int); void fopMsgM_destroyExpHeap(JKRExpHeap*); void fopMsgM_setStageLayer(void*); +void fopMsgM_messageSetDemo(u32 param_0); #endif \ No newline at end of file diff --git a/include/m_Do/m_Do_lib.h b/include/m_Do/m_Do_lib.h index c7259619ecf..41d18161bee 100644 --- a/include/m_Do/m_Do_lib.h +++ b/include/m_Do/m_Do_lib.h @@ -12,4 +12,6 @@ struct mDoLib_clipper { static f32 mFovyRate; }; +void mDoLib_project(Vec* param_0, Vec* param_1); + #endif /* M_DO_M_DO_LIB_H */ diff --git a/include/rel/d/a/tag/d_a_tag_escape/d_a_tag_escape.h b/include/rel/d/a/tag/d_a_tag_escape/d_a_tag_escape.h index 49a37b54f7b..30864f984a2 100644 --- a/include/rel/d/a/tag/d_a_tag_escape/d_a_tag_escape.h +++ b/include/rel/d/a/tag/d_a_tag_escape/d_a_tag_escape.h @@ -2,5 +2,13 @@ #define D_A_TAG_ESCAPE_H #include "dolphin/types.h" +#include "f_op/f_op_actor.h" +#include "f_op/f_op_actor_mng.h" + +class daTagEscape_c : public fopAc_ac_c { +public: + daTagEscape_c() {} + ~daTagEscape_c() {} +}; #endif /* D_A_TAG_ESCAPE_H */ diff --git a/include/rel/d/a/tag/d_a_tag_telop/d_a_tag_telop.h b/include/rel/d/a/tag/d_a_tag_telop/d_a_tag_telop.h index 095f07a61d1..02b8a8eaa95 100644 --- a/include/rel/d/a/tag/d_a_tag_telop/d_a_tag_telop.h +++ b/include/rel/d/a/tag/d_a_tag_telop/d_a_tag_telop.h @@ -2,5 +2,23 @@ #define D_A_TAG_TELOP_H #include "dolphin/types.h" +#include "d/com/d_com_inf_game.h" + +class daTag_Telop_c : public fopAc_ac_c { +public: + daTag_Telop_c() {} + ~daTag_Telop_c() {} + + int create(); + void execute(); + + u16 getMessageNo() { + return mOrig.mAngle.z; + } + +private: + /* 0x568 */ u16 mMessageNo; + /* 0x56C */ int mMessageStatus; +}; #endif /* D_A_TAG_TELOP_H */ diff --git a/rel/d/a/d_a_horse/d_a_horse.cpp b/rel/d/a/d_a_horse/d_a_horse.cpp index 26f87659ccd..7bace47e08d 100644 --- a/rel/d/a/d_a_horse/d_a_horse.cpp +++ b/rel/d/a/d_a_horse/d_a_horse.cpp @@ -21,11 +21,6 @@ struct mDoMtx_stack_c { static u8 now[48]; }; -struct mDoExt_btpAnm { - /* 8000D54C */ void init(J3DMaterialTable*, J3DAnmTexPattern*, int, int, f32, s16, s16); - /* 8000D5E8 */ void entry(J3DMaterialTable*, s16); -}; - struct mDoExt_3DlineMat1_c { /* 80013360 */ void init(u16, u16, ResTIMG*, int); /* 8001373C */ void update(int, f32, _GXColor&, u16, dKy_tevstr_c*); diff --git a/rel/d/a/tag/d_a_tag_escape/d_a_tag_escape.cpp b/rel/d/a/tag/d_a_tag_escape/d_a_tag_escape.cpp index a1d53ed058d..f7c2a13628b 100644 --- a/rel/d/a/tag/d_a_tag_escape/d_a_tag_escape.cpp +++ b/rel/d/a/tag/d_a_tag_escape/d_a_tag_escape.cpp @@ -7,17 +7,6 @@ #include "dol2asm.h" #include "dolphin/types.h" -// -// Types: -// - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); - /* 80018C8C */ ~fopAc_ac_c(); -}; - -struct daTagEscape_c {}; - // // Forward References: // @@ -30,10 +19,7 @@ extern "C" extern void* g_profile_Tag_Escape[12]; // External References: // -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; // // Declarations: @@ -41,24 +27,20 @@ extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; /* 80D587D8-80D58828 000078 0050+00 1/0 0/0 0/0 .text daTagEscape_Create__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daTagEscape_Create(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_escape/d_a_tag_escape/daTagEscape_Create__FP10fopAc_ac_c.s" +static int daTagEscape_Create(fopAc_ac_c* tag) { + if (!fopAcM_CheckCondition(tag, 8)) { + new (tag) daTagEscape_c(); + fopAcM_OnCondition(tag, 8); + } + + return 4; } -#pragma pop /* 80D58828-80D58858 0000C8 0030+00 1/0 0/0 0/0 .text daTagEscape_Delete__FP13daTagEscape_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daTagEscape_Delete(daTagEscape_c* param_0) { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_escape/d_a_tag_escape/daTagEscape_Delete__FP13daTagEscape_c.s" +static int daTagEscape_Delete(daTagEscape_c* tag) { + tag->~daTagEscape_c(); + return 1; } -#pragma pop /* ############################################################################################## */ /* 80D58860-80D58880 -00001 0020+00 1/0 0/0 0/0 .data l_daTagEscape_Method */ diff --git a/rel/d/a/tag/d_a_tag_lv5soup/d_a_tag_lv5soup.cpp b/rel/d/a/tag/d_a_tag_lv5soup/d_a_tag_lv5soup.cpp index b810e10adde..7f5c5b6ea0b 100644 --- a/rel/d/a/tag/d_a_tag_lv5soup/d_a_tag_lv5soup.cpp +++ b/rel/d/a/tag/d_a_tag_lv5soup/d_a_tag_lv5soup.cpp @@ -116,7 +116,7 @@ int daTag_Lv5Soup_c::Draw() { /* 80D5AEA4-80D5B06C 0001C4 01C8+00 1/1 0/0 0/0 .text isAreaCheck__15daTag_Lv5Soup_cFv */ bool daTag_Lv5Soup_c::isAreaCheck() { - cXyz dist = dComIfGp_getLinkPlayer()->mCurrent.mPosition - mCurrent.mPosition; + cXyz dist = daPy_getPlayerActorClass()->mCurrent.mPosition - mCurrent.mPosition; f32 boundX = mScale.x * 100.0f; f32 boundY = mScale.y * 100.0f; diff --git a/rel/d/a/tag/d_a_tag_telop/d_a_tag_telop.cpp b/rel/d/a/tag/d_a_tag_telop/d_a_tag_telop.cpp index 36ccfa59a29..27b511a5594 100644 --- a/rel/d/a/tag/d_a_tag_telop/d_a_tag_telop.cpp +++ b/rel/d/a/tag/d_a_tag_telop/d_a_tag_telop.cpp @@ -6,24 +6,7 @@ #include "rel/d/a/tag/d_a_tag_telop/d_a_tag_telop.h" #include "dol2asm.h" #include "dolphin/types.h" - -// -// Types: -// - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); - /* 80018C8C */ ~fopAc_ac_c(); -}; - -struct daTag_Telop_c { - /* 80490A58 */ void create(); - /* 80490AF8 */ void execute(); -}; - -struct dSv_event_c { - /* 800349BC */ void isEventBit(u16) const; -}; +#include "f_op/f_op_msg_mng.h" // // Forward References: @@ -42,80 +25,78 @@ extern "C" extern void* g_profile_TAG_TELOP[12]; // External References: // -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void __dt__10fopAc_ac_cFv(); -extern "C" void fopAcM_delete__FP10fopAc_ac_c(); -extern "C" void fopMsgM_messageSetDemo__FUl(); -extern "C" void isEventBit__11dSv_event_cCFUs(); extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; // // Declarations: // -/* 80490A58-80490AF8 000078 00A0+00 1/1 0/0 0/0 .text create__13daTag_Telop_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daTag_Telop_c::create() { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_telop/d_a_tag_telop/create__13daTag_Telop_cFv.s" +inline int dComIfGs_isEventBit(u16 event) { + return g_dComIfG_gameInfo.info.getSavedata().getEvent().isEventBit(event); +} + +/* 80490A58-80490AF8 000078 00A0+00 1/1 0/0 0/0 .text create__13daTag_Telop_cFv */ +int daTag_Telop_c::create() { + if (!fopAcM_CheckCondition(this, 8)) { + new (this) daTag_Telop_c(); + fopAcM_OnCondition(this, 8); + } + + mMessageNo = getMessageNo(); + + if (dComIfGs_isTmpBit(0x1301)) { + mMessageStatus = 99; + } else if (mMessageNo != 0xFFFF) { + mMessageStatus = 0; + } else { + mMessageStatus = 99; + } + + return 4; } -#pragma pop /* 80490AF8-80490B5C 000118 0064+00 1/1 0/0 0/0 .text execute__13daTag_Telop_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daTag_Telop_c::execute() { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_telop/d_a_tag_telop/execute__13daTag_Telop_cFv.s" +void daTag_Telop_c::execute() { + switch (mMessageStatus) { + case 0: + fopMsgM_messageSetDemo(mMessageNo); + mMessageStatus = 99; + break; + case 99: + fopAcM_delete(this); + mMessageStatus = -1; + break; + } } -#pragma pop /* 80490B5C-80490B64 00017C 0008+00 1/0 0/0 0/0 .text daTag_Telop_Draw__FP13daTag_Telop_c */ -static bool daTag_Telop_Draw(daTag_Telop_c* param_0) { - return true; +static int daTag_Telop_Draw(daTag_Telop_c* tag) { + return 1; } /* 80490B64-80490B88 000184 0024+00 1/0 0/0 0/0 .text daTag_Telop_Execute__FP13daTag_Telop_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daTag_Telop_Execute(daTag_Telop_c* param_0) { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_telop/d_a_tag_telop/daTag_Telop_Execute__FP13daTag_Telop_c.s" +static int daTag_Telop_Execute(daTag_Telop_c* tag) { + tag->execute(); + return 1; } -#pragma pop /* 80490B88-80490B90 0001A8 0008+00 1/0 0/0 0/0 .text daTag_Telop_IsDelete__FP13daTag_Telop_c */ -static bool daTag_Telop_IsDelete(daTag_Telop_c* param_0) { - return true; +static int daTag_Telop_IsDelete(daTag_Telop_c* tag) { + return 1; } /* 80490B90-80490BC0 0001B0 0030+00 1/0 0/0 0/0 .text daTag_Telop_Delete__FP13daTag_Telop_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daTag_Telop_Delete(daTag_Telop_c* param_0) { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_telop/d_a_tag_telop/daTag_Telop_Delete__FP13daTag_Telop_c.s" +static int daTag_Telop_Delete(daTag_Telop_c* tag) { + tag->~daTag_Telop_c(); + return 1; } -#pragma pop /* 80490BC0-80490BE0 0001E0 0020+00 1/0 0/0 0/0 .text daTag_Telop_Create__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daTag_Telop_Create(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_telop/d_a_tag_telop/daTag_Telop_Create__FP10fopAc_ac_c.s" +static int daTag_Telop_Create(fopAc_ac_c* tag) { + return static_cast(tag)->create(); } -#pragma pop /* ############################################################################################## */ /* 80490BE8-80490C08 -00001 0020+00 1/0 0/0 0/0 .data l_daTag_Telop_Method */ diff --git a/src/d/a/d_a_npc.cpp b/src/d/a/d_a_npc.cpp index d0631ae8b87..c6ff59a4949 100644 --- a/src/d/a/d_a_npc.cpp +++ b/src/d/a/d_a_npc.cpp @@ -11,27 +11,6 @@ // Types: // -struct request_of_phase_process_class {}; - -struct csXyz { - /* 80018BD0 */ ~csXyz(); - /* 80112C80 */ csXyz(); - /* 8026745C */ void operator+=(csXyz&); - - static u8 Zero[4]; -}; - -struct Vec {}; - -struct cXyz { - /* 80009184 */ ~cXyz(); - /* 800125DC */ cXyz(); - /* 80266AE4 */ void operator+(Vec const&) const; - /* 80266B34 */ void operator-(Vec const&) const; - /* 80266EF4 */ void normalize(); - /* 802670AC */ void isZero() const; -}; - struct mDoMtx_stack_c { /* 8000CD64 */ void transS(cXyz const&); /* 8000CD9C */ void transM(f32, f32, f32); @@ -44,59 +23,6 @@ struct mDoMtx_stack_c { static u8 now[48]; }; -struct mDoExt_morf_c { - /* 8000FB7C */ void setMorf(f32); -}; - -struct J3DAnmTextureSRTKey {}; - -struct J3DAnmTexPattern {}; - -struct J3DAnmTevRegKey {}; - -struct J3DAnmColor {}; - -struct J3DMaterialTable { - /* 8032F64C */ void removeMatColorAnimator(J3DAnmColor*); - /* 8032F6F8 */ void removeTexNoAnimator(J3DAnmTexPattern*); - /* 8032F7B4 */ void removeTexMtxAnimator(J3DAnmTextureSRTKey*); - /* 8032F880 */ void removeTevRegAnimator(J3DAnmTevRegKey*); -}; - -struct mDoExt_btpAnm { - /* 8000D54C */ void init(J3DMaterialTable*, J3DAnmTexPattern*, int, int, f32, s16, s16); - /* 8000D5E8 */ void entry(J3DMaterialTable*, s16); -}; - -struct mDoExt_btkAnm { - /* 8000D63C */ void init(J3DMaterialTable*, J3DAnmTextureSRTKey*, int, int, f32, s16, s16); - /* 8000D6D8 */ void entry(J3DMaterialTable*, f32); -}; - -struct mDoExt_brkAnm { - /* 8000D70C */ void init(J3DMaterialTable*, J3DAnmTevRegKey*, int, int, f32, s16, s16); - /* 8000D7A8 */ void entry(J3DMaterialTable*, f32); -}; - -struct mDoExt_bpkAnm { - /* 8000D47C */ void init(J3DMaterialTable*, J3DAnmColor*, int, int, f32, s16, s16); - /* 8000D518 */ void entry(J3DMaterialTable*, f32); -}; - -struct J3DModelData {}; - -struct J3DAnmTransform {}; - -struct mDoExt_bckAnm { - /* 8000D7DC */ void init(J3DAnmTransform*, int, int, f32, s16, s16, bool); - /* 8000D990 */ void changeBckOnly(J3DAnmTransform*); - /* 8000D9E8 */ void entryJoint(J3DModelData*, u16, f32); -}; - -struct mDoExt_baseAnm { - /* 8000D428 */ void play(); -}; - struct mDoExt_McaMorfSO { /* 80010E70 */ void setAnm(J3DAnmTransform*, int, f32, f32, f32, f32); /* 800110B0 */ void play(u32, s8); @@ -104,147 +30,6 @@ struct mDoExt_McaMorfSO { /* 800111EC */ void modelCalc(); }; -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); - /* 80018C8C */ ~fopAc_ac_c(); -}; - -struct daPy_py_c { - /* 8015F3FC */ void getAttentionOffsetY(); - /* 8015F424 */ void checkNowWolfEyeUp(); -}; - -struct daNpcT_pntData_c {}; - -struct daNpcT_motionAnmData_c {}; - -struct daNpcT_faceMotionAnmData_c {}; - -struct dCcD_GObjInf { - /* 80084460 */ void ChkTgHit(); -}; - -struct J3DAnmTransformKey {}; - -struct _GXColorS10 {}; - -struct J3DModel {}; - -struct J3DFrameCtrl { - /* 803283FC */ void init(s16); -}; - -struct J3DJoint {}; - -struct daNpcT_c { - /* 80147FA4 */ void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*); - /* 80147FD4 */ void srchActor(void*, void*); - /* 80148058 */ void getTrnsfrmAnmP(char const*, int); - /* 80148094 */ void getTrnsfrmKeyAnmP(char const*, int); - /* 801480D0 */ void getTexPtrnAnmP(char const*, int); - /* 8014810C */ void getTexSRTKeyAnmP(char const*, int); - /* 80148148 */ void getTevRegKeyAnmP(char const*, int); - /* 80148184 */ void getColorAnmP(char const*, int); - /* 801481C0 */ void setBckAnm(J3DAnmTransform*, f32, int, int, int, bool); - /* 80148204 */ void setMcaMorfAnm(J3DAnmTransformKey*, f32, f32, int, int, int); - /* 801482F8 */ void setBtpAnm(J3DAnmTexPattern*, J3DModelData*, f32, int); - /* 80148338 */ void setBtkAnm(J3DAnmTextureSRTKey*, J3DModelData*, f32, int); - /* 80148378 */ void setBrkAnm(J3DAnmTevRegKey*, J3DModelData*, f32, int); - /* 801483B8 */ void setBpkAnm(J3DAnmColor*, J3DModelData*, f32, int); - /* 801483F8 */ void loadRes(s8 const*, char const**); - /* 801484AC */ void deleteRes(s8 const*, char const**); - /* 8014852C */ void execute(); - /* 8014886C */ void draw(int, int, f32, _GXColorS10*, f32, int, int, int); - /* 80148C70 */ void setEnvTevColor(); - /* 80148CCC */ void setRoomNo(); - /* 80148D10 */ void checkEndAnm(f32); - /* 80148DD0 */ void checkEndAnm(J3DFrameCtrl*, f32); - /* 80148E4C */ void playAllAnm(); - /* 801490D4 */ void ctrlBtk(); - /* 80149190 */ void setMtx(); - /* 8014924C */ void ctrlFaceMotion(); - /* 80149300 */ void ctrlMotion(); - /* 801493B8 */ void ctrlMsgAnm(int*, int*, fopAc_ac_c*, int); - /* 8014951C */ void ctrlJoint(J3DJoint*, J3DModel*); - /* 8014997C */ void evtProc(); - /* 80149BB4 */ void setFootPos(); - /* 80149D7C */ void setFootPrtcl(cXyz*, f32, f32); - /* 8014A05C */ bool checkCullDraw(); - /* 8014A064 */ void twilight(); - /* 8014A0B0 */ void evtOrder(); - /* 8014A224 */ void evtChange(); - /* 8014A324 */ void clrParam(); - /* 8014A388 */ void setFaceMotionAnm(int, bool); - /* 8014A628 */ void setMotionAnm(int, f32, int); - /* 8014A908 */ void setPos(cXyz); - /* 8014AA18 */ void setAngle(s16); - /* 8014A99C */ void setAngle(csXyz); - /* 8014AA40 */ void hitChk(dCcD_GObjInf*, u32); - /* 8014AAD0 */ void setDamage(int, int, int); - /* 8014ABD0 */ void chkActorInSight(fopAc_ac_c*, f32, s16); - /* 8014ACF0 */ void chkPointInArea(cXyz, cXyz, f32, f32, f32, s16); - /* 8014ADA0 */ void chkPointInArea(cXyz, cXyz, cXyz, s16); - /* 8014AE1C */ void chkFindActor(fopAc_ac_c*, int, s16); - /* 8014B024 */ void chkWolfAction(); - /* 8014B0C8 */ void chkFindWolf(s16, int, int, f32, f32, f32, f32, int); - /* 8014B338 */ void srchPlayerActor(); - /* 8014B3EC */ void getAttnPos(fopAc_ac_c*); - /* 8014B4A4 */ void turn(s16, int, int); - /* 8014B648 */ void step(s16, int, int, int, int); - /* 8014B808 */ void calcSpeedAndAngle(cXyz, int, s16, s16); - /* 8014BB00 */ void getActorDistance(fopAc_ac_c*, int, int); - /* 8014BBF0 */ void initTalk(int, fopAc_ac_c**); - /* 8014BC78 */ void talkProc(int*, int, fopAc_ac_c**, int); - /* 8014BE2C */ void getNearestActorP(s16); - /* 8014BEE4 */ void getEvtAreaTagP(int, int); - /* 8014BFB0 */ void getShopItemTagP(); - /* 8014C030 */ void setHitodamaPrtcl(); - /* 8014CBF4 */ void decTmr(); - /* 8014CC0C */ void setCollision(); - /* 8014CC10 */ void setAttnPos(); - /* 8014CC14 */ void ctrlSubFaceMotion(int); - /* 8014CC18 */ void afterMoved(); - /* 8014CC1C */ void beforeMove(); - /* 8014CC20 */ void action(); - /* 8014CC24 */ void setParam(); - /* 8014CC28 */ void drawOtherMdl(); - /* 8014CC2C */ void drawGhost(); - /* 8014CC30 */ bool drawDbgInfo(); - /* 8014CC38 */ bool checkRemoveJoint(int); - /* 8014CC40 */ bool checkChangeJoint(int); - /* 8014CC48 */ void afterJntAnm(int); - /* 8014CC4C */ s32 getHeadJointNo(); - /* 8014CC54 */ s32 getNeckJointNo(); - /* 8014CC5C */ s32 getBackboneJointNo(); - /* 8014CC64 */ void setAfterTalkMotion(); - /* 8014CC68 */ bool evtCutProc(); - /* 8014CC70 */ bool evtEndProc(); - /* 8014CC78 */ bool evtTalk(); - /* 8014CC80 */ bool checkChangeEvt(); - /* 8014CC88 */ s32 getFootRJointNo(); - /* 8014CC90 */ s32 getFootLJointNo(); - /* 8014CC98 */ bool chkXYItems(); - /* 8014CCA0 */ bool afterSetFaceMotionAnm(int, int, f32, int); - /* 8014CCA8 */ void changeBtp(int*, int*); - /* 8014CCAC */ void changeBck(int*, int*); - /* 8014CCB0 */ void getFaceMotionAnm(daNpcT_faceMotionAnmData_c); - /* 8014CCE0 */ bool afterSetMotionAnm(int, int, f32, int); - /* 8014CCE8 */ void changeBtk(int*, int*); - /* 8014CCEC */ void changeAnm(int*, int*); - /* 8014CCF0 */ void getMotionAnm(daNpcT_motionAnmData_c); - /* 8014CD20 */ ~daNpcT_c(); - /* 8014D0A8 */ bool getEyeballLMaterialNo(); - /* 8014D0B0 */ bool getEyeballRMaterialNo(); - /* 8014D0B8 */ bool getEyeballMaterialNo(); - - static u8 const mCcDObjData[48]; - static u8 mCcDCyl[68]; - static u8 mCcDSph[64]; - static u8 mFindActorPtrs[200]; - static u8 mSrchName[2 + 2 /* padding */]; - static u8 mFindCount[4]; -}; - struct daNpcT_Hermite_c { /* 8014CBAC */ ~daNpcT_Hermite_c(); }; @@ -262,45 +47,12 @@ struct daNpcT_Path_c { /* 801464D8 */ void chkPassed2(cXyz, cXyz*, int, int); }; -struct daNpcT_MotionSeqMngr_c { - /* 80145898 */ void initialize(); - /* 801458C0 */ void play(u16, int*, f32*); - /* 80145A24 */ void checkEndSequence(); - /* 8014D0C0 */ ~daNpcT_MotionSeqMngr_c(); -}; - -struct J3DMaterial {}; - struct daNpcT_MatAnm_c { /* 80145764 */ void initialize(); /* 80145788 */ void calc(J3DMaterial*) const; /* 8014D24C */ ~daNpcT_MatAnm_c(); }; -struct daNpcT_JntAnm_c { - /* 80146C98 */ void initialize(); - /* 80146CD8 */ void setParam(fopAc_ac_c*, J3DModel*, cXyz*, int, int, int, f32, f32, f32, f32, - f32, f32, f32, f32, f32, f32, cXyz*); - /* 80147858 */ void calc(f32); - /* 80147C38 */ void calcJntRad(f32, f32, f32); - /* 8014D150 */ ~daNpcT_JntAnm_c(); -}; - -struct daNpcT_DmgStagger_c { - /* 80147DCC */ void setParam(fopAc_ac_c*, fopAc_ac_c*, s16); - /* 80147E3C */ void calc(int); -}; - -struct daNpcT_ActorMngr_c { - /* 801456D4 */ void initialize(); - /* 801456E0 */ void entry(fopAc_ac_c*); - /* 801456FC */ void remove(); - /* 80145708 */ void getActorP(); - /* 8014D108 */ ~daNpcT_ActorMngr_c(); -}; - -struct dCcD_Cyl {}; - struct daNpcF_c { struct daNpcF_anmPlayData {}; @@ -449,15 +201,6 @@ struct daBaseNpc_path_c { /* 801503FC */ ~daBaseNpc_path_c(); }; -struct cBgS_PolyInfo { - /* 802680B0 */ ~cBgS_PolyInfo(); -}; - -struct dBgW { - /* 8007B970 */ dBgW(); - /* 8007B9C0 */ void Move(); -}; - struct daBaseNpc_moveBgActor_c { /* 8014F4B4 */ daBaseNpc_moveBgActor_c(); /* 8014F518 */ void MoveBGCreateHeap(); @@ -537,59 +280,8 @@ struct daBaseNpc_acMngr_c { /* 80150524 */ ~daBaseNpc_acMngr_c(); }; -struct dSv_event_tmp_flag_c { - static u8 const tempBitLabels[370 + 2 /* padding */]; -}; - -struct dSv_event_flag_c { - static u8 saveBitLabels[1644 + 4 /* padding */]; -}; - -struct dSv_event_c { - /* 8003498C */ void onEventBit(u16); - /* 800349A4 */ void offEventBit(u16); - /* 800349BC */ void isEventBit(u16) const; -}; - -struct dStage_roomControl_c { - /* 80024384 */ void getStatusRoomDt(int); -}; - -struct dKy_tevstr_c {}; - -struct dScnKy_env_light_c { - /* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*); - /* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*); -}; - -struct dRes_info_c {}; - -struct dRes_control_c { - /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); -}; - struct dPnt {}; -struct dPa_levelEcallBack {}; - -struct _GXColor {}; - -struct dPa_control_c { - struct level_c { - /* 8004B918 */ void getEmitter(u32); - }; - - /* 8004D4CC */ void set(u32, u8, u16, cXyz const*, dKy_tevstr_c const*, csXyz const*, - cXyz const*, u8, dPa_levelEcallBack*, s8, _GXColor const*, - _GXColor const*, cXyz const*, f32); -}; - -struct dPaPoT_c { - /* 8005115C */ void setEffectTwo(dKy_tevstr_c const*, cXyz const*, u32, u32, cXyz const*, - cXyz const*, cXyz const*, csXyz const*, cXyz const*, s8, f32, - f32); -}; - struct dMsgObject_c { /* 8023819C */ void getActor(); /* 802382C8 */ void offMsgSendControl(); @@ -597,166 +289,10 @@ struct dMsgObject_c { /* 802383A4 */ void isMouthCheck(); }; -struct dMsgFlow_c { - /* 80249F00 */ dMsgFlow_c(); - /* 80249F48 */ ~dMsgFlow_c(); - /* 80249F90 */ void init(fopAc_ac_c*, int, int, fopAc_ac_c**); - /* 8024A2D8 */ void doFlow(fopAc_ac_c*, fopAc_ac_c**, int); - /* 8024A424 */ void checkEventRender(int*, int*, int*, int*); - /* 8024A538 */ void getMsgNo(); - /* 8024A548 */ void getMsg(); -}; - -struct dEvt_control_c { - /* 80042468 */ void reset(); - /* 80042518 */ void reset(void*); - /* 800432EC */ void convPId(unsigned int); - /* 8004368C */ void setPtT(void*); -}; - -struct dEvent_manager_c { - /* 80046800 */ void setObjectArchive(char*); - /* 80047758 */ void getEventIdx(fopAc_ac_c*, char const*, u8); - /* 80047A78 */ void endCheck(s16); - /* 800483E8 */ void getRunEventName(); -}; - -struct dDlst_shadowControl_c { - static u8 mSimpleTexObj[32]; -}; - -struct dCcD_GStts { - /* 80083760 */ dCcD_GStts(); - /* 80083830 */ void Move(); -}; - -struct dCcD_GAtTgCoCommonBase { - /* 80083688 */ void GetAc(); -}; - -struct dBgW_Base {}; - -struct dBgS_PolyPassChk { - /* 80078E68 */ void SetObj(); -}; - -struct dBgS_LinChk { - /* 80077CDC */ ~dBgS_LinChk(); - /* 80077D64 */ void Set(cXyz const*, cXyz const*, fopAc_ac_c const*); -}; - -struct dBgS_GndChk { - /* 800775F0 */ ~dBgS_GndChk(); -}; - -struct dBgS_AcchCir { - /* 80075EAC */ dBgS_AcchCir(); -}; - -struct dBgS { - /* 80074A08 */ void Regist(dBgW_Base*, fopAc_ac_c*); - /* 80074BE8 */ void GetPolyColor(cBgS_PolyInfo const&); - /* 80074E50 */ void GetPolyAtt0(cBgS_PolyInfo const&); - /* 80075100 */ void GetRoomId(cBgS_PolyInfo const&); -}; - -struct dBgS_Acch { - /* 80075F94 */ ~dBgS_Acch(); - /* 800760A0 */ dBgS_Acch(); - /* 80076AAC */ void CrrPos(dBgS&); -}; - -struct dAttention_c { - /* 80070880 */ void getActionBtnB(); - /* 8007353C */ void LockonTarget(s32); - /* 80073734 */ void ActionTarget(s32); - /* 8014B010 */ void getDistTable(int); - - static u8 dist_table[6552]; -}; - -struct cSGlobe { - /* 80271880 */ cSGlobe(cXyz const&); -}; - -struct cSAngle { - /* 80270F68 */ cSAngle(cSAngle const&); - /* 80270F98 */ cSAngle(s16); - /* 802710E8 */ void Inv() const; - /* 80271228 */ void operator-(s16) const; -}; - -struct cM3dGPla {}; - -struct cM3dGCir { - /* 8026EF18 */ ~cM3dGCir(); -}; - -struct cBgW_BgId { - /* 802681D4 */ void ChkUsed() const; -}; - -struct cBgD_t {}; - -struct cBgW { - /* 80079F38 */ void Set(cBgD_t*, u32, f32 (*)[3][4]); -}; - -struct cBgS_LinChk {}; - -struct cBgS_GndChk { - /* 80267C1C */ cBgS_GndChk(); - /* 80267C94 */ ~cBgS_GndChk(); - /* 80267D28 */ void SetPos(cXyz const*); -}; - -struct cBgS { - /* 80074250 */ void Release(dBgW_Base*); - /* 800743B4 */ void LineCross(cBgS_LinChk*); - /* 800744A0 */ void GroundCross(cBgS_GndChk*); - /* 80074660 */ void ChkPolySafe(cBgS_PolyInfo const&); - /* 80074744 */ void GetTriPla(cBgS_PolyInfo const&, cM3dGPla*) const; -}; - -struct _GXTexObj {}; - -struct Z2Creature { - /* 802C03C8 */ Z2Creature(); - /* 802C0420 */ ~Z2Creature(); -}; - struct JMath { static u8 sincosTable_[65536]; }; -struct J3DTexNoAnm { - /* 8003B1F8 */ ~J3DTexNoAnm(); -}; - -struct J3DTexMtxAnm { - /* 8003B264 */ ~J3DTexMtxAnm(); -}; - -struct J3DTevKColorAnm { - /* 8003B150 */ ~J3DTevKColorAnm(); -}; - -struct J3DTevColorAnm { - /* 8003B1A4 */ ~J3DTevColorAnm(); -}; - -struct J3DSys { - static u8 mCurrentMtx[48]; -}; - -struct J3DMaterialAnm { - /* 8032C3C4 */ void calc(J3DMaterial*) const; -}; - -struct J3DMatColorAnm { - /* 8003B2B8 */ ~J3DMatColorAnm(); -}; - // // Forward References: // @@ -1131,7 +667,6 @@ extern "C" extern u8 data_80450FF8[8]; // External References: // -SECTION_INIT void memset(); extern "C" void __dt__4cXyzFv(); extern "C" void mDoMtx_ZXYrotS__FPA4_fsss(); extern "C" void mDoMtx_ZXYrotM__FPA4_fsss(); @@ -1297,13 +832,6 @@ extern "C" void removeMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor(); extern "C" void removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern(); extern "C" void removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey(); extern "C" void removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey(); -extern "C" void PSMTXCopy(); -extern "C" void PSMTXConcat(); -extern "C" void PSMTXInverse(); -extern "C" void PSMTXMultVec(); -extern "C" void PSMTXMultVecArray(); -extern "C" void PSVECAdd(); -extern "C" void PSVECSquareMag(); extern "C" void __register_global_object(); extern "C" void __destroy_arr(); extern "C" void __construct_array(); @@ -1331,9 +859,6 @@ extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" void abs(); -extern "C" void strcmp(); -extern "C" void strlen(); extern "C" u8 const tempBitLabels__20dSv_event_tmp_flag_c[370 + 2 /* padding */]; extern "C" extern void* __vt__12J3DFrameCtrl[3]; extern "C" extern void* __vt__8cM3dGPla[3]; @@ -1347,16 +872,12 @@ extern "C" extern void* __vt__12dBgS_ObjAcch[9]; extern "C" extern void* __vt__9cCcD_Stts[8]; extern "C" extern void* __vt__14J3DMaterialAnm[4]; extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; extern "C" extern u8 g_env_light[4880]; -extern "C" extern u8 j3dSys[284]; extern "C" u8 mCurrentMtx__6J3DSys[48]; extern "C" u8 sincosTable___5JMath[65536]; -extern "C" extern u32 __float_nan; extern "C" u8 Zero__5csXyz[4]; extern "C" extern u8 data_80451164[4]; -extern "C" extern f32 G_CM3D_F_ABS_MIN[1 + 1 /* padding */]; // // Declarations: @@ -3163,7 +2684,8 @@ asm void daNpcT_c::getMotionAnm(daNpcT_motionAnmData_c param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcT_c::~daNpcT_c() { +//asm daNpcT_c::~daNpcT_c() { +extern "C" asm void __dt__8daNpcT_cFv() { nofralloc #include "asm/d/a/d_a_npc/__dt__8daNpcT_cFv.s" } @@ -3191,7 +2713,8 @@ bool daNpcT_c::getEyeballMaterialNo() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcT_MotionSeqMngr_c::~daNpcT_MotionSeqMngr_c() { +// asm daNpcT_MotionSeqMngr_c::~daNpcT_MotionSeqMngr_c() { +extern "C" asm void __dt__22daNpcT_MotionSeqMngr_cFv() { nofralloc #include "asm/d/a/d_a_npc/__dt__22daNpcT_MotionSeqMngr_cFv.s" } @@ -3201,7 +2724,8 @@ asm daNpcT_MotionSeqMngr_c::~daNpcT_MotionSeqMngr_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcT_ActorMngr_c::~daNpcT_ActorMngr_c() { +// asm daNpcT_ActorMngr_c::~daNpcT_ActorMngr_c() { +extern "C" asm void __dt__18daNpcT_ActorMngr_cFv() { nofralloc #include "asm/d/a/d_a_npc/__dt__18daNpcT_ActorMngr_cFv.s" } @@ -3211,7 +2735,8 @@ asm daNpcT_ActorMngr_c::~daNpcT_ActorMngr_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcT_JntAnm_c::~daNpcT_JntAnm_c() { +// asm daNpcT_JntAnm_c::~daNpcT_JntAnm_c() { +extern "C" asm void __dt__15daNpcT_JntAnm_cFv() { nofralloc #include "asm/d/a/d_a_npc/__dt__15daNpcT_JntAnm_cFv.s" } diff --git a/src/d/a/d_a_shop_item_static.cpp b/src/d/a/d_a_shop_item_static.cpp index 1141dced96b..06e96881524 100644 --- a/src/d/a/d_a_shop_item_static.cpp +++ b/src/d/a/d_a_shop_item_static.cpp @@ -7,23 +7,6 @@ #include "dol2asm.h" #include "dolphin/types.h" -// -// Types: -// - -struct fopAc_ac_c {}; - -struct daShopItem_c { - /* 80037C14 */ void getRotateP(); - /* 80037C1C */ void getPosP(); - - static void* const mData[276]; -}; - -struct daItemBase_c { - /* 8014475C */ void CreateItemHeap(char const*, s16, s16, s16, s16, s16, s16, s16); -}; - // // Forward References: // @@ -45,402 +28,52 @@ extern "C" void CreateItemHeap__12daItemBase_cFPCcsssssss(); // /* 80037C14-80037C1C 032554 0008+00 0/0 1/1 0/0 .text getRotateP__12daShopItem_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daShopItem_c::getRotateP() { - nofralloc -#include "asm/d/a/d_a_shop_item_static/getRotateP__12daShopItem_cFv.s" +csXyz* daShopItem_c::getRotateP() { + return &mCurrent.mAngle; } -#pragma pop /* 80037C1C-80037C24 03255C 0008+00 0/0 2/2 0/0 .text getPosP__12daShopItem_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daShopItem_c::getPosP() { - nofralloc -#include "asm/d/a/d_a_shop_item_static/getPosP__12daShopItem_cFv.s" +cXyz* daShopItem_c::getPosP() { + return &mCurrent.mPosition; } -#pragma pop - -/* ############################################################################################## */ -/* 80379738-80379742 005D98 000A+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_80379738; - -/* 80379742-8037974B 005DA2 0009+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_80379742; - -/* 8037974B-80379754 005DAB 0009+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_8037974B; - -/* 80379754-8037975E 005DB4 000A+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_80379754; - -/* 8037975E-80379768 005DBE 000A+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_8037975E; - -/* 80379768-80379771 005DC8 0009+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_80379768; - -/* 80379771-8037977A 005DD1 0009+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_80379771; - -/* 8037977A-80379783 005DDA 0009+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_8037977A; - -/* 80379783-8037978D 005DE3 000A+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_80379783; - -/* 8037978D-80379795 005DED 0008+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_8037978D; - -/* 80379795-8037979D 005DF5 0008+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_80379795; - -/* 8037979D-803797A7 005DFD 000A+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_8037979D; - -/* 803797A7-803797B1 005E07 000A+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_803797A7; - -/* 803797B1-803797BB 005E11 000A+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_803797B1; - -/* 803797BB-803797C5 005E1B 000A+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_803797BB; - -/* 803797C5-803797CF 005E25 000A+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_803797C5; - -/* 803797CF-803797D9 005E2F 000A+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_803797CF; - -/* 803797D9-803797E3 005E39 000A+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_803797D9; - -/* 803797E3-803797ED 005E43 000A+00 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_803797E3; - -/* 803797ED-803797F8 005E4D 000A+01 1/0 0/0 0/0 .rodata None */ -extern "C" char const* const stringBase_803797ED; /* 803792E8-80379738 -00001 0450+00 1/1 0/0 9/9 .rodata mData__12daShopItem_c */ -SECTION_RODATA void* const daShopItem_c::mData[276] = { - (void*)&d_a_d_a_shop_item_static__stringBase0, - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)0x80000000, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0xA), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x13), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFF50000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x1C), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x26), - (void*)0x0006000C, - (void*)0xFFFFFFFF, - (void*)0xFFFF0009, - (void*)0x000F0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)0x00000004, - (void*)0x00000003, - (void*)0x01000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x30), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x39), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)0x41F00000, - (void*)0x3F800000, - (void*)NULL, - (void*)0x7FFF0000, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x42), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)0x41F00000, - (void*)0x3F800000, - (void*)NULL, - (void*)0x7FFF0000, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x4B), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x55), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x5D), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x65), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x6F), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x79), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x26), - (void*)0x0006000C, - (void*)0xFFFFFFFF, - (void*)0xFFFF0009, - (void*)0x000F0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)0x00000004, - (void*)0x00000001, - (void*)NULL, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x83), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x8D), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x97), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFF50000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0xA1), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0xAB), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0xAB), - (void*)0x0004FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0xB5), - (void*)0x0003FFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFFFFFF, - (void*)0xFFFF0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)NULL, - (void*)0x000000FF, - (void*)0xFF000000, - (void*)(((char*)&d_a_d_a_shop_item_static__stringBase0) + 0x26), - (void*)0x0006000C, - (void*)0xFFFFFFFF, - (void*)0xFFFF0009, - (void*)0x000F0000, - (void*)NULL, - (void*)0x3F800000, - (void*)NULL, - (void*)NULL, - (void*)0x00000004, - (void*)0x0000000C, - (void*)NULL, +SECTION_RODATA ResourceData const daShopItem_c::mData[23] = { + {"B_mD_sold", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0x8000, 0}, 0, 0, 0, 0, -1, -1}, + {"B_mD_oil", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, -1, -1}, + {"O_mD_red", 3, -1, -1, -1, -1, -1, -11, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, -1, -1}, + {"B_mD_milk", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, -1, -1}, + {"O_mD_bott", 6, 12, -1, -1, -1, 9, 15, 0.0f, 1.0f, 0, {0, 0, 0}, 4, 0, 0, 0, 3, 1}, + {"O_mD_arw", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, -1, -1}, + {"O_mD_SHB", 3, -1, -1, -1, -1, -1, -1, 30.0f, 1.0f, 0, {0, 0x7FFF, 0}, 0, 0, 0, 0, -1, -1}, + {"O_mD_SHA", 3, -1, -1, -1, -1, -1, -1, 30.0f, 1.0f, 0, {0, 0x7FFF, 0}, 0, 0, 0, 0, -1, -1}, + {"O_mD_bomb", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, 0, -1}, + {"O_mD_pg", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, 0, -1}, + {"O_mD_bi", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, 0, -1}, + {"O_mD_bmcs", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, 0, -1}, + {"O_mD_bmc2", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, 0, -1}, + {"O_mD_jira", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, 0, -1}, + {"O_mD_bott", 6, 12, -1, -1, -1, 9, 15, 0.0f, 1.0f, 0, {0, 0, 0}, 4, 0, 0, 0, 1, 0}, + {"O_mD_hati", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, -1, -1}, + {"O_mD_pach", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, -1, -1}, + {"O_mD_blue", 3, -1, -1, -1, -1, -1, -11, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, -1, -1}, + {"O_mD_hawk", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, -1, -1}, + {"O_mD_marm", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, -1, -1}, + {"O_mD_marm", 4, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, -1, -1}, + {"O_mD_gren", 3, -1, -1, -1, -1, -1, -1, 0.0f, 1.0f, 0, {0, 0, 0}, 0, 0, 0, 0, -1, -1}, + {"O_mD_bott", 6, 12, -1, -1, -1, 9, 15, 0.0f, 1.0f, 0, {0, 0, 0}, 4, 0, 0, 0, 12, 0}, }; COMPILER_STRIP_GATE(0x803792E8, &daShopItem_c::mData); -/* 80379738-80379738 005D98 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80379738 = "B_mD_sold"; -SECTION_DEAD static char const* const stringBase_80379742 = "B_mD_oil"; -SECTION_DEAD static char const* const stringBase_8037974B = "O_mD_red"; -SECTION_DEAD static char const* const stringBase_80379754 = "B_mD_milk"; -SECTION_DEAD static char const* const stringBase_8037975E = "O_mD_bott"; -SECTION_DEAD static char const* const stringBase_80379768 = "O_mD_arw"; -SECTION_DEAD static char const* const stringBase_80379771 = "O_mD_SHB"; -SECTION_DEAD static char const* const stringBase_8037977A = "O_mD_SHA"; -SECTION_DEAD static char const* const stringBase_80379783 = "O_mD_bomb"; -SECTION_DEAD static char const* const stringBase_8037978D = "O_mD_pg"; -SECTION_DEAD static char const* const stringBase_80379795 = "O_mD_bi"; -SECTION_DEAD static char const* const stringBase_8037979D = "O_mD_bmcs"; -SECTION_DEAD static char const* const stringBase_803797A7 = "O_mD_bmc2"; -SECTION_DEAD static char const* const stringBase_803797B1 = "O_mD_jira"; -SECTION_DEAD static char const* const stringBase_803797BB = "O_mD_hati"; -SECTION_DEAD static char const* const stringBase_803797C5 = "O_mD_pach"; -SECTION_DEAD static char const* const stringBase_803797CF = "O_mD_blue"; -SECTION_DEAD static char const* const stringBase_803797D9 = "O_mD_hawk"; -SECTION_DEAD static char const* const stringBase_803797E3 = "O_mD_marm"; -SECTION_DEAD static char const* const stringBase_803797ED = "O_mD_gren"; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_803797F7 = ""; -#pragma pop - /* 80037C24-80037C7C 032564 0058+00 0/0 0/0 1/1 .text CheckShopItemCreateHeap__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void CheckShopItemCreateHeap(fopAc_ac_c* param_0) { - nofralloc -#include "asm/d/a/d_a_shop_item_static/CheckShopItemCreateHeap__FP10fopAc_ac_c.s" +void CheckShopItemCreateHeap(fopAc_ac_c* actor) { + daShopItem_c* item = static_cast(actor); + + u8 item_id = item->getShopItemID(); + item->CreateItemHeap(daShopItem_c::mData[item_id].get_arcName(), daShopItem_c::mData[item_id].get_bmdName(), + daShopItem_c::mData[item_id].get_btk1Name(), daShopItem_c::mData[item_id].get_bpk1Name(), + daShopItem_c::mData[item_id].get_bck1Name(), daShopItem_c::mData[item_id].get_bxa1Name(), + daShopItem_c::mData[item_id].get_brk1Name(), daShopItem_c::mData[item_id].get_btp1Name()); } -#pragma pop /* 80379738-80379738 005D98 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/d/msg/d_msg_flow.cpp b/src/d/msg/d_msg_flow.cpp index cfb752c2b84..6ce3e03a51f 100644 --- a/src/d/msg/d_msg_flow.cpp +++ b/src/d/msg/d_msg_flow.cpp @@ -1514,7 +1514,7 @@ asm void dMsgFlow_c::checkOpenDoor(fopAc_ac_c* param_0, int* param_1) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dMsgFlow_c::doFlow(fopAc_ac_c* param_0, fopAc_ac_c** param_1, int param_2) { +asm int dMsgFlow_c::doFlow(fopAc_ac_c* param_0, fopAc_ac_c** param_1, int param_2) { nofralloc #include "asm/d/msg/d_msg_flow/doFlow__10dMsgFlow_cFP10fopAc_ac_cPP10fopAc_ac_ci.s" } @@ -1544,7 +1544,7 @@ asm void dMsgFlow_c::remove() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dMsgFlow_c::getEventId(int* param_0) { +asm u16 dMsgFlow_c::getEventId(int* param_0) { nofralloc #include "asm/d/msg/d_msg_flow/getEventId__10dMsgFlow_cFPi.s" } @@ -1797,7 +1797,7 @@ asm void dMsgFlow_c::query004(mesg_flow_node_branch* param_0, fopAc_ac_c* param_ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dMsgFlow_c::query005(mesg_flow_node_branch* param_0, fopAc_ac_c* param_1, int param_2) { +asm u16 dMsgFlow_c::query005(mesg_flow_node_branch* param_0, fopAc_ac_c* param_1, int param_2) { nofralloc #include "asm/d/msg/d_msg_flow/query005__10dMsgFlow_cFP21mesg_flow_node_branchP10fopAc_ac_ci.s" } diff --git a/src/d/msg/d_msg_object.cpp b/src/d/msg/d_msg_object.cpp index 683d819692d..bb259748cc0 100644 --- a/src/d/msg/d_msg_object.cpp +++ b/src/d/msg/d_msg_object.cpp @@ -1905,7 +1905,7 @@ asm void dMsgObject_c::offMsgSendControl() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dMsgObject_c::isMsgSendControl() { +asm int dMsgObject_c::isMsgSendControl() { nofralloc #include "asm/d/msg/d_msg_object/isMsgSendControl__12dMsgObject_cFv.s" } @@ -1955,7 +1955,7 @@ asm void dMsgObject_c::isMouthCheck() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dMsgObject_c::getMessageID() { +asm u32 dMsgObject_c::getMessageID() { nofralloc #include "asm/d/msg/d_msg_object/getMessageID__12dMsgObject_cFv.s" } diff --git a/src/d/particle/d_particle_copoly.cpp b/src/d/particle/d_particle_copoly.cpp index fe6fcbace0d..d13dabfef1f 100644 --- a/src/d/particle/d_particle_copoly.cpp +++ b/src/d/particle/d_particle_copoly.cpp @@ -23,20 +23,6 @@ struct dPa_control_c { dKy_tevstr_c const*, u32, u32, csXyz const*, cXyz const*, s8); }; -struct dPaPoT_c { - /* 8005115C */ void setEffectTwo(dKy_tevstr_c const*, cXyz const*, u32, u32, cXyz const*, - cXyz const*, cXyz const*, csXyz const*, cXyz const*, s8, f32, - f32); - /* 80051294 */ void clearTwoAllID(); - /* 80051470 */ void getRightEffType(int) const; - /* 8005147C */ void getLeftEffType(int) const; - /* 80051494 */ void getRightEmitter(int, int); - /* 800514DC */ void getLeftEmitter(int, int); - - static u8 m_typeTwoData[36]; - static u8 m_emitterTwoData[36]; -}; - struct dPaPoF_c { /* 800512E8 */ void setEffectFour(dKy_tevstr_c const*, cXyz const*, u32, u32, cXyz const*, cXyz const*, cXyz const*, cXyz const*, cXyz const*, diff --git a/src/d/shop/d_shop_item_ctrl.cpp b/src/d/shop/d_shop_item_ctrl.cpp index a324c0a3c3a..b017ce27b97 100644 --- a/src/d/shop/d_shop_item_ctrl.cpp +++ b/src/d/shop/d_shop_item_ctrl.cpp @@ -7,30 +7,6 @@ #include "dol2asm.h" #include "dolphin/types.h" -// -// Types: -// - -struct daShopItem_c { - /* 80037C14 */ void getRotateP(); - /* 80037C1C */ void getPosP(); -}; - -struct Vec {}; - -struct cXyz { - /* 80266B34 */ void operator-(Vec const&) const; -}; - -struct dShopItemCtrl_c { - /* 80196914 */ dShopItemCtrl_c(); - /* 80196958 */ ~dShopItemCtrl_c(); - /* 801969A0 */ void getCurrentPos(int); - /* 80196A3C */ void isHomePos(int); - /* 80196AF0 */ void setRotateAnime(int); - /* 80196BA4 */ void setZoomAnime(int, cXyz*, s16, bool); -}; - // // Forward References: // @@ -54,46 +30,25 @@ extern "C" void __mi__4cXyzCFRC3Vec(); extern "C" void cLib_addCalcPos2__FP4cXyzRC4cXyzff(); extern "C" void cLib_addCalcAngleS__FPsssss(); extern "C" void __dl__FPv(); -extern "C" void PSVECSquareMag(); extern "C" void _savegpr_23(); extern "C" void _savegpr_27(); extern "C" void _restgpr_23(); extern "C" void _restgpr_27(); -extern "C" extern u32 __float_nan; // // Declarations: // -/* ############################################################################################## */ -/* 803BB888-803BB898 0189A8 000C+04 2/2 0/0 0/0 .data __vt__15dShopItemCtrl_c */ -SECTION_DATA extern void* __vt__15dShopItemCtrl_c[3 + 1 /* padding */] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__15dShopItemCtrl_cFv, - /* padding */ - NULL, -}; - /* 80196914-80196958 191254 0044+00 0/0 0/0 10/10 .text __ct__15dShopItemCtrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dShopItemCtrl_c::dShopItemCtrl_c() { - nofralloc -#include "asm/d/shop/d_shop_item_ctrl/__ct__15dShopItemCtrl_cFv.s" +dShopItemCtrl_c::dShopItemCtrl_c() { + for (int i = 0; i < 7; i++) { + mItemIndex[i] = -1; + mMessageIndex[i] = 0; + } } -#pragma pop /* 80196958-801969A0 191298 0048+00 1/0 1/1 0/0 .text __dt__15dShopItemCtrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dShopItemCtrl_c::~dShopItemCtrl_c() { - nofralloc -#include "asm/d/shop/d_shop_item_ctrl/__dt__15dShopItemCtrl_cFv.s" -} -#pragma pop +dShopItemCtrl_c::~dShopItemCtrl_c() {} /* ############################################################################################## */ /* 80453AD0-80453AD8 0020D0 0004+04 2/2 0/0 0/0 .sdata2 @3659 */ @@ -105,35 +60,57 @@ SECTION_SDATA2 static f32 lit_3659[1 + 1 /* padding */] = { /* 801969A0-80196A3C 1912E0 009C+00 0/0 3/3 3/3 .text getCurrentPos__15dShopItemCtrl_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopItemCtrl_c::getCurrentPos(int param_0) { - nofralloc -#include "asm/d/shop/d_shop_item_ctrl/getCurrentPos__15dShopItemCtrl_cFi.s" +cXyz dShopItemCtrl_c::getCurrentPos(int item_index) { + f32 tmp = lit_3659[0]; + cXyz item_pos(tmp, tmp, tmp); + + if (mItemIndex[item_index] != -1) { + fopAc_ac_c* item = fopAcM_SearchByID(mItemIndex[item_index]); + if (item != NULL) { + item_pos.set(item->mCurrent.mPosition); + } + } + + return item_pos; } -#pragma pop /* 80196A3C-80196AF0 19137C 00B4+00 0/0 2/2 0/0 .text isHomePos__15dShopItemCtrl_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopItemCtrl_c::isHomePos(int param_0) { - nofralloc -#include "asm/d/shop/d_shop_item_ctrl/isHomePos__15dShopItemCtrl_cFi.s" +bool dShopItemCtrl_c::isHomePos(int item_index) { + if (item_index >= 0 && item_index < 7 && mItemIndex[item_index] != -1) { + daShopItem_c* item = (daShopItem_c*)fopAcM_SearchByID(mItemIndex[item_index]); + if (item != NULL) { + cXyz* item_pos = item->getPosP(); + cXyz item_home = item->mOrig.mPosition; + + if (item_pos->x == item_home.x && + item_pos->y == item_home.y && + item_pos->z == item_home.z) { + return true; + } + } + } + + return false; } -#pragma pop /* 80196AF0-80196BA4 191430 00B4+00 0/0 1/1 0/0 .text setRotateAnime__15dShopItemCtrl_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopItemCtrl_c::setRotateAnime(int param_0) { - nofralloc -#include "asm/d/shop/d_shop_item_ctrl/setRotateAnime__15dShopItemCtrl_cFi.s" +void dShopItemCtrl_c::setRotateAnime(int item_index) { + for (int i = 0; i < 7; i++) { + if (mItemIndex[i] != -1) { + daShopItem_c* item = (daShopItem_c*)fopAcM_SearchByID(mItemIndex[i]); + if (item != NULL) { + csXyz* item_rot = item->getRotateP(); + + if (i == item_index - 1) { + item_rot->y += 0x200; + } else { + cLib_addCalcAngleS(&item_rot->y, item->mOrig.mAngle.y, 4, 0x800, 0x80); + } + } + } + } } -#pragma pop /* ############################################################################################## */ /* 80453AD8-80453AE0 0020D8 0008+00 1/1 0/0 0/0 .sdata2 @3838 */ diff --git a/src/d/shop/d_shop_system.cpp b/src/d/shop/d_shop_system.cpp index 2e6b68c1c77..34e97f46d68 100644 --- a/src/d/shop/d_shop_system.cpp +++ b/src/d/shop/d_shop_system.cpp @@ -6,212 +6,14 @@ #include "d/shop/d_shop_system.h" #include "dol2asm.h" #include "dolphin/types.h" - -// -// Types: -// - -struct mesg_flow_node_branch {}; - -struct mDoCPd_c { - static u8 m_cpadInfo[256]; -}; - -struct fopAc_ac_c {}; - -struct daNpcT_motionAnmData_c {}; - -struct daNpcT_faceMotionAnmData_c {}; - -struct J3DModel {}; - -struct J3DJoint {}; - -struct Vec {}; - -struct cXyz { - /* 80266B34 */ void operator-(Vec const&) const; -}; - -struct daNpcT_c { - /* 801490D4 */ void ctrlBtk(); - /* 8014951C */ void ctrlJoint(J3DJoint*, J3DModel*); - /* 8014997C */ void evtProc(); - /* 80149BB4 */ void setFootPos(); - /* 80149D7C */ void setFootPrtcl(cXyz*, f32, f32); - /* 8014A05C */ bool checkCullDraw(); - /* 8014A064 */ void twilight(); - /* 8014A0B0 */ void evtOrder(); - /* 8014A224 */ void evtChange(); - /* 8014A324 */ void clrParam(); - /* 8014A628 */ void setMotionAnm(int, f32, int); - /* 8014BBF0 */ void initTalk(int, fopAc_ac_c**); - /* 8014CBF4 */ void decTmr(); - /* 8014CC0C */ void setCollision(); - /* 8014CC10 */ void setAttnPos(); - /* 8014CC14 */ void ctrlSubFaceMotion(int); - /* 8014CC18 */ void afterMoved(); - /* 8014CC1C */ void beforeMove(); - /* 8014CC20 */ void action(); - /* 8014CC24 */ void setParam(); - /* 8014CC28 */ void drawOtherMdl(); - /* 8014CC2C */ void drawGhost(); - /* 8014CC30 */ bool drawDbgInfo(); - /* 8014CC38 */ bool checkRemoveJoint(int); - /* 8014CC40 */ bool checkChangeJoint(int); - /* 8014CC48 */ void afterJntAnm(int); - /* 8014CC4C */ s32 getHeadJointNo(); - /* 8014CC54 */ s32 getNeckJointNo(); - /* 8014CC5C */ s32 getBackboneJointNo(); - /* 8014CC64 */ void setAfterTalkMotion(); - /* 8014CC68 */ bool evtCutProc(); - /* 8014CC70 */ bool evtEndProc(); - /* 8014CC78 */ bool evtTalk(); - /* 8014CC80 */ bool checkChangeEvt(); - /* 8014CC88 */ s32 getFootRJointNo(); - /* 8014CC90 */ s32 getFootLJointNo(); - /* 8014CC98 */ bool chkXYItems(); - /* 8014CCA0 */ bool afterSetFaceMotionAnm(int, int, f32, int); - /* 8014CCA8 */ void changeBtp(int*, int*); - /* 8014CCAC */ void changeBck(int*, int*); - /* 8014CCB0 */ void getFaceMotionAnm(daNpcT_faceMotionAnmData_c); - /* 8014CCE0 */ bool afterSetMotionAnm(int, int, f32, int); - /* 8014CCE8 */ void changeBtk(int*, int*); - /* 8014CCEC */ void changeAnm(int*, int*); - /* 8014CCF0 */ void getMotionAnm(daNpcT_motionAnmData_c); - /* 8014CD20 */ ~daNpcT_c(); - /* 8014D0A8 */ bool getEyeballLMaterialNo(); - /* 8014D0B0 */ bool getEyeballRMaterialNo(); - /* 8014D0B8 */ bool getEyeballMaterialNo(); -}; - -struct daItemBase_c { - /* 80037A64 */ void hide(); -}; - -struct dSv_memBit_c { - /* 80034810 */ void onSwitch(int); - /* 80034860 */ void isSwitch(int) const; -}; - -struct STControl { - /* 80032088 */ void setWaitParm(s16, s16, s16, s16, f32, f32, s16, s16); - /* 800320AC */ void init(); - /* 8003219C */ void checkTrigger(); - /* 8003242C */ void checkLeftTrigger(); - /* 800324A8 */ void checkRightTrigger(); - /* 80032524 */ void checkUpTrigger(); - /* 800325A0 */ void checkDownTrigger(); -}; - -struct dMsgFlow_c { - /* 8024A2D8 */ void doFlow(fopAc_ac_c*, fopAc_ac_c**, int); - /* 8024A528 */ void getEventId(int*); - /* 8024B2C0 */ void query005(mesg_flow_node_branch*, fopAc_ac_c*, int); -}; - -struct dShopSystem_c { - /* 80197338 */ void initShopSystem(); - /* 801974E4 */ ~dShopSystem_c(); - /* 801975C0 */ void onFlag(int); - /* 801975DC */ void offFlag(int); - /* 801975F8 */ void isFlag(int); - /* 80197618 */ void onSoldOutItemFlag(int); - /* 80197634 */ void offSoldOutItemFlag(int); - /* 80197650 */ void isSoldOutItemFlag(int); - /* 80197670 */ void checkController(u8, dMsgFlow_c*); - /* 80197808 */ void chooseItem3(u8); - /* 80197DD0 */ void chooseItem5(u8); - /* 80198250 */ void chooseItem4(u8); - /* 80198444 */ void moveCursor(int, u8); - /* 80198488 */ void moveCursor0(int, u8); - /* 80198708 */ void moveCursor1(int, u8); - /* 80198878 */ void drawCursor(); - /* 80198950 */ void itemRotate(); - /* 80198A2C */ void itemZoom(cXyz*); - /* 801990B0 */ bool seq_wait(fopAc_ac_c*, dMsgFlow_c*); - /* 801990B8 */ void seq_start(fopAc_ac_c*, dMsgFlow_c*); - /* 8019936C */ void seq_select_wait(fopAc_ac_c*, dMsgFlow_c*); - /* 801993C4 */ void seq_select_start(fopAc_ac_c*, dMsgFlow_c*); - /* 8019959C */ void seq_select(fopAc_ac_c*, dMsgFlow_c*); - /* 80199A18 */ void seq_moving(fopAc_ac_c*, dMsgFlow_c*); - /* 80199BF8 */ void seq_decide(fopAc_ac_c*, dMsgFlow_c*); - /* 80199D14 */ void seq_choose(fopAc_ac_c*, dMsgFlow_c*); - /* 80199E28 */ void seq_decide_yes(fopAc_ac_c*, dMsgFlow_c*); - /* 80199FA4 */ void seq_decide_no(fopAc_ac_c*, dMsgFlow_c*); - /* 8019A020 */ void seq_finish(fopAc_ac_c*, dMsgFlow_c*); - /* 8019A0C0 */ void seq_event(fopAc_ac_c*, dMsgFlow_c*); - /* 8019A0D0 */ void shop_init(bool); - /* 8019A158 */ void shop_process(fopAc_ac_c*, dMsgFlow_c*); - /* 8019A238 */ void createShopItem(int); - /* 8019A344 */ void setSeq(u8); - /* 8019A354 */ void setSoldOutFlag(); - /* 8019A364 */ void setSoldOut(); - /* 8019A4F4 */ void setSoldOutItemHide(); - /* 8019A564 */ void deleteObject(); - /* 8019A5D0 */ void searchItemActor(); - /* 8019AB00 */ void getFlowNodeNum(); - /* 8019AB1C */ void setSellItemMax(u8); - /* 8019AB24 */ void checkShopOpen(); - /* 8019AB60 */ void checkLeftTrigger(STControl*); - /* 8019AB84 */ void checkRightTrigger(STControl*); - /* 8019ABA8 */ bool dpdMove(); - /* 8019ACE0 */ bool beforeStartSeqAction(dMsgFlow_c*, int); - /* 8019ACE8 */ bool beforeSelectSeqAction(dMsgFlow_c*, int); - /* 8019ACF0 */ bool getResName2(int); -}; - -struct dShopItemCtrl_c { - /* 80196958 */ ~dShopItemCtrl_c(); - /* 801969A0 */ void getCurrentPos(int); - /* 80196A3C */ void isHomePos(int); - /* 80196AF0 */ void setRotateAnime(int); - /* 80196BA4 */ void setZoomAnime(int, cXyz*, s16, bool); -}; - -struct JKRArchive {}; - -struct dSelect_cursor_c { - /* 80194220 */ dSelect_cursor_c(u8, f32, JKRArchive*); - /* 801951B0 */ void setParam(f32, f32, f32, f32, f32); - /* 801951C8 */ void setScale(f32); - /* 80195330 */ void addAlpha(); - /* 801953CC */ void decAlpha(); -}; - -struct dMsgObject_c { - /* 802378B8 */ void setShopWaitTimer(u8); - /* 8023822C */ void getStatus(); - /* 802382F4 */ void isMsgSendControl(); - /* 80238320 */ void onMsgSend(); - /* 802383D0 */ void getMessageID(); -}; - -struct dDlst_base_c {}; - -struct dDlst_list_c { - /* 80056794 */ void set(dDlst_base_c**&, dDlst_base_c**&, dDlst_base_c*); -}; - -struct csXyz {}; - -struct JAISoundID {}; - -struct Z2SeMgr { - /* 802AB984 */ void seStart(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); -}; - -struct Z2AudioMgr { - static u8 mAudioMgrPtr[4 + 4 /* padding */]; -}; - -struct ShopCam_action_c { - /* 80196544 */ void setCamDataIdx(fopAc_ac_c*, fopAc_ac_c*, fopAc_ac_c*, fopAc_ac_c*, cXyz*, - cXyz*); - /* 80196608 */ void setCamDataIdx2(fopAc_ac_c*, fopAc_ac_c*, fopAc_ac_c*, fopAc_ac_c*, - fopAc_ac_c*, fopAc_ac_c*, fopAc_ac_c*, cXyz*, cXyz*); - /* 801968B8 */ void setMasterCamCtrPos(cXyz*); -}; +#include "d/com/d_com_inf_game.h" +#include "d/d_procname.h" +#include "d/d_item.h" +#include "d/msg/d_msg_object.h" +#include "m_Do/m_Do_audio.h" +#include "d/meter/d_meter_HIO.h" +#include "SSystem/SComponent/c_math.h" +#include "m_Do/m_Do_lib.h" // // Forward References: @@ -385,12 +187,8 @@ extern "C" void _restgpr_21(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" void strcmp(); extern "C" extern void* __vt__9STControl[4]; extern "C" u8 m_cpadInfo__8mDoCPd_c[256]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_cursorHIO[68 + 4 /* padding */]; -extern "C" extern u8 g_meter2_info[248]; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; // @@ -404,35 +202,70 @@ SECTION_DATA static u8 cNullVec__6Z2Calc[12] = { }; /* 803BB8A4-803BB8C0 0189C4 001C+00 6/6 0/0 0/0 .data dShopSystem_itemActor */ -SECTION_DATA static u8 dShopSystem_itemActor[28] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +SECTION_DATA static fopAc_ac_c* dShopSystem_itemActor[7] = { + NULL, NULL, NULL, NULL, NULL, NULL, NULL, }; /* 804506E8-804506F0 000168 0007+01 7/7 0/0 0/0 .sdata dShopSystem_itemNo */ -SECTION_SDATA static u8 dShopSystem_itemNo[7 + 1 /* padding */] = { - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - 0xFF, - /* padding */ - 0x00, +SECTION_SDATA static u8 dShopSystem_itemNo[7] = { + NO_ITEM, + NO_ITEM, + NO_ITEM, + NO_ITEM, + NO_ITEM, + NO_ITEM, + NO_ITEM, }; /* 80451058-8045105C 000558 0004+00 9/9 0/0 0/0 .sbss None */ -static u8 data_80451058[4]; +static u8 data_80451058; // sSellItemMax /* 8045105C-80451060 00055C 0004+00 6/6 0/0 0/0 .sbss dShopSystem_item_count */ -static u8 dShopSystem_item_count[4]; +static int dShopSystem_item_count; /* 80451060-80451064 000560 0004+00 4/4 0/0 0/0 .sbss None */ -static u8 data_80451060[4]; +static u8 data_80451060; /* 80197098-80197270 1919D8 01D8+00 1/1 0/0 0/0 .text dShopSystem_searchItemActor__FPvPv */ +#ifdef NONMATCHING +static int dShopSystem_searchItemActor(void* param_0, void* param_1) { + if (fopAcM_IsActor(param_0) && fopAcM_GetName(param_0) == PROC_TAG_SHOPITM) { + u32 param = fopAcM_GetParam(param_0); + if ((param & 0xF0000000) == (fopAcM_GetParam(param_1) & 0xF0000000) && + dShopSystem_item_count < data_80451058) { + u32 param2 = (param >> 0x18) & 0xF; + + if (dShopSystem_itemActor[0] != param_0 && dShopSystem_itemActor[1] != param_0 && + dShopSystem_itemActor[2] != param_0 && dShopSystem_itemActor[3] != param_0 && + dShopSystem_itemActor[4] != param_0 && dShopSystem_itemActor[5] != param_0 && + dShopSystem_itemActor[6] != param_0) { + u8 sw = static_cast(param_0)->mOrig.mAngle.z; + u8 sw2 = static_cast(param_0)->mOrig.mAngle.z >> 8; + u8 item_no = param; + + if ((sw == 0xFF || !dComIfGs_isSaveSwitch(sw)) && (sw2 == 0xFF || dComIfGs_isSaveSwitch(sw2))) { + if (sw != 0xFF && item_no == HYLIA_SHIELD && checkItemGet(item_no, true)) { + dComIfGs_onSaveSwitch(sw); + } + + if (param2 == 0) { + data_80451060 = 1; + dShopSystem_itemActor[dShopSystem_item_count] = param_0; + dShopSystem_itemNo[dShopSystem_item_count] = item_no; + } else if (dShopSystem_itemActor[param2 - 1] == NULL) { + dShopSystem_itemActor[param2 - 1] = param_0; + dShopSystem_itemNo[param2 - 1] = item_no; + } + dShopSystem_item_count++; + } + } + } + } + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -441,15 +274,16 @@ static asm void dShopSystem_searchItemActor(void* param_0, void* param_1) { #include "asm/d/shop/d_shop_system/dShopSystem_searchItemActor__FPvPv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 804506F0-804506F8 000170 0008+00 6/6 0/0 0/0 .sdata dShopSystem_cameraActor */ -SECTION_SDATA static u8 dShopSystem_cameraActor[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +SECTION_SDATA static fopAc_ac_c* dShopSystem_cameraActor[2] = { + NULL, NULL }; /* 80451064-80451068 000564 0004+00 5/5 0/0 0/0 .sbss dShopSystem_camera_count */ -static u8 dShopSystem_camera_count[4]; +static int dShopSystem_camera_count; /* 80197270-80197338 191BB0 00C8+00 1/1 0/0 0/0 .text dShopSystem_searchCameraActor__FPvPv */ #pragma push @@ -479,6 +313,54 @@ SECTION_SDATA2 static f32 lit_4101 = 7.0f / 10.0f; /* 80197338-801974E4 191C78 01AC+00 0/0 0/0 19/19 .text initShopSystem__13dShopSystem_cFv */ +// matches with literals +#ifdef NONMATCHING +void dShopSystem_c::initShopSystem() { + data_80451058 = 3; + data_80451060 = 0; + + for (int i = 0; i < 7; i++) { + dShopSystem_itemActor[i] = NULL; + dShopSystem_itemNo[i] = NO_ITEM; + } + dShopSystem_item_count = 0; + + for (int i = 0; i < 2; i++) { + dShopSystem_cameraActor[i] = NULL; + } + dShopSystem_camera_count = 0; + + if (mpStick == NULL) { + mpStick = new STControl(); + } + + if (mpDrawCursor == NULL) { + mpDrawCursor = new dSelect_cursor_c(1, 1.0f, NULL); + mpDrawCursor->setParam(1.0f, 1.0f, 0.1f, 0.7f, 0.7f); + } + + field_0xf64 = -1; + mEventParam = 0; + field_0xf58 = 0; + mFlag = 0; + mCursorPos = 0; + mLastCursorPos = 0; + field_0xf68 = 0; + mSeq = 0; + field_0xf71 = mSeq; + field_0xf79 = 0; + field_0xf7a = 0; + mWaitTimer = 0; + mSoldOutFlag = -1; + mSoldOutItemFlags = 0; + offSpMode(); + field_0xf6c = 0; + field_0xf76 = 0; + field_0xf77 = 9; + field_0xf78 = -1; + mFlow.onNonStopJunpFlowFlag(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -487,13 +369,16 @@ asm void dShopSystem_c::initShopSystem() { #include "asm/d/shop/d_shop_system/initShopSystem__13dShopSystem_cFv.s" } #pragma pop +#endif + +struct shop_item_data { + Vec mItemPos[3]; +}; /* ############################################################################################## */ /* 803BB8C0-803BB8E4 0189E0 0024+00 1/0 0/0 0/0 .data item_seira_shop */ -SECTION_DATA static u8 item_seira_shop[36] = { - 0x42, 0xDC, 0x00, 0x00, 0x43, 0x16, 0x00, 0x00, 0xC2, 0xE6, 0x00, 0x00, - 0x43, 0x20, 0x00, 0x00, 0x43, 0x16, 0x00, 0x00, 0xC2, 0xE6, 0x00, 0x00, - 0x43, 0x52, 0x00, 0x00, 0x43, 0x16, 0x00, 0x00, 0xC2, 0xE6, 0x00, 0x00, +SECTION_DATA static shop_item_data item_seira_shop = { + {{110.0f, 150.0f, -115.0f}, {160.0f, 150.0f, -115.0f}, {210.0f, 150.0f, -115.0f}} }; /* 803BB8E4-803BB8F0 -00001 000C+00 0/1 0/0 0/0 .data @4056 */ @@ -885,144 +770,105 @@ SECTION_DATA static u8 process[144 + 120 /* padding */] = { 0x00, }; -/* 803BBA7C-803BBB50 018B9C 00D0+04 1/1 0/0 10/10 .data __vt__13dShopSystem_c */ -SECTION_DATA extern void* __vt__13dShopSystem_c[52 + 1 /* padding */] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__13dShopSystem_cFv, - (void*)ctrlBtk__8daNpcT_cFv, - (void*)ctrlSubFaceMotion__8daNpcT_cFi, - (void*)checkChangeJoint__8daNpcT_cFi, - (void*)checkRemoveJoint__8daNpcT_cFi, - (void*)getBackboneJointNo__8daNpcT_cFv, - (void*)getNeckJointNo__8daNpcT_cFv, - (void*)getHeadJointNo__8daNpcT_cFv, - (void*)getFootLJointNo__8daNpcT_cFv, - (void*)getFootRJointNo__8daNpcT_cFv, - (void*)getEyeballLMaterialNo__8daNpcT_cFv, - (void*)getEyeballRMaterialNo__8daNpcT_cFv, - (void*)getEyeballMaterialNo__8daNpcT_cFv, - (void*)ctrlJoint__8daNpcT_cFP8J3DJointP8J3DModel, - (void*)afterJntAnm__8daNpcT_cFi, - (void*)setParam__8daNpcT_cFv, - (void*)checkChangeEvt__8daNpcT_cFv, - (void*)evtTalk__8daNpcT_cFv, - (void*)evtEndProc__8daNpcT_cFv, - (void*)evtCutProc__8daNpcT_cFv, - (void*)setAfterTalkMotion__8daNpcT_cFv, - (void*)evtProc__8daNpcT_cFv, - (void*)action__8daNpcT_cFv, - (void*)beforeMove__8daNpcT_cFv, - (void*)afterMoved__8daNpcT_cFv, - (void*)setAttnPos__8daNpcT_cFv, - (void*)setFootPos__8daNpcT_cFv, - (void*)setCollision__8daNpcT_cFv, - (void*)setFootPrtcl__8daNpcT_cFP4cXyzff, - (void*)checkCullDraw__8daNpcT_cFv, - (void*)twilight__8daNpcT_cFv, - (void*)chkXYItems__8daNpcT_cFv, - (void*)evtOrder__8daNpcT_cFv, - (void*)decTmr__8daNpcT_cFv, - (void*)clrParam__8daNpcT_cFv, - (void*)drawDbgInfo__8daNpcT_cFv, - (void*)drawOtherMdl__8daNpcT_cFv, - (void*)drawGhost__8daNpcT_cFv, - (void*)afterSetFaceMotionAnm__8daNpcT_cFiifi, - (void*)afterSetMotionAnm__8daNpcT_cFiifi, - (void*)getFaceMotionAnm__8daNpcT_cF26daNpcT_faceMotionAnmData_c, - (void*)getMotionAnm__8daNpcT_cF22daNpcT_motionAnmData_c, - (void*)changeAnm__8daNpcT_cFPiPi, - (void*)changeBck__8daNpcT_cFPiPi, - (void*)changeBtp__8daNpcT_cFPiPi, - (void*)changeBtk__8daNpcT_cFPiPi, - (void*)setMotionAnm__8daNpcT_cFifi, - (void*)getResName2__13dShopSystem_cFi, - (void*)beforeStartSeqAction__13dShopSystem_cFP10dMsgFlow_ci, - (void*)beforeSelectSeqAction__13dShopSystem_cFP10dMsgFlow_ci, - /* padding */ - NULL, -}; - /* 801974E4-801975C0 191E24 00DC+00 1/0 0/0 10/10 .text __dt__13dShopSystem_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dShopSystem_c::~dShopSystem_c() { - nofralloc -#include "asm/d/shop/d_shop_system/__dt__13dShopSystem_cFv.s" +dShopSystem_c::~dShopSystem_c() { + deleteObject(); + data_80451058 = 0; + data_80451060 = 0; + + for (int i = 0; i < 7; i++) { + dShopSystem_itemActor[i] = NULL; + dShopSystem_itemNo[i] = NO_ITEM; + } + dShopSystem_item_count = 0; + + for (int i = 0; i < 2; i++) { + dShopSystem_cameraActor[i] = NULL; + } + dShopSystem_camera_count = 0; } -#pragma pop /* 801975C0-801975DC 191F00 001C+00 6/6 0/0 0/0 .text onFlag__13dShopSystem_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::onFlag(int param_0) { - nofralloc -#include "asm/d/shop/d_shop_system/onFlag__13dShopSystem_cFi.s" +void dShopSystem_c::onFlag(int flag) { + mFlag |= (u16)(1 << flag); } -#pragma pop /* 801975DC-801975F8 191F1C 001C+00 7/7 0/0 0/0 .text offFlag__13dShopSystem_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::offFlag(int param_0) { - nofralloc -#include "asm/d/shop/d_shop_system/offFlag__13dShopSystem_cFi.s" +void dShopSystem_c::offFlag(int flag) { + mFlag &= ~(u16)(1 << flag); } -#pragma pop /* 801975F8-80197618 191F38 0020+00 8/8 1/1 0/0 .text isFlag__13dShopSystem_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::isFlag(int param_0) { - nofralloc -#include "asm/d/shop/d_shop_system/isFlag__13dShopSystem_cFi.s" +BOOL dShopSystem_c::isFlag(int flag) { + return mFlag & (u16)(1 << flag) ? TRUE : FALSE; } -#pragma pop /* 80197618-80197634 191F58 001C+00 1/1 0/0 0/0 .text onSoldOutItemFlag__13dShopSystem_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::onSoldOutItemFlag(int param_0) { - nofralloc -#include "asm/d/shop/d_shop_system/onSoldOutItemFlag__13dShopSystem_cFi.s" +void dShopSystem_c::onSoldOutItemFlag(int flag) { + mSoldOutItemFlags |= (u8)(1 << flag); } -#pragma pop /* 80197634-80197650 191F74 001C+00 1/1 0/0 0/0 .text offSoldOutItemFlag__13dShopSystem_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::offSoldOutItemFlag(int param_0) { - nofralloc -#include "asm/d/shop/d_shop_system/offSoldOutItemFlag__13dShopSystem_cFi.s" +void dShopSystem_c::offSoldOutItemFlag(int flag) { + mSoldOutItemFlags &= ~(u8)(1 << flag); } -#pragma pop /* 80197650-80197670 191F90 0020+00 2/2 0/0 0/0 .text isSoldOutItemFlag__13dShopSystem_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::isSoldOutItemFlag(int param_0) { - nofralloc -#include "asm/d/shop/d_shop_system/isSoldOutItemFlag__13dShopSystem_cFi.s" +BOOL dShopSystem_c::isSoldOutItemFlag(int flag) { + return mSoldOutItemFlags & (u8)(1 << flag) ? TRUE : FALSE; } -#pragma pop /* 80197670-80197808 191FB0 0198+00 3/3 0/0 0/0 .text * checkController__13dShopSystem_cFUcP10dMsgFlow_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::checkController(u8 param_0, dMsgFlow_c* param_1) { - nofralloc -#include "asm/d/shop/d_shop_system/checkController__13dShopSystem_cFUcP10dMsgFlow_c.s" +int dShopSystem_c::checkController(u8 seq, dMsgFlow_c* p_flow) { + if (mWaitTimer != 0) { + if (mDoCPd_c::getTrigA(0)) { + dMsgObject_setShopWaitTimer(1); + } + return 0; + } + + if (!dpdMove()) { + mpStick->checkTrigger(); + } + + int control_status; + if (data_80451058 == 4) { + control_status = chooseItem4(seq); + } else if (data_80451058 == 5) { + control_status = chooseItem5(seq); + } else { + control_status = chooseItem3(seq); + } + + if (control_status != 0) { + return control_status; + } + + dMsgObject_c* msg = dMsgObject_getMsgObjectClass(); + if (msg->getSelectPushFlag() != 0) { + return msg->getSelectPushFlag() == 2 ? 2 : 1; + } + + if (mDoCPd_c::getTrigA(0)) { + if (msg->getStatus() != 6 && msg->getStatus() != 8 && msg->getStatus() != 9 && msg->getStatus() != 20 && seq != SEQ_WAIT) { + return 1; + } + } + + if (mDoCPd_c::getTrigB(0)) { + if (seq != SEQ_SELECT_WAIT) { + mLastCursorPos = mCursorPos; + mCursorPos = 0; + } + + if (!p_flow->isSelectMessage()) { + return 2; + } + } + + return 0; } -#pragma pop /* ############################################################################################## */ /* 80453B14-80453B18 002114 0004+00 4/4 0/0 0/0 .sdata2 @4493 */ @@ -1038,84 +884,515 @@ SECTION_SDATA2 static f32 lit_4495 = 20.0f; SECTION_SDATA2 static f32 lit_4496 = 5.0f; /* 80197808-80197DD0 192148 05C8+00 1/1 0/0 0/0 .text chooseItem3__13dShopSystem_cFUc */ +// matches with literals +#ifdef NONMATCHING +int dShopSystem_c::chooseItem3(u8 seq) { + u8 old_cursor = mLastCursorPos; + if (checkLeftTrigger(mpStick) && seq != SEQ_SELECT_WAIT) { + u8 cursor_pos = mCursorPos; + + if (cursor_pos == 7) { + mCursorPos = mLastCursorPos; + mLastCursorPos = 7; + + if (mCursorPos != 0 && isFlag(mCursorPos - 1)) { + mCursorPos = mLastCursorPos; + mLastCursorPos = old_cursor; + goto right; + } else if (seq != SEQ_START) { + if (mCursorPos != 0) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + } + + mShopCamAction.SetSelectIdx(mCursorPos); + } + + return 3; + } else if (cursor_pos == 4) { + mLastCursorPos = cursor_pos; + mCursorPos = 0; + + if (seq != SEQ_START) { + if (mCursorPos != 0) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + } + + mShopCamAction.SetSelectIdx(mCursorPos); + } + + return 3; + } else if (cursor_pos != 0) { + mLastCursorPos = cursor_pos; + mCursorPos--; + + if (mCursorPos != 0 && isFlag(mCursorPos - 1)) { + mCursorPos = mLastCursorPos; + mLastCursorPos = old_cursor; + goto right; + } else if (seq != SEQ_START) { + if (mCursorPos != 0) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + } + + mShopCamAction.SetSelectIdx(mCursorPos); + } + return 3; + } + } + +right: + if (checkRightTrigger(mpStick) && seq != SEQ_SELECT_WAIT) { + u8 cursor_pos = mCursorPos; + + if (cursor_pos != 7) { + if (cursor_pos != 3 && cursor_pos != 6) { + mLastCursorPos = cursor_pos; + mCursorPos++; + + if (mCursorPos != 0 && isFlag(mCursorPos - 1)) { + mCursorPos = mLastCursorPos; + mLastCursorPos = old_cursor; + goto up; + } else if (seq != SEQ_START) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + mShopCamAction.SetSelectIdx(mCursorPos); + } + return 4; + } + + if (data_80451058 == 7) { + mLastCursorPos = cursor_pos; + mCursorPos = 7; + + if (mCursorPos != 0 && isFlag(mCursorPos - 1)) { + mCursorPos = mLastCursorPos; + mLastCursorPos = old_cursor; + goto up; + } else if (seq != SEQ_START) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + mShopCamAction.SetSelectIdx(mCursorPos); + } + return 4; + } + } + } + +up: + if (data_80451058 >= 6) { + if (mpStick->checkUpTrigger() && seq != SEQ_SELECT_WAIT && mCursorPos <= 3) { + mLastCursorPos = mCursorPos; + mCursorPos += 3; + + if (mCursorPos != 0 && isFlag(mCursorPos - 1)) { + mCursorPos = mLastCursorPos; + mLastCursorPos = old_cursor; + goto down; + } else if (seq != SEQ_START) { + if (mCursorPos != 0) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + } + + mShopCamAction.SetSelectIdx(mCursorPos); + } + + return 5; + } + + down: + if (mpStick->checkDownTrigger() && seq != SEQ_SELECT_WAIT) { + u8 cursor_pos = mCursorPos; + + if (cursor_pos > 3 && cursor_pos <= 6) { + mLastCursorPos = cursor_pos; + mCursorPos -= 3; + + if (mCursorPos != 0 && isFlag(mCursorPos - 1)) { + mCursorPos = mLastCursorPos; + mLastCursorPos = old_cursor; + goto ret; + } else if (seq != SEQ_START) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + mShopCamAction.SetSelectIdx(mCursorPos); + } + return 6; + } + } + } + +ret: + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dShopSystem_c::chooseItem3(u8 param_0) { +asm int dShopSystem_c::chooseItem3(u8 param_0) { nofralloc #include "asm/d/shop/d_shop_system/chooseItem3__13dShopSystem_cFUc.s" } #pragma pop +#endif /* 80197DD0-80198250 192710 0480+00 1/1 0/0 0/0 .text chooseItem5__13dShopSystem_cFUc */ +// matches with literals +#ifdef NONMATCHING +int dShopSystem_c::chooseItem5(u8 seq) { + u8 old_cursor = mLastCursorPos; + if (checkLeftTrigger(mpStick) && seq != SEQ_SELECT_WAIT) { + u8 cursor_pos = mCursorPos; + + if (cursor_pos == 3) { + mLastCursorPos = cursor_pos; + mCursorPos = 0; + if (seq != SEQ_START) { + if (mCursorPos != 0) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + } + + mShopCamAction.SetSelectIdx(mCursorPos); + } + return 3; + } + + if (cursor_pos != 0) { + mLastCursorPos = cursor_pos; + mCursorPos--; + + if (mCursorPos != 0 && isFlag(mCursorPos - 1)) { + mCursorPos = mLastCursorPos; + mLastCursorPos = old_cursor; + goto right; + } else if (seq != SEQ_START) { + if (mCursorPos != 0) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + } + + mShopCamAction.SetSelectIdx(mCursorPos); + } + return 3; + } + } + +right: + if (checkRightTrigger(mpStick) && seq != SEQ_SELECT_WAIT) { + u8 cursor_pos = mCursorPos; + + if (cursor_pos != 2 && cursor_pos != 5) { + mLastCursorPos = cursor_pos; + mCursorPos++; + + if (mCursorPos != 0 && isFlag(mCursorPos - 1)) { + mCursorPos = mLastCursorPos; + mLastCursorPos = old_cursor; + goto up; + } else if (seq != SEQ_START) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + mShopCamAction.SetSelectIdx(mCursorPos); + } + return 4; + } + } + +up: + if (mpStick->checkUpTrigger() && seq != SEQ_SELECT_WAIT) { + u8 cursor_pos = mCursorPos; + + if (cursor_pos == 3 || cursor_pos == 5) { + mLastCursorPos = cursor_pos; + + if (mCursorPos == 3) { + mCursorPos = 1; + } else if (mCursorPos == 5) { + mCursorPos = 2; + } + + if (mCursorPos != 0 && isFlag(mCursorPos - 1)) { + mCursorPos = mLastCursorPos; + mLastCursorPos = old_cursor; + goto down; + } else if (seq != SEQ_START) { + if (mCursorPos != 0) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + } + + mShopCamAction.SetSelectIdx(mCursorPos); + } + return 5; + } + } + +down: + if (mpStick->checkDownTrigger() && seq != SEQ_SELECT_WAIT) { + u8 cursor_pos = mCursorPos; + + if (cursor_pos == 1 || cursor_pos == 2) { + mLastCursorPos = cursor_pos; + + if (mCursorPos == 1) { + mCursorPos = 3; + } else if (mCursorPos == 2) { + mCursorPos = 5; + } + + if (mCursorPos != 0 && isFlag(mCursorPos - 1)) { + mCursorPos = mLastCursorPos; + mLastCursorPos = old_cursor; + goto ret; + } else if (seq != SEQ_START) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + mShopCamAction.SetSelectIdx(mCursorPos); + } + return 6; + } + } + +ret: + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dShopSystem_c::chooseItem5(u8 param_0) { +asm int dShopSystem_c::chooseItem5(u8 seq) { nofralloc #include "asm/d/shop/d_shop_system/chooseItem5__13dShopSystem_cFUc.s" } #pragma pop +#endif /* 80198250-80198444 192B90 01F4+00 1/1 0/0 0/0 .text chooseItem4__13dShopSystem_cFUc */ +// matches with literals. gotos can probably be removed +#ifdef NONMATCHING +int dShopSystem_c::chooseItem4(u8 seq) { + u8 old_cursor = mLastCursorPos; + if (checkLeftTrigger(mpStick) && seq != SEQ_SELECT_WAIT && mCursorPos != 0) { + mLastCursorPos = mCursorPos; + mCursorPos--; + + if (mCursorPos != 0 && isFlag(mCursorPos - 1)) { + mCursorPos = mLastCursorPos; + mLastCursorPos = old_cursor; + goto right; + } else if (seq != SEQ_START) { + if (mCursorPos != 0) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + } + + mShopCamAction.SetSelectIdx(mCursorPos); + } + + return 3; + } + +right: + if (checkRightTrigger(mpStick) && seq != SEQ_SELECT_WAIT && mCursorPos < 4) { + mLastCursorPos = mCursorPos; + mCursorPos++; + + if (mCursorPos != 0 && isFlag(mCursorPos - 1)) { + mCursorPos = mLastCursorPos; + mLastCursorPos = old_cursor; + goto ret; + } else if (seq != SEQ_START) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + mShopCamAction.SetSelectIdx(mCursorPos); + } + + return 4; + } + +ret: + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dShopSystem_c::chooseItem4(u8 param_0) { +asm int dShopSystem_c::chooseItem4(u8 seq) { nofralloc #include "asm/d/shop/d_shop_system/chooseItem4__13dShopSystem_cFUc.s" } #pragma pop +#endif /* 80198444-80198488 192D84 0044+00 5/5 0/0 0/0 .text moveCursor__13dShopSystem_cFiUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::moveCursor(int param_0, u8 param_1) { - nofralloc -#include "asm/d/shop/d_shop_system/moveCursor__13dShopSystem_cFiUc.s" +int dShopSystem_c::moveCursor(int control_status, u8 param_1) { + int cursor_status; + if (field_0xf60 >= 0) { + cursor_status = moveCursor0(control_status, param_1); + } else { + cursor_status = moveCursor1(control_status, param_1); + } + + field_0xf6c = cursor_status; + return cursor_status; } -#pragma pop /* 80198488-80198708 192DC8 0280+00 1/1 0/0 0/0 .text moveCursor0__13dShopSystem_cFiUc */ +// matches with literals +#ifdef NONMATCHING +int dShopSystem_c::moveCursor0(int control_status, u8 param_1) { + offFlag(7); + + switch (control_status) { + case 3: + if (mCursorPos == 0) { + return getEventParamU8(mCursorPos) + 0x52; + } + + return (getEventParamU8(mCursorPos) - 1) * 2 + 0x66; + + case 4: + if (mCursorPos == 0) { + return getEventParamU8(mCursorPos) + 0x52; + } + + return (getEventParamU8(mCursorPos) - 1) * 2 + 0x66; + + case 7: + if (mCursorPos == 0) { + return getEventParamU8(mCursorPos) + 0x52; + } + + return (getEventParamU8(mCursorPos) - 1) * 2 + 0x66; + + case 1: + if (mCursorPos == 0) { + return getEventParamU8(mCursorPos) + 0x52; + } + + if (param_1 != 2) { + return (getEventParamU8(mCursorPos) - 1) * 2 + 0x65; + } + + return (getEventParamU8(mCursorPos) - 1) * 2 + 0x66; + + case 2: + onFlag(7); + mShopCamAction.SetSelectIdx(mCursorPos); + + if (mCursorPos == 0) { + return getEventParamU8(mCursorPos) + 0x52; + } + + if (param_1 != 2) { + return (getEventParamU8(mCursorPos) - 1) * 2 + 0x65; + } + + return (getEventParamU8(mCursorPos) - 1) * 2 + 0x66; + } + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dShopSystem_c::moveCursor0(int param_0, u8 param_1) { +asm int dShopSystem_c::moveCursor0(int param_0, u8 param_1) { nofralloc #include "asm/d/shop/d_shop_system/moveCursor0__13dShopSystem_cFiUc.s" } #pragma pop +#endif /* 80198708-80198878 193048 0170+00 1/1 0/0 0/0 .text moveCursor1__13dShopSystem_cFiUc */ +#ifdef NONMATCHING +int dShopSystem_c::moveCursor1(int control_status, u8 param_1) { + offFlag(7); + + switch (control_status) { + case 7: + if (mCursorPos == 0) { + return getFlowNodeNum() + 1; + } + + return mItemCtrl.getMessageIndex(mCursorPos - 1) + 1; + + case 1: + if (mCursorPos == 0) { + return getFlowNodeNum() + 1; + } else if (param_1 != 2) { + return mItemCtrl.getMessageIndex(mCursorPos - 1); + } + + return mItemCtrl.getMessageIndex(mCursorPos - 1) + 1; + + case 2: + onFlag(7); + mShopCamAction.SetSelectIdx(mCursorPos); + + if (mCursorPos == 0) { + return getFlowNodeNum() + 1; + } else if (param_1 != 2) { + return mItemCtrl.getMessageIndex(mCursorPos - 1); + } + + return mItemCtrl.getMessageIndex(mCursorPos - 1) + 1; + + default: + return 0; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dShopSystem_c::moveCursor1(int param_0, u8 param_1) { +asm int dShopSystem_c::moveCursor1(int param_0, u8 param_1) { nofralloc #include "asm/d/shop/d_shop_system/moveCursor1__13dShopSystem_cFiUc.s" } #pragma pop +#endif /* 80198878-80198950 1931B8 00D8+00 0/0 0/0 9/9 .text drawCursor__13dShopSystem_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::drawCursor() { - nofralloc -#include "asm/d/shop/d_shop_system/drawCursor__13dShopSystem_cFv.s" +int dShopSystem_c::drawCursor() { + if ((mSeq == 4 || mSeq == 5 || ((mSeq == 6 || mSeq == SEQ_SELECT_WAIT) && isFlag(mCursorPos - 1))) && mCursorPos != 0 && mItemCtrl.isHomePos(mCursorPos - 1)) { + mpDrawCursor->addAlpha(); + } else { + mpDrawCursor->decAlpha(); + } + + mpDrawCursor->setScale(g_cursorHIO.mShopCursorScale); + if (mCursorPos != 0) { + dComIfGd_set2DOpa(mpDrawCursor); + } + + return 1; } -#pragma pop /* 80198950-80198A2C 193290 00DC+00 0/0 0/0 9/9 .text itemRotate__13dShopSystem_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::itemRotate() { - nofralloc -#include "asm/d/shop/d_shop_system/itemRotate__13dShopSystem_cFv.s" +int dShopSystem_c::itemRotate() { + u8 item_index = 0; + u8 cursor_pos = mCursorPos; + + if (cursor_pos != 0 && mSeq != SEQ_WAIT) { + if (dShopSystem_itemNo[cursor_pos - 1] == ARMOR) { + int tmp_index; + if (isFlag(8) == false) { + tmp_index = 0; + } else { + tmp_index = mCursorPos; + } + item_index = tmp_index; + } else { + bool no_rotate = false; + int tmp_index; + if (isFlag(cursor_pos - 1) || isSoldOutItemFlag(mCursorPos - 1)) { + no_rotate = true; + } + + if (no_rotate) { + tmp_index = 0; + } else { + tmp_index = mCursorPos; + } + item_index = tmp_index; + } + } + + mItemCtrl.setRotateAnime(item_index); + return 1; } -#pragma pop /* ############################################################################################## */ /* 80394C10-80394C10 021270 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -1149,19 +1426,123 @@ SECTION_SDATA2 static f32 lit_5006 = 215.0f; SECTION_SDATA2 static f32 lit_5007 = 15.0f; /* 80198A2C-801990B0 19336C 0684+00 0/0 0/0 9/9 .text itemZoom__13dShopSystem_cFP4cXyz */ +// matches with literals +#ifdef NONMATCHING +int dShopSystem_c::itemZoom(cXyz* param_0) { + cXyz local_1c; + + if (field_0xf60 >= 0) { + local_1c.set(*param_0); + + if (dShopSystem_itemNo[mCursorPos - 1] == OIL_BOTTLE) { + mItemCtrl.setZoomAnime(mCursorPos, &local_1c, g_cursorHIO.mSeraShopObjZoomAngleX + -5000, isFlag(8) ? true : false); + } else { + mItemCtrl.setZoomAnime(mCursorPos, &local_1c, g_cursorHIO.mSeraShopObjZoomAngleX, isFlag(8) ? true : false); + } + } else { + cXyz local_28; + cXyz local_34; + + if (dShopSystem_itemActor[1] != NULL && dShopSystem_cameraActor[1] != NULL) { + cXyz local_40; + local_40.set(dShopSystem_itemActor[1]->mOrig.mPosition); + + f32 tmp_05 = 0.5f; + if (data_80451058 == 4) { + if (dShopSystem_itemActor[2] != NULL) { + f32 tmp = (dShopSystem_itemActor[2]->mOrig.mPosition.x + dShopSystem_itemActor[1]->mOrig.mPosition.x); + local_40.x = tmp * tmp_05; + + f32 tmp2 = (dShopSystem_itemActor[2]->mOrig.mPosition.y + dShopSystem_itemActor[1]->mOrig.mPosition.y); + local_40.y = tmp2 * tmp_05; + + f32 tmp3 = (dShopSystem_itemActor[2]->mOrig.mPosition.z + dShopSystem_itemActor[1]->mOrig.mPosition.z); + local_40.z = tmp3 * tmp_05; + } + } else if (data_80451058 == 5) { + f32 tmp = (dShopSystem_itemActor[2]->mOrig.mPosition.x + dShopSystem_itemActor[3]->mOrig.mPosition.x); + local_40.x = tmp * tmp_05; + + local_40.y = dShopSystem_itemActor[0]->mOrig.mPosition.y; + + f32 tmp3 = (dShopSystem_itemActor[2]->mOrig.mPosition.z + dShopSystem_itemActor[3]->mOrig.mPosition.z); + local_40.z = tmp3 * tmp_05; + } + + cXyz local_4c = local_40 - dShopSystem_cameraActor[1]->mCurrent.mPosition; + s16 atan = cM_atan2s(local_4c.x, local_4c.z); + + if (!strcmp("R_SP01", dComIfGp_getStartStageName())) { + local_34.set(g_cursorHIO.mObjZoom.x, g_cursorHIO.mObjZoom.y + -25.0f, g_cursorHIO.mObjZoom.z + 150.0f); + } else { + if (field_0xf77 == 5) { + if (dShopSystem_itemNo[mCursorPos - 1] == ARROW_10 || dShopSystem_itemNo[mCursorPos - 1] == ARROW_20 || dShopSystem_itemNo[mCursorPos - 1] == ARROW_30) { + local_34.set(g_cursorHIO.mObjZoom.x, 5.0f + g_cursorHIO.mObjZoom.y + -50.0f, (g_cursorHIO.mObjZoom.z + 250.0f) - 60.0f); + } else { + local_34.set(g_cursorHIO.mObjZoom.x, 20.0f + g_cursorHIO.mObjZoom.y + -50.0f, (g_cursorHIO.mObjZoom.z + 250.0f) - 60.0f); + } + } else if (mCursorPos == 7) { + local_34.set(g_cursorHIO.mMagicArmorObjZoom.x, g_cursorHIO.mMagicArmorObjZoom.y + -130.0f, g_cursorHIO.mMagicArmorObjZoom.z + 215.0f); + } else { + local_34.set(g_cursorHIO.mObjZoom.x, g_cursorHIO.mObjZoom.y + -50.0f, g_cursorHIO.mObjZoom.z + 250.0f); + } + } + + cLib_offsetPos(&local_28, &dShopSystem_cameraActor[1]->mCurrent.mPosition, atan, &local_34); + if (data_80451058 == 6 || data_80451058 == 5) { + param_0->y += 15.0f; + } + local_1c.set(local_28.x + param_0->x, local_28.y + param_0->y, local_28.z + param_0->z); + } else { + local_28.set(*param_0); + local_1c.set(*param_0); + } + + u8 dvar1 = field_0xf77; + if (dvar1 == 1) { + if (dShopSystem_itemNo[mCursorPos - 1] == OIL_BOTTLE) { + mItemCtrl.setZoomAnime(mCursorPos, &local_1c, g_cursorHIO.mShopObjZoomAngleX + -7000, isFlag(8) ? true : false); + } else { + mItemCtrl.setZoomAnime(mCursorPos, &local_1c, g_cursorHIO.mShopObjZoomAngleX, isFlag(8) ? true : false); + } + } else if (dvar1 == 2) { + if (dShopSystem_itemNo[mCursorPos - 1] == RED_BOTTLE) { + mItemCtrl.setZoomAnime(mCursorPos, &local_1c, g_cursorHIO.mShopObjZoomAngleX - 3000, isFlag(8) ? true : false); + } else { + mItemCtrl.setZoomAnime(mCursorPos, &local_1c, g_cursorHIO.mShopObjZoomAngleX, isFlag(8) ? true : false); + } + } else if (dvar1 == 5) { + if (dShopSystem_itemNo[mCursorPos - 1] == ARROW_10 || dShopSystem_itemNo[mCursorPos - 1] == ARROW_20 || dShopSystem_itemNo[mCursorPos - 1] == ARROW_30) { + mItemCtrl.setZoomAnime(mCursorPos, &local_1c, g_cursorHIO.mShopObjZoomAngleX - 4000, isFlag(8) ? true : false); + } else { + mItemCtrl.setZoomAnime(mCursorPos, &local_1c, g_cursorHIO.mShopObjZoomAngleX - 2000, isFlag(8) ? true : false); + } + } else if (mCursorPos == 7) { + mItemCtrl.setZoomAnime(mCursorPos, &local_1c, g_cursorHIO.mMagicArmorObjZoomAngleX, isFlag(8) ? true : false); + } else if (data_80451058 == 7) { + mItemCtrl.setZoomAnime(mCursorPos, &local_1c, g_cursorHIO.mShopObjZoomAngleX - 3000, isFlag(8) ? true : false); + } else { + mItemCtrl.setZoomAnime(mCursorPos, &local_1c, g_cursorHIO.mShopObjZoomAngleX, isFlag(8) ? true : false); + } + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dShopSystem_c::itemZoom(cXyz* param_0) { +asm int dShopSystem_c::itemZoom(cXyz* param_0) { nofralloc #include "asm/d/shop/d_shop_system/itemZoom__13dShopSystem_cFP4cXyz.s" } #pragma pop +#endif /* 801990B0-801990B8 1939F0 0008+00 1/0 0/0 0/0 .text * seq_wait__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c */ -bool dShopSystem_c::seq_wait(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { - return false; +int dShopSystem_c::seq_wait(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { + return 0; } /* ############################################################################################## */ @@ -1173,49 +1554,282 @@ SECTION_SDATA2 static u8 lit_5084[4] = { 0x00, }; +inline void pos3Dto2D(Vec* a, Vec* b) { + mDoLib_project(a, b); +} + /* 801990B8-8019936C 1939F8 02B4+00 1/0 0/0 0/0 .text * seq_start__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c */ +// matches with literals +#ifdef NONMATCHING +int dShopSystem_c::seq_start(fopAc_ac_c* actor, dMsgFlow_c* p_flow) { + if (field_0xf79 != 0) { + dComIfGp_setDoStatusForce(0, 0); + dComIfGp_setAStatusForce(0, 0); + field_0xf79 = 0; + } + + cXyz pos3d; + cXyz pos2d; + pos3d.set(mItemCtrl.getCurrentPos(0)); + pos3Dto2D(&pos3d, &pos2d); + mpDrawCursor->setPos(pos2d.x, pos2d.y + g_cursorHIO.mShopCursorOffsetY); + + if (chkSpMode() && !beforeStartSeqAction(p_flow, field_0xf5c)) { + return 0; + } else { + if (dMsgObject_c::isMsgSendControl()) { + dComIfGp_setDoStatusForce(0, 0); + dComIfGp_setAStatusForce(0x2A, 0); + + int control_status = checkController(SEQ_WAIT, p_flow); + if (control_status != 0) { + dMsgObject_c::onMsgSend(); + int cursor_status = moveCursor(control_status, 0); + + if (chkSpMode()) { + if (mCursorPos != 0) { + field_0xf5c = cursor_status; + mShopCamAction.setCameraSpeed(0.0f, 0.0f, 0.0f, 0.0f); + setSeq(SEQ_SELECT); + } else if (p_flow->doFlow(actor, NULL, cursor_status)) { + mShopCamAction.setCameraSpeed(0.0f, 0.0f, 0.0f, 0.0f); + setSeq(SEQ_FINISH); + } + } else if (p_flow->doFlow(actor, NULL, cursor_status)) { + if (mCursorPos == 0) { + setSeq(SEQ_FINISH); + } else { + setSeq(SEQ_SELECT); + } + } + } + } else { + if (p_flow->doFlow(actor, NULL, 0)) { + int itemNo; + if (mFlow.getEventId(&itemNo) == 1) { + if (field_0xd90 == -1) { + field_0xd90 = fopAcM_createItemForPresentDemo(&mCurrent.mPosition, itemNo, 0, -1, -1, NULL, NULL); + } + + if (fpcEx_IsExist(field_0xd90)) { + field_0xe30 = 1; + evtChange(); + return 1; + } else { + return 0; + } + } else { + return 1; + } + } + } + } + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dShopSystem_c::seq_start(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { +asm int dShopSystem_c::seq_start(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { nofralloc #include "asm/d/shop/d_shop_system/seq_start__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c.s" } #pragma pop +#endif /* 8019936C-801993C4 193CAC 0058+00 1/0 0/0 0/0 .text * seq_select_wait__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::seq_select_wait(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { - nofralloc -#include "asm/d/shop/d_shop_system/seq_select_wait__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c.s" +int dShopSystem_c::seq_select_wait(fopAc_ac_c*, dMsgFlow_c*) { + if (mItemCtrl.isHomePos(mCursorPos - 1)) { + setSoldOut(); + setSeq(SEQ_SELECT); + } + + return 0; } -#pragma pop /* 801993C4-8019959C 193D04 01D8+00 1/0 0/0 0/0 .text * seq_select_start__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c */ +// matches with literals +#ifdef NONMATCHING +int dShopSystem_c::seq_select_start(fopAc_ac_c*, dMsgFlow_c*) { + if (field_0xf60 < 0 && field_0xf76 == 0 && dShopSystem_item_count != -1) { + if (dShopSystem_item_count != data_80451058) { + return 0; + } + searchItemActor(); + } + + if (isFlag(mCursorPos - 1)) { + switch (mCursorPos) { + case 1: + mCursorPos = 2; + if (isFlag(mCursorPos - 1)) { + mCursorPos = 3; + if (isFlag(mCursorPos - 1)) { + mCursorPos = 0; + } + } + break; + + case 2: + mCursorPos = 1; + if (isFlag(mCursorPos - 1)) { + mCursorPos = 3; + if (isFlag(mCursorPos - 1)) { + mCursorPos = 0; + } + } + break; + + case 3: + mCursorPos = 2; + if (isFlag(mCursorPos - 1)) { + mCursorPos = 1; + if (isFlag(mCursorPos - 1)) { + mCursorPos = 0; + } + } + break; + } + } + + mShopCamAction.SetSelectIdx(mCursorPos); + int cursor_status = moveCursor(4, 0); + initTalk(cursor_status, NULL); + setSeq(SEQ_SELECT); + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dShopSystem_c::seq_select_start(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { +asm int dShopSystem_c::seq_select_start(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { nofralloc #include "asm/d/shop/d_shop_system/seq_select_start__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c.s" } #pragma pop +#endif /* 8019959C-80199A18 193EDC 047C+00 1/0 0/0 0/0 .text * seq_select__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c */ +// matches with literals +#ifdef NONMATCHING +int dShopSystem_c::seq_select(fopAc_ac_c* actor, dMsgFlow_c* p_flow) { + if (chkSpMode() && !beforeSelectSeqAction(p_flow, field_0xf5c)) { + return 0; + } + + if (field_0xf76 != 0) { + field_0xf76 = 0; + } + + int control_status = checkController(SEQ_START, p_flow); + dComIfGp_setDoStatusForce(0x22, 0); + dComIfGp_setAStatusForce(0x2A, 0); + + if (control_status != 0) { + int cursor_status = moveCursor(control_status, 1); + + int spMode = chkSpMode(); + if (spMode && control_status == 2) { + field_0xf5c = cursor_status; + mShopCamAction.setCameraSpeed(0.0f, 0.0f, 0.0f, 0.0f); + setSeq(SEQ_FINISH); + } else if (spMode && mCursorPos == 0) { + field_0xf5c = cursor_status; + mShopCamAction.SetSelectIdx(mCursorPos); + mShopCamAction.setCameraSpeed(0.0f, 0.0f, 0.0f, 0.0f); + setSeq(SEQ_START); + } else if (p_flow->doFlow(actor, NULL, cursor_status)) { + if (control_status == 3) { + if (mCursorPos != 0) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + } + + mShopCamAction.SetSelectIdx(mCursorPos); + } else if (control_status == 4 || control_status == 5 || control_status == 6) { + mDoAud_seStart(Z2SE_SY_TALK_NEXT, NULL, 0, 0); + + mShopCamAction.SetSelectIdx(mCursorPos); + } + + dComIfGp_setMesgCancelButton(1); + + if (control_status == 1) { + if (!isFlag(mCursorPos - 1) && !isSoldOutItemFlag(mCursorPos - 1)) { + onFlag(8); + } + dMeter2Info_set2DVibrationM(); + setSeq(SEQ_DECIDE); + } else if (control_status == 2) { + setSeq(SEQ_FINISH); + } else if (mCursorPos == 0) { + setSeq(SEQ_START); + } else { + field_0xf68 = 0; + setSeq(SEQ_MOVING); + + if (mLastCursorPos != 0) { + return 0; + } + } + } else if (control_status == 3 || control_status == 4 || control_status == 5 || control_status == 6 || control_status == 7 || control_status == 2) { + if (mLastCursorPos == 7) { + mLastCursorPos = mCursorPos; + mCursorPos = 7; + } else { + mCursorPos = mLastCursorPos; + } + + field_0xf7a = 0; + + if (control_status == 2) { + mShopCamAction.SetSelectIdx(mCursorPos); + } + } + } else { + p_flow->doFlow(actor, NULL, 0); + } + + u8 old_cursor = 0; + if (mCursorPos != 0) { + old_cursor = mCursorPos; + } else if (mLastCursorPos != 0) { + old_cursor = mLastCursorPos; + } + + if (old_cursor != 0) { + cXyz pos3d; + cXyz pos2d; + pos3d.set(mItemCtrl.getCurrentPos(old_cursor - 1)); + pos3Dto2D(&pos3d, &pos2d); + + if (old_cursor == 7) { + pos2d.x += g_cursorHIO.mMagicArmorCursorOffsetX; + pos2d.y += g_cursorHIO.mMagicArmorCursorOffsetY; + } else { + pos2d.y += g_cursorHIO.mShopCursorOffsetY; + } + + mpDrawCursor->setPos(pos2d.x, pos2d.y); + } + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dShopSystem_c::seq_select(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { +asm int dShopSystem_c::seq_select(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { nofralloc #include "asm/d/shop/d_shop_system/seq_select__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80453B48-80453B50 002148 0004+04 1/1 0/0 0/0 .sdata2 @5296 */ @@ -1230,90 +1844,213 @@ SECTION_SDATA2 static f64 lit_5298 = 4503601774854144.0 /* cast s32 to float */; /* 80199A18-80199BF8 194358 01E0+00 1/0 0/0 0/0 .text * seq_moving__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c */ +// matches with literals +#ifdef NONMATCHING +int dShopSystem_c::seq_moving(fopAc_ac_c*, dMsgFlow_c*) { + field_0xf68++; + + cXyz last_pos3d; + cXyz pos3d; + cXyz last_pos2d; + cXyz pos2d; + + pos3d.set(mItemCtrl.getCurrentPos(mCursorPos - 1)); + pos3Dto2D(&pos3d, &pos2d); + + if (mCursorPos == 7) { + pos2d.x += g_cursorHIO.mMagicArmorCursorOffsetX; + pos2d.y += g_cursorHIO.mMagicArmorCursorOffsetY; + } else { + pos2d.y += g_cursorHIO.mShopCursorOffsetY; + } + + if (mLastCursorPos != 0) { + last_pos3d.set(mItemCtrl.getCurrentPos(mLastCursorPos - 1)); + pos3Dto2D(&last_pos3d, &last_pos2d); + + if (mLastCursorPos == 7) { + last_pos2d.x += g_cursorHIO.mMagicArmorCursorOffsetX; + last_pos2d.y += g_cursorHIO.mMagicArmorCursorOffsetY; + } else { + last_pos2d.y += g_cursorHIO.mShopCursorOffsetY; + } + + f32 tmp = (f32)(field_0xf68 * field_0xf68) / 9.0f; + mpDrawCursor->setPos(last_pos2d.x + tmp * (pos2d.x - last_pos2d.x), last_pos2d.y + tmp * (pos2d.y - last_pos2d.y)); + + } else { + mpDrawCursor->setPos(pos2d.x, pos2d.y); + } + + if (field_0xf68 >= 3) { + setSeq(SEQ_SELECT); + } + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dShopSystem_c::seq_moving(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { +asm int dShopSystem_c::seq_moving(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { nofralloc #include "asm/d/shop/d_shop_system/seq_moving__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c.s" } #pragma pop +#endif /* 80199BF8-80199D14 194538 011C+00 1/0 0/0 0/0 .text * seq_decide__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::seq_decide(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { - nofralloc -#include "asm/d/shop/d_shop_system/seq_decide__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c.s" +int dShopSystem_c::seq_decide(fopAc_ac_c* actor, dMsgFlow_c* p_flow) { + int control_status = checkController(SEQ_SELECT_WAIT, p_flow); + + dComIfGp_setDoStatusForce(0x22, 0); + if (!p_flow->isSelectMessage()) { + dComIfGp_setAStatusForce(0x2A, 0); + } else if (dMsgObject_getMsgObjectClass()->getSelectCancelPos() != 0) { + dComIfGp_setAStatusForce(0x2A, 0); + } + + if (control_status != 0) { + int cursor_status = moveCursor(control_status, 2); + + if (p_flow->doFlow(actor, NULL, cursor_status)) { + offFlag(8); + setSeq(SEQ_SELECT_WAIT); + } else if (p_flow->isSelectMessage()) { + field_0xf58 = control_status; + setSeq(SEQ_CHOOSE); + } + } else { + p_flow->doFlow(actor, NULL, 0); + } + + return 0; } -#pragma pop /* 80199D14-80199E28 194654 0114+00 1/0 0/0 0/0 .text * seq_choose__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::seq_choose(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { - nofralloc -#include "asm/d/shop/d_shop_system/seq_choose__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c.s" +int dShopSystem_c::seq_choose(fopAc_ac_c* actor, dMsgFlow_c* p_flow) { + dComIfGp_setDoStatusForce(0x22, 0); + if (!p_flow->isSelectMessage()) { + dComIfGp_setAStatusForce(0x2A, 0); + } else if (dMsgObject_getMsgObjectClass()->getSelectCancelPos() != 0) { + dComIfGp_setAStatusForce(0x2A, 0); + } + + p_flow->doFlow(actor, NULL, 0); + + u16 select_num = p_flow->getSelectNum(); + if (dMsgObject_c::getStatus() != 6 && dMsgObject_c::getStatus() != 8 && dMsgObject_c::getStatus() != 9 && dMsgObject_c::getStatus() != 20) { + if (select_num == 0) { + setSeq(SEQ_DECIDE_YES); + } else { + setSeq(SEQ_DECIDE_NO); + } + } + + return 0; } -#pragma pop /* 80199E28-80199FA4 194768 017C+00 1/0 0/0 0/0 .text * seq_decide_yes__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c */ +// matches with literals +#ifdef NONMATCHING +int dShopSystem_c::seq_decide_yes(fopAc_ac_c* actor, dMsgFlow_c* p_flow) { + if (dMsgObject_getMessageID() == 0x1B82) { + mShopCamAction.SetSelectIdx(0); + field_0xf76 = 1; + } + + int itemNo; + if (mFlow.getEventId(&itemNo) == 1) { + if (p_flow->doFlow(actor, NULL, 0)) { + if (field_0xd90 == -1) { + field_0xd90 = fopAcM_createItemForPresentDemo(&mCurrent.mPosition, itemNo, 0, -1, -1, NULL, NULL); + } + + if (fpcEx_IsExist(field_0xd90)) { + offFlag(8); + setSoldOutItemHide(); + field_0xe30 = 1; + evtChange(); + return 2; + } + + return 0; + } + } else { + int flow; + if (field_0xf60 >= 0) { + flow = 100; + } else { + flow = mItemCtrl.getMessageIndex(mCursorPos - 1) + 1; + } + + if (p_flow->doFlow(actor, NULL, flow)) { + offFlag(8); + setSeq(SEQ_SELECT_WAIT); + } + } + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dShopSystem_c::seq_decide_yes(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { +asm int dShopSystem_c::seq_decide_yes(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { nofralloc #include "asm/d/shop/d_shop_system/seq_decide_yes__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c.s" } #pragma pop +#endif /* 80199FA4-8019A020 1948E4 007C+00 1/0 0/0 0/0 .text * seq_decide_no__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::seq_decide_no(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { - nofralloc -#include "asm/d/shop/d_shop_system/seq_decide_no__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c.s" +int dShopSystem_c::seq_decide_no(fopAc_ac_c* actor, dMsgFlow_c* p_flow) { + if (p_flow->doFlow(actor, NULL, moveCursor(field_0xf58, 2))) { + offFlag(8); + setSeq(SEQ_SELECT_WAIT); + } + + return 0; } -#pragma pop /* 8019A020-8019A0C0 194960 00A0+00 1/0 0/0 0/0 .text * seq_finish__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::seq_finish(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { - nofralloc -#include "asm/d/shop/d_shop_system/seq_finish__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c.s" +int dShopSystem_c::seq_finish(fopAc_ac_c* actor, dMsgFlow_c* p_flow) { + if (chkSpMode() && !beforeStartSeqAction(p_flow, field_0xf5c)) { + return 0; + } else if (p_flow->doFlow(actor, NULL, 0)) { + setSeq(SEQ_WAIT); + return 1; + } + + return 0; } -#pragma pop /* 8019A0C0-8019A0D0 194A00 0010+00 1/0 0/0 0/0 .text * seq_event__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::seq_event(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { - nofralloc -#include "asm/d/shop/d_shop_system/seq_event__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c.s" +bool dShopSystem_c::seq_event(fopAc_ac_c*, dMsgFlow_c*) { + return field_0xe30 == 0; } -#pragma pop /* 8019A0D0-8019A158 194A10 0088+00 0/0 0/0 9/9 .text shop_init__13dShopSystem_cFb */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::shop_init(bool param_0) { - nofralloc -#include "asm/d/shop/d_shop_system/shop_init__13dShopSystem_cFb.s" +int dShopSystem_c::shop_init(bool param_0) { + if (param_0) { + setSeq(SEQ_SELECT_START); + dMeter2Info_onShopTalkFlag(); + setSoldOut(); + return 1; + } else if (mSeq == SEQ_WAIT) { + setSeq(SEQ_START); + dMeter2Info_onShopTalkFlag(); + return 1; + } else { + return 0; + } } -#pragma pop /* 8019A158-8019A238 194A98 00E0+00 0/0 0/0 9/9 .text * shop_process__13dShopSystem_cFP10fopAc_ac_cP10dMsgFlow_c */ @@ -1328,87 +2065,124 @@ asm void dShopSystem_c::shop_process(fopAc_ac_c* param_0, dMsgFlow_c* param_1) { /* ############################################################################################## */ /* 804506F8-80450700 -00001 0004+04 1/1 0/0 0/0 .sdata shop_item_pos_data_tbl */ -SECTION_SDATA static void* shop_item_pos_data_tbl[1 + 1 /* padding */] = { - (void*)&item_seira_shop, - /* padding */ - NULL, -}; +SECTION_SDATA static shop_item_data* shop_item_pos_data_tbl = &item_seira_shop; /* 80453B58-80453B60 002158 0006+02 1/1 0/0 0/0 .sdata2 item_no$5460 */ -SECTION_SDATA2 static u8 item_no[6 + 2 /* padding */] = { - 0x64, - 0x76, - 0x4B, - 0x64, - 0x76, - 0xFF, - /* padding */ - 0x00, - 0x00, +SECTION_SDATA2 static u8 item_no[6] = { + MILK_BOTTLE, + BEE_CHILD, + PACHINKO, + MILK_BOTTLE, + BEE_CHILD, + NO_ITEM, }; /* 8019A238-8019A344 194B78 010C+00 0/0 0/0 1/1 .text createShopItem__13dShopSystem_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::createShopItem(int param_0) { - nofralloc -#include "asm/d/shop/d_shop_system/createShopItem__13dShopSystem_cFi.s" +void dShopSystem_c::createShopItem(int itemType) { + if (itemType != -1) { + field_0xf60 = itemType; + mSoldOutFlag = -1; + + cXyz pos; + for (int i = 0; i < 3; i++) { + u8* itemTbl = item_no + (itemType * 3); + + pos.x = shop_item_pos_data_tbl->mItemPos[i].x + mCurrent.mPosition.x; + pos.y = shop_item_pos_data_tbl->mItemPos[i].y + mCurrent.mPosition.y; + pos.z = shop_item_pos_data_tbl->mItemPos[i].z + mCurrent.mPosition.z; + + if (itemTbl[i] != NO_ITEM) { + u32 index = fopAcM_create(PROC_ShopItem, itemTbl[i], &pos, fopAcM_GetRoomNo(this), &mCurrent.mAngle, NULL, -1); + mItemCtrl.setItemIndex(i, index); + offFlag(i); + } else { + mItemCtrl.setItemIndex(i, -1); + onFlag(i); + } + } + } } -#pragma pop /* 8019A344-8019A354 194C84 0010+00 12/12 0/0 0/0 .text setSeq__13dShopSystem_cFUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::setSeq(u8 param_0) { - nofralloc -#include "asm/d/shop/d_shop_system/setSeq__13dShopSystem_cFUc.s" +void dShopSystem_c::setSeq(u8 seq) { + mSeq = seq; + mWaitTimer = 2; } -#pragma pop /* 8019A354-8019A364 194C94 0010+00 0/0 1/1 0/0 .text setSoldOutFlag__13dShopSystem_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::setSoldOutFlag() { - nofralloc -#include "asm/d/shop/d_shop_system/setSoldOutFlag__13dShopSystem_cFv.s" +void dShopSystem_c::setSoldOutFlag() { + mSoldOutFlag = mCursorPos - 1; } -#pragma pop /* 8019A364-8019A4F4 194CA4 0190+00 2/2 0/0 0/0 .text setSoldOut__13dShopSystem_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::setSoldOut() { - nofralloc -#include "asm/d/shop/d_shop_system/setSoldOut__13dShopSystem_cFv.s" +void dShopSystem_c::setSoldOut() { + if (mSoldOutFlag != 0xFF) { + if (field_0xf60 < 0) { + u8 sw = (u8)dShopSystem_itemActor[mSoldOutFlag]->mOrig.mAngle.z & 0xFF; + if (sw != 0xFF && !dComIfGs_isSaveSwitch(sw)) { + dComIfGs_onSaveSwitch(sw); + } + } + + int index = mSoldOutFlag; + mSoldOutFlag = -1; + if (field_0xf60 >= 0) { + fopAcM_delete(mItemCtrl.getItemIndex(index)); + mItemCtrl.setItemIndex(index, -1); + onFlag(index); + return; + } else if (index == 0) { + dShopSystem_itemActor[0] = NULL; + dShopSystem_itemNo[0] = NO_ITEM; + dShopSystem_item_count = 2; + } else if (index == 1) { + dShopSystem_itemActor[1] = NULL; + dShopSystem_itemNo[1] = NO_ITEM; + dShopSystem_item_count = 2; + } else if (index == 2) { + dShopSystem_itemActor[2] = NULL; + dShopSystem_itemNo[2] = NO_ITEM; + dShopSystem_item_count = 2; + } else if (index == 6) { + dShopSystem_itemActor[6] = NULL; + dShopSystem_itemNo[6] = NO_ITEM; + dShopSystem_item_count = 6; + } + + if (field_0xf76 != 0) { + onFlag(index); + } + } } -#pragma pop /* 8019A4F4-8019A564 194E34 0070+00 1/1 0/0 0/0 .text setSoldOutItemHide__13dShopSystem_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::setSoldOutItemHide() { - nofralloc -#include "asm/d/shop/d_shop_system/setSoldOutItemHide__13dShopSystem_cFv.s" +void dShopSystem_c::setSoldOutItemHide() { + if (field_0xf60 < 0) { + fopAcM_delete(mItemCtrl.getItemIndex(mSoldOutFlag)); + } else { + daShopItem_c* item = (daShopItem_c*)fopAcM_SearchByID(mItemCtrl.getItemIndex(mSoldOutFlag)); + + if (item != NULL) { + item->hide(); + } + } } -#pragma pop /* 8019A564-8019A5D0 194EA4 006C+00 1/1 0/0 10/10 .text deleteObject__13dShopSystem_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::deleteObject() { - nofralloc -#include "asm/d/shop/d_shop_system/deleteObject__13dShopSystem_cFv.s" +void dShopSystem_c::deleteObject() { + if (mpStick != NULL) { + delete mpStick; + mpStick = NULL; + } + + if (mpDrawCursor != NULL) { + delete mpDrawCursor; + mpDrawCursor = NULL; + } } -#pragma pop /* ############################################################################################## */ /* 80453B60-80453B64 002160 0004+00 1/1 0/0 0/0 .sdata2 @5687 */ @@ -1448,57 +2222,43 @@ asm void dShopSystem_c::searchItemActor() { /* 8019AB00-8019AB1C 195440 001C+00 1/1 0/0 0/0 .text getFlowNodeNum__13dShopSystem_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::getFlowNodeNum() { - nofralloc -#include "asm/d/shop/d_shop_system/getFlowNodeNum__13dShopSystem_cFv.s" +int dShopSystem_c::getFlowNodeNum() { + u16 num = mOrig.mAngle.x; + if (num == 0xFFFF) { + return -1; + } + + return num; } -#pragma pop /* 8019AB1C-8019AB24 19545C 0008+00 0/0 0/0 8/8 .text setSellItemMax__13dShopSystem_cFUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::setSellItemMax(u8 param_0) { - nofralloc -#include "asm/d/shop/d_shop_system/setSellItemMax__13dShopSystem_cFUc.s" +void dShopSystem_c::setSellItemMax(u8 max) { + data_80451058 = max; } -#pragma pop /* 8019AB24-8019AB60 195464 003C+00 0/0 0/0 9/9 .text checkShopOpen__13dShopSystem_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::checkShopOpen() { - nofralloc -#include "asm/d/shop/d_shop_system/checkShopOpen__13dShopSystem_cFv.s" +bool dShopSystem_c::checkShopOpen() { + for (int i = 0; i < 2; i++) { + if (dShopSystem_cameraActor[i] != NULL) { + return true; + } + } + + return dShopSystem_camera_count != 0; } -#pragma pop /* 8019AB60-8019AB84 1954A0 0024+00 3/3 0/0 0/0 .text * checkLeftTrigger__13dShopSystem_cFP9STControl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::checkLeftTrigger(STControl* param_0) { - nofralloc -#include "asm/d/shop/d_shop_system/checkLeftTrigger__13dShopSystem_cFP9STControl.s" +bool dShopSystem_c::checkLeftTrigger(STControl* stick) { + return stick->checkLeftTrigger(); } -#pragma pop /* 8019AB84-8019ABA8 1954C4 0024+00 3/3 0/0 0/0 .text * checkRightTrigger__13dShopSystem_cFP9STControl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dShopSystem_c::checkRightTrigger(STControl* param_0) { - nofralloc -#include "asm/d/shop/d_shop_system/checkRightTrigger__13dShopSystem_cFP9STControl.s" +bool dShopSystem_c::checkRightTrigger(STControl* stick) { + return stick->checkRightTrigger(); } -#pragma pop /* 8019ABA8-8019ABB0 1954E8 0008+00 1/1 0/0 0/0 .text dpdMove__13dShopSystem_cFv */ bool dShopSystem_c::dpdMove() { @@ -1522,14 +2282,14 @@ REGISTER_CTORS(0x8019ABB0, __sinit_d_shop_system_cpp); /* 8019ACE0-8019ACE8 195620 0008+00 1/0 0/0 0/0 .text * beforeStartSeqAction__13dShopSystem_cFP10dMsgFlow_ci */ -bool dShopSystem_c::beforeStartSeqAction(dMsgFlow_c* param_0, int param_1) { - return true; +int dShopSystem_c::beforeStartSeqAction(dMsgFlow_c* param_0, int param_1) { + return 1; } /* 8019ACE8-8019ACF0 195628 0008+00 1/0 0/0 0/0 .text * beforeSelectSeqAction__13dShopSystem_cFP10dMsgFlow_ci */ -bool dShopSystem_c::beforeSelectSeqAction(dMsgFlow_c* param_0, int param_1) { - return true; +int dShopSystem_c::beforeSelectSeqAction(dMsgFlow_c* param_0, int param_1) { + return 1; } /* 8019ACF0-8019ACF8 195630 0008+00 1/0 0/0 0/0 .text getResName2__13dShopSystem_cFi */ diff --git a/src/f_op/f_op_actor.cpp b/src/f_op/f_op_actor.cpp index d7bbf88c786..ea987b19bb6 100644 --- a/src/f_op/f_op_actor.cpp +++ b/src/f_op/f_op_actor.cpp @@ -218,7 +218,7 @@ static u8 g_fopAc_type[4]; #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void fopAc_IsActor(void* param_0) { +asm s32 fopAc_IsActor(void* param_0) { nofralloc #include "asm/f_op/f_op_actor/fopAc_IsActor__FPv.s" }