#ifndef D_METER_D_METER2_INFO_H #define D_METER_D_METER2_INFO_H #include "JSystem/JUtility/JUTTexture.h" #include "d/d_resorce.h" #include "d/menu/d_menu_window.h" #include "d/meter/d_meter2.h" #include "d/msg/d_msg_flow.h" #include "d/pane/d_pane_class.h" #include "dolphin/types.h" #include "f_op/f_op_actor.h" struct JMSMesgEntry_c { /* 0x00 */ u32 mStringOffset; /* 0x04 */ u16 mStringId; /* 0x06 */ u16 field_0x04; /* 0x08 */ u8 field_0x08; /* 0x09 */ u8 field_0x09; /* 0x0A */ u8 field_0x0a; /* 0x0B */ u8 field_0x0b; /* 0x0C */ u8 field_0x0c; /* 0x0D */ u8 field_0x0d; /* 0x0E */ u8 field_0x0e; /* 0x0F */ u8 field_0x0f; /* 0x10 */ u8 field_0x10; /* 0x11 */ u8 field_0x11; /* 0x12 */ u8 field_0x12; /* 0x13 */ u8 field_0x13; }; // Size: 0x14 struct dMenu_LetterData { u16 mSubject; u16 mName; u16 mText; u16 mEventFlag; }; struct dMenu_Letter { static u16 getLetterSubject(int idx) { return letter_data[idx].mSubject; } static u16 getLetterName(int idx) { return letter_data[idx].mName; } static u16 getLetterText(int idx) { return letter_data[idx].mText; } static u16 getLetterEventFlag(int idx) { return letter_data[idx].mEventFlag; } static dMenu_LetterData letter_data[64]; }; class dMw_c; class dMeter2_c; class J2DPicture; class dMeterMap_c; enum dMeter2Info_warpStatus { /* 0x3 */ WARP_DECIDED = 3, }; class dMeter2Info_c { public: class WarpInfo_c { public: /* 0x00 */ char mStageName[8]; /* 0x08 */ cXyz mPosition; /* 0x14 */ s16 mAngle; /* 0x16 */ u8 mRoomNo; /* 0x17 */ u8 unk79; /* 0x18 */ u8 mWarpPlayerNo; }; dMeter2Info_c(); virtual ~dMeter2Info_c(); void init(void); int setFloatingMessage(u16, s16, bool); int setFloatingFlow(u16, s16, bool); int isFloatingMessageVisible(void); int decFloatingMessageTimer(void); void resetFloatingMessage(void); void decMsgKeyWaitTimer(void); void getString(u32, char*, JMSMesgEntry_c*); // define JMSMesgEntry void getStringKana(u32, char*, JMSMesgEntry_c*); void getStringKanji(u32, char*, JMSMesgEntry_c*); f32 getStringLength(J2DTextBox*, char*); f32 getStringLength(JUTFont*, f32, f32, char*); void onDirectUseItem(int); bool isDirectUseItem(int); int setMeterString(s32); void resetWarpStatus(void); void warpInProc(void); void warpOutProc(void); void resetMeterString(void); void setWarpInfo(const char*, const cXyz&, s16, u8, u8, u8); u8 getItemType(u8); int readItemTexture(u8, void*, J2DPicture*, void*, J2DPicture*, void*, J2DPicture*, void*, J2DPicture*, int); void setItemColor(u8, J2DPicture*, J2DPicture*, J2DPicture*, J2DPicture*); s16 get2ndTexture(u8); s16 get3rdTexture(u8); s16 get4thTexture(u8); void set1stColor(u8, J2DPicture*); void set2ndColor(u8, J2DPicture*); void set3rdColor(u8, J2DPicture*); void set4thColor(u8, J2DPicture*); void setHotSpringTimer(u8); void decHotSpringTimer(void); void changeWater(u8); void setMiniGameItem(u8); void resetMiniGameItem(bool); void setMiniGameCount(s8); void setSaveStageName(const char*); void setWindowStatus(u8 status) { unk186 = mWindowStatus; mWindowStatus = status; } u8& getDirectUseItem() { return mDirectUseItem; } dMeterMap_c* getMeterMapClass() { return mMeterMap; } void setMenuWindowClass(dMw_c* p_menu) { mMenuWindowClass = p_menu; } dMw_c* getMenuWindowClass() { return mMenuWindowClass; } void offUseButton(int pButton) { mUseButton &= ~(u16)pButton; } u16 getOilGaugeBackUp() { return mOilGaugeBackUp; } u8 getWarpStatus() { return mWarpStatus; } u8 getWarpRoomNo() { return mWarpInfo.mRoomNo; } u8 getWarpPlayerNo() { return mWarpInfo.mWarpPlayerNo; } cXyz& getWarpPos() { return mWarpInfo.mPosition; } const char* getWarpStageName() { return mWarpInfo.mStageName; } void setNowCount(u8 count) { mNowCount = count; } void setMaxCount(u8 count) { mMaxCount = count; } void allUseButton() { mUseButton = -1; } bool isUseButton(int param_0) { return param_0 & mUseButton; } void setMeterMapClass(dMeterMap_c* p_map) { mMeterMap = p_map; } void resetGameStatus() { mGameStatus = 0; } void setMapStatus(u8 status) { mMapStatus = status; } u8 getMapStatus() { return mMapStatus; } void setPauseStatus(u8 status) { mPauseStatus = status; } void resetPauseStatus() { mPauseStatus = 0; } u8 getPauseStatus() { return mPauseStatus; } bool isGameStatus(int status) { return mGameStatus & status; } void setMapKeyDirection(u16 direction) { mMapKeyDirection = direction; } bool isSub2DStatus(int flag) { return mSub2DStatus & (1 << flag); } void offMenuInForce(int flag) { unk152 &= ~(1 << flag); } bool isMenuInForce(int flag) { return unk152 & (1 << flag); } u16 getMapKeyDirection() { return mMapKeyDirection; } u8 getWindowStatus() { return mWindowStatus; } void setMsgResource(void* res) { mMsgResource = res; } void setStageMsgResource(void* res) { mStageMsgResource = res; } void setMsgUnitResource(void* res) { mMsgUnitResource = res; } void* getMsgResource() { return mMsgResource; } void* getStageMsgResource() { return mStageMsgResource; } void* getMsgUnitResource() { return mMsgUnitResource; } u8 getLightDropGetFlag(int i) { return mLightDropGetFlag[i]; } u32 getMeterStringType() { return mMeterString; } void setMeterClass(dMeter2_c* meter) { mMeterClass = meter; } void onLifeGaugeSE() { mLifeGaugeSE = 1; } void offLifeGaugeSE() { mLifeGaugeSE = 0; } u8 getLifeGaugeSE() { return mLifeGaugeSE; } const char* getSaveStageName() { return mSaveStageName; } void onShopTalkFlag() { mShopTalkFlag = true; } void setLightDropGetFlag(int index, u8 flag) { mLightDropGetFlag[index] = flag; } u8 getRentalBombBag() { return mRentalBombBagIdx; } void setTableMapRegionNo(u8 regionNo) { mTableMapRegionNo = regionNo; } dMeter2_c* getMeterClass() { return mMeterClass; } u8 getMiniGameItemSetFlag() { return mMiniGameItemSetFlag; } s16 getMsgKeyWaitTimer() { return mMsgKeyWaitTimer; } public: /* 0x04 */ u8 unk4[4]; /* 0x08 */ u64 unk8; /* 0x10 */ void* mMsgResource; /* 0x14 */ void* mStageMsgResource; /* 0x18 */ void* mMsgUnitResource; /* 0x1C */ dMeter2_c* mMeterClass; /* 0x20 */ dMeterMap_c* mMeterMap; /* 0x24 */ dMw_c* mMenuWindowClass; /* 0x28 */ CPaneMgr* mMeterItemPanePtr[4]; /* 0x38 */ WarpInfo_c mWarpInfo; /* 0x54 */ f32 unk84; /* 0x58 */ f32 unk88; /* 0x5C */ f32 unk92; /* 0x60 */ f32 unk96; /* 0x64 */ f32 unk100; /* 0x68 */ f32 unk104; /* 0x6C */ f32 unk108; /* 0x70 */ f32 m2DWidth; /* 0x74 */ f32 m2DHeight; /* 0x78 */ f32 m2DPosH; /* 0x7C */ f32 m2DPosV; /* 0x80 */ f32 unk128; /* 0x84 */ u32 mTimeMs; /* 0x88 */ u32 mMsgTimeMs; /* 0x8C */ s32 mMeterString; /* 0x90 */ u32 mTempBits; /* 0x94 */ s16 mMsgKeyWaitTimer; /* 0x96 */ u16 mHorseLifeCount; /* 0x98 */ u16 unk152; /* 0x9A */ u16 mHotSpringTimer[4]; /* 0xA2 */ u16 mSub2DStatus; /* 0xA4 */ u16 mFloatingFlowID; /* 0xA6 */ u16 mFloatingMessageID; /* 0xA8 */ s16 mFloatingMessageTimer; /* 0xAA */ u16 mMapKeyDirection; /* 0xAC */ u16 mBlinkButton; /* 0xAE */ u16 mUseButton; /* 0xB0 */ u16 mGameStatus; /* 0xB2 */ u16 mTouchKeyCheck; /* 0xB4 */ u16 mWindowAccept; /* 0xB6 */ u16 mOilGaugeBackUp; /* 0xB8 */ u8 mDirectUseItem; /* 0xB9 */ u8 mWindowStatus; /* 0xBA */ u8 unk186; /* 0xBB */ u8 mMaxCount; /* 0xBC */ u8 mNowCount; /* 0xBD */ bool mShopTalkFlag; /* 0xBE */ u8 unk190; /* 0xBF */ u8 mMapStatus; /* 0xC0 */ u8 mWarpStatus; /* 0xC1 */ u8 mPauseStatus; /* 0xC2 */ u8 mGameOverType; /* 0xC3 */ u8 mInsectSelectType; /* 0xC4 */ u8 mSaveSelItemIdx[4]; /* 0xC8 */ u8 mSaveMixItemIdx[4]; /* 0xCC */ u8 mSaveBombNum; /* 0xCD */ u8 mSaveArrowNum; /* 0xCE */ u8 mSaveBowItem; /* 0xCF */ u8 mSaveBombItem; /* 0xD0 */ u8 mSaveSelItemIdxMG[4]; /* 0xD4 */ u8 mSaveMixItemIdxMG[4]; /* 0xD8 */ u8 mSaveBombNumMG; /* 0xD9 */ u8 mSaveArrowNumMG; /* 0xDA */ u8 mSaveBowItemMG; /* 0xDB */ u8 mSaveBombItemMG; /* 0xDC */ u8 mRentalBombBagIdx; /* 0xDD */ u8 mMiniGameItemSetFlag; // 1: rented in game, 3: rented not in game /* 0xDE */ u8 mMiniGameCount; /* 0xDF */ u8 mCollectCursorPosX; /* 0xE0 */ u8 mCollectCursorPosY; /* 0xE1 */ u8 mTableMapRegionNo; /* 0xE2 */ u8 mGoldWolfMapType; /* 0xE3 */ u8 mLightDropGetFlag[3]; /* 0xE6 */ u8 mLifeGaugeSE; /* 0xE7 */ u8 unk231; /* 0xE8 */ u8 mItemExplainWindowStatus; /* 0xE9 */ char mSaveStageName[8]; /* 0xF1 */ bool mFloatingMessageWakuVisible; /* 0xF2 */ u8 mMapDrugFlag; /* 0xF3 */ u8 unk243[5]; }; extern dMeter2Info_c g_meter2_info; void dMeter2Info_setSword(u8, bool); void dMeter2Info_setCloth(u8 i_clothId, bool param_1); void dMeter2Info_setShield(u8 i_itemId, bool param_1); void dMeter2Info_set2DVibration(); void dMeter2Info_set2DVibrationM(); static void dMeter2Info_setFloatingMessage(u16 pMessageID, s16 pMessageTimer, bool pWakuVisible); static void dMeter2Info_offUseButton(int pButton); inline void dMeter2Info_Initialize() { g_meter2_info.init(); } inline dMeterMap_c* dMeter2Info_getMeterMapClass() { return g_meter2_info.getMeterMapClass(); } inline dMw_c* dMeter2Info_getMenuWindowClass() { return g_meter2_info.getMenuWindowClass(); } inline void dMeter2Info_setWindowStatus(u8 status) { g_meter2_info.setWindowStatus(status); } inline void dMeter2Info_getString(u32 param_0, char* param_1, JMSMesgEntry_c* param_2) { g_meter2_info.getString(param_0, param_1, param_2); } inline void dMeter2Info_setHotSpringTimer(u8 time) { g_meter2_info.setHotSpringTimer(time); } inline u16 dMeter2Info_getOilGaugeBackUp() { return g_meter2_info.getOilGaugeBackUp(); } inline void dMeter2Info_setSaveStageName(const char* name) { g_meter2_info.setSaveStageName(name); } inline u8 dMeter2Info_getWarpStatus() { return g_meter2_info.getWarpStatus(); } inline u8 dMeter2Info_getWarpRoomNo() { return g_meter2_info.getWarpRoomNo(); } inline u8 dMeter2Info_getWarpPlayerNo() { return g_meter2_info.getWarpPlayerNo(); } inline cXyz& dMeter2Info_getWarpPos() { return g_meter2_info.getWarpPos(); } inline const char* dMeter2Info_getWarpStageName() { return g_meter2_info.getWarpStageName(); } inline void dMeter2Info_setNowCount(u8 count) { g_meter2_info.setNowCount(count); } inline void dMeter2Info_setMaxCount(u8 count) { g_meter2_info.setMaxCount(count); } inline bool dMeter2Info_isDirectUseItem(int param_0) { return g_meter2_info.isDirectUseItem(param_0); } inline bool dMeter2Info_isUseButton(int param_0) { return g_meter2_info.isUseButton(param_0); } inline void dMeter2Info_setMeterMapClass(dMeterMap_c* p_map) { g_meter2_info.setMeterMapClass(p_map); } inline void dMeter2Info_decHotSpringTimer() { g_meter2_info.decHotSpringTimer(); } inline void dMeter2Info_allUseButton() { g_meter2_info.allUseButton(); } inline void i_dMeter2Info_offUseButton(int flag) { g_meter2_info.offUseButton(flag); } inline void dMeter2Info_resetGameStatus() { g_meter2_info.resetGameStatus(); } inline void dMeter2Info_setMapStatus(u8 status) { g_meter2_info.setMapStatus(status); } inline u8 dMeter2Info_getMapStatus() { return g_meter2_info.getMapStatus(); } inline void dMeter2Info_setPauseStatus(u8 status) { g_meter2_info.setPauseStatus(status); } inline void dMeter2Info_resetPauseStatus() { g_meter2_info.resetPauseStatus(); } inline u8 dMeter2Info_getPauseStatus() { return g_meter2_info.getPauseStatus(); } inline bool dMeter2Info_isGameStatus(int status) { return g_meter2_info.isGameStatus(status); } inline void dMeter2Info_setMapKeyDirection(u16 direction) { g_meter2_info.setMapKeyDirection(direction); } inline bool dMeter2Info_isSub2DStatus(int flag) { return g_meter2_info.isSub2DStatus(flag); } inline void dMeter2Info_offMenuInForce(int flag) { g_meter2_info.offMenuInForce(flag); } inline bool dMeter2Info_isMenuInForce(int flag) { return g_meter2_info.isMenuInForce(flag); } inline void dMeter2Info_setMenuWindowClass(dMw_c* p_menu) { g_meter2_info.setMenuWindowClass(p_menu); } inline void dMeter2Info_resetWarpStatus() { g_meter2_info.resetWarpStatus(); } inline u16 dMeter2Info_getMapKeyDirection() { return g_meter2_info.getMapKeyDirection(); } inline u8 dMeter2Info_getWindowStatus() { return g_meter2_info.getWindowStatus(); } inline void dMeter2Info_setMsgResource(void* res) { g_meter2_info.setMsgResource(res); } inline void dMeter2Info_setStageMsgResource(void* res) { g_meter2_info.setStageMsgResource(res); } inline void dMeter2Info_setMsgUnitResource(void* res) { g_meter2_info.setMsgUnitResource(res); } inline void* dMeter2Info_getMsgResource() { return g_meter2_info.getMsgResource(); } inline void* dMeter2Info_getStageMsgResource() { return g_meter2_info.getStageMsgResource(); } inline void* dMeter2Info_getMsgUnitResource() { return g_meter2_info.getMsgUnitResource(); } inline u8 dMeter2Info_getLightDropGetFlag(int i) { return g_meter2_info.getLightDropGetFlag(i); } inline s32 dMeter2Info_getMeterStringType() { return g_meter2_info.getMeterStringType(); } inline void dMeter2Info_setMeterClass(dMeter2_c* meter) { g_meter2_info.setMeterClass(meter); } inline void dMeter2Info_onLifeGaugeSE() { g_meter2_info.onLifeGaugeSE(); } inline void dMeter2Info_offLifeGaugeSE() { g_meter2_info.offLifeGaugeSE(); } inline u8 dMeter2Info_getLifeGaugeSE() { return g_meter2_info.getLifeGaugeSE(); } inline const char* dMeter2Info_getSaveStageName() { return g_meter2_info.getSaveStageName(); } inline void dMeter2Info_onShopTalkFlag() { g_meter2_info.onShopTalkFlag(); } inline void dMeter2Info_setLightDropGetFlag(int index, u8 flag) { g_meter2_info.setLightDropGetFlag(index, flag); } inline u8 dMeter2Info_getRentalBombBag() { return g_meter2_info.getRentalBombBag(); } inline u8 dMeter2Info_getMiniGameItemSetFlag() { return g_meter2_info.getMiniGameItemSetFlag(); } inline void dMeter2Info_setMiniGameItem(u8 item) { g_meter2_info.setMiniGameItem(item); } inline void dMeter2Info_resetMiniGameItem(bool param_0) { g_meter2_info.resetMiniGameItem(param_0); } inline void dMeter2Info_setTableMapRegionNo(u8 regionNo) { g_meter2_info.setTableMapRegionNo(regionNo); } inline void dMeter2Info_changeWater(u8 bottleIdx) { g_meter2_info.changeWater(bottleIdx); } inline void dMeter2Info_warpInProc() { g_meter2_info.warpInProc(); } inline void dMeter2Info_warpOutProc() { g_meter2_info.warpOutProc(); } inline dMeter2_c* dMeter2Info_getMeterClass() { return g_meter2_info.getMeterClass(); } inline s16 dMeter2Info_getMsgKeyWaitTimer() { return g_meter2_info.getMsgKeyWaitTimer(); } inline void dMeter2Info_onDirectUseItem(int param_0) { g_meter2_info.onDirectUseItem(param_0); } inline void dMeter2Info_setFloatingFlow(u16 param_0, s16 param_1, bool param_2) { g_meter2_info.setFloatingFlow(param_0, param_1, param_2); } char* dMeter2Info_getNumberTextureName(int pIndex); void dMeter2Info_recieveLetter(); u8 dMeter2Info_getNewLetterNum(); int dMeter2Info_setNewLetterSender(); #endif /* D_METER_D_METER2_INFO_H */