diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 3719b54a988..f31d85dfdec 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -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("
"))) /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()