Mining armor and suit storage cleanup/generalization/modernization (#83437)

## About The Pull Request

### Suit Storage

Makes the suit storage of the various suits consistent across one
another. Now, all the mining suits use a single list which is easier to
maintain.

**The affected suit list is as follows;**

Explorer Suits (and therefore Syndicate Explorer Suits), Goliath Cloaks,
Bone Armor, Drake Armor, Godslayer Armor, Berserker Armor, Mining
MODsuits, H.E.C.K. Suit.

**The list of holdable items is as follows;**

Flashlights, Proto-Kinetic Accelerators, Advanced Mining Scanners /
Mining Scanners, Pickaxes, Upgraded Resonators / Resonators, Ore Bags,
Air Tanks, Spears, special monster organs like Regenerative Cores,
Knives, Proto-Kinetic Crushers, Cleaving Saws (the one that Blood-Drunk
Miners drop), Grappling Guns and Climbing Hooks.

~~It probably doesn't matter too terribly much because you know only air
tanks are going in that slot 95% of the time~~

### Bone Armor and Goliath Cloaks

Bone armor and goliath cloaks both have the same armor values,
environmental protections and coverage as the explorer suit (bone armor
includes the feet due to the sprite physically covering the feet, which
is not a terribly significant balancing point but worth mentioning).

They use the armor plate component to improve the parts of bone armor.
However, they use bone talismans instead of goliath hide to be upgraded.

Goliath cloaks come fully upgraded. You'll see why in a second.

Their recipes are slightly different. Goliath cloaks take nine hides
(I'm so sorry this is for consistency I promise you can't use the
upgrade system with something that deletes its own armor values like
this) and three sinew. Bone armor takes three goliath hides and 6 bone.

### Berserker Armor

Berserker armor can now be improved to the same armor value as drake
armor by using a full suit on both the body and the helmet of the
berserker armor. (Each drake makes two suits, so you need to use up both
suits).

Instead of an armor boost, rage now halves incoming brute damage. Fuck
you, Bubblegum!

### Minor Mining MODsuit Tweak and other armor value changes

The base value for the armor is now 20, rather than 15, so that when it
reaches max ash accretion it has equivalent armor to a fully upgraded
explorer suit. This is only a value difference of 5, but it always
annoyed me seeing it.

All the above mentioned suits also now have a value of about 10 wound
armor. This is because miners do actually experience wounding on
lavaland. Some of the armors had this wound armor. Some didn't. Now they
all do. I don't believe this to have been a deliberate design choice,
but rather, an oversight. Iunno, someone who keeps track of this please
tell me otherwise.

Upgraded suits get a prefix to show they are upgraded. Now, never doubt
whether the miner you are fighting is in a baseline explorer suit or a
riot suit level improved explorer suit ever again!

### Berserker Armor actually covers up clothing/hair underneath properly
and other minor stuff

This is why I started this PR by the way. This one fix. I expand the
scope of my horizons so broadly when I really sit down and PR, don't I?

H.E.C.K. and Berserker helmets can be used for internals. 

## Why It's Good For The Game

There is a great deal of inconsistency with regards to the various
lavaland armor you can find and use. Some armors were wildly inferior to
others and only really having value for aesthetic. Some just seemed to
have oversights that didn't seem quite right. And most importantly, the
actual storage list for mining suits in general were not only
inconsistent in of themselves, but were also not being updated as time
goes on.

Bringing them all into line allows for miners to have a bit of freedom
of choice when it comes to appearance, without it becoming a balancing
sticking point nor a detriment to their effectiveness. It is also much
easier to maintain one list than six or seven lists.

Assuming that the baseline of the explorer suit is a-okay for someone to
possess, goliath cloaks and bone armor should now feel more like
fashionable choices rather than, in some cases, being either a worse or
better choice to take (its bone armor, bone armor is the best of these,
its really good generalist armor). I don't care what effect it has on
the ashlander economy. Neither should you.

The minor tweaks and fixes are just stuff that annoyed me for autism
reasons or were oversights due to changes to the items in question or
the game around it. I doubt anyone but me cares very much about these
minor differences, but I like consistency.

## Changelog
🆑
balance: The various mining related suits now have consistent suit
storage. Try putting a knife into your explorer suit's suit storage
today!
balance: Bone armor work similarly to explorer suits, with similar armor
values and options to upgrade their parts. However, they use bone
talismans instead of goliath hides to upgrade. Magic? Just believing
really strongly that the drake is hitting you slightly less hard because
of the talismans? You be the judge.
balance: Goliath cloaks come fully upgraded. However...
balance: The recipes for bone armor and goliath cloaks are slightly
different. Particularly goliath cloaks, which need a lot more dead
goliaths to make. Sorry.
balance: Mining MODsuits achieve at maximum ash accretion the same
amount of melee armor as an upgraded explorer suit.
balance: These various suits also consistently have wound armor.
fix: Berserker armor properly hides underclothing and hair.
balance: Berserker armor pieces can absorb drake armor to gain their
enhanced protection. Become the warrior of Khorne you've always wanted
to be.
balance: Berserker rage now halves brute damage rather than just adding
Melee Armor to you and your squishy body.
qol: Berserker and H.E.C.K. helmets can be used for internals.
/🆑
This commit is contained in:
necromanceranne
2024-06-01 23:48:52 +02:00
committed by GitHub
parent 5e45ddc14c
commit c1c43711f3
10 changed files with 185 additions and 185 deletions
+85 -81
View File
@@ -13,16 +13,6 @@
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
hoodtype = /obj/item/clothing/head/hooded/explorer
armor_type = /datum/armor/hooded_explorer
allowed = list(
/obj/item/flashlight,
/obj/item/gun/energy/recharge/kinetic_accelerator,
/obj/item/mining_scanner,
/obj/item/pickaxe,
/obj/item/resonator,
/obj/item/storage/bag/ore,
/obj/item/t_scanner/adv_mining_scanner,
/obj/item/tank/internals,
)
resistance_flags = FIRE_PROOF
/datum/armor/hooded_explorer
@@ -33,6 +23,7 @@
bomb = 50
fire = 50
acid = 50
wound = 10
/obj/item/clothing/head/hooded/explorer
name = "explorer hood"
@@ -52,6 +43,7 @@
/obj/item/clothing/suit/hooded/explorer/Initialize(mapload)
. = ..()
AddComponent(/datum/component/armor_plate)
allowed = GLOB.mining_suit_allowed
/obj/item/clothing/head/hooded/explorer/Initialize(mapload)
. = ..()
@@ -117,19 +109,28 @@
name = "goliath cloak"
icon_state = "goliath_cloak"
desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits."
allowed = list(
/obj/item/flashlight,
/obj/item/knife/combat/bone,
/obj/item/knife/combat/survival,
/obj/item/organ/internal/monster_core,
/obj/item/pickaxe,
/obj/item/spear,
/obj/item/tank/internals,
)
body_parts_covered = CHEST|GROIN|LEGS|ARMS
cold_protection = CHEST|GROIN|LEGS|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
heat_protection = CHEST|GROIN|LEGS|ARMS
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF
armor_type = /datum/armor/cloak_goliath
armor_type = /datum/armor/hooded_goliath
hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath
body_parts_covered = CHEST|GROIN|ARMS
/obj/item/clothing/suit/hooded/cloak/goliath/Initialize(mapload)
. = ..()
allowed = GLOB.mining_suit_allowed
/datum/armor/hooded_goliath
melee = 60
bullet = 10
laser = 10
energy = 20
bomb = 50
fire = 50
acid = 50
wound = 10
/obj/item/clothing/suit/hooded/cloak/goliath/click_alt(mob/user)
if(!iscarbon(user))
@@ -143,58 +144,80 @@
return CLICK_ACTION_BLOCKING
if(slot_flags & ITEM_SLOT_OCLOTHING)
slot_flags = ITEM_SLOT_NECK
cold_protection = null
heat_protection = null
set_armor(/datum/armor/none)
user.visible_message(span_notice("[user] adjusts their [src] for ceremonial use."), span_notice("You adjust your [src] for ceremonial use."))
else
slot_flags = initial(slot_flags)
cold_protection = initial(cold_protection)
heat_protection = initial(heat_protection)
set_armor(initial(armor_type))
user.visible_message(span_notice("[user] adjusts their [src] for defensive use."), span_notice("You adjust your [src] for defensive use."))
return CLICK_ACTION_SUCCESS
/datum/armor/cloak_goliath
melee = 35
bullet = 10
laser = 25
energy = 35
bomb = 25
fire = 60
acid = 60
/obj/item/clothing/head/hooded/cloakhood/goliath
name = "goliath cloak hood"
icon = 'icons/obj/clothing/head/helmet.dmi'
worn_icon = 'icons/mob/clothing/head/helmet.dmi'
icon_state = "golhood"
desc = "A protective & concealing hood."
armor_type = /datum/armor/cloakhood_goliath
armor_type = /datum/armor/hooded_goliath
body_parts_covered = HEAD
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
heat_protection = HEAD
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
clothing_flags = SNUG_FIT
flags_inv = HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR
transparent_protection = HIDEMASK
resistance_flags = FIRE_PROOF
/datum/armor/cloakhood_goliath
melee = 35
bullet = 10
laser = 25
energy = 35
bomb = 25
fire = 60
acid = 60
/obj/item/clothing/head/hooded/cloakhood/goliath/Initialize(mapload)
. = ..()
/obj/item/clothing/suit/armor/bone
name = "bone armor"
desc = "A tribal armor plate, crafted from animal bone."
icon_state = "bonearmor"
inhand_icon_state = null
blood_overlay_type = "armor"
armor_type = /datum/armor/hooded_explorer
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS
cold_protection = CHEST|GROIN|LEGS|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF
/obj/item/clothing/suit/armor/bone/Initialize(mapload)
. = ..()
AddComponent(/datum/component/armor_plate, upgrade_item = /obj/item/clothing/accessory/talisman)
allowed = GLOB.mining_suit_allowed
/obj/item/clothing/head/helmet/skull
name = "skull helmet"
desc = "An intimidating tribal helmet, it doesn't look very comfortable."
icon_state = "skull"
inhand_icon_state = null
strip_delay = 100
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDESNOUT
flags_cover = HEADCOVERSEYES
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
heat_protection = HEAD
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
armor_type = /datum/armor/hooded_explorer
resistance_flags = FIRE_PROOF
/obj/item/clothing/head/helmet/skull/Initialize(mapload)
. = ..()
AddComponent(/datum/component/armor_plate, upgrade_item = /obj/item/clothing/accessory/talisman)
/obj/item/clothing/suit/hooded/cloak/drake
name = "drake armour"
icon_state = "dragon"
desc = "A suit of armour fashioned from the remains of an ash drake."
allowed = list(
/obj/item/flashlight,
/obj/item/gun/energy/recharge/kinetic_accelerator,
/obj/item/mining_scanner,
/obj/item/pickaxe,
/obj/item/resonator,
/obj/item/spear,
/obj/item/t_scanner/adv_mining_scanner,
/obj/item/tank/internals,
)
armor_type = /datum/armor/cloak_drake
hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -214,6 +237,11 @@
bio = 60
fire = 100
acid = 100
wound = 10
/obj/item/clothing/suit/hooded/cloak/drake/Initialize(mapload)
. = ..()
allowed = GLOB.mining_suit_allowed
/obj/item/clothing/head/hooded/cloakhood/drake
name = "drake helm"
@@ -221,7 +249,7 @@
worn_icon = 'icons/mob/clothing/head/helmet.dmi'
icon_state = "dragon"
desc = "The skull of a dragon."
armor_type = /datum/armor/cloakhood_drake
armor_type = /datum/armor/cloak_drake
clothing_flags = SNUG_FIT
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
@@ -229,30 +257,10 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
/datum/armor/cloakhood_drake
melee = 65
bullet = 15
laser = 40
energy = 40
bomb = 70
bio = 60
fire = 100
acid = 100
/obj/item/clothing/suit/hooded/cloak/godslayer
name = "godslayer armour"
icon_state = "godslayer"
desc = "A suit of armour fashioned from the remnants of a knight's armor, and parts of a wendigo."
allowed = list(
/obj/item/flashlight,
/obj/item/gun/energy/recharge/kinetic_accelerator,
/obj/item/mining_scanner,
/obj/item/pickaxe,
/obj/item/resonator,
/obj/item/spear,
/obj/item/t_scanner/adv_mining_scanner,
/obj/item/tank/internals,
)
armor_type = /datum/armor/cloak_godslayer
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL
hoodtype = /obj/item/clothing/head/hooded/cloakhood/godslayer
@@ -280,6 +288,11 @@
bio = 50
fire = 100
acid = 100
wound = 10
/obj/item/clothing/suit/hooded/cloak/godslayer/Initialize(mapload)
. = ..()
allowed = GLOB.mining_suit_allowed
/obj/item/clothing/head/hooded/cloakhood/godslayer
name = "godslayer helm"
@@ -287,7 +300,7 @@
worn_icon = 'icons/mob/clothing/head/helmet.dmi'
icon_state = "godslayer"
desc = "The horns and skull of a wendigo, held together by the remaining icey energy of a demonic miner."
armor_type = /datum/armor/cloakhood_godslayer
armor_type = /datum/armor/cloak_godslayer
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT
cold_protection = HEAD
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
@@ -297,16 +310,6 @@
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
resistance_flags = FIRE_PROOF | ACID_PROOF | FREEZE_PROOF
/datum/armor/cloakhood_godslayer
melee = 50
bullet = 25
laser = 25
energy = 25
bomb = 50
bio = 50
fire = 100
acid = 100
/obj/item/clothing/suit/hooded/cloak/godslayer/examine(mob/user)
. = ..()
if(loc == user && !COOLDOWN_FINISHED(src, effect_cooldown))
@@ -348,6 +351,7 @@
bomb = 50
fire = 60
acid = 60
wound = 10
/obj/item/clothing/head/hooded/explorer/syndicate
name = "syndicate explorer hood"
@@ -261,10 +261,10 @@
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
clothing_flags = THICKMATERIAL
clothing_flags = THICKMATERIAL|HEADINTERNALS
resistance_flags = FIRE_PROOF|LAVA_PROOF|ACID_PROOF
transparent_protection = HIDESUITSTORAGE|HIDEJUMPSUIT
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/recharge/kinetic_accelerator, /obj/item/pickaxe)
allowed = null
greyscale_colors = "#4d4d4d#808080"
greyscale_config = /datum/greyscale_config/heck_suit
greyscale_config_worn = /datum/greyscale_config/heck_suit/worn
@@ -283,6 +283,7 @@
. = ..()
AddElement(/datum/element/radiation_protected_clothing)
AddElement(/datum/element/gags_recolorable)
allowed = GLOB.mining_suit_allowed
/obj/item/clothing/suit/hooded/hostile_environment/process(seconds_per_tick)
var/mob/living/carbon/wearer = loc
+27 -21
View File
@@ -659,7 +659,10 @@
/obj/item/clothing/suit/hooded/berserker
name = "berserker armor"
desc = "Voices echo from the armor, driving the user insane. Is not space-proof."
desc = "This hulking armor seems to possess some kind of dark force within; howling in rage, hungry for carnage. \
The self-sealing stem bolts that allowed this suit to be spaceworthy have long since corroded. However, the entity \
sealed within the suit seems to hunger for the fleeting lifeforce found in the remains left within drake armor. \
Feeding it seems to empower a suit piece, though turns the drake armor back to lifeless ash."
icon_state = "berserker"
icon = 'icons/obj/clothing/suits/armor.dmi'
worn_icon = 'icons/mob/clothing/suits/armor.dmi'
@@ -670,19 +673,9 @@
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
resistance_flags = FIRE_PROOF
clothing_flags = THICKMATERIAL
allowed = list(
/obj/item/flashlight,
/obj/item/tank/internals,
/obj/item/pickaxe,
/obj/item/spear,
/obj/item/organ/internal/monster_core,
/obj/item/knife,
/obj/item/kinetic_crusher,
/obj/item/resonator,
/obj/item/melee/cleaving_saw,
)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
resistance_flags = FIRE_PROOF | ACID_PROOF
clothing_flags = THICKMATERIAL|HEADINTERNALS
/datum/armor/hooded_berserker
melee = 30
@@ -690,23 +683,35 @@
laser = 10
energy = 20
bomb = 50
bio = 60
fire = 100
acid = 100
wound = 10
/datum/armor/drake_empowerment
melee = 35
laser = 30
energy = 20
bomb = 20
/obj/item/clothing/suit/hooded/berserker/Initialize(mapload)
. = ..()
AddComponent(/datum/component/anti_magic, ALL, inventory_flags = ITEM_SLOT_OCLOTHING)
AddComponent(/datum/component/armor_plate, maxamount = 1, upgrade_item = /obj/item/clothing/suit/hooded/cloak/drake, armor_mod = /datum/armor/drake_empowerment, upgrade_prefix = "empowered")
allowed = GLOB.mining_suit_allowed
#define MAX_BERSERK_CHARGE 100
#define PROJECTILE_HIT_MULTIPLIER 1.5
#define DAMAGE_TO_CHARGE_SCALE 0.75
#define CHARGE_DRAINED_PER_SECOND 5
#define BERSERK_MELEE_ARMOR_ADDED 50
#define BERSERK_ATTACK_SPEED_MODIFIER 0.25
/obj/item/clothing/head/hooded/berserker
name = "berserker helmet"
desc = "Peering into the eyes of the helmet is enough to seal damnation."
desc = "This burdensome helmet seems to possess some kind of dark force within; howling in rage, hungry for carnage. \
The self-sealing stem bolts that allowed this helmet to be spaceworthy have long since corroded. However, the entity \
sealed within the suit seems to hunger for the fleeting lifeforce found in the remains left within drake armor. \
Feeding it seems to empower a suit piece, though turns the drake armor back to lifeless ash."
icon_state = "berserker"
icon = 'icons/obj/clothing/head/helmet.dmi'
worn_icon = 'icons/mob/clothing/head/helmet.dmi'
@@ -716,7 +721,8 @@
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS|HIDESNOUT
resistance_flags = FIRE_PROOF | ACID_PROOF
clothing_flags = SNUG_FIT|THICKMATERIAL
/// Current charge of berserk, goes from 0 to 100
var/berserk_charge = 0
@@ -726,6 +732,7 @@
/obj/item/clothing/head/hooded/berserker/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT)
AddComponent(/datum/component/armor_plate, maxamount = 1, upgrade_item = /obj/item/clothing/suit/hooded/cloak/drake, armor_mod = /datum/armor/drake_empowerment, upgrade_prefix = "empowered")
/obj/item/clothing/head/hooded/berserker/examine()
. = ..()
@@ -757,12 +764,12 @@
if(berserk_active)
return TRUE
/// Starts berserk, giving the wearer 50 melee armor, doubled attacking speed, NOGUNS trait, adding a color and giving them the berserk movespeed modifier
/// Starts berserk, reducing incoming brute by 50%, doubled attacking speed, NOGUNS trait, adding a color and giving them the berserk movespeed modifier
/obj/item/clothing/head/hooded/berserker/proc/berserk_mode(mob/living/carbon/human/user)
to_chat(user, span_warning("You enter berserk mode."))
playsound(user, 'sound/magic/staff_healing.ogg', 50)
user.add_movespeed_modifier(/datum/movespeed_modifier/berserk)
user.physiology.armor = user.physiology.armor.generate_new_with_modifiers(list(MELEE = BERSERK_MELEE_ARMOR_ADDED))
user.physiology.brute_mod *= 0.5
user.next_move_modifier *= BERSERK_ATTACK_SPEED_MODIFIER
user.add_atom_colour(COLOR_BUBBLEGUM_RED, TEMPORARY_COLOUR_PRIORITY)
ADD_TRAIT(user, TRAIT_NOGUNS, BERSERK_TRAIT)
@@ -780,7 +787,7 @@
to_chat(user, span_warning("You exit berserk mode."))
playsound(user, 'sound/magic/summonitems_generic.ogg', 50)
user.remove_movespeed_modifier(/datum/movespeed_modifier/berserk)
user.physiology.armor = user.physiology.armor.generate_new_with_modifiers(list(MELEE = -BERSERK_MELEE_ARMOR_ADDED))
user.physiology.brute_mod *= 2
user.next_move_modifier /= BERSERK_ATTACK_SPEED_MODIFIER
user.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_BUBBLEGUM_RED)
REMOVE_TRAIT(user, TRAIT_NOGUNS, BERSERK_TRAIT)
@@ -791,7 +798,6 @@
#undef PROJECTILE_HIT_MULTIPLIER
#undef DAMAGE_TO_CHARGE_SCALE
#undef CHARGE_DRAINED_PER_SECOND
#undef BERSERK_MELEE_ARMOR_ADDED
#undef BERSERK_ATTACK_SPEED_MODIFIER
/obj/item/clothing/glasses/godeye