Merge branch 'OverworldShuffleDev' into OverworldShuffle

This commit is contained in:
codemann8
2023-07-07 04:15:25 -05:00
9 changed files with 43 additions and 14 deletions

View File

@@ -2898,7 +2898,8 @@ class Spoiler(object):
'triforcegoal': self.world.treasure_hunt_count, 'triforcegoal': self.world.treasure_hunt_count,
'triforcepool': self.world.treasure_hunt_total, 'triforcepool': self.world.treasure_hunt_total,
'race': self.world.settings.world_rep['meta']['race'], 'race': self.world.settings.world_rep['meta']['race'],
'code': {p: Settings.make_code(self.world, p) for p in range(1, self.world.players + 1)} 'code': {p: Settings.make_code(self.world, p) for p in range(1, self.world.players + 1)},
'seed': self.world.seed
} }
for p in range(1, self.world.players + 1): for p in range(1, self.world.players + 1):
@@ -3018,7 +3019,7 @@ class Spoiler(object):
if self.shops: if self.shops:
out['Shops'] = self.shops out['Shops'] = self.shops
out['playthrough'] = self.playthrough out['playthrough'] = self.playthrough
out['paths'] = {l:p for (l, p) in self.paths if l not in self.suppress_spoiler_locations} out['paths'] = {l:p for (l, p) in self.paths.items() if l not in self.suppress_spoiler_locations}
out['Bosses'] = self.bosses out['Bosses'] = self.bosses
out['meta'] = self.metadata out['meta'] = self.metadata

View File

@@ -1,5 +1,11 @@
# Changelog # Changelog
## 0.3.1.2
- Retro now gives a universal key from bottle vendor fish prize
- Fixed issue with Aga Door preventing Murahduhla Cutscene
- Fixed issue with Ice Cave/Shopping Mall water transitions not flipping in Mixed OWR
- Minor improvements to item GFX draw routine
## 0.3.1.1 ## 0.3.1.1
- \~Merged in DR v1.2.0.17~ - \~Merged in DR v1.2.0.17~
- Various renames/reorganizations of region/rule definition to match upcoming DR world remodel - Various renames/reorganizations of region/rule definition to match upcoming DR world remodel

View File

@@ -227,6 +227,8 @@ def main(args, seed=None, fish=None):
update_world_regions(world, player) update_world_regions(world, player)
mark_light_dark_world_regions(world, player) mark_light_dark_world_regions(world, player)
create_dynamic_exits(world, player) create_dynamic_exits(world, player)
if args.print_custom_yaml:
world.settings.record_overworld(world)
init_districts(world) init_districts(world)

View File

