diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index fc0186e7..f627f789 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -7492,7 +7492,7 @@ fn_8012D610 = .text:0x8012D610; // type:function size:0x5C fn_8012D670 = .text:0x8012D670; // type:function size:0x5C fn_8012D6D0 = .text:0x8012D6D0; // type:function size:0x20 fn_8012D6F0 = .text:0x8012D6F0; // type:function size:0xE4 -fn_8012D7E0 = .text:0x8012D7E0; // type:function size:0x10 +execute__16dLytMapCapture_cFv = .text:0x8012D7E0; // type:function size:0x10 isBusyRendering__16dLytMapCapture_cCFv = .text:0x8012D7F0; // type:function size:0x8 fn_8012D800 = .text:0x8012D800; // type:function size:0xEC finalizeState__31sFStateID_c<16dLytMapCapture_c>CFR16dLytMapCapture_c = .text:0x8012D8F0; // type:function size:0x30 @@ -7824,10 +7824,10 @@ canZoomOut__13dLytMapMain_cCFl = .text:0x80138650; // type:function size:0x1E0 canCenterCursor__13dLytMapMain_cCFl = .text:0x80138830; // type:function size:0x254 needsNav__13dLytMapMain_cCFl = .text:0x80138A90; // type:function size:0x8C getSelectedSaveObjIdx__13dLytMapMain_cCFv = .text:0x80138B20; // type:function size:0x110 -fn_80138C30 = .text:0x80138C30; // type:function size:0x38 -fn_80138C70 = .text:0x80138C70; // type:function size:0xA4 -fn_80138D20 = .text:0x80138D20; // type:function size:0x5C -fn_80138D80 = .text:0x80138D80; // type:function size:0xB0 +isPaneVisible__13dLytMapMain_cCFPQ34nw4r3lyt4Pane = .text:0x80138C30; // type:function size:0x38 +setSaveObjsVisible__13dLytMapMain_cFb = .text:0x80138C70; // type:function size:0xA4 +setSaveObjPanePtrs__13dLytMapMain_cFv = .text:0x80138D20; // type:function size:0x5C +initSaveObjs__13dLytMapMain_cFv = .text:0x80138D80; // type:function size:0xB0 isPointingAtMainMap__13dLytMapMain_cCFv = .text:0x80138E30; // type:function size:0xD4 canPlaceBeacons__13dLytMapMain_cCFl = .text:0x80138F10; // type:function size:0xA0 canResetPosition__13dLytMapMain_cCFlb = .text:0x80138FB0; // type:function size:0xA4 @@ -7848,7 +7848,7 @@ clearButtonMessages__13dLytMapMain_cFv = .text:0x8013A080; // type:function size setButtonMessages__13dLytMapMain_cFlblb = .text:0x8013A170; // type:function size:0xA84 canCenterCursor1__13dLytMapMain_cCFl = .text:0x8013AC00; // type:function size:0x4 setCursorType__13dLytMapMain_cFv = .text:0x8013AC10; // type:function size:0x138 -fn_8013AD50 = .text:0x8013AD50; // type:function size:0x370 +fn_8013AD50__13dLytMapMain_cFv = .text:0x8013AD50; // type:function size:0x370 calculateBoundingWorldHitboxes__13dLytMapMain_cFv = .text:0x8013B0C0; // type:function size:0x28C fn_8013B350 = .text:0x8013B350; // type:function size:0x10 initializeState_Invisible__13dLytMapMain_cFv = .text:0x8013B360; // type:function size:0x4 @@ -7863,7 +7863,7 @@ executeState_In__13dLytMapMain_cFv = .text:0x8013C2F0; // type:function size:0x3 finalizeState_In__13dLytMapMain_cFv = .text:0x8013C670; // type:function size:0x40 getAreaGroup__13dLytMapMain_cCFl = .text:0x8013C6B0; // type:function size:0xA8 getRoomType__13dLytMapMain_cCFv = .text:0x8013C760; // type:function size:0x100 -fn_8013C860 = .text:0x8013C860; // type:function size:0x1C +canChangeFloor__13dLytMapMain_cCFl = .text:0x8013C860; // type:function size:0x1C shouldDrawFootprints__13dLytMapMain_cCFv = .text:0x8013C880; // type:function size:0x64 zoomIn__13dLytMapMain_cFv = .text:0x8013C8F0; // type:function size:0x644 zoomOut__13dLytMapMain_cFv = .text:0x8013CF40; // type:function size:0x54C @@ -7996,9 +7996,9 @@ fn_80142D90__13dLytMapMain_cFl = .text:0x80142D90; // type:function size:0x170 fn_80142F00__13dLytMapMain_cFR7mVec3_clUcRC7mVec3_cRC4mAng = .text:0x80142F00; // type:function size:0x158 fn_80143060__13dLytMapMain_cFR7mVec3_cRC7mVec3_cRC7mVec3_cRC4mAng = .text:0x80143060; // type:function size:0xBC fn_80143120 = .text:0x80143120; // type:function size:0xC0 -fn_801431E0 = .text:0x801431E0; // type:function size:0x11C +fn_801431E0__13dLytMapMain_cFv = .text:0x801431E0; // type:function size:0x11C fn_80143300__13dLytMapMain_cFv = .text:0x80143300; // type:function size:0x54 -fn_80143360 = .text:0x80143360; // type:function size:0x1D4 +fn_80143360__13dLytMapMain_cFv = .text:0x80143360; // type:function size:0x1D4 checkScroll__13dLytMapMain_cFv = .text:0x80143540; // type:function size:0x374 build__9dLytMap_cFv = .text:0x801438C0; // type:function size:0x6C fn_80143930 = .text:0x80143930; // type:function size:0x60 @@ -10969,7 +10969,7 @@ forceFadeOut__8dStage_cFv = .text:0x801B3E60; // type:function size:0x40 forceFadeIn__8dStage_cFv = .text:0x801B3EA0; // type:function size:0x40 fn_801B3EE0__8dStage_cFv = .text:0x801B3EE0; // type:function size:0x3C fn_801B3F20__8dStage_cFv = .text:0x801B3F20; // type:function size:0x8 -fn_801B3F30 = .text:0x801B3F30; // type:function size:0x8 +fn_801B3F30__8dStage_cFv = .text:0x801B3F30; // type:function size:0x8 drawMap__8dStage_cFP6mMtx_ci = .text:0x801B3F40; // type:function size:0x90 RoomManager__getRMPLForRoom = .text:0x801B3FD0; // type:function size:0x34 getFlagPositionForRoomVisit__FiPUsPUs = .text:0x801B4010; // type:function size:0x34 @@ -33730,9 +33730,26 @@ lbl_8051FE84 = .data:0x8051FE84; // type:object size:0xC lbl_8051FE90 = .data:0x8051FE90; // type:object size:0xC lbl_8051FE9C = .data:0x8051FE9C; // type:object size:0x28 lbl_8051FEC4 = .data:0x8051FEC4; // type:object size:0x10 -lbl_8051FED4 = .data:0x8051FED4; // type:object size:0x104 -lbl_8051FFD8 = .data:0x8051FFD8; // type:object size:0x10 -lbl_8051FFE8 = .data:0x8051FFE8; // type:object size:0x10 +lbl_8051FED4 = .data:0x8051FED4; // type:object size:0xE data:string +lbl_8051FEE4 = .data:0x8051FEE4; // type:object size:0xD data:string +lbl_8051FEF4 = .data:0x8051FEF4; // type:object size:0x9 data:string +lbl_8051FF00 = .data:0x8051FF00; // type:object size:0x9 data:string +lbl_8051FF0C = .data:0x8051FF0C; // type:object size:0xB data:string +lbl_8051FF18 = .data:0x8051FF18; // type:object size:0xD data:string +lbl_8051FF28 = .data:0x8051FF28; // type:object size:0x10 data:string +lbl_8051FF38 = .data:0x8051FF38; // type:object size:0xA data:string +lbl_8051FF44 = .data:0x8051FF44; // type:object size:0xC data:string +lbl_8051FF50 = .data:0x8051FF50; // type:object size:0xD data:string +lbl_8051FF60 = .data:0x8051FF60; // type:object size:0xF data:string +lbl_8051FF70 = .data:0x8051FF70; // type:object size:0xE data:string +lbl_8051FF80 = .data:0x8051FF80; // type:object size:0xE data:string +lbl_8051FF90 = .data:0x8051FF90; // type:object size:0xC data:string +lbl_8051FF9C = .data:0x8051FF9C; // type:object size:0xC data:string +lbl_8051FFA8 = .data:0x8051FFA8; // type:object size:0xD data:string +lbl_8051FFB8 = .data:0x8051FFB8; // type:object size:0xD data:string +lbl_8051FFC8 = .data:0x8051FFC8; // type:object size:0xE data:string +lbl_8051FFD8 = .data:0x8051FFD8; // type:object size:0xD data:string +lbl_8051FFE8 = .data:0x8051FFE8; // type:object size:0xD data:string jumptable_8051FFF8 = .data:0x8051FFF8; // type:object size:0x30 scope:local lbl_80520028 = .data:0x80520028; // type:object size:0xC lbl_80520034 = .data:0x80520034; // type:object size:0xC data:string @@ -40088,7 +40105,7 @@ lbl_80572750 = .sdata:0x80572750; // type:object size:0x5 data:string lbl_80572758 = .sdata:0x80572758; // type:object size:0x5 data:string lbl_80572760 = .sdata:0x80572760; // type:object size:0x8 data:4byte lbl_80572768 = .sdata:0x80572768; // type:object size:0x8 data:4byte -lbl_80572770 = .sdata:0x80572770; // type:object size:0x8 +lbl_80572770 = .sdata:0x80572770; // type:object size:0x5 data:string 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 diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 9608dd07..7744ae15 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -160,6 +160,7 @@ public: bool fn_801B3EE0(); void fn_801B3F20(); + void fn_801B3F30(); private: dRoom_c *createRoom(int roomid, bool flag0x40); diff --git a/include/d/lyt/d_lyt_map.h b/include/d/lyt/d_lyt_map.h index c0dab772..ddad8a60 100644 --- a/include/d/lyt/d_lyt_map.h +++ b/include/d/lyt/d_lyt_map.h @@ -101,6 +101,18 @@ public: bool execute(); void draw(); + void setVisible(bool visible) { + mVisible = visible; + } + + void setField_0x198(f32 f) { + field_0x198 = f; + } + + void setField_0x19C(f32 f) { + field_0x19C = f; + } + private: dLytMapGlobal_c *getGlobal() const; @@ -113,7 +125,7 @@ private: /* 0x196 */ u16 mCurrentNumSteps; /* 0x198 */ f32 field_0x198; /* 0x19C */ f32 field_0x19C; - /* 0x1A0 */ u8 field_0x1A0; + /* 0x1A0 */ bool mVisible; }; struct LytMap0x80520B5C { @@ -221,7 +233,7 @@ public: void setUnk(LytMap0x80520B5C *unk); bool setPosition(s32 index, const mVec3_c &position); void unsetAll(); - s32 getNumSetPins() const; + u32 getNumSetPins() const; STATE_FUNC_DECLARE(dLytMapPinIconAggregate_c, Wait); STATE_FUNC_DECLARE(dLytMapPinIconAggregate_c, Select); @@ -291,7 +303,7 @@ public: field_0x70C = 4; mPointerVisible = false; mPrevPointerVisible = false; - field_0x712 = false; + mForceNoNav = false; } virtual ~dLytMapFloorBtnMgr_c(); @@ -325,8 +337,12 @@ public: void resetFloor(s32 newFloorBtn); bool isUsingPointerNav() const; -private: + void setForceNoNav(bool b) { + mForceNoNav = b; + } + void checkPointedAtBtn(); +private: /* 0x008 */ dLytMapGlobal_c *mpGlobal; /* 0x00C */ UI_STATE_MGR_DECLARE(dLytMapFloorBtnMgr_c); @@ -342,7 +358,7 @@ private: /* 0x70C */ UNKWORD field_0x70C; /* 0x710 */ bool mPointerVisible; /* 0x711 */ bool mPrevPointerVisible; - /* 0x712 */ bool field_0x712; + /* 0x712 */ bool mForceNoNav; }; // Size 0x4C @@ -591,6 +607,22 @@ private: ROOMTYPE_MAX = 6, }; + enum MapEvent_e { + MAP_EVENT_NONE = 0, + MAP_EVENT_1 = 1, + // ??? + MAP_EVENT_SW_BANK_SMALL = 2, + MAP_EVENT_MAP_INTRO = 3, + MAP_EVENT_DUNGEON_MAP_GET = 4, + MAP_EVENT_FIELD_MAP_CHANGE_5 = 5, + MAP_EVENT_FOREST_MAP_CHANGE = 6, + MAP_EVENT_SIGNAL_ADD = 7, + MAP_EVENT_FIELD_MAP_CHANGE_8 = 8, + MAP_EVENT_GODDESS_CUBE = 9, + MAP_EVENT_SAVE_OBJ_MSG_WINDOW = 10, + MAP_EVENT_11 = 11, + }; + dLytMapGlobal_c *getGlobal(); void checkScroll(); bool needsNav(s32 mapMode) const; @@ -601,6 +633,7 @@ private: bool canCenterCursor(s32 mapMode) const; bool canCenterCursor1(s32 mapMode) const; bool canPlaceBeacons(s32 mapMode) const; + bool canChangeFloor(s32 mapMode) const; bool isPointingAtMainMap() const; void loadStageProperties(); @@ -621,6 +654,7 @@ private: void fn_80138D80(); void fn_801431E0(); void fn_8013AD50(); + void fn_80143360(); bool shouldDrawFootprints() const; void zoomIn(); @@ -646,12 +680,17 @@ private: dAcTbox_c *findGoddessChestForStoryflag(s32 flag) const; bool checkStoryflag(s32 flag) const; void displaySaveObjs(); + bool isPaneVisible(nw4r::lyt::Pane *pane) const; + void setSaveObjsVisible(bool visible); + void setSaveObjPanePtrs(); + void initSaveObjs(); static dMapSavedData sSavedMapData; static const dMapSavedData sDefaultMapData; bool isSomeFieldEq0Or1Or7Or9Or11() const { - return field_0x8C94 == 0 || field_0x8C94 == 1 || field_0x8C94 == 7 || field_0x8C94 == 9 || field_0x8C94 == 11; + return mMapEvent == MAP_EVENT_NONE || mMapEvent == MAP_EVENT_1 || mMapEvent == MAP_EVENT_SIGNAL_ADD || + mMapEvent == MAP_EVENT_GODDESS_CUBE || mMapEvent == MAP_EVENT_11; } /* 0x0010 */ UI_STATE_MGR_DECLARE(dLytMapMain_c); @@ -676,12 +715,12 @@ private: /* 0x8210 */ nw4r::lyt::Pane *mpNoroshiPane; /* 0x8214 */ nw4r::lyt::Pane *mpScaleFramePane; /* 0x8218 */ dWindow_c *mpWakuWindow; - /* 0x821C */ nw4r::lyt::Bounding *field_0x821C[10]; - /* 0x8244 */ nw4r::lyt::Bounding *field_0x8244[6]; - /* 0x825C */ nw4r::lyt::Bounding *field_0x825C[12]; + /* 0x821C */ nw4r::lyt::Bounding *mpSaveObjBoundingsFaron[10]; + /* 0x8244 */ nw4r::lyt::Bounding *mpSaveObjBoundingsEldin[6]; + /* 0x825C */ nw4r::lyt::Bounding *mpSaveObjBoundingsLanayru[12]; /* 0x828C */ mVec3_c field_0x828C[12]; - /* 0x831C */ UNKWORD field_0x831C; - /* 0x8320 */ u32 field_0x8320; + /* 0x831C */ nw4r::lyt::Bounding **mpCurrentSaveObjBoundings; + /* 0x8320 */ u32 mNumSaveObjs; /* 0x8324 */ u8 _0x8324[0x8328 - 0x8324]; @@ -732,8 +771,8 @@ private: /* 0x8C91 */ bool mNextMapUpDirection; /* 0x8C92 */ bool mMapUpDirectionAfterZoomToDetail; /* 0x8C93 */ u8 field_0x8C93; - /* 0x8C94 */ s32 field_0x8C94; - /* 0x8C98 */ UNKWORD field_0x8C98; + /* 0x8C94 */ s32 mMapEvent; + /* 0x8C98 */ s32 mNextMapEvent; /* 0x8C9C */ s32 mSurfaceProvince; /* 0x8CA0 */ u8 _0x8CA0[0x8CA4 - 0x8CA0]; @@ -847,12 +886,14 @@ public: void build(); bool isSomeMapFieldEq2Or4Or5Or6() const { - return mMapMain.field_0x8C94 == 2 || mMapMain.field_0x8C94 == 4 || mMapMain.field_0x8C94 == 5 || - mMapMain.field_0x8C94 == 6; + return mMapMain.mMapEvent == dLytMapMain_c::MAP_EVENT_SW_BANK_SMALL || + mMapMain.mMapEvent == dLytMapMain_c::MAP_EVENT_DUNGEON_MAP_GET || + mMapMain.mMapEvent == dLytMapMain_c::MAP_EVENT_FIELD_MAP_CHANGE_5 || + mMapMain.mMapEvent == dLytMapMain_c::MAP_EVENT_FOREST_MAP_CHANGE; } bool isSomeMapFieldEq10() const { - return mMapMain.field_0x8C94 == 10; + return mMapMain.mMapEvent == dLytMapMain_c::MAP_EVENT_SAVE_OBJ_MSG_WINDOW; } void lightPillarRelated(s32 p1, s32 p2, s32 p3) { diff --git a/include/d/lyt/d_lyt_map_capture.h b/include/d/lyt/d_lyt_map_capture.h index 6fe457d1..fd44a144 100644 --- a/include/d/lyt/d_lyt_map_capture.h +++ b/include/d/lyt/d_lyt_map_capture.h @@ -26,11 +26,12 @@ public: void renderRequest() { mRenderRequest = true; } - + void setPicture(nw4r::lyt::Picture *pic) { mpPicture = pic; } - + + void execute(); bool isBusyRendering() const; private: diff --git a/include/d/lyt/d_lyt_map_global.h b/include/d/lyt/d_lyt_map_global.h index ba74cf78..fddf7bcc 100644 --- a/include/d/lyt/d_lyt_map_global.h +++ b/include/d/lyt/d_lyt_map_global.h @@ -96,10 +96,18 @@ public: return mCurrentMapMode; } + void setCurrentMapMode(s32 mode) { + mCurrentMapMode = mode; + } + s32 getNextMapMode() const { return mNextMapMode; } + void setNextMapMode(s32 mode) { + mNextMapMode = mode; + } + f32 getZoomFrame() const { return mZoomFrame; } @@ -112,6 +120,10 @@ public: field_0x58 = v; } + f32 getField_0x58() const { + return field_0x58; + } + f32 getField_0x44() const { return field_0x44; } @@ -140,6 +152,10 @@ public: return field_0x4D; } + void setField_0x4D(u8 v) { + field_0x4D = v; + } + u8 getField_0x4F() const { return field_0x4F; } diff --git a/src/d/lyt/d_lyt_map.cpp b/src/d/lyt/d_lyt_map.cpp index b9c7107d..76acf752 100644 --- a/src/d/lyt/d_lyt_map.cpp +++ b/src/d/lyt/d_lyt_map.cpp @@ -1,6 +1,6 @@ +#include "c/c_math.h" +#include "m/m_pad.h" #define NEED_DIRECT_FRAMECTRL_ACCESS -#include "d/lyt/d_lyt_map.h" - #include "c/c_lib.h" #include "common.h" #include "d/a/d_a_player.h" @@ -23,6 +23,7 @@ #include "d/flag/storyflag_manager.h" #include "d/lyt/d2d.h" #include "d/lyt/d_lyt_control_game.h" +#include "d/lyt/d_lyt_map.h" #include "d/lyt/d_lyt_map_global.h" #include "d/lyt/d_lyt_unknowns.h" #include "d/lyt/d_textbox.h" @@ -184,7 +185,7 @@ dLytMapFootPrints_c::dLytMapFootPrints_c(dLytMapGlobal_c *global) mCurrentNumSteps(0), field_0x198(0.0f), field_0x19C(0.0f), - field_0x1A0(0) { + mVisible(false) { for (int i = 0; i < (int)ARRAY_LENGTH(mFootprintPositions); i++) { mFootprintPositions[i].set(0.0f, 0.0f); } @@ -259,7 +260,7 @@ bool dLytMapFootPrints_c::execute() { } void dLytMapFootPrints_c::draw() { - if (!field_0x1A0) { + if (!mVisible) { return; } @@ -766,7 +767,7 @@ void dLytMapPinIconAggregate_c::unsetAll() { } } -s32 dLytMapPinIconAggregate_c::getNumSetPins() const { +u32 dLytMapPinIconAggregate_c::getNumSetPins() const { s32 num = 0; for (int idx = 0; idx < (int)ARRAY_LENGTH(mPins); idx++) { if (mPins[idx].mIsSet) { @@ -1164,7 +1165,7 @@ bool dLytMapFloorBtnMgr_c::execute() { void dLytMapFloorBtnMgr_c::checkPointedAtBtn() { mPrevPointerVisible = mPointerVisible; mPointerVisible = dPadNav::isPointerVisible(); - if (field_0x712) { + if (mForceNoNav) { dPadNav::stopFSStickNav(); mPointerVisible = true; } @@ -1914,8 +1915,8 @@ dLytMapMain_c::dLytMapMain_c() mAreaGroup(0), mMapUpDirectionAfterZoomToDetail(true), field_0x8C93(0), - field_0x8C94(0), - field_0x8C98(0), + mMapEvent(MAP_EVENT_NONE), + mNextMapEvent(MAP_EVENT_NONE), field_0x8CAC(0), field_0x8D38(0.0f, 0.0f), field_0x8D40(1.0f), @@ -2173,13 +2174,15 @@ static const d2d::LytBrlanMapping sMapMainBrlanMap[] = { #define MAP_MAIN_ANIM_SUN_ROTE 45 #define MAP_MAIN_ANIM_IN_NO_CAM 46 #define MAP_MAIN_ANIM_OUT_NO_CAM 47 -#define MAP_MAIN_ANIM_CLOUD_LOOK 48 +#define MAP_MAIN_ANIM_CLOUD_LOOP 48 #define MAP_MAIN_ANIM_LIGHT_LOOP 49 #define MAP_MAIN_ANIM_NUSHI_LOOP 50 #define MAP_MAIN_ANIM_TYPE 51 #define MAP_MAIN_ANIM_KUMO_PATTERN 52 #define MAP_MAIN_ANIM_TITE_LINE 53 +#define MAP_MAIN_NUM_ANIMS 54 + static const char *sGroupName = "G_ref_00"; static const char *sBoundingNames[] = { @@ -2229,8 +2232,7 @@ void dLytMapMain_c::build() { mLyt.build("map_00.brlyt", nullptr); getGlobal()->setField_0x28(mLyt.getDrawInfo().GetLocationAdjustScale()); - // TODO define - for (int i = 0; i < 54; i++) { + for (int i = 0; i < MAP_MAIN_NUM_ANIMS; i++) { mAnmGroups[i].init(sMapMainBrlanMap[i].mFile, resAcc, mLyt.getLayout(), sMapMainBrlanMap[i].mName); } @@ -2262,11 +2264,11 @@ void dLytMapMain_c::build() { b->SetVisible(false); // TODO - bird statues if (i >= 5 && i < 15) { - field_0x821C[i - 5] = b; + mpSaveObjBoundingsFaron[i - 5] = b; } else if (i >= 15 && i < 21) { - field_0x8244[i - 15] = b; + mpSaveObjBoundingsEldin[i - 15] = b; } else if (i >= 21 && i < 33) { - field_0x825C[i - 21] = b; + mpSaveObjBoundingsLanayru[i - 21] = b; } mHitChecks[i].init(b, 0x02, 2, 0); @@ -2398,7 +2400,7 @@ void dLytMapMain_c::loadStageProperties() { void dLytMapMain_c::setupStage() { loadStageProperties(); - if (field_0x8C94 == 10) { + if (mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { mLyt.findPane("N_skyloft_00")->SetVisible(false); } @@ -2466,18 +2468,223 @@ void dLytMapMain_c::setupStage() { if (mRoomType == ROOMTYPE_BOSS_HOUSE || mRoomType == ROOMTYPE_SKYFIELD_INTERIOR) { mLyt.findPane("N_houkoul_00")->SetVisible(false); } - if (field_0x8C94 != 10) { + if (mMapEvent != MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { loadTextboxes(); } fn_8013AD50(); } void dLytMapMain_c::remove() { - // TODO - ... + for (int i = 0; i < (int)ARRAY_LENGTH(mHitChecks); i++) { + dCsMgr_c::GetInstance()->unregistCursorTarget(&mHitChecks[i]); + } + + for (d2d::SubPaneList::Iterator it = mSubpaneList.GetBeginIter(); it != mSubpaneList.GetEndIter(); ++it) { + d2d::dSubPane *subPane = it->mpLytPane; + if (subPane != nullptr) { + nw4r::lyt::Pane *parent = subPane->getPane()->GetParent(); + parent->RemoveChild(subPane->getPane()); + } + } + mPopupInfo.remove(); + mSavePopup.remove(); + mSaveCaption.remove(); + for (int i = 0; i < (int)ARRAY_LENGTH(mSaveObjs); i++) { + mSaveObjs[i].remove(); + } + mFloorBtnMgr.remove(); + mFootPrints.remove(); + mMarkers.remove(); + mPinIconAggregate.remove(); + mPutIcon.remove(); + for (int i = 0; i < MAP_MAIN_NUM_ANIMS; i++) { + mAnmGroups[i].remove(); + } + dStage_c::GetInstance()->fn_801B3F30(); } void dLytMapMain_c::execute() { - // TODO - ... + if ((*mStateMgr.getStateID() == StateID_Invisible)) { + return; + } + + if ((*mStateMgr.getStateID() == StateID_RenderingWait)) { + mStateMgr.executeState(); + mMapCapture.execute(); + return; + } + + field_0xF1C.field_0x05 = 0; + dLytMapGlobal_c *global = getGlobal(); + mDrawScaleFrame = false; + mPointerOnMap = false; + mPointerCanPlaceBeacon = false; + checkCursorPointedAtMap(); + + if (dPad::getDownTrigDown() && canCenterCursor(mCurrentMapMode) && canCenterCursor(mNextMapMode)) { + dPad::ex_c::getInstance()->centerCursor(mPad::getCurrentCoreID(), true); + } + + if (mRoomType == ROOMTYPE_DUNGEON && mCurrentMapMode == dLytMapGlobal_c::MAPMODE_ZOOM) { + mFloorBtnMgr.setForceNoNav(true); + } else { + mFloorBtnMgr.setForceNoNav(false); + } + + mFloorBtnMgr.checkPointedAtBtn(); + mStateMgr.executeState(); + if (*mStateMgr.getStateID() != StateID_ResetPosWithFloorChange) { + mFloorBtnMgr.execute(); + } + + s32 beaconId = -1; + field_0x8DBD = false; + if (canCenterCursor1(mCurrentMapMode) && canCenterCursor1(mNextMapMode) && canPlaceBeacons(mCurrentMapMode) && + canPlaceBeacons(mNextMapMode)) { + bool exhaustedPins = mPinIconAggregate.getNumSetPins() >= getMaxBeaconCount(); + if (!exhaustedPins && mPointerCanPlaceBeacon && + *mPinIconAggregate.mStateMgr.getStateID() != dLytMapPinIconAggregate_c::StateID_Select && + isPointingAtMainMap()) { + mPinIconAggregate.findNewBeaconId(&beaconId); + if (beaconId >= 0) { + field_0x8DBD = true; + } + } + } + + if (field_0x8DBD) { + mPutIcon.setPosition(dCsGame_c::GetInstance()->getCursorIf()->getCursorPos()); + mPutIcon.setScale(1.0f); + mPutIcon.setVisible(true); + } else { + mPutIcon.setVisible(false); + } + + static SizedWString<0x20> buf; + buf.sprintf(L"%ld", (mDisplayedBeaconCount - mPinIconAggregate.getNumSetPins()) % 10); + mpNumberTextBox->setTextWithGlobalTextProcessor(buf, nullptr); + mpNumberTextBoxS->setTextWithGlobalTextProcessor(buf, nullptr); + + if (canChangeFloor(mCurrentMapMode) && canChangeFloor(mNextMapMode)) { + const sStateIDIf_c *state = mStateMgr.getStateID(); + if (*state != StateID_FloorChange && *state != StateID_RenderingWait && + *state != StateID_ResetPosWithFloorChange) { + mMapCapture.renderRequest(); + } + } + + mMapCapture.execute(); + fn_80143360(); + global->setCurrentMapMode(mCurrentMapMode); + global->setNextMapMode(mNextMapMode); + mFootPrints.setVisible(shouldDrawFootprints()); + + f32 f1 = 1.0f; + if (mRoomType != ROOMTYPE_BOSS_HOUSE && mRoomType != ROOMTYPE_SKYFIELD_INTERIOR) { + // why does everyone clamp things differently ??? + f32 tmp = global->getField_0x58(); + if (tmp < 0.0f) { + tmp = 0.0f; + } else if (tmp > 1.0f) { + tmp = 1.0f; + } + f1 = tmp; + } + f32 f2 = fn_80142D90(dLytMapGlobal_c::MAPMODE_ZOOM); + if (mRoomType == ROOMTYPE_BOSS_HOUSE || mRoomType == ROOMTYPE_SKYFIELD_INTERIOR) { + f2 = fn_80142D90(dLytMapGlobal_c::MAPMODE_STAGE); + } + mFootPrints.setField_0x198(f2); + mFootPrints.setField_0x19C(f1); + mFootPrints.execute(); + setCursorType(); + + if (canCenterCursor1(mCurrentMapMode) && canCenterCursor1(mNextMapMode) && + (field_0x8D5C < 2 || !mFloorBtnMgr.hasPointedAtABtnIdx())) { + global->setField_0x4D(1); + } else { + global->setField_0x4D(0); + } + + if (mMapEvent == MAP_EVENT_DUNGEON_MAP_GET || mMapEvent == MAP_EVENT_FIELD_MAP_CHANGE_5 || + mMapEvent == MAP_EVENT_FOREST_MAP_CHANGE || mMapEvent == MAP_EVENT_SW_BANK_SMALL) { + clearButtonMessages(); + } else { + setButtonMessages(mCurrentMapMode, mMapUpDirection, mNextMapMode, mNextMapUpDirection); + } + + if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD_SKY && mAnmGroups[MAP_MAIN_ANIM_SUN_ROTE].isBound()) { + mAnmGroups[MAP_MAIN_ANIM_SUN_ROTE].play(); + } + + if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD || mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD_SKY || + mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE) { + if (mAnmGroups[MAP_MAIN_ANIM_LIGHT_LOOP].isBound()) { + mAnmGroups[MAP_MAIN_ANIM_LIGHT_LOOP].play(); + } + mAnmGroups[MAP_MAIN_ANIM_SKYLOFT_UP_DOWN].play(); + } + + switch (mCurrentMapMode) { + case dLytMapGlobal_c::MAPMODE_PROVINCE: { + if (mpRegionPane1 != nullptr) { + mpRegionPane1->SetVisible(true); + } + if (mpRegionPane2 != nullptr) { + mpRegionPane2->SetVisible(true); + } + + if (mAnmGroups[MAP_MAIN_ANIM_LINK_POSITION_LIGHT].isBound()) { + mAnmGroups[MAP_MAIN_ANIM_LINK_POSITION_LIGHT].play(); + } + break; + } + case dLytMapGlobal_c::MAPMODE_WORLD: { + if (mpRegionPane1 != nullptr) { + mpRegionPane1->SetVisible(false); + } + if (mpRegionPane2 != nullptr) { + mpRegionPane2->SetVisible(false); + } + break; + } + } + + if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE || mCurrentMapMode == dLytMapGlobal_c::MAPMODE_WORLD_SKY) { + if (mAnmGroups[MAP_MAIN_ANIM_CLOUD_LOOP].isBound()) { + mAnmGroups[MAP_MAIN_ANIM_CLOUD_LOOP].play(); + } + if (mAnmGroups[MAP_MAIN_ANIM_NUSHI_LOOP].isBound()) { + mAnmGroups[MAP_MAIN_ANIM_NUSHI_LOOP].play(); + } + } + + if (mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { + bool visible = + mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE || mNextMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE; + setSaveObjsVisible(visible); + mPopupInfo.executeState_Invisible(); + } + mSaveCaption.execute(); + mPutIcon.execute(); + + mLyt.calc(); + + u8 alpha = 0; + if (mpAllPane->IsVisible()) { + alpha = mpAllPane->GetAlpha(); + } + global->setAlpha(alpha); + fn_80143300(); + mPinIconAggregate.setScale(global->getZoomFrame()); + mMarkers.execute(); + + if (mNextMapEvent == MAP_EVENT_FIELD_MAP_CHANGE_5 || mNextMapEvent == MAP_EVENT_FIELD_MAP_CHANGE_8) { + mStateMgr.changeState(StateID_EventFieldMapChange_Step1); + mMapEvent = mNextMapEvent; + mNextMapEvent = 0; + } + mMaxBeaconCount = 0; } void dLytMapMain_c::draw() { @@ -2497,7 +2704,8 @@ void dLytMapMain_c::draw() { mMarkers.draw(); } - if (mRoomType != ROOMTYPE_BOSS_HOUSE && mRoomType != ROOMTYPE_SKYFIELD_INTERIOR && field_0x8C94 != 2) { + if (mRoomType != ROOMTYPE_BOSS_HOUSE && mRoomType != ROOMTYPE_SKYFIELD_INTERIOR && + mMapEvent != MAP_EVENT_SW_BANK_SMALL) { mPinIconAggregate.draw(); } @@ -2513,13 +2721,13 @@ void dLytMapMain_c::draw() { mpScaleFramePane->SetVisible(mDrawScaleFrame ? true : false); mLyt.getLayout()->GetRootPane()->Draw(mLyt.getDrawInfo()); if ((mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE || mNextMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE) && - field_0x8C94 == 10) { + mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { fn_80138D80(); } fn_80143120(-2); mMarkers.drawPopups(); mPutIcon.draw(); - if (field_0x8C94 == 10) { + if (mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { mPopupInfo.draw(); } @@ -2566,9 +2774,66 @@ s32 dLytMapMain_c::getSelectedSaveObjIdx() const { return idx; } -void lytMapusesSizedWString() { - static SizedWString<0x20> sString; - sString.sprintf(L"%ld", 0); +bool dLytMapMain_c::isPaneVisible(nw4r::lyt::Pane *pane) const { + bool ret = true; + while (pane != nullptr) { + if (!pane->IsVisible() || pane->GetAlpha() == 0) { + ret = false; + break; + } + pane = pane->GetParent(); + } + return ret; +} + +void dLytMapMain_c::setSaveObjsVisible(bool visible) { + nw4r::lyt::Pane *p; + nw4r::lyt::Bounding **ptrs = mpCurrentSaveObjBoundings; + for (int i = 0; i < mNumSaveObjs; i++) { + p = ptrs[i]; + if (visible) { + // This makes like no sense - the isPaneVisible check ensures + // that the pane is already visible when we enter the branch... + if (p != nullptr && p != nullptr && isPaneVisible(p)) { + p->SetVisible(true); + } + } else { + p->SetVisible(false); + } + } +} + +void dLytMapMain_c::setSaveObjPanePtrs() { + nw4r::lyt::Bounding **p = nullptr; + u32 count = 0; + if (mSurfaceProvince == SURFACE_PROVINCE_FARON) { + p = mpSaveObjBoundingsFaron; + count = ARRAY_LENGTH(mpSaveObjBoundingsFaron); + } else if (mSurfaceProvince == SURFACE_PROVINCE_ELDIN) { + p = mpSaveObjBoundingsEldin; + count = ARRAY_LENGTH(mpSaveObjBoundingsEldin); + } else if (mSurfaceProvince == SURFACE_PROVINCE_LANAYRU) { + p = mpSaveObjBoundingsLanayru; + count = ARRAY_LENGTH(mpSaveObjBoundingsLanayru); + } + mNumSaveObjs = count; + mpCurrentSaveObjBoundings = p; + mSavePopup.set(mpCurrentSaveObjBoundings, mNumSaveObjs); +} + +void dLytMapMain_c::initSaveObjs() { + nw4r::lyt::Bounding **ptrs = mpCurrentSaveObjBoundings; + nw4r::lyt::Bounding *p; + for (u32 i = 0; i < mNumSaveObjs; i++) { + p = *ptrs; + if (p->IsVisible()) { + mVec3_c pos(p->GetGlobalMtx()._03, p->GetGlobalMtx()._13, 0.0f); + mSaveObjs[i].setPosition(pos); + mSaveObjs[i].setAlpha(p->GetGlobalAlpha()); + mSaveObjs[i].draw(); + } + ptrs++; + } } void dLytMapMain_c::saveUnkMapData() { @@ -2787,7 +3052,7 @@ void dLytMapMain_c::setButtonMessages( void dLytMapMain_c::setCursorType() { if (canCenterCursor1(mCurrentMapMode) && canCenterCursor1(mNextMapMode)) { - if ((field_0x8C94 == 10 || + if ((mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW || ((mRoomType == ROOMTYPE_BOSS_HOUSE || mRoomType == ROOMTYPE_DUNGEON) && mPointerOnMap)) || (mPointerCanPlaceBeacon && isPointingAtMainMap()) || (*mPinIconAggregate.mStateMgr.getStateID() == dLytMapPinIconAggregate_c::StateID_Select) || @@ -2948,7 +3213,7 @@ static const char *sAreaPicNamesLink[] = { #define MAP_MAIN_NUM_AREA_PICS 12 void dLytMapMain_c::setupFlags() { - if (field_0x8C94 == 4 || field_0x8C94 == 6) { + if (mMapEvent == MAP_EVENT_DUNGEON_MAP_GET || mMapEvent == MAP_EVENT_FOREST_MAP_CHANGE) { field_0x8DBE = 0; } else { field_0x8DBE = -1; @@ -3060,7 +3325,7 @@ void dLytMapMain_c::setupFlags() { } } - if (field_0x8C94 == 3) { + if (mMapEvent == MAP_EVENT_MAP_INTRO) { if (field_0x88AC < 0) { field_0x88AC = 0; } @@ -3152,7 +3417,7 @@ void dLytMapMain_c::setupFlags() { } mAnmGroups[MAP_MAIN_ANIM_SKYLOFT_UP_DOWN].bind(false); - mAnmGroups[MAP_MAIN_ANIM_CLOUD_LOOK].bind(false); + mAnmGroups[MAP_MAIN_ANIM_CLOUD_LOOP].bind(false); mAnmGroups[MAP_MAIN_ANIM_LIGHT_LOOP].bind(false); if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_STAGE || mCurrentMapMode == dLytMapGlobal_c::MAPMODE_ZOOM) { @@ -3181,7 +3446,7 @@ void dLytMapMain_c::setupFlags() { mAnmGroups[MAP_MAIN_ANIM_ROTATE].setToEnd(); } - if (field_0x8C94 == 2) { + if (mMapEvent == MAP_EVENT_SW_BANK_SMALL) { mAnmGroups[MAP_MAIN_ANIM_N_ON_OFF].bind(false); mAnmGroups[MAP_MAIN_ANIM_N_ON_OFF].setToEnd(); } else { @@ -3266,12 +3531,16 @@ void dLytMapMain_c::setupFlags() { } void dLytMapMain_c::initializeState_In() {} -void dLytMapMain_c::executeState_In() {} +void dLytMapMain_c::executeState_In() { + field_0x8DBF = 1; + dLytMapGlobal_c *global = getGlobal(); + // TODO this should explain most of mMapEvent +} void dLytMapMain_c::finalizeState_In() {} s32 dLytMapMain_c::getAreaGroup(s32 stifArea) const { s32 ret = AREAGROUP_MAX; - if (field_0x8C94 == 10) { + if (mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { switch (mSurfaceProvince) { case SURFACE_PROVINCE_FARON: ret = AREAGROUP_FARON; break; case SURFACE_PROVINCE_ELDIN: ret = AREAGROUP_ELDIN; break; @@ -3300,7 +3569,7 @@ s32 dLytMapMain_c::getAreaGroup(s32 stifArea) const { s32 dLytMapMain_c::getRoomType() const { s32 ret = ROOMTYPE_FIELD; s32 stifRoomType = dStageMgr_c::GetInstance()->getSTIFRoomType(); - if (field_0x8C94 == 10) { + if (mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { ret = ROOMTYPE_FIELD; } @@ -3598,12 +3867,12 @@ void dLytMapMain_c::executeState_Active() { if (mPointerOnMap && (field_0x8D5C < 2 || !mFloorBtnMgr.hasPointedAtABtnIdx())) { // Can zoom in around cursor, use the cursor pos getGlobal()->unprojectFromMap(field_0x8CF4, dCsGame_c::GetInstance()->getCursorIf()->getCursorPos()); - f32 tmp = fn_80142D90(4); + f32 tmp = fn_80142D90(dLytMapGlobal_c::MAPMODE_STAGE); fn_8013FB70(field_0x8CF4, getGlobal()->getField_0x44() / tmp); mDrawScaleFrame = true; } else { // Cannot zoom in around cursor, use the player pos - f32 tmp = fn_80142D90(4); + f32 tmp = fn_80142D90(dLytMapGlobal_c::MAPMODE_STAGE); f32 val = getGlobal()->getField_0x44() / tmp; fn_8013FB70(getGlobal()->getPlayerPos(), val); mDrawScaleFrame = true; @@ -3666,11 +3935,11 @@ void dLytMapMain_c::finalizeState_Active() { } void dLytMapMain_c::initializeState_Out() { - if (field_0x8C94 == 10) { + if (mMapEvent == MAP_EVENT_SAVE_OBJ_MSG_WINDOW) { mPopupInfo.mStateMgr.changeState(StateID_Out); } dLytMeter_c::GetInstance()->setMeterField_0x13750(0); - if (field_0x8CAD || field_0x8C94 == 3) { + if (field_0x8CAD || mMapEvent == MAP_EVENT_MAP_INTRO) { mpOutAnmGroup = &mAnmGroups[MAP_MAIN_ANIM_OUT]; } else { mpOutAnmGroup = &mAnmGroups[MAP_MAIN_ANIM_OUT_NO_CAM]; @@ -3720,7 +3989,7 @@ void dLytMapMain_c::initializeState_ChgMapUpDirection() { mNextMapUpDirection = !mMapUpDirection; field_0x8D44 = getGlobal()->getMapRotation(); - if (field_0x8C94 == 3) { + if (mMapEvent == MAP_EVENT_MAP_INTRO) { field_0x8D46 = dAcPy_c::GetLink()->mRotation.y + mAng(0x8000); mNextMapUpDirection = false; } else { @@ -3740,7 +4009,7 @@ void dLytMapMain_c::initializeState_ChgMapUpDirection() { dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_CHANGE_DIRECT); } void dLytMapMain_c::executeState_ChgMapUpDirection() { - if (field_0x8C94 == 3 && field_0x8D6A) { + if (mMapEvent == MAP_EVENT_MAP_INTRO && field_0x8D6A) { fn_80140B90(); } else { dLytMapGlobal_c *global = getGlobal(); @@ -3757,7 +4026,7 @@ void dLytMapMain_c::executeState_ChgMapUpDirection() { if (field_0x8C70 >= sHio.field_0x1B) { mLyt.calc(); mMapUpDirection = mNextMapUpDirection; - if (field_0x8C94 == 3) { + if (mMapEvent == MAP_EVENT_MAP_INTRO) { mStateMgr.changeState(StateID_EventMapIntro_Step4); } else { mStateMgr.changeState(StateID_Active); @@ -3766,7 +4035,7 @@ void dLytMapMain_c::executeState_ChgMapUpDirection() { field_0x8C70++; } - if (field_0x8C94 == 3) { + if (mMapEvent == MAP_EVENT_MAP_INTRO) { EventManager::execute(); } } @@ -3780,7 +4049,7 @@ void dLytMapMain_c::initializeState_ChgDispAreaMode_MapRot() { field_0x8D44 = global->getMapRotation(); field_0x8D4C = fn_80142D90(mNextMapMode); - if (field_0x8C94 == 3) { + if (mMapEvent == MAP_EVENT_MAP_INTRO) { field_0x8D46 = dAcPy_c::GetLink()->mRotation.y + mAng(0x8000); mNextMapUpDirection = false; } else { @@ -3849,7 +4118,7 @@ void dLytMapMain_c::initializeState_ChgDispAreaMode_MapRot() { } } void dLytMapMain_c::executeState_ChgDispAreaMode_MapRot() { - if (field_0x8C94 == 3 && field_0x8D6A) { + if (mMapEvent == MAP_EVENT_MAP_INTRO && field_0x8D6A) { fn_80140B90(); } else { dLytMapGlobal_c *global = getGlobal(); @@ -3898,7 +4167,7 @@ void dLytMapMain_c::executeState_ChgDispAreaMode_MapRot() { mAnmGroups[MAP_MAIN_ANIM_ROTATE].setFrame(length - f3 * length); if (field_0x8C70 >= sHio.field_0x1C) { - if (field_0x8C94 == 3 && field_0x0108 > 0) { + if (mMapEvent == MAP_EVENT_MAP_INTRO && field_0x0108 > 0) { field_0x0108--; } else { mDrawScaleFrame = false; @@ -3915,7 +4184,7 @@ void dLytMapMain_c::executeState_ChgDispAreaMode_MapRot() { global->setField_0x44(field_0x8D4C); global->setMapScroll(mPlayerPos); - if (field_0x8C94 == 3) { + if (mMapEvent == MAP_EVENT_MAP_INTRO) { mStateMgr.changeState(StateID_EventMapIntro_Step4); } else { mStateMgr.changeState(StateID_Active); @@ -3925,7 +4194,7 @@ void dLytMapMain_c::executeState_ChgDispAreaMode_MapRot() { } else { field_0x8C70++; } - if (field_0x8C94 == 3) { + if (mMapEvent == MAP_EVENT_MAP_INTRO) { EventManager::execute(); } } @@ -4219,7 +4488,7 @@ void dLytMapMain_c::initializeState_EventFieldMapChange_Step3() { void dLytMapMain_c::executeState_EventFieldMapChange_Step3() { if (mEventTimer != 0) { mEventTimer--; - } else if (field_0x8C94 == 8) { + } else if (mMapEvent == MAP_EVENT_FIELD_MAP_CHANGE_8) { mStateMgr.changeState(StateID_Active); } else { mStateMgr.changeState(StateID_EventFieldMapChange_Step4); @@ -4321,7 +4590,7 @@ void dLytMapMain_c::executeState_EventSignalAdd_Step3() { void dLytMapMain_c::finalizeState_EventSignalAdd_Step3() {} bool dLytMapMain_c::fn_80141530() const { - return EventManager::isInEvent() && field_0x8C94 != 11; + return EventManager::isInEvent() && mMapEvent != MAP_EVENT_11; } dAcTbox_c *dLytMapMain_c::findGoddessChestForStoryflag(s32 flag) const { @@ -4447,22 +4716,22 @@ static const dLytMapSaveObjFlagDefinition sSaveObjFlagsLanayru[] = { }; void dLytMapMain_c::displaySaveObjs() { - for (int i = 0; i < field_0x8320; i++) { + for (int i = 0; i < mNumSaveObjs; i++) { mSaveObjs[i].init(); } s32 numFlags = ARRAY_LENGTH(sSaveObjFlagsFaron); - nw4r::lyt::Bounding **pBoundings = field_0x821C; + nw4r::lyt::Bounding **pBoundings = mpSaveObjBoundingsFaron; const dLytMapSaveObjFlagDefinition *flagSet = sSaveObjFlagsFaron; switch (mSurfaceProvince) { case SURFACE_PROVINCE_ELDIN: { - pBoundings = field_0x8244; + pBoundings = mpSaveObjBoundingsEldin; flagSet = sSaveObjFlagsEldin; numFlags = ARRAY_LENGTH(sSaveObjFlagsEldin); break; } case SURFACE_PROVINCE_LANAYRU: { - pBoundings = field_0x825C; + pBoundings = mpSaveObjBoundingsLanayru; flagSet = sSaveObjFlagsLanayru; numFlags = ARRAY_LENGTH(sSaveObjFlagsLanayru); break; @@ -4508,13 +4777,13 @@ void dLytMapMain_c::executeState_EventSaveObjSelect() { s32 currentSelected = getSelectedSaveObjIdx(); bool anyDecide = false; - for (int i = 0; i < field_0x8320; i++) { + for (int i = 0; i < mNumSaveObjs; i++) { if (mSaveObjs[i].mStateMgr.isState(dLytMapSaveObj_c::StateID_Decide)) { anyDecide = true; } } - for (int i = 0; i < field_0x8320; i++) { + for (int i = 0; i < mNumSaveObjs; i++) { mSaveObjs[i].mSelectRequest = false; if (currentSelected == i && !anyDecide) { mSaveObjs[i].mSelectRequest = true; @@ -4541,7 +4810,7 @@ void dLytMapMain_c::executeState_EventSaveObjSelect() { bool found = false; s32 statueIdx = 0; - for (int i = 0; i < field_0x8320; i++) { + for (int i = 0; i < mNumSaveObjs; i++) { if (mSaveObjs[i].mDecideFinished) { found = true; statueIdx = i; @@ -4645,7 +4914,7 @@ void dLytMapMain_c::executeState_EventSaveObjConfirmMsgWindow() { dBase_c::s_DrawControlFlags &= ~dBase_c::BASE_PROP_0x10; s32 idx = 0; s32 statueIdx = -1; - for (int i = 0; i < field_0x8320; i++) { + for (int i = 0; i < mNumSaveObjs; i++) { if (mSaveObjs[i].mDecideFinished) { statueIdx = i; break; @@ -4663,7 +4932,7 @@ void dLytMapMain_c::executeState_EventSaveObjConfirmMsgWindow() { mSaveCaption.mStateMgr.changeState(dLytMapSaveCaption_c::StateID_Out); } else { // cancel - for (int i = 0; i < field_0x8320; i++) { + for (int i = 0; i < mNumSaveObjs; i++) { mSaveObjs[i].init(); } mStateMgr.changeState(StateID_EventSaveObjSelect);