From b2d3d880e1ed5bdb966ad67169ef0e671311f6b5 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Sat, 13 Oct 2012 16:28:10 +0400 Subject: [PATCH] More work on surgery system. Appendectomy fully working Bone surgery working Added bone gel and bone setter items Made bandaging stop bleeding instantly, instead of waiting for next wound update. Added variabe to groin organ to track appendectomy stage. --- code/WorkInProgress/surgery.dm | 86 +++++++++++++++++-- code/datums/organs/organ_external.dm | 2 + .../objects/items/weapons/surgery_tools.dm | 10 +++ config/admins.txt | 27 +----- config/game_options.txt | 2 +- config/moderators.txt | 1 - 6 files changed, 91 insertions(+), 37 deletions(-) diff --git a/code/WorkInProgress/surgery.dm b/code/WorkInProgress/surgery.dm index 47e2c5ff06c..3aa13fbbac9 100644 --- a/code/WorkInProgress/surgery.dm +++ b/code/WorkInProgress/surgery.dm @@ -81,8 +81,8 @@ proc/build_surgery_steps_list() end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/datum/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] clapms bleeders in the wound in [target]'s [affected.display_name] with \the [tool]", \ - "\blue You clapm bleeders in [user]'s [affected.display_name] with \the [tool]") + user.visible_message("\blue [user] clamps bleeders in the wound in [target]'s [affected.display_name] with \the [tool]", \ + "\blue You clamp bleeders in [user]'s [affected.display_name] with \the [tool]") affected.bandage() fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -152,21 +152,23 @@ proc/build_surgery_steps_list() can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/datum/organ/external/groin = target.get_organ("groin") - return target_zone == "groin" && groin.open == 2 && !(/datum/disease/appendicitis/ in target.resistances) + return target_zone == "groin" && groin.open == 2 && groin:appendictomy_stage == 0 begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user] starts cutting out [target]'s appendix with \the [tool]", \ "You start cutting out [user]'s appendix with \the [tool]") end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/groin = target.get_organ("groin") user.visible_message("\blue [user] cuts out [target]'s appendix with \the [tool]", \ "\blue You cut out [user]'s appendix with \the [tool]") + groin:appendictomy_stage = 1 fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/datum/organ/external/affected = target.get_organ(target_zone) + var/datum/organ/external/groin = target.get_organ("groin") user.visible_message("\red [user]'s hand slips, slicing artery inside [target]'s abdomen with \the [tool]!", \ "\red Your hand slips, slicing artery inside [target]'s abdomen with \the [tool]!") - affected.createwound(CUT, 50) + groin.createwound(CUT, 50) /datum/surgery_step/remove_appendix required_tool = /obj/item/weapon/hemostat @@ -176,22 +178,88 @@ proc/build_surgery_steps_list() can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/datum/organ/external/groin = target.get_organ("groin") - return target_zone == "groin" && groin.open == 2 + return target_zone == "groin" && groin.open == 2 && groin:appendictomy_stage == 1 begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user] starts removing [target]'s appendix with \the [tool]", \ - "You removing [user]'s appendix with \the [tool]") + "You start removing [user]'s appendix with \the [tool]") end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/groin = target.get_organ("groin") user.visible_message("\blue [user] removes [target]'s appendix with \the [tool]", \ "\blue You remove [user]'s appendix with \the [tool]") + var/datum/disease/appendicitis/app = null for(var/datum/disease/appendicitis/appendicitis in target.viruses) - new /obj/item/weapon/reagent_containers/food/snacks/appendix/inflamed(get_turf(target)) + app = appendicitis appendicitis.cure() - target.resistances += appendicitis + if (app) + new /obj/item/weapon/reagent_containers/food/snacks/appendix/inflamed(get_turf(target)) + else + new /obj/item/weapon/reagent_containers/food/snacks/appendix(get_turf(target)) + target.resistances += app + groin:appendictomy_stage = 2 fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, hitting internal organs in [target]'s abdomen with \the [tool]!", \ "\red Your hand slips, hitting internal organs in [target]'s abdomen with \the [tool]!") affected.createwound(BRUISE, 20) + +/datum/surgery_step/glue_bone + required_tool = /obj/item/weapon/bonegel + + min_duration = 50 + max_duration = 60 + + can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + return affected.open == 2 && affected.stage < 3 + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts applying [tool] to [target]'s bone in [affected.display_name]", \ + "You start applying [tool] to [target]'s bone in [affected.display_name] with \the [tool]") + + end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] applies some [tool] to [target]'s bone in [affected.display_name]", \ + "\blue You apply some [tool] to [target]'s bone in [affected.display_name] with \the [tool]") + if (affected.stage == 0) + affected.stage = 1 + if (affected.stage == 2) + affected.status &= ~ORGAN_BROKEN + affected.status &= ~ORGAN_SPLINTED + affected.stage = 0 + affected.perma_injury = 0 + + fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, applying [tool] to the wrong spot in [target]'s [affected.display_name]!", \ + "\red Your hand slips, applying [tool] to the wrong spot in [user]'s [affected.display_name]!") + +/datum/surgery_step/set_bone + required_tool = /obj/item/weapon/bonesetter + + min_duration = 60 + max_duration = 70 + + can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + return affected.open == 2 && affected.stage == 1 + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] is beginning to set [target]'s [target_zone] bone in place with \the [tool]", \ + "You are beginning to set [user]'s [target_zone] bone in place with \the [tool]") + + end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] set [target]'s [affected.display_name] bone in place with \the [tool]", \ + "\blue You set [user]'s [affected.display_name] bone in place with \the [tool]") + affected.stage = 2 + + fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, setting [target]'s [affected.display_name] in wrong place with \the [tool]!", \ + "\red Your hand slips, setting [user]'s [affected.display_name] in wrong place with \the [tool]!") + affected.createwound(BRUISE, 5) + diff --git a/code/datums/organs/organ_external.dm b/code/datums/organs/organ_external.dm index aba465b3a14..c9f864fbc77 100644 --- a/code/datums/organs/organ_external.dm +++ b/code/datums/organs/organ_external.dm @@ -187,6 +187,7 @@ proc/bandage() status |= ORGAN_BANDAGED + status &= ~ORGAN_BLEEDING for(var/datum/wound/W in wounds) W.bandaged = 1 @@ -466,6 +467,7 @@ max_damage = 115 min_broken_damage = 70 body_part = LOWER_TORSO + var/appendictomy_stage = 0 /datum/organ/external/head name = "head" diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index d369597275c..1d34a8c1657 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -578,3 +578,13 @@ return ..() */ return + +/obj/item/weapon/bonegel + name = "bone gel" + icon = 'surgery.dmi' + icon_state = "bone-gel" + +/obj/item/weapon/bonesetter + name = "bone setter" + icon = 'surgery.dmi' + icon_state = "bone setter" \ No newline at end of file diff --git a/config/admins.txt b/config/admins.txt index 8e13eba12da..2fee6c8b419 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -1,26 +1 @@ -abi79 - Game Master -arcalane - Game Admin -bobbehluvspropane - Game Admin -cacophony - Game Admin -cajoes - Game Admin -cib - Retired Admin -compactninja - Retired Admin -duntadaman - Game Admin -dysthymia - Retired Admin -doughnuts - Game Admin -erthilo - Game Master -hawkv3 - Game Master -headswe - Game Master -iaryni - Game Master -masterofapples - Game Admin -megacaesar - Retired Admin -miniature - Game Master -misterbook - Game Admin -misterfox - Game Admin -mloc - Game Master -skymarshal - Retired Admin -spaceman96 - Retired Admin -strumpetplaya - Retired Admin -tastyfish - Retired Admin -uristqwerty - Game Master -wrongnumber - Game Admin +chinsky - Game Master diff --git a/config/game_options.txt b/config/game_options.txt index b8a6b52d488..211e6d0b78b 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -8,7 +8,7 @@ HEALTH_THRESHOLD_DEAD -100 ## Determines whether bones can be broken through excessive damage to the organ ## 0 means bones can't break, 1 means they can -BONES_CAN_BREAK 0 +BONES_CAN_BREAK 1 ## Determines whether limbs can be amputated through excessive damage to the organ ## 0 means limbs can't be amputated, 1 means they can LIMBS_CAN_BREAK 0 diff --git a/config/moderators.txt b/config/moderators.txt index 1eae19909d2..4e25b55e199 100644 --- a/config/moderators.txt +++ b/config/moderators.txt @@ -3,7 +3,6 @@ asanadas botanistpower bowlsoldier -chinsky cubejackal dakonic densane