mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 03:57:13 +01:00
Refactors how revenants spawn (#28261)
* Refactors how revenants spawn * lewc review
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user