diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 9b2e9b7064d..13b16f85692 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -115,6 +115,12 @@ var/list/wood_icons = list("wood","wood-broken") else if(is_plating()) if(!broken && !burnt) icon_state = icon_plating //Because asteroids are 'platings' too. + + footstep_sounds = list( + "human" = list('sound/effects/footstep/plating_human.ogg'), + "xeno" = list('sound/effects/footstep/plating_xeno.ogg') + ) + else if(is_light_floor()) var/obj/item/stack/tile/light/T = floor_tile if(T.on) @@ -193,11 +199,20 @@ var/list/wood_icons = list("wood","wood-broken") icon_state = "carpet[connectdir]-[diagonalconnect]" + footstep_sounds = list( + "human" = list('sound/effects/footstep/carpet_human.ogg'), + "xeno" = list('sound/effects/footstep/carpet_xeno.ogg') + ) + else if(is_wood_floor()) if(!broken && !burnt) if( !(icon_state in wood_icons) ) icon_state = "wood" - //world << "[icon_state]y's got [icon_state]" + + footstep_sounds = list( + "human" = list('sound/effects/footstep/wood_all.ogg'), //@RonaldVanWonderen of Freesound.org + "xeno" = list('sound/effects/footstep/wood_all.ogg') //@RonaldVanWonderen of Freesound.org + ) /turf/simulated/floor/return_siding_icon_state() diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm index 9c74178259f..7ed0795cf47 100644 --- a/code/game/turfs/simulated/floor_types.dm +++ b/code/game/turfs/simulated/floor_types.dm @@ -31,6 +31,11 @@ icon_state = "wood" floor_tile = new/obj/item/stack/tile/wood + footstep_sounds = list( + "human" = list('sound/effects/footstep/wood_all.ogg'), //@RonaldVanWonderen of Freesound.org + "xeno" = list('sound/effects/footstep/wood_all.ogg') //@RonaldVanWonderen of Freesound.org + ) + /turf/simulated/floor/vault icon_state = "rockvault" @@ -131,6 +136,11 @@ floor_tile = null intact = 0 + footstep_sounds = list( + "human" = list('sound/effects/footstep/plating_human.ogg'), + "xeno" = list('sound/effects/footstep/plating_xeno.ogg') + ) + /turf/simulated/floor/plating/airless icon_state = "plating" name = "airless plating" @@ -246,6 +256,11 @@ icon_state = "carpet" floor_tile = new/obj/item/stack/tile/carpet + footstep_sounds = list( + "human" = list('sound/effects/footstep/carpet_human.ogg'), + "xeno" = list('sound/effects/footstep/carpet_xeno.ogg') + ) + New() floor_tile.New() //I guess New() isn't ran on objects spawned without the definition of a turf to house them, ah well. if(!icon_state) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 8cd2500b0e0..3dce001a535 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -29,6 +29,8 @@ var/image/obscured //camerachunks + var/list/footstep_sounds = list() + /turf/New() ..() for(var/atom/movable/AM in src) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 88000afe32f..9ea86bcdd46 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -295,3 +295,16 @@ Des: Removes all infected images from the alien. #undef HEAT_DAMAGE_LEVEL_1 #undef HEAT_DAMAGE_LEVEL_2 #undef HEAT_DAMAGE_LEVEL_3 + +/mob/living/carbon/alien/handle_footstep(turf/T) + if(..()) + if(T.footstep_sounds["xeno"]) + var/S = pick(T.footstep_sounds["xeno"]) + if(S) + if(m_intent == "run") + if(!(step_count % 2)) //every other turf makes a sound + return 0 + if(leaping) + return 0 + playsound(T, S, 6, 1, -(world.view/2)) //xenos are quiet fuckers + return 0 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 55265498284..3dd146bf0bf 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -81,4 +81,22 @@ if(!has_gravity(loc)) return var/obj/item/clothing/shoes/S = shoes - S.step_action(src) \ No newline at end of file + S.step_action(src) + +/mob/living/carbon/human/handle_footstep(turf/T) + if(..()) + if(T.footstep_sounds["human"]) + var/S = pick(T.footstep_sounds["human"]) + if(S) + if(m_intent == "run") + if(!(step_count % 2)) //every other turf makes a sound + return 0 + playsound(T, S, shoes ? 15 : 7, 1, shoes ? 0 : -(world.view/2)) + //this looks insane but it actually is quite simple + //play sound at turf T, using sound S + //volume = 15 w/ shoes, volume = 7 w/o shoes + //do use vary + //add negative world.view/2 if not wearing shoes + return 1 + + return 0 \ No newline at end of file diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 9806145854b..87aeab88fa6 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -492,10 +492,18 @@ if (s_active && !( s_active in contents ) && get_turf(s_active) != get_turf(src)) //check !( s_active in contents ) first so we hopefully don't have to call get_turf() so much. s_active.close(src) + handle_footstep(loc) + step_count++ + if(update_slimes) for(var/mob/living/carbon/slime/M in view(1,src)) M.UpdateFeed(src) +/mob/living/proc/handle_footstep(turf/T) + if(istype(T)) + return 1 + return 0 + /*////////////////////// START RESIST PROCS */////////////////////// diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 08a99c0dba2..f21d2a2d954 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -51,4 +51,5 @@ var/list/icon/pipes_shown = list() var/last_played_vent - var/list/datum/action/actions = list() \ No newline at end of file + var/list/datum/action/actions = list() + var/step_count = 0 \ No newline at end of file diff --git a/sound/effects/footstep/carpet_human.ogg b/sound/effects/footstep/carpet_human.ogg new file mode 100644 index 00000000000..0de0190ba1d Binary files /dev/null and b/sound/effects/footstep/carpet_human.ogg differ diff --git a/sound/effects/footstep/carpet_xeno.ogg b/sound/effects/footstep/carpet_xeno.ogg new file mode 100644 index 00000000000..86569b3f28b Binary files /dev/null and b/sound/effects/footstep/carpet_xeno.ogg differ diff --git a/sound/effects/footstep/plating_human.ogg b/sound/effects/footstep/plating_human.ogg new file mode 100644 index 00000000000..72c04e7fe41 Binary files /dev/null and b/sound/effects/footstep/plating_human.ogg differ diff --git a/sound/effects/footstep/plating_xeno.ogg b/sound/effects/footstep/plating_xeno.ogg new file mode 100644 index 00000000000..f38a1eb5c3f Binary files /dev/null and b/sound/effects/footstep/plating_xeno.ogg differ diff --git a/sound/effects/footstep/wood_all.ogg b/sound/effects/footstep/wood_all.ogg new file mode 100644 index 00000000000..ab6fed9e81d Binary files /dev/null and b/sound/effects/footstep/wood_all.ogg differ