Combat exoskeleton update
Summary
Content "Rework exoskeletons"
Purpose of change
While combat exoskeletons are "functional" at the moment I think they have a few big issues:
- They don't seem to be based of any actual exoskeleton and don't actually give any of the advantages that real life exoskeletons bring, like increased carry weight, and instead reduce their own encumbrance.
- They don't seem to be lore accurate, they're using materials that should be exclusive to Rivtech products like Inert Hyperweave. The field combat exoskeleton is also less encumbering when on than the hyper advanced RM13 despite them being released at roughly the same time.
- Their values are either old or were unbalanced from the start and some are straight up inconsistent or absurd. The regular combat exoskeleton is warmer than the others for no reason and the armor values are silly, 100% coverage, on every material, including rigid ones, with a thickness of 15mm.
While a single one of these issues may only require tweaking some values, I think that at this point it would be easier to completely rework them.
Those were only examples, basically I aim to bring exoskeleton up to modern standards regarding armor, fix their inconsistencies and add some features to them.
Describe the solution
Before describing my implementation, I would like to put a disclaimer: exoskeletons IRL while under development for military applications are not meant to be used in combat in any capacity, the existence of "combat exoskeletons" is fictional and while I tried to keep my implementation grounded in reality using real life examples and common sense the very concept of them needs to be accepted as such.
I will now give an overview of the changes I've made to combat exoskeletons:
- Exoskeletons are now separated into their protective suit which includes the exoskeleton itself, and their armor, which are ablative armor pieces that you are meant to attach to the exoskeleton:
- Exoskeletons now give bonus carry weight, this bonus scales off the user original carry weight and as such represent actual exoskeletons ability to "enhance" their user's strength. They still reduce their own encumbrance when active.
- Exoskeleton armors have been modernized, they have gaps, use believable materials and layering but keep the original feel and intent of making the user near bulletproof with the heaviest armor.
- Power usage have been drastically lowered but have been kept higher than their rivtech counterpart.
- Exoskeleton helmets have been removed and replaced by the exoskeleton suit covering the head and allowing head armor to be equipped.
- Exoskeleton frames have been removed, you can now equip backpacks and items in the strapped layer in general.
- The skintight layer is now free so you can wear underwear or glasses inside an exoskeleton.
- Exoskeleton generators have been removed, I just don't think they make a lot of sense given the existence of military plutonium batteries that could keep exoskeletons active for nearly an entire day.
- Added some recipes to reinforce the now existing gaps in exoskeleton armor with chainmail, this is mainly aimed at melee survivors for which those kind of modifications make sense, this doesn't otherwise increase the protection values of the other parts and costs a couple of encumbrance points.
- Slightly increased exoskeleton drop rates in TCLs, I feel like exoskeletons have been kind of forgotten due to their state and no modern content have them as reward, adding to that the rarity of TCLs I think it's fair to have the only place spawning them doing so with a bit more reliability.
- Encumbrance values of exoskeletons/armors have been increased. The old values are insane with the light exoskeleton having literally no encumbrance and the regular one having as much as the RM13. They lightest combination is now slightly more encumbering than the RM13.
- Exoskeleton suits now provide cooling similar to nomad gear when on, unlike nomad gear this climate control only cools the user, heating should be entirely unneeded.
- Exoskeletons are now called as such in their ids, I couldn't remove all mentions of power armors but I removed most of them, this should reduce confusion when dealing with them in the code.
There's other minor features that I didn't mention like the ability to put MOLLE attachments on the torso armor for example.
Describe alternatives you've considered
- Remove combat exoskeletons altogether since they're not realistic but it would be a bit of a loss given their iconic nature and cool value.
- Some of the life support features of the exoskeleton suits should be able to be turned on and off when not needed, they should also consume gas filters and ice for the cooling system, this will come in a future PR.
Testing
Spawned, equipped and turned on every exoskeleton with different armors. I may have missed broken stuff and there is always a possibility that I may have missed something when copy pasting my jsons from my game directory to my github folder.
Additional context
This is my first PR but I'm confident I can do it. I also aim to update this description as I am working on the PR to match the changes done as well as adding some context to the changes made. I would like to mention @Drew4484 as I'm basically finishing what he started in #61486.
Edit: well, this took me a while, I went through a lot of concepts, ideas balance changes, a broken laptop and more. I'm sorry it took that long but I think working on this PR was a great learning experience, I'm pretty sure future PRs will take me less time, I think I now have a pretty good idea of what belongs or not in the game and how it should be implemented.
Here's a table of most balance-relevant values for the updated exoskeletons and their armor:
| Exoskeletons | Heavy | Medium | Light |
|---|---|---|---|
| Weight | 13 Kg | 13 Kg | 13 Kg |
| Encumbrance (Off) | 30 | 30 | 30 |
| Encumbrance (Off) | 18 | 14 | 10 |
| Carry weight multiplier | 1.8 | 1.6 | 1.4 |
| Power usage | 200 W | 175 W | 150 W |
| Armor | Heavy | Medium | Light |
|---|---|---|---|
| Weight (total) | 33.3 Kg | 26.6 Kg | 20 Kg |
| Encumbrance | 8 | 6 | 4 |
| Blunt Prot | 74.6 | 52.6 | 30.6 |
| Cut Prot | 75.8 | 53.8 | 31.8 |
| Bullet Prot | 68 | 53 | 38 |
@BalthazarArgall Thanks for picking this up, shoot me a message on Discord if you run into any issues or questions. Are you going to do all the suits? My main goal was the armor plating and power supplies, in the write-up for the rest I was going to leave the existing pockets/storage intact. The power generation part is automatic now based on fuel type, and the stuff like strength bonuses should be easy effects.
@Drew4484
I am indeed going to do all the suits. I'll change the PR comment to answer all these question and go more in depth with my plans but basically I planned pretty much the same. You can already check the updated power_armor.json commit to get a preview of the changes.
On a side note, it's actually uncanny, I was thinking about how I would rework the exoskeletons a couple months back and when I checked Github to actually do it I saw your PR and you had pretty much all the same ideas. Even down to the possibility to modify the utility exoskeleton into a makeshift combat exo. (Not that surprising actually, the concept is epic).
There's already plating/pocket flags for all the Aftershock Exosuits, starts at https://github.com/CleverRaven/Cataclysm-DDA/blob/ce449ad85632ad4948fadd9959218850845f82ed/data/json/flags.json#L2129.
There's already plating/pocket flags for all the Aftershock Exosuits, starts at
https://github.com/CleverRaven/Cataclysm-DDA/blob/ce449ad85632ad4948fadd9959218850845f82ed/data/json/flags.json#L2129 .
@Drew4484 Isn't it part of Aftershock though? How would it work in vanilla CDDA?
First of all, those changes are cool! Thanks for giving them a shot :)
I like how the exoskeleton is basically a "plate carrier" at this point. My 2cc, I don't see much reason to have Heavy/Medium/Light versions of everything. I see how this PR ended up with that as porting from existing armor.
More interesting to me would be have a single (or maybe 2) plates most, and advanced exoskeletons get lighter and more efficient (carry more, maybe less energy). Also, they could also be the ones with more modular options besides the amor itself - maybe that's what you have in mind already!
Another thought to share: I like this approach of modular exoskeletons as they bring some opportunity for loot. For example, militar bunkers could have the armor plates but almost never an exoskeleton itself (so they help "refill", but you still need to search at TCLs and such). Maybe some makeshift plates could be a thing as well (DIY or ask the blacksmith NPC for help).
There's already plating/pocket flags for all the Aftershock Exosuits, starts at
https://github.com/CleverRaven/Cataclysm-DDA/blob/ce449ad85632ad4948fadd9959218850845f82ed/data/json/flags.json#L2129 .
@Drew4484 Isn't it part of Aftershock though? How would it work in vanilla CDDA?
Flags are universal, they exist in the core game files.
@andrewhr while I was designing the whole thing I considered getting rid of exoskeleton "versions" actually, but I read the lore and unless I can change it (I can't), I have to stick to 3 versions at least, they also have to be lighter versions of each other and not totally different concepts.
I don't know if this was implemented when I uploaded the last commits but exoskeleton indeed do get more efficient, they also get less encumbering, the tradeoff is carry capacity though. This, coupled with the fact that exoskeletons are now separate from their armor means that if your character is super strong you can equip the heaviest armor with the lightest exo but if your character is a wimp you may have to equip the heavier exos or choose to make compromises in terms of what body part gets the heavier armor, if at all, which makes exoskeletons far more interesting I think.
@andrewhr while I was designing the whole thing I considered getting rid of exoskeleton "versions" actually, but I read the lore and unless I can change it (I can't), I have to stick to 3 versions at least, they also have to be lighter versions of each other and not totally different concepts.
I don't know if this was implemented when I uploaded the last commits but exoskeleton indeed do get more efficient, they also get less encumbering, the tradeoff is carry capacity though. This, coupled with the fact that exoskeletons are now separate from their armor means that if your character is super strong you can equip the heaviest armor with the lightest exo but if your character is a wimp you may have to equip the heavier exos or choose to make compromises in terms of what body part gets the heavier armor, if at all, which makes exoskeletons far more interesting I think.
The multiple versions also act as a sort of 'reward tier'. An early model might be found in a lab or testing center, while a more advanced model with better power efficiency could be a nano fab or other faction reward.
This also follows a typical prototype to production timeline, the early versions aren't meant for wide use, but enough have to be built for testing. Second version incorporates lessons learned from the prototype, third version incorporates lessons from the field.
I love the idea of modularity so that you can start using the exoskeleton before finding a full/optimal set, just for the sake of extending the endgame progression. Tiers of every module? Yes, please. Currently once you find the power armor, there's nothing to use it for anyway, because you practically win the game. So constructing it piece by piece could make for a great endgame-type aspirational content.
Not really suggesting anything here, just really happy to see this being worked on. Thanks, @BalthazarArgall and @Drew4484. I really hope to see this through, and specifically for DDA and not only Aftershock.
Tweaking modularity (whether more versions or less) is imho something for a follow up PR
@Drew4484 Ye that's what I've been working on at the moment, let me just update with the latest changes.
Still working on this.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. Please do not bump or comment on this issue unless you are actively working on it. Stale issues, and stale issues that are closed are still considered.
@Procyonae don't pay too much attention to this PR. My laptop is dying at the moment and I can't open CDDA without it giving me the BSOD anymore. A replacement is on the way but until then I can't even test my changes. At least my code editor still works somewhat.
I got an epiphany a couple days ago though, so I may still work on it, maybe even finish it before then, but it's going to be a pain to debug if I make a mistake.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. Please do not bump or comment on this issue unless you are actively working on it. Stale issues, and stale issues that are closed are still considered.
I just got my replacement laptop today, development will resume as soon as I finish installing the necessary apps and have some free time.
To be clear, the mod stuff is completely unrelated but I don't know how to get rid of it.
What a hecking mess 💀 , someone help me get rid of this bloody Alchemy1.json I clearly have no idea what I'm doing.
It worked. I must be some kind of code genius.
I don't understand why the tests are failing at this point, seems unrelated to me.
I don't understand why the tests are failing at this point, seems unrelated to me.
https://github.com/CleverRaven/Cataclysm-DDA/actions/runs/8216527209/job/22471207950?pr=68758#step:17:237
(all_mods)=> (continued from above) ERROR : src/item_factory.cpp:1454 [void Item_factory::finalize_item_blacklist()] item on blacklist depowered_armor does not exist
(all_mods)=> 19:03:50.531 ERROR : src/item_factory.cpp:1454 [void Item_factory::finalize_item_blacklist()] item on blacklist depowered_helmet does not exist
Alright this time I double checked and I saw no reference to stuff I changed. GCC9 is failing because of a /home/runner/work/Cataclysm-DDA/Cataclysm-DDA/src/main_menu.cpp:86: undefined reference to ImGui::ShowDemoWindow(bool*) and the Text Changes Analyzer is because of something related to the head bodypart of a dragonfly.
After reviewing the proposed changes, I have to say that I don't think this fits as a replacement to the existing power armor. While the idea of power armor in fiction is impractical for our modern world, it does fit in Cataclysm's setting where things like 'budgets' and 'practicality' went out the window a while back. The direction you've gone here feels more like a diverging branch, like the utility exoskeletons (ice_utility_exoskeleton_off/utility_exoskeleton_off). Those are intended (and based on real world models) to be a walking forklift/heavy tool platform. The inspiration you've listed above would be great if reworked as something lightweight that reduces stamina consumption (like what most RL militaries are trialing), a completely valid and useful tool for a survivor. If that is added as a separate item instead of a replacement, that allows for the power armor suits to remain in the game, albeit still needing updates.
@Drew4484 thanks for the feedback. Could you point out specifically what part of this implementation you are having issues with on a conceptual level?
Is it the lack of environmental resistances? Does the armor feel lackluster to you? Do you think that exoskeletons should give more strength to their users (the stat)?
@Drew4484 thanks for the feedback. Could you point out specifically what part of this implementation you are having issues with on a conceptual level?
Is it the lack of environmental resistances? Does the armor feel lackluster to you? Do you think that exoskeletons should give more strength to their users (the stat)?
This feels like a step sideways, the only real change to the status quo is that there is now a light frame that can support an entire suit of armor with trivial weight/encumbrance penalty, light power consumption, and none of the functionality of the existing suits.
Either these are meant for combat or not, if not the armor options (if any) would be closer to a bulletproof vest than a suit of plate. If they are intended for combat, they should have enough survivability and capacity to make them worthwhile (small arms resistant, capable of carrying enough firepower to add value beyond a single infantry soldier, integrated CBRN/communication).
The armors should not be a single piece, as we're moving away from monoarmor into specific limb coverage.
@Drew4484 Alright, I moved the previous implementation to another branch and moved to a more power fantasy concept staying close to the original design while modernizing everything and opening the way to possible extensions.
The main file contain way more lines, sorry if it makes it hard to review, there is no way to target specific armor parts for proportional encumbrance modifications (to my knowledge).
I'll report those modifications in the PR description soon.
@Drew4484 Alright, I moved the previous implementation to another branch and moved to a more power fantasy concept staying close to the original design while modernizing everything and opening the way to possible extensions.
The main file contain way more lines, sorry if it makes it hard to review, there is no way to target specific armor parts for proportional encumbrance modifications (to my knowledge).
I'll report those modifications in the PR description soon.
You can set individual pieces have their own encumbrance, take a look at https://github.com/CleverRaven/Cataclysm-DDA/blob/master/data/mods/Aftershock/items/armor/exosuit/exosuit_plating_arms.json. I don't use variable encumbrance here because these are all engineered pieces, but a scrap version could have higher encumbrance.
@Drew4484 No I mean individual armor pieces have their own encumbrance values in the (off) armors, my issue is that the (on) armors can't specifically target the single piece that I want to have reduced encumbrance, leading to a lot of repeated code that I can't shorten without dealing with cpp (which I may do in the future but is out of scope for this PR).
On a side note, I think I fixed all the bugs and got all the features right. I won't touch the files again unless changes are requested.
@Drew4484 No I mean individual armor pieces have their own encumbrance values in the (off) armors, my issue is that the (on) armors can't specifically target the single piece that I want to have reduced encumbrance, leading to a lot of repeated code that I can't shorten without dealing with cpp (which I may do in the future but is out of scope for this PR).
On a side note, I think I fixed all the bugs and got all the features right. I won't touch the files again unless changes are requested.
Transfer encumbrance from the armor to the unpowered armor (low encumbrance per plate, higher encumbrance on the frame, reduced while the frame is active). The plates should not add a lot of encumbrance when attached to a rigid frame, just weight.
@Drew4484 I adjusted the encumbrance values as follows (those values are for the limbs covered by the exoskeleton):
| Heavy | Medium | Light | |
|---|---|---|---|
| Exoskeleton (off) | 30 | 30 | 30 |
| Exoskeleton (on) | 18 | 14 | 10 |
| Armor | 8 | 6 | 4 |
| Armor (reinforced) | 10 | 8 | 6 |
I could have gone even lower but there's a few limits I'm reluctant to push:
- I don't want the light exoskeleton + armor to go lower than 14, the RM13 is at 10 and is supposed to be the most advanced tech available (from what I understand).
- I don't want the armor from different categories to have the same encumbrance, if all armor pieces have the same encumbrance there is no choice, you just equip the heaviest available. I could balance them around weight but this is a bad idea for good reasons.
- Justifying even higher encumbrance on the active exoskeletons is difficult, 10-18 is already quite encumbering, our real life equivalents aren't really that cumbersome and CDDA's are supposed to be slightly more advanced.
I could make the exoskeleton encumbrance values 14 > 12 > 10 I'm a bit torn on this, your call.