From d8c41fdce4d806ad297d116f325ee9f2eaf7ed74 Mon Sep 17 00:00:00 2001 From: robojumper Date: Sat, 11 Oct 2025 00:04:22 +0200 Subject: [PATCH] Figuring out more things --- config/SOUE01/symbols.txt | 24 ++--- include/d/d_bzs_types.h | 2 +- include/d/d_stage_mgr.h | 11 ++ include/d/lyt/d_lyt_map.h | 30 +++++- src/d/lyt/d_lyt_map.cpp | 214 +++++++++++++++++++++++++++++++------- 5 files changed, 228 insertions(+), 53 deletions(-) diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 24138cbc..fc0186e7 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -7804,17 +7804,17 @@ __dt__26sFState_c<13dLytMapMain_c>Fv = .text:0x801363A0; // type:function size:0 __dt__29sFStateFct_c<13dLytMapMain_c>Fv = .text:0x80136400; // type:function size:0x6C __dt__82sStateMgr_c<13dLytMapMain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80136470; // type:function size:0xA0 __dt__52sFStateMgr_c<13dLytMapMain_c,20sStateMethodUsr_FI_c>Fv = .text:0x80136510; // type:function size:0xA4 -fn_801365C0 = .text:0x801365C0; // type:function size:0x4 -fn_801365D0 = .text:0x801365D0; // type:function size:0x40 +__ct__26dLytMapBoundingWorldBoundsFv = .text:0x801365C0; // type:function size:0x4 +__dt__26dLytMapBoundingWorldBoundsFv = .text:0x801365D0; // type:function size:0x40 __dt__13dLytMapMain_cFv = .text:0x80136610; // type:function size:0x608 getGlobal__13dLytMapMain_cFv = .text:0x80136C20; // type:function size:0xC loadTextboxes__13dLytMapMain_cFv = .text:0x80136C30; // type:function size:0xC8 build__13dLytMapMain_cFv = .text:0x80136D00; // type:function size:0x6CC changeState__82sStateMgr_c<13dLytMapMain_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x801373D0; // type:function size:0x10 -fn_801373E0 = .text:0x801373E0; // type:function size:0xAC -fn_80137490 = .text:0x80137490; // type:function size:0x2E8 -fn_80137780 = .text:0x80137780; // type:function size:0x15C -fn_801378E0 = .text:0x801378E0; // type:function size:0x838 +loadStageProperties__13dLytMapMain_cFv = .text:0x801373E0; // type:function size:0xAC +setupStage__13dLytMapMain_cFv = .text:0x80137490; // type:function size:0x2E8 +remove__13dLytMapMain_cFv = .text:0x80137780; // type:function size:0x15C +execute__13dLytMapMain_cFv = .text:0x801378E0; // type:function size:0x838 getStateID__94sStateMgr_c<25dLytMapPinIconAggregate_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80138120; // type:function size:0x10 draw__13dLytMapMain_cFv = .text:0x80138130; // type:function size:0x238 fn_80138370 = .text:0x80138370; // type:function size:0x138 @@ -7862,7 +7862,7 @@ initializeState_In__13dLytMapMain_cFv = .text:0x8013C1F0; // type:function size: executeState_In__13dLytMapMain_cFv = .text:0x8013C2F0; // type:function size:0x380 finalizeState_In__13dLytMapMain_cFv = .text:0x8013C670; // type:function size:0x40 getAreaGroup__13dLytMapMain_cCFl = .text:0x8013C6B0; // type:function size:0xA8 -fn_8013C760 = .text:0x8013C760; // type:function size:0x100 +getRoomType__13dLytMapMain_cCFv = .text:0x8013C760; // type:function size:0x100 fn_8013C860 = .text:0x8013C860; // type:function size:0x1C shouldDrawFootprints__13dLytMapMain_cCFv = .text:0x8013C880; // type:function size:0x64 zoomIn__13dLytMapMain_cFv = .text:0x8013C8F0; // type:function size:0x644 @@ -10577,7 +10577,7 @@ isSTIFAreaFaron__11dStageMgr_cCFv = .text:0x80199A60; // type:function size:0x3C isSTIFAreaEldin__11dStageMgr_cCFv = .text:0x80199AA0; // type:function size:0x3C isSTIFAreaLanayru__11dStageMgr_cCFv = .text:0x80199AE0; // type:function size:0x3C getSTIFunk1__11dStageMgr_cCFv = .text:0x80199B20; // type:function size:0x20 -StageManager__getSTIFunk3 = .text:0x80199B40; // type:function size:0x1C +getSTIFRoomType__11dStageMgr_cCFv = .text:0x80199B40; // type:function size:0x1C fn_80199B60 = .text:0x80199B60; // type:function size:0xC fn_80199B70 = .text:0x80199B70; // type:function size:0x1C fn_80199B90 = .text:0x80199B90; // type:function size:0x3A8 @@ -40092,10 +40092,10 @@ lbl_80572770 = .sdata:0x80572770; // type:object size:0x8 lbl_80572778 = .sdata:0x80572778; // type:object size:0x8 data:wstring lbl_80572780 = .sdata:0x80572780; // type:object size:0x4 data:4byte lbl_80572784 = .sdata:0x80572784; // type:object size:0x4 data:4byte -lbl_80572788 = .sdata:0x80572788; // type:object size:0x8 -lbl_80572790 = .sdata:0x80572790; // type:object size:0x8 -lbl_80572798 = .sdata:0x80572798; // type:object size:0x8 -lbl_805727A0 = .sdata:0x805727A0; // type:object size:0x8 +lbl_80572788 = .sdata:0x80572788; // type:object size:0x6 data:string +lbl_80572790 = .sdata:0x80572790; // type:object size:0x6 data:string +lbl_80572798 = .sdata:0x80572798; // type:object size:0x6 data:string +lbl_805727A0 = .sdata:0x805727A0; // type:object size:0x6 data:string lbl_805727A8 = .sdata:0x805727A8; // type:object size:0x8 lbl_805727B0 = .sdata:0x805727B0; // type:object size:0x8 lbl_805727B8 = .sdata:0x805727B8; // type:object size:0x8 diff --git a/include/d/d_bzs_types.h b/include/d/d_bzs_types.h index 9b31058c..74ae0e29 100644 --- a/include/d/d_bzs_types.h +++ b/include/d/d_bzs_types.h @@ -195,7 +195,7 @@ struct STIF { /* 0x0E */ u8 areaType; /* 0x0F */ u8 area; /* 0x10 */ u8 field_0x10; - /* 0x11 */ u8 field_0x11; + /* 0x11 */ u8 roomType; /* 0x12 */ s8 mapNameId; /* 0x13 */ u8 field_0x13; }; diff --git a/include/d/d_stage_mgr.h b/include/d/d_stage_mgr.h index a455b10a..65534302 100644 --- a/include/d/d_stage_mgr.h +++ b/include/d/d_stage_mgr.h @@ -76,6 +76,15 @@ public: STIF_AREA_LANAYRU_GORGE = 11, }; + // room is a not great name since this is really stage-wide... + enum StifRoomType_e { + STIF_ROOMTYPE_FIELD = 0, + STIF_ROOMTYPE_DUNGEON = 1, + STIF_ROOMTYPE_SKYLOFT = 2, + STIF_ROOMTYPE_BOSS_HOUSE = 3, + STIF_ROOMTYPE_SKYFIELD = 4, + }; + s32 getSTIFArea() const; bool isSTIFAreaFaron() const; bool isSTIFAreaEldin() const; @@ -87,6 +96,8 @@ public: return getSTIFArea() == STIF_AREA_SKY; } + s32 getSTIFRoomType() const; + s32 getAreaType() const; s32 getMapNameId() const; diff --git a/include/d/lyt/d_lyt_map.h b/include/d/lyt/d_lyt_map.h index 89b0e35e..c0dab772 100644 --- a/include/d/lyt/d_lyt_map.h +++ b/include/d/lyt/d_lyt_map.h @@ -41,7 +41,7 @@ struct dMapSavedDataEntry { }; struct dMapSavedData { - /* 0x00 */ dMapSavedDataEntry entries[6]; + /* 0x00 */ dMapSavedDataEntry entries[/* dLytMapMain_c::ROOMTYPE_MAX */ 6]; /* 0x30 */ bool showIslandNames; }; @@ -512,6 +512,8 @@ public: virtual void dLytMapMain_vt0x10(); void build(); + void remove(); + void execute(); bool isNotInvisible() const; bool isOpenMaybe() const; @@ -562,7 +564,8 @@ public: STATE_FUNC_DECLARE(dLytMapMain_c, EventSaveObjDecide); private: - // TODO - need to come up with better names + // TODO - need to come up with better names for all of these enums and concepts + enum SurfaceProvince_e { SURFACE_PROVINCE_FARON = 0, SURFACE_PROVINCE_ELDIN = 1, @@ -578,6 +581,16 @@ private: AREAGROUP_MAX = 6, }; + enum RoomType_e { + ROOMTYPE_FIELD = 0, + ROOMTYPE_DUNGEON = 1, + ROOMTYPE_SKYLOFT = 2, + ROOMTYPE_BOSS_HOUSE = 3, + ROOMTYPE_SKYFIELD = 4, + ROOMTYPE_SKYFIELD_INTERIOR = 5, + ROOMTYPE_MAX = 6, + }; + dLytMapGlobal_c *getGlobal(); void checkScroll(); bool needsNav(s32 mapMode) const; @@ -590,7 +603,9 @@ private: bool canPlaceBeacons(s32 mapMode) const; bool isPointingAtMainMap() const; + void loadStageProperties(); s32 getAreaGroup(s32 stifArea) const; + s32 getRoomType() const; s32 getSelectedSaveObjIdx() const; @@ -604,6 +619,8 @@ private: void fn_80143300(); void fn_80143120(s32); void fn_80138D80(); + void fn_801431E0(); + void fn_8013AD50(); bool shouldDrawFootprints() const; void zoomIn(); @@ -614,6 +631,7 @@ private: void setCursorType(); void setupFlags(); + void setupStage(); void loadTextboxes(); @@ -698,11 +716,15 @@ private: /* 0x8C60 */ s32 mMaxBeaconCount; /* 0x8C64 */ s32 field_0x8C64; - /* 0x8C68 */ s32 field_0x8C68; + /* 0x8C68 */ s32 mRoomType; /* 0x8C6C */ s32 mAreaGroup; /* 0x8C70 */ u32 field_0x8C70; - /* 0x8C74 */ u8 _0x8C74[0x8C88 - 0x8C74]; + /* 0x8C74 */ u8 _0x8C74[0x8C7C - 0x8C74]; + /* 0x8C7C */ f32 field_0x8C7C; + /* 0x8C80 */ f32 field_0x8C80; + + /* 0x8C84 */ u8 _0x8C84[0x8C88 - 0x8C84]; /* 0x8C88 */ f32 field_0x8C88; /* 0x8C8C */ f32 field_0x8C8C; diff --git a/src/d/lyt/d_lyt_map.cpp b/src/d/lyt/d_lyt_map.cpp index 999b7bca..b9c7107d 100644 --- a/src/d/lyt/d_lyt_map.cpp +++ b/src/d/lyt/d_lyt_map.cpp @@ -2366,6 +2366,120 @@ void dLytMapMain_c::build() { fn_80143300(); } +void dLytMapMain_c::loadStageProperties() { + mAreaGroup = getAreaGroup(dStageMgr_c::GetInstance()->getSTIFArea()); + mRoomType = getRoomType(); + + // Yes, it does need to be written this way, otherwise the catch-all else + // branch is collapsed with the other ones. + + if (mRoomType == ROOMTYPE_FIELD) { + mCurrentMapMode = dLytMapGlobal_c::MAPMODE_ZOOM; + return; + } + + if (mRoomType == ROOMTYPE_DUNGEON) { + mCurrentMapMode = dLytMapGlobal_c::MAPMODE_STAGE; + return; + } + + if (mRoomType == ROOMTYPE_SKYLOFT) { + mCurrentMapMode = dLytMapGlobal_c::MAPMODE_STAGE; + return; + } + + if (mRoomType == ROOMTYPE_BOSS_HOUSE) { + mCurrentMapMode = dLytMapGlobal_c::MAPMODE_STAGE; + return; + } + + mCurrentMapMode = dLytMapGlobal_c::MAPMODE_STAGE; +} + +void dLytMapMain_c::setupStage() { + loadStageProperties(); + if (field_0x8C94 == 10) { + mLyt.findPane("N_skyloft_00")->SetVisible(false); + } + + mAnmGroups[MAP_MAIN_ANIM_PLAYER_2_PATTERN].bind(false); + if (dAcPy_c::getCurrentTunicType() == 1) { + mAnmGroups[MAP_MAIN_ANIM_PLAYER_2_PATTERN].setFrame(1.0f); + } else { + mAnmGroups[MAP_MAIN_ANIM_PLAYER_2_PATTERN].setFrame(0.0f); + } + + if (mRoomType == ROOMTYPE_SKYLOFT || + (mAreaGroup == AREAGROUP_SKY && (mRoomType == ROOMTYPE_BOSS_HOUSE || mRoomType == ROOMTYPE_SKYFIELD_INTERIOR || + mRoomType == ROOMTYPE_DUNGEON))) { + mAnmGroups[MAP_MAIN_ANIM_SUN_ROTE].bind(false); + } + + s32 type = 0; + mAnmGroups[MAP_MAIN_ANIM_TYPE].bind(false); + if (dScGame_c::currentSpawnInfo.getTrial() == SpawnInfo::TRIAL) { + type = 8; + } else if (mAreaGroup == AREAGROUP_FARON || mAreaGroup == AREAGROUP_SEALED_GROUNDS) { + if (dStageMgr_c::GetInstance()->getSTIFArea() == dStageMgr_c::STIF_AREA_SEALED_GROUNDS) { + type = 7; + } else if (mRoomType == ROOMTYPE_FIELD) { + type = 1; + } else { + type = 2; + } + } else if (mAreaGroup == AREAGROUP_ELDIN) { + if (mRoomType == ROOMTYPE_FIELD) { + type = 3; + } else { + type = 4; + } + } else if (mAreaGroup == AREAGROUP_LANAYRU) { + if (mRoomType == ROOMTYPE_FIELD) { + type = 5; + } else { + type = 6; + } + } else if (mAreaGroup == AREAGROUP_SKY) { + if (dStageMgr_c::GetInstance()->getSTIFRoomType() == dStageMgr_c::STIF_ROOMTYPE_DUNGEON) { + type = 11; + } else { + // TODO - probably an enum but this matches too + type = 9; + if (dScGame_c::currentSpawnInfo.getTimeOfDay() == SpawnInfo::NIGHT) { + type = 10; + } + } + } + mAnmGroups[MAP_MAIN_ANIM_TYPE].setFrame(type); + mLyt.calc(); + mAnmGroups[MAP_MAIN_ANIM_TYPE].unbind(); + + field_0x8C7C = 0.0f; + field_0x8C80 = 0.0f; + mAnmGroups[MAP_MAIN_ANIM_IN].bind(false); + mAnmGroups[MAP_MAIN_ANIM_IN].setFrame(0.0f); + mAnmGroups[MAP_MAIN_ANIM_MAP_V].bind(false); + fn_801431E0(); + mLyt.calc(); + mAnmGroups[MAP_MAIN_ANIM_MAP_V].unbind(); + mAnmGroups[MAP_MAIN_ANIM_IN].unbind(); + if (mRoomType == ROOMTYPE_BOSS_HOUSE || mRoomType == ROOMTYPE_SKYFIELD_INTERIOR) { + mLyt.findPane("N_houkoul_00")->SetVisible(false); + } + if (field_0x8C94 != 10) { + loadTextboxes(); + } + fn_8013AD50(); +} + +void dLytMapMain_c::remove() { + // TODO - ... +} + +void dLytMapMain_c::execute() { + // TODO - ... +} + void dLytMapMain_c::draw() { if (!field_0x8DBF) { return; @@ -2383,7 +2497,7 @@ void dLytMapMain_c::draw() { mMarkers.draw(); } - if (field_0x8C68 != 3 && field_0x8C68 != 5 && field_0x8C94 != 2) { + if (mRoomType != ROOMTYPE_BOSS_HOUSE && mRoomType != ROOMTYPE_SKYFIELD_INTERIOR && field_0x8C94 != 2) { mPinIconAggregate.draw(); } @@ -2458,7 +2572,7 @@ void lytMapusesSizedWString() { } void dLytMapMain_c::saveUnkMapData() { - dMapSavedDataEntry &data = sSavedMapData.entries[field_0x8C68]; + dMapSavedDataEntry &data = sSavedMapData.entries[mRoomType]; data.field_0x06 = 1; data.mapMode = mCurrentMapMode; data.mapUpDirection = mMapUpDirection; @@ -2478,9 +2592,9 @@ void dLytMapMain_c::initUnkMapData() { } void dLytMapMain_c::loadUnkMapData() { - mCurrentMapMode = sSavedMapData.entries[field_0x8C68].mapMode; - mMapUpDirection = sSavedMapData.entries[field_0x8C68].mapUpDirection; - mMapUpDirectionAfterZoomToDetail = sSavedMapData.entries[field_0x8C68].mapUpDirectionAfterZoomToDetail; + mCurrentMapMode = sSavedMapData.entries[mRoomType].mapMode; + mMapUpDirection = sSavedMapData.entries[mRoomType].mapUpDirection; + mMapUpDirectionAfterZoomToDetail = sSavedMapData.entries[mRoomType].mapUpDirectionAfterZoomToDetail; mShowIslandNames = sSavedMapData.showIslandNames; } @@ -2524,12 +2638,12 @@ void dLytMapMain_c::setButtonMessages( } if (canZoomOut(currentMapMode) && canZoomOut(nextMapMode)) { - if ((field_0x8C68 == 0 && currentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE) || - (field_0x8C68 == 2 && currentMapMode == dLytMapGlobal_c::MAPMODE_WORLD_SKY) || - (field_0x8C68 == 4 && currentMapMode == dLytMapGlobal_c::MAPMODE_STAGE) || - (field_0x8C68 == 3 && currentMapMode == dLytMapGlobal_c::MAPMODE_WORLD_SKY) || - (field_0x8C68 == 5 && currentMapMode == dLytMapGlobal_c::MAPMODE_STAGE) || - (field_0x8C68 == 1 && currentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE)) { + if ((mRoomType == ROOMTYPE_FIELD && currentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE) || + (mRoomType == ROOMTYPE_SKYLOFT && currentMapMode == dLytMapGlobal_c::MAPMODE_WORLD_SKY) || + (mRoomType == ROOMTYPE_SKYFIELD && currentMapMode == dLytMapGlobal_c::MAPMODE_STAGE) || + (mRoomType == ROOMTYPE_BOSS_HOUSE && currentMapMode == dLytMapGlobal_c::MAPMODE_WORLD_SKY) || + (mRoomType == ROOMTYPE_SKYFIELD_INTERIOR && currentMapMode == dLytMapGlobal_c::MAPMODE_STAGE) || + (mRoomType == ROOMTYPE_DUNGEON && currentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE)) { dLytMeter_c::GetInstance()->setFlags(METER_BTN_CROSS_LEFT); LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_CROSS_L, LytDoButtonRelated::ACT_IE_ETC_WORLD_MAP); } else { @@ -2575,8 +2689,8 @@ void dLytMapMain_c::setButtonMessages( } } - switch (field_0x8C68) { - case 2: { + switch (mRoomType) { + case ROOMTYPE_SKYLOFT: { if (currentMapMode == dLytMapGlobal_c::MAPMODE_ZOOM) { dLytMeter_c::GetInstance()->setFlags(METER_BTN_CROSS_UP); LytDoButtonRelated::setCrossTop(LytDoButtonRelated::ACT_IE_ETC_CURRENT_LOCATION, true); @@ -2598,8 +2712,8 @@ void dLytMapMain_c::setButtonMessages( } break; } - case 0: - case 4: { + case ROOMTYPE_FIELD: + case ROOMTYPE_SKYFIELD: { if (currentMapMode == dLytMapGlobal_c::MAPMODE_ZOOM) { dLytMeter_c::GetInstance()->setFlags(METER_BTN_CROSS_UP); LytDoButtonRelated::setCrossTop(LytDoButtonRelated::ACT_IE_ETC_CURRENT_LOCATION, true); @@ -2621,7 +2735,7 @@ void dLytMapMain_c::setButtonMessages( dLytMeter_c::GetInstance()->setFlags(METER_BTN_0x4000); } - if (field_0x8C68 == 4 && mCurrentMapMode == dLytMapGlobal_c::MAPMODE_STAGE && + if (mRoomType == ROOMTYPE_SKYFIELD && mCurrentMapMode == dLytMapGlobal_c::MAPMODE_STAGE && mNextMapMode == dLytMapGlobal_c::MAPMODE_STAGE) { dLytMeter_c::GetInstance()->setFlags(METER_BTN_Z); if (mShowIslandNames) { @@ -2636,7 +2750,7 @@ void dLytMapMain_c::setButtonMessages( } break; } - case 1: { + case ROOMTYPE_DUNGEON: { if (currentMapMode == dLytMapGlobal_c::MAPMODE_ZOOM) { dLytMeter_c::GetInstance()->setFlags(METER_BTN_CROSS_UP); LytDoButtonRelated::setCrossTop(LytDoButtonRelated::ACT_IE_ETC_CURRENT_LOCATION, true); @@ -2673,7 +2787,8 @@ void dLytMapMain_c::setButtonMessages( void dLytMapMain_c::setCursorType() { if (canCenterCursor1(mCurrentMapMode) && canCenterCursor1(mNextMapMode)) { - if ((field_0x8C94 == 10 || ((field_0x8C68 == 3 || field_0x8C68 == 1) && mPointerOnMap)) || + if ((field_0x8C94 == 10 || + ((mRoomType == ROOMTYPE_BOSS_HOUSE || mRoomType == ROOMTYPE_DUNGEON) && mPointerOnMap)) || (mPointerCanPlaceBeacon && isPointingAtMainMap()) || (*mPinIconAggregate.mStateMgr.getStateID() == dLytMapPinIconAggregate_c::StateID_Select) || (needsNav(mCurrentMapMode) && needsNav(mNextMapMode) && mFloorBtnMgr.hasPointedAtABtnIdx())) { @@ -2894,7 +3009,7 @@ void dLytMapMain_c::setupFlags() { } mAnmGroups[MAP_MAIN_ANIM_KUMO_PATTERN].setFrame(titleLineFrame); mAnmGroups[MAP_MAIN_ANIM_MAP_V].bind(false); - if (field_0x8C68 == 1 || field_0x8C68 == 3) { + if (mRoomType == ROOMTYPE_DUNGEON || mRoomType == ROOMTYPE_BOSS_HOUSE) { if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_ZOOM) { mAnmGroups[MAP_MAIN_ANIM_MAP_V].setFrame(3.0f); } @@ -3030,7 +3145,8 @@ void dLytMapMain_c::setupFlags() { grpZAIn = &mAnmGroups[MAP_MAIN_ANIM_MAP_ZA_IN_DESERT]; } - if (field_0x8C68 == 2 || (mAreaGroup == AREAGROUP_SKY && (field_0x8C68 == 3 || field_0x8C68 == 1))) { + if (mRoomType == ROOMTYPE_SKYLOFT || + (mAreaGroup == AREAGROUP_SKY && (mRoomType == ROOMTYPE_BOSS_HOUSE || mRoomType == ROOMTYPE_DUNGEON))) { grpZIn = &mAnmGroups[MAP_MAIN_ANIM_MAP_ZA_IN_SKY_MAP_2]; grpZAIn = &mAnmGroups[MAP_MAIN_ANIM_MAP_ZA_OUT_SKY_COURSE]; } @@ -3128,7 +3244,7 @@ void dLytMapMain_c::setupFlags() { } } - if (field_0x8C68 == 4 || field_0x8C68 == 5) { + if (mRoomType == ROOMTYPE_SKYFIELD || mRoomType == ROOMTYPE_SKYFIELD_INTERIOR) { mLyt.findPane("P_skyloftLink_00")->SetVisible(false); } @@ -3140,7 +3256,7 @@ void dLytMapMain_c::setupFlags() { mPutIcon.setVisible(false); } - if (field_0x8C68 == 4) { + if (mRoomType == ROOMTYPE_SKYFIELD) { if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_STAGE && mNextMapMode == dLytMapGlobal_c::MAPMODE_STAGE) { mMarkers.setIslandNamesOn(mShowIslandNames); } else if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_ZOOM && mNextMapMode == dLytMapGlobal_c::MAPMODE_ZOOM) { @@ -3181,8 +3297,34 @@ s32 dLytMapMain_c::getAreaGroup(s32 stifArea) const { return ret; } +s32 dLytMapMain_c::getRoomType() const { + s32 ret = ROOMTYPE_FIELD; + s32 stifRoomType = dStageMgr_c::GetInstance()->getSTIFRoomType(); + if (field_0x8C94 == 10) { + ret = ROOMTYPE_FIELD; + } + + if (dScGame_c::isCurrentStage("F011r") || + (dScGame_c::isCurrentStage("F002r") && dScGame_c::currentSpawnInfo.isNight()) || + dScGame_c::isCurrentStage("F010r") || dScGame_c::isCurrentStage("F019r")) { + ret = ROOMTYPE_SKYFIELD_INTERIOR; + } else if (stifRoomType == dStageMgr_c::STIF_ROOMTYPE_FIELD) { + ret = ROOMTYPE_FIELD; + } else if (stifRoomType == dStageMgr_c::STIF_ROOMTYPE_DUNGEON) { + ret = ROOMTYPE_DUNGEON; + } else if (stifRoomType == dStageMgr_c::STIF_ROOMTYPE_SKYLOFT) { + ret = ROOMTYPE_SKYLOFT; + } else if (stifRoomType == dStageMgr_c::STIF_ROOMTYPE_BOSS_HOUSE) { + ret = ROOMTYPE_BOSS_HOUSE; + } else if (stifRoomType == dStageMgr_c::STIF_ROOMTYPE_SKYFIELD) { + ret = ROOMTYPE_SKYFIELD; + } + return ret; +} + void dLytMapMain_c::zoomIn() { - if (field_0x8C68 == 2 || (mAreaGroup == AREAGROUP_SKY && (field_0x8C68 == 3 || field_0x8C68 == 1))) { + if (mRoomType == ROOMTYPE_SKYLOFT || + (mAreaGroup == AREAGROUP_SKY && (mRoomType == ROOMTYPE_BOSS_HOUSE || mRoomType == ROOMTYPE_DUNGEON))) { if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD) { if (dPad::getDownTrigRight()) { dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_ZOOMIN_TO_AREA); @@ -3208,7 +3350,7 @@ void dLytMapMain_c::zoomIn() { } } } - } else if (field_0x8C68 == 4 || field_0x8C68 == 5) { + } else if (mRoomType == ROOMTYPE_SKYFIELD || mRoomType == ROOMTYPE_SKYFIELD_INTERIOR) { if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD) { if (dPad::getDownTrigRight()) { dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_ZOOMIN_TO_COURSE); @@ -3234,7 +3376,7 @@ void dLytMapMain_c::zoomIn() { } } } - } else if (field_0x8C68 == 0) { + } else if (mRoomType == ROOMTYPE_FIELD) { if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD) { if (dPad::getDownTrigRight()) { dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_ZOOMIN_TO_AREA); @@ -3260,7 +3402,7 @@ void dLytMapMain_c::zoomIn() { } } } - } else if (field_0x8C68 == 1) { + } else if (mRoomType == ROOMTYPE_DUNGEON) { if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD) { if (dPad::getDownTrigRight()) { dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_ZOOMIN_TO_AREA); @@ -3286,7 +3428,7 @@ void dLytMapMain_c::zoomIn() { } } } - } else if (field_0x8C68 == 3) { + } else if (mRoomType == ROOMTYPE_BOSS_HOUSE) { if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD) { if (dPad::getDownTrigRight()) { dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_ZOOMIN_TO_AREA); @@ -3304,7 +3446,8 @@ void dLytMapMain_c::zoomIn() { } void dLytMapMain_c::zoomOut() { - if (field_0x8C68 == 2 || (mAreaGroup == AREAGROUP_SKY && (field_0x8C68 == 3 || field_0x8C68 == 1))) { + if (mRoomType == ROOMTYPE_SKYLOFT || + (mAreaGroup == AREAGROUP_SKY && (mRoomType == ROOMTYPE_BOSS_HOUSE || mRoomType == ROOMTYPE_DUNGEON))) { if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD_SKY) { if (dPad::getDownTrigLeft()) { mNextMapMode = dLytMapGlobal_c::MAPMODE_WORLD; @@ -3327,7 +3470,7 @@ void dLytMapMain_c::zoomOut() { mStateMgr.changeState(StateID_ChgDispAreaMode_MapRot); } } - } else if (field_0x8C68 == 4 || field_0x8C68 == 5) { + } else if (mRoomType == ROOMTYPE_SKYFIELD || mRoomType == ROOMTYPE_SKYFIELD_INTERIOR) { if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE) { if (dPad::getDownTrigLeft()) { dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_ZOOMOUT_TO_WORLD); @@ -3350,7 +3493,7 @@ void dLytMapMain_c::zoomOut() { mStateMgr.changeState(StateID_ChgDispAreaMode_MapRot); } } - } else if (field_0x8C68 == 0) { + } else if (mRoomType == ROOMTYPE_FIELD) { if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE) { if (dPad::getDownTrigLeft()) { dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_ZOOMOUT_TO_WORLD); @@ -3373,7 +3516,7 @@ void dLytMapMain_c::zoomOut() { mStateMgr.changeState(StateID_ChgDispAreaMode_MapRot); } } - } else if (field_0x8C68 == 1) { + } else if (mRoomType == ROOMTYPE_DUNGEON) { if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE) { if (dPad::getDownTrigLeft()) { dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_ZOOMOUT_TO_WORLD); @@ -3396,7 +3539,7 @@ void dLytMapMain_c::zoomOut() { mStateMgr.changeState(StateID_ChgDispAreaMode_MapRot); } } - } else if (field_0x8C68 == 3) { + } else if (mRoomType == ROOMTYPE_BOSS_HOUSE) { if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE) { if (dPad::getDownTrigLeft()) { dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_ZOOMOUT_TO_WORLD); @@ -3420,8 +3563,7 @@ void dLytMapMain_c::executeState_Active() { return; } - // TODO figure out and double check numbers - if (field_0x8C68 == 4 && mCurrentMapMode == dLytMapGlobal_c::MAPMODE_STAGE && + if (mRoomType == ROOMTYPE_SKYFIELD && mCurrentMapMode == dLytMapGlobal_c::MAPMODE_STAGE && mNextMapMode == dLytMapGlobal_c::MAPMODE_STAGE && dPad::getDownTrigZ()) { if (mShowIslandNames) { dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_ISLAND_NAME_OFF); @@ -3488,8 +3630,8 @@ void dLytMapMain_c::executeState_Active() { (dPad::getDownTrigA() && mCurrentMapMode == dLytMapGlobal_c::MAPMODE_STAGE && canZoomIn(mCurrentMapMode) )) { zoomIn(); - } else if ((field_0x8C68 == dLytMapGlobal_c::MAPMODE_WORLD || field_0x8C68 == dLytMapGlobal_c::MAPMODE_PROVINCE || - field_0x8C68 == dLytMapGlobal_c::MAPMODE_WORLD_SKY || field_0x8C68 == dLytMapGlobal_c::MAPMODE_ZOOM) && + } else if ((mRoomType == ROOMTYPE_FIELD || mRoomType == ROOMTYPE_DUNGEON || mRoomType == ROOMTYPE_SKYLOFT || + mRoomType == ROOMTYPE_SKYFIELD) && canResetPosition(mCurrentMapMode, mMapUpDirection) && dPad::getDownTrigUp()) { mVec3_c pos; fn_80142F00(pos, mCurrentMapMode, mMapUpDirection, global->getMapRotationCenter(), global->getField_0x56());