This commit is contained in:
ariaworld
2024-09-14 15:53:53 +02:00
parent 051f369c2d
commit 67b519b070
3 changed files with 47 additions and 46 deletions

View File

@@ -100,15 +100,15 @@
return ..()
/obj/effect/mob_spawn/human/ash_walker/allow_spawn(mob/user, silent = FALSE)
if(!(user.key in team.players_spawned) || spawnOverride)//one per person unless you get a bonus spawn
if(!(user.ckey in team.players_spawned) || spawnOverride)//one per person unless you get a bonus spawn
return TRUE
to_chat(user, span_warning("<b>You have exhausted your usefulness to the Necropolis</b>."))
return FALSE
/obj/effect/mob_spawn/human/ash_walker/special(mob/living/new_spawn)
new_spawn.real_name = random_unique_lizard_name(gender)
if(is_mining_level(z))
to_chat(new_spawn, "<b>Drag the corpses of men and beasts to your nest. It will absorb them to create more of your kind. Glory to the Necropolis!</b>")
if(is_mining_level(new_spawn.z))
to_chat(new_spawn, "<b>Drag the corpses of beasts to your nest. It will absorb them to create more of your kind. Glory to the Necropolis!</b>")
to_chat(new_spawn, "<b>You can expand the weather proof area provided by your shelters by using the 'New Area' key near the bottom right of your HUD.</b>")
to_chat(new_spawn, "<b>Dragging injured ashwalkers to the tentacle or using the sleep verb next to it youself causes the body to remade whole after a short delay!</b>")
else
@@ -124,7 +124,7 @@
H.update_body()
if(team)
new_spawn.mind.add_antag_datum(/datum/antagonist/ashwalker, team)
team.players_spawned += (new_spawn.key)
team.players_spawned += (new_spawn.ckey)
eggshell.egg = null
QDEL_NULL(eggshell)

View File

