From c5d42f3a4b00ad308ba4a49b277560cee7837fe5 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 27 Mar 2015 17:51:10 +1030 Subject: [PATCH] More work on severing, improvements to yank-out-object. --- code/datums/datacore.dm | 1 - code/game/objects/items/devices/scanners.dm | 2 + .../objects/items/weapons/storage/bible.dm | 70 ------------------- .../mob/living/carbon/human/human_damage.dm | 8 +-- .../mob/living/carbon/human/update_icons.dm | 9 +-- code/modules/mob/mob.dm | 2 + code/modules/organs/organ_external.dm | 17 ++++- code/modules/organs/organ_stump.dm | 20 +----- code/modules/organs/pain.dm | 1 - 9 files changed, 27 insertions(+), 103 deletions(-) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 8cde01cdf3..8db17e447e 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -156,7 +156,6 @@ proc/get_id_photo(var/mob/living/carbon/human/H) preview_icon.Blend(temp, ICON_OVERLAY) for(var/obj/item/organ/external/E in H.organs) - if(E.status & ORGAN_CUT_AWAY || E.status & ORGAN_DESTROYED) continue temp = new /icon(icobase, "[E.name]") if(E.status & ORGAN_ROBOT) temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 4b95f1bdf8..1a646d3fe1 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -181,6 +181,8 @@ REAGENT SCANNER var/mob/living/carbon/human/H = M for(var/name in H.organs_by_name) var/obj/item/organ/external/e = H.organs_by_name[name] + if(!e) + continue var/limb = e.name if(e.status & ORGAN_BROKEN) if(((e.name == "l_arm") || (e.name == "r_arm") || (e.name == "l_leg") || (e.name == "r_leg")) && (!(e.status & ORGAN_SPLINTED))) diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index ee23889052..626ed7aba2 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -20,79 +20,9 @@ new /obj/item/weapon/spacecash(src) new /obj/item/weapon/spacecash(src) new /obj/item/weapon/spacecash(src) -//BS12 EDIT -/* // All cult functionality moved to Null Rod -/obj/item/weapon/storage/bible/proc/bless(mob/living/carbon/M as mob) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/heal_amt = 10 - for(var/obj/item/organ/external/affecting in H.organs) - if(affecting.heal_damage(heal_amt, heal_amt)) - H.UpdateDamageIcon() - return -/obj/item/weapon/storage/bible/attack(mob/living/M as mob, mob/living/user as mob) - - var/chaplain = 0 - if(user.mind && (user.mind.assigned_role == "Chaplain")) - chaplain = 1 - - - M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey])") - - log_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") - - if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") - user << "\red You don't have the dexterity to do this!" - return - if(!chaplain) - user << "\red The book sizzles in your hands." - user.take_organ_damage(0,10) - return - - if ((CLUMSY in user.mutations) && prob(50)) - user << "\red The [src] slips out of your hand and hits your head." - user.take_organ_damage(10) - user.Paralyse(20) - return - -// if(..() == BLOCKED) -// return - - if (M.stat !=2) - if(M.mind && (M.mind.assigned_role == "Chaplain")) - user << "\red You can't heal yourself!" - return - /*if((M.mind in ticker.mode.cult) && (prob(20))) - M << "\red The power of [src.deity_name] clears your mind of heresy!" - user << "\red You see how [M]'s eyes become clear, the cult no longer holds control over him!" - ticker.mode.remove_cultist(M.mind)*/ - if ((istype(M, /mob/living/carbon/human) && prob(60))) - bless(M) - for(var/mob/O in viewers(M, null)) - O.show_message(text("\red [] heals [] with the power of [src.deity_name]!", user, M), 1) - M << "\red May the power of [src.deity_name] compel you to be healed!" - playsound(src.loc, "punch", 25, 1, -1) - else - if(ishuman(M) && !istype(M:head, /obj/item/clothing/head/helmet)) - M.adjustBrainLoss(10) - M << "\red You feel dumber." - for(var/mob/O in viewers(M, null)) - O.show_message(text("\red [] beats [] over the head with []!", user, M, src), 1) - playsound(src.loc, "punch", 25, 1, -1) - else if(M.stat == 2) - for(var/mob/O in viewers(M, null)) - O.show_message(text("\red [] smacks []'s lifeless corpse with [].", user, M, src), 1) - playsound(src.loc, "punch", 25, 1, -1) - return -*/ /obj/item/weapon/storage/bible/afterattack(atom/A, mob/user as mob, proximity) if(!proximity) return -/* if (istype(A, /turf/simulated/floor)) - user << "\blue You hit the floor with the bible." - if(user.mind && (user.mind.assigned_role == "Chaplain")) - call(/obj/effect/rune/proc/revealrunes)(src)*/ if(user.mind && (user.mind.assigned_role == "Chaplain")) if(A.reagents && A.reagents.has_reagent("water")) //blesses all the water in the holder user << "\blue You bless [A]." diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 4eaf4e4560..e96e526077 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -5,11 +5,11 @@ health = maxHealth stat = CONSCIOUS return - var/total_burn = 0 - var/total_brute = 0 + var/total_burn = 0 + var/total_brute = 0 for(var/obj/item/organ/external/O in organs) //hardcoded to streamline things a bit - total_brute += O.brute_dam - total_burn += O.burn_dam + total_brute += O.brute_dam + total_burn += O.burn_dam var/oxy_l = ((species.flags & NO_BREATHE) ? 0 : getOxyLoss()) var/tox_l = ((species.flags & NO_POISON) ? 0 : getToxLoss()) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 392e3553a2..1fefc65085 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -254,16 +254,9 @@ var/global/list/damage_icon_parts = list() var/icon/base_icon if(human_icon_cache[icon_key]) - //Icon is cached, use existing icon. base_icon = human_icon_cache[icon_key] - - //log_debug("Retrieved cached mob icon ([icon_key] \icon[human_icon_cache[icon_key]]) for [src].") - else - //BEGIN CACHED ICON GENERATION. - //Robotic limbs are handled in get_icon() so all we worry about are missing or dead limbs. - //No icon stored, so we need to start with a basic one. var/obj/item/organ/external/chest = get_organ("chest") base_icon = chest.get_icon() @@ -296,7 +289,7 @@ var/global/list/damage_icon_parts = list() base_icon.MapColors(rgb(tone[1],0,0),rgb(0,tone[2],0),rgb(0,0,tone[3])) //Handle husk overlay. - if(husk && ("overlay_husk" in icon_states(race_icon))) + if(husk && ("overlay_husk" in icon_states(species.icobase))) var/icon/mask = new(base_icon) var/icon/husk_over = new(species.icobase,"overlay_husk") mask.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 399b1ce5ca..1129991cfe 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1140,6 +1140,8 @@ mob/proc/yank_out_object() human_user.bloody_hands(H) selection.loc = get_turf(src) + if(!(U.l_hand && U.r_hand)) + U.put_in_hands(selection) for(var/obj/item/weapon/O in pinned) if(O == selection) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 5b86cfffdc..7884a98a10 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -627,14 +627,27 @@ Note that amputating the affected organ does in fact remove the infection from t src.removed(null, ignore_children) + wounds.Cut() if(parent) + var/datum/wound/W + if(max_damage < 50) + W = new/datum/wound/lost_limb/small(max_damage) + else + W = new/datum/wound/lost_limb(max_damage) parent.children -= src - if(!clean) - new /obj/item/organ/external/stump(owner, 0, src) + if(clean) + parent.wounds |= W + parent.update_damages() + else + var/obj/item/organ/external/stump/stump = new (owner, 0, src) + stump.wounds |= W + owner.organs |= stump + stump.update_damages() parent = null update_health() owner.update_body() + dir = SOUTH switch(disintegrate) if(0) diff --git a/code/modules/organs/organ_stump.dm b/code/modules/organs/organ_stump.dm index 1a673b84e5..caf8718269 100644 --- a/code/modules/organs/organ_stump.dm +++ b/code/modules/organs/organ_stump.dm @@ -16,20 +16,6 @@ if(istype(limb)) max_damage = limb.max_damage -/obj/item/organ/external/stump/process() - damage = max_damage - -/obj/item/organ/external/stump/handle_rejection() - return - -/obj/item/organ/external/stump/rejuvenate() - return - -/obj/item/organ/external/stump/is_damaged() - return 1 - -/obj/item/organ/external/stump/is_bruised() - return 1 - -/obj/item/organ/external/stump/is_broken() - return 1 +/obj/item/organ/external/stump/removed() + ..() + del(src) diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm index e500125a2c..31cb0c4e43 100644 --- a/code/modules/organs/pain.dm +++ b/code/modules/organs/pain.dm @@ -89,7 +89,6 @@ mob/living/carbon/human/proc/handle_pain() var/maxdam = 0 var/obj/item/organ/external/damaged_organ = null for(var/obj/item/organ/external/E in organs) - // amputated limbs don't cause pain if(E.status & ORGAN_DEAD) continue var/dam = E.get_damage() // make the choice of the organ depend on damage,