Ash Walker flavor text, balance changes (#49316)

* Ashen One

May the flames guide thee

* Update code/game/objects/structures/ghost_role_spawners.dm

Co-Authored-By: XDTM <heliumt@yahoo.it>

* update

* caught it before I got yelled at

* updates

* Update code/game/objects/structures/ghost_role_spawners.dm

Co-Authored-By: moo <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com>

* Update code/game/objects/structures/ghost_role_spawners.dm

Co-Authored-By: moo <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com>

* spaced the spaces

tab good space bad

Co-authored-by: XDTM <heliumt@yahoo.it>
Co-authored-by: moo <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com>
This commit is contained in:
zxaber
2020-03-02 16:25:33 -08:00
committed by GitHub
parent d6443e0e64
commit de3b9a04ee
7 changed files with 104 additions and 4 deletions
+1
View File
@@ -157,6 +157,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_NOFLASH "noflash" //Makes you immune to flashes
#define TRAIT_XENO_IMMUNE "xeno_immune"//prevents xeno huggies implanting skeletons
#define TRAIT_NAIVE "naive"
#define TRAIT_PRIMITIVE "primitive"
#define TRAIT_GUNFLIP "gunflip"
//non-mob traits
+1
View File
@@ -98,6 +98,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_NOFLASH" = TRAIT_NOFLASH,
"TRAIT_XENO_IMMUNE" = TRAIT_XENO_IMMUNE,
"TRAIT_NAIVE" = TRAIT_NAIVE,
"TRAIT_PRIMITIVE" = TRAIT_PRIMITIVE, //unable to use mechs. Given to Ash Walkers
"TRAIT_GUNFLIP" = TRAIT_GUNFLIP
),
/obj/item/bodypart = list(
+3
View File
@@ -878,6 +878,9 @@
return
if(!ishuman(user)) // no silicons or drones in mechas.
return
if(HAS_TRAIT(user, TRAIT_PRIMITIVE)) //no lavalizards either.
to_chat(user, "<span class='warning'>The knowledge to use this device eludes you!</span>")
return
log_message("[user] tries to move in.", LOG_MECHA)
if (occupant)
to_chat(usr, "<span class='warning'>The [name] is already occupied!</span>")
@@ -33,6 +33,45 @@
//Ash walker eggs: Spawns in ash walker dens in lavaland. Ghosts become unbreathing lizards that worship the Necropolis and are advised to retrieve corpses to create more ash walkers.
/obj/structure/ash_walker_eggshell
name = "ash walker egg"
desc = "A man-sized yellow egg, spawned from some unfathomable creature. A humanoid silhouette lurks within. The egg shell looks resistant to temperature but otherwise rather brittle."
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
icon_state = "large_egg"
resistance_flags = LAVA_PROOF | FIRE_PROOF | FREEZE_PROOF
max_integrity = 80
var/obj/effect/mob_spawn/human/ash_walker/egg
/obj/structure/ash_walker_eggshell/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) //lifted from xeno eggs
switch(damage_type)
if(BRUTE)
if(damage_amount)
playsound(loc, 'sound/effects/attackblob.ogg', 100, TRUE)
else
playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
if(BURN)
if(damage_amount)
playsound(loc, 'sound/items/welder.ogg', 100, TRUE)
/obj/structure/ash_walker_eggshell/attack_ghost(mob/user) //Pass on ghost clicks to the mob spawner
if(egg)
egg.attack_ghost(user)
. = ..()
/obj/structure/ash_walker_eggshell/Destroy()
if(!egg)
return ..()
var/mob/living/carbon/human/yolk = new /mob/living/carbon/human/(get_turf(src))
yolk.fully_replace_character_name(null,random_unique_lizard_name(gender))
yolk.set_species(/datum/species/lizard/ashwalker)
yolk.underwear = "Nude"
yolk.equipOutfit(/datum/outfit/ashwalker)//this is an authentic mess we're making
yolk.update_body()
yolk.gib()
qdel(egg)
return ..()
/obj/effect/mob_spawn/human/ash_walker
name = "ash walker egg"
desc = "A man-sized yellow egg, spawned from some unfathomable creature. A humanoid silhouette lurks within."
@@ -43,7 +82,6 @@
outfit = /datum/outfit/ashwalker
roundstart = FALSE
death = FALSE
anchored = FALSE
move_resist = MOVE_FORCE_NORMAL
density = FALSE
short_desc = "You are an ash walker. Your tribe worships the Necropolis."
@@ -52,10 +90,17 @@
Fresh sacrifices for your nest."
assignedrole = "Ash Walker"
var/datum/team/ashwalkers/team
var/obj/structure/ash_walker_eggshell/eggshell
/obj/effect/mob_spawn/human/ash_walker/allow_spawn(mob/user)
if(!(user.key in team.players_spawned))//one per person unless you get a bonus spawn
return TRUE
to_chat(user, "<span class='warning'><b>You have exhausted your usefulness to the Necropolis</b>.</span>")
return FALSE
/obj/effect/mob_spawn/human/ash_walker/special(mob/living/new_spawn)
new_spawn.fully_replace_character_name(null,random_unique_lizard_name(gender))
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. Don't leave your nest undefended, protect it with your life. Glory to the Necropolis!</b>")
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. Invade the strange structure of the outsiders if you must. Do not cause unnecessary destruction, as littering the wastes with ugly wreckage is certain to not gain you favor. Glory to the Necropolis!</b>")
new_spawn.mind.add_antag_datum(/datum/antagonist/ashwalker, team)
@@ -63,11 +108,18 @@
var/mob/living/carbon/human/H = new_spawn
H.underwear = "Nude"
H.update_body()
ADD_TRAIT(H, TRAIT_PRIMITIVE, ROUNDSTART_TRAIT)
team.players_spawned += (new_spawn.key)
eggshell.egg = null
qdel(eggshell)
/obj/effect/mob_spawn/human/ash_walker/Initialize(mapload, datum/team/ashwalkers/ashteam)
. = ..()
var/area/A = get_area(src)
team = ashteam
eggshell = new /obj/structure/ash_walker_eggshell(get_turf(loc))
eggshell.egg = src
src.forceMove(eggshell)
if(A)
notify_ghosts("An ash walker egg is ready to hatch in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_ASHWALKER)
@@ -1,6 +1,7 @@
/datum/team/ashwalkers
name = "Ashwalkers"
show_roundend_report = FALSE
var/list/players_spawned = new
/datum/antagonist/ashwalker
name = "Ash Walker"
+6
View File
@@ -41,9 +41,12 @@
if(is_banned_from(user.key, banType))
to_chat(user, "<span class='warning'>You are jobanned!</span>")
return
if(!allow_spawn(user))
return
if(QDELETED(src) || QDELETED(user))
return
var/ghost_role = alert("Become [mob_name]? (Warning, You can no longer be revived!)",,"Yes","No")
if(ghost_role == "No" || !loc)
return
log_game("[key_name(user)] became [mob_name]")
@@ -65,6 +68,9 @@
GLOB.mob_spawners -= name
return ..()
/obj/effect/mob_spawn/proc/allow_spawn(mob/user) //Override this to add spawn limits to a ghost role
return TRUE
/obj/effect/mob_spawn/proc/special(mob/M)
return
@@ -38,15 +38,40 @@
/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)
visible_message("<span class='warning'>Serrated tendrils eagerly pull [H] to [src], tearing the body apart as its blood seeps over the eggs.</span>")
playsound(get_turf(src),'sound/magic/demon_consume.ogg', 100, TRUE)
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 class='notice'>Serrated tendrils eagerly pull [H] apart, but find nothing of interest.</span>")
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 class='warning'>Serrated tendrils carefully pull [H] to [src], absorbing the body and creating it anew.</span>")
var/datum/mind/deadmind
if(H.key)
deadmind = H
else
deadmind = H.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/remake_walker, H.mind, H.real_name), 20 SECONDS)
new /obj/effect/gibspawner/generic(get_turf(H))
qdel(H)
return
if(ismegafauna(H))
meat_counter += 20
else
meat_counter++
visible_message("<span class='warning'>Serrated tendrils eagerly pull [H] to [src], tearing the body apart as its blood seeps over the eggs.</span>")
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
//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 class='warning'><b>The Necropolis is pleased with your sacrifice. You feel confident your existence after death is secure.</b></span>")
ashies.players_spawned -= deliverykey
H.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))
@@ -55,6 +80,17 @@
else
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "oogabooga", /datum/mood_event/sacrifice_bad)
/obj/structure/lavaland/ash_walker/proc/remake_walker(var/datum/mind/oldmind, var/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.update_body()
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/spawn_mob()
if(meat_counter >= ASH_WALKER_SPAWN_THRESHOLD)
new /obj/effect/mob_spawn/human/ash_walker(get_step(loc, pick(GLOB.alldirs)), ashies)