yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
zelda3_labels.cc
Go to the documentation of this file.
2
3#include <cstddef>
4#include <string>
5#include <unordered_map>
6#include <vector>
7
8#include "zelda3/common.h"
13
14namespace yaze::zelda3 {
15
16// Source-Origin: USDASM bank_09.asm, AncillaAdd_ItemReceipt.offset_y
17// ($09836C-$0983B7). These are receipt IDs; the generic GetItemNames table is
18// offset by an extra "None" entry and includes incompatible hack-only items.
19const std::vector<std::string>& Zelda3Labels::GetItemReceiptNames() {
20 static const std::vector<std::string> names = {
21 "Fighter Sword",
22 "Master Sword",
23 "Tempered Sword",
24 "Golden Sword",
25 "Fighter Shield",
26 "Fire Shield",
27 "Mirror Shield",
28 "Fire Rod",
29 "Ice Rod",
30 "Hammer",
31 "Hookshot",
32 "Bow",
33 "Boomerang",
34 "Powder",
35 "Bottle Refill (Bee)",
36 "Bombos Medallion",
37 "Ether Medallion",
38 "Quake Medallion",
39 "Lamp",
40 "Shovel",
41 "Flute",
42 "Cane of Somaria",
43 "Bottle",
44 "Piece of Heart",
45 "Cane of Byrna",
46 "Cape",
47 "Magic Mirror",
48 "Power Glove",
49 "Titan's Mitt",
50 "Book of Mudora",
51 "Flippers",
52 "Moon Pearl",
53 "Crystal",
54 "Bug Net",
55 "Blue Mail",
56 "Red Mail",
57 "Small Key",
58 "Compass",
59 "Heart Container (Four Pieces)",
60 "Bomb",
61 "3 Bombs",
62 "Mushroom",
63 "Red Boomerang",
64 "Bottle (Red Potion)",
65 "Bottle (Green Potion)",
66 "Bottle (Blue Potion)",
67 "Red Potion Refill",
68 "Green Potion Refill",
69 "Blue Potion Refill",
70 "10 Bombs",
71 "Big Key",
72 "Map",
73 "1 Rupee",
74 "5 Rupees",
75 "20 Rupees",
76 "Green Pendant",
77 "Blue Pendant",
78 "Red Pendant",
79 "Tossed Bow",
80 "Silver Arrows",
81 "Bottle (Bee)",
82 "Bottle (Fairy)",
83 "Heart Container (Boss)",
84 "Heart Container (Sanctuary)",
85 "100 Rupees",
86 "50 Rupees",
87 "Heart",
88 "1 Arrow",
89 "10 Arrows",
90 "Small Magic",
91 "300 Rupees",
92 "20 Rupees (Green)",
93 "Bottle (Good Bee)",
94 "Tossed Fighter Sword",
95 "Flute (Activated)",
96 "Pegasus Boots"};
97
98 return names;
99}
100
101// Room names - reuse existing kRoomNames array
102const std::vector<std::string>& Zelda3Labels::GetRoomNames() {
103 static std::vector<std::string> room_names;
104 if (room_names.empty()) {
105 for (const auto& name : kRoomNames) {
106 room_names.emplace_back(name);
107 }
108 }
109 return room_names;
110}
111
112// Entrance names - reuse existing kEntranceNames array
113const std::vector<std::string>& Zelda3Labels::GetEntranceNames() {
114 static std::vector<std::string> entrance_names;
115 if (entrance_names.empty()) {
116 for (const auto& name : kEntranceNames) {
117 entrance_names.emplace_back(name);
118 }
119 }
120 return entrance_names;
121}
122
123// Sprite names - reuse existing kSpriteDefaultNames array
124const std::vector<std::string>& Zelda3Labels::GetSpriteNames() {
125 static std::vector<std::string> sprite_names;
126 if (sprite_names.empty()) {
127 for (const auto& name : kSpriteDefaultNames) {
128 sprite_names.push_back(name);
129 }
130 }
131 return sprite_names;
132}
133
134// Overlord names - reuse existing kOverlordNames array
135const std::vector<std::string>& Zelda3Labels::GetOverlordNames() {
136 static std::vector<std::string> overlord_names;
137 if (overlord_names.empty()) {
138 for (const auto& name : kOverlordNames) {
139 overlord_names.push_back(name);
140 }
141 }
142 return overlord_names;
143}
144
145// Overworld map names (64 Light World + 64 Dark World + 32 Special Areas)
146const std::vector<std::string>& Zelda3Labels::GetOverworldMapNames() {
147 static const std::vector<std::string> map_names = {
148 // Light World (0x00-0x3F)
149 "Lost Woods", "Master Sword Pedestal", "Castle Courtyard", "Link's House",
150 "Eastern Palace", "Desert Palace", "Hyrule Castle", "Witch's Hut",
151 "Kakariko Village", "Death Mountain", "Tower of Hera", "Spectacle Rock",
152 "Graveyard", "Sanctuary", "Lake Hylia", "Desert of Mystery",
153 "Eastern Ruins", "Zora's Domain", "Catfish", "Dam", "Potion Shop",
154 "Kakariko Well", "Blacksmith", "Sick Kid", "Library", "Mushroom",
155 "Magic Bat", "Fairy Fountain", "Fortune Teller", "Lake Shop", "Bomb Shop",
156 "Cave 45", "Checkerboard Cave", "Mini Moldorm Cave", "Ice Rod Cave",
157 "Bonk Rocks", "Bottle Merchant", "Sahasrahla's Hut", "Chicken House",
158 "Aginah's Cave", "Dam Exterior", "Mimic Cave Exterior", "Waterfall Fairy",
159 "Pyramid", "Fat Fairy", "Spike Cave", "Hookshot Cave", "Graveyard Ledge",
160 "Dark Lumberjacks", "Bumper Cave", "Skull Woods 1", "Skull Woods 2",
161 "Skull Woods 3", "Skull Woods 4", "Skull Woods 5", "Skull Woods 6",
162 "Skull Woods 7", "Skull Woods 8", "Ice Palace Exterior",
163 "Misery Mire Exterior", "Palace of Darkness Exterior",
164 "Swamp Palace Exterior", "Turtle Rock Exterior", "Thieves' Town Exterior",
165
166 // Dark World (0x40-0x7F)
167 "Dark Woods", "Dark Chapel", "Dark Castle", "Dark Shields", "Dark Palace",
168 "Dark Desert", "Dark Castle Gate", "Dark Witch", "Dark Village",
169 "Dark Mountain", "Dark Tower", "Dark Rocks", "Dark Graveyard",
170 "Dark Sanctuary", "Dark Lake", "Dark Desert South", "Dark Eastern",
171 "Dark Zora", "Dark Catfish", "Dark Dam", "Dark Shop", "Dark Well",
172 "Dark Blacksmith", "Dark Sick Kid", "Dark Library", "Dark Mushroom",
173 "Dark Bat", "Dark Fountain", "Dark Fortune", "Dark Lake Shop",
174 "Dark Bomb Shop", "Dark Cave 45", "Dark Checker", "Dark Mini Moldorm",
175 "Dark Ice Rod", "Dark Bonk", "Dark Bottle", "Dark Sahasrahla",
176 "Dark Chicken", "Dark Aginah", "Dark Dam Exit", "Dark Mimic Exit",
177 "Dark Waterfall", "Pyramid Top", "Dark Fat Fairy", "Dark Spike Cave",
178 "Dark Hookshot", "Dark Graveyard Ledge", "Lumberjack House",
179 "Dark Bumper", "Skull Woods A", "Skull Woods B", "Skull Woods C",
180 "Skull Woods D", "Skull Woods E", "Skull Woods F", "Skull Woods G",
181 "Skull Woods H", "Ice Palace Entry", "Misery Mire Entry",
182 "Palace of Darkness Entry", "Swamp Palace Entry", "Turtle Rock Entry",
183 "Thieves' Town Entry",
184
185 // Special Areas (0x80-0x9F)
186 "Special Area 1", "Special Area 2", "Special Area 3", "Special Area 4",
187 "Special Area 5", "Special Area 6", "Special Area 7", "Special Area 8",
188 "Special Area 9", "Special Area 10", "Special Area 11", "Special Area 12",
189 "Special Area 13", "Special Area 14", "Special Area 15",
190 "Special Area 16", "Special Area 17", "Special Area 18",
191 "Special Area 19", "Special Area 20", "Special Area 21",
192 "Special Area 22", "Special Area 23", "Special Area 24",
193 "Special Area 25", "Special Area 26", "Special Area 27",
194 "Special Area 28", "Special Area 29", "Special Area 30",
195 "Special Area 31", "Special Area 32"};
196 return map_names;
197}
198
199// Item names (complete item list)
200const std::vector<std::string>& Zelda3Labels::GetItemNames() {
201 static const std::vector<std::string> item_names = {
202 "None",
203 "Fighter Sword",
204 "Master Sword",
205 "Tempered Sword",
206 "Golden Sword",
207 "Fighter Shield",
208 "Fire Shield",
209 "Mirror Shield",
210 "Fire Rod",
211 "Ice Rod",
212 "Hammer",
213 "Hookshot",
214 "Bow",
215 "Boomerang",
216 "Powder",
217 "Bee Badge",
218 "Bombos Medallion",
219 "Ether Medallion",
220 "Quake Medallion",
221 "Lamp",
222 "Shovel",
223 "Flute",
224 "Somaria Cane",
225 "Bottle",
226 "Heart Piece",
227 "Byrna Cane",
228 "Cape",
229 "Mirror",
230 "Power Glove",
231 "Titan Mitt",
232 "Book of Mudora",
233 "Zora Flippers",
234 "Moon Pearl",
235 "Crystal",
236 "Bug Net",
237 "Blue Mail",
238 "Red Mail",
239 "Key",
240 "Compass",
241 "Heart Container",
242 "Bomb",
243 "3 Bombs",
244 "Mushroom",
245 "Red Boomerang",
246 "Red Potion",
247 "Green Potion",
248 "Blue Potion",
249 "Red Potion (Refill)",
250 "Green Potion (Refill)",
251 "Blue Potion (Refill)",
252 "10 Bombs",
253 "Big Key",
254 "Map",
255 "1 Rupee",
256 "5 Rupees",
257 "20 Rupees",
258 "Pendant of Courage",
259 "Pendant of Wisdom",
260 "Pendant of Power",
261 "Bow and Arrows",
262 "Silver Arrows Upgrade",
263 "Bee",
264 "Fairy",
265 "Heart Container (Boss)",
266 "Heart",
267 "1 Arrow",
268 "10 Arrows",
269 "Magic",
270 "Small Magic",
271 "300 Rupees",
272 "20 Rupees (Green)",
273 "100 Rupees",
274 "50 Rupees",
275 "Heart Container (Sanctuary)",
276 "Arrow Refill (5)",
277 "Arrow Refill (10)",
278 "Bomb Refill (1)",
279 "Bomb Refill (4)",
280 "Bomb Refill (8)",
281 "Blue Shield (Refill)",
282 "Magic Upgrade (1/2)",
283 "Magic Upgrade (1/4)",
284 "Programmable Item 1",
285 "Programmable Item 2",
286 "Programmable Item 3",
287 "Silvers",
288 "Rupoor",
289 "Null Item",
290 "Red Clock",
291 "Blue Clock",
292 "Green Clock",
293 "Progressive Sword",
294 "Progressive Shield",
295 "Progressive Armor",
296 "Progressive Lifting Glove",
297 "RNG Item (Single)",
298 "RNG Item (Multi)",
299 "Progressive Bow",
300 "Progressive Bow (Alt)",
301 "Aga Pendant",
302 "Pendant (Green)",
303 "Blue Pendant",
304 "Good Bee",
305 "Tossed Key"};
306 return item_names;
307}
308
309// Music track names
310const std::vector<std::string>& Zelda3Labels::GetMusicTrackNames() {
311 static const std::vector<std::string> music_names = {
312 "Nothing",
313 "Light World",
314 "Beginning",
315 "Rabbit",
316 "Forest",
317 "Intro",
318 "Town",
319 "Warp",
320 "Dark World",
321 "Master Sword",
322 "File Select",
323 "Soldier",
324 "Boss",
325 "Dark World Death Mountain",
326 "Minigame",
327 "Skull Woods",
328 "Indoor",
329 "Cave 1",
330 "Zelda's Rescue",
331 "Crystal",
332 "Shop",
333 "Cave 2",
334 "Game Over",
335 "Boss Victory",
336 "Sanctuary",
337 "Boss Victory (Short)",
338 "Dark World Woods",
339 "Pendant",
340 "Ganon's Message",
341 "Hyrule Castle",
342 "Light World Death Mountain",
343 "Eastern Palace",
344 "Desert Palace",
345 "Agahnim's Theme",
346 "Damp Dungeon",
347 "Ganon Reveals",
348 "Confrontation",
349 "Ganon's Theme",
350 "Triforce",
351 "Credits",
352 "Unused",
353 "Unused",
354 "Unused",
355 "Unused",
356 "Unused",
357 "Unused",
358 "Unused",
359 "Unused"};
360 return music_names;
361}
362
363// Graphics sheet names
364const std::vector<std::string>& Zelda3Labels::GetGraphicsSheetNames() {
365 static const std::vector<std::string> gfx_names = {"Sprite Sheet 0",
366 "Sprite Sheet 1",
367 "Sprite Sheet 2",
368 "Sprite Sheet 3",
369 "Sprite Sheet 4",
370 "Sprite Sheet 5",
371 "Sprite Sheet 6",
372 "Sprite Sheet 7",
373 "Sprite Sheet 8",
374 "Sprite Sheet 9",
375 "Sprite Sheet A",
376 "Sprite Sheet B",
377 "Sprite Sheet C",
378 "Sprite Sheet D",
379 "Sprite Sheet E",
380 "Sprite Sheet F",
381 "Link's Sprites",
382 "Sword Sprites",
383 "Shield Sprites",
384 "Common Sprites",
385 "Boss Sprites",
386 "NPC Sprites",
387 "Enemy Sprites 1",
388 "Enemy Sprites 2",
389 "Item Sprites",
390 "Dungeon Objects",
391 "Overworld Objects",
392 "Interface",
393 "Font",
394 "Credits",
395 "Unused",
396 "Unused"};
397 return gfx_names;
398}
399
400// Room object names - these are large, so we'll delegate to a helper
401namespace {
402template <size_t N>
403std::vector<std::string> ConvertArrayToVector(const char* const (&array)[N]) {
404 std::vector<std::string> result;
405 result.reserve(N);
406 for (const char* name : array) {
407 result.emplace_back(name);
408 }
409 return result;
410}
411} // namespace
412
413const std::vector<std::string>& Zelda3Labels::GetType1RoomObjectNames() {
414 static const std::vector<std::string> names =
415 ConvertArrayToVector(Type1RoomObjectNames);
416 return names;
417}
418
419const std::vector<std::string>& Zelda3Labels::GetType2RoomObjectNames() {
420 static const std::vector<std::string> names =
421 ConvertArrayToVector(Type2RoomObjectNames);
422 return names;
423}
424
425const std::vector<std::string>& Zelda3Labels::GetType3RoomObjectNames() {
426 static const std::vector<std::string> names =
427 ConvertArrayToVector(Type3RoomObjectNames);
428 return names;
429}
430
431// Room effect names - reuse existing RoomEffect array
432const std::vector<std::string>& Zelda3Labels::GetRoomEffectNames() {
433 static std::vector<std::string> effect_names;
434 if (effect_names.empty()) {
435 for (const auto& name : RoomEffect) {
436 effect_names.push_back(name);
437 }
438 }
439 return effect_names;
440}
441
442// Room tag names
443const std::vector<std::string>& Zelda3Labels::GetRoomTagNames() {
444 static const std::vector<std::string> tag_names = {
445 "Nothing", // 0
446 "NW Kill Enemy to Open", // 1
447 "NE Kill Enemy to Open", // 2
448 "SW Kill Enemy to Open", // 3
449 "SE Kill Enemy to Open", // 4
450 "W Kill Enemy to Open", // 5
451 "E Kill Enemy to Open", // 6
452 "N Kill Enemy to Open", // 7
453 "S Kill Enemy to Open", // 8
454 "Clear Quadrant to Open", // 9
455 "Clear Room to Open", // 10
456 "NW Push Block to Open", // 11
457 "NE Push Block to Open", // 12
458 "SW Push Block to Open", // 13
459 "SE Push Block to Open", // 14
460 "W Push Block to Open", // 15
461 "E Push Block to Open", // 16
462 "N Push Block to Open", // 17
463 "S Push Block to Open", // 18
464 "Push Block to Open", // 19
465 "Pull Lever to Open", // 20
466 "Collect Prize to Open", // 21
467 "Hold Switch Open Door", // 22
468 "Toggle Switch to Open Door", // 23
469 "Turn off Water", // 24
470 "Turn on Water", // 25
471 "Water Gate", // 26
472 "Water Twin", // 27
473 "Moving Wall Right", // 28
474 "Moving Wall Left", // 29
475 "Crash1", // 30
476 "Crash2", // 31
477 "Push Switch Exploding Wall", // 32
478 "Holes 0", // 33
479 "Open Chest for Holes 0", // 34
480 "Holes 1", // 35
481 "Holes 2", // 36
482 "Defeat Boss for Prize", // 37
483 "SE Kill Enemy for Push Blk", // 38
484 "Trigger Switch Chest", // 39
485 "Pull Lever Exploding Wall", // 40
486 "NW Kill Enemy for Chest", // 41
487 "NE Kill Enemy for Chest", // 42
488 "SW Kill Enemy for Chest", // 43
489 "SE Kill Enemy for Chest", // 44
490 "W Kill Enemy for Chest", // 45
491 "E Kill Enemy for Chest", // 46
492 "N Kill Enemy for Chest", // 47
493 "S Kill Enemy for Chest", // 48
494 "Clear Quadrant for Chest", // 49
495 "Clear Room for Chest", // 50
496 "Light Torches to Open", // 51
497 "Holes 3", // 52
498 "Holes 4", // 53
499 "Holes 5", // 54
500 "Holes 6", // 55
501 "Agahnim Room", // 56
502 "Holes 7", // 57
503 "Holes 8", // 58
504 "Open Chest for Holes 8", // 59
505 "Push Block for Chest", // 60
506 "Clear Room for Triforce", // 61
507 "Light Torches for Chest", // 62
508 "Kill Boss Again", // 63
509 "64 (Unused)" // 64
510 };
511 return tag_names;
512}
513
514// Tile type names
515const std::vector<std::string>& Zelda3Labels::GetTileTypeNames() {
516 static const std::vector<std::string> tile_names = {
517 "Nothing (standard floor)",
518 "Nothing (unused?)",
519 "Collision",
520 "Collision (unknown types)",
521 "Collision",
522 "Collision (unused?)",
523 "Collision",
524 "Collision",
525 "Deep water",
526 "Shallow water",
527 "Unknown (near water/pit edges)",
528 "Collision (water/pit edges)",
529 "Overlay mask",
530 "Spike floor",
531 "GT ice",
532 "Ice palace ice",
533 "Slope ◤",
534 "Slope ◥",
535 "Slope ◣",
536 "Slope ◢",
537 "Nothing (unused?)",
538 "Nothing (unused?)",
539 "Nothing (unused?)",
540 "Slope ◤",
541 "Slope ◥",
542 "Slope ◣",
543 "Slope ◢",
544 "Layer swap",
545 "Pit",
546 "Manual stairs",
547 "Pot switch",
548 "Pressure switch",
549 "Blocks switch (chest, PoD, walls)",
550 "Layer toggle",
551 "Layer 2 overlay",
552 "North single-layer auto stairs",
553 "North layer swap auto stairs",
554 "South single-layer auto stairs",
555 "South layer swap auto stairs",
556 "North/south layer swap auto stairs",
557 "North/south single-layer auto stairs",
558 "West single-layer auto stairs",
559 "West layer swap auto stairs",
560 "East single-layer auto stairs",
561 "East layer swap auto stairs",
562 "East/west layer swap auto stairs",
563 "East/west single-layer auto stairs",
564 "Nothing (stairs edge)",
565 "Straight inter-room stairs south/up",
566 "Straight inter-room stairs north/down",
567 "Straight inter-room stairs south/down 2",
568 "Straight inter-room stairs north/up 2",
569 "Star tile (inactive on GBA)",
570 "Collision (near stairs)",
571 "Warp tile",
572 "Square corners ⌜⌝⌞⌟",
573 "Thick corner ⌜",
574 "Thick corner ⌝",
575 "Thick corner ⌞",
576 "Thick corner ⌟",
577 "Roof/grass tiles?",
578 "Spike floor"};
579 return tile_names;
580}
581
582// Convert all labels to structured map for project embedding
583std::unordered_map<std::string, std::unordered_map<std::string, std::string>>
585 std::unordered_map<std::string, std::unordered_map<std::string, std::string>>
586 labels;
587
588 // Rooms
589 const auto& rooms = GetRoomNames();
590 for (size_t i = 0; i < rooms.size(); ++i) {
591 labels["room"][std::to_string(i)] = rooms[i];
592 }
593
594 // Entrances
595 const auto& entrances = GetEntranceNames();
596 for (size_t i = 0; i < entrances.size(); ++i) {
597 labels["entrance"][std::to_string(i)] = entrances[i];
598 }
599
600 // Sprites
601 const auto& sprites = GetSpriteNames();
602 for (size_t i = 0; i < sprites.size(); ++i) {
603 labels["sprite"][std::to_string(i)] = sprites[i];
604 }
605
606 // Overlords
607 const auto& overlords = GetOverlordNames();
608 for (size_t i = 0; i < overlords.size(); ++i) {
609 labels["overlord"][std::to_string(i)] = overlords[i];
610 }
611
612 // Overworld maps
613 const auto& maps = GetOverworldMapNames();
614 for (size_t i = 0; i < maps.size(); ++i) {
615 labels["overworld_map"][std::to_string(i)] = maps[i];
616 }
617
618 // Items
619 const auto& items = GetItemNames();
620 for (size_t i = 0; i < items.size(); ++i) {
621 labels["item"][std::to_string(i)] = items[i];
622 }
623
624 // Music tracks
625 const auto& music = GetMusicTrackNames();
626 for (size_t i = 0; i < music.size(); ++i) {
627 labels["music"][std::to_string(i)] = music[i];
628 }
629
630 // Graphics sheets
631 const auto& gfx = GetGraphicsSheetNames();
632 for (size_t i = 0; i < gfx.size(); ++i) {
633 labels["graphics"][std::to_string(i)] = gfx[i];
634 }
635
636 // Room effects
637 const auto& effects = GetRoomEffectNames();
638 for (size_t i = 0; i < effects.size(); ++i) {
639 labels["room_effect"][std::to_string(i)] = effects[i];
640 }
641
642 // Room tags
643 const auto& tags = GetRoomTagNames();
644 for (size_t i = 0; i < tags.size(); ++i) {
645 labels["room_tag"][std::to_string(i)] = tags[i];
646 }
647
648 // Tile types
649 const auto& tiles = GetTileTypeNames();
650 for (size_t i = 0; i < tiles.size(); ++i) {
651 labels["tile_type"][std::to_string(i)] = tiles[i];
652 }
653
654 // Dungeon room objects
655 const auto& type1_objects = GetType1RoomObjectNames();
656 for (size_t i = 0; i < type1_objects.size(); ++i) {
657 labels["room_object_type1"][std::to_string(i)] = type1_objects[i];
658 labels["room_object"][std::to_string(i)] = type1_objects[i];
659 }
660
661 const auto& type2_objects = GetType2RoomObjectNames();
662 for (size_t i = 0; i < type2_objects.size(); ++i) {
663 const int object_id = 0x100 + static_cast<int>(i);
664 labels["room_object_type2"][std::to_string(i)] = type2_objects[i];
665 labels["room_object"][std::to_string(object_id)] = type2_objects[i];
666 }
667
668 const auto& type3_objects = GetType3RoomObjectNames();
669 for (size_t i = 0; i < type3_objects.size(); ++i) {
670 const int object_id = 0xF80 + static_cast<int>(i);
671 labels["room_object_type3"][std::to_string(i)] = type3_objects[i];
672 labels["room_object"][std::to_string(object_id)] = type3_objects[i];
673 }
674
675 return labels;
676}
677
678// Get a label by resource type and ID
679std::string Zelda3Labels::GetLabel(const std::string& resource_type, int id,
680 const std::string& default_value) {
681 static auto labels = ToResourceLabels();
682
683 auto type_it = labels.find(resource_type);
684 if (type_it == labels.end()) {
685 return default_value.empty() ? resource_type + "_" + std::to_string(id)
686 : default_value;
687 }
688
689 auto label_it = type_it->second.find(std::to_string(id));
690 if (label_it == type_it->second.end()) {
691 return default_value.empty() ? resource_type + "_" + std::to_string(id)
692 : default_value;
693 }
694
695 return label_it->second;
696}
697
698} // namespace yaze::zelda3
std::vector< std::string > ConvertArrayToVector(const char *const (&array)[N])
Zelda 3 specific classes and functions.
const std::string kOverlordNames[26]
Definition sprite.cc:299
const std::string kSpriteDefaultNames[256]
Definition sprite.cc:16
constexpr std::array< std::string_view, 297 > kRoomNames
Definition room.h:1478
const std::string RoomEffect[8]
Definition room.cc:270
constexpr const char * kEntranceNames[]
Definition common.h:91
static const std::vector< std::string > & GetRoomNames()
static const std::vector< std::string > & GetItemNames()
static std::unordered_map< std::string, std::unordered_map< std::string, std::string > > ToResourceLabels()
Convert all labels to a structured map for project embedding.
static const std::vector< std::string > & GetEntranceNames()
static const std::vector< std::string > & GetType2RoomObjectNames()
static const std::vector< std::string > & GetType1RoomObjectNames()
static const std::vector< std::string > & GetGraphicsSheetNames()
static const std::vector< std::string > & GetMusicTrackNames()
static const std::vector< std::string > & GetItemReceiptNames()
static const std::vector< std::string > & GetTileTypeNames()
static const std::vector< std::string > & GetOverlordNames()
static const std::vector< std::string > & GetSpriteNames()
static const std::vector< std::string > & GetOverworldMapNames()
static const std::vector< std::string > & GetType3RoomObjectNames()
static std::string GetLabel(const std::string &resource_type, int id, const std::string &default_value="")
Get a label by resource type and ID.
static const std::vector< std::string > & GetRoomEffectNames()
static const std::vector< std::string > & GetRoomTagNames()