Merge branch 'master' of git://github.com/Baystation12/Baystation12

This commit is contained in:
SkyMarshal
2012-01-10 21:36:35 -07:00
36 changed files with 1290 additions and 233 deletions
+2 -1
View File
@@ -52,7 +52,8 @@
set background = 1
var/list/organs = GetAllContents()
for(var/obj/organ/organ in organs)
for(var/name in organs)
var/obj/organ/organ = organs[name]
organ.ProcessOrgan()
return
-6
View File
@@ -336,12 +336,6 @@ proc/airborne_can_reach(turf/source, turf/target)
activate(var/mob/living/carbon/mob,var/multiplier)
mob.toxloss += (2*multiplier)
/datum/disease2/effect/greater/scream
name = "Random screaming syndrome"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*scream")
/datum/disease2/effect/greater/drowsness
name = "Automated sleeping syndrome"
stage = 3
+1 -1
View File
@@ -1139,7 +1139,7 @@
bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris
seed = "/obj/item/seeds/ambrosiavulgaris"
seed = "/obj/item/seeds/ambrosiavulgarisseed"
name = "Ambrosia Vulgaris"
desc = "A plant containing various healing chemicals."
icon_state = "ambrosiavulgaris"
+12 -1
View File
@@ -31,6 +31,18 @@
containertype = "/obj/structure/closet/crate"
containername = "Empty Box crate"
/datum/supply_packs/body_bags
name = "Body Bag supplies"
contains = list(
"/obj/item/weapon/bodybag",
"/obj/item/weapon/bodybag",
"/obj/item/weapon/bodybag",
"/obj/item/weapon/bodybag",
)
cost = 10
containertype = "/obj/structure/closet/crate"
containername = "Body Bag crate"
/datum/supply_packs/stationary
name = "Stationary supplies"
contains = list("/obj/item/device/taperecorder",
@@ -54,7 +66,6 @@
/datum/supply_packs/artscrafts
name = "Arts and Crafts supplies"
contains = list("/obj/item/toy/crayonbox",
"/obj/item/weapon/c_tube",
"/obj/item/weapon/camera_test",
"/obj/item/weapon/storage/photo_album",
"/obj/item/weapon/packageWrap",
-1
View File
@@ -8,7 +8,6 @@
throwforce = 10
/obj/item/clothing/head/culthood
name = "cult hood"
icon_state = "culthood"
+2 -1
View File
@@ -281,7 +281,8 @@ var/list/sacrificed = list()
corpse_to_raise.mind.key = ghost.key
corpse_to_raise.key = ghost.key
del(ghost)
for(var/datum/organ/external/affecting in corpse_to_raise.organs)
for(var/name in corpse_to_raise.organs)
var/datum/organ/external/affecting = corpse_to_raise.organs[name]
affecting.heal_damage(1000, 1000)
corpse_to_raise.setToxLoss(0)
corpse_to_raise.setOxyLoss(0)
+22 -2
View File
@@ -127,9 +127,29 @@
user.next_move = world.time + 2
if (user.hand)
user.l_hand = src
if(ishuman(user))
var/datum/organ/external/temp = user:organs["l_hand"]
if(!temp.destroyed)
user.l_hand = src
else
user << "\blue You pick \the [src] up with your ha- wait a minute."
if(loc == user)
user.drop_from_slot(src)
return
else
user.l_hand = src
else
user.r_hand = src
if(ishuman(user))
var/datum/organ/external/temp = user:organs["r_hand"]
if(!temp.destroyed)
user.r_hand = src
else
user << "\blue You pick \the [src] up with your ha- wait a minute."
if(loc == user)
user.drop_from_slot(src)
return
else
user.r_hand = src
src.loc = user
src.layer = 20
add_fingerprint(user)
+25 -1
View File
@@ -15,7 +15,7 @@ MEDICAL
t_him = "her"
user << "\red \The [M] is dead, you cannot help [t_him]!"
return
if (M.health < 50)
if (M.health < 0)
var/t_him = "it"
if (M.gender == MALE)
t_him = "him"
@@ -66,6 +66,30 @@ MEDICAL
if (affecting.heal_damage(src.heal_brute, src.heal_burn))
H.UpdateDamageIcon()
if(H.bloodloss > 0 && heal_brute > 0) // fix wounds too if bruise pack
var/stoped = 0
for(var/datum/organ/external/wound/W in affecting.wounds)
if(W.bleeding)
W.stopbleeding()
stoped = 0
break
if(!stoped)
// user << "There is no bleeding wound at [t]" //code no longer in a dedicated obj, thus this doesn't really matter
return
if (user)
if (M != user)
for (var/mob/O in viewers(H, null))
O.show_message("\red [H] has been bandaged with [src] by [user]", 1)
else
var/t_himself = "itself"
if (user.gender == MALE)
t_himself = "himself"
else if (user.gender == FEMALE)
t_himself = "herself"
for (var/mob/O in viewers(H, null))
O.show_message("\red [H] bandaged [t_himself] with [src]", 1)
M.updatehealth()
else
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
+403 -30
View File
@@ -83,12 +83,12 @@ CIRCULAR SAW
if(1.0)
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] is having his eyes retracted by [user].", 1)
O.show_message("\red [M] is having \his eyes retracted by [user].", 1)
M << "\red [user] begins to seperate your eyes with [src]!"
user << "\red You seperate [M]'s eyes with [src]!"
else
user.visible_message( \
"\red [user] begins to have his eyes retracted.", \
"\red [user] begins to have \his eyes retracted.", \
"\red You begin to pry open your eyes with [src]!" \
)
if(M == user && prob(25))
@@ -102,10 +102,56 @@ CIRCULAR SAW
M:eye_op_stage = 2.0
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
return ..()
else
// bone surgery doable?
if(!try_bone_surgery(M, user))
return ..()
return
/obj/item/weapon/retractor/proc/try_bone_surgery(mob/living/carbon/human/H as mob, mob/living/user as mob)
if(!istype(H))
return 0
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
if(!S || !istype(S))
return 0
if(S.destroyed)
user << "What [S.display_name]?"
if(!S.open)
user << "\red There is skin in the way!"
return 0
if(S.bleeding)
user << "\red [H] is profusely bleeding in \his [S.display_name]!"
return 0
if(H != user)
H.visible_message( \
"\red [user] is beginning to retract the flap in the wound in [H]'s [S.display_name] with [src].", \
"\red [user] begins to retract the flap in the wound in your [S.display_name] with [src]!")
else
H.visible_message( \
"\red [user] begins to retract the flap in the wound in \his [S.display_name] with [src]!", \
"\red You begin to retract the flap in the wound in your [S.display_name] with [src]!")
if(do_mob(user, H, 30))
if(H != user)
H.visible_message( \
"\red [user] retracts the flap in the wound in [H]'s [S.display_name] with [src]!", \
"\red [user] retracts the flap in the wound in your [S.display_name] with [src]!")
else
H.visible_message( \
"\red [user] retracts the flap in the wound in \his [S.display_name] with [src]!", \
"\red You retract the flap in the wound in your [S.display_name] with [src]!")
if(H == user && prob(25))
user << "\red You mess up!"
S.take_damage(15)
S.open = 2
H.updatehealth()
H.UpdateDamageIcon()
return 1
////////////
//Hemostat//
@@ -189,12 +235,12 @@ CIRCULAR SAW
if(2.0)
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] is having his eyes mended by [user].", 1)
O.show_message("\red [M] is having \his eyes mended by [user].", 1)
M << "\red [user] begins to mend your eyes with [src]!"
user << "\red You mend [M]'s eyes with [src]!"
else
user.visible_message( \
"\red [user] begins to have his eyes mended.", \
"\red [user] begins to have \his eyes mended.", \
"\red You begin to mend your eyes with [src]!" \
)
if(M == user && prob(25))
@@ -206,11 +252,68 @@ CIRCULAR SAW
else
M.take_organ_damage(15)
M:eye_op_stage = 3.0
else if(user.zone_sel.selecting == "head")
if(istype(M, /mob/living/carbon/human) && M:brain_op_stage == 1)
M:brain_op_stage = 0
var/datum/organ/external/S = M:organs["head"]
if(!S || !istype(S))
return ..()
M:brain_op_stage = 0
S.open = 1
if(!try_bone_surgery(M, user))
return ..()
else
return ..()
else
// bone surgery doable?
if(!try_bone_surgery(M, user))
return ..()
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
return ..()
/obj/item/weapon/hemostat/proc/try_bone_surgery(mob/living/carbon/human/H as mob, mob/living/user as mob)
if(!istype(H))
return 0
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
if(!S || !istype(S))
return 0
return
if(S.destroyed)
user << "What [S.display_name]?"
if(!S.open)
user << "\red There is skin in the way!"
return 0
if(!S.bleeding)
user << "\red [H] is not bleeding in \his [S.display_name]!"
return 0
if(H != user)
H.visible_message( \
"\red [user] is beginning to clamp bleeders in the wound in [H]'s [S.display_name] with [src].", \
"\red [user] begins to clamp bleeders in the wound in your [S.display_name] with [src]!")
else
H.visible_message( \
"\red [user] begins to clamp bleeders in the wound in \his [S.display_name] with [src]!", \
"\red You begin to clamp bleeders in the wound in your [S.display_name] with [src]!")
if(do_mob(user, H, 50))
if(H != user)
H.visible_message( \
"\red [user] clamps bleeders in the wound in [H]'s [S.display_name] with [src]!", \
"\red [user] clamps bleeders in the wound in your [S.display_name] with [src]!")
else
H.visible_message( \
"\red [user] clamps bleeders in the wound in \his [S.display_name] with [src]!", \
"\red You clamp bleeders in the wound in your [S.display_name] with [src]!")
if(H == user && prob(25))
user << "\red You mess up!"
S.take_damage(15)
S.bleeding = 0
H.updatehealth()
H.UpdateDamageIcon()
return 1
///////////
//Cautery//
@@ -233,6 +336,8 @@ CIRCULAR SAW
user << "\red You cauterize the incision in [M]'s torso with [src]!"
M:embryo_op_stage = 0.0
return
else
try_bone_surgery(M, user)
if(user.zone_sel.selecting == "groin")
if(istype(M, /mob/living/carbon/human))
@@ -247,6 +352,8 @@ CIRCULAR SAW
for(var/datum/disease/appendicitis in M.viruses)
appendicitis.cure()
M.resistances += appendicitis
else
try_bone_surgery(M, user)
return
if (user.zone_sel.selecting == "eyes")
@@ -275,12 +382,12 @@ CIRCULAR SAW
if(3.0)
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] is having his eyes cauterized by [user].", 1)
O.show_message("\red [M] is having \his eyes cauterized by [user].", 1)
M << "\red [user] begins to cauterize your eyes!"
user << "\red You cauterize [M]'s eyes with [src]!"
else
user.visible_message( \
"\red [user] begins to have his eyes cauterized.", \
"\red [user] begins to have \his eyes cauterized.", \
"\red You begin to cauterize your eyes!" \
)
if(M == user && prob(25))
@@ -294,11 +401,53 @@ CIRCULAR SAW
M.sdisabilities &= ~1
M:eye_op_stage = 0.0
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
return ..()
else
// bone surgery doable?
if(!try_bone_surgery(M, user))
return ..()
return
/obj/item/weapon/cautery/proc/try_bone_surgery(mob/living/carbon/human/H as mob, mob/living/user as mob)
if(!istype(H))
return 0
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
if(!S || !istype(S))
return 0
if(S.destroyed)
user << "What [S.display_name]?"
if(!S.open)
user << "\red There is no wound to close up!"
return 0
if(H != user)
H.visible_message( \
"\red [user] is beginning to cauterize the incision in [H]'s [S.display_name] with [src].", \
"\red [user] begins to cut open the wound in your [S.display_name] with [src]!")
else
H.visible_message( \
"\red [user] begins to cauterize the incision in \his [S.display_name] with [src]!", \
"\red You begin to cauterize the incision in your [S.display_name] with [src]!")
if(do_mob(user, H, 100))
if(H != user)
H.visible_message( \
"\red [user] cauterizes the incision in [H]'s [S.display_name] with [src]!", \
"\red [user] cauterizes the incision in your [S.display_name] with [src]!")
else
H.visible_message( \
"\red [user] cauterizes the incision in \his [S.display_name] with [src]!", \
"\red You cauterize the incision in your [S.display_name] with [src]!")
if(H == user && prob(25))
user << "\red You mess up!"
S.take_damage(15)
S.open = 0
H.updatehealth()
H.UpdateDamageIcon()
return 1
//obj/item/weapon/surgicaldrill
@@ -327,7 +476,7 @@ CIRCULAR SAW
if(0.0)
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] is beginning to have his torso cut open with [src] by [user].", 1)
O.show_message("\red [M] is beginning to have \his torso cut open with [src] by [user].", 1)
M << "\red [user] begins to cut open your torso with [src]!"
user << "\red You cut [M]'s torso open with [src]!"
M:embryo_op_stage = 1.0
@@ -335,7 +484,7 @@ CIRCULAR SAW
if(3.0)
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] is beginning to have his stomach cut open with [src] by [user].", 1)
O.show_message("\red [M] is beginning to have \his stomach cut open with [src] by [user].", 1)
M << "\red [user] begins to cut open your stomach with [src]!"
user << "\red You cut [M]'s stomach open with [src]!"
for(var/datum/disease/D in M.viruses)
@@ -352,14 +501,14 @@ CIRCULAR SAW
if(0.0)
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] is beginning to have his abdomen cut open with [src] by [user].", 1)
O.show_message("\red [M] is beginning to have \his abdomen cut open with [src] by [user].", 1)
M << "\red [user] begins to cut open your abdomen with [src]!"
user << "\red You cut [M]'s abdomen open with [src]!"
M:appendix_op_stage = 1.0
if(3.0)
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] is beginning to have his appendix seperated with [src] by [user].", 1)
O.show_message("\red [M] is beginning to have \his appendix seperated with [src] by [user].", 1)
M << "\red [user] begins to seperate your appendix with [src]!"
user << "\red You seperate [M]'s appendix with [src]!"
M:appendix_op_stage = 4.0
@@ -368,6 +517,12 @@ CIRCULAR SAW
if(user.zone_sel.selecting == "head" || istype(M, /mob/living/carbon/metroid))
var/mob/living/carbon/human/H = M
if(istype(H) && H.organs["head"])
var/datum/organ/external/affecting = H.organs["head"]
if(affecting.destroyed)
return ..()
if(istype(H) && ( \
(H.head && H.head.flags & HEADCOVERSEYES) || \
(H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \
@@ -397,12 +552,12 @@ CIRCULAR SAW
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] is beginning to have his head cut open with [src] by [user].", 1)
O.show_message("\red [M] is beginning to have \his head cut open with [src] by [user].", 1)
M << "\red [user] begins to cut open your head with [src]!"
user << "\red You cut [M]'s head open with [src]!"
else
user.visible_message( \
"\red [user] begins to cut open his skull with [src]!", \
"\red [user] begins to cut open \his skull with [src]!", \
"\red You begin to cut open your head with [src]!" \
)
@@ -443,12 +598,12 @@ CIRCULAR SAW
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] is having his connections to the brain delicately severed with [src] by [user].", 1)
O.show_message("\red [M] is having \his connections to the brain delicately severed with [src] by [user].", 1)
M << "\red [user] begins to cut open your head with [src]!"
user << "\red You cut [M]'s head open with [src]!"
else
user.visible_message( \
"\red [user] begin to delicately remove the connections to his brain with [src]!", \
"\red [user] begin to delicately remove the connections to \his brain with [src]!", \
"\red You begin to cut open your head with [src]!" \
)
if(M == user && prob(25))
@@ -498,12 +653,12 @@ CIRCULAR SAW
if(0.0)
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] is beginning to have his eyes incised with [src] by [user].", 1)
O.show_message("\red [M] is beginning to have \his eyes incised with [src] by [user].", 1)
M << "\red [user] begins to cut open your eyes with [src]!"
user << "\red You make an incision around [M]'s eyes with [src]!"
else
user.visible_message( \
"\red [user] begins to cut around his eyes with [src]!", \
"\red [user] begins to cut around \his eyes with [src]!", \
"\red You begin to cut open your eyes with [src]!" \
)
if(M == user && prob(25))
@@ -519,13 +674,78 @@ CIRCULAR SAW
M:eye_op_stage = 1.0
user << "\blue So far so good after."
else
return ..()
// bone surgery doable?
if(!try_bone_surgery(M, user))
return ..()
/* wat
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
return ..()
*/
return
/obj/item/weapon/scalpel/proc/try_bone_surgery(mob/living/carbon/human/H as mob, mob/living/user as mob)
if(!istype(H))
return 0
var/datum/organ/external/S = H.organs[user.zone_sel.selecting]
if(!S || !istype(S))
return 0
if(S.destroyed)
user << "What [S.display_name]?"
if(S.open)
user << "\red The wound is already open!"
return 0
if(H != user)
H.visible_message( \
"\red [user] is beginning to cut open the wound in [H]'s [S.display_name] with [src].", \
"\red [user] begins to cut open the wound in your [S.display_name] with [src]!")
else
H.visible_message( \
"\red [user] begins to cut open the wound in \his [S.display_name] with [src]!", \
"\red You begin to cut open the wound in your [S.display_name] with [src]!")
if(do_mob(user, H, 100))
if(H != user)
H.visible_message( \
"\red [user] cuts open the wound in [H]'s [S.display_name] with [src]!", \
"\red [user] cuts open the wound in your [S.display_name] with [src]!")
else
H.visible_message( \
"\red [user] cuts open the wound in \his [S.display_name] with [src]!", \
"\red You cut open the wound in your [S.display_name] with [src]!")
if(H == user && prob(25))
user << "\red You mess up!"
S.take_damage(15)
S.open = 1
S.bleeding = 1
H.updatehealth()
H.UpdateDamageIcon()
else
var/a = pick(1,2,3)
var/msg
if(a == 1)
msg = "\red [user]'s move slices open [H]'s wound, causing massive bleeding"
S.brute_dam += 35
S.createwound(rand(1,3))
else if(a == 2)
msg = "\red [user]'s move slices open [H]'s wound, and causes \him to accidentally stab himself"
S.brute_dam += 35
var/datum/organ/external/userorgan = user:organs["chest"]
if(userorgan)
userorgan.brute_dam += 35
else
user.take_organ_damage(35)
else if(a == 3)
msg = "\red [user] quickly stops the surgery"
for(var/mob/O in viewers(H))
O.show_message(msg, 1)
return 1
////////////////
//CIRCULAR SAW//
@@ -562,17 +782,28 @@ CIRCULAR SAW
return
switch(M:brain_op_stage)
if(0)
if(!istype(H))
return ..()
var/datum/organ/external/S = H.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 off with [src] by [user]."), 1)
S.destroyed = 1
S.droplimb()
H.update_body()
if(1.0)
if(istype(M, /mob/living/carbon/metroid))
return
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] has his skull sawed open with [src] by [user].", 1)
O.show_message("\red [M] has \his skull sawed open with [src] by [user].", 1)
M << "\red [user] begins to saw open your head with [src]!"
user << "\red You saw [M]'s head open with [src]!"
else
user.visible_message( \
"\red [user] saws open his skull with [src]!", \
"\red [user] saws open \his skull with [src]!", \
"\red You begin to saw open your head with [src]!" \
)
if(M == user && prob(25))
@@ -615,12 +846,12 @@ CIRCULAR SAW
if(3.0)
if(M != user)
for(var/mob/O in (viewers(M) - user - M))
O.show_message("\red [M] has his spine's connection to the brain severed with [src] by [user].", 1)
O.show_message("\red [M] has \his spine's connection to the brain severed with [src] by [user].", 1)
M << "\red [user] severs your brain's connection to the spine with [src]!"
user << "\red You sever [M]'s brain's connection to the spine with [src]!"
else
user.visible_message( \
"\red [user] severs his brain's connection to the spine with [src]!", \
"\red [user] severs \his brain's connection to the spine with [src]!", \
"\red You sever your brain's connection to the spine with [src]!" \
)
@@ -637,6 +868,16 @@ CIRCULAR SAW
..()
return
else if(user.zone_sel.selecting != "chest" && user.zone_sel.selecting != "groin" && istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/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))
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()
else
return ..()
/*
@@ -644,3 +885,135 @@ CIRCULAR SAW
return ..()
*/
return
/obj/item/weapon/surgical_tool
name = "surgical tool"
var/list/stage = list() //Stage to act on
var/time = 50 //Time it takes to use
var/wound //Wound type to act on
proc/get_message(var/mnumber,var/M,var/user,var/datum/organ/external/organ)//=Start,2=finish,3=walk away,4=screw up, 5 = closed wound
proc/screw_up(mob/living/carbon/M as mob,mob/living/carbon/user as mob,var/datum/organ/external/organ)
organ.brute_dam += 30
/obj/item/weapon/surgical_tool/proc/IsFinalStage(var/stage)
var/a
switch(wound)
if("broken") //Basic broken bone
a=3
if("blood")
a=3
return stage == a
/obj/item/weapon/surgical_tool/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
if(!istype(M, /mob))
return
if((usr.mutations & 16) && prob(50))
M << "\red You stab yourself in the eye."
M.disabilities |= 128
M.weakened += 4
M.bruteloss += 10
src.add_fingerprint(user)
if(!(locate(/obj/machinery/optable, M.loc) && M.resting))
return ..()
var/zone = user.zone_sel.selecting
if (istype(M.organs[zone], /datum/organ/external))
var/datum/organ/external/temp = M.organs[zone]
var/msg
// quickly convert embryo removal to bone surgery
if(zone == "chest" && M.embryo_op_stage == 3)
M.embryo_op_stage = 0
temp.open = 2
temp.bleeding = 0
// quickly convert appendectomy to bone surgery
if(zone == "groin" && M.appendix_op_stage == 3)
M.appendix_op_stage = 0
temp.open = 2
temp.bleeding = 0
msg = get_message(1,M,user,temp)
for(var/mob/O in viewers(M,null))
O.show_message("\red [msg]",1)
if(do_mob(user,M,time))
if(temp.open == 2 && !temp.bleeding)
if(temp.wound == wound)
if(temp.stage in stage)
temp.stage += 1
if(IsFinalStage(temp.stage))
temp.broken = 0
temp.stage = 0
temp.perma_injury = 0
temp.brute_dam = temp.min_broken_damage -1
msg = get_message(2,M,user,temp)
else
msg = get_message(4,M,user,temp)
screw_up(M,user,temp)
else
msg = get_message(5,M,user,temp)
else
msg = get_message(3,M,user,temp)
for(var/mob/O in viewers(M,null))
O.show_message("\red [msg]",1)
//Broken bone
//Basic
//Open -> Clean -> Bone-gel -> pop-into-place -> Bone-gel -> close -> glue -> clean
//Split
//Open -> Clean -> Tweasers -> bone-glue -> close -> glue -> clean
//
/obj/item/weapon/surgical_tool/bonegel
name = "Bone-gel"
icon = 'janitor.dmi'
icon_state = "cleaner"
/obj/item/weapon/surgical_tool/bonegel/New()
stage += 0
stage += 2
wound = "broken"
/obj/item/weapon/surgical_tool/bonegel/get_message(var/n,var/m,var/usr,var/datum/organ/external/organ)
var/z
switch(n)
if(1)
z="[usr] starts applying bone-gel to [m]'s [organ.display_name]"
if(2)
z="[usr] finishes applying bone-gel to [m]'s [organ.display_name]"
if(3)
z="[usr] stops applying bone-gel to [m]'s [organ.display_name]"
if(4)
z="[usr] applies bone-gel incorrectly to [m]'s [organ.display_name]"
if(5)
z="[usr] lubricates [m]'s [organ.display_name]"
return z
/obj/item/weapon/surgical_tool/bonecracker
name = "Bone-cracker"
icon = 'items.dmi'
icon_state = "wrench"
/obj/item/weapon/surgical_tool/bonecracker/New()
stage += 1
wound = "broken"
/obj/item/weapon/surgical_tool/bonecracker/get_message(var/n,var/m,var/usr,var/datum/organ/external/organ)
var/z
switch(n)
if(1)
z="[usr] starts popping [m]'s [organ.display_name] bone into place"
if(2)
z="[usr] finishes popping [m]'s [organ.display_name] bone into place"
if(3)
z="[usr] stops popping [m]'s [organ.display_name] bone into place"
if(4)
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
+13 -12
View File
@@ -6,20 +6,21 @@
new /obj/item/weapon/spacecash(src)
new /obj/item/weapon/spacecash(src)
/*/obj/item/weapon/storage/bible/proc/bless(mob/living/carbon/M as mob)
/obj/item/weapon/storage/bible/proc/bless(mob/living/carbon/M as mob)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/heal_amt = 10
for(var/datum/organ/external/affecting in H.organs)
for(var/name in H.organs)
var/datum/organ/external/affecting = H.organs[name]
if(affecting.heal_damage(heal_amt, heal_amt))
H.UpdateDamageIcon()
return */
return
/obj/item/weapon/storage/bible/attack(mob/M as mob, mob/living/user as mob)
// var/chaplain = 0
// if(user.mind && (user.mind.assigned_role == "Chaplain"))
// chaplain = 1
var/chaplain = 0
if(user.mind && (user.mind.assigned_role == "Chaplain"))
chaplain = 1
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
@@ -28,10 +29,10 @@
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
user << "\red You don't have the dexterity to do this!"
return
// if(!chaplain)
// user << "\red The book sizzles in your hands."
// user.take_organ_damage(0,10)
// return
if(!chaplain)
user << "\red The book sizzles in your hands."
user.take_organ_damage(0,10)
return
if ((user.mutations & CLUMSY) && prob(50))
user << "\red The [src] slips out of your hand and hits your head."
@@ -47,7 +48,7 @@
M << "\red The power of [src.deity_name] clears your mind of heresy!"
user << "\red You see how [M]'s eyes become clear, the cult no longer holds control over him!"
ticker.mode.remove_cultist(M.mind)
/* if ((istype(M, /mob/living/carbon/human) && prob(60)))
if ((istype(M, /mob/living/carbon/human) && prob(60)))
bless(M)
for(var/mob/O in viewers(M, null))
O.show_message(text("\red <B>[] heals [] with the power of [src.deity_name]!</B>", user, M), 1)
@@ -59,7 +60,7 @@
M << "\red You feel dumber."
for(var/mob/O in viewers(M, null))
O.show_message(text("\red <B>[] beats [] over the head with []!</B>", user, M, src), 1)
playsound(src.loc, "punch", 25, 1, -1) */
playsound(src.loc, "punch", 25, 1, -1)
else if(M.stat == 2)
for(var/mob/O in viewers(M, null))
O.show_message(text("\red <B>[] smacks []'s lifeless corpse with [].</B>", user, M, src), 1)
+14
View File
@@ -81,6 +81,20 @@
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
/obj/item/weapon/storage/pill_bottle/tramadol
name = "Pill bottle (tramadol)"
desc = "Contains painkiller pills."
/obj/item/weapon/storage/pill_bottle/kelotane/New()
..()
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
/obj/item/weapon/storage/pill_bottle/antitox
name = "Pill bottle (Anti-toxin)"
desc = "Contains pills used to counter toxins."
+18
View File
@@ -494,6 +494,24 @@ Traitors and the like can also be revived with the previous role mostly intact.
//M.updatehealth()
M.buckled = initial(M.buckled)
M.handcuffed = initial(M.handcuffed)
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
for(var/name in H.organs)
var/datum/organ/external/e = H.organs[name]
e.brute_dam = 0.0
e.burn_dam = 0.0
e.bandaged = 0.0
e.wound_size = 0.0
e.max_damage = initial(e.max_damage)
e.bleeding = 0
e.open = 0
e.broken = 0
e.destroyed = 0
e.perma_injury = 0
e.update_icon()
H.update_body()
H.update_face()
H.UpdateDamageIcon()
if (M.stat > 1)
M.stat=0
..()
+19 -3
View File
@@ -667,8 +667,9 @@ datum
return
if(prob(15) && istype(M, /mob/living/carbon/human) && volume >= 30)
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/organ/external/head/affecting = M:get_organ("head")
if(affecting)
affecting.disfigured = 1
affecting.take_damage(25, 0)
M:UpdateDamageIcon()
M:emote("scream")
@@ -714,7 +715,8 @@ datum
del (M:head)
M << "\red Your helmet melts into uselessness!"
return
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/organ/external/head/affecting = M:get_organ("head")
affecting.disfigured = 1
affecting.take_damage(35, 0)
M:UpdateDamageIcon()
M:emote("scream")
@@ -729,7 +731,8 @@ datum
M.take_organ_damage(min(15, volume * 4)) // same deal as sulphuric acid
else
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/organ/external/head/affecting = M:get_organ("head")
affecting.disfigured = 1
affecting.take_damage(30, 0)
M:UpdateDamageIcon()
M:emote("scream")
@@ -1308,6 +1311,19 @@ datum
..()
return
tramadol
name = "Tramadol"
id = "tramadol"
description = "A simple, yet effective painkiller."
reagent_state = LIQUID
color = "#C8A5DC"
oxycodone
name = "Oxycodone"
id = "oxycodone"
description = "An effective and very addictive painkiller."
reagent_state = LIQUID
color = "#C805DC"
impedrezene
name = "Impedrezene"
@@ -70,6 +70,13 @@ datum
required_reagents = list("radium" = 1, "phosphorus" = 1, "chlorine" = 1)
result_amount = 3
tramadol
name = "Tramadol"
id = "tramadol"
result = "tramadol"
required_reagents = list("inaprovaline" = 1, "ethanol" = 1, "oxygen" = 1)
result_amount = 3
//cyanide
// name = "Cyanide"
// id = "cyanide"
+8
View File
@@ -2726,6 +2726,14 @@
..()
reagents.add_reagent("kelotane", 30)
/obj/item/weapon/reagent_containers/pill/tramadol
name = "Tramadol pill"
desc = "A simple painkiller."
icon_state = "pill8"
New()
..()
reagents.add_reagent("tramadol", 30)
/obj/item/weapon/reagent_containers/pill/inaprovaline
name = "Inaprovaline pill"
desc = "Used to stabilize patients."
@@ -151,7 +151,31 @@
if (!src.client)
usr << "\red [src.name] doesn't seem as though they want to talk."
for(var/name in organs)
var/datum/organ/external/temp = organs[name]
if(temp.destroyed)
usr << "\red [name] is missing [t_his] [temp.display_name]."
if(temp.wounds)
for(var/datum/organ/external/wound/w in temp.wounds)
var/size = w.wound_size
var/sizetext
switch(size)
if(1)
sizetext = "cut"
if(2)
sizetext = "deep cut"
if(3)
sizetext = "flesh wound"
if(4)
sizetext = "gaping wound"
if(5)
sizetext = "big gaping wound"
if(6)
sizetext = "massive wound"
if(w.bleeding)
usr << "\red [name] is bleeding from a [sizetext] on [t_his] [temp.display_name]."
continue
print_flavor_text()
usr << "\blue *---------*"
+121 -50
View File
@@ -55,6 +55,9 @@
var/mutantrace = null
var/list/organs = list()
var/bloodloss = 0
var/debug_leftarm
var/debug_lefthand
/mob/living/carbon/human/dummy
real_name = "Test Dummy"
@@ -69,24 +72,25 @@
if(!dna) dna = new /datum/dna(null)
var/datum/organ/external/chest/chest = new /datum/organ/external/chest(src)
var/datum/organ/external/head/head = new /datum/organ/external/head(src)
var/datum/organ/external/l_arm/l_arm = new /datum/organ/external/l_arm(src)
var/datum/organ/external/r_arm/r_arm = new /datum/organ/external/r_arm(src)
var/datum/organ/external/r_leg/r_leg = new /datum/organ/external/r_leg(src)
var/datum/organ/external/l_leg/l_leg = new /datum/organ/external/l_leg(src)
chest.owner = src
head.owner = src
r_arm.owner = src
l_arm.owner = src
r_leg.owner = src
l_leg.owner = src
organs += chest
organs += head
organs += r_arm
organs += l_arm
organs += r_leg
organs += l_leg
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"]
debug_leftarm = organs["l_arm"]
debug_lefthand = organs["l_hand"]
var/g = "m"
if (gender == MALE)
@@ -170,6 +174,11 @@
var/hungry = (500 - nutrition)/5 // So overeat would be 100 and default level would be 80
if (hungry >= 70) tally += hungry/50
for(var/organ in list("l_leg","l_foot","r_leg","r_foot"))
var/datum/organ/external/o = organs["[organ]"]
if(o.broken)
tally += 6
if(wear_suit)
tally += wear_suit.slowdown
@@ -270,7 +279,8 @@
if (prob(50) && !shielded)
Paralyse(10)
for(var/datum/organ/external/temp in organs)
for(var/name in organs)
var/datum/organ/external/temp = organs[name]
switch(temp.name)
if("head")
temp.take_damage(b_loss * 0.2, f_loss * 0.2)
@@ -653,7 +663,7 @@
M.show_message(text("\red [] has been hit by []", src, O), 1)
if (health > 0)
var/datum/organ/external/affecting = get_organ(pick("chest", "chest", "chest", "head"))
if(!affecting) return
if(!affecting || affecting.destroyed) return
if (istype(O, /obj/effect/immovablerod))
affecting.take_damage(101, 0)
else
@@ -881,17 +891,33 @@
//because theyre located on the 'other' inventory bar.
// Gloves
if (gloves)
var/t1 = gloves.item_state
if (!t1)
t1 = gloves.icon_state
overlays += image("icon" = 'hands.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
if (gloves.blood_DNA)
var/datum/organ/external/lo = organs["l_hand"]
var/datum/organ/external/ro = organs["r_hand"]
if (!lo.destroyed || !ro.destroyed)
if (gloves)
var/t1 = gloves.item_state
if (!t1)
t1 = gloves.icon_state
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)
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)
var/icon/stain_icon = icon('blood.dmi', "bloodyhands[!lying ? "" : "2"]")
if(lo.destroyed)
stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
else if(ro.destroyed)
stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY)
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
else if (blood_DNA)
var/icon/stain_icon = icon('blood.dmi', "bloodyhands[!lying ? "" : "2"]")
if(lo.destroyed)
stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
else if(ro.destroyed)
stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY)
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
else if (blood_DNA)
var/icon/stain_icon = icon('blood.dmi', "bloodyhands[!lying ? "" : "2"]")
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
// Glasses
if (glasses)
var/t1 = glasses.icon_state
@@ -904,11 +930,22 @@
var/t1 = r_ear.icon_state
overlays += image("icon" = 'ears.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
// Shoes
if (shoes)
lo = organs["l_foot"]
ro = organs["r_foot"]
if ((!lo.destroyed || !ro.destroyed) && shoes)
var/t1 = shoes.icon_state
overlays += image("icon" = 'feet.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
var/icon/shoes_icon = new /icon("icon" = 'feet.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")))
if(lo.destroyed && !lying)
shoes_icon.Blend(new /icon('limb_mask.dmi', "right[lying?"_l":""]"), ICON_MULTIPLY)
else if(ro.destroyed && !lying)
shoes_icon.Blend(new /icon('limb_mask.dmi', "left[lying?"_l":""]"), ICON_MULTIPLY)
overlays += image(shoes_icon, "layer" = MOB_LAYER)
if (shoes.blood_DNA)
var/icon/stain_icon = icon('blood.dmi', "shoesblood[!lying ? "" : "2"]")
if(lo.destroyed)
stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
else if(ro.destroyed)
stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY)
overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) // Radio
/* if (w_radio)
overlays += image("icon" = 'ears.dmi', "icon_state" = "headset[!lying ? "" : "2"]", "layer" = MOB_LAYER) */
@@ -1238,28 +1275,50 @@
else if (gender == FEMALE)
g = "f"
stand_icon = new /icon('human.dmi', "blank")
lying_icon = new /icon('human.dmi', "blank")
stand_icon = new /icon('human.dmi', "torso_s")
lying_icon = new /icon('human.dmi', "torso_l")
var/husk = (mutations & HUSK)
//var/obese = (mutations & FAT)
stand_icon.Blend(new /icon('human.dmi', "chest_[g]_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('human.dmi', "chest_[g]_l"), ICON_OVERLAY)
var/datum/organ/external/head = organs["head"]
if(!head.destroyed)
stand_icon.Blend(new /icon('human.dmi', "head_[g]_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('human.dmi', "head_[g]_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('human.dmi', "[part.icon_name]_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('human.dmi', "[part.icon_name]_l"), ICON_OVERLAY)
stand_icon.Blend(new /icon('human.dmi', "groin_[g]_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('human.dmi', "groin_[g]_l"), ICON_OVERLAY)
if (husk)
stand_icon.Blend(new /icon('human.dmi', "husk_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('human.dmi', "husk_l"), ICON_OVERLAY)
var/icon/husk_s = new /icon('human.dmi', "husk_s")
var/icon/husk_l = new /icon('human.dmi', "husk_l")
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)
husk_s.Blend(new /icon('dam_mask.dmi', "[part.icon_name]"), ICON_SUBTRACT)
husk_l.Blend(new /icon('dam_mask.dmi', "[part.icon_name]2"), ICON_SUBTRACT)
stand_icon.Blend(husk_s, ICON_OVERLAY)
lying_icon.Blend(husk_l, ICON_OVERLAY)
/*else if(obese)
stand_icon.Blend(new /icon('human.dmi', "fatbody_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('human.dmi', "fatbody_l"), ICON_OVERLAY)*/
else
stand_icon.Blend(new /icon('human.dmi', "chest_[g]_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('human.dmi', "chest_[g]_l"), ICON_OVERLAY)
for (var/part in list("head", "arm_left", "arm_right", "hand_left", "hand_right", "leg_left", "leg_right", "foot_left", "foot_right"))
stand_icon.Blend(new /icon('human.dmi', "[part]_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('human.dmi', "[part]_l"), ICON_OVERLAY)
stand_icon.Blend(new /icon('human.dmi', "groin_[g]_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('human.dmi', "groin_[g]_l"), ICON_OVERLAY)
// Skin tone
if (s_tone >= 0)
@@ -1275,6 +1334,14 @@
lying_icon.Blend(new /icon('human.dmi', "underwear[underwear]_[g]_l"), ICON_OVERLAY)
/mob/living/carbon/human/proc/update_face()
if(organs)
var/datum/organ/external/head = organs["head"]
if(head)
if(head.destroyed)
del(face_standing)
del(face_lying)
return
if(!facial_hair_style || !hair_style) return//Seems people like to lose their icons, this should stop the runtimes for now
del(face_standing)
del(face_lying)
@@ -1978,7 +2045,7 @@ It can still be worn/put on as normal.
//SN src = null
del(src)
return
if ((target.health >= -99.0 && target.health < 0))
if ((target.health >= -99.0 && target.health < config.health_threshold_dead))
target.cpr_time = world.time
var/suff = min(target.getOxyLoss(), 7)
target.oxyloss -= suff
@@ -2176,14 +2243,16 @@ It can still be worn/put on as normal.
/mob/living/carbon/human/proc/get_damaged_organs(var/brute, var/burn)
var/list/datum/organ/external/parts = list()
for(var/datum/organ/external/organ in organs)
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/human/proc/get_damageable_organs()
var/list/datum/organ/external/parts = list()
for(var/datum/organ/external/organ in organs)
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
@@ -2311,7 +2380,8 @@ It can still be worn/put on as normal.
/mob/living/carbon/human/getBruteLoss()
var/amount = 0.0
for(var/datum/organ/external/O in organs)
for(var/name in organs)
var/datum/organ/external/O = organs[name]
amount+= O.brute_dam
return amount
@@ -2323,7 +2393,8 @@ It can still be worn/put on as normal.
/mob/living/carbon/human/getFireLoss()
var/amount = 0.0
for(var/datum/organ/external/O in organs)
for(var/name in organs)
var/datum/organ/external/O = organs[name]
amount+= O.burn_dam
return amount
@@ -15,26 +15,31 @@
body_standing = list()
del(body_lying)
body_lying = list()
for(var/datum/organ/external/O in organs)
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
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/human/proc/get_organ(var/zone)
if(!zone) zone = "chest"
for(var/datum/organ/external/O in organs)
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)
/mob/living/carbon/human/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0)
if((damagetype != BRUTE) && (damagetype != BURN))
..(damage, damagetype, def_zone, blocked)
return 1
@@ -47,15 +52,15 @@
else
if(!def_zone) def_zone = ran_zone(def_zone)
organ = get_organ(check_zone(def_zone))
if(!organ) return 0
if(!organ || organ.destroyed) return 0
if(blocked)
damage = (damage/(blocked+1))
switch(damagetype)
if(BRUTE)
organ.take_damage(damage, 0)
organ.take_damage(damage, 0, sharp)
if(BURN)
organ.take_damage(0, damage)
organ.take_damage(0, damage, sharp)
UpdateDamageIcon()
updatehealth()
return 1
@@ -27,7 +27,8 @@ emp_act
//If a specific bodypart is targetted, check how that bodypart is protected and return the value.
//If you don't specify a bodypart, it checks ALL your bodyparts for protection, and averages out the values
for(var/datum/organ/external/organ in organs)
for(var/name in organs)
var/datum/organ/external/organ = organs[name]
armorval += checkarmor(organ, type)
organnum++
return (armorval/max(organnum, 1))
@@ -95,7 +96,7 @@ emp_act
var/armor = run_armor_check(affecting, "melee", "Your armor has protected you from a hit to the [hit_area].", "Your armor has softened hit to your [hit_area].")
if(armor >= 2) return 0
if(!I.force) return 0
apply_damage(I.force, I.damtype, affecting, armor)
apply_damage(I.force, I.damtype, affecting, armor, is_cut(I))
var/bloody = 0
if((I.damtype == BRUTE) && prob(25 + (I.force * 2)))
+55 -2
View File
@@ -1,4 +1,4 @@
#define HUMAN_MAX_OXYLOSS 12 //Defines how much oxyloss humans can get per tick. No air applies this value.
#define HUMAN_MAX_OXYLOSS 3 //Defines how much oxyloss humans can get per tick. No air applies this value.
/mob/living/carbon/human
var
@@ -73,6 +73,8 @@
UpdateLuminosity()
handle_regular_status_updates()
handle_pain()
// Update clothing
update_clothing()
@@ -227,7 +229,7 @@
var/datum/gas_mixture/environment = loc.return_air()
var/datum/air_group/breath
// HACK NEED CHANGING LATER
if(health < 0)
if(health < config.health_threshold_dead)
losebreath++
if(losebreath>0) //Suffocating so do not take a breath
@@ -667,6 +669,30 @@
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)
emote("scream")
emote("collapse")
paralysis = 10
updatehealth()
// health = 100 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
@@ -729,6 +755,28 @@
if (stuttering) stuttering--
if (slurring) slurring--
var/datum/organ/external/head/head = organs["head"]
if(head && !head.disfigured)
if(head.brute_dam >= 45 || head.burn_dam >= 45)
head.disfigured = 1
emote("scream")
real_name = "Unknown"
src << "\red Your face has become disfigured."
warn_flavor_changed()
for(var/name in organs)
var/datum/organ/external/temp = organs[name]
if(!temp.bleeding)
continue
else
if(prob(35))
bloodloss += rand(1,10)
if(temp.wounds)
for(var/datum/organ/external/wound/W in temp.wounds)
if(!temp.bleeding)
continue
else
if(prob(25))
bloodloss++
if (eye_blind)
eye_blind--
blinded = 1
@@ -1053,9 +1101,14 @@
handle_shock()
..()
if(health < 0)
// health 0 makes you immediately collapse
shock_stage = max(shock_stage, 61)
if(traumatic_shock >= 80)
shock_stage += 1
else
if(shock_stage > 100) shock_stage = 100
shock_stage--
shock_stage = max(shock_stage, 0)
return
+20 -3
View File
@@ -7,9 +7,26 @@
if(reagents.has_reagent("alkysine"))
src.traumatic_shock -= 10
if(reagents.has_reagent("inaprovaline"))
src.traumatic_shock -= 15
if(reagents.has_reagent("synaptizine"))
src.traumatic_shock -= 50
src.traumatic_shock -= 25
if(reagents.has_reagent("tramadol"))
src.traumatic_shock -= 80 // make synaptizine function as good painkiller
if(reagents.has_reagent("oxycodone"))
src.traumatic_shock -= 200 // make synaptizine function as good painkiller
if(src.slurring)
src.traumatic_shock -= 20
// broken or ripped off organs will add quite a bit of pain
if(istype(src,/mob/living/carbon/human))
var/mob/living/carbon/human/M = src
for(var/name in M.organs)
var/datum/organ/external/organ = M.organs[name]
if(organ.destroyed || organ.open)
src.traumatic_shock += 60
else if(organ.broken)
src.traumatic_shock += 30
if(src.traumatic_shock < 0)
src.traumatic_shock = 0
return src.traumatic_shock
+1 -1
View File
@@ -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)
/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/slash = 0)
if(!damage || (blocked >= 2)) return 0
switch(damagetype)
if(BRUTE)
+16 -1
View File
@@ -23,7 +23,8 @@
var/mob/living/carbon/human/H = src //make this damage method divide the damage to be done among all the body parts, then burn each body part for that much damage. will have better effect then just randomly picking a body part
var/divided_damage = (burn_amount)/(H.organs.len)
var/extradam = 0 //added to when organ is at max dam
for(var/datum/organ/external/affecting in H.organs)
for(var/name in H.organs)
var/datum/organ/external/affecting = H.organs[name]
if(!affecting) continue
if(affecting.take_damage(0, divided_damage+extradam))
extradam = 0
@@ -134,6 +135,20 @@
src.updatehealth()
/mob/living/proc/revive()
if(istype(src, /mob/living/carbon/human))
var/mob/living/carbon/human/H = src
for(var/A in H.organs)
var/datum/organ/external/affecting = null
if(!H.organs[A]) continue
affecting = H.organs[A]
if(!istype(affecting, /datum/organ/external)) continue
affecting.heal_damage(1000, 1000) //fixes getting hit after ingestion, killing you when game updates organ health
affecting.broken = 0
affecting.destroyed = 0
for(var/datum/organ/external/wound/W in affecting.wounds)
W.stopbleeding()
H.UpdateDamageIcon()
H.update_body()
//src.fireloss = 0
src.setToxLoss(0)
//src.bruteloss = 0
+2 -1
View File
@@ -320,7 +320,8 @@
W |= M.contents
if(ishuman(M))
var/mob/living/carbon/human/G = M
for(var/datum/organ/external/F in G.organs)
for(var/name in G.organs)
var/datum/organ/external/F = G.organs[name]
W |= F.implant
for (var/obj/item/device/pda/M in W)
+183 -11
View File
@@ -1,18 +1,15 @@
/datum/organ
var
name = "organ"
owner = null
mob/living/carbon/human/owner = null
proc/process()
return 0
proc/receive_chem(chemical as obj)
return 0
/****************************************************
EXTERNAL ORGANS
****************************************************/
@@ -29,11 +26,53 @@
max_damage = 0
wound_size = 0
max_size = 0
var/obj/item/weapon/implant/implant = null
obj/item/weapon/implant/implant = null
display_name
list/wounds = list()
bleeding = 0
perma_injury = 0
perma_dmg = 0
broken = 0
destroyed = 0
destspawn
min_broken_damage = 30
datum/organ/external/parent
damage_msg = "\red You feel a intense pain"
var/open = 0
var/stage = 0
var/wound = 0
New(mob/living/carbon/human/H)
..(H)
if(!display_name)
display_name = name
if(istype(H))
owner = H
H.organs[name] = src
proc/take_damage(brute, burn, sharp)
if((brute <= 0) && (burn <= 0))
return 0
if(destroyed)
return 0
if(owner) owner.pain(display_name, (brute+burn)*3, 1)
if(sharp)
var/chance = rand(1,5)
var/nux = brute * chance
if(brute_dam >= max_damage)
if(prob(5 * brute))
for(var/mob/M in viewers(owner))
M.show_message("\red [owner.name]'s [display_name] flies off.")
destroyed = 1
droplimb()
return
else if(prob(nux))
createwound(rand(1,5))
owner << "You feel something wet on your [display_name]"
proc/take_damage(brute, burn)
if((brute <= 0) && (burn <= 0)) return 0
if((src.brute_dam + src.burn_dam + brute + burn) < src.max_damage)
src.brute_dam += brute
src.burn_dam += burn
@@ -56,19 +95,57 @@
else
return 0
if(broken)
owner.emote("scream")
var/result = src.update_icon()
return result
proc/heal_damage(brute, burn)
src.brute_dam = max(0, src.brute_dam - brute)
src.burn_dam = max(0, src.burn_dam - burn)
proc/heal_damage(brute, burn, internal = 0)
brute_dam = max(0, brute_dam - brute)
burn_dam = max(0, burn_dam - burn)
if(internal)
broken = 0
perma_injury = 0
return update_icon()
proc/get_damage() //returns total damage
return src.brute_dam + src.burn_dam //could use src.health?
return max(brute_dam + burn_dam - perma_injury,perma_injury) //could use health?
proc/get_damage_brute()
return max(brute_dam+perma_injury,perma_injury)
proc/get_damage_fire()
return burn_dam
process()
if(destroyed)
if(destspawn)
droplimb()
return
if(broken == 0)
perma_dmg = 0
if(parent)
if(parent.destroyed)
destroyed = 1
owner:update_body()
return
if(brute_dam > min_broken_damage)
if(broken == 0)
var/dmgmsg = "[damage_msg] in your [display_name]"
owner << dmgmsg
//owner.unlock_medal("Broke Yarrr Bones!", 0, "Break a bone.", "easy")
for(var/mob/M in viewers(owner))
if(M != owner)
M.show_message("\red You hear a loud cracking sound coming from [owner.name].")
owner.emote("scream")
broken = 1
wound = "broken" //Randomise in future
perma_injury = brute_dam
return
return
// new damage icon system
// returns just the brute/burn damage code
@@ -105,7 +182,102 @@
return 1
return 0
proc/droplimb()
if(destroyed)
//owner.unlock_medal("Lost something?", 0, "Lose a limb.", "easy")
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)
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)
if(owner:organs["r_hand"])
var/datum/organ/external/S = owner:organs["r_hand"]
if(!S.destroyed)
var/obj/item/weapon/organ/r_hand/X = new(owner.loc, owner)
for(var/mob/M in viewers(owner))
M.show_message("\red [owner.name]'s [X.name] flies off.")
var/lol2 = pick(cardinal)
step(X,lol2)
var/lol = pick(cardinal)
step(H,lol)
destroyed = 1
if(ARM_LEFT)
var/obj/item/weapon/organ/l_arm/H = new(owner.loc, owner)
if(owner:organs["l_hand"])
var/datum/organ/external/S = owner:organs["l_hand"]
if(!S.destroyed)
var/obj/item/weapon/organ/l_hand/X = new(owner.loc, owner)
for(var/mob/M in viewers(owner))
M.show_message("\red [owner.name]'s [X.name] flies off in arc.")
var/lol2 = pick(cardinal)
step(X,lol2)
var/lol = pick(cardinal)
step(H,lol)
destroyed = 1
if(LEG_RIGHT)
var/obj/item/weapon/organ/r_leg/H = new(owner.loc, owner)
if(owner:organs["r_foot"])
var/datum/organ/external/S = owner:organs["r_foot"]
if(!S.destroyed)
var/obj/item/weapon/organ/l_foot/X = new(owner.loc, owner)
for(var/mob/M in viewers(owner))
M.show_message("\red [owner.name]'s [X.name] flies off flies off in arc.")
var/lol2 = pick(cardinal)
step(X,lol2)
var/lol = pick(cardinal)
step(H,lol)
destroyed = 1
if(LEG_LEFT)
var/obj/item/weapon/organ/l_leg/H = new(owner.loc, owner)
if(owner:organs["l_foot"])
var/datum/organ/external/S = owner:organs["l_foot"]
if(!S.destroyed)
var/obj/item/weapon/organ/l_foot/X = new(owner.loc, owner)
for(var/mob/M in viewers(owner))
M.show_message("\red [owner.name]'s [X.name] flies off.")
var/lol2 = pick(cardinal)
step(X,lol2)
var/lol = pick(cardinal)
step(H,lol)
destroyed = 1
proc/createwound(var/size = 1)
if(ishuman(src.owner))
var/datum/organ/external/wound/W = new(src)
W.bleeding = 1
src.owner:bloodloss += 10 * size
W.wound_size = size
W.owner = src.owner
src.wounds += W
/datum/organ/external/wound
name = "wound"
wound_size = 1
icon_name = "wound"
display_name = "wound"
parent = null
proc/stopbleeding()
if(!src.bleeding)
return
var/t = 10 * src.wound_size
src.owner:bloodloss -= t
src.bleeding = 0
del(src)
/****************************************************
INTERNAL ORGANS
+138 -10
View File
@@ -2,61 +2,189 @@
name = "chest"
icon_name = "chest"
max_damage = 150
min_broken_damage = 75
body_part = UPPER_TORSO
/*/datum/organ/external/groin
/datum/organ/external/groin
name = "groin"
icon_name = "groin"
icon_name = "diaper"
max_damage = 115
min_broken_damage = 70
body_part = LOWER_TORSO
*/
/datum/organ/external/head
name = "head"
icon_name = "head"
max_damage = 125
max_damage = 75
min_broken_damage = 40
body_part = HEAD
var/disfigured = 0
/datum/organ/external/l_arm
name = "l_arm"
display_name = "left arm"
icon_name = "l_arm"
max_damage = 75
min_broken_damage = 30
body_part = ARM_LEFT
/datum/organ/external/l_leg
name = "l_leg"
display_name = "left leg"
icon_name = "l_leg"
max_damage = 75
min_broken_damage = 30
body_part = LEG_LEFT
/datum/organ/external/r_arm
name = "r_arm"
display_name = "right arm"
icon_name = "r_arm"
max_damage = 75
min_broken_damage = 30
body_part = ARM_RIGHT
/datum/organ/external/r_leg
name = "r_leg"
display_name = "right leg"
icon_name = "r_leg"
max_damage = 75
min_broken_damage = 30
body_part = LEG_RIGHT
/*Leaving these here in case we want to use them later
/datum/organ/external/l_foot
name = "l foot"
name = "l_foot"
display_name = "left foot"
icon_name = "l_foot"
max_damage = 40
min_broken_damage = 15
body_part = FOOT_LEFT
/datum/organ/external/r_foot
name = "r foot"
name = "r_foot"
display_name = "right foot"
icon_name = "r_foot"
max_damage = 40
min_broken_damage = 15
body_part = FOOT_RIGHT
/datum/organ/external/r_hand
name = "r hand"
name = "r_hand"
display_name = "right hand"
icon_name = "r_hand"
max_damage = 40
min_broken_damage = 15
body_part = HAND_RIGHT
/datum/organ/external/l_hand
name = "l hand"
name = "l_hand"
display_name = "left hand"
icon_name = "l_hand"
max_damage = 40
min_broken_damage = 15
body_part = HAND_LEFT
*/
obj/item/weapon/organ
icon = 'human.dmi'
obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
..(loc)
if(!istype(H))
return
if(H.dna)
blood_DNA = H.dna.unique_enzymes
blood_type = H.b_type
var/icon/I = new /icon(icon, icon_state)
if (H.s_tone >= 0)
I.Blend(rgb(H.s_tone, H.s_tone, H.s_tone), ICON_ADD)
else
I.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT)
icon = I
obj/item/weapon/organ/head
name = "head"
icon_state = "head_m_l"
var/mob/living/carbon/brain/brainmob
var/brain_op_stage = 0
obj/item/weapon/organ/head/proc/transfer_identity(var/mob/living/carbon/human/H)//Same deal as the regular brain proc. Used for human-->head
brainmob = new(src)
brainmob.name = H.real_name
brainmob.real_name = H.real_name
brainmob.dna = H.dna
if(H.mind)
H.mind.transfer_to(brainmob)
obj/item/weapon/organ/head/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/scalpel))
switch(brain_op_stage)
if(0)
for(var/mob/O in (oviewers(brainmob) - user))
O.show_message("\red [brainmob] is beginning to have \his head cut open with [src] by [user].", 1)
brainmob << "\red [user] begins to cut open your head with [src]!"
user << "\red You cut [brainmob]'s head open with [src]!"
brain_op_stage = 1
if(2)
for(var/mob/O in (oviewers(brainmob) - user))
O.show_message("\red [brainmob] is having \his connections to the brain delicately severed with [src] by [user].", 1)
brainmob << "\red [user] begins to cut open your head with [src]!"
user << "\red You cut [brainmob]'s head open with [src]!"
brain_op_stage = 3.0
else
..()
else if(istype(W,/obj/item/weapon/circular_saw))
switch(brain_op_stage)
if(1)
for(var/mob/O in (oviewers(brainmob) - user))
O.show_message("\red [brainmob] has \his skull sawed open with [src] by [user].", 1)
brainmob << "\red [user] begins to saw open your head with [src]!"
user << "\red You saw [brainmob]'s head open with [src]!"
brain_op_stage = 2
if(3)
for(var/mob/O in (oviewers(brainmob) - user))
O.show_message("\red [brainmob] has \his spine's connection to the brain severed with [src] by [user].", 1)
brainmob << "\red [user] severs your brain's connection to the spine with [src]!"
user << "\red You sever [brainmob]'s brain's connection to the spine with [src]!"
user.attack_log += "\[[time_stamp()]\]<font color='red'> Debrained [brainmob.name] ([brainmob.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
brainmob.attack_log += "\[[time_stamp()]\]<font color='orange'> Debrained by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
var/obj/item/brain/B = new(loc)
B.transfer_identity(brainmob)
brain_op_stage = 4.0
else
..()
else
..()
obj/item/weapon/organ/l_arm
name = "left arm"
icon_state = "l_arm_l"
obj/item/weapon/organ/l_foot
name = "left foot"
icon_state = "l_foot_l"
obj/item/weapon/organ/l_hand
name = "left hand"
icon_state = "l_hand_l"
obj/item/weapon/organ/l_leg
name = "left leg"
icon_state = "l_leg_l"
obj/item/weapon/organ/r_arm
name = "right arm"
icon_state = "r_arm_l"
obj/item/weapon/organ/r_foot
name = "right foot"
icon_state = "r_foot_l"
obj/item/weapon/organ/r_hand
name = "right hand"
icon_state = "r_hand_l"
obj/item/weapon/organ/r_leg
name = "right leg"
icon_state = "r_leg_l"
+48
View File
@@ -0,0 +1,48 @@
mob/proc/flash_pain()
flick("pain",pain)
mob/var/list/pain_stored = list()
mob/var/last_pain_message = ""
mob/var/next_pain_time = 0
// partname is the name of a body part
// amount is a num from 1 to 100
mob/proc/pain(var/partname, var/amount, var/force)
if(stat >= 2) return
if(world.time < next_pain_time && !force)
return
if(amount > 10 && istype(src,/mob/living/carbon/human))
if(src:paralysis)
src:paralysis = max(0, src:paralysis-round(amount/10))
if(amount > 50 && prob(amount / 5))
src:drop_item()
var/msg
switch(amount)
if(1 to 10)
msg = "<b>Your [partname] hurts a bit.</b>"
if(11 to 90)
flash_weak_pain()
msg = "<b><font size=1>Ouch! Your [partname] hurts.</font></b>"
if(91 to 10000)
flash_pain()
msg = "<b><font size=3>OH GOD! Your [partname] is hurting terribly!</font></b>"
if(msg && (msg != last_pain_message || prob(10)))
last_pain_message = msg
src << msg
next_pain_time = world.time + (100 - amount)
mob/living/carbon/human/proc/handle_pain()
// not when sleeping
if(stat >= 2) return
var/maxdam = 0
var/datum/organ/external/damaged_organ = null
for(var/name in organs)
var/datum/organ/external/E = organs[name]
var/dam = E.get_damage()
// make the choice of the organ depend on damage,
// but also sometimes use one of the less damaged ones
if(dam > maxdam && (maxdam == 0 || prob(70)) )
damaged_organ = E
maxdam = dam
if(damaged_organ)
pain(damaged_organ.display_name, maxdam, 0)
+10 -10
View File
@@ -10,8 +10,8 @@
canmove = 0
icon = null
invisibility = 101
for(var/t in organs)
del(t)
for(var/name in organs)
del(organs[name])
var/atom/movable/overlay/animation = new /atom/movable/overlay( loc )
animation.icon_state = "blank"
animation.icon = 'mob.dmi'
@@ -51,8 +51,8 @@
/mob/living/carbon/human/AIize()
if (monkeyizing)
return
for(var/t in organs)
del(t)
for(var/name in organs)
del(organs[name])
return ..()
/mob/living/carbon/AIize()
@@ -153,8 +153,8 @@
canmove = 0
icon = null
invisibility = 101
for(var/t in organs)
del(t)
for(var/name in organs)
del(organs[name])
if(client)
//client.screen -= main_hud1.contents
client.screen -= hud_used.contents
@@ -216,8 +216,8 @@
canmove = 0
icon = null
invisibility = 101
for(var/t in organs)
del(t)
for(var/name in organs)
del(organs[name])
var/alien_caste = pick("Hunter","Sentinel","Drone")
var/mob/living/carbon/alien/humanoid/new_xeno
@@ -256,8 +256,8 @@
canmove = 0
icon = null
invisibility = 101
for(var/t in organs)
del(t)
for(var/name in organs)
del(organs[name])
if(reproduce)
var/number = pick(2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4)
+31 -1
View File
@@ -708,6 +708,36 @@
H.merge(H2)
H.loc = P
if((P.dir & (P.dir - 1)) || istype(P,/obj/structure/disposalpipe/junction) || istype(P,/obj/structure/disposalpipe/sortjunction))
for(var/mob/M in H)
M.weakened += 2
if(prob(20))
M.paralysis += 2
if(istype(M,/mob/living/carbon/human))
var/name = pick(M:organs)
var/datum/organ/external/temp = M:organs[name]
if (istype(temp, /datum/organ/external))
temp.take_damage(4, 0)
if(temp.name == "head")
M.paralysis += 4
M << "\red Your head smashes into a rogue piece of metal!"
else if(temp.name == "groin")
M.weakened += 4
M << "\red You're gonna remember that one in the morning!"
M:UpdateDamageIcon()
//M:UpdateDamage() //doesnt fucking exist if you arent a blob
else
M.bruteloss += 4
if(prob(2))
M << "\red Your elbow doesn't bend that way, dammit!"
//else
// M << "\red <b>You are tossed about in the pipes!</b>"
M << 'clang.ogg'
for (var/mob/O in hearers(get_turf(src)))
O << "<FONT size=[max(0, 5 - get_dist(src, M))]>CLONG!</FONT>"
playsound(src.loc, 'clang.ogg', 50, 0, 0)
else // if wasn't a pipe, then set loc to turf
H.loc = T
return null
@@ -750,7 +780,7 @@
H.active = 0
H.loc = src
return
if(T.intact && istype(T,/turf/simulated/floor)) //intact floor, pop the tile
if(istype(T,/turf/simulated/floor) && T.intact) //intact floor, pop the tile
var/turf/simulated/floor/F = T
//F.health = 100
F.burnt = 1
+4
View File
@@ -486,9 +486,13 @@ Doing this because FindTurfs() isn't even used
e.bandaged = 0.0
e.wound_size = 0.0
e.max_damage = initial(e.max_damage)
e.broken = 0
e.destroyed = 0
e.perma_injury = 0
e.update_icon()
if(src.type == /mob/living/carbon/human)
var/mob/living/carbon/human/H = src
H.update_body()
H.UpdateDamageIcon()
else
alert("Debugging off")