From da89ab1006d85bf35672b18b10399dc3da32ffa7 Mon Sep 17 00:00:00 2001 From: aerinon Date: Mon, 24 Jan 2022 16:04:16 -0700 Subject: [PATCH] Bug fixes for pottery lottery changes --- BaseClasses.py | 3 +-- CLI.py | 2 +- Main.py | 2 +- RELEASENOTES.md | 11 +++++++++++ Rom.py | 8 +++++--- Rules.py | 10 +++++++++- data/base2current.bps | Bin 82876 -> 82914 bytes source/gui/bottom.py | 5 +++++ 8 files changed, 33 insertions(+), 8 deletions(-) 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 5c88f7b45e70245f56707af1a5c5fb3df8c8fa35..dd96fe33b92cca25de2ddb7fd402c9b36bc0ead3 100644 GIT binary patch delta 386 zcmV-|0e$|whXvw?1(1pX&5?_`1hTSCO_NChgaKBw&H)4k1WcBRf|Jz-e*qMeRR@qM zl&h%f>X?;Qtf+ti>O6>*B1o;Mum_hZGJ&NDB9^SE8Y0J+C!m!g*^>?kLk>8rsOofp ziOk8MT!4vQvtJ0J0|?uys2qZgBKorl4Ab-ksR021mEQqX0ScEj0RgB1TbJGe0UQBx zm-_($G67tdE&>5A0Xdgl0s%Y$mzSCX0U`~2tn?IsTsqPQYa$@7m&pPFF@G+tkOU&H z#-wO#gaEx@2alM*e$YafOih_>fY1}A0Lib=Gp~#Dej1O9^M0iOfC@^gr2yX`t*Fox zuT`q3EhY!>2qJ*Ypdzovr21%U$*=I}$t3XP`kyO(h>>VIYoMU78#R!d5Hp(P4@#<- z-5{;d1Nt~%$t3Xk`WRrmfR|MR0W1R@EC!c^0|8Y67Ot1u0|7w`#jb!7vxKq2AgOhi gCjU4mK z%*mi!fQdP?UQs9DmJD0s%2i4Xuy_BCp1z zXlsN3y