Files
VOREStation/code/modules/clothing/suits/armor.dm
T
Cameron Lennox d5849910e5 Begin clickcode attack_self fix (#18797)
* Begin clickcode attack_self fix

Begins the work to make everything call back to parent for attack_self so that signals are sacred.

* Makes MORE things call the attack_self() parent

Yes, I could make special_handling a var on obj/item HOWEVER i want it to be specific so it can be tracked down later and ONLY the objects that use it can be refactored instead of sitting there literally forever and it just becoming 'a thing'.

* Finishes making the rest of attack_self call parent.

As mentioned, things such as 'specialty_goggles' 'special_handling' and the such are only there to help with attack_self until the attack_self is recoded for those items.

* begone foul demon

* some more cleanup

* These

* GOD this was annoying

* yeh

* Fix this

* fLARES

* Thesee too

* toys!

* Even more!

* More fixes

* Even more

* rest of em

* these too

* Update syndie.dm

* hardref clear

* Update code/game/gamemodes/nuclear/pinpointer.dm

* Update code/game/objects/effects/mines.dm

* Update code/game/objects/items/blueprints_vr.dm

* Update code/game/objects/items/blueprints_vr.dm

* Update code/game/objects/items/contraband_vr.dm

* Update code/game/objects/items/crayons.dm

* Update code/game/objects/items/crayons.dm

* Update code/game/objects/items/gunbox.dm

* Update code/game/objects/items/gunbox.dm

* Update code/game/objects/items/gunbox_vr.dm

* Update code/game/objects/items/gunbox_vr.dm

* Update code/game/objects/items/weapons/gift_wrappaper.dm

* Update code/game/objects/items/crayons.dm

* Update code/game/objects/items/crayons.dm

* Update code/game/objects/items/gunbox.dm

* these too

* Update maintpanel_stack.dm

* angry warning

* Fixes packaged snacks.

Fixes improper var default.

* Special handling for these

* proper poly types

* Fixes magclaws

Makes the 'features' it had just part  of base magboots that can be adjusted via varswap.

* Fixes jackets

Fixes https://github.com/VOREStation/VOREStation/issues/18941

* Small bugfix

Makes p_Theyre properly capitialize
Makes examine show proper wording

* Update gift_wrappaper.dm
2025-12-29 13:21:10 -05:00

657 lines
30 KiB
Plaintext

/obj/item/clothing/suit/armor
name = DEVELOPER_WARNING_NAME
allowed = list(POCKET_GENERIC, POCKET_EMERGENCY, POCKET_SECURITY)
body_parts_covered = CHEST
item_flags = THICKMATERIAL
cold_protection = CHEST
min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = CHEST
max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE
siemens_coefficient = 0.6
/obj/item/clothing/suit/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = FALSE)
if(..()) //This will only run if no other problems occured when equiping.
for(var/obj/item/clothing/I in list(H.gloves, H.shoes))
if(I && (src.body_parts_covered & ARMS && I.body_parts_covered & ARMS) )
to_chat(H, span_warning("You can't wear \the [src] with \the [I], it's in the way."))
return 0
if(I && (src.body_parts_covered & LEGS && I.body_parts_covered & LEGS) )
to_chat(H, span_warning("You can't wear \the [src] with \the [I], it's in the way."))
return 0
return 1
/obj/item/clothing/suit/armor/vest
name = "armor"
desc = "An armored vest that protects against some damage."
icon_state = "armor"
blood_overlay_type = "armor"
armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/vest/alt
name = "security armor"
desc = "An armored vest that protects against some damage. This one has a NanoTrasen corporate badge."
icon_state = "armoralt"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
/obj/item/clothing/suit/armor/vest/security
name = "security armor"
desc = "An armored vest that protects against some damage. This one has a corporate badge."
icon_state = "armorsec"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
/obj/item/clothing/suit/armor/riot
name = "riot vest"
desc = "A vest with heavy padding to protect against melee attacks."
icon_state = "riot"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.5
/obj/item/clothing/suit/armor/riot/alt
icon_state = "riot_new"
item_state_slots = list(slot_r_hand_str = "riot_new", slot_l_hand_str = "riot_new")
/obj/item/clothing/suit/armor/bulletproof
name = "bullet resistant vest"
desc = "A vest that excels in protecting the wearer against high-velocity solid projectiles."
icon_state = "bulletproof"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
blood_overlay_type = "armor"
slowdown = 0.5
armor = list(melee = 10, bullet = 80, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.7
/obj/item/clothing/suit/armor/bulletproof/alt
icon_state = "bulletproof_new"
item_state_slots = list(slot_r_hand_str = "bulletproof_new", slot_l_hand_str = "bulletproof_new")
blood_overlay_type = "armor"
/obj/item/clothing/suit/armor/laserproof
name = "ablative armor vest"
desc = "A vest that excels in protecting the wearer against energy projectiles."
icon_state = "armor_reflec"
blood_overlay_type = "armor"
slowdown = 0.5
armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.1
/obj/item/clothing/suit/armor/laserproof/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
if(istype(damage_source, /obj/item/projectile/energy) || istype(damage_source, /obj/item/projectile/beam))
var/obj/item/projectile/P = damage_source
if(P.reflected) // Can't reflect twice
return ..()
var/reflectchance = 40 - round(damage/3)
if(!(def_zone in list(BP_TORSO, BP_GROIN)))
reflectchance /= 2
if(P.starting && prob(reflectchance))
visible_message(span_danger("\The [user]'s [src.name] reflects [attack_text]!"))
// Find a turf near or on the original location to bounce to
var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
var/turf/curloc = get_turf(user)
// redirect the projectile
P.redirect(new_x, new_y, curloc, user)
P.reflected = 1
return PROJECTILE_CONTINUE // complete projectile permutation
/obj/item/clothing/suit/armor/combat
name = "combat vest"
desc = "A vest that protects the wearer from several common types of weaponry."
icon_state = "combat"
blood_overlay_type = "armor"
slowdown = 0.5
armor = list(melee = 50, bullet = 50, laser = 50, energy = 30, bomb = 30, bio = 0, rad = 0)
siemens_coefficient = 0.6
/obj/item/clothing/suit/armor/tactical
name = "tactical armor"
desc = "A suit of armor most often used by Special Weapons and Tactics squads. Includes padded vest with pockets along with shoulder and kneeguards."
icon_state = "swatarmor"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
body_parts_covered = CHEST|LEGS|ARMS
flags_inv = HIDETIE|HIDEHOLSTER
slowdown = 1
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
siemens_coefficient = 0.7
/obj/item/clothing/suit/armor/swat
name = "swat suit"
desc = "A heavily armored suit that protects against moderate damage. Used in special operations."
icon_state = "deathsquad"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
item_flags = THICKMATERIAL
body_parts_covered = CHEST|LEGS|FEET|ARMS
allowed = list(POCKET_GENERIC, POCKET_EMERGENCY, POCKET_SECURITY)
slowdown = 1
w_class = ITEMSIZE_HUGE
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 100)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
min_pressure_protection = 0 * ONE_ATMOSPHERE
max_pressure_protection = 20* ONE_ATMOSPHERE
siemens_coefficient = 0.6
/obj/item/clothing/suit/armor/swat/officer
name = "officer jacket"
desc = "An armored jacket used in special operations."
icon_state = "detective"
item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective")
blood_overlay_type = "coat"
flags_inv = 0
body_parts_covered = UPPER_TORSO|ARMS
/obj/item/clothing/suit/armor/det_suit
name = "armor"
desc = "An armored vest with a detective's badge on it."
icon_state = "detective-armor"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
blood_overlay_type = "armor"
body_parts_covered = CHEST
armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0)
// Ooold, old reactive armor.
/*
//Reactive armor
//When the wearer gets hit, this armor will teleport the user a short distance away (to safety or to more danger, no one knows. That's the fun of it!)
/obj/item/clothing/suit/armor/reactive
name = "Reactive Teleport Armor"
desc = "Someone separated our " + JOB_RESEARCH_DIRECTOR + " from their own head!"
var/active = 0.0
icon_state = "reactiveoff"
item_state_slots = list(slot_r_hand_str = "armor_reflec_old", slot_l_hand_str = "armor_reflec_old")
blood_overlay_type = "armor"
slowdown = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
special_handling = TRUE
/obj/item/clothing/suit/armor/reactive/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
if(prob(50))
user.visible_message(span_danger("The reactive teleport system flings [user] clear of the attack!"))
var/list/turfs = new/list()
for(var/turf/T in orange(6, user))
if(istype(T,/turf/space)) continue
if(T.density) continue
if(T.x>world.maxx-6 || T.x<6) continue
if(T.y>world.maxy-6 || T.y<6) continue
turfs += T
if(!turfs.len) turfs += pick(/turf in orange(6))
var/turf/picked = pick(turfs)
if(!isturf(picked)) return
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, user.loc)
spark_system.start()
playsound(src, "sparks", 50, 1)
user.loc = picked
return PROJECTILE_FORCE_MISS
return 0
/obj/item/clothing/suit/armor/reactive/attack_self(mob/user)
. = ..(user)
if(.)
return TRUE
active = !active
if (active)
to_chat(user, span_blue("The reactive armor is now active."))
icon_state = "reactive"
else
to_chat(user, span_blue("The reactive armor is now inactive."))
icon_state = "reactiveoff"
add_fingerprint(user)
return
/obj/item/clothing/suit/armor/reactive/emp_act(severity, recursive)
active = FALSE
icon_state = "reactiveoff"
..()
*/
// Alien armor has a chance to completely block attacks.
/obj/item/clothing/suit/armor/alien
name = "alien enhancement vest"
desc = "It's a strange piece of what appears to be armor. It looks very light and agile. Strangely enough it seems to have been designed for a humanoid shape."
description_info = "It has a 20% chance to completely nullify an incoming attack, and the wearer moves slightly faster."
icon_state = "alien_speed"
blood_overlay_type = "armor"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
slowdown = -1
body_parts_covered = CHEST
armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 0, rad = 40)
siemens_coefficient = 0.4
var/block_chance = 20
/obj/item/clothing/suit/armor/alien/tank
name = "alien protection suit"
desc = "It's really resilient yet lightweight, so it's probably meant to be armor. Strangely enough it seems to have been designed for a humanoid shape."
description_info = "It has a 40% chance to completely nullify an incoming attack."
icon_state = "alien_tank"
slowdown = 0
body_parts_covered = CHEST|LEGS|ARMS
armor = list(melee = 70, bullet = 70, laser = 70, energy = 70, bomb = 70, bio = 0, rad = 40)
block_chance = 40
/obj/item/clothing/suit/armor/alien/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
if(prob(block_chance))
user.visible_message(span_danger("\The [src] completely absorbs [attack_text]!"))
return TRUE
return FALSE
//Non-hardsuit ERT armor.
/obj/item/clothing/suit/armor/vest/ert
name = "emergency response team armor"
desc = "A set of armor worn by members of the Emergency Response Team."
icon_state = "ertarmor_cmd"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
body_parts_covered = CHEST|ARMS
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 20, bio = 0, rad = 0)
//Commander
/obj/item/clothing/suit/armor/vest/ert/command
name = "emergency response team commander armor"
desc = "A set of armor worn by the commander of an Emergency Response Team. Has blue highlights."
//Security
/obj/item/clothing/suit/armor/vest/ert/security
name = "emergency response team security armor"
desc = "A set of armor worn by security members of the Emergency Response Team. Has red highlights."
icon_state = "ertarmor_sec"
//Engineer
/obj/item/clothing/suit/armor/vest/ert/engineer
name = "emergency response team engineer armor"
desc = "A set of armor worn by engineering members of the Emergency Response Team. Has orange highlights."
icon_state = "ertarmor_eng"
//Medical
/obj/item/clothing/suit/armor/vest/ert/medical
name = "emergency response team medical armor"
desc = "A set of armor worn by medical members of the Emergency Response Team. Has blue and white highlights."
icon_state = "ertarmor_med"
//New Vests
/obj/item/clothing/suit/storage/vest
name = "armor vest"
desc = "A simple kevlar plate carrier."
icon_state = "kvest"
blood_overlay_type = "armor"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0)
allowed = list(POCKET_GENERIC, POCKET_EMERGENCY, POCKET_SECURITY)
body_parts_covered = CHEST
item_flags = THICKMATERIAL
cold_protection = CHEST
min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE
heat_protection = CHEST
max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE
siemens_coefficient = 0.6
/obj/item/clothing/suit/storage/vest/officer
name = "officer armor vest"
desc = "A simple kevlar plate carrier. This one has a security holobadge clipped to the chest."
icon_state = "officervest_nobadge"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
icon_badge = "officervest_badge"
icon_nobadge = "officervest_nobadge"
/obj/item/clothing/suit/storage/vest/aces
name = "ACE security rig"
desc = "A set of lightweight armor designed to be worn over the matching ACE security undersuit. Includes thigh, shin, and forearm protectors in addition to standard torso and groin guards."
icon_state = "aces_armor"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
body_parts_covered = CHEST|LEGS|ARMS
/obj/item/clothing/suit/storage/vest/warden
name = "warden armor vest"
desc = "A simple kevlar plate carrier. This one has a silver badge clipped to the chest."
icon_state = "wardenvest_nobadge"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
icon_badge = "wardenvest_badge"
icon_nobadge = "wardenvest_nobadge"
/obj/item/clothing/suit/storage/vest/wardencoat
name = JOB_WARDEN + "'s jacket"
desc = "An armoured jacket with silver rank pips and livery."
icon_state = "warden_jacket"
blood_overlay_type = "suit"
body_parts_covered = CHEST|ARMS|LEGS
flags_inv = HIDETIE|HIDEHOLSTER
/obj/item/clothing/suit/storage/vest/wardencoat/alt
name = JOB_WARDEN + "'s jacket"
desc = "An armoured jacket with silver rank pips and livery."
icon_state = "warden_alt"
body_parts_covered = CHEST|ARMS|LEGS
/obj/item/clothing/suit/storage/vest/hos
name = "head of security armor vest"
desc = "A simple kevlar plate carrier. This one has a gold badge clipped to the chest."
icon_state = "hosvest_nobadge"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
icon_badge = "hosvest_badge"
icon_nobadge = "hosvest_nobadge"
/obj/item/clothing/suit/storage/vest/hoscoat
name = "armored coat"
desc = "A greatcoat enhanced with a special alloy for some protection and style."
icon_state = "hos"
blood_overlay_type = "suit"
body_parts_covered = CHEST|ARMS|LEGS
flags_inv = HIDETIE|HIDEHOLSTER
//Jensen cosplay gear
/obj/item/clothing/suit/storage/vest/hoscoat/jensen
name = "armored trenchcoat"
desc = "A trenchcoat augmented with a special alloy for some protection and style."
icon_state = "hostrench"
flags_inv = HIDEHOLSTER
/obj/item/clothing/suit/storage/vest/pcrc
name = "PCRC armor vest"
desc = "A simple kevlar plate carrier belonging to Proxima Centauri Risk Control. This one has a PCRC crest clipped to the chest."
icon_state = "pcrcvest_nobadge"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
icon_badge = "pcrcvest_badge"
icon_nobadge = "pcrcvest_nobadge"
/obj/item/clothing/suit/storage/vest/solgov/hedberg
name = "Hedberg-Hammarstrom armor vest"
desc = "A simple kevlar plate carrier belonging to Hedberg-Hammarstrom. The company logo is clearly visible."
icon_state = "secwebvest"
/obj/item/clothing/suit/storage/vest/solgov
name = "\improper Solar Confederate Government armored vest"
desc = "A synthetic armor vest. This one is marked with the crest of the Solar Confederate Government."
icon_state = "solvest"
armor = list(melee = 40, bullet = 40, laser = 40, energy = 25, bomb = 30, bio = 0, rad = 0)
/obj/item/clothing/suit/storage/vest/solgov/heavy
name = "\improper Solar Confederate Government heavy armored vest"
desc = "A synthetic armor vest with Solar Confederate Government printed in distinctive blue lettering on the chest. This one has added webbing and ballistic plates."
icon_state = "solwebvest"
/obj/item/clothing/suit/storage/vest/solgov/command
name = "command heavy armored vest"
desc = "A synthetic armor vest with Solar Confederate Government printed in detailed gold lettering on the chest. This one has added webbing and ballistic plates."
icon_state = "comwebvest"
/obj/item/clothing/suit/storage/vest/tactical //crack at a more balanced mid-range armor, minor improvements over standard vests, with the idea "modern" combat armor would focus on energy weapon protection.
name = "tactical armored vest"
desc = "A heavy armored vest in a fetching tan. It is surprisingly flexible and light, even with the extra webbing and advanced ceramic plates."
icon_state = "tacwebvest"
item_state = "tacwebvest"
armor = list(melee = 40, bullet = 40, laser = 60, energy = 35, bomb = 30, bio = 0, rad = 0)
/obj/item/clothing/suit/storage/vest/heavy/flexitac //a reskin of the above to have a matching armor set
name = "tactical light vest"
desc = "An armored vest made from advanced flexible ceramic plates. It's surprisingly mobile, if a little unfashionable."
icon_state = "flexitac"
item_state = "flexitac"
armor = list(melee = 40, bullet = 40, laser = 60, energy = 35, bomb = 30, bio = 0, rad = 0)
cold_protection = CHEST
min_cold_protection_temperature = T0C - 20
slowdown = 0.5
/obj/item/clothing/suit/storage/vest/detective
name = "detective armor vest"
desc = "A simple kevlar plate carrier in a vintage brown, it has a badge clipped to the chest that reads, 'Private investigator'."
icon_state = "detectivevest_nobadge"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
icon_badge = "detectivevest_badge"
icon_nobadge = "detectivevest_nobadge"
/obj/item/clothing/suit/storage/vest/press
name = "press vest"
icon_state = "pvest"
desc = "A simple kevlar plate carrier. This one has the word 'Press' embroidered on patches on the back and front."
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
allowed = list(POCKET_GENERIC, POCKET_EMERGENCY, POCKET_DETECTIVE, /obj/item/camera,/obj/item/clothing/head/helmet)
/obj/item/clothing/suit/storage/vest/heavy
name = "heavy armor vest"
desc = "A heavy kevlar plate carrier with webbing attached."
icon_state = "webvest"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
armor = list(melee = 50, bullet = 40, laser = 40, energy = 25, bomb = 25, bio = 0, rad = 0)
slowdown = 0.5
/obj/item/clothing/suit/storage/vest/heavy/officer
name = "officer heavy armor vest"
desc = "A heavy kevlar plate carrier with webbing attached. This one has a security holobadge clipped to the chest."
icon_state = "officerwebvest_nobadge"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
icon_badge = "officerwebvest_badge"
icon_nobadge = "officerwebvest_nobadge"
/obj/item/clothing/suit/storage/vest/heavy/warden
name = "warden heavy armor vest"
desc = "A heavy kevlar plate carrier with webbing attached. This one has a silver badge clipped to the chest."
icon_state = "wardenwebvest_nobadge"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
icon_badge = "wardenwebvest_badge"
icon_nobadge = "wardenwebvest_nobadge"
/obj/item/clothing/suit/storage/vest/heavy/hos
name = "head of security heavy armor vest"
desc = "A heavy kevlar plate carrier with webbing attached. This one has a gold badge clipped to the chest."
icon_state = "hoswebvest_nobadge"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
icon_badge = "hoswebvest_badge"
icon_nobadge = "hoswebvest_nobadge"
/obj/item/clothing/suit/storage/vest/heavy/pcrc
name = "PCRC heavy armor vest"
desc = "A heavy kevlar plate carrier belonging to Proxima Centauri Risk Control with webbing attached. This one has a PCRC crest clipped to the chest."
icon_state = "pcrcwebvest_nobadge"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
icon_badge = "pcrcwebvest_badge"
icon_nobadge = "pcrcwebvest_nobadge"
//Provides the protection of a merc voidsuit, but only covers the chest/groin, and also takes up a suit slot. In exchange it has no slowdown and provides storage.
/obj/item/clothing/suit/storage/vest/heavy/merc
name = "heavy armor vest"
desc = "A high-quality heavy kevlar plate carrier in a fetching tan. The vest is surprisingly flexible, and possibly made of an advanced material."
icon_state = "mercwebvest"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
slowdown = 0
//All of the armor below is mostly unused
/obj/item/clothing/suit/armor/centcomm
name = "CentCom armor"
desc = "A suit that protects against some damage."
icon_state = "centcom"
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
w_class = ITEMSIZE_LARGE//bulky item
body_parts_covered = CHEST|LEGS|FEET|ARMS|HANDS
allowed = list(POCKET_GENERIC, POCKET_EMERGENCY, POCKET_SECURITY)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0
/obj/item/clothing/suit/armor/heavy
name = "heavy armor"
desc = "An old military-grade suit of armor. Incredibly robust against brute force damage! However, it offers little protection from energy-based weapons, which, combined with its bulk, makes it woefully obsolete."
icon_state = "heavy"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
armor = list(melee = 90, bullet = 80, laser = 10, energy = 10, bomb = 80, bio = 0, rad = 0)
w_class = ITEMSIZE_HUGE // Very bulky, very heavy.
gas_transfer_coefficient = 0.90
body_parts_covered = CHEST|LEGS|FEET|ARMS|HANDS
slowdown = 5 // If you're a tank you're gonna move like a tank.
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
siemens_coefficient = 0
/obj/item/clothing/suit/armor/tdome
name = DEVELOPER_WARNING_NAME
body_parts_covered = CHEST|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/tdome/red
name = "Thunderdome suit (red)"
desc = "Reddish armor."
icon_state = "tdred"
siemens_coefficient = 1
/obj/item/clothing/suit/armor/tdome/green
name = "Thunderdome suit (green)"
desc = "Pukish armor."
icon_state = "tdgreen"
siemens_coefficient = 1
//Modular plate carriers
/obj/item/clothing/suit/armor/pcarrier
name = "plate carrier"
desc = "A lightweight black plate carrier vest. It can be equipped with armor plates, but provides no protection of its own."
icon = 'icons/obj/clothing/modular_armor.dmi'
item_icons = list(slot_wear_suit_str = 'icons/mob/modular_armor.dmi')
icon_state = "pcarrier"
valid_accessory_slots = (\
ACCESSORY_SLOT_INSIGNIA\
|ACCESSORY_SLOT_ARMOR_C\
|ACCESSORY_SLOT_ARMOR_A\
|ACCESSORY_SLOT_ARMOR_L\
|ACCESSORY_SLOT_ARMOR_S\
|ACCESSORY_SLOT_ARMOR_M)
restricted_accessory_slots = (\
ACCESSORY_SLOT_INSIGNIA\
|ACCESSORY_SLOT_ARMOR_C\
|ACCESSORY_SLOT_ARMOR_A\
|ACCESSORY_SLOT_ARMOR_L\
|ACCESSORY_SLOT_ARMOR_S\
|ACCESSORY_SLOT_ARMOR_M)
blood_overlay_type = "armor"
/obj/item/clothing/suit/armor/pcarrier/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = FALSE)
if(..()) //This will only run if no other problems occured when equiping.
if(H.gloves)
if(H.gloves.body_parts_covered & ARMS)
for(var/obj/item/clothing/accessory/A in src)
if(A.body_parts_covered & ARMS)
to_chat(H, span_warning("You can't wear \the [A] with \the [H.gloves], they're in the way."))
return 0
if(H.shoes)
if(H.shoes.body_parts_covered & LEGS)
for(var/obj/item/clothing/accessory/A in src)
if(A.body_parts_covered & LEGS)
to_chat(H, span_warning("You can't wear \the [A] with \the [H.shoes], they're in the way."))
return 0
return 1
/obj/item/clothing/suit/armor/pcarrier/explorer
name = "explorer suit"
desc = "A lightweight explorer plate carrier. It can be equipped with armor plates, but only protects from the cold on it's own."
icon_state = "explorer"
flags = THICKMATERIAL
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
cold_protection = CHEST|LEGS|ARMS
/obj/item/clothing/suit/armor/pcarrier/light
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate)
/obj/item/clothing/suit/armor/pcarrier/light/sol
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate, /obj/item/clothing/accessory/armor/tag)
/obj/item/clothing/suit/armor/pcarrier/light/nt
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate, /obj/item/clothing/accessory/armor/tag/nt)
/obj/item/clothing/suit/armor/pcarrier/medium
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/medium, /obj/item/clothing/accessory/storage/pouches)
/obj/item/clothing/suit/armor/pcarrier/medium/sol
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor/tag)
/obj/item/clothing/suit/armor/pcarrier/medium/security
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor/tag/sec)
/obj/item/clothing/suit/armor/pcarrier/medium/command
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor/tag/com)
/obj/item/clothing/suit/armor/pcarrier/medium/nt
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/medium, /obj/item/clothing/accessory/storage/pouches, /obj/item/clothing/accessory/armor/tag/nt)
/obj/item/clothing/suit/armor/pcarrier/blue
name = "blue plate carrier"
desc = "A lightweight blue plate carrier vest. It can be equipped with armor plates, but provides no protection of its own."
icon_state = "pcarrier_blue"
/obj/item/clothing/suit/armor/pcarrier/press
name = "light blue plate carrier"
desc = "A lightweight light blue plate carrier vest. It can be equipped with armor plates, but provides no protection of its own."
icon_state = "pcarrier_press"
/obj/item/clothing/suit/armor/pcarrier/blue/sol
name = "peacekeeper plate carrier"
desc = "A lightweight plate carrier vest in SCG Peacekeeper colors. It can be equipped with armor plates, but provides no protection of its own."
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/medium, /obj/item/clothing/accessory/storage/pouches/blue, /obj/item/clothing/accessory/armor/armguards/blue, /obj/item/clothing/accessory/armor/tag)
/obj/item/clothing/suit/armor/pcarrier/green
name = "green plate carrier"
desc = "A lightweight green plate carrier vest. It can be equipped with armor plates, but provides no protection of its own."
icon_state = "pcarrier_green"
/obj/item/clothing/suit/armor/pcarrier/navy
name = "navy plate carrier"
desc = "A lightweight navy blue plate carrier vest. It can be equipped with armor plates, but provides no protection of its own."
icon_state = "pcarrier_navy"
/obj/item/clothing/suit/armor/pcarrier/tan
name = "tan plate carrier"
desc = "A lightweight tan plate carrier vest. It can be equipped with armor plates, but provides no protection of its own."
icon_state = "pcarrier_tan"
/obj/item/clothing/suit/armor/pcarrier/laserproof
name = "ablative plate carrier"
desc = "A specialist laser resistant plate carrier. It can be equipped with armour plates, but provides very little protection of its own."
icon_state = "ablative"
armor = list(melee = 0, bullet = 0, laser = 5, energy = 5, bomb = 0, bio = 0, rad = 0)
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/laserproof)
/obj/item/clothing/suit/armor/pcarrier/bulletproof
name = "ballistic plate carrier"
desc = "A specialist bullet resistant plate carrier. It can be equipped with armour plates, but provides very little protection of its own."
icon_state = "ballistic"
armor = list(melee = 0, bullet = 5, laser = 0, energy = 0, bomb = 5, bio = 0, rad = 0)
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/bulletproof)
/obj/item/clothing/suit/armor/pcarrier/riot
name = "riot plate carrier"
desc = "A specialist melee resistant plate carrier. It can be equipped with armour plates, but provides very little protection of its own."
icon_state = "riot"
armor = list(melee = 5, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/riot)
/obj/item/clothing/suit/armor/pcarrier/explorer/light
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/explorer, /obj/item/clothing/accessory/armor/armguards/explorer, /obj/item/clothing/accessory/armor/legguards/explorer, /obj/item/clothing/accessory/storage/pouches/green)
/obj/item/clothing/suit/armor/pcarrier/tan/tactical
name = "tactical plate carrier"
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/tactical, /obj/item/clothing/accessory/storage/pouches/large/tan)
/obj/item/clothing/suit/armor/pcarrier/merc
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/merc, /obj/item/clothing/accessory/armor/armguards/merc, /obj/item/clothing/accessory/armor/legguards/merc, /obj/item/clothing/accessory/storage/pouches/large)
/obj/item/clothing/suit/armor/pcarrier/laserproof/full
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/laserproof, /obj/item/clothing/accessory/armor/armguards/laserproof, /obj/item/clothing/accessory/armor/legguards/laserproof, /obj/item/clothing/accessory/storage/pouches/blue)
/obj/item/clothing/suit/armor/pcarrier/bulletproof/full
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/bulletproof, /obj/item/clothing/accessory/armor/armguards/bulletproof, /obj/item/clothing/accessory/armor/legguards/bulletproof, /obj/item/clothing/accessory/storage/pouches)
/obj/item/clothing/suit/armor/pcarrier/riot/full
starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/riot, /obj/item/clothing/accessory/armor/armguards/riot, /obj/item/clothing/accessory/armor/legguards/riot, /obj/item/clothing/accessory/storage/pouches)