Custom Footstep Sounds Port (Nova Sector) (#5114)

## About The Pull Request

First PR. All I know is that it works.

Anyway, this PR ports customisable (barefoot) footstep sounds from Nova
Sector. It incorporates the update PRs to the best of my very limited
ability thanks to Artur.
Various high heel footwear items are also updated with the additional
footstep noises for the hell of it, going from 2 possible sounds to 4,
reducing the looping effect.

_Footstep options include:_

- Default
- Shoes (shoe SFX while barefoot)
- Highheels
- Claws (Ian/similar mob SFX)
- Hooves (New SFX added by PR)

Files are distributed a little haphazardly. Some in the modular Zubbers
folder, some in the old skyrat modular folder. I am lazy.

Original PRs code was taken from (credit to https://github.com/Neocloudy
for the first PR on Nova):

1. [https://github.com/NovaSector/NovaSector/pull/3404](url)
2. [https://github.com/NovaSector/NovaSector/pull/4475](url)
3. [https://github.com/NovaSector/NovaSector/pull/6035](url)
## Why It's Good For The Game
I forgor to fill this out. Uhm. Customisation good I guess. Also stops
SLAPPY SLAP HUMAN FLESH FEET NOISES despite being a robot etc.

## Proof Of Testing



https://github.com/user-attachments/assets/aa1227fa-aea5-43f4-87a8-d52f65c752ce

video WAS longer but had to cut significantly
<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog
🆑
add: Ability to customise barefoot footstep sounds in character
preference menu.
/🆑

---------

Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
This commit is contained in:
MrGloopy
2026-01-16 01:08:24 +02:00
committed by GitHub
co-authored by Roxy
parent 77e1c9da27
commit 984fc26961
16 changed files with 71 additions and 4 deletions
@@ -1433,7 +1433,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32)
/obj/item/clothing/shoes/fancy_heels/drag/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak, list('modular_skyrat/modules/modular_items/lewd_items/sounds/highheel1.ogg' = 1, 'modular_skyrat/modules/modular_items/lewd_items/sounds/highheel2.ogg' = 1), 70)
AddComponent(/datum/component/squeak, list('modular_zubbers/sound/effects/footstep/highheel1.ogg' = 1, 'modular_zubbers/sound/effects/footstep/highheel2.ogg' = 1, 'modular_zubbers/sound/effects/footstep/highheel3.ogg' = 1, 'modular_zubbers/sound/effects/footstep/highheel4.ogg' = 1), 70)
// Donation reward for Razurath
@@ -12,7 +12,7 @@
/obj/item/clothing/shoes/latex_heels/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak, list('modular_skyrat/modules/modular_items/lewd_items/sounds/highheel1.ogg' = 1, 'modular_skyrat/modules/modular_items/lewd_items/sounds/highheel2.ogg' = 1), 70)
AddComponent(/datum/component/squeak, list('modular_zubbers/sound/effects/footstep/highheel1.ogg' = 1, 'modular_zubbers/sound/effects/footstep/highheel2.ogg' = 1, 'modular_zubbers/sound/effects/footstep/highheel3.ogg' = 1, 'modular_zubbers/sound/effects/footstep/highheel4.ogg' = 1), 70)
/obj/item/clothing/shoes/latex_heels/domina_heels
name = "dominant heels"
@@ -0,0 +1,46 @@
/datum/preference/choiced/footstep_sound
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
savefile_identifier = PREFERENCE_CHARACTER
savefile_key = "footstep_sound"
/datum/preference/choiced/footstep_sound/init_possible_values()
return list("Default", "Shoes", "Highheels", "Claws", "Hooves")
/datum/preference/choiced/footstep_sound/create_default_value()
return "Default"
/datum/preference/choiced/footstep_sound/apply_to_human(mob/living/carbon/human/target, value)
if(value == "Default")
return
/// Either use the TG footstep_type here, or specify a special_footstep_sounds list.
/// special_footstep_sounds list formatting must be: list(list(sounds, go, here), volume, range modifier)
/// Note: special_footstep_sounds will play the same effect on all turfs, but TG footstep sounds are very hardcoded
/// so if you want a new custom set of sounds that's the least-painful method of adding them, with the caveat of not being able to
/// support turf-based sounds.
var/static/list/value_to_define = list(
"Shoes" = FOOTSTEP_MOB_SHOE,
"Claws" = FOOTSTEP_MOB_CLAW,
"Highheels" = list(list(
'modular_zubbers/sound/effects/footstep/highheel1.ogg',
'modular_zubbers/sound/effects/footstep/highheel2.ogg',
'modular_zubbers/sound/effects/footstep/highheel3.ogg',
'modular_zubbers/sound/effects/footstep/highheel4.ogg'), 70, 1),
"Hooves" = list(list(
'modular_zubbers/sound/effects/footstep/hardhoof1.ogg',
'modular_zubbers/sound/effects/footstep/hardhoof2.ogg',
'modular_zubbers/sound/effects/footstep/hardhoof3.ogg',
'modular_zubbers/sound/effects/footstep/hardhoof4.ogg'), 35, 1),
)
var/footstep_type = value_to_define[value]
var/obj/item/bodypart/leg/left_leg = target.get_bodypart(BODY_ZONE_L_LEG)
var/obj/item/bodypart/leg/right_leg = target.get_bodypart(BODY_ZONE_R_LEG)
if(islist(footstep_type))
left_leg?.special_footstep_sounds = footstep_type
right_leg?.special_footstep_sounds = footstep_type
else
left_leg?.footstep_type = footstep_type
right_leg?.footstep_type = footstep_type
target.footstep_type = footstep_type // We are most likely going to have our legs get replaced during char creation immediately, so this is necessary to apply to any subsequent legs that get added.
@@ -22,7 +22,7 @@
/obj/item/clothing/shoes/heels/drag/lace/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak, list('modular_skyrat/modules/modular_items/lewd_items/sounds/highheel1.ogg' = 1, 'modular_skyrat/modules/modular_items/lewd_items/sounds/highheel2.ogg' = 1), 70)
AddComponent(/datum/component/squeak, list('modular_zubbers/sound/effects/footstep/highheel1.ogg' = 1, 'modular_zubbers/sound/effects/footstep/highheel2.ogg' = 1, 'modular_zubbers/sound/effects/footstep/highheel3.ogg' = 1, 'modular_zubbers/sound/effects/footstep/highheel4.ogg' = 1), 70)
/obj/item/clothing/gloves/evening/lace
name = "lace gloves"
@@ -24,7 +24,7 @@
/obj/item/clothing/shoes/latex_heels/bubber/clussy/mute/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak, list('modular_skyrat/modules/modular_items/lewd_items/sounds/highheel1.ogg' = 1, 'modular_skyrat/modules/modular_items/lewd_items/sounds/highheel2.ogg' = 1), 70)
AddComponent(/datum/component/squeak, list('modular_zubbers/sound/effects/footstep/highheel1.ogg' = 1, 'modular_zubbers/sound/effects/footstep/highheel2.ogg' = 1, 'modular_zubbers/sound/effects/footstep/highheel3.ogg' = 1, 'modular_zubbers/sound/effects/footstep/highheel4.ogg' = 1), 70)
/obj/item/clothing/shoes/clown_shoes/bubber/jester
name = "amazing jester shoes"
@@ -1,10 +1,22 @@
/mob/living/carbon/human
/// Quad eyes offset in pixels. Positive is up, negative is down. (Suggested to not go above 2 or below -2)
var/quad_eyes_offset = 0
/// Used for footstep type pref, to apply to any new legs that get added to this mob. Uses a var instead of checking prefs because there are a lot of clientless mob situations.
var/footstep_type
/mob/living/carbon/human/species/shadekin
race = /datum/species/shadekin
// Just blanket apply the footstep pref on limb addition, it gets far too complicated otherwise as limbs are getting replaced more often than you'd think
/obj/item/bodypart/leg/on_adding(mob/living/carbon/new_owner)
. = ..()
var/mob/living/carbon/human/human_owner = new_owner
if(istype(human_owner) && human_owner.footstep_type)
if(islist(human_owner.footstep_type))
special_footstep_sounds = human_owner.footstep_type
else
footstep_type = human_owner.footstep_type
// This is expected to be called or used in situations where you already know the mob is dead
/mob/living/carbon/human/proc/get_dnr()
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -9265,6 +9265,7 @@
#include "modular_zubbers\code\modules\client\ssd.dm"
#include "modular_zubbers\code\modules\client\autopunctuation\preferences.dm"
#include "modular_zubbers\code\modules\client\flavor_text\flavor_text.dm"
#include "modular_zubbers\code\modules\client\preferences\footstep_sound.dm"
#include "modular_zubbers\code\modules\client\preferences\permanent_limp.dm"
#include "modular_zubbers\code\modules\client\preferences\player_panel.dm"
#include "modular_zubbers\code\modules\client\preferences\sounds.dm"
@@ -0,0 +1,8 @@
import type { FeatureChoiced } from '../../base';
import { FeatureDropdownInput } from '../../dropdowns';
export const footstep_sound: FeatureChoiced = {
name: 'Footstep Sound',
description: 'The type of sound you will make when you walk around barefoot.',
component: FeatureDropdownInput,
};