From f93ecf9412a4bac1b9697223777a8ebfa4a55ffa Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 28 Apr 2022 16:27:37 -0600 Subject: [PATCH] New baserom with various fixes for both font and multiclient issue with pottery Bump TFH limit to 850. It throws an error if you try to generate with too many pieces. --- ItemList.py | 15 +++++++++------ Main.py | 4 ++-- RELEASENOTES.md | 9 +++++++++ Rom.py | 7 ++++--- data/base2current.bps | Bin 90117 -> 93063 bytes source/item/FillUtil.py | 2 +- 6 files changed, 25 insertions(+), 12 deletions(-) diff --git a/ItemList.py b/ItemList.py index 935e2e61..dacbdf14 100644 --- a/ItemList.py +++ b/ItemList.py @@ -44,6 +44,7 @@ Difficulty = namedtuple('Difficulty', 'progressive_bow_limit', 'heart_piece_limit', 'boss_heart_container_limit']) total_items_to_place = 153 +max_goal = 850 difficulties = { 'normal': Difficulty( @@ -203,6 +204,7 @@ def generate_itempool(world, player): world.push_item(loc, ItemFactory('Triforce', player), False) loc.event = True loc.locked = True + loc.forced_item = loc.item world.get_location('Ganon', player).event = True world.get_location('Ganon', player).locked = True @@ -774,7 +776,8 @@ def get_pool_core(progressive, shuffle, difficulty, treasure_hunt_total, timer, if goal in ['triforcehunt', 'trinity']: if treasure_hunt_total == 0: treasure_hunt_total = 30 if goal == 'triforcehunt' else 10 - triforcepool = ['Triforce Piece'] * int(treasure_hunt_total) + # triforce pieces max out + triforcepool = ['Triforce Piece'] * min(treasure_hunt_total, max_goal) pool.extend(alwaysitems) @@ -967,8 +970,8 @@ def make_custom_item_pool(progressive, shuffle, difficulty, timer, goal, mode, s pool.append(thisbottle) if customitemarray["triforcepieces"] > 0 or customitemarray["triforcepiecesgoal"] > 0: - # To display, count must be between 1 and 254 - larger values are not yet supported - treasure_hunt_count = max(min(customitemarray["triforcepiecesgoal"], 254), 1) + # Location pool doesn't support larger values + treasure_hunt_count = max(min(customitemarray["triforcepiecesgoal"], max_goal), 1) treasure_hunt_icon = 'Triforce Piece' # Ensure game is always possible to complete here, force sufficient pieces if the player is unwilling. if ((customitemarray["triforcepieces"] < treasure_hunt_count) and (goal in ['triforcehunt', 'trinity']) @@ -1053,7 +1056,7 @@ def make_customizer_pool(world, player): return pool, placed_items, precollected_items, clock_mode, 1 -# To display, count must be between 1 and 254 - larger values are not yet supported +# location pool doesn't support larger values at this time def set_default_triforce(goal, custom_goal, custom_total): triforce_goal, triforce_total = 0, 0 if goal == 'triforcehunt': @@ -1061,9 +1064,9 @@ def set_default_triforce(goal, custom_goal, custom_total): elif goal == 'trinity': triforce_goal, triforce_total = 8, 10 if custom_goal > 0: - triforce_goal = max(min(custom_goal, 254), 1) + triforce_goal = max(min(custom_goal, max_goal), 1) if custom_total > 0: - triforce_total = max(min(custom_total, 254), triforce_goal) + triforce_total = max(min(custom_total, max_goal), triforce_goal) return triforce_goal, triforce_total diff --git a/Main.py b/Main.py index c2af3655..75fd4dd6 100644 --- a/Main.py +++ b/Main.py @@ -103,8 +103,8 @@ def main(args, seed=None, fish=None): world.potshuffle = args.shufflepots.copy() world.mixed_travel = args.mixed_travel.copy() world.standardize_palettes = args.standardize_palettes.copy() - world.treasure_hunt_count = args.triforce_goal.copy() - world.treasure_hunt_total = args.triforce_pool.copy() + world.treasure_hunt_count = {k: int(v) for k, v in args.triforce_goal.items()} + world.treasure_hunt_total = {k: int(v) for k, v in args.triforce_pool.items()} world.shufflelinks = args.shufflelinks.copy() world.pseudoboots = args.pseudoboots.copy() world.overworld_map = args.overworld_map.copy() diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b18c1af0..668c1c52 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -157,6 +157,15 @@ Same as above but both small keys and bigs keys of the dungeon are not allowed o #### Volatile +* 1.0.2.0 + * Updated baserom to bleeding edge + * Pottery and enemy SRAM re-located to final destination + * Bulk of work on new font + * Updated TFH to support up to 850 pieces + * Fix for major item algorithm and pottery + * Updated map display on keysanity menu to work better with overworld_amp option + * Minor bug in crossed doors + * Minor bug in MultiClient which would count switches * 1.0.1.13 * New pottery modes * Trinity goal added diff --git a/Rom.py b/Rom.py index 3f1506ea..dcda3719 100644 --- a/Rom.py +++ b/Rom.py @@ -37,7 +37,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '3c85536ef5463d329adb2e9e3cda654a' +RANDOMIZERBASEHASH = '8b87b7c4f37ab57463b93c5afd353299' class JsonRom(object): @@ -1197,7 +1197,8 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): rom.write_byte(0x18003F, 0x01 if world.swords[player] == 'swordless' else 0x00) # hammer can harm ganon rom.write_byte(0x180041, 0x01 if world.swords[player] == 'swordless' else 0x00) # swordless medallions rom.write_byte(0x180044, 0x01 if world.swords[player] == 'swordless' else 0x00) # hammer activates tablets - rom.initial_sram.set_swordless_curtains() # open curtains + if world.swords[player] == 'swordless': + rom.initial_sram.set_swordless_curtains() # open curtains # set up clocks for timed modes if world.shuffle[player] == 'vanilla': @@ -1245,7 +1246,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): # set up goals for treasure hunt rom.write_bytes(0x180165, [0x0E, 0x28] if world.treasure_hunt_icon[player] == 'Triforce Piece' else [0x0D, 0x28]) if world.goal[player] in ['triforcehunt', 'trinity']: - rom.write_byte(0x180167, int(world.treasure_hunt_count[player]) % 256) + rom.write_bytes(0x180167, int16_as_bytes(world.treasure_hunt_count[player])) rom.write_byte(0x180194, 1) # Must turn in triforced pieces (instant win not enabled) rom.write_bytes(0x180213, [0x00, 0x01]) # Not a Tournament Seed diff --git a/data/base2current.bps b/data/base2current.bps index 43f2319ea5e516ec4af6be3c1a619e3d043adfab..ecddb99bb1d1ae348ba05409d10987cebdec1886 100644 GIT binary patch delta 8094 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 diff --git a/source/item/FillUtil.py b/source/item/FillUtil.py index 4f052bd4..9614eeef 100644 --- a/source/item/FillUtil.py +++ b/source/item/FillUtil.py @@ -275,7 +275,7 @@ def massage_item_pool(world): world.itempool.remove(deleted) discrepancy -= 1 if discrepancy > 0: - logging.getLogger('').warning(f'Too many good items in pool, something will be removed at random') + raise Exception(f'Too many required items in pool, {discrepancy} items cannot be placed') if world.item_pool_config.placeholders is not None: removed = 0 single_rupees = [item for item in world.itempool if item.name == 'Rupee (1)']