From c1c43711f37d7aea388dca084a9a8fbba3e2e712 Mon Sep 17 00:00:00 2001 From: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Date: Sun, 2 Jun 2024 07:48:52 +1000 Subject: [PATCH] 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 :cl: 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. /:cl: --- code/__DEFINES/inventory.dm | 20 +++ code/datums/actions/items/beserk.dm | 8 +- code/datums/components/armor_plate.dm | 57 +++--- code/datums/components/crafting/tailoring.dm | 12 +- code/modules/clothing/head/helmet.dm | 19 -- code/modules/clothing/suits/armor.dm | 19 -- .../modules/mining/equipment/explorer_gear.dm | 166 +++++++++--------- .../modules/mining/lavaland/megafauna_loot.dm | 5 +- code/modules/mining/lavaland/tendril_loot.dm | 48 ++--- code/modules/mod/mod_theme.dm | 16 +- 10 files changed, 185 insertions(+), 185 deletions(-) diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index f80316a133f..f915b0f66a7 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -241,6 +241,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 diff --git a/code/datums/actions/items/beserk.dm b/code/datums/actions/items/beserk.dm index a3d89d5f239..43e29dbd150 100644 --- a/code/datums/actions/items/beserk.dm +++ b/code/datums/actions/items/beserk.dm @@ -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 ..() diff --git a/code/datums/components/armor_plate.dm b/code/datums/components/armor_plate.dm index 48f428eafa3..7f56f2d74e4 100644 --- a/code/datums/components/armor_plate.dm +++ b/code/datums/components/armor_plate.dm @@ -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) diff --git a/code/datums/components/crafting/tailoring.dm b/code/datums/components/crafting/tailoring.dm index 3476016ead3..e2ba25e9c45 100644 --- a/code/datums/components/crafting/tailoring.dm +++ b/code/datums/components/crafting/tailoring.dm @@ -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 diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 0122cda3978..8156c87a1fb 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -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." diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index b12a220c2f0..2502850bd70 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -293,25 +293,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..." diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index 5485ce72f22..ecaa17321c4 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -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" diff --git a/code/modules/mining/lavaland/megafauna_loot.dm b/code/modules/mining/lavaland/megafauna_loot.dm index 626543f4060..1b015abea87 100644 --- a/code/modules/mining/lavaland/megafauna_loot.dm +++ b/code/modules/mining/lavaland/megafauna_loot.dm @@ -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 diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index 8a90f0e548c..7433b2b55da 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -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 diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index 971ccaf5c72..8978a411371 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -444,16 +444,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) variants = list( "mining" = list( @@ -522,8 +512,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