Torch
Loading...
Searching...
No Matches
BKMapNames.h
1#pragma once
2
3#include <cstdint>
4#include <optional>
5#include <string>
6
7namespace BK64 {
8// map_e and level_e in the decomp's enums.h, without the MAP_n_ and LEVEL_n_ prefixes.
9inline constexpr const char* kMapNames[] = {
10 "NIL",
11 "SM_SPIRAL_MOUNTAIN",
12 "MM_MUMBOS_MOUNTAIN",
13 "STUB_TEST_TEMPLE",
14 "STUB_TEST_MB",
15 "TTC_BLUBBERS_SHIP",
16 "TTC_NIPPERS_SHELL",
17 "TTC_TREASURE_TROVE_COVE",
18 "STUB_TEST_CS_HEIGHT_AND_DISTANCE",
19 "STUB_TEST_CS_SLIGHT_SLOPES",
20 "TTC_SANDCASTLE",
21 "CC_CLANKERS_CAVERN",
22 "MM_TICKERS_TOWER",
23 "BGS_BUBBLEGLOOP_SWAMP",
24 "MM_MUMBOS_SKULL",
25 "STUB_TEST_PM",
26 "BGS_MR_VILE",
27 "BGS_TIPTUP",
28 "GV_GOBIS_VALLEY",
29 "GV_MEMORY_GAME",
30 "GV_SANDYBUTTS_MAZE",
31 "GV_WATER_PYRAMID",
32 "GV_RUBEES_CHAMBER",
33 "STUB_TEST_GS",
34 "STUB_TEST_RL",
35 "STUB_TEST_CS_STEEP_SLOPES",
36 "GV_INSIDE_JINXY",
37 "MMM_MAD_MONSTER_MANSION",
38 "MMM_CHURCH",
39 "MMM_CELLAR",
40 "CS_START_NINTENDO",
41 "CS_START_RAREWARE",
42 "CS_END_NOT_100",
43 "CC_WITCH_SWITCH_ROOM",
44 "CC_INSIDE_CLANKER",
45 "CC_GOLDFEATHER_ROOM",
46 "MMM_TUMBLARS_SHED",
47 "MMM_WELL",
48 "MMM_NAPPERS_ROOM",
49 "FP_FREEZEEZY_PEAK",
50 "MMM_EGG_ROOM",
51 "MMM_NOTE_ROOM",
52 "MMM_FEATHER_ROOM",
53 "MMM_SECRET_CHURCH_ROOM",
54 "MMM_BATHROOM",
55 "MMM_BEDROOM",
56 "MMM_HONEYCOMB_ROOM",
57 "MMM_WATERDRAIN_BARREL",
58 "MMM_MUMBOS_SKULL",
59 "RBB_RUSTY_BUCKET_BAY",
60 "STUB_LL_LAVA_LEVEL",
61 "STUB_DEMO_INTRO_ROOM",
62 "RBB_ENGINE_ROOM",
63 "RBB_WAREHOUSE",
64 "RBB_BOATHOUSE",
65 "RBB_CONTAINER_1",
66 "RBB_CONTAINER_3",
67 "RBB_CREW_CABIN",
68 "RBB_BOSS_BOOM_BOX",
69 "RBB_STORAGE_ROOM",
70 "RBB_KITCHEN",
71 "RBB_NAVIGATION_ROOM",
72 "RBB_CONTAINER_2",
73 "RBB_CAPTAINS_CABIN",
74 "CCW_HUB",
75 "FP_BOGGYS_IGLOO",
76 "STUB_LL_TIPTUPS_CAVE",
77 "CCW_SPRING",
78 "CCW_SUMMER",
79 "CCW_AUTUMN",
80 "CCW_WINTER",
81 "BGS_MUMBOS_SKULL",
82 "FP_MUMBOS_SKULL",
83 "STUB_ML_MUMBOS_SKULL",
84 "CCW_SPRING_MUMBOS_SKULL",
85 "CCW_SUMMER_MUMBOS_SKULL",
86 "CCW_AUTUMN_MUMBOS_SKULL",
87 "CCW_WINTER_MUMBOS_SKULL",
88 "STUB_LL_MUMBOS_SKULL",
89 "STUB_FL_MUMBOS_SKULL_NORMAL",
90 "STUB_FL_MUMBOS_SKULL_RAIN_DANCE",
91 "STUB_LL_SWIM",
92 "STUB_LL_TEMPLE",
93 "FP_CHRISTMAS_TREE",
94 "STUB_ML_CRUSHER_SHED",
95 "STUB_ML_GENERATOR_CAVES",
96 "STUB_ML_MINE_LEVEL",
97 "STUB_ML_TUBS",
98 "STUB_ML_WATER_CAVES",
99 "STUB_ML_WATERFALL",
100 "CCW_SUMMER_ZUBBA_HIVE",
101 "CCW_SPRING_ZUBBA_HIVE",
102 "CCW_AUTUMN_ZUBBA_HIVE",
103 "STUB_CCW_WINTER_ZUBBA_HIVE",
104 "CCW_SPRING_NABNUTS_HOUSE",
105 "CCW_SUMMER_NABNUTS_HOUSE",
106 "CCW_AUTUMN_NABNUTS_HOUSE",
107 "CCW_WINTER_NABNUTS_HOUSE",
108 "CCW_WINTER_HONEYCOMB_ROOM",
109 "CCW_AUTUMN_NABNUTS_WATER_SUPPLY",
110 "CCW_WINTER_NABNUTS_WATER_SUPPLY",
111 "CCW_SPRING_WHIPCRACK_ROOM",
112 "CCW_SUMMER_WHIPCRACK_ROOM",
113 "CCW_AUTUMN_WHIPCRACK_ROOM",
114 "CCW_WINTER_WHIPCRACK_ROOM",
115 "GL_MM_LOBBY",
116 "GL_TTC_AND_CC_PUZZLE",
117 "GL_180_NOTE_DOOR",
118 "GL_RED_CAULDRON_ROOM",
119 "GL_TTC_LOBBY",
120 "GL_GV_LOBBY",
121 "GL_FP_LOBBY",
122 "GL_CC_LOBBY",
123 "GL_STATUE_ROOM",
124 "GL_BGS_LOBBY",
125 "STUB_GL_ORIGINAL_FP_LOBBY",
126 "GL_GV_PUZZLE",
127 "GL_MMM_LOBBY",
128 "GL_640_NOTE_DOOR",
129 "GL_RBB_LOBBY",
130 "GL_RBB_AND_MMM_PUZZLE",
131 "GL_CCW_LOBBY",
132 "GL_CRYPT",
133 "CS_INTRO_GL_DINGPOT_1",
134 "CS_INTRO_BANJOS_HOUSE_1",
135 "CS_SPIRAL_MOUNTAIN_1",
136 "CS_SPIRAL_MOUNTAIN_2",
137 "FP_WOZZAS_CAVE",
138 "GL_FF_ENTRANCE",
139 "CS_INTRO_GL_DINGPOT_2",
140 "CS_ENTERING_GL_MACHINE_ROOM",
141 "CS_GAME_OVER_MACHINE_ROOM",
142 "CS_UNUSED_MACHINE_ROOM",
143 "CS_SPIRAL_MOUNTAIN_3",
144 "CS_SPIRAL_MOUNTAIN_4",
145 "CS_SPIRAL_MOUNTAIN_5",
146 "CS_SPIRAL_MOUNTAIN_6",
147 "CS_INTRO_BANJOS_HOUSE_2",
148 "CS_INTRO_BANJOS_HOUSE_3",
149 "RBB_ANCHOR_ROOM",
150 "SM_BANJOS_HOUSE",
151 "MMM_INSIDE_LOGGO",
152 "GL_FURNACE_FUN",
153 "TTC_SHARKFOOD_ISLAND",
154 "GL_BATTLEMENTS",
155 "FILE_SELECT",
156 "GV_SNS_CHAMBER",
157 "GL_DINGPOT",
158 "CS_INTRO_SPIRAL_7",
159 "CS_END_ALL_100",
160 "CS_END_BEACH_1",
161 "CS_END_BEACH_2",
162 "CS_END_SPIRAL_MOUNTAIN_1",
163 "CS_END_SPIRAL_MOUNTAIN_2",
164 "UNUSED",
165 "UNUSED",
166 "UNUSED",
167};
168inline constexpr const char* kLevelNames[] = {
169 "NONE", "MUMBOS_MOUNTAIN", "TREASURE_TROVE_COVE", "CLANKERS_CAVERN", "BUBBLEGLOOP_SWAMP", "FREEZEEZY_PEAK",
170 "LAIR", "GOBIS_VALLEY", "CLICK_CLOCK_WOOD", "RUSTY_BUCKET_BAY", "MAD_MONSTER_MANSION", "SPIRAL_MOUNTAIN",
171 "BOSS", "CUTSCENE",
172};
173
174inline const char* MapName(uint32_t map) {
175 return map < sizeof(kMapNames) / sizeof(kMapNames[0]) ? kMapNames[map] : nullptr;
176}
177
178inline const char* LevelName(uint32_t level) {
179 return level < sizeof(kLevelNames) / sizeof(kLevelNames[0]) ? kLevelNames[level] : nullptr;
180}
181
182// Takes SM_SPIRAL_MOUNTAIN or MAP_1_SM_SPIRAL_MOUNTAIN.
183inline std::optional<uint16_t> MapFromName(const std::string& name) {
184 for (uint16_t map = 1; map < sizeof(kMapNames) / sizeof(kMapNames[0]); map++) {
185 const std::string shortName = kMapNames[map];
186 if (name == shortName ||
187 (name.rfind("MAP_", 0) == 0 && name.size() > shortName.size() &&
188 name.compare(name.size() - shortName.size() - 1, std::string::npos, "_" + shortName) == 0)) {
189 return map;
190 }
191 }
192 return std::nullopt;
193}
194
195inline std::optional<uint16_t> LevelFromName(const std::string& name) {
196 for (uint16_t level = 1; level < sizeof(kLevelNames) / sizeof(kLevelNames[0]); level++) {
197 const std::string shortName = kLevelNames[level];
198 if (name == shortName ||
199 (name.rfind("LEVEL_", 0) == 0 && name.size() > shortName.size() &&
200 name.compare(name.size() - shortName.size() - 1, std::string::npos, "_" + shortName) == 0)) {
201 return level;
202 }
203 }
204 return std::nullopt;
205}
206} // namespace BK64