@@ -22,6 +22,7 @@
ashies = new /datum/team/ashwalkers()
var/datum/objective/protect_object/objective = new
objective.set_target(src)
// objective.team = ashies
linked_objective = objective
ashies.objectives += objective
START_PROCESSING(SSprocessing, src)
@@ -34,7 +35,8 @@
return ..()
/obj/structure/lavaland/ash_walker/deconstruct(disassembled)
new /obj/item/assembly/signaler/anomaly (get_step(loc, pick(GLOB.alldirs)))
var/core_to_drop = pick(subtypesof(/obj/item/assembly/signaler/anomaly))
new core_to_drop (get_step(loc, pick(GLOB.alldirs)))
new /obj/effect/collapse(loc)
return ..()
@@ -43,43 +45,44 @@
spawn_mob()
/obj/structure/lavaland/ash_walker/proc/consume()
for(var/mob/living/H in view(src, 1)) //Only for corpse right next to/on same tile
if(H.stat)
for(var/obj/item/W in H)
if(!H.dropItemToGround(W))
qdel(W)
if(issilicon(H)) //no advantage to sacrificing borgs...
H.gib()
visible_message(span_notice("Serrated tendrils eagerly pull [H] apart, but find nothing of interest."))
for(var/mob/living/offeredmob in view(src, 1)) //Only for corpse right next to/on same tile
if(offeredmob.loc == src)
continue //Ashwalker Revive in Progress...
if(offeredmob.stat)
offeredmob.unequip_everything()
if(issilicon(offeredmob)) //no advantage to sacrificing borgs...
offeredmob.investigate_log("has been gibbed by the necropolis tendril.", INVESTIGATE_DEATHS)
visible_message(span_notice("Serrated tendrils eagerly pull [offeredmob] apart, but find nothing of interest."))
offeredmob.gib()
return
if(H.mind?.has_antag_datum(/datum/antagonist/ashwalker) && (H.key || H.get_ghost(FALSE, TRUE))) //special interactions for dead lava lizards with ghosts attached
visible_message(span_warning("Serrated tendrils carefully pull [H] to [src], absorbing the body and creating it anew."))
if(offeredmob.mind?.has_antag_datum(/datum/antagonist/ashwalker) && (offeredmob.ckey || offeredmob.get_ghost(FALSE, TRUE))) //special interactions for dead lava lizards with ghosts attached
visible_message(span_warning("Serrated tendrils carefully pull [offeredmob] to [src], absorbing the body and creating it anew."))
var/datum/mind/deadmind
if(H.key)
deadmind = H
if(offeredmob.ckey)
deadmind = offeredmob
else
deadmind = H.get_ghost(FALSE, TRUE)
deadmind = offeredmob.get_ghost(FALSE, TRUE)
to_chat(deadmind, "Your body has been returned to the nest. You are being remade anew, and will awaken shortly. </br><b>Your memories will remain intact in your new body, as your soul is being salvaged</b>")
SEND_SOUND(deadmind, sound('sound/magic/enter_blood.ogg',volume=100))
addtimer(CALLBACK(src, PROC_REF(remake_walker), H.mind, H.real_name, H.gender), 20 SECONDS) // SPLURT edit, adds H.gender as an argument.
new /obj/effect/gibspawner/generic(get_turf(H))
qdel(H)
addtimer(CALLBACK(src, PROC_REF(remake_walker), offeredmob), 20 SECONDS)
offeredmob.forceMove(src)
return
if(ismegafauna(H))
if(ismegafauna(offeredmob))
meat_counter += 20
else
meat_counter++
visible_message(span_warning("Serrated tendrils eagerly pull [H] to [src], tearing the body apart as its blood seeps over the eggs."))
visible_message(span_warning("Serrated tendrils eagerly pull [offeredmob] to [src], tearing the body apart as its blood seeps over the eggs."))
playsound(get_turf(src),'sound/magic/demon_consume.ogg', 100, TRUE)
var/deliverykey = H.fingerprintslast //key of whoever brought the body
var/mob/living/deliverymob = get_mob_by_key(deliverykey) //mob of said key
var/deliverykey = offeredmob.fingerprintslast //ckey of whoever brought the body
var/mob/living/deliverymob = get_mob_by_key(deliverykey) //mob of said ckey
//there is a 40% chance that the Lava Lizard unlocks their respawn with each sacrifice
if(deliverymob && (deliverymob.mind?.has_antag_datum(/datum/antagonist/ashwalker)) && (deliverykey in ashies.players_spawned) && (prob(40)))
to_chat(deliverymob, span_warning("<b>The Necropolis is pleased with your sacrifice. You feel confident your existence after death is secure.</b>"))
ashies.players_spawned -= deliverykey
H.gib()
offeredmob.investigate_log("has been gibbed by the necropolis tendril.", INVESTIGATE_DEATHS)
offeredmob.gib()
obj_integrity = min(obj_integrity + max_integrity*0.05,max_integrity)//restores 5% hp of tendril
for(var/mob/living/L in view(src, 5))
if(L.mind?.has_antag_datum(/datum/antagonist/ashwalker))
@@ -87,22 +90,26 @@
else
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "headspear", /datum/mood_event/sacrifice_bad)
/obj/structure/lavaland/ash_walker/proc/remake_walker(datum/mind/oldmind, oldname)
var/mob/living/carbon/human/M = new /mob/living/carbon/human(get_step(loc, pick(GLOB.alldirs)))
M.set_species(/datum/species/lizard/ashwalker)
M.real_name = oldname
M.underwear = "Nude"
M.undershirt = "Nude"
M.socks = "Nude"
M.update_body()
M.remove_language(/datum/language/common)
oldmind.transfer_to(M)
M.mind.grab_ghost()
to_chat(M, "<b>You have been pulled back from beyond the grave, with a new body and renewed purpose. Glory to the Necropolis!</b>")
playsound(get_turf(M),'sound/magic/exit_blood.ogg', 100, TRUE)
/obj/structure/lavaland/ash_walker/proc/remake_walker(mob/living/carbon/oldmob)
var/mob/living/carbon/human/newwalker = new /mob/living/carbon/human(get_step(loc, pick(GLOB.alldirs)))
newwalker.set_species(/datum/species/lizard/ashwalker)
newwalker.real_name = oldmob.real_name
newwalker.gender = oldmob.gender
newwalker.undershirt = "Nude"
newwalker.underwear = "Nude"
newwalker.socks = "Nude"
newwalker.set_species(species)
newwalker.update_body()
newwalker.remove_language(/datum/language/common)
oldmob.mind.transfer_to(newwalker)
newwalker.mind.grab_ghost()
to_chat(newwalker, "<b>You have been pulled back from beyond the grave, with a new body and renewed purpose. Glory to the Necropolis!</b>")
playsound(get_turf(newwalker),'sound/magic/exit_blood.ogg', 100, TRUE)
qdel(oldmob)
/obj/structure/lavaland/ash_walker/proc/spawn_mob()
if(meat_counter >= ASH_WALKER_SPAWN_THRESHOLD)
new /obj/effect/mob_spawn/human/ash_walker(get_step(loc, pick(GLOB.alldirs)), ashies)
visible_message("<span class='danger'>One of the eggs swells to an unnatural size and tumbles free. It's ready to hatch!</span>")
visible_message(span_danger("One of the eggs swells to an unnatural size and tumbles free. It's ready to hatch!"))
meat_counter -= ASH_WALKER_SPAWN_THRESHOLD
// ashies.eggs_created++

View File

@@ -1,9 +1,3 @@
/obj/structure/lavaland/ash_walker/remake_walker(datum/mind/oldmind, oldname, oldgender)
. = ..()
var/mob/living/carbon/human/M = oldmind.current
M.gender = oldgender
M.set_species(species)
/obj/structure/lavaland/ash_walker/spawn_mob() //Rewrite of the one in code\modules\ruins\objects_and_mobs\ash_walker_den.dm
if(meat_counter < ASH_WALKER_SPAWN_THRESHOLD)
return