@@ -1153,6 +1153,7 @@ OWTileRegions = bidict({
'Lake Hylia Water D': 0x35, 'Lake Hylia Water D': 0x35,
'Ice Cave Area': 0x37, 'Ice Cave Area': 0x37,
'Ice Cave Water': 0x37,
'Desert Pass Area': 0x3a, 'Desert Pass Area': 0x3a,
'Middle Aged Man': 0x3a, 'Middle Aged Man': 0x3a,
@@ -1292,6 +1293,7 @@ OWTileRegions = bidict({
'Ice Palace Area': 0x75, 'Ice Palace Area': 0x75,
'Shopping Mall Area': 0x77, 'Shopping Mall Area': 0x77,
'Shopping Mall Water': 0x77,
'Swamp Nook Area': 0x7a, 'Swamp Nook Area': 0x7a,

View File

@@ -383,7 +383,7 @@ boots_clips_local = [ # (name, from_region, to_region)
('Hyrule Castle To Water Clip', 'Hyrule Castle Area', 'Hyrule Castle Water'), #fake flipper ('Hyrule Castle To Water Clip', 'Hyrule Castle Area', 'Hyrule Castle Water'), #fake flipper
('Bat Cave River Clip Spot', 'Blacksmith Area', 'Blacksmith Ledge'), #cannot guarantee camera correction #('Bat Cave River Clip Spot', 'Blacksmith Area', 'Blacksmith Ledge'), #TODO: This should be added in MG (screenwrap transition)
('Maze Race Item Get Ledge Clip', 'Maze Race Area', 'Maze Race Prize'), ('Maze Race Item Get Ledge Clip', 'Maze Race Area', 'Maze Race Prize'),

View File

@@ -7,7 +7,7 @@ from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitType
from OverworldGlitchRules import create_owg_connections from OverworldGlitchRules import create_owg_connections
from Utils import bidict from Utils import bidict
version_number = '0.3.1.1' version_number = '0.3.1.2'
# branch indicator is intentionally different across branches # branch indicator is intentionally different across branches
version_branch = '' version_branch = ''
@@ -639,17 +639,17 @@ def shuffle_tiles(world, groups, result_list, do_grouped, player):
if world.customizer: if world.customizer:
if not do_grouped: if not do_grouped:
custom_flips = world.customizer.get_owtileflips() custom_flips = world.customizer.get_owtileflips()
if custom_flips: if custom_flips and player in custom_flips:
custom_flips = custom_flips[player]
nonflipped_groups = list() nonflipped_groups = list()
forced_flips = list() forced_flips = list()
forced_nonflips = list() forced_nonflips = list()
player_key = player if 'undefined_chance' in custom_flips:
if 'undefined_chance' in custom_flips[player_key]: undefined_chance = custom_flips['undefined_chance']
undefined_chance = custom_flips[player_key]['undefined_chance'] if 'force_flip' in custom_flips:
if 'force_flip' in custom_flips[player_key]: forced_flips = custom_flips['force_flip']
forced_flips = custom_flips[player_key]['force_flip'] if 'force_no_flip' in custom_flips:
if 'force_no_flip' in custom_flips[player_key]: forced_nonflips = custom_flips['force_no_flip']
forced_nonflips = custom_flips[player_key]['force_no_flip']
for group in groups: for group in groups:
if any(owid in group[0] for owid in forced_nonflips): if any(owid in group[0] for owid in forced_nonflips):

5
Rom.py
View File

@@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127
JAP10HASH = '03a63945398191337e896e5771f77173' JAP10HASH = '03a63945398191337e896e5771f77173'
RANDOMIZERBASEHASH = 'a5c37eecbe3e52b49639c0d0ad91a7c3' RANDOMIZERBASEHASH = '614fa2fcbb4644beddadcf356e121d5a'
class JsonRom(object): class JsonRom(object):
@@ -1582,7 +1582,8 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
rom.write_byte(0x301FC, 0xDA if world.bow_mode[player].startswith('retro') else 0xE1) # rupees replace arrows under pots rom.write_byte(0x301FC, 0xDA if world.bow_mode[player].startswith('retro') else 0xE1) # rupees replace arrows under pots
if enemized: if enemized:
rom.write_byte(0x1B152e, 0xDA if world.bow_mode[player].startswith('retro') else 0xE1) rom.write_byte(0x1B152e, 0xDA if world.bow_mode[player].startswith('retro') else 0xE1)
rom.write_byte(0x30052, 0xDB if world.bow_mode[player].startswith('retro') else 0xE2) # replace arrows in fish prize from bottle merchant if world.bow_mode[player].startswith('retro'):
rom.write_byte(0x30052, 0xE4 if world.keyshuffle[player] == 'universal' else 0xDB) # replace arrows in fish prize from bottle merchant
rom.write_bytes(0xECB4E, [0xA9, 0x00, 0xEA, 0xEA] if world.bow_mode[player].startswith('retro') else [0xAF, 0x77, 0xF3, 0x7E]) # Thief steals rupees instead of arrows rom.write_bytes(0xECB4E, [0xA9, 0x00, 0xEA, 0xEA] if world.bow_mode[player].startswith('retro') else [0xAF, 0x77, 0xF3, 0x7E]) # Thief steals rupees instead of arrows
rom.write_bytes(0xF0D96, [0xA9, 0x00, 0xEA, 0xEA] if world.bow_mode[player].startswith('retro') else [0xAF, 0x77, 0xF3, 0x7E]) # Pikit steals rupees instead of arrows rom.write_bytes(0xF0D96, [0xA9, 0x00, 0xEA, 0xEA] if world.bow_mode[player].startswith('retro') else [0xAF, 0x77, 0xF3, 0x7E]) # Pikit steals rupees instead of arrows
rom.write_bytes(0xEDA5, [0x35, 0x41] if world.bow_mode[player].startswith('retro') else [0x43, 0x44]) # Chest game gives rupees instead of arrows rom.write_bytes(0xEDA5, [0x35, 0x41] if world.bow_mode[player].startswith('retro') else [0x43, 0x44]) # Chest game gives rupees instead of arrows

Binary file not shown.

View File

@@ -232,6 +232,14 @@ class CustomSettings(object):
self.world_rep['settings'] = settings_dict self.world_rep['settings'] = settings_dict
for p in self.player_range: for p in self.player_range:
settings_dict[p] = {} settings_dict[p] = {}
settings_dict[p]['ow_shuffle'] = world.owShuffle[p]
settings_dict[p]['ow_terrain'] = world.owTerrain[p]
settings_dict[p]['ow_crossed'] = world.owCrossed[p]
settings_dict[p]['ow_keepsimilar'] = world.owKeepSimilar[p]
settings_dict[p]['ow_mixed'] = world.owMixed[p]
settings_dict[p]['ow_whirlpool'] = world.owWhirlpoolShuffle[p]
settings_dict[p]['ow_fluteshuffle'] = world.owFluteShuffle[p]
settings_dict[p]['bonk_drops'] = world.shuffle_bonk_drops[p]
settings_dict[p]['shuffle'] = world.shuffle[p] settings_dict[p]['shuffle'] = world.shuffle[p]
settings_dict[p]['door_shuffle'] = world.doorShuffle[p] settings_dict[p]['door_shuffle'] = world.doorShuffle[p]
settings_dict[p]['intensity'] = world.intensity[p] settings_dict[p]['intensity'] = world.intensity[p]
@@ -329,6 +337,15 @@ class CustomSettings(object):
else: else:
placements[location.player][location.name] = location.item.name placements[location.player][location.name] = location.item.name
def record_overworld(self, world):
self.world_rep['ow-tileflips'] = flips = {}
for p in self.player_range:
if p in world.owswaps and len(world.owswaps[p][0]) > 0:
flips[p] = {}
flips[p]['force_flip'] = list(f for f in world.owswaps[p][0] if f < 0x40 or f >= 0x80)
flips[p]['force_flip'].sort()
flips[p]['undefined_chance'] = 0
def record_entrances(self, world): def record_entrances(self, world):
self.world_rep['entrances'] = entrances = {} self.world_rep['entrances'] = entrances = {}
world.custom_entrances = {} world.custom_entrances = {}