Skip to content
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

feat(content): nether updates part 1 #4182

Merged
merged 8 commits into from
Feb 7, 2024

Conversation

chaosvolt
Copy link
Member

@chaosvolt chaosvolt commented Jan 31, 2024

Purpose of change

Some assorted plans pertaining to nether creatures, plus a bit of additional content.

Describe the solution

C++ changes:

  1. In monattack.cpp, changed mattack::gene_sting so that it adds a large dose of radiation to the victim instead of instantly mutating them. I want to have it inject mutant toxins but couldn't get that to work just yet.
  2. In monster.cpp, added a check to monster::attitude that makes monsters return as hostile towards targets that have the nether attention effect, if they in turn have NETHER_ATTENTION as an anger trigger.
  3. Also in monster.cpp, finally sanity-checked monster::process_effects_internal so that regenerates_in_dark scales at an easier to calcuate rate when the lighting is actually reasonably dim, so darkness-regen monsters don't constantly spam messages about using darkness to regenerate when they're standing on what is clearly a brightly-lit tile. Scales up and maxes out at 50 at just above the light level where you can no longer craft or read, as opposed to before where the tile appearing dark at all would give basically maxed regen.
  4. Also opted to make it so all of the associated regen messages actually say how much it healed by, and ensure no regen can take place when already at full health. Also no longer only prints the regen message half the time, since it's already regnerating the entire time and now the regen message is useful to track healing.
  5. In monstergenerator.cpp and mtype.h, added support for a new monster trigger to enum_to_string<mon_trigger>, NETHER_ATTENTION.

