/
nerfed_pulling.dm
53 lines (36 loc) · 1.84 KB
/
nerfed_pulling.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/// This living will be slower when pulling/moving anything in the given typecache
/datum/element/nerfed_pulling
element_flags = ELEMENT_BESPOKE | ELEMENT_DETACH_ON_HOST_DESTROY
argument_hash_start_idx = 2
/// The typecache of things that shouldn't be easily movable
var/list/typecache
/datum/element/nerfed_pulling/Attach(datum/target, list/typecache)
. = ..()
if (!isliving(target))
return ELEMENT_INCOMPATIBLE
src.typecache = typecache
RegisterSignal(target, COMSIG_LIVING_PUSHING_MOVABLE, PROC_REF(on_push_movable))
RegisterSignal(target, COMSIG_LIVING_UPDATING_PULL_MOVESPEED, PROC_REF(on_updating_pull_movespeed))
/datum/element/nerfed_pulling/Detach(mob/living/source)
source.remove_movespeed_modifier(/datum/movespeed_modifier/nerfed_bump)
source.remove_movespeed_modifier(/datum/movespeed_modifier/nerfed_pull)
UnregisterSignal(source, list(COMSIG_LIVING_PUSHING_MOVABLE, COMSIG_LIVING_UPDATING_PULL_MOVESPEED))
return ..()
/datum/element/nerfed_pulling/proc/on_push_movable(mob/living/source, atom/movable/being_pushed)
SIGNAL_HANDLER
if (!will_slow_down(being_pushed))
return
source.add_movespeed_modifier(/datum/movespeed_modifier/nerfed_bump)
addtimer(CALLBACK(source, TYPE_PROC_REF(/mob, remove_movespeed_modifier), /datum/movespeed_modifier/nerfed_bump), 1 SECONDS, TIMER_OVERRIDE | TIMER_UNIQUE)
/datum/element/nerfed_pulling/proc/on_updating_pull_movespeed(mob/living/source)
SIGNAL_HANDLER
if (!will_slow_down(source.pulling))
source.remove_movespeed_modifier(/datum/movespeed_modifier/nerfed_pull)
return
source.add_movespeed_modifier(/datum/movespeed_modifier/nerfed_pull)
/datum/element/nerfed_pulling/proc/will_slow_down(datum/input)
return !isnull(input) && typecache[input.type]
/datum/movespeed_modifier/nerfed_pull
multiplicative_slowdown = 5.5
/datum/movespeed_modifier/nerfed_bump
multiplicative_slowdown = 5.5