diff --git a/worlds/oot/Dungeon.py b/worlds/oot/Dungeon.py index 6e227baaf0..50285013aa 100644 --- a/worlds/oot/Dungeon.py +++ b/worlds/oot/Dungeon.py @@ -1,6 +1,6 @@ class Dungeon(object): - def __init__(self, world, name, hint, boss_key, small_keys, dungeon_items): + def __init__(self, world, name, hint, font_color, boss_key, small_keys, dungeon_items): def to_array(obj): if obj == None: return [] @@ -12,6 +12,7 @@ class Dungeon(object): self.world = world self.name = name self.hint_text = hint + self.font_color = font_color self.regions = [] self.boss_key = to_array(boss_key) self.small_keys = to_array(small_keys) @@ -28,7 +29,7 @@ class Dungeon(object): new_small_keys = [item.copy(new_world) for item in self.small_keys] new_dungeon_items = [item.copy(new_world) for item in self.dungeon_items] - new_dungeon = Dungeon(new_world, self.name, self.hint, new_boss_key, new_small_keys, new_dungeon_items) + new_dungeon = Dungeon(new_world, self.name, self.hint_text, self.font_color, new_boss_key, new_small_keys, new_dungeon_items) return new_dungeon diff --git a/worlds/oot/DungeonList.py b/worlds/oot/DungeonList.py index 45ac4a727d..8d3a95345b 100644 --- a/worlds/oot/DungeonList.py +++ b/worlds/oot/DungeonList.py @@ -7,6 +7,8 @@ from .Utils import data_path dungeon_table = [ { 'name': 'Deku Tree', + 'hint': 'the Deku Tree', + 'font_color': 'Green', 'boss_key': 0, 'small_key': 0, 'small_key_mq': 0, @@ -15,6 +17,7 @@ dungeon_table = [ { 'name': 'Dodongos Cavern', 'hint': 'Dodongo\'s Cavern', + 'font_color': 'Red', 'boss_key': 0, 'small_key': 0, 'small_key_mq': 0, @@ -23,6 +26,7 @@ dungeon_table = [ { 'name': 'Jabu Jabus Belly', 'hint': 'Jabu Jabu\'s Belly', + 'font_color': 'Blue', 'boss_key': 0, 'small_key': 0, 'small_key_mq': 0, @@ -30,6 +34,8 @@ dungeon_table = [ }, { 'name': 'Forest Temple', + 'hint': 'the Forest Temple', + 'font_color': 'Green', 'boss_key': 1, 'small_key': 5, 'small_key_mq': 6, @@ -37,6 +43,8 @@ dungeon_table = [ }, { 'name': 'Bottom of the Well', + 'hint': 'the Bottom of the Well', + 'font_color': 'Pink', 'boss_key': 0, 'small_key': 3, 'small_key_mq': 2, @@ -44,6 +52,8 @@ dungeon_table = [ }, { 'name': 'Fire Temple', + 'hint': 'the Fire Temple', + 'font_color': 'Red', 'boss_key': 1, 'small_key': 8, 'small_key_mq': 5, @@ -51,6 +61,8 @@ dungeon_table = [ }, { 'name': 'Ice Cavern', + 'hint': 'the Ice Cavern', + 'font_color': 'Blue', 'boss_key': 0, 'small_key': 0, 'small_key_mq': 0, @@ -58,6 +70,8 @@ dungeon_table = [ }, { 'name': 'Water Temple', + 'hint': 'the Water Temple', + 'font_color': 'Blue', 'boss_key': 1, 'small_key': 6, 'small_key_mq': 2, @@ -65,6 +79,8 @@ dungeon_table = [ }, { 'name': 'Shadow Temple', + 'hint': 'the Shadow Temple', + 'font_color': 'Pink', 'boss_key': 1, 'small_key': 5, 'small_key_mq': 6, @@ -72,6 +88,8 @@ dungeon_table = [ }, { 'name': 'Gerudo Training Grounds', + 'hint': 'the Gerudo Training Grounds', + 'font_color': 'Yellow', 'boss_key': 0, 'small_key': 9, 'small_key_mq': 3, @@ -79,6 +97,8 @@ dungeon_table = [ }, { 'name': 'Spirit Temple', + 'hint': 'the Spirit Temple', + 'font_color': 'Yellow', 'boss_key': 1, 'small_key': 5, 'small_key_mq': 7, @@ -100,6 +120,7 @@ def create_dungeons(ootworld): for dungeon_info in dungeon_table: name = dungeon_info['name'] hint = dungeon_info['hint'] if 'hint' in dungeon_info else name + font_color = dungeon_info['font_color'] if 'font_color' in dungeon_info else 'White' if ootworld.logic_rules == 'glitchless': if not ootworld.dungeon_mq[name]: @@ -125,5 +146,5 @@ def create_dungeons(ootworld): for item in dungeon_items: item.priority = True - ootworld.dungeons.append(Dungeon(ootworld, name, hint, boss_keys, small_keys, dungeon_items)) + ootworld.dungeons.append(Dungeon(ootworld, name, hint, font_color, boss_keys, small_keys, dungeon_items)) diff --git a/worlds/oot/Hints.py b/worlds/oot/Hints.py index 246ad6d9a9..f282aeee89 100644 --- a/worlds/oot/Hints.py +++ b/worlds/oot/Hints.py @@ -11,7 +11,7 @@ import json from enum import Enum from .HintList import getHint, getHintGroup, Hint, hintExclusions -from .Messages import update_message_by_id +from .Messages import COLOR_MAP, update_message_by_id from .TextBox import line_wrap from .Utils import data_path, read_json @@ -266,17 +266,6 @@ def getSimpleHintNoPrefix(item): def colorText(gossip_text): - colorMap = { - 'White': '\x40', - 'Red': '\x41', - 'Green': '\x42', - 'Blue': '\x43', - 'Light Blue': '\x44', - 'Pink': '\x45', - 'Yellow': '\x46', - 'Black': '\x47', - } - text = gossip_text.text colors = list(gossip_text.colors) if gossip_text.colors is not None else [] color = 'White' @@ -292,7 +281,7 @@ def colorText(gossip_text): splitText[1] = splitText[1][len(prefix):] break - splitText[1] = '\x05' + colorMap[color] + splitText[1] + '\x05\x40' + splitText[1] = '\x05' + COLOR_MAP[color] + splitText[1] + '\x05\x40' text = ''.join(splitText) return text diff --git a/worlds/oot/Messages.py b/worlds/oot/Messages.py index aa383281c9..8423562612 100644 --- a/worlds/oot/Messages.py +++ b/worlds/oot/Messages.py @@ -1,5 +1,6 @@ # text details: https://wiki.cloudmodding.com/oot/Text_Format +import logging import random from .TextBox import line_wrap @@ -316,6 +317,17 @@ KEYSANITY_MESSAGES = { 0x00A9: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x45Shadow Temple\x05\x40!\x09", } +COLOR_MAP = { + 'White': '\x40', + 'Red': '\x41', + 'Green': '\x42', + 'Blue': '\x43', + 'Light Blue': '\x44', + 'Pink': '\x45', + 'Yellow': '\x46', + 'Black': '\x47', +} + MISC_MESSAGES = { 0x507B: (bytearray( b"\x08I tell you, I saw him!\x04" \ @@ -995,3 +1007,30 @@ def shuffle_messages(messages, except_hints=True, always_allow_skip=True): ])) return permutation + +# Update warp song text boxes for ER +def update_warp_song_text(messages, ootworld): + msg_list = { + 0x088D: 'Minuet of Forest Warp -> Sacred Forest Meadow', + 0x088E: 'Bolero of Fire Warp -> DMC Central Local', + 0x088F: 'Serenade of Water Warp -> Lake Hylia', + 0x0890: 'Requiem of Spirit Warp -> Desert Colossus', + 0x0891: 'Nocturne of Shadow Warp -> Graveyard Warp Pad Region', + 0x0892: 'Prelude of Light Warp -> Temple of Time', + } + + for id, entr in msg_list.items(): + destination = ootworld.world.get_entrance(entr, ootworld.player).connected_region + + if destination.pretty_name: + destination_name = destination.pretty_name + elif destination.hint_text: + destination_name = destination.hint_text + elif destination.dungeon: + destination_name = destination.dungeon.hint + else: + destination_name = destination.name + color = COLOR_MAP[destination.font_color or 'White'] + + new_msg = f"\x08\x05{color}Warp to {destination_name}?\x05\40\x09\x01\x01\x1b\x05{color}OK\x01No\x05\40" + update_message_by_id(messages, id, new_msg) diff --git a/worlds/oot/Patches.py b/worlds/oot/Patches.py index b1b2a9b529..cb7732f1b9 100644 --- a/worlds/oot/Patches.py +++ b/worlds/oot/Patches.py @@ -9,7 +9,7 @@ from .LocationList import business_scrubs from .Hints import writeGossipStoneHints, buildAltarHints, \ buildGanonText, getSimpleHintNoPrefix from .Utils import data_path -from .Messages import read_messages, update_message_by_id, read_shop_items, \ +from .Messages import read_messages, update_message_by_id, read_shop_items, update_warp_song_text, \ write_shop_items, remove_unused_messages, make_player_message, \ add_item_messages, repack_messages, shuffle_messages, \ get_message_by_id @@ -1747,6 +1747,10 @@ def patch_rom(world, rom): elif world.text_shuffle == 'complete': permutation = shuffle_messages(messages, except_hints=False) + # If Warp Song ER is on, update text boxes + if world.warp_songs: + update_warp_song_text(messages, world) + repack_messages(rom, messages, permutation) # output a text dump, for testing... diff --git a/worlds/oot/Regions.py b/worlds/oot/Regions.py index 0cfda38628..eeb9c70581 100644 --- a/worlds/oot/Regions.py +++ b/worlds/oot/Regions.py @@ -38,6 +38,8 @@ class OOTRegion(Region): self.provides_time = TimeOfDay.NONE self.scene = None self.dungeon = None + self.pretty_name = None + self.font_color = None def get_scene(self): if self.scene: diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 8bfbb71cbc..fe4cd73ad9 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -275,6 +275,10 @@ class OOTWorld(World): for region in region_json: new_region = OOTRegion(region['region_name'], RegionType.Generic, None, self.player) new_region.world = self.world + if 'pretty_name' in region: + new_region.pretty_name = region['pretty_name'] + if 'font_color' in region: + new_region.font_color = region['font_color'] if 'scene' in region: new_region.scene = region['scene'] if 'hint' in region: diff --git a/worlds/oot/data/World/Overworld.json b/worlds/oot/data/World/Overworld.json index b483a18dd3..fa01ab6072 100644 --- a/worlds/oot/data/World/Overworld.json +++ b/worlds/oot/data/World/Overworld.json @@ -73,6 +73,7 @@ }, { "region_name": "Kokiri Forest", + "font_color": "Green", "scene": "Kokiri Forest", "hint": "Kokiri Forest", "events": { @@ -107,6 +108,7 @@ }, { "region_name": "KF Outside Deku Tree", + "font_color": "Green", "scene": "Kokiri Forest", "hint": "Kokiri Forest", "events": { @@ -131,6 +133,7 @@ }, { "region_name": "KF Links House", + "pretty_name": "your house", "scene": "KF Links House", "locations": { "KF Links House Cow": "is_adult and can_play(Eponas_Song) and 'Links Cow'" @@ -141,6 +144,7 @@ }, { "region_name": "KF Midos House", + "pretty_name": "Mido's House", "scene": "KF Midos House", "locations": { "KF Midos Top Left Chest": "True", @@ -154,6 +158,7 @@ }, { "region_name": "KF Sarias House", + "pretty_name": "Saria's House", "scene": "KF Sarias House", "exits": { "Kokiri Forest": "True" @@ -161,6 +166,7 @@ }, { "region_name": "KF House of Twins", + "pretty_name": "the House of Twins", "scene": "KF House of Twins", "exits": { "Kokiri Forest": "True" @@ -168,6 +174,7 @@ }, { "region_name": "KF Know It All House", + "pretty_name": "the Know-it-All House", "scene": "KF Know it All House", "exits": { "Kokiri Forest": "True" @@ -175,6 +182,7 @@ }, { "region_name": "KF Kokiri Shop", + "pretty_name": "the Kokiri Shop", "scene": "KF Kokiri Shop", "locations": { "KF Shop Item 1": "True", @@ -192,6 +200,7 @@ }, { "region_name": "LW Forest Exit", + "font_color": "Green", "scene": "Lost Woods", "hint": "the Lost Woods", "exits": { @@ -200,6 +209,7 @@ }, { "region_name": "Lost Woods", + "font_color": "Green", "scene": "Lost Woods", "hint": "the Lost Woods", "events": { @@ -231,6 +241,7 @@ }, { "region_name": "LW Beyond Mido", + "font_color": "Green", "scene": "Lost Woods", "hint": "the Lost Woods", "locations": { @@ -256,6 +267,7 @@ }, { "region_name": "Lost Woods Mushroom Timeout", + "font_color": "Green", "scene": "Lost Woods", "hint": "the Lost Woods", "exits": { @@ -264,8 +276,9 @@ }, { "region_name": "SFM Entryway", + "font_color": "Green", "scene": "Sacred Forest Meadow", - "hint": "Sacred Forest Meadow", + "hint": "the Sacred Forest Meadow", "exits": { "LW Beyond Mido": "True", "Sacred Forest Meadow": " @@ -276,8 +289,9 @@ }, { "region_name": "Sacred Forest Meadow", + "font_color": "Green", "scene": "Sacred Forest Meadow", - "hint": "Sacred Forest Meadow", + "hint": "the Sacred Forest Meadow", "locations": { "Song from Saria": "is_child and Zeldas_Letter", "Sheik in Forest": "is_adult", @@ -296,8 +310,9 @@ }, { "region_name": "SFM Forest Temple Entrance Ledge", + "font_color": "Green", "scene": "Sacred Forest Meadow", - "hint": "Sacred Forest Meadow", + "hint": "the Sacred Forest Meadow", "exits": { "Sacred Forest Meadow": "True", "Forest Temple Lobby": "True" @@ -305,6 +320,7 @@ }, { "region_name": "LW Bridge From Forest", + "font_color": "Green", "scene": "Lost Woods", "hint": "the Lost Woods", "locations": { @@ -316,6 +332,7 @@ }, { "region_name": "LW Bridge", + "font_color": "Green", "scene": "Lost Woods", "hint": "the Lost Woods", "exits": { @@ -326,6 +343,7 @@ }, { "region_name": "Hyrule Field", + "font_color": "Light Blue", "scene": "Hyrule Field", "hint": "Hyrule Field", "time_passes": true, @@ -355,6 +373,7 @@ }, { "region_name": "Lake Hylia", + "font_color": "Blue", "scene": "Lake Hylia", "hint": "Lake Hylia", "time_passes": true, @@ -400,6 +419,7 @@ }, { "region_name": "LH Fishing Island", + "font_color": "Blue", "scene": "Lake Hylia", "hint": "Lake Hylia", "exits": { @@ -417,6 +437,7 @@ }, { "region_name": "LH Lab", + "pretty_name": "the Lakeside Laboratory", "scene": "LH Lab", "events": { "Eyedrops Access": " @@ -435,6 +456,7 @@ }, { "region_name": "LH Fishing Hole", + "pretty_name": "the Fishing Pond", "scene": "LH Fishing Hole", "locations": { "LH Child Fishing": "is_child", @@ -446,6 +468,7 @@ }, { "region_name": "Gerudo Valley", + "font_color": "Yellow", "scene": "Gerudo Valley", "hint": "Gerudo Valley", "time_passes": true, @@ -465,6 +488,7 @@ }, { "region_name": "GV Upper Stream", + "font_color": "Yellow", "scene": "Gerudo Valley", "hint": "Gerudo Valley", "time_passes": true, @@ -482,6 +506,7 @@ }, { "region_name": "GV Lower Stream", + "font_color": "Yellow", "scene": "Gerudo Valley", "hint": "Gerudo Valley", "time_passes": true, @@ -491,6 +516,7 @@ }, { "region_name": "GV Grotto Ledge", + "font_color": "Yellow", "scene": "Gerudo Valley", "hint": "Gerudo Valley", "time_passes": true, @@ -502,6 +528,7 @@ }, { "region_name": "GV Crate Ledge", + "font_color": "Yellow", "scene": "Gerudo Valley", "hint": "Gerudo Valley", "time_passes": true, @@ -514,6 +541,7 @@ }, { "region_name": "GV Fortress Side", + "font_color": "Yellow", "scene": "Gerudo Valley", "hint": "Gerudo Valley", "time_passes": true, @@ -539,6 +567,7 @@ }, { "region_name": "GV Carpenter Tent", + "pretty_name": "the Carpenter's Tent", "scene": "GV Carpenter Tent", "exits": { "GV Fortress Side": "True" @@ -546,6 +575,7 @@ }, { "region_name": "Gerudo Fortress", + "font_color": "Yellow", "scene": "Gerudo Fortress", "hint": "Gerudo's Fortress", "events": { @@ -583,6 +613,7 @@ }, { "region_name": "GF Outside Gate", + "font_color": "Yellow", "scene": "Gerudo Fortress", "hint": "Gerudo's Fortress", "exits": { @@ -592,8 +623,9 @@ }, { "region_name": "Wasteland Near Fortress", + "font_color": "Yellow", "scene": "Haunted Wasteland", - "hint": "Haunted Wasteland", + "hint": "the Haunted Wasteland", "exits": { "GF Outside Gate": "True", "Haunted Wasteland": " @@ -602,8 +634,9 @@ }, { "region_name": "Haunted Wasteland", + "font_color": "Yellow", "scene": "Haunted Wasteland", - "hint": "Haunted Wasteland", + "hint": "the Haunted Wasteland", "locations": { "Wasteland Chest": "has_fire_source", "Wasteland Bombchu Salesman": " @@ -621,8 +654,9 @@ }, { "region_name": "Wasteland Near Colossus", + "font_color": "Yellow", "scene": "Haunted Wasteland", - "hint": "Haunted Wasteland", + "hint": "the Haunted Wasteland", "exits": { "Desert Colossus": "True", "Haunted Wasteland": "logic_reverse_wasteland" @@ -630,8 +664,9 @@ }, { "region_name": "Desert Colossus", + "font_color": "Yellow", "scene": "Desert Colossus", - "hint": "Desert Colossus", + "hint": "the Desert Colossus", "time_passes": true, "locations": { "Colossus Freestanding PoH": "is_adult and here(can_plant_bean)", @@ -655,8 +690,9 @@ }, { "region_name": "Desert Colossus From Spirit Lobby", + "font_color": "Yellow", "scene": "Desert Colossus", - "hint": "Desert Colossus", + "hint": "the Desert Colossus", "locations": { "Sheik at Colossus": "True" }, @@ -666,6 +702,7 @@ }, { "region_name": "Colossus Great Fairy Fountain", + "pretty_name": "a Great Fairy Fountain", "scene": "Colossus Great Fairy Fountain", "locations": { "Colossus Great Fairy Reward": "can_play(Zeldas_Lullaby)" @@ -676,6 +713,8 @@ }, { "region_name": "Market Entrance", + "pretty_name": "the Market Entrance", + "font_color": "Light Blue", "scene": "Market Entrance", "hint": "the Market", "exits": { @@ -686,6 +725,7 @@ }, { "region_name": "Market", + "font_color": "Light Blue", "scene": "Market", "hint": "the Market", "exits": { @@ -703,6 +743,7 @@ }, { "region_name": "Market Back Alley", + "font_color": "Light Blue", "scene": "Market", "hint": "the Market", "exits": { @@ -714,6 +755,8 @@ }, { "region_name": "ToT Entrance", + "pretty_name": "the Temple of Time Entrance", + "font_color": "Light Blue", "scene": "ToT Entrance", "hint": "the Market", "locations": { @@ -730,8 +773,9 @@ }, { "region_name": "Temple of Time", + "font_color": "Light Blue", "scene": "Temple of Time", - "hint": "Temple of Time", + "hint": "the Temple of Time", "locations": { "ToT Light Arrows Cutscene": "is_adult and can_trigger_lacs" }, @@ -742,8 +786,9 @@ }, { "region_name": "Beyond Door of Time", + "font_color": "Light Blue", "scene": "Temple of Time", - "hint": "Temple of Time", + "hint": "the Temple of Time", "locations": { "Master Sword Pedestal": "True", "Sheik at Temple": "Forest_Medallion and is_adult" @@ -754,6 +799,8 @@ }, { "region_name": "Castle Grounds", + "pretty_name": "the Castle Grounds", + "font_color": "Light Blue", "scene": "Castle Grounds", "exits": { "Market": "is_child or at_dampe_time", @@ -763,6 +810,8 @@ }, { "region_name": "Hyrule Castle Grounds", + "pretty_name": "the Castle Grounds", + "font_color": "Light Blue", "scene": "Castle Grounds", "hint": "Hyrule Castle", "time_passes": true, @@ -784,6 +833,8 @@ }, { "region_name": "HC Garden", + "pretty_name": "the Castle Grounds", + "font_color": "Light Blue", "scene": "Castle Grounds", "hint": "Hyrule Castle", "exits": { @@ -794,6 +845,8 @@ { # Directly reachable from Root in "Free Zelda" "region_name": "HC Garden Locations", + "pretty_name": "the Castle Grounds", + "font_color": "Light Blue", "scene": "Castle Grounds", "hint": "Hyrule Castle", "locations": { @@ -803,6 +856,7 @@ }, { "region_name": "HC Great Fairy Fountain", + "pretty_name": "a Great Fairy Fountain", "scene": "HC Great Fairy Fountain", "locations": { "HC Great Fairy Reward": "can_play(Zeldas_Lullaby)" @@ -813,6 +867,8 @@ }, { "region_name": "Ganons Castle Grounds", + "pretty_name": "the Castle Grounds", + "font_color": "Light Blue", "scene": "Castle Grounds", "hint": "outside Ganon's Castle", "locations": { @@ -826,6 +882,7 @@ }, { "region_name": "OGC Great Fairy Fountain", + "pretty_name": "a Great Fairy Fountain", "scene": "OGC Great Fairy Fountain", "locations": { "OGC Great Fairy Reward": "can_play(Zeldas_Lullaby)" @@ -836,6 +893,7 @@ }, { "region_name": "Market Guard House", + "pretty_name": "the Gaurd House", "scene": "Market Guard House", "events": { "Sell Big Poe": "is_adult and Bottle_with_Big_Poe" @@ -852,6 +910,7 @@ }, { "region_name": "Market Bazaar", + "pretty_name": "a Bazaar", "scene": "Market Bazaar", "locations": { "Market Bazaar Item 1": "True", @@ -869,6 +928,7 @@ }, { "region_name": "Market Mask Shop", + "pretty_name": "the Mask Shop", "scene": "Market Mask Shop", "events": { "Skull Mask": "Zeldas_Letter and (complete_mask_quest or at('Kakariko Village', is_child))", @@ -884,6 +944,7 @@ }, { "region_name": "Market Shooting Gallery", + "pretty_name": "a Shooting Gallery", "scene": "Market Shooting Gallery", "locations": { "Market Shooting Gallery Reward": "is_child" @@ -894,6 +955,7 @@ }, { "region_name": "Market Bombchu Bowling", + "pretty_name": "the Bombchu Bowling Alley", "scene": "Market Bombchu Bowling", "locations": { "Market Bombchu Bowling First Prize": "found_bombchus", @@ -906,6 +968,7 @@ }, { "region_name": "Market Potion Shop", + "pretty_name": "a Potion Shop", "scene": "Market Potion Shop", "locations": { "Market Potion Shop Item 1": "True", @@ -923,6 +986,7 @@ }, { "region_name": "Market Treasure Chest Game", + "pretty_name": "the Treasure Chest Game", "scene": "Market Treasure Chest Game", "locations": { "Market Treasure Chest Game Reward": "can_use(Lens_of_Truth)" @@ -933,6 +997,7 @@ }, { "region_name": "Market Bombchu Shop", + "pretty_name": "the Bombchu Shop", "scene": "Market Bombchu Shop", "locations": { "Market Bombchu Shop Item 1": "True", @@ -950,6 +1015,7 @@ }, { "region_name": "Market Dog Lady House", + "pretty_name": "the Dog Lady House", "scene": "Market Dog Lady House", "locations": { "Market Lost Dog": "is_child and at_night" @@ -960,6 +1026,7 @@ }, { "region_name": "Market Man in Green House", + "pretty_name": "the Man in Green House", "scene": "Market Man in Green House", "exits": { "Market Back Alley": "True" @@ -967,6 +1034,7 @@ }, { "region_name": "Kakariko Village", + "font_color": "Pink", "scene": "Kakariko Village", "hint": "Kakariko Village", "events": { @@ -1016,6 +1084,7 @@ }, { "region_name": "Kak Impas Ledge", + "font_color": "Pink", "scene": "Kakariko Village", "hint": "Kakariko Village", "exits": { @@ -1025,6 +1094,7 @@ }, { "region_name": "Kak Impas Rooftop", + "font_color": "Pink", "scene": "Kakariko Village", "hint": "Kakariko Village", "locations": { @@ -1037,6 +1107,7 @@ }, { "region_name": "Kak Odd Medicine Rooftop", + "font_color": "Pink", "scene": "Kakariko Village", "hint": "Kakariko Village", "locations": { @@ -1049,6 +1120,7 @@ }, { "region_name": "Kak Backyard", + "font_color": "Pink", "scene": "Kakariko Village", "hint": "Kakariko Village", "exits": { @@ -1060,6 +1132,7 @@ }, { "region_name": "Kak Carpenter Boss House", + "pretty_name": "the Carpenter's House", "scene": "Kak Carpenter Boss House", "events": { "Wake Up Adult Talon": "is_adult and (Pocket_Egg or Pocket_Cucco)" @@ -1070,6 +1143,7 @@ }, { "region_name": "Kak House of Skulltula", + "pretty_name": "the House of Skulltula", "scene": "Kak House of Skulltula", "locations": { "Kak 10 Gold Skulltula Reward": "(Gold_Skulltula_Token, 10)", @@ -1084,6 +1158,7 @@ }, { "region_name": "Kak Impas House", + "pretty_name": "Impa's House", "scene": "Kak Impas House", "exits": { "Kakariko Village": "True", @@ -1092,6 +1167,7 @@ }, { "region_name": "Kak Impas House Back", + "pretty_name": "Impa's House", "scene": "Kak Impas House", "locations": { "Kak Impas House Freestanding PoH": "True" @@ -1103,12 +1179,15 @@ }, { "region_name": "Kak Impas House Near Cow", + "pretty_name": "Impa's House", + "scene": "Kak Impas House", "locations": { "Kak Impas House Cow": "can_play(Eponas_Song)" } }, { "region_name": "Kak Windmill", + "pretty_name": "the Windmill", "scene": "Windmill and Dampes Grave", "events": { "Drain Well": "is_child and can_play(Song_of_Storms)" @@ -1125,6 +1204,7 @@ }, { "region_name": "Kak Bazaar", + "pretty_name": "a Bazaar", "scene": "Kak Bazaar", "locations": { "Kak Bazaar Item 1": "True", @@ -1142,6 +1222,7 @@ }, { "region_name": "Kak Shooting Gallery", + "pretty_name": "a Shooting Gallery", "scene": "Kak Shooting Gallery", "locations": { "Kak Shooting Gallery Reward": "is_adult and Bow" @@ -1152,7 +1233,8 @@ }, { "region_name": "Kak Potion Shop Front", - "scene": "Kak Potion Shop Front", + "pretty_name": "a Potion Shop", + "scene": "Kak Potion Shop", "locations": { "Kak Potion Shop Item 1": "is_adult", "Kak Potion Shop Item 2": "is_adult", @@ -1170,7 +1252,8 @@ }, { "region_name": "Kak Potion Shop Back", - "scene": "Kak Potion Shop Back", + "pretty_name": "a Potion Shop", + "scene": "Kak Potion Shop", "exits": { "Kak Backyard": "is_adult", "Kak Potion Shop Front": "True" @@ -1178,6 +1261,7 @@ }, { "region_name": "Kak Odd Medicine Building", + "pretty_name": "the Oddity Shop", "scene": "Kak Odd Medicine Building", "events": { "Odd Potion Access": " @@ -1190,6 +1274,7 @@ }, { "region_name": "Graveyard", + "font_color": "Pink", "scene": "Graveyard", "hint": "the Graveyard", "locations": { @@ -1214,6 +1299,7 @@ }, { "region_name": "Graveyard Shield Grave", + "pretty_name": "the Shield Grave", "scene": "Graveyard Shield Grave", "locations": { "Graveyard Shield Grave Chest": "True", @@ -1225,6 +1311,7 @@ }, { "region_name": "Graveyard Heart Piece Grave", + "pretty_name": "the Heart Piece Grave", "scene": "Graveyard Heart Piece Grave", "locations": { "Graveyard Heart Piece Grave Chest": "can_play(Suns_Song)" @@ -1235,6 +1322,7 @@ }, { "region_name": "Graveyard Composers Grave", + "pretty_name": "the Composers' Grave", "scene": "Graveyard Composers Grave", "locations": { "Graveyard Composers Grave Chest": "has_fire_source", @@ -1249,6 +1337,7 @@ }, { "region_name": "Graveyard Dampes Grave", + "pretty_name": "Damp\u00e9's Grave", "scene": "Windmill and Dampes Grave", "events": { "Dampes Windmill Access": "is_adult and can_play(Song_of_Time)" @@ -1265,6 +1354,7 @@ }, { "region_name": "Graveyard Dampes House", + "pretty_name": "Damp\u00e9's House", "scene": "Graveyard Dampes House", "exits": { "Graveyard": "True" @@ -1272,6 +1362,7 @@ }, { "region_name": "Graveyard Warp Pad Region", + "font_color": "Pink", "scene": "Graveyard", "hint": "the Graveyard", "locations": { @@ -1287,6 +1378,7 @@ }, { "region_name": "Kak Behind Gate", + "font_color": "Pink", "scene": "Kakariko Village", "hint": "Kakariko Village", "exits": { @@ -1297,6 +1389,7 @@ }, { "region_name": "Death Mountain", + "font_color": "Red", "scene": "Death Mountain", "hint": "Death Mountain Trail", "time_passes": true, @@ -1336,6 +1429,7 @@ }, { "region_name": "Death Mountain Summit", + "font_color": "Red", "scene": "Death Mountain", "hint": "Death Mountain Trail", "time_passes": true, @@ -1371,6 +1465,7 @@ }, { "region_name": "Goron City", + "font_color": "Red", "scene": "Goron City", "hint": "Goron City", "events": { @@ -1435,6 +1530,7 @@ }, { "region_name": "GC Woods Warp", + "font_color": "Red", "scene": "Goron City", "hint": "Goron City", "events": { @@ -1447,6 +1543,7 @@ }, { "region_name": "GC Darunias Chamber", + "font_color": "Red", "scene": "Goron City", "hint": "Goron City", "events": { @@ -1462,6 +1559,7 @@ }, { "region_name": "GC Grotto Platform", + "font_color": "Red", "scene": "Goron City", "hint": "Goron City", "exits": { @@ -1474,6 +1572,7 @@ }, { "region_name": "GC Shop", + "pretty_name": "the Goron Shop", "scene": "GC Shop", "locations": { "GC Shop Item 1": "True", @@ -1491,6 +1590,7 @@ }, { "region_name": "DMC Upper Nearby", + "font_color": "Red", "scene": "Death Mountain Crater", "hint": "Death Mountain Crater", "exits": { @@ -1501,6 +1601,7 @@ }, { "region_name": "DMC Upper Local", + "font_color": "Red", "scene": "Death Mountain Crater", "hint": "Death Mountain Crater", "locations": { @@ -1521,6 +1622,7 @@ }, { "region_name": "DMC Ladder Area Nearby", + "font_color": "Red", "scene": "Death Mountain Crater", "hint": "Death Mountain Crater", "locations": { @@ -1535,6 +1637,7 @@ }, { "region_name": "DMC Lower Nearby", + "font_color": "Red", "scene": "Death Mountain Crater", "hint": "Death Mountain Crater", "exits": { @@ -1546,6 +1649,7 @@ }, { "region_name": "DMC Lower Local", + "font_color": "Red", "scene": "Death Mountain Crater", "hint": "Death Mountain Crater", "exits": { @@ -1559,6 +1663,7 @@ }, { "region_name": "DMC Central Nearby", + "font_color": "Red", "scene": "Death Mountain Crater", "hint": "Death Mountain Crater", "locations": { @@ -1574,6 +1679,7 @@ }, { "region_name": "DMC Central Local", + "font_color": "Red", "scene": "Death Mountain Crater", "hint": "Death Mountain Crater", "locations": { @@ -1593,6 +1699,7 @@ }, { "region_name": "DMC Fire Temple Entrance", + "font_color": "Red", "scene": "Death Mountain Crater", "hint": "Death Mountain Crater", "exits": { @@ -1602,6 +1709,7 @@ }, { "region_name": "DMC Great Fairy Fountain", + "pretty_name": "a Great Fairy Fountain", "scene": "DMC Great Fairy Fountain", "locations": { "DMC Great Fairy Reward": "can_play(Zeldas_Lullaby)" @@ -1612,6 +1720,7 @@ }, { "region_name": "DMT Great Fairy Fountain", + "pretty_name": "a Great Fairy Fountain", "scene": "DMT Great Fairy Fountain", "locations": { "DMT Great Fairy Reward": "can_play(Zeldas_Lullaby)" @@ -1622,6 +1731,7 @@ }, { "region_name": "ZR Front", + "font_color": "Blue", "scene": "Zora River", "hint": "Zora's River", "time_passes": true, @@ -1635,6 +1745,7 @@ }, { "region_name": "Zora River", + "font_color": "Blue", "scene": "Zora River", "hint": "Zora's River", "time_passes": true, @@ -1675,6 +1786,7 @@ }, { "region_name": "ZR Behind Waterfall", + "font_color": "Blue", "scene": "Zora River", "hint": "Zora's River", "exits": { @@ -1684,6 +1796,7 @@ }, { "region_name": "ZR Top of Waterfall", + "font_color": "Blue", "scene": "Zora River", "hint": "Zora's River", "exits": { @@ -1692,6 +1805,7 @@ }, { "region_name": "Zoras Domain", + "font_color": "Blue", "scene": "Zoras Domain", "hint": "Zora's Domain", "events": { @@ -1728,6 +1842,7 @@ }, { "region_name": "ZD Behind King Zora", + "font_color": "Blue", "scene": "Zoras Domain", "hint": "Zora's Domain", "exits": { @@ -1739,6 +1854,7 @@ }, { "region_name": "ZD Eyeball Frog Timeout", + "font_color": "Blue", "scene": "Zoras Domain", "hint": "Zora's Domain", "exits": { @@ -1747,6 +1863,7 @@ }, { "region_name": "Zoras Fountain", + "font_color": "Blue", "scene": "Zoras Fountain", "hint": "Zora's Fountain", "locations": { @@ -1772,6 +1889,7 @@ }, { "region_name": "ZF Ice Ledge", + "font_color": "Blue", "scene": "Zoras Fountain", "hint": "Zora's Fountain", "exits": { @@ -1781,6 +1899,7 @@ }, { "region_name": "ZD Shop", + "pretty_name": "the Zora Shop", "scene": "ZD Shop", "locations": { "ZD Shop Item 1": "True", @@ -1798,6 +1917,7 @@ }, { "region_name": "ZF Great Fairy Fountain", + "pretty_name": "a Great Fairy Fountain", "scene": "ZF Great Fairy Fountain", "locations": { "ZF Great Fairy Reward": "can_play(Zeldas_Lullaby)" @@ -1808,6 +1928,7 @@ }, { "region_name": "Lon Lon Ranch", + "font_color": "Light Blue", "scene": "Lon Lon Ranch", "hint": "Lon Lon Ranch", "events": { @@ -1831,6 +1952,7 @@ }, { "region_name": "LLR Talons House", + "pretty_name": "Talon's House", "scene": "LLR Talons House", "locations": { "LLR Talons Chickens": "is_child and at_day and Zeldas_Letter" @@ -1841,6 +1963,7 @@ }, { "region_name": "LLR Stables", + "pretty_name": "Lon Lon Stable", "scene": "LLR Stables", "locations": { "LLR Stables Left Cow": "can_play(Eponas_Song)", @@ -1852,6 +1975,7 @@ }, { "region_name": "LLR Tower", + "pretty_name": "Lon Lon Tower", "scene": "LLR Tower", "locations": { "LLR Freestanding PoH": "is_child", @@ -1864,6 +1988,7 @@ }, { "region_name": "Ganons Castle Tower", + "pretty_name": "Ganon's Castle", "dungeon": "Ganons Castle", "locations": { "Ganons Tower Boss Key Chest": "True", @@ -1873,6 +1998,7 @@ }, { "region_name": "GF Storms Grotto", + "pretty_name": "a Fairy Fountain", "scene": "GF Storms Grotto", "locations": { "Free Fairies": "has_bottle" @@ -1883,6 +2009,7 @@ }, { "region_name": "ZD Storms Grotto", + "pretty_name": "a Fairy Fountain", "scene": "ZD Storms Grotto", "locations": { "Free Fairies": "has_bottle" @@ -1893,6 +2020,7 @@ }, { "region_name": "KF Storms Grotto", + "pretty_name": "a Generic Grotto", "scene": "KF Storms Grotto", "locations": { "KF Storms Grotto Chest": "True", @@ -1908,6 +2036,7 @@ }, { "region_name": "LW Near Shortcuts Grotto", + "pretty_name": "a Generic Grotto", "scene": "LW Near Shortcuts Grotto", "locations": { "LW Near Shortcuts Grotto Chest": "True", @@ -1923,6 +2052,7 @@ }, { "region_name": "Deku Theater", + "pretty_name": "the Deku Theater", "scene": "Deku Theater", "locations": { "Deku Theater Skull Mask": "is_child and 'Skull Mask'", @@ -1934,6 +2064,7 @@ }, { "region_name": "LW Scrubs Grotto", + "pretty_name": "a Deku Scrub Grotto", "scene": "LW Scrubs Grotto", "locations": { "LW Deku Scrub Grotto Rear": "can_stun_deku", @@ -1945,6 +2076,7 @@ }, { "region_name": "SFM Fairy Grotto", + "pretty_name": "a Fairy Fountain", "scene": "SFM Fairy Grotto", "locations": { "Free Fairies": "has_bottle" @@ -1955,6 +2087,7 @@ }, { "region_name": "SFM Storms Grotto", + "pretty_name": "a Deku Scrub Grotto", "scene": "SFM Storms Grotto", "locations": { "SFM Deku Scrub Grotto Rear": "can_stun_deku", @@ -1966,6 +2099,7 @@ }, { "region_name": "SFM Wolfos Grotto", + "pretty_name": "the Wolfos Grotto", "scene": "SFM Wolfos Grotto", "locations": { "SFM Wolfos Grotto Chest": " @@ -1978,6 +2112,7 @@ }, { "region_name": "LLR Grotto", + "pretty_name": "a Deku Scrub Grotto", "scene": "LLR Grotto", "locations": { "LLR Deku Scrub Grotto Left": "can_stun_deku", @@ -1990,6 +2125,7 @@ }, { "region_name": "HF Southeast Grotto", + "pretty_name": "a Generic Grotto", "scene": "HF Southeast Grotto", "locations": { "HF Southeast Grotto Chest": "True", @@ -2005,6 +2141,7 @@ }, { "region_name": "HF Open Grotto", + "pretty_name": "a Generic Grotto", "scene": "HF Open Grotto", "locations": { "HF Open Grotto Chest": "True", @@ -2020,6 +2157,7 @@ }, { "region_name": "HF Inside Fence Grotto", + "pretty_name": "a Deku Scrub Grotto", "scene": "HF Inside Fence Grotto", "locations": { "HF Deku Scrub Grotto": "can_stun_deku" @@ -2030,6 +2168,7 @@ }, { "region_name": "HF Cow Grotto", + "pretty_name": "the Spider Cow Grotto", "scene": "HF Cow Grotto", "locations": { "HF GS Cow Grotto": " @@ -2046,6 +2185,7 @@ }, { "region_name": "HF Near Market Grotto", + "pretty_name": "a Generic Grotto", "scene": "HF Near Market Grotto", "locations": { "HF Near Market Grotto Chest": "True", @@ -2061,6 +2201,7 @@ }, { "region_name": "HF Fairy Grotto", + "pretty_name": "a Fairy Fountain", "scene": "HF Fairy Grotto", "locations": { "Free Fairies": "has_bottle" @@ -2071,6 +2212,7 @@ }, { "region_name": "HF Near Kak Grotto", + "pretty_name": "a Skulltula Grotto", "scene": "HF Near Kak Grotto", "locations": { "HF GS Near Kak Grotto": "can_use(Boomerang) or can_use(Hookshot)" @@ -2081,6 +2223,7 @@ }, { "region_name": "HF Tektite Grotto", + "pretty_name": "the Tektite Grotto", "scene": "HF Tektite Grotto", "locations": { "HF Tektite Grotto Freestanding PoH": " @@ -2092,6 +2235,7 @@ }, { "region_name": "HC Storms Grotto", + "pretty_name": "a Skulltula Grotto", "scene": "HC Storms Grotto", "locations": { "HC GS Storms Grotto": " @@ -2108,6 +2252,7 @@ }, { "region_name": "Kak Redead Grotto", + "pretty_name": "the ReDead Grotto", "scene": "Kak Redead Grotto", "locations": { "Kak Redead Grotto Chest": " @@ -2120,6 +2265,7 @@ }, { "region_name": "Kak Open Grotto", + "pretty_name": "a Generic Grotto", "scene": "Kak Open Grotto", "locations": { "Kak Open Grotto Chest": "True", @@ -2135,6 +2281,7 @@ }, { "region_name": "DMT Cow Grotto", + "pretty_name": "the Cow Grotto", "scene": "DMT Cow Grotto", "locations": { "DMT Cow Grotto Cow": "can_play(Eponas_Song)" @@ -2145,6 +2292,7 @@ }, { "region_name": "DMT Storms Grotto", + "pretty_name": "a Generic Grotto", "scene": "DMT Storms Grotto", "locations": { "DMT Storms Grotto Chest": "True", @@ -2160,6 +2308,7 @@ }, { "region_name": "GC Grotto", + "pretty_name": "a Deku Scrub Grotto", "scene": "GC Grotto", "locations": { "GC Deku Scrub Grotto Left": "can_stun_deku", @@ -2172,6 +2321,7 @@ }, { "region_name": "DMC Upper Grotto", + "pretty_name": "a Generic Grotto", "scene": "DMC Upper Grotto", "locations": { "DMC Upper Grotto Chest": "True", @@ -2187,6 +2337,7 @@ }, { "region_name": "DMC Hammer Grotto", + "pretty_name": "a Deku Scrub Grotto", "scene": "DMC Hammer Grotto", "locations": { "DMC Deku Scrub Grotto Left": "can_stun_deku", @@ -2199,6 +2350,7 @@ }, { "region_name": "ZR Open Grotto", + "pretty_name": "a Generic Grotto", "scene": "ZR Open Grotto", "locations": { "ZR Open Grotto Chest": "True", @@ -2214,6 +2366,7 @@ }, { "region_name": "ZR Fairy Grotto", + "pretty_name": "a Fairy Fountain", "scene": "ZR Fairy Grotto", "locations": { "Free Fairies": "has_bottle" @@ -2224,6 +2377,7 @@ }, { "region_name": "ZR Storms Grotto", + "pretty_name": "a Deku Scrub Grotto", "scene": "ZR Storms Grotto", "locations": { "ZR Deku Scrub Grotto Rear": "can_stun_deku", @@ -2235,6 +2389,7 @@ }, { "region_name": "LH Grotto", + "pretty_name": "a Deku Scrub Grotto", "scene": "LH Grotto", "locations": { "LH Deku Scrub Grotto Left": "can_stun_deku", @@ -2247,6 +2402,7 @@ }, { "region_name": "Colossus Grotto", + "pretty_name": "a Deku Scrub Grotto", "scene": "Colossus Grotto", "locations": { "Colossus Deku Scrub Grotto Rear": "can_stun_deku", @@ -2258,6 +2414,7 @@ }, { "region_name": "GV Octorok Grotto", + "pretty_name": "the Octorok Grotto", "scene": "GV Octorok Grotto", "exits": { "GV Grotto Ledge": "True" @@ -2265,6 +2422,7 @@ }, { "region_name": "GV Storms Grotto", + "pretty_name": "a Deku Scrub Grotto", "scene": "GV Storms Grotto", "locations": { "GV Deku Scrub Grotto Rear": "can_stun_deku",