mirror of
https://github.com/fulpstation/fulpstation.git
synced 2025-12-09 07:54:14 +00:00
Several months worth of updates. --------- Co-authored-by: A miscellaneous Fern <80640114+FernandoJ8@users.noreply.github.com> Co-authored-by: Pepsilawn <reisenrui@gmail.com> Co-authored-by: Ray <64306407+OneAsianTortoise@users.noreply.github.com> Co-authored-by: Cure221 <106662180+Cure221@users.noreply.github.com>
203 lines
13 KiB
Plaintext
203 lines
13 KiB
Plaintext
///if it allows multiple instances of the effect
|
|
#define STATUS_EFFECT_MULTIPLE 0
|
|
///if it allows only one, preventing new instances
|
|
#define STATUS_EFFECT_UNIQUE 1
|
|
///if it allows only one, but new instances replace
|
|
#define STATUS_EFFECT_REPLACE 2
|
|
/// if it only allows one, and new instances just instead refresh the timer
|
|
#define STATUS_EFFECT_REFRESH 3
|
|
|
|
/// Use in status effect "duration" to make it last forever
|
|
#define STATUS_EFFECT_PERMANENT -1
|
|
/// Use in status effect "tick_interval" to prevent it from calling tick()
|
|
#define STATUS_EFFECT_NO_TICK -1
|
|
/// Use in status effect "tick_interval" to guarantee that tick() gets called on every process()
|
|
#define STATUS_EFFECT_AUTO_TICK 0
|
|
|
|
/// Indicates this status effect is an abstract type, ie not instantiated
|
|
/// Doesn't actually do anything in practice, primarily just a marker / used in unit tests,
|
|
/// so don't worry if your abstract status effect doesn't actually set this
|
|
#define STATUS_EFFECT_ID_ABSTRACT "abstract"
|
|
|
|
///Processing flags - used to define the speed at which the status will work
|
|
/// This is fast - 0.2s between ticks (I believe!)
|
|
#define STATUS_EFFECT_FAST_PROCESS 0
|
|
/// This is slower and better for more intensive status effects - 1s between ticks
|
|
#define STATUS_EFFECT_NORMAL_PROCESS 1
|
|
/// Similar speed to STATUS_EFFECT_FAST_PROCESS, but uses a high priority subsystem (SSpriority_effects)
|
|
#define STATUS_EFFECT_PRIORITY 2
|
|
|
|
//several flags for the Necropolis curse status effect
|
|
///makes the edges of the target's screen obscured
|
|
#define CURSE_BLINDING (1<<0)
|
|
///causes gradual damage
|
|
#define CURSE_WASTING (1<<1)
|
|
///hands reach out from the sides of the screen, doing damage and stunning if they hit the target
|
|
#define CURSE_GRASPING (1<<2)
|
|
|
|
//Incapacitated status effect flags
|
|
/// If the mob is normal incapacitated. Should never need this, just avoids issues if we ever overexpand this
|
|
#define TRADITIONAL_INCAPACITATED (1<<0)
|
|
/// If the incapacitated status effect is being caused by restraints (handcuffs)
|
|
#define INCAPABLE_RESTRAINTS (1<<1)
|
|
/// If the incapacitated status effect is being caused by stasis (stasis beds)
|
|
#define INCAPABLE_STASIS (1<<2)
|
|
/// If the incapacitated status effect is being caused by being agressively grabbed
|
|
#define INCAPABLE_GRAB (1<<3)
|
|
|
|
/// Checks to see if a mob would be incapacitated even while ignoring some types
|
|
/// Does this by inverting the passed in flags and seeing if we're still incapacitated
|
|
#define INCAPACITATED_IGNORING(mob, flags) (mob.incapacitated & ~(flags))
|
|
|
|
/// Max amounts of fire stacks a mob can get
|
|
#define MAX_FIRE_STACKS 20
|
|
/// If a mob has a higher threshold than this, the icon shown will be increased to the big fire icon.
|
|
#define MOB_BIG_FIRE_STACK_THRESHOLD 3
|
|
|
|
// Grouped effect sources, see also code/__DEFINES/traits.dm
|
|
|
|
#define STASIS_MACHINE_EFFECT "stasis_machine"
|
|
#define STASIS_CHEMICAL_EFFECT "stasis_chemical"
|
|
#define STASIS_SHAPECHANGE_EFFECT "stasis_shapechange"
|
|
#define STASIS_ADMIN "stasis_admin"
|
|
#define STASIS_LEGION_EATEN "stasis_eaten"
|
|
#define STASIS_SLIME_BZ "stasis_slime_bz"
|
|
#define STASIS_ELDRITCH_ETHER "stasis_eldritch_ether"
|
|
|
|
#define STASIS_NETPOD_EFFECT "stasis_netpod"
|
|
|
|
/// Causes the mob to become blind via the passed source
|
|
#define become_blind(source) apply_status_effect(/datum/status_effect/grouped/blindness, source)
|
|
/// Cures the mob's blindness from the passed source, removing blindness wholesale if no sources are left
|
|
#define cure_blind(source) remove_status_effect(/datum/status_effect/grouped/blindness, source)
|
|
|
|
/// Is the mob blind?
|
|
#define is_blind(...) has_status_effect(/datum/status_effect/grouped/blindness)
|
|
/// Is the mob blind from the passed source or sources?
|
|
#define is_blind_from(sources) has_status_effect_from_source(/datum/status_effect/grouped/blindness, sources)
|
|
|
|
/// We are not nearsighted right now.
|
|
#define NEARSIGHTED_DISABLED 0
|
|
/// Something is correcting our vision, but we are still a bit nearsighted.
|
|
#define NEARSIGHTED_CORRECTED 1
|
|
/// We are fully nearsighted.
|
|
#define NEARSIGHTED_ENABLED 2
|
|
|
|
/// Simplified macro that causes the mob to become nearsighted (with correction possible) via the passed source.
|
|
#define become_nearsighted(source) apply_status_effect(/datum/status_effect/grouped/nearsighted, source)
|
|
/// Causes the mob to become nearsighted from the passed source by a severity, which may be corrected with glasses.
|
|
#define assign_nearsightedness(source, amount, correctable) apply_status_effect(/datum/status_effect/grouped/nearsighted, source, amount, correctable)
|
|
/// Cures the mob's nearsightedness from the passed source, removing nearsighted wholesale if no sources are left.
|
|
#define cure_nearsighted(source) remove_status_effect(/datum/status_effect/grouped/nearsighted, source)
|
|
|
|
/// Is the mob nearsighted?
|
|
#define is_nearsighted(...) has_status_effect(/datum/status_effect/grouped/nearsighted)
|
|
/// Is the mob nearsigthed from the passed source or sources?
|
|
#define is_nearsighted_from(sources) has_status_effect_from_source(/datum/status_effect/grouped/nearsighted, sources)
|
|
/// Is the mob nearsighted CURRENTLY?
|
|
/// This check fails if the mob is nearsighted but is wearing glasses,
|
|
/// While is_nearsighted will always succeed even if they are wearing glasses.
|
|
/mob/proc/is_nearsighted_currently()
|
|
var/datum/status_effect/grouped/nearsighted/nearsight = has_status_effect(/datum/status_effect/grouped/nearsighted)
|
|
if(isnull(nearsight))
|
|
return FALSE
|
|
return (nearsight.should_be_nearsighted() > NEARSIGHTED_CORRECTED)
|
|
|
|
// Status effect application helpers.
|
|
// These are macros for easier use of adjust_timed_status_effect and set_timed_status_effect.
|
|
//
|
|
// adjust_x:
|
|
// - Adds duration to a status effect
|
|
// - Removes duration if a negative duration is passed.
|
|
// - Ex: adjust_stutter(10 SECONDS) adds ten seconds of stuttering.
|
|
// - Ex: adjust_jitter(-5 SECONDS) removes five seconds of jittering, or just removes jittering if less than five seconds exist.
|
|
//
|
|
// adjust_x_up_to:
|
|
// - Will only add (or remove) duration of a status effect up to the second parameter
|
|
// - If the duration will result in going beyond the second parameter, it will stop exactly at that parameter
|
|
// - The second parameter cannot be negative.
|
|
// - Ex: adjust_stutter_up_to(20 SECONDS, 10 SECONDS) adds ten seconds of stuttering.
|
|
//
|
|
// set_x:
|
|
// - Set the duration of a status effect to the exact number.
|
|
// - Setting duration to zero seconds is effectively the same as just using remove_status_effect, or qdelling the effect.
|
|
// - Ex: set_stutter(10 SECONDS) sets the stuttering to ten seconds, regardless of whether they had more or less existing stutter.
|
|
//
|
|
// set_x_if_lower:
|
|
// - Will only set the duration of that effect IF any existing duration is lower than what was passed.
|
|
// - Ex: set_stutter_if_lower(10 SECONDS) will set stuttering to ten seconds if no stuttering or less than ten seconds of stuttering exists
|
|
// - Ex: set_jitter_if_lower(20 SECONDS) will do nothing if more than twenty seconds of jittering already exists
|
|
|
|
#define adjust_stutter(duration) adjust_timed_status_effect(duration, /datum/status_effect/speech/stutter)
|
|
#define adjust_stutter_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/speech/stutter, up_to)
|
|
#define set_stutter(duration) set_timed_status_effect(duration, /datum/status_effect/speech/stutter)
|
|
#define set_stutter_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/speech/stutter, TRUE)
|
|
|
|
#define adjust_derpspeech(duration) adjust_timed_status_effect(duration, /datum/status_effect/speech/stutter/derpspeech)
|
|
#define adjust_derpspeech_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/speech/stutter/derpspeech, up_to)
|
|
#define set_derpspeech(duration) set_timed_status_effect(duration, /datum/status_effect/speech/stutter/derpspeech)
|
|
#define set_derpspeech_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/speech/stutter/derpspeech, TRUE)
|
|
|
|
#define adjust_slurring(duration) adjust_timed_status_effect(duration, /datum/status_effect/speech/slurring/generic)
|
|
#define adjust_slurring_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/speech/slurring/generic, up_to)
|
|
#define set_slurring(duration) set_timed_status_effect(duration, /datum/status_effect/speech/slurring/generic)
|
|
#define set_slurring_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/speech/slurring/generic, TRUE)
|
|
|
|
#define adjust_dizzy(duration) adjust_timed_status_effect(duration, /datum/status_effect/dizziness)
|
|
#define adjust_dizzy_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/dizziness, up_to)
|
|
#define set_dizzy(duration) set_timed_status_effect(duration, /datum/status_effect/dizziness)
|
|
#define set_dizzy_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/dizziness, TRUE)
|
|
|
|
#define adjust_staggered(duration) adjust_timed_status_effect(duration, /datum/status_effect/staggered)
|
|
#define adjust_staggered_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/staggered, up_to)
|
|
#define set_staggered(duration) set_timed_status_effect(duration, /datum/status_effect/staggered)
|
|
#define set_staggered_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/staggered, TRUE)
|
|
|
|
#define adjust_jitter(duration) adjust_timed_status_effect(duration, /datum/status_effect/jitter)
|
|
#define adjust_jitter_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/jitter, up_to)
|
|
#define set_jitter(duration) set_timed_status_effect(duration, /datum/status_effect/jitter)
|
|
#define set_jitter_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/jitter, TRUE)
|
|
|
|
#define adjust_confusion(duration) adjust_timed_status_effect(duration, /datum/status_effect/confusion)
|
|
#define adjust_confusion_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/confusion, up_to)
|
|
#define set_confusion(duration) set_timed_status_effect(duration, /datum/status_effect/confusion)
|
|
#define set_confusion_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/confusion, TRUE)
|
|
|
|
#define adjust_drugginess(duration) adjust_timed_status_effect(duration, /datum/status_effect/drugginess)
|
|
#define adjust_drugginess_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/drugginess, up_to)
|
|
#define set_drugginess(duration) set_timed_status_effect(duration, /datum/status_effect/drugginess)
|
|
#define set_drugginess_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/drugginess, TRUE)
|
|
|
|
#define adjust_silence(duration) adjust_timed_status_effect(duration, /datum/status_effect/silenced)
|
|
#define adjust_silence_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/silenced, up_to)
|
|
#define set_silence(duration) set_timed_status_effect(duration, /datum/status_effect/silenced)
|
|
#define set_silence_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/silenced, TRUE)
|
|
|
|
#define adjust_hallucinations(duration) adjust_timed_status_effect(duration, /datum/status_effect/hallucination)
|
|
#define adjust_hallucinations_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/hallucination, up_to)
|
|
#define set_hallucinations(duration) set_timed_status_effect(duration, /datum/status_effect/hallucination)
|
|
#define set_hallucinations_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/hallucination, TRUE)
|
|
|
|
#define adjust_drowsiness(duration) adjust_timed_status_effect(duration, /datum/status_effect/drowsiness)
|
|
#define adjust_drowsiness_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/drowsiness, up_to)
|
|
#define set_drowsiness(duration) set_timed_status_effect(duration, /datum/status_effect/drowsiness)
|
|
#define set_drowsiness_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/drowsiness, TRUE)
|
|
|
|
#define adjust_pacifism(duration) adjust_timed_status_effect(duration, /datum/status_effect/pacify)
|
|
#define set_pacifism(duration) set_timed_status_effect(duration, /datum/status_effect/pacify)
|
|
|
|
#define adjust_eye_blur(duration) adjust_timed_status_effect(duration, /datum/status_effect/eye_blur)
|
|
#define adjust_eye_blur_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/eye_blur, up_to)
|
|
#define set_eye_blur(duration) set_timed_status_effect(duration, /datum/status_effect/eye_blur)
|
|
#define set_eye_blur_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/eye_blur, TRUE)
|
|
|
|
#define adjust_temp_blindness(duration) adjust_timed_status_effect(duration, /datum/status_effect/temporary_blindness)
|
|
#define adjust_temp_blindness_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/temporary_blindness, up_to)
|
|
#define set_temp_blindness(duration) set_timed_status_effect(duration, /datum/status_effect/temporary_blindness)
|
|
#define set_temp_blindness_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/temporary_blindness, TRUE)
|
|
|
|
#define adjust_static_vision(duration) adjust_timed_status_effect(duration, /datum/status_effect/static_vision)
|
|
#define adjust_static_vision_up_to(duration, up_to) adjust_timed_status_effect(duration, /datum/status_effect/static_vision, up_to)
|
|
#define set_static_vision(duration) set_timed_status_effect(duration, /datum/status_effect/static_vision)
|
|
#define set_static_vision_if_lower(duration) set_timed_status_effect(duration, /datum/status_effect/static_vision, TRUE)
|