Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.

Commit 4e1074e

Browse files
MoltijoeSkrem7
andauthored
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>
1 parent aef1cbd commit 4e1074e

5 files changed

Lines changed: 94 additions & 4 deletions

File tree

code/game/objects/structures/ghost_role_spawners.dm

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
return ..()
3232

3333
//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.
34-
3534
/obj/effect/mob_spawn/human/ash_walker
3635
name = "ash walker egg"
3736
desc = "A man-sized yellow egg, spawned from some unfathomable creature. A humanoid silhouette lurks within."
@@ -54,15 +53,26 @@
5453
/obj/effect/mob_spawn/human/ash_walker/special(mob/living/new_spawn)
5554
new_spawn.fully_replace_character_name(null,random_unique_lizard_name(gender))
5655
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
57-
5856
new_spawn.mind.add_antag_datum(/datum/antagonist/ashwalker, team)
5957

6058
/obj/effect/mob_spawn/human/ash_walker/Initialize(mapload, datum/team/ashwalkers/ashteam)
6159
. = ..()
6260
var/area/A = get_area(src)
6361
team = ashteam
6462
if(A)
65-
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)
63+
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)
64+
65+
//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.
66+
/obj/effect/mob_spawn/human/ash_walker/shaman
67+
name = "ash walker shaman egg"
68+
desc = "A man-sized, amber egg spawned from some unfathomable creature. A humanoid silhouette lurks within."
69+
mob_name = "an ash walker shaman"
70+
mob_species = /datum/species/lizard/ashwalker/shaman
71+
outfit = /datum/outfit/ashwalker/shaman //might be OP, but the flavour is there
72+
short_desc = "You are an ash walker shaman. Your tribe worships the Necropolis."
73+
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. \
74+
You have seen lights in the distance and from the skies: outsiders that come with greed in their hearts. Fresh sacrifices for your nest."
75+
assignedrole = "Ash Walker Shaman"
6676

6777
/datum/outfit/ashwalker
6878
name = "Ashwalker"

code/modules/mob/living/carbon/human/human.dm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1263,6 +1263,9 @@
12631263
/mob/living/carbon/human/species/lizard/ashwalker
12641264
race = /datum/species/lizard/ashwalker
12651265

1266+
/mob/living/carbon/human/species/lizard/ashwalker/shaman
1267+
race = /datum/species/lizard/ashwalker/shaman
1268+
12661269
/mob/living/carbon/human/species/lizard/draconid
12671270
race = /datum/species/lizard/draconid
12681271

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

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,64 @@
161161
. = ..()
162162
C.weather_immunities -= "ash"
163163

