Renamed /datum/organ/external to /datum/limb.

Updated all files.

Removed the skeleton and skin organs.

Updated WIP surgery.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5689 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
petethegoat@gmail.com
2013-02-11 18:52:33 +00:00
parent 7f7f9059a1
commit a1ac5f0e66
45 changed files with 184 additions and 326 deletions
+19 -13
View File
@@ -1,20 +1,26 @@
/datum/surgery/appendectomy
name = "appendectomy"
steps = list(/datum/surgery_step/open, /datum/surgery_step/close)
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/incise, /datum/surgery_step/extract_appendix, /datum/surgery_step/close)
location = "groin"
/datum/surgery_step/open
implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchenknife = 65, /obj/item/weapon/shard = 45)
time = 12
//extract appendix
/datum/surgery_step/extract_appendix
implements = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/crowbar = 55)
time = 64
var/obj/item/organ/appendix/A = null
/datum/surgery_step/open/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("<span class='notice'>[user] begins to cut open [target].</span>")
/datum/surgery_step/extract_appendix/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
A = locate(/obj/item/organ/appendix) in target.internal_organs
if(A)
user.visible_message("<span class='notice'>[user] begins to extract [target]'s appendix.</span>")
else
user.visible_message("<span class='notice'>[user] looks for an appendix in [target].</span>")
/datum/surgery_step/close
implements = list(/obj/item/weapon/cautery = 100, /obj/item/weapon/weldingtool = 70, /obj/item/weapon/lighter = 45, /obj/item/weapon/match = 20)
time = 8
/datum/surgery_step/close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("<span class='notice'>[user] begins to mend [target].</span>")
/datum/surgery_step/extract_appendix/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(A)
user.visible_message("<span class='notice'>[user] successfully removes [target]'s appendix!</span>")
A.loc = get_turf(target)
target.internal_organs -= A
else
user.visible_message("<span class='notice'>[user] can't find an appendix in [target]!</span>")
@@ -0,0 +1,34 @@
//make incision
/datum/surgery_step/incise
implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchenknife = 65, /obj/item/weapon/shard = 45)
time = 24
/datum/surgery_step/incise/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("<span class='notice'>[user] begins to make an incision in [target]'s [target_zone].</span>")
//clamp bleeders
/datum/surgery_step/clamp_bleeders
implements = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/wirecutters = 60, /obj/item/weapon/cable_coil = 15)
time = 48
/datum/surgery_step/clamp_bleeders/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("<span class='notice'>[user] begins to clamp bleeders in [target]'s [target_zone].</span>")
//retract skin
/datum/surgery_step/retract_skin
implements = list(/obj/item/weapon/retractor = 100, /obj/item/weapon/screwdriver = 45, /obj/item/weapon/wirecutters = 35)
time = 32
/datum/surgery_step/retract_skin/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("<span class='notice'>[user] begins to retract the skin in [target]'s [target_zone].</span>")
//close incision
/datum/surgery_step/close
implements = list(/obj/item/weapon/cautery = 100, /obj/item/weapon/weldingtool = 70, /obj/item/weapon/lighter = 45, /obj/item/weapon/match = 20)
time = 32
/datum/surgery_step/close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("<span class='notice'>[user] begins to mend the incision in [target]'s [target_zone].</span>")
+7 -2
View File
@@ -1,8 +1,13 @@
//WORK IN PROGRESS
/mob/living/carbon/human
/mob/living/carbon
var/list/surgeries = list()
// var/list/organs = list()
var/list/internal_organs = list()
/mob/living/carbon/New()
..()
internal_organs += new /obj/item/organ/appendix
internal_organs += new /obj/item/organ/heart
/mob/living/carbon/human/attackby(obj/item/I, mob/user)
if(lying) //if they're prone
@@ -0,0 +1,27 @@
/obj/item/organ
name = "organ"
icon = 'icons/obj/surgery.dmi'
/obj/item/organ/appendix
name = "appendix"
icon_state = "appendix"
var/inflamed = 0
/obj/item/organ/appendix/update_icon()
if(inflamed)
icon_state = "appendixinflamed"
else
icon_state = "appendix"
/obj/item/organ/heart
name = "heart"
icon_state = "heart-on"
var/beating = 1
/obj/item/organ/heart/update_icon()
if(beating)
icon_state = "heart-on"
else
icon_state = "heart-off"
+4 -1
View File
@@ -3,9 +3,12 @@
var/status = 1
var/list/steps = list()
var/location = "chest"
var/step_in_progress = 0
/datum/surgery/proc/next_step(mob/user, mob/living/carbon/target)
if(step_in_progress) return
var/procedure = steps[status]
var/datum/surgery_step/S = new procedure
if(S)
@@ -15,5 +18,5 @@
/datum/surgery/proc/complete(mob/living/carbon/human/target)
target.surgeries.Cut(src)
target.surgeries -= src
src = null
@@ -12,6 +12,8 @@
/datum/surgery_step/proc/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
surgery.step_in_progress = 1
preop(user, target, target_zone, tool)
if(do_after(user, time))
var/prob_chance = implements[tool.type]
@@ -23,6 +25,8 @@
else
failure(user, target, target_zone, tool, surgery)
surgery.step_in_progress = 0
/datum/surgery_step/proc/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("<span class='notice'>[user] begins to perform surgery on [target].</span>")
+1 -1
View File
@@ -487,7 +487,7 @@
name = "Disarming Syndrome"
stage = 4
activate(var/mob/living/carbon/mob,var/multiplier)
var/datum/organ/external/org = mob.organs["r_arm"]
var/datum/limb/org = mob.organs["r_arm"]
org.take_damage(3,0,0,0)
mob << "\red You feel a sting in your right arm."*/
View File
-14
View File
@@ -1,14 +0,0 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
/datum/organ
var/name = "organ"
var/mob/owner = null
///datum/organ/proc/process()
// return 0
///datum/organ/proc/receive_chem(chemical as obj)
// return 0
-142
View File
@@ -1,142 +0,0 @@
/datum/organ/external
name = "external"
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
// var/bandaged = 0
// var/wound_size = 0
// var/max_size = 0
/datum/organ/external/chest
name = "chest"
icon_name = "chest"
max_damage = 150
body_part = UPPER_TORSO
/datum/organ/external/head
name = "head"
icon_name = "head"
max_damage = 125
body_part = HEAD
/datum/organ/external/l_arm
name = "l_arm"
icon_name = "l_arm"
max_damage = 75
body_part = ARM_LEFT
/datum/organ/external/l_leg
name = "l_leg"
icon_name = "l_leg"
max_damage = 75
body_part = LEG_LEFT
/datum/organ/external/r_arm
name = "r_arm"
icon_name = "r_arm"
max_damage = 75
body_part = ARM_RIGHT
/datum/organ/external/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/organ/external/l_foot
name = "l foot"
icon_name = "l_foot"
body_part = FOOT_LEFT
/datum/organ/external/r_foot
name = "r foot"
icon_name = "r_foot"
body_part = FOOT_RIGHT
/datum/organ/external/r_hand
name = "r hand"
icon_name = "r_hand"
body_part = HAND_RIGHT
/datum/organ/external/l_hand
name = "l hand"
icon_name = "l_hand"
body_part = HAND_LEFT
/datum/organ/external/groin
name = "groin"
icon_name = "groin"
body_part = LOWER_TORSO
*/
//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/organ/external/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/organ/external/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/organ/external/proc/get_damage()
return brute_dam + burn_dam
//Updates an organ's brute/burn states for use by updateDamageIcon()
//Returns 1 if we need to update overlays. 0 otherwise.
/datum/organ/external/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/organ/external/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
-61
View File
@@ -1,61 +0,0 @@
/datum/organ/internal
name = "internal"
var/damage = 0
var/max_damage = 100
/datum/organ/internal/skeleton
name = "spooky scary skeleton"
max_damage = 200
/datum/organ/internal/skin
name = "skin"
max_damage = 100
/datum/organ/internal/blood_vessels
name = "blood vessels"
var/heart = null
var/lungs = null
var/kidneys = null
/datum/organ/internal/brain
name = "brain"
var/head = null
/datum/organ/internal/excretory
name = "excretory"
var/excretory = 7.0
var/blood_vessels = null
/datum/organ/internal/heart
name = "heart"
/datum/organ/internal/immune_system
name = "immune system"
var/blood_vessels = null
var/isys = null
/datum/organ/internal/intestines
name = "intestines"
var/intestines = 3.0
var/blood_vessels = null
/datum/organ/internal/liver
name = "liver"
var/intestines = null
var/blood_vessels = null
/datum/organ/internal/lungs
name = "lungs"
var/lungs = 3.0
var/throat = null
var/blood_vessels = null
/datum/organ/internal/stomach
name = "stomach"
var/intestines = null
/datum/organ/internal/throat
name = "throat"
var/lungs = null
var/stomach = null
+1 -1
View File
@@ -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/organ/external/affecting = user.get_organ(organ)
var/datum/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.UpdateDamageIcon()
return
+1 -1
View File
@@ -264,7 +264,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/organ/external/affecting in corpse_to_raise.organs)
for(var/datum/limb/affecting in corpse_to_raise.organs)
affecting.heal_damage(1000, 1000)
corpse_to_raise.setToxLoss(0)
corpse_to_raise.setOxyLoss(0)
+1 -1
View File
@@ -643,7 +643,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/organ/external/affecting = H.get_organ("head")
var/datum/limb/affecting = H.get_organ("head")
H.Stun(8)
H.Weaken(5)
if(affecting.take_damage(10, 0))
+1 -1
View File
@@ -41,7 +41,7 @@
var/mob/living/carbon/human/H = target
// if (M.health <= 0) return
var/datum/organ/external/temp = H.get_organ(pick("chest", "chest", "chest", "head"))
var/datum/limb/temp = H.get_organ(pick("chest", "chest", "chest", "head"))
if(temp)
var/update = 0
switch(damtype)
+1 -1
View File
@@ -647,7 +647,7 @@
"\red You stab yourself in the eyes with [src]!" \
)
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/limb/affecting = M:get_organ("head")
if(affecting.take_damage(7))
M:UpdateDamageIcon()
else
+1 -1
View File
@@ -917,7 +917,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/list/damaged = H.get_damaged_organs(1,1)
user.show_message("\blue Localized Damage, Brute/Burn:",1)
if(length(damaged)>0)
for(var/datum/organ/external/org in damaged)
for(var/datum/limb/org in damaged)
user.show_message(text("\blue \t []: []\blue-[]",capitalize(org.getDisplayName()),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0),1)
else
user.show_message("\blue \t Limbs are OK.",1)
+1 -1
View File
@@ -108,7 +108,7 @@ MASS SPECTROMETER
var/list/damaged = H.get_damaged_organs(1,1)
user.show_message("\blue Localized Damage, Brute/Burn:",1)
if(length(damaged)>0)
for(var/datum/organ/external/org in damaged)
for(var/datum/limb/org in damaged)
user.show_message(text("\blue \t []: []\blue-[]",capitalize(org.getDisplayName()),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0),1)
else
user.show_message("\blue \t Limbs are OK.",1)
+2 -2
View File
@@ -50,13 +50,13 @@
if (istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
var/datum/organ/external/affecting = H.get_organ("chest")
var/datum/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/organ/external) || affecting:burn_dam <= 0)
if(!istype(affecting, /datum/limb) || affecting:burn_dam <= 0)
affecting = H.get_organ("head")
if (affecting.heal_damage(src.heal_brute, src.heal_burn))
@@ -284,7 +284,7 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(!H.shoes)
var/datum/organ/external/affecting = H.get_organ(pick("l_leg", "r_leg"))
var/datum/limb/affecting = H.get_organ(pick("l_leg", "r_leg"))
H.Weaken(3)
if(affecting.take_damage(5, 0))
H.UpdateDamageIcon()
@@ -36,7 +36,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/organ/external/affecting = user.get_organ(organ)
var/datum/limb/affecting = user.get_organ(organ)
if(affecting.take_damage(0,force))
user.UpdateDamageIcon()
else
@@ -62,7 +62,7 @@
if(!user.gloves)
if(istype(user, /mob/living/carbon/human))
var/organ = ((user.hand ? "l_":"r_") + "arm")
var/datum/organ/external/affecting = user.get_organ(organ)
var/datum/limb/affecting = user.get_organ(organ)
if(affecting.take_damage(0,force))
user.UpdateDamageIcon()
else
@@ -26,7 +26,7 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/heal_amt = 10
for(var/datum/organ/external/affecting in H.organs)
for(var/datum/limb/affecting in H.organs)
if(affecting.heal_damage(heal_amt, heal_amt))
H.UpdateDamageIcon()
return
@@ -78,7 +78,7 @@
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/limb/affecting = M:get_organ("head")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
M.updatehealth()
@@ -110,7 +110,7 @@
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("chest")
var/datum/limb/affecting = M:get_organ("chest")
if(affecting.take_damage(30))
M:UpdateDamageIcon()
else
@@ -215,7 +215,7 @@
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/limb/affecting = M:get_organ("head")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
M.updatehealth()
@@ -241,7 +241,7 @@
if(M == user && prob(25))
user << "\red You nick an artery!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/limb/affecting = M:get_organ("head")
if(affecting.take_damage(75))
M:UpdateDamageIcon()
else
@@ -271,7 +271,7 @@
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("chest")
var/datum/limb/affecting = M:get_organ("chest")
if(affecting.take_damage(30))
M:UpdateDamageIcon()
else
@@ -369,7 +369,7 @@
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/limb/affecting = M:get_organ("head")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
M.updatehealth()
@@ -508,14 +508,14 @@
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/limb/affecting = M:get_organ("head")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
else
M.take_organ_damage(15)
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/limb/affecting = M:get_organ("head")
affecting.take_damage(7)
else
M.take_organ_damage(7)
@@ -554,14 +554,14 @@
if(M == user && prob(25))
user << "\red You nick an artery!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/limb/affecting = M:get_organ("head")
if(affecting.take_damage(75))
M:UpdateDamageIcon()
else
M.take_organ_damage(75)
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/limb/affecting = M:get_organ("head")
affecting.take_damage(7)
else
M.take_organ_damage(7)
@@ -610,7 +610,7 @@
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/limb/affecting = M:get_organ("head")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
else
@@ -638,7 +638,7 @@
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("chest")
var/datum/limb/affecting = M:get_organ("chest")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
else
@@ -724,7 +724,7 @@
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/limb/affecting = M:get_organ("head")
if(affecting.take_damage(40))
M:UpdateDamageIcon()
M.updatehealth()
@@ -732,7 +732,7 @@
M.take_organ_damage(40)
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("head")
var/datum/limb/affecting = M:get_organ("head")
affecting.take_damage(7)
else
M.take_organ_damage(7)
@@ -808,7 +808,7 @@
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("chest")
var/datum/limb/affecting = M:get_organ("chest")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
else
+1 -1
View File
@@ -1755,7 +1755,7 @@
if(!security)
//strip their stuff before they teleport into a cell :downs:
for(var/obj/item/weapon/W in H)
if(istype(W, /datum/organ/external))
if(istype(W, /datum/limb))
continue
//don't strip organs
H.u_equip(W)
+1 -1
View File
@@ -40,7 +40,7 @@
proc/triggered(mob/target as mob, var/type = "feet")
if(!armed)
return
var/datum/organ/external/affecting = null
var/datum/limb/affecting = null
if(ishuman(target))
var/mob/living/carbon/human/H = target
switch(type)
+3 -3
View File
@@ -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/organ/external))
var/datum/organ/external/temp = organ
if (istype(organ, /datum/limb))
var/datum/limb/temp = organ
if(temp.take_damage(d, 0))
H.UpdateDamageIcon()
H.updatehealth()
@@ -144,7 +144,7 @@
"<span class='notice'>[src] examines \himself.", \
"<span class='notice'>You check yourself for injuries.</span>")
for(var/datum/organ/external/org in H.organs)
for(var/datum/limb/org in H.organs)
var/status = ""
var/brutedamage = org.brute_dam
var/burndamage = org.burn_dam
+10 -11
View File
@@ -21,10 +21,9 @@
dna = new /datum/dna(null)
//initialise organs
organs = newlist(/datum/organ/external/chest, /datum/organ/external/head, /datum/organ/external/l_arm,
/datum/organ/external/r_arm, /datum/organ/external/r_leg, /datum/organ/external/l_leg,
/datum/organ/internal/skeleton, /datum/organ/internal/skin)
for(var/datum/organ/external/O in 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)
O.owner = src
..()
@@ -198,7 +197,7 @@
Paralyse(10)
var/update = 0
for(var/datum/organ/external/temp in organs)
for(var/datum/limb/temp in organs)
switch(temp.name)
if("head")
update |= temp.take_damage(b_loss * 0.2, f_loss * 0.2)
@@ -219,7 +218,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/organ/external/affecting = get_organ(ran_zone(dam_zone))
var/datum/limb/affecting = get_organ(ran_zone(dam_zone))
apply_damage(rand(30,40), BRUTE, affecting, run_armor_check(affecting, "melee"))
return
@@ -228,7 +227,7 @@
if ((M.client && !( M.blinded )))
M.show_message("\red [src] has been hit by [O]", 1)
if (health > 0)
var/datum/organ/external/affecting = get_organ(pick("chest", "chest", "chest", "head"))
var/datum/limb/affecting = get_organ(pick("chest", "chest", "chest", "head"))
if(!affecting) return
if (istype(O, /obj/effect/immovablerod))
if(affecting.take_damage(101, 0))
@@ -242,7 +241,7 @@
/mob/living/carbon/human/hand_p(mob/M as mob)
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
var/datum/organ/external/affecting = get_organ(ran_zone(dam_zone))
var/datum/limb/affecting = get_organ(ran_zone(dam_zone))
var/armor = run_armor_check(affecting, "melee")
apply_damage(rand(1,2), BRUTE, affecting, armor)
if(armor >= 2) return
@@ -269,7 +268,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/organ/external/affecting = get_organ(ran_zone(dam_zone))
var/datum/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
@@ -294,7 +293,7 @@
var/dam_zone = pick("head", "chest", "l_arm", "r_arm", "l_leg", "r_leg", "groin")
var/datum/organ/external/affecting = get_organ(ran_zone(dam_zone))
var/datum/limb/affecting = get_organ(ran_zone(dam_zone))
var/armor_block = run_armor_check(affecting, "melee")
apply_damage(damage, BRUTE, affecting, armor_block)
@@ -437,7 +436,7 @@
//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable
/mob/living/carbon/human/proc/get_face_name()
var/datum/organ/external/O = get_organ("head")
var/datum/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 "Unknown"
return real_name
@@ -29,7 +29,7 @@
playsound(loc, 'sound/weapons/slashmiss.ogg', 50, 1, -1)
visible_message("\red <B>[M] has lunged at [src]!</B>")
return 0
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
var/datum/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)
@@ -35,7 +35,7 @@
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
visible_message("<span class='warning'>[M] has attempted to punch [src]!</span>")
return 0
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
var/datum/limb/affecting = get_organ(ran_zone(M.zone_sel.selecting))
var/armor_block = run_armor_check(affecting, "melee")
if(HULK in M.mutations) damage += 5
@@ -123,7 +123,7 @@
return 0
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
var/datum/limb/affecting = get_organ(ran_zone(M.zone_sel.selecting))
var/armor_block = run_armor_check(affecting, "melee")
if(HULK in M.mutations) damage += 5
@@ -151,7 +151,7 @@
if(w_uniform)
w_uniform.add_fingerprint(M)
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
var/datum/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/organ/external/affecting = get_organ(ran_zone(dam_zone))
var/datum/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/organ/external/O in organs) //hardcoded to streamline things a bit
for(var/datum/limb/O in organs) //hardcoded to streamline things a bit
total_brute += O.brute_dam
total_burn += O.burn_dam
health = 100 - 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/organ/external/O in organs)
for(var/datum/limb/O in organs)
amount += O.brute_dam
return amount
/mob/living/carbon/human/getFireLoss()
var/amount = 0
for(var/datum/organ/external/O in organs)
for(var/datum/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/organ/external/parts = list()
for(var/datum/organ/external/O in organs)
var/list/datum/limb/parts = list()
for(var/datum/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/organ/external/parts = list()
for(var/datum/organ/external/O in organs)
var/list/datum/limb/parts = list()
for(var/datum/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/organ/external/parts = get_damaged_organs(brute,burn)
var/list/datum/limb/parts = get_damaged_organs(brute,burn)
if(!parts.len) return
var/datum/organ/external/picked = pick(parts)
var/datum/limb/picked = pick(parts)
if(picked.heal_damage(brute,burn))
UpdateDamageIcon()
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/organ/external/parts = get_damageable_organs()
var/list/datum/limb/parts = get_damageable_organs()
if(!parts.len) return
var/datum/organ/external/picked = pick(parts)
var/datum/limb/picked = pick(parts)
if(picked.take_damage(brute,burn))
UpdateDamageIcon()
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/organ/external/parts = get_damaged_organs(brute,burn)
var/list/datum/limb/parts = get_damaged_organs(brute,burn)
var/update = 0
while(parts.len && (brute>0 || burn>0) )
var/datum/organ/external/picked = pick(parts)
var/datum/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/organ/external/parts = get_damageable_organs()
var/list/datum/limb/parts = get_damageable_organs()
var/update = 0
while(parts.len && (brute>0 || burn>0) )
var/datum/organ/external/picked = pick(parts)
var/datum/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/organ/external/E = get_organ(zone)
if(istype(E, /datum/organ/external))
var/datum/limb/E = get_organ(zone)
if(istype(E, /datum/limb))
if (E.heal_damage(brute, burn))
UpdateDamageIcon()
else
@@ -151,7 +151,7 @@
/mob/living/carbon/human/proc/get_organ(var/zone)
if(!zone) zone = "chest"
for(var/datum/organ/external/O in organs)
for(var/datum/limb/O in organs)
if(O.name == zone)
return O
return null
@@ -164,7 +164,7 @@
if(blocked >= 2) return 0
var/datum/organ/external/organ = null
var/datum/limb/organ = null
if(isorgan(def_zone))
organ = def_zone
else
@@ -47,18 +47,18 @@ emp_act
if(def_zone)
if(isorgan(def_zone))
return checkarmor(def_zone, type)
var/datum/organ/external/affecting = get_organ(ran_zone(def_zone))
var/datum/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/organ/external/organ in organs)
for(var/datum/limb/organ in organs)
armorval += checkarmor(organ, type)
organnum++
return (armorval/max(organnum, 1))
/mob/living/carbon/human/proc/checkarmor(var/datum/organ/external/def_zone, var/type)
/mob/living/carbon/human/proc/checkarmor(var/datum/limb/def_zone, var/type)
if(!type) return 0
var/protection = 0
var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform)
@@ -110,7 +110,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/organ/external/affecting = get_organ(ran_zone(user.zone_sel.selecting))
var/datum/limb/affecting = get_organ(ran_zone(user.zone_sel.selecting))
var/hit_area = parse_zone(affecting.name)
@@ -166,7 +166,7 @@ Please contact me on #coderbus IRC. ~Carn x
/mob/living/carbon/human/UpdateDamageIcon(var/update_icons=1)
var/image/standing = image("icon" = 'icons/mob/dam_human.dmi', "icon_state" = "blank")
var/image/lying = image("icon" = 'icons/mob/dam_human.dmi', "icon_state" = "blank2")
for(var/datum/organ/external/O in organs)
for(var/datum/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"
+2 -2
View File
@@ -30,7 +30,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/organ/external/affecting in H.organs)
for(var/datum/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.UpdateDamageIcon()
@@ -214,7 +214,7 @@
var/t = shooter:zone_sel.selecting
if ((t in list( "eyes", "mouth" )))
t = "head"
var/datum/organ/external/def_zone = ran_zone(t)
var/datum/limb/def_zone = ran_zone(t)
return def_zone
@@ -132,7 +132,7 @@
if(ishuman(target_mob))
var/mob/living/carbon/human/H = target_mob
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
var/datum/organ/external/affecting = H.get_organ(ran_zone(dam_zone))
var/datum/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_mob))
@@ -492,7 +492,7 @@
if(ishuman(parrot_interest))
var/mob/living/carbon/human/H = parrot_interest
var/datum/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone)))
var/datum/limb/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone)))
H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"))
emote(pick("pecks [H]'s [affecting]", "cuts [H]'s [affecting] with its talons"))
+1 -1
View File
@@ -116,7 +116,7 @@ proc/isobserver(A)
return 0
proc/isorgan(A)
if(istype(A, /datum/organ/external))
if(istype(A, /datum/limb))
return 1
return 0
+1 -1
View File
@@ -494,7 +494,7 @@
else
user << "You try to remove the light [fitting], but you burn your hand on it!"
var/datum/organ/external/affecting = H.get_organ("[user.hand ? "l" : "r" ]_arm")
var/datum/limb/affecting = H.get_organ("[user.hand ? "l" : "r" ]_arm")
if(affecting.take_damage( 0, 5 )) // 5 burn damage
H.UpdateDamageIcon()
@@ -147,7 +147,7 @@
if(isliving(target) && isliving(user))
if(target == user)
var/datum/organ/external/affecting = user.zone_sel.selecting
var/datum/limb/affecting = user.zone_sel.selecting
if(affecting == "head")
var/obj/item/ammo_casing/AC = loaded[1]
+3 -3
View File
@@ -712,7 +712,7 @@ datum
if(!M.unacidable)
if(prob(15) && istype(M, /mob/living/carbon/human) && volume >= 30)
var/mob/living/carbon/human/H = M
var/datum/organ/external/affecting = H.get_organ("head")
var/datum/limb/affecting = H.get_organ("head")
if(affecting)
if(affecting.take_damage(10, 5))
H.UpdateDamageIcon()
@@ -776,7 +776,7 @@ datum
return
if(!H.unacidable)
var/datum/organ/external/affecting = H.get_organ("head")
var/datum/limb/affecting = H.get_organ("head")
if(affecting.take_damage(rand(10,20), rand(0,10)))
H.UpdateDamageIcon()
if(prob(25))
@@ -804,7 +804,7 @@ datum
if(!M.unacidable)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/datum/organ/external/affecting = H.get_organ("head")
var/datum/limb/affecting = H.get_organ("head")
if(affecting.take_damage(rand(10,20), rand(0,10)))
H.UpdateDamageIcon()
if(prob(25))
@@ -43,7 +43,7 @@
force = 15 //Smashing bottles over someoen's head hurts.
var/datum/organ/external/affecting = user.zone_sel.selecting //Find what the player is aiming at
var/datum/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.
+1 -1
View File
@@ -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/organ/external/e in src)
for(var/datum/limb/e in src)
e.brute_dam = 0.0
e.burn_dam = 0.0
e.bandaged = 0.0
+2 -2
View File
@@ -43,9 +43,9 @@ mob/living/carbon/human/proc/handle_pain()
if(reagents.has_reagent("oxycodone"))
return
var/maxdam = 0
var/datum/organ/external/damaged_organ = null
var/datum/limb/damaged_organ = null
for(var/name in organs)
var/datum/organ/external/E = organs[name]
var/datum/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
+1 -1
View File
@@ -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/organ/external/affecting = H.organs["head"]
var/datum/limb/affecting = H.organs["head"]
affecting.take_damage(dmg)
H.updatehealth()
else
+1 -4
View File
@@ -104,10 +104,10 @@
#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"
#include "code\datums\organs.dm"
#include "code\datums\recipe.dm"
#include "code\datums\spell.dm"
#include "code\datums\sun.dm"
@@ -154,9 +154,6 @@
#include "code\datums\helper_datums\global_iterator.dm"
#include "code\datums\helper_datums\teleport.dm"
#include "code\datums\helper_datums\topic_input.dm"
#include "code\datums\organs\organ.dm"
#include "code\datums\organs\organ_external.dm"
#include "code\datums\organs\organ_internal.dm"
#include "code\datums\spells\area_teleport.dm"
#include "code\datums\spells\conjure.dm"
#include "code\datums\spells\construct_spells.dm"