diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 5663ee1777..146a5a49c4 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -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("You have exhausted your usefulness to the Necropolis.")) 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, "Drag the corpses of men and beasts to your nest. It will absorb them to create more of your kind. Glory to the Necropolis!") + if(is_mining_level(new_spawn.z)) + to_chat(new_spawn, "Drag the corpses of beasts to your nest. It will absorb them to create more of your kind. Glory to the Necropolis!") to_chat(new_spawn, "You can expand the weather proof area provided by your shelters by using the 'New Area' key near the bottom right of your HUD.") to_chat(new_spawn, "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!") 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) diff --git a/code/modules/ruins/objects_and_mobs/ash_walker_den.dm b/code/modules/ruins/objects_and_mobs/ash_walker_den.dm index 528c83aa2d..c1a7c5d7d5 100644 --- a/code/modules/ruins/objects_and_mobs/ash_walker_den.dm +++ b/code/modules/ruins/objects_and_mobs/ash_walker_den.dm @@ -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.
Your memories will remain intact in your new body, as your soul is being salvaged") 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("The Necropolis is pleased with your sacrifice. You feel confident your existence after death is secure.")) 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, "You have been pulled back from beyond the grave, with a new body and renewed purpose. Glory to the Necropolis!") - 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, "You have been pulled back from beyond the grave, with a new body and renewed purpose. Glory to the Necropolis!") + 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("One of the eggs swells to an unnatural size and tumbles free. It's ready to hatch!") + 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++ diff --git a/modular_splurt/code/modules/ruins/objects_and_mobs/ash_walker_den.dm b/modular_splurt/code/modules/ruins/objects_and_mobs/ash_walker_den.dm index 4222037096..9cfe8d3341 100644 --- a/modular_splurt/code/modules/ruins/objects_and_mobs/ash_walker_den.dm +++ b/modular_splurt/code/modules/ruins/objects_and_mobs/ash_walker_den.dm @@ -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