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\AI_Visibility.dm"
#include "code\WorkInProgress\buildmode.dm" #include "code\WorkInProgress\buildmode.dm"
#include "code\WorkInProgress\explosion_particles.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\say.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajara_transformation.dm" #include "code\WorkInProgress\Cael_Aislinn\Tajara\tajara_transformation.dm"
#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm" #include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran.dm"

View File

@@ -243,7 +243,29 @@
if(temp.destroyed) 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" wound_flavor_text["[temp.display_name]"] = "<span class='warning'><b>[t_He] is missing [t_his] [temp.display_name].</b></span>\n"
continue 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()) var/list/wounds = list(list(),list(),list(),list(),list(),list())
for(var/datum/organ/wound/w in temp.wounds) for(var/datum/organ/wound/w in temp.wounds)
switch(w.healing_state) switch(w.healing_state)
@@ -429,50 +451,59 @@
flavor_text_string += flavor_text[text] flavor_text_string += flavor_text[text]
flavor_text_string += " on [t_his] [named].</span><br>" flavor_text_string += " on [t_his] [named].</span><br>"
wound_flavor_text["[named]"] = flavor_text_string 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"] msg += wound_flavor_text["head"]
else if(is_bleeding["head"]) else if(is_bleeding["head"])
msg += "<span class='warning'>[src] has blood running down [t_his] face!</span>\n" 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"] msg += wound_flavor_text["chest"]
else if(is_bleeding["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"] && !w_uniform && !skipjumpsuit) if(wound_flavor_text["left arm"] && (is_destroyed["left arm"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["left arm"] msg += wound_flavor_text["left arm"]
else if(is_bleeding["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"] && !gloves && !skipgloves) if(wound_flavor_text["left hand"] && (is_destroyed["left hand"] || (!gloves && !skipgloves)))
msg += wound_flavor_text["left hand"] msg += wound_flavor_text["left hand"]
else if(is_bleeding["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"] && !w_uniform && !skipjumpsuit) if(wound_flavor_text["right arm"] && (is_destroyed["right arm"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["right arm"] msg += wound_flavor_text["right arm"]
else if(is_bleeding["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"] && !gloves && !skipgloves) if(wound_flavor_text["right hand"] && (is_destroyed["right hand"] || (!gloves && !skipgloves)))
msg += wound_flavor_text["right hand"] msg += wound_flavor_text["right hand"]
else if(is_bleeding["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"] && !w_uniform && !skipjumpsuit) if(wound_flavor_text["groin"] && (is_destroyed["groin"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["groin"] msg += wound_flavor_text["groin"]
else if(is_bleeding["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"] && !w_uniform && !skipjumpsuit) if(wound_flavor_text["left leg"] && (is_destroyed["left leg"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["left leg"] msg += wound_flavor_text["left leg"]
else if(is_bleeding["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"]&& !shoes && !skipshoes) if(wound_flavor_text["left foot"]&& (is_destroyed["left foot"] || (!shoes && !skipshoes)))
msg += wound_flavor_text["left foot"] msg += wound_flavor_text["left foot"]
else if(is_bleeding["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"] && !w_uniform && !skipjumpsuit) if(wound_flavor_text["right leg"] && (is_destroyed["right leg"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["right leg"] msg += wound_flavor_text["right leg"]
else if(is_bleeding["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"]&& !shoes && !skipshoes) if(wound_flavor_text["right foot"]&& (is_destroyed["right foot"] || (!shoes && !skipshoes)))
msg += wound_flavor_text["right foot"] msg += wound_flavor_text["right foot"]
else if(is_bleeding["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) // if(w.bleeding)

View File

@@ -496,8 +496,12 @@
&& !istype(part, /datum/organ/external/chest) \ && !istype(part, /datum/organ/external/chest) \
&& !istype(part, /datum/organ/external/head) \ && !istype(part, /datum/organ/external/head) \
&& !part.destroyed) && !part.destroyed)
stand_icon.Blend(new /icon('tajaran.dmi', "[part.icon_name]_s"), ICON_OVERLAY) var/icon/temp = new /icon('tajaran.dmi', "[part.icon_name]_s")
lying_icon.Blend(new /icon('tajaran.dmi', "[part.icon_name]_l"), ICON_OVERLAY) 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) stand_icon.Blend(new /icon('tajaran.dmi', "groin_[g]_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('tajaran.dmi', "groin_[g]_l"), 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/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/clothing/glasses/sunglasses(H), H.slot_glasses)
H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack) 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) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
O.implant += L O.implant += L
L.imp_in = H 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/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/handcuffs(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/weapon/gun/energy/gun(H), H.slot_s_store) 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) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
O.implant += L O.implant += L
L.imp_in = H 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/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/handcuffs(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/device/flash(H), H.slot_l_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) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
O.implant += L O.implant += L
L.imp_in = H 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/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) // H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/snacks/candy_corn(H), H.slot_h_store)
// No... just no. --SkyMarshal // 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) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
O.implant += L O.implant += L
L.imp_in = H 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/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/weapon/handcuffs(H), H.slot_s_store)
H.equip_if_possible(new /obj/item/device/flash(H), H.slot_l_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) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
O.implant += L O.implant += L
L.imp_in = H L.imp_in = H

View File

@@ -395,7 +395,7 @@
//Add an implant if needed //Add an implant if needed
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject) var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)
if (isnull(imp)) 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) imp = new /obj/item/weapon/implant/health(O)
O.implant += imp O.implant += imp
imp.implanted = subject imp.implanted = subject

View File

@@ -283,6 +283,7 @@ var/list/sacrificed = list()
del(ghost) del(ghost)
for(var/name in corpse_to_raise.organs) for(var/name in corpse_to_raise.organs)
var/datum/organ/external/affecting = corpse_to_raise.organs[name] var/datum/organ/external/affecting = corpse_to_raise.organs[name]
affecting.robot = 0
affecting.heal_damage(1000, 1000) affecting.heal_damage(1000, 1000)
corpse_to_raise.setToxLoss(0) corpse_to_raise.setToxLoss(0)
corpse_to_raise.setOxyLoss(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) /obj/item/weapon/grown/nettle/pickup(mob/living/carbon/human/user as mob)
if(!user.gloves) if(!user.gloves)
user << "\red The nettle burns your bare hand!" 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/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) affecting.take_damage(0,force)
else else
user.take_organ_damage(0,force) user.take_organ_damage(0,force)
@@ -101,9 +101,9 @@ Deathnettle
/obj/item/weapon/grown/deathnettle/pickup(mob/living/carbon/human/user as mob) /obj/item/weapon/grown/deathnettle/pickup(mob/living/carbon/human/user as mob)
if(!user.gloves) if(!user.gloves)
if(istype(user, /mob/living/carbon/human)) if(hasorgans(user))
var/organ = ((user.hand ? "l_":"r_") + "arm") 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) affecting.take_damage(0,force)
else else
user.take_organ_damage(0,force) user.take_organ_damage(0,force)

View File

@@ -43,6 +43,10 @@ MEDICAL
use(1) use(1)
return 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) for(var/datum/organ/wound/W in affecting.wounds)
if(W.bleeding || !W.is_healing) if(W.bleeding || !W.is_healing)
if(heal_brute && W.wound_type == 2) if(heal_brute && W.wound_type == 2)
@@ -157,6 +161,9 @@ MEDICAL
affecting.gauzed = 1 affecting.gauzed = 1
use(1) use(1)
return 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) for(var/datum/organ/wound/W in affecting.wounds)
if(W.bleeding || !W.healing_state) if(W.bleeding || !W.healing_state)

View File

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

View File

@@ -246,6 +246,10 @@ CIRCULAR SAW
if(S.destroyed) if(S.destroyed)
return ..() return ..()
if(S.robot)
user << "Medical equipment for a robot arm? How would that do any good..."
return
if(!S.open) if(!S.open)
user << "\red There is skin in the way!" user << "\red There is skin in the way!"
return 0 return 0
@@ -556,6 +560,10 @@ CIRCULAR SAW
if(S.destroyed) if(S.destroyed)
return ..() return ..()
if(S.robot)
user << "Medical equipment for a robot arm? How would that do any good..."
return
if(!S.open) if(!S.open)
user << "\red There is skin in the way!" user << "\red There is skin in the way!"
return 0 return 0
@@ -764,6 +772,9 @@ CIRCULAR SAW
if(!S.open) if(!S.open)
usr << "<b>You have to cut the limb open first!</b>" usr << "<b>You have to cut the limb open first!</b>"
return 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)) 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) 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) if(S.destroyed)
user << "What [S.display_name]?" 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) if(!S.open)
user << "\red There is no wound to close up!" user << "\red There is no wound to close up!"
return 0 return 0
@@ -1366,6 +1381,10 @@ CIRCULAR SAW
if(S.destroyed) if(S.destroyed)
return ..() return ..()
if(S.robot)
user << "Medical equipment for a robot arm? How would that do any good..."
return
if(S.open) if(S.open)
user << "\red The wound is already open!" user << "\red The wound is already open!"
return 0 return 0
@@ -1559,6 +1578,14 @@ CIRCULAR SAW
var/datum/organ/external/S = H:organs[user.zone_sel.selecting] var/datum/organ/external/S = H:organs[user.zone_sel.selecting]
if(S.destroyed) if(S.destroyed)
return 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)) 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) 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))) if(!do_after(user, rand(20,80)))

View File

@@ -25,4 +25,24 @@ TILES
user << "\blue You are not using this to lay wire..." user << "\blue You are not using this to lay wire..."
return 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 user.disabilities &= ~1
return 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 /obj/item/weapon/weldingtool/largetank
name = "Industrial Welding Tool" name = "Industrial Welding Tool"

View File

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

View File

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

View File

@@ -245,7 +245,26 @@
is_destroyed["[temp.display_name]"] = 1 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" wound_flavor_text["[temp.display_name]"] = "<span class='warning'><b>[t_He] is missing [t_his] [temp.display_name].</b></span>\n"
continue 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()) var/list/wounds = list(list(),list(),list(),list(),list(),list())
for(var/datum/organ/wound/w in temp.wounds) for(var/datum/organ/wound/w in temp.wounds)
switch(w.healing_state) switch(w.healing_state)
@@ -403,22 +422,22 @@
switch(tally[tallied]) switch(tally[tallied])
if(1) if(1)
if(!flavor_text.len) 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 else
flavor_text += "[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]" flavor_text += "[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
if(2) if(2)
if(!flavor_text.len) 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 else
flavor_text += "[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s" flavor_text += "[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
if(3 to 5) if(3 to 5)
if(!flavor_text.len) 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 else
flavor_text += " several [tallied_rename[tallied]]s" flavor_text += " several [tallied_rename[tallied]]s"
if(6 to INFINITY) if(6 to INFINITY)
if(!flavor_text.len) 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 else
flavor_text += " a ton of [tallied_rename[tallied]]s" flavor_text += " a ton of [tallied_rename[tallied]]s"
if(flavor_text.len) if(flavor_text.len)
@@ -434,6 +453,9 @@
//Handles the text strings being added to the actual description. //Handles the text strings being added to the actual description.
//If they have something that covers the limb, and it is not missing, put flavortext. If it is covered but bleeding, add other flavortext. //If 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))))) if(wound_flavor_text["head"] && (is_destroyed["head"] || (!skipmask && !(wear_mask && istype(wear_mask, /obj/item/clothing/mask/gas)))))
msg += wound_flavor_text["head"] msg += wound_flavor_text["head"]
else if(is_bleeding["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. if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit) //No need. A missing chest gibs you.
msg += wound_flavor_text["chest"] msg += wound_flavor_text["chest"]
else if(is_bleeding["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))) if(wound_flavor_text["left arm"] && (is_destroyed["left arm"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["left arm"] msg += wound_flavor_text["left arm"]
else if(is_bleeding["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))) if(wound_flavor_text["left hand"] && (is_destroyed["left hand"] || (!gloves && !skipgloves)))
msg += wound_flavor_text["left hand"] msg += wound_flavor_text["left hand"]
else if(is_bleeding["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))) if(wound_flavor_text["right arm"] && (is_destroyed["right arm"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["right arm"] msg += wound_flavor_text["right arm"]
else if(is_bleeding["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))) if(wound_flavor_text["right hand"] && (is_destroyed["right hand"] || (!gloves && !skipgloves)))
msg += wound_flavor_text["right hand"] msg += wound_flavor_text["right hand"]
else if(is_bleeding["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))) if(wound_flavor_text["groin"] && (is_destroyed["groin"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["groin"] msg += wound_flavor_text["groin"]
else if(is_bleeding["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))) if(wound_flavor_text["left leg"] && (is_destroyed["left leg"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["left leg"] msg += wound_flavor_text["left leg"]
else if(is_bleeding["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))) if(wound_flavor_text["left foot"]&& (is_destroyed["left foot"] || (!shoes && !skipshoes)))
msg += wound_flavor_text["left foot"] msg += wound_flavor_text["left foot"]
else if(is_bleeding["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))) if(wound_flavor_text["right leg"] && (is_destroyed["right leg"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["right leg"] msg += wound_flavor_text["right leg"]
else if(is_bleeding["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))) if(wound_flavor_text["right foot"]&& (is_destroyed["right foot"] || (!shoes && !skipshoes)))
msg += wound_flavor_text["right foot"] msg += wound_flavor_text["right foot"]
else if(is_bleeding["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) // if(w.bleeding)

View File

@@ -1419,8 +1419,12 @@
&& !istype(part, /datum/organ/external/chest) \ && !istype(part, /datum/organ/external/chest) \
&& !istype(part, /datum/organ/external/head) \ && !istype(part, /datum/organ/external/head) \
&& !part.destroyed) && !part.destroyed)
stand_icon.Blend(new /icon('human.dmi', "[part.icon_name]_s"), ICON_OVERLAY) var/icon/temp = new /icon('human.dmi', "[part.icon_name]_s")
lying_icon.Blend(new /icon('human.dmi', "[part.icon_name]_l"), ICON_OVERLAY) 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) stand_icon.Blend(new /icon('human.dmi', "groin_[g]_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('human.dmi', "groin_[g]_l"), 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 var/amount = 0.0
for(var/name in organs) for(var/name in organs)
var/datum/organ/external/O = organs[name] var/datum/organ/external/O = organs[name]
amount+= O.brute_dam if(!O.robot) amount+= O.brute_dam
return amount return amount
/mob/living/carbon/human/adjustBruteLoss(var/amount, var/used_weapon = null) /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 var/amount = 0.0
for(var/name in organs) for(var/name in organs)
var/datum/organ/external/O = organs[name] var/datum/organ/external/O = organs[name]
amount+= O.burn_dam if(!O.robot) amount+= O.burn_dam
return amount return amount
/mob/living/carbon/human/adjustFireLoss(var/amount,var/used_weapon = null) /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) for(var/obj/O in src)
if(!O) continue if(!O) continue
O.emp_act(severity) 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) adjustFireLoss(-2)
for(var/datum/organ/external/org in organs) for(var/datum/organ/external/org in organs)
if(org.robot) continue
org.brute_dam = max(org.brute_dam - 2, 0) org.brute_dam = max(org.brute_dam - 2, 0)
org.burn_dam = max(org.burn_dam - 2, 0) org.burn_dam = max(org.burn_dam - 2, 0)
updatehealth() updatehealth()
@@ -843,6 +844,30 @@
for(var/name in organs) for(var/name in organs)
var/datum/organ/external/E = organs[name] var/datum/organ/external/E = organs[name]
E.process() 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.broken || E.destroyed)
if(E.name == "l_hand" || E.name == "l_arm") if(E.name == "l_hand" || E.name == "l_arm")
if(hand && equipped()) if(hand && equipped())

View File

@@ -590,8 +590,12 @@
&& !istype(part, /datum/organ/external/chest) \ && !istype(part, /datum/organ/external/chest) \
&& !istype(part, /datum/organ/external/head) \ && !istype(part, /datum/organ/external/head) \
&& !part.destroyed) && !part.destroyed)
stand_icon.Blend(new /icon('monkey.dmi', "[part.icon_name]_s"), ICON_OVERLAY) var/icon/temp = new /icon('monkey.dmi', "[part.icon_name]_s")
lying_icon.Blend(new /icon('monkey.dmi', "[part.icon_name]_l"), ICON_OVERLAY) 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) stand_icon.Blend(new /icon('monkey.dmi', "groin_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('monkey.dmi', "groin_l"), 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 var/mob/living/carbon/human/M = src
for(var/name in M.organs) for(var/name in M.organs)
var/datum/organ/external/organ = M.organs[name] var/datum/organ/external/organ = M.organs[name]
if(organ.destroyed || organ.open) if(organ.destroyed)
src.traumatic_shock += 60 src.traumatic_shock += 60
else if(organ.broken) else if(organ.broken || organ.open)
src.traumatic_shock += 30 src.traumatic_shock += 30
if(src.traumatic_shock < 0) if(src.traumatic_shock < 0)

View File

@@ -87,8 +87,11 @@
return 0 return 0
if(destroyed) if(destroyed)
return 0 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) if(sharp)
var/nux = brute * rand(10,15) var/nux = brute * rand(10,15)
if(brute_dam >= max_damage) if(brute_dam >= max_damage)
@@ -100,7 +103,7 @@
return return
else if(prob(nux)) else if(prob(nux))
createwound(max(1,min(6,round(brute/10) + rand(0,1))),0,brute) 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_dam + burn_dam + brute + burn) < max_damage)
if(brute) if(brute)
@@ -131,7 +134,7 @@
burn = can_inflict burn = can_inflict
burn_dam += burn burn_dam += burn
createwound(max(1,min(6,round(burn/10) + rand(0,1))),2,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/passed_dam = (brute + burn) - can_inflict //Getting how much overdamage we have.
var/list/datum/organ/external/possible_points = list() var/list/datum/organ/external/possible_points = list()
if(parent) if(parent)
@@ -146,6 +149,8 @@
target.take_damage(passed_dam, 0, sharp, used_weapon) target.take_damage(passed_dam, 0, sharp, used_weapon)
else else
target.take_damage(0, passed_dam, sharp, used_weapon) target.take_damage(0, passed_dam, sharp, used_weapon)
else
droplimb(1) //Robot limbs just kinda fail at full damage.
if(broken) if(broken)
@@ -157,7 +162,9 @@
return result 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_to_heal = 0
var/brute_wounds = list() var/brute_wounds = list()
var/burn_to_heal = 0 var/burn_to_heal = 0
@@ -250,7 +257,7 @@
destroyed = 1 destroyed = 1
owner:update_body() owner:update_body()
return return
if(brute_dam > min_broken_damage) if(brute_dam > min_broken_damage && !robot)
if(broken == 0) if(broken == 0)
//owner.unlock_medal("Broke Yarrr Bones!", 0, "Break a bone.", "easy") //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.") 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 1
return 0 return 0
proc/droplimb(var/override = 0) proc/droplimb(var/override = 0,var/no_explode = 0)
if(override) if(override)
destroyed = 1 destroyed = 1
if(destroyed) if(destroyed)
@@ -307,7 +314,7 @@
for(var/datum/organ/external/I in children) for(var/datum/organ/external/I in children)
if(I && !I.destroyed) if(I && !I.destroyed)
I.droplimb(1) I.droplimb(1,1)
var/obj/item/weapon/organ/H var/obj/item/weapon/organ/H
switch(body_part) switch(body_part)
if(UPPER_TORSO) if(UPPER_TORSO)
@@ -372,11 +379,25 @@
var/lol = pick(cardinal) var/lol = pick(cardinal)
step(H,lol) step(H,lol)
destspawn = 1 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) for(var/datum/organ/wound/W in wounds)
W.update_health() W.update_health()
del(W) del(W)
del(wounds)
owner.update_body() owner.update_body()
owner.update_clothing() owner.update_clothing()
@@ -411,6 +432,13 @@
W.initial_dmg += damage W.initial_dmg += damage
W.wound_size = max(1,min(6,round(W.damage/10) + rand(0,1))) 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 /datum/organ/wound
name = "wound" name = "wound"
var/wound_type = 0 //0 = cut, 1 = bruise, 2 = burn var/wound_type = 0 //0 = cut, 1 = bruise, 2 = burn
@@ -424,6 +452,8 @@
var/slowheal = 3 var/slowheal = 3
proc/start_close() proc/start_close()
if(parent.robot)
return
sleep(rand(1800,3000)) //3-5 minutes sleep(rand(1800,3000)) //3-5 minutes
if(prob(50) && wound_size == 1) if(prob(50) && wound_size == 1)
parent.wounds.Remove(src) parent.wounds.Remove(src)
@@ -465,6 +495,8 @@
return 1 return 1
proc/become_scar() proc/become_scar()
if(parent.robot)
return
healing_state = 1 //Patched healing_state = 1 //Patched
spawn(200*slowheal) //~20-60 seconds spawn(200*slowheal) //~20-60 seconds
update_health(5) //Heals some. update_health(5) //Heals some.
@@ -520,6 +552,8 @@
return return
proc/update_health(var/percent = 1) proc/update_health(var/percent = 1)
if(!owner || owner.stat == 2)
return
damage = max(damage - damage/percent,0) //Remove that amount of the damage damage = max(damage - damage/percent,0) //Remove that amount of the damage
if(wound_type > 1) if(wound_type > 1)
parent.burn_dam = max(parent.burn_dam - (initial_dmg - damage),0) 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"> <form name="spawner" action="byond://?src=/* ref src */" method="get">
<input type="hidden" name="src" value="/* ref src */"> <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"> Offset: <input type="text" name="offset" value="x,y,z" style="width:250px">
A <input type="radio" name="offset_type" value="absolute"> A <input type="radio" name="offset_type" value="absolute">
@@ -52,6 +52,7 @@
var object_list = document.spawner.object_list; var object_list = document.spawner.object_list;
var object_paths = null /* object types */; var object_paths = null /* object types */;
var objects = object_paths == null ? new Array() : object_paths.split(";"); var objects = object_paths == null ? new Array() : object_paths.split(";");
var iterator = 0
document.spawner.filter.focus(); document.spawner.filter.focus();
populateList(objects); populateList(objects);
@@ -107,6 +108,21 @@
object_list.options[0].selected = 'true'; object_list.options[0].selected = 'true';
} }
} }
function submitUpdate()
{
iterator += 1;
setTimeout(testUpdate(), 750);
}
function testUpdate()
{
iterator -= 1;
if (iterator == 0)
{
updateSearch();
}
}
</script> </script>
</body> </body>