diff --git a/code/WorkInProgress/surgery.dm b/code/WorkInProgress/surgery.dm index 3ad76272466..404afdbb859 100644 --- a/code/WorkInProgress/surgery.dm +++ b/code/WorkInProgress/surgery.dm @@ -1,12 +1,3 @@ - -//check if mob is lying down on something we can operate him on. -/proc/can_operate(mob/living/carbon/M) - return (locate(/obj/machinery/optable, M.loc) && M.resting) || \ - (locate(/obj/structure/stool/bed/roller, M.loc) && \ - (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || \ - (locate(/obj/structure/table/, M.loc) && \ - (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66)) - /datum/surgery_status/ var/eyes = 0 var/face = 0 @@ -49,7 +40,7 @@ var/can_infect = 0 // Build this list by iterating over all typesof(/datum/surgery_step) and sorting the results by priority -var/global/list/surgery_steps = null + proc/build_surgery_steps_list() surgery_steps = list() diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index f683c47e06e..47f61c261af 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -16,7 +16,7 @@ var/global/list/facial_hair_styles_list = list() //stores /datum/sprite_accessor var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff var/global/list/landmarks_list = list() //list of all landmarks created - +var/global/list/surgery_steps = list() //list of all surgery steps |BS12 ////////////////////////// /////Initial Building///// ////////////////////////// @@ -33,4 +33,10 @@ var/global/list/landmarks_list = list() //list of all landmarks created for(var/path in paths) var/datum/sprite_accessory/facial_hair/H = new path() facial_hair_styles_list[H.name] = H + //Surgery Steps - Initialize all /datum/surgery_step into a list + paths = typesof(/datum/surgery_step)-/datum/surgery_step + for(var/T in paths) + var/datum/surgery_step/S = new T + surgery_steps += S + diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 41dd9feb078..cf8831dd76e 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1363,6 +1363,14 @@ proc/is_hot(obj/item/W as obj) istype(W, /obj/item/weapon/bonesetter) ) +//check if mob is lying down on something we can operate him on. +/proc/can_operate(mob/living/carbon/M) + return (locate(/obj/machinery/optable, M.loc) && M.resting) || \ + (locate(/obj/structure/stool/bed/roller, M.loc) && \ + (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || \ + (locate(/obj/structure/table/, M.loc) && \ + (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66)) + /proc/reverse_direction(var/dir) switch(dir) if(NORTH) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 742d50f98f7..b6c7cf8da8f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -189,17 +189,21 @@ if (can_operate(M)) //Checks if mob is lying down on table for surgery if(istype(M,/mob/living/carbon)) if (user.a_intent != "harm") - if(surgery_steps == null) build_surgery_steps_list() + if(surgery_steps.len == 0) build_surgery_steps_list() for(var/datum/surgery_step/S in surgery_steps) //check if tool is right or close enough - if(istype(src, S.required_tool) || (S.allowed_tools && (src.type in S.allowed_tools) )) - if(S.can_use(user, M, user.zone_sel.selecting, src)) //is this step possible? - S.begin_step(user, M, user.zone_sel.selecting, src) - if(do_mob(user, M, rand(S.min_duration, S.max_duration))) - S.end_step(user, M, user.zone_sel.selecting, src) - else - S.fail_step(user, M, user.zone_sel.selecting, src) - return //don't want to do weapony things after surgery + var/right = istype(src, S.required_tool) + if (!right && S.allowed_tools) + for (var/T in S.allowed_tools) + if (istype(src, T)) + right = 1 + if(right && S.can_use(user, M, user.zone_sel.selecting, src)) //is this step possible? + S.begin_step(user, M, user.zone_sel.selecting, src) + if(do_mob(user, M, rand(S.min_duration, S.max_duration))) + S.end_step(user, M, user.zone_sel.selecting, src) + else + S.fail_step(user, M, user.zone_sel.selecting, src) + return //don't want to do weapony things after surgery if (is_surgery_tool(src)) return