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,
'triforcepool': self.world.treasure_hunt_total,
'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):
@@ -3018,7 +3019,7 @@ class Spoiler(object):
if self.shops:
out['Shops'] = self.shops
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['meta'] = self.metadata

View File

@@ -1,5 +1,11 @@
# 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
- \~Merged in DR v1.2.0.17~
- 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)
mark_light_dark_world_regions(world, player)
create_dynamic_exits(world, player)
if args.print_custom_yaml:
world.settings.record_overworld(world)
init_districts(world)

View File

@@ -1153,6 +1153,7 @@ OWTileRegions = bidict({
'Lake Hylia Water D': 0x35,
'Ice Cave Area': 0x37,
'Ice Cave Water': 0x37,
'Desert Pass Area': 0x3a,
'Middle Aged Man': 0x3a,
@@ -1292,6 +1293,7 @@ OWTileRegions = bidict({
'Ice Palace Area': 0x75,
'Shopping Mall Area': 0x77,
'Shopping Mall Water': 0x77,
'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
('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'),

View File

@@ -7,7 +7,7 @@ from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitType
from OverworldGlitchRules import create_owg_connections
from Utils import bidict
version_number = '0.3.1.1'
version_number = '0.3.1.2'
# branch indicator is intentionally different across branches
version_branch = ''
@@ -639,17 +639,17 @@ def shuffle_tiles(world, groups, result_list, do_grouped, player):
if world.customizer:
if not do_grouped:
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()
forced_flips = list()
forced_nonflips = list()
player_key = player
if 'undefined_chance' in custom_flips[player_key]:
undefined_chance = custom_flips[player_key]['undefined_chance']
if 'force_flip' in custom_flips[player_key]:
forced_flips = custom_flips[player_key]['force_flip']
if 'force_no_flip' in custom_flips[player_key]:
forced_nonflips = custom_flips[player_key]['force_no_flip']
if 'undefined_chance' in custom_flips:
undefined_chance = custom_flips['undefined_chance']
if 'force_flip' in custom_flips:
forced_flips = custom_flips['force_flip']
if 'force_no_flip' in custom_flips:
forced_nonflips = custom_flips['force_no_flip']
for group in groups:
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'
RANDOMIZERBASEHASH = 'a5c37eecbe3e52b49639c0d0ad91a7c3'
RANDOMIZERBASEHASH = '614fa2fcbb4644beddadcf356e121d5a'
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
if enemized:
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(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

Binary file not shown.

View File

@@ -232,6 +232,14 @@ class CustomSettings(object):
self.world_rep['settings'] = settings_dict
for p in self.player_range:
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]['door_shuffle'] = world.doorShuffle[p]
settings_dict[p]['intensity'] = world.intensity[p]
@@ -329,6 +337,15 @@ class CustomSettings(object):
else:
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):
self.world_rep['entrances'] = entrances = {}
world.custom_entrances = {}