mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
Moves integrity to the atom level (ported from tgstation/tgstation#61183), and allows turfs to be destroyed in the same way objects can. Many things which destroy walls have been reworked to use the integrity system instead, and walls can now be destroyed through conventional means like hitting them with something strong. They can also be repaired with welding tools while not on harm intent. Reinforced walls are still very strong and require powerful tools or weapons to damage. Also changes some demolition modifiers slightly to fit the new system: emitters have 2.4x, overcharged emitters have 4x, and pulse rifles have 6x. Standard wall - 300 integrity, 20 damage deflection, 60 melee/bullet/laser armor Reinforced wall - 400 integrity, 75 damage deflection, 80 melee/bullet armor, 60 laser armor
99 lines
3.8 KiB
Plaintext
99 lines
3.8 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
|
|
|
|
///what we set connect_loc to if parent is an item
|
|
var/static/list/item_connections = list(
|
|
COMSIG_ATOM_ENTERED = PROC_REF(play_squeak_crossed),
|
|
)
|
|
|
|
/datum/component/squeak/Initialize(custom_sounds, volume_override, chance_override, step_delay_override, use_delay_override)
|
|
if(!isatom(parent))
|
|
return COMPONENT_INCOMPATIBLE
|
|
RegisterSignals(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACKBY), PROC_REF(play_squeak))
|
|
if(ismovable(parent))
|
|
RegisterSignals(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT, COMSIG_PROJECTILE_BEFORE_FIRE), PROC_REF(play_squeak))
|
|
AddComponent(/datum/component/connect_loc_behalf, parent, item_connections)
|
|
RegisterSignal(parent, COMSIG_MOVABLE_DISPOSING, PROC_REF(disposing_react))
|
|
if(isitem(parent))
|
|
RegisterSignals(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_HIT_REACT), PROC_REF(play_squeak))
|
|
RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(use_squeak))
|
|
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equip))
|
|
RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(on_drop))
|
|
if(istype(parent, /obj/item/clothing/shoes))
|
|
RegisterSignal(parent, COMSIG_SHOES_STEP_ACTION, PROC_REF(step_squeak))
|
|
if(istype(parent, /obj/item/clothing/neck))
|
|
RegisterSignal(parent, COMSIG_NECK_STEP_ACTION, PROC_REF(step_squeak))
|
|
|
|
override_squeak_sounds = custom_sounds
|
|
if(chance_override)
|
|
squeak_chance = chance_override
|
|
if(volume_override)
|
|
volume = volume_override
|
|
if(isnum(step_delay_override))
|
|
step_delay = step_delay_override
|
|
if(isnum(use_delay_override))
|
|
use_delay = use_delay_override
|
|
|
|
/datum/component/squeak/UnregisterFromParent()
|
|
. = ..()
|
|
qdel(GetComponent(/datum/component/connect_loc_behalf))
|
|
|
|
/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/play_squeak_crossed(datum/source, atom/movable/AM)
|
|
if(isitem(AM))
|
|
var/obj/item/I = AM
|
|
if(I.item_flags & ABSTRACT)
|
|
return
|
|
|
|
if(AM.movement_type & (FLYING|FLOATING) || !AM.has_gravity())
|
|
return
|
|
var/atom/current_parent = parent
|
|
if(isturf(current_parent.loc))
|
|
play_squeak()
|
|
|
|
/datum/component/squeak/proc/use_squeak()
|
|
if(last_use + use_delay < world.time)
|
|
last_use = world.time
|
|
play_squeak()
|
|
|
|
/datum/component/squeak/proc/on_equip(datum/source, mob/equipper, slot)
|
|
RegisterSignal(equipper, COMSIG_MOVABLE_DISPOSING, PROC_REF(disposing_react), TRUE)
|
|
|
|
/datum/component/squeak/proc/on_drop(datum/source, mob/user)
|
|
UnregisterSignal(user, COMSIG_MOVABLE_DISPOSING)
|
|
|
|
// Disposal pipes related shit
|
|
/datum/component/squeak/proc/disposing_react(datum/source, obj/structure/disposalholder/holder, obj/machinery/disposal/disposal_source)
|
|
//We don't need to worry about unregistering this signal as it will happen for us automaticaly when the holder is qdeleted
|
|
RegisterSignal(holder, COMSIG_ATOM_DIR_CHANGE, PROC_REF(holder_dir_change))
|
|
|
|
/datum/component/squeak/proc/holder_dir_change(datum/source, old_dir, new_dir)
|
|
//If the dir changes it means we're going through a bend in the pipes, let's pretend we bumped the wall
|
|
if(old_dir != new_dir)
|
|
play_squeak()
|