[MIRROR] Mining armor and suit storage cleanup/generalization/modernization (#27962)

* 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.
/🆑

* Mining armor and suit storage cleanup/generalization/modernization

* There we go.

* Guess I missed this one

---------

Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com>
This commit is contained in:
SkyratBot
2024-06-02 17:37:29 +02:00
committed by GitHub
co-authored by necromanceranne Useroth SpaceLoveSs13
parent 0289d2f211
commit c43cef7e8c
11 changed files with 187 additions and 187 deletions
+20
View File
@@ -261,6 +261,26 @@ GLOBAL_LIST_INIT(chaplain_suit_allowed, list(
/obj/item/gun/ballistic/revolver/chaplain,
))
//Allowed list for all mining suits
GLOBAL_LIST_INIT(mining_suit_allowed, list(
/obj/item/t_scanner/adv_mining_scanner,
/obj/item/melee/cleaving_saw,
/obj/item/climbing_hook,
/obj/item/flashlight,
/obj/item/grapple_gun,
/obj/item/tank/internals,
/obj/item/gun/energy/recharge/kinetic_accelerator,
/obj/item/kinetic_crusher,
/obj/item/knife,
/obj/item/mining_scanner,
/obj/item/organ/internal/monster_core,
/obj/item/storage/bag/ore,
/obj/item/pickaxe,
/obj/item/resonator,
/obj/item/spear,
))
/// String for items placed into the left pocket.
#define LOCATION_LPOCKET "in your left pocket"
/// String for items placed into the right pocket
+4 -4
View File
@@ -8,13 +8,13 @@
/datum/action/item_action/berserk_mode/Trigger(trigger_flags)
if(istype(target, /obj/item/clothing/head/hooded/berserker))
var/obj/item/clothing/head/hooded/berserker/berzerk = target
if(berzerk.berserk_active)
var/obj/item/clothing/head/hooded/berserker/berserk = target
if(berserk.berserk_active)
to_chat(owner, span_warning("You are already berserk!"))
return
if(berzerk.berserk_charge < 100)
if(berserk.berserk_charge < 100)
to_chat(owner, span_warning("You don't have a full charge."))
return
berzerk.berserk_mode(owner)
berserk.berserk_mode(owner)
return
return ..()
+34 -23
View File
@@ -1,14 +1,21 @@
/datum/component/armor_plate
/// The current number of upgrades applied to the parent via this component.
var/amount = 0
/// The maximum number of upgarde items that can be applied. Once var/amount reaches this value, no more upgrades can be applied
var/maxamount = 3
/// THe path for our upgrade item. Each one is expended to improve the parent's armor values.
var/upgrade_item = /obj/item/stack/sheet/animalhide/goliath_hide
/// THe armor datum path for our upgrade values. This value is added per upgrade item applied
var/datum/armor/armor_mod = /datum/armor/armor_plate
/// The name of the upgrade item.
var/upgrade_name
/// Adds a prefix to the item, demonstrating that it is upgraded in some way.
var/upgrade_prefix = "reinforced"
/datum/armor/armor_plate
melee = 10
/datum/component/armor_plate/Initialize(_maxamount, obj/item/_upgrade_item, datum/armor/_added_armor)
/datum/component/armor_plate/Initialize(maxamount, obj/item/upgrade_item, datum/armor/armor_mod, upgrade_prefix = "reinforced")
if(!isobj(parent))
return COMPONENT_INCOMPATIBLE
@@ -18,14 +25,16 @@
if(istype(parent, /obj/vehicle/sealed/mecha/ripley))
RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(apply_mech_overlays))
if(_maxamount)
maxamount = _maxamount
if(_upgrade_item)
upgrade_item = _upgrade_item
if(_added_armor)
armor_mod = _added_armor
if(maxamount)
src.maxamount = maxamount
if(upgrade_item)
src.upgrade_item = upgrade_item
if(armor_mod)
src.armor_mod = armor_mod
if(upgrade_prefix)
src.upgrade_prefix = upgrade_prefix
var/obj/item/typecast = upgrade_item
upgrade_name = initial(typecast.name)
src.upgrade_name = initial(typecast.name)
/datum/component/armor_plate/proc/examine(datum/source, mob/user, list/examine_list)
SIGNAL_HANDLER
@@ -45,34 +54,36 @@
else
examine_list += span_notice("It can be strengthened with up to [maxamount] [upgrade_name].")
/datum/component/armor_plate/proc/applyplate(datum/source, obj/item/I, mob/user, params)
/datum/component/armor_plate/proc/applyplate(datum/source, obj/item/our_upgrade_item, mob/user, params)
SIGNAL_HANDLER
if(!istype(I,upgrade_item))
if(!istype(our_upgrade_item, upgrade_item))
return
if(amount >= maxamount)
to_chat(user, span_warning("You can't improve [parent] any further!"))
return
if(istype(I,/obj/item/stack))
I.use(1)
if(istype(our_upgrade_item, /obj/item/stack))
our_upgrade_item.use(1)
else
if(length(I.contents))
to_chat(user, span_warning("[I] cannot be used for armoring while there's something inside!"))
if(length(our_upgrade_item.contents))
to_chat(user, span_warning("[our_upgrade_item] cannot be used for armoring while there's something inside!"))
return
qdel(I)
qdel(our_upgrade_item)
var/obj/O = parent
var/obj/target_for_upgrading = parent
amount++
O.set_armor(O.get_armor().add_other_armor(armor_mod))
target_for_upgrading.set_armor(target_for_upgrading.get_armor().add_other_armor(armor_mod))
if(ismecha(O))
var/obj/vehicle/sealed/mecha/R = O
R.update_appearance()
to_chat(user, span_info("You strengthen [R], improving its resistance against melee, bullet and laser damage."))
if(ismecha(target_for_upgrading))
var/obj/vehicle/sealed/mecha/mecha_for_upgrading = target_for_upgrading
mecha_for_upgrading.update_appearance()
to_chat(user, span_info("You strengthen [mecha_for_upgrading], improving its resistance against attacks."))
else
SEND_SIGNAL(O, COMSIG_ARMOR_PLATED, amount, maxamount)
to_chat(user, span_info("You strengthen [O], improving its resistance against melee attacks."))
SEND_SIGNAL(target_for_upgrading, COMSIG_ARMOR_PLATED, amount, maxamount)
if(upgrade_prefix)
target_for_upgrading.name = "[upgrade_prefix] [target_for_upgrading.name]"
to_chat(user, span_info("You strengthen [target_for_upgrading], improving its resistance against attacks."))
/datum/component/armor_plate/proc/dropplates(datum/source, force)
+7 -5
View File
@@ -166,7 +166,10 @@
name = "Bone Armor"
result = /obj/item/clothing/suit/armor/bone
time = 3 SECONDS
reqs = list(/obj/item/stack/sheet/bone = 6)
reqs = list(
/obj/item/stack/sheet/bone = 6,
/obj/item/stack/sheet/animalhide/goliath_hide = 3,
)
category = CAT_CLOTHING
/datum/crafting_recipe/bonetalisman
@@ -244,10 +247,9 @@
result = /obj/item/clothing/suit/hooded/cloak/goliath
time = 5 SECONDS
reqs = list(
/obj/item/stack/sheet/leather = 2,
/obj/item/stack/sheet/sinew = 2,
/obj/item/stack/sheet/animalhide/goliath_hide = 2,
) //it takes 4 goliaths to make 1 cloak if the plates are skinned
/obj/item/stack/sheet/sinew = 3,
/obj/item/stack/sheet/animalhide/goliath_hide = 9,
)
category = CAT_CLOTHING
/datum/crafting_recipe/drakecloak
-19
View File
@@ -424,25 +424,6 @@
armor_type = /datum/armor/knight_greyscale
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Can change color and add prefix
/obj/item/clothing/head/helmet/skull
name = "skull helmet"
desc = "An intimidating tribal helmet, it doesn't look very comfortable."
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDESNOUT
flags_cover = HEADCOVERSEYES
armor_type = /datum/armor/helmet_skull
icon_state = "skull"
inhand_icon_state = null
strip_delay = 100
/datum/armor/helmet_skull
melee = 35
bullet = 25
laser = 25
energy = 35
bomb = 25
fire = 50
acid = 50
/obj/item/clothing/head/helmet/durathread
name = "durathread helmet"
desc = "A helmet made from durathread and leather."
-19
View File
@@ -317,25 +317,6 @@
acid = 80
wound = 20
/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/armor_bone
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS
/datum/armor/armor_bone
melee = 35
bullet = 25
laser = 25
energy = 35
bomb = 25
fire = 50
acid = 50
wound = 10
/obj/item/clothing/suit/armor/balloon_vest
name = "balloon vest"
desc = "A vest made entirely from balloons, resistant to any evil forces a mime could throw at you, including electricity and fire. Just a strike with something sharp, though..."
+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
@@ -284,6 +284,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'
@@ -671,19 +674,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
@@ -691,23 +684,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'
@@ -717,7 +722,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
@@ -727,6 +733,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()
. = ..()
@@ -758,12 +765,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)
@@ -781,7 +788,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)
@@ -792,7 +799,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
+5 -11
View File
@@ -321,16 +321,6 @@
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
complexity_max = DEFAULT_MAX_COMPLEXITY - 2
charge_drain = DEFAULT_CHARGE_DRAIN * 2
allowed_suit_storage = list(
/obj/item/resonator,
/obj/item/mining_scanner,
/obj/item/t_scanner/adv_mining_scanner,
/obj/item/pickaxe,
/obj/item/kinetic_crusher,
/obj/item/stack/ore/plasma,
/obj/item/storage/bag/ore,
/obj/item/gun/energy/recharge/kinetic_accelerator,
)
inbuilt_modules = list(/obj/item/mod/module/ash_accretion, /obj/item/mod/module/sphere_transform)
skins = list(
"mining" = list(
@@ -385,8 +375,12 @@
),
)
/datum/mod_theme/loader/New()
.=..()
allowed_suit_storage = GLOB.mining_suit_allowed
/datum/armor/mod_theme_mining
melee = 15
melee = 20
bullet = 5
laser = 5
energy = 5
@@ -54,7 +54,7 @@
/obj/item/clothing/suit/hifl_suit/Initialize(mapload)
. = ..()
AddComponent(/datum/component/armor_plate, _maxamount = 1, _upgrade_item = /obj/item/stack/sheet/animalhide/ashdrake) //how dare i assume we have sane argument names
AddComponent(/datum/component/armor_plate, maxamount = 1, upgrade_item = /obj/item/stack/sheet/animalhide/ashdrake) //how dare i assume we have sane argument names
AddComponent(/datum/component/toggle_attached_clothing, \
deployable_type = /obj/item/clothing/mask/hifl, \
equipped_slot = ITEM_SLOT_MASK, \
@@ -104,4 +104,4 @@
/obj/item/clothing/mask/hifl/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, type) //closest thing to "facehugger protection" you can have on masks, but jank as FUCK
AddComponent(/datum/component/armor_plate, _maxamount = 1, _upgrade_item = /obj/item/stack/sheet/animalhide/ashdrake)
AddComponent(/datum/component/armor_plate, maxamount = 1, upgrade_item = /obj/item/stack/sheet/animalhide/ashdrake)