Adds in limb replacement surgery, robolimbs, and all the crap for them. They can take more damage, require wires and welder to repair, but malfunction when they get more damaged, and explode when destroyed.

This commit is contained in:
SkyMarshal
2012-04-11 15:42:54 -07:00
parent cbad550bf1
commit d03228bc6e
23 changed files with 301 additions and 71 deletions

View File

@@ -1089,7 +1089,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"

View File

@@ -243,7 +243,29 @@
if(temp.destroyed)
wound_flavor_text["[temp.display_name]"] = "<span class='warning'><b>[t_He] is missing [t_his] [temp.display_name].</b></span>\n"
continue
if(temp.wounds)
if(temp.robot)
if(!(temp.brute_dam + temp.burn_dam))
wound_flavor_text["[temp.display_name]"] = "<span class='warning'>[t_He] has a robot arm!</span>\n"
else
wound_flavor_text["[temp.display_name]"] = "<span class='warning'>[t_He] has a robot arm, it has"
switch(temp.brute_dam)
if(0)
wound_flavor_text["[temp.display_name]"] += ""
else if(0 to 20)
wound_flavor_text["[temp.display_name]"] += " some dents"
else if(20 to INFINITY)
wound_flavor_text["[temp.display_name]"] += pick(" a lot of dents"," severe denting")
if(temp.brute_dam && temp.brute_dam)
wound_flavor_text["[temp.display_name]"] += " and"
switch(temp.burn_dam)
if(0)
wound_flavor_text["[temp.display_name]"] += ""
else if(0 to 20)
wound_flavor_text["[temp.display_name]"] += " some burns"
else if(20 to INFINITY)
wound_flavor_text["[temp.display_name]"] += pick(" a lot of burns"," severe melting")
wound_flavor_text["[temp.display_name]"] += "!</span>\n"
else 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)
@@ -429,50 +451,59 @@
flavor_text_string += flavor_text[text]
flavor_text_string += " on [t_his] [named].</span><br>"
wound_flavor_text["[named]"] = flavor_text_string
if(wound_flavor_text["head"] && !skipmask && !(wear_mask && istype(wear_mask, /obj/item/clothing/mask/gas)))
var/display_chest = 0
var/display_shoes = 0
var/display_gloves = 0
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 += "<span class='warning'>[src] has blood running down [t_his] face!</span>\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 += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["left arm"] && !w_uniform && !skipjumpsuit)
display_chest = 1
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 += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["left hand"] && !gloves && !skipgloves)
display_chest = 1
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 += "<span class='warning'>[src] has blood running from under [t_his] gloves!</span>\n"
if(wound_flavor_text["right arm"] && !w_uniform && !skipjumpsuit)
display_gloves = 1
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 += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["right hand"] && !gloves && !skipgloves)
display_chest = 1
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 += "<span class='warning'>[src] has blood running from under [t_his] gloves!</span>\n"
if(wound_flavor_text["groin"] && !w_uniform && !skipjumpsuit)
display_gloves = 1
if(wound_flavor_text["groin"] && (is_destroyed["groin"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["groin"]
else if(is_bleeding["groin"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["left leg"] && !w_uniform && !skipjumpsuit)
display_chest = 1
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 += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["left foot"]&& !shoes && !skipshoes)
display_chest = 1
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 += "<span class='warning'>[src] has blood running from [t_his] shoes!</span>\n"
if(wound_flavor_text["right leg"] && !w_uniform && !skipjumpsuit)
display_shoes = 1
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 += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["right foot"]&& !shoes && !skipshoes)
display_chest = 1
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 += "<span class='warning'>[src] has blood running from [t_his] shoes!</span>\n"
display_shoes = 1
if(display_chest)
msg += "<span class='warning'><b>[src] has blood soaking through from under [t_his] clothing!</b></span>\n"
if(display_shoes)
msg += "<span class='warning'><b>[src] has blood running from [t_his] shoes!</b></span>\n"
if(display_gloves)
msg += "<span class='warning'><b>[src] has blood running from under [t_his] gloves!</b></span>\n"
// if(w.bleeding)

View File

@@ -496,8 +496,12 @@
&& !istype(part, /datum/organ/external/chest) \
&& !istype(part, /datum/organ/external/head) \
&& !part.destroyed)
stand_icon.Blend(new /icon('tajaran.dmi', "[part.icon_name]_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('tajaran.dmi', "[part.icon_name]_l"), ICON_OVERLAY)
var/icon/temp = new /icon('tajaran.dmi', "[part.icon_name]_s")
if(part.robot) temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
stand_icon.Blend(temp, ICON_OVERLAY)
temp = new /icon('tajaran.dmi', "[part.icon_name]_l")
if(part.robot) temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
lying_icon.Blend(temp , ICON_OVERLAY)
stand_icon.Blend(new /icon('tajaran.dmi', "groin_[g]_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('tajaran.dmi', "groin_[g]_l"), ICON_OVERLAY)

View File

@@ -18,7 +18,7 @@
H.equip_if_possible(new /obj/item/clothing/head/caphat(H), H.slot_head)
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(H), H.slot_glasses)
H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack)
var/datum/organ/external/O = pick(H.organs)
var/datum/organ/external/O = H.organs[pick(H.organs)]
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
O.implant += L
L.imp_in = H

View File

@@ -23,7 +23,7 @@
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(H), H.slot_glasses)
H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/weapon/gun/energy/gun(H), H.slot_s_store)
var/datum/organ/external/O = pick(H.organs)
var/datum/organ/external/O = H.organs[pick(H.organs)]
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
O.implant += L
L.imp_in = H
@@ -55,7 +55,7 @@
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(H), H.slot_glasses)
H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/device/flash(H), H.slot_l_store)
var/datum/organ/external/O = pick(H.organs)
var/datum/organ/external/O = H.organs[pick(H.organs)]
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
O.implant += L
L.imp_in = H
@@ -96,7 +96,7 @@
H.equip_if_possible(new /obj/item/weapon/zippo(H), H.slot_l_store)
// H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/snacks/candy_corn(H), H.slot_h_store)
// No... just no. --SkyMarshal
var/datum/organ/external/O = pick(H.organs)
var/datum/organ/external/O = H.organs[pick(H.organs)]
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
O.implant += L
L.imp_in = H
@@ -128,7 +128,7 @@
H.equip_if_possible(new /obj/item/clothing/gloves/red(H), H.slot_gloves)
H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_s_store)
H.equip_if_possible(new /obj/item/device/flash(H), H.slot_l_store)
var/datum/organ/external/O = pick(H.organs)
var/datum/organ/external/O = H.organs[pick(H.organs)]
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
O.implant += L
L.imp_in = H

