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