summaryrefslogtreecommitdiff
path: root/include/d
diff options
context:
space:
mode:
authorCaroline Madsen <69010899+randomsalience@users.noreply.github.com>2024-10-07 18:34:13 -0400
committerGitHub <noreply@github.com>2024-10-07 15:34:13 -0700
commit2fd702c0ac170a789af879b8b92a82d4dcc9080c (patch)
tree743222b58fbcfb5079cd6c82f91b2971ab8ffd77 /include/d
parent1f3948e40ef095bb758914cce6fc652091cf4f4a (diff)
d_menu_fmap and d_menu_fmap2D OK (#2202)
Diffstat (limited to 'include/d')
-rw-r--r--include/d/com/d_com_inf_game.h10
-rw-r--r--include/d/d_stage.h1
-rw-r--r--include/d/map/d_map.h36
-rw-r--r--include/d/map/d_map_path.h41
-rw-r--r--include/d/map/d_map_path_fmap.h173
-rw-r--r--include/d/menu/d_menu_fmap.h275
-rw-r--r--include/d/menu/d_menu_fmap2D.h304
-rw-r--r--include/d/menu/d_menu_fmap_map.h181
-rw-r--r--include/d/menu/d_menu_map_common.h32
-rw-r--r--include/d/menu/d_menu_window.h10
-rw-r--r--include/d/meter/d_meter2_draw.h1
-rw-r--r--include/d/meter/d_meter2_info.h36
-rw-r--r--include/d/meter/d_meter_HIO.h6
-rw-r--r--include/d/msg/d_msg_object.h4
-rw-r--r--include/d/save/d_save.h2
15 files changed, 881 insertions, 231 deletions
diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h
index a03b159b18..44b0d4b927 100644
--- a/include/d/com/d_com_inf_game.h
+++ b/include/d/com/d_com_inf_game.h
@@ -1008,6 +1008,7 @@ u8 dComIfGs_staffroll_next_go_check();
s8 dComIfGs_BossLife_public_Get();
u8 dComIfGs_checkGetInsectNum();
u8 dComIfGs_getSelectMixItemNoArrowIndex(int i_selmixItemIdx);
+BOOL dComIfGs_isStageTbox(int i_stageNo, int i_no);
inline void dComIfGs_init() {
g_dComIfG_gameInfo.info.init();
@@ -1659,6 +1660,14 @@ inline void dComIfGs_setPlayerFieldLastStayInfo(const char* i_stage, cXyz& i_pos
i_point, i_region);
}
+inline char* dComIfGs_getPlayerFieldLastStayName() {
+ return g_dComIfG_gameInfo.info.getPlayer().getPlayerFieldLastStayInfo().getName();
+}
+
+inline s16 dComIfGs_getPlayerFieldLastStayAngleY() {
+ return g_dComIfG_gameInfo.info.getPlayer().getPlayerFieldLastStayInfo().getAngleY();
+}
+
inline void dComIfGs_setPlayerName(const char* i_name) {
g_dComIfG_gameInfo.info.getPlayer().getPlayerInfo().setPlayerName(i_name);
}
@@ -1947,6 +1956,7 @@ u8 dComIfGp_TargetWarpPt_get();
void dComIfGp_TargetWarpPt_set(u8);
BOOL dComIfGp_TransportWarp_check();
u8 dComIfGp_SelectWarpPt_get();
+void dComIfGp_SelectWarpPt_set(u8);
void dComIfGp_setNextStage(char const* stage, s16 point, s8 roomNo, s8 layer, f32 lastSpeed,
u32 lastMode, int, s8 wipe, s16 lastAngle, int, int);
void dComIfGp_setNextStage(char const* stage, s16 point, s8 roomNo, s8 layer);
diff --git a/include/d/d_stage.h b/include/d/d_stage.h
index d9c0c7e5d0..bbefb43a9b 100644
--- a/include/d/d_stage.h
+++ b/include/d/d_stage.h
@@ -1012,6 +1012,7 @@ class cBgS_GndChk;
int dStage_RoomCheck(cBgS_GndChk* gndChk);
void dStage_dt_c_roomReLoader(void* i_data, dStage_dt_c* stageDt, int param_2);
void dStage_dt_c_roomLoader(void* i_data, dStage_dt_c* stageDt, int param_2);
+void dStage_dt_c_fieldMapLoader(void* i_data, dStage_dt_c* stageDt);
dStage_KeepDoorInfo* dStage_GetKeepDoorInfo();
dStage_KeepDoorInfo* dStage_GetRoomKeepDoorInfo();
diff --git a/include/d/map/d_map.h b/include/d/map/d_map.h
index 27c57b2f85..818ab23383 100644
--- a/include/d/map/d_map.h
+++ b/include/d/map/d_map.h
@@ -3,6 +3,40 @@
#include "d/map/d_map_path_dmap.h"
+struct dMap_prm_res_s {
+ /* 0x000 */ dMpath_RGB5A3_palDt_s palette_data[51];
+ /* 0x198 */ u8 field_0x198;
+ /* 0x199 */ u8 field_0x199;
+ /* 0x19A */ u8 field_0x19a;
+ /* 0x19B */ u8 field_0x19b;
+ /* 0x19C */ u8 field_0x19c;
+ /* 0x19D */ u8 field_0x19d;
+ /* 0x19E */ u8 field_0x19e;
+ /* 0x19F */ u8 field_0x19f;
+ /* 0x1A0 */ u8 field_0x1a0;
+ /* 0x1A1 */ u8 field_0x1a1;
+ /* 0x1A2 */ u8 field_0x1a2;
+ /* 0x1A3 */ u8 field_0x1a3;
+ /* 0x1A4 */ u8 field_0x1a4;
+ /* 0x1A5 */ u8 field_0x1a5;
+ /* 0x1A6 */ u8 field_0x1a6;
+ /* 0x1A7 */ u8 field_0x1a7;
+ /* 0x1A8 */ u8 field_0x1a8;
+ /* 0x1A9 */ u8 field_0x1a9;
+ /* 0x1AA */ s16 field_0x1aa;
+ /* 0x1AC */ s16 field_0x1ac;
+ /* 0x1AE */ s16 field_0x1ae;
+ /* 0x1B0 */ s16 field_0x1b0;
+ /* 0x1B2 */ s16 field_0x1b2;
+ /* 0x1B4 */ s16 field_0x1b4;
+ /* 0x1B6 */ s16 field_0x1b6;
+ /* 0x1B8 */ f32 cursor_size;
+};
+
+struct dMap_HIO_prm_res_dst_s {
+ static dMap_prm_res_s* m_res;
+};
+
class renderingAmap_c : public renderingPlusDoorAndCursor_c {
public:
/* 800288C4 */ int getDispType() const;
@@ -48,8 +82,6 @@ private:
/* 0x3C */ s32 field_0x3c;
}; // Size: 0x40
-struct dMap_prm_res_s;
-
class dMap_c : public renderingAmap_c {
public:
/* 8002974C */ void copyPalette();
diff --git a/include/d/map/d_map_path.h b/include/d/map/d_map_path.h
index 87e8631562..1290e21770 100644
--- a/include/d/map/d_map_path.h
+++ b/include/d/map/d_map_path.h
@@ -20,7 +20,7 @@ public:
}; // Size: 0x8
struct group_class {
- /* 0x00 */ u8 field_0x0;
+ /* 0x00 */ u8 mSwbit;
/* 0x01 */ u8 field_0x1;
/* 0x02 */ u8 mLineNum;
/* 0x03 */ u8 field_0x3;
@@ -52,7 +52,7 @@ public:
/* 8002AD3C */ virtual ~dDrawPath_c() {}
/* 8002ABF0 */ virtual bool isDrawType(int) { return true; }
virtual const GXColor* getColor(int) = 0;
- /* 8002AD84 */ virtual GXColor* getLineColor(int param_0, int) { return (GXColor*)getColor(param_0); }
+ /* 8002AD84 */ virtual const GXColor* getLineColor(int param_0, int) { return (GXColor*)getColor(param_0); }
virtual int getLineWidth(int) = 0;
virtual bool isSwitch(dDrawPath_c::group_class const*) = 0;
virtual bool isRenderingFloor(int) = 0;
@@ -91,11 +91,11 @@ public:
field_0x4 = NULL;
field_0x8 = 0.0f;
field_0xc = 0.0f;
- field_0x10 = 0.0f;
- field_0x14 = 0.0f;
+ mPosX = 0.0f;
+ mPosZ = 0.0f;
mCmPerTexel = 0.0f;
- field_0x1c = 0;
- field_0x1e = 0;
+ mTexWidth = 0;
+ mTexHeight = 0;
field_0x20 = 0;
field_0x22 = 0;
}
@@ -108,25 +108,25 @@ public:
/* 8002ABF8 */ virtual ~dRenderingFDAmap_c() {}
/* 8003D188 */ virtual void preRenderingMap();
/* 8003D320 */ virtual void postRenderingMap();
- virtual GXColor* getBackColor() const = 0;
+ virtual const GXColor* getBackColor() const = 0;
/* 8003D68C */ virtual const GXColor* getDecoLineColor(int, int);
/* 8003D6B8 */ virtual s32 getDecorationLineWidth(int);
bool isDrawAreaCheck(const Vec& param_0) {
- return (param_0.x >= field_0x10 - field_0x8 * 2.0f &&
- param_0.x <= field_0x10 + field_0x8 * 2.0f) &&
- (param_0.z >= field_0x14 - field_0xc * 2.0f &&
- param_0.z <= field_0x14 + field_0xc * 2.0f);
+ return (param_0.x >= mPosX - field_0x8 * 2.0f &&
+ param_0.x <= mPosX + field_0x8 * 2.0f) &&
+ (param_0.z >= mPosZ - field_0xc * 2.0f &&
+ param_0.z <= mPosZ + field_0xc * 2.0f);
}
/* 0x04 */ u8* field_0x4;
/* 0x08 */ f32 field_0x8;
/* 0x0C */ f32 field_0xc;
- /* 0x10 */ f32 field_0x10;
- /* 0x14 */ f32 field_0x14;
+ /* 0x10 */ f32 mPosX;
+ /* 0x14 */ f32 mPosZ;
/* 0x18 */ f32 mCmPerTexel;
- /* 0x1C */ u16 field_0x1c;
- /* 0x1E */ u16 field_0x1e;
+ /* 0x1C */ u16 mTexWidth;
+ /* 0x1E */ u16 mTexHeight;
/* 0x20 */ u16 field_0x20;
/* 0x22 */ u16 field_0x22;
}; // Size: 0x24
@@ -154,4 +154,15 @@ struct dMpath_n {
STATIC_ASSERT(sizeof(dMpath_n::dTexObjAggregate_c) == 28);
+struct dMpath_RGB5A3_s {
+ u16 color;
+};
+
+struct dMpath_RGB5A3_palDt_s {
+ /* 0x0 */ dMpath_RGB5A3_s field_0x0;
+ /* 0x2 */ dMpath_RGB5A3_s field_0x2;
+ /* 0x4 */ dMpath_RGB5A3_s field_0x4;
+ /* 0x6 */ dMpath_RGB5A3_s field_0x6;
+};
+
#endif /* D_MAP_D_MAP_PATH_H */
diff --git a/include/d/map/d_map_path_fmap.h b/include/d/map/d_map_path_fmap.h
index 4aa8f432bf..0dd9681ab5 100644
--- a/include/d/map/d_map_path_fmap.h
+++ b/include/d/map/d_map_path_fmap.h
@@ -12,7 +12,11 @@ public:
mpNext = NULL;
}
- /* 8003EB70 */ ~fmpTresTypeGroupData_c();
+ /* 8003EB70 */ ~fmpTresTypeGroupData_c() {
+ if (mpNext != NULL) {
+ delete mpNext;
+ }
+ }
void setTypeGroupNo(u8 i_no) { mTypeGroupNo = i_no; }
void setNextData(fmpTresTypeGroupData_c* i_next) { mpNext = i_next; }
@@ -31,6 +35,8 @@ public:
/* 8003EB10 */ ~fmpTresTypeGroupDataList_c();
/* 8003EC90 */ fmpTresTypeGroupDataList_c();
+ fmpTresTypeGroupData_c* getTypeGroupDataHead() { return mpTypeGroupDataHead; }
+
/* 0x0 */ fmpTresTypeGroupData_c* mpTypeGroupDataHead;
/* 0x4 */ fmpTresTypeGroupData_c* mpNextData;
};
@@ -40,21 +46,34 @@ public:
void addTypeGroupData(u8 i_typeGroupNo, const dTres_c::data_s* i_data) {
mpTypeGroupData[i_typeGroupNo].addTypeGroupData(i_typeGroupNo, i_data);
}
+ fmpTresTypeGroupDataList_c* getTypeGroupDataList(int i_typeGroupNo) {
+ return &mpTypeGroupData[i_typeGroupNo];
+ }
/* 0x0 */ fmpTresTypeGroupDataList_c mpTypeGroupData[17];
};
class dMenu_Fmap_data_c {
public:
+ dMenu_Fmap_data_c() {
+ mp_tresure = NULL;
+ m_fileList2 = NULL;
+ mp_mapPath = NULL;
+ mp_dzsData = NULL;
+ }
+
dTres_c::list_class* getTresure() { return mp_tresure; }
f32 getFilelist2MinX() { return m_fileList2->mLeftRmX; }
f32 getFilelist2MinZ() { return m_fileList2->mInnerRmZ; }
f32 getFilelist2MaxX() { return m_fileList2->mRightRmX; }
f32 getFilelist2MaxZ() { return m_fileList2->mFrontRmZ; }
+ dDrawPath_c::room_class* getMapPath() { return mp_mapPath; }
+ void* getDzsData() { return mp_dzsData; }
void setFileList2(dStage_FileList2_dt_c* i_fileList) { m_fileList2 = i_fileList; }
void setTresure(dTres_c::list_class* i_list) { mp_tresure = i_list; }
void setMapPath(dDrawPath_c::room_class* i_path) { mp_mapPath = i_path; }
+ void setDzsData(void* i_dzsData) { mp_dzsData = i_dzsData; }
/* 0x0 */ dTres_c::list_class* mp_tresure;
/* 0x4 */ dStage_FileList2_dt_c* m_fileList2;
@@ -69,12 +88,30 @@ public:
/* 8003D868 */ void buildTresTypeGroup(int, int, int);
/* 8003D92C */ void buildFmapRoomData(int, int, f32, f32, f32, f32);
+ dMenu_Fmap_room_data_c(u8 i_roomNo, dMenu_Fmap_stage_data_c* i_stageData,
+ dMenu_Fmap_data_c* i_data) {
+ mp_fmapData = i_data;
+ mp_fmpTresTypeGroupDataListAll = NULL;
+ mp_nextData = NULL;
+ mp_parentStage = i_stageData;
+ m_roomNo = i_roomNo;
+ }
+
+ ~dMenu_Fmap_room_data_c() {
+ if (mp_fmpTresTypeGroupDataListAll != NULL) {
+ delete mp_fmpTresTypeGroupDataListAll;
+ }
+ }
+
+ fmpTresTypeGroupDataListAll_c* getTypeGroupDataListAll() { return mp_fmpTresTypeGroupDataListAll; }
f32 getFileList2MinX() { return mp_fmapData->getFilelist2MinX(); }
f32 getFileList2MinZ() { return mp_fmapData->getFilelist2MinZ(); }
f32 getFileList2MaxX() { return mp_fmapData->getFilelist2MaxX(); }
f32 getFileList2MaxZ() { return mp_fmapData->getFilelist2MaxZ(); }
dMenu_Fmap_room_data_c* getNextData() { return mp_nextData; }
+ dMenu_Fmap_data_c* getFmapData() { return mp_fmapData; }
int getRoomNo() { return m_roomNo; }
+ void setNextData(dMenu_Fmap_room_data_c* i_nextData) { mp_nextData = i_nextData; }
/* 0x00 */ dMenu_Fmap_data_c* mp_fmapData;
/* 0x04 */ fmpTresTypeGroupDataListAll_c* mp_fmpTresTypeGroupDataListAll;
@@ -85,11 +122,14 @@ public:
class dMenu_Fmap_stage_arc_data_c {
public:
+ u8 getSaveTableNo() { return mSaveTableNo; }
u8 getVisitedRoomSaveTableNo() { return mVisitedRoomSaveTableNo; }
- /* 0x0 */ u8 field_0x0;
+ /* 0x0 */ u8 mSize;
/* 0x1 */ u8 mSaveTableNo;
/* 0x2 */ u8 mVisitedRoomSaveTableNo;
+ /* 0x3 */ u8 field_0x3;
+ /* 0x4 */ u8 mRoomNos[0];
};
class dMenu_Fmap_stage_data_c {
@@ -97,8 +137,47 @@ public:
/* 8003D95C */ bool isArrival();
/* 8003D9D8 */ int buildFmapStageData(int, f32, f32);
+ dMenu_Fmap_stage_data_c() {
+ mpStageArc = NULL;
+ mp_roomTop = NULL;
+ mpNextData = NULL;
+ m_stageMinX = 0.0f;
+ m_stageMinZ = 0.0f;
+ m_stageMaxX = 0.0f;
+ m_stageMaxZ = 0.0f;
+ m_offsetX = 0.0f;
+ m_offsetZ = 0.0f;
+ for (int i = 0; i < 8; i++) {
+ name[i] = '\0';
+ }
+ }
+
+ f32 getStageCenterX() { return (m_stageMaxX + m_stageMinX) * 0.5f; }
+ f32 getStageCenterZ() { return (m_stageMaxZ + m_stageMinZ) * 0.5f; }
+ f32 getStageCenterX_CoordRegion() { return m_offsetX + getStageCenterX(); }
+ f32 getStageCenterZ_CoordRegion() { return m_offsetZ + getStageCenterZ(); }
+ char* getStageName() { return name; }
dMenu_Fmap_stage_arc_data_c* getStageArc() { return mpStageArc; }
dMenu_Fmap_stage_data_c* getNextData() { return mpNextData; }
+ dMenu_Fmap_room_data_c* getFmapRoomDataTop() { return mp_roomTop; }
+ f32 getOffsetX() { return m_offsetX; }
+ f32 getOffsetZ() { return m_offsetZ; }
+ f32 getStageMinX() { return m_stageMinX; }
+ f32 getStageMinZ() { return m_stageMinZ; }
+ f32 getStageMaxX() { return m_stageMaxX; }
+ f32 getStageMaxZ() { return m_stageMaxZ; }
+ void setStageArc(dMenu_Fmap_stage_arc_data_c* i_stageArc) { mpStageArc = i_stageArc; }
+ void setFmapRoomDataTop(dMenu_Fmap_room_data_c* i_roomTop) { mp_roomTop = i_roomTop; }
+ void setNextData(dMenu_Fmap_stage_data_c* i_nextData) { mpNextData = i_nextData; }
+ void setStageCntNo(int i_no) { m_stageCntNo = i_no; }
+ void setOffsetX(f32 i_offsetX) { m_offsetX = i_offsetX; }
+ void setOffsetZ(f32 i_offsetZ) { m_offsetZ = i_offsetZ; }
+
+ void setName(char* i_name) {
+ for (int i = 0; i < 8; i++) {
+ name[i] = i_name[i];
+ }
+ }
/* 0x00 */ char name[8];
/* 0x08 */ dMenu_Fmap_stage_arc_data_c* mpStageArc;
@@ -116,8 +195,41 @@ public:
class dMenu_Fmap_region_data_c {
public:
/* 8003DB48 */ dMenu_Fmap_stage_data_c* getMenuFmapStageData(int);
- /* 8003DB70 */ void getPointStagePathInnerNo(f32, f32, int, int*, int*);
- /* 8003DEE0 */ void buildFmapRegionData(int);
+ /* 8003DB70 */ int getPointStagePathInnerNo(f32, f32, int, int*, int*);
+ /* 8003DEE0 */ int buildFmapRegionData(int);
+
+ dMenu_Fmap_region_data_c(int i_no, dMenu_Fmap_stage_data_c* i_stageData,
+ f32 i_offsetX, f32 i_offsetZ) {
+ mpMenuFmapStageDataTop = i_stageData;
+ mpNextData = NULL;
+ mRegionOffsetX = i_offsetX;
+ mRegionOffsetZ = i_offsetZ;
+ mRegionMinX = 0.0f;
+ mRegionMaxX = 0.0f;
+ mRegionMinZ = 0.0f;
+ mRegionMaxZ = 0.0f;
+ mRegionNo = i_no;
+ buildFmapRegionData(0);
+ }
+
+ f32 getStageCenterX_CoordWorld(int i_stageNo) {
+ return mRegionOffsetX + getMenuFmapStageData(i_stageNo)->getStageCenterX_CoordRegion();
+ }
+
+ f32 getStageCenterZ_CoordWorld(int i_stageNo) {
+ return mRegionOffsetZ + getMenuFmapStageData(i_stageNo)->getStageCenterZ_CoordRegion();
+ }
+
+ dMenu_Fmap_stage_data_c* getMenuFmapStageDataTop() { return mpMenuFmapStageDataTop; }
+ dMenu_Fmap_region_data_c* getNextData() { return mpNextData; }
+ f32 getRegionOffsetX() { return mRegionOffsetX; }
+ f32 getRegionOffsetZ() { return mRegionOffsetZ; }
+ f32 getRegionMinX() { return mRegionMinX; }
+ f32 getRegionMaxX() { return mRegionMaxX; }
+ f32 getRegionMinZ() { return mRegionMinZ; }
+ f32 getRegionMaxZ() { return mRegionMaxZ; }
+ int getRegionNo() { return mRegionNo; }
+ void setNextData(dMenu_Fmap_region_data_c* i_data) { mpNextData = i_data; }
/* 0x00 */ dMenu_Fmap_stage_data_c* mpMenuFmapStageDataTop;
/* 0x04 */ dMenu_Fmap_region_data_c* mpNextData;
@@ -130,9 +242,17 @@ public:
/* 0x20 */ int mRegionNo;
};
-struct dMenu_Fmap_world_data_c {
+class dMenu_Fmap_world_data_c {
+public:
/* 8003E028 */ void create(dMenu_Fmap_region_data_c*);
- /* 8003E04C */ void buildFmapWorldData();
+ /* 8003E04C */ int buildFmapWorldData();
+
+ dMenu_Fmap_world_data_c(dMenu_Fmap_region_data_c* i_regionData) { create(i_regionData); }
+ dMenu_Fmap_region_data_c* getMenuFmapRegionTop() { return mp_fmapRegionData; }
+ f32 getWorldMinX() { return m_worldMinX; }
+ f32 getWorldMinZ() { return m_worldMinZ; }
+ f32 getWorldMaxX() { return m_worldMaxX; }
+ f32 getWorldMaxZ() { return m_worldMaxZ; }
/* 0x00 */ dMenu_Fmap_region_data_c* mp_fmapRegionData;
/* 0x04 */ f32 m_worldMinX;
@@ -141,21 +261,38 @@ struct dMenu_Fmap_world_data_c {
/* 0x10 */ f32 m_worldMaxZ;
};
-struct dMenuFmapIconPointer_c {
- /* 8003E114 */ void init(dMenu_Fmap_region_data_c*, dMenu_Fmap_stage_data_c*, u8, int, int);
- /* 8003E1C0 */ void getFirstData();
- /* 8003E2BC */ void getData();
+class dMenuFmapIconPointer_c {
+public:
+ /* 8003E114 */ bool init(dMenu_Fmap_region_data_c*, dMenu_Fmap_stage_data_c*, u8, int, int);
+ /* 8003E1C0 */ bool getFirstData();
+ /* 8003E2BC */ bool getData();
/* 8003E350 */ void getFirstRoomData();
- /* 8003E37C */ void getNextRoomData();
- /* 8003E3A4 */ void getNextStageData();
- /* 8003E3D8 */ void getNextData();
- /* 8003E490 */ void nextData();
- /* 8003E510 */ void getValidData();
+ /* 8003E37C */ bool getNextRoomData();
+ /* 8003E3A4 */ bool getNextStageData();
+ /* 8003E3D8 */ bool getNextData();
+ /* 8003E490 */ bool nextData();
+ /* 8003E510 */ bool getValidData();
+
+ /* 0x00 */ int mStageNo;
+ /* 0x04 */ int mStayStageNo;
+ /* 0x08 */ int mStayRoomNo;
+ /* 0x0C */ int mSaveTbl;
+ /* 0x10 */ dMenu_Fmap_region_data_c* mpRegionData;
+ /* 0x14 */ dMenu_Fmap_stage_data_c* mpStageData;
+ /* 0x18 */ dMenu_Fmap_room_data_c* mpRoomData;
+ /* 0x1C */ fmpTresTypeGroupDataListAll_c* mpFmpTresTypeGroupDataListAll;
+ /* 0x20 */ fmpTresTypeGroupDataList_c* mpFmpTresTypeGroupDataList;
+ /* 0x24 */ fmpTresTypeGroupData_c* mpFmpTresTypeGroupData;
+ /* 0x28 */ dTres_c::typeGroupData_c* mpTresTypeGroupData;
+ /* 0x2C */ const dTres_c::data_s* mpTresData;
+ /* 0x30 */ u8 mTypeGroupNo;
+ /* 0x31 */ u8 mType;
};
-struct dMenuFmapIconDisp_c {
- /* 8003E578 */ void getPosition(int*, int*, f32*, f32*, dTres_c::data_s const**);
- /* 8003E6E8 */ void isDrawDisp();
+class dMenuFmapIconDisp_c : public dMenuFmapIconPointer_c {
+public:
+ /* 8003E578 */ bool getPosition(int*, int*, f32*, f32*, dTres_c::data_s const**);
+ /* 8003E6E8 */ virtual bool isDrawDisp();
};
#endif /* D_MAP_D_MAP_PATH_FMAP_H */
diff --git a/include/d/menu/d_menu_fmap.h b/include/d/menu/d_menu_fmap.h
index 6010022c69..065b515850 100644
--- a/include/d/menu/d_menu_fmap.h
+++ b/include/d/menu/d_menu_fmap.h
@@ -2,14 +2,17 @@
#define D_MENU_D_MENU_FMAP_H
#include "SSystem/SComponent/c_xyz.h"
+#include "d/menu/d_menu_map_common.h"
#include "d/msg/d_msg_flow.h"
struct CSTControl;
class J2DAnmTextureSRTKey;
class JKRArchive;
+class JKRAramArchive;
class JKRExpHeap;
class JKRHeap;
class STControl;
+class ResTIMG;
class dMenu_Fmap_stage_data_c;
class dMenu_Fmap_world_data_c;
class dMenu_Fmap_region_data_c;
@@ -17,10 +20,91 @@ class dMenu_Fmap2DBack_c;
class dMenu_Fmap2DTop_c;
class dMenu_FmapMap_c;
class mDoDvdThd_mountArchive_c;
-struct RoomData_c;
+
+// Unknown name
+class dMenu_Fmap_field_data_c {
+public:
+ /* 0x00 */ u32 field_0x0;
+ /* 0x04 */ u32 mStageDataOffset;
+ /* 0x08 */ u32 mRegionDataOffset;
+ /* 0x0C */ u32 mVirtualStageOffset;
+ /* 0x10 */ u32 mRoomDataOffset;
+};
+
+// Unknown name
+class dMenu_Fmap_field_region_data_c {
+public:
+ struct data {
+ /* 0x00 */ u8 mTextureReadNum;
+ /* 0x01 */ u8 field_0x1;
+ /* 0x02 */ u16 mTitleName;
+ /* 0x04 */ f32 mOriginX;
+ /* 0x08 */ f32 mOriginZ;
+ /* 0x0C */ f32 field_0xc;
+ /* 0x10 */ f32 field_0x10;
+ /* 0x14 */ f32 field_0x14;
+ /* 0x18 */ f32 field_0x18;
+ /* 0x1C */ f32 field_0x1c;
+ /* 0x20 */ f32 field_0x20;
+ /* 0x24 */ f32 field_0x24;
+ };
+
+ /* 0x0 */ u8 mCount;
+ /* 0x4 */ data mData[0];
+};
+
+// Unknown name
+class dMenu_Fmap_virtual_stage_data_c {
+public:
+ struct data {
+ /* 0x0 */ char mStageName[8];
+ /* 0x8 */ char mVirtualStageName[8];
+ };
+
+ /* 0x0 */ u8 mCount;
+ /* 0x1 */ u8 pad[3];
+ /* 0x4 */ data mData[0];
+};
+
+// Unknown name
+class dMenu_Fmap_field_room_data_c {
+public:
+ struct data {
+ /* 0x0 */ char mStageName[8];
+ /* 0x8 */ u16 mAreaName;
+ /* 0xA */ u8 mCount;
+ /* 0xB */ u8 mRoomNos[0];
+ };
+
+ /* 0x0 */ u8 mCount;
+ /* 0x1 */ u8 pad[3];
+ /* 0x4 */ data mData[0];
+};
+
+// Unknown name
+class dMenu_Fmap_portal_data_c {
+public:
+ struct data {
+ /* 0x00 */ u8 mSelectWarpPt;
+ /* 0x01 */ u8 mRegionNo;
+ /* 0x02 */ const char mStageName[8];
+ /* 0x0A */ u8 mRoomNo;
+ /* 0x0B */ u8 mWarpPlayerNo;
+ /* 0x0C */ u16 mMessageID;
+ /* 0x0E */ u8 mStageNo;
+ /* 0x0F */ u8 mSwitchNo;
+ /* 0x10 */ cXyz mPosition;
+ };
+
+ /* 0x0 */ u8 field_0x0[8];
+ /* 0x8 */ u8 mCount;
+ /* 0xC */ data mData[0];
+};
class dMenu_Fmap_c {
public:
+ typedef void (dMenu_Fmap_c::*process)();
+
/* 801C66E4 */ dMenu_Fmap_c(JKRExpHeap*, STControl*, CSTControl*, u8, u8, u8, f32, f32, u8);
/* 801C6D64 */ void _create();
/* 801C74A4 */ void _delete();
@@ -95,26 +179,26 @@ public:
/* 801CB230 */ u8 getStageCursor();
/* 801CB260 */ f32 getStageTransX();
/* 801CB290 */ f32 getStageTransZ();
- /* 801CB2C0 */ void isRoomCheck(int, int);
- /* 801CB570 */ void checkStRoomData();
+ /* 801CB2C0 */ bool isRoomCheck(int, int);
+ /* 801CB570 */ u16 checkStRoomData();
/* 801CB664 */ void talkButton();
/* 801CB6D0 */ void setProcess(u8);
/* 801CB6E0 */ void setFlash(u8, bool);
- /* 801CB770 */ void readWorldData(u8);
- /* 801CB938 */ void readAreaData(u8, bool);
- /* 801CBF04 */ void readRoomData(char const*, dMenu_Fmap_stage_data_c*, void*, int, u8);
- /* 801CC094 */ void readFieldMapData(void**, char const*, bool, bool);
+ /* 801CB770 */ bool readWorldData(u8);
+ /* 801CB938 */ bool readAreaData(u8, bool);
+ /* 801CBF04 */ bool readRoomData(char const*, dMenu_Fmap_stage_data_c*, void*, int, u8);
+ /* 801CC094 */ bool readFieldMapData(void**, char const*, bool, bool);
/* 801CC2B0 */ void decodeFieldMapData();
/* 801CC4EC */ void decodePortalData();
- /* 801CC51C */ void readRoomDzsData(void**, u32, char const*);
- /* 801CC61C */ void removeAreaData();
- /* 801CC7A8 */ void removeRoomData(dMenu_Fmap_stage_data_c*);
+ /* 801CC51C */ bool readRoomDzsData(void**, u32, char const*);
+ /* 801CC61C */ bool removeAreaData();
+ /* 801CC7A8 */ bool removeRoomData(dMenu_Fmap_stage_data_c*);
/* 801CC85C */ void setTitleName(u32);
/* 801CC880 */ void setAreaName(u32);
/* 801CC8AC */ void setAreaNameZero();
/* 801CC8DC */ void portalWarpMapMove(STControl*);
/* 801CCA70 */ void onRoomDataBit(int);
- /* 801CCA98 */ void isRoomDataBit(int);
+ /* 801CCA98 */ BOOL isRoomDataBit(int);
/* 801CCAC4 */ void resetRoomDataBit();
/* 801CCB08 */ void drawIcon(f32, bool);
/* 801CD10C */ void drawIcon(u8, int);
@@ -124,97 +208,144 @@ public:
/* 801CCE48 */ void drawGoldWolfIcon();
/* 801CCE70 */ void drawCoachIcon();
/* 801CCE98 */ void drawPlayEnterIcon();
- /* 801CCFB0 */ void checkDrawPortalIcon(int, int);
- /* 801CD000 */ void searchIcon(u8, int, f32*, f32*);
+ /* 801CCFB0 */ bool checkDrawPortalIcon(int, int);
+ /* 801CD000 */ bool searchIcon(u8, int, f32*, f32*);
/* 801CD210 */ void drawEnterIcon();
/* 801CD254 */ void drawPortalIcon();
- /* 801CD2FC */ void getRegionStageNum(int);
- /* 801CD350 */ void getNowFmapRegionData();
- /* 801CD368 */ void getNowFmapStageData();
- /* 801CD380 */ void searchPortalStageID(char*);
+ /* 801CD2FC */ u8 getRegionStageNum(int);
+ /* 801CD350 */ dMenu_Fmap_region_data_c* getNowFmapRegionData();
+ /* 801CD368 */ dMenu_Fmap_stage_data_c* getNowFmapStageData();
+ /* 801CD380 */ u8 searchPortalStageID(char*);
/* 801CD3F0 */ void drawDebugStage();
/* 801CD460 */ void arrowPosInit();
/* 801CD5CC */ void tableArrowPosInit(bool);
/* 801CD770 */ void yamibossArrowPosInit();
/* 801CD814 */ void howlArrowPosInit();
- /* 801CD8B4 */ void getHowlRegionID();
- /* 801CD92C */ void isLightVesselGet();
- /* 801CD95C */ void getPlayerPos2D();
+ /* 801CD8B4 */ u8 getHowlRegionID();
+ /* 801CD92C */ bool isLightVesselGet();
+ /* 801CD95C */ cXyz* getPlayerPos2D();
/* 801C6AC8 */ virtual ~dMenu_Fmap_c();
- static u8 MyClass[4];
+ enum process_e {
+ /* 0x00 */ PROC_ALL_MAP,
+ /* 0x01 */ PROC_PORTAL_DEMO2,
+ /* 0x02 */ PROC_PORTAL_DEMO3,
+ /* 0x03 */ PROC_TABLE_DEMO1,
+ /* 0x04 */ PROC_ZOOM_ALL_TO_REGION,
+ /* 0x05 */ PROC_ZOOM_REGION_TO_ALL,
+ /* 0x06 */ PROC_REGION_MAP,
+ /* 0x07 */ PROC_TO_PORTAL_WARP_MAP,
+ /* 0x08 */ PROC_PORTAL_WARP_MAP,
+ /* 0x09 */ PROC_PORTAL_WARP_SELECT,
+ /* 0x0A */ PROC_PORTAL_WARP_FORBID,
+ /* 0x0B */ PROC_ZOOM_REGION_TO_SPOT,
+ /* 0x0C */ PROC_ZOOM_SPOT_TO_REGION,
+ /* 0x0D */ PROC_SPOT_MAP,
+ /* 0x0E */ PROC_PORTAL_DEMO1,
+ /* 0x0F */ PROC_PORTAL_DEMO4,
+ /* 0x10 */ PROC_PORTAL_DEMO5,
+ /* 0x11 */ PROC_PORTAL_DEMO6,
+ /* 0x12 */ PROC_YAMIBOSS_DEMO1,
+ /* 0x13 */ PROC_YAMIBOSS_DEMO2,
+ /* 0x14 */ PROC_YAMIBOSS_DEMO3,
+ /* 0x15 */ PROC_YAMIBOSS_DEMO4,
+ /* 0x16 */ PROC_YAMIBOSS_DEMO5,
+ /* 0x17 */ PROC_LIGHT_DEMO1,
+ /* 0x18 */ PROC_LIGHT_DEMO2,
+ /* 0x19 */ PROC_TABLE_DEMO2,
+ /* 0x1A */ PROC_TABLE_DEMO3,
+ /* 0x1B */ PROC_HOWL_DEMO1,
+ /* 0x1C */ PROC_HOWL_DEMO2,
+ /* 0x1D */ PROC_HOWL_DEMO3,
+ };
+
+ static dMenu_Fmap_c* MyClass;
private:
- /* 0x004 */ JKRHeap* mpHeap;
+ /* 0x004 */ JKRExpHeap* mpHeap;
/* 0x008 */ JKRExpHeap* mpTalkHeap;
/* 0x00C */ STControl* mpStick;
/* 0x010 */ CSTControl* mpCStick;
/* 0x014 */ dMenu_Fmap2DBack_c* mpDraw2DBack;
/* 0x018 */ dMenu_Fmap2DTop_c* mpDraw2DTop;
- /* 0x01C */ mDoDvdThd_mountArchive_c* field_0x1c;
+ /* 0x01C */ mDoDvdThd_mountArchive_c* mpMountArchive;
/* 0x020 */ dMenu_Fmap_world_data_c* mpWorldData;
- /* 0x024 */ dMenu_Fmap_region_data_c* field_0x24[8];
- /* 0x044 */ dMenu_Fmap_stage_data_c* field_0x44[8];
- /* 0x064 */ JKRArchive* field_0x64;
- /* 0x068 */ int field_0x68;
- /* 0x06C */ RoomData_c* field_0x6c[8];
- /* 0x08C */ void* field_0x8c;
- /* 0x090 */ void* field_0x90;
- /* 0x094 */ int field_0x94[8];
+ /* 0x024 */ dMenu_Fmap_region_data_c* mpRegionData[8];
+ /* 0x044 */ dMenu_Fmap_stage_data_c* mpStageData[8];
+ /* 0x064 */ JKRAramArchive* mpMapArchive;
+ /* 0x068 */ JKRArchive* mpResArchive;
+ /* 0x06C */ dMenuMapCommon_c::RoomData_c* mpRoomData[8];
+ /* 0x08C */ dMenu_Fmap_field_data_c* mpFieldDat;
+ /* 0x090 */ dMenu_Fmap_portal_data_c* mpPortalDat;
+ /* 0x094 */ ResTIMG* mRegionTexture[8];
/* 0x0B4 */ int field_0xb4;
/* 0x0B8 */ dMenu_FmapMap_c* mpMenuFmapMap;
- /* 0x0BC */ int field_0xbc;
- /* 0x0C0 */ u8* field_0xc0;
- /* 0x0C4 */ dMsgFlow_c field_0xc4;
- /* 0x110 */ cXyz field_0x110;
- /* 0x11C */ f32 field_0x11c;
- /* 0x120 */ f32 field_0x120;
- /* 0x124 */ f32 field_0x124;
+ /* 0x0BC */ void* mpFmapMapRes;
+ /* 0x0C0 */ u8* mFlashRooms;
+ /* 0x0C4 */ dMsgFlow_c mMsgFlow;
+ /* 0x110 */ cXyz mPlayerPos;
+ /* 0x11C */ f32 mTransX;
+ /* 0x120 */ f32 mTransY;
+ /* 0x124 */ f32 mAlphaRatio;
/* 0x128 */ f32 field_0x128[8];
/* 0x148 */ f32 field_0x148[8];
/* 0x168 */ f32 field_0x168[8];
/* 0x188 */ f32 field_0x188[8];
- /* 0x1A8 */ f32 field_0x1a8;
- /* 0x1AC */ f32 field_0x1ac[8];
- /* 0x1CC */ f32 field_0x1cc[8];
+ /* 0x1A8 */ f32 mSpotTextureFadeAlpha;
+ /* 0x1AC */ f32 mRegionOffsetX[8];
+ /* 0x1CC */ f32 mRegionOffsetZ[8];
/* 0x1EC */ f32 field_0x1ec;
- /* 0x1F0 */ f32 field_0x1f0;
- /* 0x1F4 */ f32 field_0x1f4;
- /* 0x1F8 */ int field_0x1f8[2];
- /* 0x200 */ int field_0x200;
- /* 0x204 */ int field_0x204;
- /* 0x208 */ int field_0x208;
- /* 0x20C */ int field_0x20c;
- /* 0x210 */ u16 field_0x210;
- /* 0x212 */ u16 field_0x212;
- /* 0x214 */ u16 field_0x214;
- /* 0x216 */ u16 field_0x216;
- /* 0x218 */ u16 field_0x218[8];
- /* 0x228 */ u16 field_0x228[20];
- /* 0x250 */ char field_0x250[8];
- /* 0x258 */ char field_0x258[8];
- /* 0x260 */ char field_0x260[20][8];
+ /* 0x1F0 */ f32 mOldStageTransX;
+ /* 0x1F4 */ f32 mOldStageTransZ;
+ /* 0x1F8 */ u32 mRoomDataBits[2];
+ /* 0x200 */ u32 field_0x200;
+ /* 0x204 */ int mStageCursor;
+ /* 0x208 */ int mRoomCursor;
+ /* 0x20C */ int mStayStageNo;
+ /* 0x210 */ s16 field_0x210;
+ /* 0x212 */ s16 mDisplayFrame;
+ /* 0x214 */ s16 mZoomLevel;
+ /* 0x216 */ u16 mAllTitleName;
+ /* 0x218 */ u16 mTitleName[8];
+ /* 0x228 */ u16 mAreaName[20];
+ /* 0x250 */ char mMarkedStageName[8];
+ /* 0x258 */ char mTmpStageName[8];
+ /* 0x260 */ char mStageName[20][8];
/* 0x300 */ u8 mProcess;
- /* 0x301 */ u8 field_0x301;
- /* 0x302 */ u8 field_0x302;
+ /* 0x301 */ u8 mPrevProcess;
+ /* 0x302 */ u8 mPrevProcessAlt;
/* 0x303 */ u8 mDataNumMax;
- /* 0x304 */ u8 field_0x304;
- /* 0x305 */ u8 field_0x305;
+ /* 0x304 */ u8 mPanDirection;
+ /* 0x305 */ bool field_0x305;
/* 0x306 */ u8 mSpotNum;
- /* 0x307 */ u8 field_0x307;
- /* 0x308 */ u8 field_0x308;
- /* 0x309 */ u8 field_0x309;
- /* 0x30A */ u8 field_0x30a;
- /* 0x30B */ u8 field_0x31b;
- /* 0x30C */ u8 field_0x31c;
- /* 0x30D */ u8 field_0x31d;
- /* 0x30E */ u8 field_0x30e;
+ /* 0x307 */ bool mIsWarpMap;
+ /* 0x308 */ u8 mPortalNo;
+ /* 0x309 */ bool mErrorSound;
+ /* 0x30A */ u8 mStartStageNo;
+ /* 0x30B */ bool field_0x30b;
+ /* 0x30C */ u8 mOldRegionCursor;
+ /* 0x30D */ u8 mOldStageCursor;
+ /* 0x30E */ u8 mFlashRoomCount;
/* 0x30F */ u8 field_0x30f;
/* 0x310 */ u8 field_0x310;
- /* 0x311 */ u8 field_0x311;
- /* 0x312 */ u8 field_0x312;
- /* 0x313 */ u8 field_0x313;
+ /* 0x311 */ u8 mRegionNo;
+ /* 0x312 */ bool mResetAreaName;
+ /* 0x313 */ bool mAreaNameSet;
+};
+
+class dMf_HIO_c {
+public:
+ /* 801C65F8 */ dMf_HIO_c();
+ /* 801CDA2C */ virtual ~dMf_HIO_c() {}
+
+ /* 0x04 */ u8 field_0x4[4];
+ /* 0x08 */ f32 mBackAnimeStep;
+ /* 0x0C */ f32 mTopAnimeStep;
+ /* 0x10 */ u8 mBaseBackAlpha;
+ /* 0x11 */ u8 mMoyaAlpha;
+
+ static dMf_HIO_c* mMySelfPointer;
};
const char* dMenuFmap_getStartStageName(void* param_0);
diff --git a/include/d/menu/d_menu_fmap2D.h b/include/d/menu/d_menu_fmap2D.h
index fc13ceacd0..2467c2b708 100644
--- a/include/d/menu/d_menu_fmap2D.h
+++ b/include/d/menu/d_menu_fmap2D.h
@@ -9,6 +9,8 @@
#include "d/pane/d_pane_class.h"
#include "dolphin/types.h"
+class dMsgScrnExplain_c;
+
class dMenu_Fmap2DBack_c : public dDlst_base_c, public dMenuMapCommon_c {
public:
/* 801CF56C */ dMenu_Fmap2DBack_c();
@@ -87,17 +89,84 @@ public:
field_0x1244 = param_2;
}
- u8 isArrowDrawFlag() { return mArrowDrawFlag; }
+ void setAllTrans(f32 i_transX, f32 i_transZ) {
+ mTransX = i_transX;
+ mTransZ = i_transZ;
+ }
+
+ void setStageTransForceXZ(f32 param_0, f32 param_1) {
+ mStageTransX = param_0;
+ mStageTransZ = param_1;
+ }
+
+ void setStageInfo(u8 i_spotNum, dMenu_FmapMap_c* i_fmapMap) {
+ mSpotNum = i_spotNum;
+ mpMenuFmapMap = i_fmapMap;
+ }
+
+ void setWorldPosMinMax(f32 i_minX, f32 i_minZ, f32 i_maxX, f32 i_maxZ) {
+ mWorldMinX = i_minX;
+ mWorldMinZ = i_minZ;
+ mWorldMaxX = i_maxX;
+ mWorldMaxZ = i_maxZ;
+ }
+
+ void setStageOriginXZ(int i_stageNo, f32 i_originX, f32 i_originZ) {
+ mStageOriginX[i_stageNo] = i_originX;
+ mStageOriginZ[i_stageNo] = i_originZ;
+ }
+
+ void setStageOriginPathXZ(int i_stageNo, f32 i_originX, f32 i_originZ) {
+ mStageOriginPathX[i_stageNo] = i_originX;
+ mStageOriginPathZ[i_stageNo] = i_originZ;
+ }
+
+ void setStageData(Stage_c* i_stageData, u8 i_dataNum) {
+ mpStages = i_stageData;
+ mStageDataNum = i_dataNum;
+ }
+
+ void setRegionTextureReadNum(int i_region, u8 i_num) {
+ mRegionTextureReadNum[i_region] = i_num;
+ }
+
+ f32 getArrowPos2DX() { return mArrowPos2DX; }
+ f32 getArrowPos2DY() { return mArrowPos2DY; }
+ f32 getRenderingPosX() { return mRenderingPosX; }
+ f32 getRenderingPosZ() { return mRenderingPosZ; }
+ f32 getStageTransX() { return mStageTransX; }
+ f32 getStageTransZ() { return mStageTransZ; }
+ f32 getRenderingScale() { return mRenderingScale; }
+ f32 getMapZoomRate() { return mMapZoomRate; }
+ u8 getRegionCursor() { return mRegionCursor; }
+ u8 getSpotCursor() { return mSpotCursor; }
+ u8 getSelectRegion() { return mSelectRegion; }
+ bool getAllPathShowFlag() { return mAllPathShowFlag; }
+ f32 getRegionOriginX(u8 i_region) { return mRegionOriginX[i_region]; }
+ f32 getRegionOriginZ(u8 i_region) { return mRegionOriginZ[i_region]; }
+
+ void setArrowAlpha(f32 i_alpha) { mArrowAlpha = i_alpha; }
+ void setSpotTextureFadeAlpha(f32 i_alpha) { mSpotTextureFadeAlpha = i_alpha; }
+ void setRegionCursor(u8 i_value) { mRegionCursor = i_value; }
+ void setMapDrawFlag(bool i_flag) { mMapDrawFlag = i_flag; }
+ void resetDrug() { field_0x1238 = 0; }
+
+ void offArrowDrawFlag() { mArrowDrawFlag = false; }
+ void onArrowDrawFlag() { mArrowDrawFlag = true; }
+ bool isArrowDrawFlag() { return mArrowDrawFlag; }
void onShowRegionFlag(int region_bit) { mRegionFlag |= ((1 << region_bit) & 0xFF); }
bool isShowRegionFlag(int region_bit) { return mRegionFlag & ((1 << region_bit) & 0xFF); }
- struct unkData {
- /* 0x00 */ float field_0x0;
- /* 0x04 */ float field_0x4;
- /* 0x08 */ float field_0x8;
- /* 0x0C */ float field_0xc;
- /* 0x10 */ float field_0x10;
+ void mapBlink() {}
+
+ // Unknown name
+ struct RegionTexData {
+ /* 0x00 */ float mMinX;
+ /* 0x04 */ float mMinZ;
+ /* 0x08 */ float mMaxX;
+ /* 0x0C */ float mMaxZ;
+ /* 0x10 */ float mScale;
};
/* 0x0C98 */ J2DScreen* mpBackScreen;
@@ -110,71 +179,71 @@ public:
/* 0x0CB4 */ J2DPicture* mpAreaTex[8];
/* 0x0CD4 */ J2DPicture* mpSpotTexture;
/* 0x0CD8 */ J2DScreen* mpPointScreen;
- /* 0x0CDC */ u32 field_0xcdc;
+ /* 0x0CDC */ dMenu_FmapMap_c* mpMenuFmapMap;
/* 0x0CE0 */ dMeterHaihai_c* mpMeterHaihai;
- /* 0x0CE4 */ J2DAnmBase* mpBaseAnm;
- /* 0x0CE8 */ unkData field_0xce8[8];
+ /* 0x0CE4 */ J2DAnmTextureSRTKey* mpBaseAnm;
+ /* 0x0CE8 */ RegionTexData mRegionTexData[8];
/* 0x0D88 */ Stage_c* mpStages;
- /* 0x0D8C */ float field_0xd8c[8];
- /* 0x0D0C */ float field_0xdac[8];
- /* 0x0D0C */ float field_0xdcc[8];
- /* 0x0D0C */ float field_0xdec[8];
- /* 0x0E0C */ float field_0xe0c[8];
- /* 0x0E2C */ float field_0xe2c[8];
- /* 0x0E4C */ float field_0xe4c[8];
- /* 0x0E6C */ float field_0xe6c[8];
- /* 0x0E8C */ float field_0xe8c[8];
- /* 0x0EAC */ float field_0xeac[8];
- /* 0x0ECC */ float field_0xecc[8];
- /* 0x0EEC */ float field_0xeec[8];
+ /* 0x0D8C */ float mRegionScrollMinX[8];
+ /* 0x0D0C */ float mRegionScrollMinZ[8];
+ /* 0x0D0C */ float mRegionScrollMaxX[8];
+ /* 0x0D0C */ float mRegionScrollMaxZ[8];
+ /* 0x0E0C */ float mRegionScrollMapMinX[8];
+ /* 0x0E2C */ float mRegionScrollMapMinY[8];
+ /* 0x0E4C */ float mRegionScrollMapMaxX[8];
+ /* 0x0E6C */ float mRegionScrollMapMaxY[8];
+ /* 0x0E8C */ float mRegionMinMapX[8];
+ /* 0x0EAC */ float mRegionMinMapY[8];
+ /* 0x0ECC */ float mRegionMapSizeX[8];
+ /* 0x0EEC */ float mRegionMapSizeY[8];
/* 0x0F0C */ float field_0xf0c[8];
/* 0x0F2C */ float field_0xf2c[8];
/* 0x0F4C */ float field_0xf4c[8];
/* 0x0F6C */ float field_0xf6c[8];
- /* 0x0F8C */ float field_0xf8c;
- /* 0x0F90 */ float field_0xf90;
- /* 0x0F94 */ float field_0xf94;
+ /* 0x0F8C */ float mRenderingPosX;
+ /* 0x0F90 */ float mRenderingPosZ;
+ /* 0x0F94 */ float mRenderingScale;
/* 0x0F98 */ float field_0xf98;
- /* 0x0F9C */ float field_0xf9c; // Likely called mZoom or something similar
- /* 0x0FA0 */ float field_0xfa0;
+ /* 0x0F9C */ float mZoom;
+ /* 0x0FA0 */ float mMapZoomRate;
/* 0x0FA4 */ float field_0xfa4;
/* 0x0FA8 */ float field_0xfa8;
- /* 0x0FAC */ float field_0xfac;
+ /* 0x0FAC */ float mAnmFrame;
/* 0x0FB0 */ float field_0xfb0;
/* 0x0FB4 */ float field_0xfb4;
/* 0x0FB8 */ float field_0xfb8;
- /* 0x0FBC */ float field_0xfbc;
- /* 0x0FC0 */ float field_0xfc0;
- /* 0x0FC4 */ float field_0xfc4;
- /* 0x0FC8 */ float field_0xfc8;
- /* 0x0FCC */ float field_0xfcc;
+ /* 0x0FBC */ float mTransX;
+ /* 0x0FC0 */ float mTransZ;
+ /* 0x0FC4 */ float mAlphaRate;
+ /* 0x0FC8 */ float mStageTransX;
+ /* 0x0FCC */ float mStageTransZ;
/* 0x0FD0 */ float field_0xfd0;
/* 0x0FD4 */ float field_0xfd4;
/* 0x0FD8 */ float field_0xfd8;
/* 0x0FDC */ float field_0xfdc;
- /* 0x0FE0 */ float field_0xfe0;
- /* 0x0FE4 */ float field_0xfe4;
- /* 0x0FE8 */ float field_0xfe8;
- /* 0x0FEC */ float field_0xfec;
+ /* 0x0FE0 */ float mTexMinX;
+ /* 0x0FE4 */ float mTexMinZ;
+ /* 0x0FE8 */ float mTexMaxX;
+ /* 0x0FEC */ float mTexMaxZ;
/* 0x0FF0 */ float mAllMapScaleRate;
- /* 0x0FF4 */ float field_0xff4;
- /* 0x0FF8 */ float field_0xff8;
- /* 0x0FFC */ float field_0xffc;
- /* 0x1000 */ float field_0x1000;
- /* 0x1004 */ float field_0x1004[8];
- /* 0x1024 */ float field_0x1024[8];
- /* 0x1044 */ float field_0x1044[20];
- /* 0x1094 */ float field_0x1094[20];
- /* 0x10E4 */ float field_0x10e4[20];
- /* 0x1134 */ float field_0x1134[20];
+ /* 0x0FF4 */ float mWorldMinX;
+ /* 0x0FF8 */ float mWorldMinZ;
+ /* 0x0FFC */ float mWorldMaxX;
+ /* 0x1000 */ float mWorldMaxZ;
+ /* 0x1004 */ float mRegionOriginX[8];
+ /* 0x1024 */ float mRegionOriginZ[8];
+ /* 0x1044 */ float mStageOriginX[20];
+ /* 0x1094 */ float mStageOriginZ[20];
+ /* 0x10E4 */ float mStageOriginPathX[20];
+ /* 0x1134 */ float mStageOriginPathZ[20];
/* 0x1184 */ float field_0x1184;
/* 0x1188 */ float field_0x1188;
- /* 0x118C */ float field_0x118c;
- /* 0x1190 */ float field_0x1190;
- /* 0x1194 */ float field_0x1194;
- /* 0x1198 */ float field_0x1198;
- /* 0x119C */ float control_ypos;
- /* 0x11A0 */ float control_xpos;
+ /* 0x118C */ float mArrowPos3DX;
+ /* 0x1190 */ float mArrowPos3DZ;
+ /* 0x1194 */ float mArrowPos2DX;
+ /* 0x1198 */ float mArrowPos2DY;
+ /* 0x119C */ float control_xpos;
+ /* 0x11A0 */ float control_ypos;
/* 0x11A4 */ float field_0x11a4;
/* 0x11A8 */ float field_0x11a8;
/* 0x11AC */ float field_0x11ac;
@@ -187,42 +256,42 @@ public:
/* 0x11C8 */ float field_0x11c8;
/* 0x11CC */ float field_0x11cc;
/* 0x11D0 */ float field_0x11d0;
- /* 0x11D4 */ float field_0x11d4;
- /* 0x11D8 */ float field_0x11d8;
+ /* 0x11D4 */ float mArrowAlpha;
+ /* 0x11D8 */ float mSpotTextureFadeAlpha;
/* 0x11DC */ float field_0x11dc;
/* 0x11E0 */ float field_0x11e0;
- /* 0x11E4 */ float field_0x11e4;
+ /* 0x11E4 */ float mBackAlpha;
/* 0x11E8 */ float field_0x11e8;
/* 0x11EC */ float field_0x11ec;
- /* 0x11F0 */ JUtility::TColor field_0x11f0;
- /* 0x11F4 */ JUtility::TColor field_0x11f4;
- /* 0x11F8 */ JUtility::TColor field_0x11f8;
- /* 0x11FC */ JUtility::TColor field_0x11fc;
- /* 0x1200 */ JUtility::TColor field_0x1200;
- /* 0x1204 */ JUtility::TColor field_0x1204;
+ /* 0x11F0 */ JUtility::TColor mSelectedRegionBlack;
+ /* 0x11F4 */ JUtility::TColor mSelectedRegionWhite;
+ /* 0x11F8 */ JUtility::TColor mUnselectedRegionBlack;
+ /* 0x11FC */ JUtility::TColor mUnselectedRegionWhite;
+ /* 0x1200 */ JUtility::TColor mUnreachedRegionBlack;
+ /* 0x1204 */ JUtility::TColor mUnreachedRegionWhite;
/* 0x1208 */ JUtility::TColor field_0x1208;
/* 0x120C */ JUtility::TColor field_0x120c;
/* 0x1210 */ float field_0x1210;
/* 0x1214 */ float field_0x1214;
- /* 0x1218 */ u16 field_0x1218;
- /* 0x121A */ u16 field_0x121a;
- /* 0x121C */ u8 field_0x121c[8];
- /* 0x1224 */ u8 field_0x1224;
- /* 0x1225 */ u8 field_0x1225;
- /* 0x1226 */ u8 field_0x1226;
- /* 0x1227 */ u8 field_0x1227;
+ /* 0x1218 */ s16 field_0x1218;
+ /* 0x121A */ s16 field_0x121a;
+ /* 0x121C */ u8 mRegionTextureReadNum[8];
+ /* 0x1224 */ u8 mSpotNum;
+ /* 0x1225 */ u8 mStageDataNum;
+ /* 0x1226 */ u8 mSelectRegion;
+ /* 0x1227 */ u8 mRegionCursor;
/* 0x1228 */ u8 field_0x1228;
- /* 0x1229 */ u8 field_0x1229;
+ /* 0x1229 */ u8 mSpotCursor;
/* 0x122A */ u8 field_0x122a;
/* 0x122B */ u8 field_0x122b;
/* 0x122C */ u8 mRegionFlag;
/* 0x122D */ u8 field_0x122d;
- /* 0x122E */ u8 field_0x122e;
- /* 0x122F */ u8 field_0x122f;
+ /* 0x122E */ bool field_0x122e;
+ /* 0x122F */ bool mAllPathShowFlag;
/* 0x1230 */ u8 field_0x1230[8];
/* 0x1238 */ u8 field_0x1238;
- /* 0x1239 */ u8 field_0x1239;
- /* 0x123A */ u8 mArrowDrawFlag;
+ /* 0x1239 */ bool mMapDrawFlag;
+ /* 0x123A */ bool mArrowDrawFlag;
/* 0x123B */ u8 field_0x123b;
/* 0x123C */ dMenu_FmapMap_c* mpFmapMap;
/* 0x1240 */ dMenu_Fmap_region_data_c* mpRegionData;
@@ -249,15 +318,90 @@ public:
/* 801D77C4 */ void setAlphaAnimeMin(CPaneMgrAlpha*);
/* 801D7858 */ void setAlphaAnimeMid(CPaneMgrAlpha*);
/* 801D78FC */ void setAlphaAnimeMax(CPaneMgrAlpha*);
- /* 801D7994 */ void checkPlayerWarpAccept();
- /* 801D7A08 */ void checkWarpAcceptRegion(int);
- /* 801D7AB4 */ void checkWarpAcceptRegion4();
- /* 801D7B58 */ void checkWarpAcceptCannon();
+ /* 801D7994 */ bool checkPlayerWarpAccept();
+ /* 801D7A08 */ bool checkWarpAcceptRegion(int);
+ /* 801D7AB4 */ bool checkWarpAcceptRegion4();
+ /* 801D7B58 */ bool checkWarpAcceptCannon();
/* 801D7BCC */ void setHIO(bool);
- /* 801D8088 */ void isWarpAccept();
+ /* 801D8088 */ bool isWarpAccept();
/* 801D6C98 */ virtual void draw();
/* 801D6700 */ virtual ~dMenu_Fmap2DTop_c();
-};
+
+ void setAllTrans(f32 i_transX, f32 i_transY) {
+ mTransX = i_transX;
+ mTransY = i_transY;
+ }
+
+ dMsgScrnExplain_c* getScrnExplainPtr() { return mpScrnExplain; }
+
+ void setPortalBin(void* i_bin) { mpPortalBin = i_bin; }
+ void btkAnimeLoop(f32 i_delta) { btkAnimeLoop(mpAnm, i_delta); }
+
+ enum Arrow {
+ ARROW_UP = 1,
+ ARROW_DOWN = 2,
+ ARROW_UPDOWN = ARROW_UP | ARROW_DOWN,
+ ARROW_LEFT = 4,
+ ARROW_RIGHT = 8,
+ ARROW_LEFTRIGHT = ARROW_LEFT | ARROW_RIGHT,
+ };
+
+ enum Alpha {
+ ALPHA_MIN = 0,
+ ALPHA_MID = 1,
+ ALPHA_MAX = 2,
+ ALPHA_DEFAULT = 0xFF,
+ };
+
+ /* 0x04 */ JKRExpHeap* mpHeap;
+ /* 0x08 */ J2DScreen* mpTitleScreen;
+ /* 0x0C */ CPaneMgrAlphaMorf* mpTitleRoot;
+ /* 0x10 */ J2DAnmTextureSRTKey* mpAnm;
+ /* 0x14 */ u8 field_0x14[4];
+ /* 0x18 */ CPaneMgr* mpButtonA;
+ /* 0x1C */ CPaneMgr* mpButtonB;
+ /* 0x20 */ CPaneMgr* mpButtonZ;
+ /* 0x24 */ CPaneMgr* mpButtonTextA;
+ /* 0x28 */ CPaneMgr* mpButtonTextB;
+ /* 0x2C */ CPaneMgr* mpButtonTextZ;
+ /* 0x30 */ CPaneMgrAlpha* mpAnalogStickAlpha;
+ /* 0x34 */ CPaneMgrAlpha* mpDpadAlpha;
+ /* 0x38 */ CPaneMgrAlpha* mpArrowLAlpha[2];
+ /* 0x40 */ CPaneMgrAlpha* mpArrowRAlpha[2];
+ /* 0x48 */ u8 field_0x48[8];
+ /* 0x50 */ CPaneMgr* mpNamePane;
+ /* 0x54 */ CPaneMgr* mpSubPane;
+ /* 0x58 */ CPaneMgr* mpAnalogStick;
+ /* 0x5C */ CPaneMgr* mpDpad;
+ /* 0x60 */ CPaneMgr* mpContPane;
+ /* 0x64 */ u8 field_0x64[8];
+ /* 0x6C */ dMsgScrnExplain_c* mpScrnExplain;
+ /* 0x70 */ void* mpPortalBin;
+ /* 0x74 */ f32 mAnmFrame;
+ /* 0x78 */ f32 mTransX;
+ /* 0x7C */ f32 mTransY;
+ /* 0x80 */ f32 mAlphaRate;
+ /* 0x84 */ f32 mTitlePosX;
+ /* 0x88 */ f32 mTitlePosY;
+ /* 0x8C */ f32 mTitleScale;
+ /* 0x90 */ f32 mSubTitlePosX;
+ /* 0x94 */ f32 mSubTitlePosY;
+ /* 0x98 */ f32 mSubTitleScale;
+ /* 0x9C */ f32 mAreaMovementPosX;
+ /* 0xA0 */ f32 mAreaMovementPosY;
+ /* 0xA4 */ f32 mAreaMovementScale;
+ /* 0xA8 */ f32 mClosingPosX;
+ /* 0xAC */ f32 mClosingPosY;
+ /* 0xB0 */ f32 mClosingScale;
+ /* 0xB4 */ f32 mDoIconPosX;
+ /* 0xB8 */ f32 mDoIconPosY;
+ /* 0xBC */ f32 mDoIconScale;
+ /* 0xC0 */ u8 mAlphaButtonA;
+ /* 0xC1 */ u8 mAlphaButtonB;
+ /* 0xC2 */ u8 mAlphaButtonZ;
+ /* 0xC3 */ u8 mAlphaAnalogStick;
+ /* 0xC4 */ u8 mAlphaDpad;
+ };
#endif /* D_MENU_D_MENU_FMAP2D_H */
diff --git a/include/d/menu/d_menu_fmap_map.h b/include/d/menu/d_menu_fmap_map.h
index 5b0e05b9c5..9e11765d75 100644
--- a/include/d/menu/d_menu_fmap_map.h
+++ b/include/d/menu/d_menu_fmap_map.h
@@ -1,60 +1,187 @@
#ifndef D_MENU_D_MENU_FMAP_MAP_H
#define D_MENU_D_MENU_FMAP_MAP_H
+#include "SSystem/SComponent/c_counter.h"
#include "dolphin/types.h"
#include "d/menu/d_menu_fmap.h"
+#include "d/map/d_map.h"
#include "d/map/d_map_path.h"
+#include "d/map/d_map_path_fmap.h"
-class renderingFmap_c {
+struct dMfm_prm_res_s {
+ /* 0x000 */ dMpath_RGB5A3_palDt_s palette_data[27];
+ /* 0x0D8 */ GXColor field_0xd8;
+ /* 0x0DC */ GXColor field_0xdc;
+ /* 0x0E0 */ GXColor field_0xe0;
+ /* 0x0E4 */ GXColor field_0xe4;
+ /* 0x0E8 */ GXColor field_0xe8[8];
+ /* 0x108 */ GXColor field_0x108[8];
+ /* 0x128 */ GXColor field_0x128[8];
+ /* 0x148 */ GXColor field_0x148[8];
+ /* 0x168 */ s16 field_0x168;
+ /* 0x16A */ s16 field_0x16a;
+ /* 0x16C */ u8 field_0x16c;
+ /* 0x16D */ u8 field_0x16d;
+};
+
+struct dMfm_HIO_prm_res_src_s {
+ /* 0x0 */ u8 mFlashDuration;
+
+ static const dMfm_HIO_prm_res_src_s m_other;
+};
+
+class renderingFmap_c : public dRenderingFDAmap_c {
public:
- enum palette_e {};
+ enum palette_e {
+ /* 0x11 */ PALETTE_11 = 0x11,
+ /* 0x12 */ PALETTE_12,
+ /* 0x13 */ PALETTE_13,
+ /* 0x14 */ PALETTE_14,
+ /* 0x15 */ PALETTE_15,
+ /* 0x16 */ PALETTE_16,
+ /* 0x17 */ PALETTE_17,
+ /* 0x18 */ PALETTE_18,
+ /* 0x19 */ PALETTE_19,
+ /* 0x1A */ PALETTE_1A,
+ };
+
+ renderingFmap_c() {
+ mpWorldData = NULL;
+ mpRegionData = NULL;
+ mpStageData = NULL;
+ mpRoomData = NULL;
+ mpFmapData = NULL;
+ mpStageArc = NULL;
+ mStartStageNo = 0;
+ mRegionIndex = 0;
+ mStageNo = 0;
+ mRoomNo = 0;
+ mRegionNo = 0;
+ mRoomIndex = 0;
+ mStageOffsetX = 0.0f;
+ mStageOffsetZ = 0.0f;
+ mRegionOffsetX = 0.0f;
+ mRegionOffsetZ = 0.0f;
+ field_0xb8 = 0;
+ mSaveTableNo = 0;
+ mVisitedRoomSaveTableNo = 0;
+ mDrawEnable = false;
+ }
/* 801CE15C */ void init(u8*, u16, u16, u16, u16);
/* 801CE188 */ void entry(dMenu_Fmap_world_data_c*, int, f32, f32, f32);
- /* 801CE224 */ void isSwitchSpecialOff(int);
- /* 801CE288 */ void isSwitch(dDrawPath_c::group_class const*);
- /* 801CE3C0 */ void getPointStagePathInnerNo(dMenu_Fmap_region_data_c*, f32, f32, int, int*,
- int*);
+ /* 801CE224 */ bool isSwitchSpecialOff(int);
+ /* 801CE288 */ bool isSwitch(group_class const*);
+ /* 801CE3C0 */ int getPointStagePathInnerNo(dMenu_Fmap_region_data_c*, f32, f32, int, int*,
+ int*);
/* 801CE410 */ void preDrawPath();
/* 801CE4D4 */ bool isDrawPath();
- /* 801CE4DC */ void isDrawRoom();
+ /* 801CE4DC */ bool isDrawRoom();
/* 801CE560 */ void postDrawPath();
/* 801CE5B8 */ void postRenderingMap();
/* 801CE5EC */ void roomSetteing();
- /* 801CE6A8 */ void getFirstRoomPointer();
+ /* 801CE6A8 */ room_class* getFirstRoomPointer();
/* 801CE75C */ void getFirstRegion();
/* 801CE7A8 */ void getFirstStage();
/* 801CE80C */ void getFirstRoom();
- /* 801CE84C */ void getNextRoom();
- /* 801CE8B8 */ void getNextStage();
- /* 801CE93C */ void getNextRegion();
- /* 801CE9A4 */ void getNextRoomPointer();
- /* 801CF4D0 */ ~renderingFmap_c();
- /* 801CF55C */ bool isRenderingFloor(int);
- /* 801CF564 */ void beforeDrawPath();
- /* 801CF568 */ void afterDrawPath();
-};
+ /* 801CE84C */ bool getNextRoom();
+ /* 801CE8B8 */ bool getNextStage();
+ /* 801CE93C */ bool getNextRegion();
+ /* 801CE9A4 */ room_class* getNextRoomPointer();
+
+ /* 801CF4D0 */ ~renderingFmap_c(); // {}
+ /* 801CF55C */ bool isRenderingFloor(int); // { return true; }
+ /* 801CF564 */ void beforeDrawPath(); // {}
+ /* 801CF568 */ void afterDrawPath(); // {}
+ int getNowDrawRegionNo() { return mRegionNo; }
+ bool isDrawEnable() { return mDrawEnable; }
-class dMenu_FmapMap_c {
+ /* 0x24 */ Mtx mViewMtx;
+ /* 0x54 */ cXyz mEye;
+ /* 0x60 */ cXyz mCenter;
+ /* 0x6C */ cXyz mUp;
+ /* 0x78 */ dMenu_Fmap_world_data_c* mpWorldData;
+ /* 0x7C */ dMenu_Fmap_region_data_c* mpRegionData;
+ /* 0x80 */ dMenu_Fmap_stage_data_c* mpStageData;
+ /* 0x84 */ dMenu_Fmap_room_data_c* mpRoomData;
+ /* 0x88 */ dMenu_Fmap_data_c* mpFmapData;
+ /* 0x8C */ dMenu_Fmap_stage_arc_data_c* mpStageArc;
+ /* 0x90 */ int mStartStageNo;
+ /* 0x94 */ int mRegionIndex;
+ /* 0x98 */ int mStageNo;
+ /* 0x9C */ int mRoomNo;
+ /* 0xA0 */ int mRegionNo;
+ /* 0xA4 */ int mRoomIndex;
+ /* 0xA8 */ f32 mStageOffsetX;
+ /* 0xAC */ f32 mStageOffsetZ;
+ /* 0xB0 */ f32 mRegionOffsetX;
+ /* 0xB4 */ f32 mRegionOffsetZ;
+ /* 0xB8 */ u8 field_0xb8;
+ /* 0xB9 */ u8 mSaveTableNo;
+ /* 0xBA */ u8 mVisitedRoomSaveTableNo;
+ /* 0xBB */ bool mDrawEnable;
+ };
+
+class dMenu_FmapMap_c : public renderingFmap_c {
public:
- /* 801CEAAC */ void setFmapPaletteColor(renderingFmap_c::palette_e, _GXColor const&);
- /* 801CEA38 */ void setFmapPaletteColor(renderingFmap_c::palette_e, u8, u8, u8, u8);
- /* 801CEAE0 */ void isFlashRoomNoCheck(int) const;
+ /* 801CEAAC */ void setFmapPaletteColor(palette_e, GXColor const&);
+ /* 801CEA38 */ void setFmapPaletteColor(palette_e, u8, u8, u8, u8);
+ /* 801CEAE0 */ bool isFlashRoomNoCheck(int) const;
/* 801CEB1C */ void setPointColor(f32);
/* 801CEC24 */ dMenu_FmapMap_c();
/* 801CED38 */ ~dMenu_FmapMap_c();
/* 801CEDE8 */ void _create(u16, u16, u16, u16, void*);
/* 801CEE3C */ void _delete();
/* 801CEE94 */ void draw();
- /* 801CF0B4 */ void rendering(dDrawPath_c::line_class const*);
- /* 801CF12C */ void getLineWidth(int);
- /* 801CF1D4 */ void isDrawType(int);
+ /* 801CF0B4 */ void rendering(line_class const*);
+ /* 801CF12C */ int getLineWidth(int);
+ /* 801CF1D4 */ bool isDrawType(int);
/* 801CF1E0 */ void setFlashOn(int, int, u8*, int);
- /* 801CF208 */ void getLineColor(int, int);
- /* 801CF298 */ void getBackColor() const;
- /* 801CF2A0 */ void getColor(int);
+ /* 801CF208 */ const GXColor* getLineColor(int, int);
+ /* 801CF298 */ const GXColor* getBackColor() const;
+ /* 801CF2A0 */ const GXColor* getColor(int);
/* 801CF394 */ void setTexture(u16, u16, u16, u16);
/* 801CF450 */ void setRendering(dMenu_Fmap_world_data_c*, int, f32, f32, f32, f32);
+
+ f32 getRateWithFrameCount(int param_0) {
+ return (f32)(g_Counter.mCounter0 % param_0) / (f32)param_0;
+ }
+
+ bool isDrawEnable() {
+ // probably a fakematch
+ bool ret = true;
+ ret &= renderingFmap_c::isDrawEnable();
+ return ret;
+ }
+
+ void setFlashOff() {
+ mLastFlash = mFlash;
+ mFlash = false;
+ }
+
+ int getPointStagePathInnerNo(dMenu_Fmap_region_data_c* i_regionData, f32 i_offsetX,
+ f32 i_offsetY, int i_stageNo, int* o_stageNo, int* o_roomNo) {
+ return renderingFmap_c::getPointStagePathInnerNo(i_regionData, i_offsetX, i_offsetY,
+ i_stageNo, o_stageNo, o_roomNo);
+ }
+
+ ResTIMG* getResTIMGPointer() { return mResTIMG; }
+
+ /* 0xBC */ ResTIMG* mResTIMG;
+ /* 0xC0 */ u8* mMapImage_p;
+ /* 0xC4 */ dMfm_prm_res_s* m_res;
+ /* 0xC8 */ dMpath_RGB5A3_palDt_s* m_palette;
+ /* 0xCC */ int field_0xcc;
+ /* 0xD0 */ f32 mZoomRate;
+ /* 0xD4 */ int mLineNo;
+ /* 0xD8 */ bool mFlash;
+ /* 0xD9 */ bool mLastFlash;
+ /* 0xDC */ int mStageCursor;
+ /* 0xE0 */ int mLastStageCursor;
+ /* 0xE4 */ u8 mRegionCursor;
+ /* 0xE5 */ u8 mFlashTimer;
+ /* 0xE8 */ u8* mFlashRooms;
+ /* 0xEC */ int mFlashRoomCount;
};
diff --git a/include/d/menu/d_menu_map_common.h b/include/d/menu/d_menu_map_common.h
index d83df6324a..a1606c6a36 100644
--- a/include/d/menu/d_menu_map_common.h
+++ b/include/d/menu/d_menu_map_common.h
@@ -40,18 +40,36 @@ struct dMenuMapCommon_c {
struct Stage_c {
// Incomplete class
- struct Stage_c_data {
+ struct data {
// Unknown name
/* 0x00 */ char mName[8];
- /* 0x08 */ u8 field_0x8;
- /* 0x09 */ u8 field_0x9;
- /* 0x0C */ f32 field_0xc;
- /* 0x10 */ f32 field_0x10;
+ /* 0x08 */ u8 mRoomNo;
+ /* 0x09 */ u8 mRegionNo;
+ /* 0x0A */ u16 mAreaName;
+ /* 0x0C */ f32 mOffsetX;
+ /* 0x10 */ f32 mOffsetZ;
};
- /* 0x0 */ u32 field_0x0;
- /* 0x4 */ Stage_c_data field_0x4[0];
+ /* 0x0 */ u8 mCount;
+ /* 0x4 */ data mData[0];
+ };
+
+ class RoomData_c {
+ public:
+ struct data {
+ /* 0x0 */ u8 mSize;
+ /* 0x1 */ u8 field_0x1[3];
+ /* 0x4 */ u8 mData[0];
+ };
+
+ data* getRoomData() { return mpRoomData; }
+ RoomData_c* getNextData() { return mpNextData; }
+ void setRoomData(void* i_data) { mpRoomData = (data*)i_data; }
+ void setNextData(RoomData_c* i_nextData) { mpNextData = i_nextData; }
+
+ /* 0x0 */ data* mpRoomData;
+ /* 0x4 */ RoomData_c* mpNextData;
};
/* 0x004 */ J2DPicture* mPictures[23];
diff --git a/include/d/menu/d_menu_window.h b/include/d/menu/d_menu_window.h
index 6b9a6f0954..4b21fb17a4 100644
--- a/include/d/menu/d_menu_window.h
+++ b/include/d/menu/d_menu_window.h
@@ -278,8 +278,8 @@ private:
/* 0x130 */ dMenu_Skill_c* mpMenuSkill;
/* 0x134 */ dMenu_Insect_c* mpMenuInsect;
/* 0x138 */ s32 mMemSize;
- /* 0x13C */ f32 field_0x13c;
- /* 0x140 */ f32 field_0x140;
+ /* 0x13C */ f32 mFmapStageTransX;
+ /* 0x140 */ f32 mFmapStageTransZ;
/* 0x144 */ u8 field_0x144;
/* 0x145 */ u8 mButtons;
/* 0x146 */ u8 mMenuStatus;
@@ -290,9 +290,9 @@ private:
/* 0x14B */ u8 field_0x14B;
/* 0x14C */ u8 field_0x14C;
/* 0x14D */ u8 field_0x14D;
- /* 0x14E */ u8 field_0x14E;
- /* 0x14F */ u8 field_0x14F;
- /* 0x150 */ u8 field_0x150;
+ /* 0x14E */ u8 mFmapProcess;
+ /* 0x14F */ u8 mFmapRegionCursor;
+ /* 0x150 */ u8 mFmapStageCursor;
/* 0x151 */ u8 field_0x151;
/* 0x152 */ u8 field_0x152;
/* 0x153 */ u8 field_0x153;
diff --git a/include/d/meter/d_meter2_draw.h b/include/d/meter/d_meter2_draw.h
index 670fe8dcf7..a4f83569e2 100644
--- a/include/d/meter/d_meter2_draw.h
+++ b/include/d/meter/d_meter2_draw.h
@@ -284,6 +284,7 @@ public:
bool isEmphasisR() { return field_0x768[2] == 7 ? true : false; }
void setEmphasisA(u8 param_0) { field_0x761 = param_0; }
void setEmphasisB(u8 param_0) { field_0x762 = param_0; }
+ u8 getInsideObjCheck() { return field_0x772; }
private:
/* 0x004 */ item_params mItemParams[4];
diff --git a/include/d/meter/d_meter2_info.h b/include/d/meter/d_meter2_info.h
index b2cc55d1fc..553e9df8c6 100644
--- a/include/d/meter/d_meter2_info.h
+++ b/include/d/meter/d_meter2_info.h
@@ -118,7 +118,9 @@ public:
void resetPauseStatus() { mPauseStatus = 0; }
u8 getPauseStatus() { return mPauseStatus; }
bool isGameStatus(int status) { return mGameStatus & status; }
- bool isTouchKeyCheck(int i_status) { return mTouchKeyCheck & i_status; }
+ bool isTouchKeyCheck(int i_status) { return mTouchKeyCheck & (1 << i_status); }
+ // fake function, should be isTouchKeyCheck
+ bool isTouchKeyCheck_alt(int i_status) { return (mTouchKeyCheck >> i_status) & 1; }
void setMapKeyDirection(u16 direction) { mMapKeyDirection = direction; }
bool isSub2DStatus(int flag) { return mSub2DStatus & (1 << flag); }
void offMenuInForce(int flag) { unk152 &= ~(1 << flag); }
@@ -177,13 +179,17 @@ public:
mCollectCursorPosY = y;
}
void setMapDrugFlag(u8 flag) { mMapDrugFlag = flag; }
- bool isTempBit(int bit) { return mTempBits & (1 << bit) != 0; }
+ bool isTempBit(int bit) { return mTempBits & (1 << bit); }
void offSub2DStatus(int bit) { mSub2DStatus &= ~(1 << bit); }
void onSub2DStatus(int bit) { mSub2DStatus |= 1 << bit; }
void set2DWidth(float width) { m2DWidth = width; }
void set2DHeight(float height) { m2DHeight = height; }
void set2DPosH(float posH) { m2DPosH = posH; }
void set2DPosV(float posV) { m2DPosV = posV; }
+ f32 get2DWidth() { return m2DWidth; }
+ f32 get2DHeight() { return m2DHeight; }
+ u8 getTableMapRegionNo() { return mTableMapRegionNo; }
+ u8 getGoldWolfMapType() { return mGoldWolfMapType; }
public:
/* 0x04 */ u8 unk4[4];
@@ -448,6 +454,11 @@ inline bool dMeter2Info_isTouchKeyCheck(int i_status) {
return g_meter2_info.isTouchKeyCheck(i_status);
}
+// fake function, should be dMeter2Info_isTouchKeyCheck
+inline bool dMeter2Info_isTouchKeyCheck_alt(int i_status) {
+ return g_meter2_info.isTouchKeyCheck_alt(i_status);
+}
+
inline void dMeter2Info_setMapKeyDirection(u16 direction) {
g_meter2_info.setMapKeyDirection(direction);
}
@@ -752,6 +763,27 @@ inline void dMeter2Info_offShopTalkFlag() {
g_meter2_info.offShopTalkFlag();
}
+inline f32 dMeter2Info_get2DWidth() {
+ return g_meter2_info.get2DWidth();
+}
+
+inline f32 dMeter2Info_get2DHeight() {
+ return g_meter2_info.get2DHeight();
+}
+
+inline void dMeter2Info_setWarpInfo(const char* i_stageName, const cXyz& i_position, s16 i_angle,
+ u8 i_roomNo, u8 param_4, u8 i_warpPlayerNo) {
+ g_meter2_info.setWarpInfo(i_stageName, i_position, i_angle, i_roomNo, param_4, i_warpPlayerNo);
+}
+
+inline u8 dMeter2Info_getTableMapRegionNo() {
+ return g_meter2_info.getTableMapRegionNo();
+}
+
+inline u8 dMeter2Info_getGoldWolfMapType() {
+ return g_meter2_info.getGoldWolfMapType();
+}
+
const char* dMeter2Info_getPlusTextureName();
const char* dMeter2Info_getNumberTextureName(int pIndex);
int dMeter2Info_recieveLetter();
diff --git a/include/d/meter/d_meter_HIO.h b/include/d/meter/d_meter_HIO.h
index b370e1ad3f..2cca81d0ee 100644
--- a/include/d/meter/d_meter_HIO.h
+++ b/include/d/meter/d_meter_HIO.h
@@ -5,7 +5,7 @@
#include "SSystem/SComponent/c_sxyz.h"
#include "SSystem/SComponent/c_xyz.h"
-class JKRArchive;
+class JKRAramArchive;
class dMeter_menuHIO_c {
public:
@@ -1132,7 +1132,7 @@ public:
/* 80200BCC */ virtual ~dMeter_fmapHIO_c();
/* 0x004 */ s8 field_0x4;
- /* 0x008 */ JKRArchive* field_0x8;
+ /* 0x008 */ JKRAramArchive* mpArchive;
/* 0x00C */ void* field_0xc;
/* 0x010 */ void* field_0x10;
/* 0x014 */ void* field_0x14;
@@ -1215,7 +1215,7 @@ public:
/* 0x2F6 */ bool mDisplayWorldGrid;
/* 0x2F7 */ bool mDisplayRegionGrid;
/* 0x2F8 */ bool mDisplayReferenceArea;
- /* 0x2F9 */ u8 field_0x2f9;
+ /* 0x2F9 */ bool field_0x2f9;
/* 0x2FA */ bool mTerminalOutput;
/* 0x2FB */ bool mPortalDataTerminalOutput;
/* 0x2FC */ bool mAllRegionsUnlocked;
diff --git a/include/d/msg/d_msg_object.h b/include/d/msg/d_msg_object.h
index 633cdef525..506c9c1fce 100644
--- a/include/d/msg/d_msg_object.h
+++ b/include/d/msg/d_msg_object.h
@@ -484,6 +484,10 @@ inline void dMsgObject_setMsgOutputType(u8 outputType) {
dMsgObject_getMsgObjectClass()->setMsgOutputType(outputType);
}
+inline void dMsgObject_setPortalMessageID(u16 id) {
+ dMsgObject_getMsgObjectClass()->setPortalMessageID(id);
+}
+
class dMsgObject_HowlHIO_c {
public:
/* 80232AEC */ dMsgObject_HowlHIO_c();
diff --git a/include/d/save/d_save.h b/include/d/save/d_save.h
index 16a85f724a..b73c8225b5 100644
--- a/include/d/save/d_save.h
+++ b/include/d/save/d_save.h
@@ -519,6 +519,8 @@ public:
void onFieldDataExistFlag() { mFieldDataExistFlag = true; }
cXyz& getPos() { return mPos; }
u8 getRegionNo() const { return mRegionNo; }
+ char* getName() { return mName; }
+ s16 getAngleY() { return mAngleY; }
private:
/* 0x00 */ cXyz mPos;