View File

@@ -395,7 +395,7 @@
//Add an implant if needed
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)
if (isnull(imp))
var/datum/organ/external/O = pick(subject.organs)
var/datum/organ/external/O = subject.organs[pick(subject.organs)]
imp = new /obj/item/weapon/implant/health(O)
O.implant += imp
imp.implanted = subject

View File

@@ -283,6 +283,7 @@ var/list/sacrificed = list()
del(ghost)
for(var/name in corpse_to_raise.organs)
var/datum/organ/external/affecting = corpse_to_raise.organs[name]
affecting.robot = 0
affecting.heal_damage(1000, 1000)
corpse_to_raise.setToxLoss(0)
corpse_to_raise.setOxyLoss(0)

View File

@@ -82,9 +82,9 @@ Deathnettle
/obj/item/weapon/grown/nettle/pickup(mob/living/carbon/human/user as mob)
if(!user.gloves)
user << "\red The nettle burns your bare hand!"
if(istype(user, /mob/living/carbon/human))
if(hasorgans(user))
var/organ = ((user.hand ? "l_":"r_") + "arm")
var/datum/organ/external/affecting = user.get_organ(organ)
var/datum/organ/external/affecting = user:get_organ(organ)
affecting.take_damage(0,force)
else
user.take_organ_damage(0,force)
@@ -101,9 +101,9 @@ Deathnettle
/obj/item/weapon/grown/deathnettle/pickup(mob/living/carbon/human/user as mob)
if(!user.gloves)
if(istype(user, /mob/living/carbon/human))
if(hasorgans(user))
var/organ = ((user.hand ? "l_":"r_") + "arm")
var/datum/organ/external/affecting = user.get_organ(organ)
var/datum/organ/external/affecting = user:get_organ(organ)
affecting.take_damage(0,force)
else
user.take_organ_damage(0,force)

