Refactors revenants to basic mobs (#30661)

This commit is contained in:
PollardTheDragon
2025-10-28 13:26:16 +00:00
committed by GitHub
parent 0f250ed33d
commit a3b2c3a251
13 changed files with 65 additions and 63 deletions
@@ -0,0 +1,50 @@
#define REVENANT_SPAWN_THRESHOLD 10
/datum/event/revenant
var/key_of_revenant
/datum/event/revenant/proc/get_revenant(end_if_fail = 0)
var/deadMobs = 0
for(var/mob/M in GLOB.dead_mob_list)
deadMobs++
if(deadMobs < REVENANT_SPAWN_THRESHOLD)
message_admins("Random event attempted to spawn a revenant, but there were only [deadMobs]/[REVENANT_SPAWN_THRESHOLD] dead mobs.")
return
spawn()
var/list/candidates = SSghost_spawns.poll_candidates("Do you want to play as a revenant?", ROLE_REVENANT, TRUE, source = /mob/living/basic/revenant)
if(!length(candidates))
key_of_revenant = null
kill()
return
var/mob/C = pick(candidates)
key_of_revenant = C.key
if(!key_of_revenant)
kill()
return
var/datum/mind/player_mind = new /datum/mind(key_of_revenant)
player_mind.active = TRUE
var/list/spawn_locs = list()
for(var/obj/effect/landmark/spawner/rev/R in GLOB.landmarks_list)
spawn_locs += get_turf(R)
if(!spawn_locs) //If we can't find a good place, just spawn the revenant at the player's location
spawn_locs += get_turf(player_mind.current)
if(!spawn_locs) //If we can't find THAT, then give up
kill()
return
var/mob/living/basic/revenant/revvie = new /mob/living/basic/revenant/(pick(spawn_locs))
player_mind.transfer_to(revvie)
dust_if_respawnable(C)
player_mind.assigned_role = SPECIAL_ROLE_REVENANT
player_mind.special_role = SPECIAL_ROLE_REVENANT
SSticker.mode.traitors |= player_mind
message_admins("[key_of_revenant] has been made into a revenant by an event.")
log_game("[key_of_revenant] was spawned as a revenant by an event.")
/datum/event/revenant/start()
get_revenant()
#undef REVENANT_SPAWN_THRESHOLD