Beginnings on eminence rework

turns the eminence vote into an innate action all cultists get. Pending what to do with constructs/silicons when they try to become an eminence with this
This commit is contained in:
Dan-Neposh
2020-10-19 14:14:13 -04:00
parent 946acc9c8f
commit 15136717de
4 changed files with 143 additions and 7 deletions
@@ -0,0 +1,124 @@
/datum/action/innate/eminence_ascend
name = "Ascend as eminence"
button_icon_state = "eminence_action"
background_icon_state = "bg_clock"
buttontooltipstyle = "clockcult"
var/mob/eminence_nominee
var/selection_timer //Timer ID; this is canceled if the vote is canceled
var/kingmaking
/datum/action/innate/eminence_ascend/activate()
var/datum/antagonist/clockcult/C = user.mind.has_antag_datum(/datum/antagonist/clockcult)
if(!C || !C.clock_team)
return
if(C.clock_team.eminence)
to_chat(user, "<span class='warning'>There's already an Eminence!</span>")
return
if(eminence_nominee) //This could be one large proc, but is split into three for ease of reading
if(eminence_nominee == user)
cancelation(user)
else
objection(user)
else
nomination(user)
/datum/action/innate/eminence_ascend/attack_drone(mob/living/simple_animal/drone/user)
if(!is_servant_of_ratvar(user))
..()
else
to_chat(user, "<span class='warning'>You feel the omniscient gaze turn into a puzzled frown. Perhaps you should just stick to building.</span>")
return
var/datum/mind/rando = locate() in get_antag_minds(/datum/antagonist/clockcult) //if theres no cultists new team without eminence will be created anyway.
if(rando)
var/datum/antagonist/clockcult/random_cultist = rando.has_antag_datum(/datum/antagonist/clockcult)
if(random_cultist && random_cultist.clock_team && random_cultist.clock_team.eminence)
to_chat(user, "<span class='warning'>There's already an Eminence - too late!</span>")
return
if(!GLOB.servants_active)
to_chat(user, "<span class='warning'>The Ark must be active first!</span>")
return
if(alert(user, "Become the Eminence using admin?", "Become Eminence", "Yes", "No") != "Yes")
return
message_admins("<span class='danger'>Admin [key_name_admin(user)] directly became the Eminence of the cult!</span>")
log_admin("Admin [key_name(user)] made themselves the Eminence.")
var/mob/camera/eminence/eminence = new(get_turf(src))
user.transfer_ckey(eminence, FALSE)
hierophant_message("<span class='bold large_brass'>Ratvar has directly assigned the Eminence!</span>")
for(var/mob/M in servants_and_ghosts())
M.playsound_local(M, 'sound/machines/clockcult/eminence_selected.ogg', 50, FALSE)
/datum/action/innate/eminence_ascend/proc/nomination(mob/living/nominee) //A user is nominating themselves or ghosts to become Eminence
var/nomination_choice = alert(nominee, "Who would you like to nominate?", "Eminence Nomination", "Nominate Yourself", "Nominate Ghosts", "Cancel")
if(!is_servant_of_ratvar(nominee) || !nominee.canUseTopic(src) || eminence_nominee)
return
switch(nomination_choice)
if("Cancel")
return
if("Nominate Yourself")
eminence_nominee = nominee
hierophant_message("<span class='brass'><b>[nominee] nominates [nominee.p_them()]self as the Eminence!</b> You may object by interacting with the eminence spire. The vote will otherwise pass in 30 seconds.</span>")
if("Nominate Ghosts")
eminence_nominee = "ghosts"
hierophant_message("<span class='brass'><b>[nominee] proposes selecting an Eminence from ghosts!</b> You may object by interacting with the eminence spire. The vote will otherwise pass in 30 seconds.</span>")
for(var/mob/M in servants_and_ghosts())
M.playsound_local(M, 'sound/machines/clockcult/ocularwarden-target.ogg', 50, FALSE)
selection_timer = addtimer(CALLBACK(src, .proc/kingmaker), 300, TIMER_STOPPABLE)
/datum/action/innate/eminence_ascend/proc/objection(mob/living/wright)
if(alert(wright, "Object to the selection of [eminence_nominee] as Eminence?", "Objection!", "Object", "Cancel") == "Cancel" || !is_servant_of_ratvar(wright) || !wright.canUseTopic(src) || !eminence_nominee)
return
hierophant_message("<span class='brass'><b>[wright] objects to the nomination of [eminence_nominee]!</b> The eminence spire has been reset.</span>")
for(var/mob/M in servants_and_ghosts())
M.playsound_local(M, 'sound/machines/clockcult/integration_cog_install.ogg', 50, FALSE)
eminence_nominee = null
deltimer(selection_timer)
/datum/action/innate/eminence_ascend/proc/cancelation(mob/living/cold_feet)
if(alert(cold_feet, "Cancel your nomination?", "Cancel Nomination", "Withdraw Nomination", "Cancel") == "Cancel" || !is_servant_of_ratvar(cold_feet) || !cold_feet.canUseTopic(src) || !eminence_nominee)
return
hierophant_message("<span class='brass'><b>[eminence_nominee] has withdrawn their nomination!</b> The eminence spire has been reset.</span>")
for(var/mob/M in servants_and_ghosts())
M.playsound_local(M, 'sound/machines/clockcult/integration_cog_install.ogg', 50, FALSE)
eminence_nominee = null
deltimer(selection_timer)
/datum/action/innate/eminence_ascend/proc/kingmaker()
if(!eminence_nominee)
return
if(ismob(eminence_nominee))
if(!eminence_nominee.client || !eminence_nominee.mind)
hierophant_message("<span class='brass'><b>[eminence_nominee] somehow lost their sentience!</b> The eminence spire has been reset.</span>")
for(var/mob/M in servants_and_ghosts())
M.playsound_local(M, 'sound/machines/clockcult/integration_cog_install.ogg', 50, FALSE)
eminence_nominee = null
return
playsound(eminence_nominee, 'sound/machines/clockcult/ark_damage.ogg', 50, FALSE)
eminence_nominee.visible_message("<span class='warning'>A blast of white-hot light flows into [eminence_nominee], vaporizing [eminence_nominee.p_them()] in an instant!</span>", \
"<span class='userdanger'>allthelightintheuniverseflowing.into.YOU</span>")
for(var/obj/item/I in eminence_nominee)
eminence_nominee.dropItemToGround(I)
var/mob/camera/eminence/eminence = new(get_turf(src))
eminence_nominee.mind.transfer_to(eminence)
eminence_nominee.dust()
hierophant_message("<span class='bold large_brass'>[eminence_nominee] has ascended into the Eminence!</span>")
else if(eminence_nominee == "ghosts")
kingmaking = TRUE
hierophant_message("<span class='brass'><b>The eminence spire is now selecting a ghost to be the Eminence...</b></span>")
var/list/candidates = pollGhostCandidates("Would you like to play as the servants' Eminence?", ROLE_SERVANT_OF_RATVAR, null, ROLE_SERVANT_OF_RATVAR, poll_time = 100)
kingmaking = FALSE
if(!LAZYLEN(candidates))
for(var/mob/M in servants_and_ghosts())
M.playsound_local(M, 'sound/machines/clockcult/integration_cog_install.ogg', 50, FALSE)
hierophant_message("<span class='brass'><b>No ghosts accepted the offer!</b> The eminence spire has been reset.</span>")
eminence_nominee = null
return
visible_message("<span class='warning'>A blast of white-hot light spirals from [src] in waves!</span>")
playsound(src, 'sound/machines/clockcult/ark_damage.ogg', 50, FALSE)
var/mob/camera/eminence/eminence = new(get_turf(src))
eminence_nominee = pick(candidates)
eminence_nominee.transfer_ckey(eminence)
hierophant_message("<span class='bold large_brass'>A ghost has ascended into the Eminence!</span>")
for(var/mob/M in servants_and_ghosts())
M.playsound_local(M, 'sound/machines/clockcult/eminence_selected.ogg', 50, FALSE)
eminence_nominee = null
@@ -251,8 +251,8 @@
var/mob/camera/eminence/E = owner
E.eminence_help()
/*
//Returns to the Ark - Commented out and replaced with obelisk_jump
//Returns to the Ark - Going along with their superior mobility
/datum/action/innate/eminence/ark_jump
name = "Return to Ark"
desc = "Warps you to the Ark."
@@ -265,8 +265,8 @@
owner.playsound_local(owner, 'sound/magic/magic_missile.ogg', 50, TRUE)
flash_color(owner, flash_color = "#AF0AAF", flash_time = 25)
else
to_chat(owner, "<span class='warning'>There is no Ark!</span>")
*/
to_chat(owner, "<span class='nezbere '>There is no Ark to warp to, ascendant one.</span>")
//Warps to a chosen Obelisk
/datum/action/innate/eminence/obelisk_jump
@@ -334,4 +334,4 @@
if(G && !G.recalling && G.recalls_remaining)
if(alert(owner, "Initiate mass recall?", "Mass Recall", "Yes", "No") != "Yes" || QDELETED(owner) || QDELETED(G) || !G.obj_integrity)
return
G.initiate_mass_recall()
G.initiate_mass_recall()
@@ -7,6 +7,7 @@
antag_moodlet = /datum/mood_event/cult
skill_modifiers = list(/datum/skill_modifier/job/level/wiring)
var/datum/action/innate/hierophant/hierophant_network = new
var/datum/action/innate/hierophant/eminence_ascend = new
threat = 3
var/datum/team/clockcult/clock_team
var/make_team = TRUE //This should be only false for tutorial scarabs
@@ -27,8 +28,20 @@
show_in_roundend = FALSE
make_team = FALSE
/datum/antagonist/clockcult/eminence
var/datum/action/innate/eminence/mass_recall = new
var/datum/action/innate/eminence/obelisk_jump = new
var/datum/action/innate/eminence/ark_jump = new
/datum/antagonist/clockcult/Destroy()
qdel(hierophant_network)
qdel(eminence_ascend)
return ..()
/datum/antagonist/clockcult/eminence/Destroy()
qdel(mass_recall)
qdel(obelisk_jump)
qdel(ark_jump)
return ..()
/datum/antagonist/clockcult/get_team()