mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 14:39:58 +01:00
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:
@@ -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>")
|
||||
@@ -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"
|
||||
@@ -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>")
|
||||
Reference in New Issue
Block a user