From 1b904605c1c8c73ae27e1359585edb2d4623148a Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 13 May 2025 14:28:55 -0600 Subject: [PATCH 01/14] fix: Helmacopter fix --- CHANGELOG.md | 2 + Main.py | 2 +- PastReleaseNotes.md | 425 +++++++++++++++++++++++++++++++++++ RELEASENOTES.md | 10 +- source/enemizer/Bossmizer.py | 2 + 5 files changed, 432 insertions(+), 9 deletions(-) create mode 100644 PastReleaseNotes.md diff --git a/CHANGELOG.md b/CHANGELOG.md index cb0b711a..6d9c32af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +(Note: these will be moving to PastReleaseNotes.md) + # Feature Notes 1.4.3: File Select/End Game screen: Mirror Scroll and Pseudoboots added (Thanks Hiimcody!) diff --git a/Main.py b/Main.py index fa45699e..225a74d4 100644 --- a/Main.py +++ b/Main.py @@ -38,7 +38,7 @@ from source.enemizer.DamageTables import DamageTable from source.enemizer.Enemizer import randomize_enemies from source.rom.DataTables import init_data_tables -version_number = '1.4.9' +version_number = '1.4.10' version_branch = '-u' __version__ = f'{version_number}{version_branch}' diff --git a/PastReleaseNotes.md b/PastReleaseNotes.md new file mode 100644 index 00000000..68b6b381 --- /dev/null +++ b/PastReleaseNotes.md @@ -0,0 +1,425 @@ +# Past Feature Notes + +1.4.3: File Select/End Game screen: Mirror Scroll and Pseudoboots added (Thanks Hiimcody!) + +# Patch Notes + +Changelog archive + +* 1.4.9 + * Attempted fix for Moth conveyor room timing. Thanks for many people's input. Unsure if Helmacopter is still acceptable. + * Mirror scroll will show up on file start screen if enabled (thanks Clearmouse!) + * Fixes for HMG by Muffins + * Various fixes for Enemizer by Codemann (gfx fixes, more randomization options) + * Vanilla door shuffle prevents big key doors changes from door_type_mode + * Couple of minor fixes to custom generation. Deals with a complete specification of all dungeons + * Various enemizer bans for blocked paths (thanks to all the reports, Q1 2025) +* 1.4.8.1 + - Fixed broken doors generation + - Fixed bomb/arrow upgrade ignoring custom pricing + - Extended `money_balance` to apply to price balancing for non-custom shops. +* 1.4.8 + - New option: Mirror Scroll - to add the item to the starting inventory in non-doors modes (Thanks Telethar!) + - Customizer: Ability to customize shop prices and control money balancing. `money_balance` is a percentage betwen 0 and 100 that attempts to ensure you have that much percentage of money available for purchases. (100 is default, 0 essentially ignores money considerations) + - Fixed a key logic bug with decoupled doors when a big key door leads to a small key door (the small key door was missing appropriate logic) + - Fixed an ER bug where Bonk Fairy could be used for a mandatory connector in standard mode (boots could allow escape to be skipped) + - Fixed an issue with flute activation in rain mode. (thanks Codemann!) + - Fixed an issue with enemies in TR Dark Ride room not requiring Somaria. (Refactored the room for decoupled logic better) + - More HMG fixes by Muffins + - Fixed an issue with multi-player HMG + - Fixed an issue limiting number of items specified in the item pool on the GUI + - Minor documentation fixes (thanks Codemann!) +* 1.4.7.2 + - Fixed an issue with shuffle_ganon/fix_gtower_exit causing a generation failure + - More HMG fixes by Muffins +* 1.4.7.1 + - Fixed an issue with the repaired "beemizer" setting not being backwards compatible +* 1.4.7 + - Fixed generation error with Big Key in starting inventory (thanks Cody!) + - HMG/NL logic fixes by Muffins + - Enemizer: Disabled Walking Zora in the UW due to crash with Swamola (they ignore a lot of collison anyway) + - Enemizer: Fixed an issue with enemizer bush sprites + - Enemizer: Banned new Mimics from being the randomized bush sprite due to crash + - "Beatable" or "accessibility: none" can now use randomized trap doors to seal off entire parts of dungeons (was intended, bug prevented the logic skip) + - Logic error with enemizer and standard should use new enemy logic rules + - Fixed a bug with the inconsistent treatment of the beemizer setting + - Fixed an issue with returning Blacksmith in Simple shuffle (when blacksmith is at Link's House) + - Fixed an issue with dark sanctuary spawn at tavern north door (thanks Codemann!) + - Various enemy bans for the last few months +* 1.4.6 + - Restores original Sanc & Quit behavior, if Aga1 is not dead, then no quick pyramid warp + - Fixed problem with Lite/Lean shuffling some fairy caves unnecessarily + - The 300 Rupees item is now marked as priority, so it will not be used as GT junk fill (this matches a change in the VT randomizer) + - Murahdahla is now logically accessible in inverted mode as a bunny. May affect some beatable-only TFH seeds by allowing Moon Pearl to be inaccessible. + - Fixed an issue around PreferredLocationGroups in customizer which would not work with pre-activated Ocraina or priority items. + - Minor fix on triforce text + - Enemy bans for poor placements +* 1.4.5 + - Logic: Added appropriate enemy logic to GT Mimics 1 and 2 rooms + - Logic: Added appropriate enemy logic to Mire 2 room. Note this does change the default logical strats, due to how enemy kill logic works. + - Ice Rod + 1 Bomb is now out of logic + - Fire Rod + 1 Bomb is now out of logic + - Fire Rod + 1 magic extension is still in logic + - Byrna + 1 magic extension is newly in logic + + (One magic extension is either half magic or a bottle with the ability to purchase a blue or green potion) In general, making up for a lack of magic extension with a few bombs is something that could be added to the logic. Using the ice rod to freeze an enemy and then using that enemy to deal blunt damage and then using bombs to clear the frozen enemy is another strategy that could be added to the logic someday. If these are important to you, let me know. + - Generation: Fixed an issue with dungeonsfull shuffle +* 1.4.4 + - Fixed a crash near the end of the credits when total collection rate was over 1000 +* 1.4.3 + * Key Logic Algorithm: Renamed "Default" to "Dangerous" to indicate the potential soft-lock issues + * Hera Basement Cage: Fix for small key counting multiple times (again) + * Generation: Fixed several generation problems with ER and intensity 3 + * Customizer: Generation bug when attempting to place small keys + * Hints: Updated pedestal/tablet text to be more clear + * Enemizer: Various enemy bans +* 1.4.2 + * New ER Options: + * [Skull Woods shuffle options](#skull-woods-shuffle) + * [New option](#linked-drops-override) to override linked drop down behavior + * Customizer: You can now start with a "RandomWeapon" in the start inventory section + * Customizer: You may now start with "Big Magic" or "Small Magic" items + * Customizer: Suppress warning for missing items if they are in start inventory + * MultiClient: change default port to 23074 for newer SNI versions + * Generation: Fixed typo causing ER gen failure with Bomb Shop at Graveyard Ledge +* 1.4.1.12u + * New Entrance Shuffle Algorithm no longer experimental + * Back of Tavern Shuffle now on by default + * Enemizer: Wallmasters banned from tiles where spiral staircases are. (Softlock issue) + * Packaged build of unstable now available + * Customizer: New PreferredLocationGroup for putting a set of items in a set of locations. See customizer docs. + * Customizer: Fixed an issue with starting with `Ocarina` and flute_mode is active + * Spoiler: Some reformatting. Crystal req. for GT/Ganon moved to requirements section so randomized requirements don't show up in the meta section + * Algorithm: Major_Only. Supports up to 16 extra locations (the visible heart pieces) for when major item count exceeds major location count. Examples: Triforce Hunt, Trinity (Triforce on Ped), Bombbag shuffle + * Fix: HC Big Key drop doesn't count on Basic Doors + * Fix: Small Key for this dungeon in Hera Basement doesn't count twice for the key counter + * Fix: All cross-dungeon modes with restrict boss items should require map/compass for the boss + * Fixed a small bug with traversal algorithm + * Enemizer: Enemy bans+ +* 1.4.1.11u + * New Feature: Several spoiler levels added: None, Settings-only, Semi, Full, Debug + * Semi includes only entrances, prizes, and medallions (potential new spoiler mode being worked on, definition may change) + * Entrance: Lite/Lean support enemy drop shuffle + * Standard: Re-added tutorial guard near large rock + * Enemizer + * Fixed the overwriting of bonk fairies + * Fixed broken graphics on hyrule castle + * Enemy bans + * Customizer: Fixed bug with customizing prize packs +* 1.4.1.10u + * Vanilla key logic: Fix for vanilla layout Misery Mire which allows more complex key logic. Locations blocked by crystal switch access are only locked by 2 keys thanks to that being the minimum in Mire to reach one of two crystal switches. + * Autotracking: Fix for chest turn counter with chest containing multiworld items (Thanks Hiimcody) + * Enemizer: Enemy bans + * Rom: Code prettification and fixing byte designations by Codemann + * Support added for BPS patches via jsonout setting (Thanks Veetorp!) +* 1.4.1.9u + * Enemy Drop Underworld: Changed enemy drop indicator to not require compass + * Experimental: Moved dark world bunny spawns out of experimental. (It is now always on) + * Fix: Red/Blue pendants were swapped for autotracking. (Thanks Muffins!) + * Fix: Red square sometimes wasn't blinking + * Updated tournament winners + * Enemizer: Enemy bans +* 1.4.1.8u + * HUD: New dungeon indicators based on common abbreviations + * OWG+HMG: EG is allowed to be armed + * Drop Shuffle: Fixed an issue with minor drops counting for the wrong dungeon + * Enemizer: Trinexx ice breath should be properly disabled if Trinexx is located outside of Turtle Rock + * Enemizer: Enemy bans +* 1.4.1.7u + * Some bugs around Triforce Pieces smoothed out + * Enemizer: No exception for mimics/eyegores in vanilla rooms if enemy logic is turned to off + * Enemizer: Various enemy bans +* 1.4.1.6u + * Difficulty: Fixed some issues around item caps not being respected + * Enemezier: Tutorial guards remove from South Kakariko + * Map: Pendant colors fixed + * Minor rom code cleanup + * Enemizer: Hovers added to problematic pool near pits. Some other bans +* 1.4.1.5u + * Major Fix: Problem with Ganon's Room sprites + * HMG: Remove extra Swamp Smalls in the pool due to pottery settings + * Enemizer: Couple enemy bans +* 1.4.1.4u + * Logic: Fixed logic bugs surrounding dynammic doors missing logic from big keys and other door types + * Inverted: Castle warp should not appear after defeating Aga 1 + * Enemzier: Fixed a crash with cached sprites Zora/Swamola +* 1.4.1.3v + * Enemizer: Raven/Murderdactyls using the correct damage table + * Enemzier: Boss drops only center when boss shuffle is on +* 1.4.1.2v + * Expert/Hard Item Pool: Capacity fairy no longer gives out free crystal + * Vanilla door + Universal Keys: Generation fixed + * Boss Shuffle: Generation fixed (thanks Codemann for easy solution) + * Vanilla ER: No need for ability to check prizes on keysanity menu + * Swapped ER: Possible generation issue fixed (thanks Codemann) + * Enemizer: Roller ban + * Performance: Faster text boxes. Thanks Kan! +* 1.4.1.1v + * Logic: Moon pearl logic respects blocked doors +* 1.4.1.0v + * World Model Refactor: The overworld has been split up by screen, brings OR and DR a bit closer together in the model sense. A few OWG clips have been rewritten to fit into this new logic better. + * Logic: New logic for some bosses on ice + * Helmasaur on Ice: Bombs for mask, sword or arrows for 2nd phase + * Blind on Ice: Beam sword, Somaria, or Byrna plus magic extension for damage. Red shield or Byrna for protection. + * Kholdstare on Ice: Three options (after cracking the shell) + * Beam sword + * Fire Rod with 1.5 magic extensions + * Fire Rod & Bombos & any Sword & 1 Magic Extension + * Vitreous on Ice: Arrows and Bombs or a Beam Sword + * Trinexx on Ice: Boots always required for dodging. Damage options: + * Gold sword + * Tempered sword with magic extension + * Hammer or Master sword with 3 magic extensions (Rod spam for elemental heads, non-ideal weapon for last phase) + * Trinexx on Ice forbidden in doors seeds until we can model some health requirements. Low health Trinexx still isn't realistically feasible (bascially playing OHKO) + * Logic: Added silver arrows as Arrghus damage option when item functionality is not set to hard or expert + * Logic: Byrna not in logic for laser bridge when item functionality is set to hard or expert + * Enemizer Damage Rework: + * Shuffled: Actually shuffles the damage groups in the table instead of picking random numbers and reducing for mails from there. Enemies will still be assigned to a damage group randomly. + * There will always be at least one group which does no damage. The thief will always be in that group. Ganon always has his own group. + * Glitched modes: Aga 1 should be vulnerable in rain state for glitched modes + * Generation: Trinexx and Lanmolas room allowed as lobbies in intensity 3 (works with enemizer now) + * Enemy AI: Terrorpin AI code removed. May help with unusual enemy behavior? +* 1.4.0.1v + * Key logic: Vanilla key logic fixes. Statically set some HC logic and PoD front door + * Generation: Fix a broken tile pattern + * Inverted: Castle warp should not appear after defeating Aga 1 + * Murahdahla: Should not disappear after Aga 1. May fix other subtle issues. + * Shopsanity: Buying multiple of an item in the potion shop should no longer increase item count. +* 1.4.0.0v + * Initial support for HMG (Thanks Muffins!) + * Generation: fix for bunny walk logic taking up too much memory + * Key Logic: Partial is now the new default + * Enemizer: enemy bans +* 1.3.0.9v + * ER: New Swapped ER mode borrowed from OWR + * ER: fixed a generation error where TR chooses all "must-exits" + * Ganonhunt: playthrough no longer collects crystals + * Vanilla Fill: Uncle weapon is always a sword, medallions for Mire/TR will be vanilla + * Customizer: support shufflebosses/shuffleenemies as well as boss_shuffle/enemy_shuffle + * Enemizer: enemy bans +* 1.3.0.8v + * Enemizer: Red Mimics correctly banned from challenge rooms in appropriate logic setting + * No Logic Standard ER: Rain doors aren't blocked if no logic is enabled. + * Trinexx: attempt to fix early start + * MW Progression Balancing: Change to be percentage based instead of raw count. (80% threshold) + * Take anys: Good Bee cave chosen as take any should no longer prevent generation + * Money balancing: Fixed generation issue + * Enemizer: various enemy bans +* 1.3.0.7v + * Fix for Mimic Cave enemy drops + * Fix for Spectacle Rock Cave enemy drops (the mini-moldorms) + * Fix for multiworld lamps with incorrect graphics + * No longer shuffles fairy bonks (from trees) as part of Enemizer +* 1.3.0.6v + * Flute can't be activated in rain state (except glitched modes) (Thanks codemann!) + * Enemizer + * Arrghus at Lanmo 2 no longer prevents pot pickups + * Trinexx at Lanmo 2 requires the Cape go backwards to face him + * Lift-able Blocks require a sprite slot (should help reduce problems) + * Fixed logic issues: + * Self-locking key not allowed in Sanctuary in standard (typo fixed) + * More advanced bunny-walking logic in dungeons (multiple paths considered) + * ER: Minor fix for Link's House on DM in Insanity (escape cave should not be re-used) + * MSU: GTBK song fix for DR (Thanks codemann!) + * District Algorithm: Fails if no available location outside chosen districts + * Various enemy bans + * More Gibos near kiki and Old Man + * Bumper/AntiFairy obstacles + * Damaging roller + * Statue + Pots don't mix + * Statues on Skull Big Key Chest tile + * Toppo in challenge rooms + * Misc others +* 1.3.0.5v + * Hud/Map Counter: Collecting a keys for this dungeon of a bonk torch no longer increments the counter twice and immediately updates the hud. + * Enemizer: Hera basement item counting twice fixed by banning wallmasters on the tile. + * Enemizer: Statues banned offscreen for pull switches + * Enemizer: Several sprite producing enemies have been limited on crowded tiles. Offenders: Hinox, Sluggula, Bomb Guard, Beamos, Gibo, Wall Cannons, Probe using Guards. Others do not spam as many projectiles. + * Enemizer: More enemy bans (mostly Wizzrobes near walls where they won't spawn, couple missed firebar spots) +* 1.3.0.4v + * Enemizer: The bunny beam near Lanmo 2 and the 4 fairies near Ice Armos are not shuffled anymore. This is due to how bosses shuffle works and since it cannot be guaranteed to work within the current system, they are vanilla. (Vitreous still overwrites the fairies and Arrghus only lets two spawn, etc.) + * Dropshuffle: Pokey 1 has been fixed to drop his item + * Mystery/Customizer: true/false and on/off in yaml files should behave the same. + * More enemy bans as have been reported +* 1.3.0.3v + * Faeries now part of the enemy shuffle pool. Take note, this will increase enemy drop locations to include fairy pools both in dungeons and in caves. + * Enemy drop indicator (blue square) now works in caves based on entrance used + * Fixes: + * Collection rate counter is properly hidden in mystery seeds + * Sprite limit lowered where possible to allow for lifting of pots + * Hovers in Swamp Waterway properly do not drop items anymore + * Lots more bans (thanks to jsd in particular but also thanks to all the reports) + * Minor issue with customizer/mystery files not allowing "true" for booleans +* 1.3.0.2v + * Fix for multiworld received keys not counting correctly + * Fix for multiworld lamps incorrect graphics + * Fix for collection rate decreasing on item "pickup" + * Fix for pendants as prizes counting as items + * Fix for castle barrier gfx in rain state + * Enemizer fixes and bans: + * Fixed a generation issue where ChainChomp placement would cause a failure. (Invincible enemies banned in Sprial Cave for early game traversal for now) + * Skull Pot Prison should not be blocked by "impassable" enemies + * Bumpers banned in Ice Hookshot room + * Fixed issue in GT Spike Crystal room + * Fixed blockage issues in TT Ambush and Compass rooms + * Forbid Bumper in Fairy Ascension cave; needed to clip into wall weirdly to pass. + * Enemy Drop bans + * Forbid Stals in many places where they cannot be woken up. Behind rails and on top of blocks, for example. + * A couple minor wizzrobes bans because of despawns. + * Enemies over pits and on conveyors near pits have been issued standard bans for falling enemies. Mimics join the ranks here as they don't work well on pits or on conveyors. + * Mimics banned where conveyors touch walls and could clip out unintentionally +* 1.3.0.1v + * Fixed bugs with item duping and disappearing drops + * Fixed multiworld crash + * Fixed assured sword missing when using start inventory (via GUI/CLI) + * Forbid extra statues in Swamp Push Statue room + * Forbid bumpers on OW water + * Forbid Stal on pits + * Text fix on sprite author (thanks Synack) +* 1.2.0.23u + * Generation: fix for bunny walk logic taking up too much memory + * Key Logic: Partial is now the new default +* 1.2.0.22u + * Flute can't be activated in rain state (except glitched modes) (Thanks codemann!) + * ER: Minor fix for Link's House on DM in Insanity (escape cave should not be re-used) + * Logic issues: + * Self-locking key not allowed in Sanctuary in standard (typo fixed) + * More advanced bunny-walking logic in dungeons (multiple paths considred) + * MSU: GTBK song fix for DR (Thanks codemann!) +* 1.2.0.21u + * Fix that should force items needed for leaving Zelda's cell to before the throne room, so S&Q isn't mandatory + * Small fix for Tavern Shuffle (thanks Catobat) + * Several small generation fixes +* 1.2.0.20u + * New generation feature that allows Spiral Stair to link to themselves (thank Catobat) + * Added logic for trap doors that could be opened using existing room triggers + * Fixed a problem with inverted generation and the experimental flag + * Added a notes field for user added notes either via CLI or Customizer (thanks Hiimcody and Codemann) + * Fixed a typo for a specific pot hint + * Fix for Hera Boss music (thanks Codemann) +* 1.1.6 (from Stable) + * Minor issue with dungeon counter hud interfering with timer +* 1.2.0.19u + * Added min/max for triforce pool, goal, and difference for CLI and Customizer. (Thanks Catobat) + * Fixed a bug with dungeon generation + * Multiworld: Fixed /missing command to not list all the pots + * Changed the "Ganonhunt" goal to use open pyramid on the Auto setting + * Customizer: Fixed the example yaml for shopsanity +* 1.2.0.18u + * Fixed an issue with pyramid hole being in logic when it is not opened. + * Crystal cutscene at GT use new symmetrical layouts (thanks Codemann) + * Fix for Hera Boss music (thanks Codemann) + * Fixed an issue where certain vanilla door types would not allow other types to be placed. + * Customizer: fixed an issue where last ditch placements would move customized items. Those are now locked and the generation will fail instead if no alternatives are found. + * Customizer: fixed an issue with assured sword and start_inventory + * Customizer: warns when trying to specifically place an item that's not in the item pool + * Fixed "accessibility: none" displaying a spoiling message + * Fixed warning message about custom item pool when it is fine +* 1.2.0.17u + * Fixed logic bug that allowed Pearl to be behind Graveyard Cave or King's Tomb entrances with only Mirror and West Dark World access (cross world shuffles only) + * Removed backup locations for Dungeon Only and Major Only algorithms. If item cannot be placed in the appropriate location, the seed will fail to generate instead + * Fix for Non-ER Inverted Experimental (Aga and GT weren't logically swapped) + * Fix for customizer setting crystals to 0 for either GT/Ganon +* 1.2.0.16u + * Fix for partial key logic on vanilla Mire + * Fix for Kholdstare Shell collision when at Lanmo 2 + * Fix for Mire Attic Hint door (direction was swapped) + * Dungeon at Chest Game displays correctly on OW map option +* 1.2.0.15u + * GUI reorganization + * Logic fix for pots in GT conveyor cross + * Auto option for pyramid open (trinity or ER + crystals goal) + * World model refactor (combining inverted and normal world models) + * Partitioned fix for lamp logic and links house + * Fix starting flute logic + * Reduced universal keys in pool slightly for non-vanilla dungeons + * Fake world fix finally + * Some extra restrictions on links house placement for lite/lean + * Collection_rate works in customizer files +* 1.2.0.14u + * Small fix for key logic validation (got rid of a false negative) + * Customized doors in ice cross work properly now +* 1.2.0.13u + * Allow green/blue potion refills to be customized + * OW Map showing dungeon entrance at Snitch Lady (West) fixed (instead of @ HC Courtyard) + * Standing item data is cleared on transition to overworld (enemy drops won't bleed to overworld sprites) + * Escape assist won't give you a free quiver in retro bow mode + * Fixed an issue where a door would be opened magically (due to original pairing) + * MultiServer can now disable forfeits if desired +* 1.2.0.12u + * Fix for mirror portal in inverted + * Yet another fix for blocked door in Standard ER +* 1.2.0.11u + * Fixed an issue with lower layer doors in Standard + * Fix for doors in cave state (will no longer be vanilla) + * Added a logic rule for th murderdactyl near bumper ledge for OHKO purposes + * Enemizer alteration for Hovers and normal enemies in shallow water + * Fix for beemizer including modes with an increased item pool + * Fix for district algorithm +* 1.2.0.10u + * Fixed overrun issues with edge transitions + * Better support for customized start_inventory with dungeon items + * Colorized pots now available with lottery. Default is on. + * Dungeon_only support pottery + * Fix AllowAccidentalGlitches flag in OWG + * Potential fix for mirror portal and entering cave on same frame + * A few other minor issues, generation and graphical +* 1.2.0.9-u + * Disallowed standard exits (due to ER) are now graphically half blocked instead of missing + * Graphical issues with Sanctuary and Swamp Hub lobbies are fixed + * Fixes an issue surrounding door state and decoupled doors leading to blocked doors + * Customizer improvements: + * Better logic around customized lobbies + * Better logic around customized door types + * Fix to key doors that was causing extra key doors + * Generation improvement around crystal switches + * Fix bug in dungeon_only that wasn't using pot key locations (known issue still exists in pottery modes) + * Fixes for multiworld: + * Fixes an issue when keys are found in own dungeon for another player when using the bizhawk plugin. + * Fixes an issue with absorbables for another player also being received by the player picking it up. +* 1.2.0.8-u + * New Features: trap_door_mode and key_logic_algorithm + * Change S&Q in door shuffle + standard during escape to spawn as Uncle + * Fix for vanilla doors + certain ER modes + * Fix for unintentional decoupled door in standard + * Fix a problem with BK doors being one-sided + * Change to how wilds keys are placed in standard, better randomization + * Removed a Triforce text + * Fix for Desert Tiles 1 key door +* 1.2.0.7-u + * Fix for some misery mire key logic + * Minor standard generation fix + * Fix for inactive flute start + * Settingsfile for multiworld generation support + * Fix for duped HC/AT Maps/Compasses +* 1.2.0.6-u + * Fix for light cone in Escape when entering from Dark World post-zelda + * Fix for light cone in Escape when lighting a torch with fire rod +* 1.2.0.5.u + * Logic fix for Sanctuary mirror (it wasn't resetting the crystal state) + * Minor bugfixes for customizer +* 1.2.0.4-u + * Starting inventory fixes if item not present in the item pool. + * Support for Assured sword setting and OWG Boots when using a custom item pool. (Customizer or GUI) + * Logic fix for the skull woods star tile that lets you into the X pot room. Now accounts for small key or big key door there blocking the way from the star tile. A trap door is not allowed there. + * Standard logic improvement that requires a path from Zelda to the start so that you cannot get softlocked by rescuing Zelda. Standard mirror scroll change may need to be reverted if impossible seed are still generated. +* 1.2.0.3-u + * Starting inventory taken into account with default item pool. (Custom pools must do this themselves) + * Fast ROM update + * Fix for restricted boss item counting maps & compasses as vital + * Bug fix for vanilla ER + inverted + experimental +* 1.2.0.2-u + * Fixed a bug with certain trap doors missing + * Added a hint reference for district hints +* 1.2.0.1-u + * Added new ganonhunt and completionist goals + * Fixed the issue when defeating Agahnim and standing in the doorway can cause door state to linger. + * Fix for Inverted Lean/Lite ER + * Fix for vanilla Doors + Standard + ER + * Added a limit per dungeon on small key doors to ensure reasonable generation + * Fixed many small bugs + +# Known Issues + +* Decoupled doors can lead to situations where you aren't logically supposed to go back through a door without a big key or small key, but you can if you press the correct direction back through the door first. There are some transitions where you may get stuck without a bomb. These problems are planned to be fixed. +* Logic getting to Skull X room may be wrong if a trap door, big key door, or bombable wall is shuffled there. A bomb jump to get to those pot may be required if you don't have boots to bonk across. \ No newline at end of file diff --git a/RELEASENOTES.md b/RELEASENOTES.md index a0e3ee1c..9918f50d 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,10 +1,4 @@ # Patch Notes -* 1.4.9 - * Attempted fix for Moth conveyor room timing. THank for many people's input. Unsure if Helmacopter is still acceptable. - * Mirror scroll will show up on file start screen if enabled (thanks Clearmouse!) - * Fixes for HMG by Muffins - * Various fixes for Enemizer by Codemann (gfx fixes, more randomization options) - * Vanilla door shuffle prevents big key doors changes from door_type_mode - * Couple of minor fixes to custom generation. Deals with a complete specification of all dungeons - * Various enemizer bans for blocked paths (thanks to all the reports, Q1 2025) +* 1.4.10 + * Helmacopter Fix diff --git a/source/enemizer/Bossmizer.py b/source/enemizer/Bossmizer.py index 6c262e38..6ac83e10 100644 --- a/source/enemizer/Bossmizer.py +++ b/source/enemizer/Bossmizer.py @@ -75,6 +75,8 @@ def add_moldorm_to_list(sprite_list, room_id): def add_helmasaur_king_to_list(sprite_list, room_id): + if room_id == 0x29: # preserves helma-copter behavior in skull woods + sprite_list.clear() sprite_list.insert(0, create_sprite(room_id, EnemySprite.HelmasaurKing, 0x00, 0, 0x07, 0x06)) From 91d6d4ec8ad79d38369331bd17021981701fc0fd Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 13 May 2025 14:49:06 -0600 Subject: [PATCH 02/14] fix: Restrict murderdactyl logic to ohko --- RELEASENOTES.md | 1 + Rules.py | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 9918f50d..215bf604 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,4 +1,5 @@ # Patch Notes * 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 by the bird is invented. * Helmacopter Fix diff --git a/Rules.py b/Rules.py index 3600f11c..c0368efd 100644 --- a/Rules.py +++ b/Rules.py @@ -298,7 +298,7 @@ def global_rules(world, player): set_rule(world.get_entrance('Skull Woods Rock (West)', player), lambda state: state.can_lift_rocks(player)) set_rule(world.get_entrance('Skull Woods Rock (East)', player), lambda state: state.can_lift_rocks(player)) # this more like an ohko rule - dependent on bird being present too - so enemizer could turn this off? - set_rule(world.get_entrance('Bumper Cave Ledge Drop', player), lambda state: state.has('Cape', player) or state.has('Cane of Byrna', player) or state.has_sword(player)) + set_rule(world.get_entrance('Bumper Cave Ledge Drop', player), lambda state: world.can_take_damage or state.has('Cape', player) or state.has('Cane of Byrna', player) or state.has_sword(player)) set_rule(world.get_entrance('Bumper Cave Rock (Outer)', player), lambda state: state.can_lift_rocks(player)) set_rule(world.get_entrance('Bumper Cave Rock (Inner)', player), lambda state: state.can_lift_rocks(player)) set_rule(world.get_entrance('Skull Woods Pass Rock (North)', player), lambda state: state.can_lift_heavy_rocks(player)) @@ -1155,7 +1155,8 @@ def ow_bunny_rules(world, player): add_bunny_rule(world.get_entrance('Skull Woods Forgotten Bush (East)', player), player) add_bunny_rule(world.get_entrance('Skull Woods Second Section Hole', player), player) add_bunny_rule(world.get_entrance('East Dark Death Mountain Bushes', player), player) - add_bunny_rule(world.get_entrance('Bumper Cave Ledge Drop', player), player) + if not world.can_take_damage: + add_bunny_rule(world.get_entrance('Bumper Cave Ledge Drop', player), player) add_bunny_rule(world.get_entrance('Bumper Cave Rock (Outer)', player), player) add_bunny_rule(world.get_entrance('Bumper Cave Rock (Inner)', player), player) add_bunny_rule(world.get_entrance('Skull Woods Pass Bush Row (West)', player), player) From ab98b346e03dc597b63fc93d61c761a552baaa69 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 13 May 2025 14:52:37 -0600 Subject: [PATCH 03/14] fix: price in shops bug --- RELEASENOTES.md | 1 + Rom.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 215bf604..8f9066dd 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -3,3 +3,4 @@ * 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 by the bird is invented. * Helmacopter Fix + * Fixed a bug in shopsanity that would cause the generation to fail with certain prices. diff --git a/Rom.py b/Rom.py index 0961df7c..71f65ef2 100644 --- a/Rom.py +++ b/Rom.py @@ -1500,7 +1500,7 @@ def write_custom_shops(rom, world, player): item_id, price, replace, replace_price, item_max = Items.item_table['Bee Trap'][3], [0, 0], 0xFF, [0, 0], 1 else: item_id = loc_item.code - price = int16_as_bytes(item['price']) + price = int16_as_bytes(int(item['price'])) replace = ItemFactory(item['replacement'], player).code if item['replacement'] else 0xFF replace_price = int16_as_bytes(item['replacement_price']) item_max = item['max'] From 3243b0a9ee06f5385928d9c474d51136ad66df3e Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 13 May 2025 14:59:53 -0600 Subject: [PATCH 04/14] fix: faeries on overworld disallowed --- RELEASENOTES.md | 1 + source/enemizer/SpriteSheets.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 8f9066dd..0e143f09 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -4,3 +4,4 @@ * 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 by the bird is invented. * Helmacopter Fix * Fixed a bug in shopsanity that would cause the generation to fail with certain prices. + * Enemizer: fairies were invalid on the overworld (unless a bonk occurred nearby), so now will not be randomized there diff --git a/source/enemizer/SpriteSheets.py b/source/enemizer/SpriteSheets.py index 3dd8cb29..001bc79e 100644 --- a/source/enemizer/SpriteSheets.py +++ b/source/enemizer/SpriteSheets.py @@ -372,7 +372,7 @@ def init_sprite_requirements(): SpriteRequirement(EnemySprite.DiggingGameNPC).affix().sub_group(1, 0x2a), SpriteRequirement(EnemySprite.Ganon).exalt().sub_group(0, 0x21).sub_group(1, 0x41) .sub_group(2, 0x45).sub_group(3, 0x33), - SpriteRequirement(EnemySprite.Faerie).immune(), + SpriteRequirement(EnemySprite.Faerie).ow_skip().immune(), SpriteRequirement(EnemySprite.FakeMasterSword).immune().sub_group(3, 0x11), SpriteRequirement(EnemySprite.MagicShopAssistant).affix().sub_group(0, 0x4b).sub_group(3, 0x5a), SpriteRequirement(EnemySprite.SomariaPlatform).affix().sub_group(2, 0x27), From bb1bbdaee7280625b784ea8f643569cfa7dc4858 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 13 May 2025 15:02:42 -0600 Subject: [PATCH 05/14] fix: notes clarity --- RELEASENOTES.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 0e143f09..ec57a296 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,7 +1,7 @@ # Patch Notes * 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 by the bird is invented. - * Helmacopter Fix - * Fixed a bug in shopsanity that would cause the generation to fail with certain prices. - * Enemizer: fairies were invalid on the overworld (unless a bonk occurred nearby), so now will not be randomized there + * 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. + * Fixed a bug in shopsanity that caused the generation to fail with certain prices. + * Enemizer: fairies were invalid on the overworld (unless a bonk occurred nearby), so they will no longer be randomized there. From 42bafa1c993c858b80ff811fc0a19dd14d515674 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Fri, 16 May 2025 22:22:37 -0500 Subject: [PATCH 06/14] Locksmith follower now behaves closer to vanilla --- Rom.py | 2 +- data/base2current.bps | Bin 136392 -> 136391 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index efda6e30..45e10cb3 100644 --- a/Rom.py +++ b/Rom.py @@ -43,7 +43,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'a1d6e5902d2e33a3c440aca3983897a3' +RANDOMIZERBASEHASH = 'f1979456c6fc9e3a3a826b94a8065c64' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 0915c9814eb1110334356a6a6ea93fb985f392de..eaa71206a3d6c819e1dba7d9595e0406b51a0685 100644 GIT binary patch delta 205 zcmV;;05bo`sR+lZ2(T&x1Pglfg|jXL(I5dKk|ZDjOS2&)aj8Px4h{eg01ghlFb?nx zy$}sZBA4Z$kU)SLradg5qdE)Ul_HJhpwK0rqKORf7n?8(g@F>9i-8K4D@^8(bNiiW zos-VZBO#WNYmdzHexF`z Date: Fri, 16 May 2025 22:27:36 -0500 Subject: [PATCH 07/14] Fixed issue with mirroring with a dropped purple chest --- Rom.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index 45e10cb3..93a4cac9 100644 --- a/Rom.py +++ b/Rom.py @@ -1565,7 +1565,8 @@ def patch_rom(world, rom, player, team, is_mystery=False): rom.write_byte(snes_to_pc(0x07A589), 0x80) # allow bombos use with super bomb rom.write_byte(snes_to_pc(0x07A66B), 0x80) # allow quake use with super bomb rom.write_byte(snes_to_pc(0x07A919), 0x80) # disable kiki dialogue during mirror - rom.write_byte(snes_to_pc(0x07AAC5), 0xAF) # keep all followers after mirroring + rom.write_bytes(snes_to_pc(0x07AABD), [0xEA, 0xEA]) # allow locksmith to follow with mirror + rom.write_byte(snes_to_pc(0x07AAC1), 0x80) # allow kiki to follow with mirror rom.write_byte(snes_to_pc(0x08DED6), 0x80) # allow locksmith to follow with flute rom.write_bytes(snes_to_pc(0x09A045), [0xEA, 0xEA]) # allow super bomb to follow into UW holes rom.write_byte(snes_to_pc(0x09ACDF), 0x6B) # allow kiki/locksmith to follow after screen transition From 4cd14436345ca17530314daa0a3061f9c81cbf76 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Fri, 16 May 2025 23:42:47 -0500 Subject: [PATCH 08/14] Possible fix for prizes not getting placed in major locations --- source/item/FillUtil.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/source/item/FillUtil.py b/source/item/FillUtil.py index c21fa9ca..25bebbcd 100644 --- a/source/item/FillUtil.py +++ b/source/item/FillUtil.py @@ -114,7 +114,7 @@ def create_item_pool_config(world): single_arrow_placement.append('Red Shield Shop - Right') config.static_placement[player]['Single Arrow'] = single_arrow_placement config.location_groups[player] = [ - LocationGroup('Major').locs(mode_grouping['Overworld Major'] + mode_grouping['Big Chests'] + mode_grouping['Heart Containers']), + LocationGroup('Major').locs(mode_grouping['Overworld Major'] + mode_grouping['Big Chests'] + mode_grouping['Heart Containers'] + mode_grouping['Prizes']), LocationGroup('bkhp').locs(mode_grouping['Heart Pieces']), LocationGroup('bktrash').locs(mode_grouping['Overworld Trash'] + mode_grouping['Dungeon Trash']), LocationGroup('bkgt').locs(mode_grouping['GT Trash'])] @@ -129,11 +129,9 @@ def create_item_pool_config(world): LocationGroup('Backup') ] config.item_pool = {} - init_set = mode_grouping['Overworld Major'] + mode_grouping['Big Chests'] + mode_grouping['Heart Containers'] + init_set = mode_grouping['Overworld Major'] + mode_grouping['Big Chests'] + mode_grouping['Heart Containers'] + mode_grouping['Prizes'] for player in range(1, world.players + 1): groups = LocationGroup('Major').locs(init_set) - if world.prizeshuffle[player] != 'none': - groups.locations.extend(mode_grouping['Prizes']) if world.bigkeyshuffle[player] != 'none': groups.locations.extend(mode_grouping['Big Keys']) if world.dropshuffle[player] != 'none': @@ -167,7 +165,7 @@ def create_item_pool_config(world): dungeon_set = (mode_grouping['Big Chests'] + mode_grouping['Dungeon Trash'] + mode_grouping['Big Keys'] + mode_grouping['Heart Containers'] + mode_grouping['GT Trash'] + mode_grouping['Small Keys'] + mode_grouping['Compasses'] + mode_grouping['Maps'] + mode_grouping['Key Drops'] + - mode_grouping['Pot Keys'] + mode_grouping['Big Key Drops']) + mode_grouping['Pot Keys'] + mode_grouping['Big Key Drops'] + mode_grouping['Prizes']) dungeon_set = set(dungeon_set) for loc in world.get_locations(): if loc.parent_region.dungeon and loc.type in [LocationType.Pot, LocationType.Drop]: @@ -859,7 +857,7 @@ major_items = {'Bombos', 'Book of Mudora', 'Cane of Somaria', 'Ether', 'Fire Rod 'Sanctuary Heart Container', 'Boss Heart Container', 'Progressive Shield', 'Ocarina (Activated)', 'Mirror Shield', 'Progressive Armor', 'Blue Mail', 'Red Mail', 'Progressive Sword', 'Fighter Sword', 'Master Sword', 'Tempered Sword', 'Golden Sword', 'Bow', 'Silver Arrows', 'Triforce Piece', 'Moon Pearl', - 'Progressive Bow', 'Progressive Bow (Alt)'} + 'Progressive Bow', 'Progressive Bow (Alt)', 'Triforce'} vanilla_swords = {"Link's Uncle", 'Master Sword Pedestal', 'Blacksmith', 'Pyramid Fairy - Left'} From be4a440f6c064318e3085a76bda419daef3a6664 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Fri, 16 May 2025 23:43:41 -0500 Subject: [PATCH 09/14] Revert "Possibly fix false positive error message for python package requirements" This reverts commit 63f39c5c0580b6d53707c9523d5010cd3cee9c08. --- source/meta/check_requirements.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/meta/check_requirements.py b/source/meta/check_requirements.py index 4a93be72..6976f707 100644 --- a/source/meta/check_requirements.py +++ b/source/meta/check_requirements.py @@ -11,9 +11,8 @@ def check_requirements(console=False): 'pyyaml': 'yaml'} missing = [] for package, import_name in check_packages.items(): - try: - __import__(import_name) - except ImportError: + spec = importlib.util.find_spec(import_name) + if spec is None: missing.append(package) if len(missing) > 0: packages = ','.join(missing) From 69ff38521ed84dfb503bb59bce3d86be088aa4d0 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Thu, 5 Jun 2025 19:53:01 -0500 Subject: [PATCH 10/14] Restoring water floor in Arrghus' room in boss shuffle --- Rom.py | 2 +- data/base2current.bps | Bin 136391 -> 136415 bytes source/enemizer/Bossmizer.py | 8 -------- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/Rom.py b/Rom.py index 41ce2b06..42540d7d 100644 --- a/Rom.py +++ b/Rom.py @@ -43,7 +43,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'f1979456c6fc9e3a3a826b94a8065c64' +RANDOMIZERBASEHASH = '516242b1897da709d9bad09e99d55819' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index eaa71206a3d6c819e1dba7d9595e0406b51a0685..16f98477b08fbc8432a0d00511c825f51e8b3075 100644 GIT binary patch delta 1152 zcmWNPdrXsO7{#CODVDGHLTM`nD_{!>f>8 zwpw8QR$isjnsloJUFvAGYG2>}-_VLwmDZ8NqSV7%-Zo;$?PXi zUA*@qmz%d-bi#J=-vMT~?rUyG-V7$&LYwnvW;1_tRm+N)IM=bPjQz!SQ9?e|-3nb@ zmQlex4*h!I88WYjemXcMWVRj|>k5x`F_KAYtr4(iHE~+ z`CZYZB%q12fzx+|lQ;t5<3c>fFcmbN#jF*Ti;%d>p$zgNCcnqY(~h1|z42eLvK$Dl z6HCZ&91cMgrhtCww%wOc$|py^^R&`t7VD*|x*uG&pu-L?;f#q+u~;lr$t1+LnJPqh z7*S38M5t#C%x~J-x&8(EGPi z>ul`C{NMGrYsHwO$Xa?UmSwcNW_{FSUFEMLp7-f7F_sr^TkxZI1LKaZXWS7} zk&=uL48Gm$I>~|&Sb*5ZW>-M0>haZWgK=NQMdXo^(?$iB=o*A-Vt)^Kfi-ti8j0lI0C+R=w$_VHDwhmNUSfSx!f;5GdjR&x1^!nnrK4G^twlo8reFC$)U!;ztFamzkhrNTCL>ghsTU3kp%Kl5t7*8l(j delta 1099 zcmWNPeNfYN9LGQ34^NwWU}G>~6UHWp4ndR>Aw4C^#sOJr3QF1qDyfMNh=?NJsmL~+ zz<$k-La^&*m{f=7PDkxzIy!n#Qt!IU`UA7N%RIYLlxC^F_TT&7ckjE`-TQU>tmKQc zl5^&$Xj#i&?Y_JyeJVcg@Rd(zQEX7CG#K!a&9}|4gT=TiJMC`@KV>vx)nZ?jaV#b} z@u0O&$jW|JYPDUw*TuG&dW72SDV*%^Rn3~3#=a3M3Ub-^LQBCSNzist&bv()d?N*^ zOW7UYtzG{i%kh2NG!e^|9rCsMeXUI1!J_?_qwxxpt2uU_d!_AcRNrNV|8y)KWh{a6 zC78}qX}JXTIbwhPy@XOv(IxN8rijAwkcG-p;c6bVB^z=Z2 zd9fQ6a_*T;W+}GdN-YgYF`qH|PKqbZ3oVZZYNI>c;i~&v?dJnmcy zOCfaJ4ID}!-#eF1O~ZC}b2Yq_%Sa{1h3a*>MDBTG$Az)u{yCd3c-JqXYB`STXV(AL zFHJfstY|QDhhtP(KaEq#<_81E1f)U*rlq$wtm1Afgy0&4j=A31>+UXrgAhw~&8v8? zf_5r!1~#Vsc)2DAABvzQ^ybZTK;K`8I)exSNmg5tXZG4u3xbGQbF> zuzd7I+NQ)Vb<6t49}J7rMHG|6sxURwQG7h6F`E9_1Ytl&?x)65#XOKCYD*ix+I!L2n)9x9FbSjZ-e8kaB~ z+0vzaFX*CfyC*fasGSst=mwXa3aiKbfK3C(q#K!8+oN`EqP?sCx-~c$iyO+^| z1T14nJOSsLiei(weLaX#)~1zO9?CX5Ttz#-vQ7!+pmP)sfhUJIv&t} z+NnA-*d^>*tL2`Q1!K-+&_i(b=78rwMnvf;cm%iLE(DoT&T0Nu89$LVKj3}>`{3a} zCyG<<^co{wuPG%$JOQU5PAKO6n!3}SnMYhUZ|;K1$VgYoLk_RWWep3Ou{diYjr=(d zG_FA{dzF6CV4-FImSJm~(7-?1_ujxs@9q`3-1#)}DVgTc`F91gDv5Vy2B_??_3_ox s7aabTiyiF%!NPhar{^~)dB1Vfp`LY Date: Thu, 5 Jun 2025 20:53:37 -0500 Subject: [PATCH 11/14] Reset MSU Resume on S+Q --- Rom.py | 2 +- data/base2current.bps | Bin 136415 -> 136406 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index 42540d7d..8ef80561 100644 --- a/Rom.py +++ b/Rom.py @@ -43,7 +43,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '516242b1897da709d9bad09e99d55819' +RANDOMIZERBASEHASH = '382c34a221600dbc824c3a709dd9cccb' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 16f98477b08fbc8432a0d00511c825f51e8b3075..59ad395dc61ce8e0bb88c67c2b8cb3435ac994a3 100644 GIT binary patch delta 5645 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 delta 5611 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 PWn0~Q=U1}UbW-(yZ`Wvo From 73ffa417515de992d3a31b581495f6338992805e Mon Sep 17 00:00:00 2001 From: codemann8 Date: Thu, 12 Jun 2025 10:33:16 -0500 Subject: [PATCH 12/14] Some basrom fixes - Fix issue with no music in LH after S+Q from Kakariko - Boots missing from menu upon collection until S+Q - Kiki runs away if Link spawned from Sanc - Locksmith sprite despawns after purple chest item get --- Rom.py | 2 +- data/base2current.bps | Bin 136406 -> 136434 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index 8ef80561..059191cf 100644 --- a/Rom.py +++ b/Rom.py @@ -43,7 +43,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '382c34a221600dbc824c3a709dd9cccb' +RANDOMIZERBASEHASH = '73421f3885e96c8a851942082e002942' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 59ad395dc61ce8e0bb88c67c2b8cb3435ac994a3..bad9313595c4b0f02dd632be8cb123addc6d6070 100644 GIT binary patch delta 15679 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 Date: Fri, 13 Jun 2025 23:39:58 -0500 Subject: [PATCH 13/14] Fixed issue with Quake scaring Kiki --- Rom.py | 2 +- data/base2current.bps | Bin 136434 -> 136438 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index 059191cf..32f07e22 100644 --- a/Rom.py +++ b/Rom.py @@ -43,7 +43,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '73421f3885e96c8a851942082e002942' +RANDOMIZERBASEHASH = 'b0a70c07792884cbe3d87e99c8325e41' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index bad9313595c4b0f02dd632be8cb123addc6d6070..834435ae96e8a07882b66dd8e261ac3e3b2f0d00 100644 GIT binary patch delta 224 zcmV<603ZMIsR;I|2(T&x1iXYpd$TSBS{(skvxy*W0}9INpv-}W*p(t7k|ZD$OX{GU zn_ftPn1O|ympf&Ftc@asvos_hsS3qwrA_b?$pY{VlUdCt2CeCZ2C2Q1hRv7+TPlEV zlOoRR3P&q|8Y#+8l6a4^7tf(c8ChA2jY5F1@RCy*fQf+c2bM*Ofor0TpA)yy7Xfr{ z1vx^FmmjxEhXJ<%1#EkOmsz(4i2=0@0UnpUmH{dOZ@1@`0fhtw2prg(f46a)0cryQ aZ|Xf* delta 203 zcmV;+05t#hsR;6^2(T&x1f+&rd9yA9S{(sgvxy*W0}96Jpv-}W*p(t3k|ZD$N9v%Q zn_ftPn1O|ympf&Ftc@aovos_hsRp%crA_b;lU>ax2C3 Date: Mon, 16 Jun 2025 14:55:01 -0500 Subject: [PATCH 14/14] Version bump 0.6.0.3 --- CHANGELOG.md | 13 +++++++++++++ OverworldShuffle.py | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1abe383..e2b52d0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## 0.6.0.3 +- Arrghus' Room has water floor restored in boss shuffle +- Fixed no music in Links House when S+Q from Kakariko +- Fixed issue with Boots not showing in pause menu after collection +- Fixed issue with Kiki running away outside the PoD maze +- Fixed issue with Kiki running away when using Quake +- Fixed issue with lingering purple chest after dropping and mirroring +- Getting Locksmith to follow behaves closer to vanilla +- Fixed issue with Locksmith follower despawning after purple chest item get +- Possible fix for prizes getting placed in major locations +- \~Merged in DR v1.4.10~ + - Helmacopter fix + ## 0.6.0.2 - Fixed issue with item pool placing items on Zelda Drop Off - Fix issue with infinite purple chest item get diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 433707cb..e54790bd 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.2' +version_number = '0.6.0.3' # branch indicator is intentionally different across branches version_branch = '-u'