Refactors how revenants spawn (#28261)

* Refactors how revenants spawn

* lewc review
This commit is contained in:
1080pCat
2025-03-02 18:58:25 +00:00
committed by GitHub
parent 2d98f9b4b2
commit 7e6f40df2f
@@ -130,50 +130,32 @@
status_tab_data[++status_tab_data.len] = list("Stolen essence:", "[essence_accumulated]E")
status_tab_data[++status_tab_data.len] = list("Stolen perfect souls:", "[perfectsouls]")
/mob/living/simple_animal/revenant/New()
..()
/mob/living/simple_animal/revenant/Initialize(mapload)
. = ..()
if(!mapload)
var/list/built_name = list()
built_name += pick(strings(REVENANT_NAME_FILE, "spirit_type"))
built_name += " of "
built_name += pick(strings(REVENANT_NAME_FILE, "adjective"))
built_name += pick(strings(REVENANT_NAME_FILE, "theme"))
var/combined_name = built_name.Join("")
name = combined_name
real_name = combined_name
flags_2 |= RAD_NO_CONTAMINATE_2
remove_from_all_data_huds()
random_revenant_name()
giveSpells()
RegisterSignal(src, COMSIG_BODY_TRANSFER_TO, PROC_REF(make_revenant_antagonist))
addtimer(CALLBACK(src, PROC_REF(firstSetupAttempt)), 15 SECONDS) // Give admin 15 seconds to put in a ghost (Or wait 15 seconds before giving it objectives)
/mob/living/simple_animal/revenant/proc/random_revenant_name()
var/built_name = ""
built_name += pick(strings(REVENANT_NAME_FILE, "spirit_type"))
built_name += " of "
built_name += pick(strings(REVENANT_NAME_FILE, "adjective"))
built_name += pick(strings(REVENANT_NAME_FILE, "theme"))
name = built_name
real_name = built_name
/mob/living/simple_animal/revenant/proc/firstSetupAttempt()
if(mind)
giveObjectivesandGoals()
giveSpells()
else
message_admins("Revenant was created but has no mind. Put a ghost inside, or a poll will be made in one minute.")
addtimer(CALLBACK(src, PROC_REF(setupOrDelete)), 1 MINUTES)
/mob/living/simple_animal/revenant/proc/setupOrDelete()
if(mind)
giveObjectivesandGoals()
giveSpells()
else
var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as a revenant?", poll_time = 15 SECONDS, source = /mob/living/simple_animal/revenant)
var/mob/dead/observer/theghost = null
if(length(candidates))
theghost = pick(candidates)
message_admins("[key_name_admin(theghost)] has taken control of a revenant created without a mind")
key = theghost.key
giveObjectivesandGoals()
giveSpells()
dust_if_respawnable(theghost)
else
message_admins("No ghost was willing to take control of a mindless revenant. Deleting...")
qdel(src)
/mob/living/simple_animal/revenant/proc/make_revenant_antagonist(revenant)
SIGNAL_HANDLER // COMSIG_BODY_TRANSFER_TO
mind.assigned_role = SPECIAL_ROLE_REVENANT
mind.special_role = SPECIAL_ROLE_REVENANT
giveObjectivesandGoals()
/mob/living/simple_animal/revenant/proc/giveObjectivesandGoals()
if(!mind)
return
mind.wipe_memory() // someone kill this and give revenants their own minds please
SEND_SOUND(src, sound('sound/effects/ghost.ogg'))
var/list/messages = list()
@@ -192,14 +174,14 @@
to_chat(src, chat_box_red(messages.Join("<br>")))
/mob/living/simple_animal/revenant/proc/giveSpells()
mind.AddSpell(new /datum/spell/night_vision/revenant(null))
mind.AddSpell(new /datum/spell/revenant_transmit(null))
mind.AddSpell(new /datum/spell/aoe/revenant/defile(null))
mind.AddSpell(new /datum/spell/aoe/revenant/malfunction(null))
mind.AddSpell(new /datum/spell/aoe/revenant/overload(null))
mind.AddSpell(new /datum/spell/aoe/revenant/haunt_object(null))
mind.AddSpell(new /datum/spell/aoe/revenant/hallucinations(null))
return TRUE
AddSpell(new /datum/spell/night_vision/revenant)
AddSpell(new /datum/spell/revenant_transmit)
AddSpell(new /datum/spell/aoe/revenant/defile)
AddSpell(new /datum/spell/aoe/revenant/malfunction)
AddSpell(new /datum/spell/aoe/revenant/overload)
AddSpell(new /datum/spell/aoe/revenant/haunt_object)
AddSpell(new /datum/spell/aoe/revenant/hallucinations)
/mob/living/simple_animal/revenant/dust()
return death()