mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-25 06:00:16 +01:00
Merge pull request #1561 from RobRichards1997/11/10/2013-Limbs-are-Objects
Changes Limbs into Objects [Merge/Give Feedback]
This commit is contained in:
@@ -487,7 +487,7 @@
|
||||
name = "Disarming Syndrome"
|
||||
stage = 4
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
var/datum/limb/org = mob.organs["r_arm"]
|
||||
var/obj/item/organ/limb/org = mob.organs["r_arm"]
|
||||
org.take_damage(3,0,0,0)
|
||||
mob << "\red You feel a sting in your right arm."*/
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
return
|
||||
var/mob/living/carbon/ML = A
|
||||
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
|
||||
var/datum/limb/affecting = null
|
||||
var/obj/item/organ/limb/affecting = null
|
||||
if(ishuman(ML)) // why the hell is this not more general
|
||||
affecting = ML:get_organ(ran_zone(dam_zone))
|
||||
var/armor = ML.run_armor_check(affecting, "melee")
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
user.Paralyse(5)
|
||||
user << "\red An unexplicable force powerfully repels the sword from [target]!"
|
||||
var/organ = ((user.hand ? "l_":"r_") + "arm")
|
||||
var/datum/limb/affecting = user.get_organ(organ)
|
||||
var/obj/item/organ/limb/affecting = user.get_organ(organ)
|
||||
if(affecting.take_damage(rand(force/2, force))) //random amount of damage between half of the blade's force and the full force of the blade.
|
||||
user.update_damage_overlays(0)
|
||||
return
|
||||
|
||||
@@ -267,7 +267,7 @@ var/list/sacrificed = list()
|
||||
usr << "\red You require a restless spirit which clings to this world. Beckon their prescence with the sacred chants of Nar-Sie."
|
||||
return fizzle()
|
||||
|
||||
for(var/datum/limb/affecting in corpse_to_raise.organs)
|
||||
for(var/obj/item/organ/limb/affecting in corpse_to_raise.organs)
|
||||
affecting.heal_damage(1000, 1000)
|
||||
corpse_to_raise.setToxLoss(0)
|
||||
corpse_to_raise.setOxyLoss(0)
|
||||
|
||||
@@ -610,7 +610,7 @@ About the new airlock wires panel:
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
|
||||
if(!istype(H.head, /obj/item/clothing/head/helmet))
|
||||
visible_message("\red [user] headbutts the airlock.")
|
||||
var/datum/limb/affecting = H.get_organ("head")
|
||||
var/obj/item/organ/limb/affecting = H.get_organ("head")
|
||||
H.Stun(8)
|
||||
H.Weaken(5)
|
||||
if(affecting.take_damage(10, 0))
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
var/mob/living/carbon/human/H = target
|
||||
// if (M.health <= 0) return
|
||||
|
||||
var/datum/limb/temp = H.get_organ(pick("chest", "chest", "chest", "head"))
|
||||
var/obj/item/organ/limb/temp = H.get_organ(pick("chest", "chest", "chest", "head"))
|
||||
if(temp)
|
||||
var/update = 0
|
||||
switch(damtype)
|
||||
|
||||
@@ -501,9 +501,11 @@
|
||||
"\red You stab yourself in the eyes with [src]!" \
|
||||
)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/limb/affecting = M:get_organ("head")
|
||||
var/mob/living/carbon/human/U = M
|
||||
var/obj/item/organ/limb/affecting = U.get_organ("head")
|
||||
if(affecting.take_damage(7))
|
||||
M:update_damage_overlays(0)
|
||||
U.update_damage_overlays(0)
|
||||
|
||||
else
|
||||
M.take_organ_damage(7)
|
||||
M.eye_blurry += rand(3,4)
|
||||
|
||||
@@ -125,7 +125,7 @@ MASS SPECTROMETER
|
||||
var/list/damaged = H.get_damaged_organs(1,1)
|
||||
user.show_message("<span class='notice'>Localized Damage, <font color='#FF8000'>Burn</font>/<font color='red'>Brute</font>:</span>",1)
|
||||
if(length(damaged)>0)
|
||||
for(var/datum/limb/org in damaged)
|
||||
for(var/obj/item/organ/limb/org in damaged)
|
||||
user.show_message(text("<span class='notice'>\t []: []-[]", capitalize(org.getDisplayName()), (org.burn_dam > 0) ? "<font color='#FF8000'>[org.burn_dam]</font>" : 0, (org.brute_dam > 0) ? "<font color='red'>[org.brute_dam]</font></span>" : 0), 1)
|
||||
else
|
||||
user.show_message("<span class='notice'>\t Limbs are OK.</span>",1)
|
||||
|
||||
@@ -50,13 +50,13 @@
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/limb/affecting = H.get_organ("chest")
|
||||
var/obj/item/organ/limb/affecting = H.get_organ("chest")
|
||||
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/user2 = user
|
||||
affecting = H.get_organ(check_zone(user2.zone_sel.selecting))
|
||||
else
|
||||
if(!istype(affecting, /datum/limb) || affecting:burn_dam <= 0)
|
||||
if(!istype(affecting, /obj/item/organ/limb) || affecting:burn_dam <= 0)
|
||||
affecting = H.get_organ("head")
|
||||
|
||||
if (affecting.heal_damage(src.heal_brute, src.heal_burn))
|
||||
|
||||
@@ -280,7 +280,7 @@
|
||||
if(!H.gloves)
|
||||
H << "<span class='warning'>[src] cuts into your hand!</span>"
|
||||
var/organ = (H.hand ? "l_" : "r_") + "arm"
|
||||
var/datum/limb/affecting = H.get_organ(organ)
|
||||
var/obj/item/organ/limb/affecting = H.get_organ(organ)
|
||||
if(affecting.take_damage(force / 2))
|
||||
H.update_damage_overlays(0)
|
||||
else if(isliving(user))
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/heal_amt = 10
|
||||
for(var/datum/limb/affecting in H.organs)
|
||||
for(var/obj/item/organ/limb/affecting in H.organs)
|
||||
if(affecting.heal_damage(heal_amt, heal_amt))
|
||||
H.update_damage_overlays(0)
|
||||
return
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
proc/triggered(mob/target as mob, var/type = "feet")
|
||||
if(!armed)
|
||||
return
|
||||
var/datum/limb/affecting = null
|
||||
var/obj/item/organ/limb/affecting = null
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
switch(type)
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
user << "\red The nettle burns your bare hand!"
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/organ = ((user.hand ? "l_":"r_") + "arm")
|
||||
var/datum/limb/affecting = user.get_organ(organ)
|
||||
var/obj/item/organ/limb/affecting = user.get_organ(organ)
|
||||
if(affecting.take_damage(0,force))
|
||||
user.update_damage_overlays(0)
|
||||
else
|
||||
@@ -57,7 +57,7 @@
|
||||
if(!user.gloves)
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/organ = ((user.hand ? "l_":"r_") + "arm")
|
||||
var/datum/limb/affecting = user.get_organ(organ)
|
||||
var/obj/item/organ/limb/affecting = user.get_organ(organ)
|
||||
if(affecting.take_damage(0,force))
|
||||
user.update_damage_overlays(0)
|
||||
else
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
if(istype(src, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = src
|
||||
var/organ = H.get_organ("chest")
|
||||
if (istype(organ, /datum/limb))
|
||||
var/datum/limb/temp = organ
|
||||
if (istype(organ, /obj/item/organ/limb))
|
||||
var/obj/item/organ/limb/temp = organ
|
||||
if(temp.take_damage(d, 0))
|
||||
H.update_damage_overlays(0)
|
||||
H.updatehealth()
|
||||
@@ -146,7 +146,7 @@
|
||||
"<span class='notice'>[src] examines \himself.", \
|
||||
"<span class='notice'>You check yourself for injuries.</span>")
|
||||
|
||||
for(var/datum/limb/org in H.organs)
|
||||
for(var/obj/item/organ/limb/org in H.organs)
|
||||
var/status = ""
|
||||
var/brutedamage = org.brute_dam
|
||||
var/burndamage = org.burn_dam
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
verbs += /mob/living/proc/mob_sleep
|
||||
verbs += /mob/living/proc/lay_down
|
||||
//initialise organs
|
||||
organs = newlist(/datum/limb/chest, /datum/limb/head, /datum/limb/l_arm,
|
||||
/datum/limb/r_arm, /datum/limb/r_leg, /datum/limb/l_leg)
|
||||
for(var/datum/limb/O in organs)
|
||||
organs = newlist(/obj/item/organ/limb/chest, /obj/item/organ/limb/head, /obj/item/organ/limb/l_arm,
|
||||
/obj/item/organ/limb/r_arm, /obj/item/organ/limb/r_leg, /obj/item/organ/limb/l_leg)
|
||||
for(var/obj/item/organ/limb/O in organs)
|
||||
O.owner = src
|
||||
internal_organs += new /obj/item/organ/appendix
|
||||
internal_organs += new /obj/item/organ/heart
|
||||
@@ -186,7 +186,7 @@
|
||||
Paralyse(10)
|
||||
|
||||
var/update = 0
|
||||
for(var/datum/limb/temp in organs)
|
||||
for(var/obj/item/organ/limb/temp in organs)
|
||||
switch(temp.name)
|
||||
if("head")
|
||||
update |= temp.take_damage(b_loss * 0.2, f_loss * 0.2)
|
||||
@@ -207,7 +207,7 @@
|
||||
if(stat == 2) return
|
||||
show_message("\red The blob attacks you!")
|
||||
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
|
||||
var/datum/limb/affecting = get_organ(ran_zone(dam_zone))
|
||||
var/obj/item/organ/limb/affecting = get_organ(ran_zone(dam_zone))
|
||||
apply_damage(rand(20,30), BRUTE, affecting, run_armor_check(affecting, "melee"))
|
||||
return
|
||||
|
||||
@@ -216,7 +216,7 @@
|
||||
if ((M.client && !( M.blinded )))
|
||||
M.show_message("\red [src] has been hit by [O]", 1)
|
||||
if (health > 0)
|
||||
var/datum/limb/affecting = get_organ(pick("chest", "chest", "chest", "head"))
|
||||
var/obj/item/organ/limb/affecting = get_organ(pick("chest", "chest", "chest", "head"))
|
||||
if(!affecting) return
|
||||
if (istype(O, /obj/effect/immovablerod))
|
||||
if(affecting.take_damage(101, 0))
|
||||
@@ -240,7 +240,7 @@
|
||||
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>was attacked by [M.name] ([M.ckey])</font>")
|
||||
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
|
||||
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
|
||||
var/datum/limb/affecting = get_organ(ran_zone(dam_zone))
|
||||
var/obj/item/organ/limb/affecting = get_organ(ran_zone(dam_zone))
|
||||
var/armor = run_armor_check(affecting, "melee")
|
||||
apply_damage(damage, BRUTE, affecting, armor)
|
||||
if(armor >= 2) return
|
||||
@@ -265,7 +265,7 @@
|
||||
|
||||
var/dam_zone = pick("head", "chest", "l_arm", "r_arm", "l_leg", "r_leg", "groin")
|
||||
|
||||
var/datum/limb/affecting = get_organ(ran_zone(dam_zone))
|
||||
var/obj/item/organ/limb/affecting = get_organ(ran_zone(dam_zone))
|
||||
var/armor_block = run_armor_check(affecting, "melee")
|
||||
apply_damage(damage, BRUTE, affecting, armor_block)
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
playsound(loc, 'sound/weapons/slashmiss.ogg', 50, 1, -1)
|
||||
visible_message("\red <B>[M] has lunged at [src]!</B>")
|
||||
return 0
|
||||
var/datum/limb/affecting = get_organ(ran_zone(M.zone_sel.selecting))
|
||||
var/obj/item/organ/limb/affecting = get_organ(ran_zone(M.zone_sel.selecting))
|
||||
var/armor_block = run_armor_check(affecting, "melee")
|
||||
|
||||
playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1)
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
return 0
|
||||
|
||||
|
||||
var/datum/limb/affecting = get_organ(ran_zone(M.zone_sel.selecting))
|
||||
var/obj/item/organ/limb/affecting = get_organ(ran_zone(M.zone_sel.selecting))
|
||||
var/armor_block = run_armor_check(affecting, "melee")
|
||||
|
||||
if(HULK in M.mutations)
|
||||
@@ -111,7 +111,7 @@
|
||||
|
||||
if(w_uniform)
|
||||
w_uniform.add_fingerprint(M)
|
||||
var/datum/limb/affecting = get_organ(ran_zone(M.zone_sel.selecting))
|
||||
var/obj/item/organ/limb/affecting = get_organ(ran_zone(M.zone_sel.selecting))
|
||||
var/randn = rand(1, 100)
|
||||
if(randn <= 25)
|
||||
apply_effect(2, WEAKEN, run_armor_check(affecting, "melee"))
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
var/damage = rand(1, 3)
|
||||
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
|
||||
var/datum/limb/affecting = get_organ(ran_zone(dam_zone))
|
||||
var/obj/item/organ/limb/affecting = get_organ(ran_zone(dam_zone))
|
||||
apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, "melee"))
|
||||
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
return
|
||||
var/total_burn = 0
|
||||
var/total_brute = 0
|
||||
for(var/datum/limb/O in organs) //hardcoded to streamline things a bit
|
||||
for(var/obj/item/organ/limb/O in organs) //hardcoded to streamline things a bit
|
||||
total_brute += O.brute_dam
|
||||
total_burn += O.burn_dam
|
||||
health = maxHealth - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute
|
||||
@@ -19,13 +19,13 @@
|
||||
//These procs fetch a cumulative total damage from all organs
|
||||
/mob/living/carbon/human/getBruteLoss()
|
||||
var/amount = 0
|
||||
for(var/datum/limb/O in organs)
|
||||
for(var/obj/item/organ/limb/O in organs)
|
||||
amount += O.brute_dam
|
||||
return amount
|
||||
|
||||
/mob/living/carbon/human/getFireLoss()
|
||||
var/amount = 0
|
||||
for(var/datum/limb/O in organs)
|
||||
for(var/obj/item/organ/limb/O in organs)
|
||||
amount += O.burn_dam
|
||||
return amount
|
||||
|
||||
@@ -58,16 +58,16 @@
|
||||
|
||||
//Returns a list of damaged organs
|
||||
/mob/living/carbon/human/proc/get_damaged_organs(var/brute, var/burn)
|
||||
var/list/datum/limb/parts = list()
|
||||
for(var/datum/limb/O in organs)
|
||||
var/list/obj/item/organ/limb/parts = list()
|
||||
for(var/obj/item/organ/limb/O in organs)
|
||||
if((brute && O.brute_dam) || (burn && O.burn_dam))
|
||||
parts += O
|
||||
return parts
|
||||
|
||||
//Returns a list of damageable organs
|
||||
/mob/living/carbon/human/proc/get_damageable_organs()
|
||||
var/list/datum/limb/parts = list()
|
||||
for(var/datum/limb/O in organs)
|
||||
var/list/obj/item/organ/limb/parts = list()
|
||||
for(var/obj/item/organ/limb/O in organs)
|
||||
if(O.brute_dam + O.burn_dam < O.max_damage)
|
||||
parts += O
|
||||
return parts
|
||||
@@ -76,9 +76,9 @@
|
||||
//It automatically updates damage overlays if necesary
|
||||
//It automatically updates health status
|
||||
/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn)
|
||||
var/list/datum/limb/parts = get_damaged_organs(brute,burn)
|
||||
var/list/obj/item/organ/limb/parts = get_damaged_organs(brute,burn)
|
||||
if(!parts.len) return
|
||||
var/datum/limb/picked = pick(parts)
|
||||
var/obj/item/organ/limb/picked = pick(parts)
|
||||
if(picked.heal_damage(brute,burn))
|
||||
update_damage_overlays(0)
|
||||
updatehealth()
|
||||
@@ -87,9 +87,9 @@
|
||||
//It automatically updates damage overlays if necesary
|
||||
//It automatically updates health status
|
||||
/mob/living/carbon/human/take_organ_damage(var/brute, var/burn)
|
||||
var/list/datum/limb/parts = get_damageable_organs()
|
||||
var/list/obj/item/organ/limb/parts = get_damageable_organs()
|
||||
if(!parts.len) return
|
||||
var/datum/limb/picked = pick(parts)
|
||||
var/obj/item/organ/limb/picked = pick(parts)
|
||||
if(picked.take_damage(brute,burn))
|
||||
update_damage_overlays(0)
|
||||
updatehealth()
|
||||
@@ -97,11 +97,11 @@
|
||||
|
||||
//Heal MANY external organs, in random order
|
||||
/mob/living/carbon/human/heal_overall_damage(var/brute, var/burn)
|
||||
var/list/datum/limb/parts = get_damaged_organs(brute,burn)
|
||||
var/list/obj/item/organ/limb/parts = get_damaged_organs(brute,burn)
|
||||
|
||||
var/update = 0
|
||||
while(parts.len && (brute>0 || burn>0) )
|
||||
var/datum/limb/picked = pick(parts)
|
||||
var/obj/item/organ/limb/picked = pick(parts)
|
||||
|
||||
var/brute_was = picked.brute_dam
|
||||
var/burn_was = picked.burn_dam
|
||||
@@ -118,10 +118,10 @@
|
||||
// damage MANY external organs, in random order
|
||||
/mob/living/carbon/human/take_overall_damage(var/brute, var/burn)
|
||||
if(status_flags & GODMODE) return //godmode
|
||||
var/list/datum/limb/parts = get_damageable_organs()
|
||||
var/list/obj/item/organ/limb/parts = get_damageable_organs()
|
||||
var/update = 0
|
||||
while(parts.len && (brute>0 || burn>0) )
|
||||
var/datum/limb/picked = pick(parts)
|
||||
var/obj/item/organ/limb/picked = pick(parts)
|
||||
|
||||
var/brute_was = picked.brute_dam
|
||||
var/burn_was = picked.burn_dam
|
||||
@@ -140,8 +140,8 @@
|
||||
////////////////////////////////////////////
|
||||
|
||||
/mob/living/carbon/human/proc/HealDamage(zone, brute, burn)
|
||||
var/datum/limb/E = get_organ(zone)
|
||||
if(istype(E, /datum/limb))
|
||||
var/obj/item/organ/limb/E = get_organ(zone)
|
||||
if(istype(E, /obj/item/organ/limb))
|
||||
if (E.heal_damage(brute, burn))
|
||||
update_damage_overlays(0)
|
||||
else
|
||||
@@ -151,7 +151,7 @@
|
||||
|
||||
/mob/living/carbon/human/proc/get_organ(var/zone)
|
||||
if(!zone) zone = "chest"
|
||||
for(var/datum/limb/O in organs)
|
||||
for(var/obj/item/organ/limb/O in organs)
|
||||
if(O.name == zone)
|
||||
return O
|
||||
return null
|
||||
@@ -164,7 +164,7 @@
|
||||
|
||||
if(blocked >= 2) return 0
|
||||
|
||||
var/datum/limb/organ = null
|
||||
var/obj/item/organ/limb/organ = null
|
||||
if(isorgan(def_zone))
|
||||
organ = def_zone
|
||||
else
|
||||
|
||||
@@ -15,18 +15,18 @@ emp_act
|
||||
if(def_zone)
|
||||
if(isorgan(def_zone))
|
||||
return checkarmor(def_zone, type)
|
||||
var/datum/limb/affecting = get_organ(ran_zone(def_zone))
|
||||
var/obj/item/organ/limb/affecting = get_organ(ran_zone(def_zone))
|
||||
return checkarmor(affecting, type)
|
||||
//If a specific bodypart is targetted, check how that bodypart is protected and return the value.
|
||||
|
||||
//If you don't specify a bodypart, it checks ALL your bodyparts for protection, and averages out the values
|
||||
for(var/datum/limb/organ in organs)
|
||||
for(var/obj/item/organ/limb/organ in organs)
|
||||
armorval += checkarmor(organ, type)
|
||||
organnum++
|
||||
return (armorval/max(organnum, 1))
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/checkarmor(var/datum/limb/def_zone, var/type)
|
||||
/mob/living/carbon/human/proc/checkarmor(var/obj/item/organ/limb/def_zone, var/type)
|
||||
if(!type) return 0
|
||||
var/protection = 0
|
||||
var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform)
|
||||
@@ -120,7 +120,7 @@ emp_act
|
||||
/mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone)
|
||||
if(!I || !user) return 0
|
||||
|
||||
var/datum/limb/affecting = get_organ(ran_zone(user.zone_sel.selecting))
|
||||
var/obj/item/organ/limb/affecting = get_organ(ran_zone(user.zone_sel.selecting))
|
||||
|
||||
var/hit_area = parse_zone(affecting.name)
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
return if_no_face
|
||||
if( head && (head.flags_inv&HIDEFACE) )
|
||||
return if_no_face //Likewise for hats
|
||||
var/datum/limb/O = get_organ("head")
|
||||
var/obj/item/organ/limb/O = get_organ("head")
|
||||
if( (status_flags&DISFIGURED) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name ) //disfigured. use id-name if possible
|
||||
return if_no_face
|
||||
return real_name
|
||||
|
||||
@@ -161,13 +161,13 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
overlays_standing[DAMAGE_LAYER] = standing
|
||||
overlays_lying[DAMAGE_LAYER] = lying
|
||||
|
||||
for(var/datum/limb/O in organs)
|
||||
for(var/obj/item/organ/limb/O in organs)
|
||||
if(O.brutestate)
|
||||
standing.overlays += "[O.icon_name]_[O.brutestate]0" //we're adding icon_states of the base image as overlays
|
||||
lying.overlays += "[O.icon_name]2_[O.brutestate]0"
|
||||
standing.overlays += "[O.icon_state]_[O.brutestate]0" //we're adding icon_states of the base image as overlays //made icon_name redundant - RR
|
||||
lying.overlays += "[O.icon_state]2_[O.brutestate]0"
|
||||
if(O.burnstate)
|
||||
standing.overlays += "[O.icon_name]_0[O.burnstate]"
|
||||
lying.overlays += "[O.icon_name]2_0[O.burnstate]"
|
||||
standing.overlays += "[O.icon_state]_0[O.burnstate]"
|
||||
lying.overlays += "[O.icon_state]2_0[O.burnstate]"
|
||||
|
||||
apply_overlay(DAMAGE_LAYER)
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
var/mob/living/carbon/human/H = src //make this damage method divide the damage to be done among all the body parts, then burn each body part for that much damage. will have better effect then just randomly picking a body part
|
||||
var/divided_damage = (burn_amount)/(H.organs.len)
|
||||
var/extradam = 0 //added to when organ is at max dam
|
||||
for(var/datum/limb/affecting in H.organs)
|
||||
for(var/obj/item/organ/limb/affecting in H.organs)
|
||||
if(!affecting) continue
|
||||
if(affecting.take_damage(0, divided_damage+extradam)) //TODO: fix the extradam stuff. Or, ebtter yet...rewrite this entire proc ~Carn
|
||||
H.update_damage_overlays(0)
|
||||
@@ -216,7 +216,7 @@
|
||||
var/t = shooter:zone_sel.selecting
|
||||
if ((t in list( "eyes", "mouth" )))
|
||||
t = "head"
|
||||
var/datum/limb/def_zone = ran_zone(t)
|
||||
var/obj/item/organ/limb/def_zone = ran_zone(t)
|
||||
return def_zone
|
||||
|
||||
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
|
||||
var/datum/limb/affecting = H.get_organ(ran_zone(dam_zone))
|
||||
var/obj/item/organ/limb/affecting = H.get_organ(ran_zone(dam_zone))
|
||||
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"))
|
||||
return H
|
||||
else if(isliving(target))
|
||||
|
||||
@@ -121,7 +121,7 @@ proc/isovermind(A)
|
||||
return 0
|
||||
|
||||
proc/isorgan(A)
|
||||
if(istype(A, /datum/limb))
|
||||
if(istype(A, /obj/item/organ/limb))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -496,7 +496,7 @@
|
||||
else
|
||||
user << "You try to remove the light [fitting], but you burn your hand on it!"
|
||||
|
||||
var/datum/limb/affecting = H.get_organ("[user.hand ? "l" : "r" ]_arm")
|
||||
var/obj/item/organ/limb/affecting = H.get_organ("[user.hand ? "l" : "r" ]_arm")
|
||||
|
||||
if(affecting.take_damage( 0, 5 )) // 5 burn damage
|
||||
H.update_damage_overlays(0)
|
||||
|
||||
@@ -161,7 +161,7 @@
|
||||
|
||||
if(isliving(target) && isliving(user))
|
||||
if(target == user)
|
||||
var/datum/limb/affecting = user.zone_sel.selecting
|
||||
var/obj/item/organ/limb/affecting = user.zone_sel.selecting
|
||||
if(affecting == "head")
|
||||
|
||||
var/obj/item/ammo_casing/AC = loaded[1]
|
||||
|
||||
@@ -1628,7 +1628,7 @@ datum
|
||||
if(!M.unacidable)
|
||||
if(istype(M, /mob/living/carbon/human) && volume >= 3)
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/limb/affecting = H.get_organ("head")
|
||||
var/obj/item/organ/limb/affecting = H.get_organ("head")
|
||||
if(affecting)
|
||||
if(affecting.take_damage(4*toxpwr, 2*toxpwr))
|
||||
H.update_damage_overlays(0)
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
force = 15 //Smashing bottles over someoen's head hurts.
|
||||
|
||||
var/datum/limb/affecting = user.zone_sel.selecting //Find what the player is aiming at
|
||||
var/obj/item/organ/limb/affecting = user.zone_sel.selecting //Find what the player is aiming at
|
||||
|
||||
var/armor_block = 0 //Get the target's armour values for normal attack damage.
|
||||
var/armor_duration = 0 //The more force the bottle has, the longer the duration.
|
||||
|
||||
@@ -28,4 +28,120 @@
|
||||
|
||||
|
||||
//Looking for brains?
|
||||
//Try code/modules/mob/living/carbon/brain/brain_item.dm
|
||||
//Try code/modules/mob/living/carbon/brain/brain_item.dm
|
||||
|
||||
/obj/item/organ/limb
|
||||
name = "limb"
|
||||
var/mob/owner = null
|
||||
var/body_part = null
|
||||
var/brutestate = 0
|
||||
var/burnstate = 0
|
||||
var/brute_dam = 0
|
||||
var/burn_dam = 0
|
||||
var/max_damage = 0
|
||||
|
||||
/obj/item/organ/limb/chest
|
||||
name = "chest"
|
||||
icon_state = "chest"
|
||||
max_damage = 200
|
||||
body_part = CHEST
|
||||
|
||||
/obj/item/organ/limb/head
|
||||
name = "head"
|
||||
icon_state = "head"
|
||||
max_damage = 200
|
||||
body_part = HEAD
|
||||
|
||||
/obj/item/organ/limb/l_arm
|
||||
name = "l_arm"
|
||||
icon_state = "l_arm"
|
||||
max_damage = 75
|
||||
body_part = ARM_LEFT
|
||||
|
||||
/obj/item/organ/limb/l_leg
|
||||
name = "l_leg"
|
||||
icon_state = "l_leg"
|
||||
max_damage = 75
|
||||
body_part = LEG_LEFT
|
||||
|
||||
/obj/item/organ/limb/r_arm
|
||||
name = "r_arm"
|
||||
icon_state = "r_arm"
|
||||
max_damage = 75
|
||||
body_part = ARM_RIGHT
|
||||
|
||||
/obj/item/organ/limb/r_leg
|
||||
name = "r_leg"
|
||||
icon_state = "r_leg"
|
||||
max_damage = 75
|
||||
body_part = LEG_RIGHT
|
||||
|
||||
|
||||
//Applies brute and burn damage to the organ. Returns 1 if the damage-icon states changed at all.
|
||||
//Damage will not exceed max_damage using this proc
|
||||
//Cannot apply negative damage
|
||||
/obj/item/organ/limb/proc/take_damage(brute, burn)
|
||||
if(owner && (owner.status_flags & GODMODE)) return 0 //godmode
|
||||
brute = max(brute,0)
|
||||
burn = max(burn,0)
|
||||
|
||||
var/can_inflict = max_damage - (brute_dam + burn_dam)
|
||||
if(!can_inflict) return 0
|
||||
|
||||
if((brute + burn) < can_inflict)
|
||||
brute_dam += brute
|
||||
burn_dam += burn
|
||||
else
|
||||
if(brute > 0)
|
||||
if(burn > 0)
|
||||
brute = round( (brute/(brute+burn)) * can_inflict, 1 )
|
||||
burn = can_inflict - brute //gets whatever damage is left over
|
||||
brute_dam += brute
|
||||
burn_dam += burn
|
||||
else
|
||||
brute_dam += can_inflict
|
||||
else
|
||||
if(burn > 0)
|
||||
burn_dam += can_inflict
|
||||
else
|
||||
return 0
|
||||
return update_organ_icon()
|
||||
|
||||
|
||||
//Heals brute and burn damage for the organ. Returns 1 if the damage-icon states changed at all.
|
||||
//Damage cannot go below zero.
|
||||
//Cannot remove negative damage (i.e. apply damage)
|
||||
/obj/item/organ/limb/proc/heal_damage(brute, burn)
|
||||
brute = max(brute, 0)
|
||||
burn = max(burn, 0)
|
||||
brute_dam = max(brute_dam - brute, 0)
|
||||
burn_dam = max(burn_dam - burn, 0)
|
||||
return update_organ_icon()
|
||||
|
||||
|
||||
//Returns total damage...kinda pointless really
|
||||
/obj/item/organ/limb/proc/get_damage()
|
||||
return brute_dam + burn_dam
|
||||
|
||||
|
||||
//Updates an organ's brute/burn states for use by update_damage_overlays()
|
||||
//Returns 1 if we need to update overlays. 0 otherwise.
|
||||
/obj/item/organ/limb/proc/update_organ_icon()
|
||||
var/tbrute = round( (brute_dam/max_damage)*3, 1 )
|
||||
var/tburn = round( (burn_dam/max_damage)*3, 1 )
|
||||
if((tbrute != brutestate) || (tburn != burnstate))
|
||||
brutestate = tbrute
|
||||
burnstate = tburn
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//Returns a display name for the organ
|
||||
/obj/item/organ/limb/proc/getDisplayName()
|
||||
switch(name)
|
||||
if("l_leg") return "left leg"
|
||||
if("r_leg") return "right leg"
|
||||
if("l_arm") return "left arm"
|
||||
if("r_arm") return "right arm"
|
||||
else return name
|
||||
|
||||
|
||||
|
||||
@@ -480,7 +480,7 @@ Doing this because FindTurfs() isn't even used
|
||||
if(stat > 1) stat=0
|
||||
disabilities = initial(disabilities)
|
||||
sdisabilities = initial(sdisabilities)
|
||||
for(var/datum/limb/e in src)
|
||||
for(var/obj/item/organ/limb/e in src)
|
||||
e.brute_dam = 0.0
|
||||
e.burn_dam = 0.0
|
||||
e.bandaged = 0.0
|
||||
|
||||
@@ -1,140 +1,140 @@
|
||||
/datum/limb
|
||||
var/name = "limb"
|
||||
var/mob/owner = null
|
||||
var/icon_name = null
|
||||
var/body_part = null
|
||||
var/brutestate = 0
|
||||
var/burnstate = 0
|
||||
var/brute_dam = 0
|
||||
var/burn_dam = 0
|
||||
var/max_damage = 0
|
||||
|
||||
/datum/limb/chest
|
||||
name = "chest"
|
||||
icon_name = "chest"
|
||||
max_damage = 200
|
||||
body_part = CHEST
|
||||
|
||||
/datum/limb/head
|
||||
name = "head"
|
||||
icon_name = "head"
|
||||
max_damage = 200
|
||||
body_part = HEAD
|
||||
|
||||
/datum/limb/l_arm
|
||||
name = "l_arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 75
|
||||
body_part = ARM_LEFT
|
||||
|
||||
/datum/limb/l_leg
|
||||
name = "l_leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 75
|
||||
body_part = LEG_LEFT
|
||||
|
||||
/datum/limb/r_arm
|
||||
name = "r_arm"
|
||||
icon_name = "r_arm"
|
||||
max_damage = 75
|
||||
body_part = ARM_RIGHT
|
||||
|
||||
/datum/limb/r_leg
|
||||
name = "r_leg"
|
||||
icon_name = "r_leg"
|
||||
max_damage = 75
|
||||
body_part = LEG_RIGHT
|
||||
|
||||
/*Leaving these here in case we want to use them later
|
||||
/datum/limb/l_foot
|
||||
name = "l foot"
|
||||
icon_name = "l_foot"
|
||||
body_part = FOOT_LEFT
|
||||
|
||||
/datum/limb/r_foot
|
||||
name = "r foot"
|
||||
icon_name = "r_foot"
|
||||
body_part = FOOT_RIGHT
|
||||
|
||||
/datum/limb/r_hand
|
||||
name = "r hand"
|
||||
icon_name = "r_hand"
|
||||
body_part = HAND_RIGHT
|
||||
|
||||
/datum/limb/l_hand
|
||||
name = "l hand"
|
||||
icon_name = "l_hand"
|
||||
body_part = HAND_LEFT
|
||||
|
||||
/datum/limb/groin
|
||||
name = "groin"
|
||||
icon_name = "groin"
|
||||
body_part = GROIN
|
||||
*/
|
||||
|
||||
//Applies brute and burn damage to the organ. Returns 1 if the damage-icon states changed at all.
|
||||
//Damage will not exceed max_damage using this proc
|
||||
//Cannot apply negative damage
|
||||
/datum/limb/proc/take_damage(brute, burn)
|
||||
if(owner && (owner.status_flags & GODMODE)) return 0 //godmode
|
||||
brute = max(brute,0)
|
||||
burn = max(burn,0)
|
||||
|
||||
var/can_inflict = max_damage - (brute_dam + burn_dam)
|
||||
if(!can_inflict) return 0
|
||||
|
||||
if((brute + burn) < can_inflict)
|
||||
brute_dam += brute
|
||||
burn_dam += burn
|
||||
else
|
||||
if(brute > 0)
|
||||
if(burn > 0)
|
||||
brute = round( (brute/(brute+burn)) * can_inflict, 1 )
|
||||
burn = can_inflict - brute //gets whatever damage is left over
|
||||
brute_dam += brute
|
||||
burn_dam += burn
|
||||
else
|
||||
brute_dam += can_inflict
|
||||
else
|
||||
if(burn > 0)
|
||||
burn_dam += can_inflict
|
||||
else
|
||||
return 0
|
||||
return update_icon()
|
||||
|
||||
|
||||
//Heals brute and burn damage for the organ. Returns 1 if the damage-icon states changed at all.
|
||||
//Damage cannot go below zero.
|
||||
//Cannot remove negative damage (i.e. apply damage)
|
||||
/datum/limb/proc/heal_damage(brute, burn)
|
||||
brute = max(brute, 0)
|
||||
burn = max(burn, 0)
|
||||
brute_dam = max(brute_dam - brute, 0)
|
||||
burn_dam = max(burn_dam - burn, 0)
|
||||
return update_icon()
|
||||
|
||||
|
||||
//Returns total damage...kinda pointless really
|
||||
/datum/limb/proc/get_damage()
|
||||
return brute_dam + burn_dam
|
||||
|
||||
|
||||
//Updates an organ's brute/burn states for use by update_damage_overlays()
|
||||
//Returns 1 if we need to update overlays. 0 otherwise.
|
||||
/datum/limb/proc/update_icon()
|
||||
var/tbrute = round( (brute_dam/max_damage)*3, 1 )
|
||||
var/tburn = round( (burn_dam/max_damage)*3, 1 )
|
||||
if((tbrute != brutestate) || (tburn != burnstate))
|
||||
brutestate = tbrute
|
||||
burnstate = tburn
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//Returns a display name for the organ
|
||||
/datum/limb/proc/getDisplayName()
|
||||
switch(name)
|
||||
if("l_leg") return "left leg"
|
||||
if("r_leg") return "right leg"
|
||||
if("l_arm") return "left arm"
|
||||
if("r_arm") return "right arm"
|
||||
else return name
|
||||
/datum/limb
|
||||
var/name = "limb"
|
||||
var/mob/owner = null
|
||||
var/icon_name = null
|
||||
var/body_part = null
|
||||
var/brutestate = 0
|
||||
var/burnstate = 0
|
||||
var/brute_dam = 0
|
||||
var/burn_dam = 0
|
||||
var/max_damage = 0
|
||||
|
||||
/datum/limb/chest
|
||||
name = "chest"
|
||||
icon_name = "chest"
|
||||
max_damage = 200
|
||||
body_part = CHEST
|
||||
|
||||
/datum/limb/head
|
||||
name = "head"
|
||||
icon_name = "head"
|
||||
max_damage = 200
|
||||
body_part = HEAD
|
||||
|
||||
/datum/limb/l_arm
|
||||
name = "l_arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 75
|
||||
body_part = ARM_LEFT
|
||||
|
||||
/datum/limb/l_leg
|
||||
name = "l_leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 75
|
||||
body_part = LEG_LEFT
|
||||
|
||||
/datum/limb/r_arm
|
||||
name = "r_arm"
|
||||
icon_name = "r_arm"
|
||||
max_damage = 75
|
||||
body_part = ARM_RIGHT
|
||||
|
||||
/datum/limb/r_leg
|
||||
name = "r_leg"
|
||||
icon_name = "r_leg"
|
||||
max_damage = 75
|
||||
body_part = LEG_RIGHT
|
||||
|
||||
/*Leaving these here in case we want to use them later
|
||||
/datum/limb/l_foot
|
||||
name = "l foot"
|
||||
icon_name = "l_foot"
|
||||
body_part = FOOT_LEFT
|
||||
|
||||
/datum/limb/r_foot
|
||||
name = "r foot"
|
||||
icon_name = "r_foot"
|
||||
body_part = FOOT_RIGHT
|
||||
|
||||
/datum/limb/r_hand
|
||||
name = "r hand"
|
||||
icon_name = "r_hand"
|
||||
body_part = HAND_RIGHT
|
||||
|
||||
/datum/limb/l_hand
|
||||
name = "l hand"
|
||||
icon_name = "l_hand"
|
||||
body_part = HAND_LEFT
|
||||
|
||||
/datum/limb/groin
|
||||
name = "groin"
|
||||
icon_name = "groin"
|
||||
body_part = GROIN
|
||||
*/
|
||||
|
||||
//Applies brute and burn damage to the organ. Returns 1 if the damage-icon states changed at all.
|
||||
//Damage will not exceed max_damage using this proc
|
||||
//Cannot apply negative damage
|
||||
/datum/limb/proc/take_damage(brute, burn)
|
||||
if(owner && (owner.status_flags & GODMODE)) return 0 //godmode
|
||||
brute = max(brute,0)
|
||||
burn = max(burn,0)
|
||||
|
||||
var/can_inflict = max_damage - (brute_dam + burn_dam)
|
||||
if(!can_inflict) return 0
|
||||
|
||||
if((brute + burn) < can_inflict)
|
||||
brute_dam += brute
|
||||
burn_dam += burn
|
||||
else
|
||||
if(brute > 0)
|
||||
if(burn > 0)
|
||||
brute = round( (brute/(brute+burn)) * can_inflict, 1 )
|
||||
burn = can_inflict - brute //gets whatever damage is left over
|
||||
brute_dam += brute
|
||||
burn_dam += burn
|
||||
else
|
||||
brute_dam += can_inflict
|
||||
else
|
||||
if(burn > 0)
|
||||
burn_dam += can_inflict
|
||||
else
|
||||
return 0
|
||||
return update_icon()
|
||||
|
||||
|
||||
//Heals brute and burn damage for the organ. Returns 1 if the damage-icon states changed at all.
|
||||
//Damage cannot go below zero.
|
||||
//Cannot remove negative damage (i.e. apply damage)
|
||||
/datum/limb/proc/heal_damage(brute, burn)
|
||||
brute = max(brute, 0)
|
||||
burn = max(burn, 0)
|
||||
brute_dam = max(brute_dam - brute, 0)
|
||||
burn_dam = max(burn_dam - burn, 0)
|
||||
return update_icon()
|
||||
|
||||
|
||||
//Returns total damage...kinda pointless really
|
||||
/datum/limb/proc/get_damage()
|
||||
return brute_dam + burn_dam
|
||||
|
||||
|
||||
//Updates an organ's brute/burn states for use by update_damage_overlays()
|
||||
//Returns 1 if we need to update overlays. 0 otherwise.
|
||||
/datum/limb/proc/update_icon()
|
||||
var/tbrute = round( (brute_dam/max_damage)*3, 1 )
|
||||
var/tburn = round( (burn_dam/max_damage)*3, 1 )
|
||||
if((tbrute != brutestate) || (tburn != burnstate))
|
||||
brutestate = tbrute
|
||||
burnstate = tburn
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//Returns a display name for the organ
|
||||
/datum/limb/proc/getDisplayName()
|
||||
switch(name)
|
||||
if("l_leg") return "left leg"
|
||||
if("r_leg") return "right leg"
|
||||
if("l_arm") return "left arm"
|
||||
if("r_arm") return "right arm"
|
||||
else return name
|
||||
+2
-2
@@ -43,9 +43,9 @@ mob/living/carbon/human/proc/handle_pain()
|
||||
if(reagents.has_reagent("oxycodone"))
|
||||
return
|
||||
var/maxdam = 0
|
||||
var/datum/limb/damaged_organ = null
|
||||
var/obj/item/organ/limb/damaged_organ = null
|
||||
for(var/name in organs)
|
||||
var/datum/limb/E = organs[name]
|
||||
var/obj/item/organ/limb/E = organs[name]
|
||||
var/dam = E.get_damage()
|
||||
// make the choice of the organ depend on damage,
|
||||
// but also sometimes use one of the less damaged ones
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
var/dmg = rand(rock_min_dmg,rock_max_dmg)
|
||||
if(istype(victim, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = victim
|
||||
var/datum/limb/affecting = H.organs["head"]
|
||||
var/obj/item/organ/limb/affecting = H.organs["head"]
|
||||
affecting.take_damage(dmg)
|
||||
H.updatehealth()
|
||||
else
|
||||
|
||||
@@ -93,7 +93,6 @@
|
||||
#include "code\datums\datacore.dm"
|
||||
#include "code\datums\datumvars.dm"
|
||||
#include "code\datums\disease.dm"
|
||||
#include "code\datums\limbs.dm"
|
||||
#include "code\datums\mind.dm"
|
||||
#include "code\datums\mixed.dm"
|
||||
#include "code\datums\modules.dm"
|
||||
|
||||
Reference in New Issue
Block a user