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

Add conjunctivitis from boomer bile #74681

Merged
merged 18 commits into from
Jul 1, 2024

Conversation

zachary-kaelan
Copy link
Contributor

@zachary-kaelan zachary-kaelan commented Jun 20, 2024

Summary

Features "Add conjunctivitis from boomer bile"

Purpose of change

Reimplementation of a piece of #69555 by @fairyarmadillo.

Currently you can tank gallons of zombie bile directly to your eyes with no lasting effects.

Describe the solution

Now tanking gallons of zombie bile can inflame your eyes (conjunctivitis, AKA pink eye).

A few notes on the effect:

  • The chance of getting conjunctivitis is based on eye coverage, with 100% coverage granting immunity.
  • The duration is 2-5 days, with the random potion being reduced by coverage.
  • Eyedrops can reduce the duration to 2 days, to reflect the contaminant being washed out.
  • Poison resistance and immunity, as well as a few other mutations, can help against the effect.
  • The effect causes occasional itching and stinging/watering (smoke_eyes).

Describe alternatives you've considered

Make boomer bile injectable as a low-cost alternative to heroin.

Testing

I took a bunch of bile to the face until I caught a case of the pink, and then I used the wait function to verify that it was adding occasional additional suffering.

Additional context

None.

@github-actions github-actions bot added [JSON] Changes (can be) made in JSON EOC: Effects On Condition Anything concerning Effects On Condition <Enhancement / Feature> New features, or enhancements on existing labels Jun 20, 2024
data/json/effects.json Outdated Show resolved Hide resolved
data/json/effects.json Outdated Show resolved Hide resolved
data/json/effects_on_condition/effects_eocs.json Outdated Show resolved Hide resolved
data/json/effects_on_condition/effects_eocs.json Outdated Show resolved Hide resolved
data/json/effects_on_condition/effects_eocs.json Outdated Show resolved Hide resolved
data/json/effects_on_condition/effects_eocs.json Outdated Show resolved Hide resolved
@github-actions github-actions bot added the astyled astyled PR, label is assigned by github actions label Jun 20, 2024
zachary-kaelan and others added 5 commits June 19, 2024 21:54
@github-actions github-actions bot added json-styled JSON lint passed, label assigned by github actions BasicBuildPassed This PR builds correctly, label assigned by github actions labels Jun 20, 2024
@github-actions github-actions bot removed the json-styled JSON lint passed, label assigned by github actions label Jun 21, 2024
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@github-actions github-actions bot added BasicBuildPassed This PR builds correctly, label assigned by github actions json-styled JSON lint passed, label assigned by github actions and removed BasicBuildPassed This PR builds correctly, label assigned by github actions labels Jun 21, 2024
@github-actions github-actions bot added the BasicBuildPassed This PR builds correctly, label assigned by github actions label Jun 24, 2024
@github-actions github-actions bot removed the json-styled JSON lint passed, label assigned by github actions label Jun 25, 2024
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@github-actions github-actions bot added the json-styled JSON lint passed, label assigned by github actions label Jun 25, 2024
@zachary-kaelan
Copy link
Contributor Author

Only reason I didn't take eye coverage into account before is because my thought process was, "anything that protects against being boomered would protect against conjuctivitis". I'm an idiot, because literally no eyewear lets you see through it if it's covered in gunk.

@worm-girl
Copy link
Contributor

worm-girl commented Jun 25, 2024

Only reason I didn't take eye coverage into account before is because my thought process was, "anything that protects against being boomered would protect against conjuctivitis". I'm an idiot, because literally no eyewear lets you see through it if it's covered in gunk.

This was the thrust of my work on fluids that wound up getting reverted. If you like, you can comb through what I did there (a check against coverage and breathability via a spell attack) but it seemed like Kevin and Fris were simply not interested in that solution at all.

Doing it via flags as you've done in your other PR makes some sense, but it's creating an either/or situation, adding to the already sizable burden of flag compliance that new contributions need to account for, and fails to account for durability damage or other factors that might impede an item's effectiveness. It also means we can't have things like sunglasses or hoods that offer partial protection.

I don't want to stop you from what you're doing as my solution isn't the only possible one, but those were the problems I was trying to tackle. I think conjunctivitis is going to either be unnecessarily punitive or come down to a simple gear check without that problem being solved.

I made conjunctivitis and the boomer overhaul as a low-impact proof of concept that could set up a much higher-impact system for realistically dealing with acid. On its own, the benefit/gameplay effect of having the disease in place is so marginal that I'm not sure it's worth spending too much brainpower on.

