diff --git a/code/modules/mob/living/simple_animal/ascendant_shadowling.dm b/code/game/gamemodes/shadowling/ascendant_shadowling.dm
similarity index 94%
rename from code/modules/mob/living/simple_animal/ascendant_shadowling.dm
rename to code/game/gamemodes/shadowling/ascendant_shadowling.dm
index 9445db7592c..a7c87ca7aa3 100644
--- a/code/modules/mob/living/simple_animal/ascendant_shadowling.dm
+++ b/code/game/gamemodes/shadowling/ascendant_shadowling.dm
@@ -1,5 +1,5 @@
/mob/living/simple_animal/ascendant_shadowling
- name = "Ascendant Shadowling"
+ name = "ascendant shadowling"
desc = "A large, floating eldritch horror. It has pulsing markings all about its body and large horns. It seems to be floating without any form of support."
icon = 'icons/mob/mob.dmi'
icon_state = "shadowling_ascended"
@@ -25,7 +25,7 @@
minbodytemp = 0
maxbodytemp = INFINITY
- environment_smash = 2
+ environment_smash = 3
faction = list("faithless")
diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm
index c1acd926c97..0fbb94aaa2e 100644
--- a/code/game/gamemodes/shadowling/shadowling.dm
+++ b/code/game/gamemodes/shadowling/shadowling.dm
@@ -46,6 +46,7 @@ Made by Xhuis
var/required_thralls = 15 //How many thralls are needed (hardcoded for now)
var/shadowling_ascended = 0 //If at least one shadowling has ascended
var/shadowling_dead = 0 //is shadowling kill
+ var/objective_explanation
/proc/is_thrall(var/mob/living/M)
@@ -124,7 +125,7 @@ Made by Xhuis
var/objective = "enthrall" //may be devour later, but for now it seems murderbone-y
if(objective == "enthrall")
- var/objective_explanation = "Ascend to your true form by use of the Ascendance ability. This may only be used with [required_thralls] collective thralls, while hatched, and is unlocked with the Collective Mind ability."
+ objective_explanation = "Ascend to your true form by use of the Ascendance ability. This may only be used with [required_thralls] collective thralls, while hatched, and is unlocked with the Collective Mind ability."
shadow_objectives += "enthrall"
shadow_mind.memory += "Objective #1: [objective_explanation]"
shadow_mind.current << "Objective #1: [objective_explanation]
"
@@ -149,10 +150,8 @@ Made by Xhuis
shadowling_thralls += new_thrall_mind
update_shadow_icons_added(new_thrall_mind)
new_thrall_mind.current.attack_log += "\[[time_stamp()]\] Became a thrall"
- new_thrall_mind.memory += "The Shadowlings' Objectives: Ascend to your true form by use of the Ascendance ability. \
- This may only be used with [required_thralls] collective thralls, while hatched, and is unlocked with the Collective Mind ability."
- new_thrall_mind.current << "The objectives of your shadowlings:: Ascend to your true form by use of the Ascendance ability. \
- This may only be used with [required_thralls] collective thralls, while hatched, and is unlocked with the Collective Mind ability."
+ new_thrall_mind.memory += "The Shadowlings' Objectives: [objective_explanation]"
+ new_thrall_mind.current << "The objectives of the shadowlings: [objective_explanation]"
new_thrall_mind.current.add_language("Shadowling Hivemind")
new_thrall_mind.current.hud_updateflag |= (1 << SPECIALROLE_HUD)
return 1
diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm
index e9678fff949..1935f3159d7 100644
--- a/code/game/gamemodes/shadowling/shadowling_abilities.dm
+++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm
@@ -18,71 +18,74 @@
charge_counter = charge_max
return
+ var/mob/living/carbon/human/M = target
usr.visible_message("[usr]'s eyes flash a blinding red!")
target.visible_message("[target] freezes in place, their eyes glazing over...")
if(in_range(target, usr))
- target << "Your gaze is forcibly drawn into [usr]'s eyes, and you are mesmerized by the heavenly lights..."
+ target << "Your gaze is forcibly drawn into [usr]'s eyes, and you are mesmerized by their heavenly beauty..."
else //Only alludes to the shadowling if the target is close by
target << "Red lights suddenly dance in your vision, and you are mesmerized by the heavenly lights..."
target.Stun(10)
- if(target.reagents)
- target.reagents.add_reagent("capulettium_plus", 4) //This is really bad but it's the only way it works.
+ M.silent += 10
/obj/effect/proc_holder/spell/wizard/aoe_turf/veil
name = "Veil"
- desc = "Extinguishes all electronic lights in a decent radius."
+ desc = "Extinguishes most nearby light sources."
panel = "Shadowling Abilities"
charge_max = 250 //Short cooldown because people can just turn the lights back on
clothes_req = 0
range = 5
+ var/blacklisted_lights = list(/obj/item/device/flashlight/flare, /obj/item/device/flashlight/slime)
-/obj/effect/proc_holder/spell/wizard/aoe_turf/veil/cast(list/targets)
- usr << "You silently disable all nearby lights."
- var/list/blacklisted_lights = list(/obj/item/device/flashlight/flare, /obj/item/device/flashlight/slime)
- for(var/turf/T in targets)
- for(var/obj/item/device/flashlight/F in T.contents)
- if(is_type_in_list(F, blacklisted_lights))
- F.visible_message("[F] goes slightly dim for a moment.")
+/obj/effect/proc_holder/spell/wizard/aoe_turf/veil/proc/extinguishItem(var/obj/item/I) //WARNING NOT SUFFICIENT TO EXTINGUISH AN ITEM HELD BY A MOB
+ if(istype(I, /obj/item/device/flashlight))
+ var/obj/item/device/flashlight/F = I
+ if(F.on)
+ if(is_type_in_list(I, blacklisted_lights))
+ I.visible_message("[I] dims slightly, before the shadows around it scatter.")
return
F.on = 0
- F.visible_message("[F] gutters and falls dark.")
F.update_brightness()
+ else if(istype(I, /obj/item/device/pda))
+ var/obj/item/device/pda/P = I
+ P.fon = 0
+ P.set_light(0)
+ else if(istype(I, /obj/item/clothing/head/helmet/space/rig))
+ var/obj/item/clothing/head/helmet/space/rig/R = I
+ if(R.on)
+ R.on = 0
+ R.icon_state = "rig[R.on]-[R._color]"
+ R.visible_message("[R]'s light fades and turns off.")
+ R.set_light(0)
+ return I.light_range
+
+/obj/effect/proc_holder/spell/wizard/aoe_turf/veil/proc/extinguishMob(var/mob/living/H)
+ for(var/obj/item/F in H)
+ if(F.light_range > 0)
+ extinguishItem(F)
+
+/obj/effect/proc_holder/spell/wizard/aoe_turf/veil/cast(list/targets)
+ usr << "You silently disable all nearby lights."
+ for(var/turf/T in targets)
+ for(var/obj/item/F in T.contents)
+ extinguishItem(F)
+ for(var/obj/machinery/floodlight/F in T.contents)
+ F.on = 0
+ F.set_light(0)
for(var/obj/machinery/light/L in T.contents)
L.on = 0
L.visible_message("[L] flickers and falls dark.")
L.update(0)
- for(var/obj/item/device/pda/P in T.contents)
- P.fon = 0
- P.set_light(0)
for(var/obj/effect/glowshroom/G in orange(2, usr)) //Very small radius
G.visible_message("\The [G] withers away!")
qdel(G)
- for(var/mob/living/carbon/human/H in T.contents)
- for(var/obj/item/device/flashlight/F in H)
- if(is_type_in_list(F, blacklisted_lights))
- F.visible_message("[F] goes slightly dim for a moment.")
- return
- F.on = 0
- F.visible_message("[F] gutters and falls dark.")
- F.update_brightness()
- for(var/obj/item/device/pda/P in H)
- P.fon = 0
- P.set_light(0) //failsafe
- for(var/obj/item/clothing/head/helmet/space/rig/R in H)
- if(R.on)
- R.on = 0
- R.icon_state = "rig[R.on]-[R._color]"
- H.update_inv_head()
- R.visible_message("[R]'s light fades and turns off.")
- H.set_light(H.luminosity - R.brightness_on)
- R.set_light(0)
- if(H != usr)
- H << "You feel a chill and are plunged into darkness."
- H.luminosity = 0 //This might not be required, but it just acts as another failsafe.
-
-
+ for(var/obj/machinery/computer/C in T.contents)
+ C.set_light(0)
+ C.visible_message("[C] grows dim, its screen barely readable.")
+ for(var/mob/living/H in T.contents)
+ extinguishMob(H)
/obj/effect/proc_holder/spell/wizard/targeted/shadow_walk
name = "Shadow Walk"
@@ -96,7 +99,7 @@
/obj/effect/proc_holder/spell/wizard/targeted/shadow_walk/cast(list/targets)
for(var/mob/living/user in targets)
playsound(user.loc, 'sound/effects/bamf.ogg', 50, 1)
- user.visible_message("[user] vanishes into thin air!", "You enter the space between worlds as a passageway.")
+ user.visible_message("[user] vanishes in a puff of black mist!", "You enter the space between worlds as a passageway.")
user.SetStunned(0)
user.SetWeakened(0)
user.incorporeal_move = 1
@@ -104,7 +107,7 @@
if(user.buckled)
user.buckled.unbuckle()
sleep(40) //4 seconds
- user.visible_message("[user] appears out of nowhere!", "The pressure becomes too much and you vacate the interdimensional darkness.")
+ user.visible_message("[user] suddenly manifests!", "The pressure becomes too much and you vacate the interdimensional darkness.")
user.incorporeal_move = 0
user.alpha = 255
@@ -119,7 +122,7 @@
clothes_req = 0
/obj/effect/proc_holder/spell/wizard/aoe_turf/flashfreeze/cast(list/targets)
- usr << "You freeze the nearby air."
+ usr << "You freeze the nearby air."
playsound(usr.loc, 'sound/effects/ghost2.ogg', 50, 1)
for(var/turf/T in targets)
@@ -150,12 +153,18 @@
var/enthralling = 0
/obj/effect/proc_holder/spell/wizard/targeted/enthrall/cast(list/targets)
+ var/mob/living/carbon/human/user = usr
+ listclearnulls(ticker.mode.thralls)
+ if(ticker.mode.thralls.len >= 5 && (!istype(user.species, /datum/species/shadow/ling)))
+ user << "With your telepathic abilities suppressed, your human form will not allow you to enthrall any others. Hatch first."
+ charge_counter = charge_max
+ return
for(var/mob/living/carbon/human/target in targets)
if(!in_range(usr, target))
usr << "You need to be closer to enthrall [target]."
charge_counter = charge_max
return
- if(!target.ckey)
+ if(!target.key)
usr << "The target has no mind."
charge_counter = charge_max
return
@@ -172,18 +181,18 @@
charge_counter = charge_max
return
if(enthralling)
- usr << "You are already enthralling!"
+ usr << "You are already enthralling!"
charge_counter = charge_max
return
enthralling = 1
usr << "This target is valid. You begin the enthralling."
- target << "[usr] focuses in concentration. Your head begins to ache."
+ target << "[usr] stares at you. You feel your head begin to pulse."
for(var/progress = 0, progress <= 3, progress++)
switch(progress)
if(1)
usr << "You begin allocating energy for the enthralling."
- usr.visible_message("[usr]'s eyes begin to throb a piercing red.")
+ usr.visible_message("[usr]'s eyes begin to throb a piercing red.")
if(2)
usr << "You begin the enthralling of [target]."
usr.visible_message("[usr] leans over [target], their eyes glowing a deep crimson, and stares into their face.")
@@ -192,19 +201,19 @@
sleep(20)
if(isloyal(target))
usr << "They are enslaved by Nanotrasen. You begin to shut down the nanobot implant - this will take some time."
- usr.visible_message("[usr] halts for a moment, then begins passing its hand over [target]'s body.")
- target << "You feel your loyalties begin to weaken!"
+ usr.visible_message("[usr] halts for a moment, then begins passing its hand over [target]'s body.")
+ target << "You feel your loyalties begin to weaken!"
sleep(150) //15 seconds - not spawn() so the enthralling takes longer
usr << "The nanobots composing the loyalty implant have been rendered inert. Now to continue."
usr.visible_message("[usr] halts thier hand and resumes staring into [target]'s face.")
for(var/obj/item/weapon/implant/loyalty/L in target)
if(L && L.implanted)
qdel(L)
- target << "Your unwavering loyalty to Nanotrasen falters, dims, dies."
+ target << "Your unwavering loyalty to Nanotrasen falters, dims, dies."
if(3)
usr << "You begin rearranging [target]'s memories."
- usr.visible_message("[usr]'s eyes flare brightly, and a horrible grin begins to spread across [target]'s face...")
- target << "Your head cries out. The veil of reality begins to crumple and something evil bleeds through." //Ow the edge
+ usr.visible_message("[usr]'s eyes flare brightly, their unflinching gaze staring constantly at [target].")
+ target << "Your head cries out. The veil of reality begins to crumple and something evil bleeds through." //Ow the edge
if(!do_mob(usr, target, 100)) //around 30 seconds total for enthralling, 45 for someone with a loyalty implant
usr << "The enthralling has been interrupted - your target's mind returns to its previous state."
target << "Your thoughts become coherent once more. Already you can barely remember what's happened to you."
@@ -212,12 +221,13 @@
return
enthralling = 0
- usr << "You have enthralled [target]!"
- target << "You see the Truth. Reality has been torn away and you realize what a fool you've been."
- target << "The shadowlings are your masters. Serve them above all else and ensure they complete their goals."
- target << "You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls."
- target << "You can communicate with the other enlightened ones by using the Shadowling Hivemind (:8) ability."
- target.adjustOxyLoss(-200) //In case the shadowling was choking them out
+ usr << "You have enthralled [target]!"
+ target.visible_message("[target]'s expression appears as if they have experienced a revelation!", \
+ "You see the Truth. Reality has been torn away and you realize what a fool you've been.")
+ target << "The shadowlings are your masters. Serve them above all else and ensure they complete their goals."
+ target << "You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls."
+ target << "You can communicate with the other enlightened ones by speaking in the shadowling hivemind (:8)."
+ target.setOxyLoss(0) //In case the shadowling was choking them out
ticker.mode.add_thrall(target.mind)
target.mind.special_role = "Shadowling Thrall"
@@ -231,8 +241,8 @@
include_user = 1
var/blind_smoke_acquired
var/screech_acquired
- var/drain_thrall_acquired
- var/thrall_swap_acquired
+ var/drainLifeAcquired
+ var/reviveThrallAcquired
/obj/effect/proc_holder/spell/wizard/targeted/collective_mind/cast(list/targets)
for(var/mob/living/user in targets)
@@ -245,7 +255,7 @@
for(M in living_mob_list)
if(is_thrall(M))
thralls++
- M << "You feel hooks sink into your mind and pull."
+ M << "You feel hooks sink into your mind and pull."
if(!do_after(user, 30))
user << "Your concentration has been broken. The mental hooks you have sent out now retract into your mind."
@@ -257,21 +267,21 @@
"
user.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/blindness_smoke)
- if(thralls >= 5 && !drain_thrall_acquired)
- drain_thrall_acquired = 1
- user << "The power of your thralls has granted you the Drain Thrall ability. You can now drain nearby thralls to heal yourself."
- user.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/drain_thralls)
+ if(thralls >= 5 && !drainLifeAcquired)
+ drainLifeAcquired = 1
+ user << "The power of your thralls has granted you the Drain Life ability. You can now drain the health of nearby humans to heal yourself."
+ user.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/drainLife)
if(thralls >= 7 && !screech_acquired)
screech_acquired = 1
- user << "The power of your thralls has granted you the Sonic Screech ability. This ability will shatter nearby windows and deafen enemies."
+ user << "The power of your thralls has granted you the Sonic Screech ability. This ability will shatter nearby windows and deafen enemies, plus stunning silicon lifeforms."
user.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/unearthly_screech)
- if(thralls >= 9 && !thrall_swap_acquired)
- thrall_swap_acquired = 1
- user << "The power of your thralls has granted you the Spatial Relocation ability. This will, allow you to instantly swap places with one of your thralls in \
- addition to shattering nearby lights."
- user.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/spatial_relocation)
+ if(thralls >= 9 && !reviveThrallAcquired)
+ reviveThrallAcquired = 1
+ user << "The power of your thralls has granted you the Black Recuperation ability. This will, after a short time, bring a dead thrall completely back to life \
+ with no bodily defects."
+ user.mind.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/reviveThrall
if(thralls < victory_threshold)
user << "You do not have the power to ascend. You require [victory_threshold] thralls, but only [thralls] living thralls are present."
@@ -285,8 +295,9 @@
M.mind.current.verbs -= /mob/living/carbon/human/proc/shadowling_hatch //In case a shadowling hasn't hatched
M.mind.current.verbs += /mob/living/carbon/human/proc/shadowling_ascendance
if(M == usr)
- return
- M << "[user.real_name] has coalesced the strength of the thralls. You can draw upon it at any time to ascend." //Tells all the other shadowlings
+ M << "You project this power to the rest of the shadowlings."
+ else
+ M << "[user.real_name] has coalesced the strength of the thralls. You can draw upon it at any time to ascend. (Shadowling Evolution Tab)" //Tells all the other shadowlings
@@ -317,7 +328,7 @@
qdel(B)
datum/reagent/shadowling_blindness_smoke //Blinds non-shadowlings, heals shadowlings/thralls
- name = "!(%@ ERROR )!@$"
+ name = "odd black liquid"
id = "blindness_smoke"
description = "<::ERROR::> CANNOT ANALYZE REAGENT <::ERROR::>"
color = "#000000" //Complete black (RGB: 0, 0, 0)
@@ -329,8 +340,8 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
M << "You breathe in the black smoke, and your eyes burn horribly!"
M.eye_blind = 5
if(prob(25))
- M.visible_message("[M] screams and claws at their eyes!")
- M.Stun(2)
+ M.visible_message("[M] claws at their eyes!")
+ M.Stun(3)
else
M << "You breathe in the black smoke, and you feel revitalized!"
M.heal_organ_damage(2,2)
@@ -368,7 +379,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
M.ear_damage += 3
else if(issilicon(target))
var/mob/living/silicon/S = target
- S << "ERROR $!(@ ERROR )#^! SENSOR INTERFERENCE DETECTED"
+ S << "ERROR $!(@ ERROR )#^! SENSOR OVERLOAD \[$(!@#"
S << 'sound/misc/interference.ogg'
playsound(S, 'sound/machines/warning-buzzer.ogg', 50, 1)
var/datum/effect/effect/system/spark_spread/sp = new /datum/effect/effect/system/spark_spread
@@ -376,72 +387,86 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
sp.start()
S.Weaken(6)
for(var/obj/structure/window/W in T.contents)
- W.hit(rand(50,100))
+ W.hit(rand(80,100))
-/obj/effect/proc_holder/spell/wizard/aoe_turf/drain_thralls
- name = "Drain Thralls"
- desc = "Damages nearby thralls, draining their life and healing yourself."
+/obj/effect/proc_holder/spell/wizard/aoe_turf/drainLife
+ name = "Drain Life"
+ desc = "Damages nearby humans, draining their life and healing your own wounds."
panel = "Shadowling Abilities"
range = 3
charge_max = 100
clothes_req = 0
- var/thralls_drained = 0
- var/list/nearby_thralls = list()
+ var/targetsDrained
+ var/list/nearbyTargets
-/obj/effect/proc_holder/spell/wizard/aoe_turf/drain_thralls/cast(list/targets)
- thralls_drained = 0
- nearby_thralls = list()
+/obj/effect/proc_holder/spell/wizard/aoe_turf/drainLife/cast(list/targets, var/mob/living/carbon/human/U = usr)
+ targetsDrained = 0
+ nearbyTargets = list()
for(var/turf/T in targets)
for(var/mob/living/carbon/M in T.contents)
- if(is_thrall(M))
- thralls_drained++
- nearby_thralls.Add(M)
- M << "You feel a curious draining sensation and a wave of exhaustion washes over you."
- for(var/mob/living/carbon/M in nearby_thralls)
- nearby_thralls.Remove(M) //To prevent someone dying like a zillion times
- M.take_organ_damage(25/thralls_drained,25/thralls_drained) //For every nearby thrall, the damage to each is reduced - 1 thrall = 50 for him, 2 thralls = 25 for each, etc.
- usr << "You draw the life from [M] to heal your wounds."
- if(thralls_drained)
- var/mob/living/carbon/U = usr
- U.heal_organ_damage(25, 25)
- else
+ targetsDrained++
+ nearbyTargets.Add(M)
+ if(!targetsDrained)
charge_counter = charge_max
- usr << "There were no nearby thralls for you to drain."
+ usr << "There were no nearby humans for you to drain."
+ return
+ for(var/mob/living/carbon/M in nearbyTargets)
+ U.heal_organ_damage(10, 10)
+ U.adjustToxLoss(-10)
+ U.adjustOxyLoss(-10)
+ U.adjustStaminaLoss(-20)
+ U.AdjustWeakened(-1)
+ U.AdjustStunned(-1)
+ M.adjustOxyLoss(20)
+ M.adjustStaminaLoss(20)
+ M << "You feel a wave of exhaustion and a curious draining sensation directed towards [usr]!"
+ usr << "You draw life from those around you to heal your wounds."
-/obj/effect/proc_holder/spell/wizard/targeted/spatial_relocation
- name = "Spatial Relocation"
- desc = "Swaps places with a thrall and breaks nearby lights."
+/obj/effect/proc_holder/spell/wizard/targeted/reviveThrall
+ name = "Black Recuperation"
+ desc = "Brings a dead thrall back to life."
panel = "Shadowling Abilities"
- range = -1
+ range = 1
charge_max = 3000
clothes_req = 0
- include_user = 1
+ include_user = 0
var/list/thralls_in_world = list()
-/obj/effect/proc_holder/spell/wizard/targeted/spatial_relocation/cast(list/targets, distanceoverride)
- for(var/mob/living/carbon/human/M in world)
- if(is_thrall(M))
- thralls_in_world += M
- if(!thralls_in_world)
- charge_counter = charge_max
- return
- var/mob/living/carbon/thrall_to_swap = input("Who do you wish to swap places with?", "Available Thralls") as null|anything in (thralls_in_world)
- var/turf/shadowturf = get_turf(usr)
- var/turf/thrallturf = get_turf(thrall_to_swap)
- thrall_to_swap.visible_message("[thrall_to_swap] suddenly vanishes in a puff of black smoke!")
- thrall_to_swap << "You feel a brief sense of nausea before finding yourself in an entirely new place!"
- usr.visible_message("[usr] suddenly goes transparent and vanishes!")
- usr << "You experience vertigo as you swap your location with [thrall_to_swap]'s."
- thrall_to_swap.loc = shadowturf
- usr.loc = thrallturf
- thrall_to_swap.Weaken(4)
- usr.Weaken(4)
- usr.regenerate_icons()
- thrall_to_swap.regenerate_icons()
+/obj/effect/proc_holder/spell/wizard/targeted/reviveThrall/cast(list/targets)
+ for(var/mob/living/carbon/human/thrallToRevive in targets)
+ if(!is_thrall(thrallToRevive))
+ usr << "[thrallToRevive] is not a thrall."
+ charge_counter = charge_max
+ return
+ if(thrallToRevive.stat != DEAD)
+ usr << "[thrallToRevive] is not dead."
+ charge_counter = charge_max
+ return
+ usr.visible_message("[usr] kneels over [thrallToRevive], placing their hands on \his chest.", \
+ "You crouch over the body of your thrall and begin gathering energy...")
+ var/mob/dead/observer/ghost = thrallToRevive.get_ghost()
+ if(ghost)
+ ghost << "Your masters are resuscitating you! Return to your corpse if you wish to be brought to life. (Verbs -> Ghost -> Re-enter corpse)"
+ ghost << 'sound/effects/genetics.ogg'
+ if(!do_mob(usr, thrallToRevive, 100))
+ usr << "Your concentration snaps. The flow of energy ebbs."
+ charge_counter= charge_max
+ return
+ usr << "You release a massive surge of energy into [thrallToRevive]!"
+ usr.visible_message("Red lightning surges from [usr]'s hands into [thrallToRevive]'s chest!")
+ playsound(thrallToRevive, 'sound/weapons/Egloves.ogg', 50, 1)
+ playsound(thrallToRevive, 'sound/machines/defib_zap.ogg', 50, 1)
+ sleep(20)
+ thrallToRevive.revive()
+ thrallToRevive.visible_message("[thrallToRevive] draws in a huge breath, blinding violet light shining from their eyes.", \
+ "You have returned. One of your masters has brought you from the darkness beyond.")
+ thrallToRevive.Weaken(4)
+ thrallToRevive.emote("gasp")
+ playsound(thrallToRevive, "bodyfall", 50, 1)
// ASCENDANT ABILITIES BEYOND THIS POINT //
@@ -450,7 +475,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
desc = "Gibs a human after a short time."
panel = "Ascendant"
range = 7
- charge_max = 300
+ charge_max = 0
clothes_req = 0
/obj/effect/proc_holder/spell/wizard/targeted/annihilate/cast(list/targets)
@@ -482,7 +507,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
desc = "Instantly enthralls a human."
panel = "Ascendant"
range = 7
- charge_max = 450
+ charge_max = 0
clothes_req = 0
/obj/effect/proc_holder/spell/wizard/targeted/hypnosis/cast(list/targets)
@@ -512,10 +537,10 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
usr << "You instantly rearrange [target]'s memories, hyptonitizing them into a thrall."
target << "An agonizing spike of pain drives into your mind, and--"
- target << "And you see the Truth. Reality has been torn away and you realize what a fool you've been."
- target << "The shadowlings are your masters. Serve them above all else and ensure they complete their goals."
- target << "You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls."
- target << "You can communicate with the other enlightened ones by using the Shadowling Hivemind (:8)."
+ target << "And you see the Truth. Reality has been torn away and you realize what a fool you've been."
+ target << "The shadowlings are your masters. Serve them above all else and ensure they complete their goals."
+ target << "You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls."
+ target << "You can communicate with the other enlightened ones by using the Shadowling Hivemind (:8)."
ticker.mode.add_thrall(target.mind)
target.mind.special_role = "Thrall"
target.add_language("Shadowling Hivemind")
@@ -553,7 +578,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
desc = "Extremely empowered version of Flash Freeze."
panel = "Ascendant"
range = 5
- charge_max = 600
+ charge_max = 100
clothes_req = 0
/obj/effect/proc_holder/spell/wizard/aoe_turf/glacial_blast/cast(list/targets)
@@ -562,7 +587,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
usr << "You are not in the same plane of existence. Unphase first."
return
- usr << "You freeze the nearby air."
+ usr << "You freeze the nearby air."
playsound(usr.loc, 'sound/effects/ghost2.ogg', 100, 1)
for(var/turf/T in targets)
@@ -580,24 +605,3 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
target.take_organ_damage(0,80)
-
-/obj/effect/proc_holder/spell/wizard/targeted/vortex
- name = "Vortex"
- desc = "Tears open a hole in reality. Anyone, INCLUDING YOU, walking through it will be trapped there for eternity."
- panel = "Ascendant"
- range = -1
- include_user = 1
- charge_max = 1200
- clothes_req = 0
-
-/obj/effect/proc_holder/spell/wizard/targeted/vortex/cast(list/targets)
- var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
- if(SHA.phasing)
- usr << "You are not in the same plane of existence. Unphase first."
- return
-
- for(SHA in targets)
- SHA.visible_message("[SHA] raises their arms upward as the markings on their body flare a blinding red!", \
- "You tear open a rift to the black space between worlds. It would be wise to avoid it.")
-
- new /obj/structure/shadow_vortex(SHA.loc)
diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm
index 1f88f350c4c..05af76eb2a9 100644
--- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm
+++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm
@@ -1,5 +1,5 @@
//In here: Hatch and Ascendance
-
+var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "Noaey'gief", "Mii`mahza", "Amerziox", "Gyrg-mylin", "Kanet'pruunance", "Vigistaezian")
/mob/living/carbon/human/proc/shadowling_hatch()
set category = "Shadowling Evolution"
set name = "Hatch"
@@ -13,7 +13,7 @@
usr.verbs += /mob/living/carbon/human/proc/shadowling_hatch
return
if("Yes")
- usr.notransform = 1
+ usr.Stun(INFINITY) //This is bad but notransform won't work.
usr.visible_message("[usr]'s things suddenly slip off. They hunch over and vomit up a copious amount of purple goo which begins to shape around them!", \
"You remove any equipment which would hinder your hatching and begin regurgitating the resin which will protect you.")
@@ -39,8 +39,8 @@
"Spines pierce your back. Your claws break apart your fingers. You feel excruciating pain as your true form begins its exit.")
sleep(90)
- usr.visible_message("[usr], now no longer recognizable as human, begins clawing at the resin walls around them.", \
- "Your false skin slips away. You begin tearing at the fragile membrane protecting you.")
+ usr.visible_message("[usr], skin shifting, begins tearing at the walls around them.", \
+ "Your false skin slips away. You begin tearing at the fragile membrane protecting you.")
sleep(80)
playsound(usr.loc, 'sound/weapons/slash.ogg', 25, 1)
@@ -54,9 +54,11 @@
sleep(10)
playsound(usr.loc, 'sound/effects/ghost.ogg', 100, 1)
- usr.real_name = "Shadowling ([rand(1,1000)])"
+ var/newNameId = pick(possibleShadowlingNames)
+ possibleShadowlingNames.Remove(newNameId)
+ usr.real_name = newNameId
usr.name = usr.real_name
- usr.notransform = 0
+ usr.SetStunned(0)
usr << "YOU LIVE!!!"
for(var/obj/structure/alien/resin/wall/shadowling/W in orange(usr, 1))
@@ -102,7 +104,7 @@
usr.verbs += /mob/living/carbon/human/proc/shadowling_ascendance
return
if("Yes")
- usr.notransform = 1
+ usr.Stun(INFINITY)
usr.visible_message("[usr] rapidly bends and contorts, their eyes flaring a deep crimson!", \
"You begin unlocking the genetic vault within you and prepare yourself for the power to come.")
@@ -123,21 +125,25 @@
sleep(50)
for(var/mob/M in mob_list)
if(is_thrall(M) && !ticker.mode.shadowling_ascended)
- M.visible_message("[M] trembles minutely as their form turns to ash, black smoke pouring from their disintegrating face.", \
- "It's time! Your masters are ascending! Your last thoughts are happy as your body is drained of life.")
+ M.visible_message("[M] trembles minutely as they collapse, black smoke pouring from their disintegrating face.", \
+ "It's time! Your masters are ascending! Your last thoughts are happy as your body is drained of life.")
ticker.mode.thralls -= M.mind //To prevent message spam
M.death(0)
- M.dust()
usr << "Drawing upon your thralls, you find the strength needed to finish and rend apart the final barriers to godhood."
- sleep(40)
+ sleep(20)
+ usr << "Yes!"
+ sleep(10)
+ usr << "YES!"
+ sleep(10)
+ usr << "YE--"
+ sleep(1)
for(var/mob/living/M in orange(7, src))
M.Weaken(10)
M << "An immense pressure slams you onto the ground!"
- usr << "YOU LIVE!!!"
- world << "
A horrible wail echoes in your mind as the world plunges into blackness.
"
+ world << "\"VYSHA NERADA YEKHEZET U'RUU!!\""
world << 'sound/hallucinations/veryfar_noise.ogg'
for(var/obj/machinery/power/apc/A in world)
A.overload_lighting()
@@ -147,16 +153,14 @@
usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/hypnosis)
usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_phase_shift)
usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/glacial_blast)
- usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/vortex)
usr.mind.transfer_to(A)
A.spell_list = usr.spell_list
A.name = usr.real_name
A.languages = usr.languages
if(A.real_name)
A.real_name = usr.real_name
- usr.alpha = 0 //This is pretty bad, but is also necessary for the shuttle call to function properly
+ usr.invisibility = 60 //This is pretty bad, but is also necessary for the shuttle call to function properly
usr.flags |= GODMODE
- usr.notransform = 1
sleep(50)
if(!ticker.mode.shadowling_ascended)
if(emergency_shuttle && emergency_shuttle.can_call())
diff --git a/code/stylesheet.dm b/code/stylesheet.dm
index fac26760073..9ba50242b59 100644
--- a/code/stylesheet.dm
+++ b/code/stylesheet.dm
@@ -83,7 +83,7 @@ h1.alert, h2.alert {color: #000000;}
.kidan {color: #664205;}
.slime {color: #0077AA;}
.clown {color: #ff0000;}
-.shadowling {color: #311648;}
+.shadowling {color: #3b2769;}
.vulpkanin {color: #B97A57;}
.rough {font-family: "Trebuchet MS", cursive, sans-serif;}
.say_quote {font-family: Georgia, Verdana, sans-serif;}
@@ -94,6 +94,7 @@ h1.alert, h2.alert {color: #000000;}
.interface {color: #330033;}
.big {font-size: 3;}
+.reallybig {font-size: 4;}
.greentext {color: #00FF00; font-size: 3;}
.redtext {color: #FF0000; font-size: 3;}
diff --git a/paradise.dme b/paradise.dme
index 131d5139d79..dc1abbf3b06 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -352,6 +352,7 @@
#include "code\game\gamemodes\nuclear\pinpointer.dm"
#include "code\game\gamemodes\revolution\revolution.dm"
#include "code\game\gamemodes\revolution\rp_revolution.dm"
+#include "code\game\gamemodes\shadowling\ascendant_shadowling.dm"
#include "code\game\gamemodes\shadowling\shadowling.dm"
#include "code\game\gamemodes\shadowling\shadowling_abilities.dm"
#include "code\game\gamemodes\shadowling\shadowling_items.dm"
@@ -1389,7 +1390,6 @@
#include "code\modules\mob\living\silicon\robot\drone\drone_damage.dm"
#include "code\modules\mob\living\silicon\robot\drone\drone_items.dm"
#include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm"
-#include "code\modules\mob\living\simple_animal\ascendant_shadowling.dm"
#include "code\modules\mob\living\simple_animal\bees.dm"
#include "code\modules\mob\living\simple_animal\borer.dm"
#include "code\modules\mob\living\simple_animal\constructs.dm"