From 2e5b9758c2a974332442d530eacc8254f91d5b59 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 12 Sep 2023 10:13:15 -0600 Subject: [PATCH] Unkillable thieves for now Turn off enemy drop indicator for modes that don't need it --- DoorShuffle.py | 1 + RELEASENOTES.md | 32 ++++++++++++++++++ Rom.py | 4 ++- data/base2current.bps | Bin 117370 -> 117379 bytes .../app/gui/randomize/enemizer/widgets.json | 4 +-- source/dungeon/EnemyList.py | 2 +- source/enemizer/Enemizer.py | 12 +++---- source/enemizer/SpriteSheets.py | 2 +- source/enemizer/enemy_deny.yaml | 14 ++++++++ 9 files changed, 59 insertions(+), 12 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index 1b7e96b7..e64a3c19 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -3545,6 +3545,7 @@ class DROptions(Flag): Hide_Total = 0x100 DarkWorld_Spawns = 0x200 BigKeyDoor_Shuffle = 0x400 + EnemyDropIndicator = 0x800 # if on, enemy drop indicator show, else it doesn't # DATA GOES DOWN HERE diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 3231157f..391ec6a4 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,5 +1,37 @@ # New Features +FastROM changes have been included now. + +## Enemizer Features + +Please see this document for extensive details. [Enemizer in DR](https://docs.google.com/document/d/1iwY7Gy50DR3SsdXVaLFIbx4xRBqo9a-e1_jAl5LMCX8/edit?usp=sharing) + +Key points: +* Enemizer no longer uses a third party program. It is now built-in. +* New option under Shuffle Enemy Drops: Underworld. Any underworld enemy can drop items. +* New option under Enemizer tab: Enemy Logic + +Please read the entire document above for extensive details about enemizer and enemy drop shuffle systems. + +Enemizer main changes: +* Several sprites added to the pool. Most notable is how enemies behave on shallow water. They work now. +* Clearing rooms, spawnable chests, and enemy keys drops can now have enemies with specific logic in the room. This logic is controlled by the new Enemy Logic option +* New system for banning enemies that cause issue is place. If you see an enemy in a place that would cause issue, please report it and it can be banned to never happen again. Initial bans can be found [in the code](source/enemizer/enemy_deny.yaml) for the curious +* Thieves are always unkillable, but banned from the entire underworld. We can selectively ban them from problematic places in the overworld, and if someone wants to figure out where they could be safe in the underworld, I'll allow them there once the major problems have been banned. +* THe old "random" and "legacy" options have been discarded for enemy shuffle. Tile room patterns are currently shuffled with enemies. + +Underworld drops: + +* A flashing blue square added to help locate enemies that have remaining drops on the supertile. (Dungeons and caves without a compass get this for free.) +* Flying enemies, spawned enemies, and enemies with special death routines will not drop items. +* Pikits do not drop their item if they have eaten a shield. +* Hovers in swamp waterway do no drop items due to a layer issue that's not been solved. +* Enemies that are over pits require boomerang or hookshot to collect the item +* Enemies behind rails require the boomerang (hookshot can sequence break in certain cases) +* Enemies that spawn on walls do not drop items. (Keese normally don't, but in enemizer these can be valid drops otherwise. The document has a visual guide.) + +(Older notes below) + One major change with this update is that big key doors and certain trap doors are no longer guaranteed to be vanilla in Dungeon Door Shuffle modes even if you choose not to shuffle those types. A newer algorithm for putting dungeons together has been written and it will remove big key doors and trap doors when necessary to ensure progress can be made. Please note that retro features are now independently customizable as referenced below. Selecting Retro mode or World State: Retro will change Bow Mode to Retro (Progressive). Take Anys to Random, and Small Keys to Universal. diff --git a/Rom.py b/Rom.py index aa2f47c6..5ec5d5c0 100644 --- a/Rom.py +++ b/Rom.py @@ -40,7 +40,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'f3cc032fa0a1ccf9624d0fb3e9926c3b' +RANDOMIZERBASEHASH = 'c8b9a36f11cb3cd070f83f31219f5cba' class JsonRom(object): @@ -573,6 +573,8 @@ def patch_rom(world, rom, player, team, is_mystery=False): dr_flags |= DROptions.Fix_EG if world.door_type_mode[player] in ['big', 'all', 'chaos']: dr_flags |= DROptions.BigKeyDoor_Shuffle + if world.dropshuffle[player] in ['underworld']: + dr_flags |= DROptions.EnemyDropIndicator my_locations = world.get_filled_locations(player) valid_locations = [l for l in my_locations if ((l.type == LocationType.Pot and not l.forced_item) diff --git a/data/base2current.bps b/data/base2current.bps index 947bf97ac43ddc1123d1bfd993c4416c2f512a47..a77da83b747d1a26e581131ea0200b90a8fcd1ca 100644 GIT binary patch delta 609 zcmV-n0-pW)lm~;A2eAGE1j=+Zi<1HaHU*HFry{14Jp(`ihLe5+S_svdrznni? z1J?=xMYFgL!W97}vwI}U8v$msMnEGr0amkWcER5s5S5b}YJkN%uL6Ll&6=2@3XRskdoAHp!N1c0ZB00{5~mvB}AP7(W;jiSe?Fer_r$G;Hpups-F z&sG7A6SkI9=%sr4k8 zL>8h9kf8`5)|Z(?7Jv|=bC>)!iSQ=crvp;)nJ^$Jn8Glnqb8SeSOFOs@|Gxi`fJ+1mY1ihAjX&aYubuRlO}?b zahIc50Vx5nm(5rKJ^?(J3|Rp&0X>&KSpgRo7@~;?uk??Gsn8MPFsT=XUGCrlmra*z zSpg;s@R_g+Aeou4JRqx=oLK=UI;)wmaGz>k7J!As6rTZU7J!)sAbzRE6rYk>xTQd! z1R#E?=oFuVmw0FvfR%(GeyR8rt0i9+fS+oY{aFDR1~YsUfV*0k8(IM$6)_c=l?kN^ z$q)dSRy~Z3rJ%_+w{DkDS^*;w@R|Cs1Em0KsR03NX+Qu>)|Z1?0WtwYm$q5~S_5l| vD7O<^0c>Of1~Zp|zX2lwUbm&c0sR978UdS=Xt$@s0m}vmzpeX#H;B!5LH7K4 delta 624 zcmV-$0+0QJl?VEi2eAGE1e|$ehLZvVHU)>6ry`w`Jp(`ieUp9zS_sUUrznn( z1J?=xJhQkC!W97=vwI}U8v$LjMnEGr0Zp@NcER5s2bGf=YJkN%uL6Ll&6<~5f|Rskdf7Q!%>c~${V5%QOfqQ|K)D2=4YzYy@SAo7>kRsoF@t(KEo zf~5xl&;v}ZmZ=dauXcQwcvk@+1|^lJ7=J;Ro>u`F3C)+8L>7P$qhXi7R{m1~&;v|$mp)hl zAx(sjhO?xeSrvwf@Fv=)aZ&M^Fd!h9!Z4+y6jJepr3aUhiTZ#GmxP7L$e&_?p9O)R zgw5%eD0=#9+P{sLr>Y>mm-=hkib|6vf|FmDtXKgl0jHPNSOGo(Dwh>m0WmHspos$T zGMY4cimlKoukin;#h~yIukw=yqKOEv^pA$A&=KM=sTYM^?%)EKJC}4>0VWIQnXn5W zkeRSNAflJ0Spg>xqM5L8pIBZNfQ7^qpKoZF+gSk_WM*g