@zachary-kaelan
Copy link
Contributor Author

zachary-kaelan commented Jun 26, 2024

It also means we can't have things like sunglasses or hoods that offer partial protection.

Yeah there's actually no reason why I can't just check the coverage against a random number instead of a flat 90, I put that in, as well as a multiplier on the duration roll.

adding to the already sizable burden of flag compliance

set up a much higher-impact system for realistically dealing with acid

Like you mentioned in #72010, I noticed that environmental protection is used as a major hack, with this being just plain ridiculous:

if( ft.has_acid ) {
    return !is_on_ground() && get_env_resist( body_part_foot_l ) >= 15 &&
            get_env_resist( body_part_foot_r ) >= 15 &&
            get_env_resist( body_part_leg_l ) >= 15 &&
            get_env_resist( body_part_leg_r ) >= 15 &&
            // FIXME: Hardcoded damage type
            get_armor_type( damage_acid, body_part_foot_l ) >= 5 &&
            get_armor_type( damage_acid, body_part_foot_r ) >= 5 &&
            get_armor_type( damage_acid, body_part_leg_l ) >= 5 &&
            get_armor_type( damage_acid, body_part_leg_r ) >= 5;

And as pointed out in #66297, there is a lot of inconsistencies with the water-related flags.

I've been questioning what a material giving resistance to acid in materials.json is even supposed to mean. With bash, cut, heat, and bullet it makes sense, but for acid there's no indicator of how it's being assigned. Overall, it seems that a lot of different hacks need to be rolled into one system.

@worm-girl
Copy link
Contributor

My plan was to have acid go from a floor hazard that burns your feet (how is it puddling up that much? Most floors are permeable) to something that could splash on you and damage your body and equipment. In that case, material acid protection values were only going to indicate how well-protected the item itself was from acid. Coverage and breathability woud be what it checked to see if it actually kept the acid from reaching your skin.

@zachary-kaelan
Copy link
Contributor Author

My plan was to have acid go from a floor hazard that burns your feet (how is it puddling up that much? Most floors are permeable) to something that could splash on you and damage your body and equipment. In that case, material acid protection values were only going to indicate how well-protected the item itself was from acid. Coverage and breathability woud be what it checked to see if it actually kept the acid from reaching your skin.

One thing I noticed is that some materials have MOISTURE_WICKING level breathability. Moisture-wicking means a piece of clothing that actively transfers moisture from the skin to the surface of the fabric. Despite a breathability of 110%, this seems like a property that would have some benefit against liquids present on the skin.

@zachary-kaelan
Copy link
Contributor Author

Another thing is that waterproof breathable fabrics exist and are standard for things like raincoats, so breathability and water-permeability aren't synonymous.

@github-actions github-actions bot added the [C++] Changes (can be) made in C++. Previously named `Code` label Jun 26, 2024
src/iuse.cpp Outdated Show resolved Hide resolved
@worm-girl
Copy link
Contributor

worm-girl commented Jun 26, 2024

Another thing is that waterproof breathable fabrics exist and are standard for things like raincoats, so breathability and water-permeability aren't synonymous.

I believe I had plans to make the waterproof flags offer some benefit after the regular breathability was calculated - I think I was going to just treat them as 0% breathable for defensive purposes. Didn't get around to it, but it's a simple issue to tackle.

@github-actions github-actions bot removed the astyled astyled PR, label is assigned by github actions label Jun 26, 2024
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@github-actions github-actions bot added the astyled astyled PR, label is assigned by github actions label Jun 27, 2024
@zachary-kaelan
Copy link
Contributor Author

zachary-kaelan commented Jun 28, 2024

I believe I had plans to make the waterproof flags offer some benefit after the regular breathability was calculated - I think I was going to just treat them as 0% breathable for defensive purposes. Didn't get around to it, but it's a simple issue to tackle.

I think in general the interaction between clothes and water should be reworked from being based on a few flags and environmental protection to being based on new material properties.

@worm-girl
Copy link
Contributor

worm-girl commented Jun 28, 2024

If you review the old PRs, I did not take the environmental protection stat into account at all and don't believe any future solution should either. Enviro stats are completely arbitrary and are nowadays used mostly to represent microbial, gas, and radiation(????) protection.

Breathability and coverage stats along with WATERPROOF flags are already a good basis for liquid protection. Used in tandem with acid protection, there's plenty to work with as is.

The formula was essentially ( chance ) - ( (coverage - breathability) / 2 )%, where chance was a base probability defined by the attack. There was room to account for other factors, such as weather, flags, partial dodges, etc as well, but I didn't get that far.

So if an acid blob hit your arm, it would check the average of breathability and coverage on that part and roll a d100 or whatever, going layer by layer until the attack was blocked or the skin was reached. There was more to it, you'd have to review #71584 to get the full picture.

@worm-girl
Copy link
Contributor

worm-girl commented Jun 28, 2024

Also note that acid protection as currently implemented is bugged, see #72010 for a fix that didn't get merged. That's only tangentially relevant but I figured I'd point it out to you in case you wanted to keep working on this stuff in the future.

PS I'm not trying to argue too much, just explaining the route I tried to take and why in the hope that the information will be useful to you on your coding journey. 🙏

@Maleclypse Maleclypse merged commit a908f98 into CleverRaven:master Jul 1, 2024
25 of 28 checks passed
@zachary-kaelan
Copy link
Contributor Author

If you review the old PRs, I did not take the environmental protection stat into account at all and don't believe any future solution should either. Enviro stats are completely arbitrary and are nowadays used mostly to represent microbial, gas, and radiation(????) protection.

I've been reviewing all your PRs and the discussions on them and the reversions.

I reviewed the environmental protection assignments in the JSON, and all references in the code, and it seems to mostly be a rough measure of the "seal" on clothing. All the wetsuit clothing is on the same level as a cleansuit, for example. This is actually useful information, but it's not at all clear and not used very well. I'll attempt to remedy that. I think it's the missing piece I've been looking for.

PS I'm not trying to argue too much, just explaining the route I tried to take and why in the hope that the information will be useful to you on your coding journey. 🙏

Don't worry, your input is very valuable, keep it up.

@worm-girl
Copy link
Contributor

Glad to hear it.

There was one other factor vis a vis acid - I hadn't implemented it, but I was going to count the clothing's current durability against its coverage. That way a pair of leather boots might offer equal protection to rubber ones on the first acid splash, but it would have a chance to become damaged, while the rubber would be functionally immune to that damage thanks to the material's high acid protection value. Thereafter, the damaged leather boots would be more likely to let acid through to the skin, which would exacerbate as subsequent attacks further damaged the leather.

This way you could still have non-specialized gear offering a modicum of protection, but you'd really be wanting to look for polyester, oiled leather, rubber/rubberized equipment, or metal to keep your skin and your more delicate equipment safe. In testing, it was pretty handy to throw on a rain poncho over your regular gear, which is something that felt like a logical move in a world where stuff is throwing acid at you.

@zachary-kaelan
Copy link
Contributor Author

Thereafter, the damaged leather boots would be more likely to let acid through to the skin, which would exacerbate as subsequent attacks further damaged the leather.

I was doing far too much research into chemical protective equipment, and I saw that things like rubber boots and rubber gloves have certain official safety standards. Resistance to abrasions, cuts, tears, and punctures. Because obviously, the instant a piece of chemical protective equipment has a breach, wearing it is a risk. There are also massive charts on manufacturer websites showing the times it takes for a long list of like 50 different caustic chemicals to go through the different gloves they have: acid resist as you want it has a numerical equivalent in official safety standards.

The "soft" flag, the cut damage verb, and/or the cut resistance could be used in combination with the durability to determine acid penetration. Something with "scratched" as the cut damage verb may not have as many holes or punctures in it when damaged.

@worm-girl
Copy link
Contributor

worm-girl commented Jul 5, 2024

Getting into the nitty gritty of "butyl rubber protects from acid x and acid y but not acid z, and only at these temperatures" is probably creating too much work for future contributors. There's a reason it's currently all just "acid" damage.

Even if there is an eventual desired goal like that, a first pass probably shouldn't seek to split acid damage into twenty new damage types. IMO you'd just want to get something working as-is and then go from there.

@zachary-kaelan
Copy link
Contributor Author

That would be ridiculous. We only have one or two types of rubber gloves and one or two type of zombie acid anyway, I believe.

We might be getting a bit off-topic (waiting to see if someone gives us a hand slap). My Discord is zachthecatguy if you want to move there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
astyled astyled PR, label is assigned by github actions BasicBuildPassed This PR builds correctly, label assigned by github actions [C++] Changes (can be) made in C++. Previously named `Code` <Enhancement / Feature> New features, or enhancements on existing EOC: Effects On Condition Anything concerning Effects On Condition [JSON] Changes (can be) made in JSON json-styled JSON lint passed, label assigned by github actions
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants