From 5b20f6a2fd15a0476a98f4d59a8d29e51b1826b3 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Mon, 2 Apr 2012 19:44:43 -0700 Subject: [PATCH 1/3] Adds dismemberment to Tajarans and Monkeys. Added some sanity checks to prevent you from punching you when they are missing hands. Fixed more wound stuff. Some examine fixes. Adds a hasorgans proc which checks if the given argument is a mob with organs. Fixed pathing for guncode. --- .../Cael_Aislinn/Tajara/examine.dm | 10 +- .../Cael_Aislinn/Tajara/tajaran.dm | 7 +- .../Cael_Aislinn/Tajara/tajaran.dmi | Bin 19238 -> 19273 bytes code/game/atom_procs.dm | 11 + code/game/dna.dm | 58 ++-- code/game/machinery/adv_med.dm | 4 +- code/game/objects/items/item.dm | 23 ++ code/game/objects/items/weapons/cards_ids.dm | 21 +- code/game/objects/items/weapons/medical.dm | 8 +- .../objects/items/weapons/surgery_tools.dm | 31 +-- code/modules/chemical/Chemistry-Holder.dm | 6 +- code/modules/chemical/Chemistry-Reagents.dm | 7 +- code/modules/mob/living/carbon/carbon.dm | 43 ++- code/modules/mob/living/carbon/human/death.dm | 1 + .../mob/living/carbon/human/examine.dm | 10 +- code/modules/mob/living/carbon/human/human.dm | 26 +- .../mob/living/carbon/human/human_damage.dm | 9 - .../mob/living/carbon/monkey/examine.dm | 259 ++++++++++++++++-- code/modules/mob/living/carbon/monkey/life.dm | 7 +- .../mob/living/carbon/monkey/monkey.dm | 183 +++++++++---- code/modules/mob/living/damage_procs.dm | 4 +- code/modules/mob/mob.dm | 4 +- code/modules/mob/mob_defines.dm | 1 - code/modules/mob/mob_helpers.dm | 5 + code/modules/mob/organ/organ.dm | 152 +++++----- code/modules/projectiles/gun.dm | 2 +- code/modules/projectiles/projectile.dm | 47 ++-- icons/mob/monkey.dmi | Bin 15718 -> 18396 bytes 28 files changed, 675 insertions(+), 264 deletions(-) diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm index af80f42cef..2334d6d0f8 100644 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm +++ b/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm @@ -241,7 +241,7 @@ 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" + wound_flavor_text["[temp.display_name]"] = "[t_He] is missing [t_his] [temp.display_name].\n" continue if(temp.wounds) var/list/wounds = list(list(),list(),list(),list(),list(),list()) @@ -401,22 +401,22 @@ 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]]" + flavor_text += "\The [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" + flavor_text += "\The [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" + flavor_text += "\The [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" + flavor_text += "\The [src] has a bunch of [tallied_rename[tallied]]s" else flavor_text += " a ton of [tallied_rename[tallied]]s" if(flavor_text.len) diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm index 15426fda49..ec54450864 100644 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm +++ b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm @@ -2,7 +2,8 @@ name = "tajaran" real_name = "tajaran" voice_name = "tajaran" - icon = 'tajaran.dmi' + icon = 'mob.dmi' + icon_state = "m-none" var/list/tajspeak_letters // universal_speak = 1 //hacky fix until someone can figure out how to make them only understand humans @@ -460,8 +461,6 @@ last_b_state = stat /mob/living/carbon/human/tajaran/update_body() - return - if(stand_icon) del(stand_icon) if(lying_icon) @@ -606,4 +605,4 @@ del(eyes_s) /mob/living/carbon/human/tajaran/co2overloadtime = null -/mob/living/carbon/human/tajaran/temperature_resistance = T0C+70 +/mob/living/carbon/human/tajaran/temperature_resistance = T0C+70 \ No newline at end of file diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dmi b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dmi index 05b198970dc24606e9ae067b112353e20ce423d2..e818779c206b8b319fc9a9637f7e3d0a6863c04c 100644 GIT binary patch literal 19273 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 1) + if(e.bleeding) bled = "Bleeding:" if(e.broken) AN = "[e.wound]:" @@ -264,7 +264,7 @@ dat += "" dat += "" else - dat += "The sleeper is empty." + dat += "\The [src] is empty." else dat = " Error: No Body Scanner connected." dat += text("

Close", user) diff --git a/code/game/objects/items/item.dm b/code/game/objects/items/item.dm index 9cb9f2b2d4..70d1782ddd 100755 --- a/code/game/objects/items/item.dm +++ b/code/game/objects/items/item.dm @@ -108,6 +108,17 @@ /obj/item/attack_hand(mob/user as mob) if (!user) return + if (user.hand) + if(ishuman(user)) + var/datum/organ/external/temp = user:organs["l_hand"] + if(temp.destroyed) + user << "\blue Yo- wait a minute." + return + else + if(ishuman(user)) + var/datum/organ/external/temp = user:organs["r_hand"] + if(temp.destroyed) + user << "\blue Yo- wait a minute." if (istype(src.loc, /obj/item/weapon/storage)) for(var/mob/M in range(1, src.loc)) if (M.s_active == src.loc) @@ -175,6 +186,18 @@ user << "Your claws aren't capable of such fine manipulation." return + if (user.hand) + if(ismonkey(user)) + var/datum/organ/external/temp = user:organs["l_hand"] + if(temp.destroyed) + user << "\blue Yo- wait a minute." + return + else + if(ismonkey(user)) + var/datum/organ/external/temp = user:organs["r_hand"] + if(temp.destroyed) + user << "\blue Yo- wait a minute." + if (istype(src.loc, /obj/item/weapon/storage)) for(var/mob/M in range(1, src.loc)) if (M.s_active == src.loc) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index e2dd58be85..f859590eae 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -51,13 +51,24 @@ FINGERPRINT CARD usr << text("\icon[] []: The current assignment on the card is [].", src, src.name, src.assignment) return - +/obj/item/weapon/card/id/syndicate/var/mob/registered_user = null /obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob) - if(!src.registered_name) - src.registered_name = input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name) - src.assignment = input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant") - src.name = "[src.registered_name]'s ID Card ([src.assignment])" + if(!registered_user) + registered_name = input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name) + assignment = input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant") + name = "[src.registered_name]'s ID Card ([src.assignment])" user << "\blue You successfully forge the ID card." + registered_user = user + else if(registered_user == user) + switch(alert("Would you like to display the ID, or retitle it?","Choose.","Rename","Show")) + if("Rename") + registered_name = input(user, "What name would you like to put on this card?", "Agent card name", ishuman(user) ? user.real_name : user.name) + assignment = input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant") + name = "[src.registered_name]'s ID Card ([src.assignment])" + user << "\blue You successfully forge the ID card." + return + if("Show") + ..() else ..() diff --git a/code/game/objects/items/weapons/medical.dm b/code/game/objects/items/weapons/medical.dm index 544cefea35..2d66e9bc24 100644 --- a/code/game/objects/items/weapons/medical.dm +++ b/code/game/objects/items/weapons/medical.dm @@ -65,9 +65,9 @@ MEDICAL if (user && stoppedblood) if (M != user) - user.visible_message("\red [user] bandages [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src]", "\red You bandage up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts", "\red You hear something like gauze being ripped.") + user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.") else - user.visible_message("\red [user] bandages [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src]", "\red You bandage up [stoppedblood - 1 ? "some of" : "the last of"] your cuts", "\red You hear something like gauze being ripped.") + user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.") else if(user) user << "\red Nothing to patch up!" return @@ -172,9 +172,9 @@ MEDICAL if (user && stoppedblood) if (M != user) - H.visible_message("\red You bandage up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts", "\red [user] bandages [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src]", "\red You hear something like gauze being ripped.") + user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.") else - H.visible_message("\red You bandage up [stoppedblood - 1 ? "some of" : "the last of"] your cuts", "\red [user] bandages [stoppedblood - 1 ? "some of" : "the last of"] their own cuts with [src]", "\red You hear something like gauze being ripped.") + user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.") else if(user) user << "\red Nothing to patch up!" return diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 98869b3914..2cfa9f87c8 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -1286,22 +1286,22 @@ CIRCULAR SAW switch(M:brain_op_stage) if(0) - if(!istype(H)) + if(!hasorgans(M)) return ..() - var/datum/organ/external/S = H.organs["head"] + var/datum/organ/external/S = M:organs["head"] if(S.destroyed) return - for(var/mob/O in viewers(H, null)) - O.show_message(text("\red [H] gets \his [S.display_name] sawed at with [src] by [user].... It looks like [user] is trying to cut it off!"), 1) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [M] gets \his [S.display_name] sawed at with [src] by [user].... It looks like [user] is trying to cut it off!"), 1) if(!do_after(user,rand(50,70))) - for(var/mob/O in viewers(H, null)) - O.show_message(text("\red [user] tried to cut [H]'s [S.display_name] off with [src], but failed."), 1) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [user] tried to cut [M]'s [S.display_name] off with [src], but failed."), 1) return - for(var/mob/O in viewers(H, null)) - O.show_message(text("\red [H] gets \his [S.display_name] sawed off with [src] by [user]."), 1) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [M] gets \his [S.display_name] sawed off with [src] by [user]."), 1) S.destroyed = 1 S.droplimb() - H.update_body() + M:update_body() if(1.0) if(istype(M, /mob/living/carbon/metroid)) return @@ -1379,9 +1379,9 @@ CIRCULAR SAW ..() return - else if(user.zone_sel.selecting != "chest" && istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - var/datum/organ/external/S = H.organs[user.zone_sel.selecting] + else if(user.zone_sel.selecting != "chest" && hasorgans(M)) + var/mob/living/carbon/H = M + var/datum/organ/external/S = H:organs[user.zone_sel.selecting] if(S.destroyed) return for(var/mob/O in viewers(H, null)) @@ -1392,9 +1392,8 @@ CIRCULAR SAW return for(var/mob/O in viewers(H, null)) O.show_message(text("\red [H] gets \his [S.display_name] sawed off with [src] by [user]."), 1) - S.destroyed = 1 - S.droplimb() - H.update_body() + S.droplimb(1) + H:update_body() else return ..() /* @@ -2962,4 +2961,4 @@ CIRCULAR SAW z="[usr] pops [m]'s [organ.display_name] bone into the wrong place" if(5) z="[usr] performs chiropractice on [m]'s [organ.display_name]" - return z*/ + return z*/ diff --git a/code/modules/chemical/Chemistry-Holder.dm b/code/modules/chemical/Chemistry-Holder.dm index d429802cb5..459f298a96 100644 --- a/code/modules/chemical/Chemistry-Holder.dm +++ b/code/modules/chemical/Chemistry-Holder.dm @@ -397,12 +397,12 @@ datum return 0 get_reagent_amount(var/reagent) + var/total = 0 for(var/A in reagent_list) var/datum/reagent/R = A if (R.id == reagent) - return R.volume - - return 0 + total += R.volume + return total get_reagents() var/res = "" diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index d54eafc97c..ff89b487d9 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -96,7 +96,7 @@ datum blood - data = list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"virus2"=null,"antibodies"=0) + data = new/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 @@ -1338,8 +1338,9 @@ datum if(M:getBruteLoss() && prob(40)) M:heal_organ_damage(1,0) if(M:getFireLoss() && prob(40)) M:heal_organ_damage(0,1) if(M:getToxLoss() && prob(40)) M:adjustToxLoss(-1) - if(volume > REAGENTS_OVERDOSE) - M:adjustToxLoss(1) +// if(volume > REAGENTS_OVERDOSE) +// M:adjustToxLoss(1) +//As hilarious as it was watching Asanadas projectile vomit everywhere from some overzealous medibots, and some antitoxin making 170 units, it was waaay bad. ..() return diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 066810c6de..5cd546109e 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -35,7 +35,7 @@ if(prob(src.getBruteLoss() - 50)) src.gib() -/mob/living/carbon/gib(give_medal) +/mob/living/carbon/gib(give_medal,ex_act) for(var/mob/M in src) if(M in src.stomach_contents) src.stomach_contents.Remove(M) @@ -43,9 +43,22 @@ for(var/mob/N in viewers(src, null)) if(N.client) N.show_message(text("\red [M] bursts out of [src]!"), 2) - . = ..(give_medal) + . = ..(ex_act) /mob/living/carbon/attack_hand(mob/M as mob) + if (M.hand) + if(ishuman(M) || ismonkey(M)) + var/datum/organ/external/temp = M:organs["l_hand"] + if(temp.destroyed) + M << "\red Yo- wait a minute." + return + else + if(ishuman(M) || ismonkey(M)) + var/datum/organ/external/temp = M:organs["r_hand"] + if(temp.destroyed) + M << "\red Yo- wait a minute." + return + if(!istype(M, /mob/living/carbon)) return for(var/datum/disease/D in viruses) @@ -84,6 +97,18 @@ /mob/living/carbon/attack_paw(mob/M as mob) if(!istype(M, /mob/living/carbon)) return + if (M.hand) + if(ishuman(M) || ismonkey(M)) + var/datum/organ/external/temp = M:organs["l_hand"] + if(temp.destroyed) + M << "\red Yo- wait a minute." + return + else + if(ishuman(M) || ismonkey(M)) + var/datum/organ/external/temp = M:organs["r_hand"] + if(temp.destroyed) + M << "\red Yo- wait a minute." + return for(var/datum/disease/D in viruses) @@ -216,4 +241,16 @@ for(var/datum/organ/external/O in L) bruteloss += O.get_damage_brute() fireloss += O.get_damage_fire() - return \ No newline at end of file + return + +/mob/living/carbon/proc/check_dna() + dna.check_integrity(src) + return + +/mob/living/carbon/proc/get_organ(var/zone) + if(!zone) zone = "chest" + for(var/name in organs) + var/datum/organ/external/O = organs[name] + if(O.name == zone) + return O + return null \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 7aac84a9b5..b74b9fea7b 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -4,6 +4,7 @@ halloss = 0 // And the suffocation was a hallucination (lazy) //oxyloss = 0 + updatehealth() return if(src.stat == 2) return diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 51787711a7..d3f977df8d 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -241,7 +241,7 @@ 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" + wound_flavor_text["[temp.display_name]"] = "[t_He] is missing [t_his] [temp.display_name].\n" continue if(temp.wounds) var/list/wounds = list(list(),list(),list(),list(),list(),list()) @@ -401,22 +401,22 @@ 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]]" + flavor_text += "\The [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" + flavor_text += "\The [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" + flavor_text += "\The [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" + flavor_text += "\The [src] has a bunch of [tallied_rename[tallied]]s" else flavor_text += " a ton of [tallied_rename[tallied]]s" if(flavor_text.len) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b9935eb3bd..0789183422 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -75,26 +75,22 @@ if(!dna) dna = new /datum/dna(null) - 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) + 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) 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"] - organs2 += part var/g = "m" if (gender == MALE) @@ -325,7 +321,7 @@ if (1.0) b_loss += 500 if (!prob(getarmor(null, "bomb"))) - gib(1) + gib(1,1) return else var/atom/target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src))) @@ -981,7 +977,7 @@ var/icon/gloves_icon = new /icon("icon" = 'hands.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2"))) if(lo.destroyed) gloves_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY) - else if(ro.destroyed) + if(ro.destroyed) gloves_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY) overlays += image(gloves_icon, "layer" = MOB_LAYER) if (gloves.blood_DNA) @@ -2742,7 +2738,3 @@ It can still be worn/put on as normal. else reset_view(0) remoteobserve = null - -/mob/living/carbon/human/proc/check_dna() - dna.check_integrity(src) - return diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 175847ef98..b674bc2b99 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -30,15 +30,6 @@ body_lying += DI -/mob/living/carbon/human/proc/get_organ(var/zone) - if(!zone) zone = "chest" - for(var/name in organs) - var/datum/organ/external/O = organs[name] - if(O.name == zone) - return O - return null - - /mob/living/carbon/human/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/used_weapon = null) if((damagetype != BRUTE) && (damagetype != BURN)) ..(damage, damagetype, def_zone, blocked) diff --git a/code/modules/mob/living/carbon/monkey/examine.dm b/code/modules/mob/living/carbon/monkey/examine.dm index edf60c8ed5..1945b9c0a3 100644 --- a/code/modules/mob/living/carbon/monkey/examine.dm +++ b/code/modules/mob/living/carbon/monkey/examine.dm @@ -1,34 +1,247 @@ /mob/living/carbon/monkey/examine() set src in oview() - usr << "\blue *---------*" - usr << text("\blue This is \icon[] []!", src, src.name) + if(!usr || !src) return + if(((usr.sdisabilities & 1) || usr.blinded || usr.stat) && !(istype(usr,/mob/dead/observer/))) + usr << "Something is there but you can't see it." + return + + var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" + if (src.handcuffed) - usr << text("\blue [] is handcuffed! \icon[]", src.name, src.handcuffed) + msg += "It is \icon[src.handcuffed] handcuffed!\n" if (src.wear_mask) - usr << text("\blue [] has a \icon[] [] on \his[] head!", src.name, src.wear_mask, src.wear_mask.name, src) + msg += "It has \icon[src.wear_mask] \a [src.wear_mask] on its head.\n" if (src.l_hand) - usr << text("\blue [] has a \icon[] [] in \his[] left hand!", src.name, src.l_hand, src.l_hand.name, src) + msg += "It has \icon[src.l_hand] \a [src.l_hand] in its left hand.\n" if (src.r_hand) - usr << text("\blue [] has a \icon[] [] in \his[] right hand!", src.name, src.r_hand, src.r_hand.name, src) + msg += "It has \icon[src.r_hand] \a [src.r_hand] in its right hand.\n" if (src.back) - usr << text("\blue [] has a \icon[] [] on \his[] back!", src.name, src.back, src.back.name, src) - if (src.stat == 2) - usr << text("\red [] is limp and unresponsive, a dull lifeless look in their eyes.", src.name) - else - if (src.getBruteLoss()) - if (src.getBruteLoss() < 30) - usr << text("\red [] looks slightly bruised!", src.name) - else - usr << text("\red [] looks severely bruised!", src.name) - if (src.getFireLoss()) - if (src.getFireLoss() < 30) - usr << text("\red [] looks slightly burnt!", src.name) - else - usr << text("\red [] looks severely burnt!", src.name) - if (src.stat == 1) - usr << text("\red [] doesn't seem to be responding to anything around them, their eyes closed as though asleep.", src.name) + msg += "It has \icon[src.back] \a [src.back] on its back.\n" + if (src.stat == DEAD) + msg += "It is limp and unresponsive, with no signs of life.\n" - print_flavor_text() + 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]"] = "It is missing its [temp.display_name].\n" + continue + if(temp.wounds) + var/list/wounds = list(list(),list(),list(),list(),list(),list()) + for(var/datum/organ/wound/w in temp.wounds) + switch(w.healing_state) + if(0) + var/list/cut = wounds[1] + cut += w + wounds[1] = cut + if(1) + var/list/cut = wounds[2] + cut += w + wounds[2] = cut + if(2) + var/list/cut = wounds[3] + cut += w + wounds[3] = cut + if(3) + var/list/cut = wounds[4] + cut += w + wounds[4] = cut + if(4) + var/list/cut = wounds[5] + cut += w + wounds[5] = cut + if(5) + var/list/cut = wounds[6] + cut += w + wounds[6] = cut + wound_descriptions["[temp.display_name]"] = wounds + else + wound_flavor_text["[temp.display_name]"] = "" + //Now that we have a big list of all the wounds, on all the limbs. + var/list/is_bleeding = list() + for(var/named in wound_descriptions) + var/list/wound_states = wound_descriptions[named] + var/list/flavor_text = list() + for(var/i = 1, i <= 6, i++) + var/list/wound_state = wound_states[i] //All wounds at this level of healing. + var/list/tally = list("cut" = 0, "deep cut" = 0, "flesh wound" = 0, "gaping wound" = 0, "big gaping wound" = 0, "massive wound" = 0,\ + "tiny bruise" = 0, "small bruise" = 0, "moderate bruise" = 0, "large bruise" = 0, "huge bruise" = 0, "monumental bruise" = 0,\ + "small burn" = 0, "moderate burn" = 0, "large burn" = 0, "severe burn" = 0, "deep burn" = 0, "carbonised area" = 0) //How many wounds of what size. + for(var/datum/organ/wound/w in wound_state) + if(w.bleeding && !is_bleeding[named]) is_bleeding[named] = 1 + switch(w.wound_size) + if(1) + switch(w.wound_type) + if(0) + tally["cut"] += 1 + if(1) + 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","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", "tiny bruise" = "tiny bruise", "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", "moderate bruise", "small 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 += "\The [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 += "\The [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 += "\The [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 += "\The [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 && text > 1) + flavor_text_string += "," + flavor_text_string += flavor_text[text] + flavor_text_string += " on its [named].
" + wound_flavor_text["[named]"] = flavor_text_string + if(wound_flavor_text["head"]) + msg += wound_flavor_text["head"] + if(wound_flavor_text["chest"]) + msg += wound_flavor_text["chest"] + if(wound_flavor_text["left arm"]) + msg += wound_flavor_text["left arm"] + if(wound_flavor_text["left hand"]) + msg += wound_flavor_text["left hand"] + if(wound_flavor_text["right arm"]) + msg += wound_flavor_text["right arm"] + if(wound_flavor_text["right hand"]) + msg += wound_flavor_text["right hand"] + if(wound_flavor_text["groin"]) + msg += wound_flavor_text["groin"] + if(wound_flavor_text["left leg"]) + msg += wound_flavor_text["left leg"] + if(wound_flavor_text["left foot"]) + msg += wound_flavor_text["left foot"] + if(wound_flavor_text["right leg"]) + msg += wound_flavor_text["right leg"] + if(wound_flavor_text["right foot"]) + msg += wound_flavor_text["right foot"] + + msg += print_flavor_text() + + msg += "*---------*
" + + usr << msg return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 397cc762c1..ba3e1abc80 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -3,8 +3,8 @@ voice_name = "monkey" voice_message = "chimpers" say_message = "chimpers" - icon = 'monkey.dmi' - icon_state = "monkey1" + icon = 'mob.dmi' + icon_state = "m-none" gender = NEUTER pass_flags = PASSTABLE @@ -15,6 +15,9 @@ var/fire_alert = 0 var/temperature_alert = 0 + var/list/body_standing = list() + var/list/body_lying = list() + /mob/living/carbon/monkey/Life() set invisibility = 0 diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 715eaeeb6c..56b155f934 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -2,6 +2,10 @@ var/datum/reagents/R = new/datum/reagents(1000) reagents = R R.my_atom = src + if(name == "monkey") + name = text("monkey ([rand(1, 1000)])") + real_name = name + if (!(dna)) if(gender == NEUTER) gender = pick(MALE, FEMALE) @@ -18,55 +22,35 @@ dna.uni_identity += gendervar dna.uni_identity += "12C" dna.uni_identity += "4E2" + dna.b_type = "A+" + dna.original_name = real_name - if(name == "monkey") - name = text("monkey ([rand(1, 1000)])") - real_name = name - var/datum/organ/external/chest/chest = new /datum/organ/external/chest( src ) - chest.owner = src - organs2 += chest - var/datum/organ/external/groin/groin = new /datum/organ/external/groin( src ) - groin.owner = src - organs2 += groin - var/datum/organ/external/head/head = new /datum/organ/external/head( src ) - head.owner = src - organs2 += head - var/datum/organ/external/l_arm/l_arm = new /datum/organ/external/l_arm( src ) - l_arm.owner = src - organs2 += l_arm - var/datum/organ/external/r_arm/r_arm = new /datum/organ/external/r_arm( src ) - r_arm.owner = src - organs2 += r_arm - var/datum/organ/external/l_hand/l_hand = new /datum/organ/external/l_hand( src ) - l_hand.owner = src - organs2 += l_hand - var/datum/organ/external/r_hand/r_hand = new /datum/organ/external/r_hand( src ) - r_hand.owner = src - organs2 += r_hand - var/datum/organ/external/l_leg/l_leg = new /datum/organ/external/l_leg( src ) - l_leg.owner = src - organs2 += l_leg - var/datum/organ/external/r_leg/r_leg = new /datum/organ/external/r_leg( src ) - r_leg.owner = src - organs2 += r_leg - var/datum/organ/external/l_foot/l_foot = new /datum/organ/external/l_foot( src ) - l_foot.owner = src - organs2 += l_foot - var/datum/organ/external/r_foot/r_foot = new /datum/organ/external/r_foot( src ) - r_foot.owner = src - organs2 += r_foot + 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) + + var/datum/organ/external/part = new /datum/organ/external/l_hand(src) + part.parent = organs["l_arm"] + part = new /datum/organ/external/l_foot(src) + part.parent = organs["l_leg"] + part = new /datum/organ/external/r_hand(src) + part.parent = organs["r_arm"] + part = new /datum/organ/external/r_foot(src) + part.parent = organs["r_leg"] + + spawn (1) + if(!stand_icon) + stand_icon = new /icon('monkey.dmi', "monkey1") + if(!lying_icon) + lying_icon = new /icon('monkey.dmi', "monkey0") + icon = stand_icon + update_clothing() + src << "\blue Your icons have been generated!" - organs["chest"] = chest - organs["groin"] = groin - organs["head"] = head - organs["l_arm"] = l_arm - organs["r_arm"] = r_arm - organs["l_hand"] = l_hand - organs["r_hand"] = r_hand - organs["l_leg"] = l_leg - organs["r_leg"] = r_leg - organs["l_foot"] = l_foot - organs["r_foot"] = r_foot ..() return @@ -461,6 +445,10 @@ stat("Genetic Damage Time", changeling.geneticdamage) return + + +/mob/living/carbon/monkey/var/icon/stand_icon = null +/mob/living/carbon/monkey/var/icon/lying_icon = null /mob/living/carbon/monkey/update_clothing() if(buckled) if(istype(buckled, /obj/structure/stool/bed/chair)) @@ -468,14 +456,18 @@ else lying = 1 - if(update_icon) // Skie - ..() - overlays = null + if(!stand_icon || !lying_icon) + update_body() - if (!( lying )) - icon_state = "monkey1" - else - icon_state = "monkey0" + //if(update_icon) // Skie + // ..() + // overlays = null + + if (lying) + icon = lying_icon + + else + icon = stand_icon if(client && client.admin_invis) invisibility = 100 @@ -549,6 +541,31 @@ return return +/mob/living/carbon/monkey/proc/update_body() + + stand_icon = new /icon('monkey.dmi', "torso_s") + lying_icon = new /icon('monkey.dmi', "torso_l") + + stand_icon.Blend(new /icon('monkey.dmi', "chest_s"), ICON_OVERLAY) + lying_icon.Blend(new /icon('monkey.dmi', "chest_l"), ICON_OVERLAY) + + var/datum/organ/external/head = organs["head"] + if(!head.destroyed) + stand_icon.Blend(new /icon('monkey.dmi', "head_s"), ICON_OVERLAY) + lying_icon.Blend(new /icon('monkey.dmi', "head_l"), ICON_OVERLAY) + + for(var/name in organs) + var/datum/organ/external/part = organs[name] + if(!istype(part, /datum/organ/external/groin) \ + && !istype(part, /datum/organ/external/chest) \ + && !istype(part, /datum/organ/external/head) \ + && !part.destroyed) + stand_icon.Blend(new /icon('monkey.dmi', "[part.icon_name]_s"), ICON_OVERLAY) + lying_icon.Blend(new /icon('monkey.dmi', "[part.icon_name]_l"), ICON_OVERLAY) + + stand_icon.Blend(new /icon('monkey.dmi', "groin_s"), ICON_OVERLAY) + lying_icon.Blend(new /icon('monkey.dmi', "groin_l"), ICON_OVERLAY) + /mob/living/carbon/monkey/Move() if ((!( buckled ) || buckled.loc != loc)) buckled = null @@ -838,3 +855,61 @@ if(!ticker.mode.name == "monkey") return 0 return 1 +/mob/living/carbon/monkey/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/used_weapon = null) + if((damagetype != BRUTE) && (damagetype != BURN)) + ..(damage, damagetype, def_zone, blocked) + return 1 + + if(blocked >= 2) return 0 + + var/datum/organ/external/organ = null + if(isorgan(def_zone)) + organ = def_zone + else + if(!def_zone) def_zone = ran_zone(def_zone) + organ = get_organ(check_zone(def_zone)) + if(!organ || organ.destroyed) return 0 + if(blocked) + damage = (damage/(blocked+1)) + + switch(damagetype) + if(BRUTE) + organ.take_damage(damage, 0, sharp, used_weapon) + if(BURN) + organ.take_damage(0, damage, sharp, used_weapon) + + if(used_weapon) + organ.add_wound(used_weapon, damage) + + UpdateDamageIcon() + updatehealth() + update_clothing() + return 1 + +/*/mob/living/carbon/monkey/UpdateDamageIcon() + del(body_standing) + body_standing = list() + del(body_lying) + body_lying = list() + + for(var/name in organs) + var/datum/organ/external/O = organs[name] + if(!O.destroyed) + O.update_icon() + var/icon/DI = new /icon('dam_human.dmi', O.damage_state) // the damage icon for whole human + DI.Blend(new /icon('dam_mask.dmi', O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels + // world << "[O.icon_name] [O.damage_state] \icon[DI]" + body_standing += DI + DI = new /icon('dam_human.dmi', "[O.damage_state]-2") // repeat for lying icons + DI.Blend(new /icon('dam_mask.dmi', "[O.icon_name]2"), ICON_MULTIPLY) + // world << "[O.r_name]2 [O.d_i_state]-2 \icon[DI]" + body_lying += DI*/ + +/mob/living/carbon/monkey/proc/HealDamage(zone, brute, burn) + var/datum/organ/external/E = get_organ(zone) + if(istype(E, /datum/organ/external)) + if (E.heal_damage(brute, burn)) + UpdateDamageIcon() + else + return 0 + return \ No newline at end of file diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 6d0562ed53..91ef940604 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -8,7 +8,7 @@ Returns standard 0 if fail */ -/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/slash = 0, var/used_weapon = null) +/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/used_weapon = null) if(!damage || (blocked >= 2)) return 0 switch(damagetype) if(BRUTE) @@ -76,4 +76,4 @@ /mob/living/proc/react_to_attack(mob/M) - return + return diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index b030a59c72..9b44ca5e1d 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -778,7 +778,7 @@ //This is the proc for gibbing a mob. Cannot gib ghosts. Removed the medal reference, //added different sort of gibs and animations. N -/mob/proc/gib() +/mob/proc/gib(var/ex_act = 0) if (istype(src, /mob/dead/observer)) gibs(loc, viruses) @@ -839,6 +839,8 @@ Currently doesn't work, but should be useful later or at least as a template sleep(15) for(var/obj/item/I in src.contents) I.loc = get_turf(src) + if(ex_act) + I.ex_act(ex_act) del(src) /* diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index aa2017253d..8abee2c747 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -280,7 +280,6 @@ the mob is also allowed to move without any sort of restriction. For instance, i // var/obj/effect/organstructure/organStructure = null //for dem organs var/list/organs = list( ) //List of organs. - var/list/organs2 = list() //Singularity wants you! var/grav_delay = 0 diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 4f81cb084c..5bee5a2991 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -110,6 +110,11 @@ proc/isorgan(A) return 1 return 0 +proc/hasorgans(A) + if(ishuman(A) || ismonkey(A)) + return 1 + return 0 + /proc/hsl2rgb(h, s, l) return diff --git a/code/modules/mob/organ/organ.dm b/code/modules/mob/organ/organ.dm index 4e3acabe4f..a650897928 100644 --- a/code/modules/mob/organ/organ.dm +++ b/code/modules/mob/organ/organ.dm @@ -65,7 +65,7 @@ var/stage = 0 var/wound = 0 - New(mob/living/carbon/human/H) + New(mob/living/carbon/H) ..(H) if(!display_name) display_name = name @@ -95,7 +95,7 @@ droplimb() return else if(prob(nux)) - createwound(max(1,min(6,round(brute/10) + rand(-1,1))),0,brute) + createwound(max(1,min(6,round(brute/10) + rand(0,2))),0,brute) owner << "You feel something wet on your [display_name]" if((brute_dam + burn_dam + brute + burn) < max_damage) @@ -104,10 +104,10 @@ if(prob(brute) && brute > 20 && !sharp) createwound(rand(4,6),0,brute) else if(!sharp) - createwound(max(1,min(6,round(brute/10) + rand(0,2))),1,brute) + createwound(max(1,min(6,round(brute/10) + rand(1,3))),1,brute) if(burn) burn_dam += burn - createwound(max(1,min(6,round(burn/10) + rand(-1,1))),2,burn) + createwound(max(1,min(6,round(burn/10) + rand(0,2))),2,burn) else var/can_inflict = src.max_damage - (src.brute_dam + src.burn_dam) if(can_inflict) @@ -237,7 +237,7 @@ 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 + wound = pick("broken","fracture","hairline fracture") //Randomise in future. Edit: Randomized. --SkyMarshal perma_injury = brute_dam return return @@ -277,111 +277,133 @@ return 1 return 0 - proc/droplimb() + proc/droplimb(var/override = 0) + if(override) + destroyed = 1 if(destroyed) //owner.unlock_medal("Lost something?", 0, "Lose a limb.", "easy") - owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.","\red Your [display_name] goes flying off!","You hear a terrible sound of ripping tendons and flesh.") + var/obj/item/weapon/organ/H switch(body_part) if(UPPER_TORSO) owner.gib() if(LOWER_TORSO) owner << "\red You are now sterile." if(HEAD) - var/obj/item/weapon/organ/head/H = new(owner.loc, owner) - if(owner.gender == FEMALE) - H.icon_state = "head_f_l" - H.overlays += owner.face_lying - H.transfer_identity(owner) + H = new /obj/item/weapon/organ/head(owner.loc, owner) + if(ishuman(owner)) + if(owner.gender == FEMALE) + H.icon_state = "head_f_l" + H.overlays += owner.face_lying + if(ismonkey(owner)) + H.icon_state = "head_l" + //H.overlays += owner.face_lying + H:transfer_identity(owner) H.pixel_x = -10 H.pixel_y = 6 H.name = "[owner.name]'s head" - var/lol = pick(cardinal) - step(H,lol) owner.update_face() owner.update_body() owner.death() if(ARM_RIGHT) - var/obj/item/weapon/organ/r_arm/H = new(owner.loc, owner) + H = new /obj/item/weapon/organ/r_arm(owner.loc, owner) + if(ismonkey(owner)) + H.icon_state = "r_arm_l" if(owner:organs["r_hand"]) var/datum/organ/external/S = owner:organs["r_hand"] if(!S.destroyed) - S.droplimb() - var/lol = pick(cardinal) - step(H,lol) - destroyed = 1 + S.droplimb(1) if(ARM_LEFT) - var/obj/item/weapon/organ/l_arm/H = new(owner.loc, owner) + H = new /obj/item/weapon/organ/l_arm(owner.loc, owner) + if(ismonkey(owner)) + H.icon_state = "l_arm_l" if(owner:organs["l_hand"]) var/datum/organ/external/S = owner:organs["l_hand"] if(!S.destroyed) - S.droplimb() - var/lol = pick(cardinal) - step(H,lol) - destroyed = 1 + S.droplimb(1) if(LEG_RIGHT) - var/obj/item/weapon/organ/r_leg/H = new(owner.loc, owner) + H = new /obj/item/weapon/organ/r_leg(owner.loc, owner) + if(ismonkey(owner)) + H.icon_state = "r_leg_l" if(owner:organs["r_foot"]) var/datum/organ/external/S = owner:organs["r_foot"] if(!S.destroyed) - S.droplimb() - var/lol = pick(cardinal) - step(H,lol) - destroyed = 1 + S.droplimb(1) if(LEG_LEFT) - var/obj/item/weapon/organ/l_leg/H = new(owner.loc, owner) + H = new /obj/item/weapon/organ/l_leg(owner.loc, owner) + if(ismonkey(owner)) + H.icon_state = "l_leg_l" if(owner:organs["l_foot"]) var/datum/organ/external/S = owner:organs["l_foot"] if(!S.destroyed) - S.droplimb() - var/lol = pick(cardinal) - step(H,lol) - destroyed = 1 + S.droplimb(1) if(HAND_RIGHT) - var/obj/item/weapon/organ/r_hand/X = new(owner.loc, owner) - var/lol2 = pick(cardinal) - step(X,lol2) - destroyed = 1 + H = new /obj/item/weapon/organ/r_hand(owner.loc, owner) + if(ismonkey(owner)) + H.icon_state = "r_hand_l" if(HAND_LEFT) - var/obj/item/weapon/organ/l_hand/X = new(owner.loc, owner) - var/lol2 = pick(cardinal) - step(X,lol2) - destroyed = 1 + H = new /obj/item/weapon/organ/l_hand(owner.loc, owner) + if(ismonkey(owner)) + H.icon_state = "l_hand_l" if(FOOT_RIGHT) - var/obj/item/weapon/organ/r_foot/X = new(owner.loc, owner) - var/lol2 = pick(cardinal) - step(X,lol2) - destroyed = 1 + H = new /obj/item/weapon/organ/r_foot/(owner.loc, owner) + if(ismonkey(owner)) + H.icon_state = "r_foot_l" if(FOOT_LEFT) - var/obj/item/weapon/organ/l_foot/X = new(owner.loc, owner) - var/lol2 = pick(cardinal) - step(X,lol2) - destroyed = 1 + H = new /obj/item/weapon/organ/l_foot(owner.loc, owner) + if(ismonkey(owner)) + H.icon_state = "l_foot_l" + if(ismonkey(owner)) + H.icon = 'monkey.dmi' + if(istajaran(owner)) + H.icon = 'tajaran.dmi' + var/lol = pick(cardinal) + step(H,lol) destspawn = 1 + owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.","\red Your [display_name] goes flying off!","You hear a terrible sound of ripping tendons and flesh.") for(var/datum/organ/wound/W in wounds) W.update_health() del(W) del(wounds) - src.owner.update_clothing() + owner.update_body() + owner.update_clothing() proc/createwound(var/size = 1, var/type = 0, var/damage) + var/list/datum/organ/wound/possible_wounds = list() + for(var/datum/organ/wound/W in wounds) + if(W.type == type && W.wound_size < 3 && size < 3 && !W.is_healing) + possible_wounds += W if(ishuman(owner)) - var/datum/organ/wound/W = new(src) - bleeding = !type //Sharp objects cause bleeding. - W.bleeding = !type -// owner:bloodloss += 10 * size - W.damage = damage - W.initial_dmg = damage - W.wound_type = type - W.wound_size = size - W.owner = owner - W.parent = src - if(type == 1) - spawn W.become_scar() + if(!possible_wounds.len || prob(25)) + var/datum/organ/wound/W = new(src) + bleeding = !type //Sharp objects cause bleeding. + W.bleeding = !type + // owner:bloodloss += 10 * size + W.damage = damage + W.initial_dmg = damage + W.wound_type = type + W.wound_size = size + W.owner = owner + W.parent = src + if(type == 1) + spawn W.become_scar() + else + spawn W.start_close() //Let small cuts close themselves. + wounds += W else - spawn W.start_close() //Let small cuts close themselves. - wounds += W + var/datum/organ/wound/W = pick(possible_wounds) + bleeding = !type //Sharp objects cause bleeding. + W.bleeding = !type + // owner:bloodloss += 10 * size + W.damage += damage + W.initial_dmg += damage + W.wound_size = round(sqrt(size^2 + W.wound_size^2)) + if(type == 1) + spawn W.become_scar() + else + spawn W.start_close() //Let small cuts close themselves. + wounds += W /datum/organ/wound name = "wound" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index b11348dd6b..8730851d0c 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -392,7 +392,6 @@ mob/proc m_intent = "walk" hud_used.move_intent.icon_state = "walking" while(targeted_by && T.client) - sleep(1) if(last_move_intent > I.lock_time + 10 && !T.client.target_can_move) //If the target moved while targeted I.TargetActed(src) if(I.last_moved_mob == src) //If they were the last ones to move, give them more of a grace period, so that an automatic weapon can hold down a room better. @@ -411,6 +410,7 @@ mob/proc I.lock_time = world.time + 5 I.lock_time = world.time + 5 I.last_moved_mob = src + sleep(1) NotTargeted(var/obj/item/weapon/gun/I) if(!I.silenced) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 0849d9a63f..cbdc2bc6a1 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -58,13 +58,11 @@ proc/check_fire(var/mob/living/target as mob, var/mob/living/user as mob) //Checks if you can hit them or not. if(!istype(target) || !istype(user)) return 0 - var/obj/item/projectile/test/in_chamber = new /obj/item/projectile/test(get_turf(src)) //Making the test.... - var/turf/curloc = get_turf(user) - var/turf/targloc = get_turf(target) - in_chamber.yo = targloc.y - curloc.y - in_chamber.xo = targloc.x - curloc.x + var/obj/item/projectile/test/in_chamber = new /obj/item/projectile/test(get_step_to(user,target)) //Making the test.... + in_chamber.target = target in_chamber.flags = flags //Set the flags... in_chamber.pass_flags = pass_flags //And the pass flags to that of the real projectile... + in_chamber.firer = user var/output = in_chamber.fired() //Test it! del(in_chamber) //No need for it anymore return output //Send it back to the gun! @@ -150,24 +148,37 @@ yo = null xo = null var - turf/target = null + target = null result = 0 //To pass the message back to the gun. Bump(atom/A as mob|obj|turf|area) + if(A == firer) + loc = A.loc + return //cannot shoot yourself + if(istype(A, /obj/item/projectile)) + return if(istype(A, /mob/living)) result = 2 //We hit someone, return 1! - return ..() + return + result = 1 + return fired() - target = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z) //Finding the target turf at map edge - while(!result) //Loop on through! - if(!step_towards(src,target)) //If we hit something... - if(!result) //And the var is not already set.... - result = 1 //Return 0 - break + var/turf/curloc = get_turf(src) + var/turf/targloc = get_turf(target) + yo = targloc.y - curloc.y + xo = targloc.x - curloc.x + target = targloc + while(src) //Loop on through! + if(result) + return (result - 1) + if((!( target ) || loc == target)) + target = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z) //Finding the target turf at map edge + step_towards(src, target) + var/mob/living/M = locate() in get_turf(src) + if(istype(M)) //If there is someting living... + return 1 //Return 1 else - var/mob/living/M = locate() in get_turf(src) - if(istype(M)) //If there is someting living... - result = 2 //Return 1 - break - return (result-1) \ No newline at end of file + M = locate() in get_step(src,target) + if(istype(M)) + return 1 \ No newline at end of file diff --git a/icons/mob/monkey.dmi b/icons/mob/monkey.dmi index b102390d0d24a4e04f44b0763aefb0cf4550208a..38824dd861513cb8bfe057d3e6f65606b5f20245 100644 GIT binary patch literal 18396 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 literal 15718 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 From 9e694e545b3a4aef3f5688ebd1827625fed3d366 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Mon, 2 Apr 2012 21:52:30 -0700 Subject: [PATCH 2/3] Some more changes/improvements. Proper torso sprite for monkeys --- code/defines/procs/helpers.dm | 71 ++++++++++++++---- code/game/machinery/teleporter.dm | 2 +- code/game/magic/library.dm | 2 +- code/modules/admin/verbs/adminjump.dm | 40 ++++++---- code/modules/admin/verbs/debug.dm | 7 +- code/modules/admin/verbs/modifyvariables.dm | 8 +- code/modules/mob/living/carbon/monkey/life.dm | 3 - icons/mob/monkey.dmi | Bin 18396 -> 18929 bytes 8 files changed, 92 insertions(+), 41 deletions(-) diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm index a429fd6082..de353cf9c8 100644 --- a/code/defines/procs/helpers.dm +++ b/code/defines/procs/helpers.dm @@ -108,8 +108,8 @@ var/list/old_list = shufflelist.Copy() while(old_list.len) var/item = pick(old_list) - new_list += item - old_list -= item + new_list.Add(item) + old_list.Remove(item) return new_list /proc/uniquelist(var/list/L) @@ -198,9 +198,16 @@ var/list/result = new() while(Li <= L.len && Ri <= R.len) if(sorttext(L[Li], R[Ri]) < 1) - result += R[Ri++] + var/item = R[Ri++] + result += item + if(R[item]) + result[item] = R[item] + else - result += L[Li++] + var/item = L[Li++] + result += item + if(L[item]) + result[item] = L[item] if(Li <= L.len) return (result + L.Copy(Li, 0)) @@ -800,28 +807,62 @@ Turf and target are seperate in case you want to teleport some distance from a t /proc/sortmobs() var/list/mob_list = list() + var/list/temp_list = list() for(var/mob/living/silicon/ai/M in world) - mob_list.Add(M) + temp_list.Add(M) + sortList(temp_list) + mob_list += temp_list + temp_list = list() for(var/mob/living/silicon/pai/M in world) - mob_list.Add(M) + temp_list.Add(M) + sortList(temp_list) + mob_list += temp_list + temp_list = list() for(var/mob/living/silicon/robot/M in world) - mob_list.Add(M) + temp_list.Add(M) + sortList(temp_list) + mob_list += temp_list + temp_list = list() for(var/mob/living/carbon/human/M in world) - mob_list.Add(M) + temp_list.Add(M) + sortList(temp_list) + mob_list += temp_list + temp_list = list() for(var/mob/living/carbon/brain/M in world) - mob_list.Add(M) + temp_list.Add(M) + sortList(temp_list) + mob_list += temp_list + temp_list = list() for(var/mob/living/carbon/alien/M in world) - mob_list.Add(M) + temp_list.Add(M) + sortList(temp_list) + mob_list += temp_list + temp_list = list() for(var/mob/dead/observer/M in world) - mob_list.Add(M) + temp_list.Add(M) + sortList(temp_list) + mob_list += temp_list + temp_list = list() for(var/mob/new_player/M in world) - mob_list.Add(M) + temp_list.Add(M) + sortList(temp_list) + mob_list += temp_list + temp_list = list() for(var/mob/living/carbon/monkey/M in world) - mob_list.Add(M) + temp_list.Add(M) + sortList(temp_list) + mob_list += temp_list + temp_list = list() for(var/mob/living/carbon/metroid/M in world) - mob_list.Add(M) + temp_list.Add(M) + sortList(temp_list) + mob_list += temp_list + temp_list = list() for(var/mob/living/simple_animal/M in world) - mob_list.Add(M) + temp_list.Add(M) + sortList(temp_list) + mob_list += temp_list + temp_list = list() // for(var/mob/living/silicon/hivebot/M in world) // mob_list.Add(M) // for(var/mob/living/silicon/hive_mainframe/M in world) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 22bac2a593..dbd6c61745 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -83,7 +83,7 @@ areaindex[tmpname] = 1 L[tmpname] = I - var/desc = input("Please select a location to lock in.", "Locking Computer") in L|null + var/desc = input("Please select a location to lock in.", "Locking Computer") as null|anything in L if(desc) src.locked = L[desc] for(var/mob/O in hearers(src, null)) diff --git a/code/game/magic/library.dm b/code/game/magic/library.dm index 7b5e7adefd..b99bf92575 100644 --- a/code/game/magic/library.dm +++ b/code/game/magic/library.dm @@ -140,7 +140,7 @@ for(var/obj/item/weapon/book/b in src.contents) books.Add(b) if(books.len) - var/obj/item/weapon/book/choice = input("Which book would you like to remove from the shelf?") in books|null as obj|null + var/obj/item/weapon/book/choice = input("Which book would you like to remove from the shelf?") as null|anything in books if(choice) choice.loc = src.loc else diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index e9c3497c49..30fa62e440 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -28,7 +28,7 @@ alert("Admin jumping disabled") return -/client/proc/jumptomob(var/mob/M in world) +/client/proc/jumptomob() set category = "Admin" set name = "Jump to Mob" @@ -37,15 +37,18 @@ return if(config.allow_admin_jump) - log_admin("[key_name(usr)] jumped to [key_name(M)]") - message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1) - if(src.mob) - var/mob/A = src.mob - var/turf/T = get_turf(M) - if(T && isturf(T)) - A.loc = T - else - A << "This mob is not located in the game world." + var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sortmobs() + var/mob/M = selection + if(!istype(M)) + return + var/mob/A = src.mob + var/turf/T = get_turf(M) + if(T && isturf(T)) + A.loc = T + log_admin("[key_name(usr)] jumped to [key_name(M)]") + message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1) + else + A << "This mob is not located in the game world." else alert("Admin jumping disabled") @@ -71,7 +74,7 @@ else alert("Admin jumping disabled") -/client/proc/Getmob(var/mob/M in world) +/client/proc/Getmob() set category = "Admin" set name = "Get Mob" set desc = "Mob to teleport" @@ -79,9 +82,18 @@ src << "Only administrators may use this command." return if(config.allow_admin_jump) - log_admin("[key_name(usr)] teleported [key_name(M)]") - message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)]", 1) - M.loc = get_turf(usr) + var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sortmobs() + var/mob/M = selection + if(!istype(M)) + return + var/mob/A = src.mob + var/turf/T = get_turf(A) + if(T && isturf(T)) + M.loc = T + log_admin("[key_name(usr)] teleported [key_name(M)]") + message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)]", 1) + else + A << "You are not located in the game world." else alert("Admin jumping disabled") diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 00dbc514ae..07448d60fe 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -50,7 +50,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if("Obj") target = input("Enter target:","Target",usr) as obj in world if("Mob") - target = input("Enter target:","Target",usr) as mob in world + target = input("Enter target:","Target",usr) as mob in sortmobs() if("Area or Turf") target = input("Enter target:","Target",usr.loc) as area|turf in world if("Client") @@ -105,7 +105,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that lst[i] = input("Select reference:","Reference") as null|mob|obj|turf|area in world if("mob reference") - lst[i] = input("Select reference:","Reference",usr) as mob in world + lst[i] = input("Select reference:","Reference",usr) as mob in sortmobs() if("file") lst[i] = input("Pick file:","File") as file @@ -117,10 +117,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that var/list/keys = list() for(var/mob/M in world) keys += M.client + sortList(keys) lst[i] = input("Please, select a player!", "Selection", null, null) as null|anything in keys if("mob's area") - var/mob/temp = input("Select mob", "Selection", usr) as mob in world + var/mob/temp = input("Select mob", "Selection", usr) as mob in sortmobs() lst[i] = temp.loc diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 15871fcf71..8ba910f2eb 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -62,7 +62,7 @@ var_value = input("Select reference:","Reference") as null|mob|obj|turf|area in world if("mob reference") - var_value = input("Select reference:","Reference") as null|mob in world + var_value = input("Select reference:","Reference") as null|mob in sortmobs() if("file") var_value = input("Pick file:","File") as null|file @@ -127,7 +127,7 @@ var_value = input("Select reference:","Reference") as null|mob|obj|turf|area in world if("mob reference") - var_value = input("Select reference:","Reference") as mob in world + var_value = input("Select reference:","Reference") as mob in sortmobs() if("file") var_value = input("Pick file:","File") as file @@ -294,7 +294,7 @@ if("mob reference") variable = input("Select reference:","Reference",\ - variable) as mob in world + variable) as mob in sortmobs() if("file") variable = input("Pick file:","File",variable) \ @@ -533,7 +533,7 @@ O.vars[variable] = var_new if("mob reference") - var/var_new = input("Select reference:","Reference",O.vars[variable]) as null|mob in world + var/var_new = input("Select reference:","Reference",O.vars[variable]) as null|mob in sortmobs() if(var_new==null) return O.vars[variable] = var_new diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index ba3e1abc80..8b9bf5aa6a 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -15,9 +15,6 @@ var/fire_alert = 0 var/temperature_alert = 0 - var/list/body_standing = list() - var/list/body_lying = list() - /mob/living/carbon/monkey/Life() set invisibility = 0 diff --git a/icons/mob/monkey.dmi b/icons/mob/monkey.dmi index 38824dd861513cb8bfe057d3e6f65606b5f20245..41a6451fa46cbbe281f677aa18e56d57088c3fc9 100644 GIT binary patch literal 18929 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 From f009f9928cee071dc1fb10603bbb44a287bf2697 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Tue, 3 Apr 2012 21:22:21 -0700 Subject: [PATCH 3/3] More fixes and improvements. Removed several "src."s, added some proper sorting for mobs on player lists stuff and admin stuff. Added a timestamp to player info/notes, made flavor text play nice with the new examine system. Nerfed stunning against armored targets. --- baystation12.dme | 1 - .../Cael_Aislinn/Tajara/tajaran.dm | 1 + code/defines/procs/helpers.dm | 52 ++++-------- code/modules/admin/admin.dm | 23 +++++- code/modules/admin/player_panel.dm | 6 +- code/modules/admin/verbs/adminjump.dm | 4 +- code/modules/admin/verbs/debug.dm | 6 +- code/modules/admin/verbs/modifyvariables.dm | 26 +++--- .../mob/living/carbon/human/examine.dm | 37 +++++---- code/modules/mob/living/carbon/human/human.dm | 1 + .../mob/living/carbon/metroid/examine.dm | 2 +- code/modules/mob/living/carbon/monkey/life.dm | 22 +++++ .../mob/living/carbon/monkey/monkey.dm | 82 ++++++++++++++++++- code/modules/mob/living/damage_procs.dm | 2 +- code/modules/mob/living/silicon/ai/examine.dm | 2 +- .../modules/mob/living/silicon/pai/examine.dm | 2 +- .../mob/living/silicon/robot/examine.dm | 2 +- code/modules/mob/mob.dm | 38 ++++----- code/modules/mob/mob_defines.dm | 6 +- code/modules/mob/mob_helpers.dm | 8 +- code/modules/mob/mob_movement.dm | 2 +- 21 files changed, 212 insertions(+), 113 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index 363b635e21..baee00ea23 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1081,7 +1081,6 @@ #include "code\WorkInProgress\AI_Visibility.dm" #include "code\WorkInProgress\buildmode.dm" #include "code\WorkInProgress\explosion_particles.dm" -#include "code\WorkInProgress\Cael_Aislinn\Tajara\examine.dm" #include "code\WorkInProgress\Cael_Aislinn\Tajara\say.dm" #include "code\WorkInProgress\Cael_Aislinn\Tajara\tajara_transformation.dm" #include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm" diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm index ec54450864..2f6f5696cf 100644 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm +++ b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm @@ -9,6 +9,7 @@ universal_speak = 1 //hacky fix until someone can figure out how to make them only understand humans taj_talk_understand = 1 voice_message = "mrowls" + examine_text = "one of the cat-like Tajarans." /mob/living/carbon/human/tajaran/New() tajspeak_letters = new/list("~","*","-") diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm index de353cf9c8..6a2c39a59c 100644 --- a/code/defines/procs/helpers.dm +++ b/code/defines/procs/helpers.dm @@ -199,15 +199,17 @@ while(Li <= L.len && Ri <= R.len) if(sorttext(L[Li], R[Ri]) < 1) var/item = R[Ri++] - result += item if(R[item]) result[item] = R[item] + else + result += item else var/item = L[Li++] - result += item if(L[item]) result[item] = L[item] + else + result += item if(Li <= L.len) return (result + L.Copy(Li, 0)) @@ -779,6 +781,14 @@ Turf and target are seperate in case you want to teleport some distance from a t select = input("AI signals detected:", "AI selection") in ais return ais[select] +/proc/get_sorted_mobs() + var/new_list = list() + var/old_list = getmobs() + for(var/named in old_list) + new_list += old_list[named] + return new_list + + /proc/getmobs() var/list/mobs = sortmobs() @@ -802,72 +812,38 @@ Turf and target are seperate in case you want to teleport some distance from a t name += " \[dead\]" creatures[name] = M - return creatures + return sortList(creatures) /proc/sortmobs() - var/list/mob_list = list() var/list/temp_list = list() for(var/mob/living/silicon/ai/M in world) temp_list.Add(M) - sortList(temp_list) - mob_list += temp_list - temp_list = list() for(var/mob/living/silicon/pai/M in world) temp_list.Add(M) - sortList(temp_list) - mob_list += temp_list - temp_list = list() for(var/mob/living/silicon/robot/M in world) temp_list.Add(M) - sortList(temp_list) - mob_list += temp_list - temp_list = list() for(var/mob/living/carbon/human/M in world) temp_list.Add(M) - sortList(temp_list) - mob_list += temp_list - temp_list = list() for(var/mob/living/carbon/brain/M in world) temp_list.Add(M) - sortList(temp_list) - mob_list += temp_list - temp_list = list() for(var/mob/living/carbon/alien/M in world) temp_list.Add(M) - sortList(temp_list) - mob_list += temp_list - temp_list = list() for(var/mob/dead/observer/M in world) temp_list.Add(M) - sortList(temp_list) - mob_list += temp_list - temp_list = list() for(var/mob/new_player/M in world) temp_list.Add(M) - sortList(temp_list) - mob_list += temp_list - temp_list = list() for(var/mob/living/carbon/monkey/M in world) temp_list.Add(M) - sortList(temp_list) - mob_list += temp_list - temp_list = list() for(var/mob/living/carbon/metroid/M in world) temp_list.Add(M) - sortList(temp_list) - mob_list += temp_list - temp_list = list() for(var/mob/living/simple_animal/M in world) temp_list.Add(M) - sortList(temp_list) - mob_list += temp_list - temp_list = list() // for(var/mob/living/silicon/hivebot/M in world) // mob_list.Add(M) // for(var/mob/living/silicon/hive_mainframe/M in world) // mob_list.Add(M) - return mob_list + return temp_list /proc/convert2energy(var/M) var/E = M*(SPEED_OF_LIGHT_SQ) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index d61a98881a..fcc8d14e42 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -78,6 +78,20 @@ var/datum/player_info/P = new P.author = usr.key P.content = add + var/modifyer = "th" + switch(time2text(world.timeofday, "DD")) + if("01","21","31") + modifyer = "st" + if("02","22",) + modifyer = "nd" + if("03","23") + modifyer = "rd" + var/day_string = "[time2text(world.timeofday, "DD")][modifyer]" + if(copytext(day_string,1,2) == "0") + day_string = copytext(day_string,2) + var/full_date = time2text(world.timeofday, "DDD, MMM DD of YYYY") + var/day_loc = findtext(full_date, time2text(world.timeofday, "DD")) + P.timestamp = "[copytext(full_date,1,day_loc)][day_string][copytext(full_date,day_loc+2)]" infos += P @@ -1871,6 +1885,7 @@ /datum/player_info/var author // admin who authored the information content // text content of the information + timestamp // Because this is bloody annoying /obj/admins/proc/player_has_info(var/key as text) var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav") @@ -1896,13 +1911,18 @@ if(!infos) dat += "No information found on the given key.
" else + var/update_file = 0 var/i = 0 for(var/datum/player_info/I in infos) i += 1 - dat += "[I.content] by [I.author] " + if(!I.timestamp) + I.timestamp = "Pre-4/3/2012" + update_file = 1 + dat += "[I.content] by [I.author] on [I.timestamp] " if(I.author == usr.key) dat += "
Remove" dat += "

" + if(update_file) info << infos dat += "
" dat += "Add Comment
" @@ -1941,6 +1961,7 @@ if(!note_keys) dat += "No notes found." else + sortList(note_keys) for(var/t in note_keys) dat += text("[t]") dat += "" diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 879502d8d3..a2a04b36ee 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -5,7 +5,7 @@ dat += "" //add to this if wanting to add back in IP checking //add if you want to know their ip to the lists below - var/list/mobs = sortmobs() + var/list/mobs = get_sorted_mobs() var/i = 1 for(var/mob/M in mobs) @@ -45,7 +45,7 @@ else if(istype(M,/mob/new_player)) dat += "" else - dat += "" + dat += "\black" if(M.mind && M.mind.assigned_role && istype(M, /mob/living/carbon/human)) // Adds a column to Player Panel that shows their current job. var/mob/living/carbon/human/H = M @@ -117,7 +117,7 @@ dat += "
Name/Real NameTypeAssigned JobInfoOptionsTraitor?
IP:(IP: [M.lastKnownIP])New PlayerERROR\red ERROR
" //add to this if wanting to add back in IP checking //add if you want to know their ip to the lists below - var/list/mobs = sortmobs() + var/list/mobs = get_sorted_mobs() for(var/mob/M in mobs) if(!M.ckey) continue diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index 30fa62e440..50a8188941 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -37,7 +37,7 @@ return if(config.allow_admin_jump) - var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sortmobs() + var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in getmobs() var/mob/M = selection if(!istype(M)) return @@ -82,7 +82,7 @@ src << "Only administrators may use this command." return if(config.allow_admin_jump) - var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sortmobs() + var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in getmobs() var/mob/M = selection if(!istype(M)) return diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 07448d60fe..9b49845c31 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -50,7 +50,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if("Obj") target = input("Enter target:","Target",usr) as obj in world if("Mob") - target = input("Enter target:","Target",usr) as mob in sortmobs() + target = input("Enter target:","Target",usr) as mob in getmobs() if("Area or Turf") target = input("Enter target:","Target",usr.loc) as area|turf in world if("Client") @@ -105,7 +105,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that lst[i] = input("Select reference:","Reference") as null|mob|obj|turf|area in world if("mob reference") - lst[i] = input("Select reference:","Reference",usr) as mob in sortmobs() + lst[i] = input("Select reference:","Reference",usr) as mob in getmobs() if("file") lst[i] = input("Pick file:","File") as file @@ -121,7 +121,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that lst[i] = input("Please, select a player!", "Selection", null, null) as null|anything in keys if("mob's area") - var/mob/temp = input("Select mob", "Selection", usr) as mob in sortmobs() + var/mob/temp = input("Select mob", "Selection", usr) as mob in getmobs() lst[i] = temp.loc diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 8ba910f2eb..e4e2a144df 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -62,7 +62,7 @@ var_value = input("Select reference:","Reference") as null|mob|obj|turf|area in world if("mob reference") - var_value = input("Select reference:","Reference") as null|mob in sortmobs() + var_value = input("Select reference:","Reference") as null|mob in get_sorted_mobs() if("file") var_value = input("Pick file:","File") as null|file @@ -99,10 +99,10 @@ switch(class) if("text") - var_value = input("Enter new text:","Text") as text + var_value = input("Enter new text:","Text") as null|text if("num") - var_value = input("Enter new number:","Num") as num + var_value = input("Enter new number:","Num") as null|num if("type") var_value = input("Enter type:","Type") in typesof(/obj,/mob,/area,/turf) @@ -127,13 +127,13 @@ var_value = input("Select reference:","Reference") as null|mob|obj|turf|area in world if("mob reference") - var_value = input("Select reference:","Reference") as mob in sortmobs() + var_value = input("Select reference:","Reference") as null|mob in get_sorted_mobs() if("file") - var_value = input("Pick file:","File") as file + var_value = input("Pick file:","File") as null|file if("icon") - var_value = input("Pick icon:","Icon") as icon + var_value = input("Pick icon:","Icon") as null|icon if("marked datum") var_value = holder.marked_datum @@ -263,11 +263,11 @@ if("text") variable = input("Enter new text:","Text",\ - variable) as text + variable) as null|text if("num") variable = input("Enter new number:","Num",\ - variable) as num + variable) as null|num if("type") variable = input("Enter type:","Type",variable) \ @@ -276,7 +276,7 @@ if("reference") switch(alert("Would you like to enter a specific object, or search for it from the world?","Choose!","Specifc UID (Hexadecimal number)", "Search")) if("Specifc UID (Hexadecimal number)") - var/UID = input("Type in UID, without the leading 0x","Type in UID") as text|null + var/UID = input("Type in UID, without the leading 0x","Type in UID") as null|text if(!UID) return if(length(UID) != 7) usr << "ERROR. UID must be 7 digits" @@ -294,15 +294,15 @@ if("mob reference") variable = input("Select reference:","Reference",\ - variable) as mob in sortmobs() + variable) as null|mob in get_sorted_mobs() if("file") variable = input("Pick file:","File",variable) \ - as file + as null|file if("icon") variable = input("Pick icon:","Icon",variable) \ - as icon + as null|icon if("marked datum") variable = holder.marked_datum @@ -533,7 +533,7 @@ O.vars[variable] = var_new if("mob reference") - var/var_new = input("Select reference:","Reference",O.vars[variable]) as null|mob in sortmobs() + var/var_new = input("Select reference:","Reference",O.vars[variable]) as null|mob in get_sorted_mobs() if(var_new==null) return O.vars[variable] = var_new diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index d3f977df8d..1b57726d94 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -54,7 +54,7 @@ t_his = "her" t_him = "her" - msg += "\a [src]!\n" + msg += "\a [src][examine_text ? ", [examine_text]":""]!\n" //uniform if (src.w_uniform && !skipjumpsuit) @@ -237,10 +237,12 @@ var/list/wound_descriptions = list() var/list/wound_flavor_text = list() + var/list/is_destroyed = list() for(var/named in organs) var/datum/organ/external/temp = organs[named] if(temp) if(temp.destroyed) + is_destroyed["[temp.display_name]"] = 1 wound_flavor_text["[temp.display_name]"] = "[t_He] is missing [t_his] [temp.display_name].\n" continue if(temp.wounds) @@ -401,14 +403,14 @@ switch(tally[tallied]) if(1) if(!flavor_text.len) - flavor_text += "\The [src] has[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]" + flavor_text += "\The [src] has[prob(10) && !(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]]" + flavor_text += "[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]" if(2) if(!flavor_text.len) - flavor_text += "\The [src] has[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s" + flavor_text += "\The [src] has[prob(10) && !(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" + flavor_text += "[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s" if(3 to 5) if(!flavor_text.len) flavor_text += "\The [src] has several [tallied_rename[tallied]]s" @@ -429,47 +431,50 @@ 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))) + + //Handles the text strings being added to the actual description. + //If they have something that covers the limb, and it is not missing, put flavortext. If it is covered but bleeding, add other flavortext. + if(wound_flavor_text["head"] && (is_destroyed["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) + if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit) //No need. A missing chest gibs you. msg += wound_flavor_text["chest"] else if(is_bleeding["chest"]) msg += "[src] has blood soaking through from under [t_his] clothing!\n" - if(wound_flavor_text["left arm"] && !w_uniform && !skipjumpsuit) + if(wound_flavor_text["left arm"] && (is_destroyed["left arm"] || (!w_uniform && !skipjumpsuit))) msg += wound_flavor_text["left arm"] else if(is_bleeding["left arm"]) msg += "[src] has blood soaking through from under [t_his] clothing!\n" - if(wound_flavor_text["left hand"] && !gloves && !skipgloves) + if(wound_flavor_text["left hand"] && (is_destroyed["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) + if(wound_flavor_text["right arm"] && (is_destroyed["right arm"] || (!w_uniform && !skipjumpsuit))) msg += wound_flavor_text["right arm"] else if(is_bleeding["right arm"]) msg += "[src] has blood soaking through from under [t_his] clothing!\n" - if(wound_flavor_text["right hand"] && !gloves && !skipgloves) + if(wound_flavor_text["right hand"] && (is_destroyed["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) + if(wound_flavor_text["groin"] && (is_destroyed["groin"] || (!w_uniform && !skipjumpsuit))) msg += wound_flavor_text["groin"] else if(is_bleeding["groin"]) msg += "[src] has blood soaking through from under [t_his] clothing!\n" - if(wound_flavor_text["left leg"] && !w_uniform && !skipjumpsuit) + if(wound_flavor_text["left leg"] && (is_destroyed["left leg"] || (!w_uniform && !skipjumpsuit))) msg += wound_flavor_text["left leg"] else if(is_bleeding["left leg"]) msg += "[src] has blood soaking through from under [t_his] clothing!\n" - if(wound_flavor_text["left foot"]&& !shoes && !skipshoes) + if(wound_flavor_text["left foot"]&& (is_destroyed["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) + if(wound_flavor_text["right leg"] && (is_destroyed["right leg"] || (!w_uniform && !skipjumpsuit))) msg += wound_flavor_text["right leg"] else if(is_bleeding["right leg"]) msg += "[src] has blood soaking through from under [t_his] clothing!\n" - if(wound_flavor_text["right foot"]&& !shoes && !skipshoes) + if(wound_flavor_text["right foot"]&& (is_destroyed["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" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 0789183422..eb9cdd72bd 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -60,6 +60,7 @@ var/bloodloss = 0 var/datum/reagents/vessel var/pale = 0 + var/examine_text = "" /mob/living/carbon/human/dummy real_name = "Test Dummy" diff --git a/code/modules/mob/living/carbon/metroid/examine.dm b/code/modules/mob/living/carbon/metroid/examine.dm index 28f2026b03..1b3146d6da 100644 --- a/code/modules/mob/living/carbon/metroid/examine.dm +++ b/code/modules/mob/living/carbon/metroid/examine.dm @@ -26,6 +26,6 @@ if(10) usr << text("\blue [] seems to have extreme electrical activity inside it!", src.name) - print_flavor_text() + usr << print_flavor_text() return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 8b9bf5aa6a..7fc7c7f34d 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -418,6 +418,28 @@ return //TODO: DEFERRED handle_regular_status_updates() + var/leg_tally = 2 + for(var/name in organs) + var/datum/organ/external/E = organs[name] + E.process() + if(E.broken || E.destroyed) + if(E.name == "l_hand" || E.name == "l_arm") + if(hand && equipped()) + drop_item() + emote("scream") + else if(E.name == "r_hand" || E.name == "r_arm") + if(!hand && equipped()) + drop_item() + emote("scream") + else if(E.name == "l_leg" || E.name == "l_foot" \ + || E.name == "r_leg" || E.name == "r_foot" && !lying) + leg_tally-- // let it fail even if just foot&leg + + // can't stand + if(leg_tally == 0 && !paralysis && !(lying || resting)) + emote("scream") + emote("collapse") + paralysis = 10 health = 100 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 56b155f934..9f4e471afd 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -459,9 +459,9 @@ if(!stand_icon || !lying_icon) update_body() - //if(update_icon) // Skie - // ..() - // overlays = null + if(update_icon) // Skie + ..() + overlays = null if (lying) icon = lying_icon @@ -912,4 +912,78 @@ UpdateDamageIcon() else return 0 - return \ No newline at end of file + return + +/mob/living/carbon/monkey/proc/get_damaged_organs(var/brute, var/burn) + var/list/datum/organ/external/parts = list() + for(var/name in organs) + var/datum/organ/external/organ = organs[name] + if((brute && organ.brute_dam) || (burn && organ.burn_dam)) + parts += organ + return parts + +/mob/living/carbon/monkey/proc/get_damageable_organs() + var/list/datum/organ/external/parts = list() + for(var/name in organs) + var/datum/organ/external/organ = organs[name] + if(organ.brute_dam + organ.burn_dam < organ.max_damage) + parts += organ + return parts + +// heal ONE external organ, organ gets randomly selected from damaged ones. +/mob/living/carbon/monkey/heal_organ_damage(var/brute, var/burn) + var/list/datum/organ/external/parts = get_damaged_organs(brute,burn) + if(!parts.len) + return + var/datum/organ/external/picked = pick(parts) + picked.heal_damage(brute,burn) + updatehealth() + UpdateDamageIcon() + +// damage ONE external organ, organ gets randomly selected from damaged ones. +/mob/living/carbon/monkey/take_organ_damage(var/brute, var/burn) + var/list/datum/organ/external/parts = get_damageable_organs() + if(!parts.len) + return + var/datum/organ/external/picked = pick(parts) + picked.take_damage(brute,burn) + updatehealth() + UpdateDamageIcon() + +// heal MANY external organs, in random order +/mob/living/carbon/monkey/heal_overall_damage(var/brute, var/burn) + var/list/datum/organ/external/parts = get_damaged_organs(brute,burn) + + while(parts.len && (brute>0 || burn>0) ) + var/datum/organ/external/picked = pick(parts) + + var/brute_was = picked.brute_dam + var/burn_was = picked.burn_dam + + picked.heal_damage(brute,burn) + + brute -= (brute_was-picked.brute_dam) + burn -= (burn_was-picked.burn_dam) + + parts -= picked + updatehealth() + UpdateDamageIcon() + +// damage MANY external organs, in random order +/mob/living/carbon/monkey/take_overall_damage(var/brute, var/burn, var/used_weapon = null) + var/list/datum/organ/external/parts = get_damageable_organs() + + while(parts.len && (brute>0 || burn>0) ) + var/datum/organ/external/picked = pick(parts) + + var/brute_was = picked.brute_dam + var/burn_was = picked.burn_dam + + picked.take_damage(brute,burn, 0, used_weapon) + + brute -= (picked.brute_dam-brute_was) + burn -= (picked.burn_dam-burn_was) + + parts -= picked + updatehealth() + UpdateDamageIcon() diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 91ef940604..09ab709f92 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -39,7 +39,7 @@ /mob/living/proc/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0) - if(!effect || (blocked >= 2)) return 0 + if(!effect || (blocked)) return 0 switch(effecttype) if(STUN) Stun((effect - (min(effect*getarmor(null, "laser"), effect*(0.75 + (blocked*0.05)))))) diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index 1f9498a4bb..899fa25eb3 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -19,6 +19,6 @@ if (src.stat == 1) usr << text("\red [] doesn't seem to be responding.", src.name) - print_flavor_text() + usr << print_flavor_text() return \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/examine.dm b/code/modules/mob/living/silicon/pai/examine.dm index 66aecc6c66..26d6bb4bb4 100644 --- a/code/modules/mob/living/silicon/pai/examine.dm +++ b/code/modules/mob/living/silicon/pai/examine.dm @@ -19,6 +19,6 @@ if (src.stat == 1) usr << text("\red [] doesn't seem to be responding.", src.name) - print_flavor_text() + usr << print_flavor_text() return \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index d1b54407d0..e8b3a2fa80 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -22,6 +22,6 @@ else usr << "The cover is closed." - print_flavor_text() + usr << print_flavor_text() return \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9b44ca5e1d..1f0ec2fbb2 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -290,9 +290,9 @@ //Attemps to remove an object on a mob. Will not move it to another area or such, just removes from the mob. /mob/proc/remove_from_mob(var/obj/O) - src.u_equip(O) - if (src.client) - src.client.screen -= O + u_equip(O) + if (client) + client.screen -= O O.layer = initial(O.layer) O.screen_loc = null return 1 @@ -398,10 +398,10 @@ msg = copytext(msg, 1, MAX_MESSAGE_LEN) msg = html_encode(msg) - src.flavor_text = msg + flavor_text = msg /mob/proc/warn_flavor_changed() - if(src.flavor_text && src.flavor_text != "") // don't spam people that don't use it! + if(flavor_text && flavor_text != "") // don't spam people that don't use it! src << "

OOC Warning:

" src << "Your flavor text is likely out of date! Change" @@ -409,9 +409,9 @@ if (flavor_text && flavor_text != "") var/msg = dd_replacetext(flavor_text, "\n", " ") if(lentext(msg) <= 40) - usr << "\blue [msg]" + return "\blue [msg]" else - usr << "\blue [copytext(msg, 1, 37)]... More..." + return "\blue [copytext(msg, 1, 37)]... More..." /* @@ -610,7 +610,7 @@ src << browse(null, t1) if(href_list["teleto"]) - src.client.jumptoturf(locate(href_list["teleto"])) + client.jumptoturf(locate(href_list["teleto"])) if(href_list["priv_msg"]) var/mob/M = locate(href_list["priv_msg"]) @@ -648,8 +648,8 @@ if(K.client && K.client.holder && K.key != usr.key && K.key != M.key) K << "PM: [key_name(usr, K)]->[key_name(M, K)]: \blue [t]" if(href_list["flavor_more"]) - usr << browse(text("[][]", src.name, dd_replacetext(src.flavor_text, "\n", "
")), text("window=[];size=500x200", src.name)) - onclose(usr, "[src.name]") + usr << browse(text("[][]", name, dd_replacetext(flavor_text, "\n", "
")), text("window=[];size=500x200", name)) + onclose(usr, "[name]") if(href_list["flavor_change"]) update_flavor_text() ..() @@ -659,9 +659,9 @@ return health /mob/proc/UpdateLuminosity() - if(src.total_luminosity == src.last_luminosity) return 0//nothing to do here - src.last_luminosity = src.total_luminosity - sd_SetLuminosity(min(src.total_luminosity,7))//Current hardcode max at 7, should likely be a const somewhere else + if(total_luminosity == last_luminosity) return 0//nothing to do here + last_luminosity = total_luminosity + sd_SetLuminosity(min(total_luminosity,7))//Current hardcode max at 7, should likely be a const somewhere else return 1 /mob/MouseDrop(mob/M as mob) @@ -722,7 +722,7 @@ del(src) */ - if(IsGuestKey(src.key)) + if(IsGuestKey(key)) alert(src,"Baystation12 doesn't allow guest accounts to play. Please go to http://www.byond.com/ and register for a key.","Guest","OK") del(src) @@ -837,7 +837,7 @@ Currently doesn't work, but should be useful later or at least as a template else gibs(loc, viruses, dna) sleep(15) - for(var/obj/item/I in src.contents) + for(var/obj/item/I in contents) I.loc = get_turf(src) if(ex_act) I.ex_act(ex_act) @@ -876,7 +876,7 @@ Dusting robots does not eject the MMI, so it's a bit more powerful than gib() /N sleep(15) if(isrobot(src)&&src:mmi)//Is a robot and it has an mmi. del(src:mmi)//Delete the MMI first so that it won't go popping out. - for(var/obj/item/I in src.contents) + for(var/obj/item/I in contents) I.loc = get_turf(src) del(src) @@ -1011,17 +1011,17 @@ note dizziness decrements automatically in the mob's Life() proc. boom.icon_state = "loss_general" #elif /client/proc/station_explosion_cinematic(var/derp) - if(!src.mob) + if(!mob) return - var/mob/M = src.mob + var/mob/M = mob M.loc = null // HACK, but whatever, this works if(!M.hud_used) return var/obj/screen/boom = M.hud_used.station_explosion - src.screen += boom + screen += boom if(ticker) switch(ticker.mode.name) if("nuclear emergency") diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 8abee2c747..8454bc7d22 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -311,7 +311,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i //src.virus.cure(0) var/datum/disease/v = new virus.type - src.viruses += v + viruses += v v.affected_mob = src v.strain_data = v.strain_data.Copy() v.holder = src @@ -319,7 +319,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i v.carrier = 1 return - //if(src.virus) // + //if(virus) // //return // @@ -463,7 +463,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i return else*/ var/datum/disease/v = new virus.type - src.viruses += v + viruses += v v.affected_mob = src v.strain_data = v.strain_data.Copy() v.holder = src diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 5bee5a2991..e3d151d2ba 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -320,19 +320,19 @@ It's fairly easy to fix if dealing with single letters but not so much with comp /mob/proc/abiotic(var/full_body = 0) - if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask))) + if(full_body && ((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )) || (back || wear_mask))) return 1 - if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract ))) + if((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract ))) return 1 return 0 /mob/proc/abiotic2(var/full_body2 = 0) - if(full_body2 && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask))) + if(full_body2 && ((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )) || (back || wear_mask))) return 1 - if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract ))) + if((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract ))) return 1 return 0 diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index bb80c60740..5d9fb6c4f7 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -332,7 +332,7 @@ for(var/turf/turf in oview(1,src)) if(istype(turf,/turf/space)) continue - if(istype(turf,/turf/simulated/floor) && (src.flags & NOGRAV)) + if(istype(turf,/turf/simulated/floor) && (flags & NOGRAV)) continue dense_object++ break
NameReal NameAssigned JobKeyOptionsPMTraitor?
IP:(IP: [M.lastKnownIP])