diff --git a/baystation12.dme b/baystation12.dme
index 00bfb911c1b..87626cca810 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -23,7 +23,6 @@
#define FILE_DIR "code/defines/mob/living/carbon"
#define FILE_DIR "code/defines/mob/living/silicon"
#define FILE_DIR "code/defines/obj"
-#define FILE_DIR "code/defines/obj/clothing"
#define FILE_DIR "code/defines/procs"
#define FILE_DIR "code/defines/sd_procs"
#define FILE_DIR "code/FEA"
@@ -90,6 +89,7 @@
#define FILE_DIR "code/modules/chemical"
#define FILE_DIR "code/modules/clothing"
#define FILE_DIR "code/modules/clothing/glasses"
+#define FILE_DIR "code/modules/clothing/head"
#define FILE_DIR "code/modules/clothing/spacesuits"
#define FILE_DIR "code/modules/clothing/suits"
#define FILE_DIR "code/modules/clothing/uniforms"
@@ -328,14 +328,6 @@
#include "code\defines\obj\vending.dm"
#include "code\defines\obj\weapon.dm"
#include "code\defines\obj\window.dm"
-#include "code\defines\obj\clothing\costume.dm"
-#include "code\defines\obj\clothing\ears.dm"
-#include "code\defines\obj\clothing\gimmick.dm"
-#include "code\defines\obj\clothing\gloves.dm"
-#include "code\defines\obj\clothing\head.dm"
-#include "code\defines\obj\clothing\jumpsuit.dm"
-#include "code\defines\obj\clothing\mask.dm"
-#include "code\defines\obj\clothing\shoes.dm"
#include "code\defines\procs\AStar.dm"
#include "code\defines\procs\captain_announce.dm"
#include "code\defines\procs\church_name.dm"
@@ -799,12 +791,21 @@
#include "code\modules\chemical\Chemistry-Reagents.dm"
#include "code\modules\chemical\Chemistry-Recipes.dm"
#include "code\modules\chemical\Chemistry-Tools.dm"
+#include "code\modules\clothing\costume.dm"
+#include "code\modules\clothing\ears.dm"
+#include "code\modules\clothing\gimmick.dm"
#include "code\modules\clothing\glasses.dm"
-#include "code\modules\clothing\hardhat.dm"
+#include "code\modules\clothing\gloves.dm"
+#include "code\modules\clothing\jumpsuit.dm"
+#include "code\modules\clothing\mask.dm"
+#include "code\modules\clothing\shoes.dm"
#include "code\modules\clothing\spacesuit.dm"
#include "code\modules\clothing\suit.dm"
#include "code\modules\clothing\glasses\glasses.dm"
#include "code\modules\clothing\glasses\hud.dm"
+#include "code\modules\clothing\head\hardhat.dm"
+#include "code\modules\clothing\head\hats.dm"
+#include "code\modules\clothing\head\helmets.dm"
#include "code\modules\clothing\spacesuits\captain.dm"
#include "code\modules\clothing\spacesuits\miscellaneous.dm"
#include "code\modules\clothing\spacesuits\ninja.dm"
diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm
index b205a612d5e..af80f42cef7 100644
--- a/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm
@@ -1,198 +1,485 @@
/mob/living/carbon/human/tajaran/examine()
- set src in view()
+ set src in oview()
- usr << "\blue *---------*"
+ if(!usr || !src) return
+ if(((usr.disabilities & 128) || usr.blinded || usr.stat) && !(istype(usr,/mob/dead/observer/)))
+ usr << "Something is there but you can't see it."
+ return
- usr << "\blue This is \icon[src.icon] [src.name]! One of the cat-like Tajarans."
+ var/skipgloves = 0
+ var/skipsuitstorage = 0
+ var/skipjumpsuit = 0
+ var/skipshoes = 0
+ var/skipmask = 0
+ var/skipears = 0
+ var/skipeyes = 0
- // crappy hack because you can't do \his[src] etc
+ //exosuits and helmets obscure our view and stuff.
+ if (src.wear_suit)
+ skipgloves = src.wear_suit.flags_inv & HIDEGLOVES
+ skipsuitstorage = src.wear_suit.flags_inv & HIDESUITSTORAGE
+ skipjumpsuit = src.wear_suit.flags_inv & HIDEJUMPSUIT
+ skipshoes = src.wear_suit.flags_inv & HIDESHOES
+
+ if (src.head)
+ skipmask = src.head.flags_inv & HIDEMASK
+ skipeyes = src.head.flags_inv & HIDEEYES
+ skipears = src.head.flags_inv & HIDEEARS
+
+ // crappy hacks because you can't do \his[src] etc. I'm sorry this proc is so unreadable, blame the text macros :<
+ var/t_He = "It" //capitalised for use at the start of each line.
var/t_his = "its"
var/t_him = "it"
- if (src.gender == MALE)
- t_his = "his"
- t_him = "him"
- else if (src.gender == FEMALE)
- t_his = "her"
- t_him = "her"
+ var/t_has = "has"
+ var/t_is = "is"
- if (src.w_uniform)
+ var/msg = "*---------*\nThis is "
+
+ if( skipjumpsuit && (wear_mask || skipmask) ) //big suits/masks make it hard to tell their gender
+ t_He = "They"
+ t_his = "their"
+ t_him = "them"
+ t_has = "have"
+ t_is = "are"
+ else
+ if(src.icon)
+ msg += "\icon[src.icon] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated
+ switch(src.gender)
+ if(MALE)
+ t_He = "He"
+ t_his = "his"
+ t_him = "him"
+ if(FEMALE)
+ t_He = "She"
+ t_his = "her"
+ t_him = "her"
+
+ msg += "\a [src], one of the cat-like Tajarans.!\n"
+
+ //uniform
+ if (src.w_uniform && !skipjumpsuit)
if (src.w_uniform.blood_DNA)
- usr << "\red [src.name] is wearing a[src.w_uniform.blood_DNA ? " bloody " : " "] \icon[src.w_uniform] [src.w_uniform.name]!"
+ msg += "[t_He] [t_is] wearing \icon[src.w_uniform] [src.w_uniform.gender==PLURAL?"some":"a"] blood-stained [src.w_uniform.name]!\n"
else
- usr << "\blue [src.name] is wearing a \icon[src.w_uniform] [src.w_uniform.name]."
+ msg += "[t_He] [t_is] wearing \icon[src.w_uniform] \a [src.w_uniform].\n"
- if (src.handcuffed)
- usr << "\blue [src.name] is \icon[src.handcuffed] handcuffed!"
+ //head
+ if (src.head)
+ if (src.head.blood_DNA)
+ msg += "[t_He] [t_is] wearing \icon[src.head] [src.head.gender==PLURAL?"some":"a"] blood-stained [src.head.name] on [t_his] head!\n"
+ else
+ msg += "[t_He] [t_is] wearing \icon[src.head] \a [src.head] on [t_his] head.\n"
+ //suit/armour
if (src.wear_suit)
if (src.wear_suit.blood_DNA)
- usr << "\red [src.name] has a[src.wear_suit.blood_DNA ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name] on!"
+ msg += "[t_He] [t_is] wearing \icon[src.wear_suit] [src.wear_suit.gender==PLURAL?"some":"a"] blood-stained [src.wear_suit.name]!\n"
else
- usr << "\blue [src.name] has a \icon[src.wear_suit] [src.wear_suit.name] on."
+ msg += "[t_He] [t_is] wearing \icon[src.wear_suit] \a [src.wear_suit].\n"
- if (src.l_ear)
- usr << "\blue [src.name] has a \icon[src.l_ear] [src.l_ear.name] on [t_his] left ear."
+ //suit/armour storage
+ if(src.s_store && !skipsuitstorage)
+ if(src.s_store.blood_DNA)
+ msg += "[t_He] [t_is] carrying \icon[src.s_store] [src.s_store.gender==PLURAL?"some":"a"] blood-stained [src.s_store.name] on [t_his] [src.wear_suit.name]!\n"
+ else
+ msg += "[t_He] [t_is] carrying \icon[src.s_store] \a [src.s_store] on [t_his] [src.wear_suit.name].\n"
- if (src.r_ear)
- usr << "\blue [src.name] has a \icon[src.r_ear] [src.r_ear.name] on [t_his] right ear."
-
- if (src.wear_mask)
- if (src.wear_mask.blood_DNA)
- usr << "\red [src.name] has a[src.wear_mask.blood_DNA ? " bloody " : " "] \icon[src.wear_mask] [src.wear_mask.name] on [t_his] face!"
+ //back
+ if (src.back)
+ if (src.back.blood_DNA)
+ msg += "[t_He] [t_has] \icon[src.back] [src.back.gender==PLURAL?"some":"a"] blood-stained [src.back] on [t_his] back.\n"
else
- usr << "\blue [src.name] has a \icon[src.wear_mask] [src.wear_mask.name] on [t_his] face."
+ msg += "[t_He] [t_has] \icon[src.back] \a [src.back] on [t_his] back.\n"
+ //left hand
if (src.l_hand)
if (src.l_hand.blood_DNA)
- usr << "\red [src.name] has a[src.l_hand.blood_DNA ? " bloody " : " "] \icon[src.l_hand] [src.l_hand.name] in [t_his] left hand!"
+ msg += "[t_He] [t_is] holding \icon[src.l_hand] [src.l_hand.gender==PLURAL?"some":"a"] blood-stained [src.l_hand.name] in [t_his] left hand!\n"
else
- usr << "\blue [src.name] has a \icon[src.l_hand] [src.l_hand.name] in [t_his] left hand."
+ msg += "[t_He] [t_is] holding \icon[src.l_hand] \a [src.l_hand] in [t_his] left hand.\n"
+ //right hand
if (src.r_hand)
if (src.r_hand.blood_DNA)
- usr << "\red [src.name] has a[src.r_hand.blood_DNA ? " bloody " : " "] \icon[src.r_hand] [src.r_hand.name] in [t_his] right hand!"
+ msg += "[t_He] [t_is] holding \icon[src.r_hand] [src.r_hand.gender==PLURAL?"some":"a"] blood-stained [src.r_hand.name] in [t_his] right hand!\n"
else
- usr << "\blue [src.name] has a \icon[src.r_hand] [src.r_hand.name] in [t_his] right hand."
+ msg += "[t_He] [t_is] holding \icon[src.r_hand] \a [src.r_hand] in [t_his] right hand.\n"
+ //gloves
+ if (src.gloves && !skipgloves)
+ if (src.gloves.blood_DNA)
+ msg += "[t_He] [t_has] \icon[src.gloves] [src.gloves.gender==PLURAL?"some":"a"] blood-stained [src.gloves.name] on [t_his] hands!\n"
+ else
+ msg += "[t_He] [t_has] \icon[src.gloves] \a [src.gloves] on [t_his] hands.\n"
+ else if (src.blood_DNA)
+ msg += "[t_He] [t_has] blood-stained hands!\n"
+
+ //handcuffed?
+ if (src.handcuffed)
+ msg += "[t_He] [t_is] \icon[src.handcuffed] handcuffed!\n"
+
+ //belt
if (src.belt)
if (src.belt.blood_DNA)
- usr << "\red [src.name] has a[src.belt.blood_DNA ? " bloody " : " "] \icon[src.belt] [src.belt.name] on [t_his] belt!"
+ msg += "[t_He] [t_has] \icon[src.belt] [src.belt.gender==PLURAL?"some":"a"] blood-stained [src.belt.name] about [t_his] waist!\n"
else
- usr << "\blue [src.name] has a \icon[src.belt] [src.belt.name] on [t_his] belt."
- if(src.s_store)
- if(src.s_store.blood_DNA)
- usr << "\red [src.name] has a[src.s_store.blood_DNA ? " bloody " : " "] \icon[src.s_store] [src.s_store.name] on [t_his][src.wear_suit.blood_DNA ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name]!"
+ msg += "[t_He] [t_has] \icon[src.belt] \a [src.belt] about [t_his] waist.\n"
+
+ //shoes
+ if (src.shoes && !skipshoes)
+ if(src.shoes.blood_DNA)
+ msg += "[t_He] [t_is] wearing \icon[src.shoes] [src.shoes.gender==PLURAL?"some":"a"] blood-stained [src.shoes.name] on [t_his] feet!\n"
else
- usr << "\blue [src.name] has a \icon[src.s_store] [src.s_store.name] on [t_his][src.wear_suit.blood_DNA ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name]."
- if (src.shoes)
- usr << "[src.shoes.blood_DNA ? "\red" : "\blue"][src.name] has a[src.shoes.blood_DNA ? " bloody " : " "] \icon[src.shoes] [src.shoes.name] on [t_his] feet."
+ msg += "[t_He] [t_is] wearing \icon[src.shoes] \a [src.shoes] on [t_his] feet.\n"
-
- if (src.gloves)
- if (src.gloves.blood_DNA)
- usr << "\red [src.name] has bloody \icon[src.gloves] [src.gloves.name] on [t_his] hands!"
+ //mask
+ if (src.wear_mask && !skipmask)
+ if (src.wear_mask.blood_DNA)
+ msg += "[t_He] [t_has] \icon[src.wear_mask] [src.wear_mask.gender==PLURAL?"some":"a"] blood-stained [src.wear_mask.name] on [t_his] face!\n"
else
- usr << "\blue [src.name] has \icon[src.gloves] [src.gloves.name] on [t_his] hands."
- else if (src.blood_DNA)
- usr << "\red [src.name] has bloody hands!"
+ msg += "[t_He] [t_has] \icon[src.wear_mask] \a [src.wear_mask] on [t_his] face.\n"
- if (src.back)
- usr << "\blue [src.name] has a \icon[src.back] [src.back.name] on [t_his] back."
+ //eyes
+ if (src.glasses && !skipeyes)
+ if (src.glasses.blood_DNA)
+ msg += "[t_He] [t_has] \icon[src.glasses] [src.glasses.gender==PLURAL?"some":"a"] blood-stained [src.glasses] covering [t_his] eyes!\n"
+ else
+ msg += "[t_He] [t_has] \icon[src.glasses] \a [src.glasses] covering [t_his] eyes.\n"
+ if (src.l_ear && !skipears)
+ msg += "[t_He] [t_has] has a \icon[src.l_ear] [src.l_ear.name] on [t_his] left ear.\n"
+
+ if (src.r_ear && !skipears)
+ msg += "[t_He] [t_has] has a \icon[src.r_ear] [src.r_ear.name] on [t_his] right ear.\n"
+
+ //ID
if (src.wear_id)
var/id
- var/photo = 0
- if(istype(src:wear_id, /obj/item/device/pda))
- var/obj/item/device/pda/pda = src:wear_id
+ if(istype(src.wear_id, /obj/item/device/pda))
+ var/obj/item/device/pda/pda = src.wear_id
id = pda.owner
+ else if(istype(src.wear_id, /obj/item/weapon/card/id)) //just in case something other than a PDA/ID card somehow gets in the ID slot :[
+ var/obj/item/weapon/card/id/idcard = src.wear_id
+ id = idcard.registered_name
+ if (id && (id != src.real_name) && (get_dist(src, usr) <= 1) && prob(10))
+ msg += "[t_He] [t_is] wearing \icon[src.wear_id] \a [src.wear_id] yet something doesn't seem right...\n"
else
- id = src.wear_id.registered_name
- if (src.wear_id.PHOTO)
- photo = 1
- if (id != src.real_name && in_range(src, usr) && prob(10))
- if (photo)
- usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] with a photo yet doesn't seem to be that person!!!"
- else
- usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] yet doesn't seem to be that person!!!"
- else
- if (photo)
- usr << "\blue [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] with a photo."
- else
- usr << "\blue [src.name] is wearing \icon[src.wear_id] [src.wear_id.name]."
-
+ msg += "[t_He] [t_is] wearing \icon[src.wear_id] \a [src.wear_id].\n"
+ //Jitters
if (src.is_jittery)
- switch(src.jitteriness)
- if(300 to INFINITY)
- usr << "\red [src] is violently convulsing."
- if(200 to 300)
- usr << "\red [src] looks extremely jittery."
- if(100 to 200)
- usr << "\red [src] is twitching ever so slightly."
+ if(src.jitteriness >= 300)
+ msg += "[t_He] [t_is] convulsing violently!\n"
+ else if(src.jitteriness >= 200)
+ msg += "[t_He] [t_is] extremely jittery.\n"
+ else if(src.jitteriness >= 100)
+ msg += "[t_He] [t_is] twitching ever so slightly.\n"
if (src.suiciding)
- switch(src.suiciding)
- if(1)
- usr << "\red [src.name] appears to have bitten [t_his] tongue off!"
+ msg += "[t_He] [t_has] bitten off [t_his] own tongue and [t_has] suffered major bloodloss!\n"
var/distance = get_dist(usr,src)
if(istype(usr, /mob/dead/observer) || usr.stat == 2) // ghosts can see anything
distance = 1
if (src.stat == 1 || stat == 2)
- usr << "\red [name] doesn't seem to be responding to anything around [t_him], [t_his] eyes closed as though asleep."
- if(health < 0 && distance <= 3)
- usr << "\red [name] does not appear to be breathing."
- if(ishuman(src) && usr.stat == 0 && src.stat == 1 && distance <= 1)
+ msg += "[name] doesn't seem to be responding to anything around [t_him], [t_his] eyes closed as though asleep.\n"
+ if((!isbreathing || holdbreath) && distance <= 3)
+ msg += "[name] does not appear to be breathing.\n"
+ if(istype(usr, /mob/living/carbon/human) && usr.stat == 0 && src.stat == 1 && distance <= 1)
for(var/mob/O in viewers(usr.loc, null))
O.show_message("[usr] checks [src]'s pulse.", 1)
- sleep(15)
- usr << "\blue [name] has a pulse!"
+ spawn(15)
+ usr << "\blue [name] has a pulse!"
if (src.stat == 2 || (changeling && changeling.changeling_fakedeath == 1))
if(distance <= 1)
- if(ishuman(usr) && usr.stat == 0)
- for(var/mob/O in viewers(usr.loc, null) )
+ if(istype(usr, /mob/living/carbon/human) && usr.stat == 0)
+ for(var/mob/O in viewers(usr.loc, null))
O.show_message("[usr] checks [src]'s pulse.", 1)
- sleep(15)
- usr << "\red [name] has no pulse!"
- else
- if (src.getBruteLoss())
- if (src.getBruteLoss() < 30)
- usr << "\red [src.name] looks slightly injured!"
- else
- usr << "\red [src.name] looks severely injured!"
+ spawn(15)
+ usr << "\red [name] has no pulse!"
- if (src.cloneloss)
- if (src.cloneloss < 30)
- usr << "\red [src.name] looks slightly... unfinished?"
- else
- usr << "\red [src.name] looks very... unfinished?"
+/* if (src.getBruteLoss())
+ if (src.getBruteLoss() < 30)
+ usr << "\red [src.name] looks slightly injured!"
+ else
+ usr << "\red [src.name] looks severely injured!"*/
- if (src.getFireLoss())
- if (src.getFireLoss() < 30)
- usr << "\red [src.name] looks slightly burned!"
- else
- usr << "\red [src.name] looks severely burned!"
+ if (src.cloneloss)
+ if (src.cloneloss < 30)
+ msg += "[src.name] looks slightly... unfinished?\n"
+ else
+ msg += "[src.name] looks very... unfinished?\n"
- if (src.nutrition < 100)
- usr << "\red [src.name] looks like flesh and bones."
- else if (src.nutrition >= 500)
- if (usr.nutrition < 100)
- usr << "\red [src.name] looks very round and delicious. Like a little piggy. A tasty piggy."
- else
- usr << "\blue [src.name] looks quite chubby."
+/* if (src.getFireLoss())
+ if (src.getFireLoss() < 30)
+ usr << "\red [src.name] looks slightly burned!"
+ else
+ usr << "\red [src.name] looks severely burned!"*/
+ msg += ""
+ if (src.nutrition < 100)
+ msg += "[t_He] [t_is] severely malnourished.\n"
+ else if (src.nutrition >= 500)
+ if (usr.nutrition < 100)
+ msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n"
+ else
+ msg += "[t_He] [t_is] quite chubby.\n"
- else if (src.brainloss >= 60)
- usr << "\red [src.name] has a stupid expression on [t_his] face."
- if (!src.client)
- usr << "\red [src.name] doesn't seem as though they want to talk."
+ msg += ""
+
+ if (src.getBrainLoss() >= 60 && !stat)
+ msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n"
+
+ if (!src.client)
+ msg += "[t_He] [t_has] a vacant, braindead stare...\n"
+
+ var/list/wound_descriptions = list()
+ var/list/wound_flavor_text = list()
for(var/named in organs)
var/datum/organ/external/temp = organs[named]
- if(temp.destroyed)
- usr << "\red [src.name] is missing [t_his] [temp.display_name]."
- if(temp.wounds)
- for(var/datum/organ/external/wound/w in temp.wounds)
- var/size = w.wound_size
- var/sizetext
- switch(size)
+ if(temp)
+ if(temp.destroyed)
+ wound_flavor_text["[temp.display_name]"] = "[src.name] is missing [t_his] [temp.display_name].\n"
+ continue
+ if(temp.wounds)
+ var/list/wounds = list(list(),list(),list(),list(),list(),list())
+ for(var/datum/organ/wound/w in temp.wounds)
+ switch(w.healing_state)
+ if(0)
+ var/list/cut = wounds[1]
+ cut += w
+ wounds[1] = cut
+ if(1)
+ var/list/cut = wounds[2]
+ cut += w
+ wounds[2] = cut
+ if(2)
+ var/list/cut = wounds[3]
+ cut += w
+ wounds[3] = cut
+ if(3)
+ var/list/cut = wounds[4]
+ cut += w
+ wounds[4] = cut
+ if(4)
+ var/list/cut = wounds[5]
+ cut += w
+ wounds[5] = cut
+ if(5)
+ var/list/cut = wounds[6]
+ cut += w
+ wounds[6] = cut
+ wound_descriptions["[temp.display_name]"] = wounds
+ else
+ wound_flavor_text["[temp.display_name]"] = ""
+ //Now that we have a big list of all the wounds, on all the limbs.
+ var/list/is_bleeding = list()
+ for(var/named in wound_descriptions)
+ var/list/wound_states = wound_descriptions[named]
+ var/list/flavor_text = list()
+ for(var/i = 1, i <= 6, i++)
+ var/list/wound_state = wound_states[i] //All wounds at this level of healing.
+ var/list/tally = list("cut" = 0, "deep cut" = 0, "flesh wound" = 0, "gaping wound" = 0, "big gaping wound" = 0, "massive wound" = 0,\
+ "tiny bruise" = 0, "small bruise" = 0, "moderate bruise" = 0, "large bruise" = 0, "huge bruise" = 0, "monumental bruise" = 0,\
+ "small burn" = 0, "moderate burn" = 0, "large burn" = 0, "severe burn" = 0, "deep burn" = 0, "carbonised area" = 0) //How many wounds of what size.
+ for(var/datum/organ/wound/w in wound_state)
+ if(w.bleeding && !is_bleeding[named]) is_bleeding[named] = 1
+ switch(w.wound_size)
if(1)
- sizetext = "cut"
+ switch(w.wound_type)
+ if(0)
+ tally["cut"] += 1
+ if(1)
+ tally["tiny bruise"] += 1
+ if(2)
+ tally["small burn"] += 1
if(2)
- sizetext = "deep cut"
+ switch(w.wound_type)
+ if(0)
+ tally["deep cut"] += 1
+ if(1)
+ tally["small bruise"] += 1
+ if(2)
+ tally["moderate burn"] += 1
if(3)
- sizetext = "flesh wound"
+ switch(w.wound_type)
+ if(0)
+ tally["flesh wound"] += 1
+ if(1)
+ tally["moderate bruise"] += 1
+ if(2)
+ tally["large burn"] += 1
if(4)
- sizetext = "gaping wound"
+ switch(w.wound_type)
+ if(0)
+ tally["gaping wound"] += 1
+ if(1)
+ tally["large bruise"] += 1
+ if(2)
+ tally["severe burn"] += 1
if(5)
- sizetext = "big gaping wound"
+ switch(w.wound_type)
+ if(0)
+ tally["big gaping wound"] += 1
+ if(1)
+ tally["huge bruise"] += 1
+ if(2)
+ tally["deep burn"] += 1
if(6)
- sizetext = "massive wound"
- if(w.bleeding)
- usr << "\red [src.name] is bleeding from a [sizetext] on [t_his] [temp.display_name]."
+ switch(w.wound_type)
+ if(0)
+ tally["massive wound"] += 1
+ if(1)
+ tally["monumental bruise"] += 1
+ if(2)
+ tally["carbonised area"] += 1
+ for(var/tallied in tally)
+ if(!tally[tallied])
continue
+ //if(flavor_text_string && tally[tallied])
+ // for(
+ // flavor_text_string += pick(list(", as well as", ", in addition to")) //add more later.
+ var/tallied_rename = list("cut" = "cut","deep cut" = "deep cut", "flesh wound" = "flesh wound",\
+ "gaping wound" = "gaping wound", "big gaping wound" = "big gaping wound", "massive wound" = "massive wound",\
+ "tiny bruise" = "tiny bruise", "small bruise" = "small bruise", "moderate bruise" = "moderate bruise",\
+ "large bruise" = "large bruise", "huge bruise" = "huge bruise", "monumental bruise" = "monumental bruise",\
+ "small burn" = "small burn", "moderate burn" = "moderate burn", "large burn" = "large burn",\
+ "severe burn" = "severe burn", "deep burn" = "deep burn", "carbonised area" = "carbonised area")
+ switch(i)
+ if(2) //Healing wounds.
+ if(tallied in list("cut","tiny bruise","small burn"))
+ continue
+ tallied_rename = list("deep cut" = "clotted cut", "flesh wound" = "small bandaged wound",\
+ "gaping wound" = "bandaged wound", "big gaping wound" = "gauze wrapped wound",\
+ "massive wound" = "massive blood soaked bandage", "small bruise" = "small bruise",\
+ "moderate bruise" = "moderate bruise", "large bruise" = "large bruise",\
+ "huge bruise" = "huge bruise", "monumental bruise" = "monumental bruise",\
+ "moderate burn" = "moderate salved burn", "large burn" = "large salved burn",\
+ "severe burn" = "severe salved burn", "deep burn" = "deep salved burn",\
+ "carbonised area" = "treated carbonised area")
+ if(3)
+ if(tallied in list("cut","tiny bruise","small burn"))
+ continue
+ tallied_rename = list("deep cut" = "fading cut", "flesh wound" = "small healing wound",\
+ "gaping wound" = "healing wound", "big gaping wound" = "big healing wound",\
+ "massive wound" = "massive healing wound", "small bruise" = "tiny bruise",\
+ "moderate bruise" = "small bruise", "large bruise" = "moderate bruise",\
+ "huge bruise" = "large bruise", "monumental bruise" = "huge bruise",\
+ "moderate burn" = "healing moderate burn", "large burn" = "healing large burn",\
+ "severe burn" = "healing severe burn", "deep burn" = "healing deep burn",\
+ "carbonised area" = "slowly healing carbonised area")
+ if(4)
+ if(tallied in list("cut","deep cut","tiny bruise", "small bruise","small burn", "moderate burn"))
+ continue
+ tallied_rename = list("flesh wound" = "small red scar", "gaping wound" = "angry straight scar",\
+ "big gaping wound" = "jagged angry scar", "massive wound" = "gigantic angry scar",\
+ "moderate bruise" = "tiny bruise", "large bruise" = "small bruise",\
+ "huge bruise" = "moderate bruise", "monumental bruise" = "large bruise",\
+ "large burn" = "large burn scar", "severe burn" = "severe burn scar",\
+ "deep burn" = "deep burn scar", "carbonised area" = "healing carbonised area")
+ if(5)
+ if(tallied in list("cut","deep cut","tiny bruise", "small bruise", "moderate bruise","small burn", "moderate burn"))
+ continue
+ tallied_rename = list("flesh wound" = "small scar", "gaping wound" = "straight scar",\
+ "big gaping wound" = "jagged scar", "massive wound" = "gigantic scar",\
+ "large bruise" = "tiny bruise",\
+ "huge bruise" = "small bruise", "monumental bruise" = "moderate bruise",\
+ "large burn" = "large burn scar", "severe burn" = "severe burn scar",\
+ "deep burn" = "deep burn scar", "carbonised area" = "large scarred area")
+ if(6)
+ if(tallied in list("cut","deep cut","flesh wound","tiny bruise", "small bruise", "moderate bruise", "large bruise", "huge bruise","small burn", "moderate burn"))
+ continue
+ tallied_rename = list("gaping wound" = "straight scar",\
+ "big gaping wound" = "jagged scar", "massive wound" = "gigantic scar",\
+ "monumental bruise" = "tiny bruise",\
+ "large burn" = "large burn scar", "severe burn" = "severe burn scar",\
+ "deep burn" = "deep burn scar", "carbonised area" = "large scarred area")
+ var/list/no_exclude = list("gaping wound", "big gaping wound", "massive wound", "large bruise",\
+ "huge bruise", "massive bruise", "severe burn", "large burn", "deep burn", "carbonised area")
+ switch(tally[tallied])
+ if(1)
+ if(!flavor_text.len)
+ flavor_text += "[src] has[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
+ else
+ flavor_text += "[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
+ if(2)
+ if(!flavor_text.len)
+ flavor_text += "[src] has[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
+ else
+ flavor_text += "[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
+ if(3 to 5)
+ if(!flavor_text.len)
+ flavor_text += "[src] has several [tallied_rename[tallied]]s"
+ else
+ flavor_text += " several [tallied_rename[tallied]]s"
+ if(6 to INFINITY)
+ if(!flavor_text.len)
+ flavor_text += "[src] has a bunch of [tallied_rename[tallied]]s"
+ else
+ flavor_text += " a ton of [tallied_rename[tallied]]s"
+ if(flavor_text.len)
+ var/flavor_text_string = ""
+ for(var/text = 1, text <= flavor_text.len, text++)
+ if(text == flavor_text.len && flavor_text.len > 1)
+ flavor_text_string += ", and"
+ else if(flavor_text.len > 1)
+ flavor_text_string += ","
+ flavor_text_string += flavor_text[text]
+ flavor_text_string += " on [t_his] [named].
"
+ wound_flavor_text["[named]"] = flavor_text_string
+ if(wound_flavor_text["head"] && !skipmask && !(wear_mask && istype(wear_mask, /obj/item/clothing/mask/gas)))
+ msg += wound_flavor_text["head"]
+ else if(is_bleeding["head"])
+ msg += "[src] has blood running down [t_his] face!\n"
+ if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit)
+ msg += wound_flavor_text["chest"]
+ else if(is_bleeding["chest"])
+ msg += "[src] has blood soaking through from under [t_his] clothing!\n"
+ if(wound_flavor_text["left arm"] && !w_uniform && !skipjumpsuit)
+ msg += wound_flavor_text["left arm"]
+ else if(is_bleeding["left arm"])
+ msg += "[src] has blood soaking through from under [t_his] clothing!\n"
+ if(wound_flavor_text["left hand"] && !gloves && !skipgloves)
+ msg += wound_flavor_text["left hand"]
+ else if(is_bleeding["left hand"])
+ msg += "[src] has blood running from under [t_his] gloves!\n"
+ if(wound_flavor_text["right arm"] && !w_uniform && !skipjumpsuit)
+ msg += wound_flavor_text["right arm"]
+ else if(is_bleeding["right arm"])
+ msg += "[src] has blood soaking through from under [t_his] clothing!\n"
+ if(wound_flavor_text["right hand"] && !gloves && !skipgloves)
+ msg += wound_flavor_text["right hand"]
+ else if(is_bleeding["right hand"])
+ msg += "[src] has blood running from under [t_his] gloves!\n"
+ if(wound_flavor_text["groin"] && !w_uniform && !skipjumpsuit)
+ msg += wound_flavor_text["groin"]
+ else if(is_bleeding["groin"])
+ msg += "[src] has blood soaking through from under [t_his] clothing!\n"
+ if(wound_flavor_text["left leg"] && !w_uniform && !skipjumpsuit)
+ msg += wound_flavor_text["left leg"]
+ else if(is_bleeding["left leg"])
+ msg += "[src] has blood soaking through from under [t_his] clothing!\n"
+ if(wound_flavor_text["left foot"]&& !shoes && !skipshoes)
+ msg += wound_flavor_text["left foot"]
+ else if(is_bleeding["left foot"])
+ msg += "[src] has blood running from [t_his] shoes!\n"
+ if(wound_flavor_text["right leg"] && !w_uniform && !skipjumpsuit)
+ msg += wound_flavor_text["right leg"]
+ else if(is_bleeding["right leg"])
+ msg += "[src] has blood soaking through from under [t_his] clothing!\n"
+ if(wound_flavor_text["right foot"]&& !shoes && !skipshoes)
+ msg += wound_flavor_text["right foot"]
+ else if(is_bleeding["right foot"])
+ msg += "[src] has blood running from [t_his] shoes!\n"
- print_flavor_text()
- usr << "\blue *---------*"
\ No newline at end of file
+// if(w.bleeding)
+// usr << "\red [src.name] is bleeding from a [sizetext] on [t_his] [temp.display_name]."
+// continue
+
+ msg += print_flavor_text()
+
+ msg += "\blue *---------*"
+ usr << msg
diff --git a/code/defines/atom.dm b/code/defines/atom.dm
index ca3ebde1f3e..7a249386de6 100644
--- a/code/defines/atom.dm
+++ b/code/defines/atom.dm
@@ -2,6 +2,7 @@
layer = 2
var/level = 2
var/flags = FPRINT
+ var/flags_inv //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc.
var/list/fingerprints
var/list/fingerprintshidden
var/fingerprintslast = null
diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm
index 4ec6f400cb6..03bf518d7b4 100644
--- a/code/defines/obj/decal.dm
+++ b/code/defines/obj/decal.dm
@@ -62,6 +62,16 @@
D.cure(0)
..()
+/obj/effect/decal/cleanable/blood/drip
+ name = "drips of blood"
+ desc = "It's red."
+ density = 0
+ anchored = 1
+ layer = 2
+ icon = 'drip.dmi'
+ icon_state = "1"
+ track_amt = 0
+
/obj/effect/decal/cleanable/mucus
name = "Mucus"
desc = "Disgusting mucus."
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 338065b34b9..3f933a749f5 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -397,8 +397,8 @@
name = "medical pack"
singular_name = "medical pack"
icon = 'items.dmi'
- amount = 5
- max_amount = 5
+ amount = 10 //To compensate for wounds
+ max_amount = 10
w_class = 1
throw_speed = 4
throw_range = 20
@@ -406,11 +406,11 @@
var/heal_burn = 0
/obj/item/stack/medical/bruise_pack
- name = "bruise pack"
- singular_name = "bruise pack"
- desc = "A pack designed to treat blunt-force trauma."
+ name = "\improper Roll of Gauze"
+ singular_name = "\improper Roll of Gauze"
+ desc = "A roll of gauze for sealing up wounds."
icon_state = "brutepack"
- heal_brute = 40
+ heal_brute = 1
origin_tech = "biotech=1"
/obj/item/stack/medical/bruise_pack/tajaran
@@ -419,7 +419,7 @@
desc = "A soft leaf that is rubbed on bruises."
icon = 'harvest.dmi'
icon_state = "cabbage"
- heal_brute = 30
+ heal_brute = 1
/obj/item/stack/medical/ointment
name = "ointment"
@@ -427,7 +427,7 @@
gender = PLURAL
singular_name = "ointment"
icon_state = "ointment"
- heal_burn = 40
+ heal_burn = 1
origin_tech = "biotech=1"
/obj/item/stack/medical/ointment/tajaran
@@ -436,14 +436,14 @@
desc = "A cold leaf that is rubbed on burns."
icon = 'harvest.dmi'
icon_state = "ambrosiavulgaris"
- heal_burn = 30
+ heal_burn = 1
/obj/item/stack/medical/advanced/bruise_pack
name = "advanced trauma kit"
singular_name = "advanced trauma kit"
desc = "An advanced trauma kit for severe injuries."
icon_state = "traumakit"
- heal_brute = 40
+ heal_brute = 1
origin_tech = "biotech=1"
amount = 10
max_amount = 10
@@ -453,7 +453,7 @@
singular_name = "advanced burn kit"
desc = "An advanced treatment kit for severe burns."
icon_state = "burnkit"
- heal_burn = 40
+ heal_burn = 1
origin_tech = "biotech=1"
amount = 10
max_amount = 10
@@ -1882,4 +1882,4 @@
desc = "spooky"
gender = PLURAL
icon = 'wizard.dmi'
- icon_state = "ectoplasm"
+ icon_state = "ectoplasm"
\ No newline at end of file
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index f3c08a7b67d..8d626ed3a2a 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -27,6 +27,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade)
armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0)
+ flags_inv = HIDEJUMPSUIT
/obj/item/clothing/head/magus
name = "magus helm"
@@ -45,4 +46,5 @@
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade)
- armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0)
\ No newline at end of file
+ armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0)
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
\ No newline at end of file
diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm
index 08ed0cc18e2..e1986cc9323 100644
--- a/code/game/jobs/jobs.dm
+++ b/code/game/jobs/jobs.dm
@@ -120,15 +120,16 @@ var/list/nonhuman_positions = list(
/proc/GetRank(var/job)
switch(job)
- if("Bartender","Chef","Lawyer","Librarian","Janitor","Assistant","Unassigned", "Counselor")
+ if("Bartender","Chef","Lawyer","Librarian","Janitor","Assistant","Unassigned")
return 0
- if("Chaplain","Botanist","Hydroponicist","Medical Doctor","Atmospheric Technician","Geneticist", "Virologist", "Surgeon", "Emergency Medical Technician")
+ if("Chaplain","Botanist","Hydroponicist","Medical Doctor","Atmospheric Technician","Geneticist", "Virologist", "Surgeon", "Emergency Medical Technician", "Counselor")
return 1
- if("Quartermaster","Cargo Technician","Chemist", "Station Engineer","Roboticist", "Security Officer", "Forensic Technician","Detective", "Scientist","Shaft Miner", "Xenobiologist", "Plasma Researcher")
+ if("Quartermaster","Cargo Technician","Chemist", "Station Engineer","Roboticist", "Security Officer", "Forensic Technician","Detective", "Scientist","Shaft Miner", "Xenobiologist", "Plasma Researcher","Chief Medical Officer")
return 2
- if("Research Director","Chief Medical Officer","Head of Security","Chief Engineer","Warden")
+ if("Research Director","Head of Security","Chief Engineer","Warden")
return 3
if("Captain","Head of Personnel","Wizard","MODE")
return 4
else
- world << "\"[job]\" NOT GIVEN RANK, REPORT JOBS.DM ERROR TO A CODER"
+ message_admins("\"[job]\" NOT GIVEN RANK, REPORT JOBS.DM ERROR TO A CODER")
+ return 2
\ No newline at end of file
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index ba7db34baad..d3a150d9ed2 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -338,7 +338,7 @@
//Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs.
if ((!selected) || (!src.pod1) || (src.pod1.occupant) || (src.pod1.mess) || !config.revival_cloning)
src.temp = "Unable to initiate cloning cycle." // most helpful error message in THE HISTORY OF THE WORLD
- else if (src.pod1.growclone(selected, C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["interface"],C.fields["changeling"]))
+ else if (src.pod1.growclone(selected, C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["interface"],C.fields["changeling"],C.fields["original"]))
src.temp = "Cloning cycle activated."
geneticsrecords.Remove(C)
del(C)
@@ -385,6 +385,7 @@
R.fields["UI"] = subject.dna.uni_identity
R.fields["SE"] = subject.dna.struc_enzymes
R.fields["changeling"] = subject.changeling
+ R.fields["original"] = subject.original_name
// Preferences stuff
R.fields["interface"] = subject.UI
@@ -500,7 +501,7 @@
//Clonepod
//Start growing a human clone in the pod!
-/obj/machinery/clonepod/proc/growclone(mob/ghost as mob, var/clonename, var/ui, var/se, var/mindref, var/mrace, var/UI, var/datum/changeling/changelingClone)
+/obj/machinery/clonepod/proc/growclone(mob/ghost as mob, var/clonename, var/ui, var/se, var/mindref, var/mrace, var/UI, var/datum/changeling/changelingClone, var/original_name)
if(((!ghost) || (!ghost.client)) || src.mess || src.attempting)
return 0
@@ -534,6 +535,7 @@
src.occupant.real_name = clonename
else
src.occupant.real_name = "clone" //No null names!!
+ src.occupant.original_name = original_name
var/datum/mind/clonemind = (locate(mindref) in ticker.minds)
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index 5c124657907..ea37af8fc56 100644
--- a/code/game/machinery/turrets.dm
+++ b/code/game/machinery/turrets.dm
@@ -221,7 +221,7 @@
A.yo = U.y - T.y
A.xo = U.x - T.x
spawn( 0 )
- A.process()
+ A.fired()
return
@@ -591,6 +591,6 @@
A.current = curloc
A.yo = targloc.y - curloc.y
A.xo = targloc.x - curloc.x
- A.process()
+ A.fired()
sleep(2)
return
diff --git a/code/game/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm
index 686d4749161..4cd9c6a796c 100644
--- a/code/game/objects/devices/scanners.dm
+++ b/code/game/objects/devices/scanners.dm
@@ -308,13 +308,24 @@ proc/analyze_health_less_info(mob/living/carbon/M as mob, mob/user as mob)
user.show_message(text("\red Significant brain damage detected. Subject may have had a concussion."), 1)
if (M.virus2 || M.reagents.reagent_list.len > 0)
user.show_message(text("\red Unknown substance detected in blood."), 1)
- if(istype(M,/mob/living/carbon/human))
+ if(ishuman(M))
var/mob/living/carbon/human/H = M
for(var/name in H.organs)
var/datum/organ/external/e = H.organs[name]
if(e.broken)
user.show_message(text("\red Bone fractures detected. Advanced scanner required for location."), 1)
break
+ if(ishuman(M))
+ if(M:vessel)
+ var/blood_volume = round(M:vessel.get_reagent_amount("blood"))
+ var/blood_percent = blood_volume / 560
+ blood_percent *= 100
+ if(blood_volume <= 448)
+ user.show_message("\red Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl")
+ else if(blood_volume <= 336)
+ user.show_message("\red Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl")
+ else
+ user.show_message("\blue Blood Level Normal: [blood_percent]% [blood_volume]cl")
return
/obj/item/device/healthanalyzer/attack(mob/M as mob, mob/user as mob)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 2f722028f6c..0afdfc6d502 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -474,7 +474,8 @@
istype(W, /obj/item/weapon/kitchen/utensil/knife) || \
istype(W, /obj/item/weapon/shard) || \
istype(W, /obj/item/weapon/reagent_containers/syringe) || \
- istype(W, /obj/item/weapon/kitchen/utensil/fork) && W.icon_state != "forkloaded" \
+ istype(W, /obj/item/weapon/kitchen/utensil/fork) && W.icon_state != "forkloaded" || \
+ istype(W,/obj/item/projectile)\
)
/proc/is_cut(obj/item/W as obj)
@@ -488,7 +489,8 @@
istype(W, /obj/item/weapon/butch) || \
istype(W, /obj/item/weapon/scalpel) || \
istype(W, /obj/item/weapon/kitchen/utensil/knife) || \
- istype(W, /obj/item/weapon/shard) \
+ istype(W, /obj/item/weapon/shard) || \
+ istype(W,/obj/item/projectile) \
)
/proc/is_burn(obj/item/W as obj)
@@ -496,7 +498,8 @@
istype(W, /obj/item/weapon/weldingtool) && W:welding || \
istype(W, /obj/item/weapon/zippo) && W:lit || \
istype(W, /obj/item/weapon/match) && W:lit || \
- istype(W, /obj/item/clothing/mask/cigarette) && W:lit \
+ istype(W, /obj/item/clothing/mask/cigarette) && W:lit || \
+ istype(W,/obj/item/projectile/beam)\
)
/obj/item/weapon/paper/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
diff --git a/code/game/objects/items/clothing.dm b/code/game/objects/items/clothing.dm
index 98a37628b5d..8b5925f1859 100644
--- a/code/game/objects/items/clothing.dm
+++ b/code/game/objects/items/clothing.dm
@@ -258,12 +258,14 @@ THERMAL GLASSES
src.up = !src.up
src.see_face = !src.see_face
src.flags |= HEADCOVERSEYES
+ flags_inv |= HIDEMASK|HIDEEARS|HIDEEYES
icon_state = "welding"
usr << "You flip the mask down to protect your eyes."
else
src.up = !src.up
src.see_face = !src.see_face
src.flags &= ~HEADCOVERSEYES
+ flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES)
icon_state = "weldingup"
usr << "You push the mask up out of your face."
usr.update_clothing()
@@ -416,4 +418,4 @@ THERMAL GLASSES
src.flags &= ~HEADCOVERSEYES
icon_state = "engspace_helmet_clear"
usr << "You toggle the reflective tint off."
- usr.update_clothing()
+ usr.update_clothing()
diff --git a/code/game/objects/items/helper_procs.dm b/code/game/objects/items/helper_procs.dm
index 334ec2e5e22..8d5d9aa71f3 100644
--- a/code/game/objects/items/helper_procs.dm
+++ b/code/game/objects/items/helper_procs.dm
@@ -1,4 +1,4 @@
-/proc/parse_zone(zone)
+/*/proc/parse_zone(zone)
if(zone == "r_hand") return "right hand"
else if (zone == "l_hand") return "left hand"
else if (zone == "l_arm") return "left arm"
@@ -7,7 +7,7 @@
else if (zone == "r_leg") return "right leg"
else if (zone == "l_foot") return "left foot"
else if (zone == "r_foot") return "right foot"
- else return zone
+ else return zone*/
/proc/text2dir(direction)
switch(uppertext(direction))
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index 7770fcad70a..7747ea5c531 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -246,6 +246,8 @@ the implant may become unstable and either pre-maturely inject the subject or si
return
hear(var/msg)
+ var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "")
+ msg = sanitize_simple(msg, replacechars)
if(findtext(msg,phrase))
if(istype(loc, /mob/))
var/mob/T = loc
@@ -258,6 +260,8 @@ the implant may become unstable and either pre-maturely inject the subject or si
implanted(mob/source as mob)
phrase = input("Choose activation phrase:") as text
+ var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "")
+ phrase = sanitize_simple(phrase, replacechars)
usr.mind.store_memory("Explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate.", 0, 0)
usr << "The implanted explosive implant in [source] can be activated by saying something containing the phrase ''[src.phrase]'', say [src.phrase] to attempt to activate."
diff --git a/code/game/objects/items/weapons/medical.dm b/code/game/objects/items/weapons/medical.dm
index 25ebeda3703..07c90d3bdb3 100644
--- a/code/game/objects/items/weapons/medical.dm
+++ b/code/game/objects/items/weapons/medical.dm
@@ -15,15 +15,6 @@ MEDICAL
t_him = "her"
user << "\red \The [M] is dead, you cannot help [t_him]!"
return
- if (M.health < 50)
- var/t_him = "it"
- if (M.gender == MALE)
- t_him = "him"
- else if (M.gender == FEMALE)
- t_him = "her"
- user << "\red \The [M] is wounded badly, this item cannot help [t_him]!"
- return
-
if (!istype(M))
user << "\red \The [src] cannot be applied to [M]!"
@@ -35,25 +26,8 @@ MEDICAL
user << "\red You don't have the dexterity to do this!"
return 1
- if (user)
- if (M != user)
- user.visible_message( \
- "\blue [M] has been applied with [src] by [user].", \
- "\blue You apply \the [src] to [M]." \
- )
- else
- var/t_himself = "itself"
- if (user.gender == MALE)
- t_himself = "himself"
- else if (user.gender == FEMALE)
- t_himself = "herself"
-
- user.visible_message( \
- "\blue [M] applied [src] on [t_himself].", \
- "\blue You apply \the [src] on yourself." \
- )
-
- if (istype(M, /mob/living/carbon/human))
+ var/stoppedblood = 0
+ if(ishuman(M))
var/mob/living/carbon/human/H = M
var/datum/organ/external/affecting = H.get_organ("chest")
@@ -63,39 +37,85 @@ MEDICAL
else
if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0)
affecting = H.get_organ("head")
+ if(affecting.destroyed && !affecting.gauzed)
+ H.visible_message("\red You do your best to stop the bleeding from [H]'s stump.", "\red [user] does their best to stem [H]'s bleeding from [H.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
+ affecting.gauzed = 1
+ use(1)
+ return
- if (affecting.heal_damage(src.heal_brute, src.heal_burn))
- H.UpdateDamageIcon()
-
- if(H.bloodloss > 0 && heal_brute > 0) // fix wounds too if bruise pack
- var/stoped = 0
- for(var/datum/organ/external/wound/W in affecting.wounds)
- if(W.bleeding)
- W.stopbleeding()
- stoped = 0
+ for(var/datum/organ/wound/W in affecting.wounds)
+ if(W.bleeding || !W.healing_state)
+ if(heal_brute && W.wound_type == 2)
+ continue
+ if(heal_burn && W.wound_type < 2)
+ continue
+ if(stoppedblood)
+ stoppedblood++
break
- if(!stoped)
- // user << "There is no bleeding wound at [t]" //code no longer in a dedicated obj, thus this doesn't really matter
- return
- if (user)
- if (M != user)
- for (var/mob/O in viewers(H, null))
- O.show_message("\red [H] has been bandaged with [src] by [user]", 1)
+ if(W.wound_size > 3)
+ W.bleeding = 0
else
- var/t_himself = "itself"
- if (user.gender == MALE)
- t_himself = "himself"
- else if (user.gender == FEMALE)
- t_himself = "herself"
- for (var/mob/O in viewers(H, null))
- O.show_message("\red [H] bandaged [t_himself] with [src]", 1)
+ W.stopbleeding()
+ stoppedblood = 1
- M.updatehealth()
+ if (user && stoppedblood)
+ if (M != user)
+ H.visible_message("\red You bandage up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts", "\red [user] bandages [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src]", "\red You hear something like gauze being ripped.")
+ else
+ H.visible_message("\red You bandage up [stoppedblood - 1 ? "some of" : "the last of"] your cuts", "\red [user] bandages [stoppedblood - 1 ? "some of" : "the last of"] their own cuts with [src]", "\red You hear something like gauze being ripped.")
+ else if(user)
+ user << "\red Nothing to patch up!"
+ return
else
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
use(1)
+// if (M.health < 50 && !stoppedblood)
+// var/t_him = "it"
+// if (M.gender == MALE)
+// t_him = "him"
+// else if (M.gender == FEMALE)
+// t_him = "her"
+// user << "\red \The [M] is wounded badly, this item cannot help [t_him]!"
+// return
+
+// if (user)
+// if (M != user)
+// user.visible_message( \
+// "\blue [M] has been applied with [src] by [user].", \
+// "\blue You apply \the [src] to [M]." \
+// )
+// else
+// var/t_himself = "itself"
+// if (user.gender == MALE)
+// t_himself = "himself"
+// else if (user.gender == FEMALE)
+// t_himself = "herself"
+
+// user.visible_message( \
+// "\blue [M] applied [src] on [t_himself].", \
+// "\blue You apply \the [src] on yourself." \
+// )
+
+// if (istype(M, /mob/living/carbon/human))
+// var/mob/living/carbon/human/H = M
+// var/datum/organ/external/affecting = H.get_organ("chest")
+
+// if(istype(user, /mob/living/carbon/human))
+// var/mob/living/carbon/human/user2 = user
+// affecting = H.get_organ(check_zone(user2.zone_sel.selecting))
+// else
+// if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0)
+// affecting = H.get_organ("head")
+//
+// if (affecting.heal_damage(src.heal_brute, src.heal_burn))
+// H.UpdateDamageIcon()
+// M.updatehealth()
+
+
+
+
/obj/item/stack/medical/advanced/attack(mob/living/carbon/M as mob, mob/user as mob)
if (M.stat == 2)
var/t_him = "it"
@@ -105,15 +125,6 @@ MEDICAL
t_him = "her"
user << "\red \The [M] is dead, you cannot help [t_him]!"
return
- if (M.health < 0)
- var/t_him = "it"
- if (M.gender == MALE)
- t_him = "him"
- else if (M.gender == FEMALE)
- t_him = "her"
- user << "\red \The [M] is wounded badly, this item cannot help [t_him]!"
- return
-
if (!istype(M))
user << "\red \The [src] cannot be applied to [M]!"
@@ -125,25 +136,8 @@ MEDICAL
user << "\red You don't have the dexterity to do this!"
return 1
- if (user)
- if (M != user)
- user.visible_message( \
- "\blue [M] has been applied with [src] by [user].", \
- "\blue You apply \the [src] to [M]." \
- )
- else
- var/t_himself = "itself"
- if (user.gender == MALE)
- t_himself = "himself"
- else if (user.gender == FEMALE)
- t_himself = "herself"
-
- user.visible_message( \
- "\blue [M] applied [src] on [t_himself].", \
- "\blue You apply \the [src] on yourself." \
- )
-
- if (istype(M, /mob/living/carbon/human))
+ var/stoppedblood = 0
+ if(ishuman(M))
var/mob/living/carbon/human/H = M
var/datum/organ/external/affecting = H.get_organ("chest")
@@ -153,34 +147,32 @@ MEDICAL
else
if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0)
affecting = H.get_organ("head")
+ if(affecting.destroyed && !affecting.gauzed)
+ H.visible_message("\red You do your best to stop the bleeding from [H]'s stump.", "\red [user] does their best to stem [H]'s bleeding from [H.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
+ affecting.gauzed = 1
+ use(1)
+ return
- if (affecting.heal_damage(src.heal_brute, src.heal_burn))
- H.UpdateDamageIcon()
-
- if(H.bloodloss > 0 && heal_brute > 0) // fix wounds too if bruise pack
- var/stoped = 0
- for(var/datum/organ/external/wound/W in affecting.wounds)
- if(W.bleeding)
- W.stopbleeding()
- stoped = 0
+ for(var/datum/organ/wound/W in affecting.wounds)
+ if(W.bleeding || !W.healing_state)
+ if(heal_brute && W.wound_type == 2)
+ continue
+ if(heal_burn && W.wound_type < 2)
+ continue
+ if(stoppedblood)
+ stoppedblood++
break
- if(!stoped)
- // user << "There is no bleeding wound at [t]" //code no longer in a dedicated obj, thus this doesn't really matter
- return
- if (user)
- if (M != user)
- for (var/mob/O in viewers(H, null))
- O.show_message("\red [H] has been bandaged with [src] by [user]", 1)
- else
- var/t_himself = "itself"
- if (user.gender == MALE)
- t_himself = "himself"
- else if (user.gender == FEMALE)
- t_himself = "herself"
- for (var/mob/O in viewers(H, null))
- O.show_message("\red [H] bandaged [t_himself] with [src]", 1)
+ W.stopbleeding()
+ stoppedblood = 1
- M.updatehealth()
+ if (user && stoppedblood)
+ if (M != user)
+ H.visible_message("\red You bandage up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts", "\red [user] bandages [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src]", "\red You hear something like gauze being ripped.")
+ else
+ H.visible_message("\red You bandage up [stoppedblood - 1 ? "some of" : "the last of"] your cuts", "\red [user] bandages [stoppedblood - 1 ? "some of" : "the last of"] their own cuts with [src]", "\red You hear something like gauze being ripped.")
+ else if(user)
+ user << "\red Nothing to patch up!"
+ return
else
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index c00997e3504..f6185bd6837 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -1565,7 +1565,6 @@ CIRCULAR SAW
e.brute_dam = 0.0
e.burn_dam = 0.0
e.bandaged = 0.0
- e.wound_size = 0.0
e.max_damage = initial(e.max_damage)
e.bleeding = 0
e.open = 0
diff --git a/code/game/objects/radio/headset.dm b/code/game/objects/radio/headset.dm
index dfd8fd08690..0f7fea4fc16 100644
--- a/code/game/objects/radio/headset.dm
+++ b/code/game/objects/radio/headset.dm
@@ -171,9 +171,11 @@
if(keyslot1)
user.put_in_hands(keyslot1)
+ keyslot1 = null
if(keyslot2)
user.put_in_hands(keyslot2)
+ keyslot2 = null
recalculateChannels()
user << "You pop out the encryption keys in the headset!"
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 38735065726..363d95d88f2 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -503,7 +503,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
e.brute_dam = 0.0
e.burn_dam = 0.0
e.bandaged = 0.0
- e.wound_size = 0.0
e.max_damage = initial(e.max_damage)
e.bleeding = 0
e.open = 0
@@ -511,6 +510,15 @@ Traitors and the like can also be revived with the previous role mostly intact.
e.destroyed = 0
e.perma_injury = 0
e.update_icon()
+ for(var/datum/organ/wound/W in e.wounds)
+ if(W.bleeding)
+ W.stopbleeding()
+ H.vessel = new/datum/reagents(560)
+ H.vessel.my_atom = H
+ H.vessel.add_reagent("blood",560)
+ spawn(1)
+ H.fixblood()
+ H.pale = 0
H.update_body()
H.update_face()
H.UpdateDamageIcon()
diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm
index 1216c05cc18..edf0996deed 100644
--- a/code/modules/chemical/Chemistry-Reagents.dm
+++ b/code/modules/chemical/Chemistry-Reagents.dm
@@ -96,7 +96,7 @@ datum
blood
- data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"virus2"=null,"antibodies"=0)
+ data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"virus2"=null,"antibodies"=0)
name = "Blood"
id = "blood"
reagent_state = LIQUID
@@ -105,7 +105,7 @@ datum
if(istype(M, /mob/living/carbon/human) && blood_incompatible(data["blood_type"],M.dna.b_type))
M.adjustToxLoss(rand(1.5,3))
M.adjustOxyLoss(rand(1.5,3))
- ..()
+ ..()
return
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm
index 23bcf7c88aa..bd370351a33 100644
--- a/code/modules/chemical/Chemistry-Tools.dm
+++ b/code/modules/chemical/Chemistry-Tools.dm
@@ -962,55 +962,60 @@
if(istype(target, /mob/living/carbon))//maybe just add a blood reagent to all mobs. Then you can suck them dry...With hundreds of syringes. Jolly good idea.
var/amount = src.reagents.maximum_volume - src.reagents.total_volume
var/mob/living/carbon/T = target
- var/datum/reagent/B = new /datum/reagent/blood
if(!T.dna)
usr << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum)"
return
if(T.mutations2 & NOCLONE) //target done been et, no more blood in him
user << "\red You are unable to locate any blood."
return
- B.holder = src
- B.volume = amount
- //set reagent data
- B.data["donor"] = T
- /*
- if(T.virus && T.virus.spread_type != SPECIAL)
- B.data["virus"] = new T.virus.type(0)
- */
+ if(ishuman(T))
+ if(T:vessel.get_reagent_amount("blood") < amount)
+ return
+ T:vessel.trans_to(src, amount)
+ else
+ var/datum/reagent/B = new /datum/reagent/blood
+ B.holder = src
+ B.volume = amount
+ //set reagent data
+ B.data["donor"] = T
+ /*
+ if(T.virus && T.virus.spread_type != SPECIAL)
+ B.data["virus"] = new T.virus.type(0)
+ */
- for(var/datum/disease/D in T.viruses)
- if(!B.data["viruses"])
- B.data["viruses"] = list()
+ for(var/datum/disease/D in T.viruses)
+ if(!B.data["viruses"])
+ B.data["viruses"] = list()
- B.data["viruses"] += new D.type
+ B.data["viruses"] += new D.type
- // not sure why it was checking if(B.data["virus2"]), but it seemed wrong
- if(T.virus2)
- B.data["virus2"] = T.virus2.getcopy()
+ // not sure why it was checking if(B.data["virus2"]), but it seemed wrong
+ if(T.virus2)
+ B.data["virus2"] = T.virus2.getcopy()
- B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0)
- if(T.resistances&&T.resistances.len)
- B.data["resistances"] = T.resistances.Copy()
- if(istype(target, /mob/living/carbon/human))//I wish there was some hasproperty operation...
- B.data["blood_type"] = copytext(T.dna.b_type,1,0)
- var/list/temp_chem = list()
- for(var/datum/reagent/R in target.reagents.reagent_list)
- temp_chem += R.name
- temp_chem[R.name] = R.volume
- B.data["trace_chem"] = list2params(temp_chem)
- B.data["antibodies"] = T.antibodies
- //debug
- //for(var/D in B.data)
- // world << "Data [D] = [B.data[D]]"
- //debug
+ B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0)
+ if(T.resistances&&T.resistances.len)
+ B.data["resistances"] = T.resistances.Copy()
+ if(istype(target, /mob/living/carbon/human))//I wish there was some hasproperty operation...
+ B.data["blood_type"] = copytext(T.dna.b_type,1,0)
+ var/list/temp_chem = list()
+ for(var/datum/reagent/R in target.reagents.reagent_list)
+ temp_chem += R.name
+ temp_chem[R.name] = R.volume
+ B.data["trace_chem"] = list2params(temp_chem)
+ B.data["antibodies"] = T.antibodies
+ //debug
+ //for(var/D in B.data)
+ // world << "Data [D] = [B.data[D]]"
+ //debug
- src.reagents.reagent_list += B
- src.reagents.update_total()
- src.on_reagent_change()
- src.reagents.handle_reactions()
+ src.reagents.reagent_list += B
+ src.reagents.update_total()
+ src.on_reagent_change()
+ src.reagents.handle_reactions()
user << "\blue You take a blood sample from [target]"
for(var/mob/O in viewers(4, user))
O.show_message("\red [user] takes a blood sample from [target].", 1)
@@ -1065,7 +1070,17 @@
if(ismob(target) && target == user)
src.reagents.reaction(target, INGEST)
spawn(5)
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
+ var/datum/reagent/blood/B
+ for(var/datum/reagent/blood/d in src.reagents.reagent_list)
+ B = d
+ break
+ var/trans
+ if(B && ishuman(target))
+ var/mob/living/carbon/human/H = target
+ H.vessel.add_reagent("blood",5,B)
+ src.reagents.remove_reagent("blood",5)
+ else
+ trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
user << "\blue You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units."
if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT)
mode = SYRINGE_DRAW
diff --git a/code/defines/obj/clothing/costume.dm b/code/modules/clothing/costume.dm
similarity index 97%
rename from code/defines/obj/clothing/costume.dm
rename to code/modules/clothing/costume.dm
index b073230443f..2c589dc2def 100644
--- a/code/defines/obj/clothing/costume.dm
+++ b/code/modules/clothing/costume.dm
@@ -1,168 +1,168 @@
-//Costume spawner
-
-/obj/effect/landmark/costume/New() //costume spawner, selects a random subclass and disappears
-
- var/list/options = typesof(/obj/effect/landmark/costume)
- var/PICK= options[rand(1,options.len)]
- new PICK(src.loc)
- del(src)
-
-//SUBCLASSES. Spawn a bunch of items and disappear likewise
-/obj/effect/landmark/costume/chicken/New()
- new /obj/item/clothing/suit/chickensuit(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/justice/New()
- new /obj/item/clothing/suit/justice(src.loc)
- var/CHOICE = pick( /obj/item/clothing/head/justice , /obj/item/clothing/head/justice/blue , /obj/item/clothing/head/justice/yellow , /obj/item/clothing/head/justice/green , /obj/item/clothing/head/justice/pink )
- new CHOICE(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/madscientist/New()
- new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
- new /obj/item/clothing/head/flatcap(src.loc)
- new /obj/item/clothing/suit/storage/labcoat/mad(src.loc)
- new /obj/item/clothing/glasses/gglasses(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/elpresidente/New()
- new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
- new /obj/item/clothing/head/flatcap(src.loc)
- new /obj/item/clothing/mask/cigarette/cigar/havanian(src.loc)
- new /obj/item/clothing/shoes/jackboots(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/nyangirl/New()
- new /obj/item/clothing/under/schoolgirl(src.loc)
- new /obj/item/clothing/head/kitty(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/maid/New()
- new /obj/item/clothing/under/blackskirt(src.loc)
- var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears )
- new CHOICE(src.loc)
- new /obj/item/clothing/glasses/blindfold(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/butler/New()
- new /obj/item/clothing/suit/storage/wcoat(src.loc)
- new /obj/item/clothing/under/suit_jacket(src.loc)
- new /obj/item/clothing/head/that(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/scratch/New()
- new /obj/item/clothing/gloves/white(src.loc)
- new /obj/item/clothing/shoes/white(src.loc)
- new /obj/item/clothing/under/scratch(src.loc)
-// if (prob(30))
-// new /obj/item/clothing/head/helmet/cueball(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/highlander/New()
- new /obj/item/clothing/under/kilt(src.loc)
- new /obj/item/clothing/head/beret(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/prig/New()
- new /obj/item/clothing/suit/storage/wcoat(src.loc)
- new /obj/item/clothing/glasses/monocle(src.loc)
- var/CHOICE= pick( /obj/item/clothing/head/bowlerhat, /obj/item/clothing/head/that)
- new CHOICE(src.loc)
- new /obj/item/clothing/shoes/black(src.loc)
- new /obj/item/weapon/cane(src.loc)
- new /obj/item/clothing/under/sl_suit(src.loc)
- new /obj/item/clothing/mask/gas/fakemoustache(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/plaguedoctor/New()
- new /obj/item/clothing/suit/bio_suit/plaguedoctorsuit(src.loc)
- new /obj/item/clothing/head/plaguedoctorhat(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/nightowl/New()
- new /obj/item/clothing/under/owl(src.loc)
- new /obj/item/clothing/mask/owl_mask(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/waiter/New()
- new /obj/item/clothing/under/waiter(src.loc)
- var/CHOICE= pick( /obj/item/clothing/head/kitty, /obj/item/clothing/head/rabbitears)
- new CHOICE(src.loc)
- new /obj/item/clothing/suit/storage/apron(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/pirate/New()
- new /obj/item/clothing/under/pirate(src.loc)
- new /obj/item/clothing/suit/pirate(src.loc)
- var/CHOICE = pick( /obj/item/clothing/head/pirate , /obj/item/clothing/head/bandana )
- new CHOICE(src.loc)
- new /obj/item/clothing/glasses/eyepatch(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/commie/New()
- new /obj/item/clothing/under/soviet(src.loc)
- new /obj/item/clothing/head/ushanka(src.loc)
- del(src)
-/*
-/obj/effect/landmark/costume/nurse/New()
- new /obj/item/clothing/under/rank/nursesuit(src.loc)
- new /obj/item/clothing/head/nursehat(src.loc)
- new /obj/item/clothing/glasses/regular(src.loc)
- new /obj/item/clothing/gloves/latex(src.loc)
- new /obj/item/clothing/mask/surgical(src.loc)
- del(src)*/
-
-
-/obj/effect/landmark/costume/imperium_monk/New()
- new /obj/item/clothing/suit/imperium_monk(src.loc)
- if (prob(25))
- new /obj/item/clothing/mask/gas/cyborg(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/holiday_priest/New()
- new /obj/item/clothing/suit/holidaypriest(src.loc)
- del(src)
-
-/*
-/obj/effect/landmark/costume/spiderman/New()
- new /obj/item/clothing/under/spiderman(src.loc)
- new /obj/item/clothing/mask/spiderman(src.loc)
- del(src)*/
-
-/obj/effect/landmark/costume/marisawizard/New()
- new /obj/item/clothing/head/wizard/marisa(src.loc)
- new/obj/item/clothing/suit/wizrobe/marisa(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/fakewizard/New()
- new /obj/item/clothing/suit/wizrobe/fake(src.loc)
- new /obj/item/clothing/head/wizard/fake(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/sexyclown/New()
- new /obj/item/clothing/mask/gas/sexyclown(src.loc)
- new /obj/item/clothing/under/sexyclown(src.loc)
- del(src)
-
-/obj/effect/landmark/costume/sexymime/New()
- new /obj/item/clothing/mask/gas/sexymime(src.loc)
- new /obj/item/clothing/under/sexymime(src.loc)
- del(src)
-
-
-/*
-/obj/effect/landmark/costume/cyborg/New()
- new /obj/item/clothing/mask/gas/cyborg(src.loc)
- new /obj/item/clothing/shoes/cyborg(src.loc)
- new /obj/item/clothing/suit/cyborg_suit(src.loc)
- new /obj/item/clothing/gloves/cyborg(src.loc)
-
- var/obj/item/weapon/card/id/W = new /obj/item/weapon/card/id(src.loc)
- var/name = "Cyborg"
- name += " [pick(rand(1, 999))]"
- W.name = "Fake Cyborg Card"
- W.access = list(access_theatre)
- W.assignment = "Kill all humans! Beep. Boop."
- W.registered = name
- del(src)
+//Costume spawner
+
+/obj/effect/landmark/costume/New() //costume spawner, selects a random subclass and disappears
+
+ var/list/options = typesof(/obj/effect/landmark/costume)
+ var/PICK= options[rand(1,options.len)]
+ new PICK(src.loc)
+ del(src)
+
+//SUBCLASSES. Spawn a bunch of items and disappear likewise
+/obj/effect/landmark/costume/chicken/New()
+ new /obj/item/clothing/suit/chickensuit(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/justice/New()
+ new /obj/item/clothing/suit/justice(src.loc)
+ var/CHOICE = pick( /obj/item/clothing/head/justice , /obj/item/clothing/head/justice/blue , /obj/item/clothing/head/justice/yellow , /obj/item/clothing/head/justice/green , /obj/item/clothing/head/justice/pink )
+ new CHOICE(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/madscientist/New()
+ new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
+ new /obj/item/clothing/head/flatcap(src.loc)
+ new /obj/item/clothing/suit/storage/labcoat/mad(src.loc)
+ new /obj/item/clothing/glasses/gglasses(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/elpresidente/New()
+ new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
+ new /obj/item/clothing/head/flatcap(src.loc)
+ new /obj/item/clothing/mask/cigarette/cigar/havanian(src.loc)
+ new /obj/item/clothing/shoes/jackboots(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/nyangirl/New()
+ new /obj/item/clothing/under/schoolgirl(src.loc)
+ new /obj/item/clothing/head/kitty(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/maid/New()
+ new /obj/item/clothing/under/blackskirt(src.loc)
+ var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears )
+ new CHOICE(src.loc)
+ new /obj/item/clothing/glasses/blindfold(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/butler/New()
+ new /obj/item/clothing/suit/storage/wcoat(src.loc)
+ new /obj/item/clothing/under/suit_jacket(src.loc)
+ new /obj/item/clothing/head/that(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/scratch/New()
+ new /obj/item/clothing/gloves/white(src.loc)
+ new /obj/item/clothing/shoes/white(src.loc)
+ new /obj/item/clothing/under/scratch(src.loc)
+// if (prob(30))
+// new /obj/item/clothing/head/helmet/cueball(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/highlander/New()
+ new /obj/item/clothing/under/kilt(src.loc)
+ new /obj/item/clothing/head/beret(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/prig/New()
+ new /obj/item/clothing/suit/storage/wcoat(src.loc)
+ new /obj/item/clothing/glasses/monocle(src.loc)
+ var/CHOICE= pick( /obj/item/clothing/head/bowlerhat, /obj/item/clothing/head/that)
+ new CHOICE(src.loc)
+ new /obj/item/clothing/shoes/black(src.loc)
+ new /obj/item/weapon/cane(src.loc)
+ new /obj/item/clothing/under/sl_suit(src.loc)
+ new /obj/item/clothing/mask/gas/fakemoustache(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/plaguedoctor/New()
+ new /obj/item/clothing/suit/bio_suit/plaguedoctorsuit(src.loc)
+ new /obj/item/clothing/head/plaguedoctorhat(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/nightowl/New()
+ new /obj/item/clothing/under/owl(src.loc)
+ new /obj/item/clothing/mask/owl_mask(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/waiter/New()
+ new /obj/item/clothing/under/waiter(src.loc)
+ var/CHOICE= pick( /obj/item/clothing/head/kitty, /obj/item/clothing/head/rabbitears)
+ new CHOICE(src.loc)
+ new /obj/item/clothing/suit/storage/apron(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/pirate/New()
+ new /obj/item/clothing/under/pirate(src.loc)
+ new /obj/item/clothing/suit/pirate(src.loc)
+ var/CHOICE = pick( /obj/item/clothing/head/pirate , /obj/item/clothing/head/bandana )
+ new CHOICE(src.loc)
+ new /obj/item/clothing/glasses/eyepatch(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/commie/New()
+ new /obj/item/clothing/under/soviet(src.loc)
+ new /obj/item/clothing/head/ushanka(src.loc)
+ del(src)
+/*
+/obj/effect/landmark/costume/nurse/New()
+ new /obj/item/clothing/under/rank/nursesuit(src.loc)
+ new /obj/item/clothing/head/nursehat(src.loc)
+ new /obj/item/clothing/glasses/regular(src.loc)
+ new /obj/item/clothing/gloves/latex(src.loc)
+ new /obj/item/clothing/mask/surgical(src.loc)
+ del(src)*/
+
+
+/obj/effect/landmark/costume/imperium_monk/New()
+ new /obj/item/clothing/suit/imperium_monk(src.loc)
+ if (prob(25))
+ new /obj/item/clothing/mask/gas/cyborg(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/holiday_priest/New()
+ new /obj/item/clothing/suit/holidaypriest(src.loc)
+ del(src)
+
+/*
+/obj/effect/landmark/costume/spiderman/New()
+ new /obj/item/clothing/under/spiderman(src.loc)
+ new /obj/item/clothing/mask/spiderman(src.loc)
+ del(src)*/
+
+/obj/effect/landmark/costume/marisawizard/New()
+ new /obj/item/clothing/head/wizard/marisa(src.loc)
+ new/obj/item/clothing/suit/wizrobe/marisa(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/fakewizard/New()
+ new /obj/item/clothing/suit/wizrobe/fake(src.loc)
+ new /obj/item/clothing/head/wizard/fake(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/sexyclown/New()
+ new /obj/item/clothing/mask/gas/sexyclown(src.loc)
+ new /obj/item/clothing/under/sexyclown(src.loc)
+ del(src)
+
+/obj/effect/landmark/costume/sexymime/New()
+ new /obj/item/clothing/mask/gas/sexymime(src.loc)
+ new /obj/item/clothing/under/sexymime(src.loc)
+ del(src)
+
+
+/*
+/obj/effect/landmark/costume/cyborg/New()
+ new /obj/item/clothing/mask/gas/cyborg(src.loc)
+ new /obj/item/clothing/shoes/cyborg(src.loc)
+ new /obj/item/clothing/suit/cyborg_suit(src.loc)
+ new /obj/item/clothing/gloves/cyborg(src.loc)
+
+ var/obj/item/weapon/card/id/W = new /obj/item/weapon/card/id(src.loc)
+ var/name = "Cyborg"
+ name += " [pick(rand(1, 999))]"
+ W.name = "Fake Cyborg Card"
+ W.access = list(access_theatre)
+ W.assignment = "Kill all humans! Beep. Boop."
+ W.registered = name
+ del(src)
*/
\ No newline at end of file
diff --git a/code/defines/obj/clothing/ears.dm b/code/modules/clothing/ears.dm
similarity index 93%
rename from code/defines/obj/clothing/ears.dm
rename to code/modules/clothing/ears.dm
index c89edc1cd22..05493ff2e10 100644
--- a/code/defines/obj/clothing/ears.dm
+++ b/code/modules/clothing/ears.dm
@@ -1,62 +1,62 @@
-// EARS
-
-/obj/item/clothing/ears
- name = "ears"
- w_class = 1.0
- throwforce = 2
- var/twoeared = 0
-
-/obj/item/clothing/ears/attack_hand(mob/user as mob)
- if (!user) return
-
- if (src.loc != user || !istype(user,/mob/living/carbon/human))
- ..()
- return
- var/mob/living/carbon/human/H = user
- if(H.l_ear != src && H.r_ear != src)
- ..()
- return
-
- if(!canremove)
- return
-
- var/obj/item/clothing/ears/O
- if(twoeared)
- O = (H.l_ear == src ? H.r_ear : H.l_ear)
- user.u_equip(O)
- if(!istype(src,/obj/item/clothing/ears/offear))
- del(O)
- O = src
- else
- O = src
-
- user.u_equip(src)
-
- if (O)
- user.put_in_hand(O)
- O.add_fingerprint(user)
-
- if(istype(src,/obj/item/clothing/ears/offear))
- del(src)
-
-/obj/item/clothing/ears/offear
- name = "Other ear"
- w_class = 5.0
- icon = 'screen1_old.dmi'
- icon_state = "block"
- twoeared = 1
-
- New(var/obj/O)
- name = O.name
- desc = O.desc
- icon = O.icon
- icon_state = O.icon_state
- dir = O.dir
-
-/obj/item/clothing/ears/earmuffs
- name = "earmuffs"
- desc = "Protects your hearing from loud noises, and quiet ones as well."
- icon_state = "earmuffs"
- protective_temperature = 500
- item_state = "earmuffs"
+// EARS
+
+/obj/item/clothing/ears
+ name = "ears"
+ w_class = 1.0
+ throwforce = 2
+ var/twoeared = 0
+
+/obj/item/clothing/ears/attack_hand(mob/user as mob)
+ if (!user) return
+
+ if (src.loc != user || !istype(user,/mob/living/carbon/human))
+ ..()
+ return
+ var/mob/living/carbon/human/H = user
+ if(H.l_ear != src && H.r_ear != src)
+ ..()
+ return
+
+ if(!canremove)
+ return
+
+ var/obj/item/clothing/ears/O
+ if(twoeared)
+ O = (H.l_ear == src ? H.r_ear : H.l_ear)
+ user.u_equip(O)
+ if(!istype(src,/obj/item/clothing/ears/offear))
+ del(O)
+ O = src
+ else
+ O = src
+
+ user.u_equip(src)
+
+ if (O)
+ user.put_in_hand(O)
+ O.add_fingerprint(user)
+
+ if(istype(src,/obj/item/clothing/ears/offear))
+ del(src)
+
+/obj/item/clothing/ears/offear
+ name = "Other ear"
+ w_class = 5.0
+ icon = 'screen1_old.dmi'
+ icon_state = "block"
+ twoeared = 1
+
+ New(var/obj/O)
+ name = O.name
+ desc = O.desc
+ icon = O.icon
+ icon_state = O.icon_state
+ dir = O.dir
+
+/obj/item/clothing/ears/earmuffs
+ name = "earmuffs"
+ desc = "Protects your hearing from loud noises, and quiet ones as well."
+ icon_state = "earmuffs"
+ protective_temperature = 500
+ item_state = "earmuffs"
twoeared = 1
\ No newline at end of file
diff --git a/code/defines/obj/clothing/gimmick.dm b/code/modules/clothing/gimmick.dm
similarity index 96%
rename from code/defines/obj/clothing/gimmick.dm
rename to code/modules/clothing/gimmick.dm
index ffd02dd845a..28d2ce1bf53 100644
--- a/code/defines/obj/clothing/gimmick.dm
+++ b/code/modules/clothing/gimmick.dm
@@ -1,679 +1,679 @@
-/obj/item/clothing/head/rabbitears
- name = "Rabbit Ears"
- desc = "Wearing these makes you looks useless, and only good for your sex appeal."
- icon_state = "bunny"
- flags = FPRINT | TABLEPASS
-
-/obj/item/clothing/head/kitty
- name = "Kitty Ears"
- desc = "A pair of kitty ears. Meow!"
- icon_state = "kitty"
- flags = FPRINT | TABLEPASS
- var/icon/mob
- var/icon/mob2
-
- update_icon(var/mob/living/carbon/human/user)
- if(!istype(user)) return
- mob = new/icon("icon" = 'head.dmi', "icon_state" = "kitty")
- mob2 = new/icon("icon" = 'head.dmi', "icon_state" = "kitty2")
- mob.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD)
- mob2.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD)
-
- var/icon/earbit = new/icon("icon" = 'head.dmi', "icon_state" = "kittyinner")
- var/icon/earbit2 = new/icon("icon" = 'head.dmi', "icon_state" = "kittyinner2")
- mob.Blend(earbit, ICON_OVERLAY)
- mob2.Blend(earbit2, ICON_OVERLAY)
-
-/obj/item/clothing/shoes/red
- name = "red shoes"
- desc = "Stylish red shoes."
- icon_state = "red"
- color = "red"
-
-/obj/item/clothing/shoes/rainbow
- name = "rainbow shoes"
- desc = "Very gay shoes."
- icon_state = "rain_bow"
- color = "rainbow"
-
-/obj/item/clothing/mask/owl_mask
- name = "Owl mask"
- desc = "Twoooo!"
- icon_state = "owl"
-
-/obj/item/clothing/under/owl
- name = "Owl uniform"
- desc = "A jumpsuit with owl wings. Photorealistic owl feathers! Twooooo!"
- icon_state = "owl"
- color = "owl"
-
-/obj/item/clothing/gloves/cyborg
- desc = "beep boop borp"
- name = "cyborg gloves"
- icon_state = "black"
- item_state = "r_hands"
- siemens_coefficient = 1
-
-/obj/item/clothing/mask/gas/cyborg
- name = "cyborg visor"
- desc = "Beep boop"
- icon_state = "death"
-
-/obj/item/clothing/shoes/cyborg
- name = "cyborg boots"
- desc = "Shoes for a cyborg costume"
- icon_state = "boots"
-
-/obj/item/clothing/suit/cyborg_suit
- name = "cyborg suit"
- desc = "Suit for a cyborg costume."
- icon_state = "death"
- item_state = "death"
- flags = FPRINT | TABLEPASS | CONDUCT
- fire_resist = T0C+5200
-
-/*/obj/item/clothing/under/nazi1
- name = "Nazi uniform"
- desc = "SIEG HEIL!"
- icon_state = "nazi"
- color = "nazi1"*/ //no direction sprites
-
-/obj/item/clothing/suit/greatcoat
- name = "great coat"
- desc = "A Nazi great coat."
- icon_state = "nazi"
- item_state = "nazi"
- flags = FPRINT | TABLEPASS
-
-/obj/item/clothing/under/johnny
- name = "Johnny~~"
- desc = "Johnny~~"
- icon_state = "johnny"
- color = "johnny"
-
-/obj/item/clothing/suit/johnny_coat
- name = "Johnny~~"
- desc = "Johnny~~"
- icon_state = "johnny"
- item_state = "johnny"
- flags = FPRINT | TABLEPASS
-
-
-/obj/item/clothing/under/rainbow
- name = "rainbow"
- desc = "rainbow"
- icon_state = "rainbow"
- item_state = "rainbow"
- color = "rainbow"
-
-/obj/item/clothing/under/cloud
- name = "cloud"
- desc = "cloud"
- icon_state = "cloud"
- color = "cloud"
-
-/*/obj/item/clothing/under/yay
- name = "yay"
- desc = "Yay!"
- icon_state = "yay"
- color = "yay"*/ // no sprite --errorage
-
-// UNUSED COLORS
-
-/obj/item/clothing/under/psyche
- name = "psychedelic"
- desc = "Groovy!"
- icon_state = "psyche"
- color = "psyche"
-
-/*
-/obj/item/clothing/under/maroon
- name = "maroon"
- desc = "maroon"
- icon_state = "maroon"
- color = "maroon"*/ // no sprite -- errorage
-
-/obj/item/clothing/under/lightblue
- name = "lightblue"
- desc = "lightblue"
- icon_state = "lightblue"
- color = "lightblue"
-
-/obj/item/clothing/under/aqua
- name = "aqua"
- desc = "aqua"
- icon_state = "aqua"
- color = "aqua"
-
-/obj/item/clothing/under/purple
- name = "purple"
- desc = "purple"
- icon_state = "purple"
- item_state = "p_suit"
- color = "purple"
-
-/obj/item/clothing/under/lightpurple
- name = "lightpurple"
- desc = "lightpurple"
- icon_state = "lightpurple"
- color = "lightpurple"
-
-/obj/item/clothing/under/lightgreen
- name = "lightgreen"
- desc = "lightgreen"
- icon_state = "lightgreen"
- color = "lightgreen"
-
-/obj/item/clothing/under/lightblue
- name = "lightblue"
- desc = "lightblue"
- icon_state = "lightblue"
- color = "lightblue"
-
-/obj/item/clothing/under/lightbrown
- name = "lightbrown"
- desc = "lightbrown"
- icon_state = "lightbrown"
- color = "lightbrown"
-
-/obj/item/clothing/under/brown
- name = "brown"
- desc = "brown"
- icon_state = "brown"
- color = "brown"
-
-/obj/item/clothing/under/yellowgreen
- name = "yellowgreen"
- desc = "yellowgreen"
- icon_state = "yellowgreen"
- color = "yellowgreen"
-
-/obj/item/clothing/under/darkblue
- name = "darkblue"
- desc = "darkblue"
- icon_state = "darkblue"
- color = "darkblue"
-
-/obj/item/clothing/under/lightred
- name = "lightred"
- desc = "lightred"
- icon_state = "lightred"
- color = "lightred"
-
-/obj/item/clothing/under/darkred
- name = "darkred"
- desc = "darkred"
- icon_state = "darkred"
- color = "darkred"
-
-// STEAMPUNK STATION
-
-/obj/item/clothing/glasses/monocle
- name = "monocle"
- desc = "Such a dapper eyepiece!"
- icon_state = "monocle"
- item_state = "headset" // lol
-
-/obj/item/clothing/under/gimmick/rank/captain/suit
- name = "Captain's Suit"
- desc = "A green suit and yellow necktie. Exemplifies authority."
- icon_state = "green_suit"
- item_state = "dg_suit"
- color = "green_suit"
-
-/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit
- name = "Head of Personnel's Suit"
- desc = "A teal suit and yellow necktie. An authoritative yet tacky ensemble."
- icon_state = "teal_suit"
- item_state = "g_suit"
- color = "teal_suit"
-
-/obj/item/clothing/under/suit_jacket
- name = "Black Suit"
- desc = "A black suit and red tie. Very formal."
- icon_state = "black_suit"
- item_state = "bl_suit"
- color = "black_suit"
-
-/obj/item/clothing/under/suit_jacket/really_black
- name = "Executive Suit"
- desc = "A formal black suit and red tie, intended for the station's finest."
- icon_state = "really_black_suit"
- item_state = "bl_suit"
- color = "black_suit"
-
-/obj/item/clothing/under/suit_jacket/red
- name = "Red Suit"
- desc = "A red suit and blue tie. Somewhat formal."
- icon_state = "red_suit"
- item_state = "r_suit"
- color = "red_suit"
-
-/obj/item/clothing/under/blackskirt
- name = "Black skirt"
- desc = "A black skirt, very fancy!"
- icon_state = "blackskirt"
- color = "blackskirt"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
-
-/obj/item/clothing/under/schoolgirl
- name = "schoolgirl uniform"
- desc = "It's just like one of my Japanese animes!"
- icon_state = "schoolgirl"
- item_state = "schoolgirl"
- color = "schoolgirl"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
-
-/obj/item/clothing/under/gimmick/rank/police
- name = "Police Uniform"
- desc = "Move along, nothing to see here."
- icon_state = "police"
- item_state = "b_suit"
- color = "police"
-
-/obj/item/clothing/head/flatcap
- name = "flat cap"
- desc = "A working man's cap."
- icon_state = "flat_cap"
- item_state = "detective"
-
-/obj/item/clothing/under/overalls
- name = "Laborer's Overalls"
- desc = "A set of durable overalls for getting the job done."
- icon_state = "overalls"
- item_state = "lb_suit"
- color = "overalls"
-
-/obj/item/weapon/melee/classic_baton
- name = "police baton"
- desc = "A wooden truncheon for beating criminal scum."
- icon = 'weapons.dmi'
- icon_state = "baton"
- item_state = "classic_baton"
- flags = FPRINT | ONBELT | TABLEPASS
- force = 10
-
-/obj/item/clothing/under/pirate
- name = "Pirate Outfit"
- desc = "Yarr."
- icon_state = "pirate"
- item_state = "pirate"
- color = "pirate"
-
-/obj/item/clothing/head/pirate
- name = "pirate hat"
- desc = "Yarr."
- icon_state = "pirate"
- item_state = "pirate"
-
-/obj/item/clothing/head/hgpiratecap
- name = "pirate hat"
- desc = "Yarr."
- icon_state = "hgpiratecap"
- item_state = "hgpiratecap"
-
-/obj/item/clothing/suit/pirate
- name = "pirate coat"
- desc = "Yarr."
- icon_state = "pirate"
- item_state = "pirate"
- flags = FPRINT | TABLEPASS
-
-
-/obj/item/clothing/suit/hgpirate
- name = "pirate captain coat"
- desc = "Yarr."
- icon_state = "hgpirate"
- item_state = "hgpirate"
- flags = FPRINT | TABLEPASS
-
-/obj/item/clothing/glasses/eyepatch
- name = "eyepatch"
- desc = "Yarr."
- icon_state = "eyepatch"
- item_state = "eyepatch"
-
-/obj/item/clothing/head/bandana
- name = "pirate bandana"
- desc = "Yarr."
- icon_state = "bandana"
- item_state = "bandana"
-
-/obj/item/clothing/under/soviet
- name = "soviet uniform"
- desc = "For the Motherland!"
- icon_state = "soviet"
- item_state = "soviet"
- color = "soviet"
-
-/obj/item/clothing/under/redcoat
- name = "redcoat uniform"
- desc = "Looks old."
- icon_state = "redcoat"
- item_state = "redcoat"
- color = "redcoat"
-
-/obj/item/clothing/head/ushanka
- name = "ushanka"
- desc = "Perfect for winter in Siberia, da?"
- icon_state = "ushankadown"
- item_state = "ushankadown"
-
-/obj/item/clothing/head/collectable //Hat Station 13
- name = "Collectable Hat"
- desc = "A rare collectable hat."
-
-/obj/item/clothing/head/collectable/petehat
- name = "Ultra Rare! Pete's Hat!"
- desc = "It smells faintly of plasma"
- icon_state = "petehat"
-
-/obj/item/clothing/head/collectable/metroid
- name = "Collectable Metroid Cap!"
- desc = "It just latches right in place!"
- icon_state = "metroid"
-
-/obj/item/clothing/head/collectable/xenom
- name = "Collectable Xenomorph Helmet!"
- desc = "Hiss hiss hiss!"
- icon_state = "xenom"
-
-/obj/item/clothing/head/collectable/chef
- name = "Collectable Chef's Hat"
- desc = "A rare Chef's Hat meant for hat collectors!"
- icon_state = "chef"
- item_state = "chef"
-
-/obj/item/clothing/head/collectable/paper
- name = "Collectable Paper Hat"
- desc = "What looks like an ordinary paper hat, is actually a rare and valuable collector's edition paper hat. Keep away from water, fire and Librarians."
- icon_state = "paper"
-
-/obj/item/clothing/head/collectable/tophat
- name = "Collectable Top Hat"
- desc = "A top hat worn by only the most prestigious hat collectors."
- icon_state = "tophat"
- item_state = "that"
-
-/obj/item/clothing/head/collectable/captain
- name = "Collectable Captain's Hat"
- desc = "A Collectable Hat that'll make you look just like a real comdom!"
- icon_state = "captain"
- item_state = "caphat"
-
-/obj/item/clothing/head/collectable/police
- name = "Collectable Police Officer's Hat"
- desc = "A Collectable Police Officer's Hat. This hat emphasizes that you are THE LAW."
- icon_state = "policehelm"
-
-/obj/item/clothing/head/collectable/beret
- name = "Collectable Beret"
- desc = "A Collectable red beret. It smells faintly of garlic."
- icon_state = "beret"
-
-/obj/item/clothing/head/collectable/welding
- name = "Collectable Welding Helmet"
- desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!"
- icon_state = "welding"
- item_state = "welding"
-
-/obj/item/clothing/head/collectable/slime
- name = "Collectable Slime Hat"
- desc = "Just like a real Brain Slug!"
- icon_state = "headslime"
- item_state = "headslime"
-
-/obj/item/clothing/head/collectable/flatcap
- name = "Collectable Flat Cap"
- desc = "A Collectible farmer's Flat Cap!"
- icon_state = "flat_cap"
- item_state = "detective"
-
-/obj/item/clothing/head/collectable/pirate
- name = "Collectable Pirate Hat"
- desc = "You'd make a great Dread Syndie Roberts!"
- icon_state = "pirate"
- item_state = "pirate"
-
-/obj/item/clothing/head/collectable/kitty
- name = "Collectable Kitty Ears"
- desc = "The fur feels.....a bit too realistic."
- icon_state = "kitty"
- item_state = "kitty"
-
-/obj/item/clothing/head/collectable/rabbitears
- name = "Collectable Rabbit Ears"
- desc = "Not as lucky as the feet!"
- icon_state = "bunny"
- item_state = "bunny"
-
-/obj/item/clothing/head/collectable/wizard
- name = "Collectable Wizard's Hat"
- desc = "NOTE:Any magical powers gained from wearing this hat are purely coincidental."
- icon_state = "wizard"
-
-/obj/item/clothing/head/collectable/hardhat
- name = "Collectable Hard Hat"
- desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!"
- icon_state = "hardhat0_yellow"
- item_state = "hardhat0_yellow"
-
-/obj/item/clothing/head/collectable/HoS
- name = "Collectable HoS Hat"
- desc = "Now you can beat prisoners, set silly sentences and arrest for no reason too!"
- icon_state = "hoscap"
-
-/obj/item/clothing/head/collectable/thunderdome
- name = "Collectable Thunderdome helmet"
- desc = "Go Red! I mean Green! I mean Red! No Green!"
- icon_state = "thunderdome"
- item_state = "thunderdome"
-
-/obj/item/clothing/head/collectable/swat
- name = "Collectable SWAT Helmet"
- desc = "Now you can be in the Deathsquad too!"
- icon_state = "swat"
- item_state = "swat"
-
-//obj/item/clothing/head/collectable
-
-
-
-/* no left/right sprites
-/obj/item/clothing/under/mario
- name = "Mario costume"
- desc = "Worn by Italian plumbers everywhere. Probably."
- icon_state = "mario"
- item_state = "mario"
- color = "mario"
-
-/obj/item/clothing/under/luigi
- name = "Mario costume"
- desc = "Player two. Couldn't you get the first controller?"
- icon_state = "luigi"
- item_state = "luigi"
- color = "luigi"
-*/
-
-/obj/item/clothing/under/kilt
- name = "kilt"
- desc = "Includes shoes and plaid."
- icon_state = "kilt"
- item_state = "kilt"
- color = "kilt"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|FEET
-
-/obj/item/clothing/under/sexymime
- name = "Sexy mime outfit"
- desc = "The only time when you DON'T enjoy looking at someone's rack."
- icon_state = "sexymime"
- item_state = "sexymime"
- color = "sexymime"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO
-
-/obj/item/clothing/head/bowler
- name = "bowler-hat"
- desc = "Gentleman, elite aboard!"
- icon_state = "bowler"
- item_state = "bowler"
- flags = FPRINT | TABLEPASS
-
-/obj/item/clothing/head/justice
- name = "Justice Hat"
- desc = "Fight for what's righteous!"
- icon_state = "justicered"
- item_state = "justicered"
- flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
-
-/obj/item/clothing/head/justice/blue
- icon_state = "justiceblue"
- item_state = "justiceblue"
-
-/obj/item/clothing/head/justice/yellow
- icon_state = "justiceyellow"
- item_state = "justiceyellow"
-
-/obj/item/clothing/head/justice/green
- icon_state = "justicegreen"
- item_state = "justicegreen"
-
-/obj/item/clothing/head/justice/pink
- icon_state = "justicepink"
- item_state = "justicepink"
-
-obj/item/clothing/suit/justice
- name = "Justice Suit"
- desc = "This pretty much looks ridiculous."
- icon_state = "justice"
- item_state = "justice"
- flags = FPRINT | TABLEPASS
-
-//stylish new hats
-
-/obj/item/clothing/head/bowlerhat
- name = "Bowler hat"
- icon_state = "bowler_hat"
- item_state = "bowler_hat"
- desc = "For the gentleman of distinction."
- flags = FPRINT|TABLEPASS
-
-/obj/item/clothing/head/beaverhat
- name = "Beaver hat"
- icon_state = "beaver_hat"
- item_state = "beaver_hat"
- desc = "Soft felt make this hat both comfortable and elegant."
- flags = FPRINT|TABLEPASS
-
-/obj/item/clothing/head/boaterhat
- name = "Boater hat"
- icon_state = "boater_hat"
- item_state = "boater_hat"
- desc = "The ultimate in summer fashion."
- flags = FPRINT|TABLEPASS
-
-/obj/item/clothing/head/fedora
- name = "Fedora"
- icon_state = "fedora"
- item_state = "fedora"
- desc = "A sharp, stylish hat."
- flags = FPRINT|TABLEPASS
-
-/obj/item/clothing/head/feathertrilby
- name = "Feather trilby"
- icon_state = "feather_trilby"
- item_state = "feather_trilby"
- desc = "A sharp, stylish hat with a feather."
- flags = FPRINT|TABLEPASS
-
-//pyjamas
-
-/obj/item/clothing/under/bluepyjamas
- name = "Blue pyjamas"
- desc = "Slightly old-fashioned sleepwear."
- icon_state = "blue_pyjamas"
- item_state = "blue_pyjamas"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
-
-/obj/item/clothing/under/redpyjamas
- name = "Red pyjamas"
- desc = "Slightly old-fashioned sleepwear."
- icon_state = "red_pyjamas"
- item_state = "red_pyjamas"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
-
-//scarves (fit in in mask slot)
-
-/obj/item/clothing/mask/bluescarf
- name = "Blue neck scarf"
- desc = "A blue neck scarf."
- icon_state = "blueneckscarf"
- item_state = "blueneckscarf"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
- w_class = 2
- gas_transfer_coefficient = 0.90
-
-/obj/item/clothing/mask/redscarf
- name = "Red scarf"
- desc = "A red and white checkered neck scarf."
- icon_state = "redwhite_scarf"
- item_state = "redwhite_scarf"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
- w_class = 2
- gas_transfer_coefficient = 0.90
-
-/obj/item/clothing/mask/greenscarf
- name = "Green scarf"
- desc = "A green neck scarf."
- icon_state = "green_scarf"
- item_state = "green_scarf"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
- w_class = 2
- gas_transfer_coefficient = 0.90
-
-/obj/item/clothing/mask/ninjascarf
- name = "Ninja scarf"
- desc = "A stealthy, dark scarf."
- icon_state = "ninja_scarf"
- item_state = "ninja_scarf"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
- w_class = 2
- gas_transfer_coefficient = 0.90
-
-//shoes
-
-/obj/item/clothing/shoes/laceups
- name = "Laceup shoes"
- desc = "Stylish black leather."
- icon_state = "laceups"
- item_state = "laceups"
- color = "black"
-
-//suits
-
-/obj/item/clothing/suit/leathercoat
- name = "Leather Coat"
- desc = "A long, thick black leather coat."
- icon_state = "leathercoat"
- item_state = "leathercoat"
- flags = FPRINT | TABLEPASS
-
-/obj/item/clothing/suit/browncoat
- name = "Brown Leather Coat"
- desc = "A long, brown leather coat."
- icon_state = "browncoat"
- item_state = "browncoat"
- flags = FPRINT | TABLEPASS
-
-/obj/item/clothing/suit/neocoat
- name = "Black coat"
- desc = "A flowing, black coat."
- icon_state = "neocoat"
- item_state = "neocoat"
- flags = FPRINT | TABLEPASS
-
-/obj/item/clothing/suit/creamsuit
- name = "Cream suit"
- desc = "A cream coloured, genteel suit."
- icon_state = "creamsuit"
- item_state = "creamsuit"
- flags = FPRINT | TABLEPASS
+/obj/item/clothing/head/rabbitears
+ name = "Rabbit Ears"
+ desc = "Wearing these makes you looks useless, and only good for your sex appeal."
+ icon_state = "bunny"
+ flags = FPRINT | TABLEPASS
+
+/obj/item/clothing/head/kitty
+ name = "Kitty Ears"
+ desc = "A pair of kitty ears. Meow!"
+ icon_state = "kitty"
+ flags = FPRINT | TABLEPASS
+ var/icon/mob
+ var/icon/mob2
+
+ update_icon(var/mob/living/carbon/human/user)
+ if(!istype(user)) return
+ mob = new/icon("icon" = 'head.dmi', "icon_state" = "kitty")
+ mob2 = new/icon("icon" = 'head.dmi', "icon_state" = "kitty2")
+ mob.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD)
+ mob2.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD)
+
+ var/icon/earbit = new/icon("icon" = 'head.dmi', "icon_state" = "kittyinner")
+ var/icon/earbit2 = new/icon("icon" = 'head.dmi', "icon_state" = "kittyinner2")
+ mob.Blend(earbit, ICON_OVERLAY)
+ mob2.Blend(earbit2, ICON_OVERLAY)
+
+/obj/item/clothing/shoes/red
+ name = "red shoes"
+ desc = "Stylish red shoes."
+ icon_state = "red"
+ color = "red"
+
+/obj/item/clothing/shoes/rainbow
+ name = "rainbow shoes"
+ desc = "Very gay shoes."
+ icon_state = "rain_bow"
+ color = "rainbow"
+
+/obj/item/clothing/mask/owl_mask
+ name = "Owl mask"
+ desc = "Twoooo!"
+ icon_state = "owl"
+
+/obj/item/clothing/under/owl
+ name = "Owl uniform"
+ desc = "A jumpsuit with owl wings. Photorealistic owl feathers! Twooooo!"
+ icon_state = "owl"
+ color = "owl"
+
+/obj/item/clothing/gloves/cyborg
+ desc = "beep boop borp"
+ name = "cyborg gloves"
+ icon_state = "black"
+ item_state = "r_hands"
+ siemens_coefficient = 1
+
+/obj/item/clothing/mask/gas/cyborg
+ name = "cyborg visor"
+ desc = "Beep boop"
+ icon_state = "death"
+
+/obj/item/clothing/shoes/cyborg
+ name = "cyborg boots"
+ desc = "Shoes for a cyborg costume"
+ icon_state = "boots"
+
+/obj/item/clothing/suit/cyborg_suit
+ name = "cyborg suit"
+ desc = "Suit for a cyborg costume."
+ icon_state = "death"
+ item_state = "death"
+ flags = FPRINT | TABLEPASS | CONDUCT
+ fire_resist = T0C+5200
+
+/*/obj/item/clothing/under/nazi1
+ name = "Nazi uniform"
+ desc = "SIEG HEIL!"
+ icon_state = "nazi"
+ color = "nazi1"*/ //no direction sprites
+
+/obj/item/clothing/suit/greatcoat
+ name = "great coat"
+ desc = "A Nazi great coat."
+ icon_state = "nazi"
+ item_state = "nazi"
+ flags = FPRINT | TABLEPASS
+
+/obj/item/clothing/under/johnny
+ name = "Johnny~~"
+ desc = "Johnny~~"
+ icon_state = "johnny"
+ color = "johnny"
+
+/obj/item/clothing/suit/johnny_coat
+ name = "Johnny~~"
+ desc = "Johnny~~"
+ icon_state = "johnny"
+ item_state = "johnny"
+ flags = FPRINT | TABLEPASS
+
+
+/obj/item/clothing/under/rainbow
+ name = "rainbow"
+ desc = "rainbow"
+ icon_state = "rainbow"
+ item_state = "rainbow"
+ color = "rainbow"
+
+/obj/item/clothing/under/cloud
+ name = "cloud"
+ desc = "cloud"
+ icon_state = "cloud"
+ color = "cloud"
+
+/*/obj/item/clothing/under/yay
+ name = "yay"
+ desc = "Yay!"
+ icon_state = "yay"
+ color = "yay"*/ // no sprite --errorage
+
+// UNUSED COLORS
+
+/obj/item/clothing/under/psyche
+ name = "psychedelic"
+ desc = "Groovy!"
+ icon_state = "psyche"
+ color = "psyche"
+
+/*
+/obj/item/clothing/under/maroon
+ name = "maroon"
+ desc = "maroon"
+ icon_state = "maroon"
+ color = "maroon"*/ // no sprite -- errorage
+
+/obj/item/clothing/under/lightblue
+ name = "lightblue"
+ desc = "lightblue"
+ icon_state = "lightblue"
+ color = "lightblue"
+
+/obj/item/clothing/under/aqua
+ name = "aqua"
+ desc = "aqua"
+ icon_state = "aqua"
+ color = "aqua"
+
+/obj/item/clothing/under/purple
+ name = "purple"
+ desc = "purple"
+ icon_state = "purple"
+ item_state = "p_suit"
+ color = "purple"
+
+/obj/item/clothing/under/lightpurple
+ name = "lightpurple"
+ desc = "lightpurple"
+ icon_state = "lightpurple"
+ color = "lightpurple"
+
+/obj/item/clothing/under/lightgreen
+ name = "lightgreen"
+ desc = "lightgreen"
+ icon_state = "lightgreen"
+ color = "lightgreen"
+
+/obj/item/clothing/under/lightblue
+ name = "lightblue"
+ desc = "lightblue"
+ icon_state = "lightblue"
+ color = "lightblue"
+
+/obj/item/clothing/under/lightbrown
+ name = "lightbrown"
+ desc = "lightbrown"
+ icon_state = "lightbrown"
+ color = "lightbrown"
+
+/obj/item/clothing/under/brown
+ name = "brown"
+ desc = "brown"
+ icon_state = "brown"
+ color = "brown"
+
+/obj/item/clothing/under/yellowgreen
+ name = "yellowgreen"
+ desc = "yellowgreen"
+ icon_state = "yellowgreen"
+ color = "yellowgreen"
+
+/obj/item/clothing/under/darkblue
+ name = "darkblue"
+ desc = "darkblue"
+ icon_state = "darkblue"
+ color = "darkblue"
+
+/obj/item/clothing/under/lightred
+ name = "lightred"
+ desc = "lightred"
+ icon_state = "lightred"
+ color = "lightred"
+
+/obj/item/clothing/under/darkred
+ name = "darkred"
+ desc = "darkred"
+ icon_state = "darkred"
+ color = "darkred"
+
+// STEAMPUNK STATION
+
+/obj/item/clothing/glasses/monocle
+ name = "monocle"
+ desc = "Such a dapper eyepiece!"
+ icon_state = "monocle"
+ item_state = "headset" // lol
+
+/obj/item/clothing/under/gimmick/rank/captain/suit
+ name = "Captain's Suit"
+ desc = "A green suit and yellow necktie. Exemplifies authority."
+ icon_state = "green_suit"
+ item_state = "dg_suit"
+ color = "green_suit"
+
+/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit
+ name = "Head of Personnel's Suit"
+ desc = "A teal suit and yellow necktie. An authoritative yet tacky ensemble."
+ icon_state = "teal_suit"
+ item_state = "g_suit"
+ color = "teal_suit"
+
+/obj/item/clothing/under/suit_jacket
+ name = "Black Suit"
+ desc = "A black suit and red tie. Very formal."
+ icon_state = "black_suit"
+ item_state = "bl_suit"
+ color = "black_suit"
+
+/obj/item/clothing/under/suit_jacket/really_black
+ name = "Executive Suit"
+ desc = "A formal black suit and red tie, intended for the station's finest."
+ icon_state = "really_black_suit"
+ item_state = "bl_suit"
+ color = "black_suit"
+
+/obj/item/clothing/under/suit_jacket/red
+ name = "Red Suit"
+ desc = "A red suit and blue tie. Somewhat formal."
+ icon_state = "red_suit"
+ item_state = "r_suit"
+ color = "red_suit"
+
+/obj/item/clothing/under/blackskirt
+ name = "Black skirt"
+ desc = "A black skirt, very fancy!"
+ icon_state = "blackskirt"
+ color = "blackskirt"
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
+
+/obj/item/clothing/under/schoolgirl
+ name = "schoolgirl uniform"
+ desc = "It's just like one of my Japanese animes!"
+ icon_state = "schoolgirl"
+ item_state = "schoolgirl"
+ color = "schoolgirl"
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
+
+/obj/item/clothing/under/gimmick/rank/police
+ name = "Police Uniform"
+ desc = "Move along, nothing to see here."
+ icon_state = "police"
+ item_state = "b_suit"
+ color = "police"
+
+/obj/item/clothing/head/flatcap
+ name = "flat cap"
+ desc = "A working man's cap."
+ icon_state = "flat_cap"
+ item_state = "detective"
+
+/obj/item/clothing/under/overalls
+ name = "Laborer's Overalls"
+ desc = "A set of durable overalls for getting the job done."
+ icon_state = "overalls"
+ item_state = "lb_suit"
+ color = "overalls"
+
+/obj/item/weapon/melee/classic_baton
+ name = "police baton"
+ desc = "A wooden truncheon for beating criminal scum."
+ icon = 'weapons.dmi'
+ icon_state = "baton"
+ item_state = "classic_baton"
+ flags = FPRINT | ONBELT | TABLEPASS
+ force = 10
+
+/obj/item/clothing/under/pirate
+ name = "Pirate Outfit"
+ desc = "Yarr."
+ icon_state = "pirate"
+ item_state = "pirate"
+ color = "pirate"
+
+/obj/item/clothing/head/pirate
+ name = "pirate hat"
+ desc = "Yarr."
+ icon_state = "pirate"
+ item_state = "pirate"
+
+/obj/item/clothing/head/hgpiratecap
+ name = "pirate hat"
+ desc = "Yarr."
+ icon_state = "hgpiratecap"
+ item_state = "hgpiratecap"
+
+/obj/item/clothing/suit/pirate
+ name = "pirate coat"
+ desc = "Yarr."
+ icon_state = "pirate"
+ item_state = "pirate"
+ flags = FPRINT | TABLEPASS
+
+
+/obj/item/clothing/suit/hgpirate
+ name = "pirate captain coat"
+ desc = "Yarr."
+ icon_state = "hgpirate"
+ item_state = "hgpirate"
+ flags = FPRINT | TABLEPASS
+
+/obj/item/clothing/glasses/eyepatch
+ name = "eyepatch"
+ desc = "Yarr."
+ icon_state = "eyepatch"
+ item_state = "eyepatch"
+
+/obj/item/clothing/head/bandana
+ name = "pirate bandana"
+ desc = "Yarr."
+ icon_state = "bandana"
+ item_state = "bandana"
+
+/obj/item/clothing/under/soviet
+ name = "soviet uniform"
+ desc = "For the Motherland!"
+ icon_state = "soviet"
+ item_state = "soviet"
+ color = "soviet"
+
+/obj/item/clothing/under/redcoat
+ name = "redcoat uniform"
+ desc = "Looks old."
+ icon_state = "redcoat"
+ item_state = "redcoat"
+ color = "redcoat"
+
+/obj/item/clothing/head/ushanka
+ name = "ushanka"
+ desc = "Perfect for winter in Siberia, da?"
+ icon_state = "ushankadown"
+ item_state = "ushankadown"
+
+/obj/item/clothing/head/collectable //Hat Station 13
+ name = "Collectable Hat"
+ desc = "A rare collectable hat."
+
+/obj/item/clothing/head/collectable/petehat
+ name = "Ultra Rare! Pete's Hat!"
+ desc = "It smells faintly of plasma"
+ icon_state = "petehat"
+
+/obj/item/clothing/head/collectable/metroid
+ name = "Collectable Metroid Cap!"
+ desc = "It just latches right in place!"
+ icon_state = "metroid"
+
+/obj/item/clothing/head/collectable/xenom
+ name = "Collectable Xenomorph Helmet!"
+ desc = "Hiss hiss hiss!"
+ icon_state = "xenom"
+
+/obj/item/clothing/head/collectable/chef
+ name = "Collectable Chef's Hat"
+ desc = "A rare Chef's Hat meant for hat collectors!"
+ icon_state = "chef"
+ item_state = "chef"
+
+/obj/item/clothing/head/collectable/paper
+ name = "Collectable Paper Hat"
+ desc = "What looks like an ordinary paper hat, is actually a rare and valuable collector's edition paper hat. Keep away from water, fire and Librarians."
+ icon_state = "paper"
+
+/obj/item/clothing/head/collectable/tophat
+ name = "Collectable Top Hat"
+ desc = "A top hat worn by only the most prestigious hat collectors."
+ icon_state = "tophat"
+ item_state = "that"
+
+/obj/item/clothing/head/collectable/captain
+ name = "Collectable Captain's Hat"
+ desc = "A Collectable Hat that'll make you look just like a real comdom!"
+ icon_state = "captain"
+ item_state = "caphat"
+
+/obj/item/clothing/head/collectable/police
+ name = "Collectable Police Officer's Hat"
+ desc = "A Collectable Police Officer's Hat. This hat emphasizes that you are THE LAW."
+ icon_state = "policehelm"
+
+/obj/item/clothing/head/collectable/beret
+ name = "Collectable Beret"
+ desc = "A Collectable red beret. It smells faintly of garlic."
+ icon_state = "beret"
+
+/obj/item/clothing/head/collectable/welding
+ name = "Collectable Welding Helmet"
+ desc = "A Collectable Welding Helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this Helmet is done so at the owner's own risk!"
+ icon_state = "welding"
+ item_state = "welding"
+
+/obj/item/clothing/head/collectable/slime
+ name = "Collectable Slime Hat"
+ desc = "Just like a real Brain Slug!"
+ icon_state = "headslime"
+ item_state = "headslime"
+
+/obj/item/clothing/head/collectable/flatcap
+ name = "Collectable Flat Cap"
+ desc = "A Collectible farmer's Flat Cap!"
+ icon_state = "flat_cap"
+ item_state = "detective"
+
+/obj/item/clothing/head/collectable/pirate
+ name = "Collectable Pirate Hat"
+ desc = "You'd make a great Dread Syndie Roberts!"
+ icon_state = "pirate"
+ item_state = "pirate"
+
+/obj/item/clothing/head/collectable/kitty
+ name = "Collectable Kitty Ears"
+ desc = "The fur feels.....a bit too realistic."
+ icon_state = "kitty"
+ item_state = "kitty"
+
+/obj/item/clothing/head/collectable/rabbitears
+ name = "Collectable Rabbit Ears"
+ desc = "Not as lucky as the feet!"
+ icon_state = "bunny"
+ item_state = "bunny"
+
+/obj/item/clothing/head/collectable/wizard
+ name = "Collectable Wizard's Hat"
+ desc = "NOTE:Any magical powers gained from wearing this hat are purely coincidental."
+ icon_state = "wizard"
+
+/obj/item/clothing/head/collectable/hardhat
+ name = "Collectable Hard Hat"
+ desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!"
+ icon_state = "hardhat0_yellow"
+ item_state = "hardhat0_yellow"
+
+/obj/item/clothing/head/collectable/HoS
+ name = "Collectable HoS Hat"
+ desc = "Now you can beat prisoners, set silly sentences and arrest for no reason too!"
+ icon_state = "hoscap"
+
+/obj/item/clothing/head/collectable/thunderdome
+ name = "Collectable Thunderdome helmet"
+ desc = "Go Red! I mean Green! I mean Red! No Green!"
+ icon_state = "thunderdome"
+ item_state = "thunderdome"
+
+/obj/item/clothing/head/collectable/swat
+ name = "Collectable SWAT Helmet"
+ desc = "Now you can be in the Deathsquad too!"
+ icon_state = "swat"
+ item_state = "swat"
+
+//obj/item/clothing/head/collectable
+
+
+
+/* no left/right sprites
+/obj/item/clothing/under/mario
+ name = "Mario costume"
+ desc = "Worn by Italian plumbers everywhere. Probably."
+ icon_state = "mario"
+ item_state = "mario"
+ color = "mario"
+
+/obj/item/clothing/under/luigi
+ name = "Mario costume"
+ desc = "Player two. Couldn't you get the first controller?"
+ icon_state = "luigi"
+ item_state = "luigi"
+ color = "luigi"
+*/
+
+/obj/item/clothing/under/kilt
+ name = "kilt"
+ desc = "Includes shoes and plaid."
+ icon_state = "kilt"
+ item_state = "kilt"
+ color = "kilt"
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|FEET
+
+/obj/item/clothing/under/sexymime
+ name = "Sexy mime outfit"
+ desc = "The only time when you DON'T enjoy looking at someone's rack."
+ icon_state = "sexymime"
+ item_state = "sexymime"
+ color = "sexymime"
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO
+
+/obj/item/clothing/head/bowler
+ name = "bowler-hat"
+ desc = "Gentleman, elite aboard!"
+ icon_state = "bowler"
+ item_state = "bowler"
+ flags = FPRINT | TABLEPASS
+
+/obj/item/clothing/head/justice
+ name = "Justice Hat"
+ desc = "Fight for what's righteous!"
+ icon_state = "justicered"
+ item_state = "justicered"
+ flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+
+/obj/item/clothing/head/justice/blue
+ icon_state = "justiceblue"
+ item_state = "justiceblue"
+
+/obj/item/clothing/head/justice/yellow
+ icon_state = "justiceyellow"
+ item_state = "justiceyellow"
+
+/obj/item/clothing/head/justice/green
+ icon_state = "justicegreen"
+ item_state = "justicegreen"
+
+/obj/item/clothing/head/justice/pink
+ icon_state = "justicepink"
+ item_state = "justicepink"
+
+obj/item/clothing/suit/justice
+ name = "Justice Suit"
+ desc = "This pretty much looks ridiculous."
+ icon_state = "justice"
+ item_state = "justice"
+ flags = FPRINT | TABLEPASS
+
+//stylish new hats
+
+/obj/item/clothing/head/bowlerhat
+ name = "Bowler hat"
+ icon_state = "bowler_hat"
+ item_state = "bowler_hat"
+ desc = "For the gentleman of distinction."
+ flags = FPRINT|TABLEPASS
+
+/obj/item/clothing/head/beaverhat
+ name = "Beaver hat"
+ icon_state = "beaver_hat"
+ item_state = "beaver_hat"
+ desc = "Soft felt make this hat both comfortable and elegant."
+ flags = FPRINT|TABLEPASS
+
+/obj/item/clothing/head/boaterhat
+ name = "Boater hat"
+ icon_state = "boater_hat"
+ item_state = "boater_hat"
+ desc = "The ultimate in summer fashion."
+ flags = FPRINT|TABLEPASS
+
+/obj/item/clothing/head/fedora
+ name = "Fedora"
+ icon_state = "fedora"
+ item_state = "fedora"
+ desc = "A sharp, stylish hat."
+ flags = FPRINT|TABLEPASS
+
+/obj/item/clothing/head/feathertrilby
+ name = "Feather trilby"
+ icon_state = "feather_trilby"
+ item_state = "feather_trilby"
+ desc = "A sharp, stylish hat with a feather."
+ flags = FPRINT|TABLEPASS
+
+//pyjamas
+
+/obj/item/clothing/under/bluepyjamas
+ name = "Blue pyjamas"
+ desc = "Slightly old-fashioned sleepwear."
+ icon_state = "blue_pyjamas"
+ item_state = "blue_pyjamas"
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
+
+/obj/item/clothing/under/redpyjamas
+ name = "Red pyjamas"
+ desc = "Slightly old-fashioned sleepwear."
+ icon_state = "red_pyjamas"
+ item_state = "red_pyjamas"
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
+
+//scarves (fit in in mask slot)
+
+/obj/item/clothing/mask/bluescarf
+ name = "Blue neck scarf"
+ desc = "A blue neck scarf."
+ icon_state = "blueneckscarf"
+ item_state = "blueneckscarf"
+ flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ w_class = 2
+ gas_transfer_coefficient = 0.90
+
+/obj/item/clothing/mask/redscarf
+ name = "Red scarf"
+ desc = "A red and white checkered neck scarf."
+ icon_state = "redwhite_scarf"
+ item_state = "redwhite_scarf"
+ flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ w_class = 2
+ gas_transfer_coefficient = 0.90
+
+/obj/item/clothing/mask/greenscarf
+ name = "Green scarf"
+ desc = "A green neck scarf."
+ icon_state = "green_scarf"
+ item_state = "green_scarf"
+ flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ w_class = 2
+ gas_transfer_coefficient = 0.90
+
+/obj/item/clothing/mask/ninjascarf
+ name = "Ninja scarf"
+ desc = "A stealthy, dark scarf."
+ icon_state = "ninja_scarf"
+ item_state = "ninja_scarf"
+ flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ w_class = 2
+ gas_transfer_coefficient = 0.90
+
+//shoes
+
+/obj/item/clothing/shoes/laceups
+ name = "Laceup shoes"
+ desc = "Stylish black leather."
+ icon_state = "laceups"
+ item_state = "laceups"
+ color = "black"
+
+//suits
+
+/obj/item/clothing/suit/leathercoat
+ name = "Leather Coat"
+ desc = "A long, thick black leather coat."
+ icon_state = "leathercoat"
+ item_state = "leathercoat"
+ flags = FPRINT | TABLEPASS
+
+/obj/item/clothing/suit/browncoat
+ name = "Brown Leather Coat"
+ desc = "A long, brown leather coat."
+ icon_state = "browncoat"
+ item_state = "browncoat"
+ flags = FPRINT | TABLEPASS
+
+/obj/item/clothing/suit/neocoat
+ name = "Black coat"
+ desc = "A flowing, black coat."
+ icon_state = "neocoat"
+ item_state = "neocoat"
+ flags = FPRINT | TABLEPASS
+
+/obj/item/clothing/suit/creamsuit
+ name = "Cream suit"
+ desc = "A cream coloured, genteel suit."
+ icon_state = "creamsuit"
+ item_state = "creamsuit"
+ flags = FPRINT | TABLEPASS
diff --git a/code/defines/obj/clothing/gloves.dm b/code/modules/clothing/gloves.dm
similarity index 96%
rename from code/defines/obj/clothing/gloves.dm
rename to code/modules/clothing/gloves.dm
index af29b55661e..153b1945fb8 100644
--- a/code/defines/obj/clothing/gloves.dm
+++ b/code/modules/clothing/gloves.dm
@@ -1,226 +1,226 @@
-// NO GLOVES NO LOVES
-
-/obj/item/clothing/gloves
- name = "gloves"
- w_class = 2.0
- icon = 'gloves.dmi'
- protective_temperature = 400
- heat_transfer_coefficient = 0.25
- siemens_coefficient = 0.50
- var/siemens_coefficient_archived = 0
- var/wired = 0
- var/obj/item/weapon/cell/cell = 0
- body_parts_covered = HANDS
-
-/obj/item/clothing/gloves/white
- name = "White Gloves"
- desc = "These look pretty fancy."
- icon_state = "latex"
- item_state = "lgloves"
- color="mime"
-
- redcoat
- color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
-
-/obj/item/clothing/gloves/black
- desc = "These gloves are fire-resistant."
- name = "Black Gloves"
- icon_state = "black"
- item_state = "bgloves"
- color="brown"
- protective_temperature = 1500
- heat_transfer_coefficient = 0.01
-
- hos
- color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
-
- ce
- color = "chief" //Exists for washing machines. Is not different from black gloves in any way.
-
-/obj/item/clothing/gloves/detective
- desc = "Made of well worn leather. These gloves are comfortable, useful, and stylish!"
- name = "The Detective's Gloves"
- icon_state = "black"
- item_state = "bgloves"
- color="brown"
- siemens_coefficient = 0.30
- protective_temperature = 1100
-
-/obj/item/clothing/gloves/hos
- desc = "These gloves belong to the man in charge of the guns."
- name = "Head of Security's Gloves"
- icon_state = "black"
- item_state = "bgloves"
- color="brown"
- siemens_coefficient = 0.30
- protective_temperature = 1100
-
-/obj/item/clothing/gloves/cyborg
- desc = "Beep. Boop. Beep."
- name = "cyborg gloves"
- icon_state = "black"
- item_state = "r_hands"
- siemens_coefficient = 1.0
-
-/obj/item/clothing/gloves/latex
- name = "Latex Gloves"
- desc = "Sterile latex gloves."
- icon_state = "latex"
- item_state = "lgloves"
- siemens_coefficient = 0.30
- permeability_coefficient = 0.01
- protective_temperature = 310
- heat_transfer_coefficient = 0.90
- color="white"
-
- cmo
- color = "medical" //Exists for washing machines. Is not different from latex gloves in any way.
-
-/obj/item/clothing/gloves/swat
- desc = "These tactical gloves are somewhat fire and impact-resistant."
- name = "SWAT Gloves"
- icon_state = "black"
- item_state = "swat_gl"
- siemens_coefficient = 0
- permeability_coefficient = 0.05
- protective_temperature = 1100
- heat_transfer_coefficient = 0.01
-
-/obj/item/clothing/gloves/combat //Combined effect of SWAT gloves and insulated gloves
- desc = "These tactical gloves are somewhat fire and impact resistant."
- name = "combat gloves"
- icon_state = "black"
- item_state = "swat_gl"
- siemens_coefficient = 0
- permeability_coefficient = 0.05
- protective_temperature = 1100
- heat_transfer_coefficient = 0.01
-
-/obj/item/clothing/gloves/space_ninja
- desc = "These nano-enhanced gloves insulate from electricity and provide fire resistance."
- name = "ninja gloves"
- icon_state = "s-ninja"
- item_state = "s-ninja"
- siemens_coefficient = 0
- protective_temperature = 1100
- heat_transfer_coefficient = 0.05
- var/draining = 0
- var/candrain = 0
- var/mindrain = 200
- var/maxdrain = 400
-
-//BEEP BEEP IT'S THE COMMENT BRIGADE -Pete (gloves overhaul)
-/*
-/obj/item/clothing/gloves/stungloves/
- name = "Stungloves"
- desc = "These gloves are electrically charged."
- icon_state = "yellow"
- item_state = "ygloves"
- siemens_coefficient = 0.30
- elecgen = 1
- uses = 10
-*/
-
-/obj/item/clothing/gloves/yellow
- desc = "These gloves will protect the wearer from electric shock."
- name = "insulated gloves"
- icon_state = "yellow"
- item_state = "ygloves"
- siemens_coefficient = 0
- permeability_coefficient = 0.05
- protective_temperature = 1000
- heat_transfer_coefficient = 0.01
- color="yellow"
-
-/obj/item/clothing/gloves/captain
- desc = "Regal blue gloves, with a nice gold trim. Swanky."
- name = "Captain Gloves"
- icon_state = "captain"
- item_state = "egloves"
- color = "captain"
-
-/obj/item/clothing/gloves/botanic_leather
- desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin."
- name = "botanic leather gloves"
- icon_state = "leather"
- item_state = "ggloves"
- siemens_coefficient = 0.50
- permeability_coefficient = 0.9
- protective_temperature = 400
- heat_transfer_coefficient = 0.70
-
-/obj/item/clothing/gloves/orange
- name = "Orange Gloves"
- desc = "A pair of gloves. They don't look special in any way."
- icon_state = "orange"
- item_state = "orangegloves"
- color="orange"
-
-/obj/item/clothing/gloves/red
- desc = "Heavily padded heavy-duty red gloves."
- name = "red gloves"
- icon_state = "red"
- item_state = "redgloves"
- siemens_coefficient = 0.30
- protective_temperature = 1100
-
-/obj/item/clothing/gloves/rainbow
- name = "Rainbow Gloves"
- desc = "A pair of gloves. They don't look special in any way."
- icon_state = "rainbow"
- item_state = "rainbowgloves"
- color = "rainbow"
-
- clown
- color = "clown"
-
-/obj/item/clothing/gloves/blue
- name = "Blue Gloves"
- desc = "A pair of gloves. They don't look special in any way."
- icon_state = "blue"
- item_state = "bluegloves"
- color="blue"
-
-/obj/item/clothing/gloves/purple
- name = "Purple Gloves"
- desc = "A pair of gloves. They don't look special in any way."
- icon_state = "purple"
- item_state = "purplegloves"
- color="purple"
-
-/obj/item/clothing/gloves/green
- name = "Green Gloves"
- desc = "A pair of gloves. They don't look special in any way."
- icon_state = "green"
- item_state = "greengloves"
- color="green"
-
-/obj/item/clothing/gloves/grey
- name = "Grey Gloves"
- desc = "A pair of gloves. They don't look special in any way."
- icon_state = "gray"
- item_state = "graygloves"
- color="grey"
-
- rd
- color = "director" //Exists for washing machines. Is not different from gray gloves in any way.
-
- hop
- color = "hop" //Exists for washing machines. Is not different from gray gloves in any way.
-
-/obj/item/clothing/gloves/light_brown
- name = "Light Brown Gloves"
- desc = "A pair of gloves. They don't look special in any way."
- icon_state = "lightbrown"
- item_state = "lightbrowngloves"
- color="light brown"
-
-/obj/item/clothing/gloves/brown
- name = "Brown Gloves"
- desc = "A pair of gloves. They don't look special in any way."
- icon_state = "brown"
- item_state = "browngloves"
- color="brown"
-
- cargo
+// NO GLOVES NO LOVES
+
+/obj/item/clothing/gloves
+ name = "gloves"
+ w_class = 2.0
+ icon = 'gloves.dmi'
+ protective_temperature = 400
+ heat_transfer_coefficient = 0.25
+ siemens_coefficient = 0.50
+ var/siemens_coefficient_archived = 0
+ var/wired = 0
+ var/obj/item/weapon/cell/cell = 0
+ body_parts_covered = HANDS
+
+/obj/item/clothing/gloves/white
+ name = "White Gloves"
+ desc = "These look pretty fancy."
+ icon_state = "latex"
+ item_state = "lgloves"
+ color="mime"
+
+ redcoat
+ color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
+
+/obj/item/clothing/gloves/black
+ desc = "These gloves are fire-resistant."
+ name = "Black Gloves"
+ icon_state = "black"
+ item_state = "bgloves"
+ color="brown"
+ protective_temperature = 1500
+ heat_transfer_coefficient = 0.01
+
+ hos
+ color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
+
+ ce
+ color = "chief" //Exists for washing machines. Is not different from black gloves in any way.
+
+/obj/item/clothing/gloves/detective
+ desc = "Made of well worn leather. These gloves are comfortable, useful, and stylish!"
+ name = "The Detective's Gloves"
+ icon_state = "black"
+ item_state = "bgloves"
+ color="brown"
+ siemens_coefficient = 0.30
+ protective_temperature = 1100
+
+/obj/item/clothing/gloves/hos
+ desc = "These gloves belong to the man in charge of the guns."
+ name = "Head of Security's Gloves"
+ icon_state = "black"
+ item_state = "bgloves"
+ color="brown"
+ siemens_coefficient = 0.30
+ protective_temperature = 1100
+
+/obj/item/clothing/gloves/cyborg
+ desc = "Beep. Boop. Beep."
+ name = "cyborg gloves"
+ icon_state = "black"
+ item_state = "r_hands"
+ siemens_coefficient = 1.0
+
+/obj/item/clothing/gloves/latex
+ name = "Latex Gloves"
+ desc = "Sterile latex gloves."
+ icon_state = "latex"
+ item_state = "lgloves"
+ siemens_coefficient = 0.30
+ permeability_coefficient = 0.01
+ protective_temperature = 310
+ heat_transfer_coefficient = 0.90
+ color="white"
+
+ cmo
+ color = "medical" //Exists for washing machines. Is not different from latex gloves in any way.
+
+/obj/item/clothing/gloves/swat
+ desc = "These tactical gloves are somewhat fire and impact-resistant."
+ name = "SWAT Gloves"
+ icon_state = "black"
+ item_state = "swat_gl"
+ siemens_coefficient = 0
+ permeability_coefficient = 0.05
+ protective_temperature = 1100
+ heat_transfer_coefficient = 0.01
+
+/obj/item/clothing/gloves/combat //Combined effect of SWAT gloves and insulated gloves
+ desc = "These tactical gloves are somewhat fire and impact resistant."
+ name = "combat gloves"
+ icon_state = "black"
+ item_state = "swat_gl"
+ siemens_coefficient = 0
+ permeability_coefficient = 0.05
+ protective_temperature = 1100
+ heat_transfer_coefficient = 0.01
+
+/obj/item/clothing/gloves/space_ninja
+ desc = "These nano-enhanced gloves insulate from electricity and provide fire resistance."
+ name = "ninja gloves"
+ icon_state = "s-ninja"
+ item_state = "s-ninja"
+ siemens_coefficient = 0
+ protective_temperature = 1100
+ heat_transfer_coefficient = 0.05
+ var/draining = 0
+ var/candrain = 0
+ var/mindrain = 200
+ var/maxdrain = 400
+
+//BEEP BEEP IT'S THE COMMENT BRIGADE -Pete (gloves overhaul)
+/*
+/obj/item/clothing/gloves/stungloves/
+ name = "Stungloves"
+ desc = "These gloves are electrically charged."
+ icon_state = "yellow"
+ item_state = "ygloves"
+ siemens_coefficient = 0.30
+ elecgen = 1
+ uses = 10
+*/
+
+/obj/item/clothing/gloves/yellow
+ desc = "These gloves will protect the wearer from electric shock."
+ name = "insulated gloves"
+ icon_state = "yellow"
+ item_state = "ygloves"
+ siemens_coefficient = 0
+ permeability_coefficient = 0.05
+ protective_temperature = 1000
+ heat_transfer_coefficient = 0.01
+ color="yellow"
+
+/obj/item/clothing/gloves/captain
+ desc = "Regal blue gloves, with a nice gold trim. Swanky."
+ name = "Captain Gloves"
+ icon_state = "captain"
+ item_state = "egloves"
+ color = "captain"
+
+/obj/item/clothing/gloves/botanic_leather
+ desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin."
+ name = "botanic leather gloves"
+ icon_state = "leather"
+ item_state = "ggloves"
+ siemens_coefficient = 0.50
+ permeability_coefficient = 0.9
+ protective_temperature = 400
+ heat_transfer_coefficient = 0.70
+
+/obj/item/clothing/gloves/orange
+ name = "Orange Gloves"
+ desc = "A pair of gloves. They don't look special in any way."
+ icon_state = "orange"
+ item_state = "orangegloves"
+ color="orange"
+
+/obj/item/clothing/gloves/red
+ desc = "Heavily padded heavy-duty red gloves."
+ name = "red gloves"
+ icon_state = "red"
+ item_state = "redgloves"
+ siemens_coefficient = 0.30
+ protective_temperature = 1100
+
+/obj/item/clothing/gloves/rainbow
+ name = "Rainbow Gloves"
+ desc = "A pair of gloves. They don't look special in any way."
+ icon_state = "rainbow"
+ item_state = "rainbowgloves"
+ color = "rainbow"
+
+ clown
+ color = "clown"
+
+/obj/item/clothing/gloves/blue
+ name = "Blue Gloves"
+ desc = "A pair of gloves. They don't look special in any way."
+ icon_state = "blue"
+ item_state = "bluegloves"
+ color="blue"
+
+/obj/item/clothing/gloves/purple
+ name = "Purple Gloves"
+ desc = "A pair of gloves. They don't look special in any way."
+ icon_state = "purple"
+ item_state = "purplegloves"
+ color="purple"
+
+/obj/item/clothing/gloves/green
+ name = "Green Gloves"
+ desc = "A pair of gloves. They don't look special in any way."
+ icon_state = "green"
+ item_state = "greengloves"
+ color="green"
+
+/obj/item/clothing/gloves/grey
+ name = "Grey Gloves"
+ desc = "A pair of gloves. They don't look special in any way."
+ icon_state = "gray"
+ item_state = "graygloves"
+ color="grey"
+
+ rd
+ color = "director" //Exists for washing machines. Is not different from gray gloves in any way.
+
+ hop
+ color = "hop" //Exists for washing machines. Is not different from gray gloves in any way.
+
+/obj/item/clothing/gloves/light_brown
+ name = "Light Brown Gloves"
+ desc = "A pair of gloves. They don't look special in any way."
+ icon_state = "lightbrown"
+ item_state = "lightbrowngloves"
+ color="light brown"
+
+/obj/item/clothing/gloves/brown
+ name = "Brown Gloves"
+ desc = "A pair of gloves. They don't look special in any way."
+ icon_state = "brown"
+ item_state = "browngloves"
+ color="brown"
+
+ cargo
color = "cargo" //Exists for washing machines. Is not different from brown gloves in any way.
\ No newline at end of file
diff --git a/code/modules/clothing/hardhat.dm b/code/modules/clothing/head/hardhat.dm
similarity index 95%
rename from code/modules/clothing/hardhat.dm
rename to code/modules/clothing/head/hardhat.dm
index c5a60e08ae3..c0f955315f6 100644
--- a/code/modules/clothing/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -1,30 +1,31 @@
-/obj/item/clothing/head/helmet/hardhat
- name = "hard hat"
- desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight."
- icon_state = "hardhat0_yellow"
- flags = FPRINT | TABLEPASS | SUITSPACE
- item_state = "hardhat0_yellow"
- var/brightness_on = 4 //luminosity when on
- var/on = 0
- color = "yellow" //Determines used sprites: hardhat[on]_[color] and hardhat[on]_[color]2 (lying down sprite)
- armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20)
-
-/obj/item/clothing/head/helmet/hardhat/orange
- icon_state = "hardhat0_orange"
- item_state = "hardhat0_orange"
- color = "orange"
-
-/obj/item/clothing/head/helmet/hardhat/red
- icon_state = "hardhat0_red"
- item_state = "hardhat0_red"
- color = "red"
-
-/obj/item/clothing/head/helmet/hardhat/white
- icon_state = "hardhat0_white"
- item_state = "hardhat0_white"
- color = "white"
-
-/obj/item/clothing/head/helmet/hardhat/dblue
- icon_state = "hardhat0_dblue"
- item_state = "hardhat0_dblue"
+/obj/item/clothing/head/helmet/hardhat
+ name = "hard hat"
+ desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight."
+ icon_state = "hardhat0_yellow"
+ flags = FPRINT | TABLEPASS | SUITSPACE
+ item_state = "hardhat0_yellow"
+ var/brightness_on = 4 //luminosity when on
+ var/on = 0
+ color = "yellow" //Determines used sprites: hardhat[on]_[color] and hardhat[on]_[color]2 (lying down sprite)
+ armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20)
+ flags_inv = 0
+
+/obj/item/clothing/head/helmet/hardhat/orange
+ icon_state = "hardhat0_orange"
+ item_state = "hardhat0_orange"
+ color = "orange"
+
+/obj/item/clothing/head/helmet/hardhat/red
+ icon_state = "hardhat0_red"
+ item_state = "hardhat0_red"
+ color = "red"
+
+/obj/item/clothing/head/helmet/hardhat/white
+ icon_state = "hardhat0_white"
+ item_state = "hardhat0_white"
+ color = "white"
+
+/obj/item/clothing/head/helmet/hardhat/dblue
+ icon_state = "hardhat0_dblue"
+ item_state = "hardhat0_dblue"
color = "dblue"
\ No newline at end of file
diff --git a/code/defines/obj/clothing/head.dm b/code/modules/clothing/head/hats.dm
similarity index 60%
rename from code/defines/obj/clothing/head.dm
rename to code/modules/clothing/head/hats.dm
index b232c1bdb0d..915b5b02e71 100644
--- a/code/defines/obj/clothing/head.dm
+++ b/code/modules/clothing/head/hats.dm
@@ -1,190 +1,126 @@
-// HATS. OH MY WHAT A FINE CHAPEAU, GOOD SIR.
-/obj/item/clothing/head
- name = "head"
- icon = 'hats.dmi'
- body_parts_covered = HEAD
- var/list/allowed = list()
-
-/obj/item/clothing/head/cakehat
- name = "cakehat"
- desc = "It is a cakehat!"
- icon_state = "cake0"
- var/onfire = 0.0
- var/status = 0
- flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES
- var/fire_resist = T0C+1300 //this is the max temp it can stand before you start to cook. although it might not burn away, you take damage
-
-/obj/item/clothing/head/caphat
- name = "Captain's hat"
- icon_state = "captain"
- desc = "It's good being the king."
- flags = FPRINT|TABLEPASS
- item_state = "caphat"
-
-/obj/item/clothing/head/centhat
- name = "Cent. Comm. hat"
- icon_state = "centcom"
- desc = "It's even better to be the emperor."
- flags = FPRINT|TABLEPASS
- item_state = "centhat"
-
-/obj/item/clothing/head/deathsquad/beret
- name = "officer's beret"
- desc = "An armored beret commonly used by special operations officers."
- icon_state = "beret_badge"
- flags = FPRINT|TABLEPASS
- armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30)
-
-
-/obj/item/clothing/head/powdered_wig
- name = "powdered wig"
- desc = "A powdered wig."
- icon_state = "pwig"
- item_state = "pwig"
-
-/obj/item/clothing/head/that
- name = "Top hat"
- desc = "An amish looking hat."
- icon_state = "tophat"
- item_state = "that"
- flags = FPRINT|TABLEPASS
-
-
-/obj/item/clothing/head/chefhat
- name = "Chef's Hat"
- icon_state = "chef"
- item_state = "chef"
- desc = "The commander in chef's head wear."
- flags = FPRINT | TABLEPASS
-
-/obj/item/clothing/head/redcoat
- name = "Redcoat hat"
- icon_state = "redcoat"
- desc = "I guess it's a redhead."
- flags = FPRINT | TABLEPASS
-
-/obj/item/clothing/head/mailman
- name = "Mailman Hat"
- icon_state = "mailman"
- desc = "Right-on-time mail service head wear."
- flags = FPRINT | TABLEPASS
-
-/obj/item/clothing/head/plaguedoctorhat
- name = "Plague doctor's hat"
- desc = "Once used by Plague doctors. Now useless."
- icon_state = "plaguedoctor"
- flags = FPRINT | TABLEPASS
- permeability_coefficient = 0.01
-
-/obj/item/clothing/head/beret
- name = "beret"
- desc = "A beret. A mime's favorite headwear."
- icon_state = "beret"
- flags = FPRINT | TABLEPASS
-
-
-// CHUMP HELMETS: COOKING THEM DESTROYS THE CHUMP HELMET SPAWN.
-
-/obj/item/clothing/head/helmet/cueball
- name = "cueball helmet"
- desc = "A large, featureless white orb mean to be worn on your head. How do you even see out of this thing?"
- icon_state = "cueball"
- flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
- item_state="cueball"
-
-/obj/item/clothing/head/secsoft
- name = "Soft Cap"
- desc = "A baseball hat in tasteful red."
- icon_state = "secsoft"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES
- item_state = "helmet"
-
-/obj/item/clothing/head/syndicatefake
- name = "red space helmet replica"
- icon_state = "syndicate"
- item_state = "syndicate"
- desc = "A plastic replica of a syndicate agent's space helmet, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!"
- see_face = 0.0
- flags = FPRINT | TABLEPASS | BLOCKHAIR
-
-/obj/item/clothing/head/helmet/swat
- name = "swat helmet"
- desc = "Used by highly trained Swat Members."
- icon_state = "swat"
- flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR
- item_state = "swat"
- armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
-
-/obj/item/clothing/head/helmet/thunderdome
- name = "Thunderdome helmet"
- desc = "Let the battle commence!"
- icon_state = "thunderdome"
- flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR
- item_state = "thunderdome"
- armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
-
-
-
-/obj/item/clothing/head/helmet/welding
- name = "welding helmet"
- desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye."
- icon_state = "welding"
- flags = FPRINT | TABLEPASS | SUITSPACE | HEADCOVERSEYES | HEADCOVERSMOUTH
- see_face = 0.0
- item_state = "welding"
- protective_temperature = 1300
- m_amt = 3000
- g_amt = 1000
- var/up = 0
- armor = list(melee = 10, bullet = 5, laser = 10,energy = 5, bomb = 10, bio = 5, rad = 10)
-
-
-
-/obj/item/clothing/head/helmet/that
- name = "Sturdy Top hat"
- desc = "An amish looking, armored top hat."
- icon_state = "tophat"
- item_state = "that"
- flags = FPRINT|TABLEPASS
- armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
-
-/obj/item/clothing/head/helmet/greenbandana
- name = "Green Bandana"
- desc = "A green bandana with some fine nanotech lining."
- icon_state = "greenbandana"
- item_state = "greenbandana"
- flags = FPRINT|TABLEPASS
- armor = list(melee = 5, bullet = 5, laser = 5,energy = 5, bomb = 15, bio = 15, rad = 15)
-
-/obj/item/clothing/head/helmet/riot
- name = "Riot Helmet"
- desc = "A helmet specifically designed to protect against close range attacks."
- icon_state = "riot"
- item_state = "helmet"
- flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES
- armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0)
-
-/obj/item/clothing/head/helmet/cap
- name = "Captain's cap"
- desc = "For irresponsible Captains."
- icon_state = "capcap"
- flags = FPRINT|TABLEPASS|SUITSPACE
- armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
-
-/obj/item/clothing/head/chaplain_hood
- name = "Chaplain's hood"
- desc = "A hood that covers the head. Keeps you warm during the space winters."
- icon_state = "chaplain_hood"
- flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|BLOCKHAIR
-
-/obj/item/clothing/head/hasturhood
- name = "Hastur's Hood"
- desc = "This hood is unspeakably stylish"
- icon_state = "hasturhood"
- flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|BLOCKHAIR
-
-/obj/item/clothing/head/nursehat
- name = "Nurse Hat"
- desc = "For quick identification of trained medical personnel."
- icon_state = "nursehat"
- flags = FPRINT|TABLEPASS
+// HATS. OH MY WHAT A FINE CHAPEAU, GOOD SIR.
+/obj/item/clothing/head
+ name = "head"
+ icon = 'hats.dmi'
+ body_parts_covered = HEAD
+ var/list/allowed = list()
+
+/obj/item/clothing/head/cakehat
+ name = "cakehat"
+ desc = "It is a cakehat!"
+ icon_state = "cake0"
+ var/onfire = 0.0
+ var/status = 0
+ flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES
+ var/fire_resist = T0C+1300 //this is the max temp it can stand before you start to cook. although it might not burn away, you take damage
+
+/obj/item/clothing/head/caphat
+ name = "Captain's hat"
+ icon_state = "captain"
+ desc = "It's good being the king."
+ flags = FPRINT|TABLEPASS
+ item_state = "caphat"
+
+/obj/item/clothing/head/centhat
+ name = "Cent. Comm. hat"
+ icon_state = "centcom"
+ desc = "It's even better to be the emperor."
+ flags = FPRINT|TABLEPASS
+ item_state = "centhat"
+
+/obj/item/clothing/head/deathsquad/beret
+ name = "officer's beret"
+ desc = "An armored beret commonly used by special operations officers."
+ icon_state = "beret_badge"
+ flags = FPRINT|TABLEPASS
+ armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30)
+
+
+/obj/item/clothing/head/powdered_wig
+ name = "powdered wig"
+ desc = "A powdered wig."
+ icon_state = "pwig"
+ item_state = "pwig"
+
+/obj/item/clothing/head/that
+ name = "Top hat"
+ desc = "An amish looking hat."
+ icon_state = "tophat"
+ item_state = "that"
+ flags = FPRINT|TABLEPASS
+
+
+/obj/item/clothing/head/chefhat
+ name = "Chef's Hat"
+ icon_state = "chef"
+ item_state = "chef"
+ desc = "The commander in chef's head wear."
+ flags = FPRINT | TABLEPASS
+
+/obj/item/clothing/head/redcoat
+ name = "Redcoat hat"
+ icon_state = "redcoat"
+ desc = "I guess it's a redhead."
+ flags = FPRINT | TABLEPASS
+
+/obj/item/clothing/head/mailman
+ name = "Mailman Hat"
+ icon_state = "mailman"
+ desc = "Right-on-time mail service head wear."
+ flags = FPRINT | TABLEPASS
+
+/obj/item/clothing/head/plaguedoctorhat
+ name = "Plague doctor's hat"
+ desc = "Once used by Plague doctors. Now useless."
+ icon_state = "plaguedoctor"
+ flags = FPRINT | TABLEPASS
+ permeability_coefficient = 0.01
+
+/obj/item/clothing/head/beret
+ name = "beret"
+ desc = "A beret. A mime's favorite headwear."
+ icon_state = "beret"
+ flags = FPRINT | TABLEPASS
+
+
+// CHUMP HELMETS: COOKING THEM DESTROYS THE CHUMP HELMET SPAWN.
+
+/obj/item/clothing/head/helmet/cueball
+ name = "cueball helmet"
+ desc = "A large, featureless white orb mean to be worn on your head. How do you even see out of this thing?"
+ icon_state = "cueball"
+ flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ item_state="cueball"
+
+/obj/item/clothing/head/secsoft
+ name = "Soft Cap"
+ desc = "A baseball hat in tasteful red."
+ icon_state = "secsoft"
+ flags = FPRINT|TABLEPASS|HEADCOVERSEYES
+ item_state = "helmet"
+
+/obj/item/clothing/head/syndicatefake
+ name = "red space helmet replica"
+ icon_state = "syndicate"
+ item_state = "syndicate"
+ desc = "A plastic replica of a syndicate agent's space helmet, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!"
+ see_face = 0.0
+ flags = FPRINT | TABLEPASS | BLOCKHAIR
+
+/obj/item/clothing/head/chaplain_hood
+ name = "Chaplain's hood"
+ desc = "A hood that covers the head. Keeps you warm during the space winters."
+ icon_state = "chaplain_hood"
+ flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|BLOCKHAIR
+
+/obj/item/clothing/head/hasturhood
+ name = "Hastur's Hood"
+ desc = "This hood is unspeakably stylish"
+ icon_state = "hasturhood"
+ flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|BLOCKHAIR
+
+/obj/item/clothing/head/nursehat
+ name = "Nurse Hat"
+ desc = "For quick identification of trained medical personnel."
+ icon_state = "nursehat"
+ flags = FPRINT|TABLEPASS
diff --git a/code/modules/clothing/head/helmets.dm b/code/modules/clothing/head/helmets.dm
new file mode 100644
index 00000000000..069d8dba8ed
--- /dev/null
+++ b/code/modules/clothing/head/helmets.dm
@@ -0,0 +1,81 @@
+/obj/item/clothing/head/helmet
+ name = "helmet"
+ desc = "Standard Security gear. Protects the head from impacts."
+ icon_state = "helmet"
+ flags = FPRINT | TABLEPASS | SUITSPACE | HEADCOVERSEYES
+ item_state = "helmet"
+ armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0)
+ protective_temperature = 500
+ heat_transfer_coefficient = 0.10
+ flags_inv = HIDEEARS|HIDEEYES
+
+/obj/item/clothing/head/helmet/warden
+ name = "Warden Hat"
+ desc = "A special helmet issued to the Warden of a securiy force. Protects the head from impacts."
+ icon_state = "policehelm"
+ flags_inv = 0
+
+/obj/item/clothing/head/helmet/swat
+ name = "swat helmet"
+ desc = "Used by highly trained Swat Members."
+ icon_state = "swat"
+ flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR
+ item_state = "swat"
+ armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
+
+/obj/item/clothing/head/helmet/thunderdome
+ name = "Thunderdome helmet"
+ desc = "Let the battle commence!"
+ icon_state = "thunderdome"
+ flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR
+ item_state = "thunderdome"
+ armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
+
+/obj/item/clothing/head/helmet/welding
+ name = "welding helmet"
+ desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye."
+ icon_state = "welding"
+ flags = FPRINT | TABLEPASS | SUITSPACE | HEADCOVERSEYES | HEADCOVERSMOUTH
+ see_face = 0.0
+ item_state = "welding"
+ protective_temperature = 1300
+ m_amt = 3000
+ g_amt = 1000
+ var/up = 0
+ armor = list(melee = 10, bullet = 5, laser = 10,energy = 5, bomb = 10, bio = 5, rad = 10)
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
+
+/obj/item/clothing/head/helmet/that
+ name = "Sturdy Top hat"
+ desc = "An amish looking, armored top hat."
+ icon_state = "tophat"
+ item_state = "that"
+ flags = FPRINT|TABLEPASS
+ armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
+ flags_inv = 0
+
+/obj/item/clothing/head/helmet/greenbandana
+ name = "Green Bandana"
+ desc = "A green bandana with some fine nanotech lining."
+ icon_state = "greenbandana"
+ item_state = "greenbandana"
+ flags = FPRINT|TABLEPASS
+ armor = list(melee = 5, bullet = 5, laser = 5,energy = 5, bomb = 15, bio = 15, rad = 15)
+ flags_inv = 0
+
+/obj/item/clothing/head/helmet/riot
+ name = "Riot Helmet"
+ desc = "A helmet specifically designed to protect against close range attacks."
+ icon_state = "riot"
+ item_state = "helmet"
+ flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES
+ armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0)
+ flags_inv = HIDEEARS
+
+/obj/item/clothing/head/helmet/cap
+ name = "Captain's cap"
+ desc = "For irresponsible Captains."
+ icon_state = "capcap"
+ flags = FPRINT|TABLEPASS|SUITSPACE
+ armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
+ flags_inv = 0
diff --git a/code/defines/obj/clothing/jumpsuit.dm b/code/modules/clothing/jumpsuit.dm
similarity index 100%
rename from code/defines/obj/clothing/jumpsuit.dm
rename to code/modules/clothing/jumpsuit.dm
diff --git a/code/defines/obj/clothing/mask.dm b/code/modules/clothing/mask.dm
similarity index 96%
rename from code/defines/obj/clothing/mask.dm
rename to code/modules/clothing/mask.dm
index 5dba832c354..5873d125701 100644
--- a/code/defines/obj/clothing/mask.dm
+++ b/code/modules/clothing/mask.dm
@@ -1,149 +1,149 @@
-// MASK WAS THAT MOVIE WITH THAT GUY WITH THE MESSED UP FACE. WHAT'S HIS NAME . . . JIM CARREY, I THINK.
-
-/obj/item/clothing/mask
- name = "mask"
- icon = 'masks.dmi'
- body_parts_covered = HEAD
- armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
-
-
-/obj/item/clothing/mask/breath
- desc = "A close-fitting mask that can be connected to an air supply."
- name = "Breath Mask"
- icon_state = "breath"
- item_state = "breath"
- flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | MASKCOVERSMOUTH | HALFMASK
- w_class = 2
- protective_temperature = 420
- heat_transfer_coefficient = 0.90
- gas_transfer_coefficient = 0.10
- permeability_coefficient = 0.50
-
-/obj/item/clothing/mask/medical
- desc = "A close-fitting sterile mask that can be connected to an air supply."
- name = "Medical Mask"
- icon_state = "medical"
- item_state = "medical"
- flags = FPRINT|TABLEPASS|SUITSPACE|HEADSPACE|MASKCOVERSMOUTH
- w_class = 3
- protective_temperature = 420
- gas_transfer_coefficient = 0.10
- permeability_coefficient = 0.10
-
-/obj/item/clothing/mask/spiderman
- desc = "A mask of Deadpool!"
- name = "Deadpool mask"
- icon_state = "spiderman"
- item_state = "spiderman"
- flags = FPRINT|TABLEPASS|SUITSPACE|HEADSPACE|MASKCOVERSMOUTH|BLOCKHAIR
- w_class = 3
- protective_temperature = 420
- gas_transfer_coefficient = 0.01
- permeability_coefficient = 0.01
-
-/obj/item/clothing/mask/muzzle
- name = "muzzle"
- desc = "To stop that awful noise."
- icon_state = "muzzle"
- item_state = "muzzle"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
- w_class = 2
- gas_transfer_coefficient = 0.90
-
-/obj/item/clothing/mask/surgical
- name = "Sterile Mask"
- desc = "A sterile mask designed to help prevent the spread of diseases."
- icon_state = "sterile"
- item_state = "sterile"
- w_class = 1
- flags = FPRINT|TABLEPASS|HEADSPACE|MASKCOVERSMOUTH
- gas_transfer_coefficient = 0.90
- permeability_coefficient = 0.05
- armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0)
-
-/obj/item/clothing/mask/gas
- name = "gas mask"
- desc = "A face-covering mask that can be connected to an air supply."
- icon_state = "gas_mask"
- flags = FPRINT|TABLEPASS|SUITSPACE|MASKCOVERSMOUTH|MASKCOVERSEYES
- w_class = 3.0
- see_face = 0.0
- item_state = "gas_mask"
- protective_temperature = 500
- heat_transfer_coefficient = 0.01
- gas_transfer_coefficient = 0.01
- permeability_coefficient = 0.01
-
-/obj/item/clothing/mask/gas/plaguedoctor
- name = "Plague doctor mask"
- desc = "A modernised version of the classic design, this mask will not only filter out toxins but it can also be connected to an air supply."
- icon_state = "plaguedoctor"
- item_state = "gas_mask"
- armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0)
-
-/obj/item/clothing/mask/gas/emergency
- name = "emergency gas mask"
- desc = "A face-covering mask that can be connected to an air supply. For use in emergencies."
- icon_state = "gas_alt"
- item_state = "gas_alt"
-
-/obj/item/clothing/mask/gas/swat
- name = "SWAT Mask"
- desc = "A close-fitting tactical mask that can be connected to an air supply."
- icon_state = "swat"
-
-/obj/item/clothing/mask/gas/syndicate
- name = "syndicate mask"
- desc = "A close-fitting tactical mask that can be connected to an air supply."
- icon_state = "swat"
-
-/obj/item/clothing/mask/gas/voice
- name = "gas mask"
- //desc = "A face-covering mask that can be connected to an air supply. It seems to house some odd electronics."
- icon_state = "gas_mask"
- var/mode = 0// 0==Scouter | 1==Night Vision | 2==Thermal | 3==Meson
- var/voice = "Unknown"
- var/vchange = 0//This didn't do anything before. It now checks if the mask has special functions/N
- origin_tech = "syndicate=4"
-
-/obj/item/clothing/mask/gas/voice/space_ninja
- name = "ninja mask"
- desc = "A close-fitting mask that acts both as an air filter and a post-modern fashion statement."
- icon_state = "s-ninja"
- item_state = "s-ninja_mask"
- vchange = 1
-
-/obj/item/clothing/mask/gas/clown_hat
- name = "clown wig and mask"
- desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
- icon_state = "clown"
- item_state = "clown_hat"
-
-/obj/item/clothing/mask/gas/sexyclown
- name = "sexy clown mask"
- desc = "A feminine clown mask for the dabbling crossdressers or female entertainers."
- icon_state = "sexyclown"
- item_state = "sexyclown"
-
-/obj/item/clothing/mask/gas/mime
- name = "mime mask"
- desc = "The traditional mime's mask. It has an eerie facial posture."
- icon_state = "mime"
- item_state = "mime"
-
-/obj/item/clothing/mask/gas/monkeymask
- name = "monkey mask"
- desc = "A mask used when acting as a monkey."
- icon_state = "monkeymask"
- item_state = "monkeymask"
-
-/obj/item/clothing/mask/gas/sexymime
- name = "sexy mime mask"
- desc = "A traditional female mime's mask."
- icon_state = "sexymime"
- item_state = "sexymime"
-
-/obj/item/clothing/mask/gas/fakemoustache
- name = "fake moustache"
- desc = "Warning: moustache is fake."
+// MASK WAS THAT MOVIE WITH THAT GUY WITH THE MESSED UP FACE. WHAT'S HIS NAME . . . JIM CARREY, I THINK.
+
+/obj/item/clothing/mask
+ name = "mask"
+ icon = 'masks.dmi'
+ body_parts_covered = HEAD
+ armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
+
+
+/obj/item/clothing/mask/breath
+ desc = "A close-fitting mask that can be connected to an air supply."
+ name = "Breath Mask"
+ icon_state = "breath"
+ item_state = "breath"
+ flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | MASKCOVERSMOUTH | HALFMASK
+ w_class = 2
+ protective_temperature = 420
+ heat_transfer_coefficient = 0.90
+ gas_transfer_coefficient = 0.10
+ permeability_coefficient = 0.50
+
+/obj/item/clothing/mask/medical
+ desc = "A close-fitting sterile mask that can be connected to an air supply."
+ name = "Medical Mask"
+ icon_state = "medical"
+ item_state = "medical"
+ flags = FPRINT|TABLEPASS|SUITSPACE|HEADSPACE|MASKCOVERSMOUTH
+ w_class = 3
+ protective_temperature = 420
+ gas_transfer_coefficient = 0.10
+ permeability_coefficient = 0.10
+
+/obj/item/clothing/mask/spiderman
+ desc = "A mask of Deadpool!"
+ name = "Deadpool mask"
+ icon_state = "spiderman"
+ item_state = "spiderman"
+ flags = FPRINT|TABLEPASS|SUITSPACE|HEADSPACE|MASKCOVERSMOUTH|BLOCKHAIR
+ w_class = 3
+ protective_temperature = 420
+ gas_transfer_coefficient = 0.01
+ permeability_coefficient = 0.01
+
+/obj/item/clothing/mask/muzzle
+ name = "muzzle"
+ desc = "To stop that awful noise."
+ icon_state = "muzzle"
+ item_state = "muzzle"
+ flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ w_class = 2
+ gas_transfer_coefficient = 0.90
+
+/obj/item/clothing/mask/surgical
+ name = "Sterile Mask"
+ desc = "A sterile mask designed to help prevent the spread of diseases."
+ icon_state = "sterile"
+ item_state = "sterile"
+ w_class = 1
+ flags = FPRINT|TABLEPASS|HEADSPACE|MASKCOVERSMOUTH
+ gas_transfer_coefficient = 0.90
+ permeability_coefficient = 0.05
+ armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0)
+
+/obj/item/clothing/mask/gas
+ name = "gas mask"
+ desc = "A face-covering mask that can be connected to an air supply."
+ icon_state = "gas_mask"
+ flags = FPRINT|TABLEPASS|SUITSPACE|MASKCOVERSMOUTH|MASKCOVERSEYES
+ w_class = 3.0
+ see_face = 0.0
+ item_state = "gas_mask"
+ protective_temperature = 500
+ heat_transfer_coefficient = 0.01
+ gas_transfer_coefficient = 0.01
+ permeability_coefficient = 0.01
+
+/obj/item/clothing/mask/gas/plaguedoctor
+ name = "Plague doctor mask"
+ desc = "A modernised version of the classic design, this mask will not only filter out toxins but it can also be connected to an air supply."
+ icon_state = "plaguedoctor"
+ item_state = "gas_mask"
+ armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0)
+
+/obj/item/clothing/mask/gas/emergency
+ name = "emergency gas mask"
+ desc = "A face-covering mask that can be connected to an air supply. For use in emergencies."
+ icon_state = "gas_alt"
+ item_state = "gas_alt"
+
+/obj/item/clothing/mask/gas/swat
+ name = "SWAT Mask"
+ desc = "A close-fitting tactical mask that can be connected to an air supply."
+ icon_state = "swat"
+
+/obj/item/clothing/mask/gas/syndicate
+ name = "syndicate mask"
+ desc = "A close-fitting tactical mask that can be connected to an air supply."
+ icon_state = "swat"
+
+/obj/item/clothing/mask/gas/voice
+ name = "gas mask"
+ //desc = "A face-covering mask that can be connected to an air supply. It seems to house some odd electronics."
+ icon_state = "gas_mask"
+ var/mode = 0// 0==Scouter | 1==Night Vision | 2==Thermal | 3==Meson
+ var/voice = "Unknown"
+ var/vchange = 0//This didn't do anything before. It now checks if the mask has special functions/N
+ origin_tech = "syndicate=4"
+
+/obj/item/clothing/mask/gas/voice/space_ninja
+ name = "ninja mask"
+ desc = "A close-fitting mask that acts both as an air filter and a post-modern fashion statement."
+ icon_state = "s-ninja"
+ item_state = "s-ninja_mask"
+ vchange = 1
+
+/obj/item/clothing/mask/gas/clown_hat
+ name = "clown wig and mask"
+ desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
+ icon_state = "clown"
+ item_state = "clown_hat"
+
+/obj/item/clothing/mask/gas/sexyclown
+ name = "sexy clown mask"
+ desc = "A feminine clown mask for the dabbling crossdressers or female entertainers."
+ icon_state = "sexyclown"
+ item_state = "sexyclown"
+
+/obj/item/clothing/mask/gas/mime
+ name = "mime mask"
+ desc = "The traditional mime's mask. It has an eerie facial posture."
+ icon_state = "mime"
+ item_state = "mime"
+
+/obj/item/clothing/mask/gas/monkeymask
+ name = "monkey mask"
+ desc = "A mask used when acting as a monkey."
+ icon_state = "monkeymask"
+ item_state = "monkeymask"
+
+/obj/item/clothing/mask/gas/sexymime
+ name = "sexy mime mask"
+ desc = "A traditional female mime's mask."
+ icon_state = "sexymime"
+ item_state = "sexymime"
+
+/obj/item/clothing/mask/gas/fakemoustache
+ name = "fake moustache"
+ desc = "Warning: moustache is fake."
icon_state = "fake-moustache"
\ No newline at end of file
diff --git a/code/defines/obj/clothing/shoes.dm b/code/modules/clothing/shoes.dm
similarity index 96%
rename from code/defines/obj/clothing/shoes.dm
rename to code/modules/clothing/shoes.dm
index eb873472f7a..d83cecfa01b 100644
--- a/code/defines/obj/clothing/shoes.dm
+++ b/code/modules/clothing/shoes.dm
@@ -1,162 +1,162 @@
-// OMG SHOES
-
-/obj/item/clothing/shoes
- name = "shoes"
- icon = 'shoes.dmi'
- desc = "Comfortable-looking shoes."
-
- body_parts_covered = FEET
-
- protective_temperature = 500
- heat_transfer_coefficient = 0.10
- permeability_coefficient = 0.50
- slowdown = SHOES_SLOWDOWN
- armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
-
-
-/obj/item/clothing/shoes/syndigaloshes
- desc = "A pair of brown shoes. They seem to have extra grip."
- name = "Brown Shoes"
- icon_state = "brown"
- item_state = "brown"
- permeability_coefficient = 0.05
- flags = NOSLIP
- origin_tech = "syndicate=3"
- var/list/clothing_choices = list()
-
-/obj/item/clothing/shoes/syndigaloshes/all
-
-/obj/item/clothing/shoes/black
- name = "Black Shoes"
- icon_state = "black"
- color = "black"
- desc = "A pair of black shoes."
-
- redcoat
- color = "redcoat" //Exists for washing machines. Is not different from black shoes in any way.
-
-/obj/item/clothing/shoes/brown
- name = "Brown Shoes"
- desc = "A pair of brown shoes."
- icon_state = "brown"
- color = "brown"
-
- captain
- color = "captain" //Exists for washing machines. Is not different from brown shoes in any way.
- hop
- color = "hop" //Exists for washing machines. Is not different from brown shoes in any way.
- ce
- color = "chief" //Exists for washing machines. Is not different from brown shoes in any way.
- rd
- color = "director" //Exists for washing machines. Is not different from brown shoes in any way.
- cmo
- color = "medical" //Exists for washing machines. Is not different from brown shoes in any way.
- cmo
- color = "cargo" //Exists for washing machines. Is not different from brown shoes in any way.
-
-/obj/item/clothing/shoes/blue
- name = "Blue Shoes"
- icon_state = "blue"
- color = "blue"
-
-/obj/item/clothing/shoes/green
- name = "Green Shoes"
- icon_state = "green"
- color = "green"
-
-/obj/item/clothing/shoes/yellow
- name = "Yellow Shoes"
- icon_state = "yellow"
- color = "yellow"
-
-/obj/item/clothing/shoes/mime
- name = "Mime Shoes"
- icon_state = "mime"
- color = "mime"
-
-/obj/item/clothing/shoes/purple
- name = "Purple Shoes"
- icon_state = "purple"
- color = "purple"
-
-/obj/item/clothing/shoes/brown
- name = "Brown Shoes"
- icon_state = "brown"
- color = "brown"
-
-/obj/item/clothing/shoes/orange
- name = "Orange Shoes"
- icon_state = "orange"
- var/chained = 0
- color = "orange"
-
-/obj/item/clothing/shoes/swat
- name = "SWAT shoes"
- desc = "When you want to turn up the heat."
- icon_state = "swat"
- armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
- flags = NOSLIP
-
-/obj/item/clothing/shoes/combat //Basically SWAT shoes combined with galoshes.
- name = "combat boots"
- desc = "When you REALLY want to turn up the heat"
- icon_state = "swat"
- armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
- flags = NOSLIP
-
-/obj/item/clothing/shoes/space_ninja
- name = "ninja shoes"
- desc = "A pair of running shoes. Excellent for running and even better for smashing skulls."
- icon_state = "s-ninja"
- protective_temperature = 700
- permeability_coefficient = 0.01
- flags = NOSLIP
- armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
-
-/obj/item/clothing/shoes/white
- name = "White Shoes"
- icon_state = "white"
- permeability_coefficient = 0.25
- color = "white"
-
-/obj/item/clothing/shoes/sandal
- desc = "A pair of rather plain, wooden sandals."
- name = "sandals"
- icon_state = "wizard"
-
-/obj/item/clothing/shoes/sandal/marisa
- desc = "A pair of magic, black shoes."
- name = "Magic Shoes"
- icon_state = "black"
-
-/obj/item/clothing/shoes/galoshes
- desc = "Rubber boots"
- name = "galoshes"
- icon_state = "galoshes"
- permeability_coefficient = 0.05
- flags = NOSLIP
- slowdown = SHOES_SLOWDOWN+1
-
-/obj/item/clothing/shoes/magboots
- desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle."
- name = "magboots"
- icon_state = "magboots0"
- protective_temperature = 800
- heat_transfer_coefficient = 0.01
- var/magpulse = 0
-// flags = NOSLIP //disabled by default
-
-/obj/item/clothing/shoes/clown_shoes
- desc = "The prankster's standard-issue clowning shoes. Damn they're huge!"
- name = "clown shoes"
- icon_state = "clown"
- item_state = "clown_shoes"
- slowdown = SHOES_SLOWDOWN+1
- color = "clown"
-
-/obj/item/clothing/shoes/jackboots
- name = "Jackboots"
- desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
- icon_state = "jackboots"
- item_state = "jackboots"
+// OMG SHOES
+
+/obj/item/clothing/shoes
+ name = "shoes"
+ icon = 'shoes.dmi'
+ desc = "Comfortable-looking shoes."
+
+ body_parts_covered = FEET
+
+ protective_temperature = 500
+ heat_transfer_coefficient = 0.10
+ permeability_coefficient = 0.50
+ slowdown = SHOES_SLOWDOWN
+ armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
+
+
+/obj/item/clothing/shoes/syndigaloshes
+ desc = "A pair of brown shoes. They seem to have extra grip."
+ name = "Brown Shoes"
+ icon_state = "brown"
+ item_state = "brown"
+ permeability_coefficient = 0.05
+ flags = NOSLIP
+ origin_tech = "syndicate=3"
+ var/list/clothing_choices = list()
+
+/obj/item/clothing/shoes/syndigaloshes/all
+
+/obj/item/clothing/shoes/black
+ name = "Black Shoes"
+ icon_state = "black"
+ color = "black"
+ desc = "A pair of black shoes."
+
+ redcoat
+ color = "redcoat" //Exists for washing machines. Is not different from black shoes in any way.
+
+/obj/item/clothing/shoes/brown
+ name = "Brown Shoes"
+ desc = "A pair of brown shoes."
+ icon_state = "brown"
+ color = "brown"
+
+ captain
+ color = "captain" //Exists for washing machines. Is not different from brown shoes in any way.
+ hop
+ color = "hop" //Exists for washing machines. Is not different from brown shoes in any way.
+ ce
+ color = "chief" //Exists for washing machines. Is not different from brown shoes in any way.
+ rd
+ color = "director" //Exists for washing machines. Is not different from brown shoes in any way.
+ cmo
+ color = "medical" //Exists for washing machines. Is not different from brown shoes in any way.
+ cmo
+ color = "cargo" //Exists for washing machines. Is not different from brown shoes in any way.
+
+/obj/item/clothing/shoes/blue
+ name = "Blue Shoes"
+ icon_state = "blue"
+ color = "blue"
+
+/obj/item/clothing/shoes/green
+ name = "Green Shoes"
+ icon_state = "green"
+ color = "green"
+
+/obj/item/clothing/shoes/yellow
+ name = "Yellow Shoes"
+ icon_state = "yellow"
+ color = "yellow"
+
+/obj/item/clothing/shoes/mime
+ name = "Mime Shoes"
+ icon_state = "mime"
+ color = "mime"
+
+/obj/item/clothing/shoes/purple
+ name = "Purple Shoes"
+ icon_state = "purple"
+ color = "purple"
+
+/obj/item/clothing/shoes/brown
+ name = "Brown Shoes"
+ icon_state = "brown"
+ color = "brown"
+
+/obj/item/clothing/shoes/orange
+ name = "Orange Shoes"
+ icon_state = "orange"
+ var/chained = 0
+ color = "orange"
+
+/obj/item/clothing/shoes/swat
+ name = "SWAT shoes"
+ desc = "When you want to turn up the heat."
+ icon_state = "swat"
+ armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
+ flags = NOSLIP
+
+/obj/item/clothing/shoes/combat //Basically SWAT shoes combined with galoshes.
+ name = "combat boots"
+ desc = "When you REALLY want to turn up the heat"
+ icon_state = "swat"
+ armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
+ flags = NOSLIP
+
+/obj/item/clothing/shoes/space_ninja
+ name = "ninja shoes"
+ desc = "A pair of running shoes. Excellent for running and even better for smashing skulls."
+ icon_state = "s-ninja"
+ protective_temperature = 700
+ permeability_coefficient = 0.01
+ flags = NOSLIP
+ armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
+
+/obj/item/clothing/shoes/white
+ name = "White Shoes"
+ icon_state = "white"
+ permeability_coefficient = 0.25
+ color = "white"
+
+/obj/item/clothing/shoes/sandal
+ desc = "A pair of rather plain, wooden sandals."
+ name = "sandals"
+ icon_state = "wizard"
+
+/obj/item/clothing/shoes/sandal/marisa
+ desc = "A pair of magic, black shoes."
+ name = "Magic Shoes"
+ icon_state = "black"
+
+/obj/item/clothing/shoes/galoshes
+ desc = "Rubber boots"
+ name = "galoshes"
+ icon_state = "galoshes"
+ permeability_coefficient = 0.05
+ flags = NOSLIP
+ slowdown = SHOES_SLOWDOWN+1
+
+/obj/item/clothing/shoes/magboots
+ desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle."
+ name = "magboots"
+ icon_state = "magboots0"
+ protective_temperature = 800
+ heat_transfer_coefficient = 0.01
+ var/magpulse = 0
+// flags = NOSLIP //disabled by default
+
+/obj/item/clothing/shoes/clown_shoes
+ desc = "The prankster's standard-issue clowning shoes. Damn they're huge!"
+ name = "clown shoes"
+ icon_state = "clown"
+ item_state = "clown_shoes"
+ slowdown = SHOES_SLOWDOWN+1
+ color = "clown"
+
+/obj/item/clothing/shoes/jackboots
+ name = "Jackboots"
+ desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
+ icon_state = "jackboots"
+ item_state = "jackboots"
color = "hosred"
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuit.dm b/code/modules/clothing/spacesuit.dm
index bc704bf2e30..b2236db28a0 100644
--- a/code/modules/clothing/spacesuit.dm
+++ b/code/modules/clothing/spacesuit.dm
@@ -13,6 +13,7 @@ Space suit parts
item_state = "space"
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
/obj/item/clothing/suit/space
@@ -30,4 +31,5 @@ Space suit parts
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
slowdown = 3
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
diff --git a/code/modules/clothing/spacesuits/captain.dm b/code/modules/clothing/spacesuits/captain.dm
index 9569ff7b8de..720db8724c6 100644
--- a/code/modules/clothing/spacesuits/captain.dm
+++ b/code/modules/clothing/spacesuits/captain.dm
@@ -24,3 +24,4 @@
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
slowdown = 1.5
armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 133d876d65e..05f5c5cf26c 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -2,23 +2,7 @@
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/policetaperoll)
body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags = FPRINT | TABLEPASS
-
-
-/obj/item/clothing/head/helmet
- name = "helmet"
- desc = "Standard Security gear. Protects the head from impacts."
- icon_state = "helmet"
- flags = FPRINT | TABLEPASS | SUITSPACE | HEADCOVERSEYES
- item_state = "helmet"
- armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0)
- protective_temperature = 500
- heat_transfer_coefficient = 0.10
-
-
-/obj/item/clothing/head/helmet/warden
- name = "Warden Hat"
- desc = "A special helmet issued to the Warden of a securiy force. Protects the head from impacts."
- icon_state = "policehelm"
+ flags_inv = HIDEJUMPSUIT
/obj/item/clothing/suit/armor/vest
@@ -38,6 +22,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
slowdown = 1
armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/armor/bulletproof
@@ -63,6 +48,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/policetaperoll)
+ flags_inv = 0
/obj/item/clothing/suit/armor/reactive
name = "Reactive Teleport Armor"
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
index ca81db8a167..95cbc7f28bf 100644
--- a/code/modules/clothing/suits/bio.dm
+++ b/code/modules/clothing/suits/bio.dm
@@ -5,6 +5,7 @@
permeability_coefficient = 0.01
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 10)
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
/obj/item/clothing/suit/bio_suit
name = "bio suit"
@@ -20,6 +21,7 @@
slowdown = 1.0
allowed = list(/obj/item/weapon/tank/emergency_oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/head/bio_hood/general
diff --git a/code/modules/clothing/suits/bomb.dm b/code/modules/clothing/suits/bomb.dm
index 9e341caec43..07329b71fbe 100644
--- a/code/modules/clothing/suits/bomb.dm
+++ b/code/modules/clothing/suits/bomb.dm
@@ -4,6 +4,7 @@
icon_state = "bombsuit"
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
/obj/item/clothing/suit/bomb_suit
name = "bomb suit"
@@ -18,6 +19,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
slowdown = 2
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
+ flags_inv = HIDEJUMPSUIT
/obj/item/clothing/head/bomb_hood/security
diff --git a/code/modules/clothing/suits/fire.dm b/code/modules/clothing/suits/fire.dm
index 9656b91e866..42dc200379a 100644
--- a/code/modules/clothing/suits/fire.dm
+++ b/code/modules/clothing/suits/fire.dm
@@ -11,6 +11,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/extinguisher)
slowdown = 1.0
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/fire/firefighter
@@ -50,3 +51,4 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen)
slowdown = 1.5
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
+ flags_inv = HIDEJUMPSUIT
diff --git a/code/modules/clothing/suits/heavy.dm b/code/modules/clothing/suits/heavy.dm
index dfe197e4c6f..3ff5743048a 100644
--- a/code/modules/clothing/suits/heavy.dm
+++ b/code/modules/clothing/suits/heavy.dm
@@ -7,6 +7,7 @@
w_class = 4//bulky item
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/armor/heavy
name = "heavy armor"
@@ -17,9 +18,11 @@
gas_transfer_coefficient = 0.90
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
slowdown = 3
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/armor/tdome
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/armor/tdome/red
name = "Thunderdome suit (red)"
@@ -47,6 +50,7 @@
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
slowdown = 1
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 0, rad = 0)
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/storage/officer
name = "officer jacket"
@@ -62,6 +66,7 @@
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
slowdown = 1
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 0, rad = 0)
+ flags_inv = 0
/obj/item/clothing/suit/storage/armoredundersuit
name = "armoured undersuit"
@@ -72,5 +77,6 @@
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/policetaperoll)
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
+ flags_inv = 0
diff --git a/code/modules/clothing/suits/hos.dm b/code/modules/clothing/suits/hos.dm
index eb3acd33986..7c425a7afdd 100644
--- a/code/modules/clothing/suits/hos.dm
+++ b/code/modules/clothing/suits/hos.dm
@@ -1,10 +1,10 @@
-
/obj/item/clothing/head/helmet/HoS
name = "Head of Security Hat"
desc = "The hat of the Head of Security. For showing the officers who's in charge."
icon_state = "hoscap"
flags = FPRINT | TABLEPASS | SUITSPACE | HEADCOVERSEYES
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
+ flags_inv = HIDEEARS
/obj/item/clothing/head/helmet/HoS/dermal
name = "Dermal Armour Patch"
@@ -19,6 +19,7 @@
item_state = "hos"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
+ flags_inv = HIDEJUMPSUIT
/obj/item/clothing/suit/armor/hos/jensen
@@ -26,3 +27,4 @@
desc = "A trenchoat augmented with a special alloy for some protection and style"
icon_state = "jensencoat"
item_state = "jensencoat"
+ flags_inv = 0
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 2d7b0996b54..dec43bde75f 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -4,6 +4,7 @@
icon_state = "straight_jacket"
item_state = "straight_jacket"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/storage/wcoat
@@ -66,6 +67,7 @@
w_class = 3
flags = FPRINT | TABLEPASS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy)
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/storage/captunic
@@ -74,6 +76,7 @@
icon_state = "captunic"
item_state = "bio_suit"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
+ flags_inv = HIDEJUMPSUIT
/obj/item/clothing/suit/nun
@@ -82,6 +85,7 @@
icon_state = "nun"
item_state = "nun"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS
+ flags_inv = HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/monk
name = "monk's robe"
@@ -104,6 +108,7 @@
icon_state = "hastur"
item_state = "hastur"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/imperium_monk
@@ -112,6 +117,7 @@
icon_state = "imperium_monk"
item_state = "imperium_monk"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
+ flags_inv = HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/chickensuit
@@ -120,6 +126,7 @@
icon_state = "chickensuit"
item_state = "chickensuit"
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HEAD
+ flags_inv = HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/monkeysuit
@@ -128,6 +135,7 @@
icon_state = "monkeysuit"
item_state = "monkeysuit"
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HANDS
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
/obj/item/clothing/suit/holidaypriest
@@ -136,5 +144,6 @@
icon_state = "holidaypriest"
item_state = "holidaypriest"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
diff --git a/code/modules/clothing/suits/robe.dm b/code/modules/clothing/suits/robe.dm
index 7f9cd4d9879..1cc084da0f6 100644
--- a/code/modules/clothing/suits/robe.dm
+++ b/code/modules/clothing/suits/robe.dm
@@ -37,6 +37,7 @@
body_parts_covered = FULL_BODY //It's magic, I ain't gotta explain shit. --NEO
armor = list(melee = 30, bullet = 20, laser = 20,energy = 20, bomb = 20, bio = 20, rad = 20)
allowed = list(/obj/item/weapon/teleportation_scroll)
+ flags_inv = HIDEJUMPSUIT
/obj/item/clothing/suit/wizrobe/red
diff --git a/code/modules/clothing/uniforms/lawyer.dm b/code/modules/clothing/uniforms/lawyer.dm
index 2fe4d31263e..426e3e51e1e 100644
--- a/code/modules/clothing/uniforms/lawyer.dm
+++ b/code/modules/clothing/uniforms/lawyer.dm
@@ -5,6 +5,7 @@
desc = "Slick threads."
name = "Lawyer suit"
flags = FPRINT | TABLEPASS
+ flags_inv = HIDEJUMPSUIT
/obj/item/clothing/under/lawyer/black
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 78a3c7f2b8b..cc75597ada4 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -1,210 +1,475 @@
/mob/living/carbon/human/examine()
- set src in view()
+ set src in oview()
- usr << "\blue *---------*"
+ if(!usr || !src) return
+ if(((usr.disabilities & 128) || usr.blinded || usr.stat) && !(istype(usr,/mob/dead/observer/)))
+ usr << "Something is there but you can't see it."
+ return
- usr << "\blue This is \icon[src.icon] [src.name]!"
-
- // crappy hack because you can't do \his[src] etc
- var/t_his = "its"
- var/t_him = "it"
- if (src.gender == MALE)
- t_his = "his"
- t_him = "him"
- else if (src.gender == FEMALE)
- t_his = "her"
- t_him = "her"
-
- if (src.w_uniform)
- if (src.w_uniform.blood_DNA)
- usr << "\red [src.name] is wearing a[src.w_uniform.blood_DNA ? " bloody " : " "] \icon[src.w_uniform] [src.w_uniform.name]!"
- else
- usr << "\blue [src.name] is wearing a \icon[src.w_uniform] [src.w_uniform.name]."
-
- if (src.handcuffed)
- usr << "\blue [src.name] is \icon[src.handcuffed] handcuffed!"
+ var/skipgloves = 0
+ var/skipsuitstorage = 0
+ var/skipjumpsuit = 0
+ var/skipshoes = 0
+ var/skipmask = 0
+ var/skipears = 0
+ var/skipeyes = 0
+ //exosuits and helmets obscure our view and stuff.
if (src.wear_suit)
- if (src.wear_suit.blood_DNA)
- usr << "\red [src.name] has a[src.wear_suit.blood_DNA ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name] on!"
- else
- usr << "\blue [src.name] has a \icon[src.wear_suit] [src.wear_suit.name] on."
-
- if (src.l_ear)
- usr << "\blue [src.name] has a \icon[src.l_ear] [src.l_ear.name] on [t_his] left ear."
-
- if (src.r_ear)
- usr << "\blue [src.name] has a \icon[src.r_ear] [src.r_ear.name] on [t_his] right ear."
-
- if (src.wear_mask)
- if (src.wear_mask.blood_DNA)
- usr << "\red [src.name] has a[src.wear_mask.blood_DNA ? " bloody " : " "] \icon[src.wear_mask] [src.wear_mask.name] on [t_his] face!"
- else
- usr << "\blue [src.name] has a \icon[src.wear_mask] [src.wear_mask.name] on [t_his] face."
+ skipgloves = src.wear_suit.flags_inv & HIDEGLOVES
+ skipsuitstorage = src.wear_suit.flags_inv & HIDESUITSTORAGE
+ skipjumpsuit = src.wear_suit.flags_inv & HIDEJUMPSUIT
+ skipshoes = src.wear_suit.flags_inv & HIDESHOES
if (src.head)
- usr << "\blue [src.name] is wearing a[src.head.blood_DNA ? " bloody " : " "] \icon[src.head] [src.head.name] on [t_his] head!"
+ skipmask = src.head.flags_inv & HIDEMASK
+ skipeyes = src.head.flags_inv & HIDEEYES
+ skipears = src.head.flags_inv & HIDEEARS
- if (src.glasses)
- usr << "\blue [src.name] is wearing a pair of [src.glasses.blood_DNA ? " bloody " : " "] \icon[src.glasses] [src.glasses.name]!"
+ // crappy hacks because you can't do \his[src] etc. I'm sorry this proc is so unreadable, blame the text macros :<
+ var/t_He = "It" //capitalised for use at the start of each line.
+ var/t_his = "its"
+ var/t_him = "it"
+ var/t_has = "has"
+ var/t_is = "is"
+ var/msg = "*---------*\nThis is "
+ if( skipjumpsuit && (wear_mask || skipmask) ) //big suits/masks make it hard to tell their gender
+ t_He = "They"
+ t_his = "their"
+ t_him = "them"
+ t_has = "have"
+ t_is = "are"
+ else
+ if(src.icon)
+ msg += "\icon[src.icon] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated
+ switch(src.gender)
+ if(MALE)
+ t_He = "He"
+ t_his = "his"
+ t_him = "him"
+ if(FEMALE)
+ t_He = "She"
+ t_his = "her"
+ t_him = "her"
+ msg += "\a [src]!\n"
+
+ //uniform
+ if (src.w_uniform && !skipjumpsuit)
+ if (src.w_uniform.blood_DNA)
+ msg += "[t_He] [t_is] wearing \icon[src.w_uniform] [src.w_uniform.gender==PLURAL?"some":"a"] blood-stained [src.w_uniform.name]!\n"
+ else
+ msg += "[t_He] [t_is] wearing \icon[src.w_uniform] \a [src.w_uniform].\n"
+
+ //head
+ if (src.head)
+ if (src.head.blood_DNA)
+ msg += "[t_He] [t_is] wearing \icon[src.head] [src.head.gender==PLURAL?"some":"a"] blood-stained [src.head.name] on [t_his] head!\n"
+ else
+ msg += "[t_He] [t_is] wearing \icon[src.head] \a [src.head] on [t_his] head.\n"
+
+ //suit/armour
+ if (src.wear_suit)
+ if (src.wear_suit.blood_DNA)
+ msg += "[t_He] [t_is] wearing \icon[src.wear_suit] [src.wear_suit.gender==PLURAL?"some":"a"] blood-stained [src.wear_suit.name]!\n"
+ else
+ msg += "[t_He] [t_is] wearing \icon[src.wear_suit] \a [src.wear_suit].\n"
+
+ //suit/armour storage
+ if(src.s_store && !skipsuitstorage)
+ if(src.s_store.blood_DNA)
+ msg += "[t_He] [t_is] carrying \icon[src.s_store] [src.s_store.gender==PLURAL?"some":"a"] blood-stained [src.s_store.name] on [t_his] [src.wear_suit.name]!\n"
+ else
+ msg += "[t_He] [t_is] carrying \icon[src.s_store] \a [src.s_store] on [t_his] [src.wear_suit.name].\n"
+
+ //back
+ if (src.back)
+ if (src.back.blood_DNA)
+ msg += "[t_He] [t_has] \icon[src.back] [src.back.gender==PLURAL?"some":"a"] blood-stained [src.back] on [t_his] back.\n"
+ else
+ msg += "[t_He] [t_has] \icon[src.back] \a [src.back] on [t_his] back.\n"
+
+ //left hand
if (src.l_hand)
if (src.l_hand.blood_DNA)
- usr << "\red [src.name] has a[src.l_hand.blood_DNA ? " bloody " : " "] \icon[src.l_hand] [src.l_hand.name] in [t_his] left hand!"
+ msg += "[t_He] [t_is] holding \icon[src.l_hand] [src.l_hand.gender==PLURAL?"some":"a"] blood-stained [src.l_hand.name] in [t_his] left hand!\n"
else
- usr << "\blue [src.name] has a \icon[src.l_hand] [src.l_hand.name] in [t_his] left hand."
+ msg += "[t_He] [t_is] holding \icon[src.l_hand] \a [src.l_hand] in [t_his] left hand.\n"
+ //right hand
if (src.r_hand)
if (src.r_hand.blood_DNA)
- usr << "\red [src.name] has a[src.r_hand.blood_DNA ? " bloody " : " "] \icon[src.r_hand] [src.r_hand.name] in [t_his] right hand!"
+ msg += "[t_He] [t_is] holding \icon[src.r_hand] [src.r_hand.gender==PLURAL?"some":"a"] blood-stained [src.r_hand.name] in [t_his] right hand!\n"
else
- usr << "\blue [src.name] has a \icon[src.r_hand] [src.r_hand.name] in [t_his] right hand."
+ msg += "[t_He] [t_is] holding \icon[src.r_hand] \a [src.r_hand] in [t_his] right hand.\n"
+ //gloves
+ if (src.gloves && !skipgloves)
+ if (src.gloves.blood_DNA)
+ msg += "[t_He] [t_has] \icon[src.gloves] [src.gloves.gender==PLURAL?"some":"a"] blood-stained [src.gloves.name] on [t_his] hands!\n"
+ else
+ msg += "[t_He] [t_has] \icon[src.gloves] \a [src.gloves] on [t_his] hands.\n"
+ else if (src.blood_DNA)
+ msg += "[t_He] [t_has] blood-stained hands!\n"
+
+ //handcuffed?
+ if (src.handcuffed)
+ msg += "[t_He] [t_is] \icon[src.handcuffed] handcuffed!\n"
+
+ //belt
if (src.belt)
if (src.belt.blood_DNA)
- usr << "\red [src.name] has a[src.belt.blood_DNA ? " bloody " : " "] \icon[src.belt] [src.belt.name] on [t_his] belt!"
+ msg += "[t_He] [t_has] \icon[src.belt] [src.belt.gender==PLURAL?"some":"a"] blood-stained [src.belt.name] about [t_his] waist!\n"
else
- usr << "\blue [src.name] has a \icon[src.belt] [src.belt.name] on [t_his] belt."
- if(src.s_store)
- if(src.s_store.blood_DNA)
- usr << "\red [src.name] has a[src.s_store.blood_DNA ? " bloody " : " "] \icon[src.s_store] [src.s_store.name] on [t_his][src.wear_suit.blood_DNA ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name]!"
+ msg += "[t_He] [t_has] \icon[src.belt] \a [src.belt] about [t_his] waist.\n"
+
+ //shoes
+ if (src.shoes && !skipshoes)
+ if(src.shoes.blood_DNA)
+ msg += "[t_He] [t_is] wearing \icon[src.shoes] [src.shoes.gender==PLURAL?"some":"a"] blood-stained [src.shoes.name] on [t_his] feet!\n"
else
- usr << "\blue [src.name] has a \icon[src.s_store] [src.s_store.name] on [t_his][src.wear_suit.blood_DNA ? " bloody " : " "] \icon[src.wear_suit] [src.wear_suit.name]."
- if (src.shoes)
- usr << "[src.shoes.blood_DNA ? "\red" : "\blue"] [src.name] has a[src.shoes.blood_DNA ? " bloody " : " "] \icon[src.shoes] [src.shoes.name] on [t_his] feet."
+ msg += "[t_He] [t_is] wearing \icon[src.shoes] \a [src.shoes] on [t_his] feet.\n"
-
- if (src.gloves)
- if (src.gloves.blood_DNA)
- usr << "\red [src.name] has bloody \icon[src.gloves] [src.gloves.name] on [t_his] hands!"
+ //mask
+ if (src.wear_mask && !skipmask)
+ if (src.wear_mask.blood_DNA)
+ msg += "[t_He] [t_has] \icon[src.wear_mask] [src.wear_mask.gender==PLURAL?"some":"a"] blood-stained [src.wear_mask.name] on [t_his] face!\n"
else
- usr << "\blue [src.name] has \icon[src.gloves] [src.gloves.name] on [t_his] hands."
- else if (src.blood_DNA)
- usr << "\red [src.name] has bloody hands!"
+ msg += "[t_He] [t_has] \icon[src.wear_mask] \a [src.wear_mask] on [t_his] face.\n"
- if (src.back)
- usr << "\blue [src.name] has a \icon[src.back] [src.back.name] on [t_his] back."
+ //eyes
+ if (src.glasses && !skipeyes)
+ if (src.glasses.blood_DNA)
+ msg += "[t_He] [t_has] \icon[src.glasses] [src.glasses.gender==PLURAL?"some":"a"] blood-stained [src.glasses] covering [t_his] eyes!\n"
+ else
+ msg += "[t_He] [t_has] \icon[src.glasses] \a [src.glasses] covering [t_his] eyes.\n"
+ if (src.l_ear && !skipears)
+ msg += "[t_He] [t_has] has a \icon[src.l_ear] [src.l_ear.name] on [t_his] left ear.\n"
+
+ if (src.r_ear && !skipears)
+ msg += "[t_He] [t_has] has a \icon[src.r_ear] [src.r_ear.name] on [t_his] right ear.\n"
+
+ //ID
if (src.wear_id)
var/id
- var/photo = 0
- if(istype(src:wear_id, /obj/item/device/pda))
- var/obj/item/device/pda/pda = src:wear_id
+ if(istype(src.wear_id, /obj/item/device/pda))
+ var/obj/item/device/pda/pda = src.wear_id
id = pda.owner
+ else if(istype(src.wear_id, /obj/item/weapon/card/id)) //just in case something other than a PDA/ID card somehow gets in the ID slot :[
+ var/obj/item/weapon/card/id/idcard = src.wear_id
+ id = idcard.registered_name
+ if (id && (id != src.real_name) && (get_dist(src, usr) <= 1) && prob(10))
+ msg += "[t_He] [t_is] wearing \icon[src.wear_id] \a [src.wear_id] yet something doesn't seem right...\n"
else
- id = src.wear_id.registered_name
- if (src.wear_id.PHOTO)
- photo = 1
- if (id != src.real_name && in_range(src, usr))
- if (photo)
- usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] with a photo yet doesn't seem to be that person!!!"
- else
- usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] yet doesn't seem to be that person!!!"
- else
- if (photo)
- usr << "\blue [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] with a photo."
- else
- usr << "\blue [src.name] is wearing \icon[src.wear_id] [src.wear_id.name]."
-
+ msg += "[t_He] [t_is] wearing \icon[src.wear_id] \a [src.wear_id].\n"
+ //Jitters
if (src.is_jittery)
- switch(src.jitteriness)
- if(300 to INFINITY)
- usr << "\red [src] is violently convulsing."
- if(200 to 300)
- usr << "\red [src] looks extremely jittery."
- if(100 to 200)
- usr << "\red [src] is twitching ever so slightly."
+ if(src.jitteriness >= 300)
+ msg += "[t_He] [t_is] convulsing violently!\n"
+ else if(src.jitteriness >= 200)
+ msg += "[t_He] [t_is] extremely jittery.\n"
+ else if(src.jitteriness >= 100)
+ msg += "[t_He] [t_is] twitching ever so slightly.\n"
if (src.suiciding)
- switch(src.suiciding)
- if(1)
- usr << "\red [src.name] appears to have bitten [t_his] tongue off!"
+ msg += "[t_He] [t_has] bitten off [t_his] own tongue and [t_has] suffered major bloodloss!\n"
var/distance = get_dist(usr,src)
if(istype(usr, /mob/dead/observer) || usr.stat == 2) // ghosts can see anything
distance = 1
if (src.stat == 1 || stat == 2)
- usr << "\red [name] doesn't seem to be responding to anything around [t_him], [t_his] eyes closed as though asleep."
+ msg += "[name] doesn't seem to be responding to anything around [t_him], [t_his] eyes closed as though asleep.\n"
if((!isbreathing || holdbreath) && distance <= 3)
- usr << "\red [name] does not appear to be breathing."
+ msg += "[name] does not appear to be breathing.\n"
if(istype(usr, /mob/living/carbon/human) && usr.stat == 0 && src.stat == 1 && distance <= 1)
for(var/mob/O in viewers(usr.loc, null))
O.show_message("[usr] checks [src]'s pulse.", 1)
- sleep(15)
- usr << "\blue [name] has a pulse!"
+ spawn(15)
+ usr << "\blue [name] has a pulse!"
if (src.stat == 2 || (changeling && changeling.changeling_fakedeath == 1))
if(distance <= 1)
if(istype(usr, /mob/living/carbon/human) && usr.stat == 0)
for(var/mob/O in viewers(usr.loc, null))
O.show_message("[usr] checks [src]'s pulse.", 1)
- sleep(15)
- usr << "\red [name] has no pulse!"
+ spawn(15)
+ usr << "\red [name] has no pulse!"
- if (src.getBruteLoss())
+/* if (src.getBruteLoss())
if (src.getBruteLoss() < 30)
usr << "\red [src.name] looks slightly injured!"
else
- usr << "\red [src.name] looks severely injured!"
+ usr << "\red [src.name] looks severely injured!"*/
- if (src.getCloneLoss())
- if (src.getCloneLoss() < 30)
- usr << "\red [src.name] looks slightly... unfinished?"
+ if (src.cloneloss)
+ if (src.cloneloss < 30)
+ msg += "[src.name] looks slightly... unfinished?\n"
else
- usr << "\red [src.name] looks very... unfinished?"
+ msg += "[src.name] looks very... unfinished?\n"
- if (src.getFireLoss())
+/* if (src.getFireLoss())
if (src.getFireLoss() < 30)
usr << "\red [src.name] looks slightly burned!"
else
- usr << "\red [src.name] looks severely burned!"
-
+ usr << "\red [src.name] looks severely burned!"*/
+ msg += ""
if (src.nutrition < 100)
- usr << "\red [src.name] looks like flesh and bones."
+ msg += "[t_He] [t_is] severely malnourished.\n"
else if (src.nutrition >= 500)
if (usr.nutrition < 100)
- usr << "\red [src.name] looks very round and delicious. Like a little piggy. A tasty piggy."
+ msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n"
else
- usr << "\blue [src.name] looks quite chubby."
+ msg += "[t_He] [t_is] quite chubby.\n"
- if(!stat)
- if (src.getBrainLoss() >= 60)
- usr << "\red [src.name] has a stupid expression on [t_his] face."
+ msg += ""
+
+
+ if (src.getBrainLoss() >= 60 && !stat)
+ msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n"
if (!src.client)
- usr << "\red [src.name] doesn't seem as though they want to talk."
+ msg += "[t_He] [t_has] a vacant, braindead stare...\n"
- spawn(10) // I think we might be overloading the clients.
- for(var/named in organs)
- var/datum/organ/external/temp = organs[named]
- if(temp)
- if(temp.destroyed)
- usr << "\red [src.name] is missing [t_his] [temp.display_name]."
- if(temp.wounds)
- for(var/datum/organ/external/wound/w in temp.wounds)
- var/size = w.wound_size
- var/sizetext
- switch(size)
+ var/list/wound_descriptions = list()
+ var/list/wound_flavor_text = list()
+ for(var/named in organs)
+ var/datum/organ/external/temp = organs[named]
+ if(temp)
+ if(temp.destroyed)
+ wound_flavor_text["[temp.display_name]"] = "[src.name] is missing [t_his] [temp.display_name].\n"
+ continue
+ if(temp.wounds)
+ var/list/wounds = list(list(),list(),list(),list(),list(),list())
+ for(var/datum/organ/wound/w in temp.wounds)
+ switch(w.healing_state)
+ if(0)
+ var/list/cut = wounds[1]
+ cut += w
+ wounds[1] = cut
+ if(1)
+ var/list/cut = wounds[2]
+ cut += w
+ wounds[2] = cut
+ if(2)
+ var/list/cut = wounds[3]
+ cut += w
+ wounds[3] = cut
+ if(3)
+ var/list/cut = wounds[4]
+ cut += w
+ wounds[4] = cut
+ if(4)
+ var/list/cut = wounds[5]
+ cut += w
+ wounds[5] = cut
+ if(5)
+ var/list/cut = wounds[6]
+ cut += w
+ wounds[6] = cut
+ wound_descriptions["[temp.display_name]"] = wounds
+ else
+ wound_flavor_text["[temp.display_name]"] = ""
+ //Now that we have a big list of all the wounds, on all the limbs.
+ var/list/is_bleeding = list()
+ for(var/named in wound_descriptions)
+ var/list/wound_states = wound_descriptions[named]
+ var/list/flavor_text = list()
+ for(var/i = 1, i <= 6, i++)
+ var/list/wound_state = wound_states[i] //All wounds at this level of healing.
+ var/list/tally = list("cut" = 0, "deep cut" = 0, "flesh wound" = 0, "gaping wound" = 0, "big gaping wound" = 0, "massive wound" = 0,\
+ "tiny bruise" = 0, "small bruise" = 0, "moderate bruise" = 0, "large bruise" = 0, "huge bruise" = 0, "monumental bruise" = 0,\
+ "small burn" = 0, "moderate burn" = 0, "large burn" = 0, "severe burn" = 0, "deep burn" = 0, "carbonised area" = 0) //How many wounds of what size.
+ for(var/datum/organ/wound/w in wound_state)
+ if(w.bleeding && !is_bleeding[named]) is_bleeding[named] = 1
+ switch(w.wound_size)
+ if(1)
+ switch(w.wound_type)
+ if(0)
+ tally["cut"] += 1
if(1)
- sizetext = "cut"
+ tally["tiny bruise"] += 1
if(2)
- sizetext = "deep cut"
- if(3)
- sizetext = "flesh wound"
- if(4)
- sizetext = "gaping wound"
- if(5)
- sizetext = "big gaping wound"
- if(6)
- sizetext = "massive wound"
- if(w.bleeding)
- usr << "\red [src.name] is bleeding from a [sizetext] on [t_his] [temp.display_name]."
+ tally["small burn"] += 1
+ if(2)
+ switch(w.wound_type)
+ if(0)
+ tally["deep cut"] += 1
+ if(1)
+ tally["small bruise"] += 1
+ if(2)
+ tally["moderate burn"] += 1
+ if(3)
+ switch(w.wound_type)
+ if(0)
+ tally["flesh wound"] += 1
+ if(1)
+ tally["moderate bruise"] += 1
+ if(2)
+ tally["large burn"] += 1
+ if(4)
+ switch(w.wound_type)
+ if(0)
+ tally["gaping wound"] += 1
+ if(1)
+ tally["large bruise"] += 1
+ if(2)
+ tally["severe burn"] += 1
+ if(5)
+ switch(w.wound_type)
+ if(0)
+ tally["big gaping wound"] += 1
+ if(1)
+ tally["huge bruise"] += 1
+ if(2)
+ tally["deep burn"] += 1
+ if(6)
+ switch(w.wound_type)
+ if(0)
+ tally["massive wound"] += 1
+ if(1)
+ tally["monumental bruise"] += 1
+ if(2)
+ tally["carbonised area"] += 1
+ for(var/tallied in tally)
+ if(!tally[tallied])
+ continue
+ //if(flavor_text_string && tally[tallied])
+ // for(
+ // flavor_text_string += pick(list(", as well as", ", in addition to")) //add more later.
+ var/tallied_rename = list("cut" = "cut","deep cut" = "deep cut", "flesh wound" = "flesh wound",\
+ "gaping wound" = "gaping wound", "big gaping wound" = "big gaping wound", "massive wound" = "massive wound",\
+ "tiny bruise" = "tiny bruise", "small bruise" = "small bruise", "moderate bruise" = "moderate bruise",\
+ "large bruise" = "large bruise", "huge bruise" = "huge bruise", "monumental bruise" = "monumental bruise",\
+ "small burn" = "small burn", "moderate burn" = "moderate burn", "large burn" = "large burn",\
+ "severe burn" = "severe burn", "deep burn" = "deep burn", "carbonised area" = "carbonised area")
+ switch(i)
+ if(2) //Healing wounds.
+ if(tallied in list("cut","tiny bruise","small burn"))
continue
+ tallied_rename = list("deep cut" = "clotted cut", "flesh wound" = "small bandaged wound",\
+ "gaping wound" = "bandaged wound", "big gaping wound" = "gauze wrapped wound",\
+ "massive wound" = "massive blood soaked bandage", "small bruise" = "small bruise",\
+ "moderate bruise" = "moderate bruise", "large bruise" = "large bruise",\
+ "huge bruise" = "huge bruise", "monumental bruise" = "monumental bruise",\
+ "moderate burn" = "moderate salved burn", "large burn" = "large salved burn",\
+ "severe burn" = "severe salved burn", "deep burn" = "deep salved burn",\
+ "carbonised area" = "treated carbonised area")
+ if(3)
+ if(tallied in list("cut","tiny bruise","small burn"))
+ continue
+ tallied_rename = list("deep cut" = "fading cut", "flesh wound" = "small healing wound",\
+ "gaping wound" = "healing wound", "big gaping wound" = "big healing wound",\
+ "massive wound" = "massive healing wound", "small bruise" = "tiny bruise",\
+ "moderate bruise" = "small bruise", "large bruise" = "moderate bruise",\
+ "huge bruise" = "large bruise", "monumental bruise" = "huge bruise",\
+ "moderate burn" = "healing moderate burn", "large burn" = "healing large burn",\
+ "severe burn" = "healing severe burn", "deep burn" = "healing deep burn",\
+ "carbonised area" = "slowly healing carbonised area")
+ if(4)
+ if(tallied in list("cut","deep cut","tiny bruise", "small bruise","small burn", "moderate burn"))
+ continue
+ tallied_rename = list("flesh wound" = "small red scar", "gaping wound" = "angry straight scar",\
+ "big gaping wound" = "jagged angry scar", "massive wound" = "gigantic angry scar",\
+ "moderate bruise" = "tiny bruise", "large bruise" = "small bruise",\
+ "huge bruise" = "moderate bruise", "monumental bruise" = "large bruise",\
+ "large burn" = "large burn scar", "severe burn" = "severe burn scar",\
+ "deep burn" = "deep burn scar", "carbonised area" = "healing carbonised area")
+ if(5)
+ if(tallied in list("cut","deep cut","tiny bruise", "small bruise", "moderate bruise","small burn", "moderate burn"))
+ continue
+ tallied_rename = list("flesh wound" = "small scar", "gaping wound" = "straight scar",\
+ "big gaping wound" = "jagged scar", "massive wound" = "gigantic scar",\
+ "large bruise" = "tiny bruise",\
+ "huge bruise" = "small bruise", "monumental bruise" = "moderate bruise",\
+ "large burn" = "large burn scar", "severe burn" = "severe burn scar",\
+ "deep burn" = "deep burn scar", "carbonised area" = "large scarred area")
+ if(6)
+ if(tallied in list("cut","deep cut","flesh wound","tiny bruise", "small bruise", "moderate bruise", "large bruise", "huge bruise","small burn", "moderate burn"))
+ continue
+ tallied_rename = list("gaping wound" = "straight scar",\
+ "big gaping wound" = "jagged scar", "massive wound" = "gigantic scar",\
+ "monumental bruise" = "tiny bruise",\
+ "large burn" = "large burn scar", "severe burn" = "severe burn scar",\
+ "deep burn" = "deep burn scar", "carbonised area" = "large scarred area")
+ var/list/no_exclude = list("gaping wound", "big gaping wound", "massive wound", "large bruise",\
+ "huge bruise", "massive bruise", "severe burn", "large burn", "deep burn", "carbonised area")
+ switch(tally[tallied])
+ if(1)
+ if(!flavor_text.len)
+ flavor_text += "[src] has[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
+ else
+ flavor_text += "[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
+ if(2)
+ if(!flavor_text.len)
+ flavor_text += "[src] has[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
+ else
+ flavor_text += "[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
+ if(3 to 5)
+ if(!flavor_text.len)
+ flavor_text += "[src] has several [tallied_rename[tallied]]s"
+ else
+ flavor_text += " several [tallied_rename[tallied]]s"
+ if(6 to INFINITY)
+ if(!flavor_text.len)
+ flavor_text += "[src] has a bunch of [tallied_rename[tallied]]s"
+ else
+ flavor_text += " a ton of [tallied_rename[tallied]]s"
+ if(flavor_text.len)
+ var/flavor_text_string = ""
+ for(var/text = 1, text <= flavor_text.len, text++)
+ if(text == flavor_text.len && flavor_text.len > 1)
+ flavor_text_string += ", and"
+ else if(flavor_text.len > 1)
+ flavor_text_string += ","
+ flavor_text_string += flavor_text[text]
+ flavor_text_string += " on [t_his] [named].
"
+ wound_flavor_text["[named]"] = flavor_text_string
+ if(wound_flavor_text["head"] && !skipmask && !(wear_mask && istype(wear_mask, /obj/item/clothing/mask/gas)))
+ msg += wound_flavor_text["head"]
+ else if(is_bleeding["head"])
+ msg += "[src] has blood running down [t_his] face!\n"
+ if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit)
+ msg += wound_flavor_text["chest"]
+ else if(is_bleeding["chest"])
+ msg += "[src] has blood from under [t_his] clothing!\n"
+ if(wound_flavor_text["left arm"] && !w_uniform && !skipjumpsuit)
+ msg += wound_flavor_text["left arm"]
+ if(wound_flavor_text["left hand"] && !gloves && !skipgloves)
+ msg += wound_flavor_text["left hand"]
+ else if(is_bleeding["left hand"])
+ msg += "[src] has blood running from under [t_his] gloves!\n"
+ if(wound_flavor_text["right arm"] && !w_uniform && !skipjumpsuit)
+ msg += wound_flavor_text["right arm"]
+ if(wound_flavor_text["right hand"] && !gloves && !skipgloves)
+ msg += wound_flavor_text["right hand"]
+ else if(is_bleeding["right hand"])
+ msg += "[src] has blood running from under [t_his] gloves!\n"
+ if(wound_flavor_text["groin"] && !w_uniform && !skipjumpsuit)
+ msg += wound_flavor_text["groin"]
+ if(wound_flavor_text["left leg"] && !w_uniform && !skipjumpsuit)
+ msg += wound_flavor_text["left leg"]
+ if(wound_flavor_text["left foot"]&& !shoes && !skipshoes)
+ msg += wound_flavor_text["left foot"]
+ else if(is_bleeding["left foot"])
+ msg += "[src] has blood running from [t_his] shoes!\n"
+ if(wound_flavor_text["right leg"] && !w_uniform && !skipjumpsuit)
+ msg += wound_flavor_text["right leg"]
+ if(wound_flavor_text["right foot"]&& !shoes && !skipshoes)
+ msg += wound_flavor_text["right foot"]
+ else if(is_bleeding["right foot"])
+ msg += "[src] has blood running from [t_his] shoes!\n"
- print_flavor_text()
- usr << "\blue *---------*"
+// if(w.bleeding)
+// usr << "\red [src.name] is bleeding from a [sizetext] on [t_his] [temp.display_name]."
+// continue
+
+ msg += print_flavor_text()
+
+ msg += "\blue *---------*"
+ usr << msg
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 03d4081d01d..b1116d78ff6 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -54,12 +54,13 @@
var/list/body_standing = list()
var/list/body_lying = list()
+ var/organs2 = list()
var/mutantrace = null
var/bloodloss = 0
- var/debug_leftarm
- var/debug_lefthand
+ var/datum/reagents/vessel
+ var/pale = 0
/mob/living/carbon/human/dummy
real_name = "Test Dummy"
@@ -75,25 +76,26 @@
if(!dna) dna = new /datum/dna(null)
- new /datum/organ/external/chest(src)
- new /datum/organ/external/groin(src)
- new /datum/organ/external/head(src)
- new /datum/organ/external/l_arm(src)
- new /datum/organ/external/r_arm(src)
- new /datum/organ/external/r_leg(src)
- new /datum/organ/external/l_leg(src)
+ organs2 += new /datum/organ/external/chest(src)
+ organs2 += new /datum/organ/external/groin(src)
+ organs2 += new /datum/organ/external/head(src)
+ organs2 += new /datum/organ/external/l_arm(src)
+ organs2 += new /datum/organ/external/r_arm(src)
+ organs2 += new /datum/organ/external/r_leg(src)
+ organs2 += new /datum/organ/external/l_leg(src)
var/datum/organ/external/part = new /datum/organ/external/l_hand(src)
part.parent = organs["l_arm"]
+ organs2 += part
part = new /datum/organ/external/l_foot(src)
part.parent = organs["l_leg"]
+ organs2 += part
part = new /datum/organ/external/r_hand(src)
part.parent = organs["r_arm"]
+ organs2 += part
part = new /datum/organ/external/r_foot(src)
part.parent = organs["r_leg"]
-
- debug_leftarm = organs["l_arm"]
- debug_lefthand = organs["l_hand"]
+ organs2 += part
var/g = "m"
if (gender == MALE)
@@ -113,12 +115,47 @@
update_clothing()
src << "\blue Your icons have been generated!"
+ vessel = new/datum/reagents(560)
+ vessel.my_atom = src
+ vessel.add_reagent("blood",560)
+ spawn(1) fixblood()
+
..()
/*var/known_languages = list()
known_languages.Add("english")*/
// organStructure = new /obj/effect/organstructure/human(src)
+/mob/living/carbon/human/proc/fixblood()
+ for(var/datum/reagent/blood/B in vessel.reagent_list)
+ if(B.id == "blood")
+ B.data = list("donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.b_type,"resistances"=null,"trace_chem"=null,"virus2"=(virus2 ? virus2.getcopy() : null),"antibodies"=0)
+
+/mob/living/carbon/human/proc/drip(var/amt as num)
+ if(!amt)
+ return
+ var/turf/T = get_turf(src)
+ var/list/obj/effect/decal/cleanable/blood/drip/nums = list()
+ var/amm = 0.1 * amt
+ vessel.remove_reagent("blood",amm)
+ var/list/hax = list("1","2","3","4","5")
+ for(var/obj/effect/decal/cleanable/blood/drip/G in T)
+ nums += G
+ hax.Remove(G.icon_state)
+ if(nums.len >= 3)
+ var/obj/effect/decal/cleanable/blood/drip/D = pick(nums)
+ D.blood_DNA.len++
+ D.blood_DNA[D.blood_DNA.len] = list(dna.unique_enzymes,dna.b_type)
+ if(virus2)
+ D.virus2 += virus2.getcopy()
+ return
+ var/obj/effect/decal/cleanable/blood/drip/this = new(T)
+ this.icon_state = pick(hax)
+ this.blood_DNA = list(list(dna.unique_enzymes,dna.b_type))
+ this.blood_owner = src
+ if(virus2)
+ this.virus2 = virus2.getcopy()
+
/mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes)
if ((!( yes ) || now_pushing))
return
@@ -1392,6 +1429,9 @@
else
stand_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
lying_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
+ if(pale)
+ stand_icon.Blend(rgb(100,100,100))
+ lying_icon.Blend(rgb(100,100,100))
if (underwear > 0)
//if(!obese)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index ff2ebe92727..d5806a36423 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -90,9 +90,13 @@ emp_act
if(!I || !user) return 0
var/datum/organ/external/affecting = get_organ(ran_zone(user.zone_sel.selecting))
- var/hit_area = parse_zone(affecting.name)
+ var/hit_area = affecting.display_name
- visible_message("\red [src] has been attacked in the [hit_area] with [I.name] by [user]!")
+ if(!affecting.destroyed)
+ visible_message("\red [src] has been attacked in the [hit_area] with [I.name] by [user]!")
+ else
+ user << "What [affecting]?"
+ return
if((user != src) && check_shields(I.force, "the [I.name]"))
return 0
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index afe1fe7f287..c200eb9e79d 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -186,7 +186,7 @@
// a.hallucinate(src)
if(!handling_hal && hallucination > 20)
spawn handle_hallucinations() //The not boring kind!
- hallucination -= 2
+ hallucination = max(hallucination - 2, 0)
//if(health < 0)
// for(var/obj/a in hallucinations)
// del a
@@ -766,6 +766,7 @@
handle_chemicals_in_body()
if(reagents && stat != 2) reagents.metabolize(src)
+ if(vessel && stat != 2) vessel.metabolize(src)
if(mutantrace == "plant") //couldn't think of a better place to place it, since it handles nutrition -- Urist
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
@@ -861,6 +862,39 @@
emote("collapse")
paralysis = 10
+ if(stat < 2)
+ var/blood_volume = round(vessel.get_reagent_amount("blood"))
+ if(bloodloss)
+ drip(bloodloss)
+ if(!blood_volume)
+ bloodloss = 0
+ else if(blood_volume > 448)
+ if(pale)
+ pale = 0
+ update_body()
+ else if(blood_volume <= 448 && blood_volume > 336)
+ if(!pale)
+ pale = 1
+ update_body()
+ var/word = pick("dizzy","woosey","faint")
+ src << "\red You feel [word]"
+ if(prob(1))
+ var/word = pick("dizzy","woosey","faint")
+ src << "\red You feel [word]"
+ else if(blood_volume <= 336 && blood_volume > 244)
+ if(!pale)
+ pale = 1
+ update_body()
+ eye_blurry += 6
+ if(prob(15))
+ paralysis += rand(1,3)
+ else if(blood_volume <= 244 && blood_volume > 122)
+ if(toxloss <= 100)
+ toxloss = 100
+ else if(blood_volume <= 122)
+ death()
+ //src.unlock_medal("We're all sold out on blood", 0, "You bled to death..", "easy")
+
updatehealth()
// health = 100 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
@@ -937,20 +971,21 @@
src << "\red Your face has become disfigured."
face_op_stage = 0.0
warn_flavor_changed()
+ var/blood_max = 0
for(var/name in organs)
var/datum/organ/external/temp = organs[name]
if(!temp.bleeding)
continue
- else
- if(prob(35))
- bloodloss += rand(1,10)
+ // else
+ // if(prob(35))
+ // bloodloss += rand(1,10)
if(temp.wounds)
- for(var/datum/organ/external/wound/W in temp.wounds)
- if(!temp.bleeding)
- continue
- else
- if(prob(25))
- bloodloss++
+ for(var/datum/organ/wound/W in temp.wounds)
+ if(W.wound_size && W.bleeding)
+ blood_max += W.wound_size
+ if(temp.destroyed && !temp.gauzed)
+ blood_max += 10 //Yer missing a fucking limb.
+ bloodloss = min(bloodloss+1,sqrt(blood_max))
if (eye_blind)
eye_blind--
blinded = 1
@@ -1435,4 +1470,4 @@ snippets
plcheck = t_plasma
oxcheck = t_oxygen
G.turf_add(T, G.total_moles())
-*/
\ No newline at end of file
+*/
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 9f9ede58b22..b455df66060 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -175,8 +175,9 @@
affecting.heal_damage(1000, 1000) //fixes getting hit after ingestion, killing you when game updates organ health
affecting.broken = 0
affecting.destroyed = 0
- for(var/datum/organ/external/wound/W in affecting.wounds)
+ for(var/datum/organ/wound/W in affecting.wounds)
W.stopbleeding()
+ del(W)
H.UpdateDamageIcon()
H.update_body()
//src.fireloss = 0
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index c00e769dd3c..8798f9bf339 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -56,6 +56,6 @@
P.on_hit(src,2)
return 2
if(!P.nodamage)
- apply_damage((P.damage/(absorb+1)), P.damage_type, used_weapon = P.name)
+ apply_damage((P.damage/(absorb+1)), P.damage_type, def_zone, sharp = 1, used_weapon = P.name)
P.on_hit(src, absorb)
return absorb
\ No newline at end of file
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index f2afcbcd81e..c398c38dadd 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -389,6 +389,9 @@
memory()
/mob/proc/update_flavor_text()
+ set src in usr
+ if(usr != src)
+ usr << "No."
var/msg = input(usr,"Set the flavor text in your 'examine' verb. Don't metagame!","Flavor Text",html_decode(flavor_text)) as message|null
if(msg != null)
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 01464f1d570..4f81cb084c4 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -121,8 +121,8 @@ proc/isorgan(A)
zone = "head"
if("mouth")
zone = "head"
- if("groin")
- zone = "chest"
+// if("groin")
+// zone = "chest"
return zone
@@ -139,7 +139,7 @@ proc/isorgan(A)
if(4 to 6) return "l_arm"
if(7 to 9) return "r_arm"
- if(prob(probability * 0.75)) return zone
+ if(prob(probability)) return zone
return "chest"
diff --git a/code/modules/mob/organ/organ.dm b/code/modules/mob/organ/organ.dm
index 892d32419b7..5e4977c652f 100644
--- a/code/modules/mob/organ/organ.dm
+++ b/code/modules/mob/organ/organ.dm
@@ -45,7 +45,6 @@
burn_dam = 0
bandaged = 0
max_damage = 0
- wound_size = 0
max_size = 0
obj/item/weapon/implant/implant = null
@@ -56,7 +55,8 @@
perma_dmg = 0
broken = 0
destroyed = 0
- destspawn
+ destspawn = 0 //Has it spawned the broken limb?
+ gauzed = 0 //Has the missing limb been patched?
min_broken_damage = 30
datum/organ/external/parent
damage_msg = "\red You feel a intense pain"
@@ -81,22 +81,28 @@
if(owner) owner.pain(display_name, (brute+burn)*3, 1)
if(sharp)
- var/chance = rand(1,5)
- var/nux = brute * chance
+ var/nux = brute * rand(10,15)
if(brute_dam >= max_damage)
if(prob(5 * brute))
- for(var/mob/M in viewers(owner))
- M.show_message("\red [owner.name]'s [display_name] flies off.")
+// for(var/mob/M in viewers(owner))
+// M.show_message("\red [owner.name]'s [display_name] flies off.")
destroyed = 1
droplimb()
return
else if(prob(nux))
- createwound(rand(1,5))
+ createwound(max(1,min(6,round(brute/10) + rand(-1,1))),0,brute)
owner << "You feel something wet on your [display_name]"
- if((src.brute_dam + src.burn_dam + brute + burn) < src.max_damage)
- src.brute_dam += brute
- src.burn_dam += burn
+ if((brute_dam + burn_dam + brute + burn) < max_damage)
+ if(brute)
+ brute_dam += brute
+ if(prob(brute) && brute > 20 && !sharp)
+ createwound(rand(4,6),0,brute)
+ else if(!sharp)
+ createwound(max(1,min(6,round(brute/10) + rand(-1,1))),1,brute)
+ if(burn)
+ burn_dam += burn
+ createwound(max(1,min(6,round(burn/10) + rand(-1,1))),2,burn)
else
var/can_inflict = src.max_damage - (src.brute_dam + src.burn_dam)
if(can_inflict)
@@ -110,9 +116,11 @@
if (brute > 0)
brute = can_inflict
src.brute_dam += brute
+ if(!sharp) createwound(max(1,min(6,round(brute/10) + rand(-1,1))),1,brute)
else
burn = can_inflict
src.burn_dam += burn
+ createwound(max(1,min(6,round(burn/10) + rand(-1,1))),2,burn)
else
return 0
@@ -126,8 +134,51 @@
proc/heal_damage(brute, burn, internal = 0)
- brute_dam = max(0, brute_dam - brute)
- burn_dam = max(0, burn_dam - burn)
+ var/brute_to_heal = 0
+ var/brute_wounds = list()
+ var/burn_to_heal = 0
+ var/burn_wounds = list()
+ for(var/datum/organ/wound/W in wounds)
+ if(W.wound_type > 1 && W.damage)
+ burn_to_heal += W.damage
+ burn_wounds += W
+ else if(W.damage)
+ brute_to_heal += W.damage
+ brute_wounds += W
+ if(brute && brute >= brute_to_heal)
+ for(var/datum/organ/wound/W in brute_wounds)
+ if(brute >= W.damage)
+ brute_dam -= W.damage
+ brute -= W.damage
+ W.damage = 0
+ W.initial_dmg = 0
+ W.stopbleeding()
+ else
+ W.damage -= brute
+ W.initial_dmg -= brute
+ else if(brute)
+ for(var/datum/organ/wound/W in brute_wounds)
+ W.damage = 0
+ W.initial_dmg = 0
+ W.stopbleeding()
+ brute_dam = 0
+ if(burn && burn >= burn_to_heal)
+ for(var/datum/organ/wound/W in burn_wounds)
+ if(burn >= W.damage)
+ burn_dam -= W.damage
+ burn -= W.damage
+ W.damage = 0
+ W.initial_dmg = 0
+ W.stopbleeding()
+ else
+ W.damage -= burn
+ W.initial_dmg -= burn
+ else if(burn)
+ for(var/datum/organ/wound/W in burn_wounds)
+ W.damage = 0
+ W.initial_dmg = 0
+ W.stopbleeding()
+ burn_dam = 0
if(internal)
broken = 0
perma_injury = 0
@@ -163,7 +214,7 @@
process()
if(destroyed)
- if(destspawn)
+ if(!destspawn)
droplimb()
return
if(broken == 0)
@@ -178,9 +229,7 @@
var/dmgmsg = "[damage_msg] in your [display_name]"
owner << dmgmsg
//owner.unlock_medal("Broke Yarrr Bones!", 0, "Break a bone.", "easy")
- for(var/mob/M in viewers(owner))
- if(M != owner)
- M.show_message("\red You hear a loud cracking sound coming from [owner.name].")
+ owner.visible_message("\red You hear a loud cracking sound coming from [owner.name].","\red Something feels like it shattered in your [display_name]!","You hear a sickening crack.")
owner.emote("scream")
broken = 1
wound = "broken" //Randomise in future
@@ -250,11 +299,7 @@
if(owner:organs["r_hand"])
var/datum/organ/external/S = owner:organs["r_hand"]
if(!S.destroyed)
- var/obj/item/weapon/organ/r_hand/X = new(owner.loc, owner)
- for(var/mob/M in viewers(owner))
- M.show_message("\red [owner.name]'s [X.name] flies off.")
- var/lol2 = pick(cardinal)
- step(X,lol2)
+ S.droplimb()
var/lol = pick(cardinal)
step(H,lol)
destroyed = 1
@@ -263,11 +308,7 @@
if(owner:organs["l_hand"])
var/datum/organ/external/S = owner:organs["l_hand"]
if(!S.destroyed)
- var/obj/item/weapon/organ/l_hand/X = new(owner.loc, owner)
- for(var/mob/M in viewers(owner))
- M.show_message("\red [owner.name]'s [X.name] flies off in arc.")
- var/lol2 = pick(cardinal)
- step(X,lol2)
+ S.droplimb()
var/lol = pick(cardinal)
step(H,lol)
destroyed = 1
@@ -276,11 +317,7 @@
if(owner:organs["r_foot"])
var/datum/organ/external/S = owner:organs["r_foot"]
if(!S.destroyed)
- var/obj/item/weapon/organ/r_foot/X = new(owner.loc, owner)
- for(var/mob/M in viewers(owner))
- M.show_message("\red [owner.name]'s [X.name] flies off flies off in arc.")
- var/lol2 = pick(cardinal)
- step(X,lol2)
+ S.droplimb()
var/lol = pick(cardinal)
step(H,lol)
destroyed = 1
@@ -289,39 +326,155 @@
if(owner:organs["l_foot"])
var/datum/organ/external/S = owner:organs["l_foot"]
if(!S.destroyed)
- var/obj/item/weapon/organ/l_foot/X = new(owner.loc, owner)
- for(var/mob/M in viewers(owner))
- M.show_message("\red [owner.name]'s [X.name] flies off.")
- var/lol2 = pick(cardinal)
- step(X,lol2)
+ S.droplimb()
var/lol = pick(cardinal)
step(H,lol)
destroyed = 1
+ if(HAND_RIGHT)
+ var/obj/item/weapon/organ/r_hand/X = new(owner.loc, owner)
+ for(var/mob/M in viewers(owner))
+ M.show_message("\red [owner.name]'s [X.name] flies off in an arc.")
+ var/lol2 = pick(cardinal)
+ step(X,lol2)
+ destroyed = 1
+ if(HAND_LEFT)
+ var/obj/item/weapon/organ/l_hand/X = new(owner.loc, owner)
+ for(var/mob/M in viewers(owner))
+ M.show_message("\red [owner.name]'s [X.name] flies off in an arc.")
+ var/lol2 = pick(cardinal)
+ step(X,lol2)
+ destroyed = 1
+ if(FOOT_RIGHT)
+ var/obj/item/weapon/organ/r_foot/X = new(owner.loc, owner)
+ for(var/mob/M in viewers(owner))
+ M.show_message("\red [owner.name]'s [X.name] flies off in an arc.")
+ var/lol2 = pick(cardinal)
+ step(X,lol2)
+ destroyed = 1
+ if(FOOT_LEFT)
+ var/obj/item/weapon/organ/l_foot/X = new(owner.loc, owner)
+ for(var/mob/M in viewers(owner))
+ M.show_message("\red [owner.name]'s [X.name] flies off in an arc.")
+ var/lol2 = pick(cardinal)
+ step(X,lol2)
+ destroyed = 1
+ destspawn = 1
+ for(var/datum/organ/wound/W in wounds)
+ W.update_health()
+ del(W)
+ del(wounds)
src.owner.update_clothing()
- proc/createwound(var/size = 1)
- if(ishuman(src.owner))
- var/datum/organ/external/wound/W = new(src)
- W.bleeding = 1
- src.owner:bloodloss += 10 * size
+ proc/createwound(var/size = 1, var/type = 0, var/damage)
+ if(ishuman(owner))
+ var/datum/organ/wound/W = new(src)
+ bleeding = !type //Sharp objects cause bleeding.
+ W.bleeding = !type
+// owner:bloodloss += 10 * size
+ W.damage = damage
+ W.initial_dmg = damage
+ W.wound_type = type
W.wound_size = size
- W.owner = src.owner
- src.wounds += W
+ W.owner = owner
+ W.parent = src
+ spawn W.start_close() //Let small cuts close themselves.
+ wounds += W
-/datum/organ/external/wound
+/datum/organ/wound
name = "wound"
- wound_size = 1
- icon_name = "wound"
- display_name = "wound"
- parent = null
+ var/wound_type = 0 //0 = cut, 1 = bruise, 2 = burn
+ var/damage = 0 //How much damage it caused.
+ var/initial_dmg = 0
+ var/wound_size = 1
+ var/datum/organ/external/parent
+ var/bleeding = 0 //You got wounded, of course it's bleeding. -- Scratch that. Rewrote it.
+ var/healing_state = 0
+
+ proc/start_close()
+ sleep(rand(1800,3000)) //3-5 minutes
+ if(prob(50) && wound_size == 1)
+ parent.wounds.Remove(src)
+ update_health(1)
+ del(src)
+ else if(prob(33) && wound_size < 3)
+ stopbleeding()
+ return
+ sleep(rand(1800,3000))
+ if(wound_size == 1) //Small cuts heal in 3-10 minutes.
+ parent.wounds.Remove(src)
+ update_health(1)
+ del(src)
+ else if(prob(50) && wound_size < 5 && bleeding)
+ stopbleeding()
+ return
+ if(wound_size < 5 && bleeding) //Give it a chance to stop bleeding on it's own.
+ spawn(1)
+ sleep(1200)
+ if(prob(50))
+ stopbleeding()
+ return
+ return
proc/stopbleeding()
- if(!src.bleeding)
+ if(healing_state)
+ return 0
+// owner:bloodloss -= 10 * src.wound_size
+ parent.bleeding = 0
+ for(var/datum/organ/wound/W in parent)
+ if(W.bleeding && W != src)
+ parent.bleeding = 1
+ bleeding = 0
+ spawn become_scar() //spawn off the process of becoming a scar.
+ return 1
+
+ proc/become_scar()
+ healing_state = 1 //Patched
+ update_health(0.5) //Heals some.
+
+ sleep(rand(1800,3000)) //3-5 minutes
+
+ if(parent.owner.stat == 2)
return
- var/t = 10 * src.wound_size
- src.owner:bloodloss -= t
- src.bleeding = 0
- del(src)
+ if(prob(80) && wound_size < 2) //Small cuts heal.
+ update_health(1)
+ parent.wounds.Remove(src)
+ del(src)
+
+ healing_state = 2 //Noticibly healing.
+ update_health(1) //Heals the rest of the way.
+
+ sleep(rand(1800,3000)) //3-5 minutes
+ if(parent.owner.stat == 2)
+ return
+ if(prob(60) && wound_size < 3) //Cuts heal up
+ parent.wounds.Remove(src)
+ del(src)
+ healing_state = 3 //Angry red scar
+ sleep(rand(6000,9000)) //10-15 minutes
+ if(parent.owner.stat == 2)
+ return
+ if(prob(80) && wound_size < 4) //Minor wounds heal up fully.
+ parent.wounds.Remove(src)
+ del(src)
+ healing_state = 4 //Scar
+ sleep(rand(6000,9000)) //10-15 minutes
+ if(parent.owner.stat == 2)
+ return
+ if(prob(30) || wound_size < 4 || wound_type == 1) //Small chance for the scar to disappear, any small remaining wounds deleted.
+ parent.wounds.Remove(src)
+ del(src)
+ healing_state = 5 //Faded scar
+ return
+
+ proc/update_health(var/percent = 1)
+ damage -= damage/percent //Remove that amount of the damage
+ if(wound_type > 1)
+ parent.burn_dam -= initial_dmg - damage
+ else
+ parent.brute_dam -= initial_dmg - damage
+ initial_dmg = damage //reset it for further updates.
+ parent.owner.updatehealth()
+
/****************************************************
INTERNAL ORGANS
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index d3d4de16f5b..c388bba9795 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -464,7 +464,7 @@ mob/proc
target_locked
icon = 'icons/effects/Targeted.dmi'
icon_state = "locked"
- layer = 99
+ layer = 17.9
// captured
// icon = 'Captured.dmi'
// layer = 99
diff --git a/code/setup.dm b/code/setup.dm
index b514ae203c8..43a73c5fdc0 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -142,6 +142,15 @@ var/MAX_EXPLOSION_RANGE = 14
//turf-only flags
#define NOJAUNT 1
+//Bit flags for the flags_inv variable, which determine when a piece of clothing hides another. IE a helmet hiding glasses.
+#define HIDEGLOVES 1 //APPLIES ONLY TO THE EXTERIOR SUIT!!
+#define HIDESUITSTORAGE 2 //APPLIES ONLY TO THE EXTERIOR SUIT!!
+#define HIDEJUMPSUIT 4 //APPLIES ONLY TO THE EXTERIOR SUIT!!
+#define HIDESHOES 8 //APPLIES ONLY TO THE EXTERIOR SUIT!!
+#define HIDEMASK 1 //APPLIES ONLY TO HELMETS!!
+#define HIDEEARS 2 //APPLIES ONLY TO HELMETS!!
+#define HIDEEYES 4 //APPLIES ONLY TO HELMETS!!
+
//Cant seem to find a mob bitflags area other than the powers one
#define NOGRAV 1
@@ -279,4 +288,4 @@ var/static/list/scarySounds = list('thudswoosh.ogg','Taser.ogg','armbomb.ogg','h
#define SEC_LEVEL_GREEN 0
#define SEC_LEVEL_BLUE 1
#define SEC_LEVEL_RED 2
-#define SEC_LEVEL_DELTA 3
\ No newline at end of file
+#define SEC_LEVEL_DELTA 3
diff --git a/code/stylesheet.dm b/code/stylesheet.dm
index b6a30e389da..66a2bbb36ec 100644
--- a/code/stylesheet.dm
+++ b/code/stylesheet.dm
@@ -122,4 +122,21 @@ h1.alert, h2.alert
font-weight: bold;
color: #f00;
}
+
+.emote { font-style: italic;}
+
+.attack {color: #ff0000;}
+.moderate {color: #CC0000;}
+.disarm {color: #990000;}
+.passive {color: #660000;}
+
+.danger {color: #ff0000; font-weight: bold;}
+.warning {color: #ff0000; font-style: italic;}
+.rose {color: #ff5050;}
+.info {color: #0000CC;}
+.notice {color: #000099;}
+
+.alien {color: #543354;}
+
+.newscaster {color: #800000;}
"}
diff --git a/icons/effects/drip.dmi b/icons/effects/drip.dmi
new file mode 100644
index 00000000000..c78843e5863
Binary files /dev/null and b/icons/effects/drip.dmi differ