//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")
/obj/effect/proc_holder/spell/targeted/shadowling_hatch
name = "Hatch"
desc = "Casts off your disguise."
panel = "Shadowling Evolution"
charge_max = 3000
clothes_req = 0
range = -1
include_user = 1
action_icon_state = "hatch"
/obj/effect/proc_holder/spell/targeted/shadowling_hatch/cast(list/targets)
if(usr.stat || !ishuman(usr) || !usr)
return
if(!isturf(usr.loc))
usr << "You can't hatch here!"
return
for(var/mob/living/carbon/human/H in targets)
var/hatch_or_no = alert(H,"Are you sure you want to hatch? You cannot undo this!",,"Yes","No")
switch(hatch_or_no)
if("No")
H << "You decide against hatching for now."
charge_counter = charge_max
return
if("Yes")
H.Stun(INFINITY) //This is bad but notransform won't work.
H.visible_message("[H]'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.")
for(var/obj/item/I in H.contents - (H.organs | H.internal_organs)) //drops all items except organs
H.unEquip(I)
sleep(50)
var/turf/simulated/floor/F
var/turf/shadowturf = get_turf(usr)
for(F in orange(1, usr))
new /obj/structure/alien/resin/wall/shadowling(F)
for(var/obj/structure/alien/resin/wall/shadowling/R in shadowturf) //extremely hacky
qdel(R)
new /obj/structure/alien/weeds/node(shadowturf) //Dim lighting in the chrysalis -- removes itself afterwards
H.visible_message("A chrysalis forms around [H], sealing them inside.", \
"You create your chrysalis and begin to contort within.")
usr.Weaken(30)
sleep(100)
H.visible_message("The skin on [H]'s back begins to split apart. Black spines slowly emerge from the divide.", \
"Spines pierce your back. Your claws break apart your fingers. You feel excruciating pain as your true form begins its exit.")
sleep(90)
H.visible_message("[H], 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(H.loc, 'sound/weapons/slash.ogg', 25, 1)
H << "You rip and slice."
sleep(10)
playsound(H.loc, 'sound/weapons/slashmiss.ogg', 25, 1)
H << "The chrysalis falls like water before you."
sleep(10)
playsound(H.loc, 'sound/weapons/slice.ogg', 25, 1)
H << "You are free!"
sleep(10)
playsound(H.loc, 'sound/effects/ghost.ogg', 100, 1)
var/newNameId = pick(possibleShadowlingNames)
possibleShadowlingNames.Remove(newNameId)
H.real_name = newNameId
H.name = usr.real_name
H.SetStunned(0)
H << "YOU LIVE!!!"
for(var/obj/structure/alien/resin/wall/shadowling/W in orange(H, 1))
playsound(W, 'sound/effects/splat.ogg', 50, 1)
qdel(W)
for(var/obj/structure/alien/weeds/node/N in shadowturf)
qdel(N)
H.visible_message("The chrysalis explodes in a shower of purple flesh and fluid!")
H.underwear = "None"
H.undershirt = "None"
H.socks = "None"
H.faction |= "faithless"
if(!H.weakeyes)
H.weakeyes = 1
H.equip_to_slot_or_del(new /obj/item/clothing/under/shadowling(usr), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/shadowling(usr), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/space/shadowling(usr), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/head/shadowling(usr), slot_head)
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/shadowling(usr), slot_gloves)
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/shadowling(usr), slot_wear_mask)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/shadowling(usr), slot_glasses)
H.set_species("Shadowling")
sleep(10)
H << "Your powers are awoken. You may now live to your fullest extent. Remember your goal. Cooperate with your thralls and allies."
H.mind.remove_spell(/obj/effect/proc_holder/spell/targeted/shadowling_hatch)
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/glare)
H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/veil)
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadow_walk)
H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/flashfreeze)
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/collective_mind)
/obj/effect/proc_holder/spell/targeted/shadowling_ascend
name = "Ascend"
desc = "Enters your true form."
panel = "Shadowling Evolution"
charge_max = 3000
clothes_req = 0
range = -1
include_user = 1
action_icon_state = "ascend"
/obj/effect/proc_holder/spell/targeted/shadowling_ascend/cast(list/targets)
if(usr.stat || !ishuman(usr) || !usr)
return
for(var/mob/living/carbon/human/H in targets)
var/hatch_or_no = alert(H,"It is time to ascend. Are you sure about this?",,"Yes","No")
switch(hatch_or_no)
if("No")
H << "You decide against ascending for now."
charge_counter = charge_max
return
if("Yes")
H.notransform = 1
H.visible_message("[H] gently rises into the air, red light glowing in its eyes.", \
"You rise into the air and get ready for your transformation.")
sleep(50)
H.visible_message("[H]'s skin begins to crack and harden.", \
"Your flesh begins creating a shield around yourself.")
sleep(100)
H.visible_message("The small horns on [H]'s head slowly grow and elongate.", \
"Your body continues to mutate. Your telepathic abilities grow.") //y-your horns are so big, senpai...!~
sleep(90)
H.visible_message("[H]'s body begins to violently stretch and contort.", \
"You begin to rend apart the final barries to godhood.")
sleep(40)
H << "Yes!"
sleep(10)
H << "YES!!"
sleep(10)
H << "YE--"
sleep(1)
for(var/mob/living/M in orange(7, H))
M.Weaken(10)
M << "An immense pressure slams you onto the ground!"
world << "\"VYSHA NERADA YEKHEZET U'RUU!!\""
world << 'sound/hallucinations/veryfar_noise.ogg'
for(var/obj/machinery/power/apc/A in range(200, H))
A.overload_lighting()
var/mob/A = new /mob/living/simple_animal/ascendant_shadowling(H.loc)
for(var/obj/effect/proc_holder/spell/S in H.mind.spell_list)
if(S == src) continue
H.mind.remove_spell(S)
H.mind.transfer_to(A)
A.name = H.real_name
A.languages = H.languages
A.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/annihilate)
A.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/hypnosis)
A.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadowling_phase_shift)
A.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/ascendant_storm)
A.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadowlingAscendantTransmit)
if(A.real_name)
A.real_name = H.real_name
H.invisibility = 60 //This is pretty bad, but is also necessary for the shuttle call to function properly
H.flags |= GODMODE
H.loc = A
sleep(50)
if(!ticker.mode.shadowling_ascended)
if(emergency_shuttle && emergency_shuttle.can_call())
emergency_shuttle.call_evac()
emergency_shuttle.launch_time = 0 // Cannot recall
ticker.mode.shadowling_ascended = 1
A.mind.remove_spell(src)
qdel(H)