FakeFishGames / Barotrauma

A 2D online multiplayer game taking place in a submarine travelling through the icy depths of Jupiter's moon Europa.
http://www.barotraumagame.com/
1.74k stars 403 forks source link

Jove fight breaks when health higher than 1.0x and other vitality based problems with difficulty modifiers #13714

Closed JeroonBosch closed 6 months ago

JeroonBosch commented 6 months ago

Discussed in https://github.com/FakeFishGames/Barotrauma/discussions/13713

Originally posted by **Vykn** April 2, 2024 ### What happened? Wheatley gaming season 5.5 has ended, where we played on unstable, and tested out abyssal difficulty (though with the earlier difficulty set, with 0.8x crew vit modifier and such). I was somewhat concerned with the vitality modifiers, considering how vitality greatly affects how afflictions work. This affected the medical system, and how players and enemies took damage. Overall, no major problems were encountered (until the end), but the players quickly noticed some small problems that made things significantly harder than a simple 20% reduction in crew health and a 100% increase in enemy health would indicate, including worse stun for players and 50% less stun on enemies, and medicines both being worse at healing and also more dangerous. (a 0.9x crew vit multiplier means 10% less effective healing and 11% worse side effects) These are completely avoidable with the right knowledge, but I would not be surprised to see people complaining about harder difficulties seeming more unfair than the surface stats might imply. (This will also go the opposite way with easier difficulties being a lot easier than first appearing.) I don't think this is a massive problem, but since basically the entire afflictions system is tied to how much max health characters have, these changes can have unintended side effects depending on how the afflictions/status effects are set up. Anyway, the only actual severe issue is with the Jove fight. If Jove has any amount of health above the default, then the fight is completely impossible. (As you can imagine, we were incredibly thrilled to discover this after going through a 40 hour abyssal campaign) This is because the pylons, when destroyed, apply 10 base Doom of Jove affliction to nearby Joves (which receive 0.1 affliction strength with default vitality, which causes -1000 vit to Jove) so destroying 3 translates to a total -3000 vit and so after all three are destroyed, he is on 7000 vit, which is 70% of his max. The shield drops when he is at 70%, so that's when you can usually start fighting him. The problem is that when Jove has more health (e.g. 2x or 20000 vit) then each pylon only applies 0.05 affliction strength to Jove, which is -500 vit. Destroying all three pylons causes a total of -1500 vitality, which leaves him on 92.5% health, far above the 70% required. Fixing this would require either changing the requirements for the dropping of the shield, or to change the Doom of Jove affliction or how it's applied. It was raised by one of the crew members that this could similarly break modded creatures which have status effects that expect a certain max health, and while I think such a case would be exceedingly rare, it may come up. Anyway, the Jove fight was really the only severe problem we came across with the vitality modifiers, but it demonstrates how closely intertwined the vitality system is with everything else. ### Reproduction steps 1. Start an abyssal campaign 2. teleport to the end 3. destroy the pylons 4. Shield is still up, and Jove is unkillable :( ### Version v1.4.0.0 (unstable)
JeroonBosch commented 6 months ago

Issue as discussed on Slack:

But yea, I guess that still leaves me a bit confused how the vitality doubly matters: 10000 HP Jove means 10str Doom Of Jove = 0.1 of the 1.0 max strength, which means a flat 1000 vitality decrease (10%). 20000 Hp Jove means 10str Doom Of Jove = 0.05 of the 1.0 max strength, which means a flat 500 vitality decrease (2.5%) For the same 10% HP decrease you actually need 40 Doom Of Jove applied

Note that 10 strength "doomofjove" assumes a 100 vitality base human(?), and Jove has 100x as much HP. So the 10 strength is divided by the 100 to get an actual strength of 0.1 - which is also pretty unintuitive.


A solution should ensure the pylons indeed deal 10% vitality damage as the XML suggests:

        <!-- 10% damage on jove to trigger effects and new states -->
        <Affliction identifier="doomofjove" strength="10" />
JeroonBosch commented 6 months ago

My testing in-game was done, @Regalis11 mentioned on slack testing it also, so re-assigned this:

I think a more thorough and efficient way to check this would've been to make it compare the deserialized affliction to one that's been deserialized the "old way"

SomeRandomNoobKekeke commented 6 months ago

addition to "other vitality based problems with difficulty modifiers" https://github.com/FakeFishGames/Barotrauma/discussions/13735