mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 16:07:40 +00:00
61 lines
2.1 KiB
Plaintext
61 lines
2.1 KiB
Plaintext
/datum/component/squeak
|
|
var/static/list/default_squeak_sounds = list('sound/items/toysqueak1.ogg'=1, 'sound/items/toysqueak2.ogg'=1, 'sound/items/toysqueak3.ogg'=1)
|
|
var/list/override_squeak_sounds
|
|
var/squeak_chance = 100
|
|
var/volume = 30
|
|
|
|
// This is so shoes don't squeak every step
|
|
var/steps = 0
|
|
var/step_delay = 1
|
|
|
|
// This is to stop squeak spam from inhand usage
|
|
var/last_use = 0
|
|
var/use_delay = 20
|
|
|
|
/datum/component/squeak/Initialize(custom_sounds, volume_override, chance_override, step_delay_override, use_delay_override)
|
|
if(custom_sounds)
|
|
override_squeak_sounds = custom_sounds
|
|
if(chance_override)
|
|
squeak_chance = chance_override
|
|
if(volume_override)
|
|
volume = volume_override
|
|
if(step_delay_override)
|
|
step_delay = step_delay_override
|
|
if(use_delay_override)
|
|
use_delay = use_delay_override
|
|
|
|
if(istype(parent, /atom))
|
|
RegisterSignal(COMSIG_ATOM_BLOB_ACT, .proc/play_squeak)
|
|
RegisterSignal(COMSIG_ATOM_HULK_ATTACK, .proc/play_squeak)
|
|
RegisterSignal(COMSIG_PARENT_ATTACKBY, .proc/play_squeak)
|
|
if(istype(parent, /atom/movable))
|
|
RegisterSignal(COMSIG_MOVABLE_CROSSED, .proc/play_squeak)
|
|
RegisterSignal(COMSIG_MOVABLE_COLLIDE, .proc/play_squeak)
|
|
RegisterSignal(COMSIG_MOVABLE_IMPACT, .proc/play_squeak)
|
|
if(istype(parent, /obj/item))
|
|
RegisterSignal(COMSIG_ITEM_ATTACK, .proc/play_squeak)
|
|
RegisterSignal(COMSIG_ITEM_ATTACK_SELF, .proc/use_squeak)
|
|
RegisterSignal(COMSIG_ITEM_ATTACK_OBJ, .proc/play_squeak)
|
|
if(istype(parent, /obj/item/clothing/shoes))
|
|
RegisterSignal(COMSIG_SHOES_STEP_ACTION, .proc/step_squeak)
|
|
else
|
|
RegisterSignal(COMSIG_ATOM_ENTERED, .proc/play_squeak)
|
|
|
|
/datum/component/squeak/proc/play_squeak()
|
|
if(prob(squeak_chance))
|
|
if(!override_squeak_sounds)
|
|
playsound(parent, pickweight(default_squeak_sounds), volume, 1, -1)
|
|
else
|
|
playsound(parent, pickweight(override_squeak_sounds), volume, 1, -1)
|
|
|
|
/datum/component/squeak/proc/step_squeak()
|
|
if(steps > step_delay)
|
|
play_squeak()
|
|
steps = 0
|
|
else
|
|
steps++
|
|
|
|
/datum/component/squeak/proc/use_squeak()
|
|
if(last_use + use_delay < world.time)
|
|
last_use = world.time
|
|
play_squeak() |