Nar'Sie Only Ends The Round After Specific Proc Is Called (#80127)

## About The Pull Request

Addresses at least one aspect of
https://github.com/tgstation/tgstation/issues/80125#issuecomment-1839262085

Nar'Sie will no longer end the round unless a specific proc is invoked.
There is a button in the VV Dropdown (although it is painful to get to
because the icon is so long) to invoke this proc (which is confirmation
guarded). Calling this proc directly via Atom Proccall will also give
you a confirmation prompt as well.
## Why It's Good For The Game

We trivially need to know what Nar'Sie looks like at times or just need
to access some variables about it, this greatly lowers the odds that the
whole round will be completely wacked out just because of this. It also
provides a nice QoL for admins to spawn in Nar'Sie and then varedit the
image to be of a cute kitty cat, and only after their setup is complete
can they start to torture players.
## Changelog
🆑
admin: Spawning in Nar'Sie will no longer automatically trigger the
round-ender, you need to specifically start this chain of events through
the new VV Dropdown Option "Begin Nar'Sie Roundender".
/🆑
This commit is contained in:
san7890
2023-12-05 20:09:28 -08:00
committed by GitHub
parent 855d0cebac
commit ff087531e5
3 changed files with 46 additions and 11 deletions
+3
View File
@@ -114,6 +114,9 @@
// /obj/item
#define VV_HK_ADD_FANTASY_AFFIX "add_fantasy_affix"
// /obj/narsie
#define VV_HK_BEGIN_NARSIE_ROUNDEND "begin_narsie_roundend"
// /mob
#define VV_HK_GIB "gib"
#define VV_HK_GIVE_MOB_ACTION "give_mob_action"
+3 -1
View File
@@ -635,7 +635,9 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0)
sleep(4 SECONDS)
if(src)
color = RUNE_COLOR_RED
new /obj/narsie(rune_turf) //Causes Nar'Sie to spawn even if the rune has been removed
var/obj/narsie/harbinger = new /obj/narsie(rune_turf) //Causes Nar'Sie to spawn even if the rune has been removed
harbinger.start_ending_the_round()
//Rite of Resurrection: Requires a dead or inactive cultist. When reviving the dead, you can only perform one revival for every three sacrifices your cult has carried out.
/obj/effect/rune/raise_dead
+40 -10
View File
@@ -5,6 +5,8 @@
#define NARSIE_MESMERIZE_EFFECT 60
#define NARSIE_SINGULARITY_SIZE 12
#define ADMIN_WARNING_MESSAGE "Invoking this will begin the Nar'Sie roundender. Assume that this WILL end the round in a few minutes. Are you sure?"
/// Nar'Sie, the God of the blood cultists
/obj/narsie
name = "Nar'Sie"
@@ -39,6 +41,19 @@
/obj/narsie/Initialize(mapload)
. = ..()
narsie_spawn_animation()
/obj/narsie/Destroy()
if (GLOB.cult_narsie == src)
fall_of_the_harbinger()
GLOB.cult_narsie = null
return ..()
/// This proc sets up all of Nar'Sie's abilities, stats, and begins her round-ending capabilities. She does not do anything unless this proc is invoked.
/// This is only meant to be invoked after this instance is initialized in specific pro-sumer procs, as it WILL derail the entire round.
/obj/narsie/proc/start_ending_the_round()
GLOB.cult_narsie = src
SSpoints_of_interest.make_point_of_interest(src)
singularity = WEAKREF(AddComponent(
@@ -66,9 +81,6 @@
alert_overlay = alert_overlay,
)
narsie_spawn_animation()
GLOB.cult_narsie = src
var/list/all_cults = list()
for (var/datum/antagonist/cult/cultist in GLOB.antagonists)
@@ -95,10 +107,8 @@
soul_goal = round(1 + LAZYLEN(souls_needed) * 0.75)
INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(begin_the_end))
/obj/narsie/Destroy()
send_to_playing_players(span_narsie("\"<b>[pick("Nooooo...", "Not die. How-", "Die. Mort-", "Sas tyen re-")]\"</b>"))
sound_to_playing_players('sound/magic/demon_dies.ogg', 50)
/// Cleans up all of Nar'Sie's abilities, stats, and ends her round-ending capabilities. This should only be called if `start_ending_the_round()` successfully started.
/obj/narsie/proc/fall_of_the_harbinger()
var/list/all_cults = list()
for (var/datum/antagonist/cult/cultist in GLOB.antagonists)
@@ -113,10 +123,28 @@
summon_objective.summoned = FALSE
summon_objective.killed = TRUE
if (GLOB.cult_narsie == src)
GLOB.cult_narsie = null
send_to_playing_players(span_narsie(span_bold(pick("Nooooo...", "Not die. How-", "Die. Mort-", "Sas tyen re-"))))
sound_to_playing_players('sound/magic/demon_dies.ogg', 50)
return ..()
/obj/narsie/vv_get_dropdown()
. = ..()
VV_DROPDOWN_OPTION("", "---------")
VV_DROPDOWN_OPTION(VV_HK_BEGIN_NARSIE_ROUNDEND, "Begin Nar'Sie Roundender")
/obj/narsie/vv_do_topic(list/href_list)
. = ..()
if(!.)
return
if(isnull(usr) || !href_list[VV_HK_BEGIN_NARSIE_ROUNDEND] || !check_rights(R_FUN, show_msg = TRUE))
return
if(tgui_alert(usr, ADMIN_WARNING_MESSAGE, "Begin Nar'Sie Roundender", list("I'm Sure", "Abort")) != "I'm Sure")
return
log_admin("[key_name(usr)] has triggered the Nar'Sie roundender.")
start_ending_the_round()
/obj/narsie/attack_ghost(mob/user)
makeNewConstruct(/mob/living/basic/construct/harvester, user, cultoverride = TRUE, loc_override = loc)
@@ -300,3 +328,5 @@
#undef NARSIE_MESMERIZE_CHANCE
#undef NARSIE_MESMERIZE_EFFECT
#undef NARSIE_SINGULARITY_SIZE
#undef ADMIN_WARNING_MESSAGE