diff --git a/code/__DEFINES/footsteps.dm b/code/__DEFINES/footsteps.dm
new file mode 100644
index 00000000000..e66d5186440
--- /dev/null
+++ b/code/__DEFINES/footsteps.dm
@@ -0,0 +1,66 @@
+#define FOOTSTEP_WOOD "wood"
+#define FOOTSTEP_FLOOR "floor"
+#define FOOTSTEP_PLATING "plating"
+#define FOOTSTEP_CARPET "carpet"
+#define FOOTSTEP_SAND "sand"
+#define FOOTSTEP_GRASS "grass"
+#define FOOTSTEP_WATER "water"
+#define FOOTSTEP_LAVA "lava"
+
+/*
+
+id = list(
+list(sounds),
+base volume,
+extra range addition
+)
+
+
+*/
+
+GLOBAL_LIST_INIT(footstep, list(
+ FOOTSTEP_WOOD = list(list(
+ 'sound/effects/footstep/wood1.ogg',
+ 'sound/effects/footstep/wood2.ogg',
+ 'sound/effects/footstep/wood3.ogg',
+ 'sound/effects/footstep/wood4.ogg',
+ 'sound/effects/footstep/wood5.ogg'), 100, 0),
+ FOOTSTEP_FLOOR = list(list(
+ 'sound/effects/footstep/floor1.ogg',
+ 'sound/effects/footstep/floor2.ogg',
+ 'sound/effects/footstep/floor3.ogg',
+ 'sound/effects/footstep/floor4.ogg',
+ 'sound/effects/footstep/floor5.ogg'), 75, -1),
+ FOOTSTEP_PLATING = list(list(
+ 'sound/effects/footstep/plating1.ogg',
+ 'sound/effects/footstep/plating2.ogg',
+ 'sound/effects/footstep/plating3.ogg',
+ 'sound/effects/footstep/plating4.ogg',
+ 'sound/effects/footstep/plating5.ogg'), 100, 1),
+ FOOTSTEP_CARPET = list(list(
+ 'sound/effects/footstep/carpet1.ogg',
+ 'sound/effects/footstep/carpet2.ogg',
+ 'sound/effects/footstep/carpet3.ogg',
+ 'sound/effects/footstep/carpet4.ogg',
+ 'sound/effects/footstep/carpet5.ogg'), 75, -1),
+ FOOTSTEP_SAND = list(list(
+ 'sound/effects/footstep/asteroid1.ogg',
+ 'sound/effects/footstep/asteroid2.ogg',
+ 'sound/effects/footstep/asteroid3.ogg',
+ 'sound/effects/footstep/asteroid4.ogg',
+ 'sound/effects/footstep/asteroid5.ogg'), 75, 0),
+ FOOTSTEP_GRASS = list(list(
+ 'sound/effects/footstep/grass1.ogg',
+ 'sound/effects/footstep/grass2.ogg',
+ 'sound/effects/footstep/grass3.ogg',
+ 'sound/effects/footstep/grass4.ogg'), 75, 0),
+ FOOTSTEP_WATER = list(list(
+ 'sound/effects/footstep/water1.ogg',
+ 'sound/effects/footstep/water2.ogg',
+ 'sound/effects/footstep/water3.ogg',
+ 'sound/effects/footstep/water4.ogg'), 100, 1),
+ FOOTSTEP_LAVA = list(list(
+ 'sound/effects/footstep/lava1.ogg',
+ 'sound/effects/footstep/lava2.ogg',
+ 'sound/effects/footstep/lava3.ogg'), 100, 0),
+))
\ No newline at end of file
diff --git a/code/datums/components/footstep.dm b/code/datums/components/footstep.dm
new file mode 100644
index 00000000000..2276e7cd274
--- /dev/null
+++ b/code/datums/components/footstep.dm
@@ -0,0 +1,39 @@
+/datum/component/footstep
+ var/steps = 0
+ var/volume
+ var/e_range
+
+/datum/component/footstep/Initialize(volume_ = 0.5, e_range_ = -1)
+ if(!isliving(parent))
+ return COMPONENT_INCOMPATIBLE
+ volume = volume_
+ e_range = e_range_
+ RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_footstep)
+
+/datum/component/footstep/proc/play_footstep()
+ var/turf/open/T = get_turf(parent)
+ if(!istype(T))
+ return
+ var/mob/living/LM = parent
+ var/v = volume
+ var/e = e_range
+ if(!T.footstep || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing)
+ return
+ if(iscarbon(LM))
+ var/mob/living/carbon/C = LM
+ if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG))
+ return
+ if(ishuman(C) && C.m_intent == MOVE_INTENT_WALK)
+ v /= 2
+ e -= 5
+ steps++
+ if(steps >= 6)
+ steps = 0
+ if(steps % 2)
+ return
+ if(!LM.has_gravity(T) && steps != 0) // don't need to step as often when you hop around
+ return
+ playsound(T, pick(GLOB.footstep[T.footstep][1]),
+ GLOB.footstep[T.footstep][2] * v,
+ TRUE,
+ GLOB.footstep[T.footstep][3] + e)
diff --git a/code/game/sound.dm b/code/game/sound.dm
index 39ed83a765c..6bd53aba7ab 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -160,9 +160,9 @@
if("gun_remove_empty_magazine")
soundin = pick('sound/weapons/gun_magazine_remove_empty_1.ogg', 'sound/weapons/gun_magazine_remove_empty_2.ogg', 'sound/weapons/gun_magazine_remove_empty_3.ogg', 'sound/weapons/gun_magazine_remove_empty_4.ogg')
if("gun_slide_lock")
- soundin = pick('sound/weapons/gun_slide_lock_1.ogg', 'sound/weapons/gun_slide_lock_2.ogg', 'sound/weapons/gun_slide_lock_3.ogg', 'sound/weapons/gun_slide_lock_4.ogg', 'sound/weapons/gun_slide_lock_5.ogg')
+ soundin = pick('sound/weapons/gun_slide_lock_1.ogg', 'sound/weapons/gun_slide_lock_2.ogg', 'sound/weapons/gun_slide_lock_3.ogg', 'sound/weapons/gun_slide_lock_4.ogg', 'sound/weapons/gun_slide_lock_5.ogg')
if("law")
- soundin = pick('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/binsult.ogg', 'sound/voice/bcreep.ogg')
+ soundin = pick('sound/voice/beepsky/god.ogg', 'sound/voice/beepsky/iamthelaw.ogg', 'sound/voice/beepsky/secureday.ogg', 'sound/voice/beepsky/radio.ogg', 'sound/voice/beepsky/insult.ogg', 'sound/voice/beepsky/creep.ogg')
if("honkbot_e")
- soundin = pick('sound/items/bikehorn.ogg', 'sound/items/AirHorn2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/items/AirHorn.ogg', 'sound/effects/reee.ogg', 'sound/items/WEEOO1.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bcreep.ogg','sound/magic/Fireball.ogg' ,'sound/effects/pray.ogg', 'sound/voice/hiss1.ogg','sound/machines/buzz-sigh.ogg', 'sound/machines/ping.ogg', 'sound/weapons/flashbang.ogg', 'sound/weapons/bladeslice.ogg')
+ soundin = pick('sound/items/bikehorn.ogg', 'sound/items/AirHorn2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/items/AirHorn.ogg', 'sound/effects/reee.ogg', 'sound/items/WEEOO1.ogg', 'sound/voice/beepsky/iamthelaw.ogg', 'sound/voice/beepsky/creep.ogg','sound/magic/Fireball.ogg' ,'sound/effects/pray.ogg', 'sound/voice/hiss1.ogg','sound/machines/buzz-sigh.ogg', 'sound/machines/ping.ogg', 'sound/weapons/flashbang.ogg', 'sound/weapons/bladeslice.ogg')
return soundin
diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm
index 8bbf8ed2224..77c658419c7 100644
--- a/code/game/turfs/open.dm
+++ b/code/game/turfs/open.dm
@@ -7,6 +7,8 @@
var/list/archdrops
var/wet
+ var/footstep = null
+
/turf/open/ComponentInitialize()
. = ..()
if(wet)
@@ -18,6 +20,7 @@
name = "floor"
icon = 'icons/turf/floors.dmi'
icon_state = "floor"
+ footstep = FOOTSTEP_FLOOR
tiled_dirt = TRUE
/turf/open/indestructible/Melt()
@@ -32,6 +35,7 @@
/turf/open/indestructible/sound
name = "squeaky floor"
+ footstep = null
var/sound
/turf/open/indestructible/sound/Entered(var/mob/AM)
@@ -46,6 +50,7 @@
icon_state = "necro1"
baseturfs = /turf/open/indestructible/necropolis
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
+ footstep = FOOTSTEP_LAVA
tiled_dirt = FALSE
/turf/open/indestructible/necropolis/Initialize()
@@ -82,6 +87,7 @@
name = "notebook floor"
desc = "A floor made of invulnerable notebook paper."
icon_state = "paperfloor"
+ footstep = null
tiled_dirt = FALSE
/turf/open/indestructible/binary
@@ -89,6 +95,7 @@
CanAtmosPass = ATMOS_PASS_NO
baseturfs = /turf/open/indestructible/binary
icon_state = "binary"
+ footstep = null
/turf/open/indestructible/airblock
icon_state = "bluespace"
@@ -100,6 +107,7 @@
desc = "Brass plating that gently radiates heat. For some reason, it reminds you of blood."
icon_state = "reebe"
baseturfs = /turf/open/indestructible/clock_spawn_room
+ footstep = FOOTSTEP_PLATING
/turf/open/indestructible/clock_spawn_room/Entered()
..()
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 582afb78006..777cbedd26a 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -6,6 +6,8 @@
icon = 'icons/turf/floors.dmi'
baseturfs = /turf/open/floor/plating
+ footstep = FOOTSTEP_FLOOR
+
var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default
var/icon_plating = "plating"
thermal_conductivity = 0.040
diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm
index 5dc12acb890..3d574d48b47 100644
--- a/code/game/turfs/simulated/floor/fancy_floor.dm
+++ b/code/game/turfs/simulated/floor/fancy_floor.dm
@@ -12,6 +12,7 @@
icon_state = "wood"
floor_tile = /obj/item/stack/tile/wood
broken_states = list("wood-broken", "wood-broken2", "wood-broken3", "wood-broken4", "wood-broken5", "wood-broken6", "wood-broken7")
+ footstep = FOOTSTEP_WOOD
tiled_dirt = FALSE
/turf/open/floor/wood/examine(mob/user)
@@ -69,6 +70,7 @@
broken_states = list("sand")
flags_1 = NONE
bullet_bounce_sound = null
+ footstep = FOOTSTEP_GRASS
var/ore_type = /obj/item/stack/ore/glass
var/turfverb = "uproot"
tiled_dirt = FALSE
@@ -98,6 +100,7 @@
initial_gas_mix = "o2=22;n2=82;TEMP=180"
slowdown = 2
bullet_sizzle = TRUE
+ footstep = FOOTSTEP_SAND
/turf/open/floor/grass/snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
@@ -130,6 +133,7 @@
ore_type = /obj/item/stack/ore/glass/basalt
turfverb = "dig up"
slowdown = 0
+ footstep = FOOTSTEP_SAND
/turf/open/floor/grass/fakebasalt/Initialize()
. = ..()
@@ -149,6 +153,7 @@
canSmoothWith = list(/turf/open/floor/carpet)
flags_1 = NONE
bullet_bounce_sound = null
+ footstep = FOOTSTEP_CARPET
tiled_dirt = FALSE
/turf/open/floor/carpet/examine(mob/user)
diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm
index 6916b61e0c8..f7bebce4685 100644
--- a/code/game/turfs/simulated/floor/misc_floor.dm
+++ b/code/game/turfs/simulated/floor/misc_floor.dm
@@ -144,6 +144,7 @@
desc = "Tightly-pressed brass tiles. They emit minute vibration."
icon_state = "plating"
baseturfs = /turf/open/floor/clockwork
+ footstep = FOOTSTEP_PLATING
var/uses_overlay = TRUE
var/obj/effect/clockwork/overlay/floor/realappearence
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index eeed31bd9ff..9d2adbdfba2 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -12,6 +12,8 @@
icon_state = "plating"
intact = FALSE
baseturfs = /turf/open/space
+ footstep = FOOTSTEP_PLATING
+
var/attachment_holes = TRUE
/turf/open/floor/plating/examine(mob/user)
diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm
index a57213a4f97..b8da9350a48 100644
--- a/code/game/turfs/simulated/floor/plating/asteroid.dm
+++ b/code/game/turfs/simulated/floor/plating/asteroid.dm
@@ -9,6 +9,7 @@
icon_state = "asteroid"
icon_plating = "asteroid"
postdig_icon_change = TRUE
+ footstep = FOOTSTEP_SAND
var/environment_type = "asteroid"
var/turf_type = /turf/open/floor/plating/asteroid //Because caves do whacky shit to revert to normal
var/floor_variance = 20 //probability floor has a different icon state
@@ -298,6 +299,7 @@
icon_state = "snow-ice"
icon_plating = "snow-ice"
environment_type = "snow_cavern"
+ footstep = FOOTSTEP_FLOOR
/turf/open/floor/plating/asteroid/snow/ice/burn_tile()
return FALSE
diff --git a/code/game/turfs/simulated/floor/plating/dirt.dm b/code/game/turfs/simulated/floor/plating/dirt.dm
index 25778a52248..dc865634f4b 100644
--- a/code/game/turfs/simulated/floor/plating/dirt.dm
+++ b/code/game/turfs/simulated/floor/plating/dirt.dm
@@ -8,6 +8,7 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
planetary_atmos = TRUE
attachment_holes = FALSE
+ footstep = FOOTSTEP_SAND
tiled_dirt = FALSE
/turf/open/floor/plating/dirt/dark
diff --git a/code/game/turfs/simulated/floor/plating/misc_plating.dm b/code/game/turfs/simulated/floor/plating/misc_plating.dm
index ebfba4f54c5..f86ab3c03c5 100644
--- a/code/game/turfs/simulated/floor/plating/misc_plating.dm
+++ b/code/game/turfs/simulated/floor/plating/misc_plating.dm
@@ -46,6 +46,7 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
planetary_atmos = TRUE
attachment_holes = FALSE
+ footstep = FOOTSTEP_SAND
tiled_dirt = FALSE
/turf/open/floor/plating/ashplanet/Initialize()
@@ -77,6 +78,7 @@
smooth_icon = 'icons/turf/floors/rocky_ash.dmi'
layer = MID_TURF_LAYER
canSmoothWith = list(/turf/open/floor/plating/ashplanet/rocky, /turf/closed)
+ footstep = FOOTSTEP_FLOOR
/turf/open/floor/plating/ashplanet/wateryrock
gender = PLURAL
@@ -84,6 +86,7 @@
smooth = null
icon_state = "wateryrock"
slowdown = 2
+ footstep = FOOTSTEP_FLOOR
/turf/open/floor/plating/ashplanet/wateryrock/Initialize()
icon_state = "[icon_state][rand(1, 9)]"
@@ -96,6 +99,7 @@
flags_1 = NONE
attachment_holes = FALSE
bullet_bounce_sound = null
+ footstep = FOOTSTEP_SAND
/turf/open/floor/plating/beach/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
return
@@ -136,6 +140,7 @@
gender = PLURAL
name = "iron sand"
desc = "Like sand, but more metal."
+ footstep = FOOTSTEP_SAND
/turf/open/floor/plating/ironsand/Initialize()
. = ..()
@@ -159,6 +164,7 @@
slowdown = 1
attachment_holes = FALSE
bullet_sizzle = TRUE
+ footstep = FOOTSTEP_FLOOR
/turf/open/floor/plating/ice/Initialize()
. = ..()
@@ -195,6 +201,7 @@
temperature = 180
attachment_holes = FALSE
planetary_atmos = TRUE
+ footstep = FOOTSTEP_SAND
/turf/open/floor/plating/snowed/cavern
initial_gas_mix = "o2=0;n2=82;plasma=24;TEMP=120"
diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm
index 34cea3d1b71..e677de8c5c8 100644
--- a/code/game/turfs/simulated/floor/reinf_floor.dm
+++ b/code/game/turfs/simulated/floor/reinf_floor.dm
@@ -6,6 +6,7 @@
thermal_conductivity = 0.025
heat_capacity = INFINITY
floor_tile = /obj/item/stack/rods
+ footstep = FOOTSTEP_PLATING
tiled_dirt = FALSE
/turf/open/floor/engine/examine(mob/user)
diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm
index b6f862cab57..b9e355b1229 100644
--- a/code/game/turfs/simulated/lava.dm
+++ b/code/game/turfs/simulated/lava.dm
@@ -12,6 +12,8 @@
light_color = LIGHT_COLOR_LAVA
bullet_bounce_sound = 'sound/items/welder2.ogg'
+ footstep = FOOTSTEP_LAVA
+
/turf/open/lava/ex_act(severity, target)
contents_explosion(severity, target)
diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm
index 777a9b15fbb..b46dd1d06c9 100644
--- a/code/game/turfs/simulated/water.dm
+++ b/code/game/turfs/simulated/water.dm
@@ -11,3 +11,4 @@
bullet_sizzle = TRUE
bullet_bounce_sound = null //needs a splashing sound one day.
+ footstep = FOOTSTEP_WATER
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 2899a190c3c..b8ae56d6150 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -795,7 +795,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
if("alarm")
target.playsound_local(source, 'sound/machines/alarm.ogg', 100, 0)
if("beepsky")
- target.playsound_local(source, 'sound/voice/bfreeze.ogg', 35, 0)
+ target.playsound_local(source, 'sound/voice/beepsky/freeze.ogg', 35, 0)
if("mech")
var/mech_dir = pick(GLOB.cardinals)
for(var/i in 1 to rand(4,9))
diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm
index e93cb23b30f..10c76fae92e 100644
--- a/code/modules/integrated_electronics/subtypes/output.dm
+++ b/code/modules/integrated_electronics/subtypes/output.dm
@@ -151,14 +151,14 @@
name = "securitron sound circuit"
desc = "Takes a sound name as an input, and will play said sound when pulsed. This circuit is similar to those used in Securitrons."
sounds = list(
- "creep" = 'sound/voice/bcreep.ogg',
- "criminal" = 'sound/voice/bcriminal.ogg',
- "freeze" = 'sound/voice/bfreeze.ogg',
- "god" = 'sound/voice/bgod.ogg',
- "i am the law" = 'sound/voice/biamthelaw.ogg',
- "insult" = 'sound/voice/binsult.ogg',
- "radio" = 'sound/voice/bradio.ogg',
- "secure day" = 'sound/voice/bsecureday.ogg',
+ "creep" = 'sound/voice/beepsky/creep.ogg',
+ "criminal" = 'sound/voice/beepsky/criminal.ogg',
+ "freeze" = 'sound/voice/beepsky/freeze.ogg',
+ "god" = 'sound/voice/beepsky/god.ogg',
+ "i am the law" = 'sound/voice/beepsky/iamthelaw.ogg',
+ "insult" = 'sound/voice/beepsky/insult.ogg',
+ "radio" = 'sound/voice/beepsky/radio.ogg',
+ "secure day" = 'sound/voice/beepsky/secureday.ogg',
)
spawn_flags = IC_SPAWN_RESEARCH
@@ -166,21 +166,21 @@
name = "medbot sound circuit"
desc = "Takes a sound name as an input, and will play said sound when pulsed. This circuit is often found in medical robots."
sounds = list(
- "surgeon" = 'sound/voice/msurgeon.ogg',
- "radar" = 'sound/voice/mradar.ogg',
- "feel better" = 'sound/voice/mfeelbetter.ogg',
- "patched up" = 'sound/voice/mpatchedup.ogg',
- "injured" = 'sound/voice/minjured.ogg',
- "insult" = 'sound/voice/minsult.ogg',
- "coming" = 'sound/voice/mcoming.ogg',
- "help" = 'sound/voice/mhelp.ogg',
- "live" = 'sound/voice/mlive.ogg',
- "lost" = 'sound/voice/mlost.ogg',
- "flies" = 'sound/voice/mflies.ogg',
- "catch" = 'sound/voice/mcatch.ogg',
- "delicious" = 'sound/voice/mdelicious.ogg',
- "apple" = 'sound/voice/mapple.ogg',
- "no" = 'sound/voice/mno.ogg',
+ "surgeon" = 'sound/voice/medbot/surgeon.ogg',
+ "radar" = 'sound/voice/medbot/radar.ogg',
+ "feel better" = 'sound/voice/medbot/feelbetter.ogg',
+ "patched up" = 'sound/voice/medbot/patchedup.ogg',
+ "injured" = 'sound/voice/medbot/injured.ogg',
+ "insult" = 'sound/voice/medbot/insult.ogg',
+ "coming" = 'sound/voice/medbot/coming.ogg',
+ "help" = 'sound/voice/medbot/help.ogg',
+ "live" = 'sound/voice/medbot/live.ogg',
+ "lost" = 'sound/voice/medbot/lost.ogg',
+ "flies" = 'sound/voice/medbot/flies.ogg',
+ "catch" = 'sound/voice/medbot/catch.ogg',
+ "delicious" = 'sound/voice/medbot/delicious.ogg',
+ "apple" = 'sound/voice/medbot/apple.ogg',
+ "no" = 'sound/voice/medbot/no.ogg',
)
spawn_flags = IC_SPAWN_RESEARCH
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index edd6d903df4..b1f53a69672 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -19,6 +19,9 @@
QDEL_NULL(dna)
GLOB.carbon_list -= src
+/mob/living/carbon/initialize_footstep()
+ AddComponent(/datum/component/footstep, 1, 2)
+
/mob/living/carbon/relaymove(mob/user, direction)
if(user in src.stomach_contents)
if(prob(40))
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 112c8b44383..d011d6ad7b5 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -9,7 +9,10 @@
diag_hud.add_to_hud(src)
faction += "[REF(src)]"
GLOB.mob_living_list += src
+ initialize_footstep()
+/mob/living/proc/initialize_footstep()
+ AddComponent(/datum/component/footstep)
/mob/living/prepare_huds()
..()
diff --git a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm
index 6fde8cede83..0378b0b9ee9 100644
--- a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm
+++ b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm
@@ -116,7 +116,7 @@
target = C
oldtarget_name = C.name
speak("Level [threatlevel] infraction alert!")
- playsound(src, pick('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg'), 50, FALSE)
+ playsound(src, pick('sound/voice/beepsky/criminal.ogg', 'sound/voice/beepsky/justice.ogg', 'sound/voice/beepsky/freeze.ogg'), 50, FALSE)
playsound(src,'sound/weapons/saberon.ogg',50,TRUE,-1)
visible_message("[src] ignites his energy swords!")
icon_state = "grievous-c"
diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
index e092a411dbc..d172aec83ff 100644
--- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm
+++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm
@@ -44,6 +44,8 @@
var/cell_type = /obj/item/stock_parts/cell
var/vest_type = /obj/item/clothing/suit/armor/vest
+ do_footstep = TRUE
+
/mob/living/simple_animal/bot/ed209/Initialize(mapload,created_name,created_lasercolor)
. = ..()
diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm
index 35f1d266f69..7167d87bde5 100644
--- a/code/modules/mob/living/simple_animal/bot/medbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/medbot.dm
@@ -261,7 +261,7 @@
if(assess_patient(H))
last_found = world.time
if((last_newpatient_speak + 300) < world.time) //Don't spam these messages!
- var/list/messagevoice = list("Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/mcoming.ogg',"Wait [H.name]! I want to help!" = 'sound/voice/mhelp.ogg',"[H.name], you appear to be injured!" = 'sound/voice/minjured.ogg')
+ var/list/messagevoice = list("Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/medbot/coming.ogg',"Wait [H.name]! I want to help!" = 'sound/voice/medbot/help.ogg',"[H.name], you appear to be injured!" = 'sound/voice/medbot/injured.ogg')
var/message = pick(messagevoice)
speak(message)
playsound(loc, messagevoice[message], 50, 0)
@@ -289,7 +289,7 @@
if(QDELETED(patient))
if(!shut_up && prob(1))
- var/list/messagevoice = list("Radar, put a mask on!" = 'sound/voice/mradar.ogg',"There's always a catch, and I'm the best there is." = 'sound/voice/mcatch.ogg',"I knew it, I should've been a plastic surgeon." = 'sound/voice/msurgeon.ogg',"What kind of medbay is this? Everyone's dropping like flies." = 'sound/voice/mflies.ogg',"Delicious!" = 'sound/voice/mdelicious.ogg')
+ var/list/messagevoice = list("Radar, put a mask on!" = 'sound/voice/medbot/radar.ogg',"There's always a catch, and I'm the best there is." = 'sound/voice/medbot/catch.ogg',"I knew it, I should've been a plastic surgeon." = 'sound/voice/medbot/surgeon.ogg',"What kind of medbay is this? Everyone's dropping like flies." = 'sound/voice/medbot/flies.ogg',"Delicious!" = 'sound/voice/medbot/delicious.ogg')
var/message = pick(messagevoice)
speak(message)
playsound(loc, messagevoice[message], 50, 0)
@@ -422,7 +422,7 @@
return
if(C.stat == DEAD || (C.has_trait(TRAIT_FAKEDEATH)))
- var/list/messagevoice = list("No! Stay with me!" = 'sound/voice/mno.ogg',"Live, damnit! LIVE!" = 'sound/voice/mlive.ogg',"I...I've never lost a patient before. Not today, I mean." = 'sound/voice/mlost.ogg')
+ var/list/messagevoice = list("No! Stay with me!" = 'sound/voice/medbot/no.ogg',"Live, damnit! LIVE!" = 'sound/voice/medbot/live.ogg',"I...I've never lost a patient before. Not today, I mean." = 'sound/voice/medbot/lost.ogg')
var/message = pick(messagevoice)
speak(message)
playsound(loc, messagevoice[message], 50, 0)
@@ -476,7 +476,7 @@
if(!reagent_id) //If they don't need any of that they're probably cured!
if(C.maxHealth - C.health < heal_threshold)
to_chat(src, "[C] is healthy! Your programming prevents you from injecting anyone without at least [heal_threshold] damage of any one type ([heal_threshold + 15] for oxygen damage.)")
- var/list/messagevoice = list("All patched up!" = 'sound/voice/mpatchedup.ogg',"An apple a day keeps me away." = 'sound/voice/mapple.ogg',"Feel better soon!" = 'sound/voice/mfeelbetter.ogg')
+ var/list/messagevoice = list("All patched up!" = 'sound/voice/medbot/patchedup.ogg',"An apple a day keeps me away." = 'sound/voice/medbot/apple.ogg',"Feel better soon!" = 'sound/voice/medbot/feelbetter.ogg')
var/message = pick(messagevoice)
speak(message)
playsound(loc, messagevoice[message], 50, 0)
@@ -540,7 +540,7 @@
drop_part(robot_arm, Tsec)
if(emagged && prob(25))
- playsound(loc, 'sound/voice/minsult.ogg', 50, 0)
+ playsound(loc, 'sound/voice/medbot/insult.ogg', 50, 0)
do_sparks(3, TRUE, src)
..()
diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm
index 862435fde7a..f94d4d0a773 100644
--- a/code/modules/mob/living/simple_animal/bot/secbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/secbot.dm
@@ -390,7 +390,7 @@ Auto Patrol: []"},
target = C
oldtarget_name = C.name
speak("Level [threatlevel] infraction alert!")
- playsound(src, pick('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg'), 50, FALSE)
+ playsound(loc, pick('sound/voice/beepsky/criminal.ogg', 'sound/voice/beepsky/justice.ogg', 'sound/voice/beepsky/freeze.ogg'), 50, FALSE)
visible_message("[src] points at [C.name]!")
mode = BOT_HUNT
INVOKE_ASYNC(src, .proc/handle_automated_action)
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 75e7b668ea5..9a08276999c 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -32,6 +32,8 @@
gold_core_spawnable = FRIENDLY_SPAWN
collar_type = "cat"
+ do_footstep = TRUE
+
/mob/living/simple_animal/pet/cat/Initialize()
. = ..()
verbs += /mob/living/proc/lay_down
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index 99c598f95f7..abe275cddf7 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -14,6 +14,8 @@
speak_chance = 1
turns_per_move = 10
+ do_footstep = TRUE
+
//Corgis and pugs are now under one dog subtype
/mob/living/simple_animal/pet/dog/corgi
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index 9423cf9df6f..564fae48adf 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -30,6 +30,8 @@
blood_volume = BLOOD_VOLUME_NORMAL
var/obj/item/udder/udder = null
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/retaliate/goat/Initialize()
udder = new()
. = ..()
@@ -130,6 +132,8 @@
gold_core_spawnable = FRIENDLY_SPAWN
blood_volume = BLOOD_VOLUME_NORMAL
+ do_footstep = TRUE
+
/mob/living/simple_animal/cow/Initialize()
udder = new()
. = ..()
@@ -206,6 +210,8 @@
mob_size = MOB_SIZE_TINY
gold_core_spawnable = FRIENDLY_SPAWN
+ do_footstep = TRUE
+
/mob/living/simple_animal/chick/Initialize()
. = ..()
pixel_x = rand(-6, 6)
@@ -262,6 +268,8 @@
gold_core_spawnable = FRIENDLY_SPAWN
var/static/chicken_count = 0
+ do_footstep = TRUE
+
/mob/living/simple_animal/chicken/Initialize()
. = ..()
if(!body_color)
diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm
index a0e9f08a823..28b66c26ee1 100644
--- a/code/modules/mob/living/simple_animal/friendly/fox.dm
+++ b/code/modules/mob/living/simple_animal/friendly/fox.dm
@@ -19,6 +19,8 @@
response_harm = "kicks"
gold_core_spawnable = FRIENDLY_SPAWN
+ do_footstep = TRUE
+
//Captain fox
/mob/living/simple_animal/pet/fox/Renault
name = "Renault"
diff --git a/code/modules/mob/living/simple_animal/friendly/gondola.dm b/code/modules/mob/living/simple_animal/friendly/gondola.dm
index 3d2d9bc1242..78768219de5 100644
--- a/code/modules/mob/living/simple_animal/friendly/gondola.dm
+++ b/code/modules/mob/living/simple_animal/friendly/gondola.dm
@@ -26,6 +26,8 @@
health = 200
del_on_death = TRUE
+ //Gondolas don't make footstep sounds
+
/mob/living/simple_animal/pet/gondola/Initialize()
. = ..()
CreateGondola()
diff --git a/code/modules/mob/living/simple_animal/friendly/penguin.dm b/code/modules/mob/living/simple_animal/friendly/penguin.dm
index 7f69be2d96b..9835840dbfe 100644
--- a/code/modules/mob/living/simple_animal/friendly/penguin.dm
+++ b/code/modules/mob/living/simple_animal/friendly/penguin.dm
@@ -15,6 +15,8 @@
turns_per_move = 10
icon = 'icons/mob/penguins.dmi'
+ do_footstep = TRUE
+
/mob/living/simple_animal/pet/penguin/emperor
name = "Emperor penguin"
real_name = "penguin"
diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm
index f112b3f98e9..324fa107fab 100644
--- a/code/modules/mob/living/simple_animal/friendly/sloth.dm
+++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm
@@ -23,6 +23,8 @@
speed = 10
glide_size = 2
+ do_footstep = TRUE
+
//Cargo Sloth
/mob/living/simple_animal/sloth/paperwork
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index 762b662de71..3d92912f9c9 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -36,6 +36,8 @@
death_sound = 'sound/voice/hiss6.ogg'
deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..."
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/alien/drone
name = "alien drone"
icon_state = "aliend"
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
index b09b3e768b2..acd8da9618d 100644
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bear.dm
@@ -39,6 +39,8 @@
faction = list("russian")
gold_core_spawnable = HOSTILE_SPAWN
+ do_footstep = TRUE
+
//SPACE BEARS! SQUEEEEEEEE~ OW! FUCK! IT BIT MY HAND OFF!!
/mob/living/simple_animal/hostile/bear/Hudson
name = "Hudson"
diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm
index 1b766a51d61..d31af79c19f 100644
--- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm
@@ -23,6 +23,8 @@
attack_sound = 'sound/hallucinations/growl1.ogg'
var/list/copies = list()
+ do_footstep = TRUE
+
//Summon Ability
//Lets the wizard summon his art to fight for him
diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm
index d267da624fd..4e7cb0ac70a 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithless.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm
@@ -34,6 +34,8 @@
faction = list("faithless")
gold_core_spawnable = HOSTILE_SPAWN
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/faithless/AttackingTarget()
. = ..()
if(. && prob(12) && iscarbon(target))
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 163213c16f1..cfdf302d6bf 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -52,6 +52,8 @@
var/datum/action/innate/spider/lay_web/lay_web
var/directive = "" //Message passed down to children, to relay the creator's orders
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/poison/giant_spider/Initialize()
. = ..()
lay_web = new
diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
index 6d7983fc878..5d1db8d35e1 100644
--- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
+++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm
@@ -38,6 +38,8 @@
var/list/gorilla_overlays[GORILLA_TOTAL_LAYERS]
var/oogas = 0
+ do_footstep = TRUE
+
// Gorillas like to dismember limbs from unconcious mobs.
// Returns null when the target is not an unconcious carbon mob; a list of limbs (possibly empty) otherwise.
/mob/living/simple_animal/hostile/gorilla/proc/target_bodyparts(atom/the_target)
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
index 3f0c468d264..93284fe6664 100644
--- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
@@ -29,6 +29,8 @@
del_on_death = 1
loot = list(/obj/effect/decal/cleanable/robot_debris)
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/hivebot/Initialize()
. = ..()
deathmessage = "[src] blows apart!"
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm
index ea5b7e5a1bb..d1e8f1f49ed 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm
@@ -26,6 +26,8 @@
var/hop_cooldown = 0 //Strictly for player controlled leapers
var/projectile_ready = FALSE //Stopping AI leapers from firing whenever they want, and only doing it after a hop has finished instead
+ do_footstep = TRUE
+
/obj/item/projectile/leaper
name = "leaper bubble"
icon_state = "leaper"
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm
index 616c9025b93..607db5d54ff 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm
@@ -24,6 +24,8 @@
projectilesound = 'sound/weapons/pierce.ogg'
alpha = 50
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/jungle/mega_arachnid/Life()
..()
if(target && ranged_cooldown > world.time && iscarbon(target))
diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm
index 1fde4a9cd44..29f48c72951 100644
--- a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm
+++ b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm
@@ -31,6 +31,8 @@
var/attack_state = MOOK_ATTACK_NEUTRAL
var/struck_target_leap = FALSE
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/jungle/mook/CanPass(atom/movable/O)
if(istype(O, /mob/living/simple_animal/hostile/jungle/mook))
var/mob/living/simple_animal/hostile/jungle/mook/M = O
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
index 3895951b3c1..97dede3d2fc 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
@@ -53,6 +53,8 @@ Difficulty: Medium
deathmessage = "falls to the ground, decaying into glowing particles."
death_sound = "bodyfall"
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/guidance
guidance = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
index 08ced3a6dbe..3f68c15dc2b 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
@@ -52,6 +52,8 @@ Difficulty: Hard
deathmessage = "sinks into a pool of blood, fleeing the battle. You've won, for now... "
death_sound = 'sound/magic/enter_blood.ogg'
+ do_footstep = TRUE
+
/obj/item/gps/internal/bubblegum
icon_state = null
gpstag = "Bloody Signal"
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
index 28e8260bed6..fac14eeb0ef 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm
@@ -63,6 +63,8 @@ Difficulty: Medium
death_sound = 'sound/magic/demon_dies.ogg'
var/datum/action/small_sprite/smallsprite = new/datum/action/small_sprite/drake()
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/megafauna/dragon/Initialize()
smallsprite.Grant(src)
. = ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
index 0c660dd1cd4..f74f9a436c1 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm
@@ -33,6 +33,8 @@
var/pre_attack_icon = "Goliath_preattack"
loot = list(/obj/item/stack/sheet/animalhide/goliath_hide)
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/asteroid/goliath/Life()
. = ..()
handle_preattack()
diff --git a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm
index b170ae05747..543ffe6131c 100644
--- a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm
+++ b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm
@@ -31,6 +31,8 @@
speak = list("Stop resisting!", "I AM THE LAW!", "Face the wrath of the golden bolt!", "Stop breaking the law, asshole!")
search_objects = 1
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/nanotrasen/Aggro()
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
index 0991c8922ae..db02919d323 100644
--- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm
+++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm
@@ -34,7 +34,7 @@
/mob/living/simple_animal/hostile/netherworld/migo/Initialize()
. = ..()
- migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/change_jaws.ogg', 'sound/items/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/carhorn.ogg', 'sound/items/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/megaphone.ogg', 'sound/items/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/wirecutter.ogg', 'sound/items/welder.ogg', 'sound/items/zip.ogg', 'sound/items/rped.ogg', 'sound/items/ratchet.ogg', 'sound/items/polaroid1.ogg', 'sound/items/pshoom.ogg', 'sound/items/airhorn.ogg', 'sound/items/geiger/high1.ogg', 'sound/items/geiger/high2.ogg', 'sound/voice/bcreep.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/ed209_20sec.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss6.ogg', 'sound/voice/mpatchedup.ogg', 'sound/voice/mfeelbetter.ogg', 'sound/voice/human/manlaugh1.ogg', 'sound/voice/human/womanlaugh.ogg', 'sound/weapons/sear.ogg', 'sound/ambience/antag/clockcultalr.ogg', 'sound/ambience/antag/ling_aler.ogg', 'sound/ambience/antag/tatoralert.ogg', 'sound/ambience/antag/monkey.ogg', 'sound/mecha/nominal.ogg', 'sound/mecha/weapdestr.ogg', 'sound/mecha/critdestr.ogg', 'sound/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles.ogg', 'sound/effects/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clockcult_gateway_disrupted.ogg', 'sound/effects/clownstep2.ogg', 'sound/effects/curse1.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosion_distant.ogg', 'sound/effects/explosionfar.ogg', 'sound/effects/explosion1.ogg', 'sound/effects/grillehit.ogg', 'sound/effects/genetics.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/hyperspace_begin.ogg', 'sound/effects/hyperspace_end.ogg', 'sound/effects/his_grace_awaken.ogg', 'sound/effects/pai_boot.ogg', 'sound/effects/phasein.ogg', 'sound/effects/picaxe1.ogg', 'sound/effects/ratvar_reveal.ogg', 'sound/effects/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg', 'sound/misc/bloblarm.ogg', 'sound/misc/airraid.ogg', 'sound/misc/bang.ogg','sound/misc/highlander.ogg', 'sound/misc/interference.ogg', 'sound/misc/notice1.ogg', 'sound/misc/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/misc/splort.ogg', 'sound/weapons/armbomb.ogg', 'sound/weapons/beam_sniper.ogg', 'sound/weapons/chainsawhit.ogg', 'sound/weapons/emitter.ogg', 'sound/weapons/emitter2.ogg', 'sound/weapons/blade1.ogg', 'sound/weapons/bladeslice.ogg', 'sound/weapons/blastcannon.ogg', 'sound/weapons/blaster.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/weapons/circsawhit.ogg', 'sound/weapons/cqchit2.ogg', 'sound/weapons/drill.ogg', 'sound/weapons/genhit1.ogg', 'sound/weapons/gunshot_silenced.ogg', 'sound/weapons/gunshot2.ogg', 'sound/weapons/handcuffs.ogg', 'sound/weapons/homerun.ogg', 'sound/weapons/kenetic_accel.ogg', 'sound/machines/clockcult/steam_whoosh.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock.ogg', 'sound/machines/airlock_alien_prying.ogg', 'sound/machines/airlockclose.ogg', 'sound/machines/airlockforced.ogg', 'sound/machines/airlockopen.ogg', 'sound/machines/alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/boltsdown.ogg', 'sound/machines/boltsup.ogg', 'sound/machines/buzz-sigh.ogg', 'sound/machines/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/cryo_warning.ogg', 'sound/machines/defib_charge.ogg', 'sound/machines/defib_failed.ogg', 'sound/machines/defib_ready.ogg', 'sound/machines/defib_zap.ogg', 'sound/machines/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door_close.ogg', 'sound/machines/door_open.ogg', 'sound/machines/engine_alert1.ogg', 'sound/machines/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/machines/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/machines/signal.ogg', 'sound/machines/synth_no.ogg', 'sound/machines/synth_yes.ogg', 'sound/machines/terminal_alert.ogg', 'sound/machines/triple_beep.ogg', 'sound/machines/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', 'sound/ai/outbreak5.ogg', 'sound/ai/outbreak7.ogg', 'sound/ai/poweroff.ogg', 'sound/ai/radiation.ogg', 'sound/ai/shuttlecalled.ogg', 'sound/ai/shuttledock.ogg', 'sound/ai/shuttlerecalled.ogg', 'sound/ai/aimalf.ogg') //hahahaha fuck you code divers
+ migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/change_jaws.ogg', 'sound/items/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/carhorn.ogg', 'sound/items/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/megaphone.ogg', 'sound/items/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/wirecutter.ogg', 'sound/items/welder.ogg', 'sound/items/zip.ogg', 'sound/items/rped.ogg', 'sound/items/ratchet.ogg', 'sound/items/polaroid1.ogg', 'sound/items/pshoom.ogg', 'sound/items/airhorn.ogg', 'sound/items/geiger/high1.ogg', 'sound/items/geiger/high2.ogg', 'sound/voice/beepsky/creep.ogg', 'sound/voice/beepsky/iamthelaw.ogg', 'sound/voice/ed209_20sec.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss6.ogg', 'sound/voice/medbot/patchedup.ogg', 'sound/voice/medbot/feelbetter.ogg', 'sound/voice/human/manlaugh1.ogg', 'sound/voice/human/womanlaugh.ogg', 'sound/weapons/sear.ogg', 'sound/ambience/antag/clockcultalr.ogg', 'sound/ambience/antag/ling_aler.ogg', 'sound/ambience/antag/tatoralert.ogg', 'sound/ambience/antag/monkey.ogg', 'sound/mecha/nominal.ogg', 'sound/mecha/weapdestr.ogg', 'sound/mecha/critdestr.ogg', 'sound/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles.ogg', 'sound/effects/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clockcult_gateway_disrupted.ogg', 'sound/effects/clownstep2.ogg', 'sound/effects/curse1.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosion_distant.ogg', 'sound/effects/explosionfar.ogg', 'sound/effects/explosion1.ogg', 'sound/effects/grillehit.ogg', 'sound/effects/genetics.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/hyperspace_begin.ogg', 'sound/effects/hyperspace_end.ogg', 'sound/effects/his_grace_awaken.ogg', 'sound/effects/pai_boot.ogg', 'sound/effects/phasein.ogg', 'sound/effects/picaxe1.ogg', 'sound/effects/ratvar_reveal.ogg', 'sound/effects/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg', 'sound/misc/bloblarm.ogg', 'sound/misc/airraid.ogg', 'sound/misc/bang.ogg','sound/misc/highlander.ogg', 'sound/misc/interference.ogg', 'sound/misc/notice1.ogg', 'sound/misc/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/misc/splort.ogg', 'sound/weapons/armbomb.ogg', 'sound/weapons/beam_sniper.ogg', 'sound/weapons/chainsawhit.ogg', 'sound/weapons/emitter.ogg', 'sound/weapons/emitter2.ogg', 'sound/weapons/blade1.ogg', 'sound/weapons/bladeslice.ogg', 'sound/weapons/blastcannon.ogg', 'sound/weapons/blaster.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/weapons/circsawhit.ogg', 'sound/weapons/cqchit2.ogg', 'sound/weapons/drill.ogg', 'sound/weapons/genhit1.ogg', 'sound/weapons/gunshot_silenced.ogg', 'sound/weapons/gunshot2.ogg', 'sound/weapons/handcuffs.ogg', 'sound/weapons/homerun.ogg', 'sound/weapons/kenetic_accel.ogg', 'sound/machines/clockcult/steam_whoosh.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock.ogg', 'sound/machines/airlock_alien_prying.ogg', 'sound/machines/airlockclose.ogg', 'sound/machines/airlockforced.ogg', 'sound/machines/airlockopen.ogg', 'sound/machines/alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/boltsdown.ogg', 'sound/machines/boltsup.ogg', 'sound/machines/buzz-sigh.ogg', 'sound/machines/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/cryo_warning.ogg', 'sound/machines/defib_charge.ogg', 'sound/machines/defib_failed.ogg', 'sound/machines/defib_ready.ogg', 'sound/machines/defib_zap.ogg', 'sound/machines/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door_close.ogg', 'sound/machines/door_open.ogg', 'sound/machines/engine_alert1.ogg', 'sound/machines/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/machines/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/machines/signal.ogg', 'sound/machines/synth_no.ogg', 'sound/machines/synth_yes.ogg', 'sound/machines/terminal_alert.ogg', 'sound/machines/triple_beep.ogg', 'sound/machines/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', 'sound/ai/outbreak5.ogg', 'sound/ai/outbreak7.ogg', 'sound/ai/poweroff.ogg', 'sound/ai/radiation.ogg', 'sound/ai/shuttlecalled.ogg', 'sound/ai/shuttledock.ogg', 'sound/ai/shuttlerecalled.ogg', 'sound/ai/aimalf.ogg') //hahahaha fuck you code divers
/mob/living/simple_animal/hostile/netherworld/migo/say(message)
..()
diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm
index 9939834fecb..be40518d703 100644
--- a/code/modules/mob/living/simple_animal/hostile/pirate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm
@@ -41,6 +41,8 @@
attack_sound = 'sound/weapons/blade1.ogg'
var/obj/effect/light_emitter/red_energy_sword/sord
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/pirate/melee/space
name = "Space Pirate Swashbuckler"
icon_state = "piratespace"
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
index cd7acc6f5a1..cd978b70665 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
@@ -33,6 +33,8 @@
maxbodytemp = 370
unsuitable_atmos_damage = 10
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/retaliate/clown/handle_temperature_damage()
if(bodytemperature < minbodytemp)
adjustBruteLoss(10)
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm
index a1325037860..c50ace8871c 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm
@@ -24,6 +24,8 @@
environment_smash = ENVIRONMENT_SMASH_NONE
del_on_death = 0
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace //this should be in a different file
name = "Nanotrasen Private Security Officer"
desc = "An officer part of Nanotrasen's private security force."
diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm
index 1b4067196d0..82ce5c8b3e0 100644
--- a/code/modules/mob/living/simple_animal/hostile/russian.dm
+++ b/code/modules/mob/living/simple_animal/hostile/russian.dm
@@ -29,6 +29,8 @@
status_flags = CANPUSH
del_on_death = 1
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/russian/ranged
icon_state = "russianranged"
diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
index fca6afd4a67..d0ae01f4436 100644
--- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm
+++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
@@ -34,6 +34,8 @@
del_on_death = 1
loot = list(/obj/effect/decal/remains/human)
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/skeleton/eskimo
name = "undead eskimo"
desc = "The reanimated remains of some poor traveler."
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index 6ef1741a341..2c45743c55c 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -49,6 +49,8 @@
dodging = TRUE
rapid_melee = 2
+ do_footstep = TRUE
+
///////////////Melee////////////
/mob/living/simple_animal/hostile/syndicate/space
diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm
index 921bd5959be..a946cbf45b0 100644
--- a/code/modules/mob/living/simple_animal/hostile/wizard.dm
+++ b/code/modules/mob/living/simple_animal/hostile/wizard.dm
@@ -37,6 +37,8 @@
var/next_cast = 0
+ do_footstep = TRUE
+
/mob/living/simple_animal/hostile/wizard/Initialize()
. = ..()
fireball = new /obj/effect/proc_holder/spell/aimed/fireball
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 44104070e8d..435ca40066f 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -91,6 +91,8 @@
var/my_z // I don't want to confuse this with client registered_z
+ var/do_footstep = FALSE
+
/mob/living/simple_animal/Initialize()
. = ..()
GLOB.simple_animals[AIStatus] += src
@@ -118,6 +120,10 @@
return ..()
+/mob/living/simple_animal/initialize_footstep()
+ if(do_footstep)
+ ..()
+
/mob/living/simple_animal/updatehealth()
..()
health = CLAMP(health, 0, maxHealth)
diff --git a/sound/effects/footstep/asteroid1.ogg b/sound/effects/footstep/asteroid1.ogg
new file mode 100644
index 00000000000..1cb215dc782
Binary files /dev/null and b/sound/effects/footstep/asteroid1.ogg differ
diff --git a/sound/effects/footstep/asteroid2.ogg b/sound/effects/footstep/asteroid2.ogg
new file mode 100644
index 00000000000..331d0ef2417
Binary files /dev/null and b/sound/effects/footstep/asteroid2.ogg differ
diff --git a/sound/effects/footstep/asteroid3.ogg b/sound/effects/footstep/asteroid3.ogg
new file mode 100644
index 00000000000..90fbf251a0e
Binary files /dev/null and b/sound/effects/footstep/asteroid3.ogg differ
diff --git a/sound/effects/footstep/asteroid4.ogg b/sound/effects/footstep/asteroid4.ogg
new file mode 100644
index 00000000000..186ff17a439
Binary files /dev/null and b/sound/effects/footstep/asteroid4.ogg differ
diff --git a/sound/effects/footstep/asteroid5.ogg b/sound/effects/footstep/asteroid5.ogg
new file mode 100644
index 00000000000..0ea4c962d0d
Binary files /dev/null and b/sound/effects/footstep/asteroid5.ogg differ
diff --git a/sound/effects/footstep/carpet1.ogg b/sound/effects/footstep/carpet1.ogg
new file mode 100644
index 00000000000..2735a9bf3dc
Binary files /dev/null and b/sound/effects/footstep/carpet1.ogg differ
diff --git a/sound/effects/footstep/carpet2.ogg b/sound/effects/footstep/carpet2.ogg
new file mode 100644
index 00000000000..07e5f2320aa
Binary files /dev/null and b/sound/effects/footstep/carpet2.ogg differ
diff --git a/sound/effects/footstep/carpet3.ogg b/sound/effects/footstep/carpet3.ogg
new file mode 100644
index 00000000000..edb0193f6e2
Binary files /dev/null and b/sound/effects/footstep/carpet3.ogg differ
diff --git a/sound/effects/footstep/carpet4.ogg b/sound/effects/footstep/carpet4.ogg
new file mode 100644
index 00000000000..c9598e2b736
Binary files /dev/null and b/sound/effects/footstep/carpet4.ogg differ
diff --git a/sound/effects/footstep/carpet5.ogg b/sound/effects/footstep/carpet5.ogg
new file mode 100644
index 00000000000..076818323ae
Binary files /dev/null and b/sound/effects/footstep/carpet5.ogg differ
diff --git a/sound/effects/footstep/catwalk1.ogg b/sound/effects/footstep/catwalk1.ogg
new file mode 100644
index 00000000000..5d6ad7b4a00
Binary files /dev/null and b/sound/effects/footstep/catwalk1.ogg differ
diff --git a/sound/effects/footstep/catwalk2.ogg b/sound/effects/footstep/catwalk2.ogg
new file mode 100644
index 00000000000..07a624dbe49
Binary files /dev/null and b/sound/effects/footstep/catwalk2.ogg differ
diff --git a/sound/effects/footstep/catwalk3.ogg b/sound/effects/footstep/catwalk3.ogg
new file mode 100644
index 00000000000..acff22e3864
Binary files /dev/null and b/sound/effects/footstep/catwalk3.ogg differ
diff --git a/sound/effects/footstep/catwalk4.ogg b/sound/effects/footstep/catwalk4.ogg
new file mode 100644
index 00000000000..7235a6b9feb
Binary files /dev/null and b/sound/effects/footstep/catwalk4.ogg differ
diff --git a/sound/effects/footstep/catwalk5.ogg b/sound/effects/footstep/catwalk5.ogg
new file mode 100644
index 00000000000..c33f248acd6
Binary files /dev/null and b/sound/effects/footstep/catwalk5.ogg differ
diff --git a/sound/effects/footstep/floor1.ogg b/sound/effects/footstep/floor1.ogg
new file mode 100644
index 00000000000..1e3e1558399
Binary files /dev/null and b/sound/effects/footstep/floor1.ogg differ
diff --git a/sound/effects/footstep/floor2.ogg b/sound/effects/footstep/floor2.ogg
new file mode 100644
index 00000000000..cce5a25d829
Binary files /dev/null and b/sound/effects/footstep/floor2.ogg differ
diff --git a/sound/effects/footstep/floor3.ogg b/sound/effects/footstep/floor3.ogg
new file mode 100644
index 00000000000..16ab67f729c
Binary files /dev/null and b/sound/effects/footstep/floor3.ogg differ
diff --git a/sound/effects/footstep/floor4.ogg b/sound/effects/footstep/floor4.ogg
new file mode 100644
index 00000000000..9ef15430ff8
Binary files /dev/null and b/sound/effects/footstep/floor4.ogg differ
diff --git a/sound/effects/footstep/floor5.ogg b/sound/effects/footstep/floor5.ogg
new file mode 100644
index 00000000000..0f6a66057de
Binary files /dev/null and b/sound/effects/footstep/floor5.ogg differ
diff --git a/sound/effects/footstep/grass1.ogg b/sound/effects/footstep/grass1.ogg
new file mode 100644
index 00000000000..357547cd77a
Binary files /dev/null and b/sound/effects/footstep/grass1.ogg differ
diff --git a/sound/effects/footstep/grass2.ogg b/sound/effects/footstep/grass2.ogg
new file mode 100644
index 00000000000..75bf8657e8d
Binary files /dev/null and b/sound/effects/footstep/grass2.ogg differ
diff --git a/sound/effects/footstep/grass3.ogg b/sound/effects/footstep/grass3.ogg
new file mode 100644
index 00000000000..04f82872b1d
Binary files /dev/null and b/sound/effects/footstep/grass3.ogg differ
diff --git a/sound/effects/footstep/grass4.ogg b/sound/effects/footstep/grass4.ogg
new file mode 100644
index 00000000000..6d736f2fb2d
Binary files /dev/null and b/sound/effects/footstep/grass4.ogg differ
diff --git a/sound/effects/footstep/lava1.ogg b/sound/effects/footstep/lava1.ogg
new file mode 100644
index 00000000000..e26dbaf8bda
Binary files /dev/null and b/sound/effects/footstep/lava1.ogg differ
diff --git a/sound/effects/footstep/lava2.ogg b/sound/effects/footstep/lava2.ogg
new file mode 100644
index 00000000000..90b73f840b2
Binary files /dev/null and b/sound/effects/footstep/lava2.ogg differ
diff --git a/sound/effects/footstep/lava3.ogg b/sound/effects/footstep/lava3.ogg
new file mode 100644
index 00000000000..34363815106
Binary files /dev/null and b/sound/effects/footstep/lava3.ogg differ
diff --git a/sound/effects/footstep/plating1.ogg b/sound/effects/footstep/plating1.ogg
new file mode 100644
index 00000000000..0df770e6638
Binary files /dev/null and b/sound/effects/footstep/plating1.ogg differ
diff --git a/sound/effects/footstep/plating2.ogg b/sound/effects/footstep/plating2.ogg
new file mode 100644
index 00000000000..314b9133d25
Binary files /dev/null and b/sound/effects/footstep/plating2.ogg differ
diff --git a/sound/effects/footstep/plating3.ogg b/sound/effects/footstep/plating3.ogg
new file mode 100644
index 00000000000..5c571d77eb6
Binary files /dev/null and b/sound/effects/footstep/plating3.ogg differ
diff --git a/sound/effects/footstep/plating4.ogg b/sound/effects/footstep/plating4.ogg
new file mode 100644
index 00000000000..5953262764b
Binary files /dev/null and b/sound/effects/footstep/plating4.ogg differ
diff --git a/sound/effects/footstep/plating5.ogg b/sound/effects/footstep/plating5.ogg
new file mode 100644
index 00000000000..4676a637a6d
Binary files /dev/null and b/sound/effects/footstep/plating5.ogg differ
diff --git a/sound/effects/footstep/water1.ogg b/sound/effects/footstep/water1.ogg
new file mode 100644
index 00000000000..f22cbf28482
Binary files /dev/null and b/sound/effects/footstep/water1.ogg differ
diff --git a/sound/effects/footstep/water2.ogg b/sound/effects/footstep/water2.ogg
new file mode 100644
index 00000000000..e2a47650c63
Binary files /dev/null and b/sound/effects/footstep/water2.ogg differ
diff --git a/sound/effects/footstep/water3.ogg b/sound/effects/footstep/water3.ogg
new file mode 100644
index 00000000000..97ce152a5ce
Binary files /dev/null and b/sound/effects/footstep/water3.ogg differ
diff --git a/sound/effects/footstep/water4.ogg b/sound/effects/footstep/water4.ogg
new file mode 100644
index 00000000000..5778a52560d
Binary files /dev/null and b/sound/effects/footstep/water4.ogg differ
diff --git a/sound/effects/footstep/wood1.ogg b/sound/effects/footstep/wood1.ogg
new file mode 100644
index 00000000000..c76fc423fc2
Binary files /dev/null and b/sound/effects/footstep/wood1.ogg differ
diff --git a/sound/effects/footstep/wood2.ogg b/sound/effects/footstep/wood2.ogg
new file mode 100644
index 00000000000..71dc1aa9679
Binary files /dev/null and b/sound/effects/footstep/wood2.ogg differ
diff --git a/sound/effects/footstep/wood3.ogg b/sound/effects/footstep/wood3.ogg
new file mode 100644
index 00000000000..bf86889006e
Binary files /dev/null and b/sound/effects/footstep/wood3.ogg differ
diff --git a/sound/effects/footstep/wood4.ogg b/sound/effects/footstep/wood4.ogg
new file mode 100644
index 00000000000..44734425ce6
Binary files /dev/null and b/sound/effects/footstep/wood4.ogg differ
diff --git a/sound/effects/footstep/wood5.ogg b/sound/effects/footstep/wood5.ogg
new file mode 100644
index 00000000000..5ad4fa81e77
Binary files /dev/null and b/sound/effects/footstep/wood5.ogg differ
diff --git a/sound/voice/bcreep.ogg b/sound/voice/beepsky/creep.ogg
similarity index 100%
rename from sound/voice/bcreep.ogg
rename to sound/voice/beepsky/creep.ogg
diff --git a/sound/voice/bcriminal.ogg b/sound/voice/beepsky/criminal.ogg
similarity index 100%
rename from sound/voice/bcriminal.ogg
rename to sound/voice/beepsky/criminal.ogg
diff --git a/sound/voice/bfreeze.ogg b/sound/voice/beepsky/freeze.ogg
similarity index 100%
rename from sound/voice/bfreeze.ogg
rename to sound/voice/beepsky/freeze.ogg
diff --git a/sound/voice/bgod.ogg b/sound/voice/beepsky/god.ogg
similarity index 100%
rename from sound/voice/bgod.ogg
rename to sound/voice/beepsky/god.ogg
diff --git a/sound/voice/biamthelaw.ogg b/sound/voice/beepsky/iamthelaw.ogg
similarity index 100%
rename from sound/voice/biamthelaw.ogg
rename to sound/voice/beepsky/iamthelaw.ogg
diff --git a/sound/voice/binsult.ogg b/sound/voice/beepsky/insult.ogg
similarity index 100%
rename from sound/voice/binsult.ogg
rename to sound/voice/beepsky/insult.ogg
diff --git a/sound/voice/bjustice.ogg b/sound/voice/beepsky/justice.ogg
similarity index 100%
rename from sound/voice/bjustice.ogg
rename to sound/voice/beepsky/justice.ogg
diff --git a/sound/voice/bradio.ogg b/sound/voice/beepsky/radio.ogg
similarity index 100%
rename from sound/voice/bradio.ogg
rename to sound/voice/beepsky/radio.ogg
diff --git a/sound/voice/bsecureday.ogg b/sound/voice/beepsky/secureday.ogg
similarity index 100%
rename from sound/voice/bsecureday.ogg
rename to sound/voice/beepsky/secureday.ogg
diff --git a/sound/voice/mapple.ogg b/sound/voice/medbot/apple.ogg
similarity index 100%
rename from sound/voice/mapple.ogg
rename to sound/voice/medbot/apple.ogg
diff --git a/sound/voice/mcatch.ogg b/sound/voice/medbot/catch.ogg
similarity index 100%
rename from sound/voice/mcatch.ogg
rename to sound/voice/medbot/catch.ogg
diff --git a/sound/voice/mcoming.ogg b/sound/voice/medbot/coming.ogg
similarity index 100%
rename from sound/voice/mcoming.ogg
rename to sound/voice/medbot/coming.ogg
diff --git a/sound/voice/mdelicious.ogg b/sound/voice/medbot/delicious.ogg
similarity index 100%
rename from sound/voice/mdelicious.ogg
rename to sound/voice/medbot/delicious.ogg
diff --git a/sound/voice/mfeelbetter.ogg b/sound/voice/medbot/feelbetter.ogg
similarity index 100%
rename from sound/voice/mfeelbetter.ogg
rename to sound/voice/medbot/feelbetter.ogg
diff --git a/sound/voice/mflies.ogg b/sound/voice/medbot/flies.ogg
similarity index 100%
rename from sound/voice/mflies.ogg
rename to sound/voice/medbot/flies.ogg
diff --git a/sound/voice/mhelp.ogg b/sound/voice/medbot/help.ogg
similarity index 100%
rename from sound/voice/mhelp.ogg
rename to sound/voice/medbot/help.ogg
diff --git a/sound/voice/minjured.ogg b/sound/voice/medbot/injured.ogg
similarity index 100%
rename from sound/voice/minjured.ogg
rename to sound/voice/medbot/injured.ogg
diff --git a/sound/voice/minsult.ogg b/sound/voice/medbot/insult.ogg
similarity index 100%
rename from sound/voice/minsult.ogg
rename to sound/voice/medbot/insult.ogg
diff --git a/sound/voice/mlive.ogg b/sound/voice/medbot/live.ogg
similarity index 100%
rename from sound/voice/mlive.ogg
rename to sound/voice/medbot/live.ogg
diff --git a/sound/voice/mlost.ogg b/sound/voice/medbot/lost.ogg
similarity index 100%
rename from sound/voice/mlost.ogg
rename to sound/voice/medbot/lost.ogg
diff --git a/sound/voice/mno.ogg b/sound/voice/medbot/no.ogg
similarity index 100%
rename from sound/voice/mno.ogg
rename to sound/voice/medbot/no.ogg
diff --git a/sound/voice/mpatchedup.ogg b/sound/voice/medbot/patchedup.ogg
similarity index 100%
rename from sound/voice/mpatchedup.ogg
rename to sound/voice/medbot/patchedup.ogg
diff --git a/sound/voice/mradar.ogg b/sound/voice/medbot/radar.ogg
similarity index 100%
rename from sound/voice/mradar.ogg
rename to sound/voice/medbot/radar.ogg
diff --git a/sound/voice/msurgeon.ogg b/sound/voice/medbot/surgeon.ogg
similarity index 100%
rename from sound/voice/msurgeon.ogg
rename to sound/voice/medbot/surgeon.ogg
diff --git a/tgstation.dme b/tgstation.dme
index cb365c2182c..78c3aca2ff2 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -43,6 +43,7 @@
#include "code\__DEFINES\exports.dm"
#include "code\__DEFINES\flags.dm"
#include "code\__DEFINES\food.dm"
+#include "code\__DEFINES\footsteps.dm"
#include "code\__DEFINES\forensics.dm"
#include "code\__DEFINES\hud.dm"
#include "code\__DEFINES\integrated_electronics.dm"
@@ -331,6 +332,7 @@
#include "code\datums\components\earprotection.dm"
#include "code\datums\components\edit_complainer.dm"
#include "code\datums\components\empprotection.dm"
+#include "code\datums\components\footstep.dm"
#include "code\datums\components\forced_gravity.dm"
#include "code\datums\components\forensics.dm"
#include "code\datums\components\infective.dm"