JSON changes:

  1. Set zombie and nether factions to be neutral towards each other. This is useful to future plans I have in mind regarding locations becoming weird and more anomalous over time (which I'm holding off on until I actually update the endgame so that triggering it will combat this), and reduces some cases of infighting making some things like certain map extras free loot for the player. Mi-go however are staying their own faction since current lore has them be an actual species with their own agenda and conflict with the blob, whereas nether creatures dwell in a blob-infested nightmare space and thus probably can vibe with the blob's "symptoms" just fine.
  2. Added NETHER_TRIGGER anger trigger to blank bodies, wraiths, grackens, and amoebic molds. These are all critters that are non-hostile normally, idea being this adds a potential tema-up situation when flaming eyes and other sources of nether attention get involved. Stuff that can already aggro at the player just fine on their own was left untouched, and flaming eyes left untouched since their job is supposed to be hanging back and delivering the staredown and not working themselves up into a fury after a single glance.
  3. Gave basic death drops to gozus since description still refers to them wearing clothes, uses same itemgroup ID as the one added by Arcana.
  4. Amoebic molds had their redundant zero bonus cutting damage swapped out with 5 bonus acid damage in melee, for when aggro'd.
  5. Blank bodies given GRABS for when aggro'd, a basic bite attack as well.
  6. Replaced redundant zero bonus cutting damage with 2 cutting for grackens, and granted them a scratch attack with limited armor reduction, for when aggro'd. Also finally allow them to see.
  7. Set yuggs to have CAN_DIG instead of DIGS, leaving them free to laugh at the delicious surface world.
  8. Set breather nodes to emit hot air when they breathe and regenerate slowly, making them actually a potential threat to the few players who encounter them (in the future I plan to add more, so :3). Also touched up monster flags and other stats a bit.
  9. Added a new nether monster, the lepidopterid. Adds a touch of regional cryptid to the selection of nether monsters to compliment the mostly Lovecraft flavored selection (and occasional more modern pop culture reference). While fast and durable, along with being well-suited to nighttime, it's non-hostile by default. However, it can be aggro'd via the new anger_trigger and if so can be decently dangerous.
  10. Added spell data for the special attack used the new monster. Makes use of shadow fields otherwise used only by the night generator CBM, in addition to teleporting the monster casting it away at random.
  11. Added UDP external_tileset sprite for new monster.
  12. Added lepidopterids to GROUP_NETHER_FATIGUE_FIELD (reducing weights of some of the more dangerous monsters to make room), GROUP_NETHER, and GROUP_NETHER_PORTAL (taking a bit out of blank body spawns). Basically all groups that can spawn flaming eyes to combo off the nether attention.
  13. Removed the long-standing extraneous "how does this make you feel" bits from the descriptions of nether monsters. Telling the player they're afraid strikes me as bad writing. Also comes with some improvements to the description of flying polyps and gozus.

Describe alternatives you've considered

  1. Not making nether monsters and zombies neutral. I feel this opens up some good fodder for potential future plans of mine though.
  2. Just calling the new critter mothman. A name based on the scientific name seems more interesting though.
  3. Keeping the whole "tone of the standard regeneration message gets more frantic if regen is higher" thing, at risk of the messages being more clunky or not printing damage amounts at all.

Testing

  1. Checked affected JSON changes for syntax and lint errors.
  2. Compiled and load-tested.
  3. Spawned in to confirm that wraiths did not regenerate unless in a decently shaded area and while actually damaged, saw it regenerated a given amount that was lower at the end when it topped off HP.
  4. Replaced with a shoggoth, confirmed it only showed regen messages while actually healing and would print HP restored.
  5. Spawned in a yugg, confirmed its attack bumped up my rads but currently doesn't provide mutant toxins like I wanted it to.
  6. Spawned in and messed around with mothman, confirmed the attacksdid what I expected them to and that it correctly aggros after being stared at by a flaming eye.

Having to finish heading out in a bit so will continue testing when I get home.

Additional context

Future plans:

  1. Possibly porting over or doing my own take on DDA's sanity-checking of shoggoth item absorption.
  2. There are a couple additional nether critters I plan to add later on.
  3. The big one: making various overmap specials, as well as larger city buildings, steadily gain spawns of nether monsters over time. These are planned to use starts so that more dangerous creatures steadily filter in as the game drags on (much like how shadow monsters steadily haunt floating temples in Arcana), but additionally I want to rig it so that triggering the endgame will either disable these spawns outright (requiring coding support for a boolean that flags a given monster spawn as not triggering anymore), or else flag all nether-specific monsters as having the die-off effect seen when you kill a monster with the QUEEN flag. We'll see how that goes.

Checklist

@github-actions github-actions bot added src changes related to source code. JSON related to game datas in JSON format. labels Jan 31, 2024
Copy link
Contributor

autofix-ci bot commented Jan 31, 2024

The Autofix app has found code style violation and automatically formatted this Pull Request.

I locally edit my commits (e.g: git, github desktop)

Please choose following options:

I'd like to accept the automated commit
  1. Run git pull. this will merge the automated commit into your local copy of the PR branch.
  2. Continue working.
I do not want the automated commit
  1. Format your code locally, then commit it.
  2. Run git push --force to force push your branch. This will overwrite the automated commit on remote with your local one.
  3. Continue working.

If you don't do this, your following commits will be based on the old commit, and cause MERGE CONFLICT.

This PR is complete and I don't want to edit it anymore

It's safe to ignore this message.

I edit this PR through web UI

You can ignore this message and continue working.

I have no idea what this message is talking about

You can ignore this message and continue working. If you find any problem, please ask for help and ping @scarf005.

@chaosvolt
Copy link
Member Author

Discovery: injecting the target with mutant toxins it seems doesn't work as a replacement for the yugg's mutation attack. Tried positive and negative numbers, random and fixed, even with Simplified Nutrition turned off.

@chaosvolt chaosvolt marked this pull request as ready for review February 1, 2024 03:56
@3t3rn4lfl4m3
Copy link

You write of trying to fight the invasion. But in my experience portal and reality tear map extras do not seem affected by the loss of the portal. Fires keep burning, lava does not cool down, shadow creatures keep spawning. Could be Arcana bug as I used the restored ritual blade to nom those.

@chaosvolt
Copy link
Member Author

You write of trying to fight the invasion. But in my experience portal and reality tear map extras do not seem affected by the loss of the portal. Fires keep burning, lava does not cool down, shadow creatures keep spawning. Could be Arcana bug as I used the restored ritual blade to nom those.

Messing with those would be nice too. Right now there aren't any good vanilla ways to mess with portals aside from vanishingly rare artifacts that generate with the old ARTC_PORTAL recharge type. For Arcana I can probably at least set portal-manipulating items to also remove infinite-generator fields as well as anomalous traps, but lava probably will have to stay spicy.

As for vanilla, the main idea here is the endgame is supposed to be the big thing that the player can tackle to mess with the nether monsters, the long-term plan is that completing it will likely affect spawns of nether monsters in some way and/or slow down either zombie reanimation rate or evolution rate (that depends on @KheirFerrum's lore ideas if I recall, but also what I can manage to code whenever I finally try to mess with it).

For vanilla interactions with small-scale local portals, eventually if I ever get #4171 working then one of my plans will be to ensure that portal-eating relic will get a specific place where they're especially likely to generate (strange temples might be a good place to finally flesh out), but another option might be to figure out how to code iexamine interactions with regular portals that let you finally do stuff to them like you can the endgame thing.

For now though, I dunno how hard a lot of this is going to be to tackle plus hard to get time and energy to tackle stuff, so that's why I'm holding off on making cities and labs progressively suffer nether infestation. I want to add that in the same PR that adds ways to actually combat the problem. XD

@github-actions github-actions bot added the docs PRs releated to docs page label Feb 2, 2024
Copy link
Member

@scarf005 scarf005 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code makes me cri

@chaosvolt chaosvolt merged commit 49f46f9 into cataclysmbnteam:main Feb 7, 2024
12 checks passed
@chaosvolt chaosvolt deleted the nether-monster-updoots branch February 7, 2024 04:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
docs PRs releated to docs page JSON related to game datas in JSON format. src changes related to source code.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants