diff options
| author | robojumper <robojumper@gmail.com> | 2025-10-02 23:56:16 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2025-10-02 23:56:16 +0200 |
| commit | d26b0af2ce4043d22d104b9d64b1538eca8a0caf (patch) | |
| tree | 81f25ed2b5d0a7d477744fdb0b111be745f45074 /src/d/lyt/d_lyt_map.cpp | |
| parent | cf6bc521bde2c4f01944a4eacb7896f380c3402c (diff) | |
more map
Diffstat (limited to 'src/d/lyt/d_lyt_map.cpp')
| -rw-r--r-- | src/d/lyt/d_lyt_map.cpp | 575 |
1 files changed, 561 insertions, 14 deletions
diff --git a/src/d/lyt/d_lyt_map.cpp b/src/d/lyt/d_lyt_map.cpp index f9690327..0f5d0079 100644 --- a/src/d/lyt/d_lyt_map.cpp +++ b/src/d/lyt/d_lyt_map.cpp @@ -11,6 +11,8 @@ #include "d/d_pad_nav.h" #include "d/d_player.h" #include "d/d_rumble.h" +#include "d/d_sc_game.h" +#include "d/d_stage.h" #include "d/lyt/d2d.h" #include "d/lyt/d_lyt_control_game.h" #include "d/lyt/d_lyt_map_global.h" @@ -21,10 +23,10 @@ #include "egg/core/eggColorFader.h" #include "m/m_vec.h" #include "m/m_video.h" -#include "nw4r/g3d/g3d_obj.h" #include "nw4r/lyt/lyt_bounding.h" +#include "nw4r/lyt/lyt_group.h" #include "nw4r/lyt/lyt_pane.h" -#include "nw4r/lyt/lyt_window.h" +#include "nw4r/lyt/lyt_types.h" #include "s/s_StateInterfaces.hpp" #include "sized_string.h" #include "toBeSorted/arc_managers/layout_arc_manager.h" @@ -1548,7 +1550,7 @@ void dLytMapSavePopup_c::draw() { pBounding = mpStatueBoundings[i]; mAnmGroups[MAP_SAVE_POPUP_ACTION_ANIM_INPUT].bind(false); mAnmGroups[MAP_SAVE_POPUP_ACTION_ANIM_INPUT].setFrame(30.0f); - const dMapSaveDefinition *def = dLytMap_c::GetInstance()->getSaveDefinition(i); + const dMapSaveObjDefinition *def = dLytMap_c::GetInstance()->getSaveObjDefinition(i); f32 width = setStatueLabel(def->statueLabel); f32 allScaleX = mLyt.findPane("N_all_00")->GetScale().x; @@ -1600,7 +1602,7 @@ f32 dLytMapSavePopup_c::setStatueLabel(const char *label) { textBox->GetLineWidth(nullptr); textBox = mLyt.getTextBox(sTPopup); textBox->setMessageWithGlobalTextProcessor2(label, nullptr); - + dWindow_c *w = mLyt.getWindow(sBg); w->UpdateSize(textBox, 60.0f); return w->GetSize().width; @@ -1610,48 +1612,297 @@ void dLytMapSavePopup_c::hide(s32 statueIdx) { mActions[statueIdx].hide(); } +#define MAP_SAVE_CAPTION_ANIM_TYPE 0 +#define MAP_SAVE_CAPTION_ANIM_TEXTLINE 1 +#define MAP_SAVE_CAPTION_ANIM_IN 2 +#define MAP_SAVE_CAPTION_ANIM_LOOP 3 +#define MAP_SAVE_CAPTION_ANIM_OUT 4 + +#define MAP_SAVE_CAPTION_NUM_ANIMS 5 + void dLytMapSaveCaption_c::initializeState_Invisible() {} void dLytMapSaveCaption_c::executeState_Invisible() {} void dLytMapSaveCaption_c::finalizeState_Invisible() {} -void dLytMapSaveCaption_c::initializeState_In() {} -void dLytMapSaveCaption_c::executeState_In() {} +void dLytMapSaveCaption_c::initializeState_In() { + mAnmGroups[MAP_SAVE_CAPTION_ANIM_IN].bind(false); + mAnmGroups[MAP_SAVE_CAPTION_ANIM_IN].setFrame(0.0f); + mAnmGroups[MAP_SAVE_CAPTION_ANIM_LOOP].bind(false); + mAnmGroups[MAP_SAVE_CAPTION_ANIM_LOOP].setFrame(0.0f); + + mLyt.getLayout()->Animate(0); + mLyt.calc(); + + mAnmGroups[MAP_SAVE_CAPTION_ANIM_LOOP].unbind(); +} +void dLytMapSaveCaption_c::executeState_In() { + if (mAnmGroups[MAP_SAVE_CAPTION_ANIM_IN].isEndReached()) { + mAnmGroups[MAP_SAVE_CAPTION_ANIM_LOOP].bind(false); + mLyt.calc(); + mAnmGroups[MAP_SAVE_CAPTION_ANIM_IN].unbind(); + mStateMgr.changeState(StateID_In); + } +} void dLytMapSaveCaption_c::finalizeState_In() {} void dLytMapSaveCaption_c::initializeState_Wait() {} void dLytMapSaveCaption_c::executeState_Wait() {} void dLytMapSaveCaption_c::finalizeState_Wait() {} -void dLytMapSaveCaption_c::initializeState_Out() {} -void dLytMapSaveCaption_c::executeState_Out() {} +void dLytMapSaveCaption_c::initializeState_Out() { + mAnmGroups[MAP_SAVE_CAPTION_ANIM_OUT].bind(false); + mAnmGroups[MAP_SAVE_CAPTION_ANIM_OUT].setFrame(0.0f); +} +void dLytMapSaveCaption_c::executeState_Out() { + if (mAnmGroups[MAP_SAVE_CAPTION_ANIM_OUT].isEndReached()) { + mLyt.calc(); + mAnmGroups[MAP_SAVE_CAPTION_ANIM_OUT].unbind(); + mAnmGroups[MAP_SAVE_CAPTION_ANIM_LOOP].unbind(); + mStateMgr.changeState(StateID_Invisible); + } +} void dLytMapSaveCaption_c::finalizeState_Out() {} +static const d2d::LytBrlanMapping sMapSaveCaptionBrlanMap[] = { + { "mapSaveCaption_00_type.brlan", "G_type_00"}, + {"mapSaveCaption_00_textLine.brlan", "G_textLine_00"}, + { "mapSaveCaption_00_in.brlan", "G__inOut_00"}, + { "mapSaveCaption_00_loop.brlan", "G_loop_00"}, + { "mapSaveCaption_00_out.brlan", "G__inOut_00"}, +}; + +void dLytMapSaveCaption_c::build(d2d::ResAccIf_c *resAcc) { + mLyt.setResAcc(resAcc); + mLyt.build("mapSaveCaption_00.brlyt", nullptr); + for (int i = 0; i < MAP_SAVE_CAPTION_NUM_ANIMS; i++) { + mAnmGroups[i].init( + sMapSaveCaptionBrlanMap[i].mFile, resAcc, mLyt.getLayout(), sMapSaveCaptionBrlanMap[i].mName + ); + } + + mStateMgr.changeState(StateID_Invisible); +} + +void dLytMapSaveCaption_c::remove() { + for (int i = 0; i < MAP_SAVE_CAPTION_NUM_ANIMS; i++) { + mAnmGroups[i].remove(); + } +} + +void dLytMapSaveCaption_c::execute() { + mStateMgr.executeState(); + for (int i = 0; i < MAP_SAVE_CAPTION_NUM_ANIMS; i++) { + if (mAnmGroups[i].isBound()) { + mAnmGroups[i].play(); + } + } + mLyt.calc(); +} + +void dLytMapSaveCaption_c::draw() { + if (*mStateMgr.getStateID() != StateID_Invisible) { + mLyt.draw(); + } +} + +void dLytMapSaveCaption_c::setType(s32 type) { + mAnmGroups[MAP_SAVE_CAPTION_ANIM_TYPE].bind(false); + mAnmGroups[MAP_SAVE_CAPTION_ANIM_TYPE].setFrame(type); + + mLyt.getLayout()->Animate(0); + mLyt.calc(); + + mAnmGroups[MAP_SAVE_CAPTION_ANIM_TYPE].unbind(); +} + +void dLytMapSaveCaption_c::setLabel(const char *label) { + mLyt.getTextBox("T_captionS_00")->setMessageWithGlobalTextProcessor2(label, nullptr); + mLyt.getTextBox("T_caption_00")->setMessageWithGlobalTextProcessor2(label, nullptr); + // ok + const char *tmp = "T_captionS_00"; + dTextBox_c *box = mLyt.getTextBox(tmp); + // Setting message twice... + box->setMessageWithGlobalTextProcessor2(label, nullptr); + + f32 width = box->GetLineWidth(nullptr); + const wchar_t *text = dMessage_c::getTextMessageByLabel(label, true, nullptr, 0); + s32 lines = box->calcTextLines(text, dMessage_c::getGlobalTagProcessor()); + + mAnmGroups[MAP_SAVE_CAPTION_ANIM_TEXTLINE].bind(false); + if (width < 226.0f) { + if (lines == 1) { + mAnmGroups[MAP_SAVE_CAPTION_ANIM_TEXTLINE].setFrame(0.0f); + } else { + mAnmGroups[MAP_SAVE_CAPTION_ANIM_TEXTLINE].setFrame(1.0f); + } + } else { + if (lines == 1) { + mAnmGroups[MAP_SAVE_CAPTION_ANIM_TEXTLINE].setFrame(2.0f); + } else { + mAnmGroups[MAP_SAVE_CAPTION_ANIM_TEXTLINE].setFrame(3.0f); + } + } + + mLyt.getLayout()->Animate(0); + mLyt.calc(); + mAnmGroups[MAP_SAVE_CAPTION_ANIM_TEXTLINE].unbind(); +} + +#define MAP_SAVE_OBJ_ANIM_ON_OFF 0 +#define MAP_SAVE_OBJ_ANIM_DECIDE 1 +#define MAP_SAVE_OBJ_ANIM_LOOP 2 + +#define MAP_SAVE_OBJ_NUM_ANIMS 3 + void dLytMapSaveObj_c::initializeState_Wait() {} -void dLytMapSaveObj_c::executeState_Wait() {} +void dLytMapSaveObj_c::executeState_Wait() { + if (mSelectRequest) { + mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].bind(false); + mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].setForward(); + mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].setFrame(0.0f); + mStateMgr.changeState(StateID_ToSelect); + } +} void dLytMapSaveObj_c::finalizeState_Wait() {} void dLytMapSaveObj_c::initializeState_ToSelect() {} -void dLytMapSaveObj_c::executeState_ToSelect() {} +void dLytMapSaveObj_c::executeState_ToSelect() { + if (mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].isEndReached()) { + dRumble_c::start(dRumble_c::sRumblePreset1, dRumble_c::FLAG_SLOT0); + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_POINT_START_POINT); + mLyt.calc(); + mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].unbind(); + mStateMgr.changeState(StateID_Select); + } + + if (mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].isBound()) { + mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].play(); + } +} void dLytMapSaveObj_c::finalizeState_ToSelect() {} void dLytMapSaveObj_c::initializeState_Select() {} -void dLytMapSaveObj_c::executeState_Select() {} +void dLytMapSaveObj_c::executeState_Select() { + if (!mSelectRequest) { + mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].bind(false); + mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].setBackward(); + mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].setToStart(); + mDecideRequest = false; + mStateMgr.changeState(StateID_ToWait); + } else if (mDecideRequest) { + dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_DECIDE_START_POINT); + mAnmGroups[MAP_SAVE_OBJ_ANIM_DECIDE].bind(false); + mAnmGroups[MAP_SAVE_OBJ_ANIM_DECIDE].setFrame(0.0f); + mStateMgr.changeState(StateID_Decide); + } +} void dLytMapSaveObj_c::finalizeState_Select() {} void dLytMapSaveObj_c::initializeState_ToWait() {} -void dLytMapSaveObj_c::executeState_ToWait() {} +void dLytMapSaveObj_c::executeState_ToWait() { + if (mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].isStop2()) { + mLyt.calc(); + mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].unbind(); + mStateMgr.changeState(StateID_Select); + } + + if (mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].isBound()) { + mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].play(); + } +} void dLytMapSaveObj_c::finalizeState_ToWait() {} void dLytMapSaveObj_c::initializeState_Decide() {} -void dLytMapSaveObj_c::executeState_Decide() {} +void dLytMapSaveObj_c::executeState_Decide() { + if (mAnmGroups[MAP_SAVE_OBJ_ANIM_DECIDE].isEndReached()) { + mLyt.calc(); + mAnmGroups[MAP_SAVE_OBJ_ANIM_DECIDE].unbind(); + mDecideFinished = true; + } + + if (mAnmGroups[MAP_SAVE_OBJ_ANIM_DECIDE].isBound()) { + mAnmGroups[MAP_SAVE_OBJ_ANIM_DECIDE].play(); + } +} void dLytMapSaveObj_c::finalizeState_Decide() {} +void dLytMapSaveObj_c::setPosition(const mVec3_c &position) { + mLyt.getLayout()->GetRootPane()->SetTranslate(position); +} + +void dLytMapSaveObj_c::setAlpha(u8 alpha) { + mLyt.getLayout()->GetRootPane()->SetAlpha(alpha); +} + +void dLytMapSaveObj_c::init() { + mSelectRequest = false; + mDecideRequest = false; + mDecideFinished = false; + mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].bind(false); + mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].setFrame(0.0f); + mLyt.calc(); + mAnmGroups[MAP_SAVE_OBJ_ANIM_ON_OFF].unbind(); + + mAnmGroups[MAP_SAVE_OBJ_ANIM_DECIDE].setFrame(0.0f); + mAnmGroups[MAP_SAVE_OBJ_ANIM_LOOP].bind(false); + + mStateMgr.changeState(StateID_Wait); +} + +static const d2d::LytBrlanMapping sMapSaveObjBrlanMap[] = { + { "mapSaveObj_00_saveObjOnOff.brlan", "G_saveBtn_00"}, + {"mapSaveObj_00_saveObjDecide.brlan", "G_saveBtn_00"}, + { "mapSaveObj_00_saveObjLoop.brlan", "G_saveBtnLoop_00"}, +}; + +void dLytMapSaveObj_c::build(d2d::ResAccIf_c *resAcc) { + mLyt.setResAcc(resAcc); + mLyt.build("mapSaveObj_00.brlyt", nullptr); + for (int i = 0; i < MAP_SAVE_OBJ_NUM_ANIMS; i++) { + mAnmGroups[i].init(sMapSaveObjBrlanMap[i].mFile, resAcc, mLyt.getLayout(), sMapSaveObjBrlanMap[i].mName); + } + + mLyt.getLayout()->GetRootPane()->SetInfluencedAlpha(true); + + mAnmGroups[MAP_SAVE_CAPTION_ANIM_IN].bind(false); + mAnmGroups[MAP_SAVE_CAPTION_ANIM_IN].setFrame(0.0f); + mLyt.calc(); + + mStateMgr.changeState(StateID_Wait); +} + +void dLytMapSaveObj_c::remove() { + for (int i = 0; i < MAP_SAVE_OBJ_NUM_ANIMS; i++) { + mAnmGroups[i].remove(); + } +} + +void dLytMapSaveObj_c::execute() { + mStateMgr.executeState(); + if (mAnmGroups[MAP_SAVE_OBJ_ANIM_LOOP].isBound()) { + mAnmGroups[MAP_SAVE_OBJ_ANIM_LOOP].play(); + } +} + +void dLytMapSaveObj_c::draw() { + nw4r::lyt::Pane *root = mLyt.getLayout()->GetRootPane(); + // @bug calc should be in execute... + mLyt.calc(); + root->Draw(mLyt.getDrawInfo()); +} + #pragma dont_inline on dLytMapMain_c::dLytMapMain_c() : mStateMgr(*this), mFlowMgr(&mFlow), mFloorBtnMgr(&mGlobal), mFootPrints(&mGlobal), + field_0x8C6C(0), + field_0x8C92(1), + field_0x8C93(0), + field_0x8C94(0), + field_0x8C98(0), + field_0x8CAC(0), field_0x8D38(0.0f, 0.0f), field_0x8D40(1.0f), field_0x8D44(0), @@ -1659,7 +1910,31 @@ dLytMapMain_c::dLytMapMain_c() field_0x8D48(0), field_0x8D4C(0.0f), field_0x8D50(0.0f), - field_0x8D68(0) {} + field_0x8D58(0), + field_0x8D5C(1), + field_0x8D60(0), + field_0x8D64(0), + field_0x8D68(0), + field_0x8D6A(0), + field_0x8D6B(0), + field_0x8D6C(0), + field_0x8D70(0), + field_0x8DB0(0), + mNavEnabled(false), + field_0x8DB5(false), + field_0x8DB8(0), + mIslandNamesOn(false), + field_0x8DBD(0), + field_0x8DBE(0), + field_0x8DBF(0), + field_0x8DC0(-1), + field_0x8DC4(0) { + field_0x8D78 = 0.0f; + field_0x8D7C = 0.0f; + field_0x8D80 = 0.0f; + field_0x8D84 = 0.0f; + field_0x8D88 = 0.0f; +} #pragma dont_inline reset dLytMapMain_c::~dLytMapMain_c() { @@ -1674,6 +1949,252 @@ dLytMapGlobal_c *dLytMapMain_c::getGlobal() { return &mGlobal; } +dMapSavedData dLytMapMain_c::sSavedMapData = { + { + {dLytMapGlobal_c::MAPMODE_STAGE, 1, 1, 0}, + {dLytMapGlobal_c::MAPMODE_STAGE, 1, 1, 0}, + {dLytMapGlobal_c::MAPMODE_STAGE, 1, 1, 0}, + {dLytMapGlobal_c::MAPMODE_STAGE, 1, 1, 0}, + {dLytMapGlobal_c::MAPMODE_STAGE, 1, 1, 0}, + {dLytMapGlobal_c::MAPMODE_STAGE, 1, 1, 0}, + }, + false +}; + +const dMapSavedData dLytMapMain_c::sDefaultMapData = { + { + {dLytMapGlobal_c::MAPMODE_STAGE, 1, 1, 0}, + {dLytMapGlobal_c::MAPMODE_STAGE, 1, 1, 0}, + {dLytMapGlobal_c::MAPMODE_STAGE, 1, 1, 0}, + {dLytMapGlobal_c::MAPMODE_STAGE, 1, 1, 0}, + {dLytMapGlobal_c::MAPMODE_STAGE, 1, 1, 0}, + {dLytMapGlobal_c::MAPMODE_STAGE, 1, 1, 0}, + }, + false +}; + +static const char *const sTextboxLabelMapping[][2] = { + { "T_sNameS_00", "MAP_00"}, + { "T_sName_00", "MAP_00"}, + { "T_pNameS_00", "MAP_01"}, + { "T_pName_00", "MAP_01"}, + { "T_pNameS_01", "MAP_01"}, + { "T_fNameS_00", "MAP_02"}, + { "T_fName_00", "MAP_02"}, + { "T_fNameS_01", "MAP_02"}, + { "T_nFnameS_00", "MAP_03"}, + { "T_nFname_00", "MAP_03"}, + { "T_nFnameS_01", "MAP_03"}, + { "T_lNameS_00", "MAP_04"}, + { "T_lName_00", "MAP_04"}, + { "T_lNameS_01", "MAP_04"}, + { "T_sVnameS_00", "MAP_05"}, + { "T_sVname_00", "MAP_05"}, + { "T_sVnameS_01", "MAP_05"}, + { "T_nVnameS_00", "MAP_06"}, + { "T_nVname_00", "MAP_06"}, + { "T_nVnameS_01", "MAP_06"}, + { "T_dNameS_01", "MAP_08"}, + { "T_dName_01", "MAP_08"}, + { "T_dNameS_00", "MAP_08"}, + { "T_dNameS_02", "MAP_07"}, + { "T_dName_02", "MAP_07"}, + { "T_dNameS_03", "MAP_07"}, + { "T_gNameS_01", "MAP_10"}, + { "T_gName_01", "MAP_10"}, + { "T_gNameS_04", "MAP_10"}, + { "T_gNameS_00", "MAP_09"}, + { "T_gName_00", "MAP_09"}, + { "T_gNameS_03", "MAP_09"}, + { "T_gNameS_02", "MAP_40"}, + { "T_gName_02", "MAP_40"}, + { "T_gNameS_05", "MAP_40"}, + { "T_lastDs_00", "MAP_17"}, + { "T_lastD_00", "MAP_17"}, + { "T_pampkinNS_00", "MAP_27"}, + { "T_pampkinN_00", "MAP_27"}, + { "T_teryNS_00", "MAP_28"}, + { "T_teryN_00", "MAP_28"}, + { "T_tikurinNS_00", "MAP_29"}, + { "T_tikurinN_00", "MAP_29"}, + { "T_musiNS_00", "MAP_31"}, + { "T_musiN_00", "MAP_31"}, + { "T_utaNS_00", "MAP_30"}, + { "T_utaN_00", "MAP_30"}, + { "T_ruretouNS_00", "MAP_26"}, + { "T_ruretouN_00", "MAP_26"}, + { "T_toForestS_00", "MAP_58"}, + { "T_toForest_00", "MAP_58"}, + {"T_toVolcanoS_00", "MAP_59"}, + { "T_toVolcano_00", "MAP_59"}, + { "T_toDesertS_00", "MAP_60"}, + { "T_toDesert_00", "MAP_60"}, + { "T_fD1s_00", "MAP_11"}, + { "T_fD1_00", "MAP_11"}, + { "T_fD2s_00", "MAP_14"}, + { "T_fD2_00", "MAP_14"}, + { "T_vD2s_00", "MAP_16"}, + { "T_vD2_00", "MAP_16"}, + { "T_vD1s_00", "MAP_12"}, + { "T_vD1_00", "MAP_12"}, + { "T_dD1s_00", "MAP_13"}, + { "T_dD1_00", "MAP_13"}, + { "T_dD2s_00", "MAP_15"}, + { "T_dD2_00", "MAP_15"}, + { "T_lastDs_00", "MAP_17"}, + { "T_lastD_00", "MAP_17"}, +}; + +static const char *sHyliasRealmMapLabel = "MAP_64"; + +void dLytMapMain_c::loadTextboxes() { + bool hyliasRealm = dScGame_c::isCurrentStage("F403") || dScGame_c::isCurrentStage("F404"); + for (int i = 0; i < (int)ARRAY_LENGTH(sTextboxLabelMapping); i++) { + dTextBox_c *box = mLyt.getTextBox(sTextboxLabelMapping[i][0]); + if (hyliasRealm && (i == 2 || i == 3 || i == 4)) { + // Replace "Sealed Grounds" with "Hylia's Realm" + box->setMessageWithGlobalTextProcessor2(sHyliasRealmMapLabel, nullptr); + } else { + box->setMessageWithGlobalTextProcessor2(sTextboxLabelMapping[i][1], nullptr); + } + } +} +static const d2d::LytBrlanMapping sMapMainBrlanMap[] = { + { "map_00_in.brlan", "G_inOut_00"}, + { "map_00_titleOnOff.brlan", "G_titleOnOff_00"}, + { "map_00_nOnOff.brlan", "G_nOnOff_00"}, + { "map_00_mapV.brlan", "G_mapV_00"}, + { "map_00_worldState.brlan", "G_worldState"}, + { "map_00_player2patten.brlan", "G_2Pattern_00"}, + { "map_00_rotate.brlan", "G_rotate_00"}, + { "map_00_out.brlan", "G_inOut_00"}, + { "map_00_mapDraw.brlan", "G_plainC_00"}, + { "map_00_mapDraw.brlan", "G_forestC_00"}, + { "map_00_mapDraw.brlan", "G_nForestC_00"}, + { "map_00_mapDraw.brlan", "G_sVolcanoC_00"}, + { "map_00_mapDraw.brlan", "G_mineC_00"}, + { "map_00_mapDraw.brlan", "G_desertC_00"}, + { "map_00_mapDraw.brlan", "G_lakeC_00"}, + { "map_00_mapDraw.brlan", "G_glenC_00"}, + { "map_00_mapDraw.brlan", "G_seaC_00"}, + { "map_00_mapDraw.brlan", "G_nVolcanoC_00"}, + { "map_00_mapDraw.brlan", "G_glenC_01"}, + { "map_00_skyLoftUpDown.brlan", "G_skyloftUD_00"}, + {"map_00_LinkPositionLight.brlan", "G_linkPointL_00"}, + { "map_00_mapZinForest.brlan", "G_ZoomInOut_00"}, + { "map_00_zoomWakuIn.brlan", "G_zoomWaku_00"}, + { "map_00_zoomWakuOut.brlan", "G_zoomWaku_00"}, + { "map_00_mapZoutForest.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZinPlant.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaOutPlant.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaInPlant.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZoutPlant.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZinDesert.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZoutDesert.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZinVolcano.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZoutVolcano.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaOutForest.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaOutDesert.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaOutVolcano.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaInForest.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaInDesert.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaInVolcano.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaInSkyMap.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaOutSkyMap.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaInSkyMap2.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaOutSkyMap2.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaInSkyCorse.brlan", "G_ZoomInOut_00"}, + { "map_00_mapZaOutSkyCorse.brlan", "G_ZoomInOut_00"}, + { "map_00_sunRote.brlan", "G_sun_00"}, + { "map_00_inNoCam.brlan", "G_inOut_00"}, + { "map_00_outNoCam.brlan", "G_inOut_00"}, + { "map_00_cloudLoop.brlan", "G_cloudLoop_00"}, + { "map_00_lightLoop.brlan", "G_lightLoop_00"}, + { "map_00_nushiLoop.brlan", "G_nushiLoop_00"}, + { "map_00_type.brlan", "G_type_00"}, + { "map_00_kumoPattern.brlan", "G_kumoPattern_00"}, + { "map_00_titleLine.brlan", "G_textLine_00"}, +}; + +#define MAP_MAIN_ANIM_IN 0 + +static const char *sGroupName = "G_ref_00"; + +static const char *sBoundingNames[] = { + "B_noroshi_00", "B_houkoul_00", "B_remoCon_00", "B_nunchaku_00", "B_tittle_00", "B_saveIcon_00", + "B_saveIcon_01", "B_saveIcon_02", "B_saveIcon_03", "B_saveIcon_04", "B_saveIcon_05", "B_saveIcon_06", + "B_saveIcon_07", "B_saveIcon_08", "B_saveIcon_28", "B_saveIcon_10", "B_saveIcon_11", "B_saveIcon_12", + "B_saveIcon_13", "B_saveIcon_14", "B_saveIcon_15", "B_saveIcon_16", "B_saveIcon_17", "B_saveIcon_18", + "B_saveIcon_19", "B_saveIcon_20", "B_saveIcon_21", "B_saveIcon_22", "B_saveIcon_23", "B_saveIcon_24", + "B_saveIcon_25", "B_saveIcon_26", "B_saveIcon_27", +}; + +void dLytMapMain_c::build() { + field_0x8DBF = 0; + field_0x8DB0 = 0; + if (dScGame_c::isCurrentStage("F102")) { + // awesome but unnecessary + field_0x8DB0 = 0; + } + + dStage_c::GetInstance()->fn_801B3F20(); + d2d::ResAccIf_c *resAcc = dLytMap_c::getResAcc(); + mLyt.setResAcc(resAcc); + mLyt.build("map_00.brlyt", nullptr); + mVec2_c scale = mLyt.getDrawInfo().GetLocationAdjustScale(); + getGlobal()->setField_0x28(scale); + + // TODO define + for (int i = 0; i < 54; i++) { + mAnmGroups[i].init(sMapMainBrlanMap[i].mFile, resAcc, mLyt.getLayout(), sMapMainBrlanMap[i].mName); + } + + mFloorBtnMgr.build(resAcc); + mSubpane.mpLytPane = &mFloorBtnMgr; + mSubpaneList.PushBack(&mSubpane); + + d2d::dSubPane::linkMeters(mLyt.getLayout()->GetGroupContainer()->FindGroupByName(sGroupName), &mSubpaneList); + mFootPrints.build(resAcc); + + mPinIconAggregate.build(resAcc); + mPutIcon.build(resAcc); + + for (int i = 0; i < (int)ARRAY_LENGTH(mSaveObjs); i++) { + mSaveObjs[i].build(resAcc); + } + + mSaveCaption.build(resAcc); + mSavePopup.build(resAcc); + mPopupInfo.build(resAcc); + + mAnmGroups[MAP_MAIN_ANIM_IN].bind(false); + mAnmGroups[MAP_MAIN_ANIM_IN].setToEnd(); + mLyt.calc(); + + for (int i = 0; i < (int)ARRAY_LENGTH(sBoundingNames); i++) { + nw4r::lyt::Bounding *b = mLyt.findBounding(sBoundingNames[i]); + b->SetVisible(false); + if (i >= 5 && i < 15) { + field_0x821C[i - 5] = b; + } else if (i >= 15 && i < 21) { + field_0x8244[i - 15] = b; + } else if (i >= 21 && i < 33) { + field_0x825C[i - 21] = b; + } + + field_0x832C[i].init(b, 0x02, 2, 0); + dCsMgr_c::GetInstance()->registCursorTarget(&field_0x832C[i]); + } + + for (int i = 0; i < (int)ARRAY_LENGTH(sBoundingNames); i++) { + field_0x832C[i].resetCachedHitboxes(); + field_0x832C[i].execute(); + } + + mpMapBounding = mLyt.findBounding("B_map_00"); + mpMapBounding->SetScale(mVec2_c(1.0f, 1.0f)); +} + void dLytMapMain_c::draw() {} void dLytMap_c::build() { @@ -1691,6 +2212,32 @@ void lytMapusesSizedWString() { sString.sprintf(L"%ld", 0); } +void dLytMapMain_c::saveUnkMapData() { + dMapSavedDataEntry &data = sSavedMapData.entries[field_0x8C68]; + data.field_0x06 = 1; + data.mapMode = field_0x8CA4; + data.mapUpDirection = field_0x8C90; + data.field_0x05 = field_0x8C92; + sSavedMapData.islandNamesOn = mIslandNamesOn; +} + +void dLytMapMain_c::initUnkMapData() { + for (int i = 0; i < 6; i++) { + sSavedMapData.entries[i].field_0x06 = sDefaultMapData.entries[i].field_0x06; + sSavedMapData.entries[i].mapMode = sDefaultMapData.entries[i].mapMode; + sSavedMapData.entries[i].mapUpDirection = sDefaultMapData.entries[i].mapUpDirection; + sSavedMapData.entries[i].field_0x05 = sDefaultMapData.entries[i].field_0x05; + } + sSavedMapData.islandNamesOn = sDefaultMapData.islandNamesOn; +} + +void dLytMapMain_c::loadUnkMapData() { + field_0x8CA4 = sSavedMapData.entries[field_0x8C68].mapMode; + field_0x8C90 = sSavedMapData.entries[field_0x8C68].mapUpDirection; + field_0x8C92 = sSavedMapData.entries[field_0x8C68].field_0x05; + mIslandNamesOn = sSavedMapData.islandNamesOn; +} + void dLytMapMain_c::initializeState_Invisible() {} void dLytMapMain_c::executeState_Invisible() {} void dLytMapMain_c::finalizeState_Invisible() {} |
