diff --git a/baystation12.dme b/baystation12.dme
index 3edb656645..5af3094221 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -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"
diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm
index eac51250c1..9a023031fb 100644
--- a/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm
@@ -243,7 +243,29 @@
if(temp.destroyed)
wound_flavor_text["[temp.display_name]"] = "[t_He] is missing [t_his] [temp.display_name].\n"
continue
- if(temp.wounds)
+ if(temp.robot)
+ if(!(temp.brute_dam + temp.burn_dam))
+ wound_flavor_text["[temp.display_name]"] = "[t_He] has a robot arm!\n"
+ else
+ wound_flavor_text["[temp.display_name]"] = "[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]"] += "!\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].
"
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 += "[src] has blood running down [t_his] face!\n"
- if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit)
+ if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit) //No need. A missing chest gibs you.
msg += wound_flavor_text["chest"]
else if(is_bleeding["chest"])
- msg += "[src] has blood soaking through from under [t_his] clothing!\n"
- if(wound_flavor_text["left arm"] && !w_uniform && !skipjumpsuit)
+ 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 += "[src] has blood soaking through from under [t_his] clothing!\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 += "[src] has blood running from under [t_his] gloves!\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 += "[src] has blood soaking through from under [t_his] clothing!\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 += "[src] has blood running from under [t_his] gloves!\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 += "[src] has blood soaking through from under [t_his] clothing!\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 += "[src] has blood soaking through from under [t_his] clothing!\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 += "[src] has blood running from [t_his] shoes!\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 += "[src] has blood soaking through from under [t_his] clothing!\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 += "[src] has blood running from [t_his] shoes!\n"
+ display_shoes = 1
+ if(display_chest)
+ msg += "[src] has blood soaking through from under [t_his] clothing!\n"
+ if(display_shoes)
+ msg += "[src] has blood running from [t_his] shoes!\n"
+ if(display_gloves)
+ msg += "[src] has blood running from under [t_his] gloves!\n"
// if(w.bleeding)
diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm
index 2f6f5696cf..d84a34e89f 100644
--- a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm
@@ -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)
diff --git a/code/game/jobs/job/captian.dm b/code/game/jobs/job/captian.dm
index 6e9bd017ab..60e68e43d1 100644
--- a/code/game/jobs/job/captian.dm
+++ b/code/game/jobs/job/captian.dm
@@ -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
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index 57587b4637..769ee4ec8d 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -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
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index a0460b9d67..c599212889 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -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
diff --git a/code/game/magic/cultist/runes.dm b/code/game/magic/cultist/runes.dm
index bb4a1bb858..bdcc7480ab 100644
--- a/code/game/magic/cultist/runes.dm
+++ b/code/game/magic/cultist/runes.dm
@@ -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)
diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm
index 51235f58b5..045c7d43fb 100644
--- a/code/game/objects/items/weapons/hydroponics.dm
+++ b/code/game/objects/items/weapons/hydroponics.dm
@@ -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)
diff --git a/code/game/objects/items/weapons/medical.dm b/code/game/objects/items/weapons/medical.dm
index 2d66e9bc24..8755deddf0 100644
--- a/code/game/objects/items/weapons/medical.dm
+++ b/code/game/objects/items/weapons/medical.dm
@@ -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)
diff --git a/code/game/objects/items/weapons/surgery_limbattachment.dm b/code/game/objects/items/weapons/surgery_limbattachment.dm
index 7e85d32155..b84ae2cf0b 100644
--- a/code/game/objects/items/weapons/surgery_limbattachment.dm
+++ b/code/game/objects/items/weapons/surgery_limbattachment.dm
@@ -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()
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index 352edbf882..becabfb18d 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -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 << "You have to cut the limb open first!"
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)))
diff --git a/code/game/objects/items/weapons/tiles_wires.dm b/code/game/objects/items/weapons/tiles_wires.dm
index 59e96b89ef..3395f37d0c 100644
--- a/code/game/objects/items/weapons/tiles_wires.dm
+++ b/code/game/objects/items/weapons/tiles_wires.dm
@@ -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 ..()
+
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 6bfb785c57..d1e095b8f0 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -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"
diff --git a/code/game/objects/stacks/glass.dm b/code/game/objects/stacks/glass.dm
index 39881da11e..90733aec8a 100644
--- a/code/game/objects/stacks/glass.dm
+++ b/code/game/objects/stacks/glass.dm
@@ -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()
diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm
index a118b09f2e..c84aa9aa2f 100644
--- a/code/game/objects/weapons.dm
+++ b/code/game/objects/weapons.dm
@@ -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()
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index ea7b4b09b8..b108669b3b 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -245,7 +245,26 @@
is_destroyed["[temp.display_name]"] = 1
wound_flavor_text["[temp.display_name]"] = "[t_He] is missing [t_his] [temp.display_name].\n"
continue
- if(temp.wounds)
+ if(temp.robot)
+ if(!(temp.brute_dam + temp.burn_dam))
+ wound_flavor_text["[temp.display_name]"] = "[t_He] has a robot [temp.display_name]!\n"
+ continue
+ else
+ wound_flavor_text["[temp.display_name]"] = "[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]"] += "!\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 += "\The [src] has[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
+ flavor_text += "[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 += "\The [src] has[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
+ flavor_text += "[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 += "\The [src] has several [tallied_rename[tallied]]s"
+ flavor_text += "[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 += "\The [src] has a bunch of [tallied_rename[tallied]]s"
+ flavor_text += "[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 += "[src] has blood soaking through from under [t_his] clothing!\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 += "[src] has blood soaking through from under [t_his] clothing!\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 += "[src] has blood running from under [t_his] gloves!\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 += "[src] has blood soaking through from under [t_his] clothing!\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 += "[src] has blood running from under [t_his] gloves!\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 += "[src] has blood soaking through from under [t_his] clothing!\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 += "[src] has blood soaking through from under [t_his] clothing!\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 += "[src] has blood running from [t_his] shoes!\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 += "[src] has blood soaking through from under [t_his] clothing!\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 += "[src] has blood running from [t_his] shoes!\n"
+ display_shoes = 1
+ if(display_chest)
+ msg += "[src] has blood soaking through from under [t_his] clothing!\n"
+ if(display_shoes)
+ msg += "[src] has blood running from [t_his] shoes!\n"
+ if(display_gloves)
+ msg += "[src] has blood running from under [t_his] gloves!\n"
// if(w.bleeding)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index d4c962dfd9..061d15d122 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -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)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index d5806a3642..26b1d58601 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -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)
..()
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index a4588ef429..9e4b9314eb 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -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())
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index 85b02146d8..09d9b7cd6b 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -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)
diff --git a/code/modules/mob/living/carbon/shock.dm b/code/modules/mob/living/carbon/shock.dm
index a4427703dc..d7bca33368 100644
--- a/code/modules/mob/living/carbon/shock.dm
+++ b/code/modules/mob/living/carbon/shock.dm
@@ -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)
diff --git a/code/modules/mob/organ/organ.dm b/code/modules/mob/organ/organ.dm
index 9ff680d7ca..164ded1d36 100644
--- a/code/modules/mob/organ/organ.dm
+++ b/code/modules/mob/organ/organ.dm
@@ -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 Something feels like it shattered in your [display_name]!","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 Your [display_name] goes flying off!","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 Your [display_name] goes flying off!",\
+ "You hear a terrible sound of ripping tendons and flesh.")
+ else
+ owner.visible_message("\red [owner.name]'s [display_name] explodes violently!",\
+ "\red Your [display_name] explodes!",\
+ "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)
diff --git a/html/create_object.html b/html/create_object.html
index aa36cad816..e652260f67 100644
--- a/html/create_object.html
+++ b/html/create_object.html
@@ -27,7 +27,7 @@