From 63aecb61663273ca72da00723462c1ed23369375 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 26 Jul 2024 22:05:56 -0700 Subject: [PATCH] d_map work --- include/d/d_com_inf_game.h | 8 ++ include/d/d_map.h | 63 +++++++-- include/d/d_stage.h | 28 +++- src/d/d_lib.cpp | 3 +- src/d/d_map.cpp | 278 ++++++++++++++++++++++++++++++++----- 5 files changed, 332 insertions(+), 48 deletions(-) diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index c059ea747..47290582a 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -981,6 +981,14 @@ inline void dComIfGs_offCompleteCollectMap(int i_no) { g_dComIfG_gameInfo.save.getPlayer().getMap().offCompleteMap(i_no - 1); } +inline void dComIfGs_onSaveArriveGridForAgb(int i_no) { + g_dComIfG_gameInfo.save.getPlayer().getMap().onSaveArriveGridForAgb(i_no); +} + +inline BOOL dComIfGs_isSaveArriveGridForAgb(int i_no) { + g_dComIfG_gameInfo.save.getPlayer().getMap().isSaveArriveGridForAgb(i_no); +} + inline u8 dComIfGs_getArrowNum() { return g_dComIfG_gameInfo.save.getPlayer().getItemRecord().getArrowNum(); } diff --git a/include/d/d_map.h b/include/d/d_map.h index a70f3b7c8..4645be878 100644 --- a/include/d/d_map.h +++ b/include/d/d_map.h @@ -2,6 +2,7 @@ #define D_MAP_H #include "d/d_drawlist.h" +#include "JSystem/JUtility/JUTAssert.h" struct ResTIMG; struct dmap_dmap_tlut_s; @@ -63,22 +64,55 @@ class dMap_RoomInfo_c { public: dMap_RoomInfo_c(); ~dMap_RoomInfo_c(); - void getRoomDspFloorNo(u8, int); + u32 getRoomDspFloorNo(u8, int); void init(dMap_RoomInfo_c*, int); void getRoomImage(int, u8, int, ResTIMG**, ResTIMG**, map_dt_c**, stage_map_info_class**, u8*); void makeRoomDspFloorNoTbl(int); - void roomEntryRoom(int, u8, int, u8, dMap_RoomInfo_c*, s16, s16, f32); + u32 roomEntryRoom(int, u8, int, u8, dMap_RoomInfo_c*, s16, s16, f32); void Changeimage(u8, u8, int, s16, s16, f32); - void deleteRoom(); + BOOL deleteRoom(); void enlagementSizeTextureCordCalc(f32*, f32*, f32*, f32*, f32, f32, f32, f32, f32, f32); void roomDrawRoomEnlargementSize(int, int, int, int, f32, f32, f32, f32, u8); void roomDrawRoomRealSize(int, int, int, int, f32, f32, f32, f32, f32, f32, u8); - /* 0x00 */ u8 field_0x0; + inline void clrUseRoom() {} + inline void setUseRoom() {} + inline void checkUseRoom() {} + inline void getEnableFlg() {} + inline void getStageMapInfoPE() {} + inline void getStageMapInfoCmPDot() {} + inline void getStageMapInfoMap0_X0() {} + inline void getStageMapInfoMap0_X1() {} + inline void getStageMapInfoMap0_Z0() {} + inline void getStageMapInfoMap0_Z1() {} + inline void getStageMapInfoMap0_XC() {} + inline void getStageMapInfoMap0_ZC() {} + inline void getStageMapInfoMap1_X0() {} + inline void getStageMapInfoMap1_X1() {} + inline void getStageMapInfoMap1_Z0() {} + inline void getStageMapInfoMap1_Z1() {} + inline void getStageMapInfoMap1_ZC() {} + inline void getStageMapInfoMap1_XC() {} + inline void getStageMapInfoAlpha() {} + inline void getMapDtP() {} + inline void getNowDspFloorNo() {} + inline void getMapDtSize() {} + inline void getMap0ScaleX() {} + inline void getMap0ScaleZ() {} + inline void getMap1ScaleX() {} + inline void getMap1ScaleZ() {} + inline void getMap1Width() {} + inline void getMap1Height() {} + + inline u8 getRoomNo() { return m_no; } + inline stage_map_info_class* getStageMapInfoP() { JUT_ASSERT(0x467, mStageMapInfoP != NULL); return mStageMapInfoP; } + inline dMap_RoomInfo_c* getNextRoomInfoP() { return m_next; } + + /* 0x00 */ u8 m_exist; /* 0x01 */ u8 field_0x1; /* 0x02 */ u8 field_0x2[10]; /* 0x0C */ u8 field_0xc; - /* 0x10 */ int field_0x10; + /* 0x10 */ int m_no; /* 0x14 */ int field_0x14; /* 0x18 */ f32 field_0x18; /* 0x1C */ f32 field_0x1c; @@ -87,22 +121,27 @@ class dMap_RoomInfo_c { /* 0x28 */ f32 field_0x28; /* 0x2C */ f32 field_0x2c; /* 0x30 */ dMap_2DMtMapSpcl_c field_0x30; - /* 0x44 */ dMap_2DMtMapSpcl_tex_c field_0x44[1]; + /* 0x44 */ dMap_2DMtMapSpcl_tex_c field_0x44; /* 0x8C */ dMap_2DAGBScrDsp_c field_0x8c; - /* 0xE4 */ dMap_RoomInfo_c* field_0xe4; - /* 0xE8 */ void* field_0xe8; + /* 0xC4 */ u32 field_0xc4[0x08]; + /* 0xE4 */ dMap_RoomInfo_c* m_next; + /* 0xE8 */ stage_map_info_class* mStageMapInfoP; }; class dMap_RoomInfoCtrl_c { public: - void roomExistenceCheck(int, dMap_RoomInfo_c**); - void getNextRoomP(dMap_RoomInfo_c*); - void ctrlEntryRoom(int, u8, int, u8, s16, s16, f32); - void deleteRoom(int); + bool roomExistenceCheck(int, dMap_RoomInfo_c**); + dMap_RoomInfo_c* getNextRoomP(dMap_RoomInfo_c*); + dMap_RoomInfo_c* ctrlEntryRoom(int, u8, int, u8, s16, s16, f32); + bool deleteRoom(int); void ctrlDrawRoomEnlargementSize(int, int, int, int, int, f32, f32, f32, f32, u8); void ctrlDrawRoomRealSize(int, int, int, int, int, f32, f32, f32, f32, f32, f32, u8); void init(); void checkFloorMoveImageChangeRoom(u8, u8, int, s16, s16, f32); + +public: + /* 0x00 */ s32 m_num; + /* 0x04 */ dMap_RoomInfo_c *m_info; }; class dMap_2DSQ_c : public dDlst_base_c { diff --git a/include/d/d_stage.h b/include/d/d_stage.h index fe48a41c7..651be67c2 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -135,7 +135,10 @@ class stage_map_info_class { /* 0x1C */ f32 field_0x1C; /* 0x20 */ f32 field_0x20; /* 0x24 */ f32 field_0x24; - /* 0x28 */ u8 field_0x28[0x35 - 0x28]; + /* 0x28 */ u32 field_0x28; + /* 0x2C */ u32 field_0x2c; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ u8 field_0x34; /* 0x35 */ u8 field_0x35; /* 0x36 */ u8 mOceanXZ; /* 0x37 */ u8 field_0x37[0x38 - 0x37]; @@ -276,7 +279,16 @@ struct dStage_dPnt_c { /* 0x4 */ cXyz m_position; }; // Size: 0x10 -struct dStage_FloorInfo_c {}; +struct dStage_FloorInfo_entry_c { + /* 0x00 */ int field_0x00; + /* 0x04 */ u8 floorNo; + /* 0x05 */ s8 field_0x05[14]; +}; // Size: 0x14 + +struct dStage_FloorInfo_c { + /* 0x00 */ int num; + /* 0x04 */ dStage_FloorInfo_entry_c* entry; +}; struct dStage_Lbnk_c { /* 0x00 */ u32 m_num; @@ -293,7 +305,17 @@ struct dStage_MemoryConfig_c { /* 0x4 */ dStage_MemoryConfig_data* m_entries; }; -struct dStage_DMap_c {}; +struct dStage_DMap_entry_c { + /* 0x00 */ int field_0x00; + /* 0x04 */ int field_0x04; + /* 0x08 */ int field_0x08; + /* 0x0C */ float offsetY; +}; + +struct dStage_DMap_c { + /* 0x00 */ int num; + /* 0x04 */ dStage_DMap_entry_c* entry; +}; struct dStage_Event_dt_c { /* 0x00 */ u8 field_0x0; diff --git a/src/d/d_lib.cpp b/src/d/d_lib.cpp index 9407bbee7..b9b848114 100644 --- a/src/d/d_lib.cpp +++ b/src/d/d_lib.cpp @@ -492,7 +492,8 @@ u32 dLib_getIplDaysFromSaveTime() { return 0; OSTime curTime = OSGetTime(); - return (curTime - dateIpl); + u32 seconds = OSTicksToSeconds(curTime - dateIpl); + return seconds; } /* 80058834-80058910 .text dLib_get_QuatFromTriangle__FP4cXyzP4cXyzP4cXyz */ diff --git a/src/d/d_map.cpp b/src/d/d_map.cpp index 22a9ca42e..4f2fa0c99 100644 --- a/src/d/d_map.cpp +++ b/src/d/d_map.cpp @@ -4,46 +4,140 @@ // #include "d/d_map.h" +#include "d/d_com_inf_game.h" #include "d/d_stage.h" +enum { + Floor_B5F = 123, + Floor_B4F = 124, + Floor_B3F = 125, + Floor_B2F = 126, + Floor_B1F = 127, + Floor_1F = 128, + Floor_2F = 129, + Floor_3F = 130, + Floor_4F = 131, + Floor_5F = 132, + + Floor_Base = Floor_B5F, +}; + +#define Floor_Num (Floor_5F - Floor_B5F + 1) +#define Floor_Valid(no) (no >= 0) && (no < Floor_Num) + +static inline int gridPos2GridNo(int i_gridX, int i_gridY) { + JUT_ASSERT(0x4a4, (i_gridX >= -3) && (i_gridX <= 3) && (i_gridY >= -3) && (i_gridY <= 3)); + return i_gridX + 3 + (i_gridY + 3) * 7; +} + /* 800455AC-80045660 .text onSaveArriveGridForAgbUseGridPos__Fii */ -void onSaveArriveGridForAgbUseGridPos(int, int) { - /* Nonmatching */ +void onSaveArriveGridForAgbUseGridPos(int i_gridX, int i_gridY) { + dComIfGs_onSaveArriveGridForAgb(gridPos2GridNo(i_gridX, i_gridY)); } /* 80045660-80045714 .text isSaveArriveGridForAgbUseGridPos__Fii */ -void isSaveArriveGridForAgbUseGridPos(int, int) { - /* Nonmatching */ +BOOL isSaveArriveGridForAgbUseGridPos(int i_gridX, int i_gridY) { + dComIfGs_isSaveArriveGridForAgb(gridPos2GridNo(i_gridX, i_gridY)); } /* 80045714-80045734 .text IsFloorNo__Fi */ -void IsFloorNo(int) { - /* Nonmatching */ +bool IsFloorNo(int i_no) { + return i_no >= Floor_B5F && i_no <= Floor_5F; } /* 80045734-800457B8 .text getFloorInfo_WithRoom__Fi */ -void getFloorInfo_WithRoom(int) { - /* Nonmatching */ +dStage_FloorInfo_c* getFloorInfo_WithRoom(int i_roomNo) { + dStage_FloorInfo_c* floor = NULL; + if (i_roomNo >= 0) { + dStage_roomDt_c* room = dComIfGp_roomControl_getStatusRoomDt(i_roomNo); + if (room != NULL) + floor = room->getFloorInfo(); + } + if (floor == NULL) + floor = dComIfGp_getStage().getFloorInfo(); + return floor; } /* 800457B8-800458E0 .text mapOffsetY__Fv */ -void mapOffsetY() { - /* Nonmatching */ +f32 mapOffsetY() { + f32 ret = 0.0f; + if (dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_BOSS_e || dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_MINIBOSS_e) { + if (dComIfGp_getStage().getDMap() != NULL) { + dStage_DMap_c* pinf = dComIfGp_getStage().getDMap(); + dStage_DMap_entry_c* entry = pinf->entry; + JUT_ASSERT(0x587, pinf->num == 1); + for (int i = 0; i < pinf->num; i++, entry++) + ret = entry->offsetY; + } + } + return ret; } /* 800458E0-800459E4 .text dMap_GetTopBottomFloorNo__FP11dStage_dt_cPUcPUc */ -void dMap_GetTopBottomFloorNo(dStage_dt_c*, u8*, u8*) { - /* Nonmatching */ +BOOL dMap_GetTopBottomFloorNo(dStage_dt_c* stag, u8* bottom_p, u8* top_p) { + if (stag == NULL) + return FALSE; + + u8 floorNo; + u8 bottom; + u8 top; + + dStage_FloorInfo_c* floor = stag->getFloorInfo(); + dStage_FloorInfo_entry_c* entry; + + if (floor != NULL && floor->num >= 1) { + entry = floor->entry; + bottom = Floor_B5F; + top = Floor_5F; + for (int i = 0; i < floor->num; i++, entry++) { + for (int j = 0; j < ARRAY_SIZE(entry->field_0x05); j++) { + if (entry->field_0x05[j] != -1) { + floorNo = entry->floorNo; + if (floorNo > bottom) + bottom = floorNo; + if (floorNo < top) + top = floorNo; + break; + } + } + } + } else { + bottom = Floor_1F; + top = Floor_1F; + } + + if (bottom_p != NULL) + *bottom_p = bottom; + if (top_p != NULL) + *top_p = top; + + return FALSE; } /* 800459E4-80045A98 .text dMap_GetFloorInfoDtP__FP18dStage_FloorInfo_cf */ -void dMap_GetFloorInfoDtP(dStage_FloorInfo_c*, f32) { +void dMap_GetFloorInfoDtP(dStage_FloorInfo_c* floor, f32 ret) { /* Nonmatching */ } /* 80045A98-80045AEC .text dMap_GetFloorInfoDtPFromFloorNo__FP18dStage_FloorInfo_cUc */ -void dMap_GetFloorInfoDtPFromFloorNo(dStage_FloorInfo_c*, u8) { +dStage_FloorInfo_entry_c* dMap_GetFloorInfoDtPFromFloorNo(dStage_FloorInfo_c* floor, u8 i_floorNo) { /* Nonmatching */ + dStage_FloorInfo_entry_c* entry; + BOOL valid = FALSE; + + if (floor != NULL) { + entry = floor->entry; + for (int i = 0; i < floor->num; i++, entry++) { + if (entry->floorNo == i_floorNo) { + valid = TRUE; + break; + } + } + } + + if (!valid) + entry = NULL; + return entry; } /* 80045AEC-80045C24 .text dMap_GetFloorNoForDmap__FP11dStage_dt_cif */ @@ -62,13 +156,55 @@ void dMap_GetFloorNo(dStage_dt_c*, f32) { } /* 80045C90-80045E54 .text getRoomDspFloorNo__15dMap_RoomInfo_cFUci */ -void dMap_RoomInfo_c::getRoomDspFloorNo(u8, int) { +u32 dMap_RoomInfo_c::getRoomDspFloorNo(u8 i_no, BOOL search) { /* Nonmatching */ + s32 no = i_no - Floor_Base; + JUT_ASSERT(0x702, Floor_Valid(no)); + + s32 dspFloorNo = field_0x2[no]; + if (search) { + if (!IsFloorNo(dspFloorNo)) { + while (!IsFloorNo(dspFloorNo) && --no >= 0) { + JUT_ASSERT(0x70f, Floor_Valid(no)); + dspFloorNo = field_0x2[no]; + } + } + + if (!IsFloorNo(dspFloorNo)) { + while (!IsFloorNo(dspFloorNo) && ++no <= (Floor_Num - 1)) { + JUT_ASSERT(0x718, Floor_Valid(no)); + dspFloorNo = field_0x2[no]; + } + } + + if (!IsFloorNo(dspFloorNo)) + dspFloorNo = 255; + } + + return dspFloorNo; } /* 80045E54-80045F40 .text init__15dMap_RoomInfo_cFP15dMap_RoomInfo_ci */ -void dMap_RoomInfo_c::init(dMap_RoomInfo_c*, int) { - /* Nonmatching */ +void dMap_RoomInfo_c::init(dMap_RoomInfo_c* prev, int p2) { + /* Nonmatching */ + m_exist = 0; + field_0x1 = 0; + for (int i = 0; i < ARRAY_SIZE(field_0x2); i++) + field_0x2[i] = 255; + field_0xc = 255; + m_no = -1; + field_0x14 = p2; + field_0x18 = 0.0f; + field_0x1c = 0.0f; + field_0x20 = 0.0f; + field_0x24 = 0.0f; + field_0x8c.init(NULL, NULL, 0.0f, 0.0f, 0, 0, 0, 0, 1.0f, 1.0f, 0); + field_0x44.field_0x0[0] = 0; + field_0x30.init(1, &field_0x44); + m_next = NULL; + mStageMapInfoP = NULL; + if (prev != NULL) + prev->m_next = this; } /* 80045F40-80046314 .text getRoomImage__15dMap_RoomInfo_cFiUciPP7ResTIMGPP7ResTIMGPP8map_dt_cPP20stage_map_info_classPUc */ @@ -82,7 +218,7 @@ void dMap_RoomInfo_c::makeRoomDspFloorNoTbl(int) { } /* 80046470-80046A58 .text roomEntryRoom__15dMap_RoomInfo_cFiUciUcP15dMap_RoomInfo_cssf */ -void dMap_RoomInfo_c::roomEntryRoom(int, u8, int, u8, dMap_RoomInfo_c*, s16, s16, f32) { +u32 dMap_RoomInfo_c::roomEntryRoom(int, u8, int, u8, dMap_RoomInfo_c*, s16, s16, f32) { /* Nonmatching */ } @@ -92,8 +228,25 @@ void dMap_RoomInfo_c::Changeimage(u8, u8, int, s16, s16, f32) { } /* 80046F08-80046FE0 .text deleteRoom__15dMap_RoomInfo_cFv */ -void dMap_RoomInfo_c::deleteRoom() { - /* Nonmatching */ +BOOL dMap_RoomInfo_c::deleteRoom() { + m_no = -1; + m_exist = 0; + mStageMapInfoP = NULL; + field_0x1 = 0; + for (int i = 0; i < ARRAY_SIZE(field_0x2); i++) + field_0x2[i] = 255; + field_0xc = 255; + m_no = -1; + field_0x18 = 0.0f; + field_0x1c = 0.0f; + field_0x20 = 0.0f; + field_0x24 = 0.0f; + field_0x28 = 0.0f; + field_0x2c = 0.0f; + field_0x8c.init(NULL, NULL, 0.0f, 0.0f, 0, 0, 0, 0, 1.0f, 1.0f, 0); + field_0x44.field_0x0[0] = 0; + field_0x30.init(1, &field_0x44); + return TRUE; } /* 80046FE0-800470CC .text enlagementSizeTextureCordCalc__15dMap_RoomInfo_cFPfPfPfPfffffff */ @@ -112,38 +265,99 @@ void dMap_RoomInfo_c::roomDrawRoomRealSize(int, int, int, int, f32, f32, f32, f3 } /* 80047834-8004793C .text roomExistenceCheck__19dMap_RoomInfoCtrl_cFiPP15dMap_RoomInfo_c */ -void dMap_RoomInfoCtrl_c::roomExistenceCheck(int, dMap_RoomInfo_c**) { - /* Nonmatching */ +bool dMap_RoomInfoCtrl_c::roomExistenceCheck(int i_no, dMap_RoomInfo_c** roomInfoPP) { + /* Nonmatching */ + JUT_ASSERT(0xb83, roomInfoPP != NULL); + bool ret = false; + *roomInfoPP = NULL; + dMap_RoomInfo_c* roomInfoP = m_info; + JUT_ASSERT(0xb8b, roomInfoP != NULL); + for (; !ret && roomInfoP != NULL; roomInfoP = roomInfoP->m_next) { + if (roomInfoP->m_exist) { + if (i_no == roomInfoP->m_no) { + *roomInfoPP = roomInfoP; + ret = TRUE; + } + } else { + if (*roomInfoPP == NULL) + *roomInfoPP = roomInfoP; + } + } + return ret; } /* 8004793C-80047960 .text getNextRoomP__19dMap_RoomInfoCtrl_cFP15dMap_RoomInfo_c */ -void dMap_RoomInfoCtrl_c::getNextRoomP(dMap_RoomInfo_c*) { - /* Nonmatching */ +dMap_RoomInfo_c* dMap_RoomInfoCtrl_c::getNextRoomP(dMap_RoomInfo_c* info) { + if (info == NULL) { + if (m_info != NULL) + return m_info; + else + return NULL; + } else { + return info->m_next; + } } /* 80047960-80047A8C .text ctrlEntryRoom__19dMap_RoomInfoCtrl_cFiUciUcssf */ -void dMap_RoomInfoCtrl_c::ctrlEntryRoom(int, u8, int, u8, s16, s16, f32) { - /* Nonmatching */ +dMap_RoomInfo_c* dMap_RoomInfoCtrl_c::ctrlEntryRoom(int i_no, u8 p1, int p2, u8 p3, s16 p4, s16 p5, f32 p6) { + dMap_RoomInfo_c* roomInfoP; + if (roomExistenceCheck(i_no, &roomInfoP)) + return NULL; + + dMap_RoomInfo_c* prev = NULL; + roomInfoP = m_info; + JUT_ASSERT(0xbfd, roomInfoP != NULL); + + if (roomInfoP == NULL) + return NULL; + + for (; roomInfoP != NULL && roomInfoP->m_exist; roomInfoP = roomInfoP->m_next) + prev = roomInfoP; + + if (roomInfoP != NULL) { + if (roomInfoP->roomEntryRoom(i_no, p1, p2, p3, prev, p4, p5, p6)) + return roomInfoP; + } + + return NULL; } /* 80047A8C-80047AC4 .text deleteRoom__19dMap_RoomInfoCtrl_cFi */ -void dMap_RoomInfoCtrl_c::deleteRoom(int) { - /* Nonmatching */ +bool dMap_RoomInfoCtrl_c::deleteRoom(int i_no) { + dMap_RoomInfo_c* roomInfoP; + if (roomExistenceCheck(i_no, &roomInfoP)) + roomInfoP->deleteRoom(); + return FALSE; } /* 80047AC4-80047B8C .text ctrlDrawRoomEnlargementSize__19dMap_RoomInfoCtrl_cFiiiiiffffUc */ -void dMap_RoomInfoCtrl_c::ctrlDrawRoomEnlargementSize(int, int, int, int, int, f32, f32, f32, f32, u8) { - /* Nonmatching */ +void dMap_RoomInfoCtrl_c::ctrlDrawRoomEnlargementSize(int i_no, int p1, int p2, int p3, int p4, f32 p5, f32 p6, f32 p7, f32 p8, u8 p9) { + dMap_RoomInfo_c* roomInfoP = NULL; + while ((roomInfoP = getNextRoomP(roomInfoP))) { + if (roomInfoP->m_exist && i_no == roomInfoP->m_no) + roomInfoP->roomDrawRoomEnlargementSize(p1, p2, p3, p4, p5, p6, p7, p8, p9); + } } /* 80047B8C-80047C64 .text ctrlDrawRoomRealSize__19dMap_RoomInfoCtrl_cFiiiiiffffffUc */ -void dMap_RoomInfoCtrl_c::ctrlDrawRoomRealSize(int, int, int, int, int, f32, f32, f32, f32, f32, f32, u8) { - /* Nonmatching */ +void dMap_RoomInfoCtrl_c::ctrlDrawRoomRealSize(int i_no, int p1, int p2, int p3, int p4, f32 p5, f32 p6, f32 p7, f32 p8, f32 p9, f32 p10, u8 p11) { + dMap_RoomInfo_c* roomInfoP = NULL; + while ((roomInfoP = getNextRoomP(roomInfoP))) { + if (roomInfoP->m_exist && i_no == roomInfoP->m_no) + roomInfoP->roomDrawRoomRealSize(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); + } } /* 80047C64-80047CD0 .text init__19dMap_RoomInfoCtrl_cFv */ void dMap_RoomInfoCtrl_c::init() { /* Nonmatching */ + int no = 0; + dMap_RoomInfo_c* info = m_info; + dMap_RoomInfo_c* prev = NULL; + for (int i = 0; i < m_num; i++, no++, info++) { + info->init(prev, no); + prev = info; + } } /* 80047CD0-8004826C .text create__6dMap_cFv */