Committing datum based surgery proper. There's a brief explanation in surgery.dm, if you want to know how it works.

Basically, surgeries are now initiated by bedsheets or surgical drapes, and consist of separate steps.
Appendicitis is sort of hacky, but it should work for now. I'll update it when I add processing organs.

Added getbrain() and getappendix() procs, which can be used instead of checking the old (now missing) x_op_stage variables.

Added a surgical apron, using old sprites by matty.

Updated the map:
Removed the note with spell descriptions from the wizard's den for Kor.
Updated the operating room.
Updated xenobio to have appropriate tools for slime surgery.

Path changes:
/obj/item/brain > /obj/item/organ/brain
/obj/item/weapon/reagent_containers/food/snacks/appendix > /obj/item/organ/appendix
/obj/item/weapon/reagent_containers/food/snacks/appendix/inflamed > /obj/item/organ/appendix


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5703 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
petethegoat@gmail.com
2013-02-14 01:20:58 +00:00
parent f4afd0fe2c
commit 75a7d34ec9
50 changed files with 557 additions and 409 deletions
@@ -1,26 +0,0 @@
/datum/surgery/appendectomy
name = "appendectomy"
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"
//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/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/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>")
@@ -1,34 +0,0 @@
//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>")
-29
View File
@@ -1,29 +0,0 @@
//WORK IN PROGRESS
/mob/living/carbon
var/list/surgeries = 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
if(istype(I, /obj/item/weapon/bedsheet))
var/P = input("Begin which procedure?", "Surgery", null, null) as null|anything in (typesof(/datum/surgery) - /datum/surgery)
var/datum/surgery/procedure = new P
if(procedure)
surgeries += procedure
return
else if(surgeries.len)
var/success = 0
for(var/datum/surgery/S in surgeries)
if(S.next_step(user, src))
success = 1
if(success)
return
..()
@@ -1,27 +0,0 @@
/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"
-22
View File
@@ -1,22 +0,0 @@
/datum/surgery
var/name = "surgery"
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)
if(S.try_op(user, target, user.zone_sel.selecting, user.get_active_hand(), src))
return 1
return 0
/datum/surgery/proc/complete(mob/living/carbon/human/target)
target.surgeries -= src
src = null
@@ -1,40 +0,0 @@
/datum/surgery_step
var/list/implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchenknife = 65, /obj/item/weapon/shard = 45)
var/time = 10
/datum/surgery_step/proc/try_op(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(tool.type in implements)
if(target_zone == surgery.location)
initiate(user, target, target_zone, tool, surgery)
return 1
return 0
/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]
if(prob(prob_chance))
success(user, target, target_zone, tool, surgery)
surgery.status++
if(surgery.status > surgery.steps.len)
surgery.complete(target)
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>")
/datum/surgery_step/proc/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("<span class='notice'>[user] succeeds!</span>")
/datum/surgery_step/proc/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("<span class='warning'>[user] screws up!</span>")