mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-19 12:05:59 +01:00
MODsuits (#59109)
This commit is contained in:
@@ -260,23 +260,26 @@
|
||||
user.log_message("activated a bottle of mayhem", LOG_ATTACK)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/hostile_environment
|
||||
/obj/item/clothing/suit/hooded/hostile_environment
|
||||
name = "H.E.C.K. suit"
|
||||
desc = "Hostile Environment Cross-Kinetic Suit: A suit designed to withstand the wide variety of hazards from Lavaland. It wasn't enough for its last owner."
|
||||
icon_state = "hostile_env"
|
||||
inhand_icon_state = "hostile_env"
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
resistance_flags = FIRE_PROOF | LAVA_PROOF | ACID_PROOF
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/hostile_environment
|
||||
slowdown = 0
|
||||
hoodtype = /obj/item/clothing/head/hooded/hostile_environment
|
||||
armor = list(MELEE = 70, BULLET = 40, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, FIRE = 100, ACID = 100)
|
||||
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
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
|
||||
resistance_flags = FIRE_PROOF|LAVA_PROOF|ACID_PROOF
|
||||
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/kinetic_accelerator, /obj/item/pickaxe)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/hostile_environment/Initialize(mapload)
|
||||
/obj/item/clothing/suit/hooded/hostile_environment/Initialize(mapload)
|
||||
. = ..()
|
||||
AddElement(/datum/element/radiation_protected_clothing)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/hostile_environment/process(delta_time)
|
||||
/obj/item/clothing/suit/hooded/hostile_environment/process(delta_time)
|
||||
. = ..()
|
||||
var/mob/living/carbon/wearer = loc
|
||||
if(istype(wearer) && DT_PROB(1, delta_time)) //cursed by bubblegum
|
||||
@@ -286,45 +289,47 @@
|
||||
else
|
||||
to_chat(wearer, span_warning("[pick("You hear faint whispers.","You smell ash.","You feel hot.","You hear a roar in the distance.")]"))
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/hostile_environment
|
||||
/obj/item/clothing/head/hooded/hostile_environment
|
||||
name = "H.E.C.K. helmet"
|
||||
desc = "Hostile Environiment Cross-Kinetic Helmet: A helmet designed to withstand the wide variety of hazards from Lavaland. It wasn't enough for its last owner."
|
||||
icon_state = "hardsuit0-heck"
|
||||
inhand_icon_state = "hostile_env"
|
||||
hardsuit_type = "heck"
|
||||
icon_state = "hostile_env"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
armor = list(MELEE = 70, BULLET = 40, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, FIRE = 100, ACID = 100)
|
||||
resistance_flags = FIRE_PROOF | LAVA_PROOF | ACID_PROOF
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
clothing_flags = SNUG_FIT|THICKMATERIAL
|
||||
resistance_flags = FIRE_PROOF|LAVA_PROOF|ACID_PROOF
|
||||
actions_types = list()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/hostile_environment/Initialize(mapload)
|
||||
/obj/item/clothing/head/hooded/hostile_environment/Initialize(mapload)
|
||||
. = ..()
|
||||
update_appearance()
|
||||
AddComponent(/datum/component/butchering, 5, 150, null, null, null, TRUE, CALLBACK(src, .proc/consume))
|
||||
AddElement(/datum/element/radiation_protected_clothing)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/hostile_environment/equipped(mob/user, slot, initial = FALSE)
|
||||
/obj/item/clothing/head/hooded/hostile_environment/equipped(mob/user, slot, initial = FALSE)
|
||||
. = ..()
|
||||
RegisterSignal(user, COMSIG_HUMAN_EARLY_UNARMED_ATTACK, .proc/butcher_target)
|
||||
var/datum/component/butchering/butchering = GetComponent(/datum/component/butchering)
|
||||
butchering.butchering_enabled = TRUE
|
||||
to_chat(user, span_notice("You feel a bloodlust. You can now butcher corpses with your bare arms."))
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/hostile_environment/dropped(mob/user, silent = FALSE)
|
||||
/obj/item/clothing/head/hooded/hostile_environment/dropped(mob/user, silent = FALSE)
|
||||
. = ..()
|
||||
UnregisterSignal(user, COMSIG_HUMAN_EARLY_UNARMED_ATTACK)
|
||||
var/datum/component/butchering/butchering = GetComponent(/datum/component/butchering)
|
||||
butchering.butchering_enabled = FALSE
|
||||
to_chat(user, span_notice("You lose your bloodlust."))
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/hostile_environment/proc/butcher_target(mob/user, atom/target, proximity)
|
||||
/obj/item/clothing/head/hooded/hostile_environment/proc/butcher_target(mob/user, atom/target, proximity)
|
||||
SIGNAL_HANDLER
|
||||
if(!isliving(target))
|
||||
return
|
||||
return SEND_SIGNAL(src, COMSIG_ITEM_ATTACK, target, user)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/hostile_environment/proc/consume(mob/living/user, mob/living/butchered)
|
||||
/obj/item/clothing/head/hooded/hostile_environment/proc/consume(mob/living/user, mob/living/butchered)
|
||||
if(butchered.mob_biotypes & (MOB_ROBOTIC | MOB_SPIRIT))
|
||||
return
|
||||
var/health_consumed = butchered.maxHealth * 0.1
|
||||
@@ -333,13 +338,13 @@
|
||||
var/datum/client_colour/color = user.add_client_colour(/datum/client_colour/bloodlust)
|
||||
QDEL_IN(color, 1 SECONDS)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/hostile_environment/update_overlays()
|
||||
/obj/item/clothing/head/hooded/hostile_environment/update_overlays()
|
||||
. = ..()
|
||||
var/mutable_appearance/glass_overlay = mutable_appearance(icon, "hostile_env_glass")
|
||||
glass_overlay.appearance_flags = RESET_COLOR
|
||||
. += glass_overlay
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/hostile_environment/worn_overlays(mutable_appearance/standing, isinhands)
|
||||
/obj/item/clothing/head/hooded/hostile_environment/worn_overlays(mutable_appearance/standing, isinhands)
|
||||
. = ..()
|
||||
if(!isinhands)
|
||||
var/mutable_appearance/glass_overlay = mutable_appearance('icons/mob/clothing/head.dmi', "hostile_env_glass")
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
if(10)
|
||||
new /obj/item/ship_in_a_bottle(src)
|
||||
if(11)
|
||||
new /obj/item/clothing/suit/space/hardsuit/berserker(src)
|
||||
new /obj/item/clothing/suit/hooded/berserker(src)
|
||||
if(12)
|
||||
new /obj/item/jacobs_ladder(src)
|
||||
if(13)
|
||||
@@ -112,7 +112,7 @@
|
||||
name = "bubblegum chest"
|
||||
|
||||
/obj/structure/closet/crate/necropolis/bubblegum/PopulateContents()
|
||||
new /obj/item/clothing/suit/space/hardsuit/hostile_environment(src)
|
||||
new /obj/item/clothing/suit/hooded/hostile_environment(src)
|
||||
var/loot = rand(1,2)
|
||||
switch(loot)
|
||||
if(1)
|
||||
|
||||
@@ -581,29 +581,25 @@
|
||||
A.attackby(src, H)
|
||||
return COMPONENT_CANCEL_ATTACK_CHAIN
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/berserker
|
||||
name = "berserker hardsuit"
|
||||
desc = "Voices echo from the hardsuit, driving the user insane."
|
||||
icon_state = "hardsuit-berserker"
|
||||
inhand_icon_state = "hardsuit-berserker"
|
||||
slowdown = 0
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/berserker
|
||||
/obj/item/clothing/suit/hooded/berserker
|
||||
name = "berserker armor"
|
||||
desc = "Voices echo from the armor, driving the user insane. Is not space-proof."
|
||||
icon_state = "berserker"
|
||||
hoodtype = /obj/item/clothing/head/hooded/berserker
|
||||
armor = list(MELEE = 30, BULLET = 30, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, FIRE = 100, ACID = 100)
|
||||
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
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/regenerative_core/legion, /obj/item/knife, /obj/item/kinetic_crusher, /obj/item/resonator, /obj/item/melee/cleaving_saw)
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/berserker/Initialize(mapload)
|
||||
/obj/item/clothing/suit/hooded/berserker/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/anti_magic, TRUE, TRUE, TRUE, ITEM_SLOT_OCLOTHING)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/berserker/RemoveHelmet()
|
||||
var/obj/item/clothing/head/helmet/space/hardsuit/berserker/helm = helmet
|
||||
if(helm?.berserk_active)
|
||||
return
|
||||
return ..()
|
||||
|
||||
#define MAX_BERSERK_CHARGE 100
|
||||
#define PROJECTILE_HIT_MULTIPLIER 1.5
|
||||
#define DAMAGE_TO_CHARGE_SCALE 0.75
|
||||
@@ -611,30 +607,32 @@
|
||||
#define BERSERK_MELEE_ARMOR_ADDED 50
|
||||
#define BERSERK_ATTACK_SPEED_MODIFIER 0.25
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/berserker
|
||||
/obj/item/clothing/head/hooded/berserker
|
||||
name = "berserker helmet"
|
||||
desc = "Peering into the eyes of the helmet is enough to seal damnation."
|
||||
icon_state = "hardsuit0-berserker"
|
||||
inhand_icon_state = "hardsuit0-berserker"
|
||||
hardsuit_type = "berserker"
|
||||
icon_state = "berserker"
|
||||
armor = list(MELEE = 30, BULLET = 30, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, FIRE = 100, ACID = 100)
|
||||
actions_types = list(/datum/action/item_action/berserk_mode)
|
||||
cold_protection = HEAD
|
||||
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
|
||||
clothing_flags = SNUG_FIT|THICKMATERIAL
|
||||
/// Current charge of berserk, goes from 0 to 100
|
||||
var/berserk_charge = 0
|
||||
/// Status of berserk
|
||||
var/berserk_active = FALSE
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/berserker/Initialize(mapload)
|
||||
/obj/item/clothing/head/hooded/berserker/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/berserker/examine()
|
||||
/obj/item/clothing/head/hooded/berserker/examine()
|
||||
. = ..()
|
||||
. += span_notice("Berserk mode is [berserk_charge]% charged.")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/berserker/process(delta_time)
|
||||
/obj/item/clothing/head/hooded/berserker/process(delta_time)
|
||||
. = ..()
|
||||
if(berserk_active)
|
||||
berserk_charge = clamp(berserk_charge - CHARGE_DRAINED_PER_SECOND * delta_time, 0, MAX_BERSERK_CHARGE)
|
||||
@@ -642,11 +640,11 @@
|
||||
if(ishuman(loc))
|
||||
end_berserk(loc)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/berserker/dropped(mob/user)
|
||||
/obj/item/clothing/head/hooded/berserker/dropped(mob/user)
|
||||
. = ..()
|
||||
end_berserk(user)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/berserker/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
/obj/item/clothing/head/hooded/berserker/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(berserk_active)
|
||||
return
|
||||
var/berserk_value = damage * DAMAGE_TO_CHARGE_SCALE
|
||||
@@ -657,12 +655,12 @@
|
||||
to_chat(owner, span_notice("Berserk mode is fully charged."))
|
||||
balloon_alert(owner, "berserk charged")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/berserker/IsReflect()
|
||||
/obj/item/clothing/head/hooded/berserker/IsReflect()
|
||||
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
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/berserker/proc/berserk_mode(mob/living/carbon/human/user)
|
||||
/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)
|
||||
@@ -672,11 +670,15 @@
|
||||
ADD_TRAIT(user, TRAIT_NOGUNS, BERSERK_TRAIT)
|
||||
ADD_TRAIT(src, TRAIT_NODROP, BERSERK_TRAIT)
|
||||
berserk_active = TRUE
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/// Ends berserk, reverting the changes from the proc [berserk_mode]
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/berserker/proc/end_berserk(mob/living/carbon/human/user)
|
||||
/obj/item/clothing/head/hooded/berserker/proc/end_berserk(mob/living/carbon/human/user)
|
||||
if(!berserk_active)
|
||||
return
|
||||
berserk_active = FALSE
|
||||
if(QDELETED(user))
|
||||
return
|
||||
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)
|
||||
@@ -685,7 +687,7 @@
|
||||
user.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_BUBBLEGUM_RED)
|
||||
REMOVE_TRAIT(user, TRAIT_NOGUNS, BERSERK_TRAIT)
|
||||
REMOVE_TRAIT(src, TRAIT_NODROP, BERSERK_TRAIT)
|
||||
berserk_active = FALSE
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
#undef MAX_BERSERK_CHARGE
|
||||
#undef PROJECTILE_HIT_MULTIPLIER
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500),
|
||||
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, 500),
|
||||
new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 500),
|
||||
new /datum/data/mining_equipment("Mining Plates", /obj/item/mod/construction/armor/mining, 500),
|
||||
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600),
|
||||
new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600),
|
||||
new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 750),
|
||||
@@ -40,9 +41,7 @@
|
||||
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000),
|
||||
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000),
|
||||
new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffelbag/mining_conscript, 1500),
|
||||
new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/tank/jetpack/suit, 2000),
|
||||
new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
|
||||
new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000),
|
||||
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000),
|
||||
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
|
||||
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
|
||||
|
||||
Reference in New Issue
Block a user