From f45c024b67325949d17b82337020fa90f6a7d6f8 Mon Sep 17 00:00:00 2001 From: Xhuis Date: Sun, 28 Aug 2016 00:15:44 -0400 Subject: [PATCH] Adds framework for status effects (#19939) * Adds framework for status effects * Completes the Renew define * Lots of work, refactoring * Further work on status effects * Gives status effects autism * Fixes and stuff --- code/__DEFINES/status_effects.dm | 17 +++++ code/_onclick/hud/alert.dm | 11 ++- code/controllers/subsystem/fastprocess.dm | 33 --------- .../subsystem/processing/fastprocess.dm | 10 +++ .../subsystem/{ => processing}/objects.dm | 0 .../subsystem/processing/processing.dm | 34 ++++++++++ code/datums/status_effects/buffs.dm | 56 +++++++++++++++ code/datums/status_effects/status_effect.dm | 64 ++++++++++++++++++ .../gamemodes/clock_cult/clock_scripture.dm | 13 +--- icons/mob/status_effects.dmi | Bin 0 -> 4515 bytes tgstation.dme | 8 ++- 11 files changed, 197 insertions(+), 49 deletions(-) create mode 100644 code/__DEFINES/status_effects.dm delete mode 100644 code/controllers/subsystem/fastprocess.dm create mode 100644 code/controllers/subsystem/processing/fastprocess.dm rename code/controllers/subsystem/{ => processing}/objects.dm (100%) create mode 100644 code/controllers/subsystem/processing/processing.dm create mode 100644 code/datums/status_effects/buffs.dm create mode 100644 code/datums/status_effects/status_effect.dm create mode 100644 icons/mob/status_effects.dmi diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm new file mode 100644 index 00000000000..b214077b684 --- /dev/null +++ b/code/__DEFINES/status_effects.dm @@ -0,0 +1,17 @@ + +//These are all the different status effects. Use the paths for each effect in the defines. + +#define BASIC_STATUS_EFFECT /datum/status_effect //Has no effect. + +/////////// +// BUFFS // +/////////// + +#define STATUS_EFFECT_SHADOW_MEND /datum/status_effect/shadow_mend //Quick, powerful heal that deals damage afterwards. Heals 15 brute/burn every second for 3 seconds. +#define STATUS_EFFECT_VOID_PRICE /datum/status_effect/void_price //The price of healing yourself with void energy. Deals 3 brute damage every 3 seconds for 30 seconds. + +#define STATUS_EFFECT_INATHNEQS_ENDOWMENT /datum/status_effect/inathneqs_endowment //A 15-second invulnerability and stun absorption, granted by Inath-neq. + +///////////// +// DEBUFFS // +///////////// diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index f4afbe8179e..60f0df97dc1 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -3,7 +3,7 @@ //PUBLIC - call these wherever you want -/mob/proc/throw_alert(category, type, severity, obj/new_master) +/mob/proc/throw_alert(category, type, severity, obj/new_master, datum/status_effect/effect) /* Proc to create or update an alert. Returns the alert if the alert is new or updated, 0 if it was thrown already category is a text string. Each mob may only have one alert per category; the previous one will be replaced @@ -43,7 +43,13 @@ alert.icon_state = "template" // We'll set the icon to the client's ui pref in reorganize_alerts() alert.master = new_master else - alert.icon_state = "[initial(alert.icon_state)][severity]" + if(effect) + alert.name = effect.name + alert.desc = effect.desc + alert.icon = 'icons/mob/status_effects.dmi' + alert.icon_state = effect.icon_state + else + alert.icon_state = "[initial(alert.icon_state)][severity]" alert.severity = severity alerts[category] = alert @@ -446,6 +452,7 @@ so as to remain in compliance with the most up-to-date laws." if(isliving(usr)) var/mob/living/L = usr return L.resist() + // PRIVATE = only edit, use, or override these if you're editing the system as a whole // Re-render all alerts - also called in /datum/hud/show_hud() because it's needed there diff --git a/code/controllers/subsystem/fastprocess.dm b/code/controllers/subsystem/fastprocess.dm deleted file mode 100644 index dfe0da21bc0..00000000000 --- a/code/controllers/subsystem/fastprocess.dm +++ /dev/null @@ -1,33 +0,0 @@ -var/datum/subsystem/fastprocess/SSfastprocess - -/datum/subsystem/fastprocess - name = "Fast Process" - priority = 25 - flags = SS_BACKGROUND|SS_POST_FIRE_TIMING|SS_NO_INIT - wait = 2 - - var/list/processing = list() - var/list/currentrun = list() - -/datum/subsystem/fastprocess/New() - NEW_SS_GLOBAL(SSfastprocess) - -/datum/subsystem/fastprocess/stat_entry() - ..("FP:[processing.len]") - - -/datum/subsystem/fastprocess/fire(resumed = 0) - if (!resumed) - src.currentrun = processing.Copy() - //cache for sanic speed (lists are references anyways) - var/list/currentrun = src.currentrun - - while(currentrun.len) - var/datum/thing = currentrun[currentrun.len] - currentrun.len-- - if(thing) - thing.process(wait) - else - SSfastprocess.processing -= thing - if (MC_TICK_CHECK) - return diff --git a/code/controllers/subsystem/processing/fastprocess.dm b/code/controllers/subsystem/processing/fastprocess.dm new file mode 100644 index 00000000000..7a46f253efe --- /dev/null +++ b/code/controllers/subsystem/processing/fastprocess.dm @@ -0,0 +1,10 @@ +//Fires five times every second. + +var/datum/subsystem/processing/fastprocess/SSfastprocess +/datum/subsystem/processing/fastprocess + name = "Fast Processing" + wait = 2 + stat_tag = "FP" + +/datum/subsystem/processing/fastprocess/New() + NEW_SS_GLOBAL(SSfastprocess) diff --git a/code/controllers/subsystem/objects.dm b/code/controllers/subsystem/processing/objects.dm similarity index 100% rename from code/controllers/subsystem/objects.dm rename to code/controllers/subsystem/processing/objects.dm diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm new file mode 100644 index 00000000000..92540ba442f --- /dev/null +++ b/code/controllers/subsystem/processing/processing.dm @@ -0,0 +1,34 @@ +//Used to process objects. Fires once every second. + +var/datum/subsystem/processing/SSprocessing +/datum/subsystem/processing + name = "Processing" + priority = 25 + flags = SS_BACKGROUND|SS_POST_FIRE_TIMING|SS_NO_INIT + wait = 10 + + var/stat_tag = "P" //Used for logging + var/list/processing = list() + var/list/currentrun = list() + +/datum/subsystem/processing/New() + NEW_SS_GLOBAL(SSprocessing) + +/datum/subsystem/processing/stat_entry() + ..("[stat_tag]:[processing.len]") + +/datum/subsystem/processing/fire(resumed = 0) + if (!resumed) + currentrun = processing.Copy() + //cache for sanic speed (lists are references anyways) + var/list/current_run = currentrun + + while(current_run.len) + var/datum/thing = current_run[current_run.len] + current_run.len-- + if(thing) + thing.process(wait) + else + processing -= thing + if (MC_TICK_CHECK) + return diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm new file mode 100644 index 00000000000..8a5a1543e84 --- /dev/null +++ b/code/datums/status_effects/buffs.dm @@ -0,0 +1,56 @@ +//Largely beneficial effects go here, even if they have drawbacks. An example is provided in Shadow Mend. + +/datum/status_effect/shadow_mend + name = "Shadow Mend" + desc = "Shadowy energies wrap around your wounds, sealing them at a price. After healing, you will slowly lose health every three seconds for thirty seconds." + id = "shadow_mend" + icon_state = "shadow_mend" + duration = 3 + +/datum/status_effect/shadow_mend/on_apply() + owner.visible_message("Violet light wraps around [owner]'s body!", "Violet light wraps around your body!") + playsound(owner, 'sound/magic/Teleport_app.ogg', 50, 1) + +/datum/status_effect/shadow_mend/tick() + owner.adjustBruteLoss(-15) + owner.adjustFireLoss(-15) + +/datum/status_effect/shadow_mend/on_remove() + owner.visible_message("The violet light around [owner] glows black!", "The tendrils around you cinch tightly and reap their toll...") + playsound(owner, 'sound/magic/Teleport_diss.ogg', 50, 1) + owner.apply_status_effect(STATUS_EFFECT_VOID_PRICE) + +/datum/status_effect/void_price + name = "Void Price" + desc = "Black tendrils cinch tightly against you, digging wicked barbs into your flesh." + id = "void_price" + icon_state = "shadow_mend" + duration = 30 + tick_interval = 3 + +/datum/status_effect/void_price/tick() + owner << sound('sound/magic/Summon_Karp.ogg', volume = 25) + owner.adjustBruteLoss(3) + + + +/datum/status_effect/inathneqs_endowment + name = "Inath-neq's Endowment" + desc = "Adrenaline courses through you as the Cogwheel's energy shields you from all harm!" + id = "inathneqs_endowment" + icon_state = "inathneqs_endowment" + duration = 15 + +/datum/status_effect/inathneqs_endowment/on_apply() + owner.visible_message("[owner] shines with azure light!", "You feel Inath-neq's power flow through you! You're invincible!") + owner.color = "#1E8CE1" + owner.fully_heal() + owner.add_stun_absorption("inathneq", 150, 1, "'s flickering blue aura momentarily intensifies!", "Inath-neq's power absorbs the stun!", " is surrounded by blue light!") + owner.status_flags |= GODMODE + animate(owner, color = initial(owner.color), time = 150, easing = EASE_IN) + playsound(owner, 'sound/magic/Ethereal_Enter.ogg', 50, 1) + +/datum/status_effect/inathneqs_endowment/on_remove() + owner.visible_message("The light around [owner] flickers and dissipates!", "Inath-neq's shield wavers and fails!") + owner.status_flags &= ~GODMODE + playsound(owner, 'sound/magic/Ethereal_Exit.ogg', 50, 1) diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm new file mode 100644 index 00000000000..1754843b5fb --- /dev/null +++ b/code/datums/status_effects/status_effect.dm @@ -0,0 +1,64 @@ +//Status effects are used to apply temporary or permanent effects to mobs. Mobs are aware of their status effects at all times. +//This file contains their code, plus code for applying and removing them. +//When making a new status effect, add a define to status_effects.dm in __DEFINES for ease of use! +var/list/status_effects = list() //All status effects affecting literally anyone +/datum/status_effect + var/name = "Curse of Mundanity" + var/desc = "You don't feel any different..." + var/id = "effect" //Used for screen alerts. + var/icon_state //Used for displaying the status effect. + var/duration = -1 //How long the status effect lasts in SECONDS. Enter -1 for an effect that never ends unless removed through some means. + var/tick_interval = 1 //How many seconds between ticks. Leave at 1 for every second. + var/mob/living/owner //The mob affected by the status effect. + var/cosmetic = FALSE //If the status effect only exists for flavor. + var/unique = TRUE //If there can be multiple status effects of this type on one mob. + +/datum/status_effect/New() + ..() + status_effects += src + spawn(1) //Give us time to set any variables + start_ticking() + +/datum/status_effect/Destroy() + status_effects -= src + ..() + +/datum/status_effect/proc/start_ticking() + if(!src) + return + on_apply() + owner.throw_alert(id, /obj/screen/alert, effect = src) + START_PROCESSING(SSprocessing, src) + +/datum/status_effect/process() + if(duration != -1) + duration-- + tick_interval-- + if(!tick_interval) + tick() + tick_interval = initial(tick_interval) + if(!duration && duration != -1) + cancel_effect() + +/datum/status_effect/proc/cancel_effect() + STOP_PROCESSING(SSprocessing, src) + owner.clear_alert(id) + on_remove() + qdel(src) + +/datum/status_effect/proc/on_apply() //Called whenever the buff is applied. +/datum/status_effect/proc/tick() //Called every tick. +/datum/status_effect/proc/on_remove() //Called whenever the buff expires or is removed. + +////////////////// +// HELPER PROCS // +////////////////// + +/mob/living/proc/apply_status_effect(effect) + var/datum/status_effect/S = new effect + for(var/datum/status_effect/S2 in status_effects) + if(S.unique && S2.unique && S.id == S2.id && S2.owner == src) + qdel(S) + return + S.owner = src + return 1 diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index 0596d796731..00abf88c55b 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -1208,21 +1208,10 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed playsound(invoker, 'sound/magic/clockwork/invoke_general.ogg', 50, 0) if(invoker.real_name == "Lucio") clockwork_say(invoker, text2ratvar("Aww, let's break it DOWN!!")) - var/list/affected_servants = list() for(var/mob/living/L in range(7, invoker)) if(!is_servant_of_ratvar(L) || L.stat == DEAD) continue - L << "Inath-neq's power flows through you!" - L.color = "#1E8CE1" - L.fully_heal() - L.add_stun_absorption("inathneq", total_duration, 2, "'s flickering blue aura momentarily intensifies!", "Inath-neq's ward absorbs the stun!", " is glowing with a flickering blue light!") - L.status_flags |= GODMODE - animate(L, color = initial(L.color), time = total_duration, easing = EASE_IN) - affected_servants += L - spawn(total_duration) - for(var/mob/living/L in affected_servants) - L << "You feel Inath-neq's power fade from your body." - L.status_flags &= ~GODMODE + L.apply_status_effect(STATUS_EFFECT_INATHNEQS_ENDOWMENT) return 1 diff --git a/icons/mob/status_effects.dmi b/icons/mob/status_effects.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d36af5785a44028cd031f4a1efedd42f90b512c1 GIT binary patch literal 4515 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 Bk&^%b literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 88edc1336b6..702a97f9e2d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -50,6 +50,7 @@ #include "code\__DEFINES\shuttles.dm" #include "code\__DEFINES\sight.dm" #include "code\__DEFINES\stat.dm" +#include "code\__DEFINES\status_effects.dm" #include "code\__DEFINES\tablecrafting.dm" #include "code\__DEFINES\tgui.dm" #include "code\__DEFINES\tick.dm" @@ -139,7 +140,6 @@ #include "code\controllers\subsystem\augury.dm" #include "code\controllers\subsystem\diseases.dm" #include "code\controllers\subsystem\events.dm" -#include "code\controllers\subsystem\fastprocess.dm" #include "code\controllers\subsystem\garbage.dm" #include "code\controllers\subsystem\icon_smooth.dm" #include "code\controllers\subsystem\ipintel.dm" @@ -150,7 +150,6 @@ #include "code\controllers\subsystem\minimap.dm" #include "code\controllers\subsystem\mobs.dm" #include "code\controllers\subsystem\npcpool.dm" -#include "code\controllers\subsystem\objects.dm" #include "code\controllers\subsystem\pai.dm" #include "code\controllers\subsystem\persistence.dm" #include "code\controllers\subsystem\pool.dm" @@ -164,6 +163,9 @@ #include "code\controllers\subsystem\timer.dm" #include "code\controllers\subsystem\voting.dm" #include "code\controllers\subsystem\weather.dm" +#include "code\controllers\subsystem\processing\fastprocess.dm" +#include "code\controllers\subsystem\processing\objects.dm" +#include "code\controllers\subsystem\processing\processing.dm" #include "code\datums\action.dm" #include "code\datums\ai_laws.dm" #include "code\datums\beam.dm" @@ -247,6 +249,8 @@ #include "code\datums\martial\wrestling.dm" #include "code\datums\ruins\lavaland.dm" #include "code\datums\ruins\space.dm" +#include "code\datums\status_effects\buffs.dm" +#include "code\datums\status_effects\status_effect.dm" #include "code\datums\weather\weather.dm" #include "code\datums\weather\weather_types.dm" #include "code\datums\wires\airalarm.dm"