diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm
index 878d35608d..00e08129ae 100644
--- a/code/__DEFINES/tools.dm
+++ b/code/__DEFINES/tools.dm
@@ -8,6 +8,12 @@
#define TOOL_ANALYZER "analyzer"
#define TOOL_MINING "mining"
#define TOOL_SHOVEL "shovel"
+#define TOOL_RETRACTOR "retractor"
+#define TOOL_HEMOSTAT "hemostat"
+#define TOOL_CAUTERY "cautery"
+#define TOOL_DRILL "drill"
+#define TOOL_SCALPEL "scalpel"
+#define TOOL_SAW "saw"
// If delay between the start and the end of tool operation is less than MIN_TOOL_SOUND_DELAY,
diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm
index d539e0a9d5..eb3261bb27 100644
--- a/code/game/mecha/equipment/tools/mining_tools.dm
+++ b/code/game/mecha/equipment/tools/mining_tools.dm
@@ -13,6 +13,8 @@
energy_drain = 10
force = 15
harmful = TRUE
+ tool_behaviour = TOOL_DRILL
+ toolspeed = 0.9
var/drill_delay = 7
var/drill_level = DRILL_BASIC
@@ -141,6 +143,7 @@
drill_delay = 4
drill_level = DRILL_HARDENED
force = 15
+ toolspeed = 0.7
/obj/item/mecha_parts/mecha_equipment/mining_scanner
diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm
index ea9465184a..36708fcf90 100644
--- a/code/game/mecha/equipment/tools/work_tools.dm
+++ b/code/game/mecha/equipment/tools/work_tools.dm
@@ -11,6 +11,8 @@
var/dam_force = 20
var/obj/mecha/working/ripley/cargo_holder
harmful = TRUE
+ tool_behaviour = TOOL_RETRACTOR
+ toolspeed = 0.8
/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/can_attach(obj/mecha/working/ripley/M as obj)
if(..())
diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm
index 5e8250ea00..ccb82f7029 100644
--- a/code/game/objects/items/holy_weapons.dm
+++ b/code/game/objects/items/holy_weapons.dm
@@ -358,6 +358,8 @@
slot_flags = ITEM_SLOT_BELT
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsawhit.ogg'
+ tool_behaviour = TOOL_SAW
+ toolspeed = 1.5 //slower than a real saw
/obj/item/nullrod/claymore/glowing
icon_state = "swordon"
@@ -513,7 +515,8 @@
slot_flags = ITEM_SLOT_BELT
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsawhit.ogg'
-
+ tool_behaviour = TOOL_SAW
+ toolspeed = 0.5
/obj/item/nullrod/hammmer
icon_state = "hammeron"
@@ -539,6 +542,8 @@
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsawhit.ogg'
total_mass = TOTAL_MASS_HAND_REPLACEMENT
+ tool_behaviour = TOOL_SAW
+ toolspeed = 2
/obj/item/nullrod/chainsaw/Initialize()
. = ..()
diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm
index d854ab9f5a..57b9973aa3 100644
--- a/code/game/objects/items/melee/energy.dm
+++ b/code/game/objects/items/melee/energy.dm
@@ -142,6 +142,8 @@
w_class = WEIGHT_CLASS_NORMAL
sharpness = IS_SHARP
light_color = "#40ceff"
+ tool_behaviour = TOOL_SAW
+ toolspeed = 0.7
/obj/item/melee/transforming/energy/sword/cyborg/saw/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
return 0
diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm
index 82bf2c6b5f..49bdffb58f 100644
--- a/code/game/objects/items/twohanded.dm
+++ b/code/game/objects/items/twohanded.dm
@@ -599,6 +599,8 @@
sharpness = IS_SHARP
actions_types = list(/datum/action/item_action/startchainsaw)
var/on = FALSE
+ tool_behaviour = TOOL_SAW
+ toolspeed = 0.5
/obj/item/twohanded/required/chainsaw/Initialize()
. = ..()
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index 4cb6fc74c0..4552e846ad 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -436,6 +436,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsawhit.ogg'
total_mass = TOTAL_MASS_HAND_REPLACEMENT
+ tool_behaviour = TOOL_SAW
+ toolspeed = 1
/obj/item/mounted_chainsaw/Initialize()
. = ..()
diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm
index 49261d6e38..b6605a4fc4 100644
--- a/code/modules/mob/living/simple_animal/bot/bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/bot.dm
@@ -290,7 +290,7 @@
to_chat(user, "Access denied.")
else if(istype(W, /obj/item/paicard))
insertpai(user, W)
- else if(istype(W, /obj/item/hemostat) && paicard)
+ else if(W.tool_behaviour == TOOL_HEMOSTAT && paicard)
if(open)
to_chat(user, "Close the access panel before manipulating the personality slot!")
else
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index f455e0f138..a5fb8a85aa 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -277,12 +277,12 @@
..()
if(istype(A, /obj/item/ammo_box) || istype(A, /obj/item/ammo_casing))
chamber_round()
+ if(A.tool_behaviour == TOOL_SAW || istype(A, /obj/item/gun/energy/plasmacutter))
+ sawoff(user)
if(istype(A, /obj/item/melee/transforming/energy))
var/obj/item/melee/transforming/energy/W = A
if(W.active)
sawoff(user)
- if(istype(A, /obj/item/circular_saw) || istype(A, /obj/item/gun/energy/plasmacutter))
- sawoff(user)
/obj/item/gun/ballistic/revolver/doublebarrel/attack_self(mob/living/user)
var/num_unloaded = 0
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index d1b99c0e3c..47ccb6076f 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -95,7 +95,7 @@
/obj/item/gun/ballistic/shotgun/riot/attackby(obj/item/A, mob/user, params)
..()
- if(istype(A, /obj/item/circular_saw) || istype(A, /obj/item/gun/energy/plasmacutter))
+ if(A.tool_behaviour == TOOL_SAW || istype(A, /obj/item/gun/energy/plasmacutter))
sawoff(user)
if(istype(A, /obj/item/melee/transforming/energy))
var/obj/item/melee/transforming/energy/W = A
diff --git a/code/modules/surgery/advanced/bioware/experimental_dissection.dm b/code/modules/surgery/advanced/bioware/experimental_dissection.dm
index 6266480baf..5dac3e744d 100644
--- a/code/modules/surgery/advanced/bioware/experimental_dissection.dm
+++ b/code/modules/surgery/advanced/bioware/experimental_dissection.dm
@@ -20,7 +20,7 @@
/datum/surgery_step/dissection
name = "dissection"
- implements = list(/obj/item/scalpel = 60, /obj/item/kitchen/knife = 30, /obj/item/shard = 15)
+ implements = list(TOOL_SCALPEL = 60, /obj/item/kitchen/knife = 30, /obj/item/shard = 15)
time = 125
/datum/surgery_step/dissection/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/surgery/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm
index 730a912189..8676132281 100644
--- a/code/modules/surgery/advanced/brainwashing.dm
+++ b/code/modules/surgery/advanced/brainwashing.dm
@@ -12,7 +12,7 @@
/datum/surgery_step/clamp_bleeders,
/datum/surgery_step/brainwash,
/datum/surgery_step/close)
-
+
species = list(/mob/living/carbon/human)
possible_locs = list(BODY_ZONE_HEAD)
/datum/surgery/advanced/brainwashing/can_start(mob/user, mob/living/carbon/target)
@@ -24,7 +24,7 @@
return TRUE
/datum/surgery_step/brainwash
name = "brainwash"
- implements = list(/obj/item/hemostat = 85, TOOL_WIRECUTTER = 50, /obj/item/stack/packageWrap = 35, /obj/item/stack/cable_coil = 15)
+ implements = list(TOOL_HEMOSTAT = 85, TOOL_WIRECUTTER = 50, /obj/item/stack/packageWrap = 35, /obj/item/stack/cable_coil = 15)
time = 200
var/objective
/datum/surgery_step/brainwash/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/surgery/advanced/lobotomy.dm b/code/modules/surgery/advanced/lobotomy.dm
index 1c09f5f7da..8b85c7193b 100644
--- a/code/modules/surgery/advanced/lobotomy.dm
+++ b/code/modules/surgery/advanced/lobotomy.dm
@@ -21,7 +21,7 @@
return TRUE
/datum/surgery_step/lobotomize
name = "perform lobotomy"
- implements = list(/obj/item/scalpel = 85, /obj/item/melee/transforming/energy/sword = 55, /obj/item/kitchen/knife = 35,
+ implements = list(TOOL_SCALPEL = 85, /obj/item/melee/transforming/energy/sword = 55, /obj/item/kitchen/knife = 35,
/obj/item/shard = 25, /obj/item = 20)
time = 100
/datum/surgery_step/lobotomize/tool_check(mob/user, obj/item/tool)
diff --git a/code/modules/surgery/advanced/necrotic_revival.dm b/code/modules/surgery/advanced/necrotic_revival.dm
index 8c57930252..f8fb160a8a 100644
--- a/code/modules/surgery/advanced/necrotic_revival.dm
+++ b/code/modules/surgery/advanced/necrotic_revival.dm
@@ -16,7 +16,7 @@
/datum/surgery_step/bionecrosis
name = "start bionecrosis"
- implements = list(/obj/item/hemostat = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
+ implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
implements = list(/obj/item/reagent_containers/syringe = 100, /obj/item/pen = 30)
time = 50
chems_needed = list("zombiepowder", "rezadone")
diff --git a/code/modules/surgery/advanced/pacification.dm b/code/modules/surgery/advanced/pacification.dm
index d5585d71a8..8a236709a4 100644
--- a/code/modules/surgery/advanced/pacification.dm
+++ b/code/modules/surgery/advanced/pacification.dm
@@ -17,7 +17,7 @@
return FALSE
/datum/surgery_step/pacify
name = "rewire brain"
- implements = list(/obj/item/hemostat = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
+ implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
time = 40
/datum/surgery_step/pacify/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -37,4 +37,4 @@
"[user] screws up, causing brain damage!",
"[user] completes the surgery on [target]'s brain.")
target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_LOBOTOMY)
- return FALSE
+ return FALSE
diff --git a/code/modules/surgery/advanced/reconstruction.dm b/code/modules/surgery/advanced/reconstruction.dm
index 84d9f5b9f8..b5369838d4 100644
--- a/code/modules/surgery/advanced/reconstruction.dm
+++ b/code/modules/surgery/advanced/reconstruction.dm
@@ -17,7 +17,7 @@
/datum/surgery_step/reconstruct
name = "repair body"
- implements = list(/obj/item/hemostat = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
+ implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
repeatable = TRUE
time = 25
diff --git a/code/modules/surgery/advanced/toxichealing.dm b/code/modules/surgery/advanced/toxichealing.dm
index a82287831c..998ca47b45 100644
--- a/code/modules/surgery/advanced/toxichealing.dm
+++ b/code/modules/surgery/advanced/toxichealing.dm
@@ -1,6 +1,6 @@
/datum/surgery/advanced/toxichealing
name = "Body Rejuvenation"
- desc = "A surgical procedure that helps deal with oxygen deprecation, and treat toxic damaged. Works on corpses and alive alike without chemicals."
+ desc = "A surgical procedure that helps deal with oxygen deprivation, and treats parts damaged due to toxic compounds. Works on corpses and alive alike without chemicals."
steps = list(/datum/surgery_step/incise,
/datum/surgery_step/incise,
/datum/surgery_step/retract_skin,
@@ -17,7 +17,7 @@
/datum/surgery_step/toxichealing
name = "rejuvenate body"
- implements = list(/obj/item/hemostat = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
+ implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
repeatable = TRUE
time = 25
diff --git a/code/modules/surgery/advanced/viral_bonding.dm b/code/modules/surgery/advanced/viral_bonding.dm
index b87d5e001c..bdfd0e1552 100644
--- a/code/modules/surgery/advanced/viral_bonding.dm
+++ b/code/modules/surgery/advanced/viral_bonding.dm
@@ -17,7 +17,7 @@
return TRUE
/datum/surgery_step/viral_bond
name = "viral bond"
- implements = list(/obj/item/cautery = 100, TOOL_WELDER = 50, /obj/item = 30) // 30% success with any hot item.
+ implements = list(TOOL_CAUTERY = 100, TOOL_WELDER = 50, /obj/item = 30) // 30% success with any hot item.
time = 100
chems_needed = list("spaceacillin","virusfood","formaldehyde")
diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm
index 01cf6ae112..59493872e2 100644
--- a/code/modules/surgery/amputation.dm
+++ b/code/modules/surgery/amputation.dm
@@ -6,7 +6,7 @@
requires_bodypart_type = 0
/datum/surgery_step/sever_limb
name = "sever limb"
- implements = list(/obj/item/scalpel = 100, /obj/item/circular_saw = 100, /obj/item/melee/transforming/energy/sword/cyborg/saw = 100, /obj/item/melee/arm_blade = 80, /obj/item/twohanded/required/chainsaw = 80, /obj/item/mounted_chainsaw = 80, /obj/item/twohanded/fireaxe = 50, /obj/item/hatchet = 40, /obj/item/kitchen/knife/butcher = 25)
+ implements = list(TOOL_SCALPEL = 100, TOOL_SAW = 100, /obj/item/melee/transforming/energy/sword/cyborg/saw = 100, /obj/item/melee/arm_blade = 80, /obj/item/twohanded/required/chainsaw = 80, /obj/item/mounted_chainsaw = 80, /obj/item/twohanded/fireaxe = 50, /obj/item/hatchet = 40, /obj/item/kitchen/knife/butcher = 25)
time = 64
/datum/surgery_step/sever_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/surgery/brain_surgery.dm b/code/modules/surgery/brain_surgery.dm
index e65271576d..4b087f5bfa 100644
--- a/code/modules/surgery/brain_surgery.dm
+++ b/code/modules/surgery/brain_surgery.dm
@@ -12,7 +12,7 @@
requires_bodypart_type = 0
/datum/surgery_step/fix_brain
name = "fix brain"
- implements = list(/obj/item/hemostat = 85, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15) //don't worry, pouring some alcohol on their open brain will get that chance to 100
+ implements = list(TOOL_HEMOSTAT = 85, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15) //don't worry, pouring some alcohol on their open brain will get that chance to 100
time = 120 //long and complicated
/datum/surgery/brain_surgery/can_start(mob/user, mob/living/carbon/target)
var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN)
diff --git a/code/modules/surgery/core_removal.dm b/code/modules/surgery/core_removal.dm
index 6243405f8d..1ded00da2b 100644
--- a/code/modules/surgery/core_removal.dm
+++ b/code/modules/surgery/core_removal.dm
@@ -11,7 +11,7 @@
//extract brain
/datum/surgery_step/extract_core
name = "extract core"
- implements = list(/obj/item/hemostat = 100, TOOL_CROWBAR = 100)
+ implements = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 100)
time = 16
/datum/surgery_step/extract_core/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/surgery/embalming.dm b/code/modules/surgery/embalming.dm
index f74d864245..3683c3a278 100644
--- a/code/modules/surgery/embalming.dm
+++ b/code/modules/surgery/embalming.dm
@@ -1,6 +1,6 @@
/datum/surgery/embalming //Fast and easy way to husk bodys
name = "Embalming"
- desc = "A surgical procedure that prevents a corps from producing."
+ desc = "A surgical procedure that prevents a corpse from producing miasma."
steps = list(/datum/surgery_step/incise,
/datum/surgery_step/embalming,
/datum/surgery_step/close)
@@ -11,7 +11,7 @@
/datum/surgery_step/embalming
name = "embalming body"
- implements = list(/obj/item/hemostat = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
+ implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
implements = list(/obj/item/reagent_containers/syringe = 100, /obj/item/pen = 30)
time = 10
chems_needed = list("drying_agent", "sterilizine")
diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm
index 85142e7bb1..fbdb11ffa6 100644
--- a/code/modules/surgery/eye_surgery.dm
+++ b/code/modules/surgery/eye_surgery.dm
@@ -7,7 +7,7 @@
//fix eyes
/datum/surgery_step/fix_eyes
name = "fix eyes"
- implements = list(/obj/item/hemostat = 100, TOOL_SCREWDRIVER = 45, /obj/item/pen = 25)
+ implements = listTOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 45, /obj/item/pen = 25)
time = 64
/datum/surgery/eye_surgery/can_start(mob/user, mob/living/carbon/target)
var/obj/item/organ/eyes/E = target.getorganslot(ORGAN_SLOT_EYES)
diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm
index 05119b365d..c7597b6858 100644
--- a/code/modules/surgery/implant_removal.dm
+++ b/code/modules/surgery/implant_removal.dm
@@ -6,7 +6,7 @@
//extract implant
/datum/surgery_step/extract_implant
name = "extract implant"
- implements = list(/obj/item/hemostat = 100, TOOL_CROWBAR = 65)
+ implements = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 65)
time = 64
var/obj/item/implant/I = null
/datum/surgery_step/extract_implant/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/surgery/limb_augmentation.dm b/code/modules/surgery/limb_augmentation.dm
index 7ba8dbc49d..e704485da4 100644
--- a/code/modules/surgery/limb_augmentation.dm
+++ b/code/modules/surgery/limb_augmentation.dm
@@ -2,7 +2,7 @@
//SURGERY STEPS
/datum/surgery_step/replace
name = "sever muscles"
- implements = list(/obj/item/scalpel = 100, TOOL_WIRECUTTER = 55)
+ implements = list(TOOL_SCALPEL = 100, TOOL_WIRECUTTER = 55)
time = 32
diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm
index bb297b4604..b99668dd49 100644
--- a/code/modules/surgery/lipoplasty.dm
+++ b/code/modules/surgery/lipoplasty.dm
@@ -9,7 +9,7 @@
//cut fat
/datum/surgery_step/cut_fat
name = "cut excess fat"
- implements = list(/obj/item/circular_saw = 100, /obj/item/melee/transforming/energy/sword/cyborg/saw = 100, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25)
+ implements = list(TOOL_SAW = 100, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25) //why we need a saw to cut adipose tissue is beyond me, shit's soft as fuck
time = 64
/datum/surgery_step/cut_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/surgery/mechanic_steps.dm b/code/modules/surgery/mechanic_steps.dm
index 7d364d9ecf..23f9c167a0 100644
--- a/code/modules/surgery/mechanic_steps.dm
+++ b/code/modules/surgery/mechanic_steps.dm
@@ -3,7 +3,7 @@
name = "unscrew shell"
implements = list(
TOOL_SCREWDRIVER = 100,
- /obj/item/scalpel = 75, // med borgs could try to unskrew shell with scalpel
+ TOOL_SCALPEL = 75, // med borgs could try to unskrew shell with scalpel
/obj/item/kitchen/knife = 50,
/obj/item = 10) // 10% success with any sharp item.
time = 24
@@ -22,7 +22,7 @@
name = "screw shell"
implements = list(
TOOL_SCREWDRIVER = 100,
- /obj/item/scalpel = 75,
+ TOOL_SCALPELl = 75,
/obj/item/kitchen/knife = 50,
/obj/item = 10) // 10% success with any sharp item.
time = 24
@@ -41,7 +41,7 @@
name = "prepare electronics"
implements = list(
TOOL_MULTITOOL = 100,
- /obj/item/hemostat = 10) // try to reboot internal controllers via short circuit with some conductor
+ TOOL_HEMOSTAT = 10) // try to reboot internal controllers via short circuit with some conductor
time = 24
/datum/surgery_step/prepare_electronics/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -54,7 +54,7 @@
name = "unwrench bolts"
implements = list(
TOOL_WRENCH = 100,
- /obj/item/retractor = 10)
+ TOOL_RETRACTOR = 10)
time = 24
/datum/surgery_step/mechanic_unwrench/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -67,7 +67,7 @@
name = "wrench bolts"
implements = list(
TOOL_WRENCH = 100,
- /obj/item/retractor = 10)
+ TOOL_RETRACTOR = 10)
time = 24
/datum/surgery_step/mechanic_wrench/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -84,4 +84,4 @@
/datum/surgery_step/open_hatch/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(user, target, "You begin to open the hatch holders in [target]'s [parse_zone(target_zone)]...",
"[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)].",
- "[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)].")
+ "[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)].")
diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm
index 6bffed7452..42c049edd2 100644
--- a/code/modules/surgery/organ_manipulation.dm
+++ b/code/modules/surgery/organ_manipulation.dm
@@ -62,7 +62,7 @@
name = "manipulate organs"
repeatable = 1
implements = list(/obj/item/organ = 100, /obj/item/reagent_containers/food/snacks/organ = 0, /obj/item/organ_storage = 100)
- var/implements_extract = list(/obj/item/hemostat = 100, TOOL_CROWBAR = 55)
+ var/implements_extract = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 55)
var/current_type
var/obj/item/organ/I = null
/datum/surgery_step/manipulate_organs/New()
diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm
index da03771a27..459a540f26 100644
--- a/code/modules/surgery/organic_steps.dm
+++ b/code/modules/surgery/organic_steps.dm
@@ -1,7 +1,7 @@
//make incision
/datum/surgery_step/incise
name = "make incision"
- implements = list(/obj/item/scalpel = 100, /obj/item/melee/transforming/energy/sword = 75, /obj/item/kitchen/knife = 65,
+ implements = list(TOOL_SCALPEL = 100, /obj/item/melee/transforming/energy/sword = 75, /obj/item/kitchen/knife = 65,
/obj/item/shard = 45, /obj/item = 30) // 30% success with any sharp item.
time = 16
@@ -27,7 +27,7 @@
//clamp bleeders
/datum/surgery_step/clamp_bleeders
name = "clamp bleeders"
- implements = list(/obj/item/hemostat = 100, TOOL_WIRECUTTER = 60, /obj/item/stack/packageWrap = 35, /obj/item/stack/cable_coil = 15)
+ implements = list(TOOL_HEMOSTAT = 100, TOOL_WIRECUTTER = 60, /obj/item/stack/packageWrap = 35, /obj/item/stack/cable_coil = 15)
time = 24
/datum/surgery_step/clamp_bleeders/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -45,7 +45,7 @@
//retract skin
/datum/surgery_step/retract_skin
name = "retract skin"
- implements = list(/obj/item/retractor = 100, TOOL_SCREWDRIVER = 45, TOOL_WIRECUTTER = 35)
+ implements = list(TOOL_RETRACTOR = 100, TOOL_SCREWDRIVER = 45, TOOL_WIRECUTTER = 35)
time = 24
/datum/surgery_step/retract_skin/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -58,7 +58,7 @@
//close incision
/datum/surgery_step/close
name = "mend incision"
- implements = list(/obj/item/cautery = 100, /obj/item/gun/energy/laser = 90, TOOL_WELDER = 70,
+ implements = list(TOOL_CAUTERY = 100, /obj/item/gun/energy/laser = 90, TOOL_WELDER = 70,
/obj/item = 30) // 30% success with any hot item.
time = 24
@@ -81,9 +81,7 @@
//saw bone
/datum/surgery_step/saw
name = "saw bone"
- implements = list(/obj/item/circular_saw = 100, /obj/item/melee/transforming/energy/sword/cyborg/saw = 100,
- /obj/item/melee/arm_blade = 75, /obj/item/mounted_chainsaw = 65, /obj/item/twohanded/required/chainsaw = 50,
- /obj/item/twohanded/fireaxe = 50, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25)
+ implements = list(TOOL_SAW = 100, /obj/item/melee/arm_blade = 75, /obj/item/twohanded/fireaxe = 50, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25)
time = 54
/datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -101,7 +99,7 @@
//drill bone
/datum/surgery_step/drill
name = "drill bone"
- implements = list(/obj/item/surgicaldrill = 100, /obj/item/screwdriver/power = 80, /obj/item/pickaxe/drill = 60, /obj/item/mecha_parts/mecha_equipment/drill = 60, TOOL_SCREWDRIVER = 20)
+ implements = list(TOOL_DRILL = 100, /obj/item/screwdriver/power = 80, /obj/item/pickaxe/drill = 60, TOOL_SCREWDRIVER = 20)
time = 30
/datum/surgery_step/drill/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm
index 39077ae235..fe22ffaede 100644
--- a/code/modules/surgery/plastic_surgery.dm
+++ b/code/modules/surgery/plastic_surgery.dm
@@ -5,7 +5,7 @@
//reshape_face
/datum/surgery_step/reshape_face
name = "reshape face"
- implements = list(/obj/item/scalpel = 100, /obj/item/kitchen/knife = 50, TOOL_WIRECUTTER = 35)
+ implements = list(TOOL_SCALPEL = 100, /obj/item/kitchen/knife = 50, TOOL_WIRECUTTER = 35)
time = 64
/datum/surgery_step/reshape_face/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
@@ -48,4 +48,4 @@
"[user] screws up, disfiguring [target]'s appearance!",
"[user] finishes the operation on [target]'s face.")
ADD_TRAIT(target, TRAIT_DISFIGURED, TRAIT_GENERIC)
- return FALSE
+ return FALSE
diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm
index db7445e0b0..0bc5460df8 100644
--- a/code/modules/surgery/tools.dm
+++ b/code/modules/surgery/tools.dm
@@ -7,16 +7,29 @@
item_flags = SURGICAL_TOOL
flags_1 = CONDUCT_1
w_class = WEIGHT_CLASS_TINY
+ tool_behaviour = TOOL_RETRACTOR
+ toolspeed = 1
-/obj/item/retractor/adv
- name = "Advanced Retractor"
- desc = "A high-class, premium retractor, featuring precision crafted, silver-plated hook-ends and an electrum handle."
+/obj/item/retractor/advanced
+ name = "mechanical pinches"
+ desc = "An agglomerate of rods and gears."
icon = 'icons/obj/surgery.dmi'
- icon_state = "retractor"
- materials = list(MAT_METAL=6000, MAT_GLASS=3000)
- flags_1 = CONDUCT_1
- w_class = WEIGHT_CLASS_TINY
- toolspeed = 0.65
+ icon_state = "retractor_a"
+ toolspeed = 0.7
+
+/obj/item/retractor/advanced/attack_self(mob/user)
+ playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, TRUE)
+ if(tool_behaviour == TOOL_RETRACTOR)
+ tool_behaviour = TOOL_HEMOSTAT
+ to_chat(user, "You configure the gears of [src], they are now in hemostat mode.")
+ icon_state = "hemostat_a"
+ else
+ tool_behaviour = TOOL_RETRACTOR
+ to_chat(user, "You configure the gears of [src], they are now in retractor mode.")
+ icon_state = "retractor_a"
+
+/obj/item/retractor/advanced/examine()
+ . += " It resembles a retractor[tool_behaviour == TOOL_RETRACTOR ? "retractor" : "hemostat"]."
/obj/item/retractor/augment
name = "retractor"
@@ -38,17 +51,8 @@
flags_1 = CONDUCT_1
w_class = WEIGHT_CLASS_TINY
attack_verb = list("attacked", "pinched")
-
-/obj/item/hemostat/adv
- name = "Advanced Hemostat"
- desc = "An exceptionally fine pair of arterial forceps. These appear to be plated in electrum and feel soft to the touch."
- icon = 'icons/obj/surgery.dmi'
- icon_state = "hemostat"
- materials = list(MAT_METAL=5000, MAT_GLASS=2500)
- flags_1 = CONDUCT_1
- w_class = WEIGHT_CLASS_TINY
- toolspeed = 0.65
- attack_verb = list("attacked", "pinched")
+ tool_behaviour = TOOL_HEMOSTAT
+ toolspeed = 1
/obj/item/hemostat/augment
name = "hemostat"
@@ -72,17 +76,8 @@
flags_1 = CONDUCT_1
w_class = WEIGHT_CLASS_TINY
attack_verb = list("burnt")
-
-/obj/item/cautery/adv
- name = "Electrocautery"
- desc = "A high-tech unipolar Electrocauter. This tiny device contains an extremely powerful microbattery that uses arcs of electricity to painlessly sear wounds shut. It seems to recharge with the user's body-heat. Wow!"
- icon = 'icons/obj/surgery.dmi'
- icon_state = "cautery"
- materials = list(MAT_METAL=2500, MAT_GLASS=750)
- flags_1 = CONDUCT_1
- w_class = WEIGHT_CLASS_TINY
- toolspeed = 0.5
- attack_verb = list("burnt")
+ tool_behaviour = TOOL_CAUTERY
+ toolspeed = 1
/obj/item/cautery/augment
name = "cautery"
@@ -110,22 +105,33 @@
force = 15
w_class = WEIGHT_CLASS_NORMAL
attack_verb = list("drilled")
+ tool_behaviour = TOOL_DRILL
+ toolspeed = 1
-/obj/item/surgicaldrill/adv
- name = "Surgical Autodrill"
- desc = "With a diamond tip and built-in depth and safety sensors, this drill alerts the user before overpenetrating a patient's skull or tooth. There also appears to be a disable switch."
+/obj/item/surgicaldrill/advanced
+ name = "searing tool"
+ desc = "It projects a high power laser used for medical application."
icon = 'icons/obj/surgery.dmi'
- icon_state = "drill"
- lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
- hitsound = 'sound/weapons/circsawhit.ogg'
- materials = list(MAT_METAL=10000, MAT_GLASS=6000)
- flags_1 = CONDUCT_1
- force = 13 //Damions are not ment for flesh cutting!
- w_class = WEIGHT_CLASS_NORMAL
- toolspeed = 0.65
- attack_verb = list("drilled")
- sharpness = IS_SHARP_ACCURATE // Were making them use a damion for this...
+ icon_state = "surgicaldrill_a"
+ hitsound = 'sound/items/welder.ogg'
+
+/obj/item/surgicaldrill/advanced/Initialize()
+ . = ..()
+ set_light(1)
+
+/obj/item/surgicaldrill/advanced/attack_self(mob/user)
+ playsound(get_turf(user), 'sound/weapons/tap.ogg', 50, TRUE)
+ if(tool_behaviour == TOOL_DRILL)
+ tool_behaviour = TOOL_CAUTERY
+ to_chat(user, "You focus the lenses of [src], it is now in mending mode.")
+ icon_state = "cautery_a"
+ else
+ tool_behaviour = TOOL_DRILL
+ to_chat(user, "You dilate the lenses of [src], it is now in drilling mode.")
+ icon_state = "surgicaldrill_a"
+
+/obj/item/surgicaldrill/advanced/examine()
+ . += " It's set to [tool_behaviour == TOOL_DRILL ? "drilling" : "mending"] mode."
/obj/item/surgicaldrill/augment
name = "surgical drill"
@@ -159,30 +165,46 @@
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
sharpness = IS_SHARP_ACCURATE
+ tool_behaviour = TOOL_SCALPEL
+ toolspeed = 1
/obj/item/scalpel/Initialize()
. = ..()
AddComponent(/datum/component/butchering, 80 * toolspeed, 100, 0)
-/obj/item/scalpel/adv
- name = "Precision Scalpel"
- desc = "A perfectly balanced electrum scalpel with a silicon-coated edge to eliminate wear and tear."
+/obj/item/scalpel/advanced
+ name = "laser scalpel"
+ desc = "An advanced scalpel which uses laser technology to cut."
icon = 'icons/obj/surgery.dmi'
- icon_state = "scalpel"
- lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- flags_1 = CONDUCT_1
- force = 8
- w_class = WEIGHT_CLASS_TINY
- throwforce = 7
- throw_speed = 3
- throw_range = 6
- materials = list(MAT_METAL=4000, MAT_GLASS=1000)
- attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
- toolspeed = 0.65
- hitsound = 'sound/weapons/bladeslice.ogg'
+ icon_state = "scalpel_a"
+ hitsound = 'sound/weapons/blade1.ogg'
+ force = 16
+ toolspeed = 0.7
+ light_color = LIGHT_COLOR_GREEN
sharpness = IS_SHARP_ACCURATE
+/obj/item/scalpel/advanced/Initialize()
+ . = ..()
+ set_light(1)
+
+/obj/item/scalpel/advanced/attack_self(mob/user)
+ playsound(get_turf(user), 'sound/machines/click.ogg', 50, TRUE)
+ if(tool_behaviour == TOOL_SCALPEL)
+ tool_behaviour = TOOL_SAW
+ to_chat(user, "You increase the power of [src], now it can cut bones.")
+ set_light(2)
+ force += 1 //we don't want to ruin sharpened stuff
+ icon_state = "saw_a"
+ else
+ tool_behaviour = TOOL_SCALPEL
+ to_chat(user, "You lower the power of [src], it can no longer cut bones.")
+ set_light(1)
+ force -= 1
+ icon_state = "scalpel_a"
+
+/obj/item/scalpel/advanced/examine()
+ . += " It's set to [tool_behaviour == TOOL_SCALPEL ? "scalpel" : "saw"] mode."
+
/obj/item/scalpel/augment
name = "scalpel"
desc = "Ultra-sharp blade attached directly to your bone for extra-accuracy."
@@ -224,30 +246,13 @@
materials = list(MAT_METAL=10000, MAT_GLASS=6000)
attack_verb = list("attacked", "slashed", "sawed", "cut")
sharpness = IS_SHARP
+ tool_behaviour = TOOL_SAW
+ toolspeed = 1
/obj/item/circular_saw/Initialize()
. = ..()
AddComponent(/datum/component/butchering, 40 * toolspeed, 100, 5, 'sound/weapons/circsawhit.ogg') //saws are very accurate and fast at butchering
-/obj/item/circular_saw/adv
- name = "Diamond-Grit Circular Saw"
- desc = "For those Assistants with REALLY thick skulls."
- icon = 'icons/obj/surgery.dmi'
- icon_state = "saw"
- lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- hitsound = 'sound/weapons/circsawhit.ogg'
- throwhitsound = 'sound/weapons/pierce.ogg'
- flags_1 = CONDUCT_1
- force = 13
- w_class = WEIGHT_CLASS_NORMAL
- throwforce = 6
- throw_speed = 1
- throw_range = 3
- materials = list(MAT_METAL=10000, MAT_GLASS=6000)
- attack_verb = list("attacked", "slashed", "sawed", "cut")
- toolspeed = 0.65
- sharpness = IS_SHARP
/obj/item/circular_saw/augment
name = "circular saw"
@@ -332,7 +337,7 @@
icon_state = "spectrometer"
item_flags = NOBLUDGEON
var/list/advanced_surgeries = list()
-
+
/obj/item/surgical_processor/afterattack(obj/item/O, mob/user, proximity)
. = ..()
if(!proximity)
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index eed8ee64e7..9f17cc544f 100755
Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index cceeb1f915..cbdf193f28 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -517,7 +517,6 @@
#include "code\game\atoms.dm"
#include "code\game\atoms_movable.dm"
#include "code\game\communications.dm"
-#include "code\game\data_huds.dm"
#include "code\game\say.dm"
#include "code\game\shuttle_engines.dm"
#include "code\game\sound.dm"