From 0c50e08cdc736afe4f6c9b8c2271166e3548480d Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 20 Nov 2025 10:12:56 -0700 Subject: [PATCH] feat: rom fixups, update docs --- PastReleaseNotes.md | 10 ++++++++++ RELEASENOTES.md | 24 +++++++++++++----------- Rom.py | 2 +- data/base2current.bps | Bin 118191 -> 118335 bytes docs/Customizer.md | 4 +++- 5 files changed, 27 insertions(+), 13 deletions(-) diff --git a/PastReleaseNotes.md b/PastReleaseNotes.md index fa8d1286..dbdc2f12 100644 --- a/PastReleaseNotes.md +++ b/PastReleaseNotes.md @@ -5,6 +5,16 @@ # Patch Notes Changelog archive +* 1.4.11 + * Rom fixes (all thanks to Codemann, I believe) + * Pot bug when at sprite limit + * Kodongo AI vanilla in vanilla rooms + * Issue with music silencing across certain room transitions + * Glitched: Some HMG logic fixed. Thanks Muffins! (Sorry it took me forever to get this PR in) + * Glitched: Blind fight VRAM fix. Thanks Mufffins! + * Text: Updated tourney winners. Thanks clearmouse! + * Enemizer: Banned Swamola enemy everywhere as they may be causing crashes + * Enemizer: Enemy bans from Q2 and Q3. Thank you for all the reports. * 1.4.10 * Logic: Changed the rule surrounding the Bumper Cave Ledge Drop (the murderdactyl) to only require Pearl AND (Cape OR Byrna OR a Sword) in OHKO mode for now. This is a temporary solution until a better way to prevent needing to use a framerule to get past the bird is invented. * Helmacopter Fix. diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 9e672645..cdcadb7b 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,13 +1,15 @@ # Patch Notes -* 1.4.11 - * Rom fixes (all thanks to Codemann, I believe) - * Pot bug when at sprite limit - * Kodongo AI vanilla in vanilla rooms - * Issue with music silencing across certain room transitions - * Glitched: Some HMG logic fixed. Thanks Muffins! (Sorry it took me forever to get this PR in) - * Glitched: Blind fight VRAM fix. Thanks Mufffins! - * Text: Updated tourney winners. Thanks clearmouse! - * Enemizer: Banned Swamola enemy everywhere as they may be causing crashes - * Enemizer: Enemy bans from Q2 and Q3. Thank you for all the reports. - +* 1.5.0 + * Logic: Fixed vanilla key logic for GT basement + * Enemy Drop: Added "spies" and shadows for hidden enemies when enemy drop shuffled is enabled + * Keysanity/Keydrop Menu for DR: + * Map is no longer required to see key counts for dungeons if not shuffled. This information is available right away in the menu. + * The key counter on the HUD for the current dungeon now accounts for keys from enemies or pots that are from vanilla key locations. + * The first number on the HUD represents all keys collected either in that dungeon or elsewhere. + * The second number on the HUD is the total keys that can be collected either in that dungeon or elsewhere. + * The key counter on inside the Menu is unchanged. (At the bottom near A button items) + * The first number in the Menu is the current number of keys in your inventory + * The second number is how many keys left to find in chests (not those from pots/enemies unless those item pools are enabled) + * Customizer: free_lamp_cone option added. The logic will account for this, and place the lamp without regard to dark rooms. + * Customizer: force_enemy option added that makes all enemies the specified type if possible. There are known gfx glitches in the overworld. diff --git a/Rom.py b/Rom.py index ec343ee7..e578b626 100644 --- a/Rom.py +++ b/Rom.py @@ -42,7 +42,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'f327962e7f2872c80fd75b35c6f2c985' +RANDOMIZERBASEHASH = '53a99b36f47fcb81c372d03e3559c590' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index f2b1f9252dcd8bf45d222cc667e40bebec06f83d..10648e5996a60f78b6841926803221e6af09f7d3 100644 GIT binary patch delta 6049 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 E{|{Yy;Q#;t delta 5811 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 ma*FEWZE!@yF~