2*KM6
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
literal 0
HcmV?d00001
diff --git a/sound/items/toysqueak3.ogg b/sound/items/toysqueak3.ogg
new file mode 100644
index 0000000000000000000000000000000000000000..338f4d8aa90bb5188cb86eb5a9814974e0634b32
GIT binary patch
literal 13778
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
literal 0
HcmV?d00001
From b5425869daf1493bb030cb64859bbde170ab342c Mon Sep 17 00:00:00 2001
From: variableundefined <40092670+variableundefined@users.noreply.github.com>
Date: Mon, 5 Nov 2018 21:33:42 +0800
Subject: [PATCH 2/5] Most content fixed, except for blob act.
---
code/datums/components/squeak.dm | 17 +++++++++++++++++
code/game/atoms.dm | 1 +
code/game/objects/items/weapons/clown_items.dm | 3 ---
code/modules/recycling/disposal.dm | 1 +
4 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm
index 7691e35ca11..4a2ef8a0289 100644
--- a/code/datums/components/squeak.dm
+++ b/code/datums/components/squeak.dm
@@ -24,6 +24,8 @@
RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/play_squeak_crossed)
if(isitem(parent))
RegisterSignal(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_HIT_REACT, COMSIG_ITEM_ATTACK_SELF), .proc/play_squeak)
+ RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/on_equip)
+ RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/on_drop)
if(istype(parent, /obj/item/clothing/shoes))
RegisterSignal(parent, COMSIG_SHOES_STEP_ACTION, .proc/step_squeak)
@@ -54,6 +56,12 @@
else
steps++
+/datum/component/squeak/proc/on_equip(datum/source, mob/equipper, slot)
+ RegisterSignal(equipper, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react, TRUE)
+
+/datum/component/squeak/proc/on_drop(datum/source, mob/user)
+ UnregisterSignal(user, COMSIG_MOVABLE_DISPOSING)
+
/datum/component/squeak/proc/play_squeak_crossed(atom/movable/AM)
if(isitem(AM))
var/obj/item/I = AM
@@ -65,4 +73,13 @@
return
var/atom/current_parent = parent
if(isturf(current_parent.loc))
+ play_squeak()
+
+/datum/component/squeak/proc/disposing_react(datum/source, obj/structure/disposalholder/holder, obj/machinery/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/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()
\ No newline at end of file
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 457915756bf..4398229391b 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -150,6 +150,7 @@
//Hook for running code when a dir change occurs
/atom/proc/setDir(newdir)
+ SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir)
dir = newdir
/atom/proc/attack_hulk(mob/living/carbon/human/user, does_attack_animation = FALSE)
diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm
index 35ca810541a..5854b3db24c 100644
--- a/code/game/objects/items/weapons/clown_items.dm
+++ b/code/game/objects/items/weapons/clown_items.dm
@@ -27,9 +27,6 @@
. = ..()
AddComponent(/datum/component/squeak, honk_sounds, 50)
-/obj/item/bikehorn/Crossed()
- . = ..()
-
/obj/item/bikehorn/airhorn
name = "air horn"
desc = "Damn son, where'd you find this?"
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index f6474c4a16b..d0007ab7266 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -538,6 +538,7 @@
// note AM since can contain mobs or objs
for(var/atom/movable/AM in D)
AM.loc = src
+ SEND_SIGNAL(AM, COMSIG_MOVABLE_DISPOSING, src, D)
if(istype(AM, /mob/living/carbon/human))
var/mob/living/carbon/human/H = AM
if(FAT in H.mutations) // is a human and fat?
From 9e5a6698ad4e381fc33c8b2177972ed818b00ed3 Mon Sep 17 00:00:00 2001
From: variableundefined <40092670+variableundefined@users.noreply.github.com>
Date: Tue, 13 Nov 2018 09:15:17 +0800
Subject: [PATCH 3/5] Restore original TG cooldown behavior
---
code/datums/components/squeak.dm | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm
index 4a2ef8a0289..e0da1816f27 100644
--- a/code/datums/components/squeak.dm
+++ b/code/datums/components/squeak.dm
@@ -11,11 +11,11 @@
var/steps = 0
var/step_delay = 1
- // This is to stop squeak spam (Apply to both usage and normal triggering unlike tg which only apply it to use)
- var/last_squeak = 0
- var/squeak_delay = 20
+ // 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, squeak_delay_override)
+/datum/component/squeak/Initialize(custom_sounds, volume_override, chance_override, step_delay_override, use_delay_override)
if(!isatom(parent))
return COMPONENT_INCOMPATIBLE
RegisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY), .proc/play_squeak)
@@ -23,7 +23,8 @@
RegisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT), .proc/play_squeak)
RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/play_squeak_crossed)
if(isitem(parent))
- RegisterSignal(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_HIT_REACT, COMSIG_ITEM_ATTACK_SELF), .proc/play_squeak)
+ RegisterSignal(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_HIT_REACT), .proc/play_squeak)
+ RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/use_squeak)
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/on_equip)
RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/on_drop)
if(istype(parent, /obj/item/clothing/shoes))
@@ -36,13 +37,10 @@
volume = volume_override
if(isnum(step_delay_override))
step_delay = step_delay_override
- if(isnum(squeak_delay_override))
- squeak_delay = squeak_delay_override
+ if(isnum(use_delay_override))
+ use_delay = use_delay_override
/datum/component/squeak/proc/play_squeak()
- if(last_squeak + squeak_delay >= world.time)
- return
- last_squeak = world.time
if(prob(squeak_chance))
if(!override_squeak_sounds)
playsound(parent, pickweight(default_squeak_sounds), volume, 1, -1)
@@ -75,6 +73,11 @@
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/disposing_react(datum/source, obj/structure/disposalholder/holder, obj/machinery/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/holder_dir_change)
From ef3a2ce9c529a686538ce983fab4a68cc624e5ae Mon Sep 17 00:00:00 2001
From: variableundefined <40092670+variableundefined@users.noreply.github.com>
Date: Sat, 17 Nov 2018 09:26:13 +0800
Subject: [PATCH 4/5] Adds in missing stub signals
---
code/game/atoms_movable.dm | 1 +
code/game/objects/items.dm | 2 ++
code/modules/clothing/clothing.dm | 1 +
3 files changed, 4 insertions(+)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 5a081d610da..a5d2366c46c 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -214,6 +214,7 @@
//called when src is thrown into hit_atom
/atom/movable/proc/throw_impact(atom/hit_atom, throwingdatum)
set waitfor = 0
+ SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum)
if(!QDELETED(hit_atom))
return hit_atom.hitby(src)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 634407cfd02..c1ff654c246 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -325,6 +325,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
A.Remove(user)
if(flags & DROPDEL)
qdel(src)
+ SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user)
// called just as an item is picked up (loc is not yet changed)
/obj/item/proc/pickup(mob/user)
@@ -352,6 +353,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
// for items that can be placed in multiple slots
// note this isn't called during the initial dressing of a player
/obj/item/proc/equipped(var/mob/user, var/slot)
+ SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot)
for(var/X in actions)
var/datum/action/A = X
if(item_action_slot_check(slot, user)) //some items only give their actions buttons when in a specific slot.
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index bc6f7259ebc..614b5dc4b9f 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -411,6 +411,7 @@ BLIND // can't see anything
..()
/obj/item/clothing/shoes/proc/step_action(var/mob/living/carbon/human/H) //squeek squeek
+ SEND_SIGNAL(src, COMSIG_SHOES_STEP_ACTION)
if(shoe_sound)
var/turf/T = get_turf(H)
From 842b48798010484d90e711466b02996ca402282c Mon Sep 17 00:00:00 2001
From: variableundefined <40092670+variableundefined@users.noreply.github.com>
Date: Wed, 21 Nov 2018 07:07:45 +0800
Subject: [PATCH 5/5] Add disposing signal listening
---
code/datums/components/squeak.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm
index e0da1816f27..e9b6bb6e42a 100644
--- a/code/datums/components/squeak.dm
+++ b/code/datums/components/squeak.dm
@@ -1,5 +1,4 @@
// Squeak component ported over from tg
-// Note to future coders: I decided to remove the special case for squeak cooldown on usage and instead opt for a universal 20 ticks cooldown to avoid squeak spam
/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)
@@ -22,6 +21,7 @@
if(ismovableatom(parent))
RegisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT), .proc/play_squeak)
RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/play_squeak_crossed)
+ RegisterSignal(parent, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react)
if(isitem(parent))
RegisterSignal(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_HIT_REACT), .proc/play_squeak)
RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, .proc/use_squeak)