-
Notifications
You must be signed in to change notification settings - Fork 152
[Rando] Enemy Soul Shuffle #1284
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
Eblo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would love to test, but the builds broke because of references to Matrix_NewMtx. Left suggestions for cleanup as well as questions.
Eblo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thoughts:
- Some enemies are excluded. It almost seems like mini-bosses are intentional, but some of those are included. What is the reasoning? I imagine getting locked in a room where the only way out is to defeat all enemies is part of it, but that's functionally no different from how boss souls already work.
CanKillEnemymust return false if the requested enemy's soul is not acquired, just like boss souls. Maybe this can be simplified with an early return, usingsoulMapin some way.- Places where enemies are a nuisance need not be defeated, such as the Bad Bat Tree of Doom, are more permissive if the relevant souls are not acquired. I don't think this is a problem, just worth noting.
mckinlee
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since I was already in the code, I made note of a few things. Nothing crazy. That aside, this is really cool and I can't wait to see this partnered with the other shuffles!
Eblo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure what, but something about the way this was done causes it to only work if boss souls are also shuffled. If one tries to only shuffle enemy souls, glitchless seeds will fail to generate, and no logic seeds will generate but with no souls actually in the pool.
I haven't exhaustively tested everything, but it seems like Eeno souls simply are not in my seed. Eeno drops contained a major item, but there was no way for me to defeat one to get it.
On the flip side, aside from Real Bombchus, I didn't happen upon any enemies that I could defeat without having their souls first. Octoroks and ChuChus even shrugged off ice arrows.
It doesn't look like the enemy soul items are added to the item pool, so the generator can't place them anywhere. Logic still expects those flags, so "enemy souls only" fails since the pool lacks any soul items, yet damage is gated on the corresponding INF flag explains why actors seem to be near invulnerable. I think we just need to mirror the boss souls block around lines 241 to 249 of OnFileCreate.cpp, maybe? |
…fix up Boss Souls shuffling as it was needed to cleanly shuffle Enemy Souls.
Eblo
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Performed some cursory testing and review. This is far from exhaustive, and the main reason for that is that incoming enemy drops work will impact the direction on this.
Ideally we have some visual distinction to know that an enemy is in a soulless state, but I realize finding some one-size-fits-all adjustment is easier said than done. A translucent effect would be nice, but difficult. A lazy answer would be to draw sparkles after rendering the enemy normally, like we do to distinguish progressive magic from refills, or literally nothing.
mm/2s2h/Rando/StaticData/Items.cpp
Outdated
| RI(RI_SOUL_STALCHILD, "the", "Soul of Stalchildren", RITYPE_MAJOR, ITEM_NONE, GI_NONE, GID_NONE), | ||
| RI(RI_SOUL_TEKTITE, "the", "Soul of Tektites", RITYPE_MAJOR, ITEM_NONE, GI_NONE, GID_NONE), | ||
| RI(RI_SOUL_TWINMOLD, "the", "Soul of Twinmold", RITYPE_MAJOR, ITEM_NONE, GI_NONE, GID_NONE), | ||
| RI(RI_SOUL_WALLMASTER, "the", "Soul of Wallmasters", RITYPE_MAJOR, ITEM_NONE, GI_NONE, GID_NONE), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since this applies to both Wallmasters and Floormasters, is there any sort of name to capture that instead of implying Wallmasters only? There's only one Floormaster in the game, so I don't think it's worth splitting out another soul.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Soul of Hands? I dont really know how to unify them lol
…s that are invincible.
Stub out enemy draw funcs Use macros to streamline existing skeleton inits Logically account for enemy souls in CanKillEnemy Fix logical quirk with Ikana ice arrows
Make soul RIs contiguous, separate boss and enemy Ignore target color for EnInvadepoh Remove Real Bombchus and Flying Pots for now Require Gekko and Snapper souls for beating both
Finish off enemy souls
This forces you to obtain an Enemy Soul Item before the Enemy will spawn in the world, similar to Boss Souls.All Soul'd enemies will be invincible by default, once you obtain their soul they will take damage as normal.
The goal is for this to go along with #1282 but can be played alone if desired.
Enemies Remaining:
Somethings to Note:
Build Artifacts