Adds ashwalker shamans (#18011)

* makes the lizards themselves

* make em spawn

* efficiency

* ignore that

* couple tweaks and comments

* better spawning logic

* actual proper spawning logic

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

Co-authored-by: Skrem_7 <98909416+Skrem7@users.noreply.github.com>

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

Co-authored-by: Skrem_7 <98909416+Skrem7@users.noreply.github.com>

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

Co-authored-by: Skrem_7 <98909416+Skrem7@users.noreply.github.com>

* Update code/modules/mob/living/carbon/human/species_types/lizardpeople.dm

Co-authored-by: Skrem_7 <98909416+Skrem7@users.noreply.github.com>

* Update code/modules/mob/living/carbon/human/species_types/lizardpeople.dm

Co-authored-by: Skrem_7 <98909416+Skrem7@users.noreply.github.com>

* Update code/modules/mob/living/carbon/human/species_types/lizardpeople.dm

Co-authored-by: Skrem_7 <98909416+Skrem7@users.noreply.github.com>

* Update code/modules/mob/living/carbon/human/species_types/lizardpeople.dm

Co-authored-by: Skrem_7 <98909416+Skrem7@users.noreply.github.com>

* Update color.dm

* Update ghost_role_spawners.dm

---------

Co-authored-by: Skrem_7 <98909416+Skrem7@users.noreply.github.com>
This commit is contained in:
Molti
2023-02-26 06:58:23 -06:00
committed by GitHub
parent aef1cbd686
commit 4e1074ef64
5 changed files with 94 additions and 4 deletions

View File

@@ -31,7 +31,6 @@
return ..()
//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/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."
@@ -54,7 +53,6 @@
/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. Glory to the Necropolis!</b>") //yogs - removed a sentence
new_spawn.mind.add_antag_datum(/datum/antagonist/ashwalker, team)
/obj/effect/mob_spawn/human/ash_walker/Initialize(mapload, datum/team/ashwalkers/ashteam)
@@ -62,7 +60,19 @@
var/area/A = get_area(src)
team = ashteam
if(A)
notify_ghosts("An ash walker egg is ready to hatch in \the [A.name].", source = src, action=NOTIFY_ATTACKORBIT, flashwindow = FALSE, ignore_key = POLL_IGNORE_ASHWALKER)
notify_ghosts("[mob_name] egg is ready to hatch in \the [A.name].", source = src, action=NOTIFY_ATTACKORBIT, flashwindow = FALSE, ignore_key = POLL_IGNORE_ASHWALKER)
//Ash walker shaman eggs: Spawns in ash walker dens in lavaland. Only one can exist at a time, they are squishier than regular ashwalkers, and have the sole purpose of keeping other ashwalkers alive.
/obj/effect/mob_spawn/human/ash_walker/shaman
name = "ash walker shaman egg"
desc = "A man-sized, amber egg spawned from some unfathomable creature. A humanoid silhouette lurks within."
mob_name = "an ash walker shaman"
mob_species = /datum/species/lizard/ashwalker/shaman
outfit = /datum/outfit/ashwalker/shaman //might be OP, but the flavour is there
short_desc = "You are an ash walker shaman. Your tribe worships the Necropolis."
flavour_text = "The wastes are sacred ground, its monsters a blessed bounty. You and your people have become one with the tendril and its land. \
You have seen lights in the distance and from the skies: outsiders that come with greed in their hearts. Fresh sacrifices for your nest."
assignedrole = "Ash Walker Shaman"
/datum/outfit/ashwalker
name = "Ashwalker"

View File

@@ -1263,6 +1263,9 @@
/mob/living/carbon/human/species/lizard/ashwalker
race = /datum/species/lizard/ashwalker
/mob/living/carbon/human/species/lizard/ashwalker/shaman
race = /datum/species/lizard/ashwalker/shaman
/mob/living/carbon/human/species/lizard/draconid
race = /datum/species/lizard/draconid

View File

@@ -161,6 +161,64 @@
. = ..()
C.weather_immunities -= "ash"
//Ash walker shaman, worse defensive stats, but better at surgery and have a healing touch ability
/datum/species/lizard/ashwalker/shaman
name = "Ash Walker Shaman"
id = "ashlizardshaman"
armor = -1 //more of a support than a standard ashwalker, don't get hit
brutemod = 1.15
burnmod = 1.15
speedmod = -0.1 //similar to ethereals, should help with saving others
punchdamagehigh = 7
punchstunthreshold = 7
action_speed_coefficient = 0.9 //they're smart and efficient unlike other lizards
var/obj/effect/proc_holder/spell/targeted/touch/healtouch/goodtouch
//gives the heal spell
/datum/species/lizard/ashwalker/shaman/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
goodtouch = new /obj/effect/proc_holder/spell/targeted/touch/healtouch
C.AddSpell(goodtouch)
//removes the heal spell
/datum/species/lizard/ashwalker/shaman/on_species_loss(mob/living/carbon/C)
. = ..()
if(goodtouch)
C.RemoveSpell(goodtouch)
//basic touch ability that heals brute and burn, only accessed by the ashwalker shaman
/obj/effect/proc_holder/spell/targeted/touch/healtouch
name = "healing touch"
desc = "This spell charges your hand with the vile energy of the Necropolis, permitting you to undo some external injuries from a target."
hand_path = /obj/item/melee/touch_attack/healtouch
school = "evocation"
panel = "Ashwalker"
charge_max = 20 SECONDS
clothes_req = FALSE
antimagic_allowed = TRUE
action_icon_state = "spell_default"
/obj/item/melee/touch_attack/healtouch
name = "\improper healing touch"
desc = "A blaze of life-granting energy from the hand. Heals minor to moderate injuries."
catchphrase = "BE REPLENISHED!!"
on_use_sound = 'sound/magic/staff_healing.ogg'
icon_state = "touchofdeath" //ironic huh
item_state = "touchofdeath"
var/healamount = 20 //total of 40 assuming they're hurt by both brute and burn
/obj/item/melee/touch_attack/healtouch/afterattack(atom/target, mob/living/carbon/user, proximity)
if(!proximity || target == user || !ismob(target) || !iscarbon(user) || !(user.mobility_flags & MOBILITY_USE)) //no healing yourself
return
if(!user.can_speak_vocal())
to_chat(user, span_notice("You can't get the words out!"))
return
var/mob/living/M = target
new /obj/effect/temp_visual/heal(get_turf(M), "#899d39")
M.heal_overall_damage(healamount, healamount, 0, BODYPART_ANY, TRUE) //notice it doesn't heal toxins, still need to learn chems for that
return ..()
/*
Lizard subspecies: DRACONIDS
These guys only come from the dragon's blood bottle from lavaland. They're basically just lizards with all-around marginally better stats and fire resistance.

View File

@@ -57,6 +57,22 @@
/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)
//spawn a shaman if there isn't a living one, or an egg for one
var/shaman = TRUE
for(var/mob/living/carbon/human/lizardfinder in GLOB.mob_living_list)
if(is_species(lizardfinder, /datum/species/lizard/ashwalker/shaman))
shaman = FALSE //lizard found
if(shaman)
for(var/spawners in GLOB.mob_spawners)//if an admin spawns in a shaman egg somewhere randomly, that will prevent any eggs from spawning normally
for(var/egg in GLOB.mob_spawners[spawners])
if(istype(egg, /obj/effect/mob_spawn/human/ash_walker/shaman))
shaman = FALSE
break
if(shaman)//is a shaman being spawned?
new /obj/effect/mob_spawn/human/ash_walker/shaman(get_step(loc, pick(GLOB.alldirs)), ashies)
else
new /obj/effect/mob_spawn/human/ash_walker(get_step(loc, pick(GLOB.alldirs)), ashies)
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

View File

@@ -103,6 +103,9 @@
if(tool)
speed_mod = tool.toolspeed
if(is_species(user, /datum/species/lizard/ashwalker/shaman))//shaman is slightly better at surgeries
speed_mod *= 0.9
if(IS_MEDICAL(user))
speed_mod *= 0.8