Bug fixes for pottery lottery changes

This commit is contained in:
aerinon
2022-01-24 16:04:16 -07:00
parent 8d99ccafc5
commit da89ab1006
8 changed files with 33 additions and 8 deletions

View File

@@ -140,7 +140,6 @@ class World(object):
set_player_attr('pseudoboots', False) set_player_attr('pseudoboots', False)
set_player_attr('shopsanity', False) set_player_attr('shopsanity', False)
set_player_attr('keydropshuffle', 'none')
set_player_attr('mixed_travel', 'prevent') set_player_attr('mixed_travel', 'prevent')
set_player_attr('standardize_palettes', 'standardize') set_player_attr('standardize_palettes', 'standardize')
set_player_attr('force_fix', {'gt': False, 'sw': False, 'pod': False, 'tr': False}) set_player_attr('force_fix', {'gt': False, 'sw': False, 'pod': False, 'tr': False})
@@ -2866,7 +2865,7 @@ class Settings(object):
args.enemy_health[p] = r(e_health)[(settings[8] & 0xE0) >> 5] args.enemy_health[p] = r(e_health)[(settings[8] & 0xE0) >> 5]
args.enemy_damage[p] = r(e_dmg)[(settings[8] & 0x18) >> 3] args.enemy_damage[p] = r(e_dmg)[(settings[8] & 0x18) >> 3]
args.shufflepots[p] = True if settings[7] & 0x4 else False args.shufflepots[p] = True if settings[8] & 0x4 else False
args.bombbag[p] = True if settings[8] & 0x2 else False args.bombbag[p] = True if settings[8] & 0x2 else False
args.shufflelinks[p] = True if settings[8] & 0x1 else False args.shufflelinks[p] = True if settings[8] & 0x1 else False
if len(settings) > 9: if len(settings) > 9:

2
CLI.py
View File

@@ -106,7 +106,7 @@ def parse_cli(argv, no_defaults=False):
'retro', 'accessibility', 'hints', 'beemizer', 'experimental', 'dungeon_counters', 'retro', 'accessibility', 'hints', 'beemizer', 'experimental', 'dungeon_counters',
'shufflebosses', 'shuffleenemies', 'enemy_health', 'enemy_damage', 'shufflepots', 'shufflebosses', 'shuffleenemies', 'enemy_health', 'enemy_damage', 'shufflepots',
'ow_palettes', 'uw_palettes', 'sprite', 'disablemusic', 'quickswap', 'fastmenu', 'heartcolor', 'ow_palettes', 'uw_palettes', 'sprite', 'disablemusic', 'quickswap', 'fastmenu', 'heartcolor',
'heartbeep', 'remote_items', 'shopsanity', 'dropshuffle', 'pottery', 'heartbeep', 'remote_items', 'shopsanity', 'dropshuffle', 'pottery', 'keydropshuffle',
'mixed_travel', 'standardize_palettes', 'code', 'reduce_flashing', 'shuffle_sfx']: 'mixed_travel', 'standardize_palettes', 'code', 'reduce_flashing', 'shuffle_sfx']:
value = getattr(defaults, name) if getattr(playerargs, name) is None else getattr(playerargs, name) value = getattr(defaults, name) if getattr(playerargs, name) is None else getattr(playerargs, name)
if player == 1: if player == 1:

View File

@@ -31,7 +31,7 @@ from Utils import output_path, parse_player_names
from source.item.FillUtil import create_item_pool_config, massage_item_pool, district_item_pool_config from source.item.FillUtil import create_item_pool_config, massage_item_pool, district_item_pool_config
__version__ = '1.0.1.0-v' __version__ = '1.0.1.1-v'
from source.classes.BabelFish import BabelFish from source.classes.BabelFish import BabelFish

View File

@@ -146,5 +146,16 @@ Same as above but both small keys and bigs keys of the dungeon are not allowed o
## Notes and Bug Fixes ## Notes and Bug Fixes
#### Volatile
* 1.0.1.1
* Fixed logic for pots in the Ice Hammer Block room (Glove + Hammer required)
* Fixed logic for 2 pots in the Ice Antechamber (Glove required)
* Fixed retro not saving keys when grabbed from under pots in caves
* Fixed GUI not applying Drop shuffle when "Pot and Drops" are marked
* Fixed dungeon counts when one of Pottery or Drops are disabled
#### Unstable
* 1.0.0.1 * 1.0.0.1
* Add Light Hype Fairy to bombbag mode as needing bombs * Add Light Hype Fairy to bombbag mode as needing bombs

8
Rom.py
View File

@@ -35,7 +35,7 @@ from source.item.FillUtil import valid_pot_items
JAP10HASH = '03a63945398191337e896e5771f77173' JAP10HASH = '03a63945398191337e896e5771f77173'
RANDOMIZERBASEHASH = 'dea3a3bc1435aa0895181c5d46dc6d43' RANDOMIZERBASEHASH = '83bdcdbe989281b7eb36a10150314997'
class JsonRom(object): class JsonRom(object):
@@ -746,7 +746,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
valid_loc_by_dungeon = valid_dungeon_locations(valid_locations) valid_loc_by_dungeon = valid_dungeon_locations(valid_locations)
# fix hc big key problems (map and compass too) # fix hc big key problems (map and compass too)
if world.doorShuffle[player] == 'crossed' or world.dropshuffle[player]: if world.doorShuffle[player] == 'crossed' or world.dropshuffle[player] or world.pottery[player] != 'none':
rom.write_byte(0x151f1, 2) rom.write_byte(0x151f1, 2)
rom.write_byte(0x15270, 2) rom.write_byte(0x15270, 2)
sanctuary = world.get_region('Sanctuary', player) sanctuary = world.get_region('Sanctuary', player)
@@ -875,13 +875,15 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
credits_total = len(valid_locations) credits_total = len(valid_locations)
if world.dropshuffle[player] or world.pottery[player] != 'none': if world.dropshuffle[player] or world.pottery[player] != 'none':
rom.write_byte(0x142A50, 1) rom.write_byte(0x142A50, 1) # StandingItemsOn
multiClientFlags = ((0x1 if world.dropshuffle[player] else 0) multiClientFlags = ((0x1 if world.dropshuffle[player] else 0)
| (0x2 if world.shopsanity[player] else 0) | (0x2 if world.shopsanity[player] else 0)
| (0x4 if world.retro[player] else 0) | (0x4 if world.retro[player] else 0)
| (0x8 if world.pottery[player] in ['keys', 'lottery'] else 0) | (0x8 if world.pottery[player] in ['keys', 'lottery'] else 0)
| (0x10 if is_mystery else 0)) | (0x10 if is_mystery else 0))
rom.write_byte(0x142A51, multiClientFlags) rom.write_byte(0x142A51, multiClientFlags)
rom.write_byte(0x142A55, ((0x1 if world.pottery[player] != 'none' else 0) # StandingItemCounterMask
| (0x2 if world.dropshuffle[player] else 0)))
write_int16(rom, 0x187010, credits_total) # dynamic credits write_int16(rom, 0x187010, credits_total) # dynamic credits
if credits_total != 216: if credits_total != 216:

View File

@@ -735,9 +735,17 @@ def pot_rules(world, player):
for l in world.get_region('Dark Lake Hylia Ledge Spike Cave', player).locations: for l in world.get_region('Dark Lake Hylia Ledge Spike Cave', player).locations:
if l.type == LocationType.Pot: if l.type == LocationType.Pot:
add_rule(l, lambda state: state.world.can_take_damage or state.has('Hookshot', player)) add_rule(l, lambda state: state.world.can_take_damage or state.has('Hookshot', player))
for l in world.get_region('Ice Hammer Block', player).locations:
if l.type == LocationType.Pot:
add_rule(l, lambda state: state.has('Hammer', player) and state.can_lift_rocks(player))
for pot in ['Ice Antechamber Pot #3', 'Ice Antechamber Pot #4']:
loc = world.get_location_unsafe(pot, player)
if loc:
set_rule(loc, lambda state: state.can_lift_rocks(player))
loc = world.get_location_unsafe('Mire Spikes Pot #3', player) loc = world.get_location_unsafe('Mire Spikes Pot #3', player)
if loc: if loc:
set_rule(loc, lambda state: (state.world.can_take_damage and state.has_hearts(player, 4)) or state.has('Cane of Byrna', player) or state.has('Cape', player)) set_rule(loc, lambda state: (state.world.can_take_damage and state.has_hearts(player, 4))
or state.has('Cane of Byrna', player) or state.has('Cape', player))

Binary file not shown.

View File

@@ -275,4 +275,9 @@ def create_guiargs(parent):
guiargs = update_deprecated_args(guiargs) guiargs = update_deprecated_args(guiargs)
# Key drop shuffle stuff
if guiargs.keydropshuffle:
guiargs.dropshuffle = 1
guiargs.pottery = 'keys' if guiargs.pottery == 'none' else guiargs.pottery
return guiargs return guiargs