summaryrefslogtreecommitdiff
path: root/src/d
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-10-05 23:40:42 +0200
committerrobojumper <robojumper@gmail.com>2025-10-05 23:40:42 +0200
commitc46b2ba5e19651bb209cdf13578f8a671bf8cc09 (patch)
tree0c587a9084dbe6d7a089719372902bc4471fc58d /src/d
parentbaa508795496e8c13b5e8648d219f7f37b029fd6 (diff)
Scaffold markers
Diffstat (limited to 'src/d')
-rw-r--r--src/d/lyt/d_lyt_map.cpp78
-rw-r--r--src/d/lyt/d_lyt_map_markers.cpp819
2 files changed, 818 insertions, 79 deletions
diff --git a/src/d/lyt/d_lyt_map.cpp b/src/d/lyt/d_lyt_map.cpp
index 97380752..29f03e66 100644
--- a/src/d/lyt/d_lyt_map.cpp
+++ b/src/d/lyt/d_lyt_map.cpp
@@ -2296,7 +2296,7 @@ void dLytMapMain_c::build() {
}
mMarkers.setField_0x6F4(boundingPos2);
-
+
mPinIconAggregate.setUnk(&field_0xF1C);
mpPaneBgAll01 = mLyt.findPane("N_mapBgAll_01");
@@ -2344,17 +2344,19 @@ void dLytMapMain_c::draw() {
mFootPrints.draw();
}
- if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_STAGE || mCurrentMapMode == dLytMapGlobal_c::MAPMODE_ZOOM || mNextMapMode == dLytMapGlobal_c::MAPMODE_STAGE || mNextMapMode == dLytMapGlobal_c::MAPMODE_ZOOM) {
+ if (mCurrentMapMode == dLytMapGlobal_c::MAPMODE_STAGE || mCurrentMapMode == dLytMapGlobal_c::MAPMODE_ZOOM ||
+ mNextMapMode == dLytMapGlobal_c::MAPMODE_STAGE || mNextMapMode == dLytMapGlobal_c::MAPMODE_ZOOM) {
mMarkers.draw();
}
if (field_0x8C68 != 3 && field_0x8C68 != 5 && field_0x8C94 != 2) {
mPinIconAggregate.draw();
}
-
+
fn_80143120(0);
- if ((mCurrentMapMode == dLytMapGlobal_c::MAPMODE_STAGE || mCurrentMapMode == dLytMapGlobal_c::MAPMODE_ZOOM) && (mNextMapMode == dLytMapGlobal_c::MAPMODE_STAGE || mNextMapMode == dLytMapGlobal_c::MAPMODE_ZOOM)) {
+ if ((mCurrentMapMode == dLytMapGlobal_c::MAPMODE_STAGE || mCurrentMapMode == dLytMapGlobal_c::MAPMODE_ZOOM) &&
+ (mNextMapMode == dLytMapGlobal_c::MAPMODE_STAGE || mNextMapMode == dLytMapGlobal_c::MAPMODE_ZOOM)) {
mpZoomInOutPane->SetVisible(false);
} else {
mpZoomInOutPane->SetVisible(true);
@@ -2362,11 +2364,12 @@ void dLytMapMain_c::draw() {
mpScaleFlamePane->SetVisible(field_0x8DB5 ? true : false);
mLyt.getLayout()->GetRootPane()->Draw(mLyt.getDrawInfo());
- if ((mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE || mNextMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE) && field_0x8C94 == 10) {
+ if ((mCurrentMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE || mNextMapMode == dLytMapGlobal_c::MAPMODE_PROVINCE) &&
+ field_0x8C94 == 10) {
fn_80138D80();
}
fn_80143120(-2);
- mMarkers.fn_80189B90();
+ mMarkers.drawPopups();
mPutIcon.draw();
if (field_0x8C94 == 10) {
mPopupInfo.draw();
@@ -2844,23 +2847,68 @@ void dLytMapMain_c::executeState_ResetPos() {
}
void dLytMapMain_c::finalizeState_ResetPos() {}
-void dLytMapMain_c::initializeState_ResetPosWithFloorChange() {}
-void dLytMapMain_c::executeState_ResetPosWithFloorChange() {}
+void dLytMapMain_c::initializeState_ResetPosWithFloorChange() {
+ dPadNav::stopFSStickNav();
+ mMapCapture.renderRequest();
+}
+void dLytMapMain_c::executeState_ResetPosWithFloorChange() {
+ if (mMapCapture.isBusyRendering()) {
+ return;
+ }
+ dLytMapGlobal_c *global = getGlobal();
+ mVec3_c pos;
+ fn_80142F00(pos, mCurrentMapMode, mMapUpDirection, global->getMapRotationCenter(), global->getField_0x56());
+ if (global->getMapScroll().squareDistanceToXZ(pos) >= 1.0f) {
+ mStateMgr.changeState(StateID_ResetPos);
+ } else {
+ mStateMgr.changeState(StateID_Active);
+ }
+}
void dLytMapMain_c::finalizeState_ResetPosWithFloorChange() {}
-void dLytMapMain_c::initializeState_EventSwBankSmall_Step1() {}
-void dLytMapMain_c::executeState_EventSwBankSmall_Step1() {}
+void dLytMapMain_c::initializeState_EventSwBankSmall_Step1() {
+ field_0x8CB0 = sHio.field_0x1D;
+ field_0x8CB4 = 0;
+}
+void dLytMapMain_c::executeState_EventSwBankSmall_Step1() {
+ if (field_0x8CB0 != 0) {
+ field_0x8CB0--;
+ return;
+ }
+
+ mMarkers.setField_0x0703(1);
+ mStateMgr.changeState(StateID_EventSwBankSmall_Step2);
+}
void dLytMapMain_c::finalizeState_EventSwBankSmall_Step1() {}
-void dLytMapMain_c::initializeState_EventSwBankSmall_Step2() {}
-void dLytMapMain_c::executeState_EventSwBankSmall_Step2() {}
+void dLytMapMain_c::initializeState_EventSwBankSmall_Step2() {
+ field_0x8CB0 = mMarkers.getField_0x0704();
+}
+void dLytMapMain_c::executeState_EventSwBankSmall_Step2() {
+ if (field_0x8CB0 != 0) {
+ field_0x8CB0--;
+ return;
+ }
+ mStateMgr.changeState(StateID_EventSwBankSmall_Step3);
+}
void dLytMapMain_c::finalizeState_EventSwBankSmall_Step2() {}
-void dLytMapMain_c::initializeState_EventSwBankSmall_Step3() {}
-void dLytMapMain_c::executeState_EventSwBankSmall_Step3() {}
+void dLytMapMain_c::initializeState_EventSwBankSmall_Step3() {
+ field_0x8CB0 = sHio.field_0x1E;
+}
+void dLytMapMain_c::executeState_EventSwBankSmall_Step3() {
+ if (field_0x8CB0 != 0) {
+ field_0x8CB0--;
+ return;
+ }
+
+ field_0x8D6B = 1;
+}
void dLytMapMain_c::finalizeState_EventSwBankSmall_Step3() {}
-void dLytMapMain_c::initializeState_EventMapIntro_Step1() {}
+void dLytMapMain_c::initializeState_EventMapIntro_Step1() {
+ field_0x8CB0 = sHio.field_0x1F;
+}
void dLytMapMain_c::executeState_EventMapIntro_Step1() {}
void dLytMapMain_c::finalizeState_EventMapIntro_Step1() {}
diff --git a/src/d/lyt/d_lyt_map_markers.cpp b/src/d/lyt/d_lyt_map_markers.cpp
index 7c866d6b..41863ddf 100644
--- a/src/d/lyt/d_lyt_map_markers.cpp
+++ b/src/d/lyt/d_lyt_map_markers.cpp
@@ -2,24 +2,34 @@
#include "common.h"
#include "d/a/d_a_base.h"
+#include "d/a/d_a_item.h"
#include "d/a/d_a_player.h"
+#include "d/a/obj/d_a_obj_base.h"
+#include "d/a/obj/d_a_obj_save.h"
#include "d/a/obj/d_a_obj_tbox.h"
+#include "d/d_cs_base.h"
#include "d/d_cursor_hit_check.h"
+#include "d/d_gfx.h"
#include "d/d_message.h"
#include "d/d_player.h"
#include "d/d_player_act.h"
#include "d/d_sc_game.h"
#include "d/d_stage.h"
+#include "d/d_stage_mgr.h"
#include "d/flag/dungeonflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "d/lyt/d2d.h"
#include "d/lyt/d_lyt_map_global.h"
#include "d/lyt/d_window.h"
#include "d/snd/d_snd_small_effect_mgr.h"
+#include "f/f_base.h"
+#include "f/f_manager.h"
#include "m/m_vec.h"
#include "nw4r/lyt/lyt_bounding.h"
#include "nw4r/lyt/lyt_pane.h"
#include "nw4r/lyt/lyt_types.h"
+#include "sized_string.h"
+#include "toBeSorted/arc_managers/layout_arc_manager.h"
inline mVec3_c vec2ToVec3XY(const mVec2_c &v) {
return mVec3_c(v.x, v.y, 0.0f);
@@ -627,6 +637,8 @@ static const char *sMapIcon01BoundingNames[] = {
#define MAP_ICON_01_BOUNDING_MUSHI_00 57
#define MAP_ICON_01_BOUNDING_AREALIGHT_00 58
+#define MAP_ICON_01_BOUNDING_COMMONICON_LAST (MAP_ICON_01_BOUNDING_COMMONICON_29 + 1)
+
#define MAP_ICON_01_NUM_BOUNDINGS 59
static const char *sMapIcon01SpecialPaneNames[] = {
@@ -705,10 +717,15 @@ static const char *sMapIcon01SpecialPictureNames[] = {
#define MAP_ICON_01_NUM_SPECIAL_PICTURES 27
+static const char *sSaveObjPrefix = "SAVEOBJ_NAME_";
static const char *sTerryOnOff = "N_terryOnOff_00";
bool dLytMapIcon01_c::build(d2d::ResAccIf_c *resAcc) {
- // TODO - ...
+ field_0x1848 = 30;
+ mCurrentFloor = dLytMapGlobal_c::GetInstance()->getFloor();
+ field_0x0C83 = dLytMapGlobal_c::GetInstance()->getField_0x4F();
+ field_0x0C84 = dLytMapGlobal_c::GetInstance()->getField_0x4C();
+ mLastFloor = mCurrentFloor;
mpResAcc = resAcc;
mLyt.setResAcc(resAcc);
mLyt.build("mapIcon_01.brlyt", nullptr);
@@ -740,8 +757,8 @@ bool dLytMapIcon01_c::build(d2d::ResAccIf_c *resAcc) {
}
// TODO - why 56 and not 59
- for (int i = 0; i < 56; i++) {
- mUnk3[i].bounding = mpBoundings[i];
+ for (int i = 0; i < MAP_ICON_01_BOUNDING_COMMONICON_LAST; i++) {
+ mPopupConfigs[i].bounding = mpBoundings[i];
}
for (int i = 0; i < MAP_ICON_01_NUM_BOUNDINGS; i++) {
@@ -766,32 +783,32 @@ bool dLytMapIcon01_c::build(d2d::ResAccIf_c *resAcc) {
}
checkMapMode();
+ loadFlags();
for (int i = 0; i < (int)ARRAY_LENGTH(mIconAnims); i++) {
mIconAnims[i].cmdIndex = 100;
mIconAnims[i].frame = 0.0f;
mIconAnims[i].animIn = false;
mIconAnims[i].animOut = false;
- mIconAnims[i].idleVisible = false;
- mIconAnims[i].field_0x0B = 0;
mIconAnims[i].visible = false;
+ mIconAnims[i].prevVisible = false;
+ mIconAnims[i].render = false;
}
setupActorDrawCommands();
setupStageDrawCommands();
setupLinkDrawCommand();
-
if (field_0x0C70 == 1) {
setupTriforceDrawCommands();
}
if (field_0x0C70 == 4) {
- setupUnkDrawCommand();
+ setupCloudBigDrawCommand();
}
- // TODO - ...
-
- sortDrawCommands();
+ recordAnimVisState();
+ transitionAnims();
+ sortPanes();
mCsHitCheck.init(mLyt.getLayout()->GetRootPane(), 0x1, 0, 0);
dCsMgr_c::GetInstance()->registCursorTarget(&mCsHitCheck);
@@ -814,10 +831,52 @@ bool dLytMapIcon01_c::execute() {
mAnm[MAP_ICON_01_ANIM_TRES_OUT + i].setAnimEnable(false);
}
}
- mLyt.calc();
+ resetDrawCommands();
checkMapMode();
loadFlags();
+ mCurrentFloor = dLytMapGlobal_c::GetInstance()->getFloor();
+ field_0x0C83 = dLytMapGlobal_c::GetInstance()->getField_0x4F();
+ field_0x0C84 = dLytMapGlobal_c::GetInstance()->getField_0x4C();
+
+ updateScale();
+ setupActorDrawCommands();
+ setupStageDrawCommands();
+ setupLinkDrawCommand();
+ if (field_0x0C70 == 1) {
+ setupTriforceDrawCommands();
+ }
+
+ if (field_0x0C70 == 4) {
+ setupCloudBigDrawCommand();
+ }
+
+ for (int i = 0; i < MAP_ICON_01_NUM_ANIMS; i++) {
+ if (mAnm[i].isEnabled()) {
+ mAnm[i].play();
+ }
+ }
+
+ if (dLytMapGlobal_c::GetInstance()->getField_0x4D() && dLytMapGlobal_c::GetInstance()->getField_0x50() != 10) {
+ checkBoundingPointing();
+ }
+
+ mCsHitCheck.resetCachedHitboxes();
+ mCsHitCheck.execute();
+
+ transitionAnims();
+ recordAnimVisState();
+
+ if (!field_0x1844) {
+ field_0x1844 = true;
+ if (field_0x0C84 == 0) {
+ for (int i = 0; i < 50; i++) {
+ mIconAnims[i].animIn = false;
+ mIconAnims[i].animOut = false;
+ }
+ }
+ }
+
return true;
}
@@ -870,17 +929,17 @@ void dLytMapIcon01_c::draw() {
}
case MAP_ICON_01_PANE_AREALIGHT_00: {
if (field_0x0D48 != 100 && field_0x0D48 == cmd) {
- drawAreaLight(0, pane);
+ setAreaLight(0, pane);
} else if (field_0x0D49 != 100 && field_0x0D49 == cmd) {
- drawAreaLight(1, pane);
+ setAreaLight(1, pane);
} else if (field_0x0D4A != 100 && field_0x0D4A == cmd) {
- drawAreaLight(2, pane);
+ setAreaLight(2, pane);
}
break;
}
case MAP_ICON_01_PANE_SAVEICON_00: {
if (field_0x0D4B[cmd] != 100) {
- drawSaveObj(field_0x0D4B[cmd], pane);
+ setSaveObj(field_0x0D4B[cmd], pane);
}
break;
}
@@ -888,13 +947,13 @@ void dLytMapIcon01_c::draw() {
if (paneIdx == MAP_ICON_01_PANE_CLOUDBIG_000) {
if (dScGame_c::isCurrentStage("F020")) {
- if (field_0x0C81) {
- drawCloud(1, pane);
+ if (mThunderheadEntered) {
+ setCloud(1, pane);
} else {
- drawCloud(0, pane);
+ setCloud(0, pane);
}
} else if (dScGame_c::isCurrentStage("F023")) {
- drawCloud(2, pane);
+ setCloud(2, pane);
}
mVec3_c rotate(0.0f, 0.0f, (-mapRot).degree2());
pane->SetRotate(rotate);
@@ -914,15 +973,15 @@ void dLytMapIcon01_c::draw() {
if (found == true) {
if (field_0x0C84 && mIconAnims[i].animIn == true) {
if (field_0x1845 == 1) {
- mIconAnims[i].idleVisible = true;
+ mIconAnims[i].visible = true;
mIconAnims[i].animIn = true;
} else {
- mIconAnims[i].idleVisible = false;
+ mIconAnims[i].visible = false;
mIconAnims[i].animIn = false;
}
}
- if (field_0xD0C != field_0xD10) {
+ if (mCurrentFloor != mLastFloor) {
mIconAnims[i].animIn = false;
mIconAnims[i].animOut = false;
}
@@ -932,14 +991,14 @@ void dLytMapIcon01_c::draw() {
if (f <= field_0x1838) {
drawWithAnimIn(paneIdx, pane, f);
mIconAnims[i].frame += 1.0f;
- mIconAnims[i].visible = true;
+ mIconAnims[i].render = true;
if (!field_0x184C) {
dSndSmallEffectMgr_c::GetInstance()->playSound(SE_S_MAP_ICON_APPEAR);
field_0x184C = true;
}
} else {
mIconAnims[i].animIn = false;
- mIconAnims[i].visible = true;
+ mIconAnims[i].render = true;
field_0x184C = false;
}
} else if (mIconAnims[i].animOut) {
@@ -947,17 +1006,17 @@ void dLytMapIcon01_c::draw() {
if (f <= field_0x183C) {
drawWithAnimOut(paneIdx, pane, f);
mIconAnims[i].frame += 1.0f;
- mIconAnims[i].visible = true;
+ mIconAnims[i].render = true;
} else {
mIconAnims[i].animOut = false;
- mIconAnims[i].visible = true;
+ mIconAnims[i].render = true;
}
- } else if (mIconAnims[i].idleVisible) {
+ } else if (mIconAnims[i].visible) {
drawFullyIn(paneIdx, pane);
- mIconAnims[i].visible = true;
+ mIconAnims[i].render = true;
}
- if (mIconAnims[i].visible == true) {
+ if (mIconAnims[i].render == true) {
pane->SetAlpha(alpha);
pane->SetTranslate(vec2ToVec3XY(mCommands[cmd].position + field_0x0D40));
pane->Animate(0);
@@ -979,15 +1038,16 @@ void dLytMapIcon01_c::draw() {
mVec2_c v2(0.0f, 0.0f);
for (int i = 0; i < field_0x0E13; i++) {
- if (mUnk3[i + MAP_ICON_01_BOUNDING_COMMONICON_00].bounding->IsVisible()) {
- v2 = mUnk3[i + MAP_ICON_01_BOUNDING_COMMONICON_00].field_0x10;
- mUnk3[i + MAP_ICON_01_BOUNDING_COMMONICON_00].bounding->SetTranslate(vec2ToVec3XY(v2 + field_0x0D40));
- mUnk3[i + MAP_ICON_01_BOUNDING_COMMONICON_00].bounding->CalculateMtx(mLyt.getDrawInfo());
- mUnk3[i + MAP_ICON_01_BOUNDING_COMMONICON_00].bounding->Draw(mLyt.getDrawInfo());
+ if (mPopupConfigs[i + MAP_ICON_01_BOUNDING_COMMONICON_00].bounding->IsVisible()) {
+ v2 = mPopupConfigs[i + MAP_ICON_01_BOUNDING_COMMONICON_00].boundingPos;
+ mPopupConfigs[i + MAP_ICON_01_BOUNDING_COMMONICON_00].bounding->SetTranslate(vec2ToVec3XY(v2 + field_0x0D40)
+ );
+ mPopupConfigs[i + MAP_ICON_01_BOUNDING_COMMONICON_00].bounding->CalculateMtx(mLyt.getDrawInfo());
+ mPopupConfigs[i + MAP_ICON_01_BOUNDING_COMMONICON_00].bounding->Draw(mLyt.getDrawInfo());
}
}
- field_0xD10 = field_0xD0C;
+ mLastFloor = mCurrentFloor;
}
static const char *sMapPrefix = "MAP_";
@@ -1002,7 +1062,7 @@ void dLytMapIcon01_c::resetDrawCommands() {
field_0x0C85[i] = 0;
}
- field_0xD0C = 0;
+ mCurrentFloor = 0;
for (int i = 0; i < (int)ARRAY_LENGTH(mNumCommandsPerPass); i++) {
mNumCommandsPerPass[i] = 0;
@@ -1010,14 +1070,13 @@ void dLytMapIcon01_c::resetDrawCommands() {
mNumCommands = 0;
- for (int i = 0; i < (int)ARRAY_LENGTH(mUnk3); i++) {
- mUnk3[i].field_0x00 = 100;
- mUnk3[i].field_0x10.set(0.0f, 0.0f);
- mUnk3[i].field_0x08 = 0.0f;
- mUnk3[i].field_0x0C = 0.0f;
- mUnk3[i].field_0x18 = 0;
- mUnk3[i].field_0x19 = 0;
- mUnk3[i].field_0x1C = sMapPrefix;
+ for (int i = 0; i < (int)ARRAY_LENGTH(mPopupConfigs); i++) {
+ mPopupConfigs[i].cmdIdx = 100;
+ mPopupConfigs[i].boundingPos.set(0.0f, 0.0f);
+ mPopupConfigs[i].textPos.set(0.0f, 0.0f);
+ mPopupConfigs[i].pointedAt = false;
+ mPopupConfigs[i].objId = 0;
+ mPopupConfigs[i].labelPrefix = sMapPrefix;
}
field_0x0E13 = 0;
@@ -1030,29 +1089,48 @@ void dLytMapIcon01_c::resetDrawCommands() {
field_0x0D49 = 100;
field_0x0D4A = 100;
- field_0x0C74 = 0;
- field_0x0C75 = 0;
- field_0x0C76 = 0;
- field_0x0C77 = 0;
- field_0x0C78 = 0;
- field_0x0C79 = 0;
- field_0x0C7A = 0;
- field_0x0C7B = 0;
- field_0x0C7C = 0;
- field_0x0C7D = 0;
- field_0x0C7E = 0;
- field_0x0C7F = 0;
- field_0x0C80 = 0;
- field_0x0C81 = 0;
- field_0x0C82 = 0;
+ mFunFunIslandDiscovered = false;
+ mLumpyPumkpinDiscovered = false;
+ mBeedleIslandDiscovered = false;
+ mBambooIslandDiscovered = false;
+ mIsleOfSongsDiscovered = false;
+ mBugHavenDiscovered = false;
+ mBilocyteFightTriggered = false;
+ mFaronPillarOpened = false;
+ mFaronDiscovered = false;
+ mEldinPillarOpened = false;
+ mEldinDiscovered = false;
+ mLanayruPillarOpened = false;
+ mLanaryuDiscovered = false;
+ mThunderheadEntered = false;
+ mBeedleShopEntered = false;
for (int i = 0; i < (int)ARRAY_LENGTH(mIconAnims); i++) {
- mIconAnims[i].visible = 0;
+ mIconAnims[i].render = false;
}
mNumAnims = 0;
}
+void dLytMapIcon01_c::loadFlags() {
+ StoryflagManager *mgr = StoryflagManager::sInstance;
+ mFunFunIslandDiscovered = mgr->getCounterOrFlag(STORYFLAG_FUN_FUN_ISLAND_DISCOVERED);
+ mLumpyPumkpinDiscovered = mgr->getCounterOrFlag(STORYFLAG_LUMPY_PUMPKIN_DISCOVERED);
+ mBeedleIslandDiscovered = mgr->getCounterOrFlag(STORYFLAG_BEEDLE_ISLAND_DISCOVERED);
+ mBambooIslandDiscovered = mgr->getCounterOrFlag(STORYFLAG_BAMBOO_ISLAND_DISCOVERED);
+ mIsleOfSongsDiscovered = mgr->getCounterOrFlag(STORYFLAG_ISLE_OF_SONGS_DISCOVERED);
+ mBugHavenDiscovered = mgr->getCounterOrFlag(STORYFLAG_BUG_HAVEN_DISCOVERED);
+ mBilocyteFightTriggered = mgr->getCounterOrFlag(STORYFLAG_BILOCYCTE_FIGHT_TRIGGERED);
+ mFaronPillarOpened = mgr->getCounterOrFlag(STORYFLAG_FARON_PILLAR_OPENED);
+ mFaronDiscovered = mgr->getCounterOrFlag(STORYFLAG_FARON_DISCOVERED);
+ mEldinPillarOpened = mgr->getCounterOrFlag(STORYFLAG_ELDIN_PILLAR_OPENED);
+ mEldinDiscovered = mgr->getCounterOrFlag(STORYFLAG_ELDIN_DISCOVERED);
+ mLanayruPillarOpened = mgr->getCounterOrFlag(STORYFLAG_LANAYRU_PILLAR_OPENED);
+ mLanaryuDiscovered = mgr->getCounterOrFlag(STORYFLAG_LANAYRU_DISCOVERED);
+ mThunderheadEntered = mgr->getCounterOrFlag(STORYFLAG_THUNDERHEAD_ENTERED);
+ mBeedleShopEntered = mgr->getCounterOrFlag(STORYFLAG_BEEDLE_SHOP_ENTERED);
+}
+
void dLytMapIcon01_c::setLinkTunic(s32 type) {
f32 frame = 0.0f;
switch (type) {
@@ -1066,6 +1144,49 @@ void dLytMapIcon01_c::setLinkTunic(s32 type) {
mAnm[MAP_ICON_01_ANIM_PLAYER_2_PATTERN].setAnimEnable(false);
}
+void dLytMapIcon01_c::setAreaLight(u32 color, nw4r::lyt::Pane *pane) {
+ f32 frame = color;
+ mAnm[MAP_ICON_01_ANIM_AREA_COLOR].setAnimEnable(true);
+ mAnm[MAP_ICON_01_ANIM_AREA_COLOR].setFrame(frame);
+ pane->Animate(0);
+ mAnm[MAP_ICON_01_ANIM_AREA_COLOR].setAnimEnable(false);
+}
+
+void dLytMapIcon01_c::setCloud(u32 alpha, nw4r::lyt::Pane *pane) {
+ f32 frame = alpha;
+ mAnm[MAP_ICON_01_ANIM_CLOUD_ALPHA].setAnimEnable(true);
+ mAnm[MAP_ICON_01_ANIM_CLOUD_ALPHA].setFrame(frame);
+ pane->Animate(0);
+ mAnm[MAP_ICON_01_ANIM_CLOUD_ALPHA].setAnimEnable(false);
+}
+
+void dLytMapIcon01_c::setGoddessStatue(u32 present) {
+ f32 frame = 0.0f;
+ if (!present) {
+ frame = 1.0f;
+ }
+ mAnm[MAP_ICON_01_ANIM_GODDESS_ON_OFF].setFrame(frame);
+ mAnm[MAP_ICON_01_ANIM_GODDESS_ON_OFF].setAnimEnable(true);
+ mLyt.calc();
+ mAnm[MAP_ICON_01_ANIM_GODDESS_ON_OFF].setAnimEnable(false);
+}
+
+void dLytMapIcon01_c::setSaveObj(u32 color, nw4r::lyt::Pane *pane) {
+ f32 frame = color;
+ mAnm[MAP_ICON_01_ANIM_SAVE_OBJECT_COLOR].setAnimEnable(true);
+ mAnm[MAP_ICON_01_ANIM_SAVE_OBJECT_COLOR].setFrame(frame);
+ pane->Animate(0);
+ mAnm[MAP_ICON_01_ANIM_SAVE_OBJECT_COLOR].setAnimEnable(false);
+}
+
+void dLytMapIcon01_c::setTerry(bool present) {
+ // NONMATCHING
+ // Additional clrlwi here...
+ // When you fix this, maybe also fix other instances of this problem
+ // by searching for 91657b77
+ mpTerryOnOffPane->SetVisible(present);
+}
+
void dLytMapIcon01_c::drawWithAnimIn(u32 paneIdx, nw4r::lyt::Pane *pane, f32 frame) {
if (paneIdx == MAP_ICON_01_PANE_DOORKEY_00) {
paneIdx = MAP_ICON_01_PANE_DOOR_000;
@@ -1155,9 +1276,62 @@ void dLytMapIcon01_c::checkMapMode() {
}
}
+void dLytMapIcon01_c::setupActorDrawCommands() {
+ dAcBase_c *ac = nullptr;
+ while ((ac = static_cast<dAcBase_c *>(fManager_c::searchBaseByGroupType(fBase_c::ACTOR, ac))) != nullptr) {
+ if (field_0x0C70 == 4 && mBilocyteFightTriggered) {
+ setupNpcBNusiDrawCommand(ac);
+ }
+
+ if (field_0x0C70 == 1 && checkHasMap()) {
+ setupObjD3DummyDrawCommand(ac);
+ }
+
+ if (dScGame_c::currentSpawnInfo.getTimeOfDay() != SpawnInfo::NIGHT) {
+ setupObjTerryShopDrawCommand(ac);
+ }
+
+ setupTboxDrawCommand(ac);
+ setupObjShutterDrawCommand(ac);
+ setupObjDoorDrawCommand(ac);
+ setupObjSealedDoorDrawCommand(ac);
+ setupObjHarpHintDrawCommand(ac);
+
+ if (field_0x184D) {
+ setupNpcKenseiDrawCommand(ac);
+ }
+
+ setupNpcBeeDrawCommand(ac);
+ setupObjSaveDrawCommand(ac);
+ setupObjLightLineDrawCommand(ac);
+ setupObjRoAtTargetDrawCommand(ac);
+
+ if (mNumCommands >= 100) {
+ break;
+ }
+ }
+}
+
+void dLytMapIcon01_c::setupNpcKenseiDrawCommand(dAcBase_c *actor) {
+ if (mNumCommands < 100) {
+ if (actor->mProfileName == fProfile::NPC_KENSEI && !actor->checkActorProperty(dAcBase_c::AC_PROP_0x100) &&
+ mCurrentFloor == dStage_c::GetInstance()->getMapRelated()->fn_801B4F10(actor->mRoomID, actor->mPosition)) {
+ mVec2_c pos(0.0f, 0.0f);
+ projectOntoMap(actor->mPosition, pos);
+ mCommands[mNumCommands].passIdx = 18;
+ mCommands[mNumCommands].paneIdx = MAP_ICON_01_PANE_SWORD_00;
+ mCommands[mNumCommands].position.x = pos.x;
+ mCommands[mNumCommands].position.y = pos.y;
+
+ mNumCommandsPerPass[18]++;
+ mNumCommands++;
+ }
+ }
+}
+
void dLytMapIcon01_c::setupTboxDrawCommand(dAcBase_c *actor) {
if (actor->mProfileName == fProfile::TBOX && !actor->checkActorProperty(dAcBase_c::AC_PROP_0x100) &&
- field_0xD0C == dStage_c::GetInstance()->getMapRelated()->fn_801B4F10(actor->mRoomID, actor->mPosition)) {
+ mCurrentFloor == dStage_c::GetInstance()->getMapRelated()->fn_801B4F10(actor->mRoomID, actor->mPosition)) {
dAcTbox_c *box = static_cast<dAcTbox_c *>(actor);
if (box->getVariant() == dAcTbox_c::GODDESS) {
u16 flag = box->getParams2Lower();
@@ -1186,16 +1360,16 @@ void dLytMapIcon01_c::setupTboxDrawCommandClosed(dAcTbox_c *box) {
if (checkHasMap()) {
if (field_0x0C84) {
mIconAnims[mNumAnims].cmdIndex = mNumCommands;
- mIconAnims[mNumAnims].idleVisible = true;
+ mIconAnims[mNumAnims].visible = true;
mIconAnims[mNumAnims].animIn = true;
} else {
mIconAnims[mNumAnims].cmdIndex = mNumCommands;
- mIconAnims[mNumAnims].idleVisible = true;
+ mIconAnims[mNumAnims].visible = true;
mIconAnims[mNumAnims].animIn = false;
}
} else {
mIconAnims[mNumAnims].cmdIndex = mNumCommands;
- mIconAnims[mNumAnims].idleVisible = false;
+ mIconAnims[mNumAnims].visible = false;
}
mNumAnims++;
@@ -1231,3 +1405,520 @@ void dLytMapIcon01_c::setupTboxDrawCommandGoddessClosed(dAcTbox_c *box) {
mNumCommands++;
}
}
+
+void dLytMapIcon01_c::setupObjShutterDrawCommand(dAcBase_c *actor) {
+ // TODO - needs door classes
+}
+
+void dLytMapIcon01_c::setupObjDoorDrawCommand(dAcBase_c *actor) {
+ // TODO - needs door classes
+}
+
+void dLytMapIcon01_c::setupObjSaveDrawCommand(dAcBase_c *actor) {
+ if (mNumCommands < 100) {
+ if (actor->mProfileName == fProfile::OBJ_SAVE && !actor->checkActorProperty(dAcBase_c::AC_PROP_0x100) &&
+ mCurrentFloor == dStage_c::GetInstance()->getMapRelated()->fn_801B4F10(actor->mRoomID, actor->mPosition)) {
+ dAcOSave_c *save = static_cast<dAcOSave_c *>(actor);
+
+ bool b1 = false;
+ bool b2 = false;
+ bool activated = save->checkStatueFlag();
+ if (field_0x0C70 == 1) {
+ if (checkHasMap()) {
+ if (field_0x0C84) {
+ if (!activated) {
+ b1 = true;
+ b2 = true;
+ } else {
+ b1 = true;
+ }
+ } else {
+ b1 = true;
+ }
+ } else if (activated) {
+ b1 = true;
+ }
+ } else if (activated) {
+ b1 = true;
+ }
+
+ mVec2_c pos(0.0f, 0.0f);
+ projectOntoMap(actor->mPosition, pos);
+ mCommands[mNumCommands].passIdx = 9;
+ mCommands[mNumCommands].paneIdx = MAP_ICON_01_PANE_SAVEICON_00;
+ mCommands[mNumCommands].position.x = pos.x;
+ mCommands[mNumCommands].position.y = pos.y;
+
+ if (b1) {
+ if (save->getStatueType() == dAcOSave_c::TYPE_NORMAL) {
+ field_0x0D4B[mNumCommands] = 0;
+ } else if (save->getStatueType() == dAcOSave_c::TYPE_OVERWORLD) {
+ field_0x0D4B[mNumCommands] = 1;
+ } else if (save->getStatueType() == dAcOSave_c::TYPE_DUNGEON) {
+ field_0x0D4B[mNumCommands] = 2;
+ } else {
+ field_0x0D4B[mNumCommands] = 0;
+ }
+
+ if (b2) {
+ mIconAnims[mNumAnims].cmdIndex = mNumCommands;
+ mIconAnims[mNumAnims].visible = true;
+ mIconAnims[mNumAnims].animIn = true;
+ } else {
+ mIconAnims[mNumAnims].cmdIndex = mNumCommands;
+ mIconAnims[mNumAnims].visible = true;
+ mIconAnims[mNumAnims].animIn = false;
+ }
+ } else {
+ mIconAnims[mNumAnims].cmdIndex = mNumCommands;
+ mIconAnims[mNumAnims].visible = false;
+ mIconAnims[mNumAnims].animIn = false;
+ }
+
+ if (field_0x0C70 != 4 && mIconAnims[mNumAnims].visible == true &&
+ field_0x0E13 < MAP_ICON_01_BOUNDING_COMMONICON_LAST - MAP_ICON_01_BOUNDING_COMMONICON_00) {
+ s32 idx = field_0x0E13 + MAP_ICON_01_BOUNDING_COMMONICON_00;
+ u32 id = save->getStatueNameId();
+ mPopupConfigs[idx].cmdIdx = mNumCommands;
+ mPopupConfigs[idx].boundingPos.x = pos.x;
+ mPopupConfigs[idx].boundingPos.y = pos.y;
+ mPopupConfigs[idx].objId = id;
+ mPopupConfigs[idx].labelPrefix = sSaveObjPrefix;
+ nw4r::lyt::Bounding *b = mPopupConfigs[idx].bounding;
+ nw4r::lyt::Size bSize = mpBoundings[MAP_ICON_01_BOUNDING_SAVEICON_00]->GetSize();
+ b->SetSize(bSize);
+ mVec2_c textPos(0.0f, 0.0f);
+ fn_80181880(
+ mpSpecialPictures[MAP_ICON_01_SPECIAL_PICTURE_SAVEICON_01],
+ mpSpecialPanes[MAP_ICON_01_SPECIAL_PANE_SAVEICON_000], textPos
+ );
+
+ mPopupConfigs[idx].textPos.x = textPos.x;
+ mPopupConfigs[idx].textPos.y = textPos.y;
+ mPopupConfigs[idx].bounding->SetVisible(true);
+ field_0x0E13++;
+ }
+
+ mNumAnims++;
+ mNumCommandsPerPass[9]++;
+ mNumCommands++;
+ }
+ }
+}
+
+void dLytMapIcon01_c::setupObjLightLineDrawCommand(dAcBase_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupNpcBNusiDrawCommand(dAcBase_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupObjTerryShopDrawCommand(dAcBase_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupObjRoAtTargetDrawCommand(dAcBase_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupObjD3DummyDrawCommand(dAcBase_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupObjSealedDoorDrawCommand(dAcBase_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupObjHarpHintDrawCommand(dAcBase_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupNpcBeeDrawCommand(dAcBase_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupStageDrawCommands() {
+ dAcBase_c *ac = nullptr;
+ while ((ac = static_cast<dAcBase_c *>(fManager_c::searchBaseByGroupType(fBase_c::STAGE, ac))) != nullptr) {
+ setupTgMapMarkDrawCommand(ac);
+
+ if (dLytMapGlobal_c::GetInstance()->getField_0x54()) {
+ setupTgMapInstDrawCommand(ac);
+ }
+
+ setupTgForceGetFlagDrawCommand(ac);
+
+ if (field_0x184D) {
+ setupTgInsectDrawCommand(ac);
+ }
+
+ if (mNumCommands >= 100) {
+ break;
+ }
+ }
+}
+
+void dLytMapIcon01_c::setupTgMapMarkDrawCommand(dAcBase_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupTgMapMarkDrawCommand1(dTgMapMark_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupTgMapMarkDrawCommand2(dTgMapMark_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupTgMapInstDrawCommand(dAcBase_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupTgForceGetFlagDrawCommand(dAcBase_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupTgInsectDrawCommand(dAcBase_c *actor) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupLinkDrawCommand() {
+ if (dAcPy_c::GetLinkM() != nullptr) {
+ setupLinkDrawCommand1(dAcPy_c::GetLinkM());
+
+ if (dLytMapGlobal_c::GetInstance()->getField_0x50() != 3) {
+ setupLinkDrawCommand2();
+ }
+ }
+}
+
+void dLytMapIcon01_c::setupLinkDrawCommand1(dAcPy_c *ac) {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupLinkDrawCommand2() {
+ // TODO - ...
+}
+
+void dLytMapIcon01_c::setupCloudBigDrawCommand() {
+ if (mNumCommands < 100) {
+ mVec3_c thunderHeadPos(-135210.0f, 0.0f, -84790.0f);
+ mVec2_c pos(0.0f, 0.0f);
+ projectOntoMap(thunderHeadPos, pos);
+ mCommands[mNumCommands].passIdx = 31;
+ mCommands[mNumCommands].paneIdx = MAP_ICON_01_PANE_CLOUDBIG_000;
+ mCommands[mNumCommands].position.x = pos.x;
+ mCommands[mNumCommands].position.y = pos.y;
+
+ mNumCommandsPerPass[31]++;
+ mNumCommands++;
+ }
+}
+
+void dLytMapIcon01_c::setupTriforceDrawCommands() {
+ dAcObjBase_c *ac = nullptr;
+ while ((ac = dAcObjBase_c::getNextObject(&dAcItem_c::sItemList, ac)) != nullptr) {
+ if (static_cast<dAcItem_c *>(ac)->isTriforce() && !ac->checkActorProperty(dAcBase_c::AC_PROP_0x100) &&
+ mCurrentFloor == dStage_c::GetInstance()->getMapRelated()->fn_801B4F10(ac->mRoomID, ac->mPosition)) {
+ // @bug mNumCommands not checked?
+ mVec2_c pos(0.0f, 0.0f);
+ projectOntoMap(ac->mPosition, pos);
+ mCommands[mNumCommands].passIdx = 23;
+ mCommands[mNumCommands].paneIdx = MAP_ICON_01_PANE_TRIFORCE_00;
+ mCommands[mNumCommands].position.x = pos.x;
+ mCommands[mNumCommands].position.y = pos.y;
+
+ mNumCommandsPerPass[23]++;
+ mNumCommands++;
+ }
+ }
+}
+
+void dLytMapIcon01_c::fn_80181880(nw4r::lyt::Pane *a, nw4r::lyt::Pane *b, mVec2_c &result) const {
+ // TODO - maybe equivalent but floating point hell
+ // Ignoring the get16x9to4x3WidthScaleF stuff this basically does
+ // (a->translate + a->parent->translate) * b->scale + (Ex * a->size * a->scale * b->scale / 2.0f)
+ mVec2_c scaleA = a->GetScale();
+ mVec2_c scaleB = b->GetScale();
+
+ mVec3_c parentTranslateA = a->GetParent()->GetTranslate();
+ parentTranslateA.x /= dGfx_c::get16x9to4x3WidthScaleF();
+
+ mVec3_c translateA = a->GetTranslate();
+ translateA.x /= dGfx_c::get16x9to4x3WidthScaleF();
+ translateA.x += parentTranslateA.x;
+ translateA.x *= scaleB.x;
+ translateA.y += parentTranslateA.y;
+ translateA.y *= scaleB.y;
+
+ nw4r::lyt::Size sizeA = a->GetSize();
+ sizeA.width /= dGfx_c::get16x9to4x3WidthScaleF();
+ sizeA.width *= scaleA.x;
+ sizeA.width *= scaleB.x;
+ sizeA.height *= scaleA.y;
+ sizeA.height *= scaleB.y;
+
+ translateA.x += (sizeA.width / 2.0f);
+
+ result.x = translateA.x;
+ result.y = translateA.y;
+}
+
+void dLytMapIcon01_c::recordAnimVisState() {
+ for (int i = 0; i < mNumAnims; i++) {
+ mIconAnims[i].prevVisible = mIconAnims[i].visible;
+ }
+}
+
+void dLytMapIcon01_c::transitionAnims() {
+ for (int i = 0; i < mNumAnims; i++) {
+ if (mIconAnims[i].visible != mIconAnims[i].prevVisible) {
+ if (mIconAnims[i].prevVisible == true) {
+ mIconAnims[i].animIn = false;
+ mIconAnims[i].animOut = true;
+ } else if (mIconAnims[i].visible == true) {
+ mIconAnims[i].animIn = true;
+ mIconAnims[i].animOut = false;
+ }
+ }
+ }
+}
+
+void dLytMapIcon01_c::checkBoundingPointing() {
+ for (int i = 0; i < MAP_ICON_01_BOUNDING_COMMONICON_LAST; i++) {
+ if (mPopupConfigs[i].bounding->IsVisible() && isPointingAtBounding(mPopupConfigs[i].bounding)) {
+ if (i == MAP_ICON_01_BOUNDING_UTA_00) {
+ mPopupConfigs[MAP_ICON_01_BOUNDING_UTA_01].pointedAt = true;
+ } else if (i == MAP_ICON_01_BOUNDING_MUSI_00) {
+ mPopupConfigs[MAP_ICON_01_BOUNDING_MUSI_01].pointedAt = true;
+ } else if (i == MAP_ICON_01_BOUNDING_SKYLOFT_00) {
+ mPopupConfigs[MAP_ICON_01_BOUNDING_SKYLOFT_01].pointedAt = true;
+ } else {
+ mPopupConfigs[i].pointedAt = true;
+ }
+ }
+ }
+}
+
+bool dLytMapIcon01_c::isPointingAtBounding(nw4r::lyt::Pane *pane) const {
+ dCursorHitCheck_c *d = dCsBase_c::GetInstance()->getHitCheck();
+ if (d != nullptr && d->getType() == 'lyt ' && static_cast<dCursorHitCheckLyt_c *>(d)->getHitPane() == pane) {
+ return true;
+ }
+ return false;
+}
+
+void dLytMapIcon01_c::fn_80181C40() {
+ for (int i = 0; i < MAP_ICON_01_BOUNDING_COMMONICON_LAST; i++) {
+ mpBoundings[i]->SetVisible(false);
+ }
+}
+
+bool dLytMapIcon00_c::build(d2d::ResAccIf_c *resAcc) {
+ // TODO - ...
+ return true;
+}
+
+bool dLytMapIcon00_c::remove() {
+ // TODO - ...
+ return true;
+}
+
+bool dLytMapIcon00_c::execute() {
+ // TODO - ...
+ return true;
+}
+
+void dLytMapIcon00_c::draw() {
+ // TODO - ...
+}
+
+void dLytMapIcon00_c::resetDrawCommands() {
+ for (int i = 0; i < (int)ARRAY_LENGTH(mCommands); i++) {
+ mCommands[i].position.set(0.0f, 0.0f);
+ mCommands[i].rotation.setF(0.0f);
+ mCommands[i].paneIdx = 39;
+ mCommands[i].passIdx = 35;
+ field_0x0F20[i] = 100;
+ field_0x13A8[i] = 0;
+ field_0x1342[i] = 0;
+ field_0x0E5B[i] = 0;
+ }
+
+ for (int i = 0; i < (int)ARRAY_LENGTH(mNumCommandsPerPass); i++) {
+ mNumCommandsPerPass[i] = 0;
+ }
+
+ field_0x13A7 = 0;
+ mNumCommands = 0;
+
+ for (int i = 0; i < 36; i++) {
+ field_0x0EEC[i] = 0;
+ }
+
+ for (int i = 0; i < (int)ARRAY_LENGTH(mPopupConfigs); i++) {
+ mPopupConfigs[i].cmdIdx = 100;
+ mPopupConfigs[i].boundingPos.set(0.0f, 0.0f);
+ mPopupConfigs[i].textPos.set(0.0f, 0.0f);
+ mPopupConfigs[i].pointedAt = false;
+ mPopupConfigs[i].objId = 0;
+ mPopupConfigs[i].labelPrefix = sMapPrefix;
+ }
+
+ field_0x140C = 0;
+ field_0x0E59 = 0;
+ field_0x0E5A = 0;
+
+ fn_80189750();
+
+ field_0x0E50 = 0;
+ field_0x0E51 = 0;
+ field_0x0E52 = 0;
+ field_0x0E53 = 0;
+ field_0x0E54 = 0;
+ field_0x0E55 = 0;
+ field_0x0E56 = 0;
+ field_0x0E57 = 0;
+ field_0x0E58 = 0;
+
+ for (int i = 0; i < (int)ARRAY_LENGTH(mIconAnims); i++) {
+ mIconAnims[i].render = false;
+ }
+
+ mNumAnims = 0;
+ field_0x1CE4 = 0;
+}
+
+static const char *sMapPopPrefix = "MAP_POP_";
+
+bool dLytMapMarkers_c::build(d2d::ResAccIf_c *resAcc) {
+ mMapPopup.build(resAcc);
+ if (dStageMgr_c::GetInstance()->isSTIFbyte4_0()) {
+ void *data = LayoutArcManager::GetInstance()->getLoadedData("MapSky");
+ mResAcc01.attach(data, "");
+
+ // TODO - ...
+
+ mIcon01.build(&mResAcc01);
+ } else {
+ void *data = LayoutArcManager::GetInstance()->getLoadedData("MapField");
+ mResAcc00.attach(data, "");
+
+ // TODO - ...
+
+ mIcon00.build(&mResAcc00);
+ }
+ return true;
+}
+
+bool dLytMapMarkers_c::remove() {
+ mMapPopup.remove();
+ if (dStageMgr_c::GetInstance()->isSTIFbyte4_0()) {
+ mIcon01.remove();
+ mResAcc01.detach();
+ } else {
+ mIcon00.remove();
+ mResAcc00.detach();
+ }
+ // TODO - ...
+ return true;
+}
+
+bool dLytMapMarkers_c::execute() {
+ return true;
+}
+
+void dLytMapMarkers_c::draw() {
+ if (dStageMgr_c::GetInstance()->isSTIFbyte4_0()) {
+ mIcon01.draw();
+ } else {
+ mIcon00.draw();
+ }
+}
+
+void dLytMapMarkers_c::setIslandNamesOn(bool on) {
+ if (dStageMgr_c::GetInstance()->isSTIFbyte4_0()) {
+ mShowIslandNames = on;
+ mIcon01.mShowIslandNames = on;
+ }
+}
+
+void dLytMapMarkers_c::drawPopups() {
+ for (int i = 0; i < mNumPopups; i++) {
+ if (mPopups[i].visible) {
+ SizedString<0x40> label;
+ if (mPopups[i].objId == 0xFF) {
+ label.sprintf("SAVEOBJ_NAME_UNKNOWN");
+ } else {
+ label.sprintf("%s%02d", mPopups[i].labelPrefix, mPopups[i].objId);
+ }
+ mMapPopup.setLabel(label);
+ mMapPopup.realizeText();
+ f32 width = mMapPopup.getTextRenderWidth();
+
+ // TODO - probably equivalent but FPR, order, stack problems
+ mVec2_c boundingPos = mPopups[i].boundingPos;
+ mVec2_c textPos = mPopups[i].textPos;
+ mVec2_c pos = boundingPos + textPos + field_0x06F4;
+ pos.x += width / 2.0f;
+
+ mMapPopup.setPosition(pos);
+
+ mMapPopup.setInout(mPopups[i].inAnimFrame);
+ mMapPopup.draw();
+ if (mPopups[i].inAnimFrame <= mMapPopup.getInAnimDuration()) {
+ mPopups[i].inAnimFrame += 1.0f;
+ }
+ if (mMapPopup.getInAnimDuration() <= mPopups[i].inAnimFrame) {
+ mPopups[i].inAnimFrame = mMapPopup.getInAnimDuration();
+ }
+ } else if (0.0f < mPopups[i].inAnimFrame) {
+ SizedString<0x40> label;
+ if (mPopups[i].objId == 0xFF) {
+ label.sprintf("SAVEOBJ_NAME_UNKNOWN");
+ } else {
+ label.sprintf("%s%02d", mPopups[i].labelPrefix, mPopups[i].objId);
+ }
+ mMapPopup.setLabel(label);
+ mMapPopup.realizeText();
+ f32 width = mMapPopup.getTextRenderWidth();
+
+ // TODO - probably equivalent but FPR, order, stack problems
+ mVec2_c boundingPos = mPopups[i].boundingPos;
+ mVec2_c textPos = mPopups[i].textPos;
+ mVec2_c pos = boundingPos + textPos + field_0x06F4;
+ pos.x += width / 2.0f;
+
+ mMapPopup.setPosition(pos);
+
+ mPopups[i].inAnimFrame -= 1.0f;
+ mMapPopup.setInout(mPopups[i].inAnimFrame);
+ mMapPopup.draw();
+ }
+ }
+}
+
+void dLytMapMarkers_c::resetPopups() {
+ for (int i = 0; i < (int)ARRAY_LENGTH(mPopups); i++) {
+ mPopups[i].inAnimFrame = 0.0f;
+ mPopups[i].textPos.set(0.0f, 0.0f);
+ mPopups[i].boundingPos.set(0.0f, 0.0f);
+ mPopups[i].visible = false;
+ mPopups[i].objId = 0;
+ mPopups[i].labelPrefix = sMapPopPrefix;
+ }
+}
+
+void dLytMapMarkers_c::loadPopups() {
+ for (int i = 0; i < mNumPopups; i++) {
+ // TODO - this looks weird
+ const mVec2_c &v = mpPopupConfigs[i].textPos;
+ mPopups[i].textPos.x = v.x;
+ mPopups[i].textPos.y = v.y;
+ mPopups[i].boundingPos = mpPopupConfigs[i].boundingPos;
+ mPopups[i].visible = mpPopupConfigs[i].pointedAt;
+ mPopups[i].objId = mpPopupConfigs[i].objId;
+ mPopups[i].labelPrefix = mpPopupConfigs[i].labelPrefix;
+ }
+}