From d65a912c8eecf22ec954fbf462448ed1df9bbb46 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Sun, 25 Mar 2012 20:45:00 -0700 Subject: [PATCH 1/6] WIP bloodloss and scaring system. --- code/defines/obj/decal.dm | 9 ++ code/game/objects/devices/scanners.dm | 13 ++- code/game/objects/items/weapons/medical.dm | 110 ++++++++++-------- .../objects/items/weapons/surgery_tools.dm | 1 - code/game/objects/radio/headset.dm | 2 + code/modules/admin/verbs/randomverbs.dm | 6 +- code/modules/chemical/Chemistry-Tools.dm | 87 ++++++++------ .../mob/living/carbon/human/examine.dm | 68 ++++++++--- code/modules/mob/living/carbon/human/human.dm | 67 +++++++++-- code/modules/mob/living/carbon/human/life.dm | 51 ++++++-- code/modules/mob/living/living.dm | 3 +- code/modules/mob/organ/organ.dm | 49 +++++--- icons/effects/drip.dmi | Bin 0 -> 3953 bytes 13 files changed, 326 insertions(+), 140 deletions(-) create mode 100644 icons/effects/drip.dmi diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm index 4ec6f400cb6..72bc25d60ee 100644 --- a/code/defines/obj/decal.dm +++ b/code/defines/obj/decal.dm @@ -62,6 +62,15 @@ 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" + /obj/effect/decal/cleanable/mucus name = "Mucus" desc = "Disgusting mucus." 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/weapons/medical.dm b/code/game/objects/items/weapons/medical.dm index 25ebeda3703..f76ec048fe7 100644 --- a/code/game/objects/items/weapons/medical.dm +++ b/code/game/objects/items/weapons/medical.dm @@ -15,7 +15,35 @@ MEDICAL t_him = "her" user << "\red \The [M] is dead, you cannot help [t_him]!" return - if (M.health < 50) + + var/stoppedblood = 0 + if(ishuman(M)) + 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(H.bloodloss > 0 && heal_brute > 0) // fix wounds too if bruise pack + for(var/datum/organ/wound/W in affecting.wounds) + if(W.bleeding) + if(stoppedblood) + stoppedblood = 2 + break + W.stopbleeding() + stoppedblood = 1 + + if (user) + if (M != user) + H.visible_message("\red [user] patches [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds", "\red You hear something like gauze being ripped.") + else + H.visible_message("\red [user] patches [stoppedblood - 1 ? "some of" : "the last of"] their own wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] your wounds", "\red You hear something like gauze being ripped.") + + if (M.health < 50 && !stoppedblood) var/t_him = "it" if (M.gender == MALE) t_him = "him" @@ -66,36 +94,14 @@ MEDICAL 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 - 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) - M.updatehealth() else M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2)) use(1) + + /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,7 +111,35 @@ MEDICAL t_him = "her" user << "\red \The [M] is dead, you cannot help [t_him]!" return - if (M.health < 0) + + var/stoppedblood = 0 + if(ishuman(M)) + 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(H.bloodloss > 0 && heal_brute > 0) // fix wounds too if bruise pack + for(var/datum/organ/wound/W in affecting.wounds) + if(W.bleeding) + if(stoppedblood) + stoppedblood = 2 + break + W.stopbleeding() + stoppedblood = 1 + + if (user) + if (M != user) + H.visible_message("\red [user] patches [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds", "\red You hear something like gauze being ripped.") + else + H.visible_message("\red [user] patches [stoppedblood - 1 ? "some of" : "the last of"] their own wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] your wounds", "\red You hear something like gauze being ripped.") + + if (M.health < 0 && !stoppedblood) var/t_him = "it" if (M.gender == MALE) t_him = "him" @@ -156,30 +190,6 @@ MEDICAL 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 - 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) - M.updatehealth() else M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2)) diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index c00997e3504..f6185bd6837 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -1565,7 +1565,6 @@ CIRCULAR SAW e.brute_dam = 0.0 e.burn_dam = 0.0 e.bandaged = 0.0 - e.wound_size = 0.0 e.max_damage = initial(e.max_damage) e.bleeding = 0 e.open = 0 diff --git a/code/game/objects/radio/headset.dm b/code/game/objects/radio/headset.dm index dfd8fd08690..0f7fea4fc16 100644 --- a/code/game/objects/radio/headset.dm +++ b/code/game/objects/radio/headset.dm @@ -171,9 +171,11 @@ if(keyslot1) user.put_in_hands(keyslot1) + keyslot1 = null if(keyslot2) user.put_in_hands(keyslot2) + keyslot2 = null recalculateChannels() user << "You pop out the encryption keys in the headset!" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 38735065726..715f4d50601 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,11 @@ Traitors and the like can also be revived with the previous role mostly intact. e.destroyed = 0 e.perma_injury = 0 e.update_icon() + H.vessel = new/datum/reagents(560) + H.vessel.my_atom = H + H.vessel.add_reagent("blood",560) + spawn(1) + H.fixblood() H.update_body() H.update_face() H.UpdateDamageIcon() diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 6b53b44aa78..e680d750743 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -965,55 +965,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.mutations & HUSK) //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) @@ -1068,7 +1073,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/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index ae98f374f1d..077cb399f6c 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -179,31 +179,71 @@ usr << "\red [src.name] doesn't seem as though they want to talk." spawn(10) // I think we might be overloading the clients. + var/list/wound_descriptions = list() 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]." + continue if(temp.wounds) - for(var/datum/organ/external/wound/w in temp.wounds) - var/size = w.wound_size - var/sizetext - switch(size) + 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) - sizetext = "cut" + var/list/cut = wounds[2] + cut += w + wounds[2] = cut if(2) - sizetext = "deep cut" + var/list/cut = wounds[3] + cut += w + wounds[3] = cut if(3) - sizetext = "flesh wound" + var/list/cut = wounds[4] + cut += w + wounds[4] = cut if(4) - sizetext = "gaping wound" + var/list/cut = wounds[5] + cut += w + wounds[5] = cut 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]." - continue + var/list/cut = wounds[6] + cut += w + wounds[6] = cut + wound_descriptions["[temp.display_name]"] = wounds + //Now that we have a big list of all the wounds, on all the limbs. + var/list/wound_flavor_text = list() + for(var/named in wound_descriptions) + var/list/wound_states = wound_descriptions[named] + 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) //How many wounds of what size. + for(var/datum/organ/wound/w in wound_state) + switch(w.wound_size) + if(1) + tally["cut"] += 1 + if(2) + tally["deep cut"] += 1 + if(3) + tally["flesh wound"] += 1 + if(4) + tally["gaping wound"] += 1 + if(5) + tally["big gaping wound"] += 1 + if(6) + tally["massive wound"] += 1 + for(var/tallied in tally) + if(!tally[tallied]) + continue + + +// if(w.bleeding) +// usr << "\red [src.name] is bleeding from a [sizetext] on [t_his] [temp.display_name]." +// continue print_flavor_text() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index c92fa7bd87a..ea9af2d5969 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,50 @@ 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["blood_type"] = dna.b_type + B.data["blood_DNA"] = dna.unique_enzymes + B.data["donor"] = src + if(virus2) + B.data["virus2"] = virus2.getcopy() + +/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 + var/amm = 0.1 * amt + vessel.remove_reagent("blood",amm) + for(var/obj/effect/decal/cleanable/blood/drip/G in T) + nums += G + 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/this = new(T) + var/hax = pick("1","2","3","4","5") + this.icon_state = 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 @@ -1351,6 +1391,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/life.dm b/code/modules/mob/living/carbon/human/life.dm index 7ec31ec32bb..9120b7d659d 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -750,6 +750,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 @@ -826,6 +827,10 @@ return //TODO: DEFERRED + updatepale() + pale = !pale + update_body() + handle_regular_status_updates() var/leg_tally = 2 for(var/name in organs) @@ -850,6 +855,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 + updatepale() + else if(blood_volume <= 448 && blood_volume > 336) + if(!pale) + updatepale() + pale = 1 + 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) + updatepale() + pale = 1 + 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()) @@ -924,16 +962,13 @@ 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++ + if(prob(10*W.woundsize) && W.bleeding) + bloodloss++ if (eye_blind) eye_blind-- blinded = 1 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/organ/organ.dm b/code/modules/mob/organ/organ.dm index 892d32419b7..e38087f4d62 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 @@ -301,27 +300,45 @@ 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 + var/datum/organ/wound/W = new(src) + bleeding = 1 + owner:bloodloss += 10 * size W.wound_size = size W.owner = src.owner - src.wounds += W + W.parent = src + wounds += W -/datum/organ/external/wound +/datum/organ/wound name = "wound" - wound_size = 1 - icon_name = "wound" - display_name = "wound" - parent = null + var/wound_size = 1 + var/datum/organ/external/parent + var/bleeding = 1 //You got wounded, of course it's bleeding. + var/healing_state = 0 proc/stopbleeding() - if(!src.bleeding) - return - var/t = 10 * src.wound_size - src.owner:bloodloss -= t - src.bleeding = 0 - del(src) + if(!bleeding) + 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 + sleep(rand(1800,3000)) //3-5 minutes + healing_state = 2 //Noticibly healing. + sleep(rand(1800,3000)) //3-5 minutes + healing_state = 3 //Angry red scar + sleep(rand(6000,9000)) //10-15 minutes + healing_state = 4 //Scar + sleep(rand(6000,9000)) //10-15 minutes + healing_state = 5 //Faded scar + return + /**************************************************** INTERNAL ORGANS diff --git a/icons/effects/drip.dmi b/icons/effects/drip.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c78843e5863f0b2c2d342df205ffd4acc392c91a GIT binary patch literal 3953 zcmV-%503DOP)V=-0C=2*%CQQ7AQ(mA+5agnxkp)zE}?`&y+e?tLj@}J`VB!_xSazZN3RDn zL5+qk8=^lCNVH`|?Dk7?kZ1%kXZ_~VJ2B14LZYY(Vv7$E5;d_k%)5R26Cx{`tZ1{M z`x6{`Qc$Cz2WB)of|(eFm;e9{vq?ljRCt{2n`v}ZRknb?eQ%}0kO(+nAj~0^kW_+D zA)wt0(gG2oH3BV=AP@&^9KeAHn24y1jZ;gDjo4y9ngD@f5D-~}jyOCS5+s3;x&K>-0KC?LQD1q7I&fB+K|5MV5gy`XN;pzWcWR@1Ga z!Ev~tpwmwf({)9oG9avf|F0vw-e2~puRp#~snDM)sOyPFWq`vpyMNrYDa!9Z*}I`( zX6;WERU`2Z9z5yBOP4M-=z6lJpy0QGj;Ap+Dg!<(ER>cW&tk2ip}M+Rvqn!}KNUA# zy5#eRhTiy{)%s|^loS={cp5{aKSWPK!EZf4$WIW=|Ce2wHhqNGyGleFigdj^(D5{e zYvL*BUXg}t>06NpuF9JC{u0e>+Anl!>&_oWTqzVwpz>C#g*meKi|< zl;hNTF4;lHr4G;|Y>j(9Tj<>;U+&c0^ezo1IKB z^VBFA6Q0HDk_v`I=1ZE^t!@m;md3(UIeg>K#ltuw7s%xA#|Ube%`7dK77TAYkzSgU zO?C%GYVOH({H56xwt2@=EW^mx=ST^~ZQ*f=l`3tE_qrEQSv69PGKKWgee}~~#Llj| zk&Na%t|~Xv{kde|Gk%yfqFJCpGz&Ec*(!-lRw7JiF^k(e8DSJKOLx(69c@j6Ga)a+fK% zdB$(pmWqoFlts=WR&x?rwOX4aCA77U!jI27oQn+j#?90ITdg*g5R{C z#r@i!dBHVY3CS^CB-fbDqgnz!b14}T;@N0>4zKYJE81mw!m1MJ+)&IJ`Ih9EwQ{%l z2?v#(d`Z%r+;29M5pvxN_*}2ymAL6RPx!f47RZm^`y5*MAy+biTq2Azve=~MoGA2< z*P7zzX-StQ%24M--8#bm+S#rhdXlg5RE21~*LsAd+lj$SQRjDb7)J?PYzf9V*Ky`b z_FY0Hoy{=vWuB%7GhmZxXg#-u;N+a?AdKde$|MEZRFE#ks+2JLk}lJglQ8gi?b3p>Uq{Iun`UFz zgX;ix@gjZwOZ3BXkY22zf~`>l5Iw>$)cdLjyZN0e;7xyt{s;LQMG1N8F&ThGk1!6Y z4UD6VNZT^fm`7Xxz>a-6qK_0m3ukDD<6 zS=)6lpim7Ufj(v$H5|f%)~UAQP5m}APdzTvWTk3FFR^!mmXu^i`Ee9-w7F6aud;$(|2PdzH>@(oLshrTorLzin;K-d2LE4_mU zudN$2X#2k#_mrF@PdzSG6!VOHOuem}oFI?KxQ`_6($5^NA@1lpR{1)RE{jxeenryJ z96Fl^Fw{_v@KIDU;d;8fqZFfQLIFE*$WF4mY&p7J$6TyN$VR#|QXmvAzuRX-P)z-` zTLU&K722b|{&`&0f>SbC*eW0ui zx9w4OvDo&irS@Op)kgzs0nq5es3S#uVeaF3IZn13f^biija}-i3O8Sw1GM#Wga$r~ z8b+4oEP3jAX~)+n&QPvmuiYBZ+wY%wG$iEYS*tbFVVd3l)wl@bLD9)N@}h*Y)%c|A z3|byZk^`!V@t}BEZ}gG_N;ksg0uP&Wq@vu-M`kWb7%GZ%S)e-7N!D{OJ(;Vb=q=~F zcHxhQyD~?%uwBpM9shL7qF$v}rJIdr5g9U9)#IR8bz+)qymmKcUFjy-l$5uCJRa)$ zI<1cG;SKWyF4civ(k*@pp7MNNHJ@fECyCabjP#i#Ne_e)o1(n|l?Zo`MkF@f$q3&M zYlR=qx4V3P6=@_B7e57mc|LQ^rx;2V-E=3zeb=mjD`j%Z6YchKb2Dglc~P~BG&)io zeJc-Grw~!@WRP!XxI-dpb;d%J*e*fVF%+;!M?^rp< zX?Ay;!KduzUE8Gc_89D@OwISk(@pItU#-fLmobDLz6;$-NOLFPB9}zwc@ue`$>p$F zWvelmzUT0=v%Dh}EaRSF4Y<*Aly806hxU@kO_tNfRCbS)$SY;&7Anzv~{_$%T3k{#1m_sC3d;hdNU(D z$0^pQu)+Kb^>NpI2Hfw{IjNj%Vmf_&LO8e6lIP=k@TzM9Eos92S`JC9VrtytLrX2~ zeA((@c6-WLpbuuR%#FK8^3+U8AW90blfW{YgFUMHpqul)*-YhjPexn<4>dF;g9V<> zl8r%%84>pqtu1TIu1W@U?ccxhP-tjTgWumGZ0ptmSL2@lDcXT0M>hE?TJ_{fb0`@h zZZ4AT6Yja`O}>n8$3d5qLi3}`&+}2X82K*)zUDrEG7{gU%;H)h@B5Oi8N_>Lk_lx+ zWJ(daWRlB|uS7@(Ceq!Ks}}fj;-@gp^Ig+hPeQj+GD(d`~Ve4zM z)llCFO9uJIUKUgzQ>h1?toL@LkCZTs63SI;qb0h%C!!)5%I^;jkW}AV>X>1RW}wAE zwtDjNZlNTy)suv=h+FKlNwl;ehp&7|>`@mEI$7iGNFTX)bp%{#-{t3so5!d!LS=+) zLtRS&2&WXcniPIJu~MB{Oq$G7Pcjo_v160Bi6XDGAL;Uxx*_~-eyL`X${l=BdXBxm zo%Vb=Whuo_&r;07n-+3A$J7G{CiAD*XntdH@UBXiiK;I-vWX1as;eWQx>+-e*3eMh z(&JhDXWeG1P%pjy<-nH9|yHd8Kyb)%wsqXKabMH({Gz<#5a*7eKjhoPR~-EC77Q&<{uj+gOuxsh;E z=q0~XGwHBnET8iGm=cbu$4a0T;Nd;vJkSIu6TLa=V)$XzGUTQ1Zc2z0p*!U&mLqJx zZF?{S+V Date: Wed, 28 Mar 2012 22:37:08 -0700 Subject: [PATCH 2/6] Final commit of the examine/damage overhaul. --- baystation12.dme | 21 +- .../Cael_Aislinn/Tajara/examine.dm | 519 +++++++++---- code/defines/atom.dm | 1 + code/defines/obj/clothing/costume.dm | 168 ----- code/defines/obj/clothing/ears.dm | 62 -- code/defines/obj/clothing/gimmick.dm | 679 ------------------ code/defines/obj/clothing/gloves.dm | 226 ------ code/defines/obj/clothing/head.dm | 190 ----- code/defines/obj/clothing/jumpsuit.dm | 546 -------------- code/defines/obj/clothing/mask.dm | 149 ---- code/defines/obj/clothing/shoes.dm | 162 ----- code/defines/obj/decal.dm | 1 + code/game/gamemodes/cult/cult_items.dm | 4 +- code/game/jobs/jobs.dm | 7 +- code/game/machinery/turrets.dm | 4 +- code/game/objects/items.dm | 9 +- code/game/objects/items/clothing.dm | 4 +- code/game/objects/items/helper_procs.dm | 4 +- .../objects/items/weapons/implants/implant.dm | 4 + code/game/objects/items/weapons/medical.dm | 222 +++--- code/modules/admin/verbs/randomverbs.dm | 4 + code/modules/chemical/Chemistry-Reagents.dm | 4 +- code/modules/clothing/hardhat.dm | 30 - code/modules/clothing/spacesuit.dm | 2 + code/modules/clothing/spacesuits/captain.dm | 1 + code/modules/clothing/suits/armor.dm | 20 +- code/modules/clothing/suits/bio.dm | 2 + code/modules/clothing/suits/bomb.dm | 2 + code/modules/clothing/suits/fire.dm | 2 + code/modules/clothing/suits/heavy.dm | 6 + code/modules/clothing/suits/hos.dm | 4 +- code/modules/clothing/suits/miscellaneous.dm | 9 + code/modules/clothing/suits/robe.dm | 1 + code/modules/clothing/uniforms/lawyer.dm | 1 + .../mob/living/carbon/human/examine.dm | 545 +++++++++----- code/modules/mob/living/carbon/human/human.dm | 15 +- .../mob/living/carbon/human/human_defense.dm | 7 +- code/modules/mob/living/carbon/human/life.dm | 20 +- code/modules/mob/living/living_defense.dm | 2 +- code/modules/mob/mob_helpers.dm | 6 +- code/modules/mob/organ/organ.dm | 197 ++++- code/modules/projectiles/gun.dm | 2 +- code/setup.dm | 11 +- code/stylesheet.dm | 17 + 44 files changed, 1164 insertions(+), 2728 deletions(-) delete mode 100644 code/defines/obj/clothing/costume.dm delete mode 100644 code/defines/obj/clothing/ears.dm delete mode 100644 code/defines/obj/clothing/gimmick.dm delete mode 100644 code/defines/obj/clothing/gloves.dm delete mode 100644 code/defines/obj/clothing/head.dm delete mode 100644 code/defines/obj/clothing/jumpsuit.dm delete mode 100644 code/defines/obj/clothing/mask.dm delete mode 100644 code/defines/obj/clothing/shoes.dm delete mode 100644 code/modules/clothing/hardhat.dm diff --git a/baystation12.dme b/baystation12.dme index 0724e2048b3..d728ddaa49a 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" @@ -801,12 +793,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 dde36fcd480..33414924172 100644 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm +++ b/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm @@ -1,198 +1,461 @@ /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. + 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) + 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"] + if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit) + msg += wound_flavor_text["chest"] + 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"] + 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"] + 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"] + 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"] - print_flavor_text() - usr << "\blue *---------*" +// if(w.bleeding) +// usr << "\red [src.name] is bleeding from a [sizetext] on [t_his] [temp.display_name]." +// continue + + msg += print_flavor_text() + + msg += "\blue *---------*" + usr << msg diff --git a/code/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/obj/clothing/costume.dm b/code/defines/obj/clothing/costume.dm deleted file mode 100644 index b073230443f..00000000000 --- a/code/defines/obj/clothing/costume.dm +++ /dev/null @@ -1,168 +0,0 @@ -//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/defines/obj/clothing/ears.dm deleted file mode 100644 index c89edc1cd22..00000000000 --- a/code/defines/obj/clothing/ears.dm +++ /dev/null @@ -1,62 +0,0 @@ -// 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/defines/obj/clothing/gimmick.dm deleted file mode 100644 index ffd02dd845a..00000000000 --- a/code/defines/obj/clothing/gimmick.dm +++ /dev/null @@ -1,679 +0,0 @@ -/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/defines/obj/clothing/gloves.dm deleted file mode 100644 index af29b55661e..00000000000 --- a/code/defines/obj/clothing/gloves.dm +++ /dev/null @@ -1,226 +0,0 @@ -// 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/defines/obj/clothing/head.dm b/code/defines/obj/clothing/head.dm deleted file mode 100644 index b232c1bdb0d..00000000000 --- a/code/defines/obj/clothing/head.dm +++ /dev/null @@ -1,190 +0,0 @@ -// 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 diff --git a/code/defines/obj/clothing/jumpsuit.dm b/code/defines/obj/clothing/jumpsuit.dm deleted file mode 100644 index a6b2d3c1f49..00000000000 --- a/code/defines/obj/clothing/jumpsuit.dm +++ /dev/null @@ -1,546 +0,0 @@ -// UNDERS AND BY THAT, NATURALLY I MEAN UNIFORMS/JUMPSUITS - -/obj/item/clothing/under - icon = 'uniforms.dmi' - name = "under" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - protective_temperature = T0C + 50 - heat_transfer_coefficient = 0.30 - permeability_coefficient = 0.90 - flags = FPRINT | TABLEPASS | ONESIZEFITSALL - var/has_sensor = 1//For the crew computer 2 = unable to change mode - var/sensor_mode = 0 - /* - 1 = Report living/dead - 2 = Report detailed damages - 3 = Report location - */ - - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -// Colors - -/obj/item/clothing/under/chameleon -//starts off as black - name = "Black Jumpsuit" - icon_state = "black" - item_state = "bl_suit" - color = "black" - desc = "A plain jumpsuit. It seems to have a small dial on the wrist." - origin_tech = "syndicate=3" - var/list/clothing_choices = list() - armor = list(melee = 10, bullet = 0, laser = 50,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/chameleon/psyche - item_state = "bl_suit" - name = "Groovy Jumpsuit" - desc = "A groovy jumpsuit! It seems to have a small dial on the wrist, that won't stop spinning." - icon_state = "psyche" - color = "psyche" - -/obj/item/clothing/under/chameleon/all - -/obj/item/clothing/under/color/black - name = "Black Jumpsuit" - icon_state = "black" - item_state = "bl_suit" - color = "black" - -/obj/item/clothing/under/color/blackf - name = "Female Black Jumpsuit" - desc = "This one is a lady-size!" - icon_state = "black" - item_state = "bl_suit" - color = "blackf" - -/obj/item/clothing/under/color/blue - name = "Blue Jumpsuit" - icon_state = "blue" - item_state = "b_suit" - color = "blue" - -/obj/item/clothing/under/color/green - name = "Green Jumpsuit" - icon_state = "green" - item_state = "g_suit" - color = "green" - -/obj/item/clothing/under/color/grey - name = "Grey Jumpsuit" - icon_state = "grey" - item_state = "gy_suit" - color = "grey" - -/obj/item/clothing/under/color/orange - name = "Orange Jumpsuit" - desc = "Standard Nanotrasen prisoner wear. Its suit sensors are stuck in the \"Fully On\" position." - icon_state = "orange" - item_state = "o_suit" - color = "orange" - has_sensor = 2 - sensor_mode = 3 - -/obj/item/clothing/under/color/pink - name = "Pink Jumpsuit" - icon_state = "pink" - item_state = "p_suit" - color = "pink" - -/obj/item/clothing/under/color/red - name = "Red Jumpsuit" - icon_state = "red" - item_state = "r_suit" - color = "red" - -/obj/item/clothing/under/color/white - desc = "Made of a special fiber that gives protection against biohazards." - name = "White Jumpsuit" - icon_state = "white" - item_state = "w_suit" - color = "white" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/color/yellow - name = "Yellow Jumpsuit" - icon_state = "yellow" - item_state = "y_suit" - color = "yellow" - -// RANKS -/obj/item/clothing/under/rank - -/obj/item/clothing/under/rank/atmospheric_technician - desc = "A jumpsuit used by atmospheric technicians." - name = "Atmospherics Jumpsuit" - icon_state = "atmos" - item_state = "atmos_suit" - color = "atmos" - -/obj/item/clothing/under/rank/captain - desc = "A blue jumpsuit with gold marking denoting the rank of \"Captain\"." - name = "Captain Jumpsuit" - icon_state = "captain" - item_state = "caparmor" - color = "captain" - -/obj/item/clothing/under/rank/chaplain - desc = "A black jumpsuit, worn by religious folk." - name = "Chaplain Jumpsuit" - icon_state = "chaplain" - item_state = "bl_suit" - color = "chapblack" - -/obj/item/clothing/under/rank/engineer - desc = "An orange high visibility jumpsuit. Used by Nanotrasen Engineers, has minor radiation shielding." - name = "Engineering Jumpsuit" - icon_state = "engine" - item_state = "engi_suit" - color = "engine" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) - -/obj/item/clothing/under/rank/forensic_technician - desc = "It has a Forensics rank stripe on it." - name = "Forensics Jumpsuit" - icon_state = "darkred" - item_state = "r_suit" - color = "forensicsred" - -/obj/item/clothing/under/rank/warden - desc = "Made of a slightly sturdier material than standard jumpsuits, to allow for more robust protection. This one has the word \"Warden\" written on the shoulders." - name = "Warden Jumpsuit" - icon_state = "darkred" - item_state = "r_suit" - color = "darkred" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/security - name = "Security Jumpsuit" - desc = "Made of a slightly sturdier material than standard jumpsuits, to allow for more robust protection." - icon_state = "red" - item_state = "r_suit" - color = "red" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/vice - name = "Vice officer Jumpsuit" - desc = "Your standard issue pretty-boy outfit, as seen on TV." - icon_state = "vice" - item_state = "gy_suit" - color = "vice" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/geneticist - desc = "Made of a special fiber that gives special protection against biohazards. Has a genetics rank stripe on it." - name = "Genetics Jumpsuit" - icon_state = "genetics" - item_state = "w_suit" - color = "geneticswhite" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/chemist - desc = "Made of a special fiber that gives special protection against biohazards. Has a chemist rank stripe on it." - name = "Chemist Jumpsuit" - icon_state = "genetics" - item_state = "w_suit" - color = "chemistrywhite" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/virologist - desc = "Made of a special fiber that gives special protection against biohazards. Has a virologist rank stripe on it." - name = "Virology Jumpsuit" - icon_state = "virology" - item_state = "w_suit" - color = "virologywhite" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/head_of_personnel - desc = "A jumpsuit worn by someone who works in the position of \"Head of Personnel\"." - name = "Head of Personnel Jumpsuit" - icon_state = "hop" - item_state = "b_suit" - color = "hop" - -/obj/item/clothing/under/rank/centcom_officer - desc = "A jumpsuit worn by Centcom Officers." - name = "CentCom Officer Jumpsuit" - icon_state = "centcom" - item_state = "g_suit" - color = "centcom" - -/obj/item/clothing/under/rank/centcom_commander - desc = "A jumpsuit worn by Centcom's highest level Commanders." - name = "CentCom Officer Jumpsuit" - icon_state = "officer" - item_state = "dg_suit" - color = "officer" - -/obj/item/clothing/under/rank/miner - desc = "A snappy jumpsuit with a sturdy set of overalls. It is very dirty." - name = "Shaft Miner Jumpsuit" - icon_state = "miner" - item_state = "miner" - color = "miner" - -/obj/item/clothing/under/rank/roboticist - desc = "A slimming black with reinforced seams. Great for industrial work." - name = "Roboticist Jumpsuit" - icon_state = "robotics" - item_state = "robotics" - color = "robotics" - -/obj/item/clothing/under/rank/head_of_security - desc = "A jumpsuit worn by those few with the dedication to achieve the position of \"Head of Security\". Has slight armor to protect the wearer." - name = "Head of Security Jumpsuit" - icon_state = "hos" - item_state = "r_suit" - color = "hosred" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/chief_engineer - desc = "A high visibility jumpsuit given to those engineers committed enough to their jobs to achieve the rank of \"Chief engineer\". Has minor radiation shielding." - name = "Chief Engineer Jumpsuit" - icon_state = "chiefengineer" - item_state = "g_suit" - color = "chief" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) - -/obj/item/clothing/under/rank/research_director - desc = "A jumpsuit worn by those dedicated to all that is science and have achieved the position of \"Research Director\". Has minor biological anomaly protection." - name = "Research Director Jumpsuit" - icon_state = "director" - item_state = "g_suit" - color = "director" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/janitor - desc = "Official clothing of the station's janitor. Has minor protection from biohazards." - name = "Janitor's Jumpsuit" - icon_state = "janitor" - color = "janitor" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/scientist - desc = "Made of a special fiber that gives special protection against biohazards. Has markings denoting the wearer as a scientist." - name = "Scientist's Jumpsuit" - icon_state = "toxins" - item_state = "w_suit" - color = "toxinswhite" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/medical - desc = "Made of a special fiber that gives special protection against biohazards. Has a cross on the chest denoting that the wearer is trained medical personnel." - name = "Medical Doctor's Jumpsuit" - icon_state = "medical" - item_state = "w_suit" - color = "medical" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/chief_medical_officer - desc = "A jumpsuit worn by those with the dedication to the medical profession who have achieved the position of \"Chief Medical Officer\". Has minor biological protection." - name = "Chief Medical Officer's Jumpsuit" - icon_state = "medical" - item_state = "w_suit" - color = "medical" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/hydroponics - desc = "A jumpsuit designed to protect against minor plant-related hazards." - name = "Hydroponics Jumpsuit" - icon_state = "hydroponics" - item_state = "g_suit" - color = "hydroponics" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/cargo - name = "Quartermaster's Jumpsuit" - desc = "What can brown do for you?" - icon_state = "lightbrown" - item_state = "lb_suit" - color = "cargo" - -/obj/item/clothing/under/rank/cargotech - name = "Cargotech's Jumpsuit" - desc = "Shooooorts! They're comfy and easy to wear!" - icon_state = "cargotech" - item_state = "cargotech" - color = "cargotech" - -/obj/item/clothing/under/rank/mailman - name = "Mailman Jumpsuit" - desc = "Special delivery!" - icon_state = "mailman" - item_state = "b_suit" - color = "mailman" - -/obj/item/clothing/under/sexyclown - name = "Sexyclown suit" - desc = "What can I do for you?" - icon_state = "sexyclown" - item_state = "sexyclown" - color = "sexyclown" - -/obj/item/clothing/under/rank/bartender - desc = "It looks like it could use more flair." - name = "Bartender's Uniform" - icon_state = "ba_suit" - item_state = "ba_suit" - color = "ba_suit" - -/obj/item/clothing/under/rank/clown - name = "clown suit" - desc = "Wearing this, all the children love you, for all the wrong reasons." - icon_state = "clown" - item_state = "clown" - color = "clown" - -/obj/item/clothing/under/rank/chef - desc = "Issued only to the most hardcore chefs in space." - name = "Chef's Uniform" - icon_state = "chef" - color = "chef" - -/obj/item/clothing/under/rank/geneticist_new - desc = "Made of a special fiber that gives special protection against biohazards." - name = "Genetics Jumpsuit" - icon_state = "genetics_new" - item_state = "w_suit" - color = "genetics_new" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/chemist_new - desc = "Made of a special fiber that gives special protection against biohazards." - name = "Chemist Jumpsuit" - icon_state = "chemist_new" - item_state = "w_suit" - color = "chemist_new" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/scientist_new - desc = "Made of a special fiber that gives special protection against biohazards and small explosions." - name = "Scientist Jumpsuit" - icon_state = "scientist_new" - item_state = "w_suit" - color = "scientist_new" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/virologist_new - desc = "Made of a special fiber that gives increased protection against biohazards." - name = "Virologist Jumpsuit" - icon_state = "virologist_new" - item_state = "w_suit" - color = "virologist_new" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - - -// OTHER NONRANKED STATION JOBS -/obj/item/clothing/under/det - name = "Hard worn suit" - desc = "Someone who wears this means business." - icon_state = "detective" - item_state = "det" - color = "detective" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - var/obj/item/weapon/gun - -/obj/item/clothing/under/scratch - name = "White Suit" - desc = "A white suit, suitable for an excellent host" - flags = FPRINT | TABLEPASS - icon_state = "scratch" - item_state = "scratch" - color = "scratch" - -/obj/item/clothing/under/jensen - desc = "You never asked for anything this stylish." - name = "Head of Security Jumpsuit" - icon_state = "jensen" - item_state = "jensen" - color = "jensen" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/sl_suit - desc = "A very amish looking suit." - name = "Amish Suit" - icon_state = "sl_suit" - color = "sl_suit" - -/obj/item/clothing/under/syndicate - name = "Tactical Turtleneck" - desc = "Non-descript, slightly suspicious civilian clothing." - icon_state = "syndicate" - item_state = "bl_suit" - color = "syndicate" - has_sensor = 0 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/syndicate/tacticool - name = "Tacticool Turtleneck" - desc = "Wearing this makes you feel like buying an SKS, going into the woods, and operating." - icon_state = "tactifool" - item_state = "bl_suit" - color = "tactifool" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/syndicate/combat - name = "Combat Turtleneck" - -/obj/item/clothing/under/librarian - name = "Sensible Suit" - desc = "It's very... sensible." - icon_state = "red_suit" - item_state = "red_suit" - color = "red_suit" - -/obj/item/clothing/under/mime - name = "Mime Outfit" - desc = "It's not very colourful." - icon_state = "mime" - item_state = "mime" - color = "mime" - -/obj/item/clothing/under/waiter - name = "Waiter Outfit" - desc = "There is a special pocket for tip." - icon_state = "waiter" - item_state = "waiter" - color = "waiter" - - -// Athletic shorts.. heh -/obj/item/clothing/under/shorts - name = "athletic shorts" - desc = "95% Polyester, 5% Spandex!" - flags = FPRINT | TABLEPASS - body_parts_covered = LOWER_TORSO - -/obj/item/clothing/under/shorts/red - icon_state = "redshorts" - color = "redshorts" - -/obj/item/clothing/under/shorts/green - icon_state = "greenshorts" - color = "greenshorts" - -/obj/item/clothing/under/shorts/blue - icon_state = "blueshorts" - color = "blueshorts" - -/obj/item/clothing/under/shorts/black - icon_state = "blackshorts" - color = "blackshorts" - -/obj/item/clothing/under/shorts/grey - icon_state = "greyshorts" - color = "greyshorts" - -/obj/item/clothing/under/space - name = "NASA Jumpsuit" - icon_state = "black" - item_state = "bl_suit" - color = "black" - desc = "Has a NASA logo on it, made of space proofed materials." - w_class = 4//bulky item - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.02 - heat_transfer_coefficient = 0.02 - protective_temperature = 1000 - flags = FPRINT | TABLEPASS | SUITSPACE - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - -/obj/item/clothing/under/spiderman - name = "Deadpool Suit" - desc = "A suit of Deadpool!" - icon_state = "spiderman" - item_state = "spiderman" - color = "spiderman" - -/obj/item/clothing/under/rank/nursesuit - desc = "Made of a special fiber that gives special protection against biohazards. A jumpsuit commonly worn by nursing staff in the medical department." - name = "Nurse Suit" - icon_state = "nursesuit" - item_state = "nursesuit" - color = "nursesuit" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/acj - name = "Administrative Cybernetic Jumpsuit" - icon_state = "syndicate" - item_state = "bl_suit" - color = "syndicate" - desc = "A cybernetically enhanced jumpsuit used in administrative duties." - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - heat_transfer_coefficient = 0.01 - protective_temperature = 100000 - flags = FPRINT | TABLEPASS | SUITSPACE - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100) - -/obj/item/clothing/under/rank/medical_sleeve - desc = "Made of a special fiber that gives special protection against biohazards. Has a cross on the chest denoting that the wearer is trained medical personneland short sleeves." - name = "Short Sleeve Medical Jumpsuit" - icon_state = "medical_sleeve" - item_state = "w_suit" - color = "medical_sleeve" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/jumpsuitdown - desc = "A rolled down jumpsuit. Great for mechanics." - name = "Rolled Down Jumpsuit" - icon_state = "jumpsuitdown" - item_state = "jumpsuitdown" - color = "jumpsuitdown" \ No newline at end of file diff --git a/code/defines/obj/clothing/mask.dm b/code/defines/obj/clothing/mask.dm deleted file mode 100644 index 5dba832c354..00000000000 --- a/code/defines/obj/clothing/mask.dm +++ /dev/null @@ -1,149 +0,0 @@ -// 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/defines/obj/clothing/shoes.dm deleted file mode 100644 index eb873472f7a..00000000000 --- a/code/defines/obj/clothing/shoes.dm +++ /dev/null @@ -1,162 +0,0 @@ -// 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/defines/obj/decal.dm b/code/defines/obj/decal.dm index 72bc25d60ee..03bf518d7b4 100644 --- a/code/defines/obj/decal.dm +++ b/code/defines/obj/decal.dm @@ -70,6 +70,7 @@ layer = 2 icon = 'drip.dmi' icon_state = "1" + track_amt = 0 /obj/effect/decal/cleanable/mucus name = "Mucus" 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 951f5e05017..bf302b68211 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -124,11 +124,12 @@ var/list/nonhuman_positions = list( return 0 if("Chaplain","Botanist","Hydroponicist","Medical Doctor","Atmospheric Technician","Geneticist") return 1 - if("Quartermaster","Cargo Technician","Chemist", "Engineer","Roboticist", "Security Officer", "Forensic Technician","Detective", "Scientist","Shaft Miner") + if("Quartermaster","Cargo Technician","Chemist", "Engineer","Roboticist", "Security Officer", "Forensic Technician","Detective", "Scientist","Shaft Miner","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" \ No newline at end of file + 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/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/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 1f19f4ca582..9c7f0f0d74f 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 f76ec048fe7..6b03295bd14 100644 --- a/code/game/objects/items/weapons/medical.dm +++ b/code/game/objects/items/weapons/medical.dm @@ -16,6 +16,16 @@ MEDICAL user << "\red \The [M] is dead, you cannot help [t_him]!" return + if (!istype(M)) + user << "\red \The [src] cannot be applied to [M]!" + return 1 + + if ( ! (istype(user, /mob/living/carbon/human) || \ + istype(user, /mob/living/silicon) || \ + istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") ) + user << "\red You don't have the dexterity to do this!" + return 1 + var/stoppedblood = 0 if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -28,78 +38,75 @@ MEDICAL if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0) affecting = H.get_organ("head") - if(H.bloodloss > 0 && heal_brute > 0) // fix wounds too if bruise pack - for(var/datum/organ/wound/W in affecting.wounds) - if(W.bleeding) - if(stoppedblood) - stoppedblood = 2 - break + 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(W.wound_size > 3) + W.bleeding = 0 + else W.stopbleeding() - stoppedblood = 1 + stoppedblood = 1 + break - if (user) + if (user && stoppedblood) if (M != user) - H.visible_message("\red [user] patches [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds", "\red You hear something like gauze being ripped.") + 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 [user] patches [stoppedblood - 1 ? "some of" : "the last of"] their own wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] your wounds", "\red You hear something like gauze being ripped.") - - 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 (!istype(M)) - user << "\red \The [src] cannot be applied to [M]!" - return 1 - - if ( ! (istype(user, /mob/living/carbon/human) || \ - istype(user, /mob/living/silicon) || \ - istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") ) - 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/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() + 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) @@ -112,6 +119,16 @@ MEDICAL user << "\red \The [M] is dead, you cannot help [t_him]!" return + if (!istype(M)) + user << "\red \The [src] cannot be applied to [M]!" + return 1 + + if ( ! (istype(user, /mob/living/carbon/human) || \ + istype(user, /mob/living/silicon) || \ + istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") ) + user << "\red You don't have the dexterity to do this!" + return 1 + var/stoppedblood = 0 if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -124,73 +141,24 @@ MEDICAL if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0) affecting = H.get_organ("head") - if(H.bloodloss > 0 && heal_brute > 0) // fix wounds too if bruise pack - for(var/datum/organ/wound/W in affecting.wounds) - if(W.bleeding) - if(stoppedblood) - stoppedblood = 2 - break - W.stopbleeding() - stoppedblood = 1 + 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 + W.stopbleeding() + stoppedblood = 1 + break - if (user) + if (user && stoppedblood) if (M != user) - H.visible_message("\red [user] patches [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds", "\red You hear something like gauze being ripped.") + 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 [user] patches [stoppedblood - 1 ? "some of" : "the last of"] their own wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] your wounds", "\red You hear something like gauze being ripped.") - - if (M.health < 0 && !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 (!istype(M)) - user << "\red \The [src] cannot be applied to [M]!" - return 1 - - if ( ! (istype(user, /mob/living/carbon/human) || \ - istype(user, /mob/living/silicon) || \ - istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") ) - 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/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() + 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/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 715f4d50601..363d95d88f2 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -510,11 +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 a1602f1192a..4d7b6549fae 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/clothing/hardhat.dm b/code/modules/clothing/hardhat.dm deleted file mode 100644 index c5a60e08ae3..00000000000 --- a/code/modules/clothing/hardhat.dm +++ /dev/null @@ -1,30 +0,0 @@ -/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" - color = "dblue" \ 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 077cb399f6c..44152d06886 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -1,250 +1,461 @@ /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. - var/list/wound_descriptions = list() - 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]." - 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 - //Now that we have a big list of all the wounds, on all the limbs. - var/list/wound_flavor_text = list() - for(var/named in wound_descriptions) - var/list/wound_states = wound_descriptions[named] - 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) //How many wounds of what size. - for(var/datum/organ/wound/w in wound_state) - switch(w.wound_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) - tally["cut"] += 1 + var/list/cut = wounds[2] + cut += w + wounds[2] = cut if(2) - tally["deep cut"] += 1 + var/list/cut = wounds[3] + cut += w + wounds[3] = cut if(3) - tally["flesh wound"] += 1 + var/list/cut = wounds[4] + cut += w + wounds[4] = cut if(4) - tally["gaping wound"] += 1 + var/list/cut = wounds[5] + cut += w + wounds[5] = cut if(5) - tally["big gaping wound"] += 1 - if(6) - tally["massive wound"] += 1 - for(var/tallied in tally) - if(!tally[tallied]) - continue + 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. + 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) + switch(w.wound_size) + if(1) + switch(w.wound_type) + if(0) + tally["cut"] += 1 + if(1) + tally["tiny bruise"] += 1 + if(2) + 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"] + if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit) + msg += wound_flavor_text["chest"] + 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"] + 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"] + 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"] + 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"] // if(w.bleeding) // usr << "\red [src.name] is bleeding from a [sizetext] on [t_his] [temp.display_name]." // continue - print_flavor_text() + msg += print_flavor_text() - usr << "\blue *---------*" + 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 ea9af2d5969..46feb27b61e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -129,21 +129,19 @@ /mob/living/carbon/human/proc/fixblood() for(var/datum/reagent/blood/B in vessel.reagent_list) if(B.id == "blood") - B.data["blood_type"] = dna.b_type - B.data["blood_DNA"] = dna.unique_enzymes - B.data["donor"] = src - if(virus2) - B.data["virus2"] = virus2.getcopy() + 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 + 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++ @@ -151,9 +149,8 @@ if(virus2) D.virus2 += virus2.getcopy() return - var/obj/effect/decal/cleanable/blood/this = new(T) - var/hax = pick("1","2","3","4","5") - this.icon_state = hax + 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) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index ff2ebe92727..a8ca5af66f2 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -90,9 +90,12 @@ 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]?" 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 9120b7d659d..fd89280ca30 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -180,7 +180,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 @@ -827,10 +827,6 @@ return //TODO: DEFERRED - updatepale() - pale = !pale - update_body() - handle_regular_status_updates() var/leg_tally = 2 for(var/name in organs) @@ -864,11 +860,11 @@ else if(blood_volume > 448) if(pale) pale = 0 - updatepale() + update_body() else if(blood_volume <= 448 && blood_volume > 336) if(!pale) - updatepale() pale = 1 + update_body() var/word = pick("dizzy","woosey","faint") src << "\red You feel [word]" if(prob(1)) @@ -876,8 +872,8 @@ src << "\red You feel [word]" else if(blood_volume <= 336 && blood_volume > 244) if(!pale) - updatepale() pale = 1 + update_body() eye_blurry += 6 if(prob(15)) paralysis += rand(1,3) @@ -958,6 +954,7 @@ 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) @@ -966,9 +963,10 @@ // if(prob(35)) // bloodloss += rand(1,10) if(temp.wounds) - for(var/datum/organ/external/wound/W in temp.wounds) - if(prob(10*W.woundsize) && W.bleeding) - bloodloss++ + for(var/datum/organ/wound/W in temp.wounds) + if(W.wound_size && W.bleeding) + blood_max += W.wound_size + bloodloss = min(bloodloss+1,sqrt(blood_max)) if (eye_blind) eye_blind-- blinded = 1 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_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 e38087f4d62..d6e679ac586 100644 --- a/code/modules/mob/organ/organ.dm +++ b/code/modules/mob/organ/organ.dm @@ -55,7 +55,7 @@ perma_dmg = 0 broken = 0 destroyed = 0 - destspawn + destspawn = 0 //Has it spawned the broken limb? min_broken_damage = 30 datum/organ/external/parent damage_msg = "\red You feel a intense pain" @@ -80,22 +80,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) @@ -109,9 +115,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 @@ -125,8 +133,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 @@ -162,7 +213,7 @@ process() if(destroyed) - if(destspawn) + if(!destspawn) droplimb() return if(broken == 0) @@ -251,7 +302,7 @@ 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.") + M.show_message("\red [owner.name]'s [X.name] flies off in an arc.") var/lol2 = pick(cardinal) step(X,lol2) var/lol = pick(cardinal) @@ -264,7 +315,7 @@ 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.") + M.show_message("\red [owner.name]'s [X.name] flies off in an arc.") var/lol2 = pick(cardinal) step(X,lol2) var/lol = pick(cardinal) @@ -277,7 +328,7 @@ 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.") + M.show_message("\red [owner.name]'s [X.name] flies off in an arc.") var/lol2 = pick(cardinal) step(X,lol2) var/lol = pick(cardinal) @@ -290,35 +341,97 @@ 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.") + M.show_message("\red [owner.name]'s [X.name] flies off in an arc.") var/lol2 = pick(cardinal) step(X,lol2) 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 src.owner.update_clothing() - proc/createwound(var/size = 1) - if(ishuman(src.owner)) + proc/createwound(var/size = 1, var/type = 0, var/damage) + if(ishuman(owner)) var/datum/organ/wound/W = new(src) - bleeding = 1 - owner:bloodloss += 10 * size + 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 + W.owner = owner W.parent = src + spawn W.start_close() //Let small cuts close themselves. wounds += W /datum/organ/wound name = "wound" + 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 = 1 //You got wounded, of course it's bleeding. + 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(!bleeding) + if(!bleeding && !healing_state) return 0 - owner:bloodloss -= 10 * src.wound_size +// owner:bloodloss -= 10 * src.wound_size parent.bleeding = 0 for(var/datum/organ/wound/W in parent) if(W.bleeding && W != src) @@ -329,16 +442,52 @@ 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 + 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 81d1f959e9d..202953415b8 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -72,7 +72,7 @@ #define TANK_FRAGMENT_PRESSURE (50.*ONE_ATMOSPHERE) // Boom 3x3 base explosion #define TANK_FRAGMENT_SCALE (10.*ONE_ATMOSPHERE) // +1 for each SCALE kPa aboe threshold // was 2 atm -#define MAX_EXPLOSION_RANGE 14 // Defaults to 12 (was 8) -- TLE +#define MAX_EXPLOSION_RANGE 1024 // Defaults to 12 (was 8) -- TLE #define NORMPIPERATE 30 //pipe-insulation rate divisor @@ -128,6 +128,15 @@ //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 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;} "} From 01d2d5f33942c256751586e7da4e6e6b90cf72ae Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Sun, 25 Mar 2012 20:45:00 -0700 Subject: [PATCH 3/6] WIP bloodloss and scaring system. --- code/defines/obj/decal.dm | 9 ++ code/game/objects/devices/scanners.dm | 13 ++- code/game/objects/items/weapons/medical.dm | 110 ++++++++++-------- .../objects/items/weapons/surgery_tools.dm | 1 - code/game/objects/radio/headset.dm | 2 + code/modules/admin/verbs/randomverbs.dm | 6 +- code/modules/chemical/Chemistry-Tools.dm | 87 ++++++++------ .../mob/living/carbon/human/examine.dm | 68 ++++++++--- code/modules/mob/living/carbon/human/human.dm | 67 +++++++++-- code/modules/mob/living/carbon/human/life.dm | 51 ++++++-- code/modules/mob/living/living.dm | 3 +- code/modules/mob/organ/organ.dm | 49 +++++--- icons/effects/drip.dmi | Bin 0 -> 3953 bytes 13 files changed, 326 insertions(+), 140 deletions(-) create mode 100644 icons/effects/drip.dmi diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm index 4ec6f400cb6..72bc25d60ee 100644 --- a/code/defines/obj/decal.dm +++ b/code/defines/obj/decal.dm @@ -62,6 +62,15 @@ 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" + /obj/effect/decal/cleanable/mucus name = "Mucus" desc = "Disgusting mucus." 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/weapons/medical.dm b/code/game/objects/items/weapons/medical.dm index 25ebeda3703..f76ec048fe7 100644 --- a/code/game/objects/items/weapons/medical.dm +++ b/code/game/objects/items/weapons/medical.dm @@ -15,7 +15,35 @@ MEDICAL t_him = "her" user << "\red \The [M] is dead, you cannot help [t_him]!" return - if (M.health < 50) + + var/stoppedblood = 0 + if(ishuman(M)) + 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(H.bloodloss > 0 && heal_brute > 0) // fix wounds too if bruise pack + for(var/datum/organ/wound/W in affecting.wounds) + if(W.bleeding) + if(stoppedblood) + stoppedblood = 2 + break + W.stopbleeding() + stoppedblood = 1 + + if (user) + if (M != user) + H.visible_message("\red [user] patches [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds", "\red You hear something like gauze being ripped.") + else + H.visible_message("\red [user] patches [stoppedblood - 1 ? "some of" : "the last of"] their own wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] your wounds", "\red You hear something like gauze being ripped.") + + if (M.health < 50 && !stoppedblood) var/t_him = "it" if (M.gender == MALE) t_him = "him" @@ -66,36 +94,14 @@ MEDICAL 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 - 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) - M.updatehealth() else M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2)) use(1) + + /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,7 +111,35 @@ MEDICAL t_him = "her" user << "\red \The [M] is dead, you cannot help [t_him]!" return - if (M.health < 0) + + var/stoppedblood = 0 + if(ishuman(M)) + 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(H.bloodloss > 0 && heal_brute > 0) // fix wounds too if bruise pack + for(var/datum/organ/wound/W in affecting.wounds) + if(W.bleeding) + if(stoppedblood) + stoppedblood = 2 + break + W.stopbleeding() + stoppedblood = 1 + + if (user) + if (M != user) + H.visible_message("\red [user] patches [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds", "\red You hear something like gauze being ripped.") + else + H.visible_message("\red [user] patches [stoppedblood - 1 ? "some of" : "the last of"] their own wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] your wounds", "\red You hear something like gauze being ripped.") + + if (M.health < 0 && !stoppedblood) var/t_him = "it" if (M.gender == MALE) t_him = "him" @@ -156,30 +190,6 @@ MEDICAL 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 - 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) - M.updatehealth() else M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2)) diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index c00997e3504..f6185bd6837 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -1565,7 +1565,6 @@ CIRCULAR SAW e.brute_dam = 0.0 e.burn_dam = 0.0 e.bandaged = 0.0 - e.wound_size = 0.0 e.max_damage = initial(e.max_damage) e.bleeding = 0 e.open = 0 diff --git a/code/game/objects/radio/headset.dm b/code/game/objects/radio/headset.dm index dfd8fd08690..0f7fea4fc16 100644 --- a/code/game/objects/radio/headset.dm +++ b/code/game/objects/radio/headset.dm @@ -171,9 +171,11 @@ if(keyslot1) user.put_in_hands(keyslot1) + keyslot1 = null if(keyslot2) user.put_in_hands(keyslot2) + keyslot2 = null recalculateChannels() user << "You pop out the encryption keys in the headset!" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 38735065726..715f4d50601 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,11 @@ Traitors and the like can also be revived with the previous role mostly intact. e.destroyed = 0 e.perma_injury = 0 e.update_icon() + H.vessel = new/datum/reagents(560) + H.vessel.my_atom = H + H.vessel.add_reagent("blood",560) + spawn(1) + H.fixblood() H.update_body() H.update_face() H.UpdateDamageIcon() diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 6b53b44aa78..e680d750743 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -965,55 +965,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.mutations & HUSK) //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) @@ -1068,7 +1073,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/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index ae98f374f1d..077cb399f6c 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -179,31 +179,71 @@ usr << "\red [src.name] doesn't seem as though they want to talk." spawn(10) // I think we might be overloading the clients. + var/list/wound_descriptions = list() 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]." + continue if(temp.wounds) - for(var/datum/organ/external/wound/w in temp.wounds) - var/size = w.wound_size - var/sizetext - switch(size) + 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) - sizetext = "cut" + var/list/cut = wounds[2] + cut += w + wounds[2] = cut if(2) - sizetext = "deep cut" + var/list/cut = wounds[3] + cut += w + wounds[3] = cut if(3) - sizetext = "flesh wound" + var/list/cut = wounds[4] + cut += w + wounds[4] = cut if(4) - sizetext = "gaping wound" + var/list/cut = wounds[5] + cut += w + wounds[5] = cut 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]." - continue + var/list/cut = wounds[6] + cut += w + wounds[6] = cut + wound_descriptions["[temp.display_name]"] = wounds + //Now that we have a big list of all the wounds, on all the limbs. + var/list/wound_flavor_text = list() + for(var/named in wound_descriptions) + var/list/wound_states = wound_descriptions[named] + 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) //How many wounds of what size. + for(var/datum/organ/wound/w in wound_state) + switch(w.wound_size) + if(1) + tally["cut"] += 1 + if(2) + tally["deep cut"] += 1 + if(3) + tally["flesh wound"] += 1 + if(4) + tally["gaping wound"] += 1 + if(5) + tally["big gaping wound"] += 1 + if(6) + tally["massive wound"] += 1 + for(var/tallied in tally) + if(!tally[tallied]) + continue + + +// if(w.bleeding) +// usr << "\red [src.name] is bleeding from a [sizetext] on [t_his] [temp.display_name]." +// continue print_flavor_text() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index c92fa7bd87a..ea9af2d5969 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,50 @@ 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["blood_type"] = dna.b_type + B.data["blood_DNA"] = dna.unique_enzymes + B.data["donor"] = src + if(virus2) + B.data["virus2"] = virus2.getcopy() + +/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 + var/amm = 0.1 * amt + vessel.remove_reagent("blood",amm) + for(var/obj/effect/decal/cleanable/blood/drip/G in T) + nums += G + 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/this = new(T) + var/hax = pick("1","2","3","4","5") + this.icon_state = 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 @@ -1351,6 +1391,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/life.dm b/code/modules/mob/living/carbon/human/life.dm index 7ec31ec32bb..9120b7d659d 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -750,6 +750,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 @@ -826,6 +827,10 @@ return //TODO: DEFERRED + updatepale() + pale = !pale + update_body() + handle_regular_status_updates() var/leg_tally = 2 for(var/name in organs) @@ -850,6 +855,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 + updatepale() + else if(blood_volume <= 448 && blood_volume > 336) + if(!pale) + updatepale() + pale = 1 + 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) + updatepale() + pale = 1 + 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()) @@ -924,16 +962,13 @@ 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++ + if(prob(10*W.woundsize) && W.bleeding) + bloodloss++ if (eye_blind) eye_blind-- blinded = 1 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/organ/organ.dm b/code/modules/mob/organ/organ.dm index 892d32419b7..e38087f4d62 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 @@ -301,27 +300,45 @@ 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 + var/datum/organ/wound/W = new(src) + bleeding = 1 + owner:bloodloss += 10 * size W.wound_size = size W.owner = src.owner - src.wounds += W + W.parent = src + wounds += W -/datum/organ/external/wound +/datum/organ/wound name = "wound" - wound_size = 1 - icon_name = "wound" - display_name = "wound" - parent = null + var/wound_size = 1 + var/datum/organ/external/parent + var/bleeding = 1 //You got wounded, of course it's bleeding. + var/healing_state = 0 proc/stopbleeding() - if(!src.bleeding) - return - var/t = 10 * src.wound_size - src.owner:bloodloss -= t - src.bleeding = 0 - del(src) + if(!bleeding) + 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 + sleep(rand(1800,3000)) //3-5 minutes + healing_state = 2 //Noticibly healing. + sleep(rand(1800,3000)) //3-5 minutes + healing_state = 3 //Angry red scar + sleep(rand(6000,9000)) //10-15 minutes + healing_state = 4 //Scar + sleep(rand(6000,9000)) //10-15 minutes + healing_state = 5 //Faded scar + return + /**************************************************** INTERNAL ORGANS diff --git a/icons/effects/drip.dmi b/icons/effects/drip.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c78843e5863f0b2c2d342df205ffd4acc392c91a GIT binary patch literal 3953 zcmV-%503DOP)V=-0C=2*%CQQ7AQ(mA+5agnxkp)zE}?`&y+e?tLj@}J`VB!_xSazZN3RDn zL5+qk8=^lCNVH`|?Dk7?kZ1%kXZ_~VJ2B14LZYY(Vv7$E5;d_k%)5R26Cx{`tZ1{M z`x6{`Qc$Cz2WB)of|(eFm;e9{vq?ljRCt{2n`v}ZRknb?eQ%}0kO(+nAj~0^kW_+D zA)wt0(gG2oH3BV=AP@&^9KeAHn24y1jZ;gDjo4y9ngD@f5D-~}jyOCS5+s3;x&K>-0KC?LQD1q7I&fB+K|5MV5gy`XN;pzWcWR@1Ga z!Ev~tpwmwf({)9oG9avf|F0vw-e2~puRp#~snDM)sOyPFWq`vpyMNrYDa!9Z*}I`( zX6;WERU`2Z9z5yBOP4M-=z6lJpy0QGj;Ap+Dg!<(ER>cW&tk2ip}M+Rvqn!}KNUA# zy5#eRhTiy{)%s|^loS={cp5{aKSWPK!EZf4$WIW=|Ce2wHhqNGyGleFigdj^(D5{e zYvL*BUXg}t>06NpuF9JC{u0e>+Anl!>&_oWTqzVwpz>C#g*meKi|< zl;hNTF4;lHr4G;|Y>j(9Tj<>;U+&c0^ezo1IKB z^VBFA6Q0HDk_v`I=1ZE^t!@m;md3(UIeg>K#ltuw7s%xA#|Ube%`7dK77TAYkzSgU zO?C%GYVOH({H56xwt2@=EW^mx=ST^~ZQ*f=l`3tE_qrEQSv69PGKKWgee}~~#Llj| zk&Na%t|~Xv{kde|Gk%yfqFJCpGz&Ec*(!-lRw7JiF^k(e8DSJKOLx(69c@j6Ga)a+fK% zdB$(pmWqoFlts=WR&x?rwOX4aCA77U!jI27oQn+j#?90ITdg*g5R{C z#r@i!dBHVY3CS^CB-fbDqgnz!b14}T;@N0>4zKYJE81mw!m1MJ+)&IJ`Ih9EwQ{%l z2?v#(d`Z%r+;29M5pvxN_*}2ymAL6RPx!f47RZm^`y5*MAy+biTq2Azve=~MoGA2< z*P7zzX-StQ%24M--8#bm+S#rhdXlg5RE21~*LsAd+lj$SQRjDb7)J?PYzf9V*Ky`b z_FY0Hoy{=vWuB%7GhmZxXg#-u;N+a?AdKde$|MEZRFE#ks+2JLk}lJglQ8gi?b3p>Uq{Iun`UFz zgX;ix@gjZwOZ3BXkY22zf~`>l5Iw>$)cdLjyZN0e;7xyt{s;LQMG1N8F&ThGk1!6Y z4UD6VNZT^fm`7Xxz>a-6qK_0m3ukDD<6 zS=)6lpim7Ufj(v$H5|f%)~UAQP5m}APdzTvWTk3FFR^!mmXu^i`Ee9-w7F6aud;$(|2PdzH>@(oLshrTorLzin;K-d2LE4_mU zudN$2X#2k#_mrF@PdzSG6!VOHOuem}oFI?KxQ`_6($5^NA@1lpR{1)RE{jxeenryJ z96Fl^Fw{_v@KIDU;d;8fqZFfQLIFE*$WF4mY&p7J$6TyN$VR#|QXmvAzuRX-P)z-` zTLU&K722b|{&`&0f>SbC*eW0ui zx9w4OvDo&irS@Op)kgzs0nq5es3S#uVeaF3IZn13f^biija}-i3O8Sw1GM#Wga$r~ z8b+4oEP3jAX~)+n&QPvmuiYBZ+wY%wG$iEYS*tbFVVd3l)wl@bLD9)N@}h*Y)%c|A z3|byZk^`!V@t}BEZ}gG_N;ksg0uP&Wq@vu-M`kWb7%GZ%S)e-7N!D{OJ(;Vb=q=~F zcHxhQyD~?%uwBpM9shL7qF$v}rJIdr5g9U9)#IR8bz+)qymmKcUFjy-l$5uCJRa)$ zI<1cG;SKWyF4civ(k*@pp7MNNHJ@fECyCabjP#i#Ne_e)o1(n|l?Zo`MkF@f$q3&M zYlR=qx4V3P6=@_B7e57mc|LQ^rx;2V-E=3zeb=mjD`j%Z6YchKb2Dglc~P~BG&)io zeJc-Grw~!@WRP!XxI-dpb;d%J*e*fVF%+;!M?^rp< zX?Ay;!KduzUE8Gc_89D@OwISk(@pItU#-fLmobDLz6;$-NOLFPB9}zwc@ue`$>p$F zWvelmzUT0=v%Dh}EaRSF4Y<*Aly806hxU@kO_tNfRCbS)$SY;&7Anzv~{_$%T3k{#1m_sC3d;hdNU(D z$0^pQu)+Kb^>NpI2Hfw{IjNj%Vmf_&LO8e6lIP=k@TzM9Eos92S`JC9VrtytLrX2~ zeA((@c6-WLpbuuR%#FK8^3+U8AW90blfW{YgFUMHpqul)*-YhjPexn<4>dF;g9V<> zl8r%%84>pqtu1TIu1W@U?ccxhP-tjTgWumGZ0ptmSL2@lDcXT0M>hE?TJ_{fb0`@h zZZ4AT6Yja`O}>n8$3d5qLi3}`&+}2X82K*)zUDrEG7{gU%;H)h@B5Oi8N_>Lk_lx+ zWJ(daWRlB|uS7@(Ceq!Ks}}fj;-@gp^Ig+hPeQj+GD(d`~Ve4zM z)llCFO9uJIUKUgzQ>h1?toL@LkCZTs63SI;qb0h%C!!)5%I^;jkW}AV>X>1RW}wAE zwtDjNZlNTy)suv=h+FKlNwl;ehp&7|>`@mEI$7iGNFTX)bp%{#-{t3so5!d!LS=+) zLtRS&2&WXcniPIJu~MB{Oq$G7Pcjo_v160Bi6XDGAL;Uxx*_~-eyL`X${l=BdXBxm zo%Vb=Whuo_&r;07n-+3A$J7G{CiAD*XntdH@UBXiiK;I-vWX1as;eWQx>+-e*3eMh z(&JhDXWeG1P%pjy<-nH9|yHd8Kyb)%wsqXKabMH({Gz<#5a*7eKjhoPR~-EC77Q&<{uj+gOuxsh;E z=q0~XGwHBnET8iGm=cbu$4a0T;Nd;vJkSIu6TLa=V)$XzGUTQ1Zc2z0p*!U&mLqJx zZF?{S+V Date: Wed, 28 Mar 2012 22:37:08 -0700 Subject: [PATCH 4/6] Final commit of the examine/damage overhaul. --- baystation12.dme | 21 +- .../Cael_Aislinn/Tajara/examine.dm | 519 +++++++++---- code/defines/atom.dm | 1 + code/defines/obj/clothing/costume.dm | 168 ----- code/defines/obj/clothing/ears.dm | 62 -- code/defines/obj/clothing/gimmick.dm | 679 ------------------ code/defines/obj/clothing/gloves.dm | 226 ------ code/defines/obj/clothing/head.dm | 190 ----- code/defines/obj/clothing/jumpsuit.dm | 546 -------------- code/defines/obj/clothing/mask.dm | 149 ---- code/defines/obj/clothing/shoes.dm | 162 ----- code/defines/obj/decal.dm | 1 + code/game/gamemodes/cult/cult_items.dm | 4 +- code/game/jobs/jobs.dm | 11 +- code/game/machinery/turrets.dm | 4 +- code/game/objects/items.dm | 9 +- code/game/objects/items/clothing.dm | 4 +- code/game/objects/items/helper_procs.dm | 4 +- .../objects/items/weapons/implants/implant.dm | 4 + code/game/objects/items/weapons/medical.dm | 222 +++--- code/modules/admin/verbs/randomverbs.dm | 4 + code/modules/chemical/Chemistry-Reagents.dm | 4 +- code/modules/clothing/hardhat.dm | 30 - code/modules/clothing/spacesuit.dm | 2 + code/modules/clothing/spacesuits/captain.dm | 1 + code/modules/clothing/suits/armor.dm | 20 +- code/modules/clothing/suits/bio.dm | 2 + code/modules/clothing/suits/bomb.dm | 2 + code/modules/clothing/suits/fire.dm | 2 + code/modules/clothing/suits/heavy.dm | 6 + code/modules/clothing/suits/hos.dm | 4 +- code/modules/clothing/suits/miscellaneous.dm | 9 + code/modules/clothing/suits/robe.dm | 1 + code/modules/clothing/uniforms/lawyer.dm | 1 + .../mob/living/carbon/human/examine.dm | 545 +++++++++----- code/modules/mob/living/carbon/human/human.dm | 15 +- .../mob/living/carbon/human/human_defense.dm | 7 +- code/modules/mob/living/carbon/human/life.dm | 20 +- code/modules/mob/living/living_defense.dm | 2 +- code/modules/mob/mob_helpers.dm | 6 +- code/modules/mob/organ/organ.dm | 197 ++++- code/modules/projectiles/gun.dm | 2 +- code/setup.dm | 11 +- code/stylesheet.dm | 17 + 44 files changed, 1166 insertions(+), 2730 deletions(-) delete mode 100644 code/defines/obj/clothing/costume.dm delete mode 100644 code/defines/obj/clothing/ears.dm delete mode 100644 code/defines/obj/clothing/gimmick.dm delete mode 100644 code/defines/obj/clothing/gloves.dm delete mode 100644 code/defines/obj/clothing/head.dm delete mode 100644 code/defines/obj/clothing/jumpsuit.dm delete mode 100644 code/defines/obj/clothing/mask.dm delete mode 100644 code/defines/obj/clothing/shoes.dm delete mode 100644 code/modules/clothing/hardhat.dm diff --git a/baystation12.dme b/baystation12.dme index 0724e2048b3..d728ddaa49a 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" @@ -801,12 +793,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 dde36fcd480..33414924172 100644 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm +++ b/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm @@ -1,198 +1,461 @@ /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. + 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) + 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"] + if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit) + msg += wound_flavor_text["chest"] + 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"] + 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"] + 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"] + 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"] - print_flavor_text() - usr << "\blue *---------*" +// if(w.bleeding) +// usr << "\red [src.name] is bleeding from a [sizetext] on [t_his] [temp.display_name]." +// continue + + msg += print_flavor_text() + + msg += "\blue *---------*" + usr << msg diff --git a/code/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/obj/clothing/costume.dm b/code/defines/obj/clothing/costume.dm deleted file mode 100644 index b073230443f..00000000000 --- a/code/defines/obj/clothing/costume.dm +++ /dev/null @@ -1,168 +0,0 @@ -//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/defines/obj/clothing/ears.dm deleted file mode 100644 index c89edc1cd22..00000000000 --- a/code/defines/obj/clothing/ears.dm +++ /dev/null @@ -1,62 +0,0 @@ -// 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/defines/obj/clothing/gimmick.dm deleted file mode 100644 index ffd02dd845a..00000000000 --- a/code/defines/obj/clothing/gimmick.dm +++ /dev/null @@ -1,679 +0,0 @@ -/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/defines/obj/clothing/gloves.dm deleted file mode 100644 index af29b55661e..00000000000 --- a/code/defines/obj/clothing/gloves.dm +++ /dev/null @@ -1,226 +0,0 @@ -// 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/defines/obj/clothing/head.dm b/code/defines/obj/clothing/head.dm deleted file mode 100644 index b232c1bdb0d..00000000000 --- a/code/defines/obj/clothing/head.dm +++ /dev/null @@ -1,190 +0,0 @@ -// 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 diff --git a/code/defines/obj/clothing/jumpsuit.dm b/code/defines/obj/clothing/jumpsuit.dm deleted file mode 100644 index a6b2d3c1f49..00000000000 --- a/code/defines/obj/clothing/jumpsuit.dm +++ /dev/null @@ -1,546 +0,0 @@ -// UNDERS AND BY THAT, NATURALLY I MEAN UNIFORMS/JUMPSUITS - -/obj/item/clothing/under - icon = 'uniforms.dmi' - name = "under" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - protective_temperature = T0C + 50 - heat_transfer_coefficient = 0.30 - permeability_coefficient = 0.90 - flags = FPRINT | TABLEPASS | ONESIZEFITSALL - var/has_sensor = 1//For the crew computer 2 = unable to change mode - var/sensor_mode = 0 - /* - 1 = Report living/dead - 2 = Report detailed damages - 3 = Report location - */ - - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -// Colors - -/obj/item/clothing/under/chameleon -//starts off as black - name = "Black Jumpsuit" - icon_state = "black" - item_state = "bl_suit" - color = "black" - desc = "A plain jumpsuit. It seems to have a small dial on the wrist." - origin_tech = "syndicate=3" - var/list/clothing_choices = list() - armor = list(melee = 10, bullet = 0, laser = 50,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/chameleon/psyche - item_state = "bl_suit" - name = "Groovy Jumpsuit" - desc = "A groovy jumpsuit! It seems to have a small dial on the wrist, that won't stop spinning." - icon_state = "psyche" - color = "psyche" - -/obj/item/clothing/under/chameleon/all - -/obj/item/clothing/under/color/black - name = "Black Jumpsuit" - icon_state = "black" - item_state = "bl_suit" - color = "black" - -/obj/item/clothing/under/color/blackf - name = "Female Black Jumpsuit" - desc = "This one is a lady-size!" - icon_state = "black" - item_state = "bl_suit" - color = "blackf" - -/obj/item/clothing/under/color/blue - name = "Blue Jumpsuit" - icon_state = "blue" - item_state = "b_suit" - color = "blue" - -/obj/item/clothing/under/color/green - name = "Green Jumpsuit" - icon_state = "green" - item_state = "g_suit" - color = "green" - -/obj/item/clothing/under/color/grey - name = "Grey Jumpsuit" - icon_state = "grey" - item_state = "gy_suit" - color = "grey" - -/obj/item/clothing/under/color/orange - name = "Orange Jumpsuit" - desc = "Standard Nanotrasen prisoner wear. Its suit sensors are stuck in the \"Fully On\" position." - icon_state = "orange" - item_state = "o_suit" - color = "orange" - has_sensor = 2 - sensor_mode = 3 - -/obj/item/clothing/under/color/pink - name = "Pink Jumpsuit" - icon_state = "pink" - item_state = "p_suit" - color = "pink" - -/obj/item/clothing/under/color/red - name = "Red Jumpsuit" - icon_state = "red" - item_state = "r_suit" - color = "red" - -/obj/item/clothing/under/color/white - desc = "Made of a special fiber that gives protection against biohazards." - name = "White Jumpsuit" - icon_state = "white" - item_state = "w_suit" - color = "white" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/color/yellow - name = "Yellow Jumpsuit" - icon_state = "yellow" - item_state = "y_suit" - color = "yellow" - -// RANKS -/obj/item/clothing/under/rank - -/obj/item/clothing/under/rank/atmospheric_technician - desc = "A jumpsuit used by atmospheric technicians." - name = "Atmospherics Jumpsuit" - icon_state = "atmos" - item_state = "atmos_suit" - color = "atmos" - -/obj/item/clothing/under/rank/captain - desc = "A blue jumpsuit with gold marking denoting the rank of \"Captain\"." - name = "Captain Jumpsuit" - icon_state = "captain" - item_state = "caparmor" - color = "captain" - -/obj/item/clothing/under/rank/chaplain - desc = "A black jumpsuit, worn by religious folk." - name = "Chaplain Jumpsuit" - icon_state = "chaplain" - item_state = "bl_suit" - color = "chapblack" - -/obj/item/clothing/under/rank/engineer - desc = "An orange high visibility jumpsuit. Used by Nanotrasen Engineers, has minor radiation shielding." - name = "Engineering Jumpsuit" - icon_state = "engine" - item_state = "engi_suit" - color = "engine" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) - -/obj/item/clothing/under/rank/forensic_technician - desc = "It has a Forensics rank stripe on it." - name = "Forensics Jumpsuit" - icon_state = "darkred" - item_state = "r_suit" - color = "forensicsred" - -/obj/item/clothing/under/rank/warden - desc = "Made of a slightly sturdier material than standard jumpsuits, to allow for more robust protection. This one has the word \"Warden\" written on the shoulders." - name = "Warden Jumpsuit" - icon_state = "darkred" - item_state = "r_suit" - color = "darkred" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/security - name = "Security Jumpsuit" - desc = "Made of a slightly sturdier material than standard jumpsuits, to allow for more robust protection." - icon_state = "red" - item_state = "r_suit" - color = "red" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/vice - name = "Vice officer Jumpsuit" - desc = "Your standard issue pretty-boy outfit, as seen on TV." - icon_state = "vice" - item_state = "gy_suit" - color = "vice" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/geneticist - desc = "Made of a special fiber that gives special protection against biohazards. Has a genetics rank stripe on it." - name = "Genetics Jumpsuit" - icon_state = "genetics" - item_state = "w_suit" - color = "geneticswhite" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/chemist - desc = "Made of a special fiber that gives special protection against biohazards. Has a chemist rank stripe on it." - name = "Chemist Jumpsuit" - icon_state = "genetics" - item_state = "w_suit" - color = "chemistrywhite" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/virologist - desc = "Made of a special fiber that gives special protection against biohazards. Has a virologist rank stripe on it." - name = "Virology Jumpsuit" - icon_state = "virology" - item_state = "w_suit" - color = "virologywhite" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/head_of_personnel - desc = "A jumpsuit worn by someone who works in the position of \"Head of Personnel\"." - name = "Head of Personnel Jumpsuit" - icon_state = "hop" - item_state = "b_suit" - color = "hop" - -/obj/item/clothing/under/rank/centcom_officer - desc = "A jumpsuit worn by Centcom Officers." - name = "CentCom Officer Jumpsuit" - icon_state = "centcom" - item_state = "g_suit" - color = "centcom" - -/obj/item/clothing/under/rank/centcom_commander - desc = "A jumpsuit worn by Centcom's highest level Commanders." - name = "CentCom Officer Jumpsuit" - icon_state = "officer" - item_state = "dg_suit" - color = "officer" - -/obj/item/clothing/under/rank/miner - desc = "A snappy jumpsuit with a sturdy set of overalls. It is very dirty." - name = "Shaft Miner Jumpsuit" - icon_state = "miner" - item_state = "miner" - color = "miner" - -/obj/item/clothing/under/rank/roboticist - desc = "A slimming black with reinforced seams. Great for industrial work." - name = "Roboticist Jumpsuit" - icon_state = "robotics" - item_state = "robotics" - color = "robotics" - -/obj/item/clothing/under/rank/head_of_security - desc = "A jumpsuit worn by those few with the dedication to achieve the position of \"Head of Security\". Has slight armor to protect the wearer." - name = "Head of Security Jumpsuit" - icon_state = "hos" - item_state = "r_suit" - color = "hosred" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/chief_engineer - desc = "A high visibility jumpsuit given to those engineers committed enough to their jobs to achieve the rank of \"Chief engineer\". Has minor radiation shielding." - name = "Chief Engineer Jumpsuit" - icon_state = "chiefengineer" - item_state = "g_suit" - color = "chief" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) - -/obj/item/clothing/under/rank/research_director - desc = "A jumpsuit worn by those dedicated to all that is science and have achieved the position of \"Research Director\". Has minor biological anomaly protection." - name = "Research Director Jumpsuit" - icon_state = "director" - item_state = "g_suit" - color = "director" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/janitor - desc = "Official clothing of the station's janitor. Has minor protection from biohazards." - name = "Janitor's Jumpsuit" - icon_state = "janitor" - color = "janitor" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/scientist - desc = "Made of a special fiber that gives special protection against biohazards. Has markings denoting the wearer as a scientist." - name = "Scientist's Jumpsuit" - icon_state = "toxins" - item_state = "w_suit" - color = "toxinswhite" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/medical - desc = "Made of a special fiber that gives special protection against biohazards. Has a cross on the chest denoting that the wearer is trained medical personnel." - name = "Medical Doctor's Jumpsuit" - icon_state = "medical" - item_state = "w_suit" - color = "medical" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/chief_medical_officer - desc = "A jumpsuit worn by those with the dedication to the medical profession who have achieved the position of \"Chief Medical Officer\". Has minor biological protection." - name = "Chief Medical Officer's Jumpsuit" - icon_state = "medical" - item_state = "w_suit" - color = "medical" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/hydroponics - desc = "A jumpsuit designed to protect against minor plant-related hazards." - name = "Hydroponics Jumpsuit" - icon_state = "hydroponics" - item_state = "g_suit" - color = "hydroponics" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/cargo - name = "Quartermaster's Jumpsuit" - desc = "What can brown do for you?" - icon_state = "lightbrown" - item_state = "lb_suit" - color = "cargo" - -/obj/item/clothing/under/rank/cargotech - name = "Cargotech's Jumpsuit" - desc = "Shooooorts! They're comfy and easy to wear!" - icon_state = "cargotech" - item_state = "cargotech" - color = "cargotech" - -/obj/item/clothing/under/rank/mailman - name = "Mailman Jumpsuit" - desc = "Special delivery!" - icon_state = "mailman" - item_state = "b_suit" - color = "mailman" - -/obj/item/clothing/under/sexyclown - name = "Sexyclown suit" - desc = "What can I do for you?" - icon_state = "sexyclown" - item_state = "sexyclown" - color = "sexyclown" - -/obj/item/clothing/under/rank/bartender - desc = "It looks like it could use more flair." - name = "Bartender's Uniform" - icon_state = "ba_suit" - item_state = "ba_suit" - color = "ba_suit" - -/obj/item/clothing/under/rank/clown - name = "clown suit" - desc = "Wearing this, all the children love you, for all the wrong reasons." - icon_state = "clown" - item_state = "clown" - color = "clown" - -/obj/item/clothing/under/rank/chef - desc = "Issued only to the most hardcore chefs in space." - name = "Chef's Uniform" - icon_state = "chef" - color = "chef" - -/obj/item/clothing/under/rank/geneticist_new - desc = "Made of a special fiber that gives special protection against biohazards." - name = "Genetics Jumpsuit" - icon_state = "genetics_new" - item_state = "w_suit" - color = "genetics_new" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/chemist_new - desc = "Made of a special fiber that gives special protection against biohazards." - name = "Chemist Jumpsuit" - icon_state = "chemist_new" - item_state = "w_suit" - color = "chemist_new" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/rank/scientist_new - desc = "Made of a special fiber that gives special protection against biohazards and small explosions." - name = "Scientist Jumpsuit" - icon_state = "scientist_new" - item_state = "w_suit" - color = "scientist_new" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) - -/obj/item/clothing/under/rank/virologist_new - desc = "Made of a special fiber that gives increased protection against biohazards." - name = "Virologist Jumpsuit" - icon_state = "virologist_new" - item_state = "w_suit" - color = "virologist_new" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - - -// OTHER NONRANKED STATION JOBS -/obj/item/clothing/under/det - name = "Hard worn suit" - desc = "Someone who wears this means business." - icon_state = "detective" - item_state = "det" - color = "detective" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - var/obj/item/weapon/gun - -/obj/item/clothing/under/scratch - name = "White Suit" - desc = "A white suit, suitable for an excellent host" - flags = FPRINT | TABLEPASS - icon_state = "scratch" - item_state = "scratch" - color = "scratch" - -/obj/item/clothing/under/jensen - desc = "You never asked for anything this stylish." - name = "Head of Security Jumpsuit" - icon_state = "jensen" - item_state = "jensen" - color = "jensen" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/sl_suit - desc = "A very amish looking suit." - name = "Amish Suit" - icon_state = "sl_suit" - color = "sl_suit" - -/obj/item/clothing/under/syndicate - name = "Tactical Turtleneck" - desc = "Non-descript, slightly suspicious civilian clothing." - icon_state = "syndicate" - item_state = "bl_suit" - color = "syndicate" - has_sensor = 0 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/syndicate/tacticool - name = "Tacticool Turtleneck" - desc = "Wearing this makes you feel like buying an SKS, going into the woods, and operating." - icon_state = "tactifool" - item_state = "bl_suit" - color = "tactifool" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/under/syndicate/combat - name = "Combat Turtleneck" - -/obj/item/clothing/under/librarian - name = "Sensible Suit" - desc = "It's very... sensible." - icon_state = "red_suit" - item_state = "red_suit" - color = "red_suit" - -/obj/item/clothing/under/mime - name = "Mime Outfit" - desc = "It's not very colourful." - icon_state = "mime" - item_state = "mime" - color = "mime" - -/obj/item/clothing/under/waiter - name = "Waiter Outfit" - desc = "There is a special pocket for tip." - icon_state = "waiter" - item_state = "waiter" - color = "waiter" - - -// Athletic shorts.. heh -/obj/item/clothing/under/shorts - name = "athletic shorts" - desc = "95% Polyester, 5% Spandex!" - flags = FPRINT | TABLEPASS - body_parts_covered = LOWER_TORSO - -/obj/item/clothing/under/shorts/red - icon_state = "redshorts" - color = "redshorts" - -/obj/item/clothing/under/shorts/green - icon_state = "greenshorts" - color = "greenshorts" - -/obj/item/clothing/under/shorts/blue - icon_state = "blueshorts" - color = "blueshorts" - -/obj/item/clothing/under/shorts/black - icon_state = "blackshorts" - color = "blackshorts" - -/obj/item/clothing/under/shorts/grey - icon_state = "greyshorts" - color = "greyshorts" - -/obj/item/clothing/under/space - name = "NASA Jumpsuit" - icon_state = "black" - item_state = "bl_suit" - color = "black" - desc = "Has a NASA logo on it, made of space proofed materials." - w_class = 4//bulky item - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.02 - heat_transfer_coefficient = 0.02 - protective_temperature = 1000 - flags = FPRINT | TABLEPASS | SUITSPACE - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - -/obj/item/clothing/under/spiderman - name = "Deadpool Suit" - desc = "A suit of Deadpool!" - icon_state = "spiderman" - item_state = "spiderman" - color = "spiderman" - -/obj/item/clothing/under/rank/nursesuit - desc = "Made of a special fiber that gives special protection against biohazards. A jumpsuit commonly worn by nursing staff in the medical department." - name = "Nurse Suit" - icon_state = "nursesuit" - item_state = "nursesuit" - color = "nursesuit" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/acj - name = "Administrative Cybernetic Jumpsuit" - icon_state = "syndicate" - item_state = "bl_suit" - color = "syndicate" - desc = "A cybernetically enhanced jumpsuit used in administrative duties." - gas_transfer_coefficient = 0.01 - permeability_coefficient = 0.01 - heat_transfer_coefficient = 0.01 - protective_temperature = 100000 - flags = FPRINT | TABLEPASS | SUITSPACE - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100) - -/obj/item/clothing/under/rank/medical_sleeve - desc = "Made of a special fiber that gives special protection against biohazards. Has a cross on the chest denoting that the wearer is trained medical personneland short sleeves." - name = "Short Sleeve Medical Jumpsuit" - icon_state = "medical_sleeve" - item_state = "w_suit" - color = "medical_sleeve" - permeability_coefficient = 0.50 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - -/obj/item/clothing/under/jumpsuitdown - desc = "A rolled down jumpsuit. Great for mechanics." - name = "Rolled Down Jumpsuit" - icon_state = "jumpsuitdown" - item_state = "jumpsuitdown" - color = "jumpsuitdown" \ No newline at end of file diff --git a/code/defines/obj/clothing/mask.dm b/code/defines/obj/clothing/mask.dm deleted file mode 100644 index 5dba832c354..00000000000 --- a/code/defines/obj/clothing/mask.dm +++ /dev/null @@ -1,149 +0,0 @@ -// 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/defines/obj/clothing/shoes.dm deleted file mode 100644 index eb873472f7a..00000000000 --- a/code/defines/obj/clothing/shoes.dm +++ /dev/null @@ -1,162 +0,0 @@ -// 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/defines/obj/decal.dm b/code/defines/obj/decal.dm index 72bc25d60ee..03bf518d7b4 100644 --- a/code/defines/obj/decal.dm +++ b/code/defines/obj/decal.dm @@ -70,6 +70,7 @@ layer = 2 icon = 'drip.dmi' icon_state = "1" + track_amt = 0 /obj/effect/decal/cleanable/mucus name = "Mucus" 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/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/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 1f19f4ca582..9c7f0f0d74f 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 f76ec048fe7..6b03295bd14 100644 --- a/code/game/objects/items/weapons/medical.dm +++ b/code/game/objects/items/weapons/medical.dm @@ -16,6 +16,16 @@ MEDICAL user << "\red \The [M] is dead, you cannot help [t_him]!" return + if (!istype(M)) + user << "\red \The [src] cannot be applied to [M]!" + return 1 + + if ( ! (istype(user, /mob/living/carbon/human) || \ + istype(user, /mob/living/silicon) || \ + istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") ) + user << "\red You don't have the dexterity to do this!" + return 1 + var/stoppedblood = 0 if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -28,78 +38,75 @@ MEDICAL if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0) affecting = H.get_organ("head") - if(H.bloodloss > 0 && heal_brute > 0) // fix wounds too if bruise pack - for(var/datum/organ/wound/W in affecting.wounds) - if(W.bleeding) - if(stoppedblood) - stoppedblood = 2 - break + 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(W.wound_size > 3) + W.bleeding = 0 + else W.stopbleeding() - stoppedblood = 1 + stoppedblood = 1 + break - if (user) + if (user && stoppedblood) if (M != user) - H.visible_message("\red [user] patches [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds", "\red You hear something like gauze being ripped.") + 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 [user] patches [stoppedblood - 1 ? "some of" : "the last of"] their own wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] your wounds", "\red You hear something like gauze being ripped.") - - 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 (!istype(M)) - user << "\red \The [src] cannot be applied to [M]!" - return 1 - - if ( ! (istype(user, /mob/living/carbon/human) || \ - istype(user, /mob/living/silicon) || \ - istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") ) - 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/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() + 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) @@ -112,6 +119,16 @@ MEDICAL user << "\red \The [M] is dead, you cannot help [t_him]!" return + if (!istype(M)) + user << "\red \The [src] cannot be applied to [M]!" + return 1 + + if ( ! (istype(user, /mob/living/carbon/human) || \ + istype(user, /mob/living/silicon) || \ + istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") ) + user << "\red You don't have the dexterity to do this!" + return 1 + var/stoppedblood = 0 if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -124,73 +141,24 @@ MEDICAL if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0) affecting = H.get_organ("head") - if(H.bloodloss > 0 && heal_brute > 0) // fix wounds too if bruise pack - for(var/datum/organ/wound/W in affecting.wounds) - if(W.bleeding) - if(stoppedblood) - stoppedblood = 2 - break - W.stopbleeding() - stoppedblood = 1 + 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 + W.stopbleeding() + stoppedblood = 1 + break - if (user) + if (user && stoppedblood) if (M != user) - H.visible_message("\red [user] patches [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s wounds", "\red You hear something like gauze being ripped.") + 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 [user] patches [stoppedblood - 1 ? "some of" : "the last of"] their own wounds with [src]", "\red You patch up [stoppedblood - 1 ? "some of" : "the last of"] your wounds", "\red You hear something like gauze being ripped.") - - if (M.health < 0 && !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 (!istype(M)) - user << "\red \The [src] cannot be applied to [M]!" - return 1 - - if ( ! (istype(user, /mob/living/carbon/human) || \ - istype(user, /mob/living/silicon) || \ - istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") ) - 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/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() + 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/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 715f4d50601..363d95d88f2 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -510,11 +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 a1602f1192a..4d7b6549fae 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/clothing/hardhat.dm b/code/modules/clothing/hardhat.dm deleted file mode 100644 index c5a60e08ae3..00000000000 --- a/code/modules/clothing/hardhat.dm +++ /dev/null @@ -1,30 +0,0 @@ -/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" - color = "dblue" \ 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 077cb399f6c..44152d06886 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -1,250 +1,461 @@ /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. - var/list/wound_descriptions = list() - 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]." - 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 - //Now that we have a big list of all the wounds, on all the limbs. - var/list/wound_flavor_text = list() - for(var/named in wound_descriptions) - var/list/wound_states = wound_descriptions[named] - 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) //How many wounds of what size. - for(var/datum/organ/wound/w in wound_state) - switch(w.wound_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) - tally["cut"] += 1 + var/list/cut = wounds[2] + cut += w + wounds[2] = cut if(2) - tally["deep cut"] += 1 + var/list/cut = wounds[3] + cut += w + wounds[3] = cut if(3) - tally["flesh wound"] += 1 + var/list/cut = wounds[4] + cut += w + wounds[4] = cut if(4) - tally["gaping wound"] += 1 + var/list/cut = wounds[5] + cut += w + wounds[5] = cut if(5) - tally["big gaping wound"] += 1 - if(6) - tally["massive wound"] += 1 - for(var/tallied in tally) - if(!tally[tallied]) - continue + 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. + 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) + switch(w.wound_size) + if(1) + switch(w.wound_type) + if(0) + tally["cut"] += 1 + if(1) + tally["tiny bruise"] += 1 + if(2) + 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"] + if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit) + msg += wound_flavor_text["chest"] + 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"] + 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"] + 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"] + 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"] // if(w.bleeding) // usr << "\red [src.name] is bleeding from a [sizetext] on [t_his] [temp.display_name]." // continue - print_flavor_text() + msg += print_flavor_text() - usr << "\blue *---------*" + 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 ea9af2d5969..46feb27b61e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -129,21 +129,19 @@ /mob/living/carbon/human/proc/fixblood() for(var/datum/reagent/blood/B in vessel.reagent_list) if(B.id == "blood") - B.data["blood_type"] = dna.b_type - B.data["blood_DNA"] = dna.unique_enzymes - B.data["donor"] = src - if(virus2) - B.data["virus2"] = virus2.getcopy() + 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 + 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++ @@ -151,9 +149,8 @@ if(virus2) D.virus2 += virus2.getcopy() return - var/obj/effect/decal/cleanable/blood/this = new(T) - var/hax = pick("1","2","3","4","5") - this.icon_state = hax + 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) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index ff2ebe92727..a8ca5af66f2 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -90,9 +90,12 @@ 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]?" 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 9120b7d659d..fd89280ca30 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -180,7 +180,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 @@ -827,10 +827,6 @@ return //TODO: DEFERRED - updatepale() - pale = !pale - update_body() - handle_regular_status_updates() var/leg_tally = 2 for(var/name in organs) @@ -864,11 +860,11 @@ else if(blood_volume > 448) if(pale) pale = 0 - updatepale() + update_body() else if(blood_volume <= 448 && blood_volume > 336) if(!pale) - updatepale() pale = 1 + update_body() var/word = pick("dizzy","woosey","faint") src << "\red You feel [word]" if(prob(1)) @@ -876,8 +872,8 @@ src << "\red You feel [word]" else if(blood_volume <= 336 && blood_volume > 244) if(!pale) - updatepale() pale = 1 + update_body() eye_blurry += 6 if(prob(15)) paralysis += rand(1,3) @@ -958,6 +954,7 @@ 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) @@ -966,9 +963,10 @@ // if(prob(35)) // bloodloss += rand(1,10) if(temp.wounds) - for(var/datum/organ/external/wound/W in temp.wounds) - if(prob(10*W.woundsize) && W.bleeding) - bloodloss++ + for(var/datum/organ/wound/W in temp.wounds) + if(W.wound_size && W.bleeding) + blood_max += W.wound_size + bloodloss = min(bloodloss+1,sqrt(blood_max)) if (eye_blind) eye_blind-- blinded = 1 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_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 e38087f4d62..d6e679ac586 100644 --- a/code/modules/mob/organ/organ.dm +++ b/code/modules/mob/organ/organ.dm @@ -55,7 +55,7 @@ perma_dmg = 0 broken = 0 destroyed = 0 - destspawn + destspawn = 0 //Has it spawned the broken limb? min_broken_damage = 30 datum/organ/external/parent damage_msg = "\red You feel a intense pain" @@ -80,22 +80,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) @@ -109,9 +115,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 @@ -125,8 +133,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 @@ -162,7 +213,7 @@ process() if(destroyed) - if(destspawn) + if(!destspawn) droplimb() return if(broken == 0) @@ -251,7 +302,7 @@ 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.") + M.show_message("\red [owner.name]'s [X.name] flies off in an arc.") var/lol2 = pick(cardinal) step(X,lol2) var/lol = pick(cardinal) @@ -264,7 +315,7 @@ 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.") + M.show_message("\red [owner.name]'s [X.name] flies off in an arc.") var/lol2 = pick(cardinal) step(X,lol2) var/lol = pick(cardinal) @@ -277,7 +328,7 @@ 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.") + M.show_message("\red [owner.name]'s [X.name] flies off in an arc.") var/lol2 = pick(cardinal) step(X,lol2) var/lol = pick(cardinal) @@ -290,35 +341,97 @@ 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.") + M.show_message("\red [owner.name]'s [X.name] flies off in an arc.") var/lol2 = pick(cardinal) step(X,lol2) 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 src.owner.update_clothing() - proc/createwound(var/size = 1) - if(ishuman(src.owner)) + proc/createwound(var/size = 1, var/type = 0, var/damage) + if(ishuman(owner)) var/datum/organ/wound/W = new(src) - bleeding = 1 - owner:bloodloss += 10 * size + 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 + W.owner = owner W.parent = src + spawn W.start_close() //Let small cuts close themselves. wounds += W /datum/organ/wound name = "wound" + 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 = 1 //You got wounded, of course it's bleeding. + 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(!bleeding) + if(!bleeding && !healing_state) return 0 - owner:bloodloss -= 10 * src.wound_size +// owner:bloodloss -= 10 * src.wound_size parent.bleeding = 0 for(var/datum/organ/wound/W in parent) if(W.bleeding && W != src) @@ -329,16 +442,52 @@ 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 + 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 81d1f959e9d..202953415b8 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -72,7 +72,7 @@ #define TANK_FRAGMENT_PRESSURE (50.*ONE_ATMOSPHERE) // Boom 3x3 base explosion #define TANK_FRAGMENT_SCALE (10.*ONE_ATMOSPHERE) // +1 for each SCALE kPa aboe threshold // was 2 atm -#define MAX_EXPLOSION_RANGE 14 // Defaults to 12 (was 8) -- TLE +#define MAX_EXPLOSION_RANGE 1024 // Defaults to 12 (was 8) -- TLE #define NORMPIPERATE 30 //pipe-insulation rate divisor @@ -128,6 +128,15 @@ //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 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;} "} From 0c34286018212eb2e1d7ed38cc2bb0f128eaa9b0 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Thu, 29 Mar 2012 20:40:13 -0700 Subject: [PATCH 5/6] Fixes errors from last commit. --- code/game/objects/items/weapons/medical.dm | 18 +- code/modules/clothing/costume.dm | 168 +++++ code/modules/clothing/ears.dm | 62 ++ code/modules/clothing/gimmick.dm | 679 ++++++++++++++++++ code/modules/clothing/gloves.dm | 226 ++++++ code/modules/clothing/head/hardhat.dm | 31 + code/modules/clothing/head/hats.dm | 126 ++++ code/modules/clothing/head/helmets.dm | 81 +++ code/modules/clothing/jumpsuit.dm | 546 ++++++++++++++ code/modules/clothing/mask.dm | 149 ++++ code/modules/clothing/shoes.dm | 162 +++++ .../mob/living/carbon/human/examine.dm | 14 + .../mob/living/carbon/human/human_defense.dm | 3 +- code/modules/mob/living/carbon/human/life.dm | 2 + code/modules/mob/mob.dm | 3 + code/modules/mob/organ/organ.dm | 35 +- 16 files changed, 2278 insertions(+), 27 deletions(-) create mode 100644 code/modules/clothing/costume.dm create mode 100644 code/modules/clothing/ears.dm create mode 100644 code/modules/clothing/gimmick.dm create mode 100644 code/modules/clothing/gloves.dm create mode 100644 code/modules/clothing/head/hardhat.dm create mode 100644 code/modules/clothing/head/hats.dm create mode 100644 code/modules/clothing/head/helmets.dm create mode 100644 code/modules/clothing/jumpsuit.dm create mode 100644 code/modules/clothing/mask.dm create mode 100644 code/modules/clothing/shoes.dm diff --git a/code/game/objects/items/weapons/medical.dm b/code/game/objects/items/weapons/medical.dm index 6b03295bd14..07c90d3bdb3 100644 --- a/code/game/objects/items/weapons/medical.dm +++ b/code/game/objects/items/weapons/medical.dm @@ -37,6 +37,11 @@ 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 for(var/datum/organ/wound/W in affecting.wounds) if(W.bleeding || !W.healing_state) @@ -44,12 +49,14 @@ MEDICAL continue if(heal_burn && W.wound_type < 2) continue + if(stoppedblood) + stoppedblood++ + break if(W.wound_size > 3) W.bleeding = 0 else W.stopbleeding() stoppedblood = 1 - break if (user && stoppedblood) if (M != user) @@ -140,6 +147,11 @@ 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 for(var/datum/organ/wound/W in affecting.wounds) if(W.bleeding || !W.healing_state) @@ -147,9 +159,11 @@ MEDICAL continue if(heal_burn && W.wound_type < 2) continue + if(stoppedblood) + stoppedblood++ + break W.stopbleeding() stoppedblood = 1 - break if (user && stoppedblood) if (M != user) diff --git a/code/modules/clothing/costume.dm b/code/modules/clothing/costume.dm new file mode 100644 index 00000000000..2c589dc2def --- /dev/null +++ b/code/modules/clothing/costume.dm @@ -0,0 +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) + */ \ No newline at end of file diff --git a/code/modules/clothing/ears.dm b/code/modules/clothing/ears.dm new file mode 100644 index 00000000000..05493ff2e10 --- /dev/null +++ b/code/modules/clothing/ears.dm @@ -0,0 +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" + twoeared = 1 \ No newline at end of file diff --git a/code/modules/clothing/gimmick.dm b/code/modules/clothing/gimmick.dm new file mode 100644 index 00000000000..28d2ce1bf53 --- /dev/null +++ b/code/modules/clothing/gimmick.dm @@ -0,0 +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 diff --git a/code/modules/clothing/gloves.dm b/code/modules/clothing/gloves.dm new file mode 100644 index 00000000000..153b1945fb8 --- /dev/null +++ b/code/modules/clothing/gloves.dm @@ -0,0 +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 + 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/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm new file mode 100644 index 00000000000..c0f955315f6 --- /dev/null +++ b/code/modules/clothing/head/hardhat.dm @@ -0,0 +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) + 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/modules/clothing/head/hats.dm b/code/modules/clothing/head/hats.dm new file mode 100644 index 00000000000..915b5b02e71 --- /dev/null +++ b/code/modules/clothing/head/hats.dm @@ -0,0 +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/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/modules/clothing/jumpsuit.dm b/code/modules/clothing/jumpsuit.dm new file mode 100644 index 00000000000..a6b2d3c1f49 --- /dev/null +++ b/code/modules/clothing/jumpsuit.dm @@ -0,0 +1,546 @@ +// UNDERS AND BY THAT, NATURALLY I MEAN UNIFORMS/JUMPSUITS + +/obj/item/clothing/under + icon = 'uniforms.dmi' + name = "under" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + protective_temperature = T0C + 50 + heat_transfer_coefficient = 0.30 + permeability_coefficient = 0.90 + flags = FPRINT | TABLEPASS | ONESIZEFITSALL + var/has_sensor = 1//For the crew computer 2 = unable to change mode + var/sensor_mode = 0 + /* + 1 = Report living/dead + 2 = Report detailed damages + 3 = Report location + */ + + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + +// Colors + +/obj/item/clothing/under/chameleon +//starts off as black + name = "Black Jumpsuit" + icon_state = "black" + item_state = "bl_suit" + color = "black" + desc = "A plain jumpsuit. It seems to have a small dial on the wrist." + origin_tech = "syndicate=3" + var/list/clothing_choices = list() + armor = list(melee = 10, bullet = 0, laser = 50,energy = 0, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/under/chameleon/psyche + item_state = "bl_suit" + name = "Groovy Jumpsuit" + desc = "A groovy jumpsuit! It seems to have a small dial on the wrist, that won't stop spinning." + icon_state = "psyche" + color = "psyche" + +/obj/item/clothing/under/chameleon/all + +/obj/item/clothing/under/color/black + name = "Black Jumpsuit" + icon_state = "black" + item_state = "bl_suit" + color = "black" + +/obj/item/clothing/under/color/blackf + name = "Female Black Jumpsuit" + desc = "This one is a lady-size!" + icon_state = "black" + item_state = "bl_suit" + color = "blackf" + +/obj/item/clothing/under/color/blue + name = "Blue Jumpsuit" + icon_state = "blue" + item_state = "b_suit" + color = "blue" + +/obj/item/clothing/under/color/green + name = "Green Jumpsuit" + icon_state = "green" + item_state = "g_suit" + color = "green" + +/obj/item/clothing/under/color/grey + name = "Grey Jumpsuit" + icon_state = "grey" + item_state = "gy_suit" + color = "grey" + +/obj/item/clothing/under/color/orange + name = "Orange Jumpsuit" + desc = "Standard Nanotrasen prisoner wear. Its suit sensors are stuck in the \"Fully On\" position." + icon_state = "orange" + item_state = "o_suit" + color = "orange" + has_sensor = 2 + sensor_mode = 3 + +/obj/item/clothing/under/color/pink + name = "Pink Jumpsuit" + icon_state = "pink" + item_state = "p_suit" + color = "pink" + +/obj/item/clothing/under/color/red + name = "Red Jumpsuit" + icon_state = "red" + item_state = "r_suit" + color = "red" + +/obj/item/clothing/under/color/white + desc = "Made of a special fiber that gives protection against biohazards." + name = "White Jumpsuit" + icon_state = "white" + item_state = "w_suit" + color = "white" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/color/yellow + name = "Yellow Jumpsuit" + icon_state = "yellow" + item_state = "y_suit" + color = "yellow" + +// RANKS +/obj/item/clothing/under/rank + +/obj/item/clothing/under/rank/atmospheric_technician + desc = "A jumpsuit used by atmospheric technicians." + name = "Atmospherics Jumpsuit" + icon_state = "atmos" + item_state = "atmos_suit" + color = "atmos" + +/obj/item/clothing/under/rank/captain + desc = "A blue jumpsuit with gold marking denoting the rank of \"Captain\"." + name = "Captain Jumpsuit" + icon_state = "captain" + item_state = "caparmor" + color = "captain" + +/obj/item/clothing/under/rank/chaplain + desc = "A black jumpsuit, worn by religious folk." + name = "Chaplain Jumpsuit" + icon_state = "chaplain" + item_state = "bl_suit" + color = "chapblack" + +/obj/item/clothing/under/rank/engineer + desc = "An orange high visibility jumpsuit. Used by Nanotrasen Engineers, has minor radiation shielding." + name = "Engineering Jumpsuit" + icon_state = "engine" + item_state = "engi_suit" + color = "engine" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) + +/obj/item/clothing/under/rank/forensic_technician + desc = "It has a Forensics rank stripe on it." + name = "Forensics Jumpsuit" + icon_state = "darkred" + item_state = "r_suit" + color = "forensicsred" + +/obj/item/clothing/under/rank/warden + desc = "Made of a slightly sturdier material than standard jumpsuits, to allow for more robust protection. This one has the word \"Warden\" written on the shoulders." + name = "Warden Jumpsuit" + icon_state = "darkred" + item_state = "r_suit" + color = "darkred" + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/under/rank/security + name = "Security Jumpsuit" + desc = "Made of a slightly sturdier material than standard jumpsuits, to allow for more robust protection." + icon_state = "red" + item_state = "r_suit" + color = "red" + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/under/rank/vice + name = "Vice officer Jumpsuit" + desc = "Your standard issue pretty-boy outfit, as seen on TV." + icon_state = "vice" + item_state = "gy_suit" + color = "vice" + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/under/rank/geneticist + desc = "Made of a special fiber that gives special protection against biohazards. Has a genetics rank stripe on it." + name = "Genetics Jumpsuit" + icon_state = "genetics" + item_state = "w_suit" + color = "geneticswhite" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/chemist + desc = "Made of a special fiber that gives special protection against biohazards. Has a chemist rank stripe on it." + name = "Chemist Jumpsuit" + icon_state = "genetics" + item_state = "w_suit" + color = "chemistrywhite" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/virologist + desc = "Made of a special fiber that gives special protection against biohazards. Has a virologist rank stripe on it." + name = "Virology Jumpsuit" + icon_state = "virology" + item_state = "w_suit" + color = "virologywhite" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/head_of_personnel + desc = "A jumpsuit worn by someone who works in the position of \"Head of Personnel\"." + name = "Head of Personnel Jumpsuit" + icon_state = "hop" + item_state = "b_suit" + color = "hop" + +/obj/item/clothing/under/rank/centcom_officer + desc = "A jumpsuit worn by Centcom Officers." + name = "CentCom Officer Jumpsuit" + icon_state = "centcom" + item_state = "g_suit" + color = "centcom" + +/obj/item/clothing/under/rank/centcom_commander + desc = "A jumpsuit worn by Centcom's highest level Commanders." + name = "CentCom Officer Jumpsuit" + icon_state = "officer" + item_state = "dg_suit" + color = "officer" + +/obj/item/clothing/under/rank/miner + desc = "A snappy jumpsuit with a sturdy set of overalls. It is very dirty." + name = "Shaft Miner Jumpsuit" + icon_state = "miner" + item_state = "miner" + color = "miner" + +/obj/item/clothing/under/rank/roboticist + desc = "A slimming black with reinforced seams. Great for industrial work." + name = "Roboticist Jumpsuit" + icon_state = "robotics" + item_state = "robotics" + color = "robotics" + +/obj/item/clothing/under/rank/head_of_security + desc = "A jumpsuit worn by those few with the dedication to achieve the position of \"Head of Security\". Has slight armor to protect the wearer." + name = "Head of Security Jumpsuit" + icon_state = "hos" + item_state = "r_suit" + color = "hosred" + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/under/rank/chief_engineer + desc = "A high visibility jumpsuit given to those engineers committed enough to their jobs to achieve the rank of \"Chief engineer\". Has minor radiation shielding." + name = "Chief Engineer Jumpsuit" + icon_state = "chiefengineer" + item_state = "g_suit" + color = "chief" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10) + +/obj/item/clothing/under/rank/research_director + desc = "A jumpsuit worn by those dedicated to all that is science and have achieved the position of \"Research Director\". Has minor biological anomaly protection." + name = "Research Director Jumpsuit" + icon_state = "director" + item_state = "g_suit" + color = "director" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/janitor + desc = "Official clothing of the station's janitor. Has minor protection from biohazards." + name = "Janitor's Jumpsuit" + icon_state = "janitor" + color = "janitor" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/scientist + desc = "Made of a special fiber that gives special protection against biohazards. Has markings denoting the wearer as a scientist." + name = "Scientist's Jumpsuit" + icon_state = "toxins" + item_state = "w_suit" + color = "toxinswhite" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) + +/obj/item/clothing/under/rank/medical + desc = "Made of a special fiber that gives special protection against biohazards. Has a cross on the chest denoting that the wearer is trained medical personnel." + name = "Medical Doctor's Jumpsuit" + icon_state = "medical" + item_state = "w_suit" + color = "medical" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/chief_medical_officer + desc = "A jumpsuit worn by those with the dedication to the medical profession who have achieved the position of \"Chief Medical Officer\". Has minor biological protection." + name = "Chief Medical Officer's Jumpsuit" + icon_state = "medical" + item_state = "w_suit" + color = "medical" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/hydroponics + desc = "A jumpsuit designed to protect against minor plant-related hazards." + name = "Hydroponics Jumpsuit" + icon_state = "hydroponics" + item_state = "g_suit" + color = "hydroponics" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/cargo + name = "Quartermaster's Jumpsuit" + desc = "What can brown do for you?" + icon_state = "lightbrown" + item_state = "lb_suit" + color = "cargo" + +/obj/item/clothing/under/rank/cargotech + name = "Cargotech's Jumpsuit" + desc = "Shooooorts! They're comfy and easy to wear!" + icon_state = "cargotech" + item_state = "cargotech" + color = "cargotech" + +/obj/item/clothing/under/rank/mailman + name = "Mailman Jumpsuit" + desc = "Special delivery!" + icon_state = "mailman" + item_state = "b_suit" + color = "mailman" + +/obj/item/clothing/under/sexyclown + name = "Sexyclown suit" + desc = "What can I do for you?" + icon_state = "sexyclown" + item_state = "sexyclown" + color = "sexyclown" + +/obj/item/clothing/under/rank/bartender + desc = "It looks like it could use more flair." + name = "Bartender's Uniform" + icon_state = "ba_suit" + item_state = "ba_suit" + color = "ba_suit" + +/obj/item/clothing/under/rank/clown + name = "clown suit" + desc = "Wearing this, all the children love you, for all the wrong reasons." + icon_state = "clown" + item_state = "clown" + color = "clown" + +/obj/item/clothing/under/rank/chef + desc = "Issued only to the most hardcore chefs in space." + name = "Chef's Uniform" + icon_state = "chef" + color = "chef" + +/obj/item/clothing/under/rank/geneticist_new + desc = "Made of a special fiber that gives special protection against biohazards." + name = "Genetics Jumpsuit" + icon_state = "genetics_new" + item_state = "w_suit" + color = "genetics_new" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/chemist_new + desc = "Made of a special fiber that gives special protection against biohazards." + name = "Chemist Jumpsuit" + icon_state = "chemist_new" + item_state = "w_suit" + color = "chemist_new" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/rank/scientist_new + desc = "Made of a special fiber that gives special protection against biohazards and small explosions." + name = "Scientist Jumpsuit" + icon_state = "scientist_new" + item_state = "w_suit" + color = "scientist_new" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0) + +/obj/item/clothing/under/rank/virologist_new + desc = "Made of a special fiber that gives increased protection against biohazards." + name = "Virologist Jumpsuit" + icon_state = "virologist_new" + item_state = "w_suit" + color = "virologist_new" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + + +// OTHER NONRANKED STATION JOBS +/obj/item/clothing/under/det + name = "Hard worn suit" + desc = "Someone who wears this means business." + icon_state = "detective" + item_state = "det" + color = "detective" + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + var/obj/item/weapon/gun + +/obj/item/clothing/under/scratch + name = "White Suit" + desc = "A white suit, suitable for an excellent host" + flags = FPRINT | TABLEPASS + icon_state = "scratch" + item_state = "scratch" + color = "scratch" + +/obj/item/clothing/under/jensen + desc = "You never asked for anything this stylish." + name = "Head of Security Jumpsuit" + icon_state = "jensen" + item_state = "jensen" + color = "jensen" + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/under/sl_suit + desc = "A very amish looking suit." + name = "Amish Suit" + icon_state = "sl_suit" + color = "sl_suit" + +/obj/item/clothing/under/syndicate + name = "Tactical Turtleneck" + desc = "Non-descript, slightly suspicious civilian clothing." + icon_state = "syndicate" + item_state = "bl_suit" + color = "syndicate" + has_sensor = 0 + armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/under/syndicate/tacticool + name = "Tacticool Turtleneck" + desc = "Wearing this makes you feel like buying an SKS, going into the woods, and operating." + icon_state = "tactifool" + item_state = "bl_suit" + color = "tactifool" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/under/syndicate/combat + name = "Combat Turtleneck" + +/obj/item/clothing/under/librarian + name = "Sensible Suit" + desc = "It's very... sensible." + icon_state = "red_suit" + item_state = "red_suit" + color = "red_suit" + +/obj/item/clothing/under/mime + name = "Mime Outfit" + desc = "It's not very colourful." + icon_state = "mime" + item_state = "mime" + color = "mime" + +/obj/item/clothing/under/waiter + name = "Waiter Outfit" + desc = "There is a special pocket for tip." + icon_state = "waiter" + item_state = "waiter" + color = "waiter" + + +// Athletic shorts.. heh +/obj/item/clothing/under/shorts + name = "athletic shorts" + desc = "95% Polyester, 5% Spandex!" + flags = FPRINT | TABLEPASS + body_parts_covered = LOWER_TORSO + +/obj/item/clothing/under/shorts/red + icon_state = "redshorts" + color = "redshorts" + +/obj/item/clothing/under/shorts/green + icon_state = "greenshorts" + color = "greenshorts" + +/obj/item/clothing/under/shorts/blue + icon_state = "blueshorts" + color = "blueshorts" + +/obj/item/clothing/under/shorts/black + icon_state = "blackshorts" + color = "blackshorts" + +/obj/item/clothing/under/shorts/grey + icon_state = "greyshorts" + color = "greyshorts" + +/obj/item/clothing/under/space + name = "NASA Jumpsuit" + icon_state = "black" + item_state = "bl_suit" + color = "black" + desc = "Has a NASA logo on it, made of space proofed materials." + w_class = 4//bulky item + gas_transfer_coefficient = 0.01 + permeability_coefficient = 0.02 + heat_transfer_coefficient = 0.02 + protective_temperature = 1000 + flags = FPRINT | TABLEPASS | SUITSPACE + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + +/obj/item/clothing/under/spiderman + name = "Deadpool Suit" + desc = "A suit of Deadpool!" + icon_state = "spiderman" + item_state = "spiderman" + color = "spiderman" + +/obj/item/clothing/under/rank/nursesuit + desc = "Made of a special fiber that gives special protection against biohazards. A jumpsuit commonly worn by nursing staff in the medical department." + name = "Nurse Suit" + icon_state = "nursesuit" + item_state = "nursesuit" + color = "nursesuit" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/acj + name = "Administrative Cybernetic Jumpsuit" + icon_state = "syndicate" + item_state = "bl_suit" + color = "syndicate" + desc = "A cybernetically enhanced jumpsuit used in administrative duties." + gas_transfer_coefficient = 0.01 + permeability_coefficient = 0.01 + heat_transfer_coefficient = 0.01 + protective_temperature = 100000 + flags = FPRINT | TABLEPASS | SUITSPACE + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS + armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100) + +/obj/item/clothing/under/rank/medical_sleeve + desc = "Made of a special fiber that gives special protection against biohazards. Has a cross on the chest denoting that the wearer is trained medical personneland short sleeves." + name = "Short Sleeve Medical Jumpsuit" + icon_state = "medical_sleeve" + item_state = "w_suit" + color = "medical_sleeve" + permeability_coefficient = 0.50 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + +/obj/item/clothing/under/jumpsuitdown + desc = "A rolled down jumpsuit. Great for mechanics." + name = "Rolled Down Jumpsuit" + icon_state = "jumpsuitdown" + item_state = "jumpsuitdown" + color = "jumpsuitdown" \ No newline at end of file diff --git a/code/modules/clothing/mask.dm b/code/modules/clothing/mask.dm new file mode 100644 index 00000000000..5873d125701 --- /dev/null +++ b/code/modules/clothing/mask.dm @@ -0,0 +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." + icon_state = "fake-moustache" \ No newline at end of file diff --git a/code/modules/clothing/shoes.dm b/code/modules/clothing/shoes.dm new file mode 100644 index 00000000000..d83cecfa01b --- /dev/null +++ b/code/modules/clothing/shoes.dm @@ -0,0 +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" + color = "hosred" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 44152d06886..cc75597ada4 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -275,6 +275,7 @@ 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() @@ -284,6 +285,7 @@ "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) @@ -429,26 +431,38 @@ 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" // if(w.bleeding) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index a8ca5af66f2..d5806a36423 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -92,10 +92,11 @@ emp_act var/datum/organ/external/affecting = get_organ(ran_zone(user.zone_sel.selecting)) var/hit_area = affecting.display_name - if(affecting.destroyed) + 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 fd89280ca30..15ad58ee27f 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -966,6 +966,8 @@ 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-- 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/organ/organ.dm b/code/modules/mob/organ/organ.dm index d6e679ac586..5e4977c652f 100644 --- a/code/modules/mob/organ/organ.dm +++ b/code/modules/mob/organ/organ.dm @@ -56,6 +56,7 @@ broken = 0 destroyed = 0 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" @@ -228,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 @@ -300,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 in an arc.") - var/lol2 = pick(cardinal) - step(X,lol2) + S.droplimb() var/lol = pick(cardinal) step(H,lol) destroyed = 1 @@ -313,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 an arc.") - var/lol2 = pick(cardinal) - step(X,lol2) + S.droplimb() var/lol = pick(cardinal) step(H,lol) destroyed = 1 @@ -326,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 in an arc.") - var/lol2 = pick(cardinal) - step(X,lol2) + S.droplimb() var/lol = pick(cardinal) step(H,lol) destroyed = 1 @@ -339,11 +326,7 @@ 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 in an arc.") - var/lol2 = pick(cardinal) - step(X,lol2) + S.droplimb() var/lol = pick(cardinal) step(H,lol) destroyed = 1 @@ -376,6 +359,10 @@ 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, var/type = 0, var/damage) @@ -429,7 +416,7 @@ return proc/stopbleeding() - if(!bleeding && !healing_state) + if(healing_state) return 0 // owner:bloodloss -= 10 * src.wound_size parent.bleeding = 0 From ab575b2fe1ff5d564f69ba14c28ae1e9f3efd0bd Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Thu, 29 Mar 2012 21:27:39 -0700 Subject: [PATCH 6/6] Fixes the no-original-name cloning bug. --- code/defines/mob/mob.dm | 508 --------------------------------- code/game/machinery/cloning.dm | 6 +- 2 files changed, 4 insertions(+), 510 deletions(-) delete mode 100644 code/defines/mob/mob.dm 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/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)