164+
//Ash walker shaman, worse defensive stats, but better at surgery and have a healing touch ability
165+
/datum/species/lizard/ashwalker/shaman
166+
name = "Ash Walker Shaman"
167+
id = "ashlizardshaman"
168+
armor = -1 //more of a support than a standard ashwalker, don't get hit
169+
brutemod = 1.15
170+
burnmod = 1.15
171+
speedmod = -0.1 //similar to ethereals, should help with saving others
172+
punchdamagehigh = 7
173+
punchstunthreshold = 7
174+
action_speed_coefficient = 0.9 //they're smart and efficient unlike other lizards
175+
var/obj/effect/proc_holder/spell/targeted/touch/healtouch/goodtouch
176+
177+
//gives the heal spell
178+
/datum/species/lizard/ashwalker/shaman/on_species_gain(mob/living/carbon/C, datum/species/old_species)
179+
. = ..()
180+
goodtouch = new /obj/effect/proc_holder/spell/targeted/touch/healtouch
181+
C.AddSpell(goodtouch)
182+
183+
//removes the heal spell
184+
/datum/species/lizard/ashwalker/shaman/on_species_loss(mob/living/carbon/C)
185+
. = ..()
186+
if(goodtouch)
187+
C.RemoveSpell(goodtouch)
188+
189+
//basic touch ability that heals brute and burn, only accessed by the ashwalker shaman
190+
/obj/effect/proc_holder/spell/targeted/touch/healtouch
191+
name = "healing touch"
192+
desc = "This spell charges your hand with the vile energy of the Necropolis, permitting you to undo some external injuries from a target."
193+
hand_path = /obj/item/melee/touch_attack/healtouch
194+
195+
school = "evocation"
196+
panel = "Ashwalker"
197+
charge_max = 20 SECONDS
198+
clothes_req = FALSE
199+
antimagic_allowed = TRUE
200+
201+
action_icon_state = "spell_default"
202+
203+
/obj/item/melee/touch_attack/healtouch
204+
name = "\improper healing touch"
205+
desc = "A blaze of life-granting energy from the hand. Heals minor to moderate injuries."
206+
catchphrase = "BE REPLENISHED!!"
207+
on_use_sound = 'sound/magic/staff_healing.ogg'
208+
icon_state = "touchofdeath" //ironic huh
209+
item_state = "touchofdeath"
210+
var/healamount = 20 //total of 40 assuming they're hurt by both brute and burn
211+
212+
/obj/item/melee/touch_attack/healtouch/afterattack(atom/target, mob/living/carbon/user, proximity)
213+
if(!proximity || target == user || !ismob(target) || !iscarbon(user) || !(user.mobility_flags & MOBILITY_USE)) //no healing yourself
214+
return
215+
if(!user.can_speak_vocal())
216+
to_chat(user, span_notice("You can't get the words out!"))
217+
return
218+
var/mob/living/M = target
219+
new /obj/effect/temp_visual/heal(get_turf(M), "#899d39")
220+
M.heal_overall_damage(healamount, healamount, 0, BODYPART_ANY, TRUE) //notice it doesn't heal toxins, still need to learn chems for that
221+
return ..()
164222
/*
165223
Lizard subspecies: DRACONIDS
166224
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.

code/modules/ruins/objects_and_mobs/ash_walker_den.dm

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,22 @@
5757

5858
/obj/structure/lavaland/ash_walker/proc/spawn_mob()
5959
if(meat_counter >= ASH_WALKER_SPAWN_THRESHOLD)
60-
new /obj/effect/mob_spawn/human/ash_walker(get_step(loc, pick(GLOB.alldirs)), ashies)
60+
//spawn a shaman if there isn't a living one, or an egg for one
61+
var/shaman = TRUE
62+
for(var/mob/living/carbon/human/lizardfinder in GLOB.mob_living_list)
63+
if(is_species(lizardfinder, /datum/species/lizard/ashwalker/shaman))
64+
shaman = FALSE //lizard found
65+
if(shaman)
66+
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
67+
for(var/egg in GLOB.mob_spawners[spawners])
68+
if(istype(egg, /obj/effect/mob_spawn/human/ash_walker/shaman))
69+
shaman = FALSE
70+
break
71+
72+
if(shaman)//is a shaman being spawned?
73+
new /obj/effect/mob_spawn/human/ash_walker/shaman(get_step(loc, pick(GLOB.alldirs)), ashies)
74+
else
75+
new /obj/effect/mob_spawn/human/ash_walker(get_step(loc, pick(GLOB.alldirs)), ashies)
76+
6177
visible_message(span_danger("One of the eggs swells to an unnatural size and tumbles free. It's ready to hatch!"))
6278
meat_counter -= ASH_WALKER_SPAWN_THRESHOLD

code/modules/surgery/surgery_step.dm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@
103103
if(tool)
104104
speed_mod = tool.toolspeed
105105

106+
if(is_species(user, /datum/species/lizard/ashwalker/shaman))//shaman is slightly better at surgeries
107+
speed_mod *= 0.9
108+
106109
if(IS_MEDICAL(user))
107110
speed_mod *= 0.8
108111

0 commit comments

Comments
 (0)