mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-13 17:14:47 +01:00
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:
@@ -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>")
|
||||
@@ -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
|
||||
|
||||
..()
|
||||
@@ -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>")
|
||||
Reference in New Issue
Block a user