summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/fileselect.S120
-rw-r--r--src/koopatlas/hud.cpp67
-rw-r--r--src/koopatlas/pathmanager.cpp7
-rw-r--r--src/newer.cpp72
4 files changed, 200 insertions, 66 deletions
diff --git a/src/fileselect.S b/src/fileselect.S
new file mode 100644
index 0000000..b243e7f
--- /dev/null
+++ b/src/fileselect.S
@@ -0,0 +1,120 @@
+.set sp,1
+.set rtoc,2
+
+.text
+.extern enableNonLoopAnim__Q23m2d13EmbedLayout_cFib
+.global FSShowCD, FSHideCD
+FSShowCD:
+ addi r3, r3, 0x74
+ li r4, 0x2A
+ b enableNonLoopAnim__Q23m2d13EmbedLayout_cFib
+
+FSHideCD:
+ addi r3, r3, 0x74
+ li r4, 0x2B
+ b enableNonLoopAnim__Q23m2d13EmbedLayout_cFib
+
+.global FSShowCD_OpenWait
+FSShowCD_OpenWait:
+ addi r3, r31, 0x74
+ li r4, 0x2A
+ bl enableNonLoopAnim__Q23m2d13EmbedLayout_cFib
+ lwz r0, 0x14(r1)
+ lwz r31, 0xC(r1)
+ mtlr r0
+ addi r1, r1, 0x10
+ blr
+
+#.global FSHideCD_IWOSAEW
+#FSHideCD_IWOSAEW:
+# addi r3, r31, 0x74
+# li r4, 0x2B
+# bl enableNonLoopAnim__Q23m2d13EmbedLayout_cFib
+# lwz r0, 0x14(r1)
+# lwz r31, 0xC(r1)
+# mtlr r0
+# addi r1, r1, 0x10
+# blr
+
+.global DFNiceTitle
+DFNiceTitle:
+ mr r3, r4
+ lis r4, DFTitle@h
+ ori r4, r4, DFTitle@l
+ lwz r6, 0xE44(r30)
+ addi r6, r6, '1'
+ sth r6, 0xA(r4)
+ li r5, 0
+ li r6, 6
+ lwz r12, 0(r3)
+ lwz r12, 0x80(r12)
+ mtctr r12
+ bctr
+
+.align 4
+
+.data
+.global FSDummyBrlanName, FSDummyGroup, FSDummyPane
+FSDummyBrlanName: .string "fileSelectBase_18_DummyAnim.brlan"
+FSDummyGroup: .string "DummyGroup"
+FSDummyPane: .string "DummyPane"
+
+.global A00_window
+A00_window: .string "A00_window"
+.global ShowEraseCopy, HideEraseCopy
+ShowEraseCopy: .string "fileSelectBase_18_ShowEraseCopy.brlan"
+HideEraseCopy: .string "fileSelectBase_18_HideEraseCopy.brlan"
+.global N_posFile1_00
+N_posFile1_00: .string "N_posFile1_00"
+.global CDHolderGroup
+CDHolderGroup: .string "CDHolderGroup"
+
+.align 4
+DFTitle:
+.short 'F','i','l','e',' ','X'
+
+NameYI: .string "Yoshi's Island"
+NameDesert: .string "Rubble Ruins"
+NameSewer: .string "Soggy Sewers"
+NameMountain: .string "Mushroom Peaks"
+NameJapan: .string "Sakura Village"
+NameFF: .string "FreezeFlame Valley"
+NameVolcano: .string "FreezeFlame Volcano"
+NameGhost: .string "Pumpkin Boneyard"
+NameSkyM: .string "Sky Mountain"
+NameSky: .string "Starry Skies"
+NameKoopa: .string "Koopa Planet"
+NameCore: .string "Koopa Core"
+NameGoldwood: .string "Goldwood Forest"
+NameCaverns: .string "Crystal Caves"
+NameBomb: .string "Bombard Cliffs"
+NameMiniMega: .string "Mini-Mega Island"
+NameSkyCity: .string "Sky City"
+NameBonus: .string "Bonus Land"
+
+# [05:59:00] <Tempus> W1 GW W2 MM W3 W4 W5 CC W6 BC W7 SC W8 KC W9
+.align 4
+# Struct definition: World, Level, IsSecret, Name
+.long -1,-1,0,NameYI
+.long 1,6,1,NameGoldwood
+.long 1,38,0,NameDesert
+.long 2,1,0,NameSewer
+.long 2,15,0,NameDesert
+.long 2,9,1,NameMiniMega
+.long 2,38,0,NameMountain
+.long 3,38,0,NameJapan
+.long 4,38,0,NameFF
+.long 5,6,0,NameVolcano
+.long 5,8,0,NameFF
+.long 5,10,0,NameFF
+.long 5,9,1,NameCaverns
+.long 5,38,0,NameGhost
+.long 6,8,0,NameBomb
+.long 6,38,0,NameSkyM
+.long 7,3,0,NameSky
+.long 7,4,1,NameSkyCity
+.long 7,38,0,NameKoopa
+.long 8,25,0,NameCore
+.long 8,26,0,NameBonus
+.long 0,0,0,0
+
diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp
index 8f4b778..3989a1c 100644
--- a/src/koopatlas/hud.cpp
+++ b/src/koopatlas/hud.cpp
@@ -383,72 +383,7 @@ void dWMHud_c::setWorldName() {
int world = node->levelNumber[0];
int level = node->levelNumber[1];
- switch (world) {
- case 1:
- setWorldText("Yoshi's\nIsland");
- break;
-
- case 2:
- if (((level > 1) && (level < 5)) || (level == 15) || (level == 33) || (level == 34))
- setWorldText("Soggy\nSewers");
- else
- setWorldText("Rubble\nRuins");
- break;
-
- case 3:
- setWorldText("Mushroom\nPeaks");
- break;
-
- case 4:
- setWorldText("Sakura\nVillage");
- break;
-
- case 5:
- if ((level < 6) || (level == 15) || (level == 33) || (level == 34))
- setWorldText("FreezeFlame\nValley");
- else
- setWorldText("FreezeFlame\nVolcano");
- break;
-
- case 6:
- setWorldText("Pumpkin\nBoneyard");
- break;
-
- case 7:
- if (level < 4)
- setWorldText("Sky\nMountain");
- else
- setWorldText("Starry\nSkies");
- break;
-
- case 8:
- if ((level < 6) || (level == 15) || (level == 25) || (level == 33) || (level == 34))
- setWorldText("Koopa\nPlanet");
- else
- setWorldText("Koopa\nCore");
- break;
-
- case 9:
- setWorldText("Bonus\nLand");
- break;
-
- case 10:
- if ((level < 6) || (level == 30) || (level == 41) )
- setWorldText("Goldwood\nForest");
- else if ((level < 11) || (level == 32))
- setWorldText("Mini-Mega\nIsland");
- else if ((level < 16) || (level == 33) || (level == 34) || (level == 31) )
- setWorldText("Crystal\nCaves");
- else if (level < 19)
- setWorldText("Bombard\nCliffs");
- else
- setWorldText("Sky\nCity");
- break;
-
- default:
- setWorldText("Unknown\nWorld");
- break;
- }
+ setWorldText(NewerWorldName(NewerWorldForLevelID(world, level)));
}
}
diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp
index ffc4dfd..49ee728 100644
--- a/src/koopatlas/pathmanager.cpp
+++ b/src/koopatlas/pathmanager.cpp
@@ -560,6 +560,13 @@ void dWMPathManager_c::moveThroughPath() {
SaveBlock *save = GetSaveFile()->GetBlock(-1);
save->current_path_node = pathLayer->findNodeID(to);
+ if (to->type == dKPNode_s::LEVEL) {
+ NWRWorld nWorld = NewerWorldForLevelID(to->levelNumber[0], to->levelNumber[1]);
+ if (nWorld != UNKNOWN_WORLD) {
+ save->currentNewerWorld = (u8)nWorld;
+ }
+ }
+
dWMHud_c::instance->showPointBar();
SpammyReport("Point bar shown\n");
} else {
diff --git a/src/newer.cpp b/src/newer.cpp
new file mode 100644
index 0000000..314b50f
--- /dev/null
+++ b/src/newer.cpp
@@ -0,0 +1,72 @@
+#include <newer.h>
+
+NWRWorld NewerWorldForLevelID(int w, int l) {
+ switch (w) {
+ case 1: return YOSHI_ISLAND;
+ case 2:
+ if (((l>1) && (l<5)) || (l==15) || (l==33) || (l==34))
+ return SOGGY_SEWERS;
+ else
+ return RUBBLE_RUINS;
+ case 3: return MUSHROOM_PEAKS;
+ case 4: return SAKURA_VILLAGE;
+ case 5:
+ if (l<7 || l==15 || l==33 || l==34)
+ return FREEZEFLAME_GLACIER;
+ else
+ return FREEZEFLAME_VOLCANO;
+ case 6: return PUMPKIN_BONEYARD;
+ case 7:
+ if (l<4)
+ return SKY_MOUNTAIN;
+ else
+ return STARRY_SKIES;
+ case 8:
+ if (l<6 || l==15 || l==25 || l==33 || l==34)
+ return KOOPA_PLANET;
+ else
+ return KOOPA_CORE;
+ case 9: return BONUS_LAND;
+ case 10:
+ if (l<6 || l==30 || l==41)
+ return GOLDWOOD_FOREST;
+ else if (l<11 || l==32)
+ return MINIMEGA_ISLAND;
+ else if (l<16 || l==33 || l==34 || l==31)
+ return CRYSTAL_CAVES;
+ else if (l<19)
+ return BOMBARD_CLIFFS;
+ else
+ return SKY_CITY;
+ }
+
+ return UNKNOWN_WORLD;
+}
+
+
+static const wchar_t *NewerWorldNames[] = {
+ L"Yoshi's Island",
+ L"Rubble Ruins",
+ L"Soggy Sewers",
+ L"Mushroom Peaks",
+ L"Sakura Village",
+ L"Freezeflame Glacier",
+ L"Freezeflame Volcano",
+ L"Pumpkin Boneyard",
+ L"Sky Mountain",
+ L"Starry Skies",
+ L"Koopa Planet",
+ L"Koopa Core",
+ L"Bonus Land",
+ L"Goldwood Forest",
+ L"Mini-Mega Island",
+ L"Crystal Caves",
+ L"Bombard Cliffs",
+ L"Sky City"
+};
+
+const wchar_t *NewerWorldName(NWRWorld world) {
+ if (world < 0 || world >= WORLD_COUNT)
+ return L"Unknown World";
+ return NewerWorldNames[world];
+}