From c3d6c96e79fed47a5cf43e8833688397bc1539aa Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 25 Aug 2025 11:21:44 -0500 Subject: [PATCH] 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):