mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-01-04 22:52:03 +00:00
* Fixes reviver runtime * Confusion status effect * Dizzy status effect * Drowsiness status effect * decaying -> transient * Drunkenness status effect * why use timer when SSfastprocessing work good * stuns (mostly) * weaken and immobalise * stun/weaken times * update_flags redundancies. * Slowed() * Silence + fixes transient decay * Jittery * sleeping * Paralyze -> weaken * Cult sluring * paralyse * Stammer * slurring + projectile cleanups * losebreath * Hallucination * forgor this * eyeblurry * eye blind * Druggy * affected didn't like my spacing * review pass * second review pass * some cleanups * documentation and signal framework * confusion fix * Fixes spec_stun * rejuv fix * removes a TODO * conflicted myself * fixes * self review * review * removes TODOs * adminfreeze * TM fixes * hallucination fix + others * tones down alchol and runtime fixes * confusion overlay suggestion * more fixes * runtime fix * losebreath fix * clamp => directional bounded sum * steel review * oops Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com> * reduces the dizziness cycle rate * borg hotfix * sanctified decursening Co-authored-by: mochi <1496804+dearmochi@users.noreply.github.com> Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com>
54 lines
2.1 KiB
Plaintext
54 lines
2.1 KiB
Plaintext
/**
|
|
* # Slip Component
|
|
*
|
|
* This is a component that can be applied to any movable atom (mob or obj).
|
|
*
|
|
* While the atom has this component, any human mob that walks over it will have a chance to slip.
|
|
* Duration, tiles moved, and so on, depend on what variables are passed in when the component is added.
|
|
*
|
|
*/
|
|
/datum/component/slippery
|
|
/// Text that gets displayed in the slip proc, i.e. "user slips on [description]"
|
|
var/description
|
|
/// The amount of weaken to apply after slip.
|
|
var/weaken
|
|
/// The chance that walking over the parent will slip you.
|
|
var/slip_chance
|
|
/// The amount of tiles someone will be moved after slip.
|
|
var/slip_tiles
|
|
/// TRUE If this slip can be avoided by walking.
|
|
var/walking_is_safe
|
|
/// FALSE if you want no slip shoes to make you immune to the slip
|
|
var/slip_always
|
|
/// The verb that players will see when someone slips on the parent. In the form of "You [slip_verb]ped on".
|
|
var/slip_verb
|
|
|
|
/datum/component/slippery/Initialize(_description, _weaken = 0, _slip_chance = 100, _slip_tiles = 0, _walking_is_safe = TRUE, _slip_always = FALSE, _slip_verb = "slip")
|
|
if(!isatom(parent))
|
|
return COMPONENT_INCOMPATIBLE
|
|
|
|
description = _description
|
|
weaken = max(0, _weaken)
|
|
slip_chance = max(0, _slip_chance)
|
|
slip_tiles = max(0, _slip_tiles)
|
|
walking_is_safe = _walking_is_safe
|
|
slip_always = _slip_always
|
|
slip_verb = _slip_verb
|
|
|
|
/datum/component/slippery/RegisterWithParent()
|
|
RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED, COMSIG_ATOM_ENTERED), .proc/Slip)
|
|
|
|
/datum/component/slippery/UnregisterFromParent()
|
|
UnregisterSignal(parent, list(COMSIG_MOVABLE_CROSSED, COMSIG_ATOM_ENTERED))
|
|
|
|
/**
|
|
Called whenever the parent recieves either the `MOVABLE_CROSSED` signal or the `ATOM_ENTERED` signal.
|
|
|
|
Calls the `victim`'s `slip()` proc with the component's variables as arguments.
|
|
Additionally calls the parent's `after_slip()` proc on the `victim`.
|
|
*/
|
|
/datum/component/slippery/proc/Slip(datum/source, mob/living/carbon/human/victim)
|
|
if(istype(victim) && !victim.flying && prob(slip_chance) && victim.slip(description, weaken, slip_tiles, walking_is_safe, slip_always, slip_verb))
|
|
var/atom/movable/owner = parent
|
|
owner.after_slip(victim)
|