Bunch of fixes for the baserom changes
This commit is contained in:
@@ -53,8 +53,6 @@ class World(object):
|
|||||||
self._location_cache = {}
|
self._location_cache = {}
|
||||||
self.required_locations = []
|
self.required_locations = []
|
||||||
self.shuffle_bonk_prizes = False
|
self.shuffle_bonk_prizes = False
|
||||||
self.light_world_light_cone = False
|
|
||||||
self.dark_world_light_cone = False
|
|
||||||
self.clock_mode = 'none'
|
self.clock_mode = 'none'
|
||||||
self.rupoor_cost = 10
|
self.rupoor_cost = 10
|
||||||
self.aga_randomness = True
|
self.aga_randomness = True
|
||||||
|
|||||||
@@ -53,18 +53,17 @@ class InitialSram:
|
|||||||
def pre_open_pyramid_hole(self):
|
def pre_open_pyramid_hole(self):
|
||||||
self._or_value(OVERWORLD_DATA+0x5B, 0x20)
|
self._or_value(OVERWORLD_DATA+0x5B, 0x20)
|
||||||
|
|
||||||
|
def pre_open_tr_bomb_doors(self):
|
||||||
|
self._or_value(ROOM_DATA+0x47, 0x80)
|
||||||
|
self._or_value(ROOM_DATA+0x01AB, 0x80)
|
||||||
|
|
||||||
def set_starting_equipment(self, world: object, player: int):
|
def set_starting_equipment(self, world: object, player: int):
|
||||||
equip = [0] * (0x340 + 0x4F)
|
equip = [0] * (0x340 + 0x4F)
|
||||||
equip[0x36C] = 0x18
|
equip[0x36C] = 0x18
|
||||||
equip[0x36D] = 0x18
|
equip[0x36D] = 0x18
|
||||||
equip[0x379] = 0x68
|
equip[0x379] = 0x68
|
||||||
if world.bombbag[player]:
|
starting_bomb_cap_upgrades = 10 if not world.bombbag[player] else 0
|
||||||
starting_max_bombs = 0
|
starting_arrow_cap_upgrades = 30
|
||||||
else:
|
|
||||||
starting_max_bombs = 10
|
|
||||||
starting_max_arrows = 30
|
|
||||||
starting_bomb_cap_upgrades = 0
|
|
||||||
starting_arrow_cap_upgrades = 0
|
|
||||||
starting_bombs = 0
|
starting_bombs = 0
|
||||||
starting_arrows = 0
|
starting_arrows = 0
|
||||||
|
|
||||||
@@ -204,8 +203,8 @@ class InitialSram:
|
|||||||
|
|
||||||
equip[0x370] = min(starting_bomb_cap_upgrades, 50)
|
equip[0x370] = min(starting_bomb_cap_upgrades, 50)
|
||||||
equip[0x371] = min(starting_arrow_cap_upgrades, 70)
|
equip[0x371] = min(starting_arrow_cap_upgrades, 70)
|
||||||
equip[0x343] = min(starting_bombs, (equip[0x370] + starting_max_bombs))
|
equip[0x343] = min(starting_bombs, equip[0x370])
|
||||||
equip[0x377] = min(starting_arrows, (equip[0x371] + starting_max_arrows))
|
equip[0x377] = min(starting_arrows, equip[0x371])
|
||||||
|
|
||||||
# Assertion and copy equip to initial_sram_bytes
|
# Assertion and copy equip to initial_sram_bytes
|
||||||
assert equip[:0x340] == [0] * 0x340
|
assert equip[:0x340] == [0] * 0x340
|
||||||
|
|||||||
20
Items.py
20
Items.py
@@ -60,19 +60,19 @@ item_table = {'Bow': (True, False, None, 0x0B, 200, 'You have\nchosen the\narche
|
|||||||
'Progressive Sword': (True, False, 'Sword', 0x5E, 150, 'A better copy\nof your sword\nfor your time', 'the unknown sword', 'sword-wielding kid', 'sword for sale', 'fungus for some slasher', 'sword boy fights again', 'a sword'),
|
'Progressive Sword': (True, False, 'Sword', 0x5E, 150, 'A better copy\nof your sword\nfor your time', 'the unknown sword', 'sword-wielding kid', 'sword for sale', 'fungus for some slasher', 'sword boy fights again', 'a sword'),
|
||||||
'Progressive Glove': (True, False, None, 0x61, 150, 'A way to lift\nheavier things', 'and the lift upgrade', 'body-building kid', 'some glove for sale', 'fungus for gloves', 'body-building boy lifts again', 'a glove'),
|
'Progressive Glove': (True, False, None, 0x61, 150, 'A way to lift\nheavier things', 'and the lift upgrade', 'body-building kid', 'some glove for sale', 'fungus for gloves', 'body-building boy lifts again', 'a glove'),
|
||||||
'Silver Arrows': (True, False, None, 0x58, 100, 'Do you fancy\nsilver tipped\narrows?', 'and the ganonsbane', 'ganon-killing kid', 'ganon doom for sale', 'fungus for pork', 'archer boy shines again', 'the silver arrows'),
|
'Silver Arrows': (True, False, None, 0x58, 100, 'Do you fancy\nsilver tipped\narrows?', 'and the ganonsbane', 'ganon-killing kid', 'ganon doom for sale', 'fungus for pork', 'archer boy shines again', 'the silver arrows'),
|
||||||
'Green Pendant': (True, False, 'Crystal', [0x04, 0x38, 0x62, 0x00, 0x69, 0x01, 0x08], 999, None, None, None, None, None, None, None),
|
'Green Pendant': (True, False, 'Crystal', [0x04, 0x38, 0x62, 0x00, 0x69, 0x37, 0x08], 999, None, None, None, None, None, None, None),
|
||||||
'Blue Pendant': (True, False, 'Crystal', [0x02, 0x34, 0x60, 0x00, 0x69, 0x02, 0x09], 999, None, None, None, None, None, None, None),
|
'Blue Pendant': (True, False, 'Crystal', [0x02, 0x34, 0x60, 0x00, 0x69, 0x38, 0x09], 999, None, None, None, None, None, None, None),
|
||||||
'Red Pendant': (True, False, 'Crystal', [0x01, 0x32, 0x60, 0x00, 0x69, 0x03, 0x0a], 999, None, None, None, None, None, None, None),
|
'Red Pendant': (True, False, 'Crystal', [0x01, 0x32, 0x60, 0x00, 0x69, 0x39, 0x0a], 999, None, None, None, None, None, None, None),
|
||||||
'Triforce': (True, False, None, 0x6A, 777, '\n YOU WIN!', 'and the triforce', 'victorious kid', 'victory for sale', 'fungus for the win', 'greedy boy wins game again', 'the Triforce'),
|
'Triforce': (True, False, None, 0x6A, 777, '\n YOU WIN!', 'and the triforce', 'victorious kid', 'victory for sale', 'fungus for the win', 'greedy boy wins game again', 'the Triforce'),
|
||||||
'Power Star': (True, False, None, 0x6B, 100, 'A small victory', 'and the power star', 'star-struck kid', 'star for sale', 'see stars with shroom', 'mario powers up again', 'a Power Star'),
|
'Power Star': (True, False, None, 0x6B, 100, 'A small victory', 'and the power star', 'star-struck kid', 'star for sale', 'see stars with shroom', 'mario powers up again', 'a Power Star'),
|
||||||
'Triforce Piece': (True, False, None, 0x6C, 100, 'A small victory', 'and the thirdforce', 'triangular kid', 'triangle for sale', 'fungus for triangle', 'wise boy has triangle again', 'a Triforce piece'),
|
'Triforce Piece': (True, False, None, 0x6C, 100, 'A small victory', 'and the thirdforce', 'triangular kid', 'triangle for sale', 'fungus for triangle', 'wise boy has triangle again', 'a Triforce piece'),
|
||||||
'Crystal 1': (True, False, 'Crystal', [0x02, 0x34, 0x64, 0x40, 0x7F, 0x06, 0x01], 999, None, None, None, None, None, None, None),
|
'Crystal 1': (True, False, 'Crystal', [0x02, 0x34, 0x64, 0x40, 0x7F, 0x20, 0x01], 999, None, None, None, None, None, None, None),
|
||||||
'Crystal 2': (True, False, 'Crystal', [0x10, 0x34, 0x64, 0x40, 0x79, 0x06, 0x02], 999, None, None, None, None, None, None, None),
|
'Crystal 2': (True, False, 'Crystal', [0x10, 0x34, 0x64, 0x40, 0x79, 0x20, 0x02], 999, None, None, None, None, None, None, None),
|
||||||
'Crystal 3': (True, False, 'Crystal', [0x40, 0x34, 0x64, 0x40, 0x6C, 0x06, 0x03], 999, None, None, None, None, None, None, None),
|
'Crystal 3': (True, False, 'Crystal', [0x40, 0x34, 0x64, 0x40, 0x6C, 0x20, 0x03], 999, None, None, None, None, None, None, None),
|
||||||
'Crystal 4': (True, False, 'Crystal', [0x20, 0x34, 0x64, 0x40, 0x6D, 0x06, 0x04], 999, None, None, None, None, None, None, None),
|
'Crystal 4': (True, False, 'Crystal', [0x20, 0x34, 0x64, 0x40, 0x6D, 0x20, 0x04], 999, None, None, None, None, None, None, None),
|
||||||
'Crystal 5': (True, False, 'Crystal', [0x04, 0x32, 0x64, 0x40, 0x6E, 0x06, 0x05], 999, None, None, None, None, None, None, None),
|
'Crystal 5': (True, False, 'Crystal', [0x04, 0x32, 0x64, 0x40, 0x6E, 0x20, 0x05], 999, None, None, None, None, None, None, None),
|
||||||
'Crystal 6': (True, False, 'Crystal', [0x01, 0x32, 0x64, 0x40, 0x6F, 0x06, 0x06], 999, None, None, None, None, None, None, None),
|
'Crystal 6': (True, False, 'Crystal', [0x01, 0x32, 0x64, 0x40, 0x6F, 0x20, 0x06], 999, None, None, None, None, None, None, None),
|
||||||
'Crystal 7': (True, False, 'Crystal', [0x08, 0x34, 0x64, 0x40, 0x7C, 0x06, 0x07], 999, None, None, None, None, None, None, None),
|
'Crystal 7': (True, False, 'Crystal', [0x08, 0x34, 0x64, 0x40, 0x7C, 0x20, 0x07], 999, None, None, None, None, None, None, None),
|
||||||
'Single Arrow': (False, False, None, 0x43, 3, 'A lonely arrow\nsits here.', 'and the arrow', 'stick-collecting kid', 'sewing needle for sale', 'fungus for arrow', 'archer boy sews again', 'an arrow'),
|
'Single Arrow': (False, False, None, 0x43, 3, 'A lonely arrow\nsits here.', 'and the arrow', 'stick-collecting kid', 'sewing needle for sale', 'fungus for arrow', 'archer boy sews again', 'an arrow'),
|
||||||
'Arrows (10)': (False, False, None, 0x44, 30, 'This will give\nyou ten shots\nwith your bow!', 'and the arrow pack', 'stick-collecting kid', 'sewing kit for sale', 'fungus for arrows', 'archer boy sews again', 'ten arrows'),
|
'Arrows (10)': (False, False, None, 0x44, 30, 'This will give\nyou ten shots\nwith your bow!', 'and the arrow pack', 'stick-collecting kid', 'sewing kit for sale', 'fungus for arrows', 'archer boy sews again', 'ten arrows'),
|
||||||
'Arrow Upgrade (+10)': (False, False, None, 0x54, 100, 'Increase arrow\nstorage, low\nlow price', 'and the quiver', 'quiver-enlarging kid', 'arrow boost for sale', 'witch and more skewers', 'upgrade boy sews more again', 'arrow capacity'),
|
'Arrow Upgrade (+10)': (False, False, None, 0x54, 100, 'Increase arrow\nstorage, low\nlow price', 'and the quiver', 'quiver-enlarging kid', 'arrow boost for sale', 'witch and more skewers', 'upgrade boy sews more again', 'arrow capacity'),
|
||||||
|
|||||||
2
Main.py
2
Main.py
@@ -445,8 +445,6 @@ def copy_world(world):
|
|||||||
ret.treasure_hunt_count = world.treasure_hunt_count.copy()
|
ret.treasure_hunt_count = world.treasure_hunt_count.copy()
|
||||||
ret.treasure_hunt_icon = world.treasure_hunt_icon.copy()
|
ret.treasure_hunt_icon = world.treasure_hunt_icon.copy()
|
||||||
ret.sewer_light_cone = world.sewer_light_cone.copy()
|
ret.sewer_light_cone = world.sewer_light_cone.copy()
|
||||||
ret.light_world_light_cone = world.light_world_light_cone
|
|
||||||
ret.dark_world_light_cone = world.dark_world_light_cone
|
|
||||||
ret.seed = world.seed
|
ret.seed = world.seed
|
||||||
ret.can_access_trock_eyebridge = world.can_access_trock_eyebridge.copy()
|
ret.can_access_trock_eyebridge = world.can_access_trock_eyebridge.copy()
|
||||||
ret.can_access_trock_front = world.can_access_trock_front.copy()
|
ret.can_access_trock_front = world.can_access_trock_front.copy()
|
||||||
|
|||||||
@@ -122,12 +122,6 @@ def fill_world(world, plando, text_patches):
|
|||||||
elif line.startswith('!light_cone_sewers'):
|
elif line.startswith('!light_cone_sewers'):
|
||||||
_, sewerstr = line.split(':', 1)
|
_, sewerstr = line.split(':', 1)
|
||||||
world.sewer_light_cone = {1: sewerstr.strip().lower() == 'true'}
|
world.sewer_light_cone = {1: sewerstr.strip().lower() == 'true'}
|
||||||
elif line.startswith('!light_cone_lw'):
|
|
||||||
_, lwconestr = line.split(':', 1)
|
|
||||||
world.light_world_light_cone = lwconestr.strip().lower() == 'true'
|
|
||||||
elif line.startswith('!light_cone_dw'):
|
|
||||||
_, dwconestr = line.split(':', 1)
|
|
||||||
world.dark_world_light_cone = dwconestr.strip().lower() == 'true'
|
|
||||||
elif line.startswith('!fix_trock_doors'):
|
elif line.startswith('!fix_trock_doors'):
|
||||||
_, trdstr = line.split(':', 1)
|
_, trdstr = line.split(':', 1)
|
||||||
world.fix_trock_doors = {1: trdstr.strip().lower() == 'true'}
|
world.fix_trock_doors = {1: trdstr.strip().lower() == 'true'}
|
||||||
|
|||||||
67
Rom.py
67
Rom.py
@@ -40,7 +40,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings
|
|||||||
|
|
||||||
|
|
||||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||||
RANDOMIZERBASEHASH = '6d43fb7bd4cf5ec2d10d03cf04772240'
|
RANDOMIZERBASEHASH = '51a592209991a054bb40b7e7789738c3'
|
||||||
|
|
||||||
|
|
||||||
class JsonRom(object):
|
class JsonRom(object):
|
||||||
@@ -549,6 +549,7 @@ def patch_rom(world, rom, player, team, is_mystery=False):
|
|||||||
if ((world.collection_rate[player] or world.goal[player] == 'completionist')
|
if ((world.collection_rate[player] or world.goal[player] == 'completionist')
|
||||||
and world.goal[player] not in ['triforcehunt', 'trinity', 'ganonhunt']):
|
and world.goal[player] not in ['triforcehunt', 'trinity', 'ganonhunt']):
|
||||||
dr_flags |= DROptions.Debug
|
dr_flags |= DROptions.Debug
|
||||||
|
rom.write_byte(snes_to_pc(0x308039), 1)
|
||||||
if world.doorShuffle[player] not in ['vanilla', 'basic'] and world.logic[player] != 'nologic'\
|
if world.doorShuffle[player] not in ['vanilla', 'basic'] and world.logic[player] != 'nologic'\
|
||||||
and world.mixed_travel[player] == 'prevent':
|
and world.mixed_travel[player] == 'prevent':
|
||||||
# PoD Falling Bridge or Hammjump
|
# PoD Falling Bridge or Hammjump
|
||||||
@@ -615,10 +616,10 @@ def patch_rom(world, rom, player, team, is_mystery=False):
|
|||||||
for name, layout in world.key_layout[player].items():
|
for name, layout in world.key_layout[player].items():
|
||||||
offset = compass_data[name][4]//2
|
offset = compass_data[name][4]//2
|
||||||
if world.keyshuffle[player] == 'universal':
|
if world.keyshuffle[player] == 'universal':
|
||||||
rom.write_byte(0x13f030+offset, layout.max_chests + layout.max_drops)
|
rom.write_byte(0x187010+offset, layout.max_chests + layout.max_drops)
|
||||||
else:
|
else:
|
||||||
rom.write_byte(0x13f020+offset, layout.max_chests + layout.max_drops) # not currently used
|
rom.write_byte(0x13f020+offset, layout.max_chests + layout.max_drops) # not currently used
|
||||||
rom.write_byte(0x13f030+offset, layout.max_chests)
|
rom.write_byte(0x187010+offset, layout.max_chests)
|
||||||
builder = world.dungeon_layouts[player][name]
|
builder = world.dungeon_layouts[player][name]
|
||||||
valid_cnt = len(valid_loc_by_dungeon[name])
|
valid_cnt = len(valid_loc_by_dungeon[name])
|
||||||
if valid_cnt > 256:
|
if valid_cnt > 256:
|
||||||
@@ -727,7 +728,7 @@ def patch_rom(world, rom, player, team, is_mystery=False):
|
|||||||
rom.write_byte(snes_to_pc(0x0DB457), 0x40)
|
rom.write_byte(snes_to_pc(0x0DB457), 0x40)
|
||||||
rom.write_byte(snes_to_pc(0x28AA56), 0 if world.pottery[player] == 'none' else 1)
|
rom.write_byte(snes_to_pc(0x28AA56), 0 if world.pottery[player] == 'none' else 1)
|
||||||
|
|
||||||
write_int16(rom, 0x187010, credits_total) # dynamic credits
|
write_int16(rom, 0x180196, credits_total) # dynamic credits
|
||||||
if credits_total != 216:
|
if credits_total != 216:
|
||||||
# collection rate address (hi):
|
# collection rate address (hi):
|
||||||
cr_address = 0x238055
|
cr_address = 0x238055
|
||||||
@@ -737,12 +738,12 @@ def patch_rom(world, rom, player, team, is_mystery=False):
|
|||||||
last_top, last_bot = credits_digit(credits_total % 10)
|
last_top, last_bot = credits_digit(credits_total % 10)
|
||||||
if credits_total >= 1000:
|
if credits_total >= 1000:
|
||||||
thousands_top, thousands_bot = credits_digit((credits_total // 1000) % 10)
|
thousands_top, thousands_bot = credits_digit((credits_total // 1000) % 10)
|
||||||
rom.write_byte(cr_pc, 0xa2) # slash
|
rom.write_byte(cr_pc, 0xDB) # slash
|
||||||
rom.write_byte(cr_pc+1, thousands_top)
|
rom.write_byte(cr_pc+1, thousands_top)
|
||||||
rom.write_byte(cr_pc+0x1e, 0xc2) # slash
|
rom.write_byte(cr_pc+0x1e, 0xEE) # slash
|
||||||
rom.write_byte(cr_pc+0x1f, thousands_bot)
|
rom.write_byte(cr_pc+0x1f, thousands_bot)
|
||||||
# modify stat config
|
# modify stat config
|
||||||
stat_address = 0x23B969
|
stat_address = 0x2297B2 # 0x23B969 - old
|
||||||
stat_pc = snes_to_pc(stat_address)
|
stat_pc = snes_to_pc(stat_address)
|
||||||
rom.write_byte(stat_pc, 0xa9) # change to pos 21 (from b1)
|
rom.write_byte(stat_pc, 0xa9) # change to pos 21 (from b1)
|
||||||
rom.write_byte(stat_pc+2, 0xc0) # change to 12 bits (from a0)
|
rom.write_byte(stat_pc+2, 0xc0) # change to 12 bits (from a0)
|
||||||
@@ -803,8 +804,6 @@ def patch_rom(world, rom, player, team, is_mystery=False):
|
|||||||
|
|
||||||
# set light cones
|
# set light cones
|
||||||
rom.write_byte(0x180038, 0x01 if world.sewer_light_cone[player] else 0x00)
|
rom.write_byte(0x180038, 0x01 if world.sewer_light_cone[player] else 0x00)
|
||||||
rom.write_byte(0x180039, 0x01 if world.light_world_light_cone else 0x00)
|
|
||||||
rom.write_byte(0x18003A, 0x01 if world.dark_world_light_cone else 0x00)
|
|
||||||
|
|
||||||
GREEN_TWENTY_RUPEES = 0x47
|
GREEN_TWENTY_RUPEES = 0x47
|
||||||
TRIFORCE_PIECE = ItemFactory('Triforce Piece', player).code
|
TRIFORCE_PIECE = ItemFactory('Triforce Piece', player).code
|
||||||
@@ -1133,8 +1132,6 @@ def patch_rom(world, rom, player, team, is_mystery=False):
|
|||||||
if world.pseudoboots[player]:
|
if world.pseudoboots[player]:
|
||||||
rom.write_byte(0x18008E, 0x01)
|
rom.write_byte(0x18008E, 0x01)
|
||||||
rom.initial_sram.set_starting_equipment(world, player)
|
rom.initial_sram.set_starting_equipment(world, player)
|
||||||
rom.write_byte(0x180034, 10 if not world.bombbag[player] else 0) # starting max bombs
|
|
||||||
rom.write_byte(0x180035, 30) # starting max arrows
|
|
||||||
|
|
||||||
rom.write_byte(0x18004A, 0x00 if world.mode[player] != 'inverted' else 0x01) # Inverted mode
|
rom.write_byte(0x18004A, 0x00 if world.mode[player] != 'inverted' else 0x01) # Inverted mode
|
||||||
rom.write_byte(0x18005D, 0x00) # Hammer always breaks barrier
|
rom.write_byte(0x18005D, 0x00) # Hammer always breaks barrier
|
||||||
@@ -1150,20 +1147,21 @@ def patch_rom(world, rom, player, team, is_mystery=False):
|
|||||||
(0x04 if 'magic' in world.escape_assist[player] else 0x00))) # Escape assist
|
(0x04 if 'magic' in world.escape_assist[player] else 0x00))) # Escape assist
|
||||||
|
|
||||||
if world.goal[player] in ['pedestal', 'triforcehunt']:
|
if world.goal[player] in ['pedestal', 'triforcehunt']:
|
||||||
rom.write_byte(0x18003E, 0x01) # make ganon invincible
|
rom.write_byte(0x1801A8, 0x01) # make ganon invincible
|
||||||
elif world.goal[player] in ['dungeons']:
|
elif world.goal[player] in ['dungeons']:
|
||||||
rom.write_byte(0x18003E, 0x02) # make ganon invincible until all dungeons are beat
|
rom.write_byte(0x1801A8, 0x02) # make ganon invincible until all dungeons are beat
|
||||||
elif world.goal[player] in ['crystals', 'trinity']:
|
elif world.goal[player] in ['crystals', 'trinity']:
|
||||||
rom.write_byte(0x18003E, 0x04) # make ganon invincible until all crystals
|
rom.write_byte(0x1801A8, 0x04) # make ganon invincible until all crystals
|
||||||
elif world.goal[player] in ['ganonhunt']:
|
elif world.goal[player] in ['ganonhunt']:
|
||||||
rom.write_byte(0x18003E, 0x05) # make ganon invincible until all triforce pieces collected
|
rom.write_byte(0x1801A8, 0x05) # make ganon invincible until all triforce pieces collected
|
||||||
elif world.goal[player] in ['completionist']:
|
elif world.goal[player] in ['completionist']:
|
||||||
rom.write_byte(0x18003E, 0x0a) # make ganon invincible until everything is collected
|
rom.write_byte(0x1801A8, 0x0B) # make ganon invincible until everything is collected
|
||||||
else:
|
else:
|
||||||
rom.write_byte(0x18003E, 0x03) # make ganon invincible until all crystals and aga 2 are collected
|
rom.write_byte(0x1801A8, 0x03) # make ganon invincible until all crystals and aga 2 are collected
|
||||||
|
|
||||||
rom.write_byte(0x18005E, world.crystals_needed_for_gt[player])
|
rom.write_byte(0x18019A, world.crystals_needed_for_gt[player])
|
||||||
rom.write_byte(0x18005F, world.crystals_needed_for_ganon[player])
|
rom.write_byte(0x1801A6, world.crystals_needed_for_ganon[player])
|
||||||
|
rom.write_byte(0x1801A2, 0x00) # ped requirement is vanilla, set to 0x1 for special requirements
|
||||||
|
|
||||||
# block HC upstairs doors in rain state in standard mode
|
# block HC upstairs doors in rain state in standard mode
|
||||||
prevent_rain = world.mode[player] == "standard" and world.shuffle[player] != 'vanilla'
|
prevent_rain = world.mode[player] == "standard" and world.shuffle[player] != 'vanilla'
|
||||||
@@ -1248,7 +1246,8 @@ def patch_rom(world, rom, player, team, is_mystery=False):
|
|||||||
|
|
||||||
# Bitfield - enable free items to show up in menu
|
# Bitfield - enable free items to show up in menu
|
||||||
#
|
#
|
||||||
# ----dcba
|
# ---edcba
|
||||||
|
# e - Bosses
|
||||||
# d - Compass
|
# d - Compass
|
||||||
# c - Map
|
# c - Map
|
||||||
# b - Big Key
|
# b - Big Key
|
||||||
@@ -1258,7 +1257,8 @@ def patch_rom(world, rom, player, team, is_mystery=False):
|
|||||||
rom.write_byte(0x180045, ((0x01 if world.keyshuffle[player] == 'wild' else 0x00)
|
rom.write_byte(0x180045, ((0x01 if world.keyshuffle[player] == 'wild' else 0x00)
|
||||||
| (0x02 if world.bigkeyshuffle[player] else 0x00)
|
| (0x02 if world.bigkeyshuffle[player] else 0x00)
|
||||||
| (0x04 if world.mapshuffle[player] or enable_menu_map_check else 0x00)
|
| (0x04 if world.mapshuffle[player] or enable_menu_map_check else 0x00)
|
||||||
| (0x08 if world.compassshuffle[player] else 0x00))) # free roaming items in menu
|
| (0x08 if world.compassshuffle[player] else 0x00) # free roaming items in menu
|
||||||
|
| (0x10 if world.logic[player] == 'nologic' else 0))) # boss icon
|
||||||
|
|
||||||
# Map reveals
|
# Map reveals
|
||||||
reveal_bytes = {
|
reveal_bytes = {
|
||||||
@@ -1385,8 +1385,7 @@ def patch_rom(world, rom, player, team, is_mystery=False):
|
|||||||
if world.get_door('TR Eye Bridge SW', player).entranceFlag:
|
if world.get_door('TR Eye Bridge SW', player).entranceFlag:
|
||||||
world.get_room(0xd5, player).change(0, DoorKind.CaveEntrance)
|
world.get_room(0xd5, player).change(0, DoorKind.CaveEntrance)
|
||||||
# do this unconditionally - gets overwritten by RoomData in doorShufflemodes
|
# do this unconditionally - gets overwritten by RoomData in doorShufflemodes
|
||||||
rom.write_byte(0xFED31, 0x0E) # preopen bombable exit
|
rom.initial_sram.pre_open_tr_bomb_doors() # preopen bombable exits
|
||||||
rom.write_byte(0xFEE41, 0x0E) # preopen bombable exit
|
|
||||||
|
|
||||||
if world.boss_shuffle[player] != 'none' or world.doorShuffle[player] != 'vanilla':
|
if world.boss_shuffle[player] != 'none' or world.doorShuffle[player] != 'vanilla':
|
||||||
rom.write_byte(snes_to_pc(0x30835A), 1) # fix Prize On The Eyes
|
rom.write_byte(snes_to_pc(0x30835A), 1) # fix Prize On The Eyes
|
||||||
@@ -1579,17 +1578,7 @@ def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, spr
|
|||||||
# set heart color
|
# set heart color
|
||||||
if color == 'random':
|
if color == 'random':
|
||||||
color = random.choice(['red', 'blue', 'green', 'yellow'])
|
color = random.choice(['red', 'blue', 'green', 'yellow'])
|
||||||
rom.write_byte(0x6FA1E, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
|
rom.write_byte(0x187020, {'red': 0, 'blue': 1, 'green': 2, 'yellow': 3}[color])
|
||||||
rom.write_byte(0x6FA20, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
|
|
||||||
rom.write_byte(0x6FA22, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
|
|
||||||
rom.write_byte(0x6FA24, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
|
|
||||||
rom.write_byte(0x6FA26, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
|
|
||||||
rom.write_byte(0x6FA28, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
|
|
||||||
rom.write_byte(0x6FA2A, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
|
|
||||||
rom.write_byte(0x6FA2C, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
|
|
||||||
rom.write_byte(0x6FA2E, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
|
|
||||||
rom.write_byte(0x6FA30, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
|
|
||||||
rom.write_byte(0x65561, {'red': 0x05, 'blue': 0x0D, 'green': 0x19, 'yellow': 0x09}[color])
|
|
||||||
|
|
||||||
# write link sprite if required
|
# write link sprite if required
|
||||||
if sprite is not None:
|
if sprite is not None:
|
||||||
@@ -1838,6 +1827,16 @@ def write_string_to_rom(rom, target, string):
|
|||||||
def write_strings(rom, world, player, team):
|
def write_strings(rom, world, player, team):
|
||||||
tt = TextTable()
|
tt = TextTable()
|
||||||
tt.removeUnwantedText()
|
tt.removeUnwantedText()
|
||||||
|
if world.shuffle[player] != 'vanilla':
|
||||||
|
tt['houlihan_room'] = CompressedTextMapper.convert(
|
||||||
|
" Crosskeys\n"
|
||||||
|
" Tournament\n"
|
||||||
|
" Winners\n{HARP}\n"
|
||||||
|
" ~~~2022~~~\n Schulzer\n\n"
|
||||||
|
" ~~~2021~~~\n Goomba\n\n"
|
||||||
|
" ~~~2020~~~\n Linlinlin\n\n"
|
||||||
|
" ~~~2019~~~\n Kohrek\n"
|
||||||
|
)
|
||||||
|
|
||||||
# Let's keep this guy's text accurate to the shuffle setting.
|
# Let's keep this guy's text accurate to the shuffle setting.
|
||||||
if world.shuffle[player] in ['vanilla', 'dungeonsfull', 'dungeonssimple']:
|
if world.shuffle[player] in ['vanilla', 'dungeonsfull', 'dungeonssimple']:
|
||||||
|
|||||||
1
Rules.py
1
Rules.py
@@ -1065,7 +1065,6 @@ def add_conditional_lamps(world, player):
|
|||||||
spot = world.get_location(spot, player)
|
spot = world.get_location(spot, player)
|
||||||
else:
|
else:
|
||||||
spot = world.get_entrance(spot, player)
|
spot = world.get_entrance(spot, player)
|
||||||
if (not world.dark_world_light_cone and check_is_dark_world(world.get_region(region, player))) or (not world.light_world_light_cone and not check_is_dark_world(world.get_region(region, player))):
|
|
||||||
add_lamp_requirement(spot, player)
|
add_lamp_requirement(spot, player)
|
||||||
|
|
||||||
dark_rooms = {
|
dark_rooms = {
|
||||||
|
|||||||
155
Text.py
155
Text.py
@@ -478,7 +478,7 @@ class Credits(object):
|
|||||||
],
|
],
|
||||||
'pedestal': [
|
'pedestal': [
|
||||||
SceneSmallCreditLine(19, 'and the master sword'),
|
SceneSmallCreditLine(19, 'and the master sword'),
|
||||||
SceneSmallAltCreditLine(21, 'sleeps again...'),
|
SceneSmallAltCreditLine(21, 'sleeps again···'),
|
||||||
SceneLargeCreditLine(23, 'Forever!'),
|
SceneLargeCreditLine(23, 'Forever!'),
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
@@ -826,6 +826,7 @@ class CharTextMapper(object):
|
|||||||
|
|
||||||
class RawMBTextMapper(CharTextMapper):
|
class RawMBTextMapper(CharTextMapper):
|
||||||
char_map = {' ': 0xFF,
|
char_map = {' ': 0xFF,
|
||||||
|
'≥': 0x99, # Cursor
|
||||||
'『': 0xC4,
|
'『': 0xC4,
|
||||||
'』': 0xC5,
|
'』': 0xC5,
|
||||||
'?': 0xC6,
|
'?': 0xC6,
|
||||||
@@ -834,22 +835,15 @@ class RawMBTextMapper(CharTextMapper):
|
|||||||
'-': 0xC9,
|
'-': 0xC9,
|
||||||
"🡄": 0xCA,
|
"🡄": 0xCA,
|
||||||
"🡆": 0xCB,
|
"🡆": 0xCB,
|
||||||
'…': 0xCC,
|
'…': 0x9F,
|
||||||
'.': 0xCD,
|
'.': 0xCD,
|
||||||
'~': 0xCE,
|
'~': 0xCE,
|
||||||
'~': 0xCE,
|
'~': 0xCE,
|
||||||
|
':': 0xEA,
|
||||||
'@': [0x6A], # Links name (only works if compressed)
|
'@': [0x6A], # Links name (only works if compressed)
|
||||||
'>': [0x00, 0xD2, 0x00, 0xD3], # Link's face
|
'>': [0x00, 0xD2, 0x00, 0xD3], # Link's face
|
||||||
"'": 0xD8,
|
"'": 0x9D,
|
||||||
'’': 0xD8,
|
'’': 0xD8,
|
||||||
'%': 0xDD, # Hylian Bird
|
|
||||||
'^': 0xDE, # Hylian Ankh
|
|
||||||
'=': 0xDF, # Hylian Wavy Lines
|
|
||||||
'↑': 0xE0,
|
|
||||||
'↓': 0xE1,
|
|
||||||
'→': 0xE2,
|
|
||||||
'←': 0xE3,
|
|
||||||
'≥': 0xE4, # Cursor
|
|
||||||
'¼': [0x00, 0xE5, 0x00, 0xE7], # ¼ heart
|
'¼': [0x00, 0xE5, 0x00, 0xE7], # ¼ heart
|
||||||
'½': [0x00, 0xE6, 0x00, 0xE7], # ½ heart
|
'½': [0x00, 0xE6, 0x00, 0xE7], # ½ heart
|
||||||
'¾': [0x00, 0xE8, 0x00, 0xE9], # ¾ heart
|
'¾': [0x00, 0xE8, 0x00, 0xE9], # ¾ heart
|
||||||
@@ -1034,22 +1028,29 @@ class RawMBTextMapper(CharTextMapper):
|
|||||||
"司": 0x0D,
|
"司": 0x0D,
|
||||||
"書": 0x0E,
|
"書": 0x0E,
|
||||||
"戻": 0x0F,
|
"戻": 0x0F,
|
||||||
"様": 0x10,
|
"%": 0x10, # Hylian Bird
|
||||||
"子": 0x11,
|
"^": 0x11, # Hylian Ankh
|
||||||
"湖": 0x12,
|
"=": 0x12, # Hylian Wavy Lines
|
||||||
"達": 0x13,
|
"↑": 0x13,
|
||||||
"彼": 0x14,
|
"↓": 0x14,
|
||||||
"女": 0x15,
|
"→": 0x15,
|
||||||
"言": 0x16,
|
"←": 0x16,
|
||||||
"祭": 0x17,
|
#"様": 0x10,
|
||||||
"早": 0x18,
|
#"子": 0x11,
|
||||||
"雨": 0x19,
|
#"湖": 0x12,
|
||||||
"剣": 0x1A,
|
#"達": 0x13,
|
||||||
"盾": 0x1B,
|
#"彼": 0x14,
|
||||||
"解": 0x1C,
|
#"女": 0x15,
|
||||||
"抜": 0x1D,
|
#"言": 0x16,
|
||||||
"者": 0x1E,
|
#"祭": 0x17,
|
||||||
"味": 0x1F,
|
#"早": 0x18,
|
||||||
|
#"雨": 0x19,
|
||||||
|
#"剣": 0x1A,
|
||||||
|
#"盾": 0x1B,
|
||||||
|
#"解": 0x1C,
|
||||||
|
#"抜": 0x1D,
|
||||||
|
#"者": 0x1E,
|
||||||
|
#"味": 0x1F,
|
||||||
"方": 0x20,
|
"方": 0x20,
|
||||||
"無": 0x21,
|
"無": 0x21,
|
||||||
"事": 0x22,
|
"事": 0x22,
|
||||||
@@ -1275,7 +1276,7 @@ class RawMBTextMapper(CharTextMapper):
|
|||||||
"月": 0xFE,
|
"月": 0xFE,
|
||||||
"姫": 0xFF}
|
"姫": 0xFF}
|
||||||
alpha_offset = 0x49
|
alpha_offset = 0x49
|
||||||
alpha_lower_offset = -0x31
|
alpha_lower_offset = 0x6F
|
||||||
number_offset = 0x70
|
number_offset = 0x70
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -1298,7 +1299,7 @@ class RawMBTextMapper(CharTextMapper):
|
|||||||
|
|
||||||
class GoldCreditMapper(CharTextMapper):
|
class GoldCreditMapper(CharTextMapper):
|
||||||
char_map = {' ': 0x9F,
|
char_map = {' ': 0x9F,
|
||||||
',': 0x34,
|
',': 0x34, # apostrophe/comma top
|
||||||
"'": 0x35,
|
"'": 0x35,
|
||||||
'-': 0x36,
|
'-': 0x36,
|
||||||
'.': 0x37,}
|
'.': 0x37,}
|
||||||
@@ -1319,21 +1320,23 @@ class RedCreditMapper(CharTextMapper):
|
|||||||
|
|
||||||
class LargeCreditTopMapper(CharTextMapper):
|
class LargeCreditTopMapper(CharTextMapper):
|
||||||
char_map = {' ': 0x9F,
|
char_map = {' ': 0x9F,
|
||||||
"'": 0x77,
|
"'": 0xD9,
|
||||||
'!': 0x78,
|
'"': 0xDA,
|
||||||
'.': 0xA0,
|
'/': 0xDB,
|
||||||
'#': 0xA1,
|
'.': 0xDC,
|
||||||
'/': 0xA2,
|
':': 0xDD,
|
||||||
':': 0xA3,
|
'_': 0xDE,
|
||||||
',': 0xA4,
|
'·': 0xDF,
|
||||||
'?': 0xA5,
|
'•': 0xDF,
|
||||||
'=': 0xA6,
|
'…': 0xE0,
|
||||||
'"': 0xA7,
|
'#': 0xE1,
|
||||||
'-': 0xA8,
|
'@': 0xE2,
|
||||||
'·': 0xA9,
|
'>': 0xE3,
|
||||||
'•': 0xA9,
|
'?': 0xE4,
|
||||||
'◢': 0xAA,
|
'!': 0xE5,
|
||||||
'◣': 0xAB,}
|
'~': 0xE6,
|
||||||
|
',': 0xE7,
|
||||||
|
'-': 0xE8,}
|
||||||
alpha_offset = -0x04
|
alpha_offset = -0x04
|
||||||
alpha_lower_offset = -0x04
|
alpha_lower_offset = -0x04
|
||||||
number_offset = 0x23
|
number_offset = 0x23
|
||||||
@@ -1341,21 +1344,23 @@ class LargeCreditTopMapper(CharTextMapper):
|
|||||||
|
|
||||||
class LargeCreditBottomMapper(CharTextMapper):
|
class LargeCreditBottomMapper(CharTextMapper):
|
||||||
char_map = {' ': 0x9F,
|
char_map = {' ': 0x9F,
|
||||||
"'": 0x9D,
|
"'": 0xEC,
|
||||||
'!': 0x9E,
|
'"': 0xED,
|
||||||
'.': 0xC0,
|
'/': 0xEE,
|
||||||
'#': 0xC1,
|
'.': 0xEF,
|
||||||
'/': 0xC2,
|
':': 0xF0,
|
||||||
':': 0xC3,
|
'_': 0xF1,
|
||||||
',': 0xC4,
|
'·': 0xF2,
|
||||||
'?': 0xC5,
|
'•': 0xF2,
|
||||||
'=': 0xC6,
|
'…': 0xF3,
|
||||||
'"': 0xC7,
|
'#': 0xF4,
|
||||||
'-': 0xC8,
|
'@': 0xF5,
|
||||||
'·': 0xC9,
|
'>': 0xF6,
|
||||||
'•': 0xC9,
|
'?': 0xF7,
|
||||||
'◢': 0xCA,
|
'!': 0xF8,
|
||||||
'◣': 0xCB,}
|
'~': 0xF9,
|
||||||
|
',': 0xFA,
|
||||||
|
'-': 0xFB,}
|
||||||
alpha_offset = 0x22
|
alpha_offset = 0x22
|
||||||
alpha_lower_offset = 0x22
|
alpha_lower_offset = 0x22
|
||||||
number_offset = 0x49
|
number_offset = 0x49
|
||||||
@@ -1568,16 +1573,16 @@ class TextTable(object):
|
|||||||
|
|
||||||
def setDefaultText(self):
|
def setDefaultText(self):
|
||||||
text = self._text
|
text = self._text
|
||||||
text['set_cursor'] = bytearray([0xFB, 0xFC, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xE4, 0xFE, 0x68])
|
text['set_cursor'] = bytearray([0xFB, 0xFC, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0x99, 0xFE, 0x68])
|
||||||
text['set_cursor2'] = bytearray([0xFB, 0xFC, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xE4, 0xFE, 0x68])
|
text['set_cursor2'] = bytearray([0xFB, 0xFC, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x99, 0xFE, 0x68])
|
||||||
text['game_over_menu'] = CompressedTextMapper.convert("{SPEED0}\nSave-Continue\nSave-Quit\nContinue", False)
|
text['game_over_menu'] = CompressedTextMapper.convert("{SPEED0}\nSave-Continue\nSave-Quit\nContinue", False)
|
||||||
text['var_test'] = CompressedTextMapper.convert("0= ᚋ, 1= ᚌ\n2= ᚍ, 3= ᚎ", False)
|
text['var_test'] = CompressedTextMapper.convert("0= ᚋ, 1= ᚌ\n2= ᚍ, 3= ᚎ", False)
|
||||||
text['follower_no_enter'] = CompressedTextMapper.convert("Can't you take me some place nice.")
|
text['follower_no_enter'] = CompressedTextMapper.convert("Can't you take me some place nice.")
|
||||||
text['choice_1_3'] = bytearray([0xFB, 0xFC, 0x00, 0xF7, 0xE4, 0xF8, 0xFF, 0xF9, 0xFF, 0xFE, 0x71])
|
text['choice_1_3'] = bytearray([0xFB, 0xFC, 0x00, 0xF7, 0x99, 0xF8, 0xFF, 0xF9, 0xFF, 0xFE, 0x71])
|
||||||
text['choice_2_3'] = bytearray([0xFB, 0xFC, 0x00, 0xF7, 0xFF, 0xF8, 0xE4, 0xF9, 0xFF, 0xFE, 0x71])
|
text['choice_2_3'] = bytearray([0xFB, 0xFC, 0x00, 0xF7, 0xFF, 0xF8, 0x99, 0xF9, 0xFF, 0xFE, 0x71])
|
||||||
text['choice_3_3'] = bytearray([0xFB, 0xFC, 0x00, 0xF7, 0xFF, 0xF8, 0xFF, 0xF9, 0xE4, 0xFE, 0x71])
|
text['choice_3_3'] = bytearray([0xFB, 0xFC, 0x00, 0xF7, 0xFF, 0xF8, 0xFF, 0xF9, 0x99, 0xFE, 0x71])
|
||||||
text['choice_1_2'] = bytearray([0xFB, 0xFC, 0x00, 0xF7, 0xE4, 0xF8, 0xFF, 0xFE, 0x72])
|
text['choice_1_2'] = bytearray([0xFB, 0xFC, 0x00, 0xF7, 0x99, 0xF8, 0xFF, 0xFE, 0x72])
|
||||||
text['choice_2_2'] = bytearray([0xFB, 0xFC, 0x00, 0xF7, 0xFF, 0xF8, 0xE4, 0xFE, 0x72])
|
text['choice_2_2'] = bytearray([0xFB, 0xFC, 0x00, 0xF7, 0xFF, 0xF8, 0x99, 0xFE, 0x72])
|
||||||
text['uncle_leaving_text'] = CompressedTextMapper.convert("I'm just going out for a pack of smokes.")
|
text['uncle_leaving_text'] = CompressedTextMapper.convert("I'm just going out for a pack of smokes.")
|
||||||
text['uncle_dying_sewer'] = CompressedTextMapper.convert("I've fallen and I can't get up, take this.")
|
text['uncle_dying_sewer'] = CompressedTextMapper.convert("I've fallen and I can't get up, take this.")
|
||||||
text['tutorial_guard_1'] = CompressedTextMapper.convert("Only adults should travel at night.")
|
text['tutorial_guard_1'] = CompressedTextMapper.convert("Only adults should travel at night.")
|
||||||
@@ -1772,7 +1777,10 @@ class TextTable(object):
|
|||||||
text['telepathic_tile_misery_mire'] = CompressedTextMapper.convert("{NOBORDER}\nLighting 4 torches will open your way forward!")
|
text['telepathic_tile_misery_mire'] = CompressedTextMapper.convert("{NOBORDER}\nLighting 4 torches will open your way forward!")
|
||||||
text['hylian_text_2'] = CompressedTextMapper.convert("%%^= %==%\n ^ =%^=\n==%= ^^%^")
|
text['hylian_text_2'] = CompressedTextMapper.convert("%%^= %==%\n ^ =%^=\n==%= ^^%^")
|
||||||
text['desert_entry_translated'] = CompressedTextMapper.convert("Kneel before this stone, and magic will move around you.")
|
text['desert_entry_translated'] = CompressedTextMapper.convert("Kneel before this stone, and magic will move around you.")
|
||||||
text['telepathic_tile_under_ganon'] = CompressedTextMapper.convert("Doors Async League winners\n{HARP}\n ~~~2022~~~\nAndy\n\n ~~~2021~~~\nprdwong")
|
text['telepathic_tile_under_ganon'] = CompressedTextMapper.convert("Doors Async League winners\n{HARP}\n"
|
||||||
|
" ~~~2023~~~\nEriror\n\n"
|
||||||
|
" ~~~2022~~~\nAndy\n\n"
|
||||||
|
" ~~~2021~~~\nprdwong")
|
||||||
text['telepathic_tile_palace_of_darkness'] = CompressedTextMapper.convert("{NOBORDER}\nThis is a funny looking Enemizer")
|
text['telepathic_tile_palace_of_darkness'] = CompressedTextMapper.convert("{NOBORDER}\nThis is a funny looking Enemizer")
|
||||||
# C0
|
# C0
|
||||||
text['telepathic_tile_desert_bonk_torch_room'] = CompressedTextMapper.convert("{NOBORDER}\nThings can be knocked down, if you fancy yourself a dashing dude.")
|
text['telepathic_tile_desert_bonk_torch_room'] = CompressedTextMapper.convert("{NOBORDER}\nThings can be knocked down, if you fancy yourself a dashing dude.")
|
||||||
@@ -1782,7 +1790,13 @@ class TextTable(object):
|
|||||||
text['telepathic_tile_ice_entrance'] = CompressedTextMapper.convert("{NOBORDER}\nYou can use Fire Rod or Bombos to pass.")
|
text['telepathic_tile_ice_entrance'] = CompressedTextMapper.convert("{NOBORDER}\nYou can use Fire Rod or Bombos to pass.")
|
||||||
text['telepathic_tile_ice_stalfos_knights_room'] = CompressedTextMapper.convert("{NOBORDER}\nKnock 'em down and then bomb them dead.")
|
text['telepathic_tile_ice_stalfos_knights_room'] = CompressedTextMapper.convert("{NOBORDER}\nKnock 'em down and then bomb them dead.")
|
||||||
text['telepathic_tile_tower_of_hera_entrance'] = CompressedTextMapper.convert("{NOBORDER}\nThis is a bad place, with a guy who will make you fall…\n\n\na lot.")
|
text['telepathic_tile_tower_of_hera_entrance'] = CompressedTextMapper.convert("{NOBORDER}\nThis is a bad place, with a guy who will make you fall…\n\n\na lot.")
|
||||||
text['houlihan_room'] = CompressedTextMapper.convert("Randomizer tournament winners\n{HARP}\n ~~~2021~~~\nDaaanty\n\n ~~~2019~~~\nJet082\n\n ~~~2018~~~\nAndy\n\n ~~~2017~~~\nA: ajneb174\nS: ajneb174")
|
text['houlihan_room'] = CompressedTextMapper.convert("Randomizer tournament winners\n{HARP}\n"
|
||||||
|
" ~~~2023~~~\nnGanonsGoneWild\n\n"
|
||||||
|
" ~~~2022~~~\nObscure\n\n"
|
||||||
|
" ~~~2021~~~\nDaaanty\n\n"
|
||||||
|
" ~~~2019~~~\nJet082\n\n"
|
||||||
|
" ~~~2018~~~\nAndy\n\n"
|
||||||
|
" ~~~2017~~~\nA: ajneb174\nS: ajneb174")
|
||||||
text['caught_a_bee'] = CompressedTextMapper.convert("Caught a Bee\n ≥ Keep\n Release\n{CHOICE}")
|
text['caught_a_bee'] = CompressedTextMapper.convert("Caught a Bee\n ≥ Keep\n Release\n{CHOICE}")
|
||||||
text['caught_a_fairy'] = CompressedTextMapper.convert("Caught Fairy!\n ≥ Keep\n Release\n{CHOICE}")
|
text['caught_a_fairy'] = CompressedTextMapper.convert("Caught Fairy!\n ≥ Keep\n Release\n{CHOICE}")
|
||||||
text['no_empty_bottles'] = CompressedTextMapper.convert("Whoa, bucko!\nNo empty bottles.")
|
text['no_empty_bottles'] = CompressedTextMapper.convert("Whoa, bucko!\nNo empty bottles.")
|
||||||
@@ -2010,7 +2024,10 @@ class TextTable(object):
|
|||||||
text['ganon_fall_in_alt'] = CompressedTextMapper.convert("You think you are ready to face me?\n\nI will not die unless you complete your goals. Dingus!")
|
text['ganon_fall_in_alt'] = CompressedTextMapper.convert("You think you are ready to face me?\n\nI will not die unless you complete your goals. Dingus!")
|
||||||
text['ganon_phase_3_alt'] = CompressedTextMapper.convert("Got wax in your ears? I cannot die!")
|
text['ganon_phase_3_alt'] = CompressedTextMapper.convert("Got wax in your ears? I cannot die!")
|
||||||
# 190
|
# 190
|
||||||
text['sign_east_death_mountain_bridge'] = CompressedTextMapper.convert("Glitched\ntournament\nwinners\n{HARP}\n~~~HMG 2021~~~\nKrithel\n\n~~~OWG 2019~~~\nGlan\n\n~~~OWG 2018~~~\nChristosOwen\nthe numpty")
|
text['sign_east_death_mountain_bridge'] = CompressedTextMapper.convert("Glitched\ntournament\nwinners\n{HARP}\n"
|
||||||
|
"~~~HMG 2021~~~\nKrithel\n\n"
|
||||||
|
"~~~OWG 2019~~~\nGlan\n\n"
|
||||||
|
"~~~OWG 2018~~~\nChristosOwen\nthe numpty")
|
||||||
text['fish_money'] = CompressedTextMapper.convert("It's a secret to everyone.")
|
text['fish_money'] = CompressedTextMapper.convert("It's a secret to everyone.")
|
||||||
text['sign_ganons_tower'] = CompressedTextMapper.convert("You need all 7 crystals to enter.")
|
text['sign_ganons_tower'] = CompressedTextMapper.convert("You need all 7 crystals to enter.")
|
||||||
text['sign_ganon'] = CompressedTextMapper.convert("You need all 7 crystals to beat Ganon.")
|
text['sign_ganon'] = CompressedTextMapper.convert("You need all 7 crystals to beat Ganon.")
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user