Files
VOREStation/code/modules/clothing/accessories/accessory.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

668 lines
22 KiB
Plaintext

/obj/item/clothing/accessory
name = "tie"
desc = "A neosilk clip-on tie."
icon = 'icons/inventory/accessory/item.dmi'
icon_state = "bluetie"
item_state_slots = list(slot_r_hand_str = "", slot_l_hand_str = "")
appearance_flags = RESET_COLOR // Stops has_suit's color from being multiplied onto the accessory
slot_flags = SLOT_TIE
w_class = ITEMSIZE_SMALL
var/glove_level = 1 // What 'level' the accessory is on if equipped on the gloveslot. Lower = things can be put on top of it.
var/slot = ACCESSORY_SLOT_DECOR
var/can_remove = TRUE // Can it be taken off once attached?
var/obj/item/clothing/has_suit = null // The suit the tie may be attached to
var/image/inv_overlay = null // Overlay used when attached to clothing.
var/image/mob_overlay = null
var/overlay_state = null
var/punch_force = 0 // added melee damage
var/punch_damtype = BRUTE // added melee damage type
var/concealed_holster = 0
var/list/on_rolled = list() // Used when jumpsuit sleevels are rolled ("rolled" entry) or it's rolled down ("down"). Set to "none" to hide in those states.
sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/accessory/mob_teshari.dmi') //Teshari can into webbing, too!
drop_sound = 'sound/items/drop/accessory.ogg'
pickup_sound = 'sound/items/pickup/accessory.ogg'
/obj/item/clothing/accessory/Destroy()
on_removed()
return ..()
/obj/item/clothing/accessory/proc/get_inv_overlay()
if(!inv_overlay)
var/tmp_icon_state = "[overlay_state? "[overlay_state]" : "[icon_state]"]"
if(icon_override)
if(icon_exists(icon_override, "[tmp_icon_state]_tie"))
tmp_icon_state = "[tmp_icon_state]_tie"
inv_overlay = image(icon = icon_override, icon_state = tmp_icon_state, dir = SOUTH)
else
inv_overlay = image(icon = INV_ACCESSORIES_DEF_ICON, icon_state = tmp_icon_state, dir = SOUTH)
inv_overlay.color = src.color
inv_overlay.appearance_flags = appearance_flags // Stops has_suit's color from being multiplied onto the accessory
return inv_overlay
/obj/item/clothing/accessory/proc/get_mob_overlay()
if(!istype(loc,/obj/item/clothing/)) //don't need special handling if it's worn as normal item.
return
var/tmp_icon_state = "[overlay_state? "[overlay_state]" : "[icon_state]"]"
if(ishuman(has_suit.loc))
wearer = WEAKREF(has_suit.loc)
else
wearer = null
var/mob/living/carbon/human/H = wearer?.resolve()
if(!ishuman(H))
return
if(istype(loc,/obj/item/clothing/under))
var/obj/item/clothing/under/C = loc
if(on_rolled["down"] && C.rolled_down > 0)
tmp_icon_state = on_rolled["down"]
else if(on_rolled["rolled"] && C.rolled_sleeves > 0)
tmp_icon_state = on_rolled["rolled"]
if(icon_override)
if(icon_exists(icon_override, "[tmp_icon_state]_mob"))
tmp_icon_state = "[tmp_icon_state]_mob"
mob_overlay = image("icon" = icon_override, "icon_state" = "[tmp_icon_state]")
else if(H && LAZYACCESS(sprite_sheets, H.species.get_bodytype(H))) //Teshari can finally into webbing, too!
mob_overlay = image("icon" = sprite_sheets[H.species.get_bodytype(H)], "icon_state" = "[tmp_icon_state]")
else
mob_overlay = image("icon" = INV_ACCESSORIES_DEF_ICON, "icon_state" = "[tmp_icon_state]")
if(addblends)
var/icon/base = new/icon("icon" = mob_overlay.icon, "icon_state" = mob_overlay.icon_state)
var/addblend_icon = new/icon("icon" = mob_overlay.icon, "icon_state" = src.addblends)
if(color)
base.Blend(src.color, ICON_MULTIPLY)
base.Blend(addblend_icon, ICON_ADD)
mob_overlay = image(base)
else
mob_overlay.color = src.color
mob_overlay.appearance_flags = appearance_flags // Stops has_suit's color from being multiplied onto the accessory
return mob_overlay
//when user attached an accessory to S
/obj/item/clothing/accessory/proc/on_attached(var/obj/item/clothing/S, var/mob/user)
if(!istype(S))
return
has_suit = S
src.forceMove(S)
has_suit.add_overlay(get_inv_overlay())
has_suit.force += force
if(istype(S,/obj/item/clothing/gloves))
var/obj/item/clothing/gloves/has_gloves = S
has_gloves.punch_force = has_gloves.punch_force + punch_force
if(user)
to_chat(user, span_notice("You attach \the [src] to \the [has_suit]."))
add_fingerprint(user)
/obj/item/clothing/accessory/proc/on_removed(var/mob/user)
if(!has_suit)
return
has_suit.cut_overlay(get_inv_overlay())
has_suit.force = initial(has_suit.force)
if(istype(has_suit,/obj/item/clothing/gloves))
var/obj/item/clothing/gloves/has_gloves = has_suit
has_gloves.punch_force = initial(has_gloves.punch_force)
has_suit = null
if(QDELETED(src))
return
if(user)
user.put_in_hands(src)
add_fingerprint(user)
else if(get_turf(src)) //We actually exist in space
forceMove(get_turf(src))
//default attackby behaviour
/obj/item/clothing/accessory/attackby(obj/item/I, mob/user)
..()
//default attack_hand behaviour
/obj/item/clothing/accessory/attack_hand(mob/user)
if(has_suit)
return //we aren't an object on the ground so don't call parent
..()
/obj/item/clothing/accessory/tie
name = "blue tie"
icon_state = "bluetie"
slot = ACCESSORY_SLOT_TIE
/obj/item/clothing/accessory/tie/red
name = "red tie"
icon_state = "redtie"
/obj/item/clothing/accessory/tie/blue_clip
name = "blue tie with a clip"
icon_state = "bluecliptie"
/obj/item/clothing/accessory/tie/blue_long
name = "blue long tie"
icon_state = "bluelongtie"
/obj/item/clothing/accessory/tie/red_clip
name = "red tie with a clip"
icon_state = "redcliptie"
/obj/item/clothing/accessory/tie/red_long
name = "red long tie"
icon_state = "redlongtie"
/obj/item/clothing/accessory/tie/black
name = "black tie"
icon_state = "blacktie"
/obj/item/clothing/accessory/tie/darkgreen
name = "dark green tie"
icon_state = "dgreentie"
/obj/item/clothing/accessory/tie/yellow
name = "yellow tie"
icon_state = "yellowtie"
/obj/item/clothing/accessory/tie/navy
name = "navy tie"
icon_state = "navytie"
/obj/item/clothing/accessory/tie/white
name = "white tie"
icon_state = "whitetie"
/obj/item/clothing/accessory/tie/horrible
name = "horrible tie"
desc = "A neosilk clip-on tie. This one is disgusting."
icon_state = "horribletie"
/obj/item/clothing/accessory/bowtie
name = "red bow tie"
desc = "Snazzy!"
icon_state = "redbowtie"
slot = ACCESSORY_SLOT_TIE
/obj/item/clothing/accessory/bowtie/black
name = "black bow tie"
icon_state = "blackbowtie"
/obj/item/clothing/accessory/bowtie/white
name = "white bow tie"
icon_state = "whitebowtie"
/obj/item/clothing/accessory/maid_neck
name = "maid neck cover"
desc = "A neckpiece for a maid costume, it smells faintly of disappointment."
icon_state = "maid_neck"
/obj/item/clothing/accessory/maidcorset
name = "maid corset"
desc = "The final touch that holds it all together."
icon_state = "maidcorset"
/obj/item/clothing/accessory/maid_arms
name = "maid arm covers"
desc = "Cylindrical looking tubes that go over your arms, weird."
slot_flags = SLOT_OCLOTHING | SLOT_GLOVES | SLOT_TIE
body_parts_covered = ARMS
heat_protection = ARMS
cold_protection = ARMS
description_info = "Wearable as gloves, or attachable to uniforms. May visually conflict with actual gloves when attached to uniforms. Caveat emptor."
icon_state = "maid_arms"
/obj/item/clothing/accessory/stethoscope
name = "stethoscope"
desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
icon_state = "stethoscope"
slot = ACCESSORY_SLOT_TIE
/obj/item/clothing/accessory/stethoscope/do_surgery(mob/living/carbon/human/M, mob/living/user)
if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool
return ..()
attack(M, user) //default surgery behaviour is just to scan as usual
return 1
/obj/item/clothing/accessory/stethoscope/attack(mob/living/carbon/human/M, mob/living/user)
if(ishuman(M) && isliving(user))
if(user.a_intent == I_HELP)
var/body_part = parse_zone(user.zone_sel.selecting)
if(body_part)
var/their = "their"
switch(M.gender)
if(MALE) their = "his"
if(FEMALE) their = "her"
var/sound = "heartbeat"
var/sound_strength = "cannot hear"
if(M.stat == DEAD || (M.status_flags & FAKEDEATH))
sound_strength = "cannot hear"
sound = "anything"
else
switch(body_part)
//TORSO:
//ORGANS INVENTORY: Heart, Lungs, Spleen, Voicebox,
if(BP_TORSO)
var/obj/item/organ/internal/heart/heart = M.internal_organs_by_name[O_HEART]
sound_strength = "hear"
sound = "no heartbeat"
if(heart)
if(heart.is_bruised())
sound = span_warning("muffled heart sounds, as if fluid is around the heart") //yes this shows over the heart beinng robotic.
else if(heart.robotic) //They have JUST a heart but no heartbeat
if(heart.robotic == ORGAN_ASSISTED) //LVAD
sound = "a loud, continual, electronic hum"
else if(heart.robotic == ORGAN_ROBOT || heart.robotic == ORGAN_LIFELIKE)
sound = "a light, rhythmic, mechanical clicking"
else
sound = span_warning("no heartbeat")
else
switch(M.pulse)
if(PULSE_NONE)
sound = "no heartbeat"
if(PULSE_SLOW)
sound = "a slow heartbeat"
if(PULSE_NORM)
sound = "a normal, healthy heartbeat"
if(PULSE_FAST)
sound = "a rapid heartbeat"
if(PULSE_2FAST)
sound = span_info("a very rapid heartbeat")
if(PULSE_THREADY)
sound = span_warning("an extremely rapid, thready, irregular heartbeat")
var/obj/item/organ/internal/lungs/L = M.internal_organs_by_name[O_LUNGS]
if(!L || M.losebreath)
sound += span_warning(" and no respiration")
else if(M.is_lung_ruptured() || M.getOxyLoss() > 50)
sound += span_warning(" and [pick("wheezing","gurgling")] sounds")
else
sound += " and healthy respiration"
//GROIN
//ORGANS INVENTORY: Appendix, Intestines, Kidneys, Liver, Spleen, Stomach.
//Of these, the Intestines, Stomach, Liver, and Kidneys make noise.
if(BP_GROIN)
var/obj/item/organ/internal/intestine/intestine = M.internal_organs_by_name[O_INTESTINE]
var/obj/item/organ/internal/stomach/stomach = M.internal_organs_by_name[O_STOMACH]
var/obj/item/organ/internal/kidneys/kidneys = M.internal_organs_by_name[O_KIDNEYS]
var/obj/item/organ/internal/liver/liver = M.internal_organs_by_name[O_LIVER]
sound_strength = "hear"
sound = span_warning("no gastric sounds,")
if(intestine)
if(intestine.is_bruised())
sound = span_warning("slowed intestinal sounds")
else
sound = "normal intestinal sounds,"
if(stomach)
if(stomach.is_bruised())
sound += span_warning(" slowed digestive sounds,")
else
sound += " with normal digestive sounds,"
else
sound += span_warning(" no digestive sounds,")
if(kidneys && kidneys.is_bruised())
sound += span_warning(" renal bruits,") //I don't really know how to convey this without using medical terminology.
else
sound += " no renal sounds,"
if(liver) //yeah, I didn't know your liver could make sounds either.
if(liver.is_bruised())
sound += span_warning(" and abnormal liver sounds.")
else
sound += " and normal liver sounds."
else
sound_strength = "cannot hear"
sound = "anything"
user.visible_message("[user] places [src] against [M]'s [body_part] and listens attentively.", "You place [src] against [their] [body_part]. You [sound_strength] [sound].")
return
return ..(M,user)
//Medals
/obj/item/clothing/accessory/medal
name = "bronze medal"
desc = "A bronze medal."
icon_state = "bronze"
slot = ACCESSORY_SLOT_MEDAL
drop_sound = 'sound/items/drop/accessory.ogg'
pickup_sound = 'sound/items/pickup/accessory.ogg'
/obj/item/clothing/accessory/medal/conduct
name = "distinguished conduct medal"
desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is most basic award on offer. It is often awarded by a captain to a member of their crew."
/obj/item/clothing/accessory/medal/bronze_heart
name = "bronze heart medal"
desc = "A bronze heart-shaped medal awarded for sacrifice. It is often awarded posthumously or for severe injury in the line of duty."
icon_state = "bronze_heart"
/obj/item/clothing/accessory/medal/nobel_science
name = "nobel sciences award"
desc = "A bronze medal which represents significant contributions to the field of science or engineering."
/obj/item/clothing/accessory/medal/silver
name = "silver medal"
desc = "A silver medal."
icon_state = "silver"
/obj/item/clothing/accessory/medal/silver/valor
name = "medal of valor"
desc = "A silver medal awarded for acts of exceptional valor."
/obj/item/clothing/accessory/medal/silver/security
name = "robust security award"
desc = "An award for distinguished combat and sacrifice in defence of corporate commercial interests. Often awarded to security staff."
/obj/item/clothing/accessory/medal/gold
name = "gold medal"
desc = "A prestigious golden medal."
icon_state = "gold"
/obj/item/clothing/accessory/medal/gold/captain
name = "medal of captaincy"
desc = "A golden medal awarded exclusively to those promoted to the rank of captain. It signifies the codified responsibilities of a captain, and their undisputable authority over their crew."
/obj/item/clothing/accessory/medal/gold/heroism
name = "medal of exceptional heroism"
desc = "An extremely rare golden medal awarded only by high ranking officials. To receive such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but distinguished veteran staff."
/obj/item/clothing/accessory/medal/gold/casino
name = "medal of true lucky winner"
desc = "A gaudy golden medal with a logo of a casino engraved on top. The only achievement you had to earn this was great luck or great richness, neither of which is an achievement. Still, it instills a feeling of hope and smell of fresh bagels."
// Base type for 'medals' found in a "dungeon" submap, as a sort of trophy to celebrate the player's conquest.
/obj/item/clothing/accessory/medal/dungeon
/obj/item/clothing/accessory/medal/dungeon/alien_ufo
name = "alien captain's medal"
desc = "It vaguely like a star. It looks like something an alien captain might've worn. Probably."
icon_state = "alien_medal"
//Scarves
/obj/item/clothing/accessory/scarf
name = "green scarf"
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
icon_state = "greenscarf"
slot = ACCESSORY_SLOT_DECOR
/obj/item/clothing/accessory/scarf/red
name = "red scarf"
icon_state = "redscarf"
/obj/item/clothing/accessory/scarf/darkblue
name = "dark blue scarf"
icon_state = "darkbluescarf"
/obj/item/clothing/accessory/scarf/purple
name = "purple scarf"
icon_state = "purplescarf"
/obj/item/clothing/accessory/scarf/yellow
name = "yellow scarf"
icon_state = "yellowscarf"
/obj/item/clothing/accessory/scarf/orange
name = "orange scarf"
icon_state = "orangescarf"
/obj/item/clothing/accessory/scarf/lightblue
name = "light blue scarf"
icon_state = "lightbluescarf"
/obj/item/clothing/accessory/scarf/white
name = "white scarf"
icon_state = "whitescarf"
/obj/item/clothing/accessory/scarf/black
name = "black scarf"
icon_state = "blackscarf"
/obj/item/clothing/accessory/scarf/zebra
name = "zebra scarf"
icon_state = "zebrascarf"
/obj/item/clothing/accessory/scarf/christmas
name = "christmas scarf"
icon_state = "christmasscarf"
/obj/item/clothing/accessory/scarf/stripedred
name = "striped red scarf"
icon_state = "stripedredscarf"
/obj/item/clothing/accessory/scarf/stripedgreen
name = "striped green scarf"
icon_state = "stripedgreenscarf"
/obj/item/clothing/accessory/scarf/stripedblue
name = "striped blue scarf"
icon_state = "stripedbluescarf"
/obj/item/clothing/accessory/scarf/teshari/neckscarf
name = "small neckscarf"
desc = "a neckscarf that is too small for a human's neck"
icon_state = "tesh_neckscarf"
species_restricted = list(SPECIES_TESHARI)
/obj/item/clothing/accessory/halfcape
name = "half cape"
desc = "A tasteful half-cape, suitible for European nobles and retro anime protagonists."
icon_state = "halfcape"
slot = ACCESSORY_SLOT_DECOR
/obj/item/clothing/accessory/fullcape
name = "full cape"
desc = "A gaudy full cape. You're thinking about wearing it, aren't you?"
icon_state = "fullcape"
slot = ACCESSORY_SLOT_DECOR
/obj/item/clothing/accessory/sash
name = "sash"
desc = "A plain, unadorned sash."
icon_state = "sash"
slot = ACCESSORY_SLOT_OVER
//Gaiter scarves
/obj/item/clothing/accessory/gaiter
name = "red neck gaiter"
desc = "A slightly worn neck gaiter, it's loose enough to be worn comfortably like a scarf. Commonly used by outdoorsmen and mercenaries, both to keep warm and keep debris away from the face."
icon_state = "gaiter_red"
slot_flags = SLOT_MASK | SLOT_TIE
body_parts_covered = FACE
w_class = ITEMSIZE_SMALL
slot = ACCESSORY_SLOT_INSIGNIA // snowflakey, i know, shut up
item_flags = FLEXIBLEMATERIAL
var/breath_masked = FALSE
var/obj/item/clothing/mask/breath/breathmask
actions_types = list(/datum/action/item_action/pull_on_gaiter)
special_handling = TRUE
/obj/item/clothing/accessory/gaiter/update_clothing_icon()
. = ..()
if(ismob(src.loc))
var/mob/M = src.loc
M.update_inv_wear_mask()
/obj/item/clothing/accessory/gaiter/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/clothing/mask/breath))
to_chat(user, span_notice("You tuck [I] behind [src]."))
breathmask = I
breath_masked = TRUE
user.drop_from_inventory(I, drop_location())
I.forceMove(src)
item_flags &= ~FLEXIBLEMATERIAL
. = ..()
/obj/item/clothing/accessory/gaiter/click_alt(mob/user)
. = ..()
if(breath_masked && breathmask)
to_chat(user, span_notice("You pull [breathmask] out from behind [src], and it drops to your feet."))
breathmask.forceMove(drop_location())
breathmask = null
breath_masked = FALSE
item_flags &= ~AIRTIGHT
item_flags |= FLEXIBLEMATERIAL
/obj/item/clothing/accessory/gaiter/attack_self(mob/user)
. = ..(user)
if(.)
return TRUE
var/gaiterstring = "You pull [src] "
if(src.icon_state == initial(icon_state))
src.icon_state = "[icon_state]_up"
gaiterstring += "up over your nose[breath_masked ? " and secure the mask tucked underneath." : "."]"
if(breath_masked)
item_flags |= AIRTIGHT
else
src.icon_state = initial(icon_state)
gaiterstring += "down around your neck[breath_masked ? " and dislodge the mask tucked underneath." : "."]"
body_parts_covered &= ~FACE
if(breath_masked)
item_flags &= ~AIRTIGHT
to_chat(user, span_notice(gaiterstring))
qdel(mob_overlay) // we're gonna need to refresh these
update_clothing_icon() //so our mob-overlays update
/obj/item/clothing/accessory/gaiter/tan
name = "tan neck gaiter"
icon_state = "gaiter_tan"
/obj/item/clothing/accessory/gaiter/gray
name = "gray neck gaiter"
icon_state = "gaiter_gray"
/obj/item/clothing/accessory/gaiter/green
name = "green neck gaiter"
icon_state = "gaiter_green"
/obj/item/clothing/accessory/gaiter/blue
name = "blue neck gaiter"
icon_state = "gaiter_blue"
/obj/item/clothing/accessory/gaiter/purple
name = "purple neck gaiter"
icon_state = "gaiter_purple"
/obj/item/clothing/accessory/gaiter/orange
name = "orange neck gaiter"
icon_state = "gaiter_orange"
/obj/item/clothing/accessory/gaiter/charcoal
name = "charcoal neck gaiter"
icon_state = "gaiter_charcoal"
/obj/item/clothing/accessory/gaiter/snow
name = "white neck gaiter"
icon_state = "gaiter_snow"
/obj/item/clothing/accessory/gaiter/half //functions like a gaiter
name = "black half-mask"
icon_state = "half_mask"
/*
* Pride Pins
*/
/obj/item/clothing/accessory/pride
name = "pride pin"
desc = "A pin displaying pride in one's identity."
icon_state = "pride"
slot = ACCESSORY_SLOT_MEDAL
/obj/item/clothing/accessory/pride/bi
name = "bisexual pride pin"
icon_state = "pride_bi"
/obj/item/clothing/accessory/pride/trans
name = "transgender pride pin"
icon_state = "pride_trans"
/obj/item/clothing/accessory/pride/ace
name = "asexual pride pin"
icon_state = "pride_ace"
/obj/item/clothing/accessory/pride/enby
name = "nonbinary pride pin"
icon_state = "pride_enby"
/obj/item/clothing/accessory/pride/pan
name = "pansexual pride pin"
icon_state = "pride_pan"
/obj/item/clothing/accessory/pride/lesbian
name = "lesbian pride pin"
icon_state = "pride_lesbian"
/obj/item/clothing/accessory/pride/intersex
name = "intersex pride pin"
icon_state = "pride_intersex"
/obj/item/clothing/accessory/pride/vore
name = "vore pride pin"
icon_state = "pride_vore"
// ranger ponchos
/obj/item/clothing/accessory/poncho/roles/ranger
name = "red ranger poncho"
desc = "A rugged all-weather poncho, perfectly coloured to match a popular line of neck gaiters. You could probably use it as a tent in a pinch!"
icon_state = "rangerponcho_red"
item_state = "rangerponcho_red"
/obj/item/clothing/accessory/poncho/roles/ranger/tan
name = "tan ranger poncho"
icon_state = "rangerponcho_tan"
item_state = "rangerponcho_tan"
/obj/item/clothing/accessory/poncho/roles/ranger/gray
name = "gray ranger poncho"
icon_state = "rangerponcho_gray"
item_state = "rangerponcho_gray"
/obj/item/clothing/accessory/poncho/roles/ranger/green
name = "green ranger poncho"
icon_state = "rangerponcho_green"
item_state = "rangerponcho_green"
/obj/item/clothing/accessory/poncho/roles/ranger/blue
name = "blue ranger poncho"
icon_state = "rangerponcho_blue"
item_state = "rangerponcho_blue"
/obj/item/clothing/accessory/poncho/roles/ranger/purple
name = "purple ranger poncho"
icon_state = "rangerponcho_purple"
item_state = "rangerponcho_purple"
/obj/item/clothing/accessory/poncho/roles/ranger/orange
name = "orange ranger poncho"
icon_state = "rangerponcho_orange"
item_state = "rangerponcho_orange"
/obj/item/clothing/accessory/poncho/roles/ranger/charcoal
name = "charcoal ranger poncho"
icon_state = "rangerponcho_charcoal"
item_state = "rangerponcho_charcoal"
/obj/item/clothing/accessory/poncho/roles/ranger/snow
name = "white ranger poncho"
icon_state = "rangerponcho_snow"
item_state = "rangerponcho_snow"
// leg warmers
/obj/item/clothing/accessory/legwarmers
name = "thigh-length legwarmers"
desc = "A comfy pair of legwarmers. These are excessively long."
icon_state = "legwarmers_thigh"
/obj/item/clothing/accessory/legwarmersmedium
name = "medium-length legwarmers"
desc = "A comfy pair of legwarmers. For those unfortunate enough to wear shorts in the cold."
icon_state = "legwarmers_medium"
/obj/item/clothing/accessory/legwarmersshort
name = "short legwarmers"
desc = "A comfy pair of legwarmers. For those better in the cold than others."
icon_state = "legwarmers_short"