Committing WIP datum based surgery.

It is:
-functional

It's not:
-finished
-fun
-perfect

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5684 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
petethegoat@gmail.com
2013-02-10 22:30:53 +00:00
parent 0c79eb522a
commit c573f25fa6
4 changed files with 99 additions and 0 deletions
@@ -0,0 +1,20 @@
/datum/surgery/appendectomy
name = "appendectomy"
steps = list(/datum/surgery_step/open, /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
/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/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>")
+24
View File
@@ -0,0 +1,24 @@
//WORK IN PROGRESS
/mob/living/carbon/human
var/list/surgeries = list()
// var/list/organs = list()
/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
..()
+19
View File
@@ -0,0 +1,19 @@
/datum/surgery
var/name = "surgery"
var/status = 1
var/list/steps = list()
var/location = "chest"
/datum/surgery/proc/next_step(mob/user, mob/living/carbon/target)
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.Cut(src)
src = null
@@ -0,0 +1,36 @@
/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)
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)
/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>")