diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm
deleted file mode 100644
index e77e473ae26..00000000000
--- a/code/game/gamemodes/miniantags/revenant/revenant.dm
+++ /dev/null
@@ -1,443 +0,0 @@
-//Revenants: based off of wraiths from Goon
-//"Ghosts" that are invisible and move like ghosts, cannot take damage while invisible
-//Don't hear deadchat and are NOT normal ghosts
-//Admin-spawn or random event
-
-#define INVISIBILITY_REVENANT 50
-
-/mob/living/simple_animal/revenant
- name = "revenant"
- desc = "A malevolent spirit."
- icon = 'icons/mob/mob.dmi'
- icon_state = "revenant_idle"
- var/icon_idle = "revenant_idle"
- var/icon_reveal = "revenant_revealed"
- var/icon_stun = "revenant_stun"
- var/icon_drain = "revenant_draining"
- incorporeal_move = 3
- invisibility = INVISIBILITY_REVENANT
- health = INFINITY //Revenants don't use health, they use essence instead
- maxHealth = INFINITY
- layer = GHOST_LAYER
- healable = 0
- sight = SEE_SELF
- see_invisible = SEE_INVISIBLE_NOLIGHTING
- see_in_dark = 8
- languages_spoken = ALL
- languages_understood = ALL
- response_help = "passes through"
- response_disarm = "swings through"
- response_harm = "punches through"
- unsuitable_atmos_damage = 0
- damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) //I don't know how you'd apply those, but revenants no-sell them anyway.
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- maxbodytemp = INFINITY
- harm_intent_damage = 0
- friendly = "touches"
- status_flags = 0
- wander = 0
- density = 0
- flying = 1
- anchored = 1
- mob_size = MOB_SIZE_TINY
- pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
- speed = 1
- unique_name = 1
- hud_possible = list(ANTAG_HUD)
-
- var/essence = 75 //The resource, and health, of revenants.
- var/essence_regen_cap = 75 //The regeneration cap of essence (go figure); regenerates every Life() tick up to this amount.
- var/essence_regenerating = 1 //If the revenant regenerates essence or not; 1 for yes, 0 for no
- var/essence_regen_amount = 5 //How much essence regenerates
- var/essence_accumulated = 0 //How much essence the revenant has stolen
- var/revealed = 0 //If the revenant can take damage from normal sources.
- var/unreveal_time = 0 //How long the revenant is revealed for, is about 2 seconds times this var.
- var/unstun_time = 0 //How long the revenant is stunned for, is about 2 seconds times this var.
- var/inhibited = 0 //If the revenant's abilities are blocked by a chaplain's power.
- var/essence_drained = 0 //How much essence the revenant will drain from the corpse it's feasting on.
- var/draining = 0 //If the revenant is draining someone.
- var/list/drained_mobs = list() //Cannot harvest the same mob twice
- var/perfectsouls = 0 //How many perfect, regen-cap increasing souls the revenant has. //TODO, add objective for getting a perfect soul(s?)
- var/image/ghostimage = null //Visible to ghost with darkness off
-
-/mob/living/simple_animal/revenant/New()
- ..()
-
- ghostimage = image(src.icon,src,src.icon_state)
- ghost_darkness_images |= ghostimage
- updateallghostimages()
-
- spawn(5)
- if(src.mind)
- src.mind.remove_all_antag()
- src.mind.wipe_memory()
- src << 'sound/effects/ghost.ogg'
- src << "
"
- src << "You are a revenant."
- src << "Your formerly mundane spirit has been infused with alien energies and empowered into a revenant."
- src << "You are not dead, not alive, but somewhere in between. You are capable of limited interaction with both worlds."
- src << "You are invincible and invisible to everyone but other ghosts. Most abilities will reveal you, rendering you vulnerable."
- src << "To function, you are to drain the life essence from humans. This essence is a resource, as well as your health, and will power all of your abilities."
- src << "You do not remember anything of your past lives, nor will you remember anything about this one after your death."
- src << "Be sure to read the wiki page at https://tgstation13.org/wiki/Revenant to learn more."
- var/datum/objective/revenant/objective = new
- objective.owner = src.mind
- src.mind.objectives += objective
- src << "Objective #1: [objective.explanation_text]"
- var/datum/objective/revenantFluff/objective2 = new
- objective2.owner = src.mind
- src.mind.objectives += objective2
- src << "Objective #2: [objective2.explanation_text]"
- ticker.mode.traitors |= src.mind //Necessary for announcing
- AddSpell(new /obj/effect/proc_holder/spell/targeted/night_vision/revenant(null))
- AddSpell(new /obj/effect/proc_holder/spell/targeted/revenant_transmit(null))
- AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/defile(null))
- AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/overload(null))
- AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/malfunction(null))
- AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/blight(null))
-
-
-//Life, Stat, Hud Updates, and Say
-/mob/living/simple_animal/revenant/Life()
- if(revealed && essence <= 0)
- death()
- if(unreveal_time && world.time >= unreveal_time)
- unreveal_time = 0
- revealed = 0
- incorporeal_move = 3
- invisibility = INVISIBILITY_REVENANT
- src << "You are once more concealed."
- if(unstun_time && world.time >= unstun_time)
- unstun_time = 0
- notransform = 0
- src << "You can move again!"
- if(essence_regenerating && !inhibited && essence < essence_regen_cap) //While inhibited, essence will not regenerate
- essence = min(essence_regen_cap, essence+essence_regen_amount)
- update_action_buttons_icon() //because we update something required by our spells in life, we need to update our buttons
- update_spooky_icon()
- update_health_hud()
- ..()
-
-/mob/living/simple_animal/revenant/Stat()
- ..()
- if(statpanel("Status"))
- stat(null, "Current essence: [essence]/[essence_regen_cap]E")
- stat(null, "Stolen essence: [essence_accumulated]E")
- stat(null, "Stolen perfect souls: [perfectsouls]")
-
-/mob/living/simple_animal/revenant/update_health_hud()
- if(hud_used)
- var/essencecolor = "#8F48C6"
- if(essence > essence_regen_cap)
- essencecolor = "#9A5ACB" //oh boy you've got a lot of essence
- else if(essence == 0)
- essencecolor = "#1D2953" //oh jeez you're dying
- hud_used.healths.maptext = "
[essence]E
"
-
-/mob/living/simple_animal/revenant/med_hud_set_health()
- return //we use no hud
-
-/mob/living/simple_animal/revenant/med_hud_set_status()
- return //we use no hud
-
-/mob/living/simple_animal/revenant/say(message)
- if(!message)
- return
- log_say("[key_name(src)] : [message]")
- var/rendered = "[src] says, \"[message]\""
- for(var/mob/M in mob_list)
- if(istype(M, /mob/living/simple_animal/revenant))
- M << rendered
- if(isobserver(M))
- var/link = FOLLOW_LINK(M, src)
- M << "[link] [rendered]"
- return
-
-
-//Immunities
-/mob/living/simple_animal/revenant/Process_Spacemove(movement_dir = 0)
- return 1
-
-/mob/living/simple_animal/revenant/ex_act(severity, target)
- return 1 //Immune to the effects of explosions.
-
-/mob/living/simple_animal/revenant/blob_act(obj/effect/blob/B)
- return //blah blah blobs aren't in tune with the spirit world, or something.
-
-/mob/living/simple_animal/revenant/singularity_act()
- return //don't walk into the singularity expecting to find corpses, okay?
-
-/mob/living/simple_animal/revenant/narsie_act()
- return //most humans will now be either bones or harvesters, but we're still un-alive.
-
-
-//damage, gibbing, and dying
-/mob/living/simple_animal/revenant/attackby(obj/item/W, mob/living/user, params)
- . = ..()
- if(istype(W, /obj/item/weapon/nullrod))
- visible_message("[src] violently flinches!", \
- "As \the [W] passes through you, you feel your essence draining away!")
- adjustBruteLoss(25) //hella effective
- inhibited = 1
- update_action_buttons_icon()
- spawn(30)
- inhibited = 0
- update_action_buttons_icon()
-
-/mob/living/simple_animal/revenant/adjustHealth(amount)
- if(!revealed)
- return 0
- . = amount
- essence = max(0, essence-amount)
- update_health_hud()
- if(essence == 0)
- src << "You feel your essence fraying!"
-
-/mob/living/simple_animal/revenant/dust()
- death()
-
-/mob/living/simple_animal/revenant/gib()
- death()
-
-/mob/living/simple_animal/revenant/death()
- if(!revealed || stat == DEAD) //Revenants cannot die if they aren't revealed //or are already dead
- return 0
- ..(1)
- ghost_darkness_images -= ghostimage
- updateallghostimages()
- src << "NO! No... it's too late, you can feel your essence [pick("breaking apart", "drifting away")]..."
- notransform = 1
- revealed = 1
- invisibility = 0
- playsound(src, 'sound/effects/screech.ogg', 100, 1)
- visible_message("[src] lets out a waning screech as violet mist swirls around its dissolving body!")
- icon_state = "revenant_draining"
- for(var/i = alpha, i > 0, i -= 10)
- stoplag()
- alpha = i
- visible_message("[src]'s body breaks apart into a fine pile of blue dust.")
- var/reforming_essence = essence_regen_cap //retain the gained essence capacity
- var/obj/item/weapon/ectoplasm/revenant/R = new(get_turf(src))
- R.essence = max(reforming_essence - 15 * perfectsouls, 75) //minus any perfect souls
- R.client_to_revive = src.client //If the essence reforms, the old revenant is put back in the body
- ghostize()
- qdel(src)
- return
-
-
-//reveal, stun, icon updates, cast checks, and essence changing
-/mob/living/simple_animal/revenant/proc/reveal(time)
- if(!src)
- return
- if(time <= 0)
- return
- revealed = 1
- invisibility = 0
- incorporeal_move = 0
- if(!unreveal_time)
- src << "You have been revealed!"
- unreveal_time = world.time + time
- else
- src << "You have been revealed!"
- unreveal_time = unreveal_time + time
- update_spooky_icon()
-
-/mob/living/simple_animal/revenant/proc/stun(time)
- if(!src)
- return
- if(time <= 0)
- return
- notransform = 1
- if(!unstun_time)
- src << "You cannot move!"
- unstun_time = world.time + time
- else
- src << "You cannot move!"
- unstun_time = unstun_time + time
- update_spooky_icon()
-
-/mob/living/simple_animal/revenant/proc/update_spooky_icon()
- if(revealed)
- if(notransform)
- if(draining)
- icon_state = icon_drain
- else
- icon_state = icon_stun
- else
- icon_state = icon_reveal
- else
- icon_state = icon_idle
- if(ghostimage)
- ghostimage.icon_state = src.icon_state
- updateallghostimages()
-
-/mob/living/simple_animal/revenant/proc/castcheck(essence_cost)
- if(!src)
- return
- var/turf/T = get_turf(src)
- if(istype(T, /turf/closed))
- src << "You cannot use abilities from inside of a wall."
- return 0
- for(var/obj/O in T)
- if(O.density && !O.CanPass(src, T, 5))
- src << "You cannot use abilities inside of a dense object."
- return 0
- if(src.inhibited)
- src << "Your powers have been suppressed by nulling energy!"
- return 0
- if(!src.change_essence_amount(essence_cost, 1))
- src << "You lack the essence to use that ability."
- return 0
- return 1
-
-/mob/living/simple_animal/revenant/proc/change_essence_amount(essence_amt, silent = 0, source = null)
- if(!src)
- return
- if(essence + essence_amt <= 0)
- return
- essence = max(0, essence+essence_amt)
- update_action_buttons_icon()
- update_health_hud()
- if(essence_amt > 0)
- essence_accumulated = max(0, essence_accumulated+essence_amt)
- if(!silent)
- if(essence_amt > 0)
- src << "Gained [essence_amt]E from [source]."
- else
- src << "Lost [essence_amt]E from [source]."
- return 1
-
-
-//reforming
-/obj/item/weapon/ectoplasm/revenant
- name = "glimmering residue"
- desc = "A pile of fine blue dust. Small tendrils of violet mist swirl around it."
- icon = 'icons/effects/effects.dmi'
- icon_state = "revenantEctoplasm"
- w_class = 2
- var/essence = 75 //the maximum essence of the reforming revenant
- var/reforming = 1
- var/inert = 0
- var/client/client_to_revive
-
-/obj/item/weapon/ectoplasm/revenant/New()
- ..()
- spawn(600) //1 minute
- if(src && reforming)
- reforming = 0
- return reform()
- else
- inert = 1
- visible_message("[src] settles down and seems lifeless.")
- return
-
-/obj/item/weapon/ectoplasm/revenant/attack_self(mob/user)
- if(!reforming || inert)
- return ..()
- user.visible_message("[user] scatters [src] in all directions.", \
- "You scatter [src] across the area. The particles slowly fade away.")
- user.drop_item()
- qdel(src)
-
-/obj/item/weapon/ectoplasm/revenant/throw_impact(atom/hit_atom)
- ..()
- if(inert)
- return
- visible_message("[src] breaks into particles upon impact, which fade away to nothingness.")
- qdel(src)
-
-/obj/item/weapon/ectoplasm/revenant/examine(mob/user)
- ..()
- if(inert)
- user << "It seems inert."
- else if(reforming)
- user << "It is shifting and distorted. It would be wise to destroy this."
-
-/obj/item/weapon/ectoplasm/revenant/proc/reform()
- if(!src || qdeleted(src) || inert)
- return
- var/key_of_revenant
- message_admins("Revenant ectoplasm was left undestroyed for 1 minute and is reforming into a new revenant.")
- loc = get_turf(src) //In case it's in a backpack or someone's hand
- var/mob/living/simple_animal/revenant/R = new(get_turf(src))
- if(client_to_revive)
- for(var/mob/M in dead_mob_list)
- if(M.client == client_to_revive) //Only recreates the mob if the mob the client is in is dead
- R.client = client_to_revive
- key_of_revenant = client_to_revive.key
- if(!key_of_revenant)
- message_admins("The new revenant's old client either could not be found or is in a new, living mob - grabbing a random candidate instead...")
- var/list/candidates = get_candidates(ROLE_REVENANT)
- if(!candidates.len)
- qdel(R)
- message_admins("No candidates were found for the new revenant. Oh well!")
- inert = 1
- visible_message("[src] settles down and seems lifeless.")
- return 0
- var/client/C = pick(candidates)
- key_of_revenant = C.key
- if(!key_of_revenant)
- qdel(R)
- message_admins("No ckey was found for the new revenant. Oh well!")
- inert = 1
- visible_message("[src] settles down and seems lifeless.")
- return 0
- var/datum/mind/player_mind = new /datum/mind(key_of_revenant)
- R.essence_regen_cap = essence
- R.essence = R.essence_regen_cap
- player_mind.active = 1
- player_mind.transfer_to(R)
- player_mind.assigned_role = "revenant"
- player_mind.special_role = "Revenant"
- ticker.mode.traitors |= player_mind
- message_admins("[key_of_revenant] has been [client_to_revive ? "re":""]made into a revenant by reforming ectoplasm.")
- log_game("[key_of_revenant] was [client_to_revive ? "re":""]made as a revenant by reforming ectoplasm.")
- visible_message("[src] suddenly rises into the air before fading away.")
- qdel(src)
- if(src) //Should never happen, but just in case
- inert = 1
- return 1
-
-
-//objectives
-/datum/objective/revenant
- dangerrating = 10
- var/targetAmount = 100
-
-/datum/objective/revenant/New()
- targetAmount = rand(350,600)
- explanation_text = "Absorb [targetAmount] points of essence from humans."
- ..()
-
-/datum/objective/revenant/check_completion()
- if(!istype(owner.current, /mob/living/simple_animal/revenant))
- return 0
- var/mob/living/simple_animal/revenant/R = owner.current
- if(!R || R.stat == DEAD)
- return 0
- var/essence_stolen = R.essence_accumulated
- if(essence_stolen < targetAmount)
- return 0
- return 1
-
-/datum/objective/revenantFluff
- dangerrating = 0
-
-/datum/objective/revenantFluff/New()
- var/list/explanationTexts = list("Assist and exacerbate existing threats at critical moments.", \
- "Avoid killing in plain sight.", \
- "Cause as much chaos and anger as you can without being killed.", \
- "Damage and render as much of the station rusted and unusable as possible.", \
- "Disable and cause malfunctions in as many machines as possible.", \
- "Ensure that any holy weapons are rendered unusable.", \
- "Hinder the crew while attempting to avoid being noticed.", \
- "Make the crew as miserable as possible.", \
- "Make the clown as miserable as possible.", \
- "Make the captain as miserable as possible.", \
- "Prevent the use of energy weapons where possible.")
- explanation_text = pick(explanationTexts)
- ..()
-
-/datum/objective/revenantFluff/check_completion()
- return 1