Merge branch 'OverworldShuffleDev' into OverworldShuffle
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
2
Main.py
2
Main.py
@@ -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)
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
|
||||
@@ -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'),
|
||||
|
||||
|
||||
@@ -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
5
Rom.py
@@ -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.
@@ -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 = {}
|
||||
|
||||
Reference in New Issue
Block a user