diff --git a/baystation12.dme b/baystation12.dme
index b419cd59be9..363b635e215 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -24,7 +24,6 @@
#define FILE_DIR "code/defines/mob/living/silicon"
#define FILE_DIR "code/defines/mob/simple_animal"
#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"
@@ -92,6 +91,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"
@@ -334,14 +334,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"
@@ -803,12 +795,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 a25b19fa343..b474e401558 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/mob/mob.dm b/code/defines/mob/mob.dm
deleted file mode 100644
index 87112bf32d5..00000000000
--- a/code/defines/mob/mob.dm
+++ /dev/null
@@ -1,508 +0,0 @@
-/mob
- density = 1
- layer = 4.0
- animate_movement = 2
-// flags = NOREACT
-//THE SOLUTION BUBBLES was funnier.
- var/datum/mind/mind
-
-
-
-
- //MOB overhaul
-
- //Not in use yet
-// var/obj/organstructure/organStructure = null
-
- //Vars that have been relocated.
-
-// var/uses_hud = 0
- var/bruteloss = 0.0//Living
- var/oxyloss = 0.0//Living
- var/toxloss = 0.0//Living
- var/fireloss = 0.0//Living
- var/cloneloss = 0//Carbon
- var/brainloss = 0//Carbon
-
- var/obj/screen/pain = null
- var/obj/screen/flash = null
- var/obj/screen/blind = null
- var/obj/screen/hands = null
- var/obj/screen/mach = null
- var/obj/screen/sleep = null
- var/obj/screen/rest = null
- var/obj/screen/pullin = null
- var/obj/screen/internals = null
- var/obj/screen/oxygen = null
- var/obj/screen/i_select = null
- var/obj/screen/m_select = null
- var/obj/screen/toxin = null
- var/obj/screen/fire = null
- var/obj/screen/bodytemp = null
- var/obj/screen/healths = null
- var/obj/screen/throw_icon = null
- var/obj/screen/nutrition_icon = null
- var/obj/screen/gun/item/item_use_icon = null
- var/obj/screen/gun/move/gun_move_icon = null
- var/obj/screen/gun/run/gun_run_icon = null
- var/obj/screen/gun/mode/gun_setting_icon = null
-
- var/total_luminosity = 0 //This controls luminosity for mobs, when you pick up lights and such this is edited. If you want the mob to use lights it must update its lum in its life proc or such. Note clamp this value around 7 or such to prevent massive light lag.
- var/last_luminosity = 0
-
- /*A bunch of this stuff really needs to go under their own defines instead of being globally attached to mob.
- A variable should only be globally attached to turfs/objects/whatever, when it is in fact needed as such.
- The current method unnecessarily clusters up the variable list, especially for humans (although rearranging won't really clean it up a lot but the difference will be noticable for other mobs).
- I'll make some notes on where certain variable defines should probably go.
- Changing this around would probably require a good look-over the pre-existing code.
- */
- var/midis = 1 //Check if midis should be played for someone
- var/alien_egg_flag = 0//Have you been infected?
- var/last_special = 0
- var/obj/screen/zone_sel/zone_sel = null
-
- var/emote_allowed = 1
- var/computer_id = null
- var/lastattacker = null
- var/lastattacked = null
- var/attack_log = list( )
- var/already_placed = 0.0
- var/obj/machinery/machine = null
- var/other_mobs = null
- var/memory = ""
- var/poll_answer = 0.0
- var/disabilities = 0//Carbon
- var/atom/movable/pulling = null
- var/stat = 0.0
- var/next_move = null
- var/prev_move = null
- var/monkeyizing = null//Carbon
- var/other = 0.0
- var/hand = null
- var/eye_blind = null//Carbon
- var/eye_blurry = null//Carbon
- var/ear_deaf = null//Carbon
- var/ear_damage = null//Carbon
- var/stuttering = null//Carbon
- var/slurring = null
- var/real_name = null
- var/flavor_text = ""
- var/blinded = null
- var/bhunger = 0//Carbon
- var/ajourn = 0
- var/rejuv = null
- var/druggy = 0//Carbon
- var/confused = 0//Carbon
- var/antitoxs = null
- var/plasma = null
- var/sleeping = 0.0//Carbon
- var/sleeping_willingly = 0.0 //Carbon, allows people to sleep forever if desired
- var/admin_observing = 0.0
- var/resting = 0.0//Carbon
- var/lying = 0.0
- var/canmove = 1.0
- var/eye_stat = null//Living, potentially Carbon
-
- var/name_archive //For admin things like possession
-
- var/timeofdeath = 0.0//Living
- var/cpr_time = 1.0//Carbon
- var/health = 100//Living
- var/bodytemperature = 310.055 //98.7 F
- var/drowsyness = 0.0//Carbon
- var/dizziness = 0//Carbon
- var/is_dizzy = 0
- var/is_jittery = 0
- var/jitteriness = 0//Carbon
- var/charges = 0.0
- var/nutrition = 400.0//Carbon
- var/overeatduration = 0 // How long this guy is overeating //Carbon
- var/paralysis = 0.0
- var/stunned = 0.0
- var/weakened = 0.0
- var/losebreath = 0.0//Carbon
- var/intent = null//Living
- var/shakecamera = 0
- var/a_intent = "help"//Living
- var/m_int = null//Living
- var/m_intent = "run"//Living
- var/lastDblClick = 0
- var/lastKnownIP = null
- var/obj/structure/stool/buckled = null//Living
- var/obj/item/weapon/handcuffs/handcuffed = null//Living
- var/obj/item/l_hand = null//Living
- var/obj/item/r_hand = null//Living
- var/obj/item/weapon/back = null//Human/Monkey
- var/obj/item/weapon/tank/internal = null//Human/Monkey
- var/obj/item/weapon/storage/s_active = null//Carbon
- var/obj/item/clothing/mask/wear_mask = null//Carbon
- var/r_epil = 0
- var/r_ch_cou = 0
- var/r_Tourette = 0//Carbon
-
- var/seer = 0 //for cult//Carbon, probably Human
-
- var/miming = null //checks if the guy is a mime//Human
- var/silent = null //Can't talk. Value goes down every life proc.//Human
-
- var/obj/hud/hud_used = null
-
- //var/list/organs = list( ) //moved to human.
- var/list/grabbed_by = list( )
- var/list/requests = list( )
-
- var/list/mapobjs = list()
-
- var/in_throw_mode = 0
-
- var/coughedtime = null
-
- var/inertia_dir = 0
- var/footstep = 1
-
- var/music_lastplayed = "null"
-
- var/job = null//Living
-
- var/nodamage = 0
- var/logged_in = 0
-
- var/underwear = 1//Human
-// var/be_syndicate = 0 //This really should be a client variable. EDIT: Hijacked for my own nefarious purposes! --SkyMarshal
- var/be_random_name = 0
- var/const/blindness = 1//Carbon
- var/const/deafness = 2//Carbon
- var/const/muteness = 4//Carbon
-
-
- var/datum/dna/dna = null//Carbon
- var/radiation = 0.0//Carbon
-
- var/mutations = 0//Carbon
- var/mutations2 = 0//Carbon
- //telekinesis = 1
- //firemut = 2
- //xray = 4
- //hulk = 8
- //clumsy = 16
- //obese = 32
- //husk = 64
-
- var/voice_name = "unidentifiable voice"
- var/voice_message = null // When you are not understood by others (replaced with just screeches, hisses, chimpers etc.)
- var/say_message = null // When you are understood by others. Currently only used by aliens and monkeys in their say_quote procs
-
-//Generic list for proc holders. Only way I can see to enable certain verbs/procs. Should be modified if needed.
- var/proc_holder_list[] = list()//Right now unused.
- //Also unlike the spell list, this would only store the object in contents, not an object in itself.
-
- /* Add this line to whatever stat module you need in order to use the proc holder list.
- Unlike the object spell system, it's also possible to attach verb procs from these objects to right-click menus.
- This requires creating a verb for the object proc holder.
-
- if (proc_holder_list.len)//Generic list for proc_holder objects.
- for(var/obj/effect/proc_holder/P in proc_holder_list)
- statpanel("[P.panel]","",P)
- */
-
-//The last mob/living/carbon to push/drag/grab this mob (mostly used by Metroids friend recognition)
- var/mob/living/carbon/LAssailant = null
-
-//Wizard mode, but can be used in other modes thanks to the brand new "Give Spell" badmin button
- var/obj/effect/proc_holder/spell/list/spell_list = list()
-
-//List of active diseases
-
- var/viruses = list() // replaces var/datum/disease/virus
-
-//Monkey/infected mode
- var/list/resistances = list()
- var/datum/disease/virus = null
-
- mouse_drag_pointer = MOUSE_ACTIVE_POINTER
-
-/*
-//Changeling mode stuff//Carbon
- var/changeling_level = 0
- var/list/absorbed_dna = list()
- var/changeling_fakedeath = 0
- var/chem_charges = 20.00
- var/sting_range = 1
-*/
- var/datum/changeling/changeling = null
-
- var/universal_speak = 0 // Set to 1 to enable the mob to speak to everyone -- TLE
- var/obj/control_object // Hacking in to control objects -- TLE
-
- var/robot_talk_understand = 0
- var/alien_talk_understand = 0
- var/taj_talk_understand = 0
-
-/*For ninjas and others. This variable is checked when a mob moves and I guess it was supposed to allow the mob to move
-through dense areas, such as walls. Setting density to 0 does the same thing. The difference here is that
-the mob is also allowed to move without any sort of restriction. For instance, in space or out of holder objects.*/
-//0 is off, 1 is normal, 2 is for ninjas.
- var/incorporeal_move = 0
-
-
- var/update_icon = 1 // Set to 0 if you want that the mob's icon doesn't update when it moves -- Skie
- // This can be used if you want to change the icon on the fly and want it to stay
-
- var/UI = 'screen1_old.dmi' // For changing the UI from preferences
-
-// var/obj/effect/organstructure/organStructure = null //for dem organs
- var/list/organs = list( ) //List of organs.
-
-//Yes, yes I did. --SkyMarshal
- var/list/atom/hallucinations = list()
- var/halloss = 0
- var/hallucination = 0
-//Singularity wants you!
- var/grav_delay = 0
- var/being_strangled = 0
-
- var/original_name = null //Original name is only used in ghost chat! It is not to be edited by anything!
-
-/mob/proc/contract_disease(var/datum/disease/virus, var/skip_this = 0, var/force_species_check=1)
-// world << "Contract_disease called by [src] with virus [virus]"
- if(stat >=2) return
- if(virus.type in resistances)
- if(prob(99.9)) return
- resistances.Remove(virus.type)//the resistance is futile
-
- for(var/datum/disease/D in viruses)
- if(istype(D, virus.type))
- return // two viruses of the same kind can't infect a body at once!!
-
-
- if(force_species_check)
- var/fail = 1
- for(var/name in virus.affected_species)
- var/mob_type = text2path("/mob/living/carbon/[lowertext(name)]")
- if(mob_type && istype(src, mob_type))
- fail = 0
- break
- if(fail) return
-
- if(skip_this == 1)
- //if(src.virus) < -- this used to replace the current disease. Not anymore!
- //src.virus.cure(0)
-
- var/datum/disease/v = new virus.type
- src.viruses += v
- v.affected_mob = src
- v.strain_data = v.strain_data.Copy()
- v.holder = src
- if(prob(5))
- v.carrier = 1
- return
-
- //if(src.virus) //
- //return //
-
-
-/*
- var/list/clothing_areas = list()
- var/list/covers = list(UPPER_TORSO,LOWER_TORSO,LEGS,FEET,ARMS,HANDS)
- for(var/Covers in covers)
- clothing_areas[Covers] = list()
-
- for(var/obj/item/clothing/Clothing in src)
- if(Clothing)
- for(var/Covers in covers)
- if(Clothing&Covers)
- clothing_areas[Covers] += Clothing
-
-*/
- if(prob(15/virus.permeability_mod)) return //the power of immunity compels this disease!
-
- var/obj/item/clothing/Cl = null
- var/passed = 1
-
- //chances to target this zone
- var/head_ch
- var/body_ch
- var/hands_ch
- var/feet_ch
-
- switch(virus.spread_type)
- if(CONTACT_HANDS)
- head_ch = 0
- body_ch = 0
- hands_ch = 100
- feet_ch = 0
- if(CONTACT_FEET)
- head_ch = 0
- body_ch = 0
- hands_ch = 0
- feet_ch = 100
- else
- head_ch = 100
- body_ch = 100
- hands_ch = 25
- feet_ch = 25
-
-
- var/target_zone = pick(head_ch;1,body_ch;2,hands_ch;3,feet_ch;4)//1 - head, 2 - body, 3 - hands, 4- feet
-
- if(istype(src, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = src
-
- switch(target_zone)
- if(1)
- if(isobj(H.head))
- Cl = H.head
- passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
-// world << "Head pass [passed]"
- if(passed && isobj(H.wear_mask))
- Cl = H.wear_mask
- passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
-// world << "Mask pass [passed]"
- if(2)//arms and legs included
- if(isobj(H.wear_suit))
- Cl = H.wear_suit
- passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
-// world << "Suit pass [passed]"
- if(passed && isobj(H.slot_w_uniform))
- Cl = H.slot_w_uniform
- passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
-// world << "Uniform pass [passed]"
- if(3)
- if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&HANDS)
- Cl = H.wear_suit
- passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
-// world << "Suit pass [passed]"
-
- if(passed && isobj(H.gloves))
- Cl = H.gloves
- passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
-// world << "Gloves pass [passed]"
- if(4)
- if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&FEET)
- Cl = H.wear_suit
- passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
-// world << "Suit pass [passed]"
-
- if(passed && isobj(H.shoes))
- Cl = H.shoes
- passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod)
-// world << "Shoes pass [passed]"
- else
- src << "Something strange's going on, something's wrong."
-
- /*if("feet")
- if(H.shoes && istype(H.shoes, /obj/item/clothing/))
- Cl = H.shoes
- passed = prob(Cl.permeability_coefficient*100)
- //
- world << "Shoes pass [passed]"
- */ //
- else if(istype(src, /mob/living/carbon/monkey))
- var/mob/living/carbon/monkey/M = src
- switch(target_zone)
- if(1)
- if(M.wear_mask && isobj(M.wear_mask))
- Cl = M.wear_mask
- passed = prob(Cl.permeability_coefficient*100+virus.permeability_mod)
- //world << "Mask pass [passed]"
-
- if(passed && virus.spread_type == AIRBORNE && internals)
- passed = (prob(50*virus.permeability_mod))
-
- if(passed)
- //world << "Infection in the mob [src]. YAY"
-
-
-/*
- var/score = 0
- if(istype(src, /mob/living/carbon/human))
- if(src:gloves) score += 5
- if(istype(src:wear_suit, /obj/item/clothing/suit/space)) score += 10
- if(istype(src:wear_suit, /obj/item/clothing/suit/bio_suit)) score += 10
- if(istype(src:head, /obj/item/clothing/head/helmet/space)) score += 5
- if(istype(src:head, /obj/item/clothing/head/bio_hood)) score += 5
- if(wear_mask)
- score += 5
- if((istype(src:wear_mask, /obj/item/clothing/mask) || istype(src:wear_mask, /obj/item/clothing/mask/surgical)) && !internal)
- score += 5
- if(internal)
- score += 5
- if(score > 20)
- return
- else if(score == 20 && prob(95))
- return
- else if(score >= 15 && prob(75))
- return
- else if(score >= 10 && prob(55))
- return
- else if(score >= 5 && prob(35))
- return
- else if(prob(15))
- return
- else*/
- var/datum/disease/v = new virus.type
- src.viruses += v
- v.affected_mob = src
- v.strain_data = v.strain_data.Copy()
- v.holder = src
- if(prob(5))
- v.carrier = 1
- return
- return
-
-
-
-
-
-// ++++ROCKDTBEN++++ MOB PROCS
-
-/mob/proc/getBruteLoss()
- return bruteloss
-
-/mob/proc/adjustBruteLoss(var/amount)
- bruteloss = max(bruteloss + amount, 0)
-
-/mob/proc/getOxyLoss()
- return oxyloss
-
-/mob/proc/adjustOxyLoss(var/amount)
- oxyloss = max(oxyloss + amount, 0)
-
-/mob/proc/setOxyLoss(var/amount)
- oxyloss = amount
-
-/mob/proc/getToxLoss()
- return toxloss
-
-/mob/proc/adjustToxLoss(var/amount)
- toxloss = max(toxloss + amount, 0)
-
-/mob/proc/setToxLoss(var/amount)
- toxloss = amount
-
-/mob/proc/getFireLoss()
- return fireloss
-
-/mob/proc/adjustFireLoss(var/amount)
- fireloss = max(fireloss + amount, 0)
-
-/mob/proc/getCloneLoss()
- return cloneloss
-
-/mob/proc/adjustCloneLoss(var/amount)
- cloneloss = max(cloneloss + amount, 0)
-
-/mob/proc/setCloneLoss(var/amount)
- cloneloss = amount
-
-/mob/proc/getBrainLoss()
- return brainloss
-
-/mob/proc/adjustBrainLoss(var/amount)
- brainloss = max(brainloss + amount, 0)
-
-/mob/proc/setBrainLoss(var/amount)
- brainloss = amount
-
-// ++++ROCKDTBEN++++ MOB PROCS //END
-
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 fe8158178e7..98869b3914d 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
@@ -2963,4 +2962,4 @@ CIRCULAR SAW
z="[usr] pops [m]'s [organ.display_name] bone into the wrong place"
if(5)
z="[usr] performs chiropractice on [m]'s [organ.display_name]"
- return z*/
\ No newline at end of file
+ return z*/
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 146e2895b6c..b9b360eeb87 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 a3d46a69553..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.cloneloss)
if (src.cloneloss < 30)
- usr << "\red [src.name] looks slightly... unfinished?"
+ 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.brainloss >= 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 *---------*"
\ 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/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 d2a60c0ed07..c9b2b87aa2b 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 c3607a1637e..6a868ca1c37 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 280986c3611..b030a59c721 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