View File

@@ -43,6 +43,10 @@ MEDICAL
use(1)
return
if(affecting.robot)
user << "Medical equipment for a robot arm? Better get a welder..."
return
for(var/datum/organ/wound/W in affecting.wounds)
if(W.bleeding || !W.is_healing)
if(heal_brute && W.wound_type == 2)
@@ -157,6 +161,9 @@ MEDICAL
affecting.gauzed = 1
use(1)
return
if(affecting.robot)
user << "Medical equipment for a robot arm? Better get a welder..."
return
for(var/datum/organ/wound/W in affecting.wounds)
if(W.bleeding || !W.healing_state)

View File

@@ -45,6 +45,7 @@
var/datum/organ/external/T = H.organs["l_hand"]
T.attachable = 0
T.destroyed = 0
T.broken = 0
T.robot = 1
user.drop_item()
M.update_body()
@@ -104,6 +105,7 @@
var/datum/organ/external/T = H.organs["r_hand"]
T.attachable = 0
T.destroyed = 0
T.broken = 0
T.robot = 1
user.drop_item()
M.update_body()
@@ -162,6 +164,7 @@
var/datum/organ/external/T = H.organs["l_foot"]
T.attachable = 0
T.destroyed = 0
T.broken = 0
T.robot = 1
user.drop_item()
M.update_body()
@@ -221,6 +224,7 @@
var/datum/organ/external/T = H.organs["r_foot"]
T.attachable = 0
T.destroyed = 0
T.broken = 0
T.robot = 1
user.drop_item()
M.update_body()

View File

@@ -246,6 +246,10 @@ CIRCULAR SAW
if(S.destroyed)
return ..()
if(S.robot)
user << "Medical equipment for a robot arm? How would that do any good..."
return
if(!S.open)
user << "\red There is skin in the way!"
return 0
@@ -556,6 +560,10 @@ CIRCULAR SAW
if(S.destroyed)
return ..()
if(S.robot)
user << "Medical equipment for a robot arm? How would that do any good..."
return
if(!S.open)
user << "\red There is skin in the way!"
return 0
@@ -764,6 +772,9 @@ CIRCULAR SAW
if(!S.open)
usr << "<b>You have to cut the limb open first!</b>"
return
if(S.robot)
user << "Medical equipment for a robot arm? How would that do any good..."
return
for(var/mob/O in viewers(M))
O.show_message("\red [user.name] scans the wounds on [M.name]'s [S.display_name] with \the [src.name]", 1)
@@ -977,6 +988,10 @@ CIRCULAR SAW
if(S.destroyed)
user << "What [S.display_name]?"
if(S.robot)
user << "Medical equipment for a robot arm? How would that do any good..."
return
if(!S.open)
user << "\red There is no wound to close up!"
return 0
@@ -1366,6 +1381,10 @@ CIRCULAR SAW
if(S.destroyed)
return ..()
if(S.robot)
user << "Medical equipment for a robot arm? How would that do any good..."
return
if(S.open)
user << "\red The wound is already open!"
return 0
@@ -1559,6 +1578,14 @@ CIRCULAR SAW
var/datum/organ/external/S = H:organs[user.zone_sel.selecting]
if(S.destroyed)
return
if(S.robot)
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, M)
spark_system.attach(M)
spark_system.start()
spawn(10)
del(spark_system)
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)
if(!do_after(user, rand(20,80)))

View File

@@ -25,4 +25,24 @@ TILES
user << "\blue You are not using this to lay wire..."
return
/obj/item/weapon/wire/attack(mob/M as mob, mob/user as mob)
if(hasorgans(M))
var/datum/organ/external/S = M:organs[user.zone_sel.selecting]
if(!S.robot || user.a_intent != "help")
return ..()
if(S.brute_dam)
S.heal_damage(0,15,0,1)
if(user != M)
user.visible_message("\red You repair some burn damage on \the [M]'s [S.display_name]",\
"\red \The [user] repairs some burn damage on \the [M]'s [S.display_name] with \the [src]",\
"You wires being cut.")
else
user.visible_message("\red You repair some burn damage on your [S.display_name]",\
"\red \The [user] repairs some burn damage on their [S.display_name] with \the [src]",\
"You wires being cut.")
else
user << "Nothing to fix!"
else
return ..()

View File

@@ -260,6 +260,26 @@ WELDINGTOOOL
user.disabilities &= ~1
return
attack(mob/M as mob, mob/user as mob)
if(hasorgans(M))
var/datum/organ/external/S = M:organs[user.zone_sel.selecting]
if(!S.robot || user.a_intent != "help")
return ..()
if(S.brute_dam)
S.heal_damage(15,0,0,1)
if(user != M)
user.visible_message("\red You patch some dents on \the [M]'s [S.display_name]",\
"\red \The [user] patches some dents on \the [M]'s [S.display_name] with \the [src]",\
"You hear a welder.")
else
user.visible_message("\red You patch some dents on your [S.display_name]",\
"\red \The [user] patches some dents on their [S.display_name] with \the [src]",\
"You hear a welder.")
else
user << "Nothing to fix!"
else
return ..()
/obj/item/weapon/weldingtool/largetank
name = "Industrial Welding Tool"

View File

@@ -214,6 +214,8 @@ SHARDS
var/mob/living/carbon/human/H = M
if(!((H.shoes) || (H.wear_suit && H.wear_suit.body_parts_covered & FEET)))
var/datum/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot"))
if(affecting.robot)
return
H.Weaken(3)
affecting.take_damage(5, 0)
H.UpdateDamageIcon()

View File

@@ -132,12 +132,12 @@
if("feet")
if(!H.shoes)
affecting = H.get_organ(pick("l_leg", "r_leg"))
H.Weaken(3)
if(!affecting.robot) H.Weaken(3)
if("l_hand", "r_hand")
if(!H.gloves)
affecting = H.get_organ(type)
H.Stun(3)
if(affecting)
if(!affecting.robot) H.Stun(3)
if(affecting && !affecting.robot)
affecting.take_damage(1, 0)
H.UpdateDamageIcon()
H.updatehealth()

View File

@@ -245,7 +245,26 @@
is_destroyed["[temp.display_name]"] = 1
wound_flavor_text["[temp.display_name]"] = "<span class='warning'><b>[t_He] is missing [t_his] [temp.display_name].</b></span>\n"
continue
if(temp.wounds)
if(temp.robot)
if(!(temp.brute_dam + temp.burn_dam))
wound_flavor_text["[temp.display_name]"] = "<span class='warning'>[t_He] has a robot [temp.display_name]!</span>\n"
continue
else
wound_flavor_text["[temp.display_name]"] = "<span class='warning'>[t_He] has a robot [temp.display_name], it has"
if(temp.brute_dam) switch(temp.brute_dam)
if(0 to 20)
wound_flavor_text["[temp.display_name]"] += " some dents"
if(21 to INFINITY)
wound_flavor_text["[temp.display_name]"] += pick(" a lot of dents"," severe denting")
if(temp.brute_dam && temp.burn_dam)
wound_flavor_text["[temp.display_name]"] += " and"
if(temp.burn_dam) switch(temp.burn_dam)
if(0 to 20)
wound_flavor_text["[temp.display_name]"] += " some burns"
if(21 to INFINITY)
wound_flavor_text["[temp.display_name]"] += pick(" a lot of burns"," severe melting")
wound_flavor_text["[temp.display_name]"] += "!</span>\n"
else 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)
@@ -403,22 +422,22 @@
switch(tally[tallied])
if(1)
if(!flavor_text.len)
flavor_text += "<span class='warning'>\The [src] has[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
flavor_text += "<span class='warning'>[t_He] has[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
else
flavor_text += "[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
if(2)
if(!flavor_text.len)
flavor_text += "<span class='warning'>\The [src] has[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
flavor_text += "<span class='warning'>[t_He] has[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
else
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 += "<span class='warning'>\The [src] has several [tallied_rename[tallied]]s"
flavor_text += "<span class='warning'>[t_He] has several [tallied_rename[tallied]]s"
else
flavor_text += " several [tallied_rename[tallied]]s"
if(6 to INFINITY)
if(!flavor_text.len)
flavor_text += "<span class='warning'>\The [src] has a bunch of [tallied_rename[tallied]]s"
flavor_text += "<span class='warning'>[t_He] has a bunch of [tallied_rename[tallied]]s"
else
flavor_text += " a ton of [tallied_rename[tallied]]s"
if(flavor_text.len)
@@ -434,6 +453,9 @@
//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.
var/display_chest = 0
var/display_shoes = 0
var/display_gloves = 0
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"])
@@ -441,43 +463,49 @@
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 += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
display_chest = 1
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 += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
display_chest = 1
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 += "<span class='warning'>[src] has blood running from under [t_his] gloves!</span>\n"
display_gloves = 1
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 += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
display_chest = 1
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 += "<span class='warning'>[src] has blood running from under [t_his] gloves!</span>\n"
display_gloves = 1
if(wound_flavor_text["groin"] && (is_destroyed["groin"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["groin"]
else if(is_bleeding["groin"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
display_chest = 1
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 += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
display_chest = 1
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 += "<span class='warning'>[src] has blood running from [t_his] shoes!</span>\n"
display_shoes = 1
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 += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
display_chest = 1
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 += "<span class='warning'>[src] has blood running from [t_his] shoes!</span>\n"
display_shoes = 1
if(display_chest)
msg += "<span class='warning'><b>[src] has blood soaking through from under [t_his] clothing!</b></span>\n"
if(display_shoes)
msg += "<span class='warning'><b>[src] has blood running from [t_his] shoes!</b></span>\n"
if(display_gloves)
msg += "<span class='warning'><b>[src] has blood running from under [t_his] gloves!</b></span>\n"
// if(w.bleeding)

View File

@@ -1419,8 +1419,12 @@
&& !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)
var/icon/temp = new /icon('human.dmi', "[part.icon_name]_s")
if(part.robot) temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
stand_icon.Blend(temp, ICON_OVERLAY)
temp = new /icon('human.dmi', "[part.icon_name]_l")
if(part.robot) temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
lying_icon.Blend(temp , 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)
@@ -2589,7 +2593,7 @@ It can still be worn/put on as normal.
var/amount = 0.0
for(var/name in organs)
var/datum/organ/external/O = organs[name]
amount+= O.brute_dam
if(!O.robot) amount+= O.brute_dam
return amount
/mob/living/carbon/human/adjustBruteLoss(var/amount, var/used_weapon = null)
@@ -2602,7 +2606,7 @@ It can still be worn/put on as normal.
var/amount = 0.0
for(var/name in organs)
var/datum/organ/external/O = organs[name]
amount+= O.burn_dam
if(!O.robot) amount+= O.burn_dam
return amount
/mob/living/carbon/human/adjustFireLoss(var/amount,var/used_weapon = null)

View File

@@ -83,6 +83,10 @@ emp_act
for(var/obj/O in src)
if(!O) continue
O.emp_act(severity)
for(var/named in organs)
var/datum/organ/external/O = organs[named]
if(O.destroyed) continue
O.emp_act(severity)
..()

View File

@@ -211,6 +211,7 @@
adjustFireLoss(-2)
for(var/datum/organ/external/org in organs)
if(org.robot) continue
org.brute_dam = max(org.brute_dam - 2, 0)
org.burn_dam = max(org.burn_dam - 2, 0)
updatehealth()
@@ -843,6 +844,30 @@
for(var/name in organs)
var/datum/organ/external/E = organs[name]
E.process()
if(E.robot && prob(E.brute_dam + E.burn_dam))
if(E.name == "l_hand" || E.name == "l_arm")
if(hand && equipped())
drop_item()
emote("custom v drops what they were holding, their limb malfunctioning!")
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spark_system.start()
spawn(10)
del(spark_system)
else if(E.name == "r_hand" || E.name == "r_arm")
if(!hand && equipped())
drop_item()
emote("custom v drops what they were holding, their limb malfunctioning!")
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spark_system.start()
spawn(10)
del(spark_system)
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
if(E.broken || E.destroyed)
if(E.name == "l_hand" || E.name == "l_arm")
if(hand && equipped())

View File

@@ -590,8 +590,12 @@
&& !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)
var/icon/temp = new /icon('monkey.dmi', "[part.icon_name]_s")
if(part.robot) temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
stand_icon.Blend(temp, ICON_OVERLAY)
temp = new /icon('monkey.dmi', "[part.icon_name]_l")
if(part.robot) temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
lying_icon.Blend(temp , ICON_OVERLAY)
stand_icon.Blend(new /icon('monkey.dmi', "groin_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('monkey.dmi', "groin_l"), ICON_OVERLAY)

View File

@@ -20,9 +20,9 @@
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)
if(organ.destroyed)
src.traumatic_shock += 60
else if(organ.broken)
else if(organ.broken || organ.open)
src.traumatic_shock += 30
if(src.traumatic_shock < 0)

View File

@@ -87,8 +87,11 @@
return 0
if(destroyed)
return 0
if(robot)
brute *= 0.66 //~2/3 damage for ROBOLIMBS
burn *= 0.66 //~2/3 damage for ROBOLIMBS
if(owner) owner.pain(display_name, (brute+burn)*3, 1)
if(owner && !robot) owner.pain(display_name, (brute+burn)*3, 1)
if(sharp)
var/nux = brute * rand(10,15)
if(brute_dam >= max_damage)
@@ -100,7 +103,7 @@
return
else if(prob(nux))
createwound(max(1,min(6,round(brute/10) + rand(0,1))),0,brute)
owner << "You feel something wet on your [display_name]"
if(!robot) owner << "You feel something wet on your [display_name]"
if((brute_dam + burn_dam + brute + burn) < max_damage)
if(brute)
@@ -131,7 +134,7 @@
burn = can_inflict
burn_dam += burn
createwound(max(1,min(6,round(burn/10) + rand(0,1))),2,burn)
else
else if(!robot)
var/passed_dam = (brute + burn) - can_inflict //Getting how much overdamage we have.
var/list/datum/organ/external/possible_points = list()
if(parent)
@@ -146,6 +149,8 @@
target.take_damage(passed_dam, 0, sharp, used_weapon)
else
target.take_damage(0, passed_dam, sharp, used_weapon)
else
droplimb(1) //Robot limbs just kinda fail at full damage.
if(broken)
@@ -157,7 +162,9 @@
return result
proc/heal_damage(brute, burn, internal = 0)
proc/heal_damage(brute, burn, internal = 0, robo_repair = 0)
if(robot && !robo_repair)
return
var/brute_to_heal = 0
var/brute_wounds = list()
var/burn_to_heal = 0
@@ -250,7 +257,7 @@
destroyed = 1
owner:update_body()
return
if(brute_dam > min_broken_damage)
if(brute_dam > min_broken_damage && !robot)
if(broken == 0)
//owner.unlock_medal("Broke Yarrr Bones!", 0, "Break a bone.", "easy")
owner.visible_message("\red You hear a loud cracking sound coming from [owner.name].","\red <b>Something feels like it shattered in your [display_name]!</b>","You hear a sickening crack.")
@@ -296,7 +303,7 @@
return 1
return 0
proc/droplimb(var/override = 0)
proc/droplimb(var/override = 0,var/no_explode = 0)
if(override)
destroyed = 1
if(destroyed)
@@ -307,7 +314,7 @@
for(var/datum/organ/external/I in children)
if(I && !I.destroyed)
I.droplimb(1)
I.droplimb(1,1)
var/obj/item/weapon/organ/H
switch(body_part)
if(UPPER_TORSO)
@@ -372,11 +379,25 @@
var/lol = pick(cardinal)
step(H,lol)
destspawn = 1
owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.","\red <b>Your [display_name] goes flying off!</b>","You hear a terrible sound of ripping tendons and flesh.")
if(!robot)
owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.",\
"\red <b>Your [display_name] goes flying off!</b>",\
"You hear a terrible sound of ripping tendons and flesh.")
else
owner.visible_message("\red [owner.name]'s [display_name] explodes violently!",\
"\red <b>Your [display_name] explodes!</b>",\
"You hear an explosion followed by a scream!")
if(!no_explode)
explosion(get_turf(owner),-1,-1,2,3)
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, src)
spark_system.attach(src)
spark_system.start()
spawn(10)
del(spark_system)
for(var/datum/organ/wound/W in wounds)
W.update_health()
del(W)
del(wounds)
owner.update_body()
owner.update_clothing()
@@ -411,6 +432,13 @@
W.initial_dmg += damage
W.wound_size = max(1,min(6,round(W.damage/10) + rand(0,1)))
proc/emp_act(severity)
if(!robot) return
if(prob(30*severity))
take_damage(4(4-severity), 0, 1, used_weapon = "EMP")
else
droplimb(1)
/datum/organ/wound
name = "wound"
var/wound_type = 0 //0 = cut, 1 = bruise, 2 = burn
@@ -424,6 +452,8 @@
var/slowheal = 3
proc/start_close()
if(parent.robot)
return
sleep(rand(1800,3000)) //3-5 minutes
if(prob(50) && wound_size == 1)
parent.wounds.Remove(src)
@@ -465,6 +495,8 @@
return 1
proc/become_scar()
if(parent.robot)
return
healing_state = 1 //Patched
spawn(200*slowheal) //~20-60 seconds
update_health(5) //Heals some.
@@ -520,6 +552,8 @@
return
proc/update_health(var/percent = 1)
if(!owner || owner.stat == 2)
return
damage = max(damage - damage/percent,0) //Remove that amount of the damage
if(wound_type > 1)
parent.burn_dam = max(parent.burn_dam - (initial_dmg - damage),0)

View File

@@ -27,7 +27,7 @@
<form name="spawner" action="byond://?src=/* ref src */" method="get">
<input type="hidden" name="src" value="/* ref src */">
Type <input type="text" name="filter" value="" onkeyup="updateSearch()" onkeypress="submitFirst(event)" style="width:350px"><br>
Type <input type="text" name="filter" value="" onkeyup="submitUpdate()" onkeypress="submitFirst(event)" style="width:350px"><br>
Offset: <input type="text" name="offset" value="x,y,z" style="width:250px">
A <input type="radio" name="offset_type" value="absolute">
@@ -52,6 +52,7 @@
var object_list = document.spawner.object_list;
var object_paths = null /* object types */;
var objects = object_paths == null ? new Array() : object_paths.split(";");
var iterator = 0
document.spawner.filter.focus();
populateList(objects);
@@ -107,6 +108,21 @@
object_list.options[0].selected = 'true';
}
}
function submitUpdate()
{
iterator += 1;
setTimeout(testUpdate(), 750);
}
function testUpdate()
{
iterator -= 1;
if (iterator == 0)
{
updateSearch();
}
}
</script>
</body>