mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-25 08:34:23 +00:00
* Grand Ritual: Alternate Wizard objective (Wizard Events II) (#72918) Adds an alternate greentext objective for Wizards known as the "Grand Ritual". This was initially the gimmick of a different wizard-related antagonist downstream. I didn't get permission to port it, so I'm attaching it to regular Wizards instead. Wizards will spawn in with a new Grand Ritual button next to their antagonist info button. Pressing it will pinpoint them towards their next Ritual Location (a randomly chosen region of the space station). Once within that location, pressing it will summon a magic circle and obliterate any dense objects which are in the way. This also puts the ability on a two minute cooldown. Clicking on the magic circle with an empty hand will begin a three-stage invocation to gather magical power. You can interrupt this invocation at any time and will resume from the last stage you completed (if you finished two stages you only need to do one more). Once you complete a ritual, a random event will be triggered based on how many rituals you have performed so far. These tend to be ones which annoy the crew in some manner, and Wizard Events are included in the list. Additionally, something weird will usually happen to the room you are in. Then you are assigned a new location and can toddle off to do it again. Once you have done this three times, you will be picked up by the station's sensors every time you start a subsequent ritual and should expect annoyed company to come investigate. Once you have done this six times, you can finally spend all of that accumulated power on the seventh Grand Finale ritual. Completing this grants you victory at the end of the round and will have a larger, flashier effect which you can pick from a list of options, think of it like a wizard equivalent of a Traitor Final Objective or Heretic Ascension. After that you can still keep doing rituals if you want to pester the crew further by summoning more random events, you've already "won" at this point so now it's your job to make them want to go home. I think it'd be more fun to just find out what the Finale ritual can do by seeing it happen but maintainers will probably want a list of its precise capabilities, so here it is: Currently completing a ritual also has a chance to create Heretic Reality Tears (of both varieties, available for Heretics to eat and visible to crew) as a kind of cross-antagonist interaction which seemed to make sense to me but if this seems thematically or mechanically inappropriate it's easy to strip out. * wew --------- Co-authored-by: Jacquerel <hnevard@gmail.com>
94 lines
3.3 KiB
Plaintext
94 lines
3.3 KiB
Plaintext
/datum/round_event_control/wizard/embedpocalypse
|
|
name = "Make Everything Embeddable"
|
|
weight = 2
|
|
typepath = /datum/round_event/wizard/embedpocalypse
|
|
max_occurrences = 1
|
|
earliest_start = 0 MINUTES
|
|
description = "Everything becomes pointy enough to embed in people when thrown."
|
|
min_wizard_trigger_potency = 3
|
|
max_wizard_trigger_potency = 7
|
|
|
|
///behold... the only reason sticky is a subtype...
|
|
/datum/round_event_control/wizard/embedpocalypse/can_spawn_event(players_amt, allow_magic = FALSE)
|
|
. = ..()
|
|
if(!.)
|
|
return .
|
|
|
|
if(GLOB.global_funny_embedding)
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/datum/round_event/wizard/embedpocalypse/start()
|
|
GLOB.global_funny_embedding = new /datum/global_funny_embedding/pointy
|
|
|
|
/datum/round_event_control/wizard/embedpocalypse/sticky
|
|
name = "Make Everything Sticky"
|
|
weight = 6
|
|
typepath = /datum/round_event/wizard/embedpocalypse/sticky
|
|
max_occurrences = 1
|
|
earliest_start = 0 MINUTES
|
|
description = "Everything becomes sticky enough to be glued to people when thrown."
|
|
|
|
/datum/round_event/wizard/embedpocalypse/sticky/start()
|
|
GLOB.global_funny_embedding = new /datum/global_funny_embedding/sticky
|
|
|
|
///set this to a new instance of a SUBTYPE of global_funny_embedding. The main type is a prototype and will runtime really hard
|
|
GLOBAL_DATUM(global_funny_embedding, /datum/global_funny_embedding)
|
|
|
|
/**
|
|
* ## global_funny_embedding!
|
|
*
|
|
* Stored in a global datum, and created when it is turned on via event or VV'ing the GLOB.embedpocalypse_controller to be a new /datum/global_funny_embedding.
|
|
* Gives every item in the world a prefix to their name, and...
|
|
* Makes every item in the world embed when thrown, but also hooks into global signals for new items created to also bless them with embed-ability(??).
|
|
*/
|
|
/datum/global_funny_embedding
|
|
var/embed_type = EMBED_POINTY
|
|
var/prefix = "error"
|
|
|
|
/datum/global_funny_embedding/New()
|
|
. = ..()
|
|
//second operation takes MUCH longer, so lets set up signals first.
|
|
RegisterSignal(SSdcs, COMSIG_GLOB_NEW_ITEM, PROC_REF(on_new_item_in_existence))
|
|
handle_current_items()
|
|
|
|
/datum/global_funny_embedding/Destroy(force)
|
|
. = ..()
|
|
UnregisterSignal(SSdcs, COMSIG_GLOB_NEW_ITEM)
|
|
|
|
///signal sent by a new item being created.
|
|
/datum/global_funny_embedding/proc/on_new_item_in_existence(datum/source, obj/item/created_item)
|
|
SIGNAL_HANDLER
|
|
|
|
// this proc says it's for initializing components, but we're initializing elements too because it's you and me against the world >:)
|
|
if(LAZYLEN(created_item.embedding))
|
|
return //already embeds to some degree, so whatever 🐀
|
|
created_item.embedding = embed_type
|
|
created_item.name = "[prefix] [created_item.name]"
|
|
created_item.updateEmbedding()
|
|
|
|
/**
|
|
* ### handle_current_items
|
|
*
|
|
* Gives every viable item in the world the embed_type, and the prefix prefixed to the name.
|
|
*/
|
|
/datum/global_funny_embedding/proc/handle_current_items()
|
|
for(var/obj/item/embed_item in world)
|
|
CHECK_TICK
|
|
if(!(embed_item.flags_1 & INITIALIZED_1))
|
|
continue
|
|
if(!embed_item.embedding)
|
|
embed_item.embedding = embed_type
|
|
embed_item.updateEmbedding()
|
|
embed_item.name = "[prefix] [embed_item.name]"
|
|
|
|
///everything will be... POINTY!!!!
|
|
/datum/global_funny_embedding/pointy
|
|
embed_type = EMBED_POINTY
|
|
prefix = "pointy"
|
|
|
|
///everything will be... sticky? sure, why not
|
|
/datum/global_funny_embedding/sticky
|
|
embed_type = EMBED_HARMLESS
|
|
prefix = "sticky"
|