diff --git a/aurorastation.dme b/aurorastation.dme index 6ecdd7d4365..30663802080 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -516,6 +516,7 @@ #include "code\datums\components\large_object_transparency.dm" #include "code\datums\components\leanable.dm" #include "code\datums\components\local_network.dm" +#include "code\datums\components\mob_footsteps.dm" #include "code\datums\components\orbiter.dm" #include "code\datums\components\overlay_lighting.dm" #include "code\datums\components\timed_life_component.dm" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index 1a81389d5bf..b3dffd6dad5 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -2,3 +2,8 @@ #define COMSIG_LIVING_DEATH "living_death" /// From /mob/living/proc/stop_leaning() #define COMSIG_LIVING_STOPPED_LEANING "living_stopped_leaning" + +/// From code\datums\components\mob_footsteps.dm +#define COMSIG_MOB_REMOVE_FOOTSTEP_SOUND "mob_remove_foostep" +/// From code\datums\components\mob_footsteps.dm +#define COMSIG_MOB_ADD_FOOTSTEP_SOUND "mob_add_footstep" diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 33551745700..6ab17b50a01 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -190,3 +190,7 @@ #define SFX_CLOTH_PICKUP "cloth_pickup" #define SFX_VISOR_DOWN "visor_down" #define SFX_VISOR_UP "visor_up" +#define SFX_LIGHT_ARMOUR_FOOTSTEPS "light_armour_footsteps" +#define SFX_HEAVY_ARMOUR_FOOTSTEPS "heavy_armour_footsteps" +#define SFX_VOIDSUIT_FOOTSTEPS "voidsuit_footsteps" +#define SFX_ARMOURED_VOIDSUIT_FOOTSTEPS "armoured_voidsuit_footsteps" diff --git a/code/datums/components/mob_footsteps.dm b/code/datums/components/mob_footsteps.dm new file mode 100644 index 00000000000..24095279edb --- /dev/null +++ b/code/datums/components/mob_footsteps.dm @@ -0,0 +1,136 @@ +// This component handles dynamically playing mob footsteps. +/datum/component/mob_footsteps + /// Our parent human mob. + VAR_FINAL/mob/living/mob_parent + /// The sound effects we'll play on each movement. Lazylist. + var/list/sound_effects_to_play + /// Sound effect volumes. Assoc list, source -> volume. + var/list/sound_effects_volumes + /// If this mob has a barefoot sound. Fuck whoever added this, by the way. + var/barefoot_sound + /// Current footstep counter. + var/footsteps = 0 + /// How many footsteps are needed until a sound is played. + var/footsteps_until_sound = 2 + +/datum/component/mob_footsteps/Initialize(...) + . = ..() + if(!isliving(parent)) + log_debug("Mob footsteps component created on a non-living mob.") + return COMPONENT_INCOMPATIBLE + + mob_parent = parent + + RegisterSignal(mob_parent, COMSIG_MOB_ADD_FOOTSTEP_SOUND, PROC_REF(add_footstep_sound)) + RegisterSignal(mob_parent, COMSIG_MOB_REMOVE_FOOTSTEP_SOUND, PROC_REF(remove_footstep_sound)) + RegisterSignal(mob_parent, COMSIG_MOVABLE_MOVED, PROC_REF(play_footstep_sounds)) + +/datum/component/mob_footsteps/Destroy() + UnregisterSignal(mob_parent, COMSIG_MOB_ADD_FOOTSTEP_SOUND) + UnregisterSignal(mob_parent, COMSIG_MOB_REMOVE_FOOTSTEP_SOUND) + mob_parent = null + LAZYNULL(sound_effects_to_play) + LAZYNULL(sound_effects_volumes) + return ..() + +/** + * Adds a footstep sound to the list of footsteps to play. + */ +/datum/component/mob_footsteps/proc/add_footstep_sound(comp_source, source, list/footstep_sounds, volume) + SIGNAL_HANDLER + if(!length(footstep_sounds)) + return + + LAZYSET(sound_effects_to_play, source, footstep_sounds) + if(volume) + LAZYSET(sound_effects_volumes, source, volume) + +/** + * Removes a footstep sound to the list of footsteps to play. + */ +/datum/component/mob_footsteps/proc/remove_footstep_sound(comp_source, source, list/footstep_sounds) + SIGNAL_HANDLER + if(!length(footstep_sounds)) + return + + LAZYREMOVE(sound_effects_to_play, source) + LAZYREMOVE(sound_effects_volumes, source) + +/** + * Finally, play the sound when we need to. + */ +/datum/component/mob_footsteps/proc/play_footstep_sounds() + SIGNAL_HANDLER + + if(mob_parent.buckled_to) + return + + if(mob_parent.incorporeal_move) + return + + footsteps++ + if(footsteps < footsteps_until_sound) + return + + // play the turf sound first, different range and we need to check for barefoot sounds as well + var/turf/T = get_turf(mob_parent) + if(isspaceturf(T) || !mob_parent.check_solid_ground() || mob_parent.CanAvoidGravity()) + return //no sounds in space + + var/top_layer = 0 + var/turf_walk_sound + if(istype(T)) + for(var/obj/structure/S in T) + if(S.layer > top_layer && S.footstep_sound) + top_layer = S.layer + turf_walk_sound = S.footstep_sound + + if(!turf_walk_sound) + turf_walk_sound = T.footstep_sound + var/barefoot_sound = get_barefoot_sounds() + playsound(mob_parent, barefoot_sound ? barefoot_sound : turf_walk_sound, 40, TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE, required_asfx_toggles = ASFX_FOOTSTEPS) + + // next, sourced sounds + for(var/source in sound_effects_to_play) + var/list/sounds_to_play = sound_effects_to_play[source] + + var/volume = 40 + if(source in sound_effects_volumes) + volume = sound_effects_volumes[source] + + if(mob_parent.m_intent == M_RUN) + volume = min(volume + 30, 100) + + playsound(mob_parent, length(sounds_to_play) > 1 ? pick(sounds_to_play) : sounds_to_play[1], volume, FALSE, required_asfx_toggles = ASFX_FOOTSTEPS) + footsteps = 0 + +/** + * If the mob has barefoot sounds, this is where you check if they should be played in lieu of the normal turf sound. + */ +/datum/component/mob_footsteps/proc/get_barefoot_sounds() + return + +/datum/component/mob_footsteps/human + /// The human parent of this component. A bit shit but what can you do. + VAR_FINAL/mob/living/carbon/human/human_parent + +/datum/component/mob_footsteps/human/Initialize(parent) + . = ..() + if(!ishuman(mob_parent)) + log_debug("Human footstep component initialized without an actual human on [mob_parent].") + return COMPONENT_INCOMPATIBLE + + human_parent = mob_parent + if(human_parent.species.footsound != SFX_FOOTSTEP_BLANK) + barefoot_sound = human_parent.species.footsound + +/datum/component/mob_footsteps/human/Destroy() + human_parent = null + return ..() + +/datum/component/mob_footsteps/human/get_barefoot_sounds() + var/obj/item/clothing/shoes/shoes = human_parent.shoes + if(shoes) + return shoes.silent ? SFX_FOOTSTEP_BLANK : human_parent.is_noisy ? null : barefoot_sound + else + return human_parent.is_noisy ? null : barefoot_sound diff --git a/code/datums/components/synthetic_endoskeleton/synthetic_endoskeleton.dm b/code/datums/components/synthetic_endoskeleton/synthetic_endoskeleton.dm index ad8bd423cf8..63ccec4696f 100644 --- a/code/datums/components/synthetic_endoskeleton/synthetic_endoskeleton.dm +++ b/code/datums/components/synthetic_endoskeleton/synthetic_endoskeleton.dm @@ -21,7 +21,7 @@ owner = parent else log_debug("Synthetic endoskeleton component spawned on non-IPC. Deleting.") - qdel_self() + return COMPONENT_INCOMPATIBLE RegisterSignal(owner, COMSIG_DAMAGE_TO_ENDOSKELETON, PROC_REF(receive_damage)) RegisterSignal(owner, COMSIG_SYNTH_ENDOSKELETON_REPAIR, PROC_REF(heal_damage)) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index e3a27d38080..a234a772cbc 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -150,6 +150,11 @@ var/pickup_sound = SFX_PICKUP /// Sound uses when dropping the item, or when its thrown. var/drop_sound = SFX_DROP + /// Sound played on movement. This is a list. If the list has ONE item, then it's treated as ONE sound. If the list has more than one item, then it's treated as a list where + /// the system will randomly play one of these sounds. + var/list/movement_sounds = null + /// The volume we want movement sounds to happen at for this object. Remember that on run intent, it's raised by 30. + var/movement_sound_volume = 40 //Item_state definition moved to /obj //var/item_state = null // Used to specify the item state for the on-mob overlays. @@ -508,6 +513,8 @@ SEND_SIGNAL(src, COMSIG_ITEM_DROPPED, user) in_inventory = FALSE + SEND_SIGNAL(user, COMSIG_MOB_REMOVE_FOOTSTEP_SOUND, src, movement_sounds) + user?.update_equipment_speed_mods() try_make_persistent_trash() @@ -601,9 +608,9 @@ equipped(user, slot, initial) if(SEND_SIGNAL(src, COMSIG_ITEM_POST_EQUIPPED, user, slot) && COMPONENT_EQUIPPED_FAILED) return FALSE + SEND_SIGNAL(user, COMSIG_MOB_ADD_FOOTSTEP_SOUND, src, movement_sounds, movement_sound_volume) return TRUE - /** * Called by on_equipped. Don't call this directly, we want the ITEM_POST_EQUIPPED signal to be sent after everything else. * @@ -641,9 +648,6 @@ else remove_item_verbs(user) - //Ěent for observable - SEND_SIGNAL(src, COMSIG_ITEM_REMOVE, src) - user.update_equipment_speed_mods() /obj/item/proc/check_equipped(var/mob/user, var/slot, var/assisted_equip = FALSE) diff --git a/code/game/sound/sound_keys/sound_keys.dm b/code/game/sound/sound_keys/sound_keys.dm index b221c29c0ec..03e0f0b4e6f 100644 --- a/code/game/sound/sound_keys/sound_keys.dm +++ b/code/game/sound/sound_keys/sound_keys.dm @@ -951,3 +951,47 @@ 'sound/items/do_flip/visor_up1.ogg', 'sound/items/do_flip/visor_up2.ogg', ) + +/datum/sound_effect/light_armour + key = SFX_LIGHT_ARMOUR_FOOTSTEPS + file_paths = list( + 'sound/items/movement/rattle_light_1.ogg', + 'sound/items/movement/rattle_light_2.ogg', + 'sound/items/movement/rattle_light_3.ogg', + 'sound/items/movement/rattle_light_4.ogg', + 'sound/items/movement/rattle_light_5.ogg' + ) + +/datum/sound_effect/heavy_armour + key = SFX_HEAVY_ARMOUR_FOOTSTEPS + file_paths = list( + 'sound/items/movement/rattle_cloth_heavy_1.ogg', + 'sound/items/movement/rattle_cloth_heavy_2.ogg', + 'sound/items/movement/rattle_cloth_heavy_3.ogg', + 'sound/items/movement/rattle_cloth_heavy_4.ogg', + 'sound/items/movement/rattle_cloth_heavy_5.ogg', + 'sound/items/movement/rattle_cloth_heavy_6.ogg', + 'sound/items/movement/rattle_cloth_heavy_7.ogg', + 'sound/items/movement/rattle_cloth_heavy_8.ogg' + ) + +/datum/sound_effect/voidsuit + key = SFX_VOIDSUIT_FOOTSTEPS + file_paths = list( + 'sound/items/movement/rattle_light_6.ogg', + 'sound/items/movement/rattle_light_7.ogg', + 'sound/items/movement/rattle_light_8.ogg', + 'sound/items/movement/rattle_light_9.ogg', + 'sound/items/movement/rattle_light_10.ogg', + 'sound/items/movement/rattle_light_11.ogg', + ) + +/datum/sound_effect/armoured_voidsuit + key = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + file_paths = list( + 'sound/items/movement/rattle_cloth_heavy_light_1.ogg', + 'sound/items/movement/rattle_cloth_heavy_light_2.ogg', + 'sound/items/movement/rattle_cloth_heavy_light_3.ogg', + 'sound/items/movement/rattle_cloth_heavy_light_4.ogg', + 'sound/items/movement/rattle_cloth_heavy_light_5.ogg' + ) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 2b55c627108..bb3df467ef7 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -954,8 +954,6 @@ var/silent = 0 var/last_trip = 0 - var/footstep_sound_override - /obj/item/clothing/shoes/Destroy() QDEL_NULL(holding) return ..() @@ -1074,18 +1072,6 @@ . = ..() track_footprint = 0 -/obj/item/clothing/shoes/proc/do_special_footsteps(var/running) - if(!footstep_sound_override) - return FALSE - if(ishuman(loc)) - var/mob/living/carbon/human/wearer = loc - if(running) - playsound(wearer, footstep_sound_override, 70, 1, required_asfx_toggles = ASFX_FOOTSTEPS) - else - footstep++ - if (footstep % 2) - playsound(wearer, footstep_sound_override, 40, 1, required_asfx_toggles = ASFX_FOOTSTEPS) - return TRUE /////////////////////////////////////////////////////////////////////// //Suit /obj/item/clothing/suit diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm index d17f36f8a0c..ffd8a09d061 100644 --- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm +++ b/code/modules/clothing/spacesuits/rig/rig_pieces.dm @@ -31,19 +31,19 @@ species_restricted = null gender = PLURAL icon_base = null - footstep_sound_override = 'sound/machines/rig/rigstep.ogg' + movement_sounds = list('sound/machines/rig/rigstep.ogg') /obj/item/clothing/shoes/magboots/rig/advanced slowdown_active = 0 /obj/item/clothing/shoes/magboots/rig/medium - footstep_sound_override = 'sound/machines/rig/rigstep_medium.ogg' + movement_sounds = list('sound/machines/rig/rigstep_medium.ogg') /obj/item/clothing/shoes/magboots/rig/heavy - footstep_sound_override = 'sound/machines/rig/rigstep_heavy.ogg' + movement_sounds = list('sound/machines/rig/rigstep_heavy.ogg') /obj/item/clothing/shoes/magboots/rig/chonk - footstep_sound_override = 'sound/machines/rig/rigstep_chonk.ogg' + movement_sounds = list('sound/machines/rig/rigstep_chonk.ogg') /obj/item/clothing/suit/space/rig name = "chestpiece" diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm index 8ccfc6ba98b..0afa632142f 100644 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ b/code/modules/clothing/spacesuits/rig/suits/light.dm @@ -47,7 +47,7 @@ /obj/item/clothing/shoes/magboots/rig/light name = "shoes" - footstep_sound_override = null + movement_sounds = null /obj/item/clothing/head/helmet/space/rig/light name = "hood" diff --git a/code/modules/clothing/spacesuits/void/alien/skrell.dm b/code/modules/clothing/spacesuits/void/alien/skrell.dm index 9af30cc4971..3805d03e341 100644 --- a/code/modules/clothing/spacesuits/void/alien/skrell.dm +++ b/code/modules/clothing/spacesuits/void/alien/skrell.dm @@ -67,6 +67,8 @@ species_restricted = list(BODYTYPE_SKRELL) refittable = FALSE + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/kala name = "qukala voidsuit helmet" desc = "A sleek skrell voidsuit helmet that slightly shimmers as it moves. This one has a Nralakk Federation emblem on it." diff --git a/code/modules/clothing/spacesuits/void/alien/tajara.dm b/code/modules/clothing/spacesuits/void/alien/tajara.dm index 99ac1d45b0a..0a48bef6edf 100644 --- a/code/modules/clothing/spacesuits/void/alien/tajara.dm +++ b/code/modules/clothing/spacesuits/void/alien/tajara.dm @@ -30,6 +30,8 @@ species_restricted = list(BODYTYPE_TAJARA) refittable = FALSE + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/pra name = "kosmostrelki voidsuit helmet" desc = "A tajaran helmet used by the crew of the Republican Orbital Fleet." @@ -152,6 +154,8 @@ species_restricted = list(BODYTYPE_TAJARA) refittable = FALSE + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/nka name = "new kingdom mercantile voidsuit helmet" desc = "An amalgamation of old civilian voidsuits and diving suits. This bulky space suit is used by the crew of the New Kingdom's mercantile navy." @@ -201,6 +205,8 @@ species_restricted = list(BODYTYPE_TAJARA) refittable = FALSE + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/dpra name = "people's volunteer spacer militia voidsuit helmet" desc = "A refitted, sturdy voidsuit created from Hegemony models acquired during the liberation of Gakal'zaal. These armored models are issued to the People's Volunteer Spacer Militia." diff --git a/code/modules/clothing/spacesuits/void/alien/unathi.dm b/code/modules/clothing/spacesuits/void/alien/unathi.dm index 212c50822d4..42e1cc492ca 100644 --- a/code/modules/clothing/spacesuits/void/alien/unathi.dm +++ b/code/modules/clothing/spacesuits/void/alien/unathi.dm @@ -41,6 +41,8 @@ species_restricted = list(BODYTYPE_UNATHI) refittable = FALSE + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/kataphract/spec name = "kataphract specialist voidsuit helmet" desc = "A tough plated helmet with slits for the eyes, emblazoned paint across the top indicates that it belongs to the Kataphracts of the Unathi Izweski Hegemony. This one has the markings of a Specialist." @@ -106,6 +108,8 @@ species_restricted = list(BODYTYPE_UNATHI) refittable = FALSE + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/unathi_pirate/captain name = "unathi raider captain helmet" desc = "A decent helmet made to fit with a larger combat assembly." @@ -139,6 +143,8 @@ species_restricted = list(BODYTYPE_UNATHI) refittable = FALSE + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/hegemony name = "hegemony military helmet" desc = "A Hephaestus-manufactured armoured space helmet, made for Unathi. Usually seen on soldiers of the Izweski Hegemony Navy." @@ -213,6 +219,8 @@ RAD = ARMOR_RAD_SHIELDED ) + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/suit/space/void/unathi_pirate/tarwa/captain name = "tarwa conglomerate captain's voidsuit" desc = "A mishmash of parts taken from Unathi pirate-made raider suits and hardware commonly found in the Southern frontier of the Spur, all held together by Diona bark, a common crafting method among the Unathi fleet of the Tarwa Conglomerate. \ diff --git a/code/modules/clothing/spacesuits/void/merc.dm b/code/modules/clothing/spacesuits/void/merc.dm index 4a222b3c042..649474f6b45 100644 --- a/code/modules/clothing/spacesuits/void/merc.dm +++ b/code/modules/clothing/spacesuits/void/merc.dm @@ -48,6 +48,8 @@ species_restricted = list(BODYTYPE_HUMAN, BODYTYPE_SKRELL) refittable_species = list(BODYTYPE_HUMAN, BODYTYPE_TAJARA, BODYTYPE_IPC, BODYTYPE_UNATHI, BODYTYPE_SKRELL) + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/merc/unathi refit_initialize = BODYTYPE_UNATHI diff --git a/code/modules/clothing/spacesuits/void/misc.dm b/code/modules/clothing/spacesuits/void/misc.dm index 7ec6b82a8da..96729aacf92 100644 --- a/code/modules/clothing/spacesuits/void/misc.dm +++ b/code/modules/clothing/spacesuits/void/misc.dm @@ -42,6 +42,8 @@ species_restricted = list(BODYTYPE_HUMAN) refittable = FALSE + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/coalition name = "coalition vulture voidsuit helmet" desc = "A helmet resembling an avian, built for the All-Xanu Grand Army and the Frontier Rangers. Heavy and plated with plasteel across its faces." @@ -91,6 +93,8 @@ icon_supported_species_tags = list("ipc", "skr", "taj") refittable_species = list(BODYTYPE_HUMAN, BODYTYPE_TAJARA, BODYTYPE_IPC, BODYTYPE_SKRELL) + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/coalition/xanu name = "\improper Xanan eagle voidsuit helmet" desc = "An advanced voidsuit helmet, designed specifically for the All-Xanu Armed Forces as a major upgrade to the iconic vulture voidsuit. Its armor has been upgraded, but it feels no heavier than a vulture." @@ -165,6 +169,7 @@ species_restricted = list(BODYTYPE_HUMAN) refittable = FALSE + /obj/item/clothing/head/helmet/space/void/cruiser name = "cruiser voidsuit helmet" desc = "A silvery chrome, single visor space helmet with built-in peripherals and very bright fore lighting. A favorite of bounty hunters." @@ -209,6 +214,8 @@ species_restricted = list(BODYTYPE_HUMAN) refittable = FALSE + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/valkyrie name = "valkyrie voidsuit helmet" desc = "A slot-eyed space helmet, sleek and designed for military purposes. Colored in Elyran military camouflage." @@ -256,6 +263,8 @@ refittable_species = list(BODYTYPE_HUMAN, BODYTYPE_IPC) max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE + 10000 + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/lancer name = "lancer voidsuit helmet" desc = "A sleek helmet with a bright yellow visor, expertly made in and colored in the iconic branding of Ceres' Lance." @@ -305,6 +314,8 @@ species_restricted = list(BODYTYPE_HUMAN) refittable_species = list(BODYTYPE_HUMAN, BODYTYPE_UNATHI) + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/suit/space/void/lancer/unathi desc = "A bulky void suit with heavy plating. Looks to be colored in the branding of Ceres' Lance. This one is fitted to Unathi." refit_initialize = BODYTYPE_UNATHI @@ -361,6 +372,8 @@ icon_supported_species_tags = list("skr", "ipc") refittable_species = list(BODYTYPE_HUMAN, BODYTYPE_IPC, BODYTYPE_SKRELL) + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + //Zeng-Hu Pharmaceuticals espionage voidsuit /obj/item/clothing/head/helmet/space/void/zenghu name = "dragon biohazard suit helmet" @@ -413,6 +426,8 @@ icon_supported_species_tags = list("skr", "ipc") refittable_species = list(BODYTYPE_HUMAN, BODYTYPE_SKRELL, BODYTYPE_IPC) + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + //Hephaestus Industries espionage voidsuit /obj/item/clothing/head/helmet/space/void/hephaestus name = "caiman drop suit helmet" @@ -465,6 +480,8 @@ icon_supported_species_tags = list("una") refittable_species = list(BODYTYPE_HUMAN, BODYTYPE_UNATHI) + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + //Zavodskoi Interstellar espionage voidsuit /obj/item/clothing/head/helmet/space/void/zavodskoi name = "revenant suit helmet" @@ -514,6 +531,8 @@ species_restricted = list(BODYTYPE_HUMAN) desc_extended = "A portable, sleek combat suit utilized in excess by Zavodskoi Interstellar private military contractors. It is known to be utilized by the company's most secretive sectors explicitly for espionage." + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + //Freelancer voidsuit /obj/item/clothing/head/helmet/space/void/freelancer name = "armored voidsuit helmet" @@ -563,6 +582,8 @@ species_restricted = list(BODYTYPE_HUMAN, BODYTYPE_SKRELL) refittable_species = list(BODYTYPE_HUMAN, BODYTYPE_TAJARA, BODYTYPE_IPC, BODYTYPE_UNATHI, BODYTYPE_SKRELL) + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/dominia name = "dominian prejoroub combat helmet" desc = "A glamorous, decorated helmet with thick plating across its faces. It holds the emblematic markings of the Empire of Dominia, if its design wasn't unmistakable enough." @@ -619,6 +640,8 @@ icon_supported_species_tags = list("una") refittable_species = list(BODYTYPE_HUMAN, BODYTYPE_UNATHI) + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/suit/space/void/dominia/voidsman name = "dominian voidsman suit" desc = "A Dominian voidsuit helmet issued to imperial fleet voidsmen. Not as flashy as most Dominian equipment tends to be." @@ -717,6 +740,8 @@ RAD = ARMOR_RAD_SMALL ) + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/golden_deep/hoplan name = "hoplan voidsuit helmet" desc = "This is an extremely bulky and heavily made voidsuit helmet used by the Hoplan, the military of the Golden Deep. Designed to provide extreme protection in all conditions, but not particularly comfortable for human use." @@ -1076,6 +1101,8 @@ icon_supported_species_tags = list("ipc", "skr", "taj", "una", "vau", "vaw") refittable_species = list(BODYTYPE_HUMAN, BODYTYPE_IPC, BODYTYPE_TAJARA, BODYTYPE_UNATHI, BODYTYPE_SKRELL, BODYTYPE_VAURCA) + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/tcaf name = "tau ceti armed forces voidsuit helmet" desc = "A Zavodskoi-designed armored voidsuit helmet, painted in the colors of the Republic of Biesel. Commonly seen in use by personnel of the Tau Ceti Armed Forces." @@ -1151,6 +1178,8 @@ siemens_coefficient = 0.35 contained_sprite = TRUE + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + /obj/item/clothing/head/helmet/space/void/outereyes name = "\improper Outer Eyes voidsuit helmet" desc = "A royal burgandy and black armoured helmet of the mysterious Outer Eyes. At the center of the helmet, a single white eye." diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm index 1fe5dfc2802..9e0a712cba3 100644 --- a/code/modules/clothing/spacesuits/void/station.dm +++ b/code/modules/clothing/spacesuits/void/station.dm @@ -193,6 +193,8 @@ allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/melee/baton) refittable_species = list(BODYTYPE_HUMAN, BODYTYPE_TAJARA, BODYTYPE_IPC, BODYTYPE_UNATHI, BODYTYPE_SKRELL) + movement_sounds = SFX_ARMOURED_VOIDSUIT_FOOTSTEPS + //Atmospherics Rig /obj/item/clothing/head/helmet/space/void/atmos desc = "A special helmet designed for work in a hazardous, low pressure environments. Has improved thermal protection and minor radiation shielding." diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index 268d980adca..17cf875ebcb 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -74,6 +74,8 @@ BODYTYPE_IPC= 'icons/obj/clothing/species/machine/suits.dmi' ) + movement_sounds = SFX_VOIDSUIT_FOOTSTEPS + action_button_name = "Toggle Helmet" var/helmet_deploy_sound = 'sound/items/helmet_close.ogg' var/helmet_retract_sound = 'sound/items/helmet_open.ogg' diff --git a/code/modules/clothing/suits/modular_armor.dm b/code/modules/clothing/suits/modular_armor.dm index cf166dccebe..031d9e0d93b 100644 --- a/code/modules/clothing/suits/modular_armor.dm +++ b/code/modules/clothing/suits/modular_armor.dm @@ -10,6 +10,8 @@ restricted_accessory_slots = list(ACCESSORY_SLOT_ARMOR_PLATE, ACCESSORY_SLOT_ARM_GUARDS, ACCESSORY_SLOT_LEG_GUARDS, ACCESSORY_SLOT_ARMOR_POCKETS) valid_accessory_slots = list(ACCESSORY_SLOT_ARMOR_PLATE, ACCESSORY_SLOT_ARM_GUARDS, ACCESSORY_SLOT_LEG_GUARDS, ACCESSORY_SLOT_ARMOR_POCKETS, ACCESSORY_SLOT_GENERIC, ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_CAPE, ACCESSORY_SLOT_UTILITY_MINOR) pockets = null + movement_sounds = SFX_LIGHT_ARMOUR_FOOTSTEPS + movement_sound_volume = 10 /obj/item/clothing/suit/armor/carrier/dominia name = "imperial army flak vest" @@ -59,6 +61,8 @@ /obj/item/clothing/accessory/storage/modular_pouch ) + movement_sounds = SFX_HEAVY_ARMOUR_FOOTSTEPS + /obj/item/clothing/suit/armor/carrier/ballistic starting_accessories = list( /obj/item/clothing/accessory/armor_plate/ballistic, @@ -67,6 +71,8 @@ /obj/item/clothing/accessory/storage/modular_pouch/large ) + movement_sounds = SFX_HEAVY_ARMOUR_FOOTSTEPS + /obj/item/clothing/suit/armor/carrier/ablative starting_accessories = list( /obj/item/clothing/accessory/armor_plate/ablative, @@ -75,6 +81,8 @@ /obj/item/clothing/accessory/storage/modular_pouch/large ) + movement_sounds = SFX_HEAVY_ARMOUR_FOOTSTEPS + /obj/item/clothing/suit/armor/carrier/military starting_accessories = list( /obj/item/clothing/accessory/armor_plate/military, @@ -83,6 +91,8 @@ /obj/item/clothing/accessory/storage/modular_pouch/large ) + movement_sounds = SFX_HEAVY_ARMOUR_FOOTSTEPS + /obj/item/clothing/suit/armor/carrier/heavy starting_accessories = list( /obj/item/clothing/accessory/armor_plate/heavy, @@ -91,6 +101,8 @@ /obj/item/clothing/accessory/storage/modular_pouch/large ) + movement_sounds = SFX_HEAVY_ARMOUR_FOOTSTEPS + /obj/item/clothing/suit/armor/carrier/heavy/scc starting_accessories = list( /obj/item/clothing/accessory/armor_plate/heavy/scc, @@ -116,6 +128,8 @@ /obj/item/clothing/accessory/storage/chestpouch ) + movement_sounds = SFX_HEAVY_ARMOUR_FOOTSTEPS + /obj/item/clothing/suit/armor/carrier/tcaf/tcaf_light starting_accessories = list( /obj/item/clothing/accessory/armor_plate/tcaf/tcaf_light, @@ -131,6 +145,8 @@ /obj/item/clothing/accessory/storage/modular_pouch/large ) + movement_sounds = SFX_HEAVY_ARMOUR_FOOTSTEPS + /obj/item/clothing/suit/armor/carrier/lance starting_accessories = list( /obj/item/clothing/accessory/armor_plate/riot/lancer, @@ -139,6 +155,8 @@ /obj/item/clothing/accessory/storage/modular_pouch/large ) + movement_sounds = SFX_HEAVY_ARMOUR_FOOTSTEPS + /obj/item/clothing/accessory/armor_plate name = "corporate armor plate" desc = "A particularly light-weight armor plate in stylish corporate black. Unfortunately, not very good if you hold it with your hands." diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 92eec0ac162..b77f420ca30 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -10,6 +10,7 @@ mob_swap_flags = ~HEAVY light_system = MOVABLE_LIGHT blocks_emissive = EMISSIVE_BLOCK_NONE + footstep_component_type = /datum/component/mob_footsteps/human /mob/living/carbon/human/Initialize(mapload, var/new_species = null) if(!dna) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index db3c303c678..244fbb15247 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -129,15 +129,7 @@ handle_leg_damage() var/turf/T = get_turf(loc) - var/footsound - var/top_layer = 0 - if(istype(T)) - for(var/obj/structure/S in T) - if(S.layer > top_layer && S.footstep_sound) - top_layer = S.layer - footsound = S.footstep_sound - if(!footsound) - footsound = T.footstep_sound + if (client && T) var/turf/T1 = GET_TURF_ABOVE(T) @@ -149,16 +141,7 @@ return last_x = x last_y = y - if(shoes) - var/obj/item/clothing/shoes/S = shoes - if(S.do_special_footsteps(m_intent)) - return - if (m_intent == M_RUN) - playsound(src, (is_noisy ? footsound : species.footsound), 70, TRUE, extrarange = MEDIUM_RANGE_SOUND_EXTRARANGE, required_asfx_toggles = ASFX_FOOTSTEPS) - else - footstep++ - if (footstep % 2) - playsound(src, (is_noisy ? footsound : species.footsound), 40, TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE, required_asfx_toggles = ASFX_FOOTSTEPS) + /mob/living/carbon/human/proc/handle_leg_damage() if(!can_feel_pain()) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 4f9f23905ef..2451f9ec903 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -917,6 +917,9 @@ default behaviour is: register_init_signals() AddElement(/datum/element/connect_loc, loc_connections) + load_footstep_component() + if(footstep_sound) + SEND_SIGNAL(src, COMSIG_MOB_ADD_FOOTSTEP_SOUND, src, footstep_sound) /mob/living/Destroy() cameraFollow = null @@ -1075,3 +1078,12 @@ default behaviour is: set_density(FALSE) else set_density(TRUE) + +/** + * Used to override if a mob should have footsteps or not. + */ +/mob/living/proc/load_footstep_component() + if(anchored) + return + + LoadComponent(footstep_component_type) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index d4609d76bd7..b730e4678e9 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -41,6 +41,10 @@ var/fire_stacks_temperature = 0 var/footstep = 0 + /// The type of footstep components spawned for the mob. Particularly important for humans, which have barefoot sounds. + var/footstep_component_type = /datum/component/mob_footsteps + /// The footstep sounds we want to play. + var/list/footstep_sound /// This is used to determine if the mob failed a breath. If they did fail a breath, they will attempt to breathe each tick, otherwise just once per 4 ticks. var/failed_last_breath = 0 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 71133f7e971..4627c52f8a5 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -51,6 +51,7 @@ attack_sound = 'sound/weapons/bite.ogg' emote_sounds = list('sound/effects/creatures/spider_critter.ogg') sample_data = list("Genetic markers identified as being linked with stem cell differentiaton", "Tissue sample contains high muscle content") + footstep_sound = 'sound/effects/creatures/spider_walk.ogg' //nursemaids - these create webs and eggs /mob/living/simple_animal/hostile/giant_spider/nurse diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index b1cb0743ac4..f3e01ac22a4 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -1158,6 +1158,11 @@ visual_effect_icon = ATTACK_EFFECT_SMASH ..() +/mob/living/simple_animal/load_footstep_component() + if(flying || !footstep_sound) + return + return ..() + #undef BLOOD_NONE #undef BLOOD_LIGHT #undef BLOOD_MEDIUM diff --git a/html/changelogs/mattatlas-walkgearsounds.yml b/html/changelogs/mattatlas-walkgearsounds.yml new file mode 100644 index 00000000000..1a8f7aa210e --- /dev/null +++ b/html/changelogs/mattatlas-walkgearsounds.yml @@ -0,0 +1,60 @@ +################################ +# 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 +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: ChangeMe + +# 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, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added a new system in charge of dynamic footsteps." + - rscadd: "Greimorians now have footstep sounds." + - rscadd: "Armour vests and voidsuits now make sound when you walk around." diff --git a/sound/attributions.txt b/sound/attributions.txt index 81c2c497170..48a83afd2e4 100644 --- a/sound/attributions.txt +++ b/sound/attributions.txt @@ -205,6 +205,7 @@ sound/species/synthetic/fragmentation.ogg -- https://freesound.org/s/390531/ -- sound/species/synthetic/sizzle_*.ogg -- https://freesound.org/s/35872/ -- License: Attribution NonCommercial 3.0 sound/species/synthetic/synthetic_bootup.ogg -- https://freesound.org/s/320664/ -- License: Creative Commons 0 mixed with VHS Startup by Sassaby -- https://freesound.org/s/264934/ -- License: Creative Commons 0 sound/species/synthetic/synthetic_restart.ogg -- https://freesound.org/s/176796/ -- License: Attribution 4.0, remixed with Audacity +ATTRIBUTIONS SECTOR END ATTRIBUTIONS SECTION START sound/effects/metalping.ogg - ported from CM-SS13 @@ -221,3 +222,9 @@ ATTRIBUTIONS SECTION END ATTRIBUTIONS SECTION START sound/machines/electrical_humming.ogg - SFX_GEOFON-HUM-ELECTRICAL-BOARD_4824_01 by pblzr/freesound.org, licensed under CC0 1.0. https://freesound.org/people/pblzr/sounds/785942/ ATTRIBUTIONS SECTION END + +ATTRIBUTIONS SECTOR START +sound/items/movement/gear_jiggle1 to 4.ogg -- github.com/budg3/CDDA-Soundpack/env/walk +sound/items/rattle_* -- +sound/effects/creatures/spider_walk.ogg -- https://freesound.org/people/dasrealized/sounds/266014, licensed under CC0 +ATTRIBUTIONS SECTOR END diff --git a/sound/effects/creatures/spider_walk.ogg b/sound/effects/creatures/spider_walk.ogg new file mode 100644 index 00000000000..ae2b331cbc5 Binary files /dev/null and b/sound/effects/creatures/spider_walk.ogg differ diff --git a/sound/items/movement/gear_jiggle1.ogg b/sound/items/movement/gear_jiggle1.ogg new file mode 100644 index 00000000000..48652a4c7a4 Binary files /dev/null and b/sound/items/movement/gear_jiggle1.ogg differ diff --git a/sound/items/movement/gear_jiggle2.ogg b/sound/items/movement/gear_jiggle2.ogg new file mode 100644 index 00000000000..af083e0a71f Binary files /dev/null and b/sound/items/movement/gear_jiggle2.ogg differ diff --git a/sound/items/movement/gear_jiggle3.ogg b/sound/items/movement/gear_jiggle3.ogg new file mode 100644 index 00000000000..ed956825c32 Binary files /dev/null and b/sound/items/movement/gear_jiggle3.ogg differ diff --git a/sound/items/movement/gear_jiggle4.ogg b/sound/items/movement/gear_jiggle4.ogg new file mode 100644 index 00000000000..326e5457a2d Binary files /dev/null and b/sound/items/movement/gear_jiggle4.ogg differ diff --git a/sound/items/movement/guns/rattle_medium_1.ogg b/sound/items/movement/guns/rattle_medium_1.ogg new file mode 100644 index 00000000000..9555b1cc4c5 Binary files /dev/null and b/sound/items/movement/guns/rattle_medium_1.ogg differ diff --git a/sound/items/movement/guns/rattle_medium_10.ogg b/sound/items/movement/guns/rattle_medium_10.ogg new file mode 100644 index 00000000000..dbb799989a1 Binary files /dev/null and b/sound/items/movement/guns/rattle_medium_10.ogg differ diff --git a/sound/items/movement/guns/rattle_medium_2.ogg b/sound/items/movement/guns/rattle_medium_2.ogg new file mode 100644 index 00000000000..a8d7c50a613 Binary files /dev/null and b/sound/items/movement/guns/rattle_medium_2.ogg differ diff --git a/sound/items/movement/guns/rattle_medium_3.ogg b/sound/items/movement/guns/rattle_medium_3.ogg new file mode 100644 index 00000000000..8dc317047a6 Binary files /dev/null and b/sound/items/movement/guns/rattle_medium_3.ogg differ diff --git a/sound/items/movement/guns/rattle_medium_4.ogg b/sound/items/movement/guns/rattle_medium_4.ogg new file mode 100644 index 00000000000..b610ef82cbb Binary files /dev/null and b/sound/items/movement/guns/rattle_medium_4.ogg differ diff --git a/sound/items/movement/guns/rattle_medium_5.ogg b/sound/items/movement/guns/rattle_medium_5.ogg new file mode 100644 index 00000000000..48d50af6189 Binary files /dev/null and b/sound/items/movement/guns/rattle_medium_5.ogg differ diff --git a/sound/items/movement/guns/rattle_medium_6.ogg b/sound/items/movement/guns/rattle_medium_6.ogg new file mode 100644 index 00000000000..98f3cfc6441 Binary files /dev/null and b/sound/items/movement/guns/rattle_medium_6.ogg differ diff --git a/sound/items/movement/guns/rattle_medium_7.ogg b/sound/items/movement/guns/rattle_medium_7.ogg new file mode 100644 index 00000000000..1fb2320a7de Binary files /dev/null and b/sound/items/movement/guns/rattle_medium_7.ogg differ diff --git a/sound/items/movement/guns/rattle_medium_8.ogg b/sound/items/movement/guns/rattle_medium_8.ogg new file mode 100644 index 00000000000..d624a1342d3 Binary files /dev/null and b/sound/items/movement/guns/rattle_medium_8.ogg differ diff --git a/sound/items/movement/guns/rattle_medium_9.ogg b/sound/items/movement/guns/rattle_medium_9.ogg new file mode 100644 index 00000000000..5ef0d2fb51d Binary files /dev/null and b/sound/items/movement/guns/rattle_medium_9.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_1.ogg b/sound/items/movement/rattle_cloth_heavy_1.ogg new file mode 100644 index 00000000000..1b4368f8e5d Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_1.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_2.ogg b/sound/items/movement/rattle_cloth_heavy_2.ogg new file mode 100644 index 00000000000..086cad8ab16 Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_2.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_3.ogg b/sound/items/movement/rattle_cloth_heavy_3.ogg new file mode 100644 index 00000000000..f222bc879a3 Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_3.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_4.ogg b/sound/items/movement/rattle_cloth_heavy_4.ogg new file mode 100644 index 00000000000..7f3372c00a6 Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_4.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_5.ogg b/sound/items/movement/rattle_cloth_heavy_5.ogg new file mode 100644 index 00000000000..a46129ee5b3 Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_5.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_6.ogg b/sound/items/movement/rattle_cloth_heavy_6.ogg new file mode 100644 index 00000000000..99cb7017bda Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_6.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_7.ogg b/sound/items/movement/rattle_cloth_heavy_7.ogg new file mode 100644 index 00000000000..5fd6ef36ec8 Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_7.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_8.ogg b/sound/items/movement/rattle_cloth_heavy_8.ogg new file mode 100644 index 00000000000..24b6439fc1e Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_8.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_light_1.ogg b/sound/items/movement/rattle_cloth_heavy_light_1.ogg new file mode 100644 index 00000000000..26460d1557a Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_light_1.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_light_2.ogg b/sound/items/movement/rattle_cloth_heavy_light_2.ogg new file mode 100644 index 00000000000..911a064291c Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_light_2.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_light_3.ogg b/sound/items/movement/rattle_cloth_heavy_light_3.ogg new file mode 100644 index 00000000000..76e27daab08 Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_light_3.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_light_4.ogg b/sound/items/movement/rattle_cloth_heavy_light_4.ogg new file mode 100644 index 00000000000..5a08059e3bd Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_light_4.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_light_5.ogg b/sound/items/movement/rattle_cloth_heavy_light_5.ogg new file mode 100644 index 00000000000..24539c5c90f Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_light_5.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_light_6.ogg b/sound/items/movement/rattle_cloth_heavy_light_6.ogg new file mode 100644 index 00000000000..39dcee4ed19 Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_light_6.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_light_7.ogg b/sound/items/movement/rattle_cloth_heavy_light_7.ogg new file mode 100644 index 00000000000..7a630849c48 Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_light_7.ogg differ diff --git a/sound/items/movement/rattle_cloth_heavy_light_8.ogg b/sound/items/movement/rattle_cloth_heavy_light_8.ogg new file mode 100644 index 00000000000..25bb8eb4996 Binary files /dev/null and b/sound/items/movement/rattle_cloth_heavy_light_8.ogg differ diff --git a/sound/items/movement/rattle_light_1.ogg b/sound/items/movement/rattle_light_1.ogg new file mode 100644 index 00000000000..d19a58b57df Binary files /dev/null and b/sound/items/movement/rattle_light_1.ogg differ diff --git a/sound/items/movement/rattle_light_10.ogg b/sound/items/movement/rattle_light_10.ogg new file mode 100644 index 00000000000..4577aa38bf9 Binary files /dev/null and b/sound/items/movement/rattle_light_10.ogg differ diff --git a/sound/items/movement/rattle_light_11.ogg b/sound/items/movement/rattle_light_11.ogg new file mode 100644 index 00000000000..ac8c93aba33 Binary files /dev/null and b/sound/items/movement/rattle_light_11.ogg differ diff --git a/sound/items/movement/rattle_light_2.ogg b/sound/items/movement/rattle_light_2.ogg new file mode 100644 index 00000000000..8bf0a6b8cff Binary files /dev/null and b/sound/items/movement/rattle_light_2.ogg differ diff --git a/sound/items/movement/rattle_light_3.ogg b/sound/items/movement/rattle_light_3.ogg new file mode 100644 index 00000000000..de9cb71a7e1 Binary files /dev/null and b/sound/items/movement/rattle_light_3.ogg differ diff --git a/sound/items/movement/rattle_light_4.ogg b/sound/items/movement/rattle_light_4.ogg new file mode 100644 index 00000000000..bd234a48c82 Binary files /dev/null and b/sound/items/movement/rattle_light_4.ogg differ diff --git a/sound/items/movement/rattle_light_5.ogg b/sound/items/movement/rattle_light_5.ogg new file mode 100644 index 00000000000..67ffc710a0b Binary files /dev/null and b/sound/items/movement/rattle_light_5.ogg differ diff --git a/sound/items/movement/rattle_light_6.ogg b/sound/items/movement/rattle_light_6.ogg new file mode 100644 index 00000000000..eaa80e8c047 Binary files /dev/null and b/sound/items/movement/rattle_light_6.ogg differ diff --git a/sound/items/movement/rattle_light_7.ogg b/sound/items/movement/rattle_light_7.ogg new file mode 100644 index 00000000000..c56b9667544 Binary files /dev/null and b/sound/items/movement/rattle_light_7.ogg differ diff --git a/sound/items/movement/rattle_light_8.ogg b/sound/items/movement/rattle_light_8.ogg new file mode 100644 index 00000000000..c295019cc62 Binary files /dev/null and b/sound/items/movement/rattle_light_8.ogg differ diff --git a/sound/items/movement/rattle_light_9.ogg b/sound/items/movement/rattle_light_9.ogg new file mode 100644 index 00000000000..0678e4104d2 Binary files /dev/null and b/sound/items/movement/rattle_light_9.ogg differ