From 0d3feb33d1ac635c04d540c6ab3f6699d380f2ed Mon Sep 17 00:00:00 2001 From: codemann8 Date: Tue, 19 Aug 2025 10:19:30 -0500 Subject: [PATCH 1/8] Various ROM fixes - New chicken gfx - Fixed music silence in DR when straight stairs lead into pre-Aga room - Other various music fixes --- Rom.py | 2 +- data/base2current.bps | Bin 136510 -> 136569 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index 7401ce94..b9f4d68c 100644 --- a/Rom.py +++ b/Rom.py @@ -43,7 +43,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '94672b7a306b32c8a1d9e64f0e6a9be0' +RANDOMIZERBASEHASH = 'a197c4b7d1580bffd7f243fb750c6be0' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 1d85576143dae4b7ee0071b301a1a4f8949374fc..96400eded101d3b896000eb7935225cf7b9921d8 100644 GIT binary patch delta 2409 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 From 8372a8a9bf67988b6d22c2ed1ce0049d2e05cc78 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Tue, 19 Aug 2025 10:21:26 -0500 Subject: [PATCH 2/8] Changing hard-coded value to labeled value --- Rom.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Rom.py b/Rom.py index b9f4d68c..ed3d4571 100644 --- a/Rom.py +++ b/Rom.py @@ -1089,8 +1089,8 @@ def patch_rom(world, rom, player, team, is_mystery=False): 0x51, 0x00 if world.bombbag[player] else 0x06, 0x31 if world.bombbag[player] else 0x52, 0xFF, # 6 +5 bomb upgrades -> +10 bomb upgrade. If bombbag -> turns into Bombs (10) 0x53, 0x06, 0x54, 0xFF, # 6 +5 arrow upgrades -> +10 arrow upgrade 0x58, 0x01, 0x36 if world.bow_mode[player].startswith('retro') else 0x43, 0xFF, # silver arrows -> single arrow (red 20 in retro mode) - 0x3E, difficulty.boss_heart_container_limit, 0x47, 0xff, # boss heart -> green 20 - 0x17, difficulty.heart_piece_limit, 0x47, 0xff, # piece of heart -> green 20 + 0x3E, difficulty.boss_heart_container_limit, GREEN_TWENTY_RUPEES, 0xff, # boss heart -> green 20 + 0x17, difficulty.heart_piece_limit, GREEN_TWENTY_RUPEES, 0xff, # piece of heart -> green 20 0xFF, 0xFF, 0xFF, 0xFF, # end of table sentinel ]) From c3d6c96e79fed47a5cf43e8833688397bc1539aa Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 25 Aug 2025 11:21:44 -0500 Subject: [PATCH 3/8] Added customizer ability to change GT cutscene gfx --- Rom.py | 22 ++++++- Tables.py | 99 +++++++++++++++++++++++++++++++ data/base2current.bps | Bin 136569 -> 136642 bytes docs/Customizer.md | 26 +++++++- source/classes/CustomSettings.py | 5 ++ 5 files changed, 150 insertions(+), 2 deletions(-) diff --git a/Rom.py b/Rom.py index ed3d4571..d89de2a3 100644 --- a/Rom.py +++ b/Rom.py @@ -43,7 +43,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'a197c4b7d1580bffd7f243fb750c6be0' +RANDOMIZERBASEHASH = 'b8c930c1922fb15018c76be902cc15d9' class JsonRom(object): @@ -1642,6 +1642,26 @@ def patch_rom(world, rom, player, team, is_mystery=False): write_enemizer_tweaks(rom, world, player) write_strings(rom, world, player, team) + # gt entry + if world.customizer: + gtentry = world.customizer.get_gtentry() + if gtentry and player in gtentry: + gtentry = gtentry[player] + if 'cutscene_gfx' in gtentry: + gfx = gtentry['cutscene_gfx'] + if type(gfx) is str: + from Tables import item_gfx_table + if gfx.lower() == 'random': + gfx = random.choice(list(item_gfx_table.keys())) + if gfx in item_gfx_table: + write_int16(rom, snes_to_pc(0x3081AA), item_gfx_table[gfx][1] + (0x8000 if not item_gfx_table[gfx][0] else 0)) + rom.write_byte(snes_to_pc(0x3081AC), item_gfx_table[gfx][2]) + else: + logging.getLogger('').warning('Invalid name "%s" in customized GT entry cutscene gfx', gfx) + else: + write_int16(rom, snes_to_pc(0x3081AA), gfx[0]) + rom.write_byte(snes_to_pc(0x3081AC), gfx[1]) + # write initial sram rom.write_initial_sram() diff --git a/Tables.py b/Tables.py index 52f96488..33e1e230 100644 --- a/Tables.py +++ b/Tables.py @@ -146,3 +146,102 @@ bonk_prize_lookup = { 'Arrows (10)': (0xe2, 0, None), 'Fairy': (0xe3, 15, None) } + +# item name: (custom gfx, address offset, palette) +# decompressed gfx loaded at $7F8000 +# custom gfx loaded at $228000 +item_gfx_table = { + 'Green Rupees (20)': (False, 0x0000, 0x04), + 'Pegasus Boots': (False, 0x0040, 0x01), + 'Psuedoboots': (False, 0x0040, 0x02), + 'Blue Pendant': (False, 0x0080, 0x02), + 'Red Pendant': (False, 0x0080, 0x01), + 'Warp Tile': (False, 0x00C0, 0x04), + 'Open Chest': (False, 0x0100, 0x02), + 'Chicken': (False, 0x0140, 0x04), + 'Duck': (False, 0x0180, 0x01), + 'Chest': (False, 0x0400, 0x02), + 'Frog': (False, 0x0440, 0x04), + 'Kiki (Head)': (False, 0x0480, 0x04), + 'Purple Chest': (False, 0x0500, 0x04), + 'Super Bomb': (False, 0x0540, 0x04), + 'Blacksmith': (False, 0x0580, 0x04), + 'Bug Net': (False, 0x0860, 0x01), + 'Crystal': (False, 0x08A0, 0x06), + 'Silver Arrows': (False, 0x08E0, 0x01), + 'Bow': (False, 0x0920, 0x02), + 'Bottle (Fairy)': (False, 0x0960, 0x02), + 'Bottle (Bee)': (False, 0x09A0, 0x02), + 'Piece of Heart': (False, 0x0C00, 0x01), + 'Ocarina': (False, 0x0C40, 0x02), + 'Mirror Shield': (False, 0x0C80, 0x04), + 'Rupees (100)': (False, 0x0D20, 0x04), + 'Rupees (50)': (False, 0x0D60, 0x04), + 'Rupees (300)': (False, 0x0DA0, 0x04), + 'Flippers': (False, 0x1000, 0x02), + 'Mirror': (False, 0x1040, 0x02), + 'Bomb': (False, 0x1080, 0x02), + 'Lamp': (False, 0x10C0, 0x01), + 'Psuedolamp': (False, 0x10C0, 0x02), + 'Magic Cape': (False, 0x1100, 0x01), + 'Compass': (False, 0x1140, 0x02), + 'Moon Pearl': (False, 0x1180, 0x01), + 'Ether': (False, 0x1400, 0x04), + 'Bombos': (False, 0x1440, 0x04), + 'Quake': (False, 0x1480, 0x04), + 'Bottle': (False, 0x14C0, 0x01), + 'Bottle (Red Potion)': (False, 0x1500, 0x01), + 'Bottle (Green Potion)': (False, 0x1500, 0x04), + 'Bottle (Blue Potion)': (False, 0x1500, 0x02), + 'Mushroom': (False, 0x1540, 0x04), + 'Map': (False, 0x1580, 0x04), + 'Big Key': (False, 0x15C0, 0x04), + 'Bombs (3)': (False, 0x1840, 0x02), + 'Arrows (10)': (False, 0x1880, 0x02), + 'Heart Container': (False, 0x18C0, 0x01), + 'Green Mail': (False, 0x1900, 0x04), + 'Blue Mail': (False, 0x1900, 0x02), + 'Red Mail': (False, 0x1900, 0x01), + 'Fire Sheild': (False, 0x1980, 0x04), + 'Blue Shield': (False, 0x19C0, 0x02), + 'Magic Powder': (False, 0x1CC0, 0x02), + 'Bombs (10)': (False, 0x1D00, 0x02), + 'Power Glove': (False, 0x1D40, 0x01), + 'Titans Mitts': (False, 0x1D40, 0x04), + 'Book of Mudora': (False, 0x1D80, 0x04), + 'Maiden (Head)': (False, 0x2000, 0x04), + 'Zelda (Head)': (False, 0x2080, 0x04), + 'Old Man (Head)': (False, 0x2140, 0x04), + 'Locksmith (Head)': (False, 0x2180, 0x04), + 'Fire': (False, 0x25C0, 0x04), + 'Apples': (False, 0x30A0, 0x04), + 'Fairy': (False, 0x3140, 0x01), + 'Whirlpool': (False, 0x31C0, 0x01), + + 'Triforce': (True, 0x0060, 0x04), + 'Fighter Sword': (True, 0x00A0, 0x02), + 'Master Sword': (True, 0x00E0, 0x02), + 'Tempered Sword': (True, 0x0120, 0x01), + 'Golden Sword': (True, 0x0160, 0x04), + 'Half Magic': (True, 0x01A0, 0x04), + 'Quarter Magic': (True, 0x01E0, 0x04), + 'Bomb Upgrade (+5)': (True, 0x0420, 0x04), + 'Bomb Upgrade (+10)': (True, 0x0460, 0x04), + 'Bomb Upgrade (50)': (True, 0x04A0, 0x04), + 'Bombbag': (True, 0x04E0, 0x02), + 'Arrow Upgrade (+5)': (True, 0x0520, 0x02), + 'Arrow Upgrade (+10)': (True, 0x0560, 0x02), + 'Arrows (70)': (True, 0x05A0, 0x02), + 'Silver Arrows (Ag)': (True, 0x05E0, 0x01), + 'Green Pendant': (True, 0x0820, 0x04), + 'Sword and Shield': (True, 0x0860, 0x02), + 'Green Potion': (True, 0x08A0, 0x04), + 'Blue Potion': (True, 0x08E0, 0x02), + 'Red Potion': (True, 0x0920, 0x01), + 'Bee Trap': (True, 0x0960, 0x02), + 'Red Crystal': (True, 0x0C60, 0x01), + 'Egg': (True, 0x1020, 0x02), + 'Master Key': (True, 0x1060, 0x02), + 'Lumberjack (Head)': (True, 0x11A0, 0x02), + 'Power Star': (True, 0x11E0, 0x04), +} diff --git a/data/base2current.bps b/data/base2current.bps index 96400eded101d3b896000eb7935225cf7b9921d8..a4f36a67e3c39cbe5773b587971657fc3634e34f 100644 GIT binary patch delta 6988 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 D-?`0E delta 6902 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 diff --git a/docs/Customizer.md b/docs/Customizer.md index c184aae3..6c6e81ad 100644 --- a/docs/Customizer.md +++ b/docs/Customizer.md @@ -347,4 +347,28 @@ prices: Dark Death Mountain Shop - Middle: 150 Dark Death Mountain Shop - Right: 300 Dark Lake Hylia Shop - Left: 200 -``` \ No newline at end of file +``` + +### gt_entry + +This must be defined by player. This is where you are able to customize aspects of GT entry + +#### cutscene_gfx + +This is where you can define custom GFX to be used in the GT entry cutscene. For convenience, there are a number of pre-defined names that can be used to indicate already known GFX values built into the ROM. There are too many to list, but a full list can be found in `item_gfx_table` in `Tables.py`. You can also use `Random` and it will take a random one from the aforementioned table. + +``` +gt_entry: + 1: + cutscene_gfx: Mirror Shield +``` + +Alternatively, you may also supply a custom address and palette ID, respectively, if you are injecting your own personal custom GFX into the ROM. + +``` +gt_entry: + 1: + cutscene_gfx: + - 0x8140 + - 0x04 +``` diff --git a/source/classes/CustomSettings.py b/source/classes/CustomSettings.py index 539b9c06..0b421fca 100644 --- a/source/classes/CustomSettings.py +++ b/source/classes/CustomSettings.py @@ -298,6 +298,11 @@ class CustomSettings(object): if 'enemies' in self.file_source: return self.file_source['enemies'] return None + + def get_gtentry(self): + if 'gt_entry' in self.file_source: + return self.file_source['gt_entry'] + return None def get_attribute_by_player_composite(self, attribute, player): From 802a75c2a39e6a8669c36dbd961c6d2963c65329 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 25 Aug 2025 11:21:58 -0500 Subject: [PATCH 4/8] Small doc fix --- docs/Customizer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Customizer.md b/docs/Customizer.md index 6c6e81ad..0113a501 100644 --- a/docs/Customizer.md +++ b/docs/Customizer.md @@ -334,7 +334,7 @@ drops: Prize packs expect a list of eight items each (anything not specified will be whatever randomization would have normally occurred). The special drops expect a single item. Packs 1 through 7 are supported. Prize pack 0 is not customizable. -## prices +### prices This must be defined by player. You may have the prices of items in shops defined using the following From b80bed085360b70e34ba6682d32d2b4ec7bd7cff Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 25 Aug 2025 12:31:11 -0500 Subject: [PATCH 5/8] Fix issue with Mystery subweights not correctly evaluating boolean settings --- source/tools/MysteryUtils.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/source/tools/MysteryUtils.py b/source/tools/MysteryUtils.py index 73d600e2..c7d811e3 100644 --- a/source/tools/MysteryUtils.py +++ b/source/tools/MysteryUtils.py @@ -16,6 +16,16 @@ def get_weights(path): return yaml.load(urllib.request.urlopen(path), Loader=yaml.FullLoader) def roll_settings(weights): + while True: + subweights = weights.get('subweights', {}) + if len(subweights) == 0: + break + chances = ({k: int(v['chance']) for (k, v) in subweights.items()}) + subweight_name = random.choices(list(chances.keys()), weights=list(chances.values()))[0] + subweights = weights.get('subweights', {}).get(subweight_name, {}).get('weights', {}) + subweights['subweights'] = subweights.get('subweights', {}) + weights = {**weights, **subweights} + def get_choice(option, root=None): root = weights if root is None else root if option not in root: @@ -65,16 +75,6 @@ def roll_settings(weights): return default return choice - while True: - subweights = weights.get('subweights', {}) - if len(subweights) == 0: - break - chances = ({k: int(v['chance']) for (k, v) in subweights.items()}) - subweight_name = random.choices(list(chances.keys()), weights=list(chances.values()))[0] - subweights = weights.get('subweights', {}).get(subweight_name, {}).get('weights', {}) - subweights['subweights'] = subweights.get('subweights', {}) - weights = {**weights, **subweights} - ret = argparse.Namespace() ret.algorithm = get_choice('algorithm') From 18a8f98ff6502a2a7aaf2c96339501f9174e9eef Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 25 Aug 2025 12:34:49 -0500 Subject: [PATCH 6/8] Version bump 0.6.0.6 --- CHANGELOG.md | 7 +++++++ OverworldShuffle.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39dc836e..a833eaec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## 0.6.0.6 +- Added ability to change GT entry cutscene GFX thru customizer +- Chicken as a standing item is no longer a star gfx +- Fix issue in DR with music silence in pre-Aga room +- Other various music fixes +- Fixed issue with Mystery subweights not correctly evaluating boolean settings + ## 0.6.0.5 - Emergency fix for map/key totals in non-DR diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 8144fc4a..fb601567 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -8,7 +8,7 @@ from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitType from OverworldGlitchRules import create_owg_connections from Utils import bidict -version_number = '0.6.0.5' +version_number = '0.6.0.6' # branch indicator is intentionally different across branches version_branch = '-u' From 062afa75b565fdc5cd57821f13bf3fe2e273d525 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 25 Aug 2025 15:21:23 -0500 Subject: [PATCH 7/8] Fix for GT cutscene GFX --- Rom.py | 2 +- data/base2current.bps | Bin 136642 -> 136642 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index d89de2a3..faf0b6c3 100644 --- a/Rom.py +++ b/Rom.py @@ -43,7 +43,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'b8c930c1922fb15018c76be902cc15d9' +RANDOMIZERBASEHASH = '93386b05ee4b5de6b9165941b9e14e97' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index a4f36a67e3c39cbe5773b587971657fc3634e34f..3ac6a7ce81674927ee8d2e3aaa19e8698204ca37 100644 GIT binary patch delta 39 xcmV+?0NDS+s|doY2(T&x18p9XgDnHMEdv3P76A{pz!?Gh`v}e{(oCI0hNv0)4(tE` delta 39 vcmX@Kn&Z%FjtyGO%)WA)nsu4C>oPM=5@Xcgen67(*KdxUS(BJN`ug(#8BGpz From d70ca29d62d4d75d0aa09f769ca82271608b4b74 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 25 Aug 2025 15:22:50 -0500 Subject: [PATCH 8/8] Version bump 0.6.0.7 --- CHANGELOG.md | 3 +++ OverworldShuffle.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a833eaec..28128e2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 0.6.0.7 +- Emergency fix for GT cutscene GFX + ## 0.6.0.6 - Added ability to change GT entry cutscene GFX thru customizer - Chicken as a standing item is no longer a star gfx diff --git a/OverworldShuffle.py b/OverworldShuffle.py index fb601567..3d28147b 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -8,7 +8,7 @@ from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitType from OverworldGlitchRules import create_owg_connections from Utils import bidict -version_number = '0.6.0.6' +version_number = '0.6.0.7' # branch indicator is intentionally different across branches version_branch = '-u'