From fb22c88acef9caa568a13f32ba0e6bb348c03004 Mon Sep 17 00:00:00 2001 From: aerinon Date: Wed, 7 Jul 2021 14:04:50 -0700 Subject: [PATCH 1/2] Baserom update --- RELEASENOTES.md | 12 ++++++++++++ Rom.py | 23 ++--------------------- data/base2current.bps | Bin 133695 -> 136204 bytes 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b6258011..dd2ce1fc 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -24,6 +24,18 @@ Thanks to qadan, cheuer, & compiling * Fixed an issue with the credit stats specific to DR (e.g. collection rate total) * More helpful error message when bps is missing? * Minor generation issues involving enemizer and the link sprite + * Baserom updates (from Bonta, kan, qwertymodo, ardnaxelark) + * Boss icon on dungeon map (if you have a compass) + * Progressive bow sprite replacement + * Quickswap - consecutive special swaps + * Bonk Counter + * One mind + * MSU fix + * Chest turn tracking (not yet in credits) + * Damaged and magic stats in credits (gt bk removed) + * Fix for infinite bombs + * Fake boots option + * Always allowed medallions for swordless (no option yet) * 0.4.0.7 * Reduce flashing option added * Sprite author credit added diff --git a/Rom.py b/Rom.py index 7611aaa8..a3f37cb2 100644 --- a/Rom.py +++ b/Rom.py @@ -31,7 +31,7 @@ from EntranceShuffle import door_addresses, exit_ids JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '712324ad3ca7bff751d9f62812a2c3b6' +RANDOMIZERBASEHASH = '736978dd2b3a2bb109ac80ed7c048e67' class JsonRom(object): @@ -809,7 +809,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): write_int16(rom, 0x187010, credits_total) # dynamic credits if credits_total != 216: # collection rate address: - cr_address = 0x2391FA + cr_address = 0x2391F2 cr_pc = cr_address - 0x120000 # convert to pc mid_top, mid_bot = credits_digit((credits_total // 10) % 10) last_top, last_bot = credits_digit(credits_total % 10) @@ -820,25 +820,6 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): rom.write_byte(cr_pc+0x3a, mid_bot) rom.write_byte(cr_pc+0x3b, last_bot) - if world.keydropshuffle[player] or world.doorShuffle[player] != 'vanilla': - gt = world.dungeon_layouts[player]['Ganons Tower'] - gt_logic = world.key_logic[player]['Ganons Tower'] - total = 0 - for region in gt.master_sector.regions: - total += count_locations_exclude_logic(region.locations, gt_logic) - # rom.write_byte(0x187012, total) # dynamic credits - # gt big key address: - gtbk_address = 0x23911C - gtbk_pc = gtbk_address - 0x120000 # convert to pc - mid_top, mid_bot = credits_digit(total // 10) - last_top, last_bot = credits_digit(total % 10) - # top half - rom.write_byte(gtbk_pc+0x1c, mid_top) - rom.write_byte(gtbk_pc+0x1d, last_top) - # bottom half - rom.write_byte(gtbk_pc+0x3a, mid_bot) - rom.write_byte(gtbk_pc+0x3b, last_bot) - # patch medallion requirements if world.required_medallions[player][0] == 'Bombos': rom.write_byte(0x180022, 0x00) # requirement diff --git a/data/base2current.bps b/data/base2current.bps index 94a1eedd3b15a5e6d8bc6d0e46caacd90a9cfb85..22b25506e15289afe5741a94f8aeebbfcc14272c 100644 GIT binary patch delta 19579 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 HN-h5nm5%q? From ffcc78f95c9d2f73a5beca78b32339abb1ac8f1a Mon Sep 17 00:00:00 2001 From: aerinon Date: Wed, 7 Jul 2021 16:23:16 -0700 Subject: [PATCH 2/2] Fake boots checkbox/argument --- BaseClasses.py | 1 + CLI.py | 3 ++- Main.py | 1 + Mystery.py | 1 + Rom.py | 4 +++- resources/app/cli/args.json | 4 ++++ resources/app/cli/lang/en.json | 1 + resources/app/gui/lang/en.json | 1 + resources/app/gui/randomize/item/widgets.json | 3 ++- source/classes/constants.py | 1 + source/gui/randomize/item.py | 7 +++++-- 11 files changed, 22 insertions(+), 5 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index fc0029ee..7521bd6e 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -131,6 +131,7 @@ class World(object): set_player_attr('treasure_hunt_total', 0) set_player_attr('potshuffle', False) set_player_attr('pot_contents', None) + set_player_attr('fakeboots', False) set_player_attr('shopsanity', False) set_player_attr('keydropshuffle', False) diff --git a/CLI.py b/CLI.py index 222f8a90..9b6e42fb 100644 --- a/CLI.py +++ b/CLI.py @@ -97,7 +97,7 @@ def parse_cli(argv, no_defaults=False): 'shuffle', 'door_shuffle', 'intensity', 'crystals_ganon', 'crystals_gt', 'openpyramid', 'mapshuffle', 'compassshuffle', 'keyshuffle', 'bigkeyshuffle', 'startinventory', 'triforce_pool_min', 'triforce_pool_max', 'triforce_goal_min', 'triforce_goal_max', - 'triforce_min_difference', 'triforce_goal', 'triforce_pool', 'shufflelinks', + 'triforce_min_difference', 'triforce_goal', 'triforce_pool', 'shufflelinks', 'fakeboots', 'retro', 'accessibility', 'hints', 'beemizer', 'experimental', 'dungeon_counters', 'shufflebosses', 'shuffleenemies', 'enemy_health', 'enemy_damage', 'shufflepots', 'ow_palettes', 'uw_palettes', 'sprite', 'disablemusic', 'quickswap', 'fastmenu', 'heartcolor', 'heartbeep', @@ -144,6 +144,7 @@ def parse_settings(): "shuffleganon": True, "shuffle": "vanilla", "shufflelinks": False, + "fakeboots": False, "shufflepots": False, "shuffleenemies": "none", diff --git a/Main.py b/Main.py index 513f5a84..505c6d23 100644 --- a/Main.py +++ b/Main.py @@ -90,6 +90,7 @@ def main(args, seed=None, fish=None): world.treasure_hunt_count = args.triforce_goal.copy() world.treasure_hunt_total = args.triforce_pool.copy() world.shufflelinks = args.shufflelinks.copy() + world.fakeboots = args.fakeboots.copy() world.rom_seeds = {player: random.randint(0, 999999999) for player in range(1, world.players + 1)} diff --git a/Mystery.py b/Mystery.py index bd5581d6..0fd85108 100644 --- a/Mystery.py +++ b/Mystery.py @@ -143,6 +143,7 @@ def roll_settings(weights): ret.dungeon_counters = 'pickup' if ret.door_shuffle != 'vanilla' or ret.compassshuffle == 'on' else 'off' ret.shufflelinks = get_choice('shufflelinks') == 'on' + ret.fakeboots = get_choice('fakeboots') == 'on' ret.shopsanity = get_choice('shopsanity') == 'on' ret.keydropshuffle = get_choice('keydropshuffle') == 'on' ret.mixed_travel = get_choice('mixed_travel') if 'mixed_travel' in weights else 'prevent' diff --git a/Rom.py b/Rom.py index a3f37cb2..72be78d0 100644 --- a/Rom.py +++ b/Rom.py @@ -18,7 +18,6 @@ except ImportError: from BaseClasses import CollectionState, ShopType, Region, Location, Door, DoorType, RegionType, PotItem from DoorShuffle import compass_data, DROptions, boss_indicator from Dungeons import dungeon_music_addresses -from KeyDoorShuffle import count_locations_exclude_logic from Regions import location_table, shop_to_location_table, retro_shops from RoomData import DoorKind from Text import MultiByteTextMapper, CompressedTextMapper, text_addresses, Credits, TextTable @@ -1163,6 +1162,9 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): rom.write_byte(0x18017E, 0x01) # Fairy fountains only trade in bottles # Starting equipment + if world.fakeboots[player]: + rom.write_byte(0x18008E, 0x01) + equip = [0] * (0x340 + 0x4F) equip[0x36C] = 0x18 equip[0x36D] = 0x18 diff --git a/resources/app/cli/args.json b/resources/app/cli/args.json index 00d1c9db..584593b4 100644 --- a/resources/app/cli/args.json +++ b/resources/app/cli/args.json @@ -310,6 +310,10 @@ "action": "store_true", "type": "bool" }, + "fakeboots": { + "action": "store_true", + "type": "bool" + }, "calc_playthrough": { "action": "store_false", "type": "bool" diff --git a/resources/app/cli/lang/en.json b/resources/app/cli/lang/en.json index 145667ef..6416e952 100644 --- a/resources/app/cli/lang/en.json +++ b/resources/app/cli/lang/en.json @@ -262,6 +262,7 @@ "Keys are universal, shooting arrows costs rupees,", "and a few other little things make this more like Zelda-1. (default: %(default)s)" ], + "fakeboots": [ " Players starts with fake boots that allow dashing but no item checks (default: %(default)s"], "startinventory": [ "Specifies a list of items that will be in your starting inventory (separated by commas). (default: %(default)s)" ], "usestartinventory": [ "Toggle usage of Starting Inventory." ], "custom": [ "Not supported." ], diff --git a/resources/app/gui/lang/en.json b/resources/app/gui/lang/en.json index 850bb788..f4b8ca12 100644 --- a/resources/app/gui/lang/en.json +++ b/resources/app/gui/lang/en.json @@ -189,6 +189,7 @@ "randomizer.item.hints": "Include Helpful Hints", "randomizer.item.retro": "Retro mode (universal keys)", + "randomizer.item.fakeboots": "Start with Fake Boots", "randomizer.item.worldstate": "World State", "randomizer.item.worldstate.standard": "Standard", diff --git a/resources/app/gui/randomize/item/widgets.json b/resources/app/gui/randomize/item/widgets.json index 1871dcaf..1f5eb19a 100644 --- a/resources/app/gui/randomize/item/widgets.json +++ b/resources/app/gui/randomize/item/widgets.json @@ -4,7 +4,8 @@ "shopsanity": { "type": "checkbox" }, "hints": { "type": "checkbox" - } + }, + "fakeboots": { "type": "checkbox" } }, "leftItemFrame": { "worldstate": { diff --git a/source/classes/constants.py b/source/classes/constants.py index 3e59af3c..14c70f79 100644 --- a/source/classes/constants.py +++ b/source/classes/constants.py @@ -58,6 +58,7 @@ SETTINGSTOPROCESS = { "hints": "hints", "retro": "retro", "shopsanity": "shopsanity", + "fakeboots": "fakeboots", "worldstate": "mode", "logiclevel": "logic", "goal": "goal", diff --git a/source/gui/randomize/item.py b/source/gui/randomize/item.py index b01892ab..81c957ce 100644 --- a/source/gui/randomize/item.py +++ b/source/gui/randomize/item.py @@ -1,4 +1,4 @@ -from tkinter import ttk, Frame, E, W, LEFT, RIGHT +from tkinter import ttk, Frame, E, W, LEFT, RIGHT, Label import source.gui.widgets as widgets import json import os @@ -17,6 +17,9 @@ def item_page(parent): self.frames["checkboxes"] = Frame(self) self.frames["checkboxes"].pack(anchor=W) + various_options = Label(self.frames["checkboxes"], text="") + various_options.pack(side=LEFT) + self.frames["leftItemFrame"] = Frame(self) self.frames["rightItemFrame"] = Frame(self) self.frames["leftItemFrame"].pack(side=LEFT) @@ -34,7 +37,7 @@ def item_page(parent): self.widgets[key] = dictWidgets[key] packAttrs = {"anchor":E} if self.widgets[key].type == "checkbox": - packAttrs["anchor"] = W + packAttrs["side"] = LEFT self.widgets[key].pack(packAttrs) return self