mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-11 10:22:13 +00:00
43 lines
1.1 KiB
Plaintext
43 lines
1.1 KiB
Plaintext
#define SHORT 4/5
|
|
#define TALL 5/4
|
|
|
|
///Very similar to squish, but for dwarves and shorties
|
|
/datum/element/dwarfism
|
|
element_flags = ELEMENT_DETACH|ELEMENT_BESPOKE
|
|
id_arg_index = 2
|
|
var/comsig
|
|
var/list/attached_targets = list()
|
|
|
|
/datum/element/dwarfism/Attach(datum/target, comsig, comsig_target)
|
|
. = ..()
|
|
if(!isliving(target))
|
|
return ELEMENT_INCOMPATIBLE
|
|
|
|
src.comsig = comsig
|
|
|
|
var/mob/living/L = target
|
|
if(L.lying != 0)
|
|
L.transform = L.transform.Scale(SHORT, 1)
|
|
else
|
|
L.transform = L.transform.Scale(1, SHORT)
|
|
attached_targets[target] = comsig_target
|
|
RegisterSignal(target, comsig, .proc/check_loss) //Second arg of the signal will be checked against the comsig_target.
|
|
|
|
/datum/element/dwarfism/proc/check_loss(mob/living/L, comsig_target)
|
|
if(attached_targets[L] == comsig_target)
|
|
Detach(L)
|
|
|
|
/datum/element/dwarfism/Detach(mob/living/L)
|
|
. = ..()
|
|
if(QDELETED(L))
|
|
return
|
|
if(L.lying != 0)
|
|
L.transform = L.transform.Scale(TALL, 1)
|
|
else
|
|
L.transform = L.transform.Scale(1, TALL)
|
|
UnregisterSignal(L, comsig)
|
|
attached_targets -= L
|
|
|
|
#undef SHORT
|
|
#undef TALL
|