diff --git a/BaseClasses.py b/BaseClasses.py index a7c1f10c..b556afde 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -140,7 +140,6 @@ class World(object): set_player_attr('pseudoboots', False) set_player_attr('shopsanity', False) - set_player_attr('keydropshuffle', 'none') set_player_attr('mixed_travel', 'prevent') set_player_attr('standardize_palettes', 'standardize') 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_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.shufflelinks[p] = True if settings[8] & 0x1 else False if len(settings) > 9: diff --git a/CLI.py b/CLI.py index fe7fdf29..83590fc4 100644 --- a/CLI.py +++ b/CLI.py @@ -106,7 +106,7 @@ def parse_cli(argv, no_defaults=False): 'retro', 'accessibility', 'hints', 'beemizer', 'experimental', 'dungeon_counters', 'shufflebosses', 'shuffleenemies', 'enemy_health', 'enemy_damage', 'shufflepots', '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']: value = getattr(defaults, name) if getattr(playerargs, name) is None else getattr(playerargs, name) if player == 1: diff --git a/Main.py b/Main.py index 291a3519..35de1c00 100644 --- a/Main.py +++ b/Main.py @@ -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 -__version__ = '1.0.1.0-v' +__version__ = '1.0.1.1-v' from source.classes.BabelFish import BabelFish diff --git a/RELEASENOTES.md b/RELEASENOTES.md index a808092a..2032f3c5 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -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 +#### 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 * Add Light Hype Fairy to bombbag mode as needing bombs \ No newline at end of file diff --git a/Rom.py b/Rom.py index 2ba12874..e2a2ecb4 100644 --- a/Rom.py +++ b/Rom.py @@ -35,7 +35,7 @@ from source.item.FillUtil import valid_pot_items JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'dea3a3bc1435aa0895181c5d46dc6d43' +RANDOMIZERBASEHASH = '83bdcdbe989281b7eb36a10150314997' 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) # 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(0x15270, 2) 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) 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) | (0x2 if world.shopsanity[player] else 0) | (0x4 if world.retro[player] else 0) | (0x8 if world.pottery[player] in ['keys', 'lottery'] else 0) | (0x10 if is_mystery else 0)) 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 if credits_total != 216: diff --git a/Rules.py b/Rules.py index 590cdb0d..32fe7737 100644 --- a/Rules.py +++ b/Rules.py @@ -735,9 +735,17 @@ def pot_rules(world, player): for l in world.get_region('Dark Lake Hylia Ledge Spike Cave', player).locations: if l.type == LocationType.Pot: 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) 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)) diff --git a/data/base2current.bps b/data/base2current.bps index 5c88f7b4..dd96fe33 100644 Binary files a/data/base2current.bps and b/data/base2current.bps differ diff --git a/source/gui/bottom.py b/source/gui/bottom.py index d69ab5cb..5efeeac3 100644 --- a/source/gui/bottom.py +++ b/source/gui/bottom.py @@ -275,4 +275,9 @@ def create_guiargs(parent): 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