From 4da44da3715f89a93e0a39b3afb3b70c4deade0b Mon Sep 17 00:00:00 2001 From: Xopar Date: Wed, 10 Aug 2022 13:21:22 -0500 Subject: [PATCH 01/17] Fixed conditional sometimes on the dual hints --- HintList.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/HintList.py b/HintList.py index 24c1d06e4..d2200751f 100644 --- a/HintList.py +++ b/HintList.py @@ -244,12 +244,12 @@ def tokens_required_by_settings(world): 'GV Pieces of Heart Ledges': lambda world: not world.settings.shuffle_cows and world.settings.tokensanity not in ['overworld', 'all'], 'LH Adult Bean Destination Checks': lambda world: world.settings.shuffle_interior_entrances == 'off', - 'Fire Temple Lower Loop': lambda world: world.settings.tokensanity not in ['dungeon', 'all'], - 'Water Temple River Loop Chests': lambda world: world.settings.tokensanity not in ['dungeon', 'all'], - 'Water Temple MQ Lower Checks': lambda world: world.settings.tokensanity not in ['dungeon', 'all'], - 'Spirit Temple Child Lower': lambda world: world.settings.tokensanity not in ['dungeon', 'all'], - 'Spirit Temple Adult Lower': lambda world: world.settings.tokensanity not in ['dungeon', 'all'], - 'Shadow Temple Invisible Blades Chests': lambda world: world.settings.tokensanity not in ['dungeon', 'all'], + 'Fire Temple Lower Loop': lambda world: world.settings.tokensanity not in ['dungeons', 'all'], + 'Water Temple River Loop Chests': lambda world: world.settings.tokensanity not in ['dungeons', 'all'], + 'Water Temple MQ Lower Checks': lambda world: world.settings.tokensanity not in ['dungeons', 'all'], + 'Spirit Temple Child Lower': lambda world: world.settings.tokensanity not in ['dungeons', 'all'], + 'Spirit Temple Adult Lower': lambda world: world.settings.tokensanity not in ['dungeons', 'all'], + 'Shadow Temple Invisible Blades Chests': lambda world: world.settings.tokensanity not in ['dungeons', 'all'], # Conditional entrance hints 'Ganons Castle Grounds -> Ganons Castle Lobby': lambda world: (world.settings.bridge != 'open' From 4e1087f1f7503f63992893f99d2eb1036f021221 Mon Sep 17 00:00:00 2001 From: Xopar Date: Wed, 10 Aug 2022 13:39:56 -0500 Subject: [PATCH 02/17] Adjustments to the text of the dual sometimes --- HintList.py | 60 ++++++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/HintList.py b/HintList.py index d2200751f..5a48fd4ae 100644 --- a/HintList.py +++ b/HintList.py @@ -520,51 +520,51 @@ def tokens_required_by_settings(world): 'Ganons Castle Shadow Trial Golden Gauntlets Chest': ("#deep in the test of darkness# lies", "a #like-like in Ganon's Shadow Trial# guards", ['dungeon', 'sometimes']), 'Ganons Castle MQ Shadow Trial Eye Switch Chest': ("#deep in the test of darkness# lies", "shooting an #eye switch in Ganon's Shadow Trial# reveals", ['dungeon', 'sometimes']), - 'Deku Theater Rewards': ("the #Deku Theater# yields, for the Skull Mask and Mask of Truth respectively...^", None, 'dual'), - 'HF Ocarina of Time Retrieval': ("during her escape, #Princess Zelda# entrusted you with both...^", None, 'dual'), - 'HF Valley Grotto': ("in a grotto full of #spider webs# a cow and a spider hold respectively...^", None, 'dual'), - 'Market Bombchu Bowling Rewards': ("at the #Bombchu Bowling Alley#, the first and second prizes are...^", None, 'dual'), - 'ZR Frogs Rewards': ("the #Frogs of Zora River#, for giving them rain and a great performance, will reward you with...^", None, 'dual'), - 'LH Lake Lab Pool': ("inside a #lakeside lab# a person and a spider hold respectively...^", None, 'dual'), - 'LH Adult Bean Destination Checks': ("#riding the bean platform# of the lake to the lab's roof and the fishing hole leads to...^", None, 'dual'), - 'GV Pieces of Heart Ledges': ("within the #valley#, the crate and waterfall conceal respectively...^", None, 'dual'), - 'GF Horseback Archery Rewards': ("at the #Gerudo Horseback Archery#, scoring 1000 and 1500 gives respectively...^", None, 'dual'), - 'Colossus Nighttime GS': ("#outside the Desert Colossus# spiders on palm trees and hills hold respectively...^", None, 'dual'), - 'Graveyard Dampe Race Rewards': ("racing #Dampe's ghost# yields...^", None, 'dual'), - 'Graveyard Royal Family Tomb Contents': ("inside the #Royal Family Tomb#, darkness and Redeads guard respectively...^", None, 'dual'), - 'DMC Child Upper Checks': ("at #the crater# a spider in a crate and a single scrub hold respectively...^", None, 'dual'), - 'Haunted Wasteland Checks': ("#deep in the wasteland# a chest and a spider hold respectively...^", None, 'dual'), + 'Deku Theater Rewards': ("the #Skull Mask and Mask of Truth# reward...^", None, 'dual'), + 'HF Ocarina of Time Retrieval': ("the #Ocarina of Time# rewards both...^", None, 'dual'), + 'HF Valley Grotto': ("in a grotto with a #spider and a cow# you will find...^", None, 'dual'), + 'Market Bombchu Bowling Rewards': ("at the #Bombchu Bowling Alley#, you will be rewarded with...^", None, 'dual'), + 'ZR Frogs Rewards': ("the #Frogs of Zora River#, will reward you with...^", None, 'dual'), + 'LH Lake Lab Pool': ("inside the #lakeside lab# a person and a spider hold...^", None, 'dual'), + 'LH Adult Bean Destination Checks': ("#riding the bean in Lake Hylia# leads to...^", None, 'dual'), + 'GV Pieces of Heart Ledges': ("within the #valley#, the crate and waterfall conceal...^", None, 'dual'), + 'GF Horseback Archery Rewards': ("the #Gerudo Horseback Archery#, rewards...^", None, 'dual'), + 'Colossus Nighttime GS': ("#at the Desert Colossus#, skulltulas at night hold...^", None, 'dual'), + 'Graveyard Dampe Race Rewards': ("racing #Dampe's ghost# rewards...^", None, 'dual'), + 'Graveyard Royal Family Tomb Contents': ("inside the #Royal Family Tomb#, you will find...^", None, 'dual'), + 'DMC Child Upper Checks': ("in the #crater, a spider in a crate and a single scrub# guard...^", None, 'dual'), + 'Haunted Wasteland Checks': ("deep in the #wasteland a chest and a spider# hold...^", None, 'dual'), 'Deku Tree MQ Basement GS': ("in the back of the #basement of the Great Deku Tree# two spiders hold...^", None, 'dual'), - 'Dodongos Cavern Upper Business Scrubs': ("in the #upper parts of Dodongo's Cavern# a pair of scrubs sell...^", None, 'dual'), + 'Dodongos Cavern Upper Business Scrubs': ("in #Dodongo's Cavern a pair of scrubs# sell...^", None, 'dual'), 'Dodongos Cavern MQ Larvae Room': ("amid #larvae in Dodongo's Cavern# a chest and a spider hold...^", None, 'dual'), 'Fire Temple Lower Loop': ("under the #entrance of the Fire Temple# a blocked path leads to...^", None, 'dual'), 'Fire Temple MQ Lower Loop': ("under the #entrance of the Fire Temple# a blocked path leads to...^", None, 'dual'), - 'Water Temple River Loop Chests': ("#chests past a shadowy fight# in the Water Temple hold...^", None, 'dual'), - 'Water Temple River Checks': ("past a #temporal stone in the Water Temple#, a spider and a chest hold respectively...^", None, 'dual'), + 'Water Temple River Loop Chests': ("#chests past Dark Link# in the Water Temple hold...^", None, 'dual'), + 'Water Temple River Checks': ("in the #river in the Water Temple# lies...^", None, 'dual'), 'Water Temple North Basement Checks': ("the #northern basement of the Water Temple# contains...^", None, 'dual'), 'Water Temple MQ North Basement Checks': ("the #northern basement of the Water Temple# contains...^", None, 'dual'), 'Water Temple MQ Lower Checks': ("#a chest and a crate in locked basements# in the Water Temple hold...^", None, 'dual'), - 'Spirit Temple Colossus Hands': ("upon the #Colossus's right and left hands# are respectively...^", None, 'dual'), - 'Spirit Temple Child Lower': ("#in between crawl spaces# in the Spirit Temple chests contain...^", None, 'dual'), - 'Spirit Temple Child Top': ("on the path to the #western Iron Knuckle of the Spirit Temple# a chest and a spider hold respectively...^", None, 'dual'), - 'Spirit Temple Adult Lower': ("#past the entrance's silver block in the Spirit Temple# boulders and a melody guard...^", None, 'dual'), - 'Spirit Temple MQ Child Top': ("on the path to the #western Iron Knuckle of the Spirit Temple# a chest and a spider hold respectively...^", None, 'dual'), - 'Spirit Temple MQ Symphony Room': ("#beyond the symphony room# in the Spirit Temple a chest and a spider hold...^", None, 'dual'), + 'Spirit Temple Colossus Hands': ("upon the #Colossus's hands# lies...^", None, 'dual'), + 'Spirit Temple Child Lower': ("between the #crawl spaces in the Spirit Temple# chests contain...^", None, 'dual'), + 'Spirit Temple Child Top': ("on the path to the #right hand of the Spirit Temple# a chest and a spider hold...^", None, 'dual'), + 'Spirit Temple Adult Lower': ("past a #silver block in the Spirit Temple# boulders and a melody conceal...^", None, 'dual'), + 'Spirit Temple MQ Child Top': ("on the path to the #right hand of the Spirit Temple# a chest and a spider hold respectively...^", None, 'dual'), + 'Spirit Temple MQ Symphony Room': ("#the symphony room# in the Spirit Temple protects...^", None, 'dual'), 'Spirit Temple MQ Throne Room GS': ("in the #nine thrones room# of the Spirit Temple spiders hold...^", None, 'dual'), - 'Shadow Temple Invisible Blades Chests': ("#invisible spinning blades# in the Shadow Temple guard...^", None, 'dual'), - 'Shadow Temple Single Pot Room': ("inside a room containing #a single skull-shaped pot# are...^", None, 'dual'), - 'Shadow Temple Spike Walls Room': ("behind #flammable walls# in the Shadow Temple chests contain...^", None, 'dual'), + 'Shadow Temple Invisible Blades Chests': ("an #invisible spinning blade# in the Shadow Temple guards...^", None, 'dual'), + 'Shadow Temple Single Pot Room': ("a room containing a #large pot in Shadow Temple# holds...^", None, 'dual'), + 'Shadow Temple Spike Walls Room': ("behind #wooden walls# in the Shadow Temple hides...^", None, 'dual'), 'Shadow Temple MQ Upper Checks': ("#before the Truth Spinner gap# in the Shadow Temple locked chests contain...^", None, 'dual'), - 'Shadow Temple MQ Invisible Blades Chests': ("#invisible spinning blades# in the Shadow Temple guard...^", None, 'dual'), - 'Shadow Temple MQ Spike Walls Room': ("behind #flammable walls# in the Shadow Temple chests contain...^", None, 'dual'), + 'Shadow Temple MQ Invisible Blades Chests': ("an #invisible spinning blade# in the Shadow Temple guards...^", None, 'dual'), + 'Shadow Temple MQ Spike Walls Room': ("behind #wooden walls# in the Shadow Temple chests contain...^", None, 'dual'), 'Bottom of the Well Inner Rooms GS': ("in the #central rooms of the well# spiders hold...^", None, 'dual'), 'Bottom of the Well Dead Hand Room': ("#Dead Hand in the well# guards...^", None, 'dual'), 'Bottom of the Well MQ Dead Hand Room': ("#Dead Hand in the well# guards...^", None, 'dual'), - 'Bottom of the Well MQ Basement': ("in the #depths of the well# a spider and a chest hold respectively...^", None, 'dual'), + 'Bottom of the Well MQ Basement': ("in the #depths of the well# a spider and a chest hold...^", None, 'dual'), 'Ice Cavern Final Room': ("the #final treasures of Ice Cavern# are...^", None, 'dual'), 'Ice Cavern MQ Final Room': ("the #final treasures of Ice Cavern# are...^", None, 'dual'), - 'Ganons Castle Spirit Trial Chests': ("#within the Spirit Trial#, past the silver rupees, chests contain...^", None, 'dual'), + 'Ganons Castle Spirit Trial Chests': ("#within the Spirit Trial#, chests contain...^", None, 'dual'), 'KF Kokiri Sword Chest': ("the #hidden treasure of the Kokiri# is", None, 'exclude'), 'KF Midos Top Left Chest': ("the #leader of the Kokiri# hides", "#inside Mido's house# is", 'exclude'), From ffcb77a570b9f2370fd6fa1af942fbaec5adffc0 Mon Sep 17 00:00:00 2001 From: Xopar Date: Thu, 11 Aug 2022 14:08:03 -0500 Subject: [PATCH 03/17] Fenhls review changes: additional clarification, leaving unclear hints as options, removing redundancy with other PR --- HintList.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/HintList.py b/HintList.py index 5a48fd4ae..38f71f5ae 100644 --- a/HintList.py +++ b/HintList.py @@ -244,12 +244,12 @@ def tokens_required_by_settings(world): 'GV Pieces of Heart Ledges': lambda world: not world.settings.shuffle_cows and world.settings.tokensanity not in ['overworld', 'all'], 'LH Adult Bean Destination Checks': lambda world: world.settings.shuffle_interior_entrances == 'off', - 'Fire Temple Lower Loop': lambda world: world.settings.tokensanity not in ['dungeons', 'all'], - 'Water Temple River Loop Chests': lambda world: world.settings.tokensanity not in ['dungeons', 'all'], - 'Water Temple MQ Lower Checks': lambda world: world.settings.tokensanity not in ['dungeons', 'all'], - 'Spirit Temple Child Lower': lambda world: world.settings.tokensanity not in ['dungeons', 'all'], - 'Spirit Temple Adult Lower': lambda world: world.settings.tokensanity not in ['dungeons', 'all'], - 'Shadow Temple Invisible Blades Chests': lambda world: world.settings.tokensanity not in ['dungeons', 'all'], + 'Fire Temple Lower Loop': lambda world: world.settings.tokensanity not in ['dungeon', 'all'], + 'Water Temple River Loop Chests': lambda world: world.settings.tokensanity not in ['dungeon', 'all'], + 'Water Temple MQ Lower Checks': lambda world: world.settings.tokensanity not in ['dungeon', 'all'], + 'Spirit Temple Child Lower': lambda world: world.settings.tokensanity not in ['dungeon', 'all'], + 'Spirit Temple Adult Lower': lambda world: world.settings.tokensanity not in ['dungeon', 'all'], + 'Shadow Temple Invisible Blades Chests': lambda world: world.settings.tokensanity not in ['dungeon', 'all'], # Conditional entrance hints 'Ganons Castle Grounds -> Ganons Castle Lobby': lambda world: (world.settings.bridge != 'open' @@ -521,26 +521,26 @@ def tokens_required_by_settings(world): 'Ganons Castle MQ Shadow Trial Eye Switch Chest': ("#deep in the test of darkness# lies", "shooting an #eye switch in Ganon's Shadow Trial# reveals", ['dungeon', 'sometimes']), 'Deku Theater Rewards': ("the #Skull Mask and Mask of Truth# reward...^", None, 'dual'), - 'HF Ocarina of Time Retrieval': ("the #Ocarina of Time# rewards both...^", None, 'dual'), + 'HF Ocarina of Time Retrieval': ("during her escape, #Princess Zelda# entrusted you with both...^", "the #Ocarina of Time# rewards both...^", 'dual'), 'HF Valley Grotto': ("in a grotto with a #spider and a cow# you will find...^", None, 'dual'), 'Market Bombchu Bowling Rewards': ("at the #Bombchu Bowling Alley#, you will be rewarded with...^", None, 'dual'), - 'ZR Frogs Rewards': ("the #Frogs of Zora River#, will reward you with...^", None, 'dual'), + 'ZR Frogs Rewards': ("the #Frogs of Zora River# will reward you with...^", None, 'dual'), 'LH Lake Lab Pool': ("inside the #lakeside lab# a person and a spider hold...^", None, 'dual'), 'LH Adult Bean Destination Checks': ("#riding the bean in Lake Hylia# leads to...^", None, 'dual'), 'GV Pieces of Heart Ledges': ("within the #valley#, the crate and waterfall conceal...^", None, 'dual'), - 'GF Horseback Archery Rewards': ("the #Gerudo Horseback Archery#, rewards...^", None, 'dual'), + 'GF Horseback Archery Rewards': ("the #Gerudo Horseback Archery# rewards...^", None, 'dual'), 'Colossus Nighttime GS': ("#at the Desert Colossus#, skulltulas at night hold...^", None, 'dual'), - 'Graveyard Dampe Race Rewards': ("racing #Dampe's ghost# rewards...^", None, 'dual'), + 'Graveyard Dampe Race Rewards': ("racing #Dampé's ghost# rewards...^", None, 'dual'), 'Graveyard Royal Family Tomb Contents': ("inside the #Royal Family Tomb#, you will find...^", None, 'dual'), 'DMC Child Upper Checks': ("in the #crater, a spider in a crate and a single scrub# guard...^", None, 'dual'), - 'Haunted Wasteland Checks': ("deep in the #wasteland a chest and a spider# hold...^", None, 'dual'), + 'Haunted Wasteland Checks': ("deep in the #wasteland a spider and a chest# hold...^", None, 'dual'), 'Deku Tree MQ Basement GS': ("in the back of the #basement of the Great Deku Tree# two spiders hold...^", None, 'dual'), 'Dodongos Cavern Upper Business Scrubs': ("in #Dodongo's Cavern a pair of scrubs# sell...^", None, 'dual'), 'Dodongos Cavern MQ Larvae Room': ("amid #larvae in Dodongo's Cavern# a chest and a spider hold...^", None, 'dual'), 'Fire Temple Lower Loop': ("under the #entrance of the Fire Temple# a blocked path leads to...^", None, 'dual'), 'Fire Temple MQ Lower Loop': ("under the #entrance of the Fire Temple# a blocked path leads to...^", None, 'dual'), - 'Water Temple River Loop Chests': ("#chests past Dark Link# in the Water Temple hold...^", None, 'dual'), + 'Water Temple River Loop Chests': ("#chests past a shadowy fight# in the Water Temple hold...^", "#chests past Dark Link# in the Water Temple hold...^", 'dual'), 'Water Temple River Checks': ("in the #river in the Water Temple# lies...^", None, 'dual'), 'Water Temple North Basement Checks': ("the #northern basement of the Water Temple# contains...^", None, 'dual'), 'Water Temple MQ North Basement Checks': ("the #northern basement of the Water Temple# contains...^", None, 'dual'), @@ -553,11 +553,11 @@ def tokens_required_by_settings(world): 'Spirit Temple MQ Symphony Room': ("#the symphony room# in the Spirit Temple protects...^", None, 'dual'), 'Spirit Temple MQ Throne Room GS': ("in the #nine thrones room# of the Spirit Temple spiders hold...^", None, 'dual'), 'Shadow Temple Invisible Blades Chests': ("an #invisible spinning blade# in the Shadow Temple guards...^", None, 'dual'), - 'Shadow Temple Single Pot Room': ("a room containing a #large pot in Shadow Temple# holds...^", None, 'dual'), - 'Shadow Temple Spike Walls Room': ("behind #wooden walls# in the Shadow Temple hides...^", None, 'dual'), + 'Shadow Temple Single Pot Room': ("a room containing #a single skull-shaped pot# holds...^", "a room containing a #large pot in the Shadow Temple# holds...^", 'dual'), + 'Shadow Temple Spike Walls Room': ("#wooden walls# in the Shadow Temple hide...^", None, 'dual'), 'Shadow Temple MQ Upper Checks': ("#before the Truth Spinner gap# in the Shadow Temple locked chests contain...^", None, 'dual'), 'Shadow Temple MQ Invisible Blades Chests': ("an #invisible spinning blade# in the Shadow Temple guards...^", None, 'dual'), - 'Shadow Temple MQ Spike Walls Room': ("behind #wooden walls# in the Shadow Temple chests contain...^", None, 'dual'), + 'Shadow Temple MQ Spike Walls Room': ("#wooden walls# in the Shadow Temple hide...^", None, 'dual'), 'Bottom of the Well Inner Rooms GS': ("in the #central rooms of the well# spiders hold...^", None, 'dual'), 'Bottom of the Well Dead Hand Room': ("#Dead Hand in the well# guards...^", None, 'dual'), 'Bottom of the Well MQ Dead Hand Room': ("#Dead Hand in the well# guards...^", None, 'dual'), From 41af928a8ca19718a2525f2068abaaff7a21d0fb Mon Sep 17 00:00:00 2001 From: Xopar Date: Thu, 11 Aug 2022 14:17:50 -0500 Subject: [PATCH 04/17] Extra change to clarify spirit hands hint --- HintList.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HintList.py b/HintList.py index 38f71f5ae..4a40e3e6a 100644 --- a/HintList.py +++ b/HintList.py @@ -545,7 +545,7 @@ def tokens_required_by_settings(world): 'Water Temple North Basement Checks': ("the #northern basement of the Water Temple# contains...^", None, 'dual'), 'Water Temple MQ North Basement Checks': ("the #northern basement of the Water Temple# contains...^", None, 'dual'), 'Water Temple MQ Lower Checks': ("#a chest and a crate in locked basements# in the Water Temple hold...^", None, 'dual'), - 'Spirit Temple Colossus Hands': ("upon the #Colossus's hands# lies...^", None, 'dual'), + 'Spirit Temple Colossus Hands': ("upon the #Colossus's hands# right and left hands lie...^", None, 'dual'), 'Spirit Temple Child Lower': ("between the #crawl spaces in the Spirit Temple# chests contain...^", None, 'dual'), 'Spirit Temple Child Top': ("on the path to the #right hand of the Spirit Temple# a chest and a spider hold...^", None, 'dual'), 'Spirit Temple Adult Lower': ("past a #silver block in the Spirit Temple# boulders and a melody conceal...^", None, 'dual'), From 7d877f5933d981ac4cf0ff45dd9e9e58b2663e73 Mon Sep 17 00:00:00 2001 From: Benjamin Brandmeier Date: Thu, 8 Sep 2022 23:10:14 +0200 Subject: [PATCH 05/17] Fix visibility toggle bug (GUI) --- .../pages/generator/generator.component.ts | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/GUI/src/app/pages/generator/generator.component.ts b/GUI/src/app/pages/generator/generator.component.ts index 32be705da..2728245dc 100644 --- a/GUI/src/app/pages/generator/generator.component.ts +++ b/GUI/src/app/pages/generator/generator.component.ts @@ -75,7 +75,7 @@ export class GeneratorComponent implements OnInit { eventSub.unsubscribe(); } }); - } + } } generatorReady() { @@ -301,7 +301,7 @@ export class GeneratorComponent implements OnInit { this.dialogService.open(DialogWindow, { autoFocus: true, closeOnBackdropClick: true, closeOnEsc: true, hasBackdrop: true, hasScroll: false, context: { dialogHeader: "Error", dialogMessage: "You may only generate one seed per minute to prevent spam!" } }); - } + } else if (err.hasOwnProperty('error_rom_in_plando')) { this.dialogService.open(ConfirmationWindow, { @@ -623,7 +623,7 @@ export class GeneratorComponent implements OnInit { path = "Output"; else path = this.global.generator_settingsMap["output_dir"]; - + this.global.createAndOpenPath(path).then(() => { console.log("Output dir opened"); }).catch(err => { @@ -651,7 +651,7 @@ export class GeneratorComponent implements OnInit { this.dialogService.open(DialogWindow, { autoFocus: true, closeOnBackdropClick: true, closeOnEsc: true, hasBackdrop: true, hasScroll: false, context: { dialogHeader: "Error", dialogMessage: err } - }); + }); }); } @@ -904,7 +904,7 @@ export class GeneratorComponent implements OnInit { if (setting["type"] === "SearchBox") { //Special handling for type "SearchBox" let optionsSelected = value && typeof (value) == "object" && Array.isArray(value) && value.length > 0; - + //First build a complete list consisting of every option that hasn't been selected yet with a true value setting.options.forEach(optionToAdd => { @@ -968,11 +968,24 @@ export class GeneratorComponent implements OnInit { } executeVisibilityForSetting(targetSetting: any, targetValue: boolean) { - - var triggeredChange = false; + let triggeredChange = false; if ("controls_visibility_tab" in targetSetting) { + this.triggerTabVisibility(targetSetting, targetValue); + } + + if ("controls_visibility_setting" in targetSetting) { + triggeredChange = this.triggerSettingVisibility(targetSetting, targetValue, triggeredChange); + } + + if ("controls_visibility_section" in targetSetting) { + triggeredChange = this.triggerSectionVisibility(targetSetting, targetValue, triggeredChange); + } + + return triggeredChange; + } + private triggerTabVisibility(targetSetting: any, targetValue: boolean) { //console.log(targetSetting, setting); targetSetting["controls_visibility_tab"].split(",").forEach(tab => { @@ -994,8 +1007,7 @@ export class GeneratorComponent implements OnInit { }); } - if ("controls_visibility_section" in targetSetting) { - + private triggerSectionVisibility(targetSetting: any, targetValue: boolean, triggeredChange: boolean) { targetSetting["controls_visibility_section"].split(",").forEach(section => { let targetSection = null; @@ -1039,10 +1051,11 @@ export class GeneratorComponent implements OnInit { }); } }); - } - if ("controls_visibility_setting" in targetSetting) { + return triggeredChange; + } + private triggerSettingVisibility(targetSetting: any, targetValue: boolean, triggeredChange: boolean) { targetSetting["controls_visibility_setting"].split(",").forEach(setting => { //Ignore settings that don't exist in this specific app @@ -1060,7 +1073,6 @@ export class GeneratorComponent implements OnInit { this.global.generator_settingsVisibilityMap[setting] = targetValue; }); - } return triggeredChange; } @@ -1157,7 +1169,7 @@ export class GeneratorComponent implements OnInit { } numberInputFocusOut(setting: object, forceAdjust: boolean) { - + let newValue = this.global.generator_settingsMap[setting["name"]]; let settingName = setting["name"]; From eb6f1eb6758a1f3c06e2dc73cbb15d57835db8b3 Mon Sep 17 00:00:00 2001 From: Cuphat Date: Mon, 12 Sep 2022 22:31:18 -0400 Subject: [PATCH 06/17] Version Refactor Reworks version checks to make it easier for branches to have their own individual version tracking. Version checks are performed using the branch URL specified, and now checks the supplementary version as well. The version bytes injected into the ROM header at address 0x35 has been expanded to 5 bytes. In addition to the 3 base version bytes, it now has branch identifier for the fourth byte and the supplementary version for the fifth byte. --- GUI/electron/src/preload.ts | 33 +++++++-- .../components/footer/footer.component.ts | 6 +- GUI/src/app/providers/GUIGlobal.ts | 72 +++++++++++++------ Rom.py | 10 +-- Utils.py | 40 ++++++++--- version.py | 18 ++++- 6 files changed, 132 insertions(+), 47 deletions(-) diff --git a/GUI/electron/src/preload.ts b/GUI/electron/src/preload.ts index aaf51e9cb..d70a1af7b 100644 --- a/GUI/electron/src/preload.ts +++ b/GUI/electron/src/preload.ts @@ -50,7 +50,7 @@ electron.remote.getCurrentWindow().on('leave-html-full-screen', () => { //FUNCTIONS function dumpSettingsToFile(settingsObj) { - settingsObj["check_version"] = true; + settingsObj["check_version"] = true; fs.writeFileSync(pythonSourcePath + "settings.sav", JSON.stringify(settingsObj, null, 4)); } @@ -83,17 +83,36 @@ function readSettingsFromFile() { //POST ROBOT post.on('getCurrentSourceVersion', function (event) { + type VersionData = { + baseVersion: string; + supplementaryVersion: number; + fullVersion: string; + branchUrl: string; + }; let versionFilePath = pythonSourcePath + "version.py"; //Read version.py from the python source + let data: VersionData = { baseVersion : "", supplementaryVersion : 0, fullVersion : "", branchUrl : "" } if (fs.existsSync(versionFilePath)) { - let versionString = fs.readFileSync(versionFilePath, 'utf8'); - versionString = versionString.substr(versionString.indexOf("'") + 1); - - return versionString.substr(0, versionString.indexOf("'")); + let versionFile = fs.readFileSync(versionFilePath, 'utf8'); + + let baseMatch = versionFile.match(/^[ \t]*__version__ = ['"](.+)['"]/m); + let supplementaryMatch = versionFile.match(/^[ \t]*supplementary_version = (\d+)$/m); + let fullMatch = versionFile.match(/^[ \t]*__version__ = f['"]*(.+)['"]/m); + let urlMatch = versionFile.match(/^[ \t]*branch_url = ['"](.+)['"]/m); + + data.baseVersion = baseMatch != null && baseMatch[1] !== undefined ? baseMatch[1] : ""; + data.supplementaryVersion = supplementaryMatch != null && supplementaryMatch[1] !== undefined ? parseInt(supplementaryMatch[1]) : 0; + data.fullVersion = fullMatch != null && fullMatch[1] !== undefined ? fullMatch[1] : ""; + data.fullVersion = data.fullVersion + .replace('{base_version}', data.baseVersion) + .replace('{supplementary_version}', data.supplementaryVersion.toString()) + data.branchUrl = urlMatch != null && urlMatch[1] !== undefined ? urlMatch[1] : ""; + + return data; } else { - return false; + return null; } }); @@ -291,7 +310,7 @@ post.on('generateSeed', function (event) { } if (err.short == "user_cancelled") - post.send(window, 'generateSeedCancelled'); + post.send(window, 'generateSeedCancelled'); else post.send(window, 'generateSeedError', err); }); diff --git a/GUI/src/app/@theme/components/footer/footer.component.ts b/GUI/src/app/@theme/components/footer/footer.component.ts index 4efa0a6b6..e10049dfd 100644 --- a/GUI/src/app/@theme/components/footer/footer.component.ts +++ b/GUI/src/app/@theme/components/footer/footer.component.ts @@ -24,6 +24,7 @@ export class FooterComponent { localVersion: string = ""; remoteVersion: string = ""; + branchUrl: string = ""; hasUpdate: boolean = false; constructor(public global: GUIGlobal, private dialogService: NbDialogService) { } @@ -39,7 +40,8 @@ export class FooterComponent { } else if (eventObj.name == "local_version_checked") { this.localVersion = eventObj.version; - } + this.branchUrl = eventObj.branchUrl; + } }); if (this.global.getGlobalVar("appReady")) { @@ -65,7 +67,7 @@ export class FooterComponent { }).onClose.subscribe(confirmed => { if (confirmed) { - let link = this.remoteVersion.includes("Release") ? "https://www.ootrandomizer.com/downloads" : "https://github.com/TestRunnerSRL/OoT-Randomizer/tree/Dev"; + let link = this.remoteVersion.includes("Release") ? "https://www.ootrandomizer.com/downloads" : this.branchUrl; (window).open(link, "_blank"); } }); diff --git a/GUI/src/app/providers/GUIGlobal.ts b/GUI/src/app/providers/GUIGlobal.ts index d534c6933..9d197a0a2 100644 --- a/GUI/src/app/providers/GUIGlobal.ts +++ b/GUI/src/app/providers/GUIGlobal.ts @@ -23,7 +23,7 @@ export class GUIGlobal { @HostBinding('class.indigo-pink') materialStyleIndigo: boolean = true; @Output() globalEmitter: EventEmitter = new EventEmitter(); - + constructor(private http: HttpClient) { this.globalVars = new Map([ ["appReady", false], @@ -370,7 +370,7 @@ export class GUIGlobal { adjustedUserPresets[presetName] = { settings: userPresets[presetName] }; }); - Object.assign(res.presets, adjustedUserPresets); + Object.assign(res.presets, adjustedUserPresets); } } @@ -534,29 +534,48 @@ export class GUIGlobal { var event = await post.send(window, 'getCurrentSourceVersion'); - var res: string = event.data; + type VersionData = { + baseVersion: string; + supplementaryVersion: number; + fullVersion: string; + branchUrl: string; + }; + + var local: VersionData = event.data; var result = { hasUpdate: false, currentVersion: "", latestVersion: "" }; - if (res && res.length > 0) { + if (local !== null) { - console.log("Local:", res); - result.currentVersion = res; + console.log("Local:", local); + result.currentVersion = local.fullVersion; - this.globalEmitter.emit({ name: "local_version_checked", version: res }); + this.globalEmitter.emit({ name: "local_version_checked", version: local.fullVersion, branchUrl: local.branchUrl }); - let branch = res.includes("Release") ? "release" : "Dev"; - var remoteFile = await this.http.get("https://raw.githubusercontent.com/TestRunnerSRL/OoT-Randomizer/" + branch + "/version.py", { responseType: "text" }).toPromise(); + let remote: VersionData = { baseVersion : "", supplementaryVersion : 0, fullVersion : "", branchUrl : "" } + let url = local.branchUrl.replace("https://github.com", "https://raw.githubusercontent.com").replace("tree/", "") + "/version.py"; + console.log("URL: ", url) + var remoteFile = await this.http.get(url, { responseType: "text" }).toPromise(); - let remoteVersion = remoteFile.substr(remoteFile.indexOf("'") + 1); - remoteVersion = remoteVersion.substr(0, remoteVersion.indexOf("'")); + let baseMatch = remoteFile.match(/^[ \t]*__version__ = ['"](.+)['"]/m); + let supplementaryMatch = remoteFile.match(/^[ \t]*supplementary_version = (\d+)$/m); + let fullMatch = remoteFile.match(/^[ \t]*__version__ = f['"]*(.+)['"]/m); + let urlMatch = remoteFile.match(/^[ \t]*branch_url = ['"](.+)['"]/m); - console.log("Remote:", remoteVersion); - result.latestVersion = remoteVersion; + remote.baseVersion = baseMatch != null && baseMatch[1] !== undefined ? baseMatch[1] : ""; + remote.supplementaryVersion = supplementaryMatch != null && supplementaryMatch[1] !== undefined ? parseInt(supplementaryMatch[1]) : 0; + remote.fullVersion = fullMatch != null && fullMatch[1] !== undefined ? fullMatch[1] : ""; + remote.fullVersion = remote.fullVersion + .replace('{base_version}', remote.baseVersion) + .replace('{supplementary_version}', remote.supplementaryVersion.toString()) + remote.branchUrl = urlMatch != null && urlMatch[1] !== undefined ? urlMatch[1] : ""; + + console.log("Remote:", remote); + result.latestVersion = remote.fullVersion; //Compare versions - result.hasUpdate = this.isVersionNewer(remoteVersion, res); + result.hasUpdate = this.isVersionNewer(remote.baseVersion, local.baseVersion, remote.supplementaryVersion, local.supplementaryVersion); - return result; + return result; } else { return result; @@ -568,7 +587,7 @@ export class GUIGlobal { } } - isVersionNewer(newVersion: string, oldVersion: string) { + isVersionNewer(newVersion: string, oldVersion: string, newSubVersion: number = 0, oldSubVersion: number = 0) { //Strip away dev strings if (oldVersion.startsWith("dev") && oldVersion.includes("_")) @@ -583,10 +602,14 @@ export class GUIGlobal { //Version is not newer if the new version doesn't satisfy the format if (newSplit.length < 3) return false; + else if (newSplit.length == 4) + newSubVersion = newSubVersion == 0 ? Number(newSplit[3]) : 0; //Version is newer if the old version doesn't satisfy the format if (oldSplit.length < 3) return true; + else if (oldSplit.length == 4) + oldSubVersion = oldSubVersion == 0 ? Number(oldSplit[3]) : 0; //Compare major.minor.revision if (Number(newSplit[0]) > Number(oldSplit[0])) { @@ -600,6 +623,11 @@ export class GUIGlobal { if (Number(newSplit[2]) > Number(oldSplit[2])) { return true; } + else if (Number(newSplit[2]) == Number(oldSplit[2])) { + if (newSubVersion > oldSubVersion) { + return true; + } + } } } @@ -637,7 +665,7 @@ export class GUIGlobal { } else if (typeof (settingValue) == "string") { //Try to cast it - if (Number(parseInt(settingValue)) != Number(settingValue)) { //Cast failed, not numeric + if (Number(parseInt(settingValue)) != Number(settingValue)) { //Cast failed, not numeric error = true; } else { @@ -778,7 +806,7 @@ export class GUIGlobal { section.settings.forEach(setting => { if (setting.name in cleanSettings) { - this.generator_settingsMap[setting.name] = setting.default; + this.generator_settingsMap[setting.name] = setting.default; } }); }); @@ -837,8 +865,8 @@ export class GUIGlobal { if (error) { //Input could not be recovered, abort invalidSettingsList.push(setting.text); - } - } + } + } }); }); }); @@ -1148,7 +1176,7 @@ export class GUIGlobal { fileReader.onload = function (event) { console.log("Read in file successfully"); - resolve(event.target["result"]); + resolve(event.target["result"]); }; if (useArrayBuffer) @@ -1212,7 +1240,7 @@ export class GUIGlobal { return plandoFileText; } catch (ex) { - switch (ex.error) { + switch (ex.error) { case "file_read_error": { throw { error: `An error occurred during the loading of the ${settingText}! Please try to enter it again.` }; } diff --git a/Rom.py b/Rom.py index f184e0a11..f9ac5549a 100644 --- a/Rom.py +++ b/Rom.py @@ -11,7 +11,7 @@ from Utils import is_bundled, subprocess_args, local_path, data_path, default_output_path, get_version_bytes from ntype import BigStream, uint32 from crc import calculate_crc -from version import __version__ +from version import base_version, branch_identifier, supplementary_version DMADATA_START = 0x7430 @@ -55,8 +55,8 @@ def __init__(self, file=None): self.original = self.copy() # Add version number to header. - self.write_bytes(0x35, get_version_bytes(__version__)) - self.force_patch.extend([0x35, 0x36, 0x37]) + self.write_bytes(0x35, get_version_bytes(base_version, branch_identifier, supplementary_version)) + self.force_patch.extend([0x35, 0x36, 0x37, 0x38, 0x39]) def copy(self): @@ -133,8 +133,8 @@ def restore(self): self.changed_dma = {} self.force_patch = [] self.last_address = None - self.write_bytes(0x35, get_version_bytes(__version__)) - self.force_patch.extend([0x35, 0x36, 0x37]) + self.write_bytes(0x35, get_version_bytes(base_version, branch_identifier, supplementary_version)) + self.force_patch.extend([0x35, 0x36, 0x37, 0x38, 0x39]) def sym(self, symbol_name): diff --git a/Utils.py b/Utils.py index 656410eb7..eb2c025fc 100644 --- a/Utils.py +++ b/Utils.py @@ -6,7 +6,7 @@ import urllib.request from urllib.error import URLError, HTTPError import re -from version import __version__ +from version import __version__, base_version, supplementary_version, branch_url import random import itertools import bisect @@ -84,10 +84,12 @@ def close_console(): except Exception: pass -def get_version_bytes(a): - version_bytes = [0x00, 0x00, 0x00] +def get_version_bytes(a, b=0x00, c=0x00): + version_bytes = [0x00, 0x00, 0x00, b, c] + if not a: - return version_bytes; + return version_bytes + sa = a.replace('v', '').replace(' ', '.').split('.') for i in range(0,3): @@ -124,12 +126,30 @@ class VersionError(Exception): def check_version(checked_version): if compare_version(checked_version, __version__) < 0: try: - with urllib.request.urlopen('https://raw.githubusercontent.com/TestRunnerSRL/OoT-Randomizer/Dev/version.py') as versionurl: - version = versionurl.read() - version = re.search(".__version__ = '(.+)'", str(version)).group(1) - - if compare_version(version, __version__) > 0: - raise VersionError("You are on version " + __version__ + ", and the latest is version " + version + ".") + with urllib.request.urlopen(f'{branch_url.replace("https://github.com", "https://raw.githubusercontent.com").replace("tree/", "")}/version.py') as versionurl: + version_file = versionurl.read().decode("utf-8") + + base_match = re.search("""^[ \t]*__version__ = ['"](.+)['"]""", version_file, re.MULTILINE) + supplementary_match = re.search(r"^[ \t]*supplementary_version = (\d+)$", version_file, re.MULTILINE) + full_match = re.search("""^[ \t]*__version__ = f['"]*(.+)['"]""", version_file, re.MULTILINE) + url_match = re.search("""^[ \t]*branch_url = ['"](.+)['"]""", version_file, re.MULTILINE) + + remote_base_version = base_match.group(1) if base_match else "" + remote_supplementary_version = int(supplementary_match.group(1)) if supplementary_match else 0 + remote_full_version = full_match.group(1) if full_match else "" + remote_full_version = remote_full_version \ + .replace('{base_version}', remote_base_version) \ + .replace('{supplementary_version}', str(remote_supplementary_version)) + remote_branch_url = url_match.group(1) if url_match else "" + + upgrade_available = False + if compare_version(remote_base_version, base_version) > 0: + upgrade_available = True + elif compare_version(remote_base_version, base_version) == 0 and remote_supplementary_version > supplementary_version: + upgrade_available = True + + if upgrade_available: + raise VersionError("You are on version " + __version__ + ", and the latest is version " + remote_full_version + ".") except (URLError, HTTPError) as e: logger = logging.getLogger('') logger.warning("Could not fetch latest version: " + str(e)) diff --git a/version.py b/version.py index 7621846b2..35be00884 100644 --- a/version.py +++ b/version.py @@ -1 +1,17 @@ -__version__ = '6.2.195 f.LUM' +__version__ = '6.2.195' + +# This is a supplementary version number for branches based off of main dev. +supplementary_version = 0 + +# Pick a unique identifier byte for your fork if you are intending to have a long-lasting branch. +# This will be 0x00 for main releases and 0x01 for main dev. +branch_identifier = 0x01 + +# URL to your branch on GitHub. +branch_url = 'https://github.com/TestRunnerSRL/OoT-Randomizer/tree/Dev' + +# This is named __version__ at the top for compatability with older versions trying to version check. +base_version = __version__ + +# And finally, the completed version string. This is what is displayed and used for salting seeds. +__version__ = f'{base_version} f.LUM' From e4460a0ac14d3ca598863bf4601ccb6e52550817 Mon Sep 17 00:00:00 2001 From: Cuphat Date: Fri, 22 Jul 2022 00:00:22 -0400 Subject: [PATCH 07/17] De-duplication in settings_mapping.json --- data/settings_mapping.json | 37 ++++++------------------------------- 1 file changed, 6 insertions(+), 31 deletions(-) diff --git a/data/settings_mapping.json b/data/settings_mapping.json index 651e1fc2a..9dee061c3 100644 --- a/data/settings_mapping.json +++ b/data/settings_mapping.json @@ -1,13 +1,14 @@ { "Tabs": [ { - "name": "general_tab_electron", + "name": "general_tab", "text": "ROM Options", - "exclude_from_web": true, + "app_type": ["generator"], "sections": [ { - "name": "general_section", + "name": "general_section_electron", "text": "", + "exclude_from_web": true, "col_span": 4, "row_span": [2,2,3], "settings": [ @@ -35,35 +36,9 @@ ] }, { - "name": "multiworld_section", - "text": "Multi-World Generation", - "subheader": "This is used for co-op generations. Increasing Player Count will drastically increase the generation time.
For more information, see:
https://github.com/TestRunnerSRL/bizhawk-co-op", - "row_span": [1,1,1], - "settings": [ - "world_count", - "player_num" - ] - }, - { - "name": "preset_section", - "text": "Settings Presets", - "subheader": "Presets are settings that can be saved and loaded from.
Loading a preset will overwrite all settings that affect the seed.", - "row_span": [1,1,1], - "settings": [ - "presets" - ] - } - ] - }, - { - "name": "general_tab_web_generator", - "text": "ROM Options", - "app_type": ["generator"], - "exclude_from_electron": true, - "sections": [ - { - "name": "general_section", + "name": "general_section_web_generator", "text": "", + "exclude_from_electron": true, "col_span": 4, "row_span": [1,1,1], "settings": [ From 99798abd0a2ca2e704686b655558e220bec76aac Mon Sep 17 00:00:00 2001 From: Cuphat Date: Tue, 13 Sep 2022 06:00:48 -0400 Subject: [PATCH 08/17] Cosmetics.py: patch_sets Cleanup Reference the previous cosmetic version's patch set when applicable to reduce duplication. --- Cosmetics.py | 187 +++++++++++++++++++++++---------------------------- 1 file changed, 85 insertions(+), 102 deletions(-) diff --git a/Cosmetics.py b/Cosmetics.py index 83a7eae0b..dd6ad4d25 100644 --- a/Cosmetics.py +++ b/Cosmetics.py @@ -774,6 +774,7 @@ def patch_instrument(rom, settings, log, symbols): 0x03480810, ] +patch_sets = {} global_patch_sets = [ patch_targeting, patch_music, @@ -786,111 +787,92 @@ def patch_instrument(rom, settings, log, symbols): patch_instrument, ] -patch_sets = { - 0x1F04FA62: { - "patches": [ - patch_dpad, - patch_sword_trails, - ], - "symbols": { - "CFG_DISPLAY_DPAD": 0x0004, - "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0005, - "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0006, - }, - }, - 0x1F05D3F9: { - "patches": [ - patch_dpad, - patch_sword_trails, - ], - "symbols": { - "CFG_DISPLAY_DPAD": 0x0004, - "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0005, - "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0006, - }, - }, - 0x1F0693FB: { - "patches": [ - patch_dpad, - patch_sword_trails, - patch_heart_colors, - patch_magic_colors, - ], - "symbols": { - "CFG_MAGIC_COLOR": 0x0004, - "CFG_HEART_COLOR": 0x000A, - "CFG_DISPLAY_DPAD": 0x0010, - "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0011, - "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0012, - } - }, - 0x1F073FC9: { - "patches": [ - patch_dpad, - patch_sword_trails, - patch_heart_colors, - patch_magic_colors, - patch_button_colors, - ], - "symbols": { - "CFG_MAGIC_COLOR": 0x0004, - "CFG_HEART_COLOR": 0x000A, - "CFG_A_BUTTON_COLOR": 0x0010, - "CFG_B_BUTTON_COLOR": 0x0016, - "CFG_C_BUTTON_COLOR": 0x001C, - "CFG_TEXT_CURSOR_COLOR": 0x0022, - "CFG_SHOP_CURSOR_COLOR": 0x0028, - "CFG_A_NOTE_COLOR": 0x002E, - "CFG_C_NOTE_COLOR": 0x0034, - "CFG_DISPLAY_DPAD": 0x003A, - "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x003B, - "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x003C, - } - }, - 0x1F073FD8: { - "patches": [ - patch_dpad, - patch_navi_colors, - patch_sword_trails, - patch_heart_colors, - patch_magic_colors, - patch_button_colors, - patch_boomerang_trails, - patch_bombchu_trails, - ], - "symbols": { - "CFG_MAGIC_COLOR": 0x0004, - "CFG_HEART_COLOR": 0x000A, - "CFG_A_BUTTON_COLOR": 0x0010, - "CFG_B_BUTTON_COLOR": 0x0016, - "CFG_C_BUTTON_COLOR": 0x001C, - "CFG_TEXT_CURSOR_COLOR": 0x0022, - "CFG_SHOP_CURSOR_COLOR": 0x0028, - "CFG_A_NOTE_COLOR": 0x002E, - "CFG_C_NOTE_COLOR": 0x0034, - "CFG_BOOM_TRAIL_INNER_COLOR": 0x003A, - "CFG_BOOM_TRAIL_OUTER_COLOR": 0x003D, - "CFG_BOMBCHU_TRAIL_INNER_COLOR": 0x0040, - "CFG_BOMBCHU_TRAIL_OUTER_COLOR": 0x0043, - "CFG_DISPLAY_DPAD": 0x0046, - "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0047, - "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0048, - "CFG_RAINBOW_BOOM_TRAIL_INNER_ENABLED": 0x0049, - "CFG_RAINBOW_BOOM_TRAIL_OUTER_ENABLED": 0x004A, - "CFG_RAINBOW_BOMBCHU_TRAIL_INNER_ENABLED": 0x004B, - "CFG_RAINBOW_BOMBCHU_TRAIL_OUTER_ENABLED": 0x004C, - "CFG_RAINBOW_NAVI_IDLE_INNER_ENABLED": 0x004D, - "CFG_RAINBOW_NAVI_IDLE_OUTER_ENABLED": 0x004E, - "CFG_RAINBOW_NAVI_ENEMY_INNER_ENABLED": 0x004F, - "CFG_RAINBOW_NAVI_ENEMY_OUTER_ENABLED": 0x0050, - "CFG_RAINBOW_NAVI_NPC_INNER_ENABLED": 0x0051, - "CFG_RAINBOW_NAVI_NPC_OUTER_ENABLED": 0x0052, - "CFG_RAINBOW_NAVI_PROP_INNER_ENABLED": 0x0053, - "CFG_RAINBOW_NAVI_PROP_OUTER_ENABLED": 0x0054, - } +# 3.14.1 +patch_sets[0x1F04FA62] = { + "patches": [ + patch_dpad, + patch_sword_trails, + ], + "symbols": { + "CFG_DISPLAY_DPAD": 0x0004, + "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0005, + "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0006, }, } +# 3.14.11 +patch_sets[0x1F05D3F9] = { + "patches": patch_sets[0x1F04FA62]["patches"] + [], + "symbols": {**patch_sets[0x1F04FA62]["symbols"]}, +} + +# 4.5.7 +patch_sets[0x1F0693FB] = { + "patches": patch_sets[0x1F05D3F9]["patches"] + [ + patch_heart_colors, + patch_magic_colors, + ], + "symbols": { + "CFG_MAGIC_COLOR": 0x0004, + "CFG_HEART_COLOR": 0x000A, + "CFG_DISPLAY_DPAD": 0x0010, + "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0011, + "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0012, + } +} + +# 5.2.6 +patch_sets[0x1F073FC9] = { + "patches": patch_sets[0x1F0693FB]["patches"] + [ + patch_button_colors, + ], + "symbols": { + "CFG_MAGIC_COLOR": 0x0004, + "CFG_HEART_COLOR": 0x000A, + "CFG_A_BUTTON_COLOR": 0x0010, + "CFG_B_BUTTON_COLOR": 0x0016, + "CFG_C_BUTTON_COLOR": 0x001C, + "CFG_TEXT_CURSOR_COLOR": 0x0022, + "CFG_SHOP_CURSOR_COLOR": 0x0028, + "CFG_A_NOTE_COLOR": 0x002E, + "CFG_C_NOTE_COLOR": 0x0034, + "CFG_DISPLAY_DPAD": 0x003A, + "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x003B, + "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x003C, + } +} + +# 5.2.76 +patch_sets[0x1F073FD8] = { + "patches": patch_sets[0x1F073FC9]["patches"] + [ + patch_navi_colors, + patch_boomerang_trails, + patch_bombchu_trails, + ], + "symbols": { + **patch_sets[0x1F073FC9]["symbols"], + "CFG_BOOM_TRAIL_INNER_COLOR": 0x003A, + "CFG_BOOM_TRAIL_OUTER_COLOR": 0x003D, + "CFG_BOMBCHU_TRAIL_INNER_COLOR": 0x0040, + "CFG_BOMBCHU_TRAIL_OUTER_COLOR": 0x0043, + "CFG_DISPLAY_DPAD": 0x0046, + "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0047, + "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0048, + "CFG_RAINBOW_BOOM_TRAIL_INNER_ENABLED": 0x0049, + "CFG_RAINBOW_BOOM_TRAIL_OUTER_ENABLED": 0x004A, + "CFG_RAINBOW_BOMBCHU_TRAIL_INNER_ENABLED": 0x004B, + "CFG_RAINBOW_BOMBCHU_TRAIL_OUTER_ENABLED": 0x004C, + "CFG_RAINBOW_NAVI_IDLE_INNER_ENABLED": 0x004D, + "CFG_RAINBOW_NAVI_IDLE_OUTER_ENABLED": 0x004E, + "CFG_RAINBOW_NAVI_ENEMY_INNER_ENABLED": 0x004F, + "CFG_RAINBOW_NAVI_ENEMY_OUTER_ENABLED": 0x0050, + "CFG_RAINBOW_NAVI_NPC_INNER_ENABLED": 0x0051, + "CFG_RAINBOW_NAVI_NPC_OUTER_ENABLED": 0x0052, + "CFG_RAINBOW_NAVI_PROP_INNER_ENABLED": 0x0053, + "CFG_RAINBOW_NAVI_PROP_OUTER_ENABLED": 0x0054, + } +} + def patch_cosmetics(settings, rom): # re-seed for aesthetic effects. They shouldn't be affected by the generation seed @@ -901,6 +883,7 @@ def patch_cosmetics(settings, rom): log = CosmeticsLog(settings) # try to detect the cosmetic patch data format + cosmetic_version = None versioned_patch_set = None cosmetic_context = rom.read_int32(rom.sym('RANDO_CONTEXT') + 4) if cosmetic_context >= 0x80000000 and cosmetic_context <= 0x80F7FFFC: From 78018b05c8875ffeb75ac2a0acd1b9df1bb72913 Mon Sep 17 00:00:00 2001 From: Cuphat Date: Tue, 13 Sep 2022 19:43:16 -0400 Subject: [PATCH 09/17] Rename "Pre-completed dungeons" setting to "Pre-completed Dungeons Mode" Capitalization and naming consistency. --- SettingsList.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SettingsList.py b/SettingsList.py index 3dc303578..7cf2be3b6 100644 --- a/SettingsList.py +++ b/SettingsList.py @@ -2165,7 +2165,7 @@ def __init__(self, name, gui_text, min, max, default, step=1, - Logic Rules - (Random) Number of MQ Dungeons - - Pre-completed dungeons + - Pre-completed Dungeons - Rainbow Bridge/Ganon Boss Key Requirements: Gold Skulltula Tokens - Variable numbers of Spiritual Stones, Medallions, or Dungeons for Rainbow Bridge and Ganon's Boss Key @@ -4112,7 +4112,7 @@ def __init__(self, name, gui_text, min, max, default, step=1, ), Combobox( name = 'empty_dungeons_mode', - gui_text = 'Pre-completed dungeons', + gui_text = 'Pre-completed Dungeons Mode', default = 'none', choices = { 'none': 'Off', From 05f2f28a5c7eac487afcf21a8ea0514b9b186d4e Mon Sep 17 00:00:00 2001 From: jdunn596 <82658083+jdunn596@users.noreply.github.com> Date: Thu, 15 Sep 2022 15:21:09 -0400 Subject: [PATCH 10/17] Fix error allowing hinted WoTH ZL --- data/Hints/tournament_test_woth.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/Hints/tournament_test_woth.json b/data/Hints/tournament_test_woth.json index cf17fc565..1ae9febd4 100644 --- a/data/Hints/tournament_test_woth.json +++ b/data/Hints/tournament_test_woth.json @@ -16,7 +16,7 @@ ], "add_items": [], "remove_items": [ - { "item": "Zeldas Lullaby", "types": ["goal"] } + { "item": "Zeldas Lullaby", "types": ["woth"] } ], "dungeons_woth_limit": 2, "dungeons_barren_limit": 1, From a2310a8f1bd232897009c92a107b4dc51e104e9a Mon Sep 17 00:00:00 2001 From: Cuphat Date: Thu, 15 Sep 2022 17:36:56 -0400 Subject: [PATCH 11/17] Fix 'DMT Biggoron' Conditional Always --- HintList.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HintList.py b/HintList.py index 5624d9a97..6eef00c7a 100644 --- a/HintList.py +++ b/HintList.py @@ -211,7 +211,7 @@ def tokens_required_by_settings(world): 'Song from Ocarina of Time': lambda world: stones_required_by_settings(world) < 2, 'HF Ocarina of Time Item': lambda world: stones_required_by_settings(world) < 2, 'Sheik in Kakariko': lambda world: medallions_required_by_settings(world) < 5, - 'DMT Biggoron': lambda world: 'claim_check' not in world.settings.adult_trade_start or len(world.settings.adult_trade_start) != 1, + 'DMT Biggoron': lambda world: 'Claim Check' not in world.settings.adult_trade_start or len(world.settings.adult_trade_start) != 1, 'Kak 30 Gold Skulltula Reward': lambda world: tokens_required_by_settings(world) < 30, 'Kak 40 Gold Skulltula Reward': lambda world: tokens_required_by_settings(world) < 40, 'Kak 50 Gold Skulltula Reward': lambda world: tokens_required_by_settings(world) < 50, From 895532823072838fc2affe8fb943cd2d21153d72 Mon Sep 17 00:00:00 2001 From: Cuphat Date: Fri, 16 Sep 2022 03:08:15 -0400 Subject: [PATCH 12/17] Fallback to base_version when full_version isn't found. --- GUI/electron/src/preload.ts | 2 +- GUI/src/app/providers/GUIGlobal.ts | 2 +- Utils.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/GUI/electron/src/preload.ts b/GUI/electron/src/preload.ts index d70a1af7b..803002186 100644 --- a/GUI/electron/src/preload.ts +++ b/GUI/electron/src/preload.ts @@ -103,7 +103,7 @@ post.on('getCurrentSourceVersion', function (event) { data.baseVersion = baseMatch != null && baseMatch[1] !== undefined ? baseMatch[1] : ""; data.supplementaryVersion = supplementaryMatch != null && supplementaryMatch[1] !== undefined ? parseInt(supplementaryMatch[1]) : 0; - data.fullVersion = fullMatch != null && fullMatch[1] !== undefined ? fullMatch[1] : ""; + data.fullVersion = fullMatch != null && fullMatch[1] !== undefined ? fullMatch[1] : data.baseVersion; data.fullVersion = data.fullVersion .replace('{base_version}', data.baseVersion) .replace('{supplementary_version}', data.supplementaryVersion.toString()) diff --git a/GUI/src/app/providers/GUIGlobal.ts b/GUI/src/app/providers/GUIGlobal.ts index 9d197a0a2..9613d89cd 100644 --- a/GUI/src/app/providers/GUIGlobal.ts +++ b/GUI/src/app/providers/GUIGlobal.ts @@ -563,7 +563,7 @@ export class GUIGlobal { remote.baseVersion = baseMatch != null && baseMatch[1] !== undefined ? baseMatch[1] : ""; remote.supplementaryVersion = supplementaryMatch != null && supplementaryMatch[1] !== undefined ? parseInt(supplementaryMatch[1]) : 0; - remote.fullVersion = fullMatch != null && fullMatch[1] !== undefined ? fullMatch[1] : ""; + remote.fullVersion = fullMatch != null && fullMatch[1] !== undefined ? fullMatch[1] : remote.baseVersion; remote.fullVersion = remote.fullVersion .replace('{base_version}', remote.baseVersion) .replace('{supplementary_version}', remote.supplementaryVersion.toString()) diff --git a/Utils.py b/Utils.py index eb2c025fc..7b34af69a 100644 --- a/Utils.py +++ b/Utils.py @@ -136,7 +136,7 @@ def check_version(checked_version): remote_base_version = base_match.group(1) if base_match else "" remote_supplementary_version = int(supplementary_match.group(1)) if supplementary_match else 0 - remote_full_version = full_match.group(1) if full_match else "" + remote_full_version = full_match.group(1) if full_match else remote_base_version remote_full_version = remote_full_version \ .replace('{base_version}', remote_base_version) \ .replace('{supplementary_version}', str(remote_supplementary_version)) From e9d16df741a0e89b52c2c37aeff9af2ce137dbab Mon Sep 17 00:00:00 2001 From: Cuphat Date: Fri, 16 Sep 2022 03:24:45 -0400 Subject: [PATCH 13/17] Version Bytes Update Branch Identifier and Supplementary version are no longer at 0x38 and 0x39. A second copy of the version bytes, with branch identifier and supplementary version information, is now at 0x19-0x1D. --- Rom.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Rom.py b/Rom.py index f9ac5549a..4442faaa0 100644 --- a/Rom.py +++ b/Rom.py @@ -55,8 +55,7 @@ def __init__(self, file=None): self.original = self.copy() # Add version number to header. - self.write_bytes(0x35, get_version_bytes(base_version, branch_identifier, supplementary_version)) - self.force_patch.extend([0x35, 0x36, 0x37, 0x38, 0x39]) + self.write_version_bytes() def copy(self): @@ -133,8 +132,7 @@ def restore(self): self.changed_dma = {} self.force_patch = [] self.last_address = None - self.write_bytes(0x35, get_version_bytes(base_version, branch_identifier, supplementary_version)) - self.force_patch.extend([0x35, 0x36, 0x37, 0x38, 0x39]) + self.write_version_bytes() def sym(self, symbol_name): @@ -153,6 +151,13 @@ def update_header(self): self.write_bytes(0x10, crc) + def write_version_bytes(self): + version_bytes = get_version_bytes(base_version, branch_identifier, supplementary_version) + self.write_bytes(0x19, version_bytes) + self.write_bytes(0x35, version_bytes[:3]) + self.force_patch.extend([0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x35, 0x36, 0x37]) + + def read_rom(self, file): # "Reads rom into bytearray" try: From 4e3c72f5953564dfcb0f8ed7c5a2dd2df424d55d Mon Sep 17 00:00:00 2001 From: Cuphat Date: Sat, 17 Sep 2022 23:53:45 -0400 Subject: [PATCH 14/17] Fix OHKO, For Real This Time OHKO now sets health to 0 when taking any non-zero damage. --- ASM/build/asm_symbols.txt | 325 +++--- ASM/src/damage.asm | 7 +- data/generated/rom_patch.txt | 1921 +++++++++++++++++----------------- data/generated/symbols.json | 44 +- 4 files changed, 1151 insertions(+), 1146 deletions(-) diff --git a/ASM/build/asm_symbols.txt b/ASM/build/asm_symbols.txt index 0afd02739..56003a4e0 100644 --- a/ASM/build/asm_symbols.txt +++ b/ASM/build/asm_symbols.txt @@ -602,168 +602,169 @@ 80402F79 .byt:0001 80402F79 EXTERN_DAMAGE_MULTIPLYER 80402F7C Apply_Damage_Multiplier -80402FB0 @@MulDamage -80402FB8 @@DivDamage -80402FC0 @@DoubleDefence -80402FD8 @@return -80402FE0 .dbl:0004 -80402FE0 CFG_DEADLY_BONKS -80402FE4 .wrd:0002 -80402FE4 CFG_BONK_DAMAGE -80402FE8 BONK_LAST_FRAME -80403014 @@return_bonk_frame -80403020 SET_BONK_FLAG -80403044 @@return_bonk_flag -8040304C CHECK_FOR_BONK_CANCEL -80403090 @@return_bonk_check -8040309C APPLY_BONK_DAMAGE -804030E4 @@normal_defense -804030FC @@bonks_kill -80403100 @@cmg_entrance_hack -80403130 @@return_bonk -80403138 KING_DODONGO_BONKS -8040315C @@return_bonk_kd -8040316C CHECK_ROOM_MESH_TYPE -8040319C @@return_death_subcamera -804031A4 .byt:0001 -804031A4 SHUFFLE_BEANS -804031A8 bean_initial_check -804031D8 @@return -804031E0 bean_enough_rupees_check -804031F8 @@return -80403200 bean_rupees_taken -80403218 @@return -80403220 bean_buy_item_hook -80403240 @@return -80403248 .byt:0084 -80403248 GROTTO_LOAD_TABLE -804032CC .byt:0042 -804032CC GROTTO_EXIT_LIST -8040330E .byt:0001 -8040330E CURRENT_GROTTO_ID -80403310 scene_exit_hook -80403344 @@normal -80403368 @@return -80403370 grotto_entrance -804033B0 @@return -804033B8 handle_grotto_load -80403400 @@return -80403408 deku_mouth_condition -8040343C @@mouth_open -80403444 @@mouth_closed -8040344C .dbl:0018 -8040344C AUDIO_THREAD_INFO -80403468 .dbl:0004 -80403468 AUDIO_THREAD_INFO_MEM_START -8040346C .dbl:0004 -8040346C AUDIO_THREAD_INFO_MEM_SIZE -80403470 get_audio_pointers -8040348C .byt:0001 -8040348C MOVED_ADULT_KING_ZORA -80403490 kz_moved_check -804034BC @@return_false -804034C4 @@return_true -804034CC prevent_carpenter_boss_softlock -80403504 @@return -8040350C .byt:0001 -8040350C START_TWINROVA_FIGHT -80403510 .dbl:0004 -80403510 TWINROVA_ACTION_TIMER -80403514 rova_check_pos -80403558 @@return -80403564 twinrova_displaced -80403584 rova_portal -804035FC @@disappear -80403618 @@return -80403634 twinrova_set_action_ice -8040366C twinrova_set_action_fire -804036A4 twinrova_rise -804036DC @@skip_incr -80403708 @@rova1 -80403710 @@no_laugh -80403768 @@start_fight -80403780 @@return -8040378C ice_pos -8040379C fire_pos -804037AC clear_boomerang_pointer -804037C0 skip_3_up_main -804037DC @@return -804037EC skip_3_down_main -80403808 @@return -80403818 skip_3_up_copy_from -80403834 @@return -80403844 skip_3_down_copy_from -80403860 @@return -80403870 skip_3_up_copy_to -8040388C @@return -8040389C skip_3_down_copy_to -804038B8 @@return -804038C8 skip_3_down_copy_to_2 -804038E4 @@return -804038F4 skip_3_up_erase -80403910 @@return -80403920 skip_3_down_erase -8040393C @@return -8040394C move_file_3 -80403964 zelda_check_anim -8040398C @@return -80403994 override_changelinkanimdefaultstop -804039E8 @@skip -80403A08 malon_goto_item -80403A20 @@return -80403A28 malon_handle_staff -80403A48 @@return -80403A54 malon_ra_displaced -80403A64 malon_songs_as_items -80403A78 @@return -80403A88 malon_check_give_item -80403AB4 @@return -80403AC0 malon_show_text -80403B08 @@return -80403B1C .byt:0001 -80403B1C MALON_GAVE_ICETRAP -80403B20 malon_reload -80403B68 @@malon_gave_ice_trap -80403B88 @@check_text -80403BB0 @@reload -80403BF4 @@return -80403C00 drop_ruto -80403C6C @@return -80403C94 check_kill_demoeffect -80403CE4 @@return -80403D00 agony_distance_hook -80403D24 @@inside_radius -80403D34 @@outside_radius -80403D3C @@done -80403D68 agony_vibrate_hook -80403D98 @@done -80403DC8 agony_post_hook -80403DE0 .byt:0001 -80403DE0 CHAIN_HBA_REWARDS -80403DE4 handle_hba_rewards_chain -80403E40 @@return -80403E48 stick_as_adult -80403E64 @@return -80403E70 masks_as_adult -80403E8C @@return -80403E98 .byt:0001 -80403E98 SHUFFLE_CARPET_SALESMAN -80403E9C carpet_inital_message -80403EC4 @@return -80403ECC carpet_buy_item_hook -80403EEC @@return -80403EF4 .byt:0001 -80403EF4 SHUFFLE_MEDIGORON -80403EF8 medigoron_inital_check -80403F38 @@return -80403F40 medigoron_buy_item_hook -80403F60 @@return -80403F68 bombchu_back_color -80403F90 kill_door_of_time_col -80403FB8 mask_check_trade_slot -80403FE0 @@return -80403FE8 blue_fire_arrows -80403FFC @@return +80402FAC @@MulDamage +80402FB4 @@ohko +80402FBC @@DivDamage +80402FC4 @@DoubleDefence +80402FDC @@return +80402FE4 .dbl:0004 +80402FE4 CFG_DEADLY_BONKS +80402FE8 .wrd:0002 +80402FE8 CFG_BONK_DAMAGE +80402FF0 BONK_LAST_FRAME +8040301C @@return_bonk_frame +80403028 SET_BONK_FLAG +8040304C @@return_bonk_flag +80403054 CHECK_FOR_BONK_CANCEL +80403098 @@return_bonk_check +804030A4 APPLY_BONK_DAMAGE +804030EC @@normal_defense +80403104 @@bonks_kill +80403108 @@cmg_entrance_hack +80403138 @@return_bonk +80403140 KING_DODONGO_BONKS +80403164 @@return_bonk_kd +80403174 CHECK_ROOM_MESH_TYPE +804031A4 @@return_death_subcamera +804031AC .byt:0001 +804031AC SHUFFLE_BEANS +804031B0 bean_initial_check +804031E0 @@return +804031E8 bean_enough_rupees_check +80403200 @@return +80403208 bean_rupees_taken +80403220 @@return +80403228 bean_buy_item_hook +80403248 @@return +80403250 .byt:0084 +80403250 GROTTO_LOAD_TABLE +804032D4 .byt:0042 +804032D4 GROTTO_EXIT_LIST +80403316 .byt:0001 +80403316 CURRENT_GROTTO_ID +80403318 scene_exit_hook +8040334C @@normal +80403370 @@return +80403378 grotto_entrance +804033B8 @@return +804033C0 handle_grotto_load +80403408 @@return +80403410 deku_mouth_condition +80403444 @@mouth_open +8040344C @@mouth_closed +80403454 .dbl:0018 +80403454 AUDIO_THREAD_INFO +80403470 .dbl:0004 +80403470 AUDIO_THREAD_INFO_MEM_START +80403474 .dbl:0004 +80403474 AUDIO_THREAD_INFO_MEM_SIZE +80403478 get_audio_pointers +80403494 .byt:0001 +80403494 MOVED_ADULT_KING_ZORA +80403498 kz_moved_check +804034C4 @@return_false +804034CC @@return_true +804034D4 prevent_carpenter_boss_softlock +8040350C @@return +80403514 .byt:0001 +80403514 START_TWINROVA_FIGHT +80403518 .dbl:0004 +80403518 TWINROVA_ACTION_TIMER +8040351C rova_check_pos +80403560 @@return +8040356C twinrova_displaced +8040358C rova_portal +80403604 @@disappear +80403620 @@return +8040363C twinrova_set_action_ice +80403674 twinrova_set_action_fire +804036AC twinrova_rise +804036E4 @@skip_incr +80403710 @@rova1 +80403718 @@no_laugh +80403770 @@start_fight +80403788 @@return +80403794 ice_pos +804037A4 fire_pos +804037B4 clear_boomerang_pointer +804037C8 skip_3_up_main +804037E4 @@return +804037F4 skip_3_down_main +80403810 @@return +80403820 skip_3_up_copy_from +8040383C @@return +8040384C skip_3_down_copy_from +80403868 @@return +80403878 skip_3_up_copy_to +80403894 @@return +804038A4 skip_3_down_copy_to +804038C0 @@return +804038D0 skip_3_down_copy_to_2 +804038EC @@return +804038FC skip_3_up_erase +80403918 @@return +80403928 skip_3_down_erase +80403944 @@return +80403954 move_file_3 +8040396C zelda_check_anim +80403994 @@return +8040399C override_changelinkanimdefaultstop +804039F0 @@skip +80403A10 malon_goto_item +80403A28 @@return +80403A30 malon_handle_staff +80403A50 @@return +80403A5C malon_ra_displaced +80403A6C malon_songs_as_items +80403A80 @@return +80403A90 malon_check_give_item +80403ABC @@return +80403AC8 malon_show_text +80403B10 @@return +80403B24 .byt:0001 +80403B24 MALON_GAVE_ICETRAP +80403B28 malon_reload +80403B70 @@malon_gave_ice_trap +80403B90 @@check_text +80403BB8 @@reload +80403BFC @@return +80403C08 drop_ruto +80403C74 @@return +80403C9C check_kill_demoeffect +80403CEC @@return +80403D08 agony_distance_hook +80403D2C @@inside_radius +80403D3C @@outside_radius +80403D44 @@done +80403D70 agony_vibrate_hook +80403DA0 @@done +80403DD0 agony_post_hook +80403DE8 .byt:0001 +80403DE8 CHAIN_HBA_REWARDS +80403DEC handle_hba_rewards_chain +80403E48 @@return +80403E50 stick_as_adult +80403E6C @@return +80403E78 masks_as_adult +80403E94 @@return +80403EA0 .byt:0001 +80403EA0 SHUFFLE_CARPET_SALESMAN +80403EA4 carpet_inital_message +80403ECC @@return +80403ED4 carpet_buy_item_hook +80403EF4 @@return +80403EFC .byt:0001 +80403EFC SHUFFLE_MEDIGORON +80403F00 medigoron_inital_check +80403F40 @@return +80403F48 medigoron_buy_item_hook +80403F68 @@return +80403F70 bombchu_back_color +80403F98 kill_door_of_time_col +80403FC0 mask_check_trade_slot +80403FE8 @@return +80403FF0 blue_fire_arrows +80404004 @@return 80404010 agony_inside_radius_setup,00000008 80404018 agony_outside_radius_setup,0000002C 80404044 agony_vibrate_setup,00000034 diff --git a/ASM/src/damage.asm b/ASM/src/damage.asm index f58a620b3..bff2824c3 100644 --- a/ASM/src/damage.asm +++ b/ASM/src/damage.asm @@ -13,14 +13,17 @@ Apply_Damage_Multiplier: bltz t7, @@DivDamage li at, 3 - blt t7, at, @@MulDamage + bge t7, at, @@ohko nop - li t7, 10 @@MulDamage: b @@DoubleDefence sllv s0, s0, t7 ; damage multiplier +@@ohko: + b @@return + sh zero, 0x30(a1) + @@DivDamage: sub t7, zero, t7 srav s0, s0, t7 ; damage multiplier diff --git a/data/generated/rom_patch.txt b/data/generated/rom_patch.txt index 30f715f4b..dee5a1cf4 100644 --- a/data/generated/rom_patch.txt +++ b/data/generated/rom_patch.txt @@ -266,7 +266,7 @@ aeb76c,c1025e3 aeb778,400821 af1398,92020852 af13ac,92020852 -af1814,c100f92 +af1814,c100f94 af1818,0 af74f8,afbf0044 af74fc,c100af0 @@ -350,7 +350,7 @@ b17bc8,c00037c b17bcc,3c050348 b17bd0,c1003a1 b17bd4,0 -b2b488,c100d1c +b2b488,c100d1e b2b48c,0 b2b490,0 b2b494,0 @@ -359,7 +359,7 @@ b2b49c,0 b2b4f0,3c048013 b2b4f4,24848a50 b2b4f8,3c058040 -b2b4fc,24a5344c +b2b4fc,24a53454 b2b500,c015c0c b2b504,34060018 b2b508,3c048013 @@ -380,9 +380,9 @@ b2e830,8ca5b188 b2e854,3c058001 b2e858,8ca5b198 b3dd3c,3c018040 -b3dd40,8c243468 +b3dd40,8c243470 b3dd44,c02e195 -b3dd48,8c25346c +b3dd48,8c253474 b3dd4c,8fbf0014 b3dd54,27bd0018 b51694,c100833 @@ -402,31 +402,31 @@ b58328,0 b5832c,8fbf0000 b58330,0 b7ec4c,8009a3ac -ba16ac,c100e06 +ba16ac,c100e08 ba16b0,a42fca2a -ba16e0,c100e11 +ba16e0,c100e13 ba16e4,a439ca2a ba18c4,340c00c8 ba1980,340800c8 ba19dc,0 -ba1c68,c100e1c +ba1c68,c100e1e ba1c6c,a42dca2a ba1c70,850e4a38 -ba1cd0,c100e27 +ba1cd0,c100e29 ba1cd4,a439ca2a -ba1d04,c100e32 +ba1d04,c100e34 ba1d08,0 ba1e20,340d00c8 -ba32cc,c100e3d +ba32cc,c100e3f ba32d0,a439ca2a -ba3300,c100e48 +ba3300,c100e4a ba3304,a42bca2a ba34dc,341800c8 ba3654,0 ba39d0,340d00c8 -baa168,c100df0 +baa168,c100df2 baa16c,a42eca2a -baa198,c100dfb +baa198,c100dfd baa19c,a42dca2a baa3ac,a07025 bac064,7821 @@ -437,7 +437,7 @@ bae5a4,a46b4a6c bae5c8,0 bae864,0 baed6c,0 -baf4f4,c100e53 +baf4f4,c100e55 baf4f8,2002025 baf738,102825 baf73c,c101fd9 @@ -490,7 +490,7 @@ bb7d14,0 bc088c,c1006d4 bc0890,0 bc780c,9000009 -bcdbd8,c100e65 +bcdbd8,c100e67 bcecbc,81003df bcecc0,0 bcecc4,0 @@ -501,12 +501,12 @@ bcf73c,afbf0000 bcf740,c100872 bcf744,0 bcf748,8fbf0000 -bcf8cc,c100fee +bcf8cc,c100ff0 bcf914,c10086a bcf918,0 -bd200c,c100c5b +bd200c,c100c5d bd2010,0 -bd4c58,c100cc4 +bd4c58,c100cc6 bd4c5c,270821 bd5c58,c100623 bd5c5c,301c825 @@ -525,26 +525,26 @@ bda2f0,5600018 bda2f4,0 be0228,3c188040 be022c,27182d04 -be0230,c100bfa +be0230,c100bfc be0234,8fa50054 be0238,10000096 be023c,8fbf0024 be0240,c6040828 be0244,44813000 -be035c,c100c08 +be035c,c100c0a be0360,0 be1bc8,c100634 be1bcc,afa50034 be1c98,3c014218 be3798,0 -be4a14,c100f40 -be4a40,c100f5a -be4a60,8100f72 +be4a14,c100f42 +be4a40,c100f5c +be4a60,8100f74 be4a64,0 -be5328,c100c13 +be5328,c100c15 be532c,0 be55e4,0 -be5d8c,c100f9c +be5d8c,c100f9e be5d90,0 be6538,92190852 be9ac0,c100409 @@ -575,9 +575,9 @@ c07550,0 c0796c,1f0 c0e77c,c10081a c0e780,ac400428 -c3dc04,c100c4e +c3dc04,c100c50 c3dc08,0 -c5a9f0,c100deb +c5a9f0,c100ded c6c7a8,c100682 c6c920,c100682 c6cedc,340b0001 @@ -600,7 +600,7 @@ c6ff68,0 c6ff6c,0 c6ff70,0 c6ff74,0 -c72c64,c100d02 +c72c64,c100d04 c72c68,2002021 c72c70,15e00006 c72c74,0 @@ -632,9 +632,9 @@ cc403c,240c0004 cc453c,806 cc8594,c100647 cc8598,24180006 -cc85b8,c100f25 +cc85b8,c100f27 cc85bc,afa50064 -cce9a4,c100fe4 +cce9a4,c100fe6 cce9a8,8e04011c cdf3ec,0 cdf404,0 @@ -648,7 +648,7 @@ cf1ac0,31280040 cf1ac4,35390040 cf1ac8,af19b4a8 cf1acc,34090006 -cf73c8,c100cdc +cf73c8,c100cde cf73cc,3c010001 cf7ad4,c100611 cf7ad8,afa50044 @@ -656,7 +656,7 @@ d12f78,340f0000 d357d4,c100bcd d35efc,0 d35f54,10000008 -d4bcb0,c100f00 +d4bcb0,c100f02 d4bcb4,8619001c d4be6c,c1009f3 d52698,c100543 @@ -664,28 +664,28 @@ d5269c,8e190024 d5b264,c100b5b d5b660,8100b5e d5b664,0 -d5ff94,c100fda +d5ff94,c100fdc d5ff98,44d9f800 -d62100,c100d8d +d62100,c100d8f d62110,3c014248 d62128,0 d6215c,0 -d621cc,c100d9b +d621cc,c100d9d d621dc,3c014248 d6221c,0 -d68d68,c100d45 +d68d68,c100d47 d68d6c,afb20044 d68d70,3c098040 -d68d74,2529350c +d68d74,25293514 d68d78,81290000 d68d7c,11200186 d68d80,8fbf004c -d68d84,c100d59 +d68d84,c100d5b d68d88,f7b80030 -d69c80,c100d61 -d6cc18,c100de3 +d69c80,c100d63 +d6cc18,c100de5 d6cc1c,0 -d6cdd4,c100de7 +d6cdd4,c100de9 d6cdd8,0 d73118,0 d73128,0 @@ -752,27 +752,27 @@ d7e8d4,340e0001 d7e8d8,804f0ede d7e8e0,5700000f d7eb4c,0 -d7eb70,c100e82 +d7eb70,c100e84 d7eb74,acc80004 d7ebbc,0 -d7ebc8,c100e8a +d7ebc8,c100e8c d7ebf0,27bdffe8 d7ebf4,afbf0014 -d7ebf8,c100e95 +d7ebf8,c100e97 d7ebfc,8ca21c44 d7ec04,0 -d7ec10,c100e99 +d7ec10,c100e9b d7ec14,971804c6 d7ec2c,0 -d7ec34,c100eb0 +d7ec34,c100eb2 d7ec40,0 d7ec54,0 -d7ec60,8100ea2 -d7ec70,8100ec8 +d7ec60,8100ea4 +d7ec70,8100eca db1338,24490065 db13d0,24090076 db3244,8100a78 -db32c8,c100ffa +db32c8,c100ffc db532c,c100498 db53e8,8103582 db53ec,0 @@ -825,7 +825,7 @@ dfec4c,0 e09f68,806f0ede e09f74,31f80004 e09fb0,c10048a -e0ec50,c100d33 +e0ec50,c100d35 e0ec54,2202825 e11e98,9442a674 e11e9c,304e0040 @@ -842,26 +842,26 @@ e11ec4,0 e11ec8,0 e11f90,c10054e e11f94,0 -e12a04,c100f79 +e12a04,c100f7b e12a20,ac8302a4 e1f72c,27bdffe8 e1f730,afbf0014 -e1f734,c100fbe +e1f734,c100fc0 e1f738,0 e1f73c,8fbf0014 e1f740,27bd0018 e1f744,28410005 e1f748,14200012 e1f74c,24010005 -e1feac,c100fd0 +e1feac,c100fd2 e1feb0,3c0743cf -e20410,c100c6a +e20410,c100c6c e20414,0 -e206dc,c100c78 +e206dc,c100c7a e206e0,0 -e2076c,c100c88 +e2076c,c100c8a e20770,afa40020 -e20798,c100c80 +e20798,c100c82 e2079c,0 e24e7c,c10051b e24e80,0 @@ -909,7 +909,7 @@ e55c4c,340c0000 e56290,0 e56294,340b401f e56298,0 -e565d0,c100d24 +e565d0,c100d26 e565d4,0 e565d8,2002025 e571d0,3c038041 @@ -937,9 +937,9 @@ e59e68,81035d4 e59e6c,0 e59ecc,81035fd e59ed0,0 -e5b2f4,c100fa7 +e5b2f4,c100fa9 e5b2f8,afa5001c -e5b538,c100fb3 +e5b538,c100fb5 e5b53c,3c07461c e62630,a48001f8 e62634,2463a5d0 @@ -995,7 +995,7 @@ e6befc,0 e6bf4c,340d0000 e6bf50,0 e7cc90,240e000c -e7d19c,c100e59 +e7d19c,c100e5b e7d1a0,3c050600 e7d1a4,10a80003 e7d1a8,3025 @@ -3520,908 +3520,909 @@ fec1fc,9000000 3482f8c,27182f79 3482f90,83180000 3482f94,1f87820 -3482f98,5e00007 +3482f98,5e00008 3482f9c,34010003 3482fa0,1e1082a -3482fa4,14200002 -3482fac,340f000a -3482fb0,10000003 -3482fb4,1f08004 -3482fb8,f7822 -3482fbc,1f08007 -3482fc0,90af003d -3482fc4,11e00004 -3482fcc,108043 -3482fd0,108400 -3482fd4,108403 -3482fd8,3e00008 -3482fe8,27bdffe8 -3482fec,afbf0010 -3482ff0,2002025 -3482ff4,c0e42c6 -3482ffc,3c088040 -3483000,8d082fe0 -3483004,11000003 -348300c,c100c27 -3483014,8fbf0010 -3483018,3e00008 -348301c,27bd0018 -3483020,2002025 -3483024,240500ff -3483028,3c088040 -348302c,8d082fe0 -3483030,11000004 -3483038,92080682 -348303c,35090010 -3483040,a2090682 -3483044,3e00008 -348304c,27bdffe8 -3483050,afbf0010 -3483054,24010002 -3483058,3c098012 -348305c,3c188040 -3483060,8f182fe0 -3483064,1300000a -348306c,92180682 -3483070,330b0010 -3483074,11600006 -348307c,860b0840 -3483080,15600003 -3483088,c100c27 -3483090,8fbf0010 -3483094,3e00008 -3483098,27bd0018 -348309c,92180682 -34830a0,330bffef -34830a4,a20b0682 -34830a8,3c188012 -34830ac,2718a5d0 -34830b0,870b13c8 -34830b4,1560001e -34830bc,3c0b8040 -34830c0,856b2fe4 -34830c4,560000d -34830c8,870c0030 -34830cc,930f003d -34830d0,11e00004 -34830d8,b5843 -34830dc,b5c00 -34830e0,b5c03 -34830e4,18b6022 -34830e8,5800004 -34830f0,a70c0030 -34830f4,10000002 -34830fc,a7000030 -3483100,870b0030 -3483104,1560000a -348310c,3c0f801d -3483110,25ef84a0 -3483114,85eb00a4 -3483118,340c0010 -348311c,156c0004 -3483124,ade01d2c -3483128,ade01d38 -348312c,a30000cc -3483130,3e00008 -3483138,3c088040 -348313c,85082fe4 -3483140,240afffe -3483144,150a0005 -348314c,86090198 -3483150,11200002 -3483158,a6000184 -348315c,862a0032 -3483160,44808000 -3483164,3e00008 -348316c,23400 -3483170,63403 -3483174,3c010001 -3483178,34211cbc -348317c,817021 -3483180,8dcf0008 -3483184,91f80000 -3483188,340f0001 -348318c,15f80003 -3483194,80e3406 -3483198,8fbf0024 -348319c,3e00008 -34831a8,4f1021 -34831ac,3c098040 -34831b0,812931a4 -34831b4,11200008 -34831b8,8042a65c -34831bc,3c0a801d -34831c0,254a84a0 -34831c4,8d491d44 -34831c8,31210002 -34831cc,14200002 -34831d0,3402000a -34831d4,34020000 -34831d8,3e00008 -34831e0,594021 -34831e4,3c0a8040 -34831e8,814a31a4 -34831ec,11400002 -34831f0,8109008c -34831f4,34090000 -34831f8,3e00008 -3483200,1ee7821 -3483204,3c0a8040 -3483208,814a31a4 -348320c,11400002 -3483210,81efa65c -3483214,340f0000 -3483218,3e00008 -3483220,3c098040 -3483224,812931a4 -3483228,11200005 -348322c,3c0a801d -3483230,254a84a0 -3483234,8d491d44 -3483238,35290002 -348323c,ad491d44 -3483240,3e00008 -3483244,afa50024 -348330c,ff00 -3483310,3c0a8040 -3483314,254a330e -3483318,914b0000 -348331c,340c00ff -3483320,a14c0000 -3483324,34087fff -3483328,15c80006 -348332c,3c098040 -3483330,252932cc -3483334,116c000c -3483338,b5840 -348333c,12b4821 -3483340,952e0000 -3483344,27bdfff0 -3483348,afbf0004 -348334c,afa40008 -3483350,c100cee -3483354,1c02021 -3483358,407021 -348335c,8fbf0004 -3483360,8fa40008 -3483364,27bd0010 -3483368,3e00008 -348336c,a42e1e1a -3483370,9608001c -3483374,84303 -3483378,3108000f -348337c,29090002 -3483380,1520000b -3483388,960d0018 -348338c,27bdfff0 -3483390,afbf0004 -3483394,afa40008 -3483398,c100cee -348339c,1a02021 -34833a0,406821 -34833a4,8fbf0004 -34833a8,8fa40008 -34833ac,27bd0010 -34833b0,3e00008 -34833b4,270821 -34833b8,34087ff9 -34833bc,884022 -34833c0,501000f -34833c4,34081000 -34833c8,884022 -34833cc,500000c -34833d0,3c098012 -34833d4,2529a5d0 -34833d8,3c0a8040 -34833dc,254a3248 -34833e0,3c0b8040 -34833e4,256b330e -34833e8,a1680000 -34833ec,84080 -34833f0,1485021 -34833f4,95440000 -34833f8,91480002 -34833fc,a1281397 -3483400,3e00008 -3483404,801021 -3483408,8c6d0004 -348340c,3c0e8040 -3483410,81ce0d59 -3483414,1ae7825 -3483418,11e0000a -3483420,11c00006 -3483428,946e0ed4 -348342c,31ce0010 -3483430,1cd7025 -3483434,11c00003 -348343c,3e00008 -3483440,340f0001 +3482fa4,10200003 +3482fac,10000005 +3482fb0,1f08004 +3482fb4,10000009 +3482fb8,a4a00030 +3482fbc,f7822 +3482fc0,1f08007 +3482fc4,90af003d +3482fc8,11e00004 +3482fd0,108043 +3482fd4,108400 +3482fd8,108403 +3482fdc,3e00008 +3482ff0,27bdffe8 +3482ff4,afbf0010 +3482ff8,2002025 +3482ffc,c0e42c6 +3483004,3c088040 +3483008,8d082fe4 +348300c,11000003 +3483014,c100c29 +348301c,8fbf0010 +3483020,3e00008 +3483024,27bd0018 +3483028,2002025 +348302c,240500ff +3483030,3c088040 +3483034,8d082fe4 +3483038,11000004 +3483040,92080682 +3483044,35090010 +3483048,a2090682 +348304c,3e00008 +3483054,27bdffe8 +3483058,afbf0010 +348305c,24010002 +3483060,3c098012 +3483064,3c188040 +3483068,8f182fe4 +348306c,1300000a +3483074,92180682 +3483078,330b0010 +348307c,11600006 +3483084,860b0840 +3483088,15600003 +3483090,c100c29 +3483098,8fbf0010 +348309c,3e00008 +34830a0,27bd0018 +34830a4,92180682 +34830a8,330bffef +34830ac,a20b0682 +34830b0,3c188012 +34830b4,2718a5d0 +34830b8,870b13c8 +34830bc,1560001e +34830c4,3c0b8040 +34830c8,856b2fe8 +34830cc,560000d +34830d0,870c0030 +34830d4,930f003d +34830d8,11e00004 +34830e0,b5843 +34830e4,b5c00 +34830e8,b5c03 +34830ec,18b6022 +34830f0,5800004 +34830f8,a70c0030 +34830fc,10000002 +3483104,a7000030 +3483108,870b0030 +348310c,1560000a +3483114,3c0f801d +3483118,25ef84a0 +348311c,85eb00a4 +3483120,340c0010 +3483124,156c0004 +348312c,ade01d2c +3483130,ade01d38 +3483134,a30000cc +3483138,3e00008 +3483140,3c088040 +3483144,85082fe8 +3483148,240afffe +348314c,150a0005 +3483154,86090198 +3483158,11200002 +3483160,a6000184 +3483164,862a0032 +3483168,44808000 +348316c,3e00008 +3483174,23400 +3483178,63403 +348317c,3c010001 +3483180,34211cbc +3483184,817021 +3483188,8dcf0008 +348318c,91f80000 +3483190,340f0001 +3483194,15f80003 +348319c,80e3406 +34831a0,8fbf0024 +34831a4,3e00008 +34831b0,4f1021 +34831b4,3c098040 +34831b8,812931ac +34831bc,11200008 +34831c0,8042a65c +34831c4,3c0a801d +34831c8,254a84a0 +34831cc,8d491d44 +34831d0,31210002 +34831d4,14200002 +34831d8,3402000a +34831dc,34020000 +34831e0,3e00008 +34831e8,594021 +34831ec,3c0a8040 +34831f0,814a31ac +34831f4,11400002 +34831f8,8109008c +34831fc,34090000 +3483200,3e00008 +3483208,1ee7821 +348320c,3c0a8040 +3483210,814a31ac +3483214,11400002 +3483218,81efa65c +348321c,340f0000 +3483220,3e00008 +3483228,3c098040 +348322c,812931ac +3483230,11200005 +3483234,3c0a801d +3483238,254a84a0 +348323c,8d491d44 +3483240,35290002 +3483244,ad491d44 +3483248,3e00008 +348324c,afa50024 +3483314,ff00 +3483318,3c0a8040 +348331c,254a3316 +3483320,914b0000 +3483324,340c00ff +3483328,a14c0000 +348332c,34087fff +3483330,15c80006 +3483334,3c098040 +3483338,252932d4 +348333c,116c000c +3483340,b5840 +3483344,12b4821 +3483348,952e0000 +348334c,27bdfff0 +3483350,afbf0004 +3483354,afa40008 +3483358,c100cf0 +348335c,1c02021 +3483360,407021 +3483364,8fbf0004 +3483368,8fa40008 +348336c,27bd0010 +3483370,3e00008 +3483374,a42e1e1a +3483378,9608001c +348337c,84303 +3483380,3108000f +3483384,29090002 +3483388,1520000b +3483390,960d0018 +3483394,27bdfff0 +3483398,afbf0004 +348339c,afa40008 +34833a0,c100cf0 +34833a4,1a02021 +34833a8,406821 +34833ac,8fbf0004 +34833b0,8fa40008 +34833b4,27bd0010 +34833b8,3e00008 +34833bc,270821 +34833c0,34087ff9 +34833c4,884022 +34833c8,501000f +34833cc,34081000 +34833d0,884022 +34833d4,500000c +34833d8,3c098012 +34833dc,2529a5d0 +34833e0,3c0a8040 +34833e4,254a3250 +34833e8,3c0b8040 +34833ec,256b3316 +34833f0,a1680000 +34833f4,84080 +34833f8,1485021 +34833fc,95440000 +3483400,91480002 +3483404,a1281397 +3483408,3e00008 +348340c,801021 +3483410,8c6d0004 +3483414,3c0e8040 +3483418,81ce0d59 +348341c,1ae7825 +3483420,11e0000a +3483428,11c00006 +3483430,946e0ed4 +3483434,31ce0010 +3483438,1cd7025 +348343c,11c00003 3483444,3e00008 -3483448,340f0000 -348344c,1000 -3483450,4800 -3483458,7000 -348345c,4800 -3483468,80419340 -348346c,42890 -3483470,34191000 -3483474,340a4800 -3483478,340d0000 -348347c,340c7000 -3483480,340e4800 -3483484,3e00008 -3483488,34180000 -3483490,3c088012 -3483494,2508a5d0 -3483498,95090eda -348349c,31290008 -34834a0,15200008 -34834a4,8d090004 -34834a8,15200004 -34834ac,3c098040 -34834b0,8129348c -34834b4,15200003 -34834bc,3e00008 -34834c0,34090000 +3483448,340f0001 +348344c,3e00008 +3483450,340f0000 +3483454,1000 +3483458,4800 +3483460,7000 +3483464,4800 +3483470,80419340 +3483474,42890 +3483478,34191000 +348347c,340a4800 +3483480,340d0000 +3483484,340c7000 +3483488,340e4800 +348348c,3e00008 +3483490,34180000 +3483498,3c088012 +348349c,2508a5d0 +34834a0,95090eda +34834a4,31290008 +34834a8,15200008 +34834ac,8d090004 +34834b0,15200004 +34834b4,3c098040 +34834b8,81293494 +34834bc,15200003 34834c4,3e00008 -34834c8,34090001 -34834cc,3c08801d -34834d0,25082578 -34834d4,3409006c -34834d8,8d0a6300 -34834dc,112a0009 -34834e0,340a0001 -34834e4,340b0036 -34834e8,ad0a6300 -34834ec,a10b6304 -34834f0,240cffff -34834f4,810e63e7 -34834f8,15cc0002 -34834fc,340d0002 -3483500,a10d63e7 -3483504,3e00008 -3483508,24060022 -3483514,afb0003c -3483518,27bdffe0 -348351c,afbf0014 -3483520,3c098040 -3483524,2529350c -3483528,812a0000 -348352c,1540000a -3483534,8e4b0028 -3483538,3c0c4370 -348353c,16c082a -3483540,14200005 -3483544,340d0001 -3483548,a12d0000 -348354c,3404001b -3483550,c032a9c -3483558,8fbf0014 -348355c,3e00008 -3483560,27bd0020 -3483564,8e721c44 -3483568,240e0003 -348356c,a22e05b0 -3483570,926f07af -3483574,4406b000 -3483578,4407a000 -348357c,3e00008 -3483584,90580000 -3483588,27bdffd0 -348358c,afbf0014 -3483590,afa40018 -3483594,afa5001c -3483598,afa60020 -348359c,afa70024 -34835a0,3c048040 -34835a4,8084350c -34835a8,1080001b -34835b0,3c048040 -34835b4,8c843510 -34835b8,2885001e -34835bc,14a00016 -34835c4,28850050 -34835c8,10a0000c -34835d0,3c043d4d -34835d4,2484cccd -34835d8,ae4404d0 -34835dc,2402025 -34835e0,248404c8 -34835e4,3c05437f -34835e8,3c063f80 -34835ec,3c074120 -34835f0,c0190a0 -34835f8,10000007 -34835fc,2402025 -3483600,248404c8 -3483604,34050000 -3483608,3c063f80 -348360c,3c074120 -3483610,c0190a0 -3483618,8fbf0014 -348361c,8fa40018 -3483620,8fa5001c -3483624,8fa60020 -3483628,8fa70024 -348362c,3e00008 -3483630,27bd0030 -3483634,860800b6 -3483638,25084000 -348363c,a60800b6 -3483640,34080001 -3483644,a20805e8 -3483648,a2000554 -348364c,8e090004 -3483650,240afffe -3483654,1495824 -3483658,ae0b0004 -348365c,3c088040 -3483660,250836a4 -3483664,3e00008 -3483668,ae08013c -348366c,860800b6 -3483670,2508c000 -3483674,a60800b6 -3483678,34080001 -348367c,a20805e8 -3483680,a2000554 -3483684,8e090004 -3483688,240afffe -348368c,1495824 -3483690,ae0b0004 -3483694,3c088040 -3483698,250836a4 -348369c,3e00008 -34836a0,ae08013c -34836a4,27bdffd0 -34836a8,afbf0014 -34836ac,afa40018 -34836b0,afa5001c -34836b4,34080001 -34836b8,a0880554 -34836bc,8488001c -34836c0,11000006 -34836c8,3c048040 -34836cc,8c843510 -34836d0,24850001 -34836d4,3c018040 -34836d8,ac253510 -34836dc,3c048040 -34836e0,8c843510 -34836e4,34050003 -34836e8,14850009 -34836f0,8fa40018 -34836f4,8488001c -34836f8,34090001 -34836fc,11090002 -3483700,240539b0 -3483704,240539b1 -3483708,c008bf4 -3483710,28850028 -3483714,14a0001a -348371c,8fa40018 -3483720,24840028 -3483724,3c0543c8 -3483728,3c063f80 -348372c,3c0740c0 -3483730,c0190a0 -3483738,8fa40018 -348373c,24840558 -3483740,c023270 -3483748,8fa40018 -348374c,c008bf4 -3483750,2405311f -3483754,3c048040 -3483758,8c843510 -348375c,34080061 -3483760,14880007 -3483768,8fa40018 -348376c,8fa5001c -3483770,8c8b0138 -3483774,8d6b0010 -3483778,256913ec -348377c,ac89013c -3483780,8fbf0014 -3483784,3e00008 -3483788,27bd0030 -348378c,3c01c416 -3483790,44816000 -3483794,3e00008 -3483798,3025 -348379c,3c014416 -34837a0,44816000 -34837a4,3e00008 -34837a8,3025 -34837ac,afa40018 -34837b0,3c08801e -34837b4,2508aa30 -34837b8,3e00008 -34837bc,ad000678 -34837c0,27bdffe8 -34837c4,afaa0004 -34837c8,846f4a2a -34837cc,340a0002 -34837d0,15ea0002 -34837d4,340a0001 -34837d8,a46a4a2a -34837dc,846f4a2a -34837e0,8faa0004 -34837e4,3e00008 -34837e8,27bd0018 -34837ec,27bdffe8 -34837f0,afaa0004 -34837f4,846e4a2a -34837f8,340a0002 -34837fc,15ca0002 -3483800,340a0003 -3483804,a46a4a2a -3483808,846e4a2a -348380c,8faa0004 -3483810,3e00008 -3483814,27bd0018 -3483818,27bdffe8 -348381c,afaa0004 -3483820,85034a2a -3483824,340a0002 -3483828,146a0002 -348382c,340a0001 -3483830,a50a4a2a -3483834,85034a2a -3483838,8faa0004 -348383c,3e00008 -3483840,27bd0018 -3483844,27bdffe8 -3483848,afaa0004 -348384c,85034a2a -3483850,340a0002 -3483854,146a0002 -3483858,340a0003 -348385c,a50a4a2a -3483860,85034a2a -3483864,8faa0004 -3483868,3e00008 -348386c,27bd0018 -3483870,27bdffe8 -3483874,afaa0004 -3483878,85034a2a -348387c,340a0002 -3483880,146a0002 -3483884,340a0001 -3483888,a50a4a2a -348388c,85034a2a -3483890,8faa0004 -3483894,3e00008 -3483898,27bd0018 -348389c,27bdffe8 -34838a0,afaa0004 -34838a4,85034a2a -34838a8,340a0002 -34838ac,146a0002 -34838b0,340a0003 -34838b4,a50a4a2a -34838b8,85034a2a -34838bc,8faa0004 -34838c0,3e00008 -34838c4,27bd0018 -34838c8,27bdffe8 -34838cc,afaa0004 -34838d0,a42bca2a -34838d4,340a0002 -34838d8,156a0002 -34838dc,340a0003 -34838e0,a50a4a2a -34838e4,85034a2a -34838e8,8faa0004 -34838ec,3e00008 -34838f0,27bd0018 -34838f4,27bdffe8 -34838f8,afaa0004 -34838fc,85034a2a -3483900,340a0002 -3483904,146a0002 -3483908,340a0001 -348390c,a50a4a2a -3483910,85034a2a -3483914,8faa0004 -3483918,3e00008 -348391c,27bd0018 -3483920,27bdffe8 -3483924,afaa0004 -3483928,85034a2a -348392c,340a0002 -3483930,146a0002 -3483934,340a0003 -3483938,a50a4a2a -348393c,85034a2a -3483940,8faa0004 -3483944,3e00008 -3483948,27bd0018 -348394c,3c08801e -3483950,25084ee8 -3483954,3409f000 -3483958,a5090000 -348395c,3e00008 -3483960,84cb4a2e -3483964,24a56f04 -3483968,8c880144 -348396c,11050007 -3483970,3c09801e -3483974,2529aa30 -3483978,3c0a446a -348397c,254ac000 -3483980,3c0bc324 -3483984,ad2a0024 -3483988,ad2b002c -348398c,3e00008 -3483994,27bdffd8 -3483998,afbf0024 -348399c,afa40028 -34839a0,afa5002c -34839a4,afa60030 -34839a8,c022865 -34839ac,8fa40030 -34839b0,44822000 -34839b4,44800000 -34839b8,240e0002 -34839bc,468021a0 -34839c0,afae0018 -34839c4,8fa40028 -34839c8,8fa5002c -34839cc,8fa60030 -34839d0,3c073f80 -34839d4,3c080400 -34839d8,250832b0 -34839dc,14c80002 -34839e4,3c074040 -34839e8,e7a60014 -34839ec,e7a00010 -34839f0,c023000 -34839f4,e7a0001c -34839f8,8fbf0024 -34839fc,8fbf0024 -3483a00,3e00008 -3483a04,27bd0028 -3483a08,3c0a8040 -3483a0c,814a0d54 -3483a10,11400003 -3483a14,8ccb0138 -3483a18,8d6b0010 -3483a1c,25690adc -3483a20,3e00008 -3483a24,acc90180 -3483a28,27bdffe8 -3483a2c,afbf0014 -3483a30,3c0a8040 -3483a34,814a0d54 -3483a38,15400003 -3483a40,c037500 -3483a48,8fbf0014 -3483a4c,3e00008 -3483a50,27bd0018 -3483a54,3c010080 -3483a58,3c180001 -3483a5c,3e00008 -3483a60,8c4e0670 -3483a64,3c0a8040 -3483a68,814a0d54 -3483a6c,11400002 -3483a74,34180003 -3483a78,3c078012 -3483a7c,24e7a5d0 -3483a80,3e00008 -3483a84,24010003 -3483a88,3c0a8040 -3483a8c,814a0d54 -3483a90,11400008 -3483a98,c10047a -3483aa0,3c08801e -3483aa4,25088966 -3483aa8,34090004 -3483aac,a5090000 -3483ab4,8fbf0014 -3483ab8,3e00008 -3483abc,27bd0018 -3483ac0,27bdffe0 -3483ac4,afbf0014 -3483ac8,afa10018 -3483acc,afa4001c -3483ad0,3c0a8040 -3483ad4,814a0d54 -3483ad8,1540000b -3483ae0,3c04801d -3483ae4,248484a0 -3483ae8,3c058040 -3483aec,90a50d57 -3483af0,34060000 -3483af4,c037385 -3483afc,34044802 -3483b00,c0191bc -3483b08,8fa4001c -3483b0c,8fa10018 -3483b10,8fbf0014 -3483b14,3e00008 -3483b18,27bd0020 -3483b20,27bdffe0 -3483b24,afbf0014 -3483b28,afa40018 -3483b2c,3c0d8040 -3483b30,81ad3b1c -3483b34,15a0000c -3483b3c,3c08801e -3483b40,2508aa30 -3483b44,8d090670 -3483b48,340a4000 -3483b4c,12a5824 -3483b50,1160000d -3483b58,34080001 -3483b5c,3c018040 -3483b60,a0283b1c -3483b64,10000023 -3483b68,3c08801e -3483b6c,2508aa30 -3483b70,8d090670 -3483b74,340a4000 -3483b78,12a5824 -3483b7c,1160000c -3483b84,1000001b -3483b88,24a420d8 -3483b8c,c037519 -3483b94,24010002 -3483b98,14410016 -3483ba0,3c08801e -3483ba4,25088966 -3483ba8,34090004 -3483bac,a5090000 -3483bb0,3c0b8012 -3483bb4,256ba5d0 -3483bb8,816c0ede -3483bbc,358c0001 -3483bc0,a16c0ede -3483bc4,3c09801e -3483bc8,2529a2ba -3483bcc,340802ae -3483bd0,a5280000 -3483bd4,3408002a -3483bd8,3c09801e -3483bdc,2529a2fe -3483be0,a1280000 -3483be4,34080014 -3483be8,3c09801e -3483bec,2529a2b5 -3483bf0,a1280000 -3483bf4,8fbf0014 -3483bf8,3e00008 -3483bfc,27bd0020 -3483c00,27bdffd0 -3483c04,afbf0014 -3483c08,afa80018 -3483c0c,afa9001c -3483c10,afaa0020 -3483c14,afab0024 -3483c18,afac0028 -3483c1c,afad002c -3483c20,3c088012 -3483c24,2508a5d0 -3483c28,85090f20 -3483c2c,31290040 -3483c30,1120000e -3483c34,3c08801e -3483c38,2508aa30 -3483c3c,8d09039c -3483c40,1120000a -3483c44,340a00a1 -3483c48,852b0000 -3483c4c,154b0007 -3483c50,240cf7ff -3483c54,8d0d066c -3483c58,18d6824 -3483c5c,ad0d066c -3483c60,ad00039c -3483c64,ad00011c -3483c68,ad200118 -3483c6c,afad002c -3483c70,afac0028 -3483c74,afab0024 -3483c78,afaa0020 -3483c7c,afa9001c -3483c80,afa80018 -3483c84,afbf0014 -3483c88,860e001c -3483c8c,3e00008 -3483c90,27bd0030 -3483c94,27bdffd0 -3483c98,afbf0014 -3483c9c,afa80018 -3483ca0,afa9001c -3483ca4,afaa0020 -3483ca8,84a800a4 -3483cac,34090002 -3483cb0,1509000c -3483cb4,340a0006 -3483cb8,80880003 -3483cbc,150a0009 -3483cc4,3c088012 -3483cc8,2508a5d0 -3483ccc,85090f20 -3483cd0,31290040 -3483cd4,11200003 -3483cdc,c0083ad -3483ce4,8faa0020 -3483ce8,8fa9001c -3483cec,8fa80018 -3483cf0,8fbf0014 -3483cf4,8602001c -3483cf8,3e00008 -3483cfc,27bd0030 -3483d00,27bdffd0 -3483d04,afbf001c -3483d08,afa40020 -3483d0c,afa50024 -3483d10,e7a00028 -3483d14,4602003c -3483d1c,45010005 -3483d24,c101004 -3483d2c,10000003 -3483d34,c101006 -3483d3c,34060014 -3483d40,3407000a -3483d44,44801000 -3483d48,c7a00028 -3483d4c,8fa50024 -3483d50,8fa40020 -3483d54,8fbf001c -3483d58,4602003c -3483d5c,27bd0030 -3483d60,3e00008 -3483d68,27bdffd0 -3483d6c,afbf001c -3483d70,afa40020 -3483d74,afa50024 -3483d78,e7a40028 -3483d7c,e7a6002c -3483d80,4606203c -3483d88,45000003 -3483d90,c101011 -3483d98,34060014 -3483d9c,3407000a -3483da0,44801000 -3483da4,c7a6002c -3483da8,c7a40028 -3483dac,8fa50024 -3483db0,8fa40020 -3483db4,8fbf001c -3483db8,4606203c -3483dbc,27bd0030 -3483dc0,3e00008 -3483dc8,c101074 -3483dd0,8fbf001c -3483dd4,27bd0020 -3483dd8,3e00008 -3483de4,27bdffe8 -3483de8,afbf0014 -3483dec,c008ab4 -3483df4,8fbf0014 -3483df8,27bd0018 -3483dfc,8fa40018 -3483e00,8c8a0138 -3483e04,8d4a0010 -3483e08,25431618 -3483e0c,3c088040 -3483e10,81083de0 -3483e14,1100000a -3483e18,3c098012 -3483e1c,2529a5d0 -3483e20,95281406 -3483e24,290105dc -3483e28,14200005 -3483e2c,9488029c -3483e30,31080002 -3483e34,15000002 -3483e3c,254314d0 -3483e40,3e00008 -3483e48,3c188012 -3483e4c,2718a5d0 -3483e50,8f180004 -3483e54,17000003 -3483e5c,3c0a8041 -3483e60,254a0d20 -3483e64,24780008 -3483e68,3e00008 -3483e6c,adf802c0 -3483e70,3c0f8012 -3483e74,25efa5d0 -3483e78,8def0004 -3483e7c,15e00003 -3483e84,3c0e8041 -3483e88,25ce0d20 -3483e8c,ac4e0004 -3483e90,3e00008 -3483e94,820f013f -3483e9c,3c088040 -3483ea0,81083e98 -3483ea4,11000007 -3483ea8,3c09801d -3483eac,252984a0 -3483eb0,8d281d44 -3483eb4,31080002 -3483eb8,11000002 -3483ec0,34069100 -3483ec4,3e00008 -3483ec8,afa60020 -3483ecc,3c088040 -3483ed0,81083e98 -3483ed4,11000005 -3483ed8,3c09801d -3483edc,252984a0 -3483ee0,8d281d44 -3483ee4,35080002 -3483ee8,ad281d44 -3483eec,3e00008 -3483ef0,34e74000 -3483ef8,3c038012 -3483efc,2463a5d0 -3483f00,8c6e0004 -3483f04,15c0000c -3483f08,24020005 -3483f0c,24020011 -3483f10,3c088040 -3483f14,81083ef4 -3483f18,11000007 -3483f1c,3c09801d -3483f20,252984a0 -3483f24,8d281d44 -3483f28,31080002 -3483f2c,11000002 -3483f30,34020001 -3483f34,34020003 -3483f38,3e00008 -3483f3c,3c048010 -3483f40,3c088040 -3483f44,81083ef4 -3483f48,11000005 -3483f4c,3c09801d -3483f50,252984a0 -3483f54,8d281d44 -3483f58,35080002 -3483f5c,ad281d44 -3483f60,3e00008 -3483f64,34e78000 -3483f68,27bdffe8 -3483f6c,afa20010 -3483f70,afbf0014 -3483f74,c1032d1 -3483f78,46000306 -3483f7c,406821 -3483f80,8fa20010 -3483f84,8fbf0014 -3483f88,3e00008 -3483f8c,27bd0018 -3483f90,ac800130 -3483f94,ac800134 -3483f98,3c018012 -3483f9c,2421a5d0 -3483fa0,80280edc -3483fa4,35080008 -3483fa8,a0280edc -3483fac,3c013f80 -3483fb0,3e00008 -3483fb4,44813000 -3483fb8,3c038012 -3483fbc,910f014f -3483fc0,2463a5d0 -3483fc4,25ef0023 -3483fc8,9078008b -3483fd0,11f80003 -3483fd8,3e00008 -3483fdc,a100014f +34834c8,34090000 +34834cc,3e00008 +34834d0,34090001 +34834d4,3c08801d +34834d8,25082578 +34834dc,3409006c +34834e0,8d0a6300 +34834e4,112a0009 +34834e8,340a0001 +34834ec,340b0036 +34834f0,ad0a6300 +34834f4,a10b6304 +34834f8,240cffff +34834fc,810e63e7 +3483500,15cc0002 +3483504,340d0002 +3483508,a10d63e7 +348350c,3e00008 +3483510,24060022 +348351c,afb0003c +3483520,27bdffe0 +3483524,afbf0014 +3483528,3c098040 +348352c,25293514 +3483530,812a0000 +3483534,1540000a +348353c,8e4b0028 +3483540,3c0c4370 +3483544,16c082a +3483548,14200005 +348354c,340d0001 +3483550,a12d0000 +3483554,3404001b +3483558,c032a9c +3483560,8fbf0014 +3483564,3e00008 +3483568,27bd0020 +348356c,8e721c44 +3483570,240e0003 +3483574,a22e05b0 +3483578,926f07af +348357c,4406b000 +3483580,4407a000 +3483584,3e00008 +348358c,90580000 +3483590,27bdffd0 +3483594,afbf0014 +3483598,afa40018 +348359c,afa5001c +34835a0,afa60020 +34835a4,afa70024 +34835a8,3c048040 +34835ac,80843514 +34835b0,1080001b +34835b8,3c048040 +34835bc,8c843518 +34835c0,2885001e +34835c4,14a00016 +34835cc,28850050 +34835d0,10a0000c +34835d8,3c043d4d +34835dc,2484cccd +34835e0,ae4404d0 +34835e4,2402025 +34835e8,248404c8 +34835ec,3c05437f +34835f0,3c063f80 +34835f4,3c074120 +34835f8,c0190a0 +3483600,10000007 +3483604,2402025 +3483608,248404c8 +348360c,34050000 +3483610,3c063f80 +3483614,3c074120 +3483618,c0190a0 +3483620,8fbf0014 +3483624,8fa40018 +3483628,8fa5001c +348362c,8fa60020 +3483630,8fa70024 +3483634,3e00008 +3483638,27bd0030 +348363c,860800b6 +3483640,25084000 +3483644,a60800b6 +3483648,34080001 +348364c,a20805e8 +3483650,a2000554 +3483654,8e090004 +3483658,240afffe +348365c,1495824 +3483660,ae0b0004 +3483664,3c088040 +3483668,250836ac +348366c,3e00008 +3483670,ae08013c +3483674,860800b6 +3483678,2508c000 +348367c,a60800b6 +3483680,34080001 +3483684,a20805e8 +3483688,a2000554 +348368c,8e090004 +3483690,240afffe +3483694,1495824 +3483698,ae0b0004 +348369c,3c088040 +34836a0,250836ac +34836a4,3e00008 +34836a8,ae08013c +34836ac,27bdffd0 +34836b0,afbf0014 +34836b4,afa40018 +34836b8,afa5001c +34836bc,34080001 +34836c0,a0880554 +34836c4,8488001c +34836c8,11000006 +34836d0,3c048040 +34836d4,8c843518 +34836d8,24850001 +34836dc,3c018040 +34836e0,ac253518 +34836e4,3c048040 +34836e8,8c843518 +34836ec,34050003 +34836f0,14850009 +34836f8,8fa40018 +34836fc,8488001c +3483700,34090001 +3483704,11090002 +3483708,240539b0 +348370c,240539b1 +3483710,c008bf4 +3483718,28850028 +348371c,14a0001a +3483724,8fa40018 +3483728,24840028 +348372c,3c0543c8 +3483730,3c063f80 +3483734,3c0740c0 +3483738,c0190a0 +3483740,8fa40018 +3483744,24840558 +3483748,c023270 +3483750,8fa40018 +3483754,c008bf4 +3483758,2405311f +348375c,3c048040 +3483760,8c843518 +3483764,34080061 +3483768,14880007 +3483770,8fa40018 +3483774,8fa5001c +3483778,8c8b0138 +348377c,8d6b0010 +3483780,256913ec +3483784,ac89013c +3483788,8fbf0014 +348378c,3e00008 +3483790,27bd0030 +3483794,3c01c416 +3483798,44816000 +348379c,3e00008 +34837a0,3025 +34837a4,3c014416 +34837a8,44816000 +34837ac,3e00008 +34837b0,3025 +34837b4,afa40018 +34837b8,3c08801e +34837bc,2508aa30 +34837c0,3e00008 +34837c4,ad000678 +34837c8,27bdffe8 +34837cc,afaa0004 +34837d0,846f4a2a +34837d4,340a0002 +34837d8,15ea0002 +34837dc,340a0001 +34837e0,a46a4a2a +34837e4,846f4a2a +34837e8,8faa0004 +34837ec,3e00008 +34837f0,27bd0018 +34837f4,27bdffe8 +34837f8,afaa0004 +34837fc,846e4a2a +3483800,340a0002 +3483804,15ca0002 +3483808,340a0003 +348380c,a46a4a2a +3483810,846e4a2a +3483814,8faa0004 +3483818,3e00008 +348381c,27bd0018 +3483820,27bdffe8 +3483824,afaa0004 +3483828,85034a2a +348382c,340a0002 +3483830,146a0002 +3483834,340a0001 +3483838,a50a4a2a +348383c,85034a2a +3483840,8faa0004 +3483844,3e00008 +3483848,27bd0018 +348384c,27bdffe8 +3483850,afaa0004 +3483854,85034a2a +3483858,340a0002 +348385c,146a0002 +3483860,340a0003 +3483864,a50a4a2a +3483868,85034a2a +348386c,8faa0004 +3483870,3e00008 +3483874,27bd0018 +3483878,27bdffe8 +348387c,afaa0004 +3483880,85034a2a +3483884,340a0002 +3483888,146a0002 +348388c,340a0001 +3483890,a50a4a2a +3483894,85034a2a +3483898,8faa0004 +348389c,3e00008 +34838a0,27bd0018 +34838a4,27bdffe8 +34838a8,afaa0004 +34838ac,85034a2a +34838b0,340a0002 +34838b4,146a0002 +34838b8,340a0003 +34838bc,a50a4a2a +34838c0,85034a2a +34838c4,8faa0004 +34838c8,3e00008 +34838cc,27bd0018 +34838d0,27bdffe8 +34838d4,afaa0004 +34838d8,a42bca2a +34838dc,340a0002 +34838e0,156a0002 +34838e4,340a0003 +34838e8,a50a4a2a +34838ec,85034a2a +34838f0,8faa0004 +34838f4,3e00008 +34838f8,27bd0018 +34838fc,27bdffe8 +3483900,afaa0004 +3483904,85034a2a +3483908,340a0002 +348390c,146a0002 +3483910,340a0001 +3483914,a50a4a2a +3483918,85034a2a +348391c,8faa0004 +3483920,3e00008 +3483924,27bd0018 +3483928,27bdffe8 +348392c,afaa0004 +3483930,85034a2a +3483934,340a0002 +3483938,146a0002 +348393c,340a0003 +3483940,a50a4a2a +3483944,85034a2a +3483948,8faa0004 +348394c,3e00008 +3483950,27bd0018 +3483954,3c08801e +3483958,25084ee8 +348395c,3409f000 +3483960,a5090000 +3483964,3e00008 +3483968,84cb4a2e +348396c,24a56f04 +3483970,8c880144 +3483974,11050007 +3483978,3c09801e +348397c,2529aa30 +3483980,3c0a446a +3483984,254ac000 +3483988,3c0bc324 +348398c,ad2a0024 +3483990,ad2b002c +3483994,3e00008 +348399c,27bdffd8 +34839a0,afbf0024 +34839a4,afa40028 +34839a8,afa5002c +34839ac,afa60030 +34839b0,c022865 +34839b4,8fa40030 +34839b8,44822000 +34839bc,44800000 +34839c0,240e0002 +34839c4,468021a0 +34839c8,afae0018 +34839cc,8fa40028 +34839d0,8fa5002c +34839d4,8fa60030 +34839d8,3c073f80 +34839dc,3c080400 +34839e0,250832b0 +34839e4,14c80002 +34839ec,3c074040 +34839f0,e7a60014 +34839f4,e7a00010 +34839f8,c023000 +34839fc,e7a0001c +3483a00,8fbf0024 +3483a04,8fbf0024 +3483a08,3e00008 +3483a0c,27bd0028 +3483a10,3c0a8040 +3483a14,814a0d54 +3483a18,11400003 +3483a1c,8ccb0138 +3483a20,8d6b0010 +3483a24,25690adc +3483a28,3e00008 +3483a2c,acc90180 +3483a30,27bdffe8 +3483a34,afbf0014 +3483a38,3c0a8040 +3483a3c,814a0d54 +3483a40,15400003 +3483a48,c037500 +3483a50,8fbf0014 +3483a54,3e00008 +3483a58,27bd0018 +3483a5c,3c010080 +3483a60,3c180001 +3483a64,3e00008 +3483a68,8c4e0670 +3483a6c,3c0a8040 +3483a70,814a0d54 +3483a74,11400002 +3483a7c,34180003 +3483a80,3c078012 +3483a84,24e7a5d0 +3483a88,3e00008 +3483a8c,24010003 +3483a90,3c0a8040 +3483a94,814a0d54 +3483a98,11400008 +3483aa0,c10047a +3483aa8,3c08801e +3483aac,25088966 +3483ab0,34090004 +3483ab4,a5090000 +3483abc,8fbf0014 +3483ac0,3e00008 +3483ac4,27bd0018 +3483ac8,27bdffe0 +3483acc,afbf0014 +3483ad0,afa10018 +3483ad4,afa4001c +3483ad8,3c0a8040 +3483adc,814a0d54 +3483ae0,1540000b +3483ae8,3c04801d +3483aec,248484a0 +3483af0,3c058040 +3483af4,90a50d57 +3483af8,34060000 +3483afc,c037385 +3483b04,34044802 +3483b08,c0191bc +3483b10,8fa4001c +3483b14,8fa10018 +3483b18,8fbf0014 +3483b1c,3e00008 +3483b20,27bd0020 +3483b28,27bdffe0 +3483b2c,afbf0014 +3483b30,afa40018 +3483b34,3c0d8040 +3483b38,81ad3b24 +3483b3c,15a0000c +3483b44,3c08801e +3483b48,2508aa30 +3483b4c,8d090670 +3483b50,340a4000 +3483b54,12a5824 +3483b58,1160000d +3483b60,34080001 +3483b64,3c018040 +3483b68,a0283b24 +3483b6c,10000023 +3483b70,3c08801e +3483b74,2508aa30 +3483b78,8d090670 +3483b7c,340a4000 +3483b80,12a5824 +3483b84,1160000c +3483b8c,1000001b +3483b90,24a420d8 +3483b94,c037519 +3483b9c,24010002 +3483ba0,14410016 +3483ba8,3c08801e +3483bac,25088966 +3483bb0,34090004 +3483bb4,a5090000 +3483bb8,3c0b8012 +3483bbc,256ba5d0 +3483bc0,816c0ede +3483bc4,358c0001 +3483bc8,a16c0ede +3483bcc,3c09801e +3483bd0,2529a2ba +3483bd4,340802ae +3483bd8,a5280000 +3483bdc,3408002a +3483be0,3c09801e +3483be4,2529a2fe +3483be8,a1280000 +3483bec,34080014 +3483bf0,3c09801e +3483bf4,2529a2b5 +3483bf8,a1280000 +3483bfc,8fbf0014 +3483c00,3e00008 +3483c04,27bd0020 +3483c08,27bdffd0 +3483c0c,afbf0014 +3483c10,afa80018 +3483c14,afa9001c +3483c18,afaa0020 +3483c1c,afab0024 +3483c20,afac0028 +3483c24,afad002c +3483c28,3c088012 +3483c2c,2508a5d0 +3483c30,85090f20 +3483c34,31290040 +3483c38,1120000e +3483c3c,3c08801e +3483c40,2508aa30 +3483c44,8d09039c +3483c48,1120000a +3483c4c,340a00a1 +3483c50,852b0000 +3483c54,154b0007 +3483c58,240cf7ff +3483c5c,8d0d066c +3483c60,18d6824 +3483c64,ad0d066c +3483c68,ad00039c +3483c6c,ad00011c +3483c70,ad200118 +3483c74,afad002c +3483c78,afac0028 +3483c7c,afab0024 +3483c80,afaa0020 +3483c84,afa9001c +3483c88,afa80018 +3483c8c,afbf0014 +3483c90,860e001c +3483c94,3e00008 +3483c98,27bd0030 +3483c9c,27bdffd0 +3483ca0,afbf0014 +3483ca4,afa80018 +3483ca8,afa9001c +3483cac,afaa0020 +3483cb0,84a800a4 +3483cb4,34090002 +3483cb8,1509000c +3483cbc,340a0006 +3483cc0,80880003 +3483cc4,150a0009 +3483ccc,3c088012 +3483cd0,2508a5d0 +3483cd4,85090f20 +3483cd8,31290040 +3483cdc,11200003 +3483ce4,c0083ad +3483cec,8faa0020 +3483cf0,8fa9001c +3483cf4,8fa80018 +3483cf8,8fbf0014 +3483cfc,8602001c +3483d00,3e00008 +3483d04,27bd0030 +3483d08,27bdffd0 +3483d0c,afbf001c +3483d10,afa40020 +3483d14,afa50024 +3483d18,e7a00028 +3483d1c,4602003c +3483d24,45010005 +3483d2c,c101004 +3483d34,10000003 +3483d3c,c101006 +3483d44,34060014 +3483d48,3407000a +3483d4c,44801000 +3483d50,c7a00028 +3483d54,8fa50024 +3483d58,8fa40020 +3483d5c,8fbf001c +3483d60,4602003c +3483d64,27bd0030 +3483d68,3e00008 +3483d70,27bdffd0 +3483d74,afbf001c +3483d78,afa40020 +3483d7c,afa50024 +3483d80,e7a40028 +3483d84,e7a6002c +3483d88,4606203c +3483d90,45000003 +3483d98,c101011 +3483da0,34060014 +3483da4,3407000a +3483da8,44801000 +3483dac,c7a6002c +3483db0,c7a40028 +3483db4,8fa50024 +3483db8,8fa40020 +3483dbc,8fbf001c +3483dc0,4606203c +3483dc4,27bd0030 +3483dc8,3e00008 +3483dd0,c101074 +3483dd8,8fbf001c +3483ddc,27bd0020 +3483de0,3e00008 +3483dec,27bdffe8 +3483df0,afbf0014 +3483df4,c008ab4 +3483dfc,8fbf0014 +3483e00,27bd0018 +3483e04,8fa40018 +3483e08,8c8a0138 +3483e0c,8d4a0010 +3483e10,25431618 +3483e14,3c088040 +3483e18,81083de8 +3483e1c,1100000a +3483e20,3c098012 +3483e24,2529a5d0 +3483e28,95281406 +3483e2c,290105dc +3483e30,14200005 +3483e34,9488029c +3483e38,31080002 +3483e3c,15000002 +3483e44,254314d0 +3483e48,3e00008 +3483e50,3c188012 +3483e54,2718a5d0 +3483e58,8f180004 +3483e5c,17000003 +3483e64,3c0a8041 +3483e68,254a0d20 +3483e6c,24780008 +3483e70,3e00008 +3483e74,adf802c0 +3483e78,3c0f8012 +3483e7c,25efa5d0 +3483e80,8def0004 +3483e84,15e00003 +3483e8c,3c0e8041 +3483e90,25ce0d20 +3483e94,ac4e0004 +3483e98,3e00008 +3483e9c,820f013f +3483ea4,3c088040 +3483ea8,81083ea0 +3483eac,11000007 +3483eb0,3c09801d +3483eb4,252984a0 +3483eb8,8d281d44 +3483ebc,31080002 +3483ec0,11000002 +3483ec8,34069100 +3483ecc,3e00008 +3483ed0,afa60020 +3483ed4,3c088040 +3483ed8,81083ea0 +3483edc,11000005 +3483ee0,3c09801d +3483ee4,252984a0 +3483ee8,8d281d44 +3483eec,35080002 +3483ef0,ad281d44 +3483ef4,3e00008 +3483ef8,34e74000 +3483f00,3c038012 +3483f04,2463a5d0 +3483f08,8c6e0004 +3483f0c,15c0000c +3483f10,24020005 +3483f14,24020011 +3483f18,3c088040 +3483f1c,81083efc +3483f20,11000007 +3483f24,3c09801d +3483f28,252984a0 +3483f2c,8d281d44 +3483f30,31080002 +3483f34,11000002 +3483f38,34020001 +3483f3c,34020003 +3483f40,3e00008 +3483f44,3c048010 +3483f48,3c088040 +3483f4c,81083efc +3483f50,11000005 +3483f54,3c09801d +3483f58,252984a0 +3483f5c,8d281d44 +3483f60,35080002 +3483f64,ad281d44 +3483f68,3e00008 +3483f6c,34e78000 +3483f70,27bdffe8 +3483f74,afa20010 +3483f78,afbf0014 +3483f7c,c1032d1 +3483f80,46000306 +3483f84,406821 +3483f88,8fa20010 +3483f8c,8fbf0014 +3483f90,3e00008 +3483f94,27bd0018 +3483f98,ac800130 +3483f9c,ac800134 +3483fa0,3c018012 +3483fa4,2421a5d0 +3483fa8,80280edc +3483fac,35080008 +3483fb0,a0280edc +3483fb4,3c013f80 +3483fb8,3e00008 +3483fbc,44813000 +3483fc0,3c038012 +3483fc4,910f014f +3483fc8,2463a5d0 +3483fcc,25ef0023 +3483fd0,9078008b +3483fd8,11f80003 3483fe0,3e00008 -3483fe8,24010016 -3483fec,17210003 -3483ff0,24010004 -3483ff4,3e00008 -3483ff8,8479001c +3483fe4,a100014f +3483fe8,3e00008 +3483ff0,24010016 +3483ff4,17210003 +3483ff8,24010004 3483ffc,3e00008 -3484000,240100f0 +3484000,8479001c +3484004,3e00008 +3484008,240100f0 3484010,3e00008 3484018,3c028041 348401c,8c43e950 @@ -14740,10 +14741,10 @@ fec1fc,9000000 348e358,3e00008 348e35c,27bd0048 348e360,3c028040 -348e364,a040350c +348e364,a0403514 348e368,3c028040 348e36c,3e00008 -348e370,ac403510 +348e370,ac403518 348e374,3c038041 348e378,3c028050 348e37c,24420000 diff --git a/data/generated/symbols.json b/data/generated/symbols.json index 6ad990191..f4693a421 100644 --- a/data/generated/symbols.json +++ b/data/generated/symbols.json @@ -1,20 +1,20 @@ { "ADULT_INIT_ITEMS": "03481ECC", "ADULT_VALID_ITEMS": "03481ED4", - "APPLY_BONK_DAMAGE": "0348309C", - "AUDIO_THREAD_INFO": "0348344C", - "AUDIO_THREAD_INFO_MEM_SIZE": "0348346C", - "AUDIO_THREAD_INFO_MEM_START": "03483468", + "APPLY_BONK_DAMAGE": "034830A4", + "AUDIO_THREAD_INFO": "03483454", + "AUDIO_THREAD_INFO_MEM_SIZE": "03483474", + "AUDIO_THREAD_INFO_MEM_START": "03483470", "AUDIO_THREAD_MEM_START": "03499340", "AUTO_TRACKER_CONTEXT": "03480D60", "AUTO_TRACKER_VERSION": "03480D60", "BOMBCHUS_IN_LOGIC": "03480D44", - "BONK_LAST_FRAME": "03482FE8", + "BONK_LAST_FRAME": "03482FF0", "CFG_A_BUTTON_COLOR": "03480844", "CFG_A_NOTE_COLOR": "03480862", "CFG_BOMBCHU_TRAIL_INNER_COLOR": "03480874", "CFG_BOMBCHU_TRAIL_OUTER_COLOR": "03480877", - "CFG_BONK_DAMAGE": "03482FE4", + "CFG_BONK_DAMAGE": "03482FE8", "CFG_BOOM_TRAIL_INNER_COLOR": "0348086E", "CFG_BOOM_TRAIL_OUTER_COLOR": "03480871", "CFG_B_BUTTON_COLOR": "0348084A", @@ -23,7 +23,7 @@ "CFG_C_BUTTON_COLOR": "03480850", "CFG_C_NOTE_COLOR": "03480868", "CFG_DAMAGE_MULTIPLYER": "03482F78", - "CFG_DEADLY_BONKS": "03482FE0", + "CFG_DEADLY_BONKS": "03482FE4", "CFG_DISPLAY_DPAD": "0348087A", "CFG_DUNGEON_INFO_ENABLE": "03480D64", "CFG_DUNGEON_INFO_MQ_ENABLE": "03480D68", @@ -54,9 +54,9 @@ "CFG_SHOP_CURSOR_COLOR": "0348085C", "CFG_SHOW_SETTING_INFO": "03480889", "CFG_TEXT_CURSOR_COLOR": "03480856", - "CHAIN_HBA_REWARDS": "03483DE0", - "CHECK_FOR_BONK_CANCEL": "0348304C", - "CHECK_ROOM_MESH_TYPE": "0348316C", + "CHAIN_HBA_REWARDS": "03483DE8", + "CHECK_FOR_BONK_CANCEL": "03483054", + "CHECK_ROOM_MESH_TYPE": "03483174", "CHEST_LENS_ONLY": "034828A4", "CHEST_SIZE_MATCH_CONTENTS": "03490DA0", "CHEST_SIZE_TEXTURE": "03490D9C", @@ -66,7 +66,7 @@ "COOP_VERSION": "03480020", "COSMETIC_CONTEXT": "03480834", "COSMETIC_FORMAT_VERSION": "03480834", - "CURRENT_GROTTO_ID": "0348330E", + "CURRENT_GROTTO_ID": "03483316", "DEBUG_OFFSET": "03482B68", "DISABLE_TIMERS": "03480D58", "DPAD_TEXTURE": "03493340", @@ -84,21 +84,21 @@ "GILDED_CHEST_BASE_TEXTURE": "03495B40", "GILDED_CHEST_FRONT_TEXTURE": "03494B40", "GOSSIP_HINT_CONDITION": "03480D48", - "GROTTO_EXIT_LIST": "034832CC", - "GROTTO_LOAD_TABLE": "03483248", + "GROTTO_EXIT_LIST": "034832D4", + "GROTTO_LOAD_TABLE": "03483250", "HIDE_CHEST_WITH_INVERTED_LENS": "034828F0", "INCOMING_ITEM": "03480028", "INCOMING_PLAYER": "03480026", "INITIAL_SAVE_DATA": "03480924", "JABU_ELEVATOR_ENABLE": "03480D50", "KAKARIKO_WEATHER_FORECAST": "03490E04", - "KING_DODONGO_BONKS": "03483138", + "KING_DODONGO_BONKS": "03483140", "LACS_CONDITION": "03480DA0", "LACS_CONDITION_COUNT": "03480DA6", - "MALON_GAVE_ICETRAP": "03483B1C", + "MALON_GAVE_ICETRAP": "03483B24", "MALON_TEXT_ID": "03480D57", "MAX_RUPEES": "03490DEA", - "MOVED_ADULT_KING_ZORA": "0348348C", + "MOVED_ADULT_KING_ZORA": "03483494", "MW_SEND_OWN_ITEMS": "0348002A", "NO_ESCAPE_SEQUENCE": "03490DB0", "OCARINAS_SHUFFLED": "03480D51", @@ -117,12 +117,12 @@ "RAINBOW_BRIDGE_CONDITION": "03480D9C", "RAINBOW_BRIDGE_COUNT": "03480DA4", "RANDO_CONTEXT": "03480000", - "SET_BONK_FLAG": "03483020", + "SET_BONK_FLAG": "03483028", "SHOW_CHEST_WITH_INVERTED_LENS": "03482968", - "SHUFFLE_BEANS": "034831A4", - "SHUFFLE_CARPET_SALESMAN": "03483E98", + "SHUFFLE_BEANS": "034831AC", + "SHUFFLE_CARPET_SALESMAN": "03483EA0", "SHUFFLE_COWS": "03480D53", - "SHUFFLE_MEDIGORON": "03483EF4", + "SHUFFLE_MEDIGORON": "03483EFC", "SILVER_CHEST_BASE_TEXTURE": "03497340", "SILVER_CHEST_FRONT_TEXTURE": "03496340", "SKULL_CHEST_BASE_TEXTURE": "03498B40", @@ -132,13 +132,13 @@ "SPECIAL_DEAL_COUNTS": "03480DAC", "SPEED_MULTIPLIER": "03482A28", "SPOILER_AVAILABLE": "03480D5C", - "START_TWINROVA_FIGHT": "0348350C", + "START_TWINROVA_FIGHT": "03483514", "TIME_STRING_TXT": "03480900", "TIME_TRAVEL_SAVED_EQUIPS": "03481BF0", "TRIFORCE_HUNT_ENABLED": "03480DA8", "TRIFORCE_ICON_TEXTURE": "03493B40", "TRIFORCE_PIECES_REQUIRED": "03480DAA", - "TWINROVA_ACTION_TIMER": "03483510", + "TWINROVA_ACTION_TIMER": "03483518", "VERSION_STRING_TXT": "034808CC", "WINDMILL_SONG_ID": "03480D55", "WINDMILL_TEXT_ID": "03480D56", From 2207d24b8b1506d86d7a3af43b0a462a51422878 Mon Sep 17 00:00:00 2001 From: Cuphat Date: Sun, 18 Sep 2022 05:40:37 -0400 Subject: [PATCH 15/17] Use different RNG seed per world when patching ROMs. Fixes #1711. --- Main.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Main.py b/Main.py index ca8de35d6..5a4a4a19d 100644 --- a/Main.py +++ b/Main.py @@ -213,10 +213,16 @@ def make_spoiler(settings, worlds, window=dummy_window()): def prepare_rom(spoiler, world, rom, settings, rng_state=None, restore=True): - if restore: - rom.restore() if rng_state: random.setstate(rng_state) + # Use different seeds for each world when patching. + seed = int(random.getrandbits(256)) + for i in range(0, world.id): + seed = int(random.getrandbits(256)) + random.seed(seed) + + if restore: + rom.restore() patch_rom(spoiler, world, rom) cosmetics_log = patch_cosmetics(settings, rom) rom.update_header() @@ -323,6 +329,10 @@ def patch_and_output(settings, window, spoiler, rom): window.update_progress(65) restore_rom = False for world in worlds: + # If we aren't creating a patch file and this world isn't the one being outputted, move to the next world. + if not (settings.create_patch_file or world.id == settings.player_num - 1): + continue + if settings.world_count > 1: log_and_update_window(window, f"Patching ROM: Player {world.id + 1}") player_filename_suffix = f"P{world.id + 1}" @@ -330,10 +340,6 @@ def patch_and_output(settings, window, spoiler, rom): log_and_update_window(window, 'Patching ROM') player_filename_suffix = "" - # If we aren't creating a patch file and this world isn't the one being outputted, move to the next world. - if not (settings.create_patch_file or world.id == settings.player_num - 1): - continue - settings.disable_custom_music = settings.create_patch_file patch_cosmetics_log = prepare_rom(spoiler, world, rom, settings, rng_state, restore_rom) restore_rom = True From de3e38afc058b2fa29f843b2538c720dcd48ad6f Mon Sep 17 00:00:00 2001 From: Cuphat Date: Sun, 18 Sep 2022 23:20:15 -0400 Subject: [PATCH 16/17] Fix Enhanced Map/Compass on Glitched Logic This renames boss regions in Glitched Logic so that the Enhanced Maps/Compass part of #1641 works on Glitched Logic. --- data/Glitched World/Deku Tree.json | 12 ++++++++-- data/Glitched World/Dodongos Cavern.json | 10 +++++++- data/Glitched World/Fire Temple.json | 28 +++++++++++++++++------ data/Glitched World/Forest Temple.json | 16 +++++++++---- data/Glitched World/Jabu Jabus Belly.json | 12 ++++++++-- data/Glitched World/Shadow Temple.json | 14 +++++++++--- data/Glitched World/Spirit Temple.json | 14 +++++++++--- data/Glitched World/Water Temple.json | 14 +++++++++--- 8 files changed, 95 insertions(+), 25 deletions(-) diff --git a/data/Glitched World/Deku Tree.json b/data/Glitched World/Deku Tree.json index ca9ea714d..72ef4fc82 100644 --- a/data/Glitched World/Deku Tree.json +++ b/data/Glitched World/Deku Tree.json @@ -22,7 +22,7 @@ }, "exits": { "Deku Tree Slingshot Room": "here(has_shield)", - "Deku Tree Boss Room": "here(has_fire_source_with_torch()) or can_shield + "Deku Tree Boss Door": "here(has_fire_source_with_torch()) or can_shield or is_adult" } }, @@ -38,7 +38,15 @@ } }, { - "region_name": "Deku Tree Boss Room", + "region_name": "Deku Tree Boss Door", + "scene": "Deku Tree", + "dungeon": "Deku Tree", + "exits": { + "Queen Gohma Boss Room": "True" + } + }, + { + "region_name": "Queen Gohma Boss Room", "dungeon": "Deku Tree", "events": { "Deku Tree Clear": "(Nuts or can_use(Slingshot) or has_bombchus or can_use(Hookshot) or can_use(Bow) or can_use(Boomerang)) and diff --git a/data/Glitched World/Dodongos Cavern.json b/data/Glitched World/Dodongos Cavern.json index f85643215..b2b2353f8 100644 --- a/data/Glitched World/Dodongos Cavern.json +++ b/data/Glitched World/Dodongos Cavern.json @@ -63,10 +63,18 @@ or (can_live_dmg(0.5) and can_use(Hover_Boots)) or can_hover" }, "exits": { - "King Dodongo Boss Room": "has_explosives", + "Dodongos Cavern Boss Door": "has_explosives", "Dodongos Cavern Lobby": "True" } }, + { + "region_name": "Dodongos Cavern Boss Door", + "scene": "Dodongos Cavern", + "dungeon": "Dodongos Cavern", + "exits": { + "King Dodongo Boss Room": "True" + } + }, { "region_name": "King Dodongo Boss Room", "dungeon": "Dodongos Cavern", diff --git a/data/Glitched World/Fire Temple.json b/data/Glitched World/Fire Temple.json index 7b46428b2..c8e41cc6b 100644 --- a/data/Glitched World/Fire Temple.json +++ b/data/Glitched World/Fire Temple.json @@ -8,17 +8,12 @@ ((Small_Key_Fire_Temple, 8) or not keysanity) and (can_use(Megaton_Hammer) or can_use(Hookshot) or has_explosives)", "Fire Temple Boss Key Chest": "( ((Small_Key_Fire_Temple, 8) or not keysanity) and can_use(Megaton_Hammer)) or (can_mega and can_use(Hookshot))", - "Fire Temple Volvagia Heart": " - (can_use(Goron_Tunic) or (Fairy and has_explosives)) and can_use(Megaton_Hammer) and - (Boss_Key_Fire_Temple or at('Fire Temple Flame Maze', True))", - "Volvagia": " - (can_use(Goron_Tunic) or (Fairy and has_explosives)) and can_use(Megaton_Hammer) and - (Boss_Key_Fire_Temple or at('Fire Temple Flame Maze', True))", "Fire Temple GS Boss Key Loop": " ((Small_Key_Fire_Temple, 8) or not keysanity)" }, "exits": { - "Fire Temple Big Lava Room":"(Small_Key_Fire_Temple, 2)" + "Fire Temple Big Lava Room":"(Small_Key_Fire_Temple, 2)", + "Fire Temple Boss Door": "True" } }, { @@ -92,5 +87,24 @@ "Fire Temple Megaton Hammer Chest": "has_explosives or can_use(Megaton_Hammer)" } + }, + { + "region_name": "Fire Temple Boss Door", + "scene": "Fire Temple", + "dungeon": "Fire Temple", + "exits": { + "Volvagia Boss Room": "(Boss_Key_Fire_Temple or at('Fire Temple Flame Maze', True))" + } + }, + { + "region_name": "Volvagia Boss Room", + "scene": "Fire Temple", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple Volvagia Heart": " + (can_use(Goron_Tunic) or (Fairy and has_explosives)) and can_use(Megaton_Hammer)", + "Volvagia": " + (can_use(Goron_Tunic) or (Fairy and has_explosives)) and can_use(Megaton_Hammer)" + } } ] diff --git a/data/Glitched World/Forest Temple.json b/data/Glitched World/Forest Temple.json index 68ab4273d..285d6ed19 100644 --- a/data/Glitched World/Forest Temple.json +++ b/data/Glitched World/Forest Temple.json @@ -19,7 +19,7 @@ "Forest Temple Block Push Room": "(Small_Key_Forest_Temple, 1)", "Forest Temple Basement": "(Forest_Temple_Jo_and_Beth and Forest_Temple_Amy_and_Meg) or (can_use(Hover_Boots) and can_mega)", "Forest Temple Falling Room": "can_hover or (can_use(Hover_Boots) and Bombs and can_live_dmg(0.5))", - "Forest Temple Boss Room": "is_adult" + "Forest Temple Boss Door": "is_adult" } }, { @@ -37,7 +37,7 @@ ((can_use(Boomerang) or Nuts or Buy_Deku_Shield) and (Sticks or Kokiri_Sword or can_use(Slingshot))))", "Forest Temple Outside Upper Ledge": "can_hover or (can_use(Hover_Boots) and has_explosives and can_live_dmg(0.5))", - "Forest Temple Boss Room": "is_child and can_live_dmg(0.5)" + "Forest Temple Boss Door": "is_child and can_live_dmg(0.5)" } }, { @@ -147,11 +147,19 @@ "Forest Temple GS Basement": "can_use(Hookshot) or can_use(Boomerang) or can_hover" }, "exits":{ - "Forest Temple Boss Room": "Boss_Key_Forest_Temple" + "Forest Temple Boss Door": "Boss_Key_Forest_Temple" } }, { - "region_name": "Forest Temple Boss Room", + "region_name": "Forest Temple Boss Door", + "scene": "Forest Temple", + "dungeon": "Forest Temple", + "exits": { + "Phantom Ganon Boss Room": "True" + } + }, + { + "region_name": "Phantom Ganon Boss Room", "dungeon": "Forest Temple", "locations": { "Forest Temple Phantom Ganon Heart": "(can_use(Hookshot) or can_use(Bow)) or diff --git a/data/Glitched World/Jabu Jabus Belly.json b/data/Glitched World/Jabu Jabus Belly.json index 572fa7117..ed326d887 100644 --- a/data/Glitched World/Jabu Jabus Belly.json +++ b/data/Glitched World/Jabu Jabus Belly.json @@ -31,11 +31,19 @@ }, "exits": { "Jabu Jabus Belly Main": "True", - "Jabu Jabus Belly Boss Area": "can_use(Boomerang) or can_use(Hover_Boots) or can_mega" + "Jabu Jabus Belly Boss Door": "can_use(Boomerang) or can_use(Hover_Boots) or can_mega" } }, { - "region_name": "Jabu Jabus Belly Boss Area", + "region_name": "Jabu Jabus Belly Boss Door", + "scene": "Jabu Jabus Belly", + "dungeon": "Jabu Jabus Belly", + "exits": { + "Barinade Boss Room": "True" + } + }, + { + "region_name": "Barinade Boss Room", "dungeon": "Jabu Jabus Belly", "locations": { "Jabu Jabus Belly Barinade Heart": "can_use(Boomerang) and (Sticks or Kokiri_Sword)", diff --git a/data/Glitched World/Shadow Temple.json b/data/Glitched World/Shadow Temple.json index 2d9985f30..51795c881 100644 --- a/data/Glitched World/Shadow Temple.json +++ b/data/Glitched World/Shadow Temple.json @@ -16,7 +16,7 @@ "exits": { "Shadow Temple Entryway": "True", "Shadow Temple First Beamos": "can_use(Hover_Boots) or can_mega", - "Shadow Boss": "can_hover and has_explosives and can_use(Hover_Boots) and + "Shadow Temple Boss Door": "can_hover and has_explosives and can_use(Hover_Boots) and can_live_dmg(2.0)" } }, @@ -91,14 +91,22 @@ "Shadow Temple GS Triple Giant Pot": "True" }, "exits": { - "Shadow Boss": "(has_bombchus or can_use(Distant_Scarecrow) or Bow or + "Shadow Temple Boss Door": "(has_bombchus or can_use(Distant_Scarecrow) or Bow or (can_mega and can_use(Hover_Boots)) or can_hover) and (Boss_Key_Shadow_Temple or (has_explosives and is_adult)) and (can_mega or can_use(Hover_Boots)) and (Small_Key_Shadow_Temple, 5)" } }, { - "region_name": "Shadow Boss", + "region_name": "Shadow Temple Boss Door", + "scene": "Shadow Temple", + "dungeon": "Shadow Temple", + "exits": { + "Bongo Bongo Boss Room": "True" + } + }, + { + "region_name": "Bongo Bongo Boss Room", "dungeon": "Shadow Temple", "locations": { "Shadow Temple Bongo Bongo Heart": "True", diff --git a/data/Glitched World/Spirit Temple.json b/data/Glitched World/Spirit Temple.json index 63a6fb9ee..5e25f1759 100644 --- a/data/Glitched World/Spirit Temple.json +++ b/data/Glitched World/Spirit Temple.json @@ -94,7 +94,7 @@ can_hover or can_use(Hookshot)) and has_explosives", "Child Spirit Temple Climb": "True", - "Spirit Temple Boss": "can_use(Hookshot) and can_live_dmg(0.5) and Mirror_Shield and has_explosives", + "Spirit Temple Boss Door": "can_use(Hookshot) and can_live_dmg(0.5) and Mirror_Shield and has_explosives", "Early Adult Spirit Temple": "can_jumpslash or can_hover or can_use(Hookshot)" } }, @@ -156,12 +156,20 @@ "Spirit Temple Topmost Chest": "can_use(Mirror_Shield)" }, "exits": { - "Spirit Temple Boss": "can_use(Mirror_Shield)", + "Spirit Temple Boss Door": "can_use(Mirror_Shield)", "Spirit Temple Central Chamber": "can_use(Mirror_Shield) or can_use(Hookshot)" } }, { - "region_name": "Spirit Temple Boss", + "region_name": "Spirit Temple Boss Door", + "scene": "Spirit Temple", + "dungeon": "Spirit Temple", + "exits": { + "Twinrova Boss Room": "True" + } + }, + { + "region_name": "Twinrova Boss Room", "dungeon": "Spirit Temple", "locations": { "Spirit Temple Twinrova Heart": "True", diff --git a/data/Glitched World/Water Temple.json b/data/Glitched World/Water Temple.json index c6b3c9854..530c4b28e 100644 --- a/data/Glitched World/Water Temple.json +++ b/data/Glitched World/Water Temple.json @@ -5,7 +5,7 @@ "locations": {}, "exits": { "High Alcove": "is_adult or can_hover", - "Boss Area": "can_use(Longshot) or can_hover or (can_use(Hover_Boots) and (can_mega or Megaton_Hammer))", + "Water Temple Boss Door": "can_use(Longshot) or can_hover or (can_use(Hover_Boots) and (can_mega or Megaton_Hammer))", "Dark Link Area": "(at('High Alcove', can_play(Zeldas_Lullaby)) or (can_use(Hover_Boots) and (can_mega or Megaton_Hammer))) and (Small_Key_Water_Temple, 4)", @@ -29,7 +29,7 @@ "Boss Key Area": "is_adult and (Small_Key_Water_Temple, 4) and (can_use(Longshot) or can_hover or Hover_Boots)", - "Boss Area": "can_play(Zeldas_Lullaby) and can_use(Longshot)", + "Water Temple Boss Door": "can_play(Zeldas_Lullaby) and can_use(Longshot)", "Water Temple Lobby": "can_play(Zeldas_Lullaby)" } @@ -161,7 +161,15 @@ } }, { - "region_name": "Boss Area", + "region_name": "Water Temple Boss Door", + "scene": "Water Temple", + "dungeon": "Water Temple", + "exits": { + "Morpha Boss Room": "True" + } + }, + { + "region_name": "Morpha Boss Room", "dungeon": "Water Temple", "events": { "Water Temple Clear": "can_jumpslash and (can_hover or Boss_Key_Water_Temple)" From 84aadbf357384ef62cbe3063d7cf83d5bd7db9a5 Mon Sep 17 00:00:00 2001 From: Cuphat Date: Mon, 19 Sep 2022 03:29:18 -0400 Subject: [PATCH 17/17] Suggested Changes --- HintList.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/HintList.py b/HintList.py index 4a40e3e6a..d8cdae2f3 100644 --- a/HintList.py +++ b/HintList.py @@ -536,7 +536,7 @@ def tokens_required_by_settings(world): 'Haunted Wasteland Checks': ("deep in the #wasteland a spider and a chest# hold...^", None, 'dual'), 'Deku Tree MQ Basement GS': ("in the back of the #basement of the Great Deku Tree# two spiders hold...^", None, 'dual'), - 'Dodongos Cavern Upper Business Scrubs': ("in #Dodongo's Cavern a pair of scrubs# sell...^", None, 'dual'), + 'Dodongos Cavern Upper Business Scrubs': ("deep in #Dodongo's Cavern a pair of scrubs# sell...^", None, 'dual'), 'Dodongos Cavern MQ Larvae Room': ("amid #larvae in Dodongo's Cavern# a chest and a spider hold...^", None, 'dual'), 'Fire Temple Lower Loop': ("under the #entrance of the Fire Temple# a blocked path leads to...^", None, 'dual'), 'Fire Temple MQ Lower Loop': ("under the #entrance of the Fire Temple# a blocked path leads to...^", None, 'dual'), @@ -545,7 +545,7 @@ def tokens_required_by_settings(world): 'Water Temple North Basement Checks': ("the #northern basement of the Water Temple# contains...^", None, 'dual'), 'Water Temple MQ North Basement Checks': ("the #northern basement of the Water Temple# contains...^", None, 'dual'), 'Water Temple MQ Lower Checks': ("#a chest and a crate in locked basements# in the Water Temple hold...^", None, 'dual'), - 'Spirit Temple Colossus Hands': ("upon the #Colossus's hands# right and left hands lie...^", None, 'dual'), + 'Spirit Temple Colossus Hands': ("upon the #Colossus's right and left hands# lie...^", None, 'dual'), 'Spirit Temple Child Lower': ("between the #crawl spaces in the Spirit Temple# chests contain...^", None, 'dual'), 'Spirit Temple Child Top': ("on the path to the #right hand of the Spirit Temple# a chest and a spider hold...^", None, 'dual'), 'Spirit Temple Adult Lower': ("past a #silver block in the Spirit Temple# boulders and a melody conceal...^", None, 'dual'),