Merge pull request #1603 from TheDZD/shadowling

Shadowling Updates
This commit is contained in:
Fox-McCloud
2015-08-05 20:26:25 -04:00
16 changed files with 552 additions and 396 deletions
+6 -13
View File
@@ -971,14 +971,11 @@ datum/mind
current.mind.spell_list.Cut()
message_admins("[key_name_admin(usr)] has de-shadowling'ed [current].")
log_admin("[key_name(usr)] has de-shadowling'ed [current].")
current.verbs -= /mob/living/carbon/human/proc/shadowling_hatch
current.verbs -= /mob/living/carbon/human/proc/shadowling_ascendance
remove_spell(/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hatch)
remove_spell(/obj/effect/proc_holder/spell/wizard/targeted/shadowling_ascend)
current.remove_language("Shadowling Hivemind")
else if(src in ticker.mode.shadowling_thralls)
ticker.mode.shadowling_thralls -= src
special_role = null
current.remove_language("Shadowling Hivemind")
current << "<span class='userdanger'>You have been brainwashed! You are no longer a thrall!</span>"
ticker.mode.remove_thrall(src,0)
message_admins("[key_name_admin(usr)] has de-thrall'ed [current].")
log_admin("[key_name(usr)] has de-thrall'ed [current].")
if("shadowling")
@@ -987,9 +984,9 @@ datum/mind
return
ticker.mode.shadows += src
special_role = "Shadowling"
current << "<span class='deadsay'><b>You notice a brightening around you. No, it isn't that. The shadows grow, darken, swirl. The darkness has a new welcome for you, and you realize with a \
start that you can't be human. No, you are a shadowling, a harbringer of the shadows! Your alien abilities have been unlocked from within, and you may both commune with your allies and use \
a chrysalis to reveal your true form. You are to ascend at all costs.</b></span>"
current << "<span class='shadowling'><b>Something stirs deep in your mind. A red light floods your vision, and slowly you remember. Though your human disguise has served you well, the \
time is nigh to cast it off and enter your true form. You have disguised yourself amongst the humans, but you are not one of them. You are a shadowling, and you are to ascend at all costs.\
</b></span>"
ticker.mode.finalize_shadowling(src)
ticker.mode.update_shadow_icons_added(src)
if("thrall")
@@ -997,10 +994,6 @@ datum/mind
usr << "<span class='warning'>This only works on humans!</span>"
return
ticker.mode.add_thrall(src)
special_role = "Shadowling Thrall"
current << "<span class='deadsay'>All at once it becomes clear to you. Where others see darkness, you see an ally. You realize that the shadows are not dead and dark as one would think, but \
living, and breathing, and <b>eating</b>. Their children, the Shadowlings, are to be obeyed and protected at all costs.</span>"
current << "<span class='danger'>You may use the Hivemind Commune ability to communicate with your fellow enlightened ones.</span>"
message_admins("[key_name_admin(usr)] has thrall'ed [current].")
log_admin("[key_name(usr)] has thrall'ed [current].")
@@ -1,9 +1,10 @@
/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"
icon_living = "shadowling_ascended"
speak = list("Azima'dox", "Mahz'kavek", "N'ildzak", "Kaz'vadosh")
speak_emote = list("telepathically thunders", "telepathically booms")
force_threshold = INFINITY //Can't die by normal means
health = 100000
@@ -13,21 +14,29 @@
see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
universal_speak = 1
response_help = "stares at"
response_disarm = "flails at"
response_harm = "flails at"
harm_intent_damage = 0
melee_damage_lower = 35
melee_damage_upper = 35
attacktext = "claws at"
melee_damage_lower = 60 //Was 35, buffed
melee_damage_upper = 60
attacktext = "rends"
attack_sound = 'sound/weapons/slash.ogg'
minbodytemp = 0
maxbodytemp = INFINITY
environment_smash = 2
environment_smash = 3
faction = list("faithless")
/mob/living/simple_animal/ascendant_shadowling/Process_Spacemove(var/movement_dir = 0)
return 1 //copypasta from carp code
/mob/living/simple_animal/ascendant_shadowling/ex_act(severity)
return //You think an ascendant can be hurt by bombs? HA
/mob/living/simple_animal/ascendant_shadowling/singularity_act()
return 0 //Well hi, fellow god! How are you today?
+44 -10
View File
@@ -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)
@@ -85,7 +86,7 @@ Made by Xhuis
if(!possible_shadowlings.len)
return 0
var/shadowlings = 2 //How many shadowlings there are; hardcoded to 2
var/shadowlings = max(2, round(num_players()/10)) //How many shadowlings there are; hardcoded to 2
while(shadowlings)
var/datum/mind/shadow = pick(possible_shadowlings)
@@ -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 += "<b>Objective #1</b>: [objective_explanation]"
shadow_mind.current << "<b>Objective #1</b>: [objective_explanation]<br>"
@@ -132,8 +133,8 @@ Made by Xhuis
/datum/game_mode/proc/finalize_shadowling(var/datum/mind/shadow_mind)
var/mob/living/carbon/human/S = shadow_mind.current
shadow_mind.current.verbs += /mob/living/carbon/human/proc/shadowling_hatch
S.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/enthrall)
shadow_mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_hatch)
shadow_mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/enthrall)
spawn(0)
shadow_mind.current.add_language("Shadowling Hivemind")
update_shadow_icons_added(shadow_mind)
@@ -143,20 +144,53 @@ Made by Xhuis
shadow_mind.current.hud_updateflag |= (1 << SPECIALROLE_HUD)
/datum/game_mode/proc/add_thrall(datum/mind/new_thrall_mind)
if (!istype(new_thrall_mind))
if(!istype(new_thrall_mind))
return 0
if(!(new_thrall_mind in shadowling_thralls))
shadowling_thralls += new_thrall_mind
new_thrall_mind.special_role = "shadowling thrall"
update_shadow_icons_added(new_thrall_mind)
new_thrall_mind.current.attack_log += "\[[time_stamp()]\] <span class='danger'>Became a thrall</span>"
new_thrall_mind.memory += "<b>The Shadowlings' Objectives:</b> 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 << "<b>The objectives of your shadowlings:</b>: 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.add_language("Shadowling Hivemind")
new_thrall_mind.current.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/lesser_glare)
new_thrall_mind.current.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/lesser_shadow_walk)
//new_thrall_mind.current.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/thrall_vision) //Uncomment when vision code is unfucked.
new_thrall_mind.current << "<span class='shadowling'><b>You see the truth. Reality has been torn away and you realize what a fool you've been.</b></span>"
new_thrall_mind.current << "<span class='shadowling'><b>The shadowlings are your masters.</b> Serve them above all else and ensure they complete their goals.</span>"
new_thrall_mind.current << "<span class='shadowling'>You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls.</span>"
new_thrall_mind.current << "<span class='shadowling'>Your body has been irreversibly altered. The attentive can see this - you may conceal it by wearing a mask.</span>"
new_thrall_mind.current << "<span class='shadowling'>Though not nearly as powerful as your masters, you possess some weak powers. These can be found in the Thrall Abilities tab.</span>"
new_thrall_mind.current << "<span class='shadowling'>You may communicate with your allies by speaking in the Shadowling Hivemind (:8).</span>"
new_thrall_mind.current.hud_updateflag |= (1 << SPECIALROLE_HUD)
return 1
/datum/game_mode/proc/remove_thrall(datum/mind/thrall_mind, var/kill = 0)
if(!istype(thrall_mind) || !(thrall_mind in thralls) || !isliving(thrall_mind.current))
return 0 //If there is no mind, the mind isn't a thrall, or the mind's mob isn't alive, return
thralls.Remove(thrall_mind)
thrall_mind.current.attack_log += "\[[time_stamp()]\] <span class='danger'>Dethralled</span>"
thrall_mind.special_role = null
update_shadow_icons_removed(thrall_mind)
thrall_mind.remove_spell(/obj/effect/proc_holder/spell/wizard/targeted/lesser_glare)
thrall_mind.remove_spell(/obj/effect/proc_holder/spell/wizard/targeted/lesser_shadow_walk)
//thrall_mind.remove_spell(/obj/effect/proc_holder/spell/targeted/thrall_vision) //uncomment when vision code is unfucked.
thrall_mind.current.remove_language("Shadowling Hivemind")
if(kill && ishuman(thrall_mind.current)) //If dethrallization surgery fails, kill the mob as well as dethralling them
var/mob/living/carbon/human/H = thrall_mind.current
H.visible_message("<span class='warning'>[H] jerks violently and falls still.</span>", \
"<span class='userdanger'>A piercing white light floods your mind, banishing your memories as a thrall and--</span>")
H.death()
return 1
var/mob/living/M = thrall_mind.current
if(issilicon(M))
M.audible_message("<span class='notice'>[M] lets out a short blip.</span>", \
"<span class='userdanger'>You have been turned into a robot! You are no longer a thrall! Though you try, you cannot remember anything about your servitude...</span>")
else
M.visible_message("<span class='big'>[M] looks like their mind is their own again!</span>", \
"<span class='userdanger'>A piercing white light floods your eyes. Your mind is your own again! Though you try, you cannot remember anything about the shadowlings or your time \
under their command...</span>")
return 1
/*
@@ -192,7 +226,7 @@ Made by Xhuis
else if(shadowling_dead && !check_shadow_victory()) //If the shadowlings have ascended, they can not lose the round
world << "<span class='redtext'><b>The shadowlings have been killed by the crew!</b></span>"
else if(!check_shadow_victory() && emergency_shuttle.returned())
world << "<span class='redtext'><b>The crew has escaped the station before the shadowlings could ascend!</b></span>"
world << "<span class='redtext'><b>The crew escaped the station before the shadowlings could ascend!</b></span>"
..()
return 1
@@ -4,6 +4,7 @@
panel = "Shadowling Abilities"
charge_max = 300
clothes_req = 0
action_icon_state = "glare"
/obj/effect/proc_holder/spell/wizard/targeted/glare/cast(list/targets)
for(var/mob/living/carbon/human/target in targets)
@@ -18,72 +19,105 @@
charge_counter = charge_max
return
var/mob/living/carbon/human/M = target
usr.visible_message("<span class='warning'><b>[usr]'s eyes flash a blinding red!</b></span>")
target.visible_message("<span class='danger'>[target] freezes in place, their eyes glazing over...</span>")
if(in_range(target, usr))
target << "<span class='userdanger'>Your gaze is forcibly drawn into [usr]'s eyes, and you are mesmerized by their heavenly beauty...</span>"
else //Only alludes to the shadowling if the target is close by
target << "<span class='userdanger'>Red lights suddenly dance in your vision, and you are mesmerized by the heavenly lights...</span>"
target.Stun(10)
M.silent += 10
/obj/effect/proc_holder/spell/wizard/targeted/lesser_glare
name = "Lesser Glare"
desc = "Stuns and mutes a target for a short duration."
panel = "Thrall Abilities"
charge_max = 450
clothes_req = 0
action_icon_state = "glare"
/obj/effect/proc_holder/spell/wizard/targeted/lesser_glare/cast(list/targets)
for(var/mob/living/carbon/human/target in targets)
if(!ishuman(target) || !target)
charge_counter = charge_max
return
if(target.stat)
charge_counter = charge_max
return
if(is_shadow_or_thrall(target))
usr << "<span class='danger'>You don't see why you would want to paralyze an ally.</span>"
charge_counter = charge_max
return
var/mob/living/carbon/human/M = target
usr.visible_message("<span class='warning'><b>[usr]'s eyes flash a blinding red!</b></span>")
target.visible_message("<span class='danger'>[target] freezes in place, their eyes glazing over...</span>")
if(in_range(target, usr))
target << "<span class='userdanger'>Your gaze is forcibly drawn into [usr]'s eyes, and you are mesmerized by the heavenly lights...</span>"
else //Only alludes to the shadowling if the target is close by
target << "<span class='userdanger'>Red lights suddenly dance in your vision, and you are mesmerized by the heavenly lights...</span>"
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.
else
target << "<span class='userdanger'>Red lights suddenly dance in your vision, and you are mesmerized by their heavenly beauty...</span>"
target.Stun(3) //Roughly 30% as long as the normal one
M.silent += 3
/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)
action_icon_state = "veil"
/obj/effect/proc_holder/spell/wizard/aoe_turf/veil/cast(list/targets)
usr << "<span class='deadsay'>You silently disable all nearby lights.</span>"
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("<span class='danger'>[F] goes slightly dim for a moment.</span>")
/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("<span class='danger'>[I] dims slightly before scattering the shadows around it.</span>")
return
F.on = 0
F.visible_message("<span class='danger'>[F] gutters and falls dark.</span>")
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("<span class='danger'>[R]'s light fades and turns off.</span>")
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 << "<span class='shadowling'>You silently disable all nearby lights.</span>"
for(var/obj/effect/glowshroom/G in orange(2, usr)) //Why the fuck was this in the loop below?
G.visible_message("<span class='warning'>\The [G] withers away!</span>")
qdel(G)
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("<span class='danger'>[L] flickers and falls dark.</span>")
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("<span class='warning'>\The [G] withers away!</span>")
qdel(G)
for(var/obj/machinery/computer/C in T.contents)
C.set_light(0)
C.visible_message("<span class='danger'>[C] grows dim, its screen barely readable.</span>")
for(var/mob/living/H in T.contents)
extinguishMob(H)
for(var/mob/living/silicon/robot/borg in T.contents)
borg.update_headlamp(1, charge_max)
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("<span class='danger'>[F] goes slightly dim for a moment.</span>")
return
F.on = 0
F.visible_message("<span class='danger'>[F] gutters and falls dark.</span>")
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("<span class='danger'>[R]'s light fades and turns off.</span>")
H.set_light(H.luminosity - R.brightness_on)
R.set_light(0)
if(H != usr)
H << "<span class='boldannounce'>You feel a chill and are plunged into darkness.</span>"
H.luminosity = 0 //This might not be required, but it just acts as another failsafe.
borg.update_headlamp(1, charge_max)
/obj/effect/proc_holder/spell/wizard/targeted/shadow_walk
@@ -94,11 +128,12 @@
clothes_req = 0
range = -1
include_user = 1
action_icon_state = "shadow_walk"
/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("<span class='danger'>[user] vanishes into thin air!</span>", "<span class='deadsay'>You enter the space between worlds as a passageway.</span>")
user.visible_message("<span class='warning'>[user] vanishes in a puff of black mist!</span>", "<span class='shadowling'>You enter the space between worlds as a passageway.</span>")
user.SetStunned(0)
user.SetWeakened(0)
user.incorporeal_move = 1
@@ -106,38 +141,89 @@
if(user.buckled)
user.buckled.unbuckle()
sleep(40) //4 seconds
user.visible_message("<span class='danger'>[user] appears out of nowhere!</span>", "<span class='deadsay'>The pressure becomes too much and you vacate the interdimensional darkness.</span>")
user.visible_message("<span class='warning'>[user] suddenly manifests!</span>", "<span class='shadowling'>The pressure becomes too much and you vacate the interdimensional darkness.</span>")
user.incorporeal_move = 0
user.alpha = 255
/obj/effect/proc_holder/spell/wizard/targeted/lesser_shadow_walk
name = "Guise"
desc = "Wraps your form in shadows, making you harder to see."
panel = "Thrall Abilities"
charge_max = 1200
clothes_req = 0
range = -1
include_user = 1
action_icon_state = "shadow_walk"
/obj/effect/proc_holder/spell/wizard/targeted/lesser_shadow_walk/cast(list/targets)
for(var/mob/living/user in targets)
var/lumcount = 0
var/turf/T = get_turf(user)
lumcount = T.get_lumcount()*10
if(lumcount > 5)
user << "<span class='warning'>It's too bright to do that!</span>"
charge_counter = charge_max
return
user.visible_message("<span class='warning'>[user] suddenly fades away!</span>", "<span class='shadowling'>You veil yourself in darkness, making you harder to see.</span>")
user.alpha = 20
sleep(40)
user.visible_message("<span class='warning'>[user] appears from nowhere!</span>", "<span class='shadowling'>Your shadowy guise slips away.</span>")
user.alpha = initial(user.alpha)
/*
/obj/effect/proc_holder/spell/wizard/targeted/thrall_vision //Uncomment this if we ever update our vision code to not be absolute garbage.
name = "Darksight"
desc = "Gives you night vision."
panel = "Thrall Abilities"
charge_max = 0
range = -1
include_user = 1
clothes_req = 0
var/active = 0
/obj/effect/proc_holder/spell/wizard/targeted/thrall_vision/cast(list/targets)
for(var/mob/living/user in targets)
if(!istype(user) || !ishuman(user))
return
var/mob/living/carbon/human/H = user
active = !active
if(active)
user << "<span class='notice'>You shift the nerves in your eyes, allowing you to see in the dark.</span>"
H.see_in_dark = 8
H.dna.species.invis_sight = SEE_INVISIBLE_MINIMUM
else
user << "<span class='notice'>You return your vision to normal.</span>"
H.see_in_dark = 0
H.dna.species.invis_sight = initial(H.dna.species.invis_sight)
*/
/obj/effect/proc_holder/spell/wizard/aoe_turf/flashfreeze
name = "Flash Freeze"
name = "Icy Veins"
desc = "Instantly freezes the blood of nearby people, stunning them and causing burn damage."
panel = "Shadowling Abilities"
range = 5
charge_max = 1200
clothes_req = 0
action_icon_state = "icy_veins"
/obj/effect/proc_holder/spell/wizard/aoe_turf/flashfreeze/cast(list/targets)
usr << "<span class='deadsay'>You freeze the nearby air.</span>"
usr << "<span class='shadowling'>You freeze the nearby air.</span>"
playsound(usr.loc, 'sound/effects/ghost2.ogg', 50, 1)
for(var/turf/T in targets)
for(var/mob/living/carbon/human/target in T.contents)
if(is_shadow_or_thrall(target))
if(target == usr) //No message for the user, of course
for(var/mob/living/carbon/M in T.contents)
if(is_shadow_or_thrall(M))
if(M == usr) //No message for the user, of course
continue
else
target << "<span class='danger'>You feel a blast of paralyzingly cold air wrap around you and flow past, but you are unaffected!</span>"
M << "<span class='danger'>You feel a blast of paralyzingly cold air wrap around you and flow past, but you are unaffected!</span>"
continue
target << "<span class='userdanger'>You are hit by a blast of paralyzingly cold air and feel goosebumps break out across your body!</span>"
target.Stun(2)
if(target.bodytemperature)
target.bodytemperature -= 200 //Extreme amount of initial cold
if(target.reagents)
target.reagents.add_reagent("frostoil", 15) //Half of a cryosting
M << "<span class='userdanger'>You are hit by a blast of paralyzingly cold air and feel goosebumps break out across your body!</span>"
M.Stun(2)
if(M.bodytemperature)
M.bodytemperature -= 200 //Extreme amount of initial cold
if(M.reagents)
M.reagents.add_reagent("frostoil", 15) //Half of a cryosting
@@ -146,18 +232,25 @@
name = "Enthrall"
desc = "Allows you to enslave a conscious, non-braindead, non-catatonic human to your will. This takes some time to cast."
panel = "Shadowling Abilities"
charge_max = 450
charge_max = 0
clothes_req = 0
range = 1 //Adjacent to user
var/enthralling = 0
action_icon_state = "enthrall"
/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 << "<span class='warning'>With your telepathic abilities suppressed, your human form will not allow you to enthrall any others. Hatch first.</span>"
charge_counter = charge_max
return
for(var/mob/living/carbon/human/target in targets)
if(!in_range(usr, target))
usr << "<span class='warning'>You need to be closer to enthrall [target].</span>"
charge_counter = charge_max
return
if(!target.ckey)
if(!target.key || !target.mind)
usr << "<span class='warning'>The target has no mind.</span>"
charge_counter = charge_max
return
@@ -174,18 +267,18 @@
charge_counter = charge_max
return
if(enthralling)
usr << "<span class='danger'>You are already enthralling!</span>"
usr << "<span class='warning'>You are already enthralling!</span>"
charge_counter = charge_max
return
enthralling = 1
usr << "<span class='danger'>This target is valid. You begin the enthralling.</span>"
target << "<span class='userdanger'>[usr] focuses in concentration. Your head begins to ache.</span>"
target << "<span class='userdanger'>[usr] stares at you. You feel your head begin to pulse.</span>"
for(var/progress = 0, progress <= 3, progress++)
switch(progress)
if(1)
usr << "<span class='notice'>You begin allocating energy for the enthralling.</span>"
usr.visible_message("<span class='danger'>[usr]'s eyes begin to throb a piercing red.</span>")
usr.visible_message("<span class='warning'>[usr]'s eyes begin to throb a piercing red.</span>")
if(2)
usr << "<span class='notice'>You begin the enthralling of [target].</span>"
usr.visible_message("<span class='danger'>[usr] leans over [target], their eyes glowing a deep crimson, and stares into their face.</span>")
@@ -194,34 +287,32 @@
sleep(20)
if(isloyal(target))
usr << "<span class='notice'>They are enslaved by Nanotrasen. You begin to shut down the nanobot implant - this will take some time.</span>"
usr.visible_message("<span class='danger'>[usr] halts for a moment, then begins passing its hand over [target]'s body.</span>")
target << "<span class='danger'>You feel your loyalties begin to weaken!</span>"
usr.visible_message("<span class='boldannounce'>[usr] halts for a moment, then begins passing its hand over [target]'s body.</span>")
target << "<span class='boldannounce'>You feel your loyalties begin to weaken!</span>"
sleep(150) //15 seconds - not spawn() so the enthralling takes longer
usr << "<span class='notice'>The nanobots composing the loyalty implant have been rendered inert. Now to continue.</span>"
usr.visible_message("<span class='danger'>[usr] halts thier hand and resumes staring into [target]'s face.</span>")
for(var/obj/item/weapon/implant/loyalty/L in target)
if(L && L.implanted)
qdel(L)
target << "<span class='danger'>Your unwavering loyalty to Nanotrasen falters, dims, dies.</span>"
target << "<span class='boldannounce'>Your unwavering loyalty to Nanotrasen falters, dims, dies.</span>"
if(3)
usr << "<span class='notice'>You begin rearranging [target]'s memories.</span>"
usr.visible_message("<span class='danger'>[usr]'s eyes flare brightly, and a horrible grin begins to spread across [target]'s face...</span>")
target << "<span class='danger'>Your head cries out. The veil of reality begins to crumple and something evil bleeds through.</span>" //Ow the edge
usr.visible_message("<span class='danger'>[usr]'s eyes flare brightly.</span>")
target << "<span class='boldannounce'>Your head cries out. The veil of reality begins to crumple and something evil bleeds through.</span>" //Ow the edge
if(!do_mob(usr, target, 100)) //around 30 seconds total for enthralling, 45 for someone with a loyalty implant
usr << "<span class='danger'>The enthralling has been interrupted - your target's mind returns to its previous state.</span>"
target << "<span class='warning'>Your thoughts become coherent once more. Already you can barely remember what's happened to you.</span>"
target << "<span class='userdanger'>A spike of pain drives into your head, wiping your memory. You aren't sure what's happened, but you feel a faint sense of revulsion.</span>"
enthralling = 0
return
enthralling = 0
usr << "<span class='notice'>You have enthralled <b>[target]</b>!</span>"
target << "<span class='deadsay'><b>You see the Truth. Reality has been torn away and you realize what a fool you've been.</b></span>"
target << "<span class='deadsay'><b>The shadowlings are your masters.</b> Serve them above all else and ensure they complete their goals.</span>"
target << "<span class='deadsay'>You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls.</span>"
target << "<span class='deadsay'>You can communicate with the other enlightened ones by using the Shadowling Hivemind (:8) ability.</span>"
target.adjustOxyLoss(-200) //In case the shadowling was choking them out
usr << "<span class='shadowling'>You have enthralled <b>[target]</b>!</span>"
target.visible_message("<span class='big'>[target] looks to have experienced a revelation!</span>", \
"<span class='warning'>False faces all d<b>ark not real not real not--</b></span>")
target.setOxyLoss(0) //In case the shadowling was choking them out
ticker.mode.add_thrall(target.mind)
target.mind.special_role = "Shadowling Thrall"
target.mind.special_role = "shadowling thrall"
/obj/effect/proc_holder/spell/wizard/targeted/collective_mind
name = "Collective Hivemind"
@@ -233,8 +324,9 @@
include_user = 1
var/blind_smoke_acquired
var/screech_acquired
var/drain_thrall_acquired
var/thrall_swap_acquired
var/drainLifeAcquired
var/reviveThrallAcquired
action_icon_state = "collective_mind"
/obj/effect/proc_holder/spell/wizard/targeted/collective_mind/cast(list/targets)
for(var/mob/living/user in targets)
@@ -247,7 +339,7 @@
for(M in living_mob_list)
if(is_thrall(M))
thralls++
M << "<span class='deadsay'>You feel hooks sink into your mind and pull.</span>"
M << "<span class='shadowling'>You feel hooks sink into your mind and pull.</span>"
if(!do_after(user, 30))
user << "<span class='warning'>Your concentration has been broken. The mental hooks you have sent out now retract into your mind.</span>"
@@ -259,21 +351,21 @@
</i></span>"
user.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/blindness_smoke)
if(thralls >= 5 && !drain_thrall_acquired)
drain_thrall_acquired = 1
user << "<span class='shadowling'><i>The power of your thralls has granted you the <b>Drain Thrall</b> ability. You can now drain nearby thralls to heal yourself.</i></span>"
user.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/drain_thralls)
if(thralls >= 5 && !drainLifeAcquired)
drainLifeAcquired = 1
user << "<span class='shadowling'><i>The power of your thralls has granted you the <b>Drain Life</b> ability. You can now drain the health of nearby humans to heal yourself.</i></span>"
user.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/drainLife)
if(thralls >= 7 && !screech_acquired)
screech_acquired = 1
user << "<span class='shadowling'><i>The power of your thralls has granted you the <b>Sonic Screech</b> ability. This ability will shatter nearby windows and deafen enemies.</span>"
user << "<span class='shadowling'><i>The power of your thralls has granted you the <b>Sonic Screech</b> ability. This ability will shatter nearby windows and deafen enemies, plus stunning silicon lifeforms.</span>"
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 << "<span class='shadowling'><i>The power of your thralls has granted you the <b>Spatial Relocation</b> ability. This will, allow you to instantly swap places with one of your thralls in \
addition to shattering nearby lights.</i></span>"
user.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/spatial_relocation)
if(thralls >= 9 && !reviveThrallAcquired)
reviveThrallAcquired = 1
user << "<span class='shadowling'><i>The power of your thralls has granted you the <b>Black Recuperation</b> ability. This will, after a short time, bring a dead thrall completely back to life \
with no bodily defects.</i></span>"
user.mind.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/reviveThrall
if(thralls < victory_threshold)
user << "<span class='shadowling'>You do not have the power to ascend. You require [victory_threshold] thralls, but only [thralls] living thralls are present.</span>"
@@ -283,12 +375,16 @@
usr << "<span class='shadowling'><b>You may find Ascendance in the Shadowling Evolution tab.</b></span>"
for(M in living_mob_list)
if(is_shadow(M))
M.mind.current.spell_list -= /obj/effect/proc_holder/spell/wizard/targeted/collective_mind
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
var/obj/effect/proc_holder/spell/wizard/targeted/collective_mind/CM
if(CM in M.mind.spell_list)
M.mind.spell_list -= CM
qdel(CM)
M.mind.remove_spell(/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hatch)
M.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_ascend)
if(M == usr)
return
M << "<span class='shadowling'><b>[user.real_name] has coalesced the strength of the thralls. You can draw upon it at any time to ascend.</span>" //Tells all the other shadowlings
M << "<span class='shadowling'><i>You project this power to the rest of the shadowlings.</i></span>"
else
M << "<span class='shadowling'><b>[user.real_name] has coalesced the strength of the thralls. You can draw upon it at any time to ascend. (Shadowling Evolution Tab)</b></span>" //Tells all the other shadowlings
@@ -300,6 +396,7 @@
clothes_req = 0
range = -1
include_user = 1
action_icon_state = "black_smoke"
/obj/effect/proc_holder/spell/wizard/targeted/blindness_smoke/cast(list/targets) //Extremely hacky
for(var/mob/living/user in targets)
@@ -319,7 +416,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)
@@ -331,8 +428,8 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
M << "<span class='warning'><b>You breathe in the black smoke, and your eyes burn horribly!</b></span>"
M.eye_blind = 5
if(prob(25))
M.visible_message("<b>[M]</b> screams and claws at their eyes!")
M.Stun(2)
M.visible_message("<b>[M]</b> claws at their eyes!")
M.Stun(3)
else
M << "<span class='notice'><b>You breathe in the black smoke, and you feel revitalized!</b></span>"
M.heal_organ_damage(2,2)
@@ -350,6 +447,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
range = 7
charge_max = 300
clothes_req = 0
action_icon_state = "screech"
/obj/effect/proc_holder/spell/wizard/aoe_turf/unearthly_screech/cast(list/targets)
usr.audible_message("<span class='warning'><b>[usr] lets out a horrible scream!</b></span>")
@@ -370,7 +468,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 << "<span class='warning'><b>ERROR $!(@ ERROR )#^! SENSOR INTERFERENCE DETECTED</b></span>"
S << "<span class='warning'><b>ERROR $!(@ ERROR )#^! SENSORY OVERLOAD \[$(!@#</b></span>"
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
@@ -378,82 +476,101 @@ 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
action_icon_state = "drain_life"
/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 << "<span class='warning'>You feel a curious draining sensation and a wave of exhaustion washes over you.</span>"
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 << "<span class='deadsay'>You draw the life from [M] to heal your wounds.</span>"
if(thralls_drained)
var/mob/living/carbon/U = usr
U.heal_organ_damage(25, 25)
else
if(M == src)
continue
targetsDrained++
nearbyTargets.Add(M)
if(!targetsDrained)
charge_counter = charge_max
usr << "<span class='warning'>There were no nearby thralls for you to drain.</span>"
usr << "<span class='warning'>There were no nearby humans for you to drain.</span>"
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 << "<span class='boldannounce'>You feel a wave of exhaustion and a curious draining sensation directed towards [usr]!</span>"
usr << "<span class='shadowling'>You draw life from those around you to heal your wounds.</span>"
/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()
action_icon_state = "revive_thrall"
/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("<span class='danger'>[thrall_to_swap] suddenly vanishes in a puff of black smoke!</span>")
thrall_to_swap << "<span class='warning'><b>You feel a brief sense of nausea before finding yourself in an entirely new place!</b></span>"
usr.visible_message("<span class='danger'>[usr] suddenly goes transparent and vanishes!</span>")
usr << "<span class='deadsay'>You experience vertigo as you swap your location with [thrall_to_swap]'s.</span>"
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 << "<span class='warning'>[thrallToRevive] is not a thrall.</span>"
charge_counter = charge_max
return
if(thrallToRevive.stat != DEAD)
usr << "<span class='warning'>[thrallToRevive] is not dead.</span>"
charge_counter = charge_max
return
usr.visible_message("<span class='danger'>[usr] kneels over [thrallToRevive], placing their hands on \his chest.</span>", \
"<span class='shadowling'>You crouch over the body of your thrall and begin gathering energy...</span>")
var/mob/dead/observer/ghost = thrallToRevive.get_ghost()
if(ghost)
ghost << "<span class='ghostalert'>Your masters are resuscitating you! Return to your corpse if you wish to be brought to life.</span> (Verbs -> Ghost -> Re-enter corpse)"
ghost << 'sound/effects/genetics.ogg'
if(!do_mob(usr, thrallToRevive, 30))
usr << "<span class='warning'>Your concentration snaps. The flow of energy ebbs.</span>"
charge_counter= charge_max
return
usr << "<span class='shadowling'><b><i>You release a massive surge of power into [thrallToRevive]!</b></i></span>"
usr.visible_message("<span class='boldannounce'><i>Red lightning surges from [usr]'s hands into [thrallToRevive]'s chest!</i></span>")
playsound(thrallToRevive, 'sound/weapons/Egloves.ogg', 50, 1)
playsound(thrallToRevive, 'sound/machines/defib_zap.ogg', 50, 1)
sleep(10)
thrallToRevive.revive()
thrallToRevive.visible_message("<span class='boldannounce'>[thrallToRevive] draws in a huge breath, blinding violet light shining from their eyes.</span>", \
"<span class='shadowling'><b><i>You have returned. One of your masters has brought you from the darkness beyond.</b></i></span>")
thrallToRevive.Weaken(4)
thrallToRevive.emote("gasp")
playsound(thrallToRevive, "bodyfall", 50, 1)
// ASCENDANT ABILITIES BEYOND THIS POINT //
/obj/effect/proc_holder/spell/wizard/targeted/annihilate
name = "Annihilate"
desc = "Gibs a human after a short time."
desc = "Gibs someone instantly."
panel = "Ascendant"
range = 7
charge_max = 300
charge_max = 0
clothes_req = 0
action_icon_state = "annihilate"
/obj/effect/proc_holder/spell/wizard/targeted/annihilate/cast(list/targets)
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
@@ -462,18 +579,15 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
charge_counter = charge_max
return
for(var/mob/living/carbon/human/boom in targets)
for(var/mob/living/boom in targets)
if(is_shadow_or_thrall(boom))
usr << "<span class='warning'>Making an ally explode seems unwise.<span>"
charge_counter = charge_max
return
usr.visible_message("<span class='danger'>[usr]'s eyes flare as they gesture at [boom]!</span>", \
usr.visible_message("<span class='danger'>[usr]'s markings flare as they gesture at [boom]!</span>", \
"<span class='shadowling'>You direct a lance of telekinetic energy at [boom].</span>")
boom << "<span class='userdanger'><font size=3>You feel an immense pressure building all across your body!</span></font>"
boom.Stun(10)
boom.audible_message("<b>[boom]</b> screams!")
sleep(20)
playsound(boom, 'sound/effects/splat.ogg', 100, 1)
playsound(usr, 'sound/effects/supermatter.ogg', 100, 1)
sleep(4)
boom.visible_message("<span class='userdanger'>[boom] explodes!</span>")
boom.gib()
@@ -484,8 +598,9 @@ 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
action_icon_state = "enthrall"
/obj/effect/proc_holder/spell/wizard/targeted/hypnosis/cast(list/targets)
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
@@ -499,7 +614,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
usr << "<span class='warning'>You cannot enthrall an ally.<span>"
charge_counter = charge_max
return
if(!target.ckey)
if(!target.ckey || !target.mind)
usr << "<span class='warning'>The target has no mind.</span>"
charge_counter = charge_max
return
@@ -514,12 +629,8 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
usr << "<span class='shadowling'>You instantly rearrange <b>[target]</b>'s memories, hyptonitizing them into a thrall.</span>"
target << "<span class='userdanger'><font size=3>An agonizing spike of pain drives into your mind, and--</font></span>"
target << "<span class='deadsay'><b>And you see the Truth. Reality has been torn away and you realize what a fool you've been.</b></span>"
target << "<span class='deadsay'><b>The shadowlings are your masters.</b> Serve them above all else and ensure they complete their goals.</span>"
target << "<span class='deadsay'>You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls.</span>"
target << "<span class='deadsay'>You can communicate with the other enlightened ones by using the Shadowling Hivemind (:8).</span>"
ticker.mode.add_thrall(target.mind)
target.mind.special_role = "Thrall"
target.mind.special_role = "shadowling thrall"
target.add_language("Shadowling Hivemind")
@@ -532,6 +643,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
include_user = 1
charge_max = 15
clothes_req = 0
action_icon_state = "shadow_walk"
/obj/effect/proc_holder/spell/wizard/targeted/shadowling_phase_shift/cast(list/targets)
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
@@ -550,56 +662,47 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
/obj/effect/proc_holder/spell/wizard/aoe_turf/glacial_blast
name = "Glacial Blast"
desc = "Extremely empowered version of Flash Freeze."
/obj/effect/proc_holder/spell/wizard/aoe_turf/ascendant_storm
name = "Lightning Storm"
desc = "Shocks everyone nearby."
panel = "Ascendant"
range = 5
charge_max = 600
range = 6
charge_max = 100
clothes_req = 0
action_icon_state = "lightning_storm"
/obj/effect/proc_holder/spell/wizard/aoe_turf/glacial_blast/cast(list/targets)
/obj/effect/proc_holder/spell/wizard/aoe_turf/ascendant_storm/cast(list/targets)
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
if(SHA.phasing)
usr << "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>"
charge_counter = charge_max
return
usr << "<span class='deadsay'>You freeze the nearby air.</span>"
playsound(usr.loc, 'sound/effects/ghost2.ogg', 100, 1)
usr.visible_message("<span class='warning'><b>A massive ball of lightning appears in [usr]'s hands and flares out!</b></span>", \
"<span class='shadowling'>You conjure a ball of lightning and release it.</span>")
for(var/turf/T in targets)
for(var/mob/living/carbon/human/target in T.contents)
if(is_shadow_or_thrall(target))
if(target == usr) //No message for the user, of course
continue
else
target << "<span class='danger'>You feel a blast of paralyzingly cold air wrap around you and flow past, but you are unaffected!</span>"
continue
target << "<span class='userdanger'>You are hit by a blast of cold unlike anything you have ever felt. Your limbs instantly lock in place and you feel ice burns across your body!</span>"
target.Weaken(15)
if(target.bodytemperature)
target.bodytemperature -= INFINITY //:^)
target.take_organ_damage(0,80)
continue
target << "<span class='userdanger'>You are struck by a bolt of lightning!</span>"
playsound(target, 'sound/effects/eleczap.ogg', 50, 1)
target.electrocute_act(80, "lightning bolt")
usr.Beam(target,icon_state="red_lightning",icon='icons/effects/effects.dmi',time=1)
/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."
/obj/effect/proc_holder/spell/wizard/targeted/shadowlingAscendantTransmit
name = "Ascendant Broadcast"
desc = "Sends a message to the whole wide world."
panel = "Ascendant"
charge_max = 200
clothes_req = 0
range = -1
include_user = 1
charge_max = 1200
clothes_req = 0
action_icon_state = "transmit"
/obj/effect/proc_holder/spell/wizard/targeted/vortex/cast(list/targets)
var/mob/living/simple_animal/ascendant_shadowling/SHA = usr
if(SHA.phasing)
usr << "<span class='warning'>You are not in the same plane of existence. Unphase first.</span>"
return
for(SHA in targets)
SHA.visible_message("<span class='userdanger'>[SHA] raises their arms upward as the markings on their body flare a blinding red!</span>", \
"<span class='shadowling'>You tear open a rift to the black space between worlds. <b><font size=3>It would be wise to avoid it.</font></b></span>")
new /obj/structure/shadow_vortex(SHA.loc)
/obj/effect/proc_holder/spell/wizard/targeted/shadowlingAscendantTransmit/cast(list/targets)
for(var/mob/living/user in targets)
var/text = stripped_input(user, "What do you want to say to everything on and near [station_name()]?.", "Transmit to World", "")
if(!text)
return
world << "<font size=4><span class='shadowling'><b>\"[text]\"</font></span>"
@@ -98,7 +98,6 @@
/obj/structure/shadow_vortex/Crossed(var/td)
..()
if(ismob(td))
td << "<span class='userdanger'><font size=3>You enter the rift. Sickening chimes begin to jangle in your ears. \
All around you is endless blackness. After you see something moving, you realize it isn't entirely lifeless.</font></span>" //A bit of spooking before they die
td << "<span class='userdanger'>You enter the rift. Deafening chimes jingle in your ears. You are swallowed in darkness.</span>"
playsound(loc, 'sound/effects/EMPulse.ogg', 25, 1)
qdel(td)
@@ -1,166 +1,177 @@
//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/wizard/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"
/mob/living/carbon/human/proc/shadowling_hatch()
set category = "Shadowling Evolution"
set name = "Hatch"
if(usr.stat)
/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hatch/cast(list/targets)
if(usr.stat || !ishuman(usr) || !usr)
return
usr.verbs -= /mob/living/carbon/human/proc/shadowling_hatch
switch(alert("Are you sure you want to hatch? You cannot undo this!",,"Yes","No"))
if("No")
usr << "<span class='warning'>You decide against hatching for now."
usr.verbs += /mob/living/carbon/human/proc/shadowling_hatch
return
if("Yes")
usr.notransform = 1
usr.visible_message("<span class='warning'>[usr]'s things suddenly slip off. They hunch over and vomit up a copious amount of purple goo which begins to shape around them!</span>", \
"<span class='shadowling'>You remove any equipment which would hinder your hatching and begin regurgitating the resin which will protect you.</span>")
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 << "<span class='warning'>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("<span class='warning'>[H]'s things suddenly slip off. They hunch over and vomit up a copious amount of purple goo which begins to shape around them!</span>", \
"<span class='shadowling'>You remove any equipment which would hinder your hatching and begin regurgitating the resin which will protect you.</span>")
for(var/obj/item/I in usr) //drops all items
var/obj/item/organ/O = I
if(!istype(O) || O.owner != src)
usr.unEquip(I)
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 with the chrysalis
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
usr.visible_message("<span class='warning'>A chrysalis forms around [usr], sealing them inside.</span>", \
"<span class='shadowling'>You create your chrysalis and begin to contort within.</span>")
usr.Weaken(30)
sleep(100)
usr.visible_message("<span class='warning'><b>The skin on [usr]'s back begins to split apart. Black spines slowly emerge from the divide.</b></span>", \
"<span class='shadowling'>Spines pierce your back. Your claws break apart your fingers. You feel excruciating pain as your true form begins its exit.</span>")
H.visible_message("<span class='warning'>A chrysalis forms around [H], sealing them inside.</span>", \
"<span class='shadowling'>You create your chrysalis and begin to contort within.</span>")
usr.Weaken(30)
sleep(90)
usr.visible_message("<span class='warning'><b>[usr], now no longer recognizable as human, begins clawing at the resin walls around them.</b></span>", \
"<span class='shadowling'>Your false skin slips away. You begin tearing at the fragile membrane protecting you.</span>")
sleep(100)
H.visible_message("<span class='warning'><b>The skin on [H]'s back begins to split apart. Black spines slowly emerge from the divide.</b></span>", \
"<span class='shadowling'>Spines pierce your back. Your claws break apart your fingers. You feel excruciating pain as your true form begins its exit.</span>")
sleep(80)
playsound(usr.loc, 'sound/weapons/slash.ogg', 25, 1)
usr << "<i><b>You rip and slice.</b></i>"
sleep(10)
playsound(usr.loc, 'sound/weapons/slashmiss.ogg', 25, 1)
usr << "<i><b>The chrysalis falls like water before you.</b></i>"
sleep(10)
playsound(usr.loc, 'sound/weapons/slice.ogg', 25, 1)
usr << "<i><b>You are free!</b></i>"
sleep(90)
H.visible_message("<span class='warning'><b>[H], skin shifting, begins tearing at the walls around them.</b></span>", \
"<span class='shadowling'>Your false skin slips away. You begin tearing at the fragile membrane protecting you.</span>")
sleep(10)
playsound(usr.loc, 'sound/effects/ghost.ogg', 100, 1)
usr.real_name = "Shadowling ([rand(1,1000)])"
usr.name = usr.real_name
usr.notransform = 0
usr << "<i><b><font size=3>YOU LIVE!!!</i></b></font>"
sleep(80)
playsound(H.loc, 'sound/weapons/slash.ogg', 25, 1)
H << "<i><b>You rip and slice.</b></i>"
sleep(10)
playsound(H.loc, 'sound/weapons/slashmiss.ogg', 25, 1)
H << "<i><b>The chrysalis falls like water before you.</b></i>"
sleep(10)
playsound(H.loc, 'sound/weapons/slice.ogg', 25, 1)
H << "<i><b>You are free!</b></i>"
for(var/obj/structure/alien/resin/wall/shadowling/W in orange(usr, 1))
playsound(W, 'sound/effects/splat.ogg', 50, 1)
qdel(W)
for(var/obj/structure/alien/weeds/node/N in shadowturf)
qdel(N)
usr.visible_message("<span class='warning'>The chrysalis explodes in a shower of purple flesh and fluid!</span>")
var/mob/living/carbon/human/M = usr
M.underwear = "None"
M.undershirt = "None"
M.faction |= "faithless"
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 << "<i><b><font size=3>YOU LIVE!!!</i></b></font>"
usr.equip_to_slot_or_del(new /obj/item/clothing/under/shadowling(usr), slot_w_uniform)
usr.equip_to_slot_or_del(new /obj/item/clothing/shoes/shadowling(usr), slot_shoes)
usr.equip_to_slot_or_del(new /obj/item/clothing/suit/space/shadowling(usr), slot_wear_suit)
usr.equip_to_slot_or_del(new /obj/item/clothing/head/shadowling(usr), slot_head)
usr.equip_to_slot_or_del(new /obj/item/clothing/gloves/shadowling(usr), slot_gloves)
usr.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/shadowling(usr), slot_wear_mask)
usr.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/shadowling(usr), slot_glasses)
set_species("Shadowling")
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("<span class='warning'>The chrysalis explodes in a shower of purple flesh and fluid!</span>")
sleep(10)
usr << "<span class='shadowling'><b><i>Your powers are awoken. You may now live to your fullest extent. Remember your goal. Cooperate with your thralls and allies.</b></i></span>"
usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/glare)
usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/veil)
usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/shadow_walk)
usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/flashfreeze)
usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/collective_mind)
H.underwear = "None"
H.undershirt = "None"
H.faction |= "faithless"
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/night/shadowling(usr), slot_glasses)
H.set_species("Shadowling")
sleep(10)
H << "<span class='shadowling'><b><i>Your powers are awoken. You may now live to your fullest extent. Remember your goal. Cooperate with your thralls and allies.</b></i></span>"
H.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_ascend)
H.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/glare)
H.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/veil)
H.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/shadow_walk)
H.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/flashfreeze)
H.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/collective_mind)
H.mind.remove_spell(src)
/mob/living/carbon/human/proc/shadowling_ascendance()
set category = "Shadowling Evolution"
set name = "Ascendance"
/obj/effect/proc_holder/spell/wizard/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"
if(usr.stat)
/obj/effect/proc_holder/spell/wizard/targeted/shadowling_ascend/cast(list/targets)
if(usr.stat || !ishuman(usr) || !usr)
return
usr.verbs -= /mob/living/carbon/human/proc/shadowling_ascendance
switch(alert("It is time to ascend. Are you completely sure about this? You cannot undo this!",,"Yes","No"))
if("No")
usr << "<span class='warning'>You decide against ascending for now."
usr.verbs += /mob/living/carbon/human/proc/shadowling_ascendance
return
if("Yes")
usr.notransform = 1
usr.visible_message("<span class='warning'>[usr] rapidly bends and contorts, their eyes flaring a deep crimson!</span>", \
"<span class='shadowling'>You begin unlocking the genetic vault within you and prepare yourself for the power to come.</span>")
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 << "<span class='warning'>You decide against ascending for now."
charge_counter = charge_max
return
if("Yes")
H.notransform = 1
H.visible_message("<span class='warning'>[H] gently rises into the air, red light glowing in its eyes.</span>", \
"<span class='shadowling'>You rise into the air and get ready for your transformation.</span>")
sleep(30)
usr.visible_message("<span class='danger'>[usr] suddenly shoots up a few inches in the air and begins hovering there, still twisting.</span>", \
"<span class='shadowling'>You hover into the air to make room for your new form.</span>")
sleep(50)
sleep(60)
usr.visible_message("<span class='danger'>[usr]'s skin begins to pulse red in sync with their eyes. Their form slowly expands outward.</span>", \
"<span class='shadowling'>You feel yourself beginning to mutate.</span>")
H.visible_message("<span class='warning'>[H]'s skin begins to crack and harden.</span>", \
"<span class='shadowling'>Your flesh begins creating a shield around yourself.</span>")
sleep(20)
if(!ticker.mode.shadowling_ascended)
usr << "<span class='shadowling'>It isn't enough. Time to draw upon your thralls.</span>"
else
usr << "<span class='shadowling'>After some telepathic searching, you find the reservoir of life energy from the thralls and tap into it.</span>"
sleep(100)
H.visible_message("<span class='warning'>The small horns on [H]'s head slowly grow and elongate.</span>", \
"<span class='shadowling'>Your body continues to mutate. Your telepathic abilities grow.</span>") //y-your horns are so big, senpai...!~
sleep(50)
for(var/mob/M in mob_list)
if(is_thrall(M) && !ticker.mode.shadowling_ascended)
M.visible_message("<span class='userdanger'>[M] trembles minutely as their form turns to ash, black smoke pouring from their disintegrating face.</span>", \
"<span class='userdanger'><font size=3>It's time! Your masters are ascending! Your last thoughts are happy as your body is drained of life.</span>")
sleep(90)
H.visible_message("<span class='warning'>[H]'s body begins to violently stretch and contort.</span>", \
"<span class='shadowling'>You begin to rend apart the final barries to godhood.</span>")
ticker.mode.thralls -= M.mind //To prevent message spam
M.death(0)
M.dust()
usr << "<span class='userdanger'>Drawing upon your thralls, you find the strength needed to finish and rend apart the final barriers to godhood.</b></span>"
sleep(40)
for(var/mob/living/M in orange(7, src))
M.Weaken(10)
M << "<span class='userdanger'>An immense pressure slams you onto the ground!</span>"
usr << "<font size=3.5><span class='shadowling'>YOU LIVE!!!</font></span>"
world << "<br><br><font size=4><span class='shadowling'><b>A horrible wail echoes in your mind as the world plunges into blackness.</font></span><br><br>"
world << 'sound/hallucinations/veryfar_noise.ogg'
for(var/obj/machinery/power/apc/A in world)
A.overload_lighting()
var/mob/A = new /mob/living/simple_animal/ascendant_shadowling(usr.loc)
usr.spell_list = list()
usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/annihilate)
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.flags |= GODMODE
usr.notransform = 1
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
qdel(usr)
sleep(40)
H << "<i><b>Yes!</b></i>"
sleep(10)
H << "<i><b><span class='big'>YES!!</span></b></i>"
sleep(10)
H << "<i><b><span class='reallybig'>YE--</span></b></i>"
sleep(1)
for(var/mob/living/M in orange(7, H))
M.Weaken(10)
M << "<span class='userdanger'>An immense pressure slams you onto the ground!</span>"
world << "<font size=5><span class='shadowling'><b>\"VYSHA NERADA YEKHEZET U'RUU!!\"</font></span>"
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.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/annihilate)
A.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/hypnosis)
A.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_phase_shift)
A.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/ascendant_storm)
A.AddSpell(new /obj/effect/proc_holder/spell/wizard/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)
+7
View File
@@ -278,6 +278,13 @@
if (spell_to_remove.name == "Artificer" && !removeallspells) continue
qdel(spell_to_remove)
/datum/mind/proc/remove_spell(var/obj/effect/proc_holder/spell/spell) //To remove a specific spell from a mind
if(!spell) return
for(var/obj/effect/proc_holder/spell/S in spell_list)
if(istype(S, spell))
qdel(S)
spell_list -= S
/*Checks if the wizard can cast spells.
Made a proc so this is not repeated 14 (or more) times.*/
/mob/proc/casting()
+7 -8
View File
@@ -251,14 +251,13 @@
M.changeNext_move(CLICK_CD_MELEE)
M.do_attack_animation(src)
if(M.environment_smash >= 2)
if(istype(src, /turf/simulated/wall/r_wall))
if(M.environment_smash == 3)
dismantle_wall(1)
M << "<span class='info'>You smash through the wall.</span>"
else
M << text("\blue You smash against the wall.")
take_damage(rand(25, 75))
return
if(M.environment_smash == 3)
dismantle_wall(1)
M << "<span class='info'>You smash through the wall.</span>"
else
M << text("<span class='notice'>You smash against the wall.</span>")
take_damage(rand(25, 75))
return
M << "\blue You push the wall but nothing happens!"
return
+5
View File
@@ -396,3 +396,8 @@
O.singularity_act()
ChangeTurf(/turf/space)
return(2)
/turf/proc/get_lumcount() //Gets the lighting level of a given turf.
if(lighting_overlay)
return lighting_overlay.get_clamped_lum()
return 1
@@ -419,6 +419,8 @@
msg += "<span class='warning'><b>[src] has \a [implant] sticking out of [t_his] flesh!</span>\n"
if(digitalcamo)
msg += "[t_He] [t_is] repulsively uncanny!\n"
if(!wear_mask && is_thrall(src) && in_range(usr,src))
msg += "Their features seem unnaturally tight and drawn.\n"
if(decaylevel == 1)
msg += "[t_He] [t_is] starting to smell.\n"
if(decaylevel == 2)
+5 -13
View File
@@ -748,11 +748,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
if(isturf(loc)) //else, there's considered to be no light
var/turf/T = loc
var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
if(L)
light_amount = (L.get_clamped_lum()*10) - 5 //hardcapped so it's not abused by having a ton of flashlights
else
light_amount = 5
light_amount = min(T.get_lumcount()*10, 5) //hardcapped so it's not abused by having a ton of flashlights
nutrition += light_amount
traumatic_shock -= light_amount
@@ -770,12 +766,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
var/light_amount = 0
if(isturf(loc))
var/turf/T = loc
var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
if(L)
light_amount = L.get_clamped_lum()*10
else
light_amount = 10
if(light_amount > species.light_dam) //if there's enough light, start dying
light_amount = T.get_lumcount()*10
if(light_amount > species.light_dam && !incorporeal_move) //if there's enough light, start dying
if(species.light_effect_amp)
adjustFireLoss(5) //This gets doubled by Shadowling's innate fire weakness, so it ends up being 10.
else
@@ -1805,9 +1797,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
holder.icon_state = "mutineer"
if("mutineer")
holder.icon_state = "mutineer"
if("Shadowling")
if("shadowling")
holder.icon_state = "hudshadowling"
if("Shadowling Thrall")
if("shadowling thrall")
holder.icon_state = "hudshadowlingthrall"
hud_list[SPECIALROLE_HUD] = holder
@@ -3,4 +3,5 @@
regenerate_icons()
show_laws(0)
if(mind) ticker.mode.remove_revolutionary(mind)
if(mind) ticker.mode.remove_thrall(mind,0)
return
+2 -1
View File
@@ -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;}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 KiB

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 42 KiB

+1 -1
View File
@@ -357,6 +357,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"
@@ -1403,7 +1404,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"