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 @@
- Type
+ Type
Offset: A @@ -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(); + } + }