From 77fe7cfcc3c960f51ed74d920681575600b5f66d Mon Sep 17 00:00:00 2001 From: FlattestGuitar Date: Wed, 1 Mar 2017 13:16:26 +0100 Subject: [PATCH 01/21] Coflicts --- code/game/jobs/job/supervisor.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index 4394147cb37..af91e7788bd 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -210,7 +210,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0) access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer, access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station, access_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_magistrate) - minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_lawyer, access_magistrate) + minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_lawyer, access_magistrate, access_heads) outfit = /datum/outfit/job/judge @@ -220,6 +220,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0) uniform = /obj/item/clothing/under/suit_jacket/really_black suit = /obj/item/clothing/suit/judgerobe + gloves = /obj/item/clothing/gloves/color/white shoes = /obj/item/clothing/shoes/centcom head = /obj/item/clothing/head/powdered_wig l_ear = /obj/item/device/radio/headset/heads/magistrate/alt From 9d9e957df13e0db38b4b1590dffc9ed54b00e3bc Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 5 Mar 2017 19:53:20 +0100 Subject: [PATCH 02/21] Tool overhaul (usesound & toolspeed), wire descriptions/ghost interaction, add additional tools, refactor can(t)_hold --- code/datums/wires/airlock.dm | 38 ++ code/datums/wires/alarm.dm | 16 + code/datums/wires/apc.dm | 14 + code/datums/wires/autolathe.dm | 11 + code/datums/wires/camera.dm | 20 + code/datums/wires/explosive.dm | 5 + code/datums/wires/mulebot.dm | 30 ++ code/datums/wires/nuclearbomb.dm | 11 + code/datums/wires/particle_accelerator.dm | 15 +- code/datums/wires/radio.dm | 11 + code/datums/wires/robot.dm | 17 + code/datums/wires/smartfridge.dm | 11 + code/datums/wires/syndicatebomb.dm | 16 + code/datums/wires/vending.dm | 14 + code/datums/wires/wires.dm | 83 ++-- .../miniantags/abduction/abduction.dm | 1 + .../miniantags/abduction/abduction_gear.dm | 8 +- code/game/jobs/job/engineering.dm | 2 +- code/game/machinery/alarm.dm | 6 +- code/game/machinery/camera/camera.dm | 6 +- code/game/machinery/doors/airlock.dm | 2 + code/game/machinery/syndicatebomb.dm | 37 +- code/game/machinery/vending.dm | 2 +- code/game/objects/items.dm | 3 + code/game/objects/items/devices/multitool.dm | 92 +++- .../game/objects/items/devices/radio/radio.dm | 2 +- .../game/objects/items/weapons/stock_parts.dm | 2 +- .../objects/items/weapons/storage/bags.dm | 16 +- .../objects/items/weapons/storage/belt.dm | 228 ++++----- .../objects/items/weapons/storage/boxes.dm | 6 +- .../objects/items/weapons/storage/fancy.dm | 24 +- .../objects/items/weapons/storage/firstaid.dm | 6 +- .../objects/items/weapons/storage/secure.dm | 2 +- .../objects/items/weapons/storage/storage.dm | 21 +- .../objects/items/weapons/storage/toolbox.dm | 121 +++-- .../items/weapons/storage/uplink_kits.dm | 8 +- .../objects/items/weapons/storage/wallets.dm | 38 +- code/game/objects/items/weapons/tools.dm | 462 ++++++++++++++---- code/modules/arcade/mob_hunt/mob_cards.dm | 2 +- .../clothing/under/accessories/storage.dm | 3 +- code/modules/mining/equipment_locker.dm | 2 +- code/modules/mining/ore.dm | 6 +- .../living/silicon/robot/drone/drone_items.dm | 9 +- .../modules/mob/living/silicon/robot/robot.dm | 4 +- .../mob/living/simple_animal/bot/mulebot.dm | 2 +- code/modules/paperwork/photography.dm | 2 +- code/modules/power/apc.dm | 8 +- .../research/designs/equipment_designs.dm | 81 +++ .../research/designs/medical_designs.dm | 60 +++ .../xenoarchaeology/tools/gearbelt.dm | 42 +- .../research/xenoarchaeology/tools/tools.dm | 2 +- .../xenoarchaeology/tools/tools_pickaxe.dm | 14 +- code/modules/station_goals/bsa.dm | 2 +- code/modules/station_goals/dna_vault.dm | 2 +- code/modules/station_goals/shield.dm | 2 +- icons/mob/belt.dmi | Bin 12936 -> 13374 bytes icons/obj/abductor.dmi | Bin 49433 -> 55430 bytes icons/obj/clothing/belts.dmi | Bin 16664 -> 16970 bytes icons/obj/device.dmi | Bin 34730 -> 34971 bytes icons/obj/storage.dmi | Bin 66511 -> 66934 bytes icons/obj/tools.dmi | Bin 8020 -> 12035 bytes nano/templates/wires.tmpl | 2 +- sound/effects/pray.ogg | Bin 0 -> 19059 bytes sound/items/WelderActivate.ogg | Bin 0 -> 9149 bytes sound/items/WelderDeactivate.ogg | Bin 0 -> 6686 bytes sound/items/change_drill.ogg | Bin 0 -> 8469 bytes sound/items/change_jaws.ogg | Bin 0 -> 11548 bytes sound/items/drill_hit.ogg | Bin 0 -> 40866 bytes sound/items/drill_use.ogg | Bin 0 -> 45403 bytes sound/items/jaws_cut.ogg | Bin 0 -> 17191 bytes sound/items/jaws_pry.ogg | Bin 0 -> 17202 bytes 71 files changed, 1190 insertions(+), 462 deletions(-) create mode 100644 sound/effects/pray.ogg create mode 100644 sound/items/WelderActivate.ogg create mode 100644 sound/items/WelderDeactivate.ogg create mode 100644 sound/items/change_drill.ogg create mode 100644 sound/items/change_jaws.ogg create mode 100644 sound/items/drill_hit.ogg create mode 100644 sound/items/drill_use.ogg create mode 100644 sound/items/jaws_cut.ogg create mode 100644 sound/items/jaws_pry.ogg diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index 51369836e2f..43f6b033d39 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -21,6 +21,44 @@ var/const/AIRLOCK_WIRE_SAFETY = 512 var/const/AIRLOCK_WIRE_SPEED = 1024 var/const/AIRLOCK_WIRE_LIGHT = 2048 +/datum/wires/airlock/GetWireName(index) + switch(index) + if(AIRLOCK_WIRE_IDSCAN) + return "ID Scan" + + if(AIRLOCK_WIRE_MAIN_POWER1) + return "Primary Power" + + if(AIRLOCK_WIRE_MAIN_POWER2) + return "Secondary Power" + + if(AIRLOCK_WIRE_DOOR_BOLTS) + return "Door Bolts" + + if(AIRLOCK_WIRE_BACKUP_POWER1) + return "Primary Backup Power" + + if(AIRLOCK_WIRE_BACKUP_POWER2) + return "Secondary Backup Power" + + if(AIRLOCK_WIRE_OPEN_DOOR) + return "Door State" + + if(AIRLOCK_WIRE_AI_CONTROL) + return "AI Control" + + if(AIRLOCK_WIRE_ELECTRIFY) + return "Electrification" + + if(AIRLOCK_WIRE_ELECTRIFY) + return "Door Safeties" + + if(AIRLOCK_WIRE_ELECTRIFY) + return "Door Timing" + + if(AIRLOCK_WIRE_ELECTRIFY) + return "Bolt Lights" + /datum/wires/airlock/CanUse(mob/living/L) var/obj/machinery/door/airlock/A = holder if(!issilicon(L)) diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index 46f7c6cc885..c37381f47ca 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -9,6 +9,22 @@ var/const/AALARM_WIRE_SYPHON = 4 var/const/AALARM_WIRE_AI_CONTROL = 8 var/const/AALARM_WIRE_AALARM = 16 +/datum/wires/alarm/GetWireName(index) + switch(index) + if(AALARM_WIRE_IDSCAN) + return "ID Scan" + + if(AALARM_WIRE_POWER) + return "Power" + + if(AALARM_WIRE_SYPHON) + return "Panic Syphon" + + if(AALARM_WIRE_AI_CONTROL) + return "AI Control" + + if(AALARM_WIRE_AALARM) + return "Atmospherics Alarm" /datum/wires/alarm/CanUse(mob/living/L) var/obj/machinery/alarm/A = holder diff --git a/code/datums/wires/apc.dm b/code/datums/wires/apc.dm index 26f8dd61f59..a1ef61513fb 100644 --- a/code/datums/wires/apc.dm +++ b/code/datums/wires/apc.dm @@ -7,6 +7,20 @@ var/const/APC_WIRE_MAIN_POWER1 = 2 var/const/APC_WIRE_MAIN_POWER2 = 4 var/const/APC_WIRE_AI_CONTROL = 8 +/datum/wires/apc/GetWireName(index) + switch(index) + if(APC_WIRE_IDSCAN) + return "ID Scan" + + if(APC_WIRE_MAIN_POWER1) + return "Primary Power" + + if(APC_WIRE_MAIN_POWER2) + return "Secondary Power" + + if(APC_WIRE_AI_CONTROL) + return "AI Control" + /datum/wires/apc/get_status() . = ..() var/obj/machinery/power/apc/A = holder diff --git a/code/datums/wires/autolathe.dm b/code/datums/wires/autolathe.dm index 29013f73e5e..644a472acf3 100644 --- a/code/datums/wires/autolathe.dm +++ b/code/datums/wires/autolathe.dm @@ -6,6 +6,17 @@ var/const/AUTOLATHE_HACK_WIRE = 1 var/const/AUTOLATHE_SHOCK_WIRE = 2 var/const/AUTOLATHE_DISABLE_WIRE = 4 +/datum/wires/autolathe/GetWireName(index) + switch(index) + if(AUTOLATHE_HACK_WIRE) + return "Hack" + + if(AUTOLATHE_SHOCK_WIRE) + return "Shock" + + if(AUTOLATHE_DISABLE_WIRE) + return "Disable" + /datum/wires/autolathe/get_status() . = ..() var/obj/machinery/autolathe/A = holder diff --git a/code/datums/wires/camera.dm b/code/datums/wires/camera.dm index 0eb7e7ec577..ee25f8c3898 100644 --- a/code/datums/wires/camera.dm +++ b/code/datums/wires/camera.dm @@ -26,6 +26,26 @@ var/const/CAMERA_WIRE_ALARM = 8 var/const/CAMERA_WIRE_NOTHING1 = 16 var/const/CAMERA_WIRE_NOTHING2 = 32 +/datum/wires/camera/GetWireName(index) + switch(index) + if(CAMERA_WIRE_FOCUS) + return "Focus" + + if(CAMERA_WIRE_POWER) + return "Power" + + if(CAMERA_WIRE_LIGHT) + return "Light" + + if(CAMERA_WIRE_ALARM) + return "Alarm" + + if(CAMERA_WIRE_NOTHING1) + return "Nothing" + + if(CAMERA_WIRE_NOTHING2) + return "Nothing" + /datum/wires/camera/UpdateCut(index, mended) var/obj/machinery/camera/C = holder diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm index f6cce8e223a..2c0692f51a8 100644 --- a/code/datums/wires/explosive.dm +++ b/code/datums/wires/explosive.dm @@ -3,6 +3,11 @@ var/const/WIRE_EXPLODE = 1 +/datum/wires/apc/GetWireName(index) + switch(index) + if(WIRE_EXPLODE) + return "Explode" + /datum/wires/explosive/proc/explode() return diff --git a/code/datums/wires/mulebot.dm b/code/datums/wires/mulebot.dm index 777a3ca05dc..ec083c47f48 100644 --- a/code/datums/wires/mulebot.dm +++ b/code/datums/wires/mulebot.dm @@ -2,6 +2,7 @@ random = 1 holder_type = /mob/living/simple_animal/bot/mulebot wire_count = 10 + window_x = 410 var/const/WIRE_POWER1 = 1 // power connections var/const/WIRE_POWER2 = 2 @@ -13,6 +14,35 @@ var/const/WIRE_REMOTE_RX = 64 // remote recv functions var/const/WIRE_REMOTE_TX = 128 // remote trans status var/const/WIRE_BEACON_RX = 256 // beacon ping recv +/datum/wires/mulebot/GetWireName(index) + switch(index) + if(WIRE_POWER1) + return "Primary Power" + + if(WIRE_POWER2) + return "Secondary Power" + + if(WIRE_AVOIDANCE) + return "Mob Avoidance" + + if(WIRE_LOADCHECK) + return "Load Checking" + + if(WIRE_MOTOR1) + return "Primary Motor" + + if(WIRE_MOTOR2) + return "Secondary Motor" + + if(WIRE_REMOTE_RX) + return "Remote Signal Receiver" + + if(WIRE_REMOTE_TX) + return "Remote Signal Sender" + + if(WIRE_BEACON_RX) + return "Navigation Beacon Receiver" + /datum/wires/mulebot/CanUse(mob/living/L) var/mob/living/simple_animal/bot/mulebot/M = holder if(M.open) diff --git a/code/datums/wires/nuclearbomb.dm b/code/datums/wires/nuclearbomb.dm index fcf28b96130..5743872acf5 100644 --- a/code/datums/wires/nuclearbomb.dm +++ b/code/datums/wires/nuclearbomb.dm @@ -7,6 +7,17 @@ var/const/NUCLEARBOMB_WIRE_LIGHT = 1 var/const/NUCLEARBOMB_WIRE_TIMING = 2 var/const/NUCLEARBOMB_WIRE_SAFETY = 4 +/datum/wires/nuclearbomb/GetWireName(index) + switch(index) + if(NUCLEARBOMB_WIRE_LIGHT) + return "Bomb Light" + + if(NUCLEARBOMB_WIRE_TIMING) + return "Bomb Timing" + + if(NUCLEARBOMB_WIRE_SAFETY) + return "Bomb Safety" + /datum/wires/nuclearbomb/CanUse(mob/living/L) var/obj/machinery/nuclearbomb/N = holder if(N.panel_open) diff --git a/code/datums/wires/particle_accelerator.dm b/code/datums/wires/particle_accelerator.dm index 463f6883c4a..d1e78dc2755 100644 --- a/code/datums/wires/particle_accelerator.dm +++ b/code/datums/wires/particle_accelerator.dm @@ -6,7 +6,20 @@ var/const/PARTICLE_TOGGLE_WIRE = 1 // Toggles whether the PA is on or not. var/const/PARTICLE_STRENGTH_WIRE = 2 // Determines the strength of the PA. var/const/PARTICLE_INTERFACE_WIRE = 4 // Determines the interface showing up. var/const/PARTICLE_LIMIT_POWER_WIRE = 8 // Determines how strong the PA can be. -//var/const/PARTICLE_NOTHING_WIRE = 16 // Blank wire + +/datum/wires/particle_acc/control_box/GetWireName(index) + switch(index) + if(PARTICLE_TOGGLE_WIRE) + return "Power Toggle" + + if(PARTICLE_STRENGTH_WIRE) + return "Strength" + + if(PARTICLE_INTERFACE_WIRE) + return "Interfact" + + if(PARTICLE_LIMIT_POWER_WIRE) + return "Maximum Power" /datum/wires/particle_acc/control_box/CanUse(mob/living/L) var/obj/machinery/particle_accelerator/control_box/C = holder diff --git a/code/datums/wires/radio.dm b/code/datums/wires/radio.dm index f947a9d84cc..ffbff381060 100644 --- a/code/datums/wires/radio.dm +++ b/code/datums/wires/radio.dm @@ -6,6 +6,17 @@ var/const/WIRE_SIGNAL = 1 var/const/WIRE_RECEIVE = 2 var/const/WIRE_TRANSMIT = 4 +/datum/wires/radio/GetWireName(index) + switch(index) + if(WIRE_SIGNAL) + return "Signal" + + if(WIRE_RECEIVE) + return "Receiver" + + if(WIRE_TRANSMIT) + return "Transmitter" + /datum/wires/radio/CanUse(mob/living/L) var/obj/item/device/radio/R = holder if(R.b_stat) diff --git a/code/datums/wires/robot.dm b/code/datums/wires/robot.dm index 468589dce93..bc03e80c327 100644 --- a/code/datums/wires/robot.dm +++ b/code/datums/wires/robot.dm @@ -19,6 +19,23 @@ var/const/BORG_WIRE_CAMERA = 4 var/const/BORG_WIRE_AI_CONTROL = 8 // Not used on MoMMIs var/const/BORG_WIRE_LAWCHECK = 16 // Not used on MoMMIs +/datum/wires/robot/GetWireName(index) + switch(index) + if(BORG_WIRE_MAIN_POWER) + return "Main Power" + + if(BORG_WIRE_LOCKED_DOWN) + return "Lockdown" + + if(BORG_WIRE_CAMERA) + return "Camera" + + if(BORG_WIRE_AI_CONTROL) + return "AI Control" + + if(BORG_WIRE_LAWCHECK) + return "Law Check" + /datum/wires/robot/get_status() . = ..() var/mob/living/silicon/robot/R = holder diff --git a/code/datums/wires/smartfridge.dm b/code/datums/wires/smartfridge.dm index 51ae8e95bf8..53b33e0fd72 100644 --- a/code/datums/wires/smartfridge.dm +++ b/code/datums/wires/smartfridge.dm @@ -10,6 +10,17 @@ var/const/SMARTFRIDGE_WIRE_ELECTRIFY = 1 var/const/SMARTFRIDGE_WIRE_THROW = 2 var/const/SMARTFRIDGE_WIRE_IDSCAN = 4 +/datum/wires/smartfridge/GetWireName(index) + switch(index) + if(SMARTFRIDGE_WIRE_ELECTRIFY) + return "Electrification" + + if(SMARTFRIDGE_WIRE_THROW) + return "Item Throw" + + if(SMARTFRIDGE_WIRE_IDSCAN) + return "ID Scan" + /datum/wires/smartfridge/CanUse(mob/living/L) var/obj/machinery/smartfridge/S = holder if(!issilicon(L)) diff --git a/code/datums/wires/syndicatebomb.dm b/code/datums/wires/syndicatebomb.dm index 51f460ff29e..d1fe6217058 100644 --- a/code/datums/wires/syndicatebomb.dm +++ b/code/datums/wires/syndicatebomb.dm @@ -9,6 +9,22 @@ var/const/WIRE_DELAY = 4 // Raises the timer on pulse, does nothing on cut var/const/WIRE_PROCEED = 8 // Lowers the timer, explodes if cut while the bomb is active var/const/WIRE_ACTIVATE = 16 // Will start a bombs timer if pulsed, will hint if pulsed while already active, will stop a timer a bomb on cut +/datum/wires/syndicatebomb/GetWireName(index) + switch(index) + if(WIRE_BOOM) + return "Explode" + + if(WIRE_UNBOLT) + return "Unbolt" + + if(WIRE_DELAY) + return "Delay" + + if(WIRE_PROCEED) + return "Proceed" + + if(WIRE_ACTIVATE) + return "Activate" /datum/wires/syndicatebomb/CanUse(mob/living/L) var/obj/machinery/syndicatebomb/P = holder diff --git a/code/datums/wires/vending.dm b/code/datums/wires/vending.dm index 98efe4136e2..286ac454efc 100644 --- a/code/datums/wires/vending.dm +++ b/code/datums/wires/vending.dm @@ -9,6 +9,20 @@ var/const/VENDING_WIRE_CONTRABAND = 2 var/const/VENDING_WIRE_ELECTRIFY = 4 var/const/VENDING_WIRE_IDSCAN = 8 +/datum/wires/vending/GetWireName(index) + switch(index) + if(VENDING_WIRE_THROW) + return "Item Throw" + + if(VENDING_WIRE_CONTRABAND) + return "Contraband" + + if(VENDING_WIRE_ELECTRIFY) + return "Electrification" + + if(VENDING_WIRE_IDSCAN) + return "ID Scan" + /datum/wires/vending/CanUse(mob/living/L) var/obj/machinery/vending/V = holder if(!istype(L, /mob/living/silicon)) diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index 9cc386a7975..59a1fba5113 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -71,7 +71,7 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown", /datum/wires/proc/get_status() return list() -/datum/wires/proc/Interact(mob/living/user) +/datum/wires/proc/Interact(mob/user) if(user && istype(user) && holder && CanUse(user)) ui_interact(user) @@ -81,12 +81,12 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown", ui = new(user, src, ui_key, "wires.tmpl", holder.name, window_x, window_y) ui.open() -/datum/wires/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state) +/datum/wires/ui_data(mob/user, ui_key = "main", datum/topic_state/state = physical_state) var/data[0] var/list/W[0] for(var/colour in wires) - W[++W.len] = list("colour" = capitalize(colour), "cut" = IsColourCut(colour), "attached" = IsAttached(colour)) + W[++W.len] = list("colour" = capitalize(colour), "cut" = IsColourCut(colour), "index" = can_see_wire_index(user) ? GetWireName(GetIndex(colour)) : null, "attached" = IsAttached(colour)) if(W.len > 0) data["wires"] = W @@ -99,44 +99,52 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown", /datum/wires/nano_host() return holder + +/datum/wires/proc/can_see_wire_index(mob/user) + if(user.can_admin_interact()) + return TRUE + else if(istype(user.get_active_hand(), /obj/item/device/multitool)) + var/obj/item/device/multitool/M = user.get_active_hand() + if(M.shows_wire_information) + return TRUE + + return FALSE /datum/wires/Topic(href, href_list) if(..()) return 1 - if(in_range(holder, usr) && isliving(usr)) - - var/mob/living/L = usr - if(CanUse(L) && href_list["action"]) - var/obj/item/I = L.get_active_hand() - var/colour = lowertext(href_list["wire"]) - holder.add_hiddenprint(L) - switch(href_list["action"]) - if("cut") // Toggles the cut/mend status - if(istype(I, /obj/item/weapon/wirecutters)) - playsound(holder, 'sound/items/Wirecutter.ogg', 20, 1) - CutWireColour(colour) - else - to_chat(L, "You need wirecutters!") - if("pulse") - if(istype(I, /obj/item/device/multitool)) - playsound(holder, 'sound/weapons/empty.ogg', 20, 1) - PulseColour(colour) - else - to_chat(L, "You need a multitool!") - if("attach") - if(IsAttached(colour)) - var/obj/item/O = Detach(colour) - if(O) - L.put_in_hands(O) - else - if(istype(I, /obj/item/device/assembly/signaler)) - if(L.drop_item()) - Attach(colour, I) - else - to_chat(L, "[L.get_active_hand()] is stuck to your hand!") + var/mob/L = usr + if(CanUse(L) && href_list["action"]) + var/obj/item/I = L.get_active_hand() + var/colour = lowertext(href_list["wire"]) + holder.add_hiddenprint(L) + switch(href_list["action"]) + if("cut") // Toggles the cut/mend status + if(istype(I, /obj/item/weapon/wirecutters) || L.can_admin_interact()) + playsound(holder, 'sound/items/Wirecutter.ogg', 20, 1) + CutWireColour(colour) + else + to_chat(L, "You need wirecutters!") + if("pulse") + if(istype(I, /obj/item/device/multitool) || L.can_admin_interact()) + playsound(holder, 'sound/weapons/empty.ogg', 20, 1) + PulseColour(colour) + else + to_chat(L, "You need a multitool!") + if("attach") + if(IsAttached(colour)) + var/obj/item/O = Detach(colour) + if(O) + L.put_in_hands(O) + else + if(istype(I, /obj/item/device/assembly/signaler)) + if(L.drop_item()) + Attach(colour, I) else - to_chat(L, "You need a remote signaller!") + to_chat(L, "[L.get_active_hand()] is stuck to your hand!") + else + to_chat(L, "You need a remote signaller!") nanomanager.update_uis(src) return 1 @@ -155,7 +163,7 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown", if(holder) nanomanager.update_uis(holder) -/datum/wires/proc/CanUse(mob/living/L) +/datum/wires/proc/CanUse(mob/L) return 1 /datum/wires/CanUseTopic(mob/user, datum/topic_state/state) @@ -203,6 +211,9 @@ var/const/POWER = 8 return index else CRASH("[colour] is not a key in wires.") + +/datum/wires/proc/GetWireName(index) + return // // Is Index/Colour Cut procs diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index db86c482f03..6ac4c84217f 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -250,6 +250,7 @@ agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/decloner/alien(agent), slot_belt) agent.equip_to_slot_or_del(new /obj/item/device/abductor/silencer(agent), slot_in_backpack) agent.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/abductor(agent), slot_head) + agent.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/military/abductor/full(agent), slot_belt) agent.update_icons() diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 29f217b44bc..5237fda9ab2 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -547,31 +547,37 @@ Congratulations! You are now trained for xenobiology research!"} name = "alien scalpel" icon = 'icons/obj/abductor.dmi' origin_tech = "materials=2;biotech=2;abductor=2" + toolspeed = 0.25 /obj/item/weapon/hemostat/alien name = "alien hemostat" icon = 'icons/obj/abductor.dmi' origin_tech = "materials=2;biotech=2;abductor=2" + toolspeed = 0.25 /obj/item/weapon/retractor/alien name = "alien retractor" icon = 'icons/obj/abductor.dmi' origin_tech = "materials=2;biotech=2;abductor=2" + toolspeed = 0.25 /obj/item/weapon/circular_saw/alien name = "alien saw" icon = 'icons/obj/abductor.dmi' origin_tech = "materials=2;biotech=2;abductor=2" + toolspeed = 0.25 /obj/item/weapon/surgicaldrill/alien name = "alien drill" icon = 'icons/obj/abductor.dmi' origin_tech = "materials=2;biotech=2;abductor=2" + toolspeed = 0.25 /obj/item/weapon/cautery/alien name = "alien cautery" icon = 'icons/obj/abductor.dmi' origin_tech = "materials=2;biotech=2;abductor=2" + toolspeed = 0.25 /obj/item/clothing/head/helmet/abductor name = "agent headgear" @@ -605,7 +611,7 @@ Congratulations! You are now trained for xenobiology research!"} /obj/structure/abductor_tableframe/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/wrench)) to_chat(user, "You start disassembling [src]...") - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) if(do_after(user, 30, target = src)) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) new /obj/item/stack/sheet/mineral/abductor(get_turf(src)) diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 1cdff2ec775..cd0450e5426 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -26,7 +26,7 @@ jobtype = /datum/job/chief_engineer uniform = /obj/item/clothing/under/rank/chief_engineer - belt = /obj/item/weapon/storage/belt/utility/full + belt = /obj/item/weapon/storage/belt/utility/chief gloves = /obj/item/clothing/gloves/color/black/ce shoes = /obj/item/clothing/shoes/brown head = /obj/item/clothing/head/hardhat/white diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 632177d7358..1fbd0496397 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -581,9 +581,7 @@ return ui_interact(user) /obj/machinery/alarm/attack_ghost(user as mob) - if(stat & (BROKEN|MAINT)) - return - return ui_interact(user) + return interact(user) /obj/machinery/alarm/attack_hand(mob/user) . = ..() @@ -595,7 +593,7 @@ if(buildstage != 2) return - if(wiresexposed && !istype(user, /mob/living/silicon/ai)) + if(wiresexposed) wires.Interact(user) if(!shorted) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index db616620244..e91ff779665 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -107,8 +107,12 @@ /obj/machinery/camera/blob_act() qdel(src) return + +/obj/machinery/camera/attack_ghost(mob/user) + if(panel_open) + wires.Interact(user) -/obj/machinery/camera/attack_alien(mob/living/carbon/alien/humanoid/user as mob) +/obj/machinery/camera/attack_alien(mob/living/carbon/alien/humanoid/user) if(!istype(user)) return user.do_attack_animation(src) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 0b62f7faf80..1bc514a1df4 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -560,6 +560,8 @@ About the new airlock wires panel: return /obj/machinery/door/airlock/attack_ghost(mob/user) + if(p_open) + wires.Interact(user) ui_interact(user) /obj/machinery/door/airlock/attack_ai(mob/user) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index f9355a98d37..736d1cf9ba7 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -102,38 +102,51 @@ to_chat(user, "[payload] is already loaded into [src], you'll have to remove it first.") else ..() + +/obj/machinery/syndicatebomb/attack_ghost(mob/user) + interact(user) -/obj/machinery/syndicatebomb/attack_hand(var/mob/user) +/obj/machinery/syndicatebomb/attack_hand(mob/user) interact(user) /obj/machinery/syndicatebomb/attack_ai() return -/obj/machinery/syndicatebomb/interact(var/mob/user) +/obj/machinery/syndicatebomb/interact(mob/user) if(wires && open_panel) wires.Interact(user) - if(!open_panel) + if(!open_panel && can_interact(user)) if(!active) spawn() settings(user) return else if(anchored) to_chat(user, "The bomb is bolted to the floor!") - return + +/obj/machinery/syndicatebomb/proc/can_interact(mob/user) + if(user.can_advanced_admin_interact()) + return TRUE + if(!isliving(user)) + return FALSE + if(user.incapacitated()) + return FALSE + if(!Adjacent(user)) + return FALSE + return TRUE -/obj/machinery/syndicatebomb/proc/settings(var/mob/user) +/obj/machinery/syndicatebomb/proc/settings(mob/user) var/newtime = input(user, "Please set the timer.", "Timer", "[timer]") as num newtime = Clamp(newtime, 120, 60000) - if(in_range(src, user) && isliving(user)) //No running off and setting bombs from across the station + if(can_interact(user)) //No running off and setting bombs from across the station timer = newtime - src.loc.visible_message("[bicon(src)] timer set for [timer] seconds.") - if(alert(user,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && in_range(src, user) && isliving(user)) + loc.visible_message("[bicon(src)] timer set for [timer] seconds.") + if(alert(user,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && can_interact(user)) if(defused || active) if(defused) - src.loc.visible_message("[bicon(src)] Device error: User intervention required.") + loc.visible_message("[bicon(src)] Device error: User intervention required.") return else - src.loc.visible_message("[bicon(src)] [timer] seconds until detonation, please clear the area.") + loc.visible_message("[bicon(src)] [timer] seconds until detonation, please clear the area.") playsound(loc, 'sound/machines/click.ogg', 30, 1) active = 1 update_icon() @@ -143,8 +156,8 @@ var/area/A = get_area(bombturf) if(payload && !istype(payload, /obj/item/weapon/bombcore/training)) msg_admin_attack("[key_name_admin(user)] has primed a [name] ([payload]) for detonation at [A.name] (JMP).") - log_game("[key_name(user)] has primed a [name] ([payload]) for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])") - payload.adminlog = "The [src.name] that [key_name(user)] had primed detonated!" + log_game("[key_name(user)] has primed a [name] ([payload]) for detonation at [A.name] ([bombturf.x], [bombturf.y], [bombturf.z])") + payload.adminlog = "\The [src] that [key_name(user)] had primed detonated!" /obj/machinery/syndicatebomb/proc/isWireCut(var/index) return wires.IsIndexCut(index) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index f45daee2af5..ada0269abf1 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -908,7 +908,7 @@ /obj/item/weapon/reagent_containers/glass/bottle/toxin = 4,/obj/item/weapon/reagent_containers/syringe/antiviral = 6,/obj/item/weapon/reagent_containers/syringe/insulin = 4, /obj/item/weapon/reagent_containers/syringe = 12,/obj/item/device/healthanalyzer = 5,/obj/item/device/healthupgrade = 5,/obj/item/weapon/reagent_containers/glass/beaker = 4, /obj/item/weapon/reagent_containers/dropper = 2,/obj/item/stack/medical/bruise_pack/advanced = 3, /obj/item/stack/medical/ointment/advanced = 3, - /obj/item/stack/medical/bruise_pack = 3,/obj/item/stack/medical/splint = 4, /obj/item/device/sensor_device = 2, /obj/item/weapon/reagent_containers/hypospray/autoinjector = 4) + /obj/item/stack/medical/bruise_pack = 3,/obj/item/stack/medical/splint = 4, /obj/item/device/sensor_device = 2, /obj/item/weapon/reagent_containers/hypospray/autoinjector = 4, /obj/item/weapon/wrench/medical = 1) contraband = list(/obj/item/weapon/reagent_containers/glass/bottle/pancuronium = 1,/obj/item/weapon/reagent_containers/glass/bottle/sulfonal = 1) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index b34cc09ca89..6c9f7fe1feb 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -19,6 +19,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d var/r_speed = 1.0 var/health = null var/hitsound = null + var/usesound = null var/w_class = 3 var/slot_flags = 0 //This is used to determine on which slots an item can fit. pass_flags = PASSTABLE @@ -60,6 +61,8 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d var/block_chance = 0 var/hit_reaction_chance = 0 //If you want to have something unrelated to blocking/armour piercing etc. Maybe not needed, but trying to think ahead/allow more freedom + var/toolspeed = 1 // If this item is a tool, the speed multiplier + /* Species-specific sprites, concept stolen from Paradise//vg/. ex: sprite_sheets = list( diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 742afb83c81..e734f22b97f 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -1,3 +1,7 @@ +#define PROXIMITY_NONE "" +#define PROXIMITY_ON_SCREEN "_red" +#define PROXIMITY_NEAR "_yellow" + /** * Multitool -- A multitool is used for hacking electronic devices. * TO-DO -- Using it as a power measurement tool for cables etc. Nannek. @@ -10,13 +14,15 @@ icon_state = "multitool" flags = CONDUCT force = 5.0 - w_class = 2 - throwforce = 5.0 - throw_range = 15 + w_class = WEIGHT_CLASS_SMALL + throwforce = 0 + throw_range = 7 throw_speed = 3 - desc = "You can use this on airlocks or APCs to try to hack them without cutting wires." materials = list(MAT_METAL=50, MAT_GLASS=20) - origin_tech = "magnets=1;engineering=1" + origin_tech = "magnets=1;engineering=2" + toolspeed = 1 + hitsound = 'sound/weapons/tap.ogg' + var/shows_wire_information = FALSE // shows what a wire does if set to TRUE var/obj/machinery/buffer // simple machine buffer for device linkage /obj/item/device/multitool/proc/IsBufferA(var/typepath) @@ -28,38 +34,74 @@ /obj/item/device/multitool/ai_detect - var/track_delay = 0 + var/track_cooldown = 0 + var/track_delay = 10 //How often it checks for proximity + var/detect_state = PROXIMITY_NONE + var/rangealert = 8 //Glows red when inside + var/rangewarning = 20 //Glows yellow when inside + origin_tech = "magnets=1;engineering=2;syndicate=1" /obj/item/device/multitool/ai_detect/New() ..() processing_objects += src - /obj/item/device/multitool/ai_detect/Destroy() processing_objects -= src return ..() /obj/item/device/multitool/ai_detect/process() - - if(track_delay > world.time) + if(track_cooldown > world.time) return - - var/found_eye = 0 - - for(var/mob/camera/aiEye/A in living_mob_list) - - var/turf/our_turf = get_turf(src) - var/turf/eye_turf = get_turf(A) - - if(get_dist(our_turf, eye_turf) < 9) - found_eye = 1 + detect_state = PROXIMITY_NONE + multitool_detect() + icon_state = "[initial(icon_state)][detect_state]" + track_cooldown = world.time + track_delay + +/obj/item/device/multitool/ai_detect/proc/multitool_detect() + var/turf/our_turf = get_turf(src) + for(var/mob/living/silicon/ai/AI in ai_list) + if(AI.cameraFollow == src) + detect_state = PROXIMITY_ON_SCREEN break - if(found_eye) - icon_state = "[initial(icon_state)]_red" - else - icon_state = initial(icon_state) + if(!detect_state && cameranet.chunkGenerated(our_turf.x, our_turf.y, our_turf.z)) + var/datum/camerachunk/chunk = cameranet.getCameraChunk(our_turf.x, our_turf.y, our_turf.z) + if(chunk) + if(chunk.seenby.len) + for(var/mob/camera/aiEye/A in chunk.seenby) + var/turf/detect_turf = get_turf(A) + if(get_dist(our_turf, detect_turf) < rangealert) + detect_state = PROXIMITY_ON_SCREEN + break + if(get_dist(our_turf, detect_turf) < rangewarning) + detect_state = PROXIMITY_NEAR + break + +/obj/item/device/multitool/ai_detect/admin + desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. Has a strange tag that says 'Grief in Safety'" //What else should I say for a meme item? + track_delay = 5 + shows_wire_information = TRUE - track_delay = world.time + 10 // 1 second - return +/obj/item/device/multitool/ai_detect/admin/multitool_detect() + var/turf/our_turf = get_turf(src) + for(var/mob/J in urange(rangewarning,our_turf)) + if(check_rights(R_ADMIN, 0, J)) + detect_state = PROXIMITY_NEAR + var/turf/detect_turf = get_turf(J) + if(get_dist(our_turf, detect_turf) < rangealert) + detect_state = PROXIMITY_ON_SCREEN + break +/obj/item/device/multitool/cyborg + name = "multitool" + desc = "Optimised and stripped-down version of a regular multitool." + toolspeed = 0.5 + +/obj/item/device/multitool/abductor + name = "alien multitool" + desc = "An omni-technological interface." + icon = 'icons/obj/abductor.dmi' + icon_state = "multitool" + toolspeed = 0.1 + origin_tech = "magnets=5;engineering=5;abductor=3" + shows_wire_information = TRUE diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index ff1389067bd..8703926c13c 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -94,7 +94,7 @@ var/global/list/default_medbay_channels = list( secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) /obj/item/device/radio/attack_ghost(mob/user) - return ui_interact(user) + return interact(user) /obj/item/device/radio/attack_self(mob/user as mob) user.set_machine(src) diff --git a/code/game/objects/items/weapons/stock_parts.dm b/code/game/objects/items/weapons/stock_parts.dm index e6e58196108..15a67bb2193 100644 --- a/code/game/objects/items/weapons/stock_parts.dm +++ b/code/game/objects/items/weapons/stock_parts.dm @@ -6,7 +6,7 @@ icon_state = "RPED" item_state = "RPED" w_class = 5 - can_hold = list("/obj/item/weapon/stock_parts") + can_hold = list(/obj/item/weapon/stock_parts) storage_slots = 50 use_to_pickup = 1 allow_quick_gather = 1 diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 49ba664619f..abfd54135c5 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -37,7 +37,7 @@ max_w_class = 2 storage_slots = 30 can_hold = list() // any - cant_hold = list("/obj/item/weapon/disk/nuclear") + cant_hold = list(/obj/item/weapon/disk/nuclear) /obj/item/weapon/storage/bag/trash/suicide_act(mob/user) user.visible_message("[user] puts the [src.name] over their head and starts chomping at the insides! Disgusting!") @@ -93,7 +93,7 @@ storage_slots = 7 display_contents_with_number = 0 //or else this will lead to stupid behavior. can_hold = list() // any - cant_hold = list("/obj/item/weapon/disk/nuclear") + cant_hold = list(/obj/item/weapon/disk/nuclear) /obj/item/weapon/storage/bag/plasticbag/mob_can_equip(M as mob, slot) @@ -136,7 +136,7 @@ storage_slots = 50 max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class max_w_class = 3 - can_hold = list("/obj/item/weapon/ore") + can_hold = list(/obj/item/weapon/ore) /obj/item/weapon/storage/bag/ore/cyborg name = "cyborg mining satchel" @@ -166,7 +166,7 @@ max_combined_w_class = 100 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class max_w_class = 3 w_class = 1 - can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/grown","/obj/item/seeds","/obj/item/weapon/grown","/obj/item/weapon/reagent_containers/food/snacks/ash_flora") + can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown,/obj/item/weapon/reagent_containers/food/snacks/ash_flora) burn_state = FLAMMABLE /obj/item/weapon/storage/bag/plants/portaseeder @@ -346,7 +346,7 @@ max_w_class = 3 w_class = 1 - can_hold = list("/obj/item/weapon/coin","/obj/item/weapon/spacecash") + can_hold = list(/obj/item/weapon/coin,/obj/item/weapon/spacecash) // ----------------------------- // Book bag @@ -362,7 +362,7 @@ max_combined_w_class = 21 max_w_class = 3 w_class = 4 //Bigger than a book because physics - can_hold = list("/obj/item/weapon/book", "/obj/item/weapon/storage/bible", "/obj/item/weapon/tome", "/obj/item/weapon/spellbook") + can_hold = list(/obj/item/weapon/book, /obj/item/weapon/storage/bible, /obj/item/weapon/tome, /obj/item/weapon/spellbook) burn_state = FLAMMABLE /* @@ -471,7 +471,7 @@ storage_slots = 50 max_combined_w_class = 200 w_class = 1 - can_hold = list("/obj/item/weapon/reagent_containers/food/pill","/obj/item/weapon/reagent_containers/glass/beaker","/obj/item/weapon/reagent_containers/glass/bottle") + can_hold = list(/obj/item/weapon/reagent_containers/food/pill,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/glass/bottle) burn_state = FLAMMABLE /* * Biowaste bag (mostly for xenobiologists) @@ -485,5 +485,5 @@ storage_slots = 25 max_combined_w_class = 200 w_class = 1 - can_hold = list("/obj/item/slime_extract","/obj/item/weapon/reagent_containers/food/snacks/monkeycube","/obj/item/weapon/reagent_containers/syringe","/obj/item/weapon/reagent_containers/glass/beaker","/obj/item/weapon/reagent_containers/glass/bottle","/obj/item/weapon/reagent_containers/blood","/obj/item/weapon/reagent_containers/hypospray/autoinjector") + can_hold = list(/obj/item/slime_extract,/obj/item/weapon/reagent_containers/food/snacks/monkeycube,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/blood,/obj/item/weapon/reagent_containers/hypospray/autoinjector) burn_state = FLAMMABLE diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index fe29ba5c23a..3c6f4be5a2c 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -48,19 +48,18 @@ item_state = "utility" use_item_overlays = 1 can_hold = list( - "/obj/item/weapon/crowbar", - "/obj/item/weapon/screwdriver", - "/obj/item/weapon/weldingtool", - "/obj/item/weapon/wirecutters", - "/obj/item/weapon/wrench", - "/obj/item/device/multitool", - "/obj/item/device/flashlight", - "/obj/item/stack/cable_coil", - "/obj/item/device/t_scanner", - "/obj/item/device/analyzer", - "/obj/item/taperoll/engineering", - "/obj/item/weapon/extinguisher/mini") - + /obj/item/weapon/crowbar, + /obj/item/weapon/screwdriver, + /obj/item/weapon/weldingtool, + /obj/item/weapon/wirecutters, + /obj/item/weapon/wrench, + /obj/item/device/multitool, + /obj/item/device/flashlight, + /obj/item/stack/cable_coil, + /obj/item/device/t_scanner, + /obj/item/device/analyzer, + /obj/item/taperoll/engineering, + /obj/item/weapon/extinguisher/mini) /obj/item/weapon/storage/belt/utility/full/New() ..() @@ -69,7 +68,7 @@ new /obj/item/weapon/weldingtool(src) new /obj/item/weapon/crowbar(src) new /obj/item/weapon/wirecutters(src) - new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange")) + new /obj/item/stack/cable_coil(src, 30, pick("red","yellow","orange")) update_icon() /obj/item/weapon/storage/belt/utility/full/multitool/New() @@ -88,7 +87,23 @@ new /obj/item/weapon/extinguisher/mini(src) update_icon() +/obj/item/weapon/storage/belt/utility/chief + name = "Chief Engineer's toolbelt" + desc = "Holds tools, looks snazzy" + icon_state = "utilitybelt_ce" + item_state = "utility_ce" +/obj/item/weapon/storage/belt/utility/chief/New() + ..() + new /obj/item/weapon/screwdriver/power(src) + new /obj/item/weapon/crowbar/power(src) + new /obj/item/weapon/weldingtool/experimental(src)//This can be changed if this is too much + new /obj/item/device/multitool(src) + new /obj/item/stack/cable_coil(src, 30, pick("red","yellow","orange")) + new /obj/item/weapon/extinguisher/mini(src) + new /obj/item/device/analyzer(src) + update_icon() + //much roomier now that we've managed to remove two tools /obj/item/weapon/storage/belt/medical use_to_pickup = 1 //Allow medical belt to pick up medicine @@ -98,24 +113,24 @@ item_state = "medical" use_item_overlays = 1 can_hold = list( - "/obj/item/device/healthanalyzer", - "/obj/item/weapon/dnainjector", - "/obj/item/weapon/reagent_containers/dropper", - "/obj/item/weapon/reagent_containers/glass/beaker", - "/obj/item/weapon/reagent_containers/glass/bottle", - "/obj/item/weapon/reagent_containers/food/pill", - "/obj/item/weapon/reagent_containers/syringe", - "/obj/item/weapon/reagent_containers/glass/dispenser", - "/obj/item/weapon/lighter/zippo", - "/obj/item/weapon/storage/fancy/cigarettes", - "/obj/item/weapon/storage/pill_bottle", - "/obj/item/stack/medical", - "/obj/item/device/flashlight/pen", - "/obj/item/clothing/mask/surgical", - "/obj/item/clothing/gloves/color/latex", - "/obj/item/weapon/reagent_containers/hypospray/autoinjector", - "/obj/item/device/rad_laser", - "/obj/item/device/sensor_device" + /obj/item/device/healthanalyzer, + /obj/item/weapon/dnainjector, + /obj/item/weapon/reagent_containers/dropper, + /obj/item/weapon/reagent_containers/glass/beaker, + /obj/item/weapon/reagent_containers/glass/bottle, + /obj/item/weapon/reagent_containers/food/pill, + /obj/item/weapon/reagent_containers/syringe, + /obj/item/weapon/lighter/zippo, + /obj/item/weapon/storage/fancy/cigarettes, + /obj/item/weapon/storage/pill_bottle, + /obj/item/stack/medical, + /obj/item/device/flashlight/pen, + /obj/item/clothing/mask/surgical, + /obj/item/clothing/gloves/color/latex, + /obj/item/weapon/reagent_containers/hypospray/autoinjector, + /obj/item/device/rad_laser, + /obj/item/device/sensor_device, + /obj/item/weapon/wrench/medical, ) /obj/item/weapon/storage/belt/medical/response_team @@ -139,22 +154,19 @@ item_state = "botany" use_item_overlays = 1 can_hold = list( - "/obj/item/device/plant_analyzer", - "/obj/item/weapon/cultivator", - "/obj/item/weapon/hatchet", - "/obj/item/weapon/reagent_containers/glass/bottle", - "/obj/item/weapon/plantspray", -// "/obj/item/weapon/reagent_containers/syringe", -// "/obj/item/weapon/reagent_containers/glass/beaker", - "/obj/item/weapon/lighter/zippo", - "/obj/item/weapon/storage/fancy/cigarettes", - "obj/item/weapon/rollingpaperpack", - "/obj/item/weapon/shovel/spade", - "/obj/item/device/flashlight/pen", - "/obj/item/seeds", - "/obj/item/weapon/wirecutters", - "/obj/item/weapon/wrench", - "/obj/item/weapon/disk/botany", + /obj/item/device/plant_analyzer, + /obj/item/weapon/cultivator, + /obj/item/weapon/hatchet, + /obj/item/weapon/reagent_containers/glass/bottle, +// /obj/item/weapon/reagent_containers/syringe, +// /obj/item/weapon/reagent_containers/glass/beaker, + /obj/item/weapon/lighter/zippo, + /obj/item/weapon/storage/fancy/cigarettes, + /obj/item/weapon/shovel/spade, + /obj/item/device/flashlight/pen, + /obj/item/seeds, + /obj/item/weapon/wirecutters, + /obj/item/weapon/wrench, ) @@ -167,22 +179,22 @@ max_w_class = 3 use_item_overlays = 1 can_hold = list( - "/obj/item/weapon/grenade/flashbang", - "/obj/item/weapon/grenade/chem_grenade/teargas", - "/obj/item/weapon/reagent_containers/spray/pepper", - "/obj/item/weapon/restraints/handcuffs", - "/obj/item/device/flash", - "/obj/item/clothing/glasses", - "/obj/item/ammo_casing/shotgun", - "/obj/item/ammo_box", - "/obj/item/weapon/reagent_containers/food/snacks/donut", - "/obj/item/weapon/kitchen/knife/combat", - "/obj/item/weapon/melee/baton", - "/obj/item/weapon/melee/classic_baton", - "/obj/item/device/flashlight/seclite", - "/obj/item/taperoll/police", - "/obj/item/weapon/melee/classic_baton/telescopic", - "/obj/item/weapon/restraints/legcuffs/bola") + /obj/item/weapon/grenade/flashbang, + /obj/item/weapon/grenade/chem_grenade/teargas, + /obj/item/weapon/reagent_containers/spray/pepper, + /obj/item/weapon/restraints/handcuffs, + /obj/item/device/flash, + /obj/item/clothing/glasses, + /obj/item/ammo_casing/shotgun, + /obj/item/ammo_box, + /obj/item/weapon/reagent_containers/food/snacks/donut, + /obj/item/weapon/kitchen/knife/combat, + /obj/item/weapon/melee/baton, + /obj/item/weapon/melee/classic_baton, + /obj/item/device/flashlight/seclite, + /obj/item/taperoll/police, + /obj/item/weapon/melee/classic_baton/telescopic, + /obj/item/weapon/restraints/legcuffs/bola) /obj/item/weapon/storage/belt/security/sec/New() ..() @@ -236,6 +248,24 @@ desc = "A syndicate belt designed to be used by boarding parties. Its style is modelled after the hardsuits they wear." icon_state = "militarybelt" item_state = "military" + max_w_class = WEIGHT_CLASS_SMALL + +/obj/item/weapon/storage/belt/military/abductor + name = "agent belt" + desc = "A belt used by abductor agents." + icon = 'icons/obj/abductor.dmi' + icon_state = "belt" + item_state = "security" + +/obj/item/weapon/storage/belt/military/abductor/full/New() + ..() + new /obj/item/weapon/screwdriver/abductor(src) + new /obj/item/weapon/wrench/abductor(src) + new /obj/item/weapon/weldingtool/abductor(src) + new /obj/item/weapon/crowbar/abductor(src) + new /obj/item/weapon/wirecutters/abductor(src) + new /obj/item/device/multitool/abductor(src) + new /obj/item/stack/cable_coil(src, 30, "white") /obj/item/weapon/storage/belt/military/assault name = "assault belt" @@ -253,12 +283,12 @@ max_w_class = 4 // Set to this so the light replacer can fit. use_item_overlays = 1 can_hold = list( - "/obj/item/weapon/grenade/chem_grenade/cleaner", - "/obj/item/device/lightreplacer", - "/obj/item/device/flashlight", - "/obj/item/weapon/reagent_containers/spray", - "/obj/item/weapon/soap", - "/obj/item/weapon/holosign_creator" + /obj/item/weapon/grenade/chem_grenade/cleaner, + /obj/item/device/lightreplacer, + /obj/item/device/flashlight, + /obj/item/weapon/reagent_containers/spray, + /obj/item/weapon/soap, + /obj/item/weapon/holosign_creator ) /obj/item/weapon/storage/belt/janitor/full/New() @@ -280,7 +310,7 @@ max_w_class = 1 max_combined_w_class = 6 storage_slots = 6 - can_hold = list("/obj/item/device/mobcapsule") + can_hold = list(/obj/item/device/mobcapsule) /obj/item/weapon/storage/belt/lazarus/New() ..() @@ -309,7 +339,7 @@ item_state = "bandolier" storage_slots = 8 can_hold = list( - "/obj/item/ammo_casing/shotgun" + /obj/item/ammo_casing/shotgun ) /obj/item/weapon/storage/belt/bandolier/New() @@ -351,8 +381,8 @@ storage_slots = 1 max_w_class = 3 can_hold = list( - "/obj/item/weapon/gun/projectile/automatic/pistol", - "/obj/item/weapon/gun/projectile/revolver/detective" + /obj/item/weapon/gun/projectile/automatic/pistol, + /obj/item/weapon/gun/projectile/revolver/detective ) /obj/item/weapon/storage/belt/wands @@ -363,7 +393,7 @@ storage_slots = 6 use_item_overlays = 1 can_hold = list( - "/obj/item/weapon/gun/magic/wand" + /obj/item/weapon/gun/magic/wand ) /obj/item/weapon/storage/belt/wands/full/New() @@ -447,7 +477,7 @@ storage_slots = 1 w_class = 4 max_w_class = 4 - can_hold = list("/obj/item/weapon/melee/rapier") + can_hold = list(/obj/item/weapon/melee/rapier) /obj/item/weapon/storage/belt/rapier/update_icon() icon_state = "[initial(icon_state)]" @@ -505,8 +535,8 @@ origin_tech = "bluespace=4;syndicate=2" allow_quick_empty = 1 can_hold = list( - "/obj/item/weapon/grenade/smokebomb", - "/obj/item/weapon/restraints/legcuffs/bola" + /obj/item/weapon/grenade/smokebomb, + /obj/item/weapon/restraints/legcuffs/bola ) flags = NODROP @@ -554,48 +584,6 @@ if(H.s_active && H.s_active == src) H.s_active.show_to(H) - -/* DEPRECATED DUE TO SUPERHERO CODE AND NODROP - // As a last resort, the belt can be used as a plastic explosive with a fixed timer (15 seconds). Naturally, you'll lose all your gear... - // Of course, it could be worse. It could spawn a singularity! -/obj/item/weapon/storage/belt/bluespace/owlman/afterattack(atom/target as obj|turf, mob/user as mob, flag) - if(!flag) - return - if(istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage) || istype(target, /obj/structure/table) || istype(target, /obj/structure/closet)) - return - to_chat(user, "Planting explosives...") - user.visible_message("[user.name] is fiddling with their toolbelt.") - if(ismob(target)) - user.create_attack_log(" [user.real_name] tried planting [name] on [target:real_name] ([target:ckey])") - log_attack(" [user.real_name] ([user.ckey]) tried planting [name] on [target:real_name] ([target:ckey])") - user.visible_message("\red [user.name] is trying to strap a belt to [target.name]!") - - - if(do_after(user, 50, target = target) && in_range(user, target)) - user.drop_item() - target = target - loc = null - var/location - if(isturf(target)) location = target - if(ismob(target)) - target:create_attack_log(" Had the [name] planted on them by [user.real_name] ([user.ckey])") - user.visible_message("\red [user.name] finished planting an explosive on [target.name]!") - target.overlays += image('icons/obj/assemblies.dmi', "plastic-explosive2") - to_chat(user, "You sacrifice your belt for the sake of justice. Timer counting down from 15.") - spawn(150) - if(target) - if(ismob(target) || isobj(target)) - location = target.loc // These things can move - explosion(location, -1, -1, 2, 3) - if(istype(target, /turf/simulated/wall)) target:dismantle_wall(1) - else target.ex_act(1) - if(isobj(target)) - if(target) - qdel(target) - if(src) - qdel(src) -*/ - /obj/item/weapon/storage/belt/bluespace/attack(mob/M as mob, mob/user as mob, def_zone) return diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 88820290a48..793e5761b26 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -390,7 +390,7 @@ icon = 'icons/obj/food/food.dmi' icon_state = "monkeycubebox" storage_slots = 7 - can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/monkeycube") + can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube) var/monkey_cube_type = /obj/item/weapon/reagent_containers/food/snacks/monkeycube /obj/item/weapon/storage/box/monkeycubes/New() @@ -561,7 +561,7 @@ icon = 'icons/obj/toy.dmi' icon_state = "spbox" storage_slots = 8 - can_hold = list("/obj/item/toy/snappop") + can_hold = list(/obj/item/toy/snappop) New() ..() for(var/i=1; i <= storage_slots; i++) @@ -621,7 +621,7 @@ item_state = "syringe_kit" foldable = /obj/item/stack/sheet/cardboard //BubbleWrap storage_slots=21 - can_hold = list("/obj/item/weapon/light/tube", "/obj/item/weapon/light/bulb") + can_hold = list(/obj/item/weapon/light/tube, /obj/item/weapon/light/bulb) max_combined_w_class = 21 use_to_pickup = 1 // for picking up broken bulbs, not that most people will try diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 168196f0480..c20cec521c6 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -48,7 +48,7 @@ icon_type = "donut" name = "donut box" storage_slots = 6 - can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/donut") + can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut) /obj/item/weapon/storage/fancy/donut_box/New() @@ -66,7 +66,7 @@ icon_type = "egg" name = "egg box" storage_slots = 12 - can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/egg") + can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/egg) /obj/item/weapon/storage/fancy/egg_box/New() ..() @@ -119,7 +119,7 @@ storage_slots = 6 icon_type = "crayon" can_hold = list( - "/obj/item/toy/crayon" + /obj/item/toy/crayon ) /obj/item/weapon/storage/fancy/crayons/New() @@ -163,12 +163,12 @@ slot_flags = SLOT_BELT storage_slots = 6 max_combined_w_class = 6 - can_hold = list("/obj/item/clothing/mask/cigarette", - "/obj/item/weapon/lighter", - "/obj/item/weapon/match") - cant_hold = list("/obj/item/clothing/mask/cigarette/cigar", - "/obj/item/clothing/mask/cigarette/pipe", - "/obj/item/weapon/lighter/zippo") + can_hold = list(/obj/item/clothing/mask/cigarette, + /obj/item/weapon/lighter, + /obj/item/weapon/match) + cant_hold = list(/obj/item/clothing/mask/cigarette/cigar, + /obj/item/clothing/mask/cigarette/pipe, + /obj/item/weapon/lighter/zippo) icon_type = "cigarette" var/list/unlaced_cigarettes = list() // Cigarettes that haven't received reagents yet var/default_reagents = list("nicotine" = 15) // List of reagents to pre-generate for each cigarette @@ -323,7 +323,7 @@ icon_state = "cig_paper_pack" storage_slots = 10 icon_type = "rolling paper" - can_hold = list("/obj/item/weapon/rollingpaper") + can_hold = list(/obj/item/weapon/rollingpaper) /obj/item/weapon/storage/fancy/rollingpapers/New() ..() @@ -345,7 +345,7 @@ icon_type = "vial" name = "vial storage box" storage_slots = 6 - can_hold = list("/obj/item/weapon/reagent_containers/glass/beaker/vial") + can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial) /obj/item/weapon/storage/fancy/vials/New() @@ -361,7 +361,7 @@ icon_state = "vialbox0" item_state = "syringe_kit" max_w_class = 3 - can_hold = list("/obj/item/weapon/reagent_containers/glass/beaker/vial") + can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial) max_combined_w_class = 14 //The sum of the w_classes of all the items in this storage item. storage_slots = 6 req_access = list(access_virology) diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 67d44c53b2d..5ab8713a49a 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -184,8 +184,8 @@ max_w_class = 4 max_combined_w_class = 21 storage_slots = 10 - can_hold = list("/obj/item/roller","/obj/item/weapon/bonesetter","/obj/item/weapon/bonegel", "/obj/item/weapon/scalpel", "/obj/item/weapon/hemostat", - "/obj/item/weapon/cautery", "/obj/item/weapon/retractor", "/obj/item/weapon/FixOVein", "/obj/item/weapon/surgicaldrill", "/obj/item/weapon/circular_saw") + can_hold = list(/obj/item/roller,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel, /obj/item/weapon/scalpel, /obj/item/weapon/hemostat, + /obj/item/weapon/cautery, /obj/item/weapon/retractor, /obj/item/weapon/FixOVein, /obj/item/weapon/surgicaldrill, /obj/item/weapon/circular_saw) /obj/item/weapon/storage/firstaid/surgery/New() ..() @@ -210,7 +210,7 @@ icon = 'icons/obj/chemical.dmi' item_state = "contsolid" w_class = 2 - can_hold = list("/obj/item/weapon/reagent_containers/food/pill","/obj/item/weapon/dice","/obj/item/weapon/paper") + can_hold = list(/obj/item/weapon/reagent_containers/food/pill, /obj/item/weapon/dice, /obj/item/weapon/paper) allow_quick_gather = 1 use_to_pickup = 1 storage_slots = 14 diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index e848eec1aca..9ae4020c84d 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -232,7 +232,7 @@ max_w_class = 8 anchored = 1 density = 0 - cant_hold = list("/obj/item/weapon/storage/secure/briefcase") + cant_hold = list(/obj/item/weapon/storage/secure/briefcase) /obj/item/weapon/storage/secure/safe/New() ..() diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index cdf123f2982..c212fcc476e 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -242,23 +242,15 @@ return 0 //Storage item is full if(can_hold.len) - var/ok = 0 - for(var/A in can_hold) - if(istype(W, text2path(A) )) - ok = 1 - break - if(!ok) + if(!is_type_in_typecache(W, can_hold)) if(!stop_messages) - if(istype(W, /obj/item/weapon/hand_labeler)) - return 0 to_chat(usr, "[src] cannot hold [W].") return 0 - for(var/A in cant_hold) //Check for specific items which this container can't hold. - if(istype(W, text2path(A) )) - if(!stop_messages) - to_chat(usr, "[src] cannot hold [W].") - return 0 + if(is_type_in_typecache(W, cant_hold)) //Check for specific items which this container can't hold. + if(!stop_messages) + to_chat(usr, "[src] cannot hold [W].") + return 0 if(W.w_class > max_w_class) if(!stop_messages) @@ -432,6 +424,8 @@ remove_from_storage(I, T) /obj/item/weapon/storage/New() + can_hold = typecacheof(can_hold) + cant_hold = typecacheof(cant_hold) if(allow_quick_empty) verbs += /obj/item/weapon/storage/verb/quick_empty @@ -455,7 +449,6 @@ src.closer.layer = 20 src.closer.plane = HUD_PLANE orient2hud() - return /obj/item/weapon/storage/Destroy() for(var/obj/O in contents) diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 74d4093beb5..cfdbe4d24fd 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -15,41 +15,35 @@ attack_verb = list("robusted") hitsound = 'sound/weapons/smash.ogg' - New() - ..() - if(src.type == /obj/item/weapon/storage/toolbox) - to_chat(world, "BAD: [src] ([src.type]) spawned at [src.x] [src.y] [src.z]") - qdel(src) - /obj/item/weapon/storage/toolbox/emergency name = "emergency toolbox" icon_state = "red" item_state = "toolbox_red" - New() - ..() - new /obj/item/weapon/crowbar/red(src) - new /obj/item/weapon/weldingtool/mini(src) - new /obj/item/weapon/extinguisher/mini(src) - if(prob(50)) - new /obj/item/device/flashlight(src) - else - new /obj/item/device/flashlight/flare(src) - new /obj/item/device/radio(src) +/obj/item/weapon/storage/toolbox/emergency/New() + ..() + new /obj/item/weapon/crowbar/red(src) + new /obj/item/weapon/weldingtool/mini(src) + new /obj/item/weapon/extinguisher/mini(src) + if(prob(50)) + new /obj/item/device/flashlight(src) + else + new /obj/item/device/flashlight/flare(src) + new /obj/item/device/radio(src) /obj/item/weapon/storage/toolbox/mechanical name = "mechanical toolbox" icon_state = "blue" item_state = "toolbox_blue" - New() - ..() - new /obj/item/weapon/screwdriver(src) - new /obj/item/weapon/wrench(src) - new /obj/item/weapon/weldingtool(src) - new /obj/item/weapon/crowbar(src) - new /obj/item/device/analyzer(src) - new /obj/item/weapon/wirecutters(src) +/obj/item/weapon/storage/toolbox/mechanical/New() + ..() + new /obj/item/weapon/screwdriver(src) + new /obj/item/weapon/wrench(src) + new /obj/item/weapon/weldingtool(src) + new /obj/item/weapon/crowbar(src) + new /obj/item/device/analyzer(src) + new /obj/item/weapon/wirecutters(src) /obj/item/weapon/storage/toolbox/mechanical/greytide flags = NODROP @@ -59,19 +53,19 @@ icon_state = "yellow" item_state = "toolbox_yellow" - New() - ..() - var/color = pick("red","yellow","green","blue","pink","orange","cyan","white") - new /obj/item/weapon/screwdriver(src) - new /obj/item/weapon/wirecutters(src) - new /obj/item/device/t_scanner(src) - new /obj/item/weapon/crowbar(src) - new /obj/item/stack/cable_coil(src,30,color) - new /obj/item/stack/cable_coil(src,30,color) - if(prob(5)) - new /obj/item/clothing/gloves/color/yellow(src) - else - new /obj/item/stack/cable_coil(src,30,color) +/obj/item/weapon/storage/toolbox/electrical/New() + ..() + var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white") + new /obj/item/weapon/screwdriver(src) + new /obj/item/weapon/wirecutters(src) + new /obj/item/device/t_scanner(src) + new /obj/item/weapon/crowbar(src) + new /obj/item/stack/cable_coil(src, 30, pickedcolor) + new /obj/item/stack/cable_coil(src, 30, pickedcolor) + if(prob(5)) + new /obj/item/clothing/gloves/color/yellow(src) + else + new /obj/item/stack/cable_coil(src, 30, pickedcolor) /obj/item/weapon/storage/toolbox/syndicate name = "suspicious looking toolbox" @@ -82,12 +76,47 @@ force = 15.0 throwforce = 18.0 - New() - ..() - new /obj/item/weapon/screwdriver(src, "red") - new /obj/item/weapon/wrench(src) - new /obj/item/weapon/weldingtool/largetank(src) - new /obj/item/weapon/crowbar/red(src) - new /obj/item/weapon/wirecutters(src, "red") - new /obj/item/device/multitool(src) - new /obj/item/clothing/gloves/combat(src) \ No newline at end of file +/obj/item/weapon/storage/toolbox/syndicate/New() + ..() + new /obj/item/weapon/screwdriver(src, "red") + new /obj/item/weapon/wrench(src) + new /obj/item/weapon/weldingtool/largetank(src) + new /obj/item/weapon/crowbar/red(src) + new /obj/item/weapon/wirecutters(src, "red") + new /obj/item/device/multitool(src) + new /obj/item/clothing/gloves/combat(src) + +/obj/item/weapon/storage/toolbox/drone + name = "mechanical toolbox" + icon_state = "blue" + item_state = "toolbox_blue" + +/obj/item/weapon/storage/toolbox/drone/New() + ..() + var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white") + new /obj/item/weapon/screwdriver(src) + new /obj/item/weapon/wrench(src) + new /obj/item/weapon/weldingtool(src) + new /obj/item/weapon/crowbar(src) + new /obj/item/stack/cable_coil(src, 30, pickedcolor) + new /obj/item/weapon/wirecutters(src) + new /obj/item/device/multitool(src) + +/obj/item/weapon/storage/toolbox/brass + name = "brass box" + desc = "A huge brass box with several indentations in its surface." + icon_state = "brassbox" + item_state = null + w_class = WEIGHT_CLASS_HUGE + max_w_class = WEIGHT_CLASS_NORMAL + max_combined_w_class = 28 + storage_slots = 28 + attack_verb = list("robusted", "crushed", "smashed") + +/obj/item/weapon/storage/toolbox/brass/prefilled/New() + ..() + new /obj/item/weapon/screwdriver/brass(src) + new /obj/item/weapon/wirecutters/brass(src) + new /obj/item/weapon/wrench/brass(src) + new /obj/item/weapon/crowbar/brass(src) + new /obj/item/weapon/weldingtool/experimental/brass(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index e3f21a93d30..125d97f132b 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -88,7 +88,7 @@ /obj/item/weapon/storage/box/syndie_kit/space name = "Boxed Space Suit and Helmet" - can_hold = list("/obj/item/clothing/suit/space/syndicate/black/red", "/obj/item/clothing/head/helmet/space/syndicate/black/red") + can_hold = list(/obj/item/clothing/suit/space/syndicate/black/red, /obj/item/clothing/head/helmet/space/syndicate/black/red) max_w_class = 3 /obj/item/weapon/storage/box/syndie_kit/space/New() @@ -99,7 +99,7 @@ /obj/item/weapon/storage/box/syndie_kit/hardsuit name = "Boxed Blood Red Suit and Helmet" - can_hold = list("/obj/item/clothing/suit/space/rig/syndi", "/obj/item/clothing/head/helmet/space/rig/syndi") + can_hold = list(/obj/item/clothing/suit/space/rig/syndi, /obj/item/clothing/head/helmet/space/rig/syndi) max_w_class = 3 /obj/item/weapon/storage/box/syndie_kit/hardsuit/New() @@ -110,7 +110,7 @@ /obj/item/weapon/storage/box/syndie_kit/elite_hardsuit name = "Boxed Elite Syndicate Hardsuit and Helmet" - can_hold = list("/obj/item/clothing/suit/space/rig/syndi/elite", "/obj/item/clothing/head/helmet/space/rig/syndi/elite") + can_hold = list(/obj/item/clothing/suit/space/rig/syndi/elite, /obj/item/clothing/head/helmet/space/rig/syndi/elite) max_w_class = 3 /obj/item/weapon/storage/box/syndie_kit/elite_hardsuit/New() @@ -120,7 +120,7 @@ /obj/item/weapon/storage/box/syndie_kit/shielded_hardsuit name = "Boxed Shielded Syndicate Hardsuit and Helmet" - can_hold = list("/obj/item/clothing/suit/space/rig/shielded/syndi", "/obj/item/clothing/head/helmet/space/rig/shielded/syndi") + can_hold = list(/obj/item/clothing/suit/space/rig/shielded/syndi, /obj/item/clothing/head/helmet/space/rig/shielded/syndi) max_w_class = 4 /obj/item/weapon/storage/box/syndie_kit/shielded_hardsuit/New() diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 5bc1ae65e84..ad022a9e2c4 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -7,25 +7,25 @@ w_class = 2 burn_state = FLAMMABLE can_hold = list( - "/obj/item/weapon/spacecash", - "/obj/item/weapon/card", - "/obj/item/clothing/mask/cigarette", - "/obj/item/device/flashlight/pen", - "/obj/item/seeds", - "/obj/item/stack/medical", - "/obj/item/toy/crayon", - "/obj/item/weapon/coin", - "/obj/item/weapon/dice", - "/obj/item/weapon/disk", - "/obj/item/weapon/implanter", - "/obj/item/weapon/lighter", - "/obj/item/weapon/match", - "/obj/item/weapon/paper", - "/obj/item/weapon/pen", - "/obj/item/weapon/photo", - "/obj/item/weapon/reagent_containers/dropper", - "/obj/item/weapon/screwdriver", - "/obj/item/weapon/stamp") + /obj/item/weapon/spacecash, + /obj/item/weapon/card, + /obj/item/clothing/mask/cigarette, + /obj/item/device/flashlight/pen, + /obj/item/seeds, + /obj/item/stack/medical, + /obj/item/toy/crayon, + /obj/item/weapon/coin, + /obj/item/weapon/dice, + /obj/item/weapon/disk, + /obj/item/weapon/implanter, + /obj/item/weapon/lighter, + /obj/item/weapon/match, + /obj/item/weapon/paper, + /obj/item/weapon/pen, + /obj/item/weapon/photo, + /obj/item/weapon/reagent_containers/dropper, + /obj/item/weapon/screwdriver, + /obj/item/weapon/stamp) slot_flags = SLOT_ID var/obj/item/weapon/card/id/front_id = null diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 7e0c7296fc9..1816e6287e6 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -22,60 +22,137 @@ slot_flags = SLOT_BELT force = 5 throwforce = 7 - w_class = 2 + usesound = 'sound/items/Ratchet.ogg' + w_class = WEIGHT_CLASS_SMALL materials = list(MAT_METAL=150) origin_tech = "materials=1;engineering=1" attack_verb = list("bashed", "battered", "bludgeoned", "whacked") + toolspeed = 1 + +/obj/item/weapon/wrench/suicide_act(mob/user) + user.visible_message("[user] is beating themself to death with [src]! It looks like they're trying to commit suicide!") + playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1) + return (BRUTELOSS) + +/obj/item/weapon/wrench/cyborg + name = "automatic wrench" + desc = "An advanced robotic wrench. Can be found in construction cyborgs." + toolspeed = 0.5 + +/obj/item/weapon/wrench/brass + name = "brass wrench" + desc = "A brass wrench. It's faintly warm to the touch." + icon_state = "wrench_brass" + toolspeed = 0.5 + +/obj/item/weapon/wrench/abductor + name = "alien wrench" + desc = "A polarized wrench. It causes anything placed between the jaws to turn." + icon = 'icons/obj/abductor.dmi' + icon_state = "wrench" + usesound = 'sound/effects/EMPulse.ogg' + toolspeed = 0.1 + origin_tech = "materials=5;engineering=5;abductor=3" + +/obj/item/weapon/wrench/power + name = "Hand Drill" + desc = "A simple powered drill with a bolt bit" + icon_state = "drill_bolt" + item_state = "drill" + usesound = 'sound/items/drill_use.ogg' + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) + origin_tech = "materials=2;engineering=2" //done for balance reasons, making them high value for research, but harder to get + force = 8 //might or might not be too high, subject to change + throwforce = 8 + attack_verb = list("drilled", "screwed", "jabbed") + toolspeed = 0.25 + +/obj/item/weapon/wrench/power/attack_self(mob/user) + playsound(get_turf(user),'sound/items/change_drill.ogg', 50, 1) + var/obj/item/weapon/wirecutters/power/s_drill = new /obj/item/weapon/screwdriver/power + to_chat(user, "You attach the screw driver bit to [src].") + qdel(src) + user.put_in_active_hand(s_drill) + +/obj/item/weapon/wrench/power/suicide_act(mob/user) + user.visible_message("[user] is pressing [src] against their head! It looks like they're trying to commit suicide!") + return (BRUTELOSS) + +/obj/item/weapon/wrench/medical + name = "medical wrench" + desc = "A medical wrench with common (medical?) uses. Can be found in your hand." + icon_state = "wrench_medical" + force = 2 //MEDICAL + throwforce = 4 + origin_tech = "materials=1;engineering=1;biotech=3" + attack_verb = list("wrenched", "medicaled", "tapped", "jabbed", "whacked") + +/obj/item/weapon/wrench/medical/suicide_act(mob/user) + user.visible_message("[user] is praying to the medical wrench to take their soul. It looks like they're trying to commit suicide!") + // TODO Make them glow with the power of the M E D I C A L W R E N C H + // during their ascension + + // Stun stops them from wandering off + user.Stun(5) + playsound(loc, 'sound/effects/pray.ogg', 50, 1, -1) + + // Let the sound effect finish playing + sleep(20) + + if(!user) + return + + for(var/obj/item/W in user) + user.unEquip(W) + + var/obj/item/weapon/wrench/medical/W = new /obj/item/weapon/wrench/medical(loc) + W.add_fingerprint(user) + W.desc += " For some reason, it reminds you of [user.name]." + + if(!user) + return + + user.dust() + return OXYLOSS //Screwdriver /obj/item/weapon/screwdriver name = "screwdriver" desc = "You can be totally screwy with this." icon = 'icons/obj/tools.dmi' - icon_state = "screwdriver" + icon_state = null flags = CONDUCT slot_flags = SLOT_BELT force = 5 - w_class = 1 + w_class = WEIGHT_CLASS_TINY throwforce = 5 throw_speed = 3 throw_range = 5 materials = list(MAT_METAL=75) attack_verb = list("stabbed") hitsound = 'sound/weapons/bladeslice.ogg' + usesound = 'sound/items/Screwdriver.ogg' + toolspeed = 1 + +/obj/item/weapon/screwdriver/nuke + name = "screwdriver" + desc = "A screwdriver with an ultra thin tip." + icon_state = "screwdriver_nuke" + toolspeed = 0.5 /obj/item/weapon/screwdriver/suicide_act(mob/user) - to_chat(viewers(user), pick("[user] is stabbing the [name] into \his temple! It looks like \he's trying to commit suicide.", \ - "[user] is stabbing the [name] into \his heart! It looks like \he's trying to commit suicide.")) + user.visible_message("[user] is stabbing [src] into their [pick("temple", "heart")]! It looks like they're trying to commit suicide!") return(BRUTELOSS) -/obj/item/weapon/screwdriver/New() - switch(pick("red","blue","purple","brown","green","cyan","yellow")) - if("red") - icon_state = "screwdriver2" - item_state = "screwdriver" - if("blue") - icon_state = "screwdriver" - item_state = "screwdriver_blue" - if("purple") - icon_state = "screwdriver3" - item_state = "screwdriver_purple" - if("brown") - icon_state = "screwdriver4" - item_state = "screwdriver_brown" - if("green") - icon_state = "screwdriver5" - item_state = "screwdriver_green" - if("cyan") - icon_state = "screwdriver6" - item_state = "screwdriver_cyan" - if("yellow") - icon_state = "screwdriver7" - item_state = "screwdriver_yellow" +/obj/item/weapon/screwdriver/New(loc, var/param_color = null) + ..() + if(!icon_state) + if(!param_color) + param_color = pick("red","blue","pink","brown","green","cyan","yellow") + icon_state = "screwdriver_[param_color]" - if(prob(75)) + if (prob(75)) src.pixel_y = rand(0, 16) - return /obj/item/weapon/screwdriver/attack(mob/living/carbon/M, mob/living/carbon/user) if(!istype(M) || user.a_intent == I_HELP) @@ -85,49 +162,150 @@ if((CLUMSY in user.mutations) && prob(50)) M = user return eyestab(M,user) + +/obj/item/weapon/screwdriver/brass + name = "brass screwdriver" + desc = "A screwdriver made of brass. The handle feels freezing cold." + icon_state = "screwdriver_brass" + toolspeed = 0.5 + +/obj/item/weapon/screwdriver/abductor + name = "alien screwdriver" + desc = "An ultrasonic screwdriver." + icon = 'icons/obj/abductor.dmi' + icon_state = "screwdriver" + usesound = 'sound/items/PSHOOM.ogg' + toolspeed = 0.1 + +/obj/item/weapon/screwdriver/power + name = "Hand Drill" + desc = "A simple hand drill with a screwdriver bit attached." + icon_state = "drill_screw" + item_state = "drill" + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) + origin_tech = "materials=2;engineering=2" //done for balance reasons, making them high value for research, but harder to get + force = 8 //might or might not be too high, subject to change + throwforce = 8 + throw_speed = 2 + throw_range = 3//it's heavier than a screw driver/wrench, so it does more damage, but can't be thrown as far + attack_verb = list("drilled", "screwed", "jabbed","whacked") + hitsound = 'sound/items/drill_hit.ogg' + usesound = 'sound/items/drill_use.ogg' + toolspeed = 0.25 + +/obj/item/weapon/screwdriver/power/suicide_act(mob/user) + user.visible_message("[user] is putting [src] to their temple. It looks like they're trying to commit suicide!") + return(BRUTELOSS) + +/obj/item/weapon/screwdriver/power/attack_self(mob/user) + playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, 1) + var/obj/item/weapon/wrench/power/b_drill = new /obj/item/weapon/wrench/power + user << "You attach the bolt driver bit to [src]." + qdel(src) + user.put_in_active_hand(b_drill) + +/obj/item/weapon/screwdriver/cyborg + name = "powered screwdriver" + desc = "An electrical screwdriver, designed to be both precise and quick." + usesound = 'sound/items/drill_use.ogg' + toolspeed = 0.5 //Wirecutters /obj/item/weapon/wirecutters name = "wirecutters" desc = "This cuts wires." icon = 'icons/obj/tools.dmi' - icon_state = "cutters" + icon_state = null flags = CONDUCT slot_flags = SLOT_BELT force = 6 throw_speed = 3 throw_range = 7 - w_class = 2 + w_class = WEIGHT_CLASS_SMALL materials = list(MAT_METAL=80) origin_tech = "materials=1;engineering=1" attack_verb = list("pinched", "nipped") hitsound = 'sound/items/Wirecutter.ogg' + usesound = 'sound/items/Wirecutter.ogg' sharp = 1 edge = 1 + toolspeed = 1 /obj/item/weapon/wirecutters/New(loc, param_color = null) ..() - if((!param_color && prob(50)) || param_color == "yellow") - icon_state = "cutters-y" - item_state = "cutters_yellow" + if(!icon_state) + if(!param_color) + param_color = pick("yellow", "red") + icon_state = "cutters_[param_color]" -/obj/item/weapon/wirecutters/attack(mob/living/carbon/human/H, mob/user) - if(istype(H) && H.handcuffed) - if(istype(H.handcuffed, /obj/item/weapon/restraints/handcuffs/cable)) - usr.visible_message("\The [usr] cuts \the [H]'s restraints with \the [src]!",\ - "You cut \the [H]'s restraints with \the [src]!",\ - "You hear cable being cut.") - H.handcuffed = null - if(H.buckled && H.buckled.buckle_requires_restraints) - H.buckled.unbuckle_mob() - H.update_handcuffed() - return +/obj/item/weapon/wirecutters/attack(mob/living/carbon/C, mob/user) + if(istype(C) && C.handcuffed && istype(C.handcuffed, /obj/item/weapon/restraints/handcuffs/cable)) + user.visible_message("[user] cuts [C]'s restraints with [src]!") + qdel(C.handcuffed) + C.handcuffed = null + if(C.buckled && C.buckled.buckle_requires_restraints) + C.buckled.unbuckle_mob(C) + C.update_handcuffed() + return else ..() + +/obj/item/weapon/wirecutters/suicide_act(mob/user) + user.visible_message("[user] is cutting at their arteries with [src]! It looks like they're trying to commit suicide!") + playsound(loc, usesound, 50, 1, -1) + return (BRUTELOSS) + +/obj/item/weapon/wirecutters/brass + name = "brass wirecutters" + desc = "A pair of wirecutters made of brass. The handle feels freezing cold to the touch." + icon_state = "cutters_brass" + toolspeed = 0.5 + +/obj/item/weapon/wirecutters/abductor + name = "alien wirecutters" + desc = "Extremely sharp wirecutters, made out of a silvery-green metal." + icon = 'icons/obj/abductor.dmi' + icon_state = "cutters" + toolspeed = 0.1 + origin_tech = "materials=5;engineering=4;abductor=3" + +/obj/item/weapon/wirecutters/cyborg + name = "wirecutters" + desc = "This cuts wires." + toolspeed = 0.5 + +/obj/item/weapon/wirecutters/power + name = "Jaws of Life" + desc = "A set of jaws of life, the magic of science has managed to fit it down into a device small enough to fit in a tool belt. It's fitted with a cutting head." + icon_state = "jaws_cutter" + item_state = "jawsoflife" + origin_tech = "materials=2;engineering=2" + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) + usesound = 'sound/items/jaws_cut.ogg' + toolspeed = 0.25 + +/obj/item/weapon/wirecutters/power/suicide_act(mob/user) + user.visible_message("[user] is wrapping \the [src] around their neck. It looks like they're trying to rip their head off!") + playsound(loc, 'sound/items/jaws_cut.ogg', 50, 1, -1) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/obj/item/organ/external/head/head = H.organs_by_name["head"] + if(head) + head.droplimb(0, DROPLIMB_BLUNT, FALSE, TRUE) + playsound(loc,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1) + return (BRUTELOSS) + +/obj/item/weapon/wirecutters/power/attack_self(mob/user) + playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1) + var/obj/item/weapon/crowbar/power/pryjaws = new /obj/item/weapon/crowbar/power + to_chat(user, "You attach the pry jaws to [src].") + qdel(src) + user.put_in_active_hand(pryjaws) //Welding Tool /obj/item/weapon/weldingtool name = "welding tool" + desc = "A standard edition welder provided by Nanotrasen." icon = 'icons/obj/tools.dmi' icon_state = "welder" item_state = "welder" @@ -137,15 +315,21 @@ throwforce = 5 throw_speed = 3 throw_range = 5 - w_class = 2 + hitsound = "swing_hit" + usesound = 'sound/items/Welder.ogg' + var/acti_sound = 'sound/items/WelderActivate.ogg' + var/deac_sound = 'sound/items/WelderDeactivate.ogg' + w_class = WEIGHT_CLASS_SMALL materials = list(MAT_METAL=70, MAT_GLASS=30) - origin_tech = "engineering=1" + origin_tech = "engineering=1;plasmatech=1" + toolspeed = 1 var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2) var/status = 1 //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower) var/max_fuel = 20 //The max amount of fuel the welder can hold var/change_icons = 1 var/can_off_process = 0 var/light_intensity = 2 //how powerful the emitted light is when used. + var/nextrefueltick = 0 /obj/item/weapon/weldingtool/New() ..() @@ -158,7 +342,7 @@ to_chat(user, "It contains [get_fuel()] unit\s of fuel out of [max_fuel].") /obj/item/weapon/weldingtool/suicide_act(mob/user) - user.visible_message("[user] welds \his every orifice closed! It looks like \he's trying to commit suicide..") + user.visible_message("[user] welds their every orifice closed! It looks like they're trying to commit suicide!") return (FIRELOSS) /obj/item/weapon/weldingtool/proc/update_torch() @@ -179,13 +363,6 @@ icon_state = "[initial(icon_state)][ratio]" update_torch() -/obj/item/weapon/weldingtool/attackby(obj/item/I, mob/user, params) - if(isscrewdriver(I)) - flamethrower_screwdriver(I, user) - if(istype(I, /obj/item/stack/rods)) - flamethrower_rods(I, user) - ..() - /obj/item/weapon/weldingtool/process() switch(welding) if(0) @@ -211,6 +388,14 @@ location = get_turf(M) if(isturf(location)) location.hotspot_expose(700, 5) + +/obj/item/weapon/weldingtool/attackby(obj/item/I, mob/user, params) + if(isscrewdriver(I)) + flamethrower_screwdriver(I, user) + else if(istype(I, /obj/item/stack/rods)) + flamethrower_rods(I, user) + else + ..() /obj/item/weapon/weldingtool/attack(mob/M, mob/user) if(ishuman(M)) @@ -233,7 +418,7 @@ if(!do_mob(user, H, 10)) return 1 if(remove_fuel(1,null)) - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) + playsound(src.loc, usesound, 50, 1) S.heal_damage(15,0,0,1) user.visible_message("\The [user] patches some dents on \the [M]'s [S.name] with \the [src].") else if(S.open != 2) @@ -250,10 +435,13 @@ /obj/item/weapon/weldingtool/afterattack(atom/O, mob/user, proximity) if(!proximity) return + if(welding) remove_fuel(1) var/turf/location = get_turf(user) location.hotspot_expose(700, 50, 1) + if(get_fuel() <= 0) + set_light(0) if(isliving(O)) var/mob/living/L = O @@ -262,7 +450,10 @@ log_game("[key_name(user)] set [key_name(L)] on fire") /obj/item/weapon/weldingtool/attack_self(mob/user) - toggle(user) + switched_on(user) + if(welding) + set_light(light_intensity) + update_icon() //Returns the amount of fuel in the welder @@ -272,17 +463,17 @@ //Removes fuel from the welding tool. If a mob is passed, it will try to flash the mob's eyes. This should probably be renamed to use() /obj/item/weapon/weldingtool/proc/remove_fuel(amount = 1, mob/living/M = null) if(!welding || !check_fuel()) - return 0 + return FALSE if(get_fuel() >= amount) reagents.remove_reagent("fuel", amount) check_fuel() if(M) M.flash_eyes(light_intensity) - return 1 + return TRUE else if(M) to_chat(M, "\blue You need more welding fuel to complete this task.") - return 0 + return FALSE //Returns whether or not the welding tool is currently on. /obj/item/weapon/weldingtool/proc/isOn() @@ -291,43 +482,48 @@ //Turns off the welder if there is no more fuel (does this really need to be its own proc?) /obj/item/weapon/weldingtool/proc/check_fuel(mob/user) if(get_fuel() <= 0 && welding) - toggle(user, 1) + switched_on(user) update_icon() //mob icon update if(ismob(loc)) var/mob/M = loc M.update_inv_r_hand(0) M.update_inv_l_hand(0) - return 0 return 1 -//Toggles the welder off and on -/obj/item/weapon/weldingtool/proc/toggle(mob/user, message = 0) +//Switches the welder on +/obj/item/weapon/weldingtool/proc/switched_on(mob/user) if(!status) - to_chat(user, "[src] can't be turned on while unsecured!") + to_chat(user, "span class='warning'>[src] can't be turned on while unsecured!") return welding = !welding if(welding) if(get_fuel() >= 1) to_chat(user, "You switch [src] on.") + playsound(loc, acti_sound, 50, 1) force = 15 damtype = "fire" hitsound = 'sound/items/welder.ogg' update_icon() - processing_objects |= src + processing_objects.Add(src) else to_chat(user, "You need more fuel!") - welding = 0 + switched_off(user) else - if(!message) - to_chat(user, "You switch [src] off.") - else - visible_message("[src] shuts off!") - force = 3 - damtype = "brute" - hitsound = "swing_hit" - update_icon() + to_chat(user, "You switch [src] off.") + playsound(loc, deac_sound, 50, 1) + switched_off(user) + +//Switches the welder off +/obj/item/weapon/weldingtool/proc/switched_off(mob/user) + welding = 0 + set_light(0) + + force = 3 + damtype = "brute" + hitsound = "swing_hit" + update_icon() /obj/item/weapon/weldingtool/proc/flamethrower_screwdriver(obj/item/I, mob/user) if(welding) @@ -354,7 +550,6 @@ user.put_in_hands(F) else to_chat(user, "You need one rod to start building a flamethrower!") - return /obj/item/weapon/weldingtool/largetank name = "Industrial Welding Tool" @@ -362,9 +557,12 @@ icon_state = "indwelder" max_fuel = 40 materials = list(MAT_METAL=70, MAT_GLASS=60) - origin_tech = "engineering=2" + origin_tech = "engineering=2;plasmatech=2" /obj/item/weapon/weldingtool/largetank/cyborg + name = "integrated welding tool" + desc = "An advanced welder designed to be used in robotic systems." + toolspeed = 0.5 /obj/item/weapon/weldingtool/largetank/flamethrower_screwdriver() return @@ -374,12 +572,27 @@ desc = "A miniature welder used during emergencies." icon_state = "miniwelder" max_fuel = 10 - w_class = 1 + w_class = WEIGHT_CLASS_TINY materials = list(MAT_METAL=30, MAT_GLASS=10) change_icons = 0 /obj/item/weapon/weldingtool/mini/flamethrower_screwdriver() return + +/obj/item/weapon/weldingtool/abductor + name = "alien welding tool" + desc = "An alien welding tool. Whatever fuel it uses, it never runs out." + icon = 'icons/obj/abductor.dmi' + icon_state = "welder" + toolspeed = 0.1 + light_intensity = 0 + change_icons = 0 + origin_tech = "plasmatech=5;engineering=5;abductor=3" + +/obj/item/weapon/weldingtool/abductor/process() + if(get_fuel() <= max_fuel) + reagents.add_reagent("welding_fuel", 1) + ..() /obj/item/weapon/weldingtool/hugetank name = "Upgraded Welding Tool" @@ -387,9 +600,8 @@ icon_state = "upindwelder" item_state = "upindwelder" max_fuel = 80 - w_class = 3 materials = list(MAT_METAL=70, MAT_GLASS=120) - origin_tech = "engineering=3" + origin_tech = "engineering=3;plasmatech=2" /obj/item/weapon/weldingtool/experimental name = "Experimental Welding Tool" @@ -397,25 +609,25 @@ icon_state = "exwelder" item_state = "exwelder" max_fuel = 40 - w_class = 3 materials = list(MAT_METAL=70, MAT_GLASS=120) - origin_tech = "engineering=4;plasmatech=3" + origin_tech = "materials=4;engineering=4;bluespace=3;plasmatech=4" change_icons = 0 can_off_process = 1 light_intensity = 1 + toolspeed = 0.5 var/last_gen = 0 + +/obj/item/weapon/weldingtool/experimental/brass + name = "brass welding tool" + desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch." + icon_state = "brasswelder" + item_state = "brasswelder" -/obj/item/weapon/weldingtool/experimental/proc/fuel_gen() - if(!welding && !last_gen) - last_gen = 1 - reagents.add_reagent("fuel",1) - spawn(10) - last_gen = 0 - -/obj/item/weapon/weldingtool/experimental/process() +obj/item/weapon/weldingtool/experimental/process() ..() - if(reagents.total_volume < max_fuel) - fuel_gen() + if(get_fuel() < max_fuel && nextrefueltick < world.time) + nextrefueltick = world.time + 10 + reagents.add_reagent("fuel", 1) //Crowbar /obj/item/weapon/crowbar @@ -423,37 +635,87 @@ desc = "A small crowbar. This handy tool is useful for lots of things, such as prying floor tiles or opening unpowered doors." icon = 'icons/obj/tools.dmi' icon_state = "crowbar" + item_state = "crowbar" + usesound = 'sound/items/Crowbar.ogg' flags = CONDUCT slot_flags = SLOT_BELT force = 5 throwforce = 7 item_state = "crowbar" - w_class = 2 materials = list(MAT_METAL=50) - origin_tech = "engineering=1" + origin_tech = "engineering=1;combat=1" attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") + toolspeed = 1 /obj/item/weapon/crowbar/red - icon_state = "red_crowbar" - item_state = "crowbar_red" + icon_state = "crowbar_red" + force = 8 + +/obj/item/weapon/crowbar/brass + name = "brass crowbar" + desc = "A brass crowbar. It feels faintly warm to the touch." + icon_state = "crowbar_brass" + toolspeed = 0.5 + +/obj/item/weapon/crowbar/abductor + name = "alien crowbar" + desc = "A hard-light crowbar. It appears to pry by itself, without any effort required." + icon = 'icons/obj/abductor.dmi' + usesound = 'sound/weapons/sonic_jackhammer.ogg' + icon_state = "crowbar" + toolspeed = 0.1 + origin_tech = "combat=4;engineering=4;abductor=3" /obj/item/weapon/crowbar/large name = "crowbar" desc = "It's a big crowbar. It doesn't fit in your pockets, because it's big." force = 12 - w_class = 3 + w_class = WEIGHT_CLASS_NORMAL throw_speed = 3 throw_range = 3 materials = list(MAT_METAL=70) icon_state = "crowbar_large" + item_state = "crowbar" + toolspeed = 0.5 + +/obj/item/weapon/crowbar/cyborg + name = "hydraulic crowbar" + desc = "A hydraulic prying tool, compact but powerful. Designed to replace crowbar in construction cyborgs." + usesound = 'sound/items/jaws_pry.ogg' + force = 10 + toolspeed = 0.5 +/obj/item/weapon/crowbar/power + name = "Jaws of Life" + desc = "A set of jaws of life, the magic of science has managed to fit it down into a device small enough to fit in a tool belt. It's fitted with a prying head" + icon_state = "jaws_pry" + item_state = "jawsoflife" + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) + origin_tech = "materials=2;engineering=2" + usesound = 'sound/items/jaws_pry.ogg' + force = 15 + toolspeed = 0.25 + +/obj/item/weapon/crowbar/power/suicide_act(mob/user) + user.visible_message("[user] is putting their head in [src], it looks like they're trying to commit suicide!") + playsound(loc, 'sound/items/jaws_pry.ogg', 50, 1, -1) + return (BRUTELOSS) + +/obj/item/weapon/crowbar/power/attack_self(mob/user) + playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1) + var/obj/item/weapon/wirecutters/power/cutjaws = new /obj/item/weapon/wirecutters/power + to_chat(user, "You attach the cutting jaws to [src].") + qdel(src) + user.put_in_active_hand(cutjaws) + +// Conversion kit /obj/item/weapon/conversion_kit name = "\improper Revolver Conversion Kit" desc = "A professional conversion kit used to convert any knock off revolver into the real deal capable of shooting lethal .357 rounds without the possibility of catastrophic failure" icon = 'icons/obj/weapons.dmi' icon_state = "kit" flags = CONDUCT - w_class = 2 + w_class = WEIGHT_CLASS_SMALL origin_tech = "combat=2" var/open = 0 @@ -466,5 +728,5 @@ /obj/item/weapon/conversion_kit/attack_self(mob/user) open = !open - to_chat(user, "\blue You [open?"open" : "close"] the conversion kit.") + to_chat(user, "You [open ? "open" : "close"] the conversion kit.") update_icon() diff --git a/code/modules/arcade/mob_hunt/mob_cards.dm b/code/modules/arcade/mob_hunt/mob_cards.dm index 16aea7ba55f..0479644ad85 100644 --- a/code/modules/arcade/mob_hunt/mob_cards.dm +++ b/code/modules/arcade/mob_hunt/mob_cards.dm @@ -35,7 +35,7 @@ /obj/item/weapon/storage/box/nanomob_booster_pack name = "Nano-Mob Hunter Trading Card Booster Pack" desc = "Contains 6 random Nano-Mob Hunter Trading Cards. May contain a holographic card!" - can_hold = list("/obj/item/weapon/nanomob_card") + can_hold = list(/obj/item/weapon/nanomob_card) /obj/item/weapon/storage/box/nanomob_booster_pack/New() ..() diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index aea6cf139f3..72fbdbc9b92 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -103,8 +103,7 @@ /obj/item/clothing/accessory/storage/knifeharness/New() ..() hold.max_combined_w_class = 4 - hold.can_hold = list("/obj/item/weapon/hatchet/unathiknife",\ - "/obj/item/weapon/kitchen/knife") + hold.can_hold = list(/obj/item/weapon/hatchet/unathiknife, /obj/item/weapon/kitchen/knife) new /obj/item/weapon/hatchet/unathiknife(hold) new /obj/item/weapon/hatchet/unathiknife(hold) \ No newline at end of file diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index c9365c57da4..7ac5d86a9d3 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -720,7 +720,7 @@ icon_state = "implant" max_w_class = 3 storage_slots = 2 - can_hold = list("/obj/item/weapon/mining_drone_cube","/obj/item/weapon/weldingtool/hugetank") + can_hold = list(/obj/item/weapon/mining_drone_cube, /obj/item/weapon/weldingtool/hugetank) /obj/item/weapon/storage/box/drone_kit/New() ..() diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm index 9e4d268281c..2b671317b64 100644 --- a/code/modules/mining/ore.dm +++ b/code/modules/mining/ore.dm @@ -192,8 +192,12 @@ quality = 1 return ..() + +/obj/item/weapon/twohanded/required/gibtonite/attack_ghost(mob/user) + if(wires) + wires.Interact(user) -/obj/item/weapon/twohanded/required/gibtonite/attack_self(user) +/obj/item/weapon/twohanded/required/gibtonite/attack_self(mob/user) if(wires) wires.Interact(user) else diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 3df660dc117..84664abb465 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -44,6 +44,10 @@ // /obj/item/weapon/paper_bundle, /obj/item/weapon/card/id ) + +/obj/item/weapon/gripper/New() + ..() + can_hold = typecacheof(can_hold) /obj/item/weapon/gripper/attack_self(mob/user as mob) if(wrapped) @@ -118,10 +122,9 @@ //Check if the item is blacklisted. var/grab = 0 - for(var/typepath in can_hold) - if(istype(I,typepath)) + if(can_hold.len) + if(is_type_in_typecache(I, can_hold)) grab = 1 - break //We can grab the item, finally. if(grab) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index d3aaaaea909..6c555e0f511 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -945,9 +945,11 @@ var/list/robot_verbs_default = list( adjustStaminaLoss(damage) updatehealth() +/mob/living/silicon/robot/attack_ghost(mob/user) + if(wiresexposed) + wires.Interact(user) /mob/living/silicon/robot/attack_hand(mob/user) - add_fingerprint(user) if(opened && !wiresexposed && (!istype(user, /mob/living/silicon))) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index ef0be0f4568..871c8694725 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -311,7 +311,7 @@ else dat += "Removed
" - wires.ui_interact(user) + wires.Interact(user) else dat += "
The bot is in maintenance mode and cannot be controlled.

" diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index c24dec2413f..afca7fcd953 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -109,7 +109,7 @@ icon = 'icons/obj/items.dmi' icon_state = "album" item_state = "briefcase" - can_hold = list("/obj/item/weapon/photo") + can_hold = list(/obj/item/weapon/photo) burn_state = FLAMMABLE /obj/item/weapon/storage/photo_album/MouseDrop(obj/over_object as obj) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 56da9cf9b07..b44673b4966 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -745,16 +745,16 @@ beenhit += 1 return -/obj/machinery/power/apc/attack_ghost(user as mob) - if(stat & (BROKEN|MAINT)) - return +/obj/machinery/power/apc/attack_ghost(mob/user) + if(wiresexposed) + wires.Interact(user) return ui_interact(user) /obj/machinery/power/apc/interact(mob/user) if(!user) return - if(wiresexposed /*&& (!istype(user, /mob/living/silicon))*/) //Commented out the typecheck to allow engiborgs to repair damaged apcs. + if(wiresexposed) wires.Interact(user) return ui_interact(user) diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm index 0f23b2a6532..b0e895c3edb 100644 --- a/code/modules/research/designs/equipment_designs.dm +++ b/code/modules/research/designs/equipment_designs.dm @@ -189,4 +189,85 @@ build_type = PROTOLATHE materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$plasma" = 200) build_path = /obj/item/clothing/glasses/hud/hydroponic/night + category = list("Equipment") + + +/datum/design/handdrill + name = "Hand Drill" + desc = "A small electric hand drill with an interchangable screwdriver and bolt bit" + id = "handdrill" + req_tech = list("materials" = 4, "engineering" = 6) + build_type = PROTOLATHE + materials = list(MAT_METAL = 3500, MAT_SILVER = 1500, MAT_TITANIUM = 2500) + build_path = /obj/item/weapon/screwdriver/power + category = list("Equipment") + +/datum/design/jawsoflife + name = "Jaws of Life" + desc = "A small, compact Jaws of Life with an interchangable pry jaws and cutting jaws" + id = "jawsoflife" + req_tech = list("materials" = 4, "engineering" = 6, "magnets" = 6) // added one more requirment since the Jaws of Life are a bit OP + build_path = /obj/item/weapon/crowbar/power + build_type = PROTOLATHE + materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_TITANIUM = 3500) + category = list("Equipment") + +/datum/design/alienwrench + name = "Alien Wrench" + desc = "An advanced wrench obtained through Abductor technology." + id = "alien_wrench" + req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4) + build_path = /obj/item/weapon/wrench/abductor + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_DIAMOND = 2000) + category = list("Equipment") + +/datum/design/alienwirecutters + name = "Alien Wirecutters" + desc = "Advanced wirecutters obtained through Abductor technology." + id = "alien_wirecutters" + req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4) + build_path = /obj/item/weapon/wirecutters/abductor + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_DIAMOND = 2000) + category = list("Equipment") + +/datum/design/alienscrewdriver + name = "Alien Screwdriver" + desc = "An advanced screwdriver obtained through Abductor technology." + id = "alien_screwdriver" + req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4) + build_path = /obj/item/weapon/screwdriver/abductor + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_DIAMOND = 2000) + category = list("Equipment") + +/datum/design/aliencrowbar + name = "Alien Crowbar" + desc = "An advanced crowbar obtained through Abductor technology." + id = "alien_crowbar" + req_tech = list("engineering" = 5, "materials" = 5, "abductor" = 4) + build_path = /obj/item/weapon/crowbar/abductor + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_DIAMOND = 2000) + category = list("Equipment") + +/datum/design/alienwelder + name = "Alien Welding Tool" + desc = "An advanced welding tool obtained through Abductor technology." + id = "alien_welder" + req_tech = list("engineering" = 5, "plasmatech" = 5, "abductor" = 4) + build_path = /obj/item/weapon/weldingtool/abductor + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_DIAMOND = 2000) + category = list("Equipment") + +/datum/design/alienmultitool + name = "Alien Multitool" + desc = "An advanced multitool obtained through Abductor technology." + id = "alien_multitool" + req_tech = list("engineering" = 5, "programming" = 5, "abductor" = 4) + build_path = /obj/item/device/multitool/abductor + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_DIAMOND = 2000) category = list("Equipment") \ No newline at end of file diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 7bcc42e4979..2e18a71cc0a 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -197,7 +197,67 @@ materials = list (MAT_METAL = 2000, MAT_GLASS = 1500, MAT_SILVER = 1000, MAT_GOLD = 1000, MAT_DIAMOND = 1000) build_path = /obj/item/weapon/scalpel/manager category = list("Medical") + +/datum/design/alienscalpel + name = "Alien Scalpel" + desc = "An advanced scalpel obtained through Abductor technology." + id = "alien_scalpel" + req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/weapon/scalpel/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500) + category = list("Medical Designs") + +/datum/design/alienhemostat + name = "Alien Hemostat" + desc = "An advanced hemostat obtained through Abductor technology." + id = "alien_hemostat" + req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/weapon/hemostat/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500) + category = list("Medical Designs") + +/datum/design/alienretractor + name = "Alien Retractor" + desc = "An advanced retractor obtained through Abductor technology." + id = "alien_retractor" + req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/weapon/retractor/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500) + category = list("Medical Designs") + +/datum/design/aliensaw + name = "Alien Circular Saw" + desc = "An advanced surgical saw obtained through Abductor technology." + id = "alien_saw" + req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/weapon/circular_saw/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000) + category = list("Medical Designs") + +/datum/design/aliendrill + name = "Alien Drill" + desc = "An advanced drill obtained through Abductor technology." + id = "alien_drill" + req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/weapon/surgicaldrill/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000) + category = list("Medical Designs") + +/datum/design/aliencautery + name = "Alien Cautery" + desc = "An advanced cautery obtained through Abductor technology." + id = "alien_cautery" + req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + build_path = /obj/item/weapon/cautery/alien + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500) + category = list("Medical Designs") ///////////////////////////////////////// //////////Cybernetic Implants//////////// diff --git a/code/modules/research/xenoarchaeology/tools/gearbelt.dm b/code/modules/research/xenoarchaeology/tools/gearbelt.dm index e2d4839d2b4..8912e9248c8 100644 --- a/code/modules/research/xenoarchaeology/tools/gearbelt.dm +++ b/code/modules/research/xenoarchaeology/tools/gearbelt.dm @@ -5,24 +5,24 @@ icon_state = "gearbelt" item_state = "utility" can_hold = list( - "/obj/item/weapon/storage/box/samplebags", - "/obj/item/device/core_sampler", - "/obj/item/device/beacon_locator", - "/obj/item/device/radio/beacon", - "/obj/item/device/gps", - "/obj/item/device/measuring_tape", - "/obj/item/device/flashlight", - "/obj/item/weapon/pickaxe", - "/obj/item/device/depth_scanner", - "/obj/item/device/camera", - "/obj/item/weapon/paper", - "/obj/item/weapon/photo", - "/obj/item/weapon/folder", - "/obj/item/weapon/pen", - "/obj/item/weapon/folder", - "/obj/item/weapon/clipboard", - "/obj/item/weapon/anodevice", - "/obj/item/clothing/glasses", - "/obj/item/weapon/wrench", - "/obj/item/weapon/storage/box/excavation", - "/obj/item/weapon/anobattery") + /obj/item/weapon/storage/box/samplebags, + /obj/item/device/core_sampler, + /obj/item/device/beacon_locator, + /obj/item/device/radio/beacon, + /obj/item/device/gps, + /obj/item/device/measuring_tape, + /obj/item/device/flashlight, + /obj/item/weapon/pickaxe, + /obj/item/device/depth_scanner, + /obj/item/device/camera, + /obj/item/weapon/paper, + /obj/item/weapon/photo, + /obj/item/weapon/folder, + /obj/item/weapon/pen, + /obj/item/weapon/folder, + /obj/item/weapon/clipboard, + /obj/item/weapon/anodevice, + /obj/item/clothing/glasses, + /obj/item/weapon/wrench, + /obj/item/weapon/storage/box/excavation, + /obj/item/weapon/anobattery) diff --git a/code/modules/research/xenoarchaeology/tools/tools.dm b/code/modules/research/xenoarchaeology/tools/tools.dm index 39dc6738f4f..6ac7aee6a2b 100644 --- a/code/modules/research/xenoarchaeology/tools/tools.dm +++ b/code/modules/research/xenoarchaeology/tools/tools.dm @@ -21,4 +21,4 @@ storage_slots = 50 max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class max_w_class = 3 - can_hold = list("/obj/item/weapon/fossil") + can_hold = list(/obj/item/weapon/fossil) diff --git a/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm b/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm index 1dd6b769390..4e6e48b49b5 100644 --- a/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm +++ b/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm @@ -126,13 +126,13 @@ foldable = /obj/item/stack/sheet/cardboard //BubbleWrap storage_slots = 7 w_class = 2 - can_hold = list("/obj/item/weapon/pickaxe/brush",\ - "/obj/item/weapon/pickaxe/one_pick",\ - "/obj/item/weapon/pickaxe/two_pick",\ - "/obj/item/weapon/pickaxe/three_pick",\ - "/obj/item/weapon/pickaxe/four_pick",\ - "/obj/item/weapon/pickaxe/five_pick",\ - "/obj/item/weapon/pickaxe/six_pick") + can_hold = list(/obj/item/weapon/pickaxe/brush,\ + /obj/item/weapon/pickaxe/one_pick,\ + /obj/item/weapon/pickaxe/two_pick,\ + /obj/item/weapon/pickaxe/three_pick,\ + /obj/item/weapon/pickaxe/four_pick,\ + /obj/item/weapon/pickaxe/five_pick,\ + /obj/item/weapon/pickaxe/six_pick) max_combined_w_class = 17 max_w_class = 4 use_to_pickup = 1 // for picking up broken bulbs, not that most people will try diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index 89a58d7cc9e..a2f3a047dae 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -312,7 +312,7 @@ ui.open() ui.set_auto_update(1) -/obj/machinery/computer/bsa_control/ui_data(mob/user, ui_key = "main", datum/topic_state/state = physical_state) +/obj/machinery/computer/bsa_control/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state) var/list/data = list() data["connected"] = cannon data["notice"] = notice diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 26d00e6360d..03f119d62c4 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -211,7 +211,7 @@ var/list/non_simple_animals = typecacheof(list(/mob/living/carbon/human/monkey,/ L += pick_n_take(possible_powers) power_lottery[user] = L -/obj/machinery/dna_vault/ui_data(mob/user, ui_key = "main", datum/topic_state/state = physical_state) //TODO Make it % bars maybe +/obj/machinery/dna_vault/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state) //TODO Make it % bars maybe var/list/data = list() data["plants"] = plants.len data["plants_max"] = plants_max diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index 36f8c868cf6..8a7484626be 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -71,7 +71,7 @@ if(S.id == id && atoms_share_level(src, S)) S.toggle() -/obj/machinery/computer/sat_control/ui_data(mob/user, ui_key = "main", datum/topic_state/state = physical_state) +/obj/machinery/computer/sat_control/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state) var/list/data = list() data["satellites"] = list() diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index b6089236f2a18be08b0422e0da56e86d18e0754f..93630adce9a335f11c6332ad79bc72e894a03305 100644 GIT binary patch literal 13374 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 diff --git a/icons/obj/abductor.dmi b/icons/obj/abductor.dmi index 9a171b976451178c267116a85db8c30c50dcfb7e..7bcd06071160d169ac0f9dbc56ab04c48ff0db49 100644 GIT binary patch literal 55430 zcmb5VWn5HW*fu&eNP{#;OSg0lNQp>FcXvri&d}W@4PwxZfOJWhf{4;BHH5$b!_3+I zpYxpG`{8_fKTPgDd)B(wUDtK39j~paO8AKO5eNh#e4(bK3j(1*frk|?Ht4rw0i1wy-E?Dy2Y>WMpQ8t7fG-9?GWA-_c^MFL_j@%Lt;8 zL90f7{}ts?(i8hS+H67xK_up|8G&gLVmsC1sHO~OR2E-5Sk?c-B&Dj|qv;u{6U^zwX^hMstw_^yTFQW< zD9jafm3~cx&L;x`2>bgwd#QvgXYn@%r&07pj~~5%%vnG}VuHqhQhiAFJAKxQ{aHY_ z^VWhao}KV2#@Mq|-SRp5+4q5%_kUyG+HxTNc*)3ZnxhZhiJZyLK07N8PO~D!zHJzz zq-P7}kk zr0miuZ6q4PuU<-f7-+-JmqTa5E8g;fBJ?y=%(<7ZRJ%0PgLeo^;_S@Yaf|zr_hVr> ze?B^y^i8&@lVrf!`b1LZyPkT)(z&1}jN44fhu^7`2?pQRu+bdsS7+w>NPP2g-Co}2w zv^w&Nhj&#GlkN_vQcEW2aSnx0Q7zt5lls!Zt=|nVe?P7va{3k%UH5tt-NWeymDfSj zg_BgTBC00PC3N=J1B}gam)F&GJchhXyT`hUg2BWz)R{pbCeRBdh1YKjkBUOgUfbWI z)*NHP(PGe;6~H{%&rD6YMO!WF+;j3ieOW79xo@S*Bd)D(abEjvHo5kD(PpVO*`(iy zaomp)e}&9o@!892Pm?-|7u<1nTukLq0rnH>(6#S9p?9;T3X#}^7{p(Za%hCK&zxpwY5ii&&Bv@SPq*kS zVXaS~F>1>vjl;Sow4$k{>oYqw*`X+?lA<@ zR=`|bT;~JP_zQ;W>f_KZB9K@CVe^uPx_Sby$(HM4UG`#~`C+c>_ciR%H8s;r=2)$! zX2hA~<=_$MC#fpm;FbIUk*8!2dlwH=t1uqi;Ns z?)vXm*PZa)jM2%-EH^Pa|IVVZOpa#%W0RYork)?Wx|RhH_wG&_u96ncjl(vY{H0|s7i4h=U zNRYq*+uE8Bz$s1NALYo)#r{awx6+|SlU=#X~BYuvnr%+^rtO|@(z8Sh- zBZXLLGQaT14j8X69@0@@p3G3bH8IJ5-Mu67lb}R%KGyHulmoChx55QeN})z0`5Qkf zSI_edhhg(I;&#w~|9rIT&m<#TEV1_r&DG0|vbo3NJ{Y+u)Uyrg|cIEL0tjK|*Tu)Y(sCnpfZE$*y2614JkNTu)wnFe0C<+ZZCYV2?_G79b>pOp-NuJH6aJm; zZDIFsugBGSq(b%xfmMIWm1tNo^3u3V@r#ke#lP{9Ge-uf{}xWgrho}b6zA~=OSVWV%2liD0r%7s?8?!%JlRC{qQ8Ur34B}*(ud%JV%=aNZkP5N z4Gc0eGbb9~lP%zC;65o&2z6{D;oR(%b?-Jjume_CQix0EI2v@kSeok*+w-2O7wmrd zwfM(LQSjKLX6~CeZ(eAq|D&~hIFn!Q)8L)0GW+Al6wC+V@=4I@-nGkH{1ONp-`%F< zxv5s^-rbxl#ya=;018HnbJ|L(_VQ)sgU{+wh>Xq5z?!g%OG;*d4@+O%3ua6pj4Ii} zf#-G!iHXuj0{r|AK!}7;>mTU%g!ViB!Z<=xp%`hZgX3LdSv49NHQHcNCPo91WK2C0 zSTE0Vxxl`gaz?t@>%FBi=Fsf7pM9wuCxC;o{pgJ3MBXbd;ynwPv=3NyIf_0YO35HZEz#wU&OnxmfmCPn4mI$ z2Zw@yywYn2t5?PF`s3a<<}%Uib7)z5EPdG~H}EZ)?xUlPKM4cFiaoxJlvF(-^4h6r}(c6k2Zy3ZceU1 zL^?1z<*rBP_^%@c9p-U|DdwME)zzYs_S%{eRgxCoXgffSh-O3>>BN(TxbdLA4-;1o zG~3_6LRPsc7g_n`VpgQDtI+w@-PaI+YXKnxgkDw9@o=bw!D~f>t7@pHaJm`uG6cxn zRdb1nsr@nnMCmk7lb~K0;hSF$4&LepG>2Cyu0Fl(9=kQ3vEG?#_XZvPX`4B$JVtI;;rFtUH(vc>(67#L4%O_xTi|I{RELZL;9yq92WutIkMcR64! zvoWvz*}G#W+uWgWVX}q=Se-^}->d0Mc&I zvsN`Egrw}IJ9}dFV!+3xVacY^_wNN&09>Gdr2yqE>Pg*!OjoVcqjL7EQ}b$=OYBqj|^q zF#{(nNVm7QgUk_S_dUJ;HnBm)=FJiJI7G}RiNnGL`xTt6lj|$%Zyzf7-_2P5^SjQU zSbrv)h-A^uEX>-ryAsLK_{Y)DmEc%Io{Mew*I&H1>`v>LN%*|d3H2;2>Uv2WfD$VqKg!Xn#I>-3=|8ox^4KV19zX%w_%;MpoiaLwF9O3 zV7QIx5;YRN6R(GePT)Pl}Icw2`n)+VfL22Bs+G zcB!Zmae4U?AQoGdd%QLj>-`4-2Z~Qg*}b|=?;;P%SStz1B`#NQG^zb{><^@NAorc$ ziJkR!hp_>U`k0b3=;GPy51&4b<5TkXIX%lLDS?Tc!HCRh7#Ce3@8NhVsZWm6|9lqN z?MBAU-&}@EGFn3^d5uc1U*XKq6n4`UmKY8H&m&$?z907S``l`0;`kdQR?Ls;fGHpIR?Oa zaDIrMPhXt74~?s)Ol?9LhX<*5w}KG2&koLOO~bP`BZtiF`>NmM=h=*M?yq9HtXF*O z?0c&c!T?VW(gN&0f4G%=S5nZadSXV|&l)5%u#=rv#NTmsJLHF7VrOWcu^CWguE0Rh z2Q<}e8$H%F=O(D;L60K%Z3%+`3cs)2+X9BR?DA5VF$f$A_iSYk?8aegN<5JlOAsCW zT&)6b4^2{G1P{ofL`bA6d`j{^5&-P zLw@6y@jerxYORZACaHv0!-5arLz&+0qQ4;oM|}Tn*1=r_w1w6DOdDb7Mqvx|b@xZ# zLk<@82_1E3EiW3{kz%>R{fj>f?j%`oPJ!K-I!qY421_{zvG51>)N2R7xY^ zsl$hx0uf2?vG#wXi_<2DSWUxDr9Hvh*QVdt(tUVK0u;5X-owTPlKQ2~IL0J%QtdS| zq%8VONj5Ewj4D1!*O|6yibnOQ1blPc`j(ur;;~nmkk^2JrGew$U$gRj0bC$ZA)N5=sDE_&GlAVfyWa1@H$MAj@6;Qgj+Z z@F(WT^taIH2|PN%V6Av80?fJlA5mG!C^ZoNfE#n%ECs z(n%vZ7C3eebmUx&Zyr#m9N9ZlXIw^WVF-ChdmWv9pFgXax0;ddP;9!@ z)^u_1yf)+MJ8nuu`BF#+2JLKBosq`$`Sp|>J0G$ydNaP?TP)l0{5!f}PnpJ{(zm!N zz%i`Ce5w{*A=$$F2v zVyoePCg}z8{zIcF3YP?)fw06dUaG(9xD*KKmXz#pNt-h}+v=Dz?Ljx0nX1?WFYPd~uq)1I=gF>c^-HTa_4nWt(EE&tGlLOovVeS}E|4W47n) z6Gv|r`GLy()^~{oSey@6xJqtp_GgbC>O@>(>R++DVLjiI5||) z5;zNpuAVWZ#<1*AjEWO5YuE09_1skey*?Q(vSDSf9usPVw$zWYO&nY$Ze5O4R^+*@$vG&C2PdkX0h2Dda!2@`aLs}PTV8wp<+_DS99Jz0^s51rVTdx zS}Aq}nkYzy^9CDeg@tIl#g8oFJPizfDsRGw|Jj8|b(V;EEOYX`csqT#xn>R(p39k&n|p!0gXsk( zzMxB;TjfMndUPZnR7E0w>G-_WmGnXw=76hWkxP9}} z)VqVrBqkl40gfd}2IG$@k5W<+bP27@LXvLDShH6)NNCJUlm4wj)=6v-;jY9Jt;;N{ z=|GNe0sgVl2X>(wQ(>s5;OmNc`vQUWu%hv~y%O$X1^F=tkJ4ifrfL|g7sfXRV;87n zdxv}5zU`%}K1ny*`+MfUTrN+T#`9(JH%nzX-=AIcrQ$CZWW>L6j7{h5(M6hnus6QX z;)p42zGL!Rc*6xCIznvx$>LDQ+#gSH4O1lywM-+!0I+HH!E6S!yow zP7^-H*a`9g7C2%53*Yx2xrdv-BTw0iXZ5;$CqQ5hRzc{HC3sSLEt@*f71Pad1Pg^3 zB7Jccdq%o^?+jg5w#4Wy^5!~wQ-r-_8j>sWRk%GDWA}p`Z~dx&uGDW6YHq{9S<9Di zKGlw;rOMxN$u7KTBLuZmhoe13Vvye3hhPRkXqdFtXRs85T$Y?qiOrIK?6_3$W2F*+ zI90&p5W*f62rUyKZO<`49y&d6iZPyIJvuKHUH;=2VG1Ik2X0XiTt)+WU>T`PX9=JW z+#-Rt6E-+u|#rm!eN*NO81-U5sx@QsSVU9s;L7@nt4$t%H$tf{IfLtNhpnGdf z&8eX0VW)eGXY0QYXOsGNVm*~D{gOkncu! zpDa&wAQ$*&GxSw8#`kt_@gcWW;nk=e#xQ+^r7@__vt((AwHF~G{l)Tc$$48m>UlwS zYoX=+$}{A@QJuQ!JB5-P{LdO4FS;1JAt;Ve+2YQ(7oBbVk72NTL}W5@7b4|`kUB#y zw#MeX4JwqQ12sB@w^7Rbr<#%?JDMG=YHPNaZ!YM0bSdo?2^3H)5=Ry{RcZJ#HwX%u ze|-jc>kINT+4t-N_fwFA;@};eLt6OptkF~Cjuu&8e~BFD-30Dr;YF*NK&+n=BBE^uqtV`vrN34dzh9l-|>1j)&$AX#c~6pt(F>$=5PJUXKRM)NUERlsZ9uISb%G z)}1gd-mj_zY{CwR-mJjfegEIDPD(k_uUkp?Uu=iEV+N50Y9)b72*Ci>$jZLw1`HBL zsxWtM+4L4o(zMOz1QB@I>9Vp;NWNLUoWP8snwbB&_j z&zOyQKAjj(kk%UKN-W7zAieibi6Ba}?Bw5-Nt<2U{IiD0hu>Ksg3mARq=;rSOV$>> zp~VP9@etawFsLq3zf-Zs03dn0oUENZ72Cr=Z@zf!brZ|mT#j4X!)5;4txaiLECbtvaZ4MP3>bUc_oTa?VntHJhIh2IPe zXl@3O->mYHO9UWg082Ip?Faxo-}$^=FSCc!vr4V|fRgF53v|YZiEnMjR!mGDuil7( zyw9F<^2jD01^_F;YmU$^`Kfe_SJ$0{9PK0XdewTw+auyx)v1=%>yB874+&7||Ff^T z-6`@2SZJ2DBAtEwpslUzkIehYscX40rQ&j70fgbILZCm@_Eg8s1_oqQjFH2_e;oPK z04I|$@FfG*W{JUDE;BNGR9&btU6M#uV~X?|*HUn+xx}kPevp1FEk_@9!o&{Yr;> zH41WbcCkdzKBk%l8suV&o40@7&#I12tsMI?lhxi9*8X`g*K4X-fFyqXydijRRjv*B zAUNbL_3EcGV_Hy00Kn{t`ITU4T$u4+;{_65f4o5Hr%X+0N~bhgzg_}0h$gWKw_QF7 z3`z8aT)1vRZsL1C_rmZ_627)2Lp$G}Ov6^xZ>9t%eoh^p2d9O8aN^9oFzYmLN z7Ic~x%LeBg@>uupVHxdCZ#+2C^>lz!03O#SjC;9QF;1c-Q4Z?vBl(LWH<9F0HCJ{L zn2A3uq`+C^1oV65`45NX@YW{XDU$OX*UA6k^8oUR3N)vqGfpL$X1zqj8S`GCt_&bZ zX_&;mbaTA6upk0|`&|w<2@!Ba#>&el)DNR{5jU2+-xfC^W9N)CGm)-rz&UhqqI(heZ2zwLNnA0PR5mQLwt0Zs&&p<3!QYDQ@n;gW7>+WY12&M_l$4(We&B>fR!SUx@w$lFwc z?%x=Imx?neuxH~z5%%%0#6WeL}t@RwBbL#-t%YE!l<76mtpa^7*0rr&@3;1Uqn z`yU;L{y)V)YJ#z2`txRR$3;Er#7~X_RSeJU$voCOgEb-+8P5~puBWog{%FI)BcKE! zwdv!1mj-|gf0w1US)l_C4yq7OM>sTf0V8#z8`mM|x6mZ68W8I)OsZdH3Q^Q6krZx* z@Wf}$xTY>woQT5`y7$`#NO0FsgboV9C#Qx+^0Ut6QxxkJ!-nS zMu&8*ldMCkwnuicBfB>Q)Hz}Bl9FIc#NEO8-$T^@Jj=S@cV3_@=sSD@7bPf4(0ToDZd~D4AcarpLagr8CtV?#$Xa7-laC+h5wYr30z+3<_u<3A= z0v6_j7X`&-BS=qu5Va}ykV#1Z0B_Sc>ERQoX5kZx>xP=b<~m*!7`0!ZsG9h^%c_iUm3zdp zRV^+EOJF}9#eZXo6W*bS2`RJHZs&QBWBL9gMg8}&{#}~5X_*R41s+*ThGa1KbKV)$ zsqX<`{ug9DO^U=5Kxv_3U(IDFA8>NA3M)XuI{y9s(azrftorlJ`Kq)^z2lz{J$Q*! zwZ_rzv0KUNd2Y!aBntE7BIt`&{e-1ZCZMe#Sdb>P6`tS0!S*02eB|Fz?*AIwFh?n8 zV!KhG+!*ojaPicFF_kGumsj`Z+Kapqw=?ew{^w+k$R+lmzw*Gq6=l#H za8uXE1?iJgK7aP()|!8Asj|@NO`c^1py1p-18e^EqcH}wU*TWVCk(-PVzw@(*csUF%{1_4SBR>0?e}B+5M-}J9R|x1dQhl#@8!9Y#9lg<)KP*y_zYUkKI`?g|Q&8 zq)}n(Jm8MMR{y&f0N|6WPCFI7pT9Lk=uygZ)qlN0RYp(&Y3h?Sv5f_F^&>#urpj7B zuJ=5BDrzGYw~Ck+r5p8wSk72qe(5v{T{E4h7qlrb{su^13$A4!`aZpUkblNhU|;(m zR9Gy0N~>qIfPBRvCH1?0Gg$KcP7l$!dHoq4FkByxYQyLzLU#njLO`U?K@;v-C6e?d zK>|7O{3xH|K+VY05yak`$Lr{TG6?!ROb7xxortFI2}GYcn80 zx=mqI@-A!iq{uVa-Yp^yElNu_LSPr_8W{TOcNmwFa$;)zEG)SxNDq`HubBEcvpFC3;$=F;4j$Q1pQ| ztSoZI5;rWi-&8ItKj-#N{2@=c6-+D$fjR?vrd|rvU02D6P1Nw|0u&Em+vjk6buFvl z-$5^urhW-mhbE)|*L8k4-Za;I6An0lJy2|{t(pIaWfm3@`N;lK#v<(X)*@Wg%)!f5 zOnU?U5u~3;(!GB}?5*j)PCzoJ+Gdw8nfaP)Syt164#32PU`vG-gh<$0PJGrJCQ4gZ zKUQBAUG{TQ&}30AFCaE>cSnf%7MHb(EaxRC${+x8Y`{&-w$)^*-Mf4Z(M^l$+l3Jo ziG--Y)=)1D??Q&xBnS6aXXJnVT9C6m3z$B=@jEVKH$V2-d*_jgNy%RdaN5A6U$;fd zrxo1gblp~R%Ou*GXziyY=&nz z4emYvLcI(T%}q_W`XSGd;bZmvy@1O7ken7|KEX=|Ia=w^AuY&Z-L&eGz?1g`<#i^% zd#+HPK<=w_2qXc~eB{^DM*PYJ*y9gXS3A^zoc|^$ND5H2T^eTAHp|b5&B6$gv8K)8 zihrOV#0<6f3@YjyZ}avLWWSF2zMvc;$sq7pGW=i20>X^LU`UCU*D6gh$R`!z{V-lKtX(Qr`!i}zdZYtDC$qrbVIHU)a& zAVXtt-CAH`ue1(~8-Mh&bCuro5bXi84}zk9VotviMRLo{1Y2#|D#_-CBr@K?d>l;%u#;= zdEl6z0XtrE^#0n@3X>|6zXA3&6)CT+sgwd`cmdE_j{g{6J~78@?41Vm0ySTuVFO>P zVMi#y_>7N_^LJoz^70OhB?g!B>PqvhiK@$zUy(dK$Eu#=r}Q7q2OGNMAk8GzmB3 z`5CXLrE6%Y+W6Ic&e~NtZywd@0sPQ%tG5fj@(BG}W&H>Cp4QPN+KQ4V=Bl~)_?m{E z9i$Tq=9*wwBsPfbL(1S7o=mR=@-VS;*SoUEq{xj1UhIzbJc@Hh(4uyx*C-HEFauhr z-|L9@Tw(N{#}MtIdtH^jH5R1%U{~P9cBAb`Mp{~*Ykl{()Ubc70HeDirwJsGa@AB| z<4+o}TgP7_=k5O2s(ru$@@eo+VL9Y(KrlTx;6E{9wup3gXiZv8O--9;C51s+MlNOl zTY~LlDymH2st@d7!m7Sz3$O^pkCAmr(B2!sBDpU2iLl!VEViB>1mSmTFJ9=>9|8lw z<}@FzAUwQK@ghuDYAoq)(N?5y^TC?KBp;Qm!sCd-rp2=*(LA`xI8I{AQ*pr^9Fjg7 zXmQ%90fMYL`_0j>Mh0|?l{3b*(=8bsvho*f#Wc$=KrnP~FzzYimDMIC0sTi(>Al8_ z=O=dbUg&UQuejQGl(NU9D6jx3itz3{U;AfA#is;qY*H0LBA2-z>XK7Rwu-7eL=la) zdorFP5jalUGH96RLNIHSmfx(%213Ya^(RVlVYDP`f^sJ`6Of1%jtx`*>IxNsMrt{I z19LLZ>x>wN#5>P%A0q<>*IY4X|A0IXIzB}92%-aMaQeZ$MbNudf&DTvKD!#=%8&s^ z38dN!3wp!v1Kw-|%SoBq7A#R6^FHrLSmt~()apKjyC`-esje<%U_f!`?gSqD#JE5_rM!higIT~QoP|5EPz8)l4=v`K*B*8* zW-305@+Ks*$s4-_O>W^UE-Av(xdQzL1KNk>H-I4&hOoa%+1mHT_VAa&BRsXdslN?z zUw!+Ra|%;WNlZ*W7xK+cB#C2>@5=Yc?WuFu9-@&o0m2_wP=1G+(9N6kgi-V4$zN^XZy=rV9a$pJO>w=X>4@7ZFI7a zZ0AgSPVcj&VrId@*w|>&%bNnS?PRv{IcryQts$j3kh--A$hkIwfgL^d9J9_#-peR& zS~_fWE=MxkJjExbG}CG(&L7dpErsZ$|9HQ#vEky{ce|2dx}KMgHjTg6t1 zRG#_PUv8ax0Sr=|(|IXUrqKsQOKT)omK~fU#qRn`i2_%mWNATKdeYtYm@==9=aZm! zUQ@JQ8Zs)JIPo0VG&qqGGmi9j^cNB%#t}dOk;RaJ8T6^~KIhREBGNZx)Ce8%`ZeSv zhiuTY>h^$O?VQxypJbG7#EmDT?@|Q`DV;O?gA(E@JEIM(1;*J&m6pfp9ogX+9L@XC zGXzC+OFSL3DTAmNmi}Z@&6g<}O*XI}sf4*+l zW$MTCMxVe_8CysPiuUuuBemf9kBAzIP4gycrkhJLm4u5lG?}-Quua~n%L)t9;xXvA zFr{k{qV*McoLNf1L8>@jH;KeV%!Rln&g@W-OM3)3Mn?-5+l^prgnsyiOxf#nu%s|w zl=c)^3aL7|ccIEmAaBSRXWN8j=&4FRZdo`bSe0+_lq;cn5C1V^I|jb+<+Cj|5CflD z;ifum1&-Zh)Q`SR}Vz{}9KxqI;IEND~#zNYg2Tvwi zLsr3^udn*1kU8mdxC%Dun6oBHbh?yF981R211>A_7rdp#y4a+{xkqf_#`HcLB6%9X zwvH;k^g1}stL5lPEE71nA&Ck(9|6v%Q$0;RW!X+VYZ5f-G^gHSvUMeuR5TC{-@cI7 z^ebez1#*M@C5;N3e}1~tr-=IWH0o(K6N#6se$1eiJ_SpT}llX*+?gCb^q z3h7nSHNp!J&pr4-E1mn>lq_r*Wxr^q{R)-5O+#=h?5O;?aZ97E6f4SU=|c8b@dj!k|PZ|XDI*qL>}VBrHSr5 z5U)WlN=-dvHs1I{gCvMwTa}Fzb2cguUIduB zkz zfNI}`(*u>HzrF+d%&Ye0Fu7AZp>JoMSgrzrg>@^&#{P&myH-0D_c!O-X>RBG(l!djQw_nGbVmM)?rg zus-IgQ2#qzW-=Na%|a+S1DYE235I6jGu@XYD$`%b*4B223*b+K2!JmHt)pfqu@Htx z9**K6Ug9!+4|XGAogIni-hB#5No*w2I$0u-@$?@b(c#3|bBh*^^qa(-TmGu-Q)06` zCB_!PS>7h5y=J_^T-JP9ozjSiO4ry}1-)hXcYv^u^@Q3tR@NL zslsE&q$AzOD@}Mxi}w_Sb2+4~Ad(zq^&!t8LUKliXfCeEp>R35sJcS#<|nTcY}MZb z&2QKfbr|3%n$jgaqbV{KHLHOi#5Vn15sPHB)vT04T7|yly{Z<)f>|jos|t|MiRkb` zQY$idn%7G_&aMM)Op&)M#$UdixBYv5(~ESSs5wpd4kR+cV~fM5#$`vtNZ)rJ0y7Bs z;EGr)c}e?Y≠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 literal 49433 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 diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index ae8fa29679432d430796161efafb8fee7ad5dcb0..cfcfec6e283632e4debc2e1ba73fcb1a0a368ebd 100644 GIT binary patch literal 16970 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 literal 16664 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 T^(Dc7JOGpx)a1)$&4d3hb9e>O diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 6e749fc11ec39905182986496d2920f1e5f905cd..afa4f5865047a04a4a88c791f82441b3f528df03 100644 GIT binary patch delta 14135 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 diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index 332afbbdb718bd836a9b402aae3e19120c6de783..d1aca5822c30361b03bf16095a1f296d78bac0be 100644 GIT binary patch literal 12035 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 S^});SfQFiuYN@hy@c#k|qYFL& literal 8020 zcmaiZ1z1#3wC)*@knV;-P(TroM!*4S1OyZ*DWy|N8X1sKIz&KXK#(qJ>5z`0J4IS* zhMJ+?(O37r``zz--#KT_?6cQi|5|(P6?=cwda6uH#6$!D0I8~q!ZYx9`R`4L4?dar z>{b8(!tbM_@2+6!X6|b1>~8zU2>`s(635$|+8>bMFT0^>=!}Siw7LqC3J8yZGI)L0 zu*$deG})D1PqUqNq6jy&9OP$o!#2a>RH`4rj2J!r?d&=HXDYeEly41Zh@R=IP`=2I zNo+EWS#x`zRU-+f)fpl(&~_DH>6~ zP!4?YEA_pD*Vh~leSJ%@vwPVGWjk}bJ3-N#6Tx=KUG;A$W;ZX(uJT38SVy-*JoIzS z>_NwL0syeCs46_x@k-lG_jjjRYwB)E5Jzztuy-lo-1ua{`NW)Fu&GIm`f14|krEHh z!-w*e5T!(Mqb-bZQCOB@g@iGd zT|y53Heqxu29=;ol~zwXLXj1QP?cet2#oNKZ|i*lviXt>seHl-0i$|Nccm z;0xLdM)5_q_rfQ_XOl68(`ojG#<0_NVu4t}_rU&1(vfv8(V4nibSi9rO;6sG!TVP8 zK_33e+$Up|Nc?R*)~nXzk+Lr67 z7zog9&seedkV*)@+7O*QL;}zbZw=%R8D?)c8kBe!Pa8p6Bez8}s=aGla>{HY6f2zx z*007)OtPu(GQ8kJYdxB{? z6Lh@MQ$j3dmH?dfnyW&-0X3t~d}~-|eNE68jc?{lF0y@oz2()$hLs7E9O*9!x(i?gJ72bic?xpN;lw&CxVN2nr{fX z(aAL5fgoq!?;@@@sU@n=jL9$cGWi&{s{>5wskYCx=-kNa&`(9|uESf9uK9lfB+dnt z9~*l-hFCLRwVgLOAD%CDBZLCN&g9h|e5<4@C@26m-8TMHA+4kY5BRjZ$V$bPs(#=U zpxUzG>$%cd*3_wiI7Jm@?N7o-)sJc>vTKX*%C7eV2!VrET=H_fnVApaAKShmWw_CJ zl#9EX*zHYU5q4l&A`d?j&_9x)*vCD$$>g4aQ@#3F9b6<tg;;g0Bd`DTRo8; z5aTF$Mzdz^*WJZRWt+YsCD$iJxlhx>F$M+zT-X}2V10U$nSIGPy(y zjI4a*#6hy%@9uRpT&l_(V9npL+`Y$z541AuzD2=3&lBF69dCJqi|2zT{wIDpoTnSL zo*wvbq6z8$vCv%FQB96w7AsGsyAJ?WwYBmTo8_7s|Gw!h(3t}I;TK&AZ=F_1h^s^6bz{7z=91BdT)5$>OGUoLN+JIHR~Sm;>Xej!8lPZ`n8 z$kU)F9Tu?T|4mAwLZRTCxdXq^Mk&Pp*f|*d&vFZw>V|U9e{GVRg!?pQY#safY$s7S z&dC@ZDep3->cLV?%B&4b=m4|t`V`E}J834*-?ISNG?v;9#rN0GO-!EF_G1F`PLKr! z5MccG?>bg7y!^{YTS-&nnQ7V0uBmR~0;?mZ$)tk!p^p7j`H4s_z6-JU5YhKzi}!ip zgI4b~MtHwVi7=4@nWZ-+Yy@!tJHSRhf0ZZVPSRR3Udl9wndglU-xvu??(wvo!SD++15vPnnBY=-;$1 z>;XY*U(6TIj=OBW=fin`8ye2o^Tr9i8;c-ymDuh4N#mxuC-fqKt(> z+ieY(+(lRU^uI)vvd!oePiD=|6zm-Na&1LW2$c4v+1IHZ13SBW3fcd+)PzAV{s`-$ww3GxdBw*{vX+HiE@n8OGzgP%x$mts85Z{Osy#UvWOjh${cb z${#_}BaG1SHf76#HO>W8?D#I=C89=hB1PCRaIsWU&`0+4^k^BUE-zgr7zDJh;f`Kr z`hiOm@AGFDbU%VZ#Y>{k{(s{?kSgIg1 zwowX2Ufh8POjFKtVse7%eU|i}Jpa=6LFeLVDS&OI92`~1oj#q+@o}A`VD^pkC{*1D zgCwn1p==Lc5)sb}Gvzp4XZuz@I^w=WjE$(M1W$MeOxzG=Xl%?{!>g2xL@~(xK9cZr3Lj|;f$XFEhjcEZlyx1P{9W=c{zRH#TW!aZX<6pL4LYKj89DT zHhit7BYuht%1jS1K^pVwA|KCnPBV(7<;8uo8=DUV|#%O!aKKEgt-*RQ$N zJ~g@L%t2NZHB%#9^I~%PIKnz4Zp=q=_CQAmTIlHLCGH}b@}Q^gTbX*9bYm}IpdGsqj<~kG%ArFjAnlG*@$fL7d&XEux zebDq5^UQ4Qj7ssObgnS2ES|fhaAD)LCiCKnL+;J-M~tJ0`g( zzZ&Ms>bgDbj*EE>9mq&URZV`qJD_7*Q#0$Tk#?d+Y(BZ9Gis)k_1im4Cw+cRbyg)t z&0Q?uCg6oiVf~Ym-cWa%Wtx)I?cND5t;3OI1v;2}Ds>CROygnUkWKd<-|gg_C%7G%1q1#8=2KHOsXM-diBzihiez=m+@T2DtR z9Ry;DNMYlAx4`&Z`rpLnf8iPMat5$Q|khd3k1^(q;F*aWxvopRmt z#bj}|GHf4<yCKg+r$||(SH@Nw*qy+~Sc=td)q=5UmJ28GINE?xM3!$hVa|#96dNo6)DCfx}&32lBdMG}+$J8u}r6KT~Mo;@SEi|Ve%ixs_7;$hC^&J#)oxWmb0Ll`@{Ja6x} zuJtFyrKLsoCkbS$w4^_B@^(6S$r~#gj`1H^D&qAR(TRoB38W-QhxCoiw#wKvpCr)OX9L*f8Qoz9B$WX!L0a%F7b2tjD1#AIb=CDE5G;o>A- zS+~c+A`H#_b9)`9x4F4jkG96@Fzcx<*dtq@Bm6Z5*d z&hu?uZ3{_>N*P{7K_0Y7%CZ0UU#HKqg+^{9R4JSE3z>sC&nT4sNS1$v-p=77!C;9S z_enQF6yta&Dc?}bOs#L zFD|~iFWHvIv~e{wcN68i%fuM7k8Tvn#Pc$~>F)q18x;lEM=G_EWWIJzKI-nuryaJc zByBj@>A!Ri3y6N z#`uW^5h{NLt}qTaC`$GD9TPo)I1L_ZG3yL&?*(l+{&=R>?daFMnjFLGF&*r(xeB@JNKBuLT zgbm^d-^0I7ySy9z`kURQL9~Ub6Mz3*99P%lo?bjNuY?HL5#Z_;*U)k5g#6g6O4BNX z(BKPK=gR7e?{`)I0jSHiEf^iWx`$Iv9_<*26k_M1L-B8_jQ1&XesETLz!WtP23roJ zk3d>i9JWPoJxa~$C{##2o}F;%5UU`)4+@$*;MGJO3i`>%>Q;XBv{C=wbp3=toq`{W z&*lXM{=G$>U5eZQoo!bP5(Ae8hkackRQS)S{oO$> zK2P}FZL5g{pbE}n&3P)uPR>n8*^?FzznC(i1kCm;EQ=FJmq%o-?y_S;*S?Ve@f_4^ zwkKC)-uhoMu4l>dfP6y?v(^5-Y}?Kq$jJ3^*SDdy7~T5;Wv?;WoUty(Bq)TJ1^`cj zHpjd@Au~ho$>57YDV7mPI;Z;q?X8m=oe+R7;F8W8d)PwG>ew=0Mf7Nr-ZHz(qD1~@ zk}~es77(68+d7ndn|ybU=XfljlHkqT>ebc9*^9JLJoH5Ck<)8^lfGY*))2tS;Nq=! zJ?3m_ZRLdkH!fhpBC=hd{N|TUFkayD6mwDq=F|~?*&9U=5 zk`f0WA8GB7Zp-T7gqw*|hfmog;pN=pT(l(7x5F6YBhOsgYhpq@O4 zQ}KYF=r8=5WxMu=`Q(8AcX&Y&U3KkS?6+%F$LV+PDT%O+9EH9y0kKox@r(qjkH}Jm zU!L@mg1qO^f?K{Na0|(|Tl+QUm!w0cFBKsS+7RLqbAOl3!D5G_*&UbP!(=T}FSwcE z5A-2rdOC2QB%*2V7^K{d(xX%JvX%TLEI4(^Q{-R#4;}t0%F??|s}TMO3NRGIo9Jj7 zO*m-I3YKQ1fNs_yqU0R?cVTLHe-gVvNWY4rVSg5{yONU-zk1~;B=JcQ=Cc2aXe{2H z|97kG|L&f_mcW!gc>mLtW!EwJ)jjA$mSQO;vQ#50@d0C`9NXWu)-8P0gE0M5> zYWu0sdEvah0X;**d!IgkCYp5H7@i#sD&2ERy3Qt238oo!%B$+1nV#lp$(!2IHZd8p z9g<${_2ZPGhthALS}bHaep4t?YQiwL?HwExe0`-xM@KV9Y|7v6=mM?tKinQ7S11+- z^qxIy2Qdk{t*e7OZB@iif?4?Z_OB*DJyot>TPLWl`FMRRjbuqKR4N%?q`BJASp#9!mI(06PRS=NxgmYxBKQ}{8yB#+iCSQ54DzN79f4CO zqdQq@+)pQ95($d%-c_B!0S&Qejm>&OGb4X4&GeXjdA8?+w&_xx^UWP4zi!9c zg-~klr(WX^qF>JzrgQji4%y`7n#7d-!L1X!`+9sze6c0??RjW`vX77C_RdcCHyM*4 zOF7ZMvdf2}zxM1s`Jl84hgT7>5D+(LxLQ5Dt8XOFxlzs5bTHxv1)7G(_=UZD6&dcz| zTRdS2@$nQ;=>Fk(e_vlP9x4Wm}G1x(Rk1ZS4=JsHrj6Hp|@j zm0X^a6Ra9wmqMONByo4T%9c7JCPvxc|Iz5!*vP~LUc*8(E&&-~s+i+zOH0cjRAt|x ztd_oh4`^Q&{#!TktB>wn6a@FB<}x!e0qmRWxY7&<8F~BW00pIZ&ZFT+NAgsZ+_Kpb zU4eeqOJ}Dry;l5s#>KN4D2`BNzbVUrQk_y<)NpB!5<}Y6>~@<&@cS3VEep|8Q+Qm= zZRO@agj3m_cv!m^AAO4E)IbJI|G0S3V$}O*;gVb1vVMMz4$W~a63((b_wQRAA0M-M;ud*?J5*5%G(7d1(u2W7bT4HyMOHSF__K0y z6nOafEV(r^j=+-i&@7eQ*}T;^qdDeLqZcQD#MoF0o{yYfY3VDC%Wwy!Z*@V%&ubw# zPthd^zO_}pXPbymVWva;H-MwYHFd)9ANH*JgW8St4slD^P}Y8f`H~%i;{}0$mB^&S zUs8`yXZ3Hom-ACzjbQb2XtQziSYs`q=v&vpL5N7cyGF`_T`7~$CcSmBVp3&8`Q!;sLI#bB5nB)Irj?f$ z)(o%CKpWyCt=IZNCv#~sOx#rLtOrwoMaiF^&JeyeM3-^;2r!B8t-(2R;54h=a zviB}IA*~Ax=V`3g zv^eIY_irY%xlgoAawGZj{FM0F8u1G>#GPc5&ZHZzaQ4{xF?cxQ&ibFuO2+wKC3A*z z>>Ci;=i`8>piTi?+UfAthmW$uq!OR=b7gn#b@v`A@KBBKz|EuVh^k8C&9*fxHW^|C z9!uf7pBg0!-BAj+Bg%D>m&avdVhSo$rnsV@!HpI#yvtB;mz=@grPfNisi~9DQjeUN zEOhb-ItYU^4KL+$1-K)MN;*RpO%(KW@~y!3Bsk*(3T=(miNpa!P(GH*Lvr{xN58?cZb?=9QP@Vfb@GK`-Yrtwc%-;~^;s`O#)LmiOAJkk7 z{Sy!fk$w4+`8A6?QnBWt&+x)nOkJ{y`{_}3O8^iTN4dEV1poylC9}bRy)0-tMOPV- z1m(bnfO0g;D{z}gTf4O7MN?B#`P?p8xO|9;!UK|4UKHtKL`}=Cx_!h%#h4CVzVq)N zACvcRsXs}>0m?m%62o5pSuoL1p^X(-h2fJBpdqaz*~*8#+=$HTYTB?Cv;-N_izRG_ zt$T%=O<7r)fP<4WE;bgPj?~M}`VP5y^QPCkjp2hV`LK)nKicL^AJ9osBeUML%I`dI zl=mJ6a!#eU#>u3~He}NqFdlx0`PeRS#qzO!UF>JK!pg=QiLkPd5phMgD8EG7(~B4l zUGyPKYRrBlp=I{`5Yf_CfF0+07S*dul{hC)Z zQx2QkP`LjSn!T4c@&UDO(~Aqt6#g6%ku&fWtLDf^5_flZv%XJvv)}Pc3NgXmYM(#+ zBk)l;eq?V`QC;W8dY;kypFb7APV9n$l+cVH9}+g0DHs_8&!!mwS(7 z>QXen78ggpb$72*pRy4FfYd?!Rs(QXd$!6JWerBl?Nh(cFf6;hXPs_^eXc}+%v_md zgL)PDNm_EwnZf1h0)f&*p1ExEnM13yD1tkhMkJL zVXyhRBb4-UdUq1rCHne|uQ~iaqu6OdDw3xJDaKH~2PvA!o-$b>$^I zuz=}(=6lJ-)1d{c{}LTAZv0bboBvmKQ8qUrUQn3Fm9EOuCpYlZHoTq=8S?KS(yHgV z(Ucd5cCs1kFXIt0OOMXXdO!h-itMM)NEzLn<-1rWjs)hU;2*NMv|l0)5ZapU2V#g~ z=Ad<4csHA`!?g5e_TJY*Y)lgCa-rr~j52PaBW%rFPFfvGc(s37+hK@cka8mJDMB6g zSQFEn*W6!|L^K|MJX~?5`;>&a?YMTPAh@Iu3a$)GeZ1ecFgS^FFtoirgqZu{JH6n$ zd>qsrqU7mrlN*9@l#xoDtiBhwVrSftXKh6 M#it6Ta%MsQ16EmWBme*a diff --git a/nano/templates/wires.tmpl b/nano/templates/wires.tmpl index cce49b84f95..a661fa3e851 100644 --- a/nano/templates/wires.tmpl +++ b/nano/templates/wires.tmpl @@ -2,7 +2,7 @@ {{for data.wires}} -
{{:value.colour}} + {{:value.colour}} {{if value.index}}({{:value.index}}){{/if}} {{:helper.link(value.cut ? 'Mend' : 'Cut', null, {'action' : 'cut', 'wire' : value.colour})}} {{:helper.link('Pulse', null, {'action' : 'pulse', 'wire' : value.colour})}} diff --git a/sound/effects/pray.ogg b/sound/effects/pray.ogg new file mode 100644 index 0000000000000000000000000000000000000000..beadd3916f196bb62a599b5fc2acdfb2da861e2c GIT binary patch literal 19059 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 VCvU*#7)h7ydd#UH!smDc$O5265B&fD literal 0 HcmV?d00001 diff --git a/sound/items/WelderActivate.ogg b/sound/items/WelderActivate.ogg new file mode 100644 index 0000000000000000000000000000000000000000..5218f2ab1cfbbaaf54bed46120b89095a89215fa GIT binary patch literal 9149 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 literal 0 HcmV?d00001 diff --git a/sound/items/WelderDeactivate.ogg b/sound/items/WelderDeactivate.ogg new file mode 100644 index 0000000000000000000000000000000000000000..22ac4f445cb8539d4263335b00cddb3f8f64a531 GIT binary patch literal 6686 zcmai22|UzW`~TTTh9-uFhK7h4lwm9*Zk8-FD2B;0S7n(p_Ptff7G*cN*0RiyHDrnQ zx|VE-j3QcuL`ozr_xhh1-TU7E`~QF5_vg&{oZorQd7kq;&-ZzL&#~{w5l4t0`uX&V ztPlQ7Q(E9t;EN0j^<;!`r}*|%|6FpEk2ko^w~xE??}xjSONpU=x{qM4{jcYtz&ay& zKzCsT`|Q{kdIaOo@Z8U1k0D{SwY2oL^t83P=P(67$DqUEM?FI6#-`puo^*_9gf}Cc z5fq3a?9c*#cmupHM$N^}eov6szThw?dO&bcsE5BH;9{@?kKduCi&X$j_Lw?Z7;9_c z^)&HXpgG}*hIl}fIJI_SL1Qh7bp+mbA%L_s`;I0(K zY|!q)#M)}lvasUBC*-^n0;qDws zABl_@iHvg1iKktUa=ji;dm8WlCEf#-@UyK(z4*dyJk>FLP|-GG_9V7MNv`BIu|yy) zp_(7^=9&Z}nyG}%EG3m4_N`^)H~UmI2lO;(^fbVEO8{5|xu=1O7W(1m5_@0MM+rDMnjej|T z>vjk-!K2$l&<}w%D4Ii|y3S$7BVl$Uz!Y4I{O9K^4=+Fw#lpkczR@t9bPt|cq5)e} zG0YskE(t71EPjK@8^~MgBTD2=6;&Yfhwddg<*T+<!ah6`64wHgJ4c}ra+=Y)&s0#4CaYcJaYkiT?g`}ue2h;D2bV`+SKZ_&hIBI zDh?F%-y^;PJCa88{aQuc!RV`Z!9t%XckbWeV*>o<@f6ij7=wvQ74}3bmMLZ_gr`Yl z72&(EEQOR*OL9f5Jw;ZP9UjBe90Ngd2p)?6>UdCIM=>k&Jg!^qTCaAG2Dhtz&~G?b z_W)rI#{(2==mHd{G)-R$t0h|dv70z<>TD*3jAgG!6mTlWJKa=RmKP)mIicOyau5~& zblgYfN1Nmy|D!!xL_0{Tfc98h(^1Em>O^&p3~>D|Vyq?J{b|IDk*F6VDF-(v{5!Dz zjvNRCO&l*KnV!k`&VtyzW}@p3{ws1qkewOmhZ)K?4a#c8=2S zkEJ7qWay51?nAotAu4@1lK!ljPHTyBZT=ZB>tXX^B;p^D!wnH7V(O%Irr^IKr${aJ zwL$7OQl_$N=Jw;+N0Ra?axcwRlx+C7$niN}o^!rD@%&6;s#;PuBPp-4wZy->cCPKe zw!b6CDpVOX5IGj1%KwO*yLhxYh^7V&yQOs9mHN(T@GtPIO$a=~O}NfT-f{qc*G9N!i&g zJ5i-9sM6G-Y&&XGz#{_vnGP?oa#WOyE;)_Bk8VRsLq@y8$flmdnQe#HdCK{4xna7y$YwgJJX+ip}NYP zrj5kET8Vmv;&L7tjsR2-4&9?A;)NO`kKtQ#r7};gva+JGIiRw(hF0>nvZS)R;Yej| zb$7$ns#^a!K&`z}*`QHbsZrHX{k>9SuK7x3TTOREU4CuVT=NI92O4v2!IibORSol8 zYFo`*N61{8)~PaVPg&Kwwu-j4z`3@N-sS*wY2~}yxSsoU-3=e++IBWZC^}Fh#+mMu z&OncVgGVpXzQi{K?7CC)y&EtXTqQmVLbrl#*8;bIxsE0E-5v(1>?3*Lq?I-Kl~r>M zf$9&c=gb_aQSKM%FZA7AHwV7ZPo<5dlvKWJ!}Z(-g7D8fg3vd#(C%Y;fKb>_BNpY= z^+oiN-&jY;cf-k*h|;TY(ato04L&Y5q`FOt71jBp4fr5o#Tld{0@scSM^N5jSWb9h z#jw5Pb~MwT?5oIpg6qIIrINY|vLwkqSmq!_q?m0__A6#`D1P;2PdwjaSTbaWCUelu zx1!^TTk<9^g!T-}yPqV=ZsZaGtC=E}gc+I5LfViu_xA!Imkyd*SFj`SHlWYr4MJCtBQ{4RVoC1o!E;tonl}Yy3>~N#mHbo%Z#CWHwY1;4SThjrAtFTcv z*$;;k=U{{?gpj zSF?lTS;G~MtG}2DginvUB@>y0o`6**B^m6X`L~v3`vO89w+1dtigaT2(Wf>;SNm^3&B_*V52L5DB{1W@l4$AXT{9OM!xyKnW0IwZ@K%7ByyMnOPe-$SG z8j1ctN>qS4Ytw%4weCP|fvs2NmXf?zFaMuKdd~XmKWg@WRqy|4MDwcwko#u`ncUeR z07cll@rt8>WGj4h2Dc4aAINkxCHE5Rvd6ou{oKjrUFoc#RB+%h-SKxbHgYU zoC-Uen>wDjku?Et5fwIv;tQl0!q|;ZxT2n#T4UK9w+ose3 z1CXilMk-(=x?aHXz!)b9N;xLrygtX21TuK#9h1UEBrpw^z=JApB&x_Y7jLoR`d)4= z2p}rJ&BEK>DwlRE`4e8<7qIu~B16$|2nu=XJBQ_TVcHAgvTfqhLlK@kHc`$Kt?KF4 zvhAp0CZ3ISr1-rp@Jx2tSLj8?Kd5HzC#z+|42D)WMfQTLDh38=Ary7an(!e}T|iKr zAQmdByE}mYRZ#Gar1l2*hR(RKL52W?i0gu9B)Y&Qr7F*scp5@3zaHumiH4`7G+q#U zt9@6<{doi?4kM_T*v^MckB*fJJoZ|A-}QTckEGZ^{F9f~hi{1!DD+?tiCLT^LeK0AYyvI9^_4^w^6&{(}!C>oG6+zyZck>q1 z-@Z=f-n_YD9E`&pPSL)5^^An}pRGxAMVIPi-s&k4cr!atYApRj{8sM-O8(mC>5C!*#ygf< zy$?9pJvnvNIM=&x_PTmmdy2GF{~p_uwdOU-7R!du{R$7+AZ0$E*b%RX%IDJ23 za6I_geBx^CpNbRmqmi}0CTgvoPAJ{|M_aALHIWN_8nXtC(cv(-_ASF*aK|7~tCueX z5dvF&bVt6hr=)J%GJPVQI#T~zOW-c7_SWi#y4W#`k4Ja+4A36K%?iJT#vJAsq=?-t zdRd9Md1jwLAvV@)(aUpXJBbKONVD=;S#|ahmUa1~P}g)H6Q}vP`Ov=m(zxkeeWGqK zaoMy?$m71r>am%CtyXV|gB@9-1g!*h0RsILkyJuyTp2mjbQpQ1o^crq(_!5KG%kB zO>H$#9nFwbwD8&F*|n7Y^Z`RP-kz1;1z+54lTaZ^P>e9fAR9*6GR28*8yc8TrPbfR z*!U#!_q&slla3i|k?Y7LZ3jJ;$wW`c8JUfB$TjKB;zwsE!Vr*xYm*w3EaY)jIC9e) z=1`9C@h2?t-*#xmmFM4LV3V$+E!s;OF* zHIr{Zs}A-$?Z(c^$cy)*Brit8^@mc#E{31nbiK6!7dz43rCLr=O_CqIRPbB&A9eMo zc9_>*xZP5lU`0LqF!=`kWs8;8uavB+8w*F0^&>|Ob_LhA-yEm4Sh?5u2&ngzNQiDc zoF= z`H9_I+;)#Wd`!^2w^MWGvP*}aPRO>g?!7LjufBi2cMDBruIFS&&JP*c@5TYY%Hc$J z4ybn8Pj`shtR?xyp`Gt%QJv-Ib*4Gt1>SHU5k^3_jqSL}$Z1E?>ei>(0uqlF_i4U7 zx9b=QcCde?6GFJE@uAcw`Z;o1%@rayXdjB{A-^E&s!AOzb88Qh{!Hw>!f)w7*iiRKvv2Bz z-d%%l40eW=y7*nM_W4ZO&hZwn)1;FD3yXv^9|BtQCsLeszT9pccKJoA)_vZqM-QET zTl>g@x6w+|gin2zOZ=vV)3xK1N?ULi<+)OIvZ{^OBLl3)I-%%Qnp-J|IqVg^DKHr9Bjbw5r@i|c!gwR)!Zht>M&42`F&$r97;u@G6O@Z@-hT3o zKda$NsA=xKvmfkEGRj0{6J<~CVD@EppFde_a24~xDz)1F!zJUoYqQ9rZ)=~5a5dgT z!nCuWEZpdqHNu%<3Tku#na;6+1fK&EkWt~#BI40_$Pw1Kq!I2t+a053XLPW>VNG*R zox0G!WVvjmPd1)-82BRXVeXUF;RJh2%+22j)2GSbE|w=sVlfxy)8@5aeS1}$^5$GC zWLF^eaeQP0z0olbo%`P+4A;g9B&?@&JKh6J9r9gwLRm;1h(`qpG?T)~vpmvpn^$lldU z#Sv}Ugaq~-ZKsqL=RF3}vY{*a2WQH1QtYY<*uwG?=d)4BXLIhaUO#aE{Zw-pesz;2 zB;2Y&UBJO1f4+mU$NXKh1s6JCfeOqm=B?Kwf?UBVtn;tX33J@jr$zAhSzuW#QbN;;Sc$HQxQ29pu`tm7P4W1 z|Am-Hd?&?hNFrU`_d29(mFZXe`9x>z`^X8+*pyJVq>^O_I`oXlZqqZ=3QvJ~vZ-K9 zesbVTy>`wDq?bG$dv#%!vCVCJZ0GhZTRTpfenc0{4jOOiyuPH~Q)`q@DpS`lFsnFp z%6mI*G_P~6N@&gqdE|TXmb9VwUi$CTYQLU^*IPcQ@5?d&rZv6##}B)fMVTt7?U?vQ zWGQ7+pV@Tzvhnn%^2t--mfiM>^NAVKwffhk@Od;jb_rdK_U_*MLp~Aq;t08rU4&7?d`mOJr=l%h&O2qZ zNBNU`SAXega?NcWReG>2bUtQEEb~{Cb%IZIkSD+fg%gP37ER5~X7==vu zI%|v{-TX>bYjplG@tW;y$Al-%JMx=WlfbUiO?f6#u8VTPs5jWs`piNvO((6y=ZnV} z_g7x%EO&X-g&aJzy?|3Z`be=`@{9d8MQbZD+}O!oNo&VH!zh=hT@0#= zC9|?m{va}LyWb^DiQYSOr7mB6GT0FJ{jlP^67^=k&ffbU%IuSa?fpXQ@FeKR*PEQ? zqbyvP=&e$w`t5HYDvfsO(Ri%^PJ~Z!P{2rac-e-qmCexq0G-85&Hw-a literal 0 HcmV?d00001 diff --git a/sound/items/change_drill.ogg b/sound/items/change_drill.ogg new file mode 100644 index 0000000000000000000000000000000000000000..406027a5955a1279fb3ab00e1f8248953a8bc7cf GIT binary patch literal 8469 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 N806Qp8^<1}3ILCg_ay)T literal 0 HcmV?d00001 diff --git a/sound/items/drill_use.ogg b/sound/items/drill_use.ogg new file mode 100644 index 0000000000000000000000000000000000000000..82f37cd35bb2c3e233211e0b99ebb0e09b3ea5ba GIT binary patch literal 45403 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 literal 0 HcmV?d00001 diff --git a/sound/items/jaws_cut.ogg b/sound/items/jaws_cut.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a0bfd8550299e6c10765308675b041a6b6c08733 GIT binary patch literal 17191 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 B)pq~@ literal 0 HcmV?d00001 diff --git a/sound/items/jaws_pry.ogg b/sound/items/jaws_pry.ogg new file mode 100644 index 0000000000000000000000000000000000000000..05178bd466314b9e4b6121c1f66e134ed32c43ba GIT binary patch literal 17202 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⪻X=S@qEA4LcibK2&(fjXX#=2U$)3Ce+DEM^~pK9;-%Pk8v{4vUK}P?X_b; z-^U5b=A(QRK#smP$o>T{Mr9hV*s+KT1!adWV9qCi1RQ9%?(qu{>7xM&Q3SX)rpuUs zgyR(P=#X^-7R?hRfa|?Dd7~_VKm&kH($_D6_!;x(qCN$Kmo)~Fsp&%z1j{1TvY(z2kPP%NZV)``hJ@Ai$|WjBT?FY zf2ffF8%(Z=U_5~95ir{UMBaYHCbWi%Af5q-M&OA{@()vlW2%Vf2s7pMZU|6;HLiJZ z9$R(e>vOQbv_LBv3++4MP3PQJ586omDa}bpYCIC4eC5yGz&wSIiBW0=(X)_bfqx7= zm8VDYyXM$1J_aayaE%<^oeFMg@@QtP8EwTpBr5yN&$w1d9YaKJdJrI}cVY4g z85{+JpK$WGo@2MZ%osGLL3o=INPiY!Y&b~TL*_g?j@!^fD$ z3l}yf*T$&L(hrE+9;Hh#% zX)6TP?HwK<@e~WuI0^#pmUux~h`|fp?5CJniDyVU0)8rh5CjVCeMOpWEV=+p$}t5r z;4_=3u<;G|h~5c(Rz;o@T+C=Q~N1-=NnL3uaen(f?rbp#6l#^zG7{}{^s zRtErm2+$OSr{{$U(AX^SK5sh@izs%=$!yy5YRPNDD1(@dhj*`_ZoX1pts8=L?cN?q zY(r_QVD&=JTh1u?C@;TH<(n7?f5bqNfv5-E4%~%bjtPD+;bHXWqrSwywsJrHfzH{I zPGxkFaL~)SpUjJ@o#NAaq^f!7<%oUo#EN$~$XV=~=Vi2&f<@i0hx&PiO_&4?-%8KL zqlThHcVUaM9K5B`#&}VOBdkV_Ha66h)j9=7PGJniX2j&FHF>L|3CYKA3W> z^bQM+bPcj){(n{oT3P#JX!2f#mFyClHNFIZLWn$s3aaY0s<%Oikafdy?Raetp5%uD zCbA2>`WcxKyUP-#dGoK+P$fM@yHJ4@vVFcF#x}+=J;1)UlXc$DdD!{+%n97lU}E=a zr4YT$>(s87v$im%0kd3G%zEKLhdX72KCGERtgnp-rgdCei10Z-xfZ zOTR8Z_fMgYoUk%EwU0f{8RQ~16bL?-`?=cb#3G?mF< z2<-s(5noI0w+))@`6OHH33{RNl1c}YGdE%i?5P8rv$R`XS|)O9mFeYj;k39{JPV{* z_${5b;0s%HlpKsF4-V81EYV}ao&7C!i5tQ(fo$1@KQR$LNQV6C-5b)m(8V|CW+?K^ z>=F$a7<(v4Gzh<)zTvNB^gI3YhI{J{b5;JY-@X$jJ?BWi`AzhimEa3i`pXo?M-lSJ z>vb|mIVq&8E5^9KTT+%u>!lMz5nPdM6k*?o54oJ&Y+HvDa!Ohs_PI!iDPH|t#Tz8C zR=H&U7W#8skB4XA@C(OxyZ9$Lvh>-Ud|%dNvRqxP%azrT%*@QKKTpVc%UrPj3I07) zwRpZv)W{Vuafx1AQ0<@1KVW#FibV-XSh9uW8XF z+GBwP1j#PQr^PzNjb1rj&0lOsHh(k~!CQxRW!+@TSW1V&~fz^|ahrpl|ikM)Es1eU$9bjOD!;gg8RhctRbB3iul}N?;u4-3A>!+ zHyE)7?4p=K{nyn)s)Txor*(DTC?P9Xx0jA) zZy_Y<-Kk^m$mwjvs6Ph>Pve%IJ-EUbO^$HFbTW6*+RGVukgGi{;yj{UA24E-I;iSA znJ4{zYY`f0A<5pN@kUDjXP{)WybyA5vBxw9hZNnk^Dn-N?zm*qUh=jNUJXsgSuHmP zJ-SEjqMUh^mAfKJtb#7H3e;+hem~Y%w(}><&wU(2pDQX6oxMJpzzAV8J01i6ZZIH+ zblp$r|27!F#WC<5HQWN}TTiy^a4GX#h=jWFX8DOI@+>tQ;JsDl!gJ!ZK1kz9I-Y>7Y>dcd+5Zf(ixV> zhJjBd&(n_#M+HLgjZV#3m-uAx$xQej_)WH@qVHA|VN_=1hI^o~n#K1a@d3!>Vsj$- zLL6OgPqclfjXIHuXljVUR>n{N<`M4o0sBY5({7H;jQ>AMOX%C@hM;C*-(^&fA zUvK=DcUBjx`AxnP?7vK%n{x Date: Sun, 5 Mar 2017 20:14:06 +0100 Subject: [PATCH 03/21] Fixes --- code/datums/wires/airlock.dm | 1 + code/modules/power/power.dm | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index 43f6b033d39..b935b68168b 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -6,6 +6,7 @@ /datum/wires/airlock holder_type = /obj/machinery/door/airlock wire_count = 12 + window_x = 410 window_y = 570 var/const/AIRLOCK_WIRE_IDSCAN = 1 diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index bab046450a3..278b4513d2f 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -317,12 +317,16 @@ //source is an object caused electrocuting (airlock, grille, etc) //No animations will be performed by this proc. /proc/electrocute_mob(mob/living/carbon/M as mob, var/power_source, var/obj/source, var/siemens_coeff = 1.0) - if(istype(M.loc,/obj/mecha)) return 0 //feckin mechs are dumb + if(!istype(M)) + return 0 + if(istype(M.loc,/obj/mecha)) + return 0 //feckin mechs are dumb if(istype(M,/mob/living/carbon/human)) var/mob/living/carbon/human/H = M if(H.gloves) var/obj/item/clothing/gloves/G = H.gloves - if(G.siemens_coefficient == 0) return 0 //to avoid spamming with insulated glvoes on + if(G.siemens_coefficient == 0) + return 0 //to avoid spamming with insulated glvoes on var/area/source_area if(istype(power_source,/area)) From 9aa819eea39bc9c3275d12a7b174f9ebb0359689 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 5 Mar 2017 20:19:40 +0100 Subject: [PATCH 04/21] Lets make the medical wrench admin only, because it's basically a /tg/ meme --- code/game/machinery/vending.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index ada0269abf1..f45daee2af5 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -908,7 +908,7 @@ /obj/item/weapon/reagent_containers/glass/bottle/toxin = 4,/obj/item/weapon/reagent_containers/syringe/antiviral = 6,/obj/item/weapon/reagent_containers/syringe/insulin = 4, /obj/item/weapon/reagent_containers/syringe = 12,/obj/item/device/healthanalyzer = 5,/obj/item/device/healthupgrade = 5,/obj/item/weapon/reagent_containers/glass/beaker = 4, /obj/item/weapon/reagent_containers/dropper = 2,/obj/item/stack/medical/bruise_pack/advanced = 3, /obj/item/stack/medical/ointment/advanced = 3, - /obj/item/stack/medical/bruise_pack = 3,/obj/item/stack/medical/splint = 4, /obj/item/device/sensor_device = 2, /obj/item/weapon/reagent_containers/hypospray/autoinjector = 4, /obj/item/weapon/wrench/medical = 1) + /obj/item/stack/medical/bruise_pack = 3,/obj/item/stack/medical/splint = 4, /obj/item/device/sensor_device = 2, /obj/item/weapon/reagent_containers/hypospray/autoinjector = 4) contraband = list(/obj/item/weapon/reagent_containers/glass/bottle/pancuronium = 1,/obj/item/weapon/reagent_containers/glass/bottle/sulfonal = 1) From ec699eb27d9ab7495b9214e46133828d64d2a151 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 5 Mar 2017 20:31:02 +0100 Subject: [PATCH 05/21] Add airlock interaction to jaws --- code/game/machinery/doors/airlock.dm | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 1bc514a1df4..fe6fc38351b 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -830,7 +830,7 @@ About the new airlock wires panel: else if(istype(C, /obj/item/weapon/pai_cable)) // -- TLE var/obj/item/weapon/pai_cable/cable = C cable.plugin(src, user) - else if(istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/twohanded/fireaxe) ) + else if(istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/twohanded/fireaxe)) var/beingcrowbarred = null if(istype(C, /obj/item/weapon/crowbar) ) beingcrowbarred = 1 //derp, Agouri @@ -873,6 +873,30 @@ About the new airlock wires panel: qdel(src) return + else if(istype(C, /obj/item/weapon/crowbar/power)) + if(isElectrified()) + shock(user, 100)//it's like sticking a forck in a power socket + return + + if(!density)//already open + return + + if(locked) + to_chat(user, "The bolts are down, it won't budge!") + return + + if(welded) + to_chat(user, "It's welded, it won't budge!") + return + + var/time_to_open = 5 + if(hasPower()) + time_to_open = 50 + playsound(src, 'sound/machines/airlock_alien_prying.ogg',100,1) //is it aliens or just the CE being a dick? + if(do_after(user, time_to_open, target = src)) + open(2) + if(density && !open(2)) + to_chat(user, "Despite your attempts, the [src] refuses to open.") else if(arePowerSystemsOn()) to_chat(user, "\blue The airlock's motors resist your efforts to force it.") else if(locked) From 117d4de209fcfc9ca9143cdaa06ee78a3c7007f1 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 5 Mar 2017 20:34:22 +0100 Subject: [PATCH 06/21] Fix proc --- code/game/machinery/doors/airlock.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index fe6fc38351b..66660f8b659 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -890,7 +890,7 @@ About the new airlock wires panel: return var/time_to_open = 5 - if(hasPower()) + if(arePowerSystemsOn()) time_to_open = 50 playsound(src, 'sound/machines/airlock_alien_prying.ogg',100,1) //is it aliens or just the CE being a dick? if(do_after(user, time_to_open, target = src)) From 9ec1400ae1344eba2b1effc8be6bce8ff06134c0 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 5 Mar 2017 23:04:41 +0100 Subject: [PATCH 07/21] Fix comments --- code/datums/wires/particle_accelerator.dm | 2 +- code/game/machinery/doors/airlock.dm | 2 +- code/game/objects/items/weapons/tools.dm | 1 + code/modules/research/designs/equipment_designs.dm | 4 ++-- code/modules/research/designs/medical_designs.dm | 12 ++++++------ 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/code/datums/wires/particle_accelerator.dm b/code/datums/wires/particle_accelerator.dm index d1e78dc2755..1ed68b799f4 100644 --- a/code/datums/wires/particle_accelerator.dm +++ b/code/datums/wires/particle_accelerator.dm @@ -16,7 +16,7 @@ var/const/PARTICLE_LIMIT_POWER_WIRE = 8 // Determines how strong the PA can be. return "Strength" if(PARTICLE_INTERFACE_WIRE) - return "Interfact" + return "Interface" if(PARTICLE_LIMIT_POWER_WIRE) return "Maximum Power" diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 66660f8b659..da82b73d353 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -875,7 +875,7 @@ About the new airlock wires panel: return else if(istype(C, /obj/item/weapon/crowbar/power)) if(isElectrified()) - shock(user, 100)//it's like sticking a forck in a power socket + shock(user, 100)//it's like sticking a fork in a power socket return if(!density)//already open diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 1816e6287e6..7d4a7e19bd8 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -588,6 +588,7 @@ light_intensity = 0 change_icons = 0 origin_tech = "plasmatech=5;engineering=5;abductor=3" + can_off_process = 1 /obj/item/weapon/weldingtool/abductor/process() if(get_fuel() <= max_fuel) diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm index b0e895c3edb..bb5c126efd1 100644 --- a/code/modules/research/designs/equipment_designs.dm +++ b/code/modules/research/designs/equipment_designs.dm @@ -198,7 +198,7 @@ id = "handdrill" req_tech = list("materials" = 4, "engineering" = 6) build_type = PROTOLATHE - materials = list(MAT_METAL = 3500, MAT_SILVER = 1500, MAT_TITANIUM = 2500) + materials = list(MAT_METAL = 3500, MAT_SILVER = 1500, MAT_GOLD = 1000) build_path = /obj/item/weapon/screwdriver/power category = list("Equipment") @@ -209,7 +209,7 @@ req_tech = list("materials" = 4, "engineering" = 6, "magnets" = 6) // added one more requirment since the Jaws of Life are a bit OP build_path = /obj/item/weapon/crowbar/power build_type = PROTOLATHE - materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_TITANIUM = 3500) + materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_DIAMOND = 1000) category = list("Equipment") /datum/design/alienwrench diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 2e18a71cc0a..4955efd2535 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -206,7 +206,7 @@ req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/scalpel/alien build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500) + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) category = list("Medical Designs") /datum/design/alienhemostat @@ -216,7 +216,7 @@ req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/hemostat/alien build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500) + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) category = list("Medical Designs") /datum/design/alienretractor @@ -226,7 +226,7 @@ req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/retractor/alien build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500) + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) category = list("Medical Designs") /datum/design/aliensaw @@ -236,7 +236,7 @@ req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/circular_saw/alien build_type = PROTOLATHE - materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000) + materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_GOLD = 1000, MAT_PLASMA = 1000) category = list("Medical Designs") /datum/design/aliendrill @@ -246,7 +246,7 @@ req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/surgicaldrill/alien build_type = PROTOLATHE - materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000) + materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_GOLD = 1000, MAT_PLASMA = 1000) category = list("Medical Designs") /datum/design/aliencautery @@ -256,7 +256,7 @@ req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/cautery/alien build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500) + materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) category = list("Medical Designs") ///////////////////////////////////////// From 44e8080de2dabb2b56cba39012c39b498639f641 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 5 Mar 2017 23:05:19 +0100 Subject: [PATCH 08/21] Fix design names --- code/modules/research/designs/equipment_designs.dm | 1 - code/modules/research/designs/medical_designs.dm | 12 ++++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm index bb5c126efd1..e63211dc35b 100644 --- a/code/modules/research/designs/equipment_designs.dm +++ b/code/modules/research/designs/equipment_designs.dm @@ -191,7 +191,6 @@ build_path = /obj/item/clothing/glasses/hud/hydroponic/night category = list("Equipment") - /datum/design/handdrill name = "Hand Drill" desc = "A small electric hand drill with an interchangable screwdriver and bolt bit" diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 4955efd2535..3cd548dab18 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -207,7 +207,7 @@ build_path = /obj/item/weapon/scalpel/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) - category = list("Medical Designs") + category = list("Medical") /datum/design/alienhemostat name = "Alien Hemostat" @@ -217,7 +217,7 @@ build_path = /obj/item/weapon/hemostat/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) - category = list("Medical Designs") + category = list("Medical") /datum/design/alienretractor name = "Alien Retractor" @@ -227,7 +227,7 @@ build_path = /obj/item/weapon/retractor/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) - category = list("Medical Designs") + category = list("Medical") /datum/design/aliensaw name = "Alien Circular Saw" @@ -237,7 +237,7 @@ build_path = /obj/item/weapon/circular_saw/alien build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_GOLD = 1000, MAT_PLASMA = 1000) - category = list("Medical Designs") + category = list("Medical") /datum/design/aliendrill name = "Alien Drill" @@ -247,7 +247,7 @@ build_path = /obj/item/weapon/surgicaldrill/alien build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_GOLD = 1000, MAT_PLASMA = 1000) - category = list("Medical Designs") + category = list("Medical") /datum/design/aliencautery name = "Alien Cautery" @@ -257,7 +257,7 @@ build_path = /obj/item/weapon/cautery/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) - category = list("Medical Designs") + category = list("Medical") ///////////////////////////////////////// //////////Cybernetic Implants//////////// From 5989862d37d3ce82f8ff4b84dbb318a772a51077 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 5 Mar 2017 23:30:41 +0100 Subject: [PATCH 09/21] Fix space --- code/game/objects/items/weapons/tools.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 7d4a7e19bd8..a5720ea277f 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -70,7 +70,7 @@ /obj/item/weapon/wrench/power/attack_self(mob/user) playsound(get_turf(user),'sound/items/change_drill.ogg', 50, 1) var/obj/item/weapon/wirecutters/power/s_drill = new /obj/item/weapon/screwdriver/power - to_chat(user, "You attach the screw driver bit to [src].") + to_chat(user, "You attach the screwdriver bit to [src].") qdel(src) user.put_in_active_hand(s_drill) From 960b1206bdf8b1c3aa9297d82a6ae077095ba719 Mon Sep 17 00:00:00 2001 From: Markolie Date: Sun, 5 Mar 2017 23:36:18 +0100 Subject: [PATCH 10/21] Fix wire path --- code/datums/wires/explosive.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm index 2c0692f51a8..2cc1dc07d5f 100644 --- a/code/datums/wires/explosive.dm +++ b/code/datums/wires/explosive.dm @@ -3,7 +3,7 @@ var/const/WIRE_EXPLODE = 1 -/datum/wires/apc/GetWireName(index) +/datum/wires/explosive/GetWireName(index) switch(index) if(WIRE_EXPLODE) return "Explode" From 2c8ca5079fa256dbc083fbe2ba1763eef86a55a0 Mon Sep 17 00:00:00 2001 From: Markolie Date: Mon, 6 Mar 2017 13:07:13 +0100 Subject: [PATCH 11/21] Comments --- code/game/objects/items/weapons/tools.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index a5720ea277f..a1591830f9d 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -60,7 +60,7 @@ icon_state = "drill_bolt" item_state = "drill" usesound = 'sound/items/drill_use.ogg' - materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_GOLD=25) origin_tech = "materials=2;engineering=2" //done for balance reasons, making them high value for research, but harder to get force = 8 //might or might not be too high, subject to change throwforce = 8 @@ -182,7 +182,7 @@ desc = "A simple hand drill with a screwdriver bit attached." icon_state = "drill_screw" item_state = "drill" - materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_GOLD=25) origin_tech = "materials=2;engineering=2" //done for balance reasons, making them high value for research, but harder to get force = 8 //might or might not be too high, subject to change throwforce = 8 @@ -592,7 +592,7 @@ /obj/item/weapon/weldingtool/abductor/process() if(get_fuel() <= max_fuel) - reagents.add_reagent("welding_fuel", 1) + reagents.add_reagent("fuel", 1) ..() /obj/item/weapon/weldingtool/hugetank From 3b73053bc43371d54bdbd7b7e37f9ed0c14377a6 Mon Sep 17 00:00:00 2001 From: Markolie Date: Mon, 6 Mar 2017 20:46:24 +0100 Subject: [PATCH 12/21] Tool fixes --- code/datums/wires/alarm.dm | 2 +- code/datums/wires/explosive.dm | 2 +- .../miniantags/abduction/abduction.dm | 2 +- code/game/machinery/syndicatebomb.dm | 2 +- .../objects/items/weapons/storage/belt.dm | 6 ++-- .../objects/items/weapons/storage/toolbox.dm | 4 +-- code/game/objects/items/weapons/tools.dm | 5 +-- .../mob/living/silicon/robot/robot_modules.dm | 32 +++++++++---------- code/modules/power/cable.dm | 9 ++---- code/modules/power/lighting.dm | 2 +- .../research/designs/medical_designs.dm | 13 ++++---- code/modules/research/research.dm | 2 +- 12 files changed, 39 insertions(+), 42 deletions(-) diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index c37381f47ca..f412e96b5ee 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -18,7 +18,7 @@ var/const/AALARM_WIRE_AALARM = 16 return "Power" if(AALARM_WIRE_SYPHON) - return "Panic Syphon" + return "Syphon" if(AALARM_WIRE_AI_CONTROL) return "AI Control" diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm index 2cc1dc07d5f..db397d63d42 100644 --- a/code/datums/wires/explosive.dm +++ b/code/datums/wires/explosive.dm @@ -27,7 +27,7 @@ var/const/WIRE_EXPLODE = 1 /datum/wires/explosive/gibtonite holder_type = /obj/item/weapon/twohanded/required/gibtonite -/datum/wires/explosive/gibtonite/CanUse(mob/living/L) +/datum/wires/explosive/gibtonite/CanUse(mob/L) return 1 /datum/wires/explosive/gibtonite/UpdateCut(index, mended) diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index 6ac4c84217f..ab41b7c24b8 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -247,7 +247,7 @@ V.flags |= NODROP agent.equip_to_slot_or_del(V, slot_wear_suit) agent.equip_to_slot_or_del(new /obj/item/weapon/abductor_baton(agent), slot_in_backpack) - agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/decloner/alien(agent), slot_belt) + agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/decloner/alien(agent), slot_in_backpack) agent.equip_to_slot_or_del(new /obj/item/device/abductor/silencer(agent), slot_in_backpack) agent.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/abductor(agent), slot_head) agent.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/military/abductor/full(agent), slot_belt) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 736d1cf9ba7..b26fd7a11f2 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -89,7 +89,7 @@ else to_chat(user, "There isn't anything in here to remove!") else if(open_panel) - to_chat(user, "The wires conneting the shell to the explosives are holding it down!") + to_chat(user, "The wires connecting the shell to the explosives are holding it down!") else to_chat(user, "The cover is screwed on, it won't pry off!") else if(istype(I, /obj/item/weapon/bombcore)) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 3c6f4be5a2c..4c6f8e88e25 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -68,7 +68,7 @@ new /obj/item/weapon/weldingtool(src) new /obj/item/weapon/crowbar(src) new /obj/item/weapon/wirecutters(src) - new /obj/item/stack/cable_coil(src, 30, pick("red","yellow","orange")) + new /obj/item/stack/cable_coil(src, 30, pick(COLOR_RED, COLOR_YELLOW, COLOR_ORANGE)) update_icon() /obj/item/weapon/storage/belt/utility/full/multitool/New() @@ -99,7 +99,7 @@ new /obj/item/weapon/crowbar/power(src) new /obj/item/weapon/weldingtool/experimental(src)//This can be changed if this is too much new /obj/item/device/multitool(src) - new /obj/item/stack/cable_coil(src, 30, pick("red","yellow","orange")) + new /obj/item/stack/cable_coil(src, 30, pick(COLOR_RED, COLOR_YELLOW, COLOR_ORANGE)) new /obj/item/weapon/extinguisher/mini(src) new /obj/item/device/analyzer(src) update_icon() @@ -265,7 +265,7 @@ new /obj/item/weapon/crowbar/abductor(src) new /obj/item/weapon/wirecutters/abductor(src) new /obj/item/device/multitool/abductor(src) - new /obj/item/stack/cable_coil(src, 30, "white") + new /obj/item/stack/cable_coil(src, 30, COLOR_WHITE) /obj/item/weapon/storage/belt/military/assault name = "assault belt" diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index cfdbe4d24fd..a6ecd3d45ac 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -55,7 +55,7 @@ /obj/item/weapon/storage/toolbox/electrical/New() ..() - var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white") + var/pickedcolor = pick(COLOR_RED, COLOR_YELLOW, COLOR_GREEN, COLOR_BLUE, COLOR_PINK, COLOR_ORANGE, COLOR_CYAN, COLOR_WHITE) new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wirecutters(src) new /obj/item/device/t_scanner(src) @@ -93,7 +93,7 @@ /obj/item/weapon/storage/toolbox/drone/New() ..() - var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white") + var/pickedcolor = pick(pick(COLOR_RED, COLOR_YELLOW, COLOR_GREEN, COLOR_BLUE, COLOR_PINK, COLOR_ORANGE, COLOR_CYAN, COLOR_WHITE)) new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wrench(src) new /obj/item/weapon/weldingtool(src) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index a1591830f9d..c286c4887d6 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -56,7 +56,7 @@ /obj/item/weapon/wrench/power name = "Hand Drill" - desc = "A simple powered drill with a bolt bit" + desc = "A simple powered drill with a bolt bit." icon_state = "drill_bolt" item_state = "drill" usesound = 'sound/items/drill_use.ogg' @@ -200,7 +200,7 @@ /obj/item/weapon/screwdriver/power/attack_self(mob/user) playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, 1) var/obj/item/weapon/wrench/power/b_drill = new /obj/item/weapon/wrench/power - user << "You attach the bolt driver bit to [src]." + to_chat(user, "You attach the bolt driver bit to [src].") qdel(src) user.put_in_active_hand(b_drill) @@ -643,6 +643,7 @@ obj/item/weapon/weldingtool/experimental/process() force = 5 throwforce = 7 item_state = "crowbar" + w_class = WEIGHT_CLASS_SMALL materials = list(MAT_METAL=50) origin_tech = "engineering=1;combat=1" attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 152ed03fec8..55c3a8fba0f 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -115,8 +115,8 @@ ..() modules += new /obj/item/weapon/melee/baton/loaded(src) modules += new /obj/item/weapon/extinguisher(src) - modules += new /obj/item/weapon/wrench(src) - modules += new /obj/item/weapon/crowbar(src) + modules += new /obj/item/weapon/wrench/cyborg(src) + modules += new /obj/item/weapon/crowbar/cyborg(src) modules += new /obj/item/device/healthanalyzer(src) emag = new /obj/item/weapon/melee/energy/sword/cyborg(src) @@ -193,11 +193,11 @@ modules += new /obj/item/weapon/rcd/borg(src) modules += new /obj/item/weapon/extinguisher(src) modules += new /obj/item/weapon/weldingtool/largetank/cyborg(src) - modules += new /obj/item/weapon/screwdriver(src) - modules += new /obj/item/weapon/wrench(src) - modules += new /obj/item/weapon/crowbar(src) - modules += new /obj/item/weapon/wirecutters(src) - modules += new /obj/item/device/multitool(src) + modules += new /obj/item/weapon/screwdriver/cyborg(src) + modules += new /obj/item/weapon/wrench/cyborg(src) + modules += new /obj/item/weapon/crowbar/cyborg(src) + modules += new /obj/item/weapon/wirecutters/cyborg(src) + modules += new /obj/item/device/multitool/cyborg(src) modules += new /obj/item/device/t_scanner(src) modules += new /obj/item/device/analyzer(src) modules += new /obj/item/taperoll/engineering(src) @@ -353,7 +353,7 @@ modules += new /obj/item/weapon/gun/energy/printer(src) modules += new /obj/item/weapon/gun/projectile/revolver/grenadelauncher/multi/cyborg(src) modules += new /obj/item/weapon/card/emag(src) - modules += new /obj/item/weapon/crowbar(src) + modules += new /obj/item/weapon/crowbar/cyborg(src) modules += new /obj/item/weapon/pinpointer/operative(src) emag = null @@ -391,7 +391,7 @@ modules += new /obj/item/weapon/surgicaldrill(src) modules += new /obj/item/weapon/melee/energy/sword/cyborg/saw(src) //Energy saw -- primary weapon modules += new /obj/item/weapon/card/emag(src) - modules += new /obj/item/weapon/crowbar(src) + modules += new /obj/item/weapon/crowbar/cyborg(src) modules += new /obj/item/weapon/pinpointer/operative(src) emag = null @@ -411,7 +411,7 @@ modules += new /obj/item/weapon/pickaxe/drill/jackhammer(src) modules += new /obj/item/borg/combat/shield(src) modules += new /obj/item/borg/combat/mobility(src) - modules += new /obj/item/weapon/wrench(src) + modules += new /obj/item/weapon/wrench/cyborg(src) emag = new /obj/item/weapon/gun/energy/lasercannon/cyborg(src) fix_modules() @@ -427,7 +427,7 @@ modules += new /obj/item/weapon/pickaxe/drill/jackhammer(src) modules += new /obj/item/borg/combat/shield(src) modules += new /obj/item/borg/combat/mobility(src) - modules += new /obj/item/weapon/wrench(src) + modules += new /obj/item/weapon/wrench/cyborg(src) emag = new /obj/item/weapon/gun/energy/lasercannon/cyborg(src) fix_modules() @@ -474,11 +474,11 @@ /obj/item/weapon/robot_module/drone/New() modules += new /obj/item/weapon/weldingtool/largetank/cyborg(src) - modules += new /obj/item/weapon/screwdriver(src) - modules += new /obj/item/weapon/wrench(src) - modules += new /obj/item/weapon/crowbar(src) - modules += new /obj/item/weapon/wirecutters(src) - modules += new /obj/item/device/multitool(src) + modules += new /obj/item/weapon/screwdriver/cyborg(src) + modules += new /obj/item/weapon/wrench/cyborg(src) + modules += new /obj/item/weapon/crowbar/cyborg(src) + modules += new /obj/item/weapon/wirecutters/cyborg(src) + modules += new /obj/item/device/multitool/cyborg(src) modules += new /obj/item/device/lightreplacer(src) modules += new /obj/item/weapon/gripper(src) modules += new /obj/item/weapon/matter_decompiler(src) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 0bbc04c08d8..b01dceb86a7 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -483,18 +483,16 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( /obj/item/stack/cable_coil/suicide_act(mob/user) if(locate(/obj/structure/stool) in user.loc) - user.visible_message("[user] is making a noose with the [src.name]! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is making a noose with the [name]! It looks like \he's trying to commit suicide.") else - user.visible_message("[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide.") + user.visible_message("[user] is strangling \himself with the [name]! It looks like \he's trying to commit suicide.") return(OXYLOSS) /obj/item/stack/cable_coil/New(loc, length = MAXCOIL, var/paramcolor = null) ..() - src.amount = length + amount = length if(paramcolor) color = paramcolor - else - color = color pixel_x = rand(-2,2) pixel_y = rand(-2,2) update_icon() @@ -543,7 +541,6 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( /obj/item/stack/cable_coil/update_icon() if(!color) color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_ORANGE, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN) - color = color if(amount == 1) icon_state = "coil1" name = "cable piece" diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 2b2b3e20183..b207e972036 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -65,7 +65,7 @@ src.icon_state = "tube-construct-stage1" if("bulb") src.icon_state = "bulb-construct-stage1" - new /obj/item/stack/cable_coil(get_turf(src.loc), 1, "red") + new /obj/item/stack/cable_coil(get_turf(src.loc), 1, COLOR_RED) user.visible_message("[user.name] removes the wiring from [src].", \ "You remove the wiring from [src].", "You hear a noise.") playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 3cd548dab18..4163b36f573 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -197,13 +197,12 @@ materials = list (MAT_METAL = 2000, MAT_GLASS = 1500, MAT_SILVER = 1000, MAT_GOLD = 1000, MAT_DIAMOND = 1000) build_path = /obj/item/weapon/scalpel/manager category = list("Medical") - /datum/design/alienscalpel name = "Alien Scalpel" desc = "An advanced scalpel obtained through Abductor technology." id = "alien_scalpel" - req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/scalpel/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) @@ -213,7 +212,7 @@ name = "Alien Hemostat" desc = "An advanced hemostat obtained through Abductor technology." id = "alien_hemostat" - req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/hemostat/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) @@ -223,7 +222,7 @@ name = "Alien Retractor" desc = "An advanced retractor obtained through Abductor technology." id = "alien_retractor" - req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/retractor/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) @@ -233,7 +232,7 @@ name = "Alien Circular Saw" desc = "An advanced surgical saw obtained through Abductor technology." id = "alien_saw" - req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/circular_saw/alien build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_GOLD = 1000, MAT_PLASMA = 1000) @@ -243,7 +242,7 @@ name = "Alien Drill" desc = "An advanced drill obtained through Abductor technology." id = "alien_drill" - req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/surgicaldrill/alien build_type = PROTOLATHE materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_GOLD = 1000, MAT_PLASMA = 1000) @@ -253,7 +252,7 @@ name = "Alien Cautery" desc = "An advanced cautery obtained through Abductor technology." id = "alien_cautery" - req_tech = list("bio" = 4, "materials" = 4, "abductor" = 3) + req_tech = list("biotech" = 4, "materials" = 4, "abductor" = 3) build_path = /obj/item/weapon/cautery/alien build_type = PROTOLATHE materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_GOLD = 500, MAT_PLASMA = 500) diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index d7ca9ef883d..8386c79377d 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -220,7 +220,7 @@ datum/tech/engineering name = "Engineering Research" desc = "Development of new and improved engineering parts and methods." id = "engineering" - max_level = 5 + max_level = 6 datum/tech/plasmatech name = "Plasma Research" From 3aa1399995e8a2927699eebb0ba7ec5a8b0b480e Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 7 Mar 2017 16:46:28 +0100 Subject: [PATCH 13/21] Implement usesound/toolspeed --- code/ATMOSPHERICS/atmospherics.dm | 4 +- .../components/omni_devices/omni_base.dm | 4 +- .../components/unary_devices/vent_pump.dm | 14 ++-- .../components/unary_devices/vent_scrubber.dm | 4 +- .../helper_datums/construction_datum.dm | 13 ++-- code/datums/spells/conjure.dm | 2 +- code/datums/wires/wires.dm | 3 +- .../miniantags/abduction/abduction_gear.dm | 6 +- .../miniantags/abduction/machinery/console.dm | 2 +- code/game/gamemodes/miniantags/borer/borer.dm | 2 +- code/game/gamemodes/miniantags/morph/morph.dm | 2 +- code/game/gamemodes/nuclear/nuclearbomb.dm | 6 +- code/game/machinery/Freezer.dm | 4 +- code/game/machinery/OpTable.dm | 4 +- code/game/machinery/Sleeper.dm | 4 +- code/game/machinery/adv_med.dm | 4 +- code/game/machinery/alarm.dm | 10 ++- code/game/machinery/atmo_control.dm | 4 +- code/game/machinery/atmoalter/canister.dm | 4 +- code/game/machinery/atmoalter/meter.dm | 4 +- code/game/machinery/atmoalter/scrubber.dm | 2 +- code/game/machinery/buttons.dm | 4 +- code/game/machinery/camera/camera.dm | 14 ++-- code/game/machinery/camera/camera_assembly.dm | 15 ++-- code/game/machinery/cell_charger.dm | 2 +- code/game/machinery/cloning.dm | 2 +- code/game/machinery/computer/ai_core.dm | 40 +++++------ .../game/machinery/computer/buildandrepair.dm | 68 ++++++++++--------- code/game/machinery/computer/computer.dm | 11 +-- code/game/machinery/computer/honkputer.dm | 7 +- code/game/machinery/constructable_frame.dm | 18 ++--- code/game/machinery/deployable.dm | 6 +- code/game/machinery/doors/airlock.dm | 6 +- .../machinery/doors/airlock_electronics.dm | 2 + code/game/machinery/doors/firedoor.dm | 62 +++++++++-------- code/game/machinery/doors/windowdoor.dm | 11 +-- code/game/machinery/doppler_array.dm | 4 +- code/game/machinery/firealarm.dm | 13 ++-- code/game/machinery/floodlight.dm | 4 +- code/game/machinery/lightswitch.dm | 4 +- code/game/machinery/machinery.dm | 12 ++-- code/game/machinery/mass_driver.dm | 46 ++++++------- code/game/machinery/newscaster.dm | 6 +- code/game/machinery/pipe/construction.dm | 8 +-- code/game/machinery/pipe/pipe_dispenser.dm | 8 +-- code/game/machinery/portable_turret.dm | 32 ++++----- code/game/machinery/programmable_unloader.dm | 11 +-- code/game/machinery/recharger.dm | 2 +- code/game/machinery/shieldgen.dm | 13 ++-- code/game/machinery/suit_storage_unit.dm | 2 +- code/game/machinery/syndicatebomb.dm | 4 +- code/game/machinery/telecomms/logbrowser.dm | 4 +- .../telecomms/machine_interactions.dm | 15 ++-- code/game/machinery/telecomms/telemonitor.dm | 4 +- .../machinery/telecomms/traffic_control.dm | 4 +- code/game/machinery/vending.dm | 2 +- code/game/mecha/equipment/tools/work_tools.dm | 14 ++-- code/game/mecha/mecha.dm | 2 +- code/game/mecha/mecha_construction_paths.dm | 26 ++++--- code/game/mecha/mecha_wreckage.dm | 2 +- code/game/objects/effects/aliens.dm | 4 +- .../game/objects/effects/decals/contraband.dm | 2 +- code/game/objects/effects/spiders.dm | 2 +- code/game/objects/items/crayons.dm | 3 +- code/game/objects/items/devices/modkit.dm | 4 +- code/game/objects/items/devices/pizza_bomb.dm | 6 +- .../objects/items/devices/radio/intercom.dm | 24 ++++--- code/game/objects/items/devices/scanners.dm | 3 +- .../objects/items/devices/taperecorder.dm | 2 +- .../objects/items/mountable_frames/frames.dm | 2 + code/game/objects/items/stacks/nanopaste.dm | 2 +- code/game/objects/items/stacks/rods.dm | 2 + .../objects/items/stacks/sheets/leather.dm | 2 +- .../objects/items/stacks/sheets/sheets.dm | 2 + code/game/objects/items/toys.dm | 2 +- code/game/objects/items/weapons/RCD.dm | 18 ++--- code/game/objects/items/weapons/cosmetics.dm | 18 ++--- code/game/objects/items/weapons/defib.dm | 10 +-- code/game/objects/items/weapons/explosives.dm | 5 +- .../items/weapons/grenades/chem_grenade.dm | 7 +- code/game/objects/items/weapons/handcuffs.dm | 2 +- .../items/weapons/implants/implanter.dm | 3 +- .../objects/items/weapons/melee/energy.dm | 2 + code/game/objects/items/weapons/powerfist.dm | 2 +- code/game/objects/items/weapons/scissors.dm | 6 +- .../game/objects/items/weapons/stock_parts.dm | 13 +++- .../objects/items/weapons/storage/backpack.dm | 2 +- .../objects/items/weapons/storage/secure.dm | 6 +- code/game/objects/items/weapons/twohanded.dm | 1 + code/game/objects/items/weapons/whetstone.dm | 5 +- code/game/objects/structures.dm | 2 +- .../structures/crates_lockers/closets.dm | 16 ++--- .../crates_lockers/closets/fireaxe.dm | 4 +- .../structures/crates_lockers/crates.dm | 10 +-- code/game/objects/structures/displaycase.dm | 12 ++-- code/game/objects/structures/door_assembly.dm | 38 +++++------ code/game/objects/structures/electricchair.dm | 2 +- code/game/objects/structures/engicart.dm | 4 +- code/game/objects/structures/foodcart.dm | 4 +- code/game/objects/structures/girders.dm | 34 +++++----- code/game/objects/structures/grille.dm | 6 +- code/game/objects/structures/janicart.dm | 6 +- code/game/objects/structures/kitchen_spike.dm | 4 +- code/game/objects/structures/mineral_doors.dm | 2 +- code/game/objects/structures/morgue.dm | 10 +-- code/game/objects/structures/musician.dm | 8 +-- code/game/objects/structures/statues.dm | 18 ++--- .../structures/stool_bed_chair_nest/chairs.dm | 6 +- .../structures/stool_bed_chair_nest/stools.dm | 3 +- code/game/objects/structures/tables_racks.dm | 28 ++++---- code/game/objects/structures/watercloset.dm | 2 +- .../objects/structures/windoor_assembly.dm | 34 +++++----- code/game/objects/structures/window.dm | 10 +-- code/game/turfs/simulated/floor.dm | 2 +- .../game/turfs/simulated/floor/fancy_floor.dm | 2 +- code/game/turfs/simulated/floor/plating.dm | 12 ++-- code/game/turfs/simulated/walls.dm | 28 ++++---- code/game/turfs/simulated/walls_reinforced.dm | 52 +++++++------- code/modules/arcade/arcade_base.dm | 2 +- code/modules/arcade/prize_counter.dm | 2 +- code/modules/assembly/assembly.dm | 2 + code/modules/clothing/clothing.dm | 4 +- code/modules/clothing/gloves/color.dm | 2 +- .../spacesuits/rig/modules/modules.dm | 6 +- code/modules/clothing/spacesuits/rig/rig.dm | 2 +- .../clothing/spacesuits/rig/rig_attackby.dm | 2 +- .../clothing/under/accessories/accessory.dm | 2 +- code/modules/computer3/buildandrepair.dm | 50 +++++++------- code/modules/customitems/item_defines.dm | 6 +- .../detective_work/footprints_and_rag.dm | 3 +- code/modules/fish/fishtank.dm | 7 +- .../food_and_drinks/drinks/bottler/bottler.dm | 2 +- .../kitchen_machinery/kitchen_machine.dm | 8 +-- code/modules/hydroponics/hydroponics.dm | 16 ++--- code/modules/library/lib_items.dm | 10 +-- code/modules/mining/mine_items.dm | 49 +++++++------ code/modules/mining/mine_turfs.dm | 17 ++--- .../carbon/human/interactive/functions.dm | 2 +- .../mob/living/carbon/human/species/apollo.dm | 28 ++++---- code/modules/mob/living/silicon/ai/ai.dm | 4 +- .../living/silicon/robot/drone/drone_items.dm | 2 +- .../modules/mob/living/silicon/robot/robot.dm | 4 +- .../mob/living/simple_animal/bot/bot.dm | 2 +- .../living/simple_animal/bot/construction.dm | 7 +- .../living/simple_animal/friendly/corgi.dm | 4 +- code/modules/mob/mob.dm | 2 +- code/modules/ninja/suit/suit_attackby.dm | 2 +- code/modules/paperwork/filingcabinet.dm | 2 +- code/modules/paperwork/frames.dm | 14 ++-- code/modules/paperwork/photocopier.dm | 2 +- code/modules/power/apc.dm | 29 ++++---- code/modules/power/cable.dm | 2 + code/modules/power/generator.dm | 2 +- code/modules/power/gravitygenerator.dm | 8 +-- code/modules/power/lighting.dm | 13 ++-- code/modules/power/port_gen.dm | 4 +- code/modules/power/singularity/collector.dm | 2 +- code/modules/power/singularity/emitter.dm | 12 ++-- .../power/singularity/field_generator.dm | 12 ++-- code/modules/power/singularity/generator.dm | 2 +- .../particle_accelerator.dm | 20 ++++-- code/modules/power/smes.dm | 4 +- code/modules/power/solar.dm | 17 ++--- code/modules/power/tracker.dm | 4 +- .../guns/energy/kinetic_accelerator.dm | 5 +- .../projectiles/guns/energy/special.dm | 2 + .../projectiles/guns/projectile/revolver.dm | 4 +- .../chemistry/machinery/chem_dispenser.dm | 2 +- code/modules/recycling/conveyor2.dm | 3 +- .../recycling/disposal-construction.dm | 6 +- code/modules/recycling/disposal.dm | 37 +++++----- code/modules/recycling/sortingmachinery.dm | 8 +-- .../xenoarchaeology/artifact/artifact.dm | 4 +- code/modules/spacepods/parts.dm | 6 +- code/modules/spacepods/spacepod.dm | 8 +-- code/modules/surgery/organs/autoimplanter.dm | 5 +- code/modules/surgery/surgery.dm | 4 +- code/modules/telesci/bscrystal.dm | 4 ++ code/modules/telesci/telepad.dm | 10 +-- 179 files changed, 875 insertions(+), 764 deletions(-) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 47c5689054c..0fe1a291b31 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -170,13 +170,13 @@ Pipelines + Other Objects -> Pipe network var/unsafe_wrenching = FALSE var/internal_pressure = int_air.return_pressure()-env_air.return_pressure() - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) to_chat(user, "You begin to unfasten \the [src]...") if(internal_pressure > 2*ONE_ATMOSPHERE) to_chat(user, "As you begin unwrenching \the [src] a gush of air blows in your face... maybe you should reconsider?") unsafe_wrenching = TRUE //Oh dear oh dear - if(do_after(user, 40, target = src) && isnull(gcDestroyed)) + if(do_after(user, 40 * W.toolspeed, target = src) && isnull(gcDestroyed)) user.visible_message( \ "[user] unfastens \the [src].", \ "You have unfastened \the [src].", \ diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index 2eca090d086..a247d6f93a3 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -107,9 +107,9 @@ to_chat(user, "You cannot unwrench [src], it is too exerted due to internal pressure.") add_fingerprint(user) return 1 - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) to_chat(user, "You begin to unfasten \the [src]...") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) user.visible_message( \ "[user] unfastens \the [src].", \ "You have unfastened \the [src].", \ diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index a2ba4429ffa..eabeccb641f 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -325,9 +325,9 @@ var/obj/item/weapon/weldingtool/WT = W if(WT.remove_fuel(0,user)) to_chat(user, "Now welding the vent.") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) + playsound(src.loc, WT.usesound, 50, 1) if(!welded) user.visible_message("[user] welds the vent shut.", "You weld the vent shut.", "You hear welding.") welded = 1 @@ -345,13 +345,15 @@ if(istype(W, /obj/item/weapon/screwdriver)) if(!welded) if(open) - to_chat(user, " Now closing the vent.") - if(do_after(user, 20, target = src)) + to_chat(user, "Now closing the vent.") + if(do_after(user, 20 * W.toolspeed, target = src)) + playsound(loc, W.usesound, 100, 1) open = 0 user.visible_message("[user] screwdrivers the vent shut.", "You screwdriver the vent shut.", "You hear a screwdriver.") else - to_chat(user, " Now opening the vent.") - if(do_after(user, 20, target = src)) + to_chat(user, "Now opening the vent.") + if(do_after(user, 20 * W.toolspeed, target = src)) + playsound(loc, W.usesound, 100, 1) open = 1 user.visible_message("[user] screwdrivers the vent shut.", "You screwdriver the vent shut.", "You hear a screwdriver.") return diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 5554723c945..6747b103972 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -375,9 +375,9 @@ var/obj/item/weapon/weldingtool/WT = W if(WT.remove_fuel(0,user)) to_chat(user, "Now welding the scrubber.") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return - playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) + playsound(get_turf(src), WT.usesound, 50, 1) if(!welded) user.visible_message("[user] welds the scrubber shut.", "You weld the vent scrubber.", "You hear welding.") welded = 1 diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index 0a17435c5c0..04054c17632 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -46,17 +46,20 @@ if(istype(used_atom, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/W = used_atom if(W.remove_fuel(0, user)) - playsound(holder, 'sound/items/Welder2.ogg', 50, 1) + playsound(holder, W.usesound, 50, 1) else return 0 else if(istype(used_atom, /obj/item/weapon/wrench)) - playsound(holder, 'sound/items/Ratchet.ogg', 50, 1) + var/obj/item/weapon/wrench/W = used_atom + playsound(holder, W.usesound, 50, 1) else if(istype(used_atom, /obj/item/weapon/screwdriver)) - playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) + var/obj/item/weapon/screwdriver/S = used_atom + playsound(holder, S.usesound, 50, 1) else if(istype(used_atom, /obj/item/weapon/wirecutters)) - playsound(holder, 'sound/items/Wirecutter.ogg', 50, 1) + var/obj/item/weapon/wirecutters/W = used_atom + playsound(holder, W.usesound, 50, 1) else if(istype(used_atom, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = used_atom @@ -65,7 +68,7 @@ return 0 else C.use(4) - playsound(holder, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(holder, C.usesound, 50, 1) else if(istype(used_atom, /obj/item/stack)) var/obj/item/stack/S = used_atom if(S.amount < 5) diff --git a/code/datums/spells/conjure.dm b/code/datums/spells/conjure.dm index fe0ffd9c1c0..2ca7d0fcddd 100644 --- a/code/datums/spells/conjure.dm +++ b/code/datums/spells/conjure.dm @@ -23,7 +23,7 @@ targets -= T playsound(get_turf(src), cast_sound, 50, 1) - if(do_after(user,delay, target = user)) + if(do_after(user, delay, target = user)) for(var/i=0,iYou need wirecutters!") diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 5237fda9ab2..8f026650b7c 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -612,8 +612,8 @@ Congratulations! You are now trained for xenobiology research!"} if(istype(I, /obj/item/weapon/wrench)) to_chat(user, "You start disassembling [src]...") playsound(src.loc, I.usesound, 50, 1) - if(do_after(user, 30, target = src)) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 30 * I.toolspeed, target = src)) + playsound(src.loc, I.usesound, 50, 1) new /obj/item/stack/sheet/mineral/abductor(get_turf(src)) qdel(src) return @@ -623,7 +623,7 @@ Congratulations! You are now trained for xenobiology research!"} to_chat(user, "You need one alien alloy sheet to do this!") return to_chat(user, "You start adding [P] to [src]...") - if(do_after(user, 50, target = src)) + if(do_after(user, 50 * I.toolspeed, target = src)) P.use(1) new /obj/structure/table/abductor(src.loc) qdel(src) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm index ddac0731249..3922b80a9e5 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm @@ -51,7 +51,7 @@ return if(!IsAbductor(user)) to_chat(user, "You start mashing alien buttons at random!") - if(do_after(user,100, target = src)) + if(do_after(user, 100, target = src)) TeleporterSend() return user.set_machine(src) diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index 16f7a4e0847..4cd285b5887 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -322,7 +322,7 @@ to_chat(src, "You slither up [M] and begin probing at their ear canal...") - if(!do_after(src,50, target = M)) + if(!do_after(src, 50, target = M)) to_chat(src, "As [M] moves away, you are dislodged and fall to the ground.") return diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index 9bf6be0bbdc..be21008d5f2 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -164,7 +164,7 @@ else if(istype(target,/obj/item)) // Eat items just to be annoying var/obj/item/I = target if(!I.anchored) - if(do_after(src,20, target = I)) + if(do_after(src, 20, target = I)) eat(I) return target.attack_animal(src) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 2476753b34b..d83011d078b 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -58,12 +58,12 @@ var/bomb_set panel_open = 1 overlays += image(icon, "npanel_open") to_chat(user, "You unscrew the control panel of [src].") - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src, O.usesound, 50, 1) else panel_open = 0 overlays -= image(icon, "npanel_open") to_chat(user, "You screw the control panel of [src] back on.") - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src, O.usesound, 50, 1) else if(panel_open == 0) to_chat(user, "[src] emits a buzzing noise, the panel staying locked in.") @@ -71,7 +71,7 @@ var/bomb_set panel_open = 0 overlays -= image(icon, "npanel_open") to_chat(user, "You screw the control panel of [src] back on.") - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src, O.usesound, 50, 1) flick("nuclearbombc", src) return diff --git a/code/game/machinery/Freezer.dm b/code/game/machinery/Freezer.dm index 542ed8b47b4..0c207c8217e 100644 --- a/code/game/machinery/Freezer.dm +++ b/code/game/machinery/Freezer.dm @@ -65,7 +65,7 @@ var/list/choices = list("West" = WEST, "East" = EAST, "South" = SOUTH, "North" = NORTH) var/selected = input(user,"Select a direction for the connector.", "Connector Direction") in choices dir = choices[selected] - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) var/node_connect = dir initialize_directions = dir for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) @@ -224,7 +224,7 @@ var/list/choices = list("West" = WEST, "East" = EAST, "South" = SOUTH, "North" = NORTH) var/selected = input(user,"Select a direction for the connector.", "Connector Direction") in choices dir = choices[selected] - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) var/node_connect = dir initialize_directions = dir for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index eb610c771a7..0b053831b49 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -139,8 +139,8 @@ qdel(W) return if(istype(W, /obj/item/weapon/wrench)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(src.loc, W.usesound, 50, 1) + if(do_after(user, 20 * W.toolspeed, target = src)) to_chat(user, "You deconstruct the table.") new /obj/item/stack/sheet/plasteel(loc, 5) qdel(src) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 2a29e23db73..a17202aa4de 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -312,7 +312,7 @@ else orient = "RIGHT" dir = 4 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, G.usesound, 50, 1) return if(exchange_parts(user, G)) @@ -519,7 +519,7 @@ if(do_after(user, 20, target = L)) if(src.occupant) - to_chat(user, ">The sleeper is already occupied!") + to_chat(user, "The sleeper is already occupied!") return if(!L) return L.forceMove(src) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 1222d3e00b3..151dc377f5d 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -65,7 +65,7 @@ dir = 8 else dir = 4 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, G.usesound, 50, 1) return if(exchange_parts(user, G)) @@ -293,7 +293,7 @@ dir = 8 else dir = 4 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, G.usesound, 50, 1) if(exchange_parts(user, G)) return diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 1fbd0496397..c8f4038f03c 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -1002,6 +1002,7 @@ return to_chat(user, "You wire \the [src]!") + playsound(get_turf(src), coil.usesound, 50, 1) coil.amount -= 5 if(!coil.amount) qdel(coil) @@ -1013,8 +1014,8 @@ else if(istype(W, /obj/item/weapon/crowbar)) to_chat(user, "You start prying out the circuit.") - playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - if(do_after(user,20, target = src)) + playsound(get_turf(src), W.usesound, 50, 1) + if(do_after(user, 20 * W.toolspeed, target = src)) if(buildstage != 1) return to_chat(user, "You pry out the circuit!") @@ -1026,6 +1027,7 @@ if(0) if(istype(W, /obj/item/weapon/airalarm_electronics)) to_chat(user, "You insert the circuit!") + playsound(get_turf(src), W.usesound, 50, 1) qdel(W) buildstage = 1 update_icon() @@ -1034,7 +1036,7 @@ else if(istype(W, /obj/item/weapon/wrench)) to_chat(user, "You remove the fire alarm assembly from the wall!") new /obj/item/mounted/frame/alarm_frame(get_turf(user)) - playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) + playsound(get_turf(src), W.usesound, 50, 1) qdel(src) return 0 @@ -1065,3 +1067,5 @@ Just an object used in constructing air alarms desc = "Looks like a circuit. Probably is." w_class = 2 materials = list(MAT_METAL=50, MAT_GLASS=50) + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index f534a86f31c..f6634ff242c 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -75,9 +75,9 @@ obj/machinery/air_sensor if(bolts) to_chat(usr, "The [src] is bolted to the floor! You can't detach it like this.") return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) to_chat(user, "\blue You begin to unfasten \the [src]...") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) user.visible_message("[user] unfastens \the [src].", "\blue You have unfastened \the [src].", "You hear ratchet.") new /obj/item/pipe_gsensor(src.loc) qdel(src) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 2ffa9301dd7..2533d734b8e 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -631,9 +631,9 @@ update_flag // Do after stuff here to_chat(user, "You start to slice away at \the [src]...") - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + playsound(src.loc, WT.usesound, 50, 1) busy = 1 - if(do_after(user, 50, target = src)) + if(do_after(user, 50 * WT.toolspeed, target = src)) busy = 0 if(!WT.isOn()) return 0 diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index 51d4ebc595c..08615dea6ac 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -123,9 +123,9 @@ if(!istype(W, /obj/item/weapon/wrench)) return ..() - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) to_chat(user, "\blue You begin to unfasten \the [src]...") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) user.visible_message( \ "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src].", \ diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index 044023c394a..2d714606610 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -202,7 +202,7 @@ return anchored = !anchored - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") return diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index b2d934dc9a2..80cfef47d88 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -69,8 +69,8 @@ return 1 if(istype(W, /obj/item/weapon/wrench)) - playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 30, target = src)) + playsound(get_turf(src), W.usesound, 50, 1) + if(do_after(user, 30 * W.toolspeed, target = src)) to_chat(user, "You detach \the [src] from the wall.") new/obj/item/mounted/frame/driver_button(get_turf(src)) qdel(src) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index e91ff779665..fa17c5a9c67 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -28,6 +28,8 @@ var/alarm_on = 0 var/busy = 0 var/emped = 0 //Number of consecutive EMP's on this camera + + var/toggle_message = 'sound/items/Wirecutter.ogg' /obj/machinery/camera/New() ..() @@ -127,7 +129,7 @@ src.view_range = num cameranet.updateVisibility(src, 0) -/obj/machinery/camera/attackby(W as obj, mob/living/user as mob, params) +/obj/machinery/camera/attackby(obj/item/W, mob/living/user as mob, params) var/msg = "You attach [W] into the assembly inner circuits." var/msg2 = "The camera already has that upgrade!" @@ -138,7 +140,7 @@ panel_open = !panel_open user.visible_message("[user] screws the camera's panel [panel_open ? "open" : "closed"]!", "You screw the camera's panel [panel_open ? "open" : "closed"].") - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) else if((istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/device/multitool)) && panel_open) wires.Interact(user) @@ -238,7 +240,7 @@ var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, loc) spark_system.start() - playsound(loc, 'sound/weapons/blade1.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) playsound(loc, "sparks", 50, 1) visible_message("[user] has sliced the camera apart with an energy blade!") qdel(src) @@ -275,7 +277,7 @@ else visible_message("\The [src] [change_msg]!") - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) + playsound(src.loc, toggle_message, 100, 1) // now disconnect anyone using the camera //Apparently, this will disconnect anyone even if the camera was re-activated. @@ -355,9 +357,9 @@ return 0 to_chat(user, "You start to weld [src]...") - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + playsound(src.loc, WT.usesound, 50, 1) busy = 1 - if(do_after(user, 100, target = src)) + if(do_after(user, 100 * WT.toolspeed, target = src)) busy = 0 if(!WT.isOn()) return 0 diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 5b7d035d461..99e9273b682 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -26,7 +26,7 @@ if(0) // State 0 if(iswrench(W) && isturf(src.loc)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) to_chat(user, "You wrench the assembly into place.") anchored = 1 state = 1 @@ -44,7 +44,7 @@ return else if(iswrench(W)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) to_chat(user, "You unattach the assembly from it's place.") anchored = 0 update_icon() @@ -57,6 +57,7 @@ var/obj/item/stack/cable_coil/C = W if(C.use(2)) to_chat(user, "You add wires to the assembly.") + playsound(loc, W.usesound, 50, 1) state = 3 else to_chat(user, "You need 2 coils of wire to wire the assembly.") @@ -74,7 +75,7 @@ if(3) // State 3 if(isscrewdriver(W)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) var/input = strip_html(input(usr, "Which networks would you like to connect this camera to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Set Network", "SS13")) if(!input) @@ -116,7 +117,7 @@ else if(iswirecutter(W)) new/obj/item/stack/cable_coil(get_turf(src), 2) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) to_chat(user, "You cut the wires from the circuits.") state = 2 return @@ -137,7 +138,7 @@ var/obj/U = locate(/obj) in upgrades if(U) to_chat(user, "You unattach an upgrade from the assembly.") - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) U.loc = get_turf(src) upgrades -= U return @@ -162,9 +163,9 @@ return 0 to_chat(user, "You start to weld the [src]..") - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + playsound(src.loc, WT.usesound, 50, 1) busy = 1 - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * WT.toolspeed, target = src)) busy = 0 if(!WT.isOn()) return 0 diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index bca8a6d8aa2..a2307f7bea4 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -62,7 +62,7 @@ anchored = !anchored to_chat(user, "You [anchored ? "attach" : "detach"] the cell charger [anchored ? "to" : "from"] the ground") - playsound(get_turf(src), 'sound/items/Ratchet.ogg', 75, 1) + playsound(get_turf(src), W.usesound, 75, 1) attack_hand(mob/user) if(charging) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index af452dbdbcd..5d8372607d8 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -382,7 +382,7 @@ connected = null else anchored = 1 - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(loc, W.usesound, 100, 1) if(anchored) user.visible_message("[user] secures [src] to the floor.", "You secure [src] to the floor.") else diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 29e315ec001..4c55d93e1c2 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -22,8 +22,8 @@ switch(state) if(0) if(istype(P, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(loc, P.usesound, 50, 1) + if(do_after(user, 20 * P.toolspeed, target = src)) to_chat(user, "\blue You wrench the frame into place.") anchored = 1 state = 1 @@ -32,33 +32,33 @@ if(!WT.isOn()) to_chat(user, "The welder must be on for this task.") return - playsound(loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(loc, WT.usesound, 50, 1) + if(do_after(user, 20 * WT.toolspeed, target = src)) if(!src || !WT.remove_fuel(0, user)) return to_chat(user, "\blue You deconstruct the frame.") new /obj/item/stack/sheet/plasteel(loc, 4) qdel(src) if(1) if(istype(P, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(loc, P.usesound, 50, 1) + if(do_after(user, 20 * P.toolspeed, target = src)) to_chat(user, "\blue You unfasten the frame.") anchored = 0 state = 0 if(istype(P, /obj/item/weapon/circuitboard/aicore) && !circuit) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "\blue You place the circuit board inside the frame.") icon_state = "1" circuit = P user.drop_item() P.loc = src if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "\blue You screw the circuit board into place.") state = 2 icon_state = "2" if(istype(P, /obj/item/weapon/crowbar) && circuit) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "\blue You remove the circuit board.") state = 1 icon_state = "0" @@ -66,14 +66,14 @@ circuit = null if(2) if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "\blue You unfasten the circuit board.") state = 1 icon_state = "1" if(istype(P, /obj/item/stack/cable_coil)) if(P:amount >= 5) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(loc, P.usesound, 50, 1) + if(do_after(user, 20 * P.toolspeed, target = src)) P:amount -= 5 if(!P:amount) qdel(P) to_chat(user, "\blue You add cables to the frame.") @@ -84,7 +84,7 @@ if(brain) to_chat(user, "Get that brain out of there first") else - playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "\blue You remove the cables.") state = 2 icon_state = "2" @@ -93,8 +93,8 @@ if(istype(P, /obj/item/stack/sheet/rglass)) if(P:amount >= 2) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(loc, P.usesound, 50, 1) + if(do_after(user, 20 * P.toolspeed, target = src)) if(P) P:amount -= 2 if(!P:amount) qdel(P) @@ -147,7 +147,7 @@ icon_state = "3b" if(istype(P, /obj/item/weapon/crowbar) && brain) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "\blue You remove the brain.") brain.loc = loc brain = null @@ -155,7 +155,7 @@ if(4) if(istype(P, /obj/item/weapon/crowbar)) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "\blue You remove the glass panel.") state = 3 if(brain) @@ -166,7 +166,7 @@ return if(istype(P, /obj/item/weapon/screwdriver)) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You connect the monitor.") if(!brain) var/open_for_latejoin = alert(user, "Would you like this core to be open for latejoining AIs?", "Latejoin", "Yes", "Yes", "No") == "Yes" @@ -199,7 +199,7 @@ else if(istype(W, /obj/item/weapon/wrench)) if(anchored) user.visible_message("\blue \The [user] starts to unbolt \the [src] from the plating...") - if(!do_after(user,40, target = src)) + if(!do_after(user, 40 * W.toolspeed, target = src)) user.visible_message("\blue \The [user] decides not to unbolt \the [src].") return user.visible_message("\blue \The [user] finishes unfastening \the [src]!") @@ -207,7 +207,7 @@ return else user.visible_message("\blue \The [user] starts to bolt \the [src] to the plating...") - if(!do_after(user,40, target = src)) + if(!do_after(user, 40 * W.toolspeed, target = src)) user.visible_message("\blue \The [user] decides not to bolt \the [src].") return user.visible_message("\blue \The [user] finishes fastening down \the [src]!") diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index d3d7b8cf3d1..2f5e90e3039 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -29,6 +29,8 @@ var/list/records = null var/frame_desc = null var/contain_parts = 1 + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' /obj/item/weapon/circuitboard/computer board_type = "computer" @@ -354,8 +356,8 @@ switch(state) if(0) if(istype(P, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(loc, P.usesound, 50, 1) + if(do_after(user, 20 * P.toolspeed, target = src)) to_chat(user, "You wrench the frame into place.") anchored = 1 state = 1 @@ -364,23 +366,23 @@ if(!WT.remove_fuel(0, user)) to_chat(user, "The welding tool must be on to complete this task.") return - playsound(loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(loc, WT.usesound, 50, 1) + if(do_after(user, 20 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return to_chat(user, "You deconstruct the frame.") new /obj/item/stack/sheet/metal(loc, 5) qdel(src) if(1) if(istype(P, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(loc, P.usesound, 50, 1) + if(do_after(user, 20 * P.toolspeed, target = src)) to_chat(user, "You unfasten the frame.") anchored = 0 state = 0 if(istype(P, /obj/item/weapon/circuitboard) && !circuit) var/obj/item/weapon/circuitboard/B = P if(B.board_type == "computer") - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, B.usesound, 50, 1) to_chat(user, "You place the circuit board inside the frame.") icon_state = "1" circuit = P @@ -389,12 +391,12 @@ else to_chat(user, "This frame does not accept circuit boards of this type!") if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You screw the circuit board into place.") state = 2 icon_state = "2" if(istype(P, /obj/item/weapon/crowbar) && circuit) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You remove the circuit board.") state = 1 icon_state = "0" @@ -402,16 +404,16 @@ circuit = null if(2) if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You unfasten the circuit board.") state = 1 icon_state = "1" if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = P if(C.amount >= 5) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, C.usesound, 50, 1) to_chat(user, "You start to add cables to the frame.") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * C.toolspeed, target = src)) if(state == 2 && C.amount >= 5 && C.use(5)) to_chat(user, "You add cables to the frame.") state = 3 @@ -424,7 +426,7 @@ return if(3) if(istype(P, /obj/item/weapon/wirecutters)) - playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You remove the cables.") state = 2 icon_state = "2" @@ -434,9 +436,9 @@ if(istype(P, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/glass/G = P if(G.amount >= 2) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, G.usesound, 50, 1) to_chat(user, "You start to add the glass panel to the frame.") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * G.toolspeed, target = src)) if(state == 3 && G.amount >= 2 && G.use(2)) to_chat(user, "You put in the glass panel.") state = 4 @@ -449,13 +451,13 @@ return if(4) if(istype(P, /obj/item/weapon/crowbar)) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You remove the glass panel.") state = 3 icon_state = "3" new /obj/item/stack/sheet/glass(loc, 2) if(istype(P, /obj/item/weapon/screwdriver)) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You connect the monitor.") var/B = new circuit.build_path (loc) if(circuit.powernet) B:powernet = circuit.powernet @@ -478,7 +480,7 @@ switch(state) if(0) if(istype(P, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) if(do_after(user, 20, target = src)) to_chat(user, "You wrench the frame into place.") anchored = 1 @@ -488,23 +490,23 @@ if(!WT.remove_fuel(0, user)) to_chat(user, "The welding tool must be on to complete this task.") return - playsound(loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(loc, WT.usesound, 50, 1) + if(do_after(user, 20 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return to_chat(user, "You deconstruct the frame.") new /obj/item/stack/sheet/mineral/bananium(loc, 5) qdel(src) if(1) if(istype(P, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(loc, P.usesound, 50, 1) + if(do_after(user, 20 * P.toolspeed, target = src)) to_chat(user, "You unfasten the frame.") anchored = 0 state = 0 if(istype(P, /obj/item/weapon/circuitboard) && !circuit) var/obj/item/weapon/circuitboard/B = P if(B.board_type == "honkcomputer") - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You place the circuit board inside the frame.") icon_state = "1" circuit = P @@ -513,12 +515,12 @@ else to_chat(user, "This frame does not accept circuit boards of this type!") if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You screw the circuit board into place.") state = 2 icon_state = "2" if(istype(P, /obj/item/weapon/crowbar) && circuit) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You remove the circuit board.") state = 1 icon_state = "0" @@ -526,16 +528,16 @@ circuit = null if(2) if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You unfasten the circuit board.") state = 1 icon_state = "1" if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = P if(C.amount >= 5) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, C.usesound, 50, 1) to_chat(user, "You start to add cables to the frame.") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * C.toolspeed, target = src)) if(state == 2 && C.amount >= 5 && C.use(5)) to_chat(user, "You add cables to the frame.") state = 3 @@ -548,7 +550,7 @@ return if(3) if(istype(P, /obj/item/weapon/wirecutters)) - playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You remove the cables.") state = 2 icon_state = "2" @@ -558,9 +560,9 @@ if(istype(P, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/glass/G = P if(G.amount >= 2) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, G.usesound, 50, 1) to_chat(user, "You start to add the glass panel to the frame.") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * G.toolspeed, target = src)) if(state == 3 && G.amount >= 2 && G.use(2)) to_chat(user, "You put in the glass panel.") state = 4 @@ -573,13 +575,13 @@ return if(4) if(istype(P, /obj/item/weapon/crowbar)) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You remove the glass panel.") state = 3 icon_state = "3" new /obj/item/stack/sheet/glass(loc, 2) if(istype(P, /obj/item/weapon/screwdriver)) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) to_chat(user, "You connect the monitor.") var/B = new circuit.build_path (loc) if(circuit.powernet) B:powernet = circuit.powernet diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 71f9760c0a6..11778503e9d 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -101,18 +101,19 @@ text = replacetext(text, "\n", "
") return text -/obj/machinery/computer/attack_ghost(user as mob) +/obj/machinery/computer/attack_ghost(mob/user) return attack_hand(user) -/obj/machinery/computer/attack_hand(user as mob) +/obj/machinery/computer/attack_hand(mob/user) /* Observers can view computers, but not actually use them via Topic*/ if(istype(user, /mob/dead/observer)) return 0 return ..() -/obj/machinery/computer/attackby(I as obj, user as mob, params) +/obj/machinery/computer/attackby(obj/I, mob/user, params) if(istype(I, /obj/item/weapon/screwdriver) && circuit) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20, target = src)) + var/obj/item/weapon/screwdriver/S = I + playsound(src.loc, S.usesound, 50, 1) + if(do_after(user, 20 * S.toolspeed, target = src)) var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) var/obj/item/weapon/circuitboard/M = new circuit( A ) A.circuit = M diff --git a/code/game/machinery/computer/honkputer.dm b/code/game/machinery/computer/honkputer.dm index 13f07773404..c998fed7b1a 100644 --- a/code/game/machinery/computer/honkputer.dm +++ b/code/game/machinery/computer/honkputer.dm @@ -93,10 +93,11 @@ onclose(user, "honkputer") -/obj/machinery/computer/HONKputer/attackby(I as obj, user as mob, params) +/obj/machinery/computer/HONKputer/attackby(obj/I, mob/user, params) if(istype(I, /obj/item/weapon/screwdriver) && circuit) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20, target = src)) + var/obj/item/weapon/screwdriver/S = I + playsound(src.loc, S.usesound, 50, 1) + if(do_after(user, 20 * S.toolspeed, target = src)) var/obj/structure/computerframe/HONKputer/A = new /obj/structure/computerframe/HONKputer( src.loc ) var/obj/item/weapon/circuitboard/M = new circuit( A ) A.circuit = M diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index b34ec03c91f..99b53415e5b 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -66,9 +66,9 @@ if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = P if(C.amount >= 5) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(src.loc, C.usesound, 50, 1) to_chat(user, "You start to add cables to the frame.") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * C.toolspeed, target = src)) if(state == 1 && C.amount >= 5 && C.use(5)) to_chat(user, "You add cables to the frame.") state = 2 @@ -86,13 +86,13 @@ return G.use(5) to_chat(user, "You add the glass to the frame.") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + playsound(get_turf(src), G.usesound, 50, 1) new /obj/structure/displaycase_frame(src.loc) qdel(src) return if(istype(P, /obj/item/weapon/wrench)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(src.loc, P.usesound, 75, 1) to_chat(user, "You dismantle the frame.") new /obj/item/stack/sheet/metal(src.loc, 5) qdel(src) @@ -100,7 +100,7 @@ if(istype(P, /obj/item/weapon/circuitboard)) var/obj/item/weapon/circuitboard/B = P if(B.board_type == "machine") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(src.loc, B.usesound, 50, 1) to_chat(user, "You add the circuit board to the frame.") circuit = P user.drop_item() @@ -114,7 +114,7 @@ else to_chat(user, "This frame does not accept circuit boards of this type!") if(istype(P, /obj/item/weapon/wirecutters)) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + playsound(src.loc, P.usesound, 50, 1) to_chat(user, "You remove the cables.") state = 1 icon_state = "box_0" @@ -123,7 +123,7 @@ if(3) if(istype(P, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(src.loc, P.usesound, 50, 1) state = 2 circuit.loc = src.loc circuit = null @@ -145,7 +145,7 @@ component_check = 0 break if(component_check) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, P.usesound, 50, 1) var/obj/machinery/new_machine = new src.circuit.build_path(src.loc) new_machine.construction() for(var/obj/O in new_machine.component_parts) @@ -190,7 +190,7 @@ for(var/I in req_components) if(istype(P, I) && (req_components[I] > 0) && (!(P.flags & NODROP) || istype(P, /obj/item/stack))) success=1 - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(src.loc, P.usesound, 50, 1) if(istype(P, /obj/item/stack)) var/obj/item/stack/S = P var/camt = min(S.amount, req_components[I]) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index b54a2e88a34..c20d8a8bd57 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -66,7 +66,7 @@ for reference: if(istype(W, stacktype)) if(src.health < src.maxhealth) visible_message("\red [user] begins to repair the [src]!") - if(do_after(user,20, target = src)) + if(do_after(user, 20 * W.toolspeed, target = src)) src.health = src.maxhealth W:use(1) visible_message("\red [user] repairs the [src]!") @@ -77,9 +77,9 @@ for reference: else if(istype(W, /obj/item/weapon/crowbar)) user.changeNext_move(CLICK_CD_MELEE) user.visible_message("[user] is prying apart \the [src].", "You begin to pry apart \the [src].") - playsound(src, 'sound/items/Crowbar.ogg', 200, 1) + playsound(src, W.usesound, 200, 1) - if(do_after(user, 300, target = src) && src && !src.gcDestroyed) + if(do_after(user, 300 * W.toolspeed, target = src) && src && !src.gcDestroyed) user.visible_message("[user] pries apart \the [src].", "You pry apart \the [src].") dismantle() return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index da82b73d353..c939b0e0242 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -795,7 +795,7 @@ About the new airlock wires panel: update_icon() return 1 -/obj/machinery/door/airlock/attackby(C as obj, mob/user as mob, params) +/obj/machinery/door/airlock/attackby(obj/item/C, mob/user as mob, params) // to_chat(world, text("airlock attackby src [] obj [] mob []", src, C, user)) if(!istype(usr, /mob/living/silicon)) if(isElectrified()) @@ -837,9 +837,9 @@ About the new airlock wires panel: else beingcrowbarred = 0 if( beingcrowbarred && p_open && (operating == -1 || (density && welded && operating != 1 && !arePowerSystemsOn() && !locked)) ) - playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) + playsound(loc, C.usesound, 100, 1) user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.") - if(do_after(user,40, target = src)) + if(do_after(user, 40 * C.toolspeed, target = src)) to_chat(user, "\blue You removed the airlock electronics!") var/obj/structure/door_assembly/da = new assembly_type(loc) diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index acad5a5a563..b39e3798ae1 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -14,6 +14,8 @@ var/last_configurator = null var/locked = TRUE var/const/max_brain_damage = 60 // Maximum brain damage a mob can have until it can't use the electronics + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' /obj/item/weapon/airlock_electronics/attack_self(mob/user) if(!ishuman(user) && !isrobot(user)) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 052f0a99bea..63fed84088a 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -64,12 +64,12 @@ if(boltslocked) to_chat(user, "There are screws locking the bolts in place!") return - playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) + playsound(get_turf(src), C.usesound, 50, 1) user.visible_message("[user] starts undoing [src]'s bolts...", \ "You start unfastening [src]'s floor bolts...") - if(!do_after(user, 50, target = src)) + if(!do_after(user, 50 * C.toolspeed, target = src)) return - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + playsound(get_turf(src), C.usesound, 50, 1) user.visible_message("[user] unfastens [src]'s bolts.", \ "You undo [src]'s floor bolts.") deconstruct(TRUE) @@ -77,7 +77,7 @@ else if(istype(C, /obj/item/weapon/screwdriver)) user.visible_message("[user] [boltslocked ? "unlocks" : "locks"] [src]'s bolts...", \ "You [boltslocked ? "unlock" : "lock"] [src]'s floor bolts...") - playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1) + playsound(get_turf(src), C.usesound, 50, 1) boltslocked = !boltslocked return else @@ -250,6 +250,8 @@ desc = "A circuit board used in construction of firelocks." w_class = 2 materials = list(MAT_METAL=50, MAT_GLASS=50) + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' /obj/structure/firelock_frame name = "firelock frame" @@ -287,14 +289,14 @@ switch(constructionStep) if(CONSTRUCTION_PANEL_OPEN) if(istype(C, /obj/item/weapon/crowbar)) - playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) + playsound(get_turf(src), C.usesound, 50, 1) user.visible_message("[user] starts prying something out from [src]...", \ "You begin prying out the wire cover...") - if(!do_after(user, 50, target = src)) + if(!do_after(user, 50 * C.toolspeed, target = src)) return if(constructionStep != CONSTRUCTION_PANEL_OPEN) return - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + playsound(get_turf(src), C.usesound, 50, 1) user.visible_message("[user] pries out a metal plate from [src], exposing the wires.", \ "You remove the cover plate from [src], exposing the wires.") constructionStep = CONSTRUCTION_WIRES_EXPOSED @@ -304,16 +306,16 @@ if(locate(/obj/machinery/door/firedoor) in get_turf(src)) to_chat(user, "There's already a firelock there.") return - playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) + playsound(get_turf(src), C.usesound, 50, 1) user.visible_message("[user] starts bolting down [src]...", \ "You begin bolting [src]...") - if(!do_after(user, 30, target = src)) + if(!do_after(user, 30 * C.toolspeed, target = src)) return if(locate(/obj/machinery/door/firedoor) in get_turf(src)) return user.visible_message("[user] finishes the firelock.", \ "You finish the firelock.") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + playsound(get_turf(src), C.usesound, 50, 1) if(reinforced) new /obj/machinery/door/firedoor/heavy(get_turf(src)) else @@ -330,23 +332,23 @@ return user.visible_message("[user] begins reinforcing [src]...", \ "You begin reinforcing [src]...") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 60, target = src)) + playsound(get_turf(src), C.usesound, 50, 1) + if(do_after(user, 60 * C.toolspeed, target = src)) if(constructionStep != CONSTRUCTION_PANEL_OPEN || reinforced || P.get_amount() < 2 || !P) return user.visible_message("[user] reinforces [src].", \ "You reinforce [src].") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + playsound(get_turf(src), C.usesound, 50, 1) P.use(2) reinforced = 1 return if(CONSTRUCTION_WIRES_EXPOSED) if(istype(C, /obj/item/weapon/wirecutters)) - playsound(get_turf(src), 'sound/items/Wirecutter.ogg', 50, 1) + playsound(get_turf(src), C.usesound, 50, 1) user.visible_message("[user] starts cutting the wires from [src]...", \ "You begin removing [src]'s wires...") - if(!do_after(user, 60, target = src)) + if(!do_after(user, 60 * C.toolspeed, target = src)) return if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) return @@ -360,14 +362,14 @@ if(istype(C, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/W = C if(W.remove_fuel(1, user)) - playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) + playsound(get_turf(src), C.usesound, 50, 1) user.visible_message("[user] starts welding a metal plate into [src]...", \ "You begin welding the cover plate back onto [src]...") - if(!do_after(user, 80, target = src)) + if(!do_after(user, 80 * C.toolspeed, target = src)) return if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) return - playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) + playsound(get_turf(src), C.usesound, 50, 1) user.visible_message("[user] welds the metal plate into [src].", \ "You weld [src]'s cover plate into place, hiding the wires.") constructionStep = CONSTRUCTION_PANEL_OPEN @@ -377,15 +379,15 @@ if(istype(C, /obj/item/weapon/crowbar)) user.visible_message("[user] begins removing the circuit board from [src]...", \ "You begin prying out the circuit board from [src]...") - playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - if(!do_after(user, 50, target = src)) + playsound(get_turf(src), C.usesound, 50, 1) + if(!do_after(user, 50 * C.toolspeed, target = src)) return if(constructionStep != CONSTRUCTION_GUTTED) return user.visible_message("[user] removes [src]'s circuit board.", \ "You remove the circuit board from [src].") new /obj/item/weapon/firelock_electronics(get_turf(src)) - playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) + playsound(get_turf(src), C.usesound, 50, 1) constructionStep = CONSTRUCTION_NOCIRCUIT update_icon() return @@ -396,13 +398,13 @@ return user.visible_message("[user] begins wiring [src]...", \ "You begin adding wires to [src]...") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 60, target = src)) + playsound(get_turf(src), B.usesound, 50, 1) + if(do_after(user, 60 * B.toolspeed, target = src)) if(constructionStep != CONSTRUCTION_GUTTED || B.get_amount() < 5 || !B) return user.visible_message("[user] adds wires to [src].", \ "You wire [src].") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + playsound(get_turf(src), B.usesound, 50, 1) B.use(5) constructionStep = CONSTRUCTION_WIRES_EXPOSED update_icon() @@ -411,16 +413,16 @@ if(istype(C, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/W = C if(W.remove_fuel(1,user)) - playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) + playsound(get_turf(src), W.usesound, 50, 1) user.visible_message("[user] begins cutting apart [src]'s frame...", \ "You begin slicing [src] apart...") - if(!do_after(user, 80, target = src)) + if(!do_after(user, 80 * W.toolspeed, target = src)) return if(constructionStep != CONSTRUCTION_NOCIRCUIT) return user.visible_message("[user] cuts apart [src]!", \ "You cut [src] into metal.") - playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) + playsound(get_turf(src), W.usesound, 50, 1) var/turf/T = get_turf(src) new /obj/item/stack/sheet/metal(T, 3) if(reinforced) @@ -430,8 +432,8 @@ if(istype(C, /obj/item/weapon/firelock_electronics)) user.visible_message("[user] starts adding [C] to [src]...", \ "You begin adding a circuit board to [src]...") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - if(!do_after(user, 40, target = src)) + playsound(get_turf(src), C.usesound, 50, 1) + if(!do_after(user, 40 * C.toolspeed, target = src)) return if(constructionStep != CONSTRUCTION_NOCIRCUIT) return @@ -439,7 +441,7 @@ qdel(C) user.visible_message("[user] adds a circuit to [src].", \ "You insert and secure [C].") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + playsound(get_turf(src), C.usesound, 50, 1) constructionStep = CONSTRUCTION_GUTTED update_icon() return diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 74a65f1a93d..44af5be4cb0 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -227,18 +227,19 @@ /obj/machinery/door/window/attack_hand(mob/user as mob) return attackby(user, user) -/obj/machinery/door/window/emag_act(user as mob, weapon as obj) +/obj/machinery/door/window/emag_act(mob/user, obj/weapon) if(density) operating = -1 flick("[base_state]spark", src) sleep(6) desc += "
Its access panel is smoking slightly." if(istype(weapon, /obj/item/weapon/melee/energy/blade)) + var/obj/item/weapon/melee/energy/blade/B var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, loc) spark_system.start() playsound(loc, "sparks", 50, 1) - playsound(loc, 'sound/weapons/blade1.ogg', 50, 1) + playsound(loc, B.usesound, 50, 1) visible_message(" The glass door was sliced open by [user]!") open(2) emagged = 1 @@ -264,17 +265,17 @@ if(density || operating) to_chat(user, "You need to open the door to access the maintenance panel.") return - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(loc, I.usesound, 50, 1) p_open = !( p_open ) to_chat(user, "You [p_open ? "open":"close"] the maintenance panel of the [name].") return if(istype(I, /obj/item/weapon/crowbar)) if(p_open && !density && !operating) - playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) + playsound(loc, I.usesound, 100, 1) user.visible_message("[user] removes the electronics from the [name].", \ "You start to remove electronics from the [name].") - if(do_after(user,40, target = src)) + if(do_after(user, 40 * I.toolspeed, target = src)) if(p_open && !density && !operating && loc) var/obj/structure/windoor_assembly/WA = new /obj/structure/windoor_assembly(loc) switch(base_state) diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 777c2c1bfd5..a54cf0d7e74 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -20,7 +20,7 @@ var/list/doppler_arrays = list() /obj/machinery/doppler_array/process() return PROCESS_KILL -/obj/machinery/doppler_array/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/obj/machinery/doppler_array/attackby(var/obj/item/O, var/mob/user, params) if(istype(O, /obj/item/weapon/wrench)) if(!anchored && !isinspace()) anchored = 1 @@ -30,7 +30,7 @@ var/list/doppler_arrays = list() anchored = 0 power_change() to_chat(user, "You unfasten [src].") - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, O.usesound, 50, 1) /obj/machinery/doppler_array/verb/rotate() set name = "Rotate Tachyon-doppler Dish" diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 3e77a7548b3..b40263599f5 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -97,7 +97,7 @@ FIRE ALARM else if(istype(W, /obj/item/weapon/wirecutters)) // cutting the wires out to_chat(user, "You cut the wires!") - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) var/obj/item/stack/cable_coil/new_coil = new /obj/item/stack/cable_coil() new_coil.amount = 5 new_coil.loc = user.loc @@ -111,17 +111,18 @@ FIRE ALARM return buildstage = 2 + playsound(get_turf(src), W.usesound, 50, 1) to_chat(user, "You wire \the [src]!") update_icon() else if(istype(W, /obj/item/weapon/crowbar)) to_chat(user, "You pry out the circuit!") - playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(get_turf(src), W.usesound, 50, 1) + if(do_after(user, 20 * W.toolspeed, target = src)) if(buildstage != 1) return var/obj/item/weapon/firealarm_electronics/circuit = new /obj/item/weapon/firealarm_electronics() - circuit.loc = user.loc + circuit.forceMove(get_turf(src)) buildstage = 0 update_icon() if(0) @@ -134,7 +135,7 @@ FIRE ALARM else if(istype(W, /obj/item/weapon/wrench)) to_chat(user, "You remove the fire alarm assembly from the wall!") new /obj/item/mounted/frame/firealarm(get_turf(user)) - playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) + playsound(get_turf(src), W.usesound, 50, 1) qdel(src) return @@ -275,6 +276,8 @@ Just a object used in constructing fire alarms desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\"" w_class = 2 materials = list(MAT_METAL=50, MAT_GLASS=50) + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' /obj/machinery/partyalarm name = "\improper PARTY BUTTON" diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index cee7706d256..5ae06103766 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -76,14 +76,14 @@ /obj/machinery/floodlight/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wrench)) if(!anchored && !isinspace()) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) user.visible_message( \ "[user] tightens \the [src]'s casters.", \ " You have tightened \the [src]'s casters.", \ "You hear ratchet.") anchored = 1 else if(anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) user.visible_message( \ "[user] loosens \the [src]'s casters.", \ " You have loosened \the [src]'s casters.", \ diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 330fc5e1104..644b5a73ab9 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -152,8 +152,8 @@ return 1 if(istype(W, /obj/item/weapon/wrench)) - playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 30, target = src)) + playsound(get_turf(src), W.usesound, 50, 1) + if(do_after(user, 30 * W.toolspeed, target = src)) to_chat(user, "You detach \the [src] from the wall.") new/obj/item/mounted/frame/light_switch(get_turf(src)) qdel(src) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index e62e54a3a78..90c4d82befe 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -395,7 +395,7 @@ Class Procs: /obj/machinery/proc/default_deconstruction_crowbar(var/obj/item/weapon/crowbar/C, var/ignore_panel = 0) if(istype(C) && (panel_open || ignore_panel)) - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(loc, C.usesound, 50, 1) spawn_frame() for(var/obj/item/I in component_parts) if(I.reliability != 100 && crit_fail) @@ -413,7 +413,7 @@ Class Procs: /obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/icon_state_open, var/icon_state_closed, var/obj/item/weapon/screwdriver/S) if(istype(S)) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(loc, S.usesound, 50, 1) if(!panel_open) panel_open = 1 icon_state = icon_state_open @@ -427,7 +427,7 @@ Class Procs: /obj/machinery/proc/default_change_direction_wrench(var/mob/user, var/obj/item/weapon/wrench/W) if(panel_open && istype(W)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) dir = turn(dir,-90) to_chat(user, "You rotate [src].") return 1 @@ -436,14 +436,14 @@ Class Procs: /obj/proc/default_unfasten_wrench(mob/user, obj/item/weapon/wrench/W, time = 20) if(istype(W)) to_chat(user, "Now [anchored ? "un" : ""]securing [name].") - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, time, target = src)) + playsound(loc, W.usesound, 50, 1) + if(do_after(user, time * W.toolspeed, target = src)) to_chat(user, "You've [anchored ? "un" : ""]secured [name].") anchored = !anchored if(istype(src, /obj/machinery)) var/obj/machinery/M = src M.power_change() //Turn on or off the machine depending on the status of power in the new area. - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) return 1 return 0 diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 7953f738a40..1d5f4e8cba8 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -22,8 +22,8 @@ if(istype(W, /obj/item/weapon/screwdriver)) to_chat(user, "You begin to unscrew the bolts off the [src]...") - playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 30, target = src)) + playsound(get_turf(src), W.usesound, 50, 1) + if(do_after(user, 30 * W.toolspeed, target = src)) var/obj/machinery/mass_driver_frame/F = new(get_turf(src)) F.dir = src.dir F.anchored = 1 @@ -106,17 +106,17 @@ if(!WT.remove_fuel(0, user)) to_chat(user, "The welding tool must be on to complete this task.") return 1 - playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1) + playsound(get_turf(src), WT.usesound, 50, 1) to_chat(user, "You begin to cut the frame apart...") - if(do_after(user, 30, target = src) && (build == 0)) + if(do_after(user, 30 * WT.toolspeed, target = src) && (build == 0)) to_chat(user, "You detach the plasteel sheets from each others.") new /obj/item/stack/sheet/plasteel(get_turf(src),3) qdel(src) return 1 if(istype(W, /obj/item/weapon/wrench)) to_chat(user, "You begin to anchor \the [src] on the floor.") - playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 10, target = src) && (build == 0)) + playsound(get_turf(src), W.usesound, 50, 1) + if(do_after(user, 10 * W.toolspeed, target = src) && (build == 0)) to_chat(user, "You anchor \the [src]!") anchored = 1 build++ @@ -125,8 +125,8 @@ if(1) // Fixed to the floor if(istype(W, /obj/item/weapon/wrench)) to_chat(user, "You begin to de-anchor \the [src] from the floor.") - playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 10, target = src) && (build == 1)) + playsound(get_turf(src), W.usesound, 50, 1) + if(do_after(user, 10 * W.toolspeed, target = src) && (build == 1)) build-- update_icon() anchored = 0 @@ -137,9 +137,9 @@ if(!WT.remove_fuel(0, user)) to_chat(user, "The welding tool must be on to complete this task.") return 1 - playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1) + playsound(get_turf(src), WT.usesound, 50, 1) to_chat(user, "You begin to weld \the [src] to the floor...") - if(do_after(user, 40, target = src) && (build == 1)) + if(do_after(user, 40 * WT.toolspeed, target = src) && (build == 1)) to_chat(user, "You welded \the [src] to the floor.") build++ update_icon() @@ -150,17 +150,17 @@ if(!WT.remove_fuel(0, user)) to_chat(user, "The welding tool must be on to complete this task.") return 1 - playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1) + playsound(get_turf(src), WT.usesound, 50, 1) to_chat(user, "You begin to unweld \the [src] to the floor...") - if(do_after(user, 40, target = src) && (build == 2)) + if(do_after(user, 40 * WT.toolspeed, target = src) && (build == 2)) to_chat(user, "You unwelded \the [src] to the floor.") build-- update_icon() if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C=W + var/obj/item/stack/cable_coil/C = W to_chat(user, "You start adding cables to \the [src]...") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20, target = src) && (C.amount >= 3) && (build == 2)) + playsound(get_turf(src), C.usesound, 50, 1) + if(do_after(user, 20 * C.toolspeed, target = src) && (C.amount >= 3) && (build == 2)) C.use(3) to_chat(user, "You've added cables to \the [src].") build++ @@ -168,18 +168,18 @@ if(3) // Wired if(istype(W, /obj/item/weapon/wirecutters)) to_chat(user, "You begin to remove the wiring from \the [src].") - if(do_after(user, 10, target = src) && (build == 3)) + if(do_after(user, 10 * W.toolspeed, target = src) && (build == 3)) new /obj/item/stack/cable_coil(loc,3) - playsound(get_turf(src), 'sound/items/Wirecutter.ogg', 50, 1) + playsound(get_turf(src), W.usesound, 50, 1) to_chat(user, "You've removed the cables from \the [src].") build-- update_icon() return 1 if(istype(W, /obj/item/stack/rods)) - var/obj/item/stack/rods/R=W + var/obj/item/stack/rods/R = W to_chat(user, "You begin to complete \the [src]...") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20, target = src) && (R.amount >= 3) && (build == 3)) + playsound(get_turf(src), R.usesound, 50, 1) + if(do_after(user, 20 * R.toolspeed, target = src) && (R.amount >= 3) && (build == 3)) R.use(3) to_chat(user, "You've added the grille to \the [src].") build++ @@ -188,15 +188,15 @@ if(4) // Grille in place if(istype(W, /obj/item/weapon/crowbar)) to_chat(user, "You begin to pry off the grille from \the [src]...") - playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - if(do_after(user, 30, target = src) && (build == 4)) + playsound(get_turf(src), W.usesound, 50, 1) + if(do_after(user, 30 * W.toolspeed, target = src) && (build == 4)) new /obj/item/stack/rods(loc,2) build-- update_icon() return 1 if(istype(W, /obj/item/weapon/screwdriver)) to_chat(user, "You finalize the Mass Driver...") - playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1) + playsound(get_turf(src), W.usesound, 50, 1) var/obj/machinery/mass_driver/M = new(get_turf(src)) M.dir = src.dir qdel(src) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index dfde3ee64b8..428a9eeb8e9 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -543,10 +543,10 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co /obj/machinery/newscaster/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/weapon/wrench)) to_chat(user, "Now [anchored ? "un" : ""]securing [name]") - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 60, target = src)) + playsound(loc, I.usesound, 50, 1) + if(do_after(user, 60 * I.toolspeed, target = src)) new /obj/item/mounted/frame/newscaster_frame(loc) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, I.usesound, 50, 1) qdel(src) return diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index bf2eedeaf23..ef42de6ca60 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -620,7 +620,7 @@ var/obj/machinery/atmospherics/omni/filter/P = new(loc) P.construction(dir, pipe_dir, color) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) user.visible_message( \ "[user] fastens the [src].", \ "\blue You have fastened the [src].", \ @@ -645,8 +645,8 @@ if(!locate(/obj/machinery/atmospherics/pipe, src.loc)) to_chat(user, "\red You need to fasten it to a pipe") return 1 - new/obj/machinery/meter( src.loc ) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + new /obj/machinery/meter(loc) + playsound(src.loc, W.usesound, 50, 1) to_chat(user, "\blue You have fastened the meter to the pipe") qdel(src) @@ -663,7 +663,7 @@ if(!istype(W, /obj/item/weapon/wrench)) return ..() new/obj/machinery/air_sensor( src.loc ) - playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) + playsound(get_turf(src), W.usesound, 50, 1) to_chat(user, "\blue You have fastened the gas sensor") qdel(src) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index d7ac49381b9..37836e8f798 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -112,9 +112,9 @@ return else if(istype(W, /obj/item/weapon/wrench)) if(unwrenched==0) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) to_chat(user, "You begin to unfasten \the [src] from the floor...") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) user.visible_message( \ "[user] unfastens \the [src].", \ "You have unfastened \the [src]. Now it can be pulled somewhere else.", \ @@ -125,9 +125,9 @@ if(usr.machine==src) usr << browse(null, "window=pipedispenser") else /*if(unwrenched==1)*/ - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) to_chat(user, "You begin to fasten \the [src] to the floor...") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * W.toolspeed, target = src)) user.visible_message( \ "[user] fastens \the [src].", \ "You have fastened \the [src]. Now it can dispense pipes.", \ diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 28b3cfe7132..461df0e39f7 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -337,7 +337,7 @@ var/list/turret_icons //If the turret is destroyed, you can remove it with a crowbar to //try and salvage its components to_chat(user, "You begin prying the metal coverings off.") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * I.toolspeed, target = src)) if(prob(70)) to_chat(user, "You remove the turret and salvage some components.") if(installation) @@ -369,15 +369,15 @@ var/list/turret_icons ) wrenching = 1 - if(do_after(user, 50, target = src)) + if(do_after(user, 50 * I.toolspeed, target = src)) //This code handles moving the turret around. After all, it's a portable turret! if(!anchored) - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(loc, I.usesound, 100, 1) anchored = 1 update_icon() to_chat(user, "You secure the exterior bolts on the turret.") else if(anchored) - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(loc, I.usesound, 100, 1) anchored = 0 to_chat(user, "You unsecure the exterior bolts on the turret.") update_icon() @@ -778,14 +778,14 @@ var/list/turret_icons switch(build_step) if(0) //first step if(istype(I, /obj/item/weapon/wrench) && !anchored) - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(loc, I.usesound, 100, 1) to_chat(user, "You secure the external bolts.") anchored = 1 build_step = 1 return else if(istype(I, /obj/item/weapon/crowbar) && !anchored) - playsound(loc, 'sound/items/Crowbar.ogg', 75, 1) + playsound(loc, I.usesound, 75, 1) to_chat(user, "You dismantle the turret construction.") new /obj/item/stack/sheet/metal( loc, 5) qdel(src) // qdel @@ -803,7 +803,7 @@ var/list/turret_icons return else if(istype(I, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(loc, I.usesound, 75, 1) to_chat(user, "You unfasten the external bolts.") anchored = 0 build_step = 0 @@ -812,7 +812,7 @@ var/list/turret_icons if(2) if(istype(I, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(loc, I.usesound, 100, 1) to_chat(user, "You bolt the metal armor into place.") build_step = 3 return @@ -825,8 +825,8 @@ var/list/turret_icons to_chat(user, "You need more fuel to complete this task.") return - playsound(loc, pick('sound/items/Welder.ogg', 'sound/items/Welder2.ogg'), 50, 1) - if(do_after(user, 20, target = src)) + playsound(loc, WT.usesound, 50, 1) + if(do_after(user, 20 * WT.toolspeed, target = src)) if(!src || !WT.remove_fuel(5, user)) return build_step = 1 to_chat(user, "You remove the turret's interior metal armor.") @@ -857,7 +857,7 @@ var/list/turret_icons return else if(istype(I, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(loc, I.usesound, 100, 1) to_chat(user, "You remove the turret's metal armor bolts.") build_step = 2 return @@ -876,7 +876,7 @@ var/list/turret_icons if(5) if(istype(I, /obj/item/weapon/screwdriver)) - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(loc, I.usesound, 100, 1) build_step = 6 to_chat(user, "You close the internal access hatch.") return @@ -894,7 +894,7 @@ var/list/turret_icons return else if(istype(I, /obj/item/weapon/screwdriver)) - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(loc, I.usesound, 100, 1) build_step = 5 to_chat(user, "You open the internal access hatch.") return @@ -906,8 +906,8 @@ var/list/turret_icons if(WT.get_fuel() < 5) to_chat(user, "You need more fuel to complete this task.") - playsound(loc, pick('sound/items/Welder.ogg', 'sound/items/Welder2.ogg'), 50, 1) - if(do_after(user, 30, target = src)) + playsound(loc, WT.usesound, 50, 1) + if(do_after(user, 30 * WT.toolspeed, target = src)) if(!src || !WT.remove_fuel(5, user)) return build_step = 8 @@ -924,7 +924,7 @@ var/list/turret_icons qdel(src) // qdel else if(istype(I, /obj/item/weapon/crowbar)) - playsound(loc, 'sound/items/Crowbar.ogg', 75, 1) + playsound(loc, I.usesound, 75, 1) to_chat(user, "You pry off the turret's exterior armor.") new /obj/item/stack/sheet/metal(loc, 2) build_step = 6 diff --git a/code/game/machinery/programmable_unloader.dm b/code/game/machinery/programmable_unloader.dm index e41dfd2f79f..e9f7a55b039 100644 --- a/code/game/machinery/programmable_unloader.dm +++ b/code/game/machinery/programmable_unloader.dm @@ -198,9 +198,9 @@ /obj/machinery/programmable/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I,/obj/item/weapon/wrench)) // code borrowed from pipe dispenser if(unwrenched==0) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) to_chat(user, "\blue You begin to unfasten \the [src] from the floor...") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * I.toolspeed, target = src)) user.visible_message( \ "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src]. Now it can be pulled somewhere else.", \ @@ -211,9 +211,9 @@ if(usr.machine==src) usr << browse(null, "window=pipedispenser") else /* unwrenched */ - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) to_chat(user, "\blue You begin to fasten \the [src] to the floor...") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * I.toolspeed, target = src)) user.visible_message( \ "[user] fastens \the [src].", \ "\blue You fastened \the [src] into place.", \ @@ -238,8 +238,9 @@ if(istype(I,/obj/item/weapon/crowbar)) if(open) to_chat(user, "\blue You begin to pry out the [src]'s circuits.") - if(do_after(user,40, target = src)) + if(do_after(user, 40 * I.toolspeed, target = src)) to_chat(user, "\blue You remove the circuitboard.") + playsound(loc, I.usesound, 50, 1) circuit_removed = 1 use_power = 0 on = 0 diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 6db7199a7f0..cbf20e838f3 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -57,7 +57,7 @@ return anchored = !anchored to_chat(user, "You [anchored ? "attached" : "detached"] the recharger.") - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(loc, G.usesound, 75, 1) /obj/machinery/recharger/attack_hand(mob/user as mob) add_fingerprint(user) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index a3f7ee5189a..fad1ae8de2d 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -238,7 +238,7 @@ update_icon() else if(istype(W, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) if(is_open) to_chat(user, "\blue You close the panel.") is_open = 0 @@ -250,11 +250,12 @@ var/obj/item/stack/cable_coil/coil = W to_chat(user, "\blue You begin to replace the wires.") //if(do_after(user, min(60, round( ((maxhealth/health)*10)+(malfunction*10) ), target = src)) //Take longer to repair heavier damage - if(do_after(user, 30, target = src)) + if(do_after(user, 30 * coil.toolspeed, target = src)) if(!src || !coil) return coil.use(1) health = max_health malfunction = 0 + playsound(loc, coil.usesound, 50, 1) to_chat(user, "\blue You repair the [src]!") update_icon() @@ -263,7 +264,7 @@ to_chat(user, "The bolts are covered, unlocking this would retract the covers.") return if(anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) to_chat(user, "\blue You unsecure the [src] from the floor!") if(active) to_chat(user, "\blue The [src] shuts off!") @@ -271,7 +272,7 @@ anchored = 0 else if(istype(get_turf(src), /turf/space)) return //No wrenching these in space! - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) to_chat(user, "\blue You secure the [src] to the floor!") anchored = 1 @@ -460,14 +461,14 @@ else if(state == 0) state = 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(src.loc, W.usesound, 75, 1) to_chat(user, "You secure the external reinforcing bolts to the floor.") src.anchored = 1 return else if(state == 1) state = 0 - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(src.loc, W.usesound, 75, 1) to_chat(user, "You undo the external reinforcing bolts.") src.anchored = 0 return diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index b50fc3566d8..efed2386eab 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -503,7 +503,7 @@ return if(istype(I, /obj/item/weapon/screwdriver)) src.panelopen = !src.panelopen - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(src.loc, I.usesound, 100, 1) to_chat(user, text("You [] the unit's maintenance panel.",(src.panelopen ? "open up" : "close") )) src.updateUsrDialog() return diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index b26fd7a11f2..2f0dc7b2666 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -59,14 +59,14 @@ to_chat(user, "The bomb must be placed on solid ground to attach it") else to_chat(user, "You firmly wrench the bomb to the floor") - playsound(loc, 'sound/items/ratchet.ogg', 50, 1) + playsound(loc, I.usesound, 50, 1) anchored = 1 if(active) to_chat(user, "The bolts lock in place") else if(!active) to_chat(user, "You wrench the bomb from the floor") - playsound(loc, 'sound/items/ratchet.ogg', 50, 1) + playsound(loc, I.usesound, 50, 1) anchored = 0 else to_chat(user, "The bolts are locked down!") diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index 5b799d3a2e4..6f5eaa3f2b5 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -184,8 +184,8 @@ attackby(var/obj/item/weapon/D as obj, var/mob/user as mob, params) if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(src.loc, D.usesound, 50, 1) + if(do_after(user, 20 * D.toolspeed, target = src)) if(src.stat & BROKEN) to_chat(user, "\blue The broken glass falls out.") var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index c1a10cacd48..db436bfb772 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -24,24 +24,24 @@ if(0) if(istype(P, /obj/item/weapon/screwdriver)) to_chat(user, "You unfasten the bolts.") - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, P.usesound, 50, 1) construct_op++ if(1) if(istype(P, /obj/item/weapon/screwdriver)) to_chat(user, "You fasten the bolts.") - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc,P.usesound, 50, 1) construct_op-- if(istype(P, /obj/item/weapon/wrench)) to_chat(user, "You dislodge the external plating.") - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(src.loc, P.usesound, 75, 1) construct_op++ if(2) if(istype(P, /obj/item/weapon/wrench)) to_chat(user, "You secure the external plating.") - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(src.loc, P.usesound, 75, 1) construct_op-- if(istype(P, /obj/item/weapon/wirecutters)) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + playsound(src.loc, P.usesound, 50, 1) to_chat(user, "You remove the cables.") construct_op++ var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( user.loc ) @@ -51,6 +51,7 @@ if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/A = P if(A.amount >= 5) + playsound(loc, A.usesound, 50, 1) to_chat(user, "You insert the cables.") A.amount -= 5 if(A.amount <= 0) @@ -60,8 +61,8 @@ stat &= ~BROKEN // the machine's not borked anymore! if(istype(P, /obj/item/weapon/crowbar)) to_chat(user, "You begin prying out the circuit board other components...") - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - if(do_after(user,60, target = src)) + playsound(src.loc, P.usesound, 50, 1) + if(do_after(user, 60 * P.toolspeed, target = src)) to_chat(user, "You finish prying out the components.") // Drop all the component stuff diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm index 9baa2a1a12f..7340406ed6a 100644 --- a/code/game/machinery/telecomms/telemonitor.dm +++ b/code/game/machinery/telecomms/telemonitor.dm @@ -128,8 +128,8 @@ attackby(var/obj/item/weapon/D as obj, var/mob/user as mob, params) if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(src.loc, D.usesound, 50, 1) + if(do_after(user, 20 * D.toolspeed, target = src)) if(src.stat & BROKEN) to_chat(user, "\blue The broken glass falls out.") var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm index 001771b7efa..89c36429b14 100644 --- a/code/game/machinery/telecomms/traffic_control.dm +++ b/code/game/machinery/telecomms/traffic_control.dm @@ -340,8 +340,8 @@ /obj/machinery/computer/telecomms/traffic/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob, params) if(istype(D, /obj/item/weapon/screwdriver)) - playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(get_turf(src), D.usesound, 50, 1) + if(do_after(user, 20 * D.toolspeed, target = src)) if(src.stat & BROKEN) to_chat(user, "\blue The broken glass falls out.") var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index f45daee2af5..46cffe179be 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -237,7 +237,7 @@ return if(istype(I, /obj/item/weapon/screwdriver) && anchored) - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(loc, I.usesound, 50, 1) panel_open = !panel_open to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") overlays.Cut() diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 23e18d53a0d..3493f03dd69 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -194,6 +194,8 @@ range = MELEE|RANGED var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock. var/canRwall = 0 + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' /obj/item/mecha_parts/mecha_equipment/rcd/New() rcd_list += src @@ -224,7 +226,7 @@ if(do_after_cooldown(W)) chassis.spark_system.start() W.ChangeTurf(/turf/simulated/floor/plating) - playsound(W, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(W, usesound, 50, 1) else if(istype(target, /turf/simulated/floor)) var/turf/simulated/floor/F = target occupant_message("Deconstructing [target]...") @@ -232,27 +234,27 @@ chassis.spark_system.start() F.ChangeTurf(/turf/space) F.air_update_turf() - playsound(F, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(F, usesound, 50, 1) else if(istype(target, /obj/machinery/door/airlock)) occupant_message("Deconstructing [target]...") if(do_after_cooldown(target)) chassis.spark_system.start() qdel(target) - playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(target, usesound, 50, 1) if(1) if(istype(target, /turf/space)) var/turf/space/S = target occupant_message("Building Floor...") if(do_after_cooldown(S)) S.ChangeTurf(/turf/simulated/floor/plating) - playsound(S, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(S, usesound, 50, 1) chassis.spark_system.start() else if(istype(target, /turf/simulated/floor)) var/turf/simulated/floor/F = target occupant_message("Building Wall...") if(do_after_cooldown(F)) F.ChangeTurf(/turf/simulated/wall) - playsound(F, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(F, usesound, 50, 1) chassis.spark_system.start() if(2) if(istype(target, /turf/simulated/floor)) @@ -261,7 +263,7 @@ chassis.spark_system.start() var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock(target) T.autoclose = 1 - playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(target, usesound, 50, 1) playsound(target, 'sound/effects/sparks2.ogg', 50, 1) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 4ec4746a198..78ff22723d9 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -734,7 +734,7 @@ // Since having maint protocols available is controllable by the MMI, I see this as a consensual way to remove an MMI without destroying the mech user.visible_message("[user] begins levering out the MMI from the [src].", "You begin to lever out the MMI from the [src].") to_chat(occupant, "[user] is prying you out of the exosuit!") - if(do_after(user,80,target=src)) + if(do_after(user, 80 * W.toolspeed, target=src)) user.visible_message("[user] pries the MMI out of the [src]!", "You finish removing the MMI from the [src]!") go_out() return diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index f1641c94b64..76fa87f6988 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -6,22 +6,25 @@ if(istype(used_atom, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/W = used_atom if(W.remove_fuel(0, user)) - playsound(holder, 'sound/items/Welder2.ogg', 50, 1) + playsound(holder, W.usesound, 50, 1) else return 0 else if(istype(used_atom, /obj/item/weapon/wrench)) - playsound(holder, 'sound/items/Ratchet.ogg', 50, 1) + var/obj/item/weapon/wrench/W = used_atom + playsound(holder, W.usesound, 50, 1) else if(istype(used_atom, /obj/item/weapon/screwdriver)) - playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) + var/obj/item/weapon/screwdriver/S = used_atom + playsound(holder, S.usesound, 50, 1) else if(istype(used_atom, /obj/item/weapon/wirecutters)) - playsound(holder, 'sound/items/Wirecutter.ogg', 50, 1) + var/obj/item/weapon/wirecutters/W = used_atom + playsound(holder, W.usesound, 50, 1) else if(istype(used_atom, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = used_atom if(C.use(4)) - playsound(holder, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(holder, C.usesound, 50, 1) else to_chat(user, ("There's not enough cable to finish the task.")) return 0 @@ -38,22 +41,25 @@ if(istype(used_atom, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/W = used_atom if(W.remove_fuel(0, user)) - playsound(holder, 'sound/items/Welder2.ogg', 50, 1) + playsound(holder, W.usesound, 50, 1) else return 0 else if(istype(used_atom, /obj/item/weapon/wrench)) - playsound(holder, 'sound/items/Ratchet.ogg', 50, 1) + var/obj/item/weapon/wrench/W = used_atom + playsound(holder, W.usesound, 50, 1) else if(istype(used_atom, /obj/item/weapon/screwdriver)) - playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) + var/obj/item/weapon/screwdriver/S = used_atom + playsound(holder, S.usesound, 50, 1) else if(istype(used_atom, /obj/item/weapon/wirecutters)) - playsound(holder, 'sound/items/Wirecutter.ogg', 50, 1) + var/obj/item/weapon/wirecutters/W = used_atom + playsound(holder, W.usesound, 50, 1) else if(istype(used_atom, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = used_atom if(C.use(4)) - playsound(holder, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(holder, C.usesound, 50, 1) else to_chat(user, ("There's not enough cable to finish the task.")) return 0 diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 6bd600eaaa7..29fcd55880e 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -35,7 +35,7 @@ var/obj/item/weapon/weldingtool/WT = W if(salvage_num <= 0) user.visible_message("[user] begins to slice apart the now completely stripped [src].", "You begin to slice apart the [src].", "You hear the sound of a welder nearby.") - if(WT.remove_fuel(0,user) && do_after(user,80,target=src)) + if(WT.remove_fuel(0,user) && do_after(user, 80 * WT.toolspeed, target = src)) user.visible_message("The now-dilapidated [src] falls apart in a clatter.", "As you slice apart the final support structures, the [src] falls apart in a heap.", "You hear metal clanking to the floor.") new /obj/item/stack/sheet/metal(src.loc) var/obj/item/stack/rods/rods = new /obj/item/stack/rods(src.loc) diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 19cbbd38c5a..122f1741a3c 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -222,7 +222,7 @@ var/obj/item/weapon/weldingtool/WT = I if(WT.remove_fuel(0, user)) damage = 15 - playsound(loc, 'sound/items/Welder.ogg', 100, 1) + playsound(loc, WT.usesound, 100, 1) health -= damage healthcheck() @@ -381,7 +381,7 @@ if(WT.remove_fuel(0, user)) damage = 15 - playsound(loc, 'sound/items/Welder.ogg', 100, 1) + playsound(loc, WT.usesound, 100, 1) health -= damage user.changeNext_move(CLICK_CD_MELEE) diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index 9c3dd867c74..62395eb3135 100644 --- a/code/game/objects/effects/decals/contraband.dm +++ b/code/game/objects/effects/decals/contraband.dm @@ -309,7 +309,7 @@ obj/structure/sign/poster/New(serial,var/subtypeIn = -1) obj/structure/sign/poster/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/wirecutters)) - playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) + playsound(loc, I.usesound, 100, 1) if(ruined) to_chat(user, "You remove the remnants of the poster.") qdel(src) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 8443ac90f17..80cbb208c76 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -33,7 +33,7 @@ if(WT.remove_fuel(0, user)) damage = 15 - playsound(loc, 'sound/items/Welder.ogg', 100, 1) + playsound(loc, WT.usesound, 100, 1) health -= damage healthcheck() diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 2a2237559fb..3852d67e6ff 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -10,6 +10,7 @@ w_class = 1 slot_flags = SLOT_BELT | SLOT_EARS attack_verb = list("attacked", "coloured") + toolspeed = 1 var/colour = "#FF0000" //RGB var/drawtype = "rune" var/list/graffiti = list("body","amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","up","down","left","right","heart","borgsrogue","voxpox","shitcurity","catbeast","hieroglyphs1","hieroglyphs2","hieroglyphs3","security","syndicate1","syndicate2","nanotrasen","lie","valid","arrowleft","arrowright","arrowup","arrowdown","chicken","hailcrab","brokenheart","peace","scribble","scribble2","scribble3","skrek","squish","tunnelsnake","yip","youaredead") @@ -86,7 +87,7 @@ else if(graffiti.Find(drawtype)) temp = "graffiti" to_chat(user, "You start drawing a [temp] on the [target.name].") - if(instant || do_after(user, 50, target = target)) + if(instant || do_after(user, 50 * toolspeed, target = target)) var/obj/effect/decal/cleanable/crayon/C = new /obj/effect/decal/cleanable/crayon(target,colour,drawtype,temp) C.add_hiddenprint(user) to_chat(user, "You finish drawing [temp].") diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm index 52603b99a0b..824b51f16fb 100644 --- a/code/game/objects/items/devices/modkit.dm +++ b/code/game/objects/items/devices/modkit.dm @@ -14,7 +14,7 @@ /obj/item/clothing/suit/space/rig ) -/obj/item/device/modkit/afterattack(obj/O, mob/user as mob, proximity) +/obj/item/device/modkit/afterattack(obj/item/O, mob/user as mob, proximity) if(!proximity) return @@ -47,7 +47,7 @@ to_chat(user, "[O] must be safely placed on the ground for modification.") return - playsound(user.loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(user.loc, O.usesound, 100, 1) user.visible_message("\red [user] opens \the [src] and modifies \the [O].","\red You open \the [src] and modify \the [O].") diff --git a/code/game/objects/items/devices/pizza_bomb.dm b/code/game/objects/items/devices/pizza_bomb.dm index 836da188bba..093d7481c51 100644 --- a/code/game/objects/items/devices/pizza_bomb.dm +++ b/code/game/objects/items/devices/pizza_bomb.dm @@ -63,7 +63,7 @@ var/chosen_wire = input(user, "OH GOD OH GOD", "WHAT WIRE?!") in wires if(!in_range(src, usr) || issilicon(usr) || !usr.canmove || usr.restrained()) return - playsound(src, 'sound/items/Wirecutter.ogg', 50, 1, 1) + playsound(src, I.usesound, 50, 1, 1) user.visible_message("[user] cuts the [chosen_wire] wire!", "You cut the [chosen_wire] wire!") sleep(5) if(chosen_wire == correct_wire) @@ -84,8 +84,8 @@ to_chat(user, "You can't see the box well enough to cut the wires out.") return user.visible_message("[user] starts removing the payload and wires from \the [src].") - if(do_after(user, 40, target = src)) - playsound(src, 'sound/items/Wirecutter.ogg', 50, 1, 1) + if(do_after(user, 40 * I.toolspeed, target = src)) + playsound(src, I.usesound, 50, 1, 1) user.unEquip(src) user.visible_message("[user] removes the insides of \the [src]!") var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(src.loc) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 12b12c14406..43289678591 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -138,8 +138,8 @@ if(3) if(iswirecutter(W) && b_stat && wires.IsAllCut()) to_chat(user, "You cut out the intercoms wiring and disconnect its electronics.") - playsound(get_turf(src), 'sound/items/Wirecutter.ogg', 50, 1) - if(do_after(user, 10, target = src)) + playsound(get_turf(src), W.usesound, 50, 1) + if(do_after(user, 10 * W.toolspeed, target = src)) if(buildstage != 3) return new /obj/item/stack/cable_coil(get_turf(src),5) @@ -152,8 +152,8 @@ else return ..() if(2) if(isscrewdriver(W)) - playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 10, target = src)) + playsound(get_turf(src), W.usesound, 50, 1) + if(do_after(user, 10 * W.toolspeed, target = src)) update_icon() on = 1 b_stat = 0 @@ -170,15 +170,15 @@ if(coil.amount < 5) to_chat(user, "You need more cable for this!") return - if(do_after(user, 10, target = src)) + if(do_after(user, 10 * coil.toolspeed, target = src)) coil.use(5) to_chat(user, "You wire \the [src]!") buildstage = 2 return 1 if(iscrowbar(W)) to_chat(user, "You begin removing the electronics...") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 10, target = src)) + playsound(get_turf(src), W.usesound, 50, 1) + if(do_after(user, 10 * W.toolspeed, target = src)) if(buildstage != 1) return new /obj/item/weapon/intercom_electronics(get_turf(src)) @@ -187,19 +187,19 @@ return 1 if(0) if(istype(W,/obj/item/weapon/intercom_electronics)) - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 10, target = src)) + playsound(get_turf(src), W.usesound, 50, 1) + if(do_after(user, 10 * W.toolspeed, target = src)) qdel(W) to_chat(user, "You insert \the [W] into \the [src]!") buildstage = 1 return 1 if(iswelder(W)) var/obj/item/weapon/weldingtool/WT=W - playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1) + playsound(get_turf(src), WT.usesound, 50, 1) if(!WT.remove_fuel(3, user)) to_chat(user, "You're out of welding fuel.") return 1 - if(do_after(user, 10, target = src)) + if(do_after(user, 10 * WT.toolspeed, target = src)) to_chat(user, "You cut the intercom frame from the wall!") new /obj/item/mounted/frame/intercom(get_turf(src)) qdel(src) @@ -233,6 +233,8 @@ desc = "Looks like a circuit. Probably is." w_class = 2 materials = list(MAT_METAL=50, MAT_GLASS=50) + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' /obj/item/device/radio/intercom/locked var/locked_frequency diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 9a9edbb62ad..7c65242ff06 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -279,7 +279,7 @@ REAGENT SCANNER else to_chat(user, "You install the upgrade in the [src].") overlays += "advanced" - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(src.loc, usesound, 50, 1) upgraded = 1 qdel(W) @@ -296,6 +296,7 @@ REAGENT SCANNER desc = "An upgrade unit that can be installed on a health analyzer for expanded functionality." w_class = 1 origin_tech = "magnets=2;biotech=2" + usesound = 'sound/items/Deconstruct.ogg' /obj/item/device/analyzer desc = "A hand-held environmental scanner which reports current gas levels." diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index c573e4ff975..43aff1cb05d 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -303,7 +303,7 @@ /obj/item/device/tape/attackby(obj/item/I, mob/user) if(ruined && istype(I, /obj/item/weapon/screwdriver)) to_chat(user, "You start winding the tape back in.") - if(do_after(user, 120, target = src)) + if(do_after(user, 120 * I.toolspeed, target = src)) to_chat(user, "You wound the tape back in!") fix() else if(istype(I, /obj/item/weapon/pen)) diff --git a/code/game/objects/items/mountable_frames/frames.dm b/code/game/objects/items/mountable_frames/frames.dm index e377cac4015..b8ef9216053 100644 --- a/code/game/objects/items/mountable_frames/frames.dm +++ b/code/game/objects/items/mountable_frames/frames.dm @@ -3,6 +3,8 @@ desc = "Place it on a wall." var/sheets_refunded = 2 var/list/mount_reqs = list() //can contain simfloor, nospace. Used in try_build to see if conditions are needed, then met + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' /obj/item/mounted/frame/attackby(obj/item/weapon/W, mob/user) ..() diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm index 55e1cc4a722..a21bb504fdc 100644 --- a/code/game/objects/items/stacks/nanopaste.dm +++ b/code/game/objects/items/stacks/nanopaste.dm @@ -6,7 +6,7 @@ icon_state = "tube" origin_tech = "materials=3;engineering=2" amount = 10 - + toolspeed = 1 /obj/item/stack/nanopaste/attack(mob/living/M as mob, mob/user as mob) if(!istype(M) || !istype(user)) diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index e4866856e97..aadf2d0b8fe 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -14,6 +14,8 @@ max_amount = 60 attack_verb = list("hit", "bludgeoned", "whacked") hitsound = 'sound/weapons/grenadelaunch.ogg' + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' /obj/item/stack/rods/cyborg materials = list() diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 46f7b3fb469..3a2d07aa2f6 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -143,7 +143,7 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \ /obj/item/stack/sheet/animalhide/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(W.sharp) user.visible_message("[user] starts cutting hair off \the [src].", "You start cutting the hair off \the [src]...", "You hear the sound of a knife rubbing against flesh.") - if(do_after(user,50, target = src)) + if(do_after(user, 50 * W.toolspeed, target = src)) to_chat(user, "You cut the hair from this [src.singular_name].") //Try locating an exisitng stack on the tile and add to there if possible for(var/obj/item/stack/sheet/hairlesshide/HS in usr.loc) diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm index 2a8b2130be6..4e5a0e9fdc8 100644 --- a/code/game/objects/items/stacks/sheets/sheets.dm +++ b/code/game/objects/items/stacks/sheets/sheets.dm @@ -9,6 +9,8 @@ attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed") var/perunit = MINERAL_MATERIAL_AMOUNT var/sheettype = null //this is used for girders in the creation of walls/false walls + usesound = 'sound/items/Deconstruct.ogg' + toolspeed = 1 // Since the sheetsnatcher was consolidated into weapon/storage/bag we now use diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index feb681e47c2..87da0987487 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1301,7 +1301,7 @@ obj/item/toy/cards/deck/syndicate/black /obj/item/toy/minigibber/attackby(var/obj/O, var/mob/user, params) if(istype(O,/obj/item/toy/character) && O.loc == user) to_chat(user, "You start feeding \the [O] [bicon(O)] into \the [src]'s mini-input.") - if(do_after(user,10, target = src)) + if(do_after(user, 10, target = src)) if(O.loc != user) to_chat(user, "\The [O] is too far away to feed into \the [src]!") else diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index bb57a4a2cc2..6c105796150 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -20,6 +20,8 @@ RCD w_class = 3 materials = list(MAT_METAL = 30000) origin_tech = "engineering=4;materials=2" + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' var/datum/effect/system/spark_spread/spark_system var/max_matter = 100 var/matter = 0 @@ -172,7 +174,7 @@ RCD door_name = temp_t /obj/item/weapon/rcd/proc/activate() - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, usesound, 50, 1) /obj/item/weapon/rcd/afterattack(atom/A, mob/user, proximity) @@ -197,7 +199,7 @@ RCD if(checkResource(3, user)) to_chat(user, "Building Wall ...") playsound(loc, 'sound/machines/click.ogg', 50, 1) - if(do_after(user, 20, target = A)) + if(do_after(user, 20 * toolspeed, target = A)) if(!useResource(3, user)) return 0 activate() var/turf/AT = A @@ -210,7 +212,7 @@ RCD if(checkResource(10, user)) to_chat(user, "Building Airlock...") playsound(loc, 'sound/machines/click.ogg', 50, 1) - if(do_after(user, 50, target = A)) + if(do_after(user, 50 * toolspeed, target = A)) if(!useResource(10, user)) return 0 activate() var/obj/machinery/door/airlock/T = new door_type(A) @@ -231,7 +233,7 @@ RCD if(checkResource(5, user)) to_chat(user, "Deconstructing Wall...") playsound(loc, 'sound/machines/click.ogg', 50, 1) - if(do_after(user, 40, target = A)) + if(do_after(user, 40 * toolspeed, target = A)) if(!useResource(5, user)) return 0 activate() var/turf/AT = A @@ -243,7 +245,7 @@ RCD if(checkResource(5, user)) to_chat(user, "Deconstructing Floor...") playsound(loc, 'sound/machines/click.ogg', 50, 1) - if(do_after(user, 50, target = A)) + if(do_after(user, 50 * toolspeed, target = A)) if(!useResource(5, user)) return 0 activate() var/turf/AT = A @@ -255,7 +257,7 @@ RCD if(checkResource(20, user)) to_chat(user, "Deconstructing Airlock...") playsound(loc, 'sound/machines/click.ogg', 50, 1) - if(do_after(user, 50, target = A)) + if(do_after(user, 50 * toolspeed, target = A)) if(!useResource(20, user)) return 0 activate() qdel(A) @@ -270,7 +272,7 @@ RCD return 0 to_chat(user, "Deconstructing window...") playsound(loc, 'sound/machines/click.ogg', 50, 1) - if(!do_after(user, 20, target = A)) + if(!do_after(user, 20 * toolspeed, target = A)) return 0 if(locate(/obj/structure/window/full/shuttle) in A.contents) return 0 // Let's not give shuttle-griefers an easy time. @@ -307,7 +309,7 @@ RCD return 0 to_chat(user, "Constructing window...") playsound(loc, 'sound/machines/click.ogg', 50, 1) - if(!do_after(user, 20, target = A)) + if(!do_after(user, 20 * toolspeed, target = A)) return 0 if(locate(/obj/structure/grille) in A.contents) return 0 // We already have window diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index e60a68f42d6..f311d56d1ba 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -87,6 +87,8 @@ icon_state = "razor" flags = CONDUCT w_class = 1 + usesound = 'sound/items/Welder2.ogg' + toolspeed = 1 /obj/item/weapon/razor/attack(mob/living/carbon/M as mob, mob/user as mob) if(ishuman(M)) @@ -106,24 +108,24 @@ if(H == user) //shaving yourself user.visible_message("[user] starts to shave their facial hair with \the [src].", \ "You take a moment shave your facial hair with \the [src].") - if(do_after(user, 50, target = H)) + if(do_after(user, 50 * toolspeed, target = H)) user.visible_message("[user] shaves his facial hair clean with the [src].", \ "You finish shaving with the [src]. Fast and clean!") C.f_style = "Shaved" H.update_fhair() - playsound(src.loc, 'sound/items/Welder2.ogg', 20, 1) + playsound(src.loc, usesound, 20, 1) else var/turf/user_loc = user.loc var/turf/H_loc = H.loc user.visible_message("[user] tries to shave [H]'s facial hair with \the [src].", \ "You start shaving [H]'s facial hair.") - if(do_after(user, 50, target = H)) + if(do_after(user, 50 * toolspeed, target = H)) if(user_loc == user.loc && H_loc == H.loc) user.visible_message("[user] shaves off [H]'s facial hair with \the [src].", \ "You shave [H]'s facial hair clean off.") C.f_style = "Shaved" H.update_fhair() - playsound(src.loc, 'sound/items/Welder2.ogg', 20, 1) + playsound(src.loc, usesound, 20, 1) if(user.zone_sel.selecting == "head") if(!get_location_accessible(H, "head")) to_chat(user, "The headgear is in the way.") @@ -137,24 +139,24 @@ if(H == user) //shaving yourself user.visible_message("[user] starts to shave their head with \the [src].", \ "You start to shave your head with \the [src].") - if(do_after(user, 50, target = H)) + if(do_after(user, 50 * toolspeed, target = H)) user.visible_message("[user] shaves his head with the [src].", \ "You finish shaving with the [src].") C.h_style = "Skinhead" H.update_hair() - playsound(src.loc, 'sound/items/Welder2.ogg', 40, 1) + playsound(src.loc, usesound, 40, 1) else var/turf/user_loc = user.loc var/turf/H_loc = H.loc user.visible_message("[user] tries to shave [H]'s head with \the [src]!", \ "You start shaving [H]'s head.") - if(do_after(user, 50, target = H)) + if(do_after(user, 50 * toolspeed, target = H)) if(user_loc == user.loc && H_loc == H.loc) user.visible_message("[user] shaves [H]'s head bald with \the [src]!", \ "You shave [H]'s head bald.") C.h_style = "Skinhead" H.update_hair() - playsound(src.loc, 'sound/items/Welder2.ogg', 40, 1) + playsound(src.loc, usesound, 40, 1) else ..() else diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 924b5e3d590..4151cdc0d05 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -256,6 +256,7 @@ force = 0 throwforce = 6 w_class = 4 + toolspeed = 1 var/revivecost = 1000 var/cooldown = 0 @@ -346,7 +347,7 @@ user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest.") busy = 1 update_icon() - if(do_after(user, 30, target = M)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process + if(do_after(user, 30 * toolspeed, target = M)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process user.visible_message("[user] places [src] on [M.name]'s chest.", "You place [src] on [M.name]'s chest.") playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) var/mob/dead/observer/ghost = H.get_ghost() @@ -362,7 +363,7 @@ var/tloss = 600 //brain damage starts setting in on the patient after some time left rotting var/total_burn = 0 var/total_brute = 0 - if(do_after(user, 20, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total + if(do_after(user, 20 * toolspeed, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total for(var/obj/item/carried_item in H.contents) if(istype(carried_item, /obj/item/clothing/suit/space)) if(!defib.combat) @@ -455,6 +456,7 @@ var/busy = 0 var/safety = 1 flags = NODROP + toolspeed = 1 /obj/item/weapon/borg_defib/attack(mob/M, mob/user) var/tobehealed @@ -495,7 +497,7 @@ user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest.") busy = 1 update_icon() - if(do_after(user, 30, target = M)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process + if(do_after(user, 30 * toolspeed, target = M)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process user.visible_message("[user] places [src] on [M.name]'s chest.", "You place [src] on [M.name]'s chest.") playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) var/mob/dead/observer/ghost = H.get_ghost() @@ -511,7 +513,7 @@ var/tloss = 600 //brain damage starts setting in on the patient after some time left rotting var/total_burn = 0 var/total_brute = 0 - if(do_after(user, 20, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total + if(do_after(user, 20 * toolspeed, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total if(H.stat == 2) var/health = H.health M.visible_message("[M]'s body convulses a bit.") diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 3269aefde0e..bd6a18b73c1 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -7,6 +7,7 @@ det_time = 10 display_timer = 0 origin_tech = "syndicate=2" + toolspeed = 1 var/atom/target = null var/image_overlay = null var/obj/item/device/assembly_holder/nadeassembly = null @@ -36,7 +37,7 @@ update_icon() return if(nadeassembly && istype(I, /obj/item/weapon/wirecutters)) - playsound(src, 'sound/items/Wirecutter.ogg', 20, 1) + playsound(src, I.usesound, 20, 1) nadeassembly.loc = get_turf(src) nadeassembly.master = null nadeassembly = null @@ -73,7 +74,7 @@ return to_chat(user, "You start planting the [src]. The timer is set to [det_time]...") - if(do_after(user, 50, target = AM)) + if(do_after(user, 50 * toolspeed, target = AM)) if(!user.unEquip(src)) return src.target = AM diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index c49b2341f29..6ca1d53e5db 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -11,6 +11,7 @@ var/payload_name = null // used for spawned grenades w_class = 2 force = 2 + var/prime_sound = 'sound/items/Screwdriver2.ogg' var/stage = EMPTY var/list/beakers = list() var/list/allowed_containers = list(/obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle) @@ -124,7 +125,7 @@ if(stage == WIRED) if(beakers.len) to_chat(user, "You lock the assembly.") - playsound(loc, 'sound/items/Screwdriver.ogg', 25, -3) + playsound(loc, prime_sound, 25, -3) stage = READY update_icon() var/contained = "" @@ -265,7 +266,7 @@ has_reagents = 1 if(!has_reagents) - playsound(loc, 'sound/items/Screwdriver2.ogg', 50, 1) + playsound(loc, usesound, 50, 1) return if(nadeassembly) @@ -347,7 +348,7 @@ if(E.reagents.total_volume) has_reagents = 1 if(!has_reagents) - playsound(loc, 'sound/items/Screwdriver2.ogg', 50, 1) + playsound(loc, prime_sound, 50, 1) return playsound(loc, 'sound/effects/bamf.ogg', 50, 1) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 7b1187bcc50..723920e7a5c 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -130,7 +130,7 @@ to_chat(user, "You need at least six metal sheets to make good enough weights!") return to_chat(user, "You begin to apply [I] to [src]...") - if(do_after(user, 35, target = src)) + if(do_after(user, 35 * M.toolspeed, target = src)) var/obj/item/weapon/restraints/legcuffs/bola/S = new /obj/item/weapon/restraints/legcuffs/bola M.use(6) user.put_in_hands(S) diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 6d5efda18b7..8209de8da80 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -9,6 +9,7 @@ w_class = 2 origin_tech = "materials=1;biotech=3;programming=2" materials = list(MAT_METAL=600, MAT_GLASS=200) + toolspeed = 1 var/obj/item/weapon/implant/imp = null @@ -29,7 +30,7 @@ M.visible_message("[user] is attemping to implant [M].") var/turf/T = get_turf(M) - if(T && (M == user || do_after(user, 50, target = M))) + if(T && (M == user || do_after(user, 50 * toolspeed, target = M))) if(user && M && (get_turf(M) == T) && src && imp) if(imp.implant(M, user)) if(M == user) diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 5e262ce4afa..b40f81bef60 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -8,6 +8,8 @@ var/list/attack_verb_on = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") no_embed = 1 // Physically impossible for energy weapons to embed themselves into people, this should fix that. -- Dave hitsound = 'sound/weapons/blade1.ogg' // Probably more appropriate than the previous hitsound. -- Dave + usesound = 'sound/weapons/blade1.ogg' + toolspeed = 1 /obj/item/weapon/melee/energy/suicide_act(mob/user) user.visible_message(pick("[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.", \ diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm index 0167ab589be..99bf305df42 100644 --- a/code/game/objects/items/weapons/powerfist.dm +++ b/code/game/objects/items/weapons/powerfist.dm @@ -46,7 +46,7 @@ fisto_setting = 3 if(3) fisto_setting = 1 - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) to_chat(user, "You tweak \the [src]'s piston valve to [fisto_setting].") else if(istype(W, /obj/item/weapon/screwdriver)) if(tank) diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm index 00b85d8ebe1..6cfb677bd21 100644 --- a/code/game/objects/items/weapons/scissors.dm +++ b/code/game/objects/items/weapons/scissors.dm @@ -9,6 +9,7 @@ w_class = 2 hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("slices", "cuts", "stabs", "jabs") + toolspeed = 1 /obj/item/weapon/scissors/barber name = "Barber's Scissors" @@ -16,6 +17,7 @@ icon_state = "bscissor" item_state = "scissor" attack_verb = list("beautifully sliced", "artistically cut", "smoothly stabbed", "quickly jabbed") + toolspeed = 0.75 /obj/item/weapon/scissors/attack(mob/living/carbon/M as mob, mob/user as mob) if(user.a_intent != "help") @@ -79,7 +81,7 @@ var/h_new_style = input(user, "Select a hair style", "Grooming") as null|anything in species_hair user.visible_message("[user] starts cutting [M]'s hair!", "You start cutting [M]'s hair!") //arguments for this are: 1. what others see 2. what the user sees. --Fixed grammar, (TGameCo) playsound(loc, 'sound/goonstation/misc/Scissor.ogg', 100, 1) - if(do_after(user, 50, target = H)) //this is the part that adds a delay. delay is in deciseconds. --Made it 5 seconds, because hair isn't cut in one second in real life, and I want at least a little bit longer time, (TGameCo) + if(do_after(user, 50 * toolspeed, target = H)) //this is the part that adds a delay. delay is in deciseconds. --Made it 5 seconds, because hair isn't cut in one second in real life, and I want at least a little bit longer time, (TGameCo) if(!(M in view(1))) //Adjacency test user.visible_message("[user] stops cutting [M]'s hair.", "You stop cutting [M]'s hair.") return @@ -112,7 +114,7 @@ is_cutting = 1 user.visible_message("[user] starts cutting [M]'s hair!", "You start cutting [M]'s hair!") playsound(loc, 'sound/goonstation/misc/Scissor.ogg', 100, 1) - if(do_after(user, 50, target = H)) + if(do_after(user, 50 * toolspeed, target = H)) playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) user.visible_message("[user] abruptly stops cutting [M]'s hair and slices their throat!", "You stop cutting [M]'s hair and slice their throat!") //Just a little off the top. H.AdjustLoseBreath(10) //30 Oxy damage over time diff --git a/code/game/objects/items/weapons/stock_parts.dm b/code/game/objects/items/weapons/stock_parts.dm index 15a67bb2193..74fc3a5be6c 100644 --- a/code/game/objects/items/weapons/stock_parts.dm +++ b/code/game/objects/items/weapons/stock_parts.dm @@ -18,6 +18,8 @@ var/works_from_distance = 0 var/primary_sound = 'sound/items/rped.ogg' var/alt_sound = null + toolspeed = 1 + usesound = 'sound/items/rped.ogg' /obj/item/weapon/storage/part_replacer/afterattack(obj/machinery/T as obj, mob/living/carbon/human/user as mob, flag, params) if(flag) @@ -41,6 +43,8 @@ works_from_distance = 1 primary_sound = 'sound/items/PSHOOM.ogg' alt_sound = 'sound/items/PSHOOM_2.ogg' + usesound = 'sound/items/PSHOOM.ogg' + toolspeed = 0.5 /obj/item/weapon/storage/part_replacer/proc/play_rped_sound() //Plays the sound for RPED exchanging or installing parts. @@ -61,9 +65,12 @@ icon = 'icons/obj/stock_parts.dmi' w_class = 2 var/rating = 1 - New() - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' + +/obj/item/weapon/stock_parts/New() + src.pixel_x = rand(-5.0, 5) + src.pixel_y = rand(-5.0, 5) //Rank 1 diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 51d899d8e38..562d2b2d1b2 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -51,7 +51,7 @@ var/response = alert(user, "Are you sure you want to put the bag of holding inside another bag of holding?","Are you sure you want to die?","Yes","No") if(response == "Yes") user.visible_message("[user] grins as \he begins to put a Bag of Holding into a Bag of Holding!", "You begin to put the Bag of Holding into the Bag of Holding!") - if(do_after(user,30,target=src)) + if(do_after(user, 30, target=src)) investigate_log("has become a singularity. Caused by [user.key]","singulo") user.visible_message("[user] erupts in evil laughter as \he puts the Bag of Holding into another Bag of Holding!", "You can't help but laugh wildly as you put the Bag of Holding into another Bag of Holding, complete darkness surrounding you."," You hear the sound of scientific evil brewing! ") qdel(W) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 9ae4020c84d..f53185cbc8e 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -37,7 +37,7 @@ emag_act(user, W) if(istype(W, /obj/item/weapon/screwdriver)) - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * W.toolspeed, target = src)) open = !open user.show_message("You [open ? "open" : "close"] the service panel.", 1) return @@ -45,11 +45,11 @@ if((istype(W, /obj/item/device/multitool)) && (open == 1) && (!l_hacking)) user.show_message("Now attempting to reset internal memory, please hold.", 1) l_hacking = 1 - if(do_after(usr, 100, target = src)) + if(do_after(usr, 100 * W.toolspeed, target = src)) if(prob(40)) l_setshort = 1 l_set = 0 - user.show_message("Internal memory reset. Please give it a few seconds to reinitialize.", 1) + user.show_message("Internal memory reset. Please give it a few seconds to reinitialize.", 1) sleep(80) l_setshort = 0 l_hacking = 0 diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 5c66759dc52..3086afd5ad4 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -169,6 +169,7 @@ force_wielded = 24 attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") hitsound = 'sound/weapons/bladeslice.ogg' + usesound = 'sound/items/Crowbar.ogg' /obj/item/weapon/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons. icon_state = "fireaxe[wielded]" diff --git a/code/game/objects/items/weapons/whetstone.dm b/code/game/objects/items/weapons/whetstone.dm index d19c411899f..d498d4c75e8 100644 --- a/code/game/objects/items/weapons/whetstone.dm +++ b/code/game/objects/items/weapons/whetstone.dm @@ -4,6 +4,7 @@ icon_state = "whetstone" desc = "A block of stone used to sharpen things." w_class = 2 + usesound = 'sound/items/Screwdriver.ogg' var/used = 0 var/increment = 4 var/max = 30 @@ -43,7 +44,7 @@ I.force = Clamp(I.force + increment, 0, max) I.throwforce = Clamp(I.throwforce + increment, 0, max) I.name = "[prefix] [I.name]" - playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1) + playsound(get_turf(src), usesound, 50, 1) name = "worn out [name]" desc = "[desc] At least, it used to." used = 1 @@ -54,7 +55,7 @@ var/datum/unarmed_attack/attack = H.species.unarmed if(istype(attack, /datum/unarmed_attack/claws)) H.visible_message("[H] sharpens \his claws on the [src]!", "You sharpen your claws on the [src].") - playsound(get_turf(H), 'sound/items/Screwdriver.ogg', 50, 1) + playsound(get_turf(H), usesound, 50, 1) /obj/item/weapon/whetstone/super name = "super whetstone block" diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 70b3e3c1d67..116204d599f 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -85,7 +85,7 @@ usr.visible_message("[user] starts climbing onto \the [src]!") climber = user - if(!do_after(user,50, target = src)) + if(!do_after(user, 50, target = src)) climber = null return diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 7f02a93bd38..4b3a5d6896c 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -13,7 +13,7 @@ var/lastbang var/cutting_tool = /obj/item/weapon/weldingtool var/sound = 'sound/machines/click.ogg' - var/cutting_sound = 'sound/items/Welder.ogg' + var/cutting_sound var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients. var/material_drop = /obj/item/stack/sheet/metal var/material_drop_amount = 2 @@ -193,10 +193,10 @@ L[tmpname] = R var/desc = input("Please select a telepad.", "RCS") in L E.pad = L[desc] - playsound(E.loc, 'sound/machines/click.ogg', 50, 1) + playsound(E.loc, E.usesound, 50, 1) to_chat(user, "\blue Teleporting [name]...") E.teleporting = 1 - if(!do_after(user, 50, target = src)) + if(!do_after(user, 50 * E.toolspeed, target = src)) E.teleporting = 0 return E.teleporting = 0 @@ -215,10 +215,10 @@ E.rand_x = rand(50,200) E.rand_y = rand(50,200) var/L = locate(E.rand_x, E.rand_y, 6) - playsound(E.loc, 'sound/machines/click.ogg', 50, 1) + playsound(E.loc, E.usesound, 50, 1) to_chat(user, "\blue Teleporting [name]...") E.teleporting = 1 - if(!do_after(user, 50, target = src)) + if(!do_after(user, 50, E.toolspeed, target = src)) E.teleporting = 0 return E.teleporting = 0 @@ -248,11 +248,11 @@ if(!WT.remove_fuel(0, user)) return to_chat(user, "You begin cutting \the [src] apart...") - playsound(loc, cutting_sound, 40, 1) - if(do_after(user, 40, 1, target = src)) + playsound(loc, cutting_sound ? cutting_sound : WT.usesound, 40, 1) + if(do_after(user, 40 * WT.toolspeed, 1, target = src)) if(!opened || !WT.isOn()) return - playsound(loc, cutting_sound, 50, 1) + playsound(loc, cutting_sound ? cutting_sound : WT.usesound, 50, 1) visible_message("[user] slices apart \the [src].", "You cut \the [src] apart with \the [WT].", "You hear welding.") diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index 715d16f9ebd..61cb2f654da 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -25,7 +25,7 @@ if(istype(O, /obj/item/device/multitool)) to_chat(user, "\red Resetting circuitry...") playsound(user, 'sound/machines/lockreset.ogg', 50, 1) - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * O.toolspeed, target = src)) src.locked = 0 to_chat(user, " You disable the locking modules.") update_icon() @@ -89,7 +89,7 @@ src.locked = 1 to_chat(user, "\blue You re-enable the locking modules.") playsound(user, 'sound/machines/lockenable.ogg', 50, 1) - if(do_after(user,20, target = src)) + if(do_after(user, 20 * O.toolspeed, target = src)) src.locked = 1 to_chat(user, " You re-enable the locking modules.") return diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 7368c98c60f..c7e76fe08d4 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -102,10 +102,10 @@ L[tmpname] = R var/desc = input("Please select a telepad.", "RCS") in L E.pad = L[desc] - playsound(E.loc, 'sound/machines/click.ogg', 50, 1) + playsound(E.loc, E.usesound, 50, 1) to_chat(user, "\blue Teleporting [src.name]...") E.teleporting = 1 - if(!do_after(user, 50, target = src)) + if(!do_after(user, 50 * E.toolspeed, target = src)) E.teleporting = 0 return E.teleporting = 0 @@ -120,10 +120,10 @@ E.rand_x = rand(50,200) E.rand_y = rand(50,200) var/L = locate(E.rand_x, E.rand_y, 6) - playsound(E.loc, 'sound/machines/click.ogg', 50, 1) + playsound(E.loc, E.usesound, 50, 1) to_chat(user, "\blue Teleporting [src.name]...") E.teleporting = 1 - if(!do_after(user, 50, target = src)) + if(!do_after(user, 50 * E.toolspeed, target = src)) E.teleporting = 0 return E.teleporting = 0 @@ -166,7 +166,7 @@ else if(istype(W, /obj/item/weapon/wirecutters)) if(rigged) to_chat(user, "You cut away the wiring.") - playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) + playsound(loc, W.usesound, 100, 1) rigged = 0 return else return attack_hand(user) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 30e7031db2f..2ced72cbcfe 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -33,14 +33,14 @@ var/global/list/captain_display_cases = list() circuit.forceMove(src) state++ to_chat(user, "You add the airlock electronics to the frame.") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + playsound(get_turf(src),W.usesound, 50, 1) if(istype(W, /obj/item/weapon/crowbar)) new /obj/machinery/constructable_frame/machine_frame(T) var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(T) G.amount = 5 qdel(src) to_chat(user, "You pry the glass out of the frame.") - playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) + playsound(get_turf(src), W.usesound, 50, 1) return if(DISPLAYCASE_FRAME_SCREWDRIVER) @@ -54,7 +54,7 @@ var/global/list/captain_display_cases = list() C.req_one_access = null if(isprox(sensor)) C.burglar_alarm = 1 - playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1) + playsound(get_turf(src), W.usesound, 50, 1) qdel(src) return if(istype(W, /obj/item/weapon/crowbar)) @@ -65,13 +65,13 @@ var/global/list/captain_display_cases = list() sensor = null state-- to_chat(user, "You pry the electronics out of the frame.") - playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) + playsound(get_turf(src), W.usesound, 50, 1) if(isprox(W) && !isprox(sensor)) user.drop_item() sensor = W sensor.forceMove(src) to_chat(user, "You add the proximity sensor to the frame.") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) if(pstate != state) pstate = state @@ -227,7 +227,7 @@ var/global/list/captain_display_cases = list() "You pry \the [src] apart.", \ "You hear something pop.") var/turf/T = get_turf(src) - playsound(T, 'sound/items/Crowbar.ogg', 50, 1) + playsound(T, W.usesound, 50, 1) dump() var/obj/item/weapon/airlock_electronics/C = circuit if(!C) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index dc7152bbd5f..ec9fd4968b9 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -166,10 +166,10 @@ if(istype(W, /obj/item/weapon/weldingtool) && ( (istext(glass)) || (glass == 1) || (!anchored) )) var/obj/item/weapon/weldingtool/WT = W if(WT.remove_fuel(0, user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) + playsound(src.loc, WT.usesound, 50, 1) if(istext(glass)) user.visible_message("[user] welds the [glass] plating off the airlock assembly.", "You start to weld the [glass] plating off the airlock assembly.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return to_chat(user, "\blue You welded the [glass] plating off!") var/M = text2path("/obj/item/stack/sheet/mineral/[glass]") @@ -177,14 +177,14 @@ glass = 0 else if(glass == 1) user.visible_message("[user] welds the glass panel out of the airlock assembly.", "You start to weld the glass panel out of the airlock assembly.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return to_chat(user, "\blue You welded the glass panel out!") new /obj/item/stack/sheet/rglass(src.loc) glass = 0 else if(!anchored) user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return to_chat(user, "\blue You dissasembled the airlock assembly!") new /obj/item/stack/sheet/metal(src.loc, 4) @@ -194,13 +194,13 @@ return else if(istype(W, /obj/item/weapon/wrench) && state == 0) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) if(anchored) user.visible_message("[user] unsecures the airlock assembly from the floor.", "You start to unsecure the airlock assembly from the floor.") else user.visible_message("[user] secures the airlock assembly to the floor.", "You start to secure the airlock assembly to the floor.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src) return to_chat(user, "\blue You [anchored? "un" : ""]secured the airlock assembly!") anchored = !anchored @@ -208,29 +208,29 @@ else if(istype(W, /obj/item/stack/cable_coil) && state == 0 && anchored ) var/obj/item/stack/cable_coil/coil = W user.visible_message("[user] wires the airlock assembly.", "You start to wire the airlock assembly.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * coil.toolspeed, target = src)) if(!src) return coil.use(1) src.state = 1 to_chat(user, "\blue You wire the Airlock!") else if(istype(W, /obj/item/weapon/wirecutters) && state == 1 ) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src) return to_chat(user, "\blue You cut the airlock wires.!") new/obj/item/stack/cable_coil(src.loc, 1) src.state = 0 else if(istype(W, /obj/item/weapon/airlock_electronics) && state == 1 && W:icon_state != "door_electronics_smoked") - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.") user.drop_item() W.loc = src - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src) return to_chat(user, "\blue You installed the airlock electronics!") src.state = 2 @@ -240,10 +240,10 @@ W.loc = src.loc else if(istype(W, /obj/item/weapon/crowbar) && state == 2 ) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to install electronics into the airlock assembly.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src) return to_chat(user, "\blue You removed the airlock electronics!") src.state = 1 @@ -261,27 +261,27 @@ if(S) if(S.amount>=1) if(istype(S, /obj/item/stack/sheet/rglass)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) + playsound(src.loc, S.usesound, 100, 1) user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * S.toolspeed, target = src)) to_chat(user, "\blue You installed reinforced glass windows into the airlock assembly!") S.use(1) glass = 1 else if(istype(S, /obj/item/stack/sheet/mineral) && S.sheettype) var/M = S.sheettype if(S.amount>=2) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) + playsound(src.loc, S.usesound, 100, 1) user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * S.toolspeed, target = src)) to_chat(user, "\blue You installed [M] plating into the airlock assembly!") S.use(2) glass = "[M]" else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 ) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) to_chat(user, "\blue Now finishing the airlock.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src) return to_chat(user, "\blue You finish the airlock!") var/path diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index 7719f9b547d..2995bda23c3 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -24,7 +24,7 @@ /obj/structure/stool/bed/chair/e_chair/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wrench)) var/obj/structure/stool/bed/chair/C = new /obj/structure/stool/bed/chair(loc) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) C.dir = dir part.loc = loc part.master = null diff --git a/code/game/objects/structures/engicart.dm b/code/game/objects/structures/engicart.dm index 742664b68b0..594139f8d70 100644 --- a/code/game/objects/structures/engicart.dm +++ b/code/game/objects/structures/engicart.dm @@ -81,14 +81,14 @@ to_chat(user, fail_msg) else if(istype(I, /obj/item/weapon/wrench)) if(!anchored && !isinspace()) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) user.visible_message( \ "[user] tightens \the [src]'s casters.", \ " You have tightened \the [src]'s casters.", \ "You hear ratchet.") anchored = 1 else if(anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) user.visible_message( \ "[user] loosens \the [src]'s casters.", \ " You have loosened \the [src]'s casters.", \ diff --git a/code/game/objects/structures/foodcart.dm b/code/game/objects/structures/foodcart.dm index de103cc5d57..614f4dc27aa 100644 --- a/code/game/objects/structures/foodcart.dm +++ b/code/game/objects/structures/foodcart.dm @@ -56,14 +56,14 @@ to_chat(user, fail_msg) else if(istype(I, /obj/item/weapon/wrench)) if(!anchored && !isinspace()) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) user.visible_message( \ "[user] tightens \the [src]'s casters.", \ " You have tightened \the [src]'s casters.", \ "You hear ratchet.") anchored = 1 else if(anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) user.visible_message( \ "[user] loosens \the [src]'s casters.", \ " You have loosened \the [src]'s casters.", \ diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 6051bbebef6..e770bef2a69 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -32,25 +32,26 @@ /obj/structure/girder/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wrench) && state == 0) if(anchored && !istype(src,/obj/structure/girder/displaced)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) to_chat(user, "\blue Now disassembling the girder") - if(do_after(user,40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src) return to_chat(user, "\blue You dissasembled the girder!") refundMetal(metalUsed) qdel(src) else if(!anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) to_chat(user, "\blue Now securing the girder") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) to_chat(user, "\blue You secured the girder!") new/obj/structure/girder( src.loc ) qdel(src) else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter)) to_chat(user, "\blue Now slicing apart the girder") - if(do_after(user,30, target = src)) + if(do_after(user, 30 * W.toolspeed, target = src)) if(!src) return + playsound(loc, W.usesound, 100, 1) to_chat(user, "\blue You slice apart the girder!") refundMetal(metalUsed) qdel(src) @@ -61,32 +62,32 @@ qdel(src) else if(istype(W, /obj/item/weapon/pickaxe/drill/jackhammer)) - playsound(src.loc, 'sound/weapons/sonic_jackhammer.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) to_chat(user, "You Disintegrate the girder!") refundMetal(metalUsed) qdel(src) else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 && istype(src,/obj/structure/girder/reinforced)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) to_chat(user, "\blue Now unsecuring support struts") - if(do_after(user,40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src) return to_chat(user, "\blue You unsecured the support struts!") state = 1 else if(istype(W, /obj/item/weapon/wirecutters) && istype(src,/obj/structure/girder/reinforced) && state == 1) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) to_chat(user, "\blue Now removing support struts") - if(do_after(user,40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src) return to_chat(user, "\blue You removed the support struts!") new/obj/structure/girder( src.loc ) qdel(src) else if(istype(W, /obj/item/weapon/crowbar) && state == 0 && anchored ) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) to_chat(user, "\blue Now dislodging the girder") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src) return to_chat(user, "\blue You dislodged the girder!") new/obj/structure/girder/displaced( src.loc ) @@ -107,7 +108,7 @@ else if(S.amount < 2) return ..() to_chat(user, "\blue Now adding plating...") - if(do_after(user,40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src || !S || S.amount < 2) return S.use(2) to_chat(user, "\blue You added the plating!") @@ -240,15 +241,16 @@ /obj/structure/cultgirder/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wrench)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(loc, W.usesound, 100, 1) to_chat(user, "\blue Now disassembling the girder") - if(do_after(user,40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) to_chat(user, "\blue You dissasembled the girder!") dismantle() else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter)) to_chat(user, "\blue Now slicing apart the girder") - if(do_after(user,30, target = src)) + if(do_after(user, 30 * W.toolspeed, target = src)) + playsound(loc, W.usesound, 100, 1) to_chat(user, "\blue You slice apart the girder!") dismantle() diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 4cb2b20f99e..3d88b9ecc8f 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -141,7 +141,7 @@ user.changeNext_move(CLICK_CD_MELEE) if(iswirecutter(W)) if(!shock(user, 100)) - playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) + playsound(loc, W.usesound, 100, 1) if(!destroyed) new /obj/item/stack/rods(loc, 2) else @@ -149,7 +149,7 @@ qdel(src) else if((isscrewdriver(W)) && (istype(loc, /turf/simulated) || anchored)) if(!shock(user, 90)) - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(loc, W.usesound, 100, 1) anchored = !anchored user.visible_message("[user] [anchored ? "fastens" : "unfastens"] the grille.", \ "You have [anchored ? "fastened the grille to" : "unfastened the grill from"] the floor.") @@ -180,7 +180,7 @@ to_chat(user, "There is already a window facing this way there.") return to_chat(user, "You start placing the window.") - if(do_after(user,20, target = src)) + if(do_after(user, 20 * W.toolspeed, target = src)) if(!src) return //Grille destroyed while waiting for(var/obj/structure/window/WINDOW in loc) if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting. diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index c5abbad1c96..614af2d4ff4 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -85,20 +85,20 @@ to_chat(user, "[src] can't hold any more signs.") else if(istype(I, /obj/item/weapon/crowbar)) user.visible_message("[user] begins to empty the contents of [src].") - if(do_after(user, 30, target = src)) + if(do_after(user, 30 * I.toolspeed, target = src)) to_chat(usr, "You empty the contents of [src]'s bucket onto the floor.") reagents.reaction(src.loc) src.reagents.clear_reagents() else if(istype(I, /obj/item/weapon/wrench)) if(!anchored && !isinspace()) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) user.visible_message( \ "[user] tightens \the [src]'s casters.", \ " You have tightened \the [src]'s casters.", \ "You hear ratchet.") anchored = 1 else if(anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) user.visible_message( \ "[user] loosens \the [src]'s casters.", \ " You have loosened \the [src]'s casters.", \ diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 31ab9c94ca2..043177551ff 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -43,8 +43,8 @@ /obj/structure/kitchenspike/attackby(obj/item/weapon/grab/G as obj, mob/user as mob) if(istype(G, /obj/item/weapon/crowbar)) if(!buckled_mob) - playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) - if(do_after(user, 20, target = src)) + playsound(loc, G.usesound, 100, 1) + if(do_after(user, 20 * G.toolspeed, target = src)) to_chat(user, "You pry the spikes out of the frame.") new /obj/item/stack/rods(loc, 4) new /obj/structure/kitchenspike_frame(loc) diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 824759b35cb..7c32823ec17 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -115,7 +115,7 @@ if(istype(W,/obj/item/weapon/pickaxe)) var/obj/item/weapon/pickaxe/digTool = W to_chat(user, "You start digging the [name].") - if(do_after(user,digTool.digspeed*hardness, target = src) && src) + if(do_after(user,digTool.digspeed * hardness, target = src) && src) to_chat(user, "You finished digging.") Dismantle() else if(istype(W,/obj/item/weapon)) //not sure, can't not just weapons get passed to this proc? diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index be81c338c08..32e8b388778 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -27,6 +27,7 @@ "The tray contains a body that might be responsive." ) anchored = 1.0 + var/open_sound = 'sound/items/Deconstruct.ogg' /obj/structure/morgue/initialize() . = ..() @@ -100,11 +101,11 @@ for(var/atom/movable/A as mob|obj in connected.loc) if(!( A.anchored )) A.forceMove(src) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, open_sound, 50, 1) qdel(connected) connected = null else - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, open_sound, 50, 1) connected = new /obj/structure/m_tray( loc ) step(connected, dir) connected.layer = OBJ_LAYER @@ -258,6 +259,7 @@ var/cremating = 0 var/id = 1 var/locked = 0 + var/open_sound = 'sound/items/Deconstruct.ogg' /obj/structure/crematorium/proc/update() if(connected) @@ -305,11 +307,11 @@ for(var/atom/movable/A as mob|obj in connected.loc) if(!( A.anchored )) A.forceMove(src) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, open_sound, 50, 1) qdel(connected) connected = null else if(locked == 0) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, open_sound, 50, 1) connected = new /obj/structure/c_tray( loc ) step(connected, SOUTH) connected.layer = OBJ_LAYER diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index 9b4059f1d1d..b2a4dfd3299 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -307,18 +307,18 @@ /obj/structure/piano/attackby(obj/item/O as obj, mob/user as mob, params) if(istype(O, /obj/item/weapon/wrench)) if(!anchored && !isinspace()) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, O.usesound, 50, 1) to_chat(user, " You begin to tighten \the [src] to the floor...") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * O.toolspeed, target = src)) user.visible_message( \ "[user] tightens \the [src]'s casters.", \ " You have tightened \the [src]'s casters. Now it can be played again.", \ "You hear ratchet.") anchored = 1 else if(anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, O.usesound, 50, 1) to_chat(user, " You begin to loosen \the [src]'s casters...") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * O.toolspeed, target = src)) user.visible_message( \ "[user] loosens \the [src]'s casters.", \ " You have loosened \the [src]. Now it can be pulled somewhere else.", \ diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index f62ae7ed342..e1c42feb07c 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -14,10 +14,10 @@ user.changeNext_move(CLICK_CD_MELEE) if(iswrench(W)) if(anchored) - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(loc, W.usesound, 100, 1) user.visible_message("[user] is loosening the [name]'s bolts.", \ "You are loosening the [name]'s bolts...") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!loc || !anchored) return user.visible_message("[user] loosened the [name]'s bolts!", \ @@ -27,10 +27,10 @@ if(!isfloorturf(loc)) user.visible_message("A floor must be present to secure the [name]!") return - playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(loc, W.usesound, 100, 1) user.visible_message("[user] is securing the [name]'s bolts...", \ "You are securing the [name]'s bolts...") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!loc || anchored) return user.visible_message("[user] has secured the [name]'s bolts.", \ @@ -38,10 +38,10 @@ anchored = 1 else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter)) - playsound(src, 'sound/items/Welder.ogg', 100, 1) + playsound(src, W.usesound, 100, 1) user.visible_message("[user] is slicing apart the [name]...", \ "You are slicing apart the [name]...") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!loc) return user.visible_message("[user] slices apart the [name].", \ @@ -58,13 +58,13 @@ qdel(src) else if(iswelder(W) && !anchored) - playsound(loc, 'sound/items/Welder.ogg', 40, 1) + playsound(loc, W.usesound, 40, 1) user.visible_message("[user] is slicing apart the [name].", \ "You are slicing apart the [name]...") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!loc) return - playsound(loc, 'sound/items/Welder2.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) user.visible_message("[user] slices apart the [name].", \ "You slice apart the [name]!") Dismantle(TRUE) diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 301cf1c2053..b2581112ea7 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -32,7 +32,7 @@ return user.drop_item() var/obj/structure/stool/bed/chair/e_chair/E = new /obj/structure/stool/bed/chair/e_chair(src.loc) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) E.dir = dir E.part = SK SK.loc = E @@ -99,7 +99,7 @@ /obj/structure/stool/bed/chair/wood/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wrench)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) new /obj/item/stack/sheet/wood(get_turf(src)) @@ -161,7 +161,7 @@ /obj/structure/stool/bed/chair/comfy/attackby(obj/item/weapon/W, mob/user, params) if(iswrench(W)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) new /obj/item/stack/sheet/metal(get_turf(src)) new /obj/item/stack/sheet/metal(get_turf(src)) qdel(src) diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index da69c025bb8..09b92f00ac4 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -29,10 +29,9 @@ /obj/structure/stool/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wrench)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) new /obj/item/stack/sheet/metal(src.loc) qdel(src) - return /obj/structure/stool/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params, skip_fucking_stool_shit = 0) if(skip_fucking_stool_shit) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index ae9e6b41d05..2d46b2bffb9 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -227,9 +227,9 @@ if(istype(W, /obj/item/weapon/wrench)) user.visible_message("[user] is disassembling \a [src].", "You start disassembling \the [src].") - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 50, target = src)) - playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) + if(do_after(user, 50 * W.toolspeed, target = src)) + playsound(loc, W.usesound, 50, 1) destroy() return @@ -240,7 +240,7 @@ var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() spark_system.set_up(5, 0, src.loc) spark_system.start() - playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) playsound(src.loc, "sparks", 50, 1) for(var/mob/O in viewers(user, 4)) O.show_message("\blue The [src] was sliced apart by [user]!", 1, "\red You hear [src] coming apart.", 2) @@ -421,10 +421,10 @@ var/obj/item/stack/sheet/glass/G = I if(G.amount >= 2) to_chat(user, "You start to add the glass to \the [src].") - if(do_after(user, 10, target = src)) + if(do_after(user, 10 * G.toolspeed, target = src)) G.use(2) to_chat(user, "You add the glass to \the [src].") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + playsound(get_turf(src), G.usesound, 50, 1) new /obj/structure/table/glass(loc) qdel(src) else @@ -433,9 +433,9 @@ if(iswrench(I)) to_chat(user, "You start to deconstruct \the [src].") - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - if(do_after(user, 10, target = src)) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1) + playsound(src.loc, I.usesound, 75, 1) + if(do_after(user, 10 * I.toolspeed, target = src)) + playsound(src.loc, I.usesound, 75, 1) to_chat(user, "You dismantle \the [src].") new /obj/item/stack/sheet/metal(loc) new /obj/item/stack/sheet/metal(loc) @@ -495,15 +495,15 @@ if(WT.remove_fuel(0, user)) if(src.status == 2) to_chat(user, "\blue Now weakening the reinforced table") - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 50, target = src)) + playsound(src.loc, WT.usesound, 50, 1) + if(do_after(user, 50 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return to_chat(user, "\blue Table weakened") src.status = 1 else to_chat(user, "\blue Now strengthening the reinforced table") - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 50, target = src)) + playsound(src.loc, WT.usesound, 50, 1) + if(do_after(user, 50 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return to_chat(user, "\blue Table strengthened") src.status = 2 @@ -586,7 +586,7 @@ /obj/structure/rack/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wrench)) new /obj/item/weapon/rack_parts( src.loc ) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) qdel(src) return if(isrobot(user)) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index bbbecf6695d..26d97a52671 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -52,7 +52,7 @@ if(istype(I, /obj/item/weapon/crowbar)) to_chat(user, "You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]...") playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1) - if(do_after(user, 30, target = src)) + if(do_after(user, 30 * I.toolspeed, target = src)) user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!", "You hear grinding porcelain.") cistern = !cistern update_icon() diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 4e41daef289..5aa14e66adf 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -78,9 +78,9 @@ obj/structure/windoor_assembly/Destroy() var/obj/item/weapon/weldingtool/WT = W if(WT.remove_fuel(0,user)) user.visible_message("[user] dissassembles the windoor assembly.", "You start to dissassemble the windoor assembly.") - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) + playsound(src.loc, WT.usesound, 50, 1) - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return to_chat(user, "You dissasembled the windoor assembly!") var/obj/item/stack/sheet/rglass/RG = new (get_turf(src), 5) @@ -98,10 +98,10 @@ obj/structure/windoor_assembly/Destroy() if(WD.dir == src.dir) to_chat(user, "There is already a windoor in that location.") return - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) user.visible_message("[user] secures the windoor assembly to the floor.", "You start to secure the windoor assembly to the floor.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src || src.anchored) return for(var/obj/machinery/door/window/WD in src.loc) @@ -117,10 +117,10 @@ obj/structure/windoor_assembly/Destroy() //Unwrenching an unsecure assembly un-anchors it. Step 4 undone else if(istype(W, /obj/item/weapon/wrench) && anchored) - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(loc, W.usesound, 100, 1) user.visible_message("[user] unsecures the windoor assembly to the floor.", "You start to unsecure the windoor assembly to the floor.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src || !src.anchored) return to_chat(user, "You've unsecured the windoor assembly!") @@ -138,9 +138,10 @@ obj/structure/windoor_assembly/Destroy() return to_chat(user, "You start to reinforce the windoor with plasteel.") - if(do_after(user,40, target = src)) + if(do_after(user, 40 * P.toolspeed, target = src)) if(!src || secure) return + playsound(loc, P.usesound, 100, 1) P.use(2) to_chat(user, "You reinforce the windoor.") @@ -154,12 +155,13 @@ obj/structure/windoor_assembly/Destroy() else if(istype(W, /obj/item/stack/cable_coil) && anchored) user.visible_message("[user] wires the windoor assembly.", "You start to wire the windoor assembly.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src || !src.anchored || src.state != "01") return var/obj/item/stack/cable_coil/CC = W CC.use(1) to_chat(user, "You wire the windoor!") + playsound(loc, CC.usesound, 100, 1) src.state = "02" if(src.secure) src.name = "secure wired windoor assembly" @@ -172,10 +174,10 @@ obj/structure/windoor_assembly/Destroy() //Removing wire from the assembly. Step 5 undone. if(istype(W, /obj/item/weapon/wirecutters)) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src || src.state != "02") return @@ -189,12 +191,12 @@ obj/structure/windoor_assembly/Destroy() //Adding airlock electronics for access. Step 6 complete. else if(istype(W, /obj/item/weapon/airlock_electronics)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.") user.drop_item() W.loc = src - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src || src.electronics) W.loc = src.loc return @@ -209,10 +211,10 @@ obj/structure/windoor_assembly/Destroy() if(!electronics) return - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to uninstall electronics from the airlock assembly.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(!src || !electronics) return to_chat(user, "You've removed the airlock electronics!") @@ -239,10 +241,10 @@ obj/structure/windoor_assembly/Destroy() to_chat(usr, "The assembly is missing electronics.") return usr << browse(null, "window=windoor_access") - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) user.visible_message("[user] pries the windoor into the frame.", "You start prying the windoor into the frame.") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(src.loc && src.electronics) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 22331e4f484..ec457101b16 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -212,24 +212,24 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f if(istype(W, /obj/item/weapon/screwdriver)) if(reinf && state >= 1) state = 3 - state - playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) + playsound(loc, W.usesound, 75, 1) to_chat(user, (state == 1 ? "You have unfastened the window from the frame." : "You have fastened the window to the frame.")) else if(reinf && state == 0) anchored = !anchored update_nearby_icons() - playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) + playsound(loc, W.usesound, 75, 1) to_chat(user, (anchored ? "You have fastened the frame to the floor." : "You have unfastened the frame from the floor.")) else if(!reinf) anchored = !anchored update_nearby_icons() - playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) + playsound(loc, W.usesound, 75, 1) to_chat(user, (anchored ? "You have fastened the window to the floor." : "You have unfastened the window.")) else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <= 1) state = 1 - state - playsound(loc, 'sound/items/Crowbar.ogg', 75, 1) + playsound(loc, W.usesound, 75, 1) to_chat(user, (state ? "You have pried the window into the frame." : "You have pried the window out of the frame.")) else if(istype(W, /obj/item/weapon/wrench) && !anchored && health > 7) //Disassemble deconstructed window into parts - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) for(var/i=0;iYou unscrew the planks.") new floor_tile(src) make_plating() - playsound(src, 'sound/items/Screwdriver.ogg', 80, 1) + playsound(src, C.usesound, 80, 1) return /turf/simulated/floor/grass diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index e9770536b73..c5dc58f4f26 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -35,10 +35,10 @@ return 1 else to_chat(user, "You begin reinforcing the floor...") - if(do_after(user, 30, target = src)) + if(do_after(user, 30 * C.toolspeed, target = src)) if(R.get_amount() >= 2 && !istype(src, /turf/simulated/floor/engine)) ChangeTurf(/turf/simulated/floor/engine) - playsound(src, 'sound/items/Deconstruct.ogg', 80, 1) + playsound(src, C.usesound, 80, 1) R.use(2) to_chat(user, "You reinforce the floor.") return 1 @@ -59,7 +59,7 @@ if( welder.isOn() && (broken || burnt) ) if(welder.remove_fuel(0,user)) to_chat(user, "You fix some dents on the broken plating.") - playsound(src, 'sound/items/Welder.ogg', 80, 1) + playsound(src, welder.usesound, 80, 1) icon_state = icon_plating burnt = 0 broken = 0 @@ -99,8 +99,8 @@ return if(istype(C, /obj/item/weapon/wrench)) to_chat(user, "You begin removing rods...") - playsound(src, 'sound/items/Ratchet.ogg', 80, 1) - if(do_after(user, 30, target = src)) + playsound(src, C.usesound, 80, 1) + if(do_after(user, 30 * C.toolspeed, target = src)) if(!istype(src, /turf/simulated/floor/engine)) return new /obj/item/stack/rods(src, 2) @@ -236,7 +236,7 @@ if(istype(T, /turf/simulated/floor/plating/airless/catwalk)) var/turf/simulated/floor/plating/airless/catwalk/CW=T CW.update_icon(0) - playsound(src, 'sound/items/Screwdriver.ogg', 80, 1) + playsound(src, C.usesound, 80, 1) /turf/simulated/floor/plating/metalfoam name = "foamed metal plating" diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index cb7cd8be813..217ae5e9c5b 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -272,7 +272,7 @@ var/obj/item/weapon/weldingtool/WT = W if(WT.remove_fuel(0,user)) to_chat(user, "You burn away the fungi with \the [WT].") - playsound(src, 'sound/items/Welder.ogg', 10, 1) + playsound(src, WT.usesound, 10, 1) for(var/obj/effect/overlay/wall_rot/WR in src) qdel(WR) rotting = 0 @@ -300,7 +300,7 @@ EB.spark_system.start() to_chat(user, "You slash \the [src] with \the [EB]; the thermite ignites!") playsound(src, "sparks", 50, 1) - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + playsound(src, EB.usesound, 50, 1) thermitemelt(user) return @@ -317,16 +317,16 @@ if(WT.remove_fuel(0,user)) if(response == "Repair") to_chat(user, "You start repairing the damage to [src].") - playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(do_after(user, max(5, damage / 5), target = src) && WT && WT.isOn()) + playsound(src, WT.usesound, 100, 1) + if(do_after(user, max(5, damage / 5) * WT.toolspeed, target = src) && WT && WT.isOn()) to_chat(user, "You finish repairing the damage to [src].") take_damage(-damage) else if(response == "Dismantle") to_chat(user, "You begin slicing through the outer plating.") - playsound(src, 'sound/items/Welder.ogg', 100, 1) + playsound(src, WT.usesound, 100, 1) - if(do_after(user, 100, target = src) && WT && WT.isOn()) + if(do_after(user, 100 * WT.toolspeed, target = src) && WT && WT.isOn()) to_chat(user, "You remove the outer plating.") dismantle_wall() @@ -341,9 +341,9 @@ else if(istype(W, /obj/item/weapon/gun/energy/plasmacutter)) to_chat(user, "You begin slicing through the outer plating.") - playsound(src, 'sound/items/Welder.ogg', 100, 1) + playsound(src, W.usesound, 100, 1) - if(do_after(user, istype(sheet_type, /obj/item/stack/sheet/mineral/diamond) ? 120 : 60, target = src)) + if(do_after(user, istype(sheet_type, /obj/item/stack/sheet/mineral/diamond) ? 120 * W.toolspeed : 60 * W.toolspeed, target = src)) to_chat(user, "You remove the outer plating.") dismantle_wall() visible_message("[user] slices apart \the [src]!","You hear metal being sliced apart.") @@ -353,7 +353,7 @@ to_chat(user, "You begin to drill though the wall.") - if(do_after(user, istype(sheet_type, /obj/item/stack/sheet/mineral/diamond) ? 120 : 60, target = src)) + if(do_after(user, istype(sheet_type, /obj/item/stack/sheet/mineral/diamond) ? 480 * W.toolspeed : 240 * W.toolspeed, target = src)) // Diamond pickaxe has 0.25 toolspeed, so 120/60 to_chat(user, "Your drill tears though the last of the reinforced plating.") dismantle_wall() visible_message("[user] drills through \the [src]!","You hear the grinding of metal.") @@ -362,8 +362,8 @@ to_chat(user, "You begin to disintegrates the wall.") - if(do_after(user, istype(sheet_type, /obj/item/stack/sheet/mineral/diamond) ? 60 : 30, target = src)) - to_chat(user, "Your jackhammer disintegrate the reinforced plating.") + if(do_after(user, istype(sheet_type, /obj/item/stack/sheet/mineral/diamond) ? 600 * W.toolspeed : 300 * W.toolspeed, target = src)) // Jackhammer has 0.1 toolspeed, so 60/30 + to_chat(user, "Your sonic jackhammer disintegrate the reinforced plating.") dismantle_wall() visible_message("[user] disintegrates \the [src]!","You hear the grinding of metal.") @@ -374,10 +374,10 @@ to_chat(user, "You stab \the [EB] into the wall and begin to slice it apart.") playsound(src, "sparks", 50, 1) - if(do_after(user, istype(sheet_type, /obj/item/stack/sheet/mineral/diamond) ? 140 : 70, target = src)) + if(do_after(user, istype(sheet_type, /obj/item/stack/sheet/mineral/diamond) ? 140 * EB.toolspeed : 70 * EB.toolspeed, target = src)) EB.spark_system.start() playsound(src, "sparks", 50, 1) - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + playsound(src, EB.usesound, 50, 1) dismantle_wall(1) visible_message("[user] slices apart \the [src]!","You hear metal being sliced apart and sparks flying.") @@ -400,7 +400,7 @@ "[user] starts drilling a hole in \the [src].", \ "\blue You start drilling a hole in \the [src].", \ "You hear ratchet.") - if(do_after(user, 80, target = src)) + if(do_after(user, 80 * W.toolspeed, target = src)) user.visible_message( \ "[user] drills a hole in \the [src] and pushes \a [P] into the void", \ "\blue You have finished drilling in \the [src] and push the [P] into the void.", \ diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm index 49cfa1ace0f..2cc77fc46b8 100644 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ b/code/game/turfs/simulated/walls_reinforced.dm @@ -28,7 +28,7 @@ var/obj/item/weapon/weldingtool/WT = W if( WT.remove_fuel(0,user) ) to_chat(user, "You burn away the fungi with \the [WT].") - playsound(src, 'sound/items/Welder.ogg', 10, 1) + playsound(src, WT.usesound, 10, 1) for(var/obj/effect/overlay/wall_rot/WR in src) qdel(WR) rotting = 0 @@ -56,7 +56,7 @@ EB.spark_system.start() to_chat(user, "You slash \the [src] with \the [EB]; the thermite ignites!") playsound(src, "sparks", 50, 1) - playsound(src, 'sound/weapons/blade1.ogg', 50, 1) + playsound(src, EB.usesound, 50, 1) thermitemelt(user) return @@ -69,8 +69,8 @@ var/obj/item/weapon/weldingtool/WT = W if(WT.remove_fuel(0,user)) to_chat(user, "You start repairing the damage to [src].") - playsound(src, 'sound/items/Welder.ogg', 100, 1) - if(do_after(user, max(5, damage / 5), target = src) && WT && WT.isOn()) + playsound(src, WT.usesound, 100, 1) + if(do_after(user, max(5, damage / 5) * WT.toolspeed, target = src) && WT && WT.isOn()) to_chat(user, "You finish repairing the damage to [src].") take_damage(-damage) return @@ -83,7 +83,7 @@ switch(d_state) if(0) if(istype(W, /obj/item/weapon/wirecutters)) - playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) + playsound(src, W.usesound, 100, 1) d_state = 1 update_icon() new /obj/item/stack/rods(src) @@ -93,9 +93,9 @@ if(1) if(istype(W, /obj/item/weapon/screwdriver)) to_chat(user, "You begin removing the support lines.") - playsound(src, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(src, W.usesound, 100, 1) - if(do_after(user, 40, target = src) && d_state == 1) + if(do_after(user, 40 * W.toolspeed, target = src) && d_state == 1) d_state = 2 update_icon() to_chat(user, "You remove the support lines.") @@ -117,9 +117,9 @@ var/obj/item/weapon/weldingtool/WT = W if(WT.remove_fuel(0,user)) to_chat(user, "You begin slicing through the metal cover.") - playsound(src, 'sound/items/Welder.ogg', 100, 1) + playsound(src, WT.usesound, 100, 1) - if(do_after(user, 60, target = src) && d_state == 2) + if(do_after(user, 60 * WT.toolspeed, target = src) && d_state == 2) d_state = 3 update_icon() to_chat(user, "You press firmly on the cover, dislodging it.") @@ -130,9 +130,9 @@ if(istype(W, /obj/item/weapon/gun/energy/plasmacutter)) to_chat(user, "You begin slicing through the metal cover.") - playsound(src, 'sound/items/Welder.ogg', 100, 1) + playsound(src, W.usesound, 100, 1) - if(do_after(user, 40, target = src) && d_state == 2) + if(do_after(user, 40 * W.toolspeed, target = src) && d_state == 2) d_state = 3 update_icon() to_chat(user, "You press firmly on the cover, dislodging it.") @@ -141,9 +141,9 @@ if(3) if(istype(W, /obj/item/weapon/crowbar)) to_chat(user, "You struggle to pry off the cover.") - playsound(src, 'sound/items/Crowbar.ogg', 100, 1) + playsound(src, W.usesound, 100, 1) - if(do_after(user, 100, target = src) && d_state == 3) + if(do_after(user, 100 * W.toolspeed, target = src) && d_state == 3) d_state = 4 update_icon() to_chat(user, "You pry off the cover.") @@ -152,9 +152,9 @@ if(4) if(istype(W, /obj/item/weapon/wrench)) to_chat(user, "You start loosening the anchoring bolts which secure the support rods to their frame.") - playsound(src, 'sound/items/Ratchet.ogg', 100, 1) + playsound(src, W.usesound, 100, 1) - if(do_after(user, 40, target = src) && d_state == 4) + if(do_after(user, 40 * W.toolspeed, target = src) && d_state == 4) d_state = 5 update_icon() to_chat(user, "You remove the bolts anchoring the support rods.") @@ -165,9 +165,9 @@ var/obj/item/weapon/weldingtool/WT = W if(WT.remove_fuel(0,user)) to_chat(user, "You begin slicing through the support rods.") - playsound(src, 'sound/items/Welder.ogg', 100, 1) + playsound(src, WT.usesound, 100, 1) - if(do_after(user, 100, target = src) && d_state == 5) + if(do_after(user, 100 * WT.toolspeed, target = src) && d_state == 5) d_state = 6 update_icon() new /obj/item/stack/rods(src) @@ -178,9 +178,9 @@ if(istype(W, /obj/item/weapon/gun/energy/plasmacutter)) to_chat(user, "You begin slicing through the support rods.") - playsound(src, 'sound/items/Welder.ogg', 100, 1) + playsound(src, W.usesound, 100, 1) - if(do_after(user, 70, target = src) && d_state == 5) + if(do_after(user, 70 * W.toolspeed, target = src) && d_state == 5) d_state = 6 update_icon() new /obj/item/stack/rods( src ) @@ -190,9 +190,9 @@ if(6) if(istype(W, /obj/item/weapon/crowbar)) to_chat(user, "You struggle to pry off the outer sheath.") - playsound(src, 'sound/items/Crowbar.ogg', 100, 1) + playsound(src, W.usesound, 100, 1) - if(do_after(user, 100, target = src) && d_state == 6) + if(do_after(user, 100 * W.toolspeed, target = src) && d_state == 6) to_chat(user, "You pry off the outer sheath.") dismantle_wall() return @@ -203,14 +203,14 @@ if(istype(W, /obj/item/weapon/pickaxe/drill/diamonddrill)) to_chat(user, "You begin to drill though the wall.") - if(do_after(user, 200, target = src)) + if(do_after(user, 800 * W.toolspeed, target = src)) // Diamond drill has 0.25 toolspeed, so 200 to_chat(user, "Your drill tears through the last of the reinforced plating.") dismantle_wall() if(istype(W,/obj/item/weapon/pickaxe/drill/jackhammer)) to_chat(user, "You begin to disintegrate the wall.") - if(do_after(user, 100, target = src)) + if(do_after(user, 1000 * W.toolspeed, target = src)) // Jackhammer has 0.1 toolspeed, so 100 to_chat(user, "Your sonic jackhammer disintegrates the reinforced plating.") dismantle_wall() @@ -220,7 +220,7 @@ to_chat(user, "You begin patching-up the wall with \a [MS].") - if(do_after(user, max(20 * d_state, 100), target = src) && d_state) + if(do_after(user, max(20 * d_state, 100) * MS.toolspeed, target = src) && d_state) if(!MS.use(1)) to_chat(user, "You don't have enough metal for that!") return @@ -238,7 +238,7 @@ return to_chat(user, "You begin adding an additional layer of coating to the wall with \a [MS].") - if(do_after(user, 40, target = src) && !d_state) + if(do_after(user, 40 * MS.toolspeed, target = src) && !d_state) if(!MS.use(2)) to_chat(user, "You don't have enough plasteel for that!") return @@ -269,7 +269,7 @@ "[user] starts drilling a hole in \the [src].", \ "\blue You start drilling a hole in \the [src]. This is going to take a while.", \ "You hear ratchet.") - if(do_after(user, 160, target = src)) + if(do_after(user, 160 * V.toolspeed, target = src)) user.visible_message( \ "[user] drills a hole in \the [src] and pushes \a [P] into the void", \ "\blue You have finished drilling in \the [src] and push the [P] into the void.", \ diff --git a/code/modules/arcade/arcade_base.dm b/code/modules/arcade/arcade_base.dm index 3c68c7142f4..6df1f38161c 100644 --- a/code/modules/arcade/arcade_base.dm +++ b/code/modules/arcade/arcade_base.dm @@ -61,7 +61,7 @@ /obj/machinery/arcade/attackby(var/obj/item/O as obj, var/mob/user as mob, params) if(istype(O, /obj/item/weapon/screwdriver) && anchored) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, O.usesound, 50, 1) panel_open = !panel_open to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") update_icon() diff --git a/code/modules/arcade/prize_counter.dm b/code/modules/arcade/prize_counter.dm index e1636fa4e33..93ffbe7e419 100644 --- a/code/modules/arcade/prize_counter.dm +++ b/code/modules/arcade/prize_counter.dm @@ -41,7 +41,7 @@ to_chat(user, "\The [T] seems stuck to your hand!") return if(istype(O, /obj/item/weapon/screwdriver) && anchored) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, O.usesound, 50, 1) panel_open = !panel_open to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") update_icon() diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 84e10835215..fbbb4e0cd4b 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -10,6 +10,8 @@ throw_speed = 3 throw_range = 10 origin_tech = "magnets=1" + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' var/bomb_name = "bomb" // used for naming bombs / mines diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index fd8ebf045b6..36f60e27326 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -201,7 +201,7 @@ BLIND // can't see anything /obj/item/clothing/gloves/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/wirecutters)) if(!clipped) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) + playsound(src.loc, W>usesound, 100, 1) user.visible_message("[user] snips the fingertips off [src].","You snip the fingertips off [src].") clipped = 1 name = "mangled [name]" @@ -399,7 +399,7 @@ BLIND // can't see anything if(istype(I, /obj/item/weapon/wirecutters)) if(can_cut_open) if(!cut_open) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) + playsound(src.loc, I.usesound, 100, 1) user.visible_message("[user] cuts open the toes of [src].","You cut open the toes of [src].") cut_open = 1 icon_state = "[icon_state]_opentoe" diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 11503b40278..a3a38e3af58 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -78,7 +78,7 @@ if(istype(W, /obj/item/weapon/wirecutters)) if(can_be_cut && icon_state == initial(icon_state))//only if not dyed to_chat(user, "You snip the fingertips off of [src].") - playsound(user.loc,'sound/items/Wirecutter.ogg', rand(10,50), 1) + playsound(user.loc, W.usesound, rand(10,50), 1) var/obj/item/clothing/gloves/fingerless/F = new/obj/item/clothing/gloves/fingerless(user.loc) if(pickpocket) F.pickpocket = 1 diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm index e64084a0beb..b527a615c5d 100644 --- a/code/modules/clothing/spacesuits/rig/modules/modules.dm +++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm @@ -13,6 +13,8 @@ desc = "It looks pretty sciency." icon = 'icons/obj/rig_modules.dmi' icon_state = "module" + + toolspeed = 1 var/damage = 0 var/obj/item/weapon/rig/holder @@ -73,7 +75,7 @@ to_chat(user, "You start mending the damaged portions of \the [src]...") - if(!do_after(user,30, target = src) || !W || !src) + if(!do_after(user, 30 * W.toolspeed, target = src) || !W || !src) return var/obj/item/stack/nanopaste/paste = W @@ -98,7 +100,7 @@ return to_chat(user, "You start mending the damaged portions of \the [src]...") - if(!do_after(user, 30, target = src) || !W || !src) + if(!do_after(user, 30 * W.toolspeed, target = src) || !W || !src) return damage = 1 diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index fbdf5609cae..bf40cf7127e 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -1025,7 +1025,7 @@ if(!can_touch(user, wearer) || !has_emergency_release) return can_touch(user,wearer) usr.visible_message("[user] starts activating \the [src] emergency seals release!") - if(!do_after(user,240, target = wearer)) + if(!do_after(user, 240, target = wearer)) to_chat(user, "You need to focus on activating the emergency release.") return 0 usr.visible_message("[user] activated \the [src] emergency seals release!") diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm index a57c2258b04..01793ef360d 100644 --- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm +++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm @@ -80,7 +80,7 @@ var/obj/item/rig_module/mod = W to_chat(user, "You begin installing \the [mod] into \the [src].") - if(!do_after(user,40, target = src)) + if(!do_after(user, 40 * W.toolspeed, target = src)) return if(!user || !W) return diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 9482ee7d080..93952434d2a 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -65,7 +65,7 @@ var/obj/item/clothing/under/U = H.w_uniform if(istype(U)) user.visible_message("[user] is putting a [src.name] on [H]'s [U.name]!", "You begin to put a [src.name] on [H]'s [U.name]...") - if(do_after(user,40,target=H) && H.w_uniform == U) + if(do_after(user, 40, target=H) && H.w_uniform == U) user.visible_message("[user] puts a [src.name] on [H]'s [U.name]!", "You finish putting a [src.name] on [H]'s [U.name].") U.attackby(src, user) else diff --git a/code/modules/computer3/buildandrepair.dm b/code/modules/computer3/buildandrepair.dm index 2165205e354..94b09c680b6 100644 --- a/code/modules/computer3/buildandrepair.dm +++ b/code/modules/computer3/buildandrepair.dm @@ -18,6 +18,8 @@ var/frame_desc = null var/datum/file/program/OS = new/datum/file/program/ntos + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' /obj/machinery/computer3/proc/disassemble(mob/user as mob) // todo return @@ -30,6 +32,8 @@ icon = 'icons/obj/stock_parts.dmi' icon_state = "0" var/state = 0 + + var/remove_sound = 'sound/items/Crowbar.ogg' var/obj/item/part/computer/circuitboard/circuit = null var/completed = /obj/machinery/computer @@ -80,8 +84,8 @@ switch(state) if(0) if(istype(P, /obj/item/weapon/wrench)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(src.loc, P.usesound, 50, 1) + if(do_after(user, 20 * P.toolspeed, target = src)) to_chat(user, "\blue You wrench the frame into place.") src.anchored = 1 src.state = 1 @@ -90,23 +94,23 @@ if(!WT.remove_fuel(0, user)) to_chat(user, "The welding tool must be on to complete this task.") return - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(src.loc, WT.usesound, 50, 1) + if(do_after(user, 20 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return to_chat(user, "\blue You deconstruct the frame.") new /obj/item/stack/sheet/metal( src.loc, 5 ) qdel(src) if(1) if(istype(P, /obj/item/weapon/wrench)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(src.loc, P.usesound, 50, 1) + if(do_after(user, 20 * P.toolspeed, target = src)) to_chat(user, "\blue You unfasten the frame.") src.anchored = 0 src.state = 0 if(istype(P, /obj/item/weapon/circuitboard) && !circuit) var/obj/item/weapon/circuitboard/B = P if(B.board_type == "computer") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(src.loc, B.usesound, 50, 1) to_chat(user, "\blue You place the circuit board inside the frame.") src.icon_state = "1" src.circuit = P @@ -115,12 +119,12 @@ else to_chat(user, "\red This frame does not accept circuit boards of this type!") if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, P.usesound, 50, 1) to_chat(user, "\blue You screw the circuit board into place.") src.state = 2 src.icon_state = "2" if(istype(P, /obj/item/weapon/crowbar) && circuit) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(src.loc, P.usesound, 50, 1) to_chat(user, "\blue You remove the circuit board.") src.state = 1 src.icon_state = "0" @@ -128,15 +132,15 @@ src.circuit = null if(2) if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, P.usesound, 50, 1) to_chat(user, "\blue You unfasten the circuit board.") src.state = 1 src.icon_state = "1" if(istype(P, /obj/item/weapon/crowbar)) if(battery) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - if(do_after(10, target = src)) + playsound(src.loc, P.usesound, 50, 1) + if(do_after(10 * P.toolspeed, target = src)) battery.loc = loc to_chat(user, "\blue You remove [battery].") battery = null @@ -145,8 +149,8 @@ if(istype(P, /obj/item/weapon/stock_parts/cell)) if(!battery) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(5, target = src)) + playsound(src.loc, P.usesound, 50, 1) + if(do_after(5 * P.toolspeed, target = src)) battery = P P.loc = src to_chat(user, "\blue You insert [battery].") @@ -156,8 +160,8 @@ if(istype(P, /obj/item/stack/cable_coil)) if(P:amount >= 5) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(src.loc, P.usesound, 50, 1) + if(do_after(user, 20 * P.toolspeed, target = src)) if(P) P:amount -= 5 if(!P:amount) qdel(P) @@ -169,7 +173,7 @@ if(components.len) to_chat(user, "There are parts in the way!") return - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + playsound(src.loc, P.usesound, 50, 1) to_chat(user, "\blue You remove the cables.") src.state = 2 src.icon_state = "2" @@ -181,8 +185,8 @@ if(istype(P, /obj/item/stack/sheet/glass)) if(P:amount >= 2) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(src.loc, P.usesound, 50, 1) + if(do_after(user, 20 * P.toolspeed, target = src)) if(P) P:use(2) to_chat(user, "\blue You put in the glass panel.") @@ -190,13 +194,13 @@ src.icon_state = "4" if(4) if(istype(P, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(src.loc, P.usesound, 50, 1) to_chat(user, "\blue You remove the glass panel.") src.state = 3 src.icon_state = "3" new /obj/item/stack/sheet/glass( src.loc, 2 ) if(istype(P, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, P.usesound, 50, 1) to_chat(user, "\blue You connect the monitor.") var/obj/machinery/computer3/B = new src.circuit.build_path ( src.loc, built=1 ) /*if(circuit.powernet) B:powernet = circuit.powernet @@ -226,8 +230,8 @@ I = input(usr, "Remove which component?","Remove component", null) as null|obj in components if(I) - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - if(do_after(usr,25, target = src)) + playsound(src.loc, remove_sound, 50, 1) + if(do_after(usr, 25, target = src)) if(I==hdd) components -= hdd hdd.loc = loc diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 98c658c9856..6f51d07ca04 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -26,6 +26,8 @@ var/tattoo_r = 1 // RGB values for the body markings var/tattoo_g = 1 var/tattoo_b = 1 + toolspeed = 1 + usesound = 'sound/items/Welder2.ogg' /obj/item/device/fluff/tattoo_gun/attack(mob/living/carbon/M as mob, mob/user as mob) if(user.a_intent == "harm") @@ -61,7 +63,7 @@ else user.visible_message("[user] begins to apply a [tattoo_name] [target] with the [src].", "You begin to tattoo [target] with the [src]!") - if(!do_after(user,30, target = M)) + if(!do_after(user, 30 * toolspeed, target = M)) return user.visible_message("[user] finishes the [tattoo_name] on [target].", "You finish the [tattoo_name].") @@ -69,7 +71,7 @@ target.change_markings(tattoo_icon, "body") target.change_marking_color(rgb(tattoo_r, tattoo_g, tattoo_b), "body") - playsound(src.loc, 'sound/items/Welder2.ogg', 20, 1) + playsound(src.loc, usesound, 20, 1) used = 1 update_icon() diff --git a/code/modules/detective_work/footprints_and_rag.dm b/code/modules/detective_work/footprints_and_rag.dm index 64ade59adee..cc93863cc95 100644 --- a/code/modules/detective_work/footprints_and_rag.dm +++ b/code/modules/detective_work/footprints_and_rag.dm @@ -25,6 +25,7 @@ volume = 5 can_be_placed_into = null flags = OPENCONTAINER | NOBLUDGEON + var/wipespeed = 30 /obj/item/weapon/reagent_containers/glass/rag/attack(atom/target as obj|turf|area, mob/user as mob , flag) if(ismob(target) && target.reagents && reagents.total_volume) @@ -39,7 +40,7 @@ if(!proximity) return if(istype(A) && src in user) user.visible_message("[user] starts to wipe down [A] with [src]!") - if(do_after(user,30, target = A)) + if(do_after(user, wipespeed, target = A)) user.visible_message("[user] finishes wiping off the [A]!") A.clean_blood() return diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm index 005fce56df0..6dc1c6870b2 100644 --- a/code/modules/fish/fishtank.dm +++ b/code/modules/fish/fishtank.dm @@ -606,6 +606,7 @@ if(user.a_intent == I_HELP) if(W.isOn()) if(cur_health < max_health) + playsound(loc, W.usesound, 50, 1) to_chat(usr, "You repair some of the cracks on \the [src].") cur_health += 20 check_health() @@ -613,7 +614,7 @@ to_chat(usr, "There is no damage to fix!") else if(cur_health < max_health) - to_chat(usr, "[W.name] must on to repair this damage.") + to_chat(usr, "[W.name] must be on to repair this damage.") else user.changeNext_move(CLICK_CD_MELEE) hit(W.force) @@ -672,8 +673,8 @@ if(istype(O, /obj/item/weapon/wrench)) if(water_level == 0) to_chat(usr, "Now disassembling [src].") - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user,50, target = src)) + playsound(src.loc, O.usesound, 50, 1) + if(do_after(user, 50 * O.toolspeed, target = src)) destroy(1) else to_chat(usr, "[src] must be empty before you disassemble it!") diff --git a/code/modules/food_and_drinks/drinks/bottler/bottler.dm b/code/modules/food_and_drinks/drinks/bottler/bottler.dm index 81974b39c0e..75270faf0e0 100644 --- a/code/modules/food_and_drinks/drinks/bottler/bottler.dm +++ b/code/modules/food_and_drinks/drinks/bottler/bottler.dm @@ -41,7 +41,7 @@ /obj/machinery/bottler/attackby(obj/item/O, mob/user, params) if(iswrench(O)) //This being before the canUnequip check allows borgs to (un)wrench bottlers in case they need move them to fix stuff - playsound(src, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src, O.usesound, 50, 1) if(anchored) anchored = 0 to_chat(user, "[src] can now be moved.") diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm index baf5e8e98ee..a69b0a718ef 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm @@ -65,7 +65,7 @@ if(exchange_parts(user, O)) return if(!broken && istype(O, /obj/item/weapon/wrench)) - playsound(src, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src, O.usesound, 50, 1) if(anchored) anchored = 0 to_chat(user, "\The [src] can now be moved.") @@ -83,7 +83,7 @@ "[user] starts to fix part of \the [src].", \ "You start to fix part of \the [src]." \ ) - if(do_after(user,20, target = src)) + if(do_after(user, 20 * O.toolspeed, target = src)) user.visible_message( \ "[user] fixes part of \the [src].", \ "You have fixed part of \the [src]." \ @@ -94,7 +94,7 @@ "[user] starts to fix part of \the [src].", \ "You start to fix part of \the [src]." \ ) - if(do_after(user,20, target = src)) + if(do_after(user, 20 * O.toolspeed, target = src)) user.visible_message( \ "[user] fixes \the [src].", \ "You have fixed \the [src]." \ @@ -112,7 +112,7 @@ "[user] starts to clean \the [src].", \ "You start to clean \the [src]." \ ) - if(do_after(user,20, target = src)) + if(do_after(user, 20 * O.toolspeed, target = src)) user.visible_message( \ "[user] has cleaned \the [src].", \ "You have cleaned \the [src]." \ diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 8cbca85a521..27ae9684f5b 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -874,8 +874,8 @@ if(!anchored && !isinspace()) user.visible_message("[user] begins to wrench [src] into place.", "You begin to wrench [src] in place...") - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if (do_after(user, 20, target = src)) + playsound(loc, O.usesound, 50, 1) + if (do_after(user, 20 * O.toolspeed, target = src)) if(anchored) return anchored = 1 @@ -884,8 +884,8 @@ else if(anchored) user.visible_message("[user] begins to unwrench [src].", \ "You begin to unwrench [src]...") - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - if (do_after(user, 20, target = src)) + playsound(loc, O.usesound, 50, 1) + if (do_after(user, 20 * O.toolspeed, target = src)) if(!anchored) return anchored = 0 @@ -894,7 +894,7 @@ else if(iswirecutter(O) && wrenchable) using_irrigation = !using_irrigation - playsound(src, 'sound/items/Wirecutter.ogg', 50, 1) + playsound(src, O.usesound, 50, 1) user.visible_message("[user] [using_irrigation ? "" : "dis"]connects [src]'s irrigation hoses.", \ "You [using_irrigation ? "" : "dis"]connect [src]'s irrigation hoses.") for(var/obj/machinery/hydroponics/h in range(1,src)) @@ -905,11 +905,11 @@ to_chat(user, "[src] doesn't have any plants or weeds!") return user.visible_message("[user] starts digging out [src]'s plants...", "You start digging out [src]'s plants...") - playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) - if(!do_after(user, 50, target = src) || (!myseed && !weedlevel)) + playsound(src, O.usesound, 50, 1) + if(!do_after(user, 25 * O.toolspeed, target = src) || (!myseed && !weedlevel)) return user.visible_message("[user] digs out the plants in [src]!", "You dig out all of [src]'s plants!") - playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) + playsound(src, O.usesound, 50, 1) if(myseed) //Could be that they're just using it as a de-weeder age = 0 plant_health = 0 diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index f2272c97e96..a32b31611cc 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -31,7 +31,7 @@ I.forceMove(src) update_icon() -/obj/structure/bookcase/attackby(obj/O as obj, mob/user as mob, params) +/obj/structure/bookcase/attackby(obj/item/O as obj, mob/user as mob, params) if(busy) //So that you can't mess with it while deconstructing return 1 if(is_type_in_list(O, allowed_books)) @@ -51,11 +51,11 @@ else if(istype(O, /obj/item/weapon/wrench)) user.visible_message("[user] starts disassembling \the [src].", \ "You start disassembling \the [src].") - playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) + playsound(get_turf(src), O.usesound, 50, 1) busy = 1 - if(do_after(user,50, target = src)) - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 75, 1) + if(do_after(user, 50 * O.toolspeed, target = src)) + playsound(get_turf(src), O.usesound, 75, 1) user.visible_message("[user] disassembles \the [src].", \ "You disassemble \the [src].") busy = 0 @@ -276,7 +276,7 @@ if(carved) return 1 to_chat(user, "You begin to carve out [title].") - if(do_after(user, 30, target = src)) + if(do_after(user, 30 * W.toolspeed, target = src)) to_chat(user, "You carve out the pages from [title]! You didn't want to read it anyway.") carved = 1 return 1 diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index defa8a930ff..395f6842a1f 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -89,6 +89,8 @@ sharp = 1 edge = 1 var/excavation_amount = 100 + usesound = 'sound/effects/picaxe1.ogg' + toolspeed = 1 /obj/item/weapon/pickaxe/proc/playDigSound() playsound(src, pick(digsound),20,1) @@ -100,6 +102,16 @@ digspeed = 30 //mines faster than a normal pickaxe, bought from mining vendor origin_tech = "materials=3;engineering=2" desc = "A silver-plated pickaxe that mines slightly faster than standard-issue." + toolspeed = 0.75 + +/obj/item/weapon/pickaxe/gold + name = "golden pickaxe" + icon_state = "gpickaxe" + item_state = "gpickaxe" + digspeed = 20 + origin_tech = "materials=4;engineering=2" + desc = "A gold-plated pickaxe that mines faster than standard-issue." + toolspeed = 0.6 /obj/item/weapon/pickaxe/diamond name = "diamond-tipped pickaxe" @@ -108,6 +120,7 @@ digspeed = 20 //mines twice as fast as a normal pickaxe, bought from mining vendor origin_tech = "materials=4;engineering=3" desc = "A pickaxe with a diamond pick head. Extremely robust at cracking rock walls and digging up dirt." + toolspeed = 0.5 /obj/item/weapon/pickaxe/drill name = "mining drill" @@ -116,8 +129,10 @@ digspeed = 25 //available from roundstart, faster than a pickaxe. digsound = list('sound/weapons/drill.ogg') hitsound = 'sound/weapons/drill.ogg' + usesound = 'sound/weapons/drill.ogg' origin_tech = "materials=2;powerstorage=3;engineering=2" desc = "An electric mining drill for the especially scrawny." + toolspeed = 0.5 /obj/item/weapon/pickaxe/drill/cyborg name = "cyborg mining drill" @@ -130,6 +145,7 @@ digspeed = 10 origin_tech = "materials=6;powerstorage=4;engineering=5" desc = "Yours is the drill that will pierce the heavens!" + toolspeed = 0.25 /obj/item/weapon/pickaxe/diamonddrill/traitor //Pocket-sized traitor diamond drill. name = "supermatter drill" @@ -142,6 +158,7 @@ name = "diamond-tipped cyborg mining drill" //To inherit the NODROP flag, and easier to change borg specific drill mechanics. icon_state = "diamonddrill" digspeed = 10 + toolspeed = 0.25 /obj/item/weapon/pickaxe/drill/jackhammer name = "sonic jackhammer" @@ -151,23 +168,10 @@ origin_tech = "materials=3;powerstorage=2;engineering=2" digsound = list('sound/weapons/sonic_jackhammer.ogg') hitsound = 'sound/weapons/sonic_jackhammer.ogg' + usesound = 'sound/weapons/sonic_jackhammer.ogg' desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls." + toolspeed = 0.1 -/obj/item/weapon/pickaxe/silver - name = "silver pickaxe" - icon_state = "spickaxe" - item_state = "spickaxe" - digspeed = 30 - origin_tech = "materials=3" - desc = "This makes no metallurgic sense." - -/obj/item/weapon/pickaxe/gold - name = "golden pickaxe" - icon_state = "gpickaxe" - item_state = "gpickaxe" - digspeed = 20 - origin_tech = "materials=4" - desc = "This makes no metallurgic sense." /*****************************Shovel********************************/ /obj/item/weapon/shovel @@ -184,6 +188,8 @@ materials = list(MAT_METAL=50) origin_tech = "materials=1;engineering=1" attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked") + usesound = 'sound/effects/shovel_dig.ogg' + toolspeed = 1 /obj/item/weapon/shovel/spade name = "spade" @@ -193,6 +199,7 @@ force = 5.0 throwforce = 7.0 w_class = 2 + toolspeed = 2 /**********************Mining car (Crate like thing, not the rail car)**************************/ @@ -393,10 +400,10 @@ /obj/item/device/gps/computer/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) user.visible_message("[user] disassembles the gps.", \ "You start to disassemble the gps...", "You hear clanking and banging noises.") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * W.toolspeed, target = src)) new /obj/item/device/gps(loc) qdel(src) return ..() @@ -471,10 +478,10 @@ /obj/structure/fans/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) user.visible_message("[user] disassembles the fan.", \ "You start to disassemble the fan...", "You hear clanking and banging noises.") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * W.toolspeed, target = src)) deconstruct() return ..() @@ -522,10 +529,10 @@ /obj/structure/tubes/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) user.visible_message("[user] disassembles [src].", \ "You start to disassemble [src]...", "You hear clanking and banging noises.") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * W.toolspeed, target = src)) new /obj/item/stack/rods(loc) qdel(src) return ..() diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 623192ff820..d57f509e13e 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -470,14 +470,14 @@ var/global/list/rockTurfEdgeCache = list( src.gets_dug() return -/turf/simulated/floor/plating/airless/asteroid/attackby(obj/item/weapon/W as obj, mob/user as mob, params) +/turf/simulated/floor/plating/airless/asteroid/attackby(obj/item/weapon/W, mob/user, params) //note that this proc does not call ..() if(!W || !user) return 0 if((istype(W, /obj/item/weapon/shovel))) - var/turf/T = user.loc - if(!( istype(T, /turf) )) + var/turf/T = get_turf(user) + if(!istype(T)) return if(dug) @@ -485,17 +485,15 @@ var/global/list/rockTurfEdgeCache = list( return to_chat(user, "You start digging...") - - sleep(20) - if((user.loc == T && user.get_active_hand() == W)) + if(do_after(user, 20 * W.toolspeed, target = src)) to_chat(user, "You dig a hole.") gets_dug() return if((istype(W, /obj/item/weapon/pickaxe))) var/obj/item/weapon/pickaxe/P = W - var/turf/T = user.loc - if(!( istype(T, /turf) )) + var/turf/T = get_turf(user) + if(!istype(T)) return if(dug) @@ -504,8 +502,7 @@ var/global/list/rockTurfEdgeCache = list( to_chat(user, "You start digging...") - sleep(P.digspeed) - if((user.loc == T && user.get_active_hand() == W)) + if(do_after(user, P.digspeed, target = src)) to_chat(user, "You dig a hole.") gets_dug() return diff --git a/code/modules/mob/living/carbon/human/interactive/functions.dm b/code/modules/mob/living/carbon/human/interactive/functions.dm index 272b95d3577..ad4d8226c4a 100644 --- a/code/modules/mob/living/carbon/human/interactive/functions.dm +++ b/code/modules/mob/living/carbon/human/interactive/functions.dm @@ -86,7 +86,7 @@ custom_emote(1, "[src]'s chest opens up, revealing a large mass of explosives and tangled wires!") if(inactivity_period <= 0) inactivity_period = 9999 // technically infinite - if(do_after(src, 60, target=traitorTarget)) + if(do_after(src, 60, target = traitorTarget)) custom_emote(1, "A fire bursts from [src]'s eyes, igniting white hot and consuming their body in a flaming explosion!") explosion(src, 6, 6, 6) else diff --git a/code/modules/mob/living/carbon/human/species/apollo.dm b/code/modules/mob/living/carbon/human/species/apollo.dm index 4c871405c8d..7c6e01a69dd 100644 --- a/code/modules/mob/living/carbon/human/species/apollo.dm +++ b/code/modules/mob/living/carbon/human/species/apollo.dm @@ -66,21 +66,21 @@ M.visible_message("[M] begins to violently pull off [H]'s antennae.") to_chat(H, "[M] grips your antennae and starts violently pulling!") - do_after(H, 250, target = src) - if(p_loc == M.loc && p_loc_m == H.loc) - var/obj/item/organ/internal/wryn/hivenode/node = new /obj/item/organ/internal/wryn/hivenode - H.remove_language("Wryn Hivemind") - node.remove(H) - node.loc = M.loc - to_chat(M, "You hear a loud crunch as you mercilessly pull off [H]'s antennae.") - to_chat(H, "You hear a loud crunch as your antennae is ripped off your head by [M].") - to_chat(H, "It's so quiet...") - head_organ.h_style = "Bald" - H.update_hair() + if(do_after(H, 250, target = src)) + if(p_loc == M.loc && p_loc_m == H.loc) + var/obj/item/organ/internal/wryn/hivenode/node = new /obj/item/organ/internal/wryn/hivenode + H.remove_language("Wryn Hivemind") + node.remove(H) + node.loc = M.loc + to_chat(M, "You hear a loud crunch as you mercilessly pull off [H]'s antennae.") + to_chat(H, "You hear a loud crunch as your antennae is ripped off your head by [M].") + to_chat(H, "It's so quiet...") + head_organ.h_style = "Bald" + H.update_hair() - M.create_attack_log("removed antennae [H.name] ([H.ckey])") - H.create_attack_log("Has had their antennae removed by [M.name] ([M.ckey])") - msg_admin_attack("[key_name(M)] removed [key_name(H)]'s antennae") + M.create_attack_log("removed antennae [H.name] ([H.ckey])") + H.create_attack_log("Has had their antennae removed by [M.name] ([M.ckey])") + msg_admin_attack("[key_name(M)] removed [key_name(H)]'s antennae") return 0 /datum/species/nucleation diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 33e74cb6266..908102b8a06 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1062,7 +1062,7 @@ var/list/ai_verbs_default = list( if(istype(W, /obj/item/weapon/wrench)) if(anchored) user.visible_message("\blue \The [user] starts to unbolt \the [src] from the plating...") - if(!do_after(user,40, target = src)) + if(!do_after(user, 40 * W.toolspeed, target = src)) user.visible_message("\blue \The [user] decides not to unbolt \the [src].") return user.visible_message("\blue \The [user] finishes unfastening \the [src]!") @@ -1070,7 +1070,7 @@ var/list/ai_verbs_default = list( return else user.visible_message("\blue \The [user] starts to bolt \the [src] to the plating...") - if(!do_after(user,40, target = src)) + if(!do_after(user, 40 * W.toolspeed, target = src)) user.visible_message("\blue \The [user] decides not to bolt \the [src].") return user.visible_message("\blue \The [user] finishes fastening down \the [src]!") diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 84664abb465..cea257d1234 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -203,7 +203,7 @@ to_chat(D, "You begin decompiling the other drone.") - if(!do_after(D,50, target = target)) + if(!do_after(D, 50, target = target)) to_chat(D, "You need to remain still while decompiling such a large object.") return diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 6c555e0f511..8ca615ae9b0 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -617,7 +617,7 @@ var/list/robot_verbs_default = list( var/obj/item/weapon/weldingtool/WT = W user.changeNext_move(CLICK_CD_MELEE) if(WT.remove_fuel(0)) - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) adjustBruteLoss(-30) updatehealth() add_fingerprint(user) @@ -651,7 +651,7 @@ var/list/robot_verbs_default = list( return to_chat(user, "You jam the crowbar into the robot and begin levering [mmi].") - if(do_after(user,3 SECONDS, target = src)) + if(do_after(user, 30 * W.toolspeed, target = src)) to_chat(user, "You damage some parts of the chassis, but eventually manage to rip out [mmi]!") var/obj/item/robot_parts/robot_suit/C = new/obj/item/robot_parts/robot_suit(loc) C.l_leg = new/obj/item/robot_parts/l_leg(C) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 50a7afc64b5..23466c3e7b4 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -326,7 +326,7 @@ to_chat(user, "Close the access panel before manipulating the personality slot!") else to_chat(user, "You attempt to pull [paicard] free...") - if(do_after(user, 30, target = src)) + if(do_after(user, 30 * W.toolspeed, target = src)) if(paicard) user.visible_message("[user] uses [W] to pull [paicard] out of [bot_name]!","You pull [paicard] out of [bot_name] with [W].") ejectpai(user) diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 27bfe821502..d524ffd8e06 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -139,10 +139,11 @@ to_chat(user, "You need one length of cable to wire the ED-209!") return to_chat(user, "You start to wire [src]...") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) if(coil.get_amount() >= 1 && build_step == 6) coil.use(1) build_step = 7 + playsound(loc, W.usesound, 50, 1) to_chat(user, "You wire the ED-209 assembly.") name = "wired ED-209 assembly" @@ -174,9 +175,9 @@ if(8) if(istype(W, /obj/item/weapon/screwdriver)) - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(loc, W.usesound, 100, 1) to_chat(user, "You start attaching the gun to the frame...") - if(do_after(user, 40, target = src)) + if(do_after(user, 40 * W.toolspeed, target = src)) build_step++ name = "armed [name]" to_chat(user, "Taser gun attached.") diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index dfc0bce32a3..42172260e96 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -87,9 +87,9 @@ to_chat(user, "You can't shave this corgi, it's already been shaved!") return user.visible_message("[user] starts to shave [src] using \the [O].", "You start to shave [src] using \the [O]...") - if(do_after(user, 50, target = src)) + if(do_after(user, 50 * O.toolspeed, target = src)) user.visible_message("[user] shaves [src]'s hair using \the [O].") - playsound(loc, 'sound/items/Welder2.ogg', 20, 1) + playsound(loc, O.usesound, 20, 1) shaved = 1 icon_living = "[initial(icon_living)]_shaved" icon_dead = "[initial(icon_living)]_shaved_dead" diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 4da4a47945b..ca4b6e44b1a 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1057,7 +1057,7 @@ var/list/slot_equipment_priority = list( \ visible_implants += O return visible_implants -mob/proc/yank_out_object() +/mob/proc/yank_out_object() set category = "Object" set name = "Yank out object" set desc = "Remove an embedded item at the cost of bleeding and pain." diff --git a/code/modules/ninja/suit/suit_attackby.dm b/code/modules/ninja/suit/suit_attackby.dm index ad4c64decca..0229dbf1e99 100644 --- a/code/modules/ninja/suit/suit_attackby.dm +++ b/code/modules/ninja/suit/suit_attackby.dm @@ -6,7 +6,7 @@ var/obj/item/weapon/stock_parts/cell/CELL if(CELL.maxcharge > cell.maxcharge && suitGloves) to_chat(U, "Higher maximum capacity detected.\nUpgrading...") - if(n_gloves && n_gloves.candrain && do_after(U,s_delay, target = U)) + if(n_gloves && n_gloves.candrain && do_after(U, s_delay, target = U)) U.drop_item() CELL.loc = src CELL.charge = min(CELL.charge+cell.charge, CELL.maxcharge) diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index c7be9890a4f..a759ab2c850 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -43,7 +43,7 @@ icon_state = initial(icon_state) updateUsrDialog() else if(istype(P, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, P.usesound, 50, 1) anchored = !anchored to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") else diff --git a/code/modules/paperwork/frames.dm b/code/modules/paperwork/frames.dm index 46f4e12d97e..6a2e7d2d8b9 100644 --- a/code/modules/paperwork/frames.dm +++ b/code/modules/paperwork/frames.dm @@ -3,6 +3,8 @@ desc = "Its patented design allows it to be folded larger or smaller to accommodate standard paper, photo, and poster, and canvas sizes." icon = 'icons/obj/bureaucracy.dmi' + usesound = 'sound/items/Deconstruct.ogg' + var/icon_base var/obj/displayed @@ -58,7 +60,7 @@ /obj/item/weapon/picture_frame/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/weapon/screwdriver)) if(displayed) - playsound(src, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(src, I.usesound, 100, 1) user.visible_message("[user] unfastens \the [displayed] out of \the [src].", "You unfasten \the [displayed] out of \the [src].") if(istype(displayed, /obj/structure/sign/poster)) @@ -72,7 +74,7 @@ else to_chat(user, "There is nothing to remove from \the [src].") else if(istype(I, /obj/item/weapon/crowbar)) - playsound(src, 'sound/items/Crowbar.ogg', 100, 1) + playsound(src, I.usesound, 100, 1) user.visible_message("[user] breaks down \the [src].", "You break down \the [src].") for(var/A in contents) if(istype(A, /obj/structure/sign/poster)) @@ -135,7 +137,7 @@ PF.pixel_x = px PF.pixel_y = py - playsound(PF.loc, 'sound/items/Deconstruct.ogg', 100, 1) + playsound(PF.loc, usesound, 100, 1) /obj/item/weapon/picture_frame/examine(mob/user, var/distance = -1, var/infix = "", var/suffix = "") ..() @@ -213,10 +215,10 @@ /obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/weapon/screwdriver)) - playsound(src, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(src, I.usesound, 100, 1) user.visible_message("[user] begins to unfasten \the [src] from the wall.", "You begin to unfasten \the [src] from the wall.") - if(do_after(user, 100, target = src)) - playsound(src, 'sound/items/Deconstruct.ogg', 100, 1) + if(do_after(user, 100 * I.toolspeed, target = src)) + playsound(src, I.usesound, 100, 1) user.visible_message("[user] unfastens \the [src] from the wall.", "You unfasten \the [src] from the wall.") frame.forceMove(user.loc) frame = null diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index f2f25d58a2d..a438d98afdc 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -150,7 +150,7 @@ else to_chat(user, "This cartridge is not yet ready for replacement! Use up the rest of the toner.") else if(istype(O, /obj/item/weapon/wrench)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, O.usesound, 50, 1) anchored = !anchored to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") else if(istype(O, /obj/item/weapon/grab)) //For ass-copying. diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index b44673b4966..3b75706a3de 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -126,6 +126,8 @@ w_class = 2 item_state = "electronic" flags = CONDUCT + usesound = 'sound/items/Deconstruct.ogg' + toolspeed = 1 /obj/machinery/power/apc/connect_to_network() //Override because the APC does not directly connect to the network; it goes through a terminal. @@ -431,10 +433,10 @@ if(terminal) to_chat(user, "Disconnect wires first.") return - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) to_chat(user, "You are trying to remove the power control board...")//lpeters - fixed grammar issues - if(do_after(user, 50, target = src)) + if(do_after(user, 50 * W.toolspeed, target = src)) if(has_electronics==1) has_electronics = 0 if((stat & BROKEN) || malfhack) @@ -472,6 +474,7 @@ user.visible_message(\ "[user.name] has inserted the power cell to [src.name]!",\ "You insert the power cell.") + playsound(loc, W.usesound, 50, 1) chargecount = 0 update_icon() else if(istype(W, /obj/item/weapon/screwdriver)) // haxing @@ -484,12 +487,12 @@ if(has_electronics==1 && terminal) has_electronics = 2 stat &= ~MAINT - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) to_chat(user, "You screw the circuit electronics into place.") else if(has_electronics==2) has_electronics = 1 stat |= MAINT - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) to_chat(user, "You unfasten the electronics.") else /* has_electronics==0 */ to_chat(user, "There is nothing to secure.") @@ -527,8 +530,8 @@ to_chat(user, "You need more wires.") return to_chat(user, "You start adding cables to the APC frame...") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(src.loc, C.usesound, 50, 1) + if(do_after(user, 20 * C.toolspeed, target = src)) if(C.amount >= 10 && !terminal && opened && has_electronics != 2) var/turf/T = get_turf(src) var/obj/structure/cable/N = T.get_cable_node() @@ -548,8 +551,8 @@ to_chat(user, "You must remove the floor plating in front of the APC first.") return to_chat(user, "You begin to cut the cables...") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 50, target = src)) + playsound(src.loc, W.usesound, 50, 1) + if(do_after(user, 50 * W.toolspeed, target = src)) if(terminal && opened && has_electronics!=2) if(prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread @@ -561,8 +564,8 @@ qdel(terminal) // qdel else if(istype(W, /obj/item/weapon/apc_electronics) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack)) to_chat(user, "You trying to insert the power control board into the frame...") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - if(do_after(user, 10, target = src)) + playsound(src.loc, W.usesound, 50, 1) + if(do_after(user, 10 * W.toolspeed, target = src)) if(has_electronics==0) has_electronics = 1 to_chat(user, "You place the power control board inside the frame.") @@ -578,8 +581,8 @@ user.visible_message("[user.name] welds [src].", \ "You start welding the APC frame...", \ "You hear welding.") - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 50, target = src)) + playsound(src.loc, WT.usesound, 50, 1) + if(do_after(user, 50 * WT.toolspeed, target = src)) if(!src || !WT.remove_fuel(3, user)) return if(emagged || malfhack || (stat & BROKEN) || opened==2) new /obj/item/stack/sheet/metal(loc) @@ -609,7 +612,7 @@ to_chat(user, "You cannot repair this APC until you remove the electronics still inside.") return to_chat(user, "You begin to replace the damaged APC frame...") - if(do_after(user, 50, target = src)) + if(do_after(user, 50 * W.toolspeed, target = src)) user.visible_message(\ "[user.name] has replaced the damaged APC frame with new one.",\ "You replace the damaged APC frame with new one.") diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index b01dceb86a7..849511a48e7 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -480,6 +480,8 @@ var/global/list/datum/stack_recipe/cable_coil_recipes = list( slot_flags = SLOT_BELT item_state = "coil" attack_verb = list("whipped", "lashed", "disciplined", "flogged") + usesound = 'sound/items/Deconstruct.ogg' + toolspeed = 1 /obj/item/stack/cable_coil/suicide_act(mob/user) if(locate(/obj/structure/stool) in user.loc) diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index a61aca5661c..ed3146d4be7 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -166,7 +166,7 @@ power_change() else connect() - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) to_chat(user, "You [anchored ? "secure" : "unsecure"] the bolts holding [src] to the floor.") else if(ismultitool(W)) if(cold_dir == WEST) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index e3be67f7aca..5b015fcf58d 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -184,14 +184,14 @@ var/const/GRAV_NEEDS_WRENCH = 3 if(GRAV_NEEDS_SCREWDRIVER) if(istype(I, /obj/item/weapon/screwdriver)) to_chat(user, "You secure the screws of the framework.") - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) broken_state++ if(GRAV_NEEDS_WELDING) if(istype(I, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = I if(WT.remove_fuel(1, user)) to_chat(user, "You mend the damaged framework.") - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) + playsound(src.loc, WT.usesound, 50, 1) broken_state++ if(GRAV_NEEDS_PLASTEEL) if(istype(I, /obj/item/stack/sheet/plasteel)) @@ -199,14 +199,14 @@ var/const/GRAV_NEEDS_WRENCH = 3 if(PS.amount >= 10) PS.use(10) to_chat(user, "You add the plating to the framework.") - playsound(src.loc, 'sound/machines/click.ogg', 75, 1) + playsound(src.loc, PS.usesound, 75, 1) broken_state++ else to_chat(user, "You need 10 sheets of plasteel.") if(GRAV_NEEDS_WRENCH) if(istype(I, /obj/item/weapon/wrench)) to_chat(user, "You secure the plating to the framework.") - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(src.loc, I.usesound, 75, 1) set_fix() else ..() diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index b207e972036..b08f66a5119 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -40,14 +40,14 @@ src.add_fingerprint(user) if(istype(W, /obj/item/weapon/wrench)) if(src.stage == 1) - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(src.loc, W.usesound, 75, 1) to_chat(usr, "You begin deconstructing [src].") - if(!do_after(usr, 30, target = src)) + if(!do_after(usr, 30 * W.toolspeed, target = src)) return new /obj/item/stack/sheet/metal( get_turf(src.loc), sheets_refunded ) user.visible_message("[user.name] deconstructs [src].", \ "You deconstruct [src].", "You hear a noise.") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1) + playsound(src.loc, W.usesound, 75, 1) qdel(src) if(src.stage == 2) to_chat(usr, "You have to remove the wires first.") @@ -68,7 +68,7 @@ new /obj/item/stack/cable_coil(get_turf(src.loc), 1, COLOR_RED) user.visible_message("[user.name] removes the wiring from [src].", \ "You remove the wiring from [src].", "You hear a noise.") - playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) + playsound(loc, W.usesound, 100, 1) return if(istype(W, /obj/item/stack/cable_coil)) @@ -81,6 +81,7 @@ if("bulb") src.icon_state = "bulb-construct-stage2" src.stage = 2 + playsound(loc, coil.usesound, 50, 1) user.visible_message("[user.name] adds wires to [src].", \ "You add wires to [src].") return @@ -95,7 +96,7 @@ src.stage = 3 user.visible_message("[user.name] closes [src]'s casing.", \ "You close [src]'s casing.", "You hear a noise.") - playsound(src.loc, 'sound/items/Screwdriver.ogg', 75, 1) + playsound(src.loc, W.usesound, 75, 1) switch(fixture_type) @@ -348,7 +349,7 @@ // attempt to stick weapon into light socket else if(status == LIGHT_EMPTY) if(istype(W, /obj/item/weapon/screwdriver)) //If it's a screwdriver open it. - playsound(src.loc, 'sound/items/Screwdriver.ogg', 75, 1) + playsound(src.loc, W.usesound, 75, 1) user.visible_message("[user.name] opens [src]'s casing.", \ "You open [src]'s casing.", "You hear a noise.") var/obj/machinery/light_construct/newlight = null diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 0abb033e3e8..70be5b747c1 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -288,12 +288,12 @@ disconnect_from_network() to_chat(user, "You unsecure the generator from the floor.") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(src.loc, O.usesound, 50, 1) anchored = !anchored else if(istype(O, /obj/item/weapon/screwdriver)) panel_open = !panel_open - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, O.usesound, 50, 1) if(panel_open) to_chat(user, "You open the access panel.") else diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 5ec69cf0233..c4b44be0524 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -74,7 +74,7 @@ var/global/list/rad_collectors = list() if(P) to_chat(user, "\blue Remove the plasma tank first.") return 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(src.loc, W.usesound, 75, 1) src.anchored = !src.anchored user.visible_message("[user.name] [anchored? "secures":"unsecures"] the [src.name].", \ "You [anchored? "secure":"undo"] the external bolts.", \ diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 9d42e8d7613..76472ab0321 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -236,14 +236,14 @@ switch(state) if(0) state = 1 - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(src.loc, W.usesound, 75, 1) user.visible_message("[user.name] secures [src.name] to the floor.", \ "You secure the external reinforcing bolts to the floor.", \ "You hear a ratchet") src.anchored = 1 if(1) state = 0 - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(src.loc,W.usesound, 75, 1) user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", \ "You undo the external reinforcing bolts.", \ "You hear a ratchet") @@ -262,11 +262,11 @@ to_chat(user, "\red The [src.name] needs to be wrenched to the floor.") if(1) if(WT.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) + playsound(src.loc, WT.usesound, 50, 1) user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \ "You start to weld the [src] to the floor.", \ "You hear welding") - if(do_after(user,20, target = src)) + if(do_after(user, 20 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return state = 2 to_chat(user, "You weld the [src] to the floor.") @@ -275,11 +275,11 @@ to_chat(user, "\red You need more welding fuel to complete this task.") if(2) if(WT.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) + playsound(src.loc, WT.usesound, 50, 1) user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \ "You start to cut the [src] free from the floor.", \ "You hear welding") - if(do_after(user,20, target = src)) + if(do_after(user, 20 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return state = 1 to_chat(user, "You cut the [src] free from the floor.") diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 89c3c8b61e1..aebee058c18 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -87,14 +87,14 @@ field_generator power level display if(FG_UNSECURED) if(isinspace()) return state = FG_SECURED - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(loc, W.usesound, 75, 1) user.visible_message("[user.name] secures [name] to the floor.", \ "You secure the external reinforcing bolts to the floor.", \ "You hear ratchet.") anchored = 1 if(FG_SECURED) state = FG_UNSECURED - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(loc, W.usesound, 75, 1) user.visible_message("[user.name] unsecures [name] reinforcing bolts from the floor.", \ "You undo the external reinforcing bolts.", \ "You hear ratchet.") @@ -110,11 +110,11 @@ field_generator power level display if(FG_SECURED) if(WT.remove_fuel(0,user)) - playsound(loc, 'sound/items/Welder2.ogg', 50, 1) + playsound(loc, WT.usesound, 50, 1) user.visible_message("[user.name] starts to weld the [name] to the floor.", \ "You start to weld \the [src] to the floor...", \ "You hear welding.") - if(do_after(user,20, target = src)) + if(do_after(user, 20 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return state = FG_WELDED @@ -122,11 +122,11 @@ field_generator power level display if(FG_WELDED) if(WT.remove_fuel(0,user)) - playsound(loc, 'sound/items/Welder2.ogg', 50, 1) + playsound(loc, WT.usesound, 50, 1) user.visible_message("[user.name] starts to cut the [name] free from the floor.", \ "You start to cut \the [src] free from the floor...", \ "You hear welding.") - if(do_after(user,20, target = src)) + if(do_after(user, 20 * WT.toolspeed, target = src)) if(!src || !WT.isOn()) return state = FG_SECURED diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index 11ffbf5a3f6..276d3fe80b8 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -23,7 +23,7 @@ /obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/weapon/wrench)) anchored = !anchored - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(src.loc, W.usesound, 75, 1) if(anchored) user.visible_message("[user.name] secures [src.name] to the floor.", \ "You secure the [src.name] to the floor.", \ diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 7fba50784b8..0ce1159743e 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -214,7 +214,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin return 0 -/obj/structure/particle_accelerator/proc/process_tool_hit(var/obj/O, var/mob/user) +/obj/structure/particle_accelerator/proc/process_tool_hit(var/obj/item/O, var/mob/user) if(!(O) || !(user)) return 0 if(!ismob(user) || !isobj(O)) @@ -224,14 +224,14 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin switch(construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps if(0) if(iswrench(O) && !isinspace()) - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(loc, O.usesound, 50, 1) anchored = 1 user.visible_message("[user.name] secures the [name] to the floor.", \ "You secure the external bolts.") temp_state++ if(1) if(iswrench(O)) - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(loc, O.usesound, 50, 1) anchored = 0 user.visible_message("[user.name] detaches the [name] from the floor.", \ "You remove the external bolts.") @@ -239,6 +239,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin else if(iscoil(O)) var/obj/item/stack/cable_coil/C = O if(C.use(1)) + playsound(loc, O.usesound, 50, 1) user.visible_message("[user.name] adds wires to the [name].", \ "You add some wires.") temp_state++ @@ -247,15 +248,18 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin return if(2) if(iswirecutter(O))//TODO:Shock user if its on? + playsound(loc, O.usesound, 50, 1) user.visible_message("[user.name] removes some wires from the [name].", \ "You remove some wires.") temp_state-- else if(isscrewdriver(O)) + playsound(loc, O.usesound, 50, 1) user.visible_message("[user.name] closes the [name]'s access panel.", \ "You close the access panel.") temp_state++ if(3) if(isscrewdriver(O)) + playsound(loc, O.usesound, 50, 1) user.visible_message("[user.name] opens the [name]'s access panel.", \ "You open the access panel.") temp_state-- @@ -352,7 +356,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin return 0 -/obj/machinery/particle_accelerator/proc/process_tool_hit(var/obj/O, var/mob/user) +/obj/machinery/particle_accelerator/proc/process_tool_hit(var/obj/item/O, var/mob/user) if(!(O) || !(user)) return 0 if(!ismob(user) || !isobj(O)) @@ -361,7 +365,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin switch(construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps if(0) if(iswrench(O)) - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(loc, O.usesound, 50, 1) anchored = 1 user.visible_message("[user.name] secures the [name] to the floor.", \ "You secure the external bolts.") @@ -369,7 +373,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin power_change() if(1) if(iswrench(O)) - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(loc, O.usesound, 50, 1) anchored = 0 user.visible_message("[user.name] detaches the [name] from the floor.", \ "You remove the external bolts.") @@ -377,20 +381,24 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin power_change() else if(iscoil(O)) if(O:use(1)) + playsound(loc, O.usesound, 50, 1) user.visible_message("[user.name] adds wires to the [name].", \ "You add some wires.") temp_state++ if(2) if(iswirecutter(O))//TODO:Shock user if its on? + playsound(loc, O.usesound, 50, 1) user.visible_message("[user.name] removes some wires from the [name].", \ "You remove some wires.") temp_state-- else if(isscrewdriver(O)) + playsound(loc, O.usesound, 50, 1) user.visible_message("[user.name] closes the [name]'s access panel.", \ "You close the access panel.") temp_state++ if(3) if(isscrewdriver(O)) + playsound(loc, O.usesound, 50, 1) user.visible_message("[user.name] opens the [name]'s access panel.", \ "You open the access panel.") temp_state-- diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 02597b46840..b8c0133d8f3 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -180,9 +180,9 @@ return to_chat(user, "You begin to dismantle the power terminal...") - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) - if(do_after(user, 50, target = src)) + if(do_after(user, 50 * I.toolspeed, target = src)) if(prob(50) && electrocute_mob(usr, terminal.powernet, terminal)) //animate the electrocution if uncautious and unlucky var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread s.set_up(5, 1, src) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 5f137f4cb74..dea4c4797e8 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -60,12 +60,12 @@ if(istype(W, /obj/item/weapon/crowbar)) playsound(src.loc, 'sound/machines/click.ogg', 50, 1) user.visible_message("[user] begins to take the glass off the solar panel.", "You begin to take the glass off the solar panel...") - if(do_after(user, 50, target = src)) + if(do_after(user, 50 * W.toolspeed, target = src)) var/obj/item/solar_assembly/S = locate() in src if(S) S.loc = src.loc S.give_glass() - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) user.visible_message("[user] takes the glass off the solar panel.", "You take the glass off the solar panel.") qdel(src) return @@ -227,20 +227,20 @@ if(istype(W, /obj/item/weapon/wrench)) anchored = 1 user.visible_message("[user] wrenches the solar assembly into place.", "You wrench the solar assembly into place.") - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(src.loc, W.usesound, 50, 1) return 1 else if(istype(W, /obj/item/weapon/wrench)) anchored = 0 user.visible_message("[user] unwrenches the solar assembly from its place.", "You unwrench the solar assembly from its place.") - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + playsound(src.loc, W.usesound, 50, 1) return 1 if(istype(W, /obj/item/stack/sheet/glass) || istype(W, /obj/item/stack/sheet/rglass)) var/obj/item/stack/sheet/S = W if(S.use(2)) glass_type = W.type - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) + playsound(loc, S.usesound, 50, 1) user.visible_message("[user] places the glass on the solar assembly.", "You place the glass on the solar assembly.") if(tracker) new /obj/machinery/power/tracker(get_turf(src), src) @@ -263,6 +263,7 @@ if(istype(W, /obj/item/weapon/crowbar)) new /obj/item/weapon/tracker_electronics(src.loc) tracker = 0 + playsound(loc, W.usesound, 50, 1) user.visible_message("[user] takes out the electronics from the solar assembly.", "You take out the electronics from the solar assembly.") return 1 ..() @@ -411,10 +412,10 @@ return data -/obj/machinery/power/solar_control/attackby(I as obj, user as mob, params) +/obj/machinery/power/solar_control/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(src.loc, I.usesound, 50, 1) + if(do_after(user, 20 * I.toolspeed, target = src)) if(src.stat & BROKEN) to_chat(user, "The broken glass falls out.") var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 63653eab9d1..7b4b7a0d02e 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -63,12 +63,12 @@ if(istype(W, /obj/item/weapon/crowbar)) playsound(src.loc, 'sound/machines/click.ogg', 50, 1) user.visible_message("[user] begins to take the glass off the solar tracker.") - if(do_after(user, 50, target = src)) + if(do_after(user, 50 * W.toolspeed, target = src)) var/obj/item/solar_assembly/S = locate() in src if(S) S.loc = src.loc S.give_glass() - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(src.loc, W.usesound, 50, 1) user.visible_message("[user] takes the glass off the tracker.") qdel(src) // qdel return diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 9a4445d111d..fb811c19d78 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -34,7 +34,7 @@ if(istype(A, /obj/item/weapon/crowbar)) if(modkits.len) to_chat(user, "You pry the modifications out.") - playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) + playsound(loc, A.usesound, 100, 1) for(var/obj/item/borg/upgrade/modkit/M in modkits) M.uninstall(src) else @@ -230,6 +230,7 @@ origin_tech = "programming=2;materials=2;magnets=4" require_module = 1 module_type = /obj/item/weapon/robot_module/miner + usesound = 'sound/items/Screwdriver.ogg' var/denied_type = null var/maximum_of_type = 1 var/cost = 30 @@ -266,7 +267,7 @@ if(KA.get_remaining_mod_capacity() >= cost) if(.) to_chat(user, "You install the modkit.") - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(loc, usesound, 100, 1) user.unEquip(src) forceMove(KA) KA.modkits += src diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 12eb34e8c54..3131e49c4f2 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -139,6 +139,8 @@ origin_tech = "combat=1;materials=3;magnets=2;plasmatech=2;engineering=1" ammo_type = list(/obj/item/ammo_casing/energy/plasma) fire_sound = 'sound/weapons/laser.ogg' + usesound = 'sound/items/Welder.ogg' + toolspeed = 1 flags = CONDUCT | OPENCONTAINER attack_verb = list("attacked", "slashed", "cut", "sliced") force = 12 diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 884b97c8ffb..80192a3091d 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -121,7 +121,7 @@ afterattack(user, user) //you know the drill user.visible_message("[src] goes off!", "[src] goes off in your face!") return - if(do_after(user, 30, target = src)) + if(do_after(user, 30 * A.toolspeed, target = src)) if(magazine.ammo_count()) to_chat(user, "You can't modify it!") return @@ -134,7 +134,7 @@ afterattack(user, user) //and again user.visible_message("[src] goes off!", "[src] goes off in your face!") return - if(do_after(user, 30, target = src)) + if(do_after(user, 30 * A.toolspeed, target = src)) if(magazine.ammo_count()) to_chat(user, "You can't modify it!") return diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 9a3ecffedb6..3904e923886 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -358,7 +358,7 @@ return if(istype(I, /obj/item/weapon/wrench)) - playsound(src, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src, I.usesound, 50, 1) if(anchored) anchored = 0 to_chat(user, "[src] can now be moved.") diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 2430ed122dd..1127271c17e 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -129,12 +129,13 @@ var/obj/item/conveyor_construct/C = new/obj/item/conveyor_construct(src.loc) C.id = id transfer_fingerprints_to(C) + playsound(loc, I.usesound, 50, 1) to_chat(usr,"You remove the conveyor belt.") qdel(src) else if(istype(I, /obj/item/weapon/wrench)) if(!(stat & BROKEN)) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, I.usesound, 50, 1) dir = turn(dir,-45) update_move_direction() to_chat(user, "You rotate [src].") diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 4e720f39c00..fd915caa4a8 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -212,16 +212,16 @@ else density = 1 // We don't want disposal bins or outlets to go density 0 to_chat(user, "You attach the [nicetype] to the underfloor.") - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + playsound(src.loc, I.usesound, 100, 1) update() else if(istype(I, /obj/item/weapon/weldingtool)) if(anchored) var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) to_chat(user, "Welding the [nicetype] in place.") - if(do_after(user, 20, target = src)) + if(do_after(user, 20 * W.toolspeed, target = src)) if(!src || !W.isOn()) return to_chat(user, "The [nicetype] has been welded in place!") update() // TODO: Make this neat diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index b9cb76b31b0..075a2113e79 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -74,12 +74,12 @@ return if(mode==0) // It's off but still not unscrewed mode=-1 // Set it to doubleoff l0l - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) to_chat(user, "You remove the screws around the power connection.") return else if(mode==-1) mode=0 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) to_chat(user, "You attach the screws around the power connection.") return else if(istype(I,/obj/item/weapon/weldingtool) && mode==-1) @@ -88,10 +88,10 @@ return var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) to_chat(user, "You start slicing the floorweld off the disposal unit.") - if(do_after(user,20, target = src)) + if(do_after(user, 20 * W.toolspeed, target = src)) if(!src || !W.isOn()) return to_chat(user, "You sliced the floorweld off the disposal unit.") var/obj/structure/disposalconstruct/C = new (src.loc) @@ -882,8 +882,8 @@ var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0, user)) to_chat(user, "You begin slicing \the [src].") - playsound(loc, 'sound/items/Welder2.ogg', 100, 1) - if(do_after(user, 30, target = src)) + playsound(loc, W.usesound, 100, 1) + if(do_after(user, 30 * W.toolspeed, target = src)) to_chat(user, "You finish slicing \the [src].") welded() else @@ -1190,19 +1190,14 @@ var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) - // check if anything changed over 2 seconds - var/turf/uloc = user.loc - var/atom/wloc = W.loc - to_chat(user, "Slicing the disposal pipe.") - sleep(30) - if(!W.isOn()) return - if(user.loc == uloc && wloc == W.loc) + playsound(loc, W.usesound, 100, 1) + to_chat(user, "Slicing the disposal pipe.") + if(do_after(user, 30 * W.toolspeed, target = src)) + if(!W.isOn()) + return welded() - else - to_chat(user, "You must stay still while welding the pipe.") else - to_chat(user, "You need more welding fuel to cut the pipe.") + to_chat(user, "You need more welding fuel to cut the pipe.") return // would transfer to next pipe segment, but we are in a trunk @@ -1308,20 +1303,20 @@ if(istype(I, /obj/item/weapon/screwdriver)) if(mode==0) mode=1 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) to_chat(user, "You remove the screws around the power connection.") return else if(mode==1) mode=0 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) to_chat(user, "You attach the screws around the power connection.") return else if(istype(I,/obj/item/weapon/weldingtool) && mode==1) var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) to_chat(user, "You start slicing the floorweld off the disposal outlet.") - if(do_after(user,20, target = src)) + if(do_after(user, 20 * W.toolspeed, target = src)) if(!src || !W.isOn()) return to_chat(user, "You sliced the floorweld off the disposal outlet.") var/obj/structure/disposalconstruct/C = new (src.loc) diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index a0e9d59a803..104036d5c0a 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -331,20 +331,20 @@ if(istype(I, /obj/item/weapon/screwdriver)) if(c_mode==0) c_mode=1 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) to_chat(user, "You remove the screws around the power connection.") return else if(c_mode==1) c_mode=0 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src.loc, I.usesound, 50, 1) to_chat(user, "You attach the screws around the power connection.") return else if(istype(I,/obj/item/weapon/weldingtool) && c_mode==1) var/obj/item/weapon/weldingtool/W = I if(W.remove_fuel(0,user)) - playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1) + playsound(src.loc, W.usesound, 100, 1) to_chat(user, "You start slicing the floorweld off the delivery chute.") - if(do_after(user,20, target = src)) + if(do_after(user, 20 * W.toolspeed, target = src)) if(!src || !W.isOn()) return to_chat(user, "You sliced the floorweld off the delivery chute.") var/obj/structure/disposalconstruct/C = new (src.loc) diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm index 57759308aee..fc4cda15541 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm @@ -80,7 +80,7 @@ if(istype(W, /obj/item/device/measuring_tape)) var/obj/item/device/measuring_tape/P = W user.visible_message("\blue[user] extends [P] towards [src].","\blue You extend [P] towards [src].") - if(do_after(user,40, target = src)) + if(do_after(user, 40, target = src)) to_chat(user, "\blue [bicon(P)] [src] has been excavated to a depth of [2*src.excavation_level]cm.") return @@ -89,7 +89,7 @@ to_chat(user, "\red You start [P.drill_verb] [src].") - if(!do_after(user,P.digspeed, target = src)) + if(!do_after(user, P.digspeed, target = src)) return to_chat(user, "\blue You finish [P.drill_verb] [src].") diff --git a/code/modules/spacepods/parts.dm b/code/modules/spacepods/parts.dm index d1aefb535e6..757d7a95dcc 100644 --- a/code/modules/spacepods/parts.dm +++ b/code/modules/spacepods/parts.dm @@ -55,7 +55,7 @@ return 0 return connectedparts -/obj/item/pod_parts/pod_frame/attackby(var/obj/O, mob/user) +/obj/item/pod_parts/pod_frame/attackby(var/obj/item/O, mob/user) if(istype(O, /obj/item/stack/rods)) var/obj/item/stack/rods/R = O var/list/linkedparts = find_square() @@ -71,12 +71,12 @@ //log_admin("Repositioning") pod.loc = F.loc qdel(F) - playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) + playsound(get_turf(src), O.usesound, 50, 1) if(istype(O, /obj/item/weapon/wrench)) to_chat(user, "You [!anchored ? "secure \the [src] in place." : "remove the securing bolts."]") anchored = !anchored density = anchored - playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) + playsound(get_turf(src), O.usesound, 50, 1) /obj/item/pod_parts/pod_frame/verb/rotate() set name = "Rotate Frame" diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index af18daa893a..1d883771b25 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -311,7 +311,7 @@ if(iscrowbar(W)) if(!equipment_system.lock_system || unlocked || hatch_open) hatch_open = !hatch_open - playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) + playsound(loc, W.usesound, 50, 1) to_chat(user, "You [hatch_open ? "open" : "close"] the maintenance hatch.") else to_chat(user, "The hatch is locked shut!") @@ -369,8 +369,8 @@ return if(health < initial(health)) to_chat(user, "\blue You start welding the spacepod...") - playsound(loc, 'sound/items/Welder.ogg', 50, 1) - if(do_after(user, 20, target = src)) + playsound(loc, W.usesound, 50, 1) + if(do_after(user, 20 * W.toolspeed, target = src)) if(!src || !WT.remove_fuel(3, user)) return repair_damage(10) to_chat(user, "\blue You mend some [pick("dents","bumps","damage")] with \the [WT]") @@ -383,7 +383,7 @@ if(L.on && equipment_system.lock_system) user.visible_message(user, "[user] is drilling through the [src]'s lock!", "You start drilling through the [src]'s lock!") - if(do_after(user, 100, target = src)) + if(do_after(user, 100 * W.toolspeed, target = src)) qdel(equipment_system.lock_system) equipment_system.lock_system = null user.visible_message(user, "[user] has destroyed the [src]'s lock!", diff --git a/code/modules/surgery/organs/autoimplanter.dm b/code/modules/surgery/organs/autoimplanter.dm index 5c2aa1193d9..4af88abc52f 100644 --- a/code/modules/surgery/organs/autoimplanter.dm +++ b/code/modules/surgery/organs/autoimplanter.dm @@ -4,6 +4,7 @@ icon_state = "autoimplanter" item_state = "walkietalkie"//left as this so as to intentionally not have inhands w_class = 2 + usesound = 'sound/weapons/circsawhit.ogg' var/obj/item/organ/internal/cyberimp/storedorgan /obj/item/device/autoimplanter/attack_self(mob/user)//when the object it used... @@ -12,7 +13,7 @@ return storedorgan.insert(user)//insert stored organ into the user user.visible_message("[user] presses a button on [src], and you hear a short mechanical noise.", "You feel a sharp sting as [src] plunges into your body.") - playsound(get_turf(user), 'sound/weapons/circsawhit.ogg', 50, 1) + playsound(get_turf(user), usesound, 50, 1) storedorgan = null /obj/item/device/autoimplanter/attackby(obj/item/I, mob/user, params) @@ -32,4 +33,4 @@ storedorgan.forceMove(get_turf(user)) storedorgan = null to_chat(user, "You remove the [storedorgan] from [src].") - playsound(get_turf(user), 'sound/items/Screwdriver.ogg', 50, 1) + playsound(get_turf(user), I.usesound, 50, 1) diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index defa57b3ca4..d89280092dc 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -113,9 +113,7 @@ if(prob_chance > 100)//if we are using a super tool time = time/prob_chance //PLACEHOLDER VALUES - if(do_after(user, time, target = target)) - - + if(do_after(user, time * tool.toolspeed, target = target)) if(prob(prob_chance) || isrobot(user)) if(end_step(user, target, target_zone, tool, surgery)) advance = 1 diff --git a/code/modules/telesci/bscrystal.dm b/code/modules/telesci/bscrystal.dm index a2ee8cc85ca..113d2abd751 100644 --- a/code/modules/telesci/bscrystal.dm +++ b/code/modules/telesci/bscrystal.dm @@ -9,6 +9,8 @@ points = 50 var/blink_range = 8 // The teleport range when crushed/thrown at someone. refined_type = /obj/item/stack/sheet/bluespace_crystal + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' /obj/item/weapon/ore/bluespace_crystal/New() ..() @@ -58,6 +60,8 @@ var/global/list/datum/stack_recipe/bluespace_crystal_recipes = list(new/datum/st desc = "A stable polycrystal, made of fused-together bluespace crystals. You could probably break one off." origin_tech = "bluespace=4;materials=3" attack_verb = list("bluespace polybashed", "bluespace polybattered", "bluespace polybludgeoned", "bluespace polythrashed", "bluespace polysmashed") + toolspeed = 1 + usesound = 'sound/items/Deconstruct.ogg' /obj/item/stack/sheet/bluespace_crystal/New() ..() diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index 0f1f7c8f582..ed330821f06 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -67,7 +67,7 @@ var/stage = 0 /obj/machinery/telepad_cargo/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/wrench)) - playsound(src, 'sound/items/Ratchet.ogg', 50, 1) + playsound(src, W.usesound, 50, 1) if(anchored) anchored = 0 to_chat(user, " The [src] can now be moved.") @@ -76,15 +76,15 @@ to_chat(user, " The [src] is now secured.") if(istype(W, /obj/item/weapon/screwdriver)) if(stage == 0) - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src, W.usesound, 50, 1) to_chat(user, " You unscrew the telepad's tracking beacon.") stage = 1 else if(stage == 1) - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src, W.usesound, 50, 1) to_chat(user, " You screw in the telepad's tracking beacon.") stage = 0 if(istype(W, /obj/item/weapon/weldingtool) && stage == 1) - playsound(src, 'sound/items/Welder.ogg', 50, 1) + playsound(src, W.usesound, 50, 1) to_chat(user, " You disassemble the telepad.") new /obj/item/stack/sheet/metal(get_turf(src)) new /obj/item/stack/sheet/glass(get_turf(src)) @@ -119,6 +119,8 @@ throwforce = 10.0 throw_speed = 2 throw_range = 5 + toolspeed = 1 + usesound = 'sound/machines/click.ogg' var/obj/item/weapon/stock_parts/cell/high/rcell = null var/obj/machinery/pad = null var/mode = 0 From 32b8158796f548e5d7e1161b39ce3090ce3a5dfa Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 7 Mar 2017 18:13:13 +0100 Subject: [PATCH 14/21] Increase Jaws of Life door open time from 5 to 10 seconds --- code/game/machinery/doors/airlock.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index c939b0e0242..3c2c13254cf 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -889,11 +889,10 @@ About the new airlock wires panel: to_chat(user, "It's welded, it won't budge!") return - var/time_to_open = 5 if(arePowerSystemsOn()) - time_to_open = 50 + var/obj/item/weapon/crowbar/power/P = C playsound(src, 'sound/machines/airlock_alien_prying.ogg',100,1) //is it aliens or just the CE being a dick? - if(do_after(user, time_to_open, target = src)) + if(do_after(user, P.airlock_open_time, target = src)) open(2) if(density && !open(2)) to_chat(user, "Despite your attempts, the [src] refuses to open.") From 2c23fbe34dbefeee7036b3f2108e2aa2d9c3fea5 Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 7 Mar 2017 18:14:04 +0100 Subject: [PATCH 15/21] Forgot to commit tools --- code/game/objects/items/weapons/tools.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index c286c4887d6..5679ca7f02d 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -697,6 +697,7 @@ obj/item/weapon/weldingtool/experimental/process() usesound = 'sound/items/jaws_pry.ogg' force = 15 toolspeed = 0.25 + var/airlock_open_time = 100 // Time required to open powered airlocks /obj/item/weapon/crowbar/power/suicide_act(mob/user) user.visible_message("[user] is putting their head in [src], it looks like they're trying to commit suicide!") From 9594ec245b80006e5f825fc98a12f92f176913c3 Mon Sep 17 00:00:00 2001 From: Markolie Date: Tue, 7 Mar 2017 18:16:30 +0100 Subject: [PATCH 16/21] Change CE belt path to /full with tools --- code/game/jobs/job/engineering.dm | 2 +- code/game/objects/items/weapons/storage/belt.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index cd0450e5426..b855c1d671f 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -26,7 +26,7 @@ jobtype = /datum/job/chief_engineer uniform = /obj/item/clothing/under/rank/chief_engineer - belt = /obj/item/weapon/storage/belt/utility/chief + belt = /obj/item/weapon/storage/belt/utility/chief/full gloves = /obj/item/clothing/gloves/color/black/ce shoes = /obj/item/clothing/shoes/brown head = /obj/item/clothing/head/hardhat/white diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 4c6f8e88e25..b577df5987e 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -93,7 +93,7 @@ icon_state = "utilitybelt_ce" item_state = "utility_ce" -/obj/item/weapon/storage/belt/utility/chief/New() +/obj/item/weapon/storage/belt/utility/chief/full/New() ..() new /obj/item/weapon/screwdriver/power(src) new /obj/item/weapon/crowbar/power(src) From 8ed466955e21d4ab17d6f08947646a0319cad773 Mon Sep 17 00:00:00 2001 From: Markolie Date: Wed, 8 Mar 2017 10:46:43 +0100 Subject: [PATCH 17/21] Surgery toolspeed changes --- code/modules/surgery/surgery.dm | 3 --- code/modules/surgery/tools.dm | 4 ++++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index d89280092dc..9ed77cd2c9f 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -109,9 +109,6 @@ if(implement_type) //this means it isn't a require nd or any item step. prob_chance = min(allowed_tools[implement_type], 100) prob_chance *= get_location_modifier(target) - - if(prob_chance > 100)//if we are using a super tool - time = time/prob_chance //PLACEHOLDER VALUES if(do_after(user, time * tool.toolspeed, target = target)) if(prob(prob_chance) || isrobot(user)) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 2e47438eb44..27ed3895a2c 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -89,6 +89,7 @@ item_state = "scalpel" damtype = "fire" hitsound = 'sound/weapons/sear.ogg' + toolspeed = 0.8 /obj/item/weapon/scalpel/laser2 name = "laser scalpel" @@ -97,6 +98,7 @@ item_state = "scalpel" damtype = "fire" hitsound = 'sound/weapons/sear.ogg' + toolspeed = 0.6 /obj/item/weapon/scalpel/laser3 name = "laser scalpel" @@ -105,6 +107,7 @@ item_state = "scalpel" damtype = "fire" hitsound = 'sound/weapons/sear.ogg' + toolspeed = 0.4 /obj/item/weapon/scalpel/manager //super tool! Retractor/hemostat name = "incision management system" @@ -113,6 +116,7 @@ item_state = "scalpel" damtype = "fire" hitsound = 'sound/weapons/sear.ogg' + toolspeed = 0.2 /obj/item/weapon/circular_saw name = "circular saw" From f2493710db2124c9480d9d38074bdd736658a6e8 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 8 Mar 2017 20:33:32 -0500 Subject: [PATCH 18/21] Automatic changelog generation for PR #6575 [ci skip] --- html/changelogs/AutoChangeLog-pr-6575.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6575.yml diff --git a/html/changelogs/AutoChangeLog-pr-6575.yml b/html/changelogs/AutoChangeLog-pr-6575.yml new file mode 100644 index 00000000000..bb681b3480c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6575.yml @@ -0,0 +1,4 @@ +author: "FlaaaaaattestGuitar" +delete-after: True +changes: + - tweak: "Magistrate now starts their shift with a pair of white gloves as well as Bridge and Meeting Room access." From 8059a3d6a7aad82f11121f1bcb8560a6c1c4f363 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Wed, 8 Mar 2017 20:58:43 -0500 Subject: [PATCH 19/21] Automatic changelog compile, [ci skip] --- html/changelog.html | 4 ++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-6575.yml | 4 ---- 3 files changed, 7 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-6575.yml diff --git a/html/changelog.html b/html/changelog.html index b2c3b33045b..c539f908b6b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -61,6 +61,10 @@
  • Farting on a bible now puts you at the mercy of the gods.
  • Removed automatic biblefarting gibbing.
  • +

    FlaaaaaattestGuitar updated:

    +
      +
    • Magistrate now starts their shift with a pair of white gloves as well as Bridge and Meeting Room access.
    • +

    Fox McCloud updated:

    • money is now far easier to use, and distribute in amounts you would like
    • diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 4347295478e..0803a8c843a 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3990,6 +3990,9 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. Alffd: - rscadd: Farting on a bible now puts you at the mercy of the gods. - rscdel: Removed automatic biblefarting gibbing. + FlaaaaaattestGuitar: + - tweak: Magistrate now starts their shift with a pair of white gloves as well as + Bridge and Meeting Room access. Fox McCloud: - tweak: money is now far easier to use, and distribute in amounts you would like Kyep: diff --git a/html/changelogs/AutoChangeLog-pr-6575.yml b/html/changelogs/AutoChangeLog-pr-6575.yml deleted file mode 100644 index bb681b3480c..00000000000 --- a/html/changelogs/AutoChangeLog-pr-6575.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FlaaaaaattestGuitar" -delete-after: True -changes: - - tweak: "Magistrate now starts their shift with a pair of white gloves as well as Bridge and Meeting Room access." From 2944debd3f564280e55b82f776acde8e2b612cbc Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 9 Mar 2017 01:43:20 -0500 Subject: [PATCH 20/21] Automatic changelog generation for PR #6695 [ci skip] --- html/changelogs/AutoChangeLog-pr-6695.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-6695.yml diff --git a/html/changelogs/AutoChangeLog-pr-6695.yml b/html/changelogs/AutoChangeLog-pr-6695.yml new file mode 100644 index 00000000000..a8c0e43ec98 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-6695.yml @@ -0,0 +1,12 @@ +author: "Markolie" +delete-after: True +changes: + - tweak: "Tools now have a \"usesound\" and \"toolspeed\" variable which allows different tool (levels) to have different sounds and speeds." + - tweak: "Robots spawn with tools that are twice as fast as regular tools." + - rscadd: "Abductor agents now spawn with a toolbelt with specialized abductor tools that are very fast." + - tweak: "Abductor surgery tools are now much faster." + - rscadd: "Abductor (surgery) tools can now be constructed in R&D with a sufficiently high \"abductor\" research level." + - tweak: "The abductor multitool will now display what each wire does." + - rscadd: "Admin ghosts can now interact with wires and see what each wire does." + - rscadd: "Adds a set of unique tools for the Chief Engineer that he is given in a unique toolbelt at roundstart. These tools are faster and can be created in R&D with a sufficiently high R&D level." + - tweak: "The AI detector has been refactored to have much more robust AI tracking." From bac014457da5740e167909ca99c9674ea078091d Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Thu, 9 Mar 2017 01:59:06 -0500 Subject: [PATCH 21/21] Automatic changelog compile, [ci skip] --- html/changelog.html | 14 ++++++++++++++ html/changelogs/.all_changelog.yml | 16 ++++++++++++++++ html/changelogs/AutoChangeLog-pr-6695.yml | 12 ------------ 3 files changed, 30 insertions(+), 12 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-6695.yml diff --git a/html/changelog.html b/html/changelog.html index c539f908b6b..d13d886de36 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,20 @@ -->
      +

      09 March 2017

      +

      Markolie updated:

      +
        +
      • Tools now have a "usesound" and "toolspeed" variable which allows different tool (levels) to have different sounds and speeds.
      • +
      • Robots spawn with tools that are twice as fast as regular tools.
      • +
      • Abductor agents now spawn with a toolbelt with specialized abductor tools that are very fast.
      • +
      • Abductor surgery tools are now much faster.
      • +
      • Abductor (surgery) tools can now be constructed in R&D with a sufficiently high "abductor" research level.
      • +
      • The abductor multitool will now display what each wire does.
      • +
      • Admin ghosts can now interact with wires and see what each wire does.
      • +
      • Adds a set of unique tools for the Chief Engineer that he is given in a unique toolbelt at roundstart. These tools are faster and can be created in R&D with a sufficiently high R&D level.
      • +
      • The AI detector has been refactored to have much more robust AI tracking.
      • +
      +

      08 March 2017

      Alffd updated:

        diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 0803a8c843a..92654fb69a1 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4003,3 +4003,19 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. Xenos) are less likely.' uraniummeltdown: - rscadd: Wizard Hardsuit helmet and suit now have inhand sprites +2017-03-09: + Markolie: + - tweak: Tools now have a "usesound" and "toolspeed" variable which allows different + tool (levels) to have different sounds and speeds. + - tweak: Robots spawn with tools that are twice as fast as regular tools. + - rscadd: Abductor agents now spawn with a toolbelt with specialized abductor tools + that are very fast. + - tweak: Abductor surgery tools are now much faster. + - rscadd: Abductor (surgery) tools can now be constructed in R&D with a sufficiently + high "abductor" research level. + - tweak: The abductor multitool will now display what each wire does. + - rscadd: Admin ghosts can now interact with wires and see what each wire does. + - rscadd: Adds a set of unique tools for the Chief Engineer that he is given in + a unique toolbelt at roundstart. These tools are faster and can be created in + R&D with a sufficiently high R&D level. + - tweak: The AI detector has been refactored to have much more robust AI tracking. diff --git a/html/changelogs/AutoChangeLog-pr-6695.yml b/html/changelogs/AutoChangeLog-pr-6695.yml deleted file mode 100644 index a8c0e43ec98..00000000000 --- a/html/changelogs/AutoChangeLog-pr-6695.yml +++ /dev/null @@ -1,12 +0,0 @@ -author: "Markolie" -delete-after: True -changes: - - tweak: "Tools now have a \"usesound\" and \"toolspeed\" variable which allows different tool (levels) to have different sounds and speeds." - - tweak: "Robots spawn with tools that are twice as fast as regular tools." - - rscadd: "Abductor agents now spawn with a toolbelt with specialized abductor tools that are very fast." - - tweak: "Abductor surgery tools are now much faster." - - rscadd: "Abductor (surgery) tools can now be constructed in R&D with a sufficiently high \"abductor\" research level." - - tweak: "The abductor multitool will now display what each wire does." - - rscadd: "Admin ghosts can now interact with wires and see what each wire does." - - rscadd: "Adds a set of unique tools for the Chief Engineer that he is given in a unique toolbelt at roundstart. These tools are faster and can be created in R&D with a sufficiently high R&D level." - - tweak: "The AI detector has been refactored to have much more robust AI tracking."