diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 8d112b4138..3bfc1fdf69 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -11,6 +11,8 @@
idle_power_usage = 40
interact_offline = 1
circuit = /obj/item/weapon/circuitboard/sleeper_console
+ clicksound = 'sound/machines/buttonbeep.ogg'
+ clickvol = 30
/obj/machinery/sleep_console/New()
..()
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index d5a81d5909..0072adb9fb 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -45,6 +45,8 @@
active_power_usage = 1000 //For heating/cooling rooms. 1000 joules equates to about 1 degree every 2 seconds for a single tile of air.
power_channel = ENVIRON
req_one_access = list(access_atmospherics, access_engine_equip)
+ clicksound = "button"
+ clickvol = 30
var/alarm_id = null
var/breach_detection = 1 // Whether to use automatic breach detection or not
var/frequency = 1439
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index fa71e66022..5bea355efd 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -8,6 +8,9 @@
use_power = 1
idle_power_usage = 10
active_power_usage = 2000
+ clicksound = "keyboard"
+ clickvol = 30
+
circuit = /obj/item/weapon/circuitboard/autolathe
var/datum/category_collection/autolathe/machine_recipes
var/list/stored_material = list(DEFAULT_WALL_MATERIAL = 0, "glass" = 0)
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index fb4c9b7923..2db50be533 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -16,6 +16,8 @@
active_power_usage = 200
buckle_lying = FALSE
buckle_dir = SOUTH
+ clicksound = 'sound/machines/buttonbeep.ogg'
+ clickvol = 30
var/temperature_archived
var/mob/living/carbon/occupant = null
diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm
index a9e5d7c154..8bd4341714 100644
--- a/code/game/machinery/jukebox.dm
+++ b/code/game/machinery/jukebox.dm
@@ -21,6 +21,7 @@
idle_power_usage = 10
active_power_usage = 100
circuit = /obj/item/weapon/circuitboard/jukebox
+ clicksound = 'sound/machines/buttonbeep.ogg'
// Vars for hacking
var/datum/wires/jukebox/wires = null
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index fa808ea051..f45872c2d8 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -10,6 +10,7 @@
var/on = 0
var/set_temperature = T0C + 20 //K
var/heating_power = 40000
+ clicksound = "switch"
/obj/machinery/space_heater/New()
..()
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index e1d81c878b..acc997f959 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -8,6 +8,7 @@
icon_state = "generic"
anchored = 1
density = 1
+ clicksound = "button"
var/icon_vend //Icon_state when vending
var/icon_deny //Icon_state when denying access
@@ -253,6 +254,7 @@
*/
/obj/machinery/vending/proc/pay_with_ewallet(var/obj/item/weapon/spacecash/ewallet/wallet)
visible_message("\The [usr] swipes \the [wallet] through \the [src].")
+ playsound(src.loc, 'sound/machines/id_swipe.ogg', 50, 1)
if(currently_vending.price > wallet.worth)
status_message = "Insufficient funds on chargecard."
status_error = 1
@@ -273,6 +275,7 @@
visible_message("\The [usr] swipes \the [I] through \the [src].")
else
visible_message("\The [usr] swipes \the [ID_container] through \the [src].")
+ playsound(src.loc, 'sound/machines/id_swipe.ogg', 50, 1)
var/datum/money_account/customer_account = get_account(I.associated_account_number)
if(!customer_account)
status_message = "Error: Unable to access account. Please contact technical support if problem persists."
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index 7f2a5ae47b..fd46233390 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -5,6 +5,9 @@
icon_state = "wm_10"
density = 1
anchored = 1.0
+ clicksound = "button"
+ clickvol = 40
+
circuit = /obj/item/weapon/circuitboard/washing
var/state = 1
//1 = empty, open door
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 8948a1ec11..278d911f0e 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -128,6 +128,11 @@ var/global/list/default_medbay_channels = list(
ui.set_initial_data(data)
ui.open()
+/obj/item/device/radio/CouldUseTopic(var/mob/user)
+ ..()
+ if(iscarbon(user))
+ playsound(src, "button", 10)
+
/obj/item/device/radio/proc/list_channels(var/mob/user)
return list_internal_channels(user)
diff --git a/code/modules/food/kitchen/microwave.dm b/code/modules/food/kitchen/microwave.dm
index 9978bca5ac..3498d21413 100644
--- a/code/modules/food/kitchen/microwave.dm
+++ b/code/modules/food/kitchen/microwave.dm
@@ -8,6 +8,8 @@
use_power = 1
idle_power_usage = 5
active_power_usage = 100
+ clicksound = "button"
+ clickvol = "30"
flags = OPENCONTAINER | NOREACT
circuit = /obj/item/weapon/circuitboard/microwave
var/operating = 0 // Is it on?
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 5195d1ed5a..60519e6f20 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -68,6 +68,7 @@
layer = ABOVE_TURF_LAYER
anchored = 1
use_power = 0
+ clicksound = "switch"
req_access = list(access_engine_equip)
var/area/area
var/areastring = null
@@ -535,7 +536,7 @@
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card
togglelock()
-
+
else if (istype(W, /obj/item/stack/cable_coil) && !terminal && opened && has_electronics!=2)
var/turf/T = loc
if(istype(T) && !T.is_plating())
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 00fe38541e..31c7be32ec 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -13,6 +13,7 @@
anchored = 1
use_power = 0
circuit = /obj/item/weapon/circuitboard/smes
+ clicksound = "switch"
var/capacity = 5e6 // maximum charge
var/charge = 1e6 // actual charge
diff --git a/code/modules/reagents/dispenser/dispenser2.dm b/code/modules/reagents/dispenser/dispenser2.dm
index b09c55d95b..b6dff6a3ea 100644
--- a/code/modules/reagents/dispenser/dispenser2.dm
+++ b/code/modules/reagents/dispenser/dispenser2.dm
@@ -3,6 +3,7 @@
desc = "Automagically fabricates chemicals from electricity."
icon = 'icons/obj/chemical.dmi'
icon_state = "dispenser"
+ clicksound = "switch"
var/list/spawn_cartridges = null // Set to a list of types to spawn one of each on New()
diff --git a/html/changelogs/Cerebulon - machinesounds.yml b/html/changelogs/Cerebulon - machinesounds.yml
new file mode 100644
index 0000000000..c6bfbfeaa3
--- /dev/null
+++ b/html/changelogs/Cerebulon - machinesounds.yml
@@ -0,0 +1,36 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Cerebulon
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - soundadd: "Added button sounds to various machines."
diff --git a/sound/machines/buttonbeep.ogg b/sound/machines/buttonbeep.ogg
new file mode 100644
index 0000000000..347ea13544
Binary files /dev/null and b/sound/machines/buttonbeep.ogg differ
diff --git a/sound/machines/id_swipe.ogg b/sound/machines/id_swipe.ogg
new file mode 100644
index 0000000000..4f00bb3610
Binary files /dev/null and b/sound/machines/id_swipe.ogg differ