diff --git a/code/__defines/footsteps.dm b/code/__defines/footsteps.dm
index c9ad6500b4..b952da958b 100644
--- a/code/__defines/footsteps.dm
+++ b/code/__defines/footsteps.dm
@@ -25,10 +25,12 @@
#define FOOTSTEP_MOB_TESHARI "footstep_lightclaw"
#define FOOTSTEP_MOB_BAREFOOT "footstep_barefoot"
#define FOOTSTEP_MOB_HEAVY "footstep_heavy"
+#define FOOTSTEP_MOB_HEAVY_ALT "footstep_heavy_alt"
#define FOOTSTEP_MOB_SHOE "footstep_shoe"
#define FOOTSTEP_MOB_HUMAN "footstep_human"
#define FOOTSTEP_MOB_SLIME "footstep_slime"
#define FOOTSTEP_MOB_SLITHER "footstep_slither"
+#define FOOTSTEP_MOB_MECHY "footstep_mechy"
#define FOOTSTEP_OBJ_MACHINE "footstep_machine"
#define FOOTSTEP_OBJ_ROBOT "footstep_robot"
@@ -250,3 +252,103 @@ GLOBAL_LIST_INIT(heavyfootstep, list(
FOOTSTEP_MEAT = list(list(
'sound/effects/meatslap.ogg'), 100, 0),
))
+
+//heavy alt footsteps list
+GLOBAL_LIST_INIT(heavyaltfootstep, list(
+ FOOTSTEP_WOOD_BAREFOOT = list(list(
+ 'sound/mob/footstep_large.ogg',
+ 'sound/mob/footstep_large2.ogg'), 90, 1),
+ FOOTSTEP_HARD_BAREFOOT = list(list(
+ 'sound/mob/footstep_large.ogg',
+ 'sound/mob/footstep_large2.ogg'), 90, 1),
+ FOOTSTEP_CARPET_BAREFOOT = list(list(
+ 'sound/mob/footstep_large.ogg',
+ 'sound/mob/footstep_large2.ogg'), 75, -2),
+ FOOTSTEP_GRASS = list(list(
+ 'sound/mob/footstep_large.ogg',
+ 'sound/mob/footstep_large2.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),
+ FOOTSTEP_MEAT = list(list(
+ 'sound/effects/meatslap.ogg'), 100, 0),
+))
+
+//heavy alt footsteps list
+GLOBAL_LIST_INIT(mechfootstep, list(
+ FOOTSTEP_WOOD_BAREFOOT = list(list(
+ 'sound/mecha/mechstep1.ogg',
+ 'sound/mecha/mechstep2.ogg'), 90, 1),
+ FOOTSTEP_HARD_BAREFOOT = list(list(
+ 'sound/mecha/mechstep1.ogg',
+ 'sound/mecha/mechstep2.ogg'), 90, 1),
+ FOOTSTEP_CARPET_BAREFOOT = list(list(
+ 'sound/mecha/mechstep1.ogg',
+ 'sound/mecha/mechstep2.ogg'), 75, -2),
+ FOOTSTEP_GRASS = list(list(
+ 'sound/mecha/mechstep1.ogg',
+ 'sound/mecha/mechstep2.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),
+ FOOTSTEP_MEAT = list(list(
+ 'sound/effects/meatslap.ogg'), 100, 0),
+))
+
+//slime footsteps list
+GLOBAL_LIST_INIT(slimefootstep, list(
+ FOOTSTEP_WOOD_BAREFOOT = list(list(
+ 'sound/effects/footstep/slime1.ogg'), 90, 1),
+ FOOTSTEP_HARD_BAREFOOT = list(list(
+ 'sound/effects/footstep/slime1.ogg'), 90, 1),
+ FOOTSTEP_CARPET_BAREFOOT = list(list(
+ 'sound/effects/footstep/slime1.ogg'), 75, -2),
+ FOOTSTEP_GRASS = list(list(
+ 'sound/effects/footstep/slime1.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),
+ FOOTSTEP_MEAT = list(list(
+ 'sound/effects/meatslap.ogg'), 100, 0),
+))
+
+//slither footsteps list
+GLOBAL_LIST_INIT(slitherfootstep, list(
+ FOOTSTEP_WOOD_BAREFOOT = list(list(
+ 'sound/effects/footstep/crawl1.ogg'), 90, 1),
+ FOOTSTEP_HARD_BAREFOOT = list(list(
+ 'sound/effects/footstep/crawl1.ogg'), 90, 1),
+ FOOTSTEP_CARPET_BAREFOOT = list(list(
+ 'sound/effects/footstep/crawl1.ogg'), 75, -2),
+ FOOTSTEP_GRASS = list(list(
+ 'sound/effects/footstep/crawl1.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),
+ FOOTSTEP_MEAT = list(list(
+ 'sound/effects/meatslap.ogg'), 100, 0),
+))
diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm
index cd481ef19f..1ca962af15 100644
--- a/code/_helpers/global_lists.dm
+++ b/code/_helpers/global_lists.dm
@@ -359,6 +359,8 @@ GLOBAL_LIST_INIT(selectable_footstep, list(
"Claw" = FOOTSTEP_MOB_CLAW,
"Light Claw" = FOOTSTEP_MOB_TESHARI,
"Slither" = FOOTSTEP_MOB_SLITHER,
+ "Mech" = FOOTSTEP_MOB_MECHY,
+ "Heavy" = FOOTSTEP_MOB_HEAVY_ALT
))
// Put any artifact effects that are duplicates, unique, or otherwise unwated in here! This prevents them from spawning via RNG.
diff --git a/code/datums/elements/footstep.dm b/code/datums/elements/footstep.dm
index 4c570350d7..57c58ddc7b 100644
--- a/code/datums/elements/footstep.dm
+++ b/code/datums/elements/footstep.dm
@@ -48,9 +48,13 @@
if(FOOTSTEP_MOB_SHOE)
footstep_ret = GLOB.footstep
if(FOOTSTEP_MOB_SLIME)
- footstep_ret = 'sound/effects/footstep/slime1.ogg'
+ footstep_ret = GLOB.slimefootstep
if(FOOTSTEP_MOB_SLITHER)
- footstep_ret = 'sound/effects/footstep/crawl1.ogg'
+ footstep_ret = GLOB.slitherfootstep
+ if(FOOTSTEP_MOB_HEAVY_ALT)
+ footstep_ret = GLOB.heavyaltfootstep
+ if(FOOTSTEP_MOB_MECHY)
+ footstep_ret = GLOB.mechfootstep
else
footstep_ret = GLOB.barefootstep
return footstep_ret
@@ -134,10 +138,6 @@
/datum/element/footstep/proc/play_humanstep(mob/living/carbon/human/source, atom/oldloc, direction, forced, list/old_locs, momentum_change)
SIGNAL_HANDLER
- if (source.custom_footstep == FOOTSTEP_MOB_SLITHER)
- playsound(source.loc, 'sound/effects/footstep/crawl1.ogg', 15 * volume, falloff = 1, vary = sound_vary)
- return
-
var/volume_multiplier = 0.3
var/range_adjustment = 0
@@ -145,6 +145,10 @@
if(isnull(prepared_steps))
return
+ if (source.client?.prefs?.read_preference(/datum/preference/toggle/human/ignore_shoes))
+ play_barefoot_sound(source, prepared_steps, volume_multiplier, range_adjustment)
+ return
+
//cache for sanic speed (lists are references anyways)
var/footstep_sounds = GLOB.footstep
@@ -161,8 +165,6 @@
footstep_sounds[shoestep_type][3] + e_range + range_adjustment, falloff = 1, vary = sound_vary)
return
- play_barefoot_sound(source, prepared_steps, volume_multiplier, range_adjustment)
- return
// we are barefoot
play_barefoot_sound(source, prepared_steps, volume_multiplier, range_adjustment)
@@ -172,10 +174,6 @@
playsound(source.loc, pick(source.species.special_step_sounds), volume, TRUE, falloff = 1, vary = sound_vary)
return
- if (istype(source.species, /datum/species/shapeshifter/promethean))
- playsound(source.loc, 'sound/effects/footstep/slime1.ogg', volume, TRUE, falloff = 1, vary = sound_vary)
- return
-
var/barefoot_type = prepared_steps[FOOTSTEP_MOB_BAREFOOT]
var/bare_footstep_sounds
if(source.custom_footstep != FOOTSTEP_MOB_HUMAN)
diff --git a/code/modules/client/preference_setup/general/11_misc.dm b/code/modules/client/preference_setup/general/11_misc.dm
index f960b49914..1adad032c6 100644
--- a/code/modules/client/preference_setup/general/11_misc.dm
+++ b/code/modules/client/preference_setup/general/11_misc.dm
@@ -154,6 +154,8 @@
data["auto_backup_implant"] = pref.auto_backup_implant
data["borg_petting"] = pref.borg_petting
+ data["ignore_shoes"] = pref.read_preference(/datum/preference/toggle/human/ignore_shoes)
+
data["resleeve_lock"] = pref.resleeve_lock
data["resleeve_scan"] = pref.resleeve_scan
data["mind_scan"] = pref.mind_scan
@@ -214,6 +216,9 @@
if("toggle_capture_crystal")
pref.capture_crystal = pref.capture_crystal ? 0 : 1;
return TOPIC_REFRESH
+ if("toggle_ignore_shoes")
+ pref.update_preference_by_type(/datum/preference/toggle/human/ignore_shoes, !pref.read_preference(/datum/preference/toggle/human/ignore_shoes))
+ return TOPIC_REFRESH
if("toggle_implant")
pref.auto_backup_implant = pref.auto_backup_implant ? 0 : 1;
return TOPIC_REFRESH
diff --git a/code/modules/client/preferences/types/character/general/11_misc.dm b/code/modules/client/preferences/types/character/general/11_misc.dm
new file mode 100644
index 0000000000..53e183b689
--- /dev/null
+++ b/code/modules/client/preferences/types/character/general/11_misc.dm
@@ -0,0 +1,9 @@
+/datum/preference/toggle/human/ignore_shoes
+ category = PREFERENCE_CATEGORY_NON_CONTEXTUAL
+ savefile_key = "ignore_shoes"
+ default_value = FALSE
+ savefile_identifier = PREFERENCE_CHARACTER
+ can_randomize = FALSE
+
+/datum/preference/toggle/human/ignore_shoes/apply_to_human(mob/living/carbon/human/target, value)
+ return
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/SubtabSettings.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/SubtabSettings.tsx
index a289255b8c..f258c956a0 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/SubtabSettings.tsx
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/SubtabSettings.tsx
@@ -55,6 +55,7 @@ export const SubtabSettings = (props: {
syndicate_ban,
special_roles,
custom_footstep,
+ ignore_shoes,
custom_species_sound,
custom_speech_bubble,
persistence_settings,
@@ -138,6 +139,15 @@ export const SubtabSettings = (props: {
{custom_footstep}
+
+
+
))}
diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/data.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/data.ts
index 160cdf4b76..de4a94c504 100644
--- a/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/data.ts
+++ b/tgui/packages/tgui/interfaces/PreferencesMenu/bay_prefs/general/data.ts
@@ -284,6 +284,7 @@ export type MiscData = {
nif: BooleanLike;
custom_species: string;
+ ignore_shoes: BooleanLike;
pos_traits: string[] | Record | null>;
neu_traits: string[] | Record | null>;
neg_traits: string[] | Record | null>;
diff --git a/vorestation.dme b/vorestation.dme
index 8d80b36233..0b4fa6e575 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -2475,6 +2475,7 @@
#include "code\modules\client\preferences\types\character\general\01_basic.dm"
#include "code\modules\client\preferences\types\character\general\03_body.dm"
#include "code\modules\client\preferences\types\character\general\06_special.dm"
+#include "code\modules\client\preferences\types\character\general\11_misc.dm"
#include "code\modules\client\preferences\types\game\admin.dm"
#include "code\modules\client\preferences\types\game\adult.dm"
#include "code\modules\client\preferences\types\game\auto_fit_viewport.dm"