From cf567414c25e9698ddbf2dfa2a1f5f56dee9f0a5 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 23 Mar 2016 21:25:15 -0400 Subject: [PATCH] Major Shadowling Update --- code/game/gamemodes/shadowling/shadowling.dm | 40 ++- .../shadowling/shadowling_abilities.dm | 330 +++++++++++++----- .../gamemodes/shadowling/shadowling_items.dm | 37 +- .../special_shadowling_abilities.dm | 27 +- code/modules/mob/dead/observer/observer.dm | 7 + code/modules/mob/mob.dm | 5 + code/modules/surgery/other.dm | 37 +- icons/mob/actions.dmi | Bin 56414 -> 57233 bytes icons/mob/human_races/r_lshadowling.dmi | Bin 0 -> 1772 bytes sound/magic/Staff_Chaos.ogg | Bin 0 -> 20499 bytes 10 files changed, 345 insertions(+), 138 deletions(-) create mode 100644 icons/mob/human_races/r_lshadowling.dmi create mode 100644 sound/magic/Staff_Chaos.ogg diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index a73b8b6afc6..47479f42cb4 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -87,7 +87,7 @@ Made by Xhuis if(!possible_shadowlings.len) return 0 - var/shadowlings = max(2, round(num_players()/10)) //How many shadowlings there are; hardcoded to 2 + var/shadowlings = max(3, round(num_players()/14)) while(shadowlings) var/datum/mind/shadow = pick(possible_shadowlings) @@ -114,7 +114,7 @@ Made by Xhuis /datum/game_mode/proc/greet_shadow(var/datum/mind/shadow) shadow.current << "Currently, you are disguised as an employee aboard [world.name]." - shadow.current << "In your limited state, you have three abilities: Enthrall, Hatch, and Shadowling Hivemind (:8)." + shadow.current << "In your limited state, you have two abilities: Hatch and Shadowling Hivemind (:8)." shadow.current << "Any other shadowlings are your allies. You must assist them as they shall assist you." shadow.current << "If you are new to shadowling, or want to read about abilities, check the wiki page at http://nanotrasen.se/wiki/index.php/Shadowling
" @@ -132,8 +132,6 @@ 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.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadowling_hatch) - shadow_mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/enthrall) - shadow_mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadow_vision) spawn(0) shadow_mind.current.add_language("Shadowling Hivemind") update_shadow_icons_added(shadow_mind) @@ -246,6 +244,8 @@ Made by Xhuis world << "The shadowlings have been killed by the crew!" else if(!check_shadow_victory() && shuttle_master.emergency.mode >= SHUTTLE_ESCAPE) world << "The crew escaped the station before the shadowlings could ascend!" + else + world << "The shadowlings have failed!" ..() return 1 @@ -300,7 +300,7 @@ Made by Xhuis blood_color = "#555555" flesh_color = "#222222" - flags = NO_BLOOD | NO_BREATHE | RADIMMUNE | NO_INTORGANS + flags = NO_BLOOD | NO_BREATHE | RADIMMUNE burn_mod = 1.5 //1.5x burn damage, 2x is excessive hot_env_multiplier = 1.5 @@ -327,6 +327,36 @@ Made by Xhuis H.SetWeakened(0) H.SetStunned(0) + +/datum/species/shadow/ling/lesser //Empowered thralls. Obvious, but powerful + name = "Lesser Shadowling" + + icobase = 'icons/mob/human_races/r_lshadowling.dmi' + deform = 'icons/mob/human_races/r_lshadowling.dmi' + + blood_color = "#CCCCCC" + flesh_color = "#AAAAAA" + + flags = NO_BLOOD | NO_BREATHE | RADIMMUNE + burn_mod = 1.1 + hot_env_multiplier = 1.1 + +/datum/species/shadow/ling/lesser/handle_life(var/mob/living/carbon/human/H) + if(!H.weakeyes) + H.weakeyes = 1 //Makes them more vulnerable to flashes and flashbangs + var/light_amount = 0 + H.nutrition = 450 //i aint never get hongry + if(isturf(H.loc)) + var/turf/T = H.loc + light_amount = T.get_lumcount() * 10 + if(light_amount > LIGHT_DAM_THRESHOLD && !H.incorporeal_move) + H.take_overall_damage(0, LIGHT_DAMAGE_TAKEN/2) + else if (light_amount < LIGHT_HEAL_THRESHOLD) + H.heal_overall_damage(2,2) + H.adjustToxLoss(-5) + H.adjustBrainLoss(-25) + H.adjustCloneLoss(-1) + /datum/game_mode/proc/update_shadow_icons_added(datum/mind/shadow_mind) var/datum/atom_hud/antag/shadow_hud = huds[ANTAG_HUD_SHADOW] shadow_hud.join_hud(shadow_mind.current) diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 2dfa31cc4a0..a1367fd622c 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -1,4 +1,16 @@ -/obj/effect/proc_holder/spell/targeted/glare +#define EMPOWERED_THRALL_LIMIT 5 + +/obj/effect/proc_holder/spell/proc/shadowling_check(var/mob/living/carbon/human/H) + if(!H || !istype(H)) return + if(H.get_species() == "Shadowling" && is_shadow(H)) return 1 + if(H.get_species() == "Lesser Shadowling" && is_thrall(H)) return 1 + if(!is_shadow_or_thrall(usr)) usr << "You can't wrap your head around how to do this." + else if(is_thrall(usr)) usr << "You aren't powerful enough to do this." + else if(is_shadow(usr)) usr << "Your telepathic ability is suppressed. Hatch or use Rapid Re-Hatch first." + return 0 + + +/obj/effect/proc_holder/spell/targeted/glare //Stuns and mutes a human target for 10 seconds name = "Glare" desc = "Stuns and mutes a target for a decent duration." panel = "Shadowling Abilities" @@ -9,16 +21,20 @@ /obj/effect/proc_holder/spell/targeted/glare/cast(list/targets) for(var/mob/living/carbon/human/target in targets) if(!ishuman(target)) + usr << "You may only glare at humans!" + charge_counter = charge_max + return + if(!shadowling_check(usr)) charge_counter = charge_max return if(target.stat) + usr << "[target] must be conscious!" charge_counter = charge_max return if(is_shadow_or_thrall(target)) usr << "You don't see why you would want to paralyze an ally." 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...") @@ -29,6 +45,7 @@ target.Stun(10) M.silent += 10 + /obj/effect/proc_holder/spell/targeted/lesser_glare name = "Lesser Glare" desc = "Stuns and mutes a target for a short duration." @@ -40,13 +57,15 @@ /obj/effect/proc_holder/spell/targeted/lesser_glare/cast(list/targets) for(var/mob/living/carbon/human/target in targets) if(!ishuman(target) || !target) + usr << "You nay only glare at humans!" charge_counter = charge_max return if(target.stat) + usr << "[target] must be conscious!" charge_counter = charge_max return if(is_shadow_or_thrall(target)) - usr << "You don't see why you would want to paralyze an ally." + usr << "You cannot glare at allies!" charge_counter = charge_max return var/mob/living/carbon/human/M = target @@ -56,14 +75,15 @@ target << "Your gaze is forcibly drawn into [usr]'s eyes, and you are mesmerized by the heavenly lights..." else target << "Red lights suddenly dance in your vision, and you are mesmerized by their heavenly beauty..." - target.Stun(3) //Roughly 30% as long as the normal one - M.silent += 3 + target.Stun(5) //Roughly 50% as long as the normal one + M.silent += 5 + /obj/effect/proc_holder/spell/aoe_turf/veil name = "Veil" desc = "Extinguishes most nearby light sources." panel = "Shadowling Abilities" - charge_max = 250 //Short cooldown because people can just turn the lights back on + charge_max = 150 //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) @@ -143,13 +163,16 @@ name = "Shadow Walk" desc = "Phases you into the space between worlds for a short time, allowing movement through walls and invisbility." panel = "Shadowling Abilities" - charge_max = 600 + charge_max = 300 //Used to be twice this, buffed clothes_req = 0 range = -1 include_user = 1 action_icon_state = "shadow_walk" /obj/effect/proc_holder/spell/targeted/shadow_walk/cast(list/targets) + if(!shadowling_check(usr)) + charge_counter = charge_max + return for(var/mob/living/user in targets) playsound(user.loc, 'sound/effects/bamf.ogg', 50, 1) user.visible_message("[user] vanishes in a puff of black mist!", "You enter the space between worlds as a passageway.") @@ -157,12 +180,19 @@ user.SetWeakened(0) user.incorporeal_move = 1 user.alpha = 0 + user.ExtinguishMob() + var/turf/T = get_turf(user) + user.forceMove(T) //to properly move the mob out of a potential container if(user.buckled) user.buckled.unbuckle_mob() + if(user.pulledby) + user.pulledby.stop_pulling() + user.stop_pulling() sleep(40) //4 seconds user.visible_message("[user] suddenly manifests!", "The pressure becomes too much and you vacate the interdimensional darkness.") user.incorporeal_move = 0 user.alpha = 255 + user.forceMove(user.loc) /obj/effect/proc_holder/spell/targeted/lesser_shadow_walk name = "Guise" @@ -176,15 +206,8 @@ /obj/effect/proc_holder/spell/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 << "It's too bright to do that!" - charge_counter = charge_max - return user.visible_message("[user] suddenly fades away!", "You veil yourself in darkness, making you harder to see.") - user.alpha = 20 + user.alpha = 10 sleep(40) user.visible_message("[user] appears from nowhere!", "Your shadowy guise slips away.") user.alpha = initial(user.alpha) @@ -198,7 +221,8 @@ range = -1 include_user = 1 clothes_req = 0 - var/datum/vision_override/vision_path = /datum/vision_override/nightvision/thermals + var/datum/vision_override/vision_path = /datum/vision_override/nightvision + action_icon_state = "darksight" /obj/effect/proc_holder/spell/targeted/shadow_vision/cast(list/targets) for(var/mob/living/user in targets) @@ -216,18 +240,20 @@ desc = "Thrall Darksight" desc = "Gives you night vision." panel = "Thrall Abilities" - vision_path = /datum/vision_override/nightvision /obj/effect/proc_holder/spell/aoe_turf/flashfreeze 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 + charge_max = 250 clothes_req = 0 action_icon_state = "icy_veins" /obj/effect/proc_holder/spell/aoe_turf/flashfreeze/cast(list/targets) + if(!shadowling_check(usr)) + charge_counter = charge_max + return usr << "You freeze the nearby air." playsound(usr.loc, 'sound/effects/ghost2.ogg', 50, 1) @@ -239,17 +265,16 @@ else M << "You feel a blast of paralyzingly cold air wrap around you and flow past, but you are unaffected!" continue - M << "You are hit by a blast of paralyzingly cold air and feel goosebumps break out across your body!" + M << "A wave of shockingly cold air engulfs you!" M.Stun(2) + M.apply_damage(10, BURN) if(M.bodytemperature) M.bodytemperature -= 200 //Extreme amount of initial cold if(M.reagents) M.reagents.add_reagent("frostoil", 15) //Half of a cryosting - -//Enthrall is the single most important spell -/obj/effect/proc_holder/spell/targeted/enthrall +/obj/effect/proc_holder/spell/targeted/enthrall //Turns a target into the shadowling's slave. This overrides all previous loyalties 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" @@ -262,10 +287,12 @@ /obj/effect/proc_holder/spell/targeted/enthrall/cast(list/targets) var/mob/living/carbon/human/user = usr listclearnulls(ticker.mode.shadowling_thralls) - if(ticker.mode.shadowling_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 + if(!(user.mind in ticker.mode.shadows)) return + if(user.get_species() != "Shadowling") + if(ticker.mode.shadowling_thralls.len >= 5) + 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]." @@ -291,6 +318,8 @@ usr << "You are already enthralling!" charge_counter = charge_max return + if(!target.client) + usr << "[target]'s mind is vacant of activity." enthralling = 1 usr << "This target is valid. You begin the enthralling." target << "[usr] stares at you. You feel your head begin to pulse." @@ -298,32 +327,32 @@ 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 << "You place your hands to [target]'s head..." + usr.visible_message("[usr] places their hands onto the sides of [target]'s head!") 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.") - target << "Your gaze is forcibly drawn into a blinding red light. You fall to the floor as conscious thought is wiped away." + usr << "You begin preparing [target]'s mind as a blank slate..." + usr.visible_message("[usr]'s palms flare a bright red against [target]'s temples!") + target << "A terrible red light floods your mind. You collapse as conscious thought is wiped away." target.Weaken(12) 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.") + usr.visible_message("[usr] pauses, then dips their head in concentration!") target << "You feel your loyalties begin to weaken!" - sleep(150) //15 seconds - not spawn() so the enthralling takes longer + sleep(100) //10 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.") + usr.visible_message("[usr] relaxes again.") 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 unexpectedly falters, dims, dies." if(3) - usr << "You begin rearranging [target]'s memories." - usr.visible_message("[usr]'s eyes flare brightly.") - 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 << "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." + usr << "You begin planting the tumor that will control the new thrall..." + usr.visible_message("A strange energy passes from [usr]'s hands into [target]'s head!") + target << "You feel your memories twisting, morphing. A sense of horror dominates your mind." + if(!do_mob(usr, target, 70)) //around 21 seconds total for enthralling, 31 for someone with a loyalty implant + usr << "The enthralling has been interrupted - your target's mind returns to its previous state." + target << "You wrest yourself away from [usr]'s hands and compose yourself" enthralling = 0 return @@ -335,7 +364,38 @@ ticker.mode.add_thrall(target.mind) target.mind.special_role = "shadowling thrall" -/obj/effect/proc_holder/spell/targeted/collective_mind +/obj/effect/proc_holder/spell/targeted/shadowling_regenarmor //Resets a shadowling's species to normal, removes genetic defects, and re-equips their armor + name = "Rapid Re-Hatch" + desc = "Re-forms protective chitin that may be lost during cloning or similar processes." + panel = "Shadowling Abilities" + charge_max = 600 + range = -1 + include_user = 1 + clothes_req = 0 + action_icon_state = "regen_armor" + +/obj/effect/proc_holder/spell/targeted/shadowling_regenarmor/cast(list/targets) + if(!is_shadow(usr)) + usr << "You must be a shadowling to do this!" + charge_counter = charge_max + return + for(var/mob/living/user in targets) + if(!istype(user) || !ishuman(user)) + return + var/mob/living/carbon/human/H = user + H.visible_message("[H]'s skin suddenly bubbles and shifts around their body!", \ + "You regenerate your protective armor and cleanse your form of defects.") + H.adjustCloneLoss(user.getCloneLoss()) + H.equip_to_slot_or_del(new /obj/item/clothing/under/shadowling(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/shadowling(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/space/shadowling(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/clothing/head/shadowling(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/gloves/shadowling(H), slot_gloves) + H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/shadowling(H), slot_wear_mask) + H.equip_to_slot_or_del(new /obj/item/clothing/glasses/shadowling(H), slot_glasses) + H.set_species("Shadowling") + +/obj/effect/proc_holder/spell/targeted/collective_mind //Lets a shadowling bring together their thralls' strength, granting new abilities and a headcount name = "Collective Hivemind" desc = "Gathers the power of all of your thralls and compares it to what is needed for ascendance. Also gains you new abilities." panel = "Shadowling Abilities" @@ -350,6 +410,9 @@ action_icon_state = "collective_mind" /obj/effect/proc_holder/spell/targeted/collective_mind/cast(list/targets) + if(!shadowling_check(usr)) + charge_counter = charge_max + return for(var/mob/living/user in targets) var/thralls = 0 var/victory_threshold = 15 @@ -366,22 +429,22 @@ user << "Your concentration has been broken. The mental hooks you have sent out now retract into your mind." return - if(thralls >= 3 && !blind_smoke_acquired) + if(thralls >= 3 && !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, plus stunning silicon lifeforms." + user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/unearthly_screech) + + if(thralls >= 5 && !blind_smoke_acquired) blind_smoke_acquired = 1 user << "The power of your thralls has granted you the Blinding Smoke ability. It will create a choking cloud that will blind any non-thralls who enter. \ " user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/blindness_smoke) - if(thralls >= 5 && !drainLifeAcquired) + if(thralls >= 7 && !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/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, plus stunning silicon lifeforms." - user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/unearthly_screech) - 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 \ @@ -420,6 +483,9 @@ action_icon_state = "black_smoke" /obj/effect/proc_holder/spell/targeted/blindness_smoke/cast(list/targets) //Extremely hacky + if(!shadowling_check(usr)) + charge_counter = charge_max + return for(var/mob/living/user in targets) user.visible_message("[user] suddenly bends over and coughs out a cloud of black smoke, which begins to spread rapidly!") user << "You regurgitate a vast cloud of blinding smoke." @@ -471,6 +537,9 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) action_icon_state = "screech" /obj/effect/proc_holder/spell/aoe_turf/unearthly_screech/cast(list/targets) + if(!shadowling_check(usr)) + charge_counter = charge_max + return usr.audible_message("[usr] lets out a horrible scream!") playsound(usr.loc, 'sound/effects/screech.ogg', 100, 1) @@ -484,7 +553,6 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) if(iscarbon(target)) var/mob/living/carbon/M = target M << "A spike of pain drives into your head and scrambles your thoughts!" - M.Weaken(2) M.confused += 10 M.ear_damage += 3 else if(issilicon(target)) @@ -497,7 +565,7 @@ 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(80,100)) + W.hit(rand(80, 100)) @@ -513,6 +581,9 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) action_icon_state = "drain_life" /obj/effect/proc_holder/spell/aoe_turf/drainLife/cast(list/targets, var/mob/living/carbon/human/U = usr) + if(!shadowling_check(usr)) + charge_counter = charge_max + return targetsDrained = 0 nearbyTargets = list() for(var/turf/T in targets) @@ -541,46 +612,143 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) /obj/effect/proc_holder/spell/targeted/reviveThrall name = "Black Recuperation" - desc = "Brings a dead thrall back to life." + desc = "Revives or empowers a thrall." panel = "Shadowling Abilities" range = 1 - charge_max = 3000 + charge_max = 600 clothes_req = 0 include_user = 0 - var/list/thralls_in_world = list() action_icon_state = "revive_thrall" /obj/effect/proc_holder/spell/targeted/reviveThrall/cast(list/targets) + if(!shadowling_check(usr)) + charge_counter = charge_max + return for(var/mob/living/carbon/human/thrallToRevive in targets) - if(!is_thrall(thrallToRevive)) - usr << "[thrallToRevive] is not a thrall." + var/choice = alert(usr,"Empower a living thrall or revive a dead one?",,"Empower","Revive","Cancel") + switch(choice) + if("Empower") + if(!is_thrall(thrallToRevive)) + usr << "[thrallToRevive] is not a thrall." + charge_counter = charge_max + return + if(thrallToRevive.stat != CONSCIOUS) + usr << "[thrallToRevive] must be conscious to become empowered." + charge_counter = charge_max + return + var/empowered_thralls = 0 + for(var/datum/mind/M in ticker.mode.shadowling_thralls) + if(!ishuman(M.current)) + return + var/mob/living/carbon/human/H = M.current + if(H.get_species() == "Lesser Shadowling") + empowered_thralls++ + if(empowered_thralls >= EMPOWERED_THRALL_LIMIT) + usr << "You cannot spare this much energy. There are too many empowered thralls." + charge_counter = charge_max + return + usr.visible_message("[usr] places their hands over [thrallToRevive]'s face, red light shining from beneath.", \ + "You place your hands on [thrallToRevive]'s face and begin gathering energy...") + thrallToRevive << "[usr] places their hands over your face. You feel energy gathering. Stand still..." + if(!do_mob(usr, thrallToRevive, 80)) + usr << "Your concentration snaps. The flow of energy ebbs." + charge_counter = charge_max + return + usr << "You release a massive surge of power into [thrallToRevive]!" + usr.visible_message("Red lightning surges into [thrallToRevive]'s face!") + playsound(thrallToRevive, 'sound/weapons/Egloves.ogg', 50, 1) + playsound(thrallToRevive, 'sound/machines/defib_zap.ogg', 50, 1) + usr.Beam(thrallToRevive,icon_state="red_lightning",icon='icons/effects/effects.dmi',time=1) + thrallToRevive.Weaken(5) + thrallToRevive.visible_message("[thrallToRevive] collapses, their skin and face distorting!", \ + "AAAAAAAAAAAAAAAAAAAGH-") + sleep(20) + thrallToRevive.visible_message("[thrallToRevive] slowly rises, no longer recognizable as human.", \ + "You feel new power flow into you. You have been gifted by your masters. You now closely resemble them. You are empowered in \ + darkness but wither slowly in light. In addition, Lesser Glare and Guise have been upgraded into their true forms.") + thrallToRevive.set_species("Lesser Shadowling") + thrallToRevive.mind.remove_spell(/obj/effect/proc_holder/spell/targeted/lesser_glare) + thrallToRevive.mind.remove_spell(/obj/effect/proc_holder/spell/targeted/lesser_shadow_walk) + thrallToRevive.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/glare) + thrallToRevive.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadow_walk) + if("Revive") + 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...") + thrallToRevive.notify_ghost_cloning("Your masters are resuscitating you! Re-enter your corpse if you wish to be brought to life.", source = thrallToRevive) + if(!do_mob(usr, thrallToRevive, 30)) + usr << "Your concentration snaps. The flow of energy ebbs." + charge_counter = charge_max + return + usr << "You release a massive surge of power 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) + usr.Beam(thrallToRevive,icon_state="red_lightning",icon='icons/effects/effects.dmi',time=1) + sleep(10) + if(thrallToRevive.revive(full_heal = 1)) + thrallToRevive.visible_message("[thrallToRevive] heaves in breath, dim red light shining in 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) + else + charge_counter = charge_max + return + +/obj/effect/proc_holder/spell/targeted/shadowling_extend_shuttle + name = "Destroy Engines" + desc = "Extends the time of the emergency shuttle's arrival by fifteen minutes. This can only be used once." + panel = "Shadowling Abilities" + range = 1 + clothes_req = 0 + charge_max = 600 + action_icon_state = "extend_shuttle" + +/obj/effect/proc_holder/spell/targeted/shadowling_extend_shuttle/cast(list/targets) + if(!shadowling_check(usr)) + charge_counter = charge_max + return + for(var/mob/living/carbon/human/target in targets) + if(target.stat) charge_counter = charge_max return - if(thrallToRevive.stat != DEAD) - usr << "[thrallToRevive] is not dead." + if(!is_thrall(target)) + usr << "[target] must be a thrall." 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, 30)) - usr << "Your concentration snaps. The flow of energy ebbs." - charge_counter= charge_max + if(shuttle_master.emergency.mode != SHUTTLE_CALL) + usr << "The shuttle must be inbound only to the station." + charge_counter = charge_max return - usr << "You release a massive surge of power 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(10) - 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) + var/mob/living/carbon/human/M = target + usr.visible_message("[usr]'s eyes flash a bright red!", \ + "You begin to draw [M]'s life force.") + M.visible_message("[M]'s face falls slack, their jaw slightly distending.", \ + "You are suddenly transported... far, far away...") + if(!do_after(usr, 50, target = M)) + M << "You are snapped back to reality, your haze dissipating!" + usr << "You have been interrupted. The draw has failed." + return + usr << "You project [M]'s life force toward the approaching shuttle, extending its arrival duration!" + M.visible_message("[M]'s eyes suddenly flare red. They proceed to collapse on the floor, not breathing.", \ + "...speeding by... ...pretty blue glow... ...touch it... ...no glow now... ...no light... ...nothing at all...") + M.death() + if(shuttle_master.emergency.mode == SHUTTLE_CALL) + var/more_minutes = 9000 + var/timer = shuttle_master.emergency.timeLeft() + timer += more_minutes + command_announcement.Announce("Major system failure aboard the emergency shuttle. This will extend its arrival time by approximately 15 minutes..", "System Failure", 'sound/misc/notice1.ogg') + shuttle_master.emergency.setTimer(timer) + usr.mind.spell_list.Remove(src) //Can only be used once! + qdel(src) // ASCENDANT ABILITIES BEYOND THIS POINT // @@ -600,15 +768,17 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) charge_counter = charge_max return + playsound(usr.loc, 'sound/magic/Staff_Chaos.ogg', 100, 1) for(var/mob/living/boom in targets) - if(is_shadow_or_thrall(boom)) + if(is_shadow(boom)) //Used to not work on thralls. Now it does so you can PUNISH THEM LIKE THE WRATHFUL GOD YOU ARE. usr << "Making an ally explode seems unwise." charge_counter = charge_max return usr.visible_message("[usr]'s markings flare as they gesture at [boom]!", \ "You direct a lance of telekinetic energy at [boom].") - playsound(usr, 'sound/effects/supermatter.ogg', 100, 1) sleep(4) + if(iscarbon(boom)) + playsound(boom, 'sound/magic/Disintegrate.ogg', 100, 1) boom.visible_message("[boom] explodes!") boom.gib() @@ -701,7 +871,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) usr.visible_message("A massive ball of lightning appears in [usr]'s hands and flares out!", \ "You conjure a ball of lightning and release it.") - + playsound(usr.loc, 'sound/magic/lightningbolt.ogg', 100, 1) for(var/turf/T in targets) for(var/mob/living/carbon/human/target in T.contents) if(is_shadow_or_thrall(target)) diff --git a/code/game/gamemodes/shadowling/shadowling_items.dm b/code/game/gamemodes/shadowling/shadowling_items.dm index 6af78895077..500c3ee25c5 100644 --- a/code/game/gamemodes/shadowling/shadowling_items.dm +++ b/code/game/gamemodes/shadowling/shadowling_items.dm @@ -1,12 +1,13 @@ /obj/item/clothing/under/shadowling name = "blackened flesh" - desc = "Black, chitonous skin." + desc = "Black, chitinous skin." item_state = "golem" origin_tech = null icon_state = "golem" item_color = "golem" flags = ABSTRACT | NODROP has_sensor = 0 + displays_id = 0 unacidable = 1 @@ -19,11 +20,12 @@ cold_protection = FULL_BODY min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT flags_inv = HIDEGLOVES | HIDESHOES | HIDEJUMPSUIT - flags = ABSTRACT | NODROP | THICKMATERIAL slowdown = 0 unacidable = 1 heat_protection = null //You didn't expect a light-sensitive creature to have heat resistance, did you? max_heat_protection_temperature = null + armor = list(melee = 25, bullet = 0, laser = 0, energy = 0, bomb = 25, bio = 100, rad = 100) + flags = ABSTRACT | NODROP | THICKMATERIAL | STOPSPRESSUREDMAGE /obj/item/clothing/shoes/shadowling @@ -61,10 +63,13 @@ desc = "A helmet-like enclosure of the head." icon_state = "golem" item_state = null + cold_protection = HEAD + min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT + heat_protection = HEAD + max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT origin_tech = null unacidable = 1 - flags = ABSTRACT | NODROP - + flags = ABSTRACT | NODROP | STOPSPRESSUREDMAGE /obj/item/clothing/glasses/shadowling name = "crimson eyes" @@ -75,25 +80,5 @@ origin_tech = null unacidable = 1 flash_protect = -1 - flags = ABSTRACT | NODROP - -/obj/structure/shadow_vortex - name = "vortex" - desc = "A swirling hole in the fabric of reality. Eye-watering chimes sound from its depths." - density = 0 - anchored = 1 - icon = 'icons/effects/genetics.dmi' - icon_state = "shadow_portal" - -/obj/structure/shadow_vortex/New() - src.audible_message("\The [src] lets out a dismaying screech as dimensional barriers are torn apart!") - playsound(loc, 'sound/effects/eleczap.ogg', 100, 1) - sleep(100) - qdel(src) - -/obj/structure/shadow_vortex/Crossed(var/td) - ..() - if(ismob(td)) - td << "You enter the rift. Deafening chimes jingle in your ears. You are swallowed in darkness." - playsound(loc, 'sound/effects/EMPulse.ogg', 25, 1) - qdel(td) + vision_flags = SEE_MOBS + flags = ABSTRACT | NODROP \ No newline at end of file diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm index 0b33c2f2451..52c50e0c193 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") +var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "Noaey'gief", "Mii`mahza", "Amerziox", "Gyrg-mylin", "Kanet'pruunance", "Vigistaezian") //Unpronouncable 2: electric boogalo) /obj/effect/proc_holder/spell/targeted/shadowling_hatch name = "Hatch" desc = "Casts off your disguise." @@ -11,7 +11,7 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N action_icon_state = "hatch" /obj/effect/proc_holder/spell/targeted/shadowling_hatch/cast(list/targets) - if(usr.stat || !ishuman(usr) || !usr) + if(usr.stat || !ishuman(usr) || !usr || !is_shadow(usr || isinspace(usr))) return if(!isturf(usr.loc)) usr << "You can't hatch here!" @@ -39,10 +39,11 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N 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 + var/temp_flags = H.status_flags + H.status_flags |= GODMODE //Can't die while hatching 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.", \ @@ -61,7 +62,7 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N sleep(10) playsound(H.loc, 'sound/weapons/slice.ogg', 25, 1) H << "You are free!" - + H.status_flags = temp_flags sleep(10) playsound(H.loc, 'sound/effects/ghost.ogg', 100, 1) var/newNameId = pick(possibleShadowlingNames) @@ -77,7 +78,6 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N 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" @@ -90,16 +90,21 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N 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") + H.set_species("Shadowling") //can't be a shadowling without being a shadowling + + H.mind.remove_spell(src) 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/shadow_vision) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/enthrall) 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) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadowling_regenarmor) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadowling_extend_shuttle) /obj/effect/proc_holder/spell/targeted/shadowling_ascend name = "Ascend" @@ -112,9 +117,10 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N action_icon_state = "ascend" /obj/effect/proc_holder/spell/targeted/shadowling_ascend/cast(list/targets) - if(usr.stat || !ishuman(usr) || !usr) + var/mob/living/carbon/human/H = usr + if(!shadowling_check(H)) return - for(var/mob/living/carbon/human/H in targets) + for(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") @@ -151,7 +157,7 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N 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)) + for(var/obj/machinery/power/apc/A in apcs) 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) @@ -168,7 +174,6 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N 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) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 2c0ae7ef779..16d826b55f5 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -257,6 +257,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return 1 +/mob/dead/observer/proc/notify_cloning(var/message, var/sound, var/atom/source) + if(message) + src << "[message]" + src << "(Click to re-enter)" + if(sound) + src << sound(sound) + /mob/dead/observer/proc/show_me_the_hud(hud_index) var/datum/atom_hud/H = huds[hud_index] H.add_hud_to(src) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index f8152ee0f96..3451da45d3f 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1364,6 +1364,11 @@ mob/proc/yank_out_object() return G break +/mob/proc/notify_ghost_cloning(var/message = "Someone is trying to revive you. Re-enter your corpse if you want to be revived!", var/sound = 'sound/effects/genetics.ogg', var/atom/source = null) + var/mob/dead/observer/ghost = get_ghost() + if(ghost) + ghost.notify_cloning(message, sound, source) + return ghost /mob/proc/fakevomit(green=0) //for aesthetic vomits that need to be instant and do not stun. -Fox if(stat==DEAD) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 42c35dd5106..85d8ca95e86 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -219,7 +219,7 @@ /datum/surgery/remove_thrall/can_start(mob/user, mob/living/carbon/target) - return is_thrall(target)//would this be too meta? + return is_thrall(target) //would this be too meta? /datum/surgery/remove_thrall/synth/can_start(mob/user, mob/living/carbon/target) return is_thrall(target) && target.get_species() == "Machine" @@ -244,22 +244,27 @@ ..() /datum/surgery_step/internal/dethrall/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(target.get_species() == "Lesser Shadowling") //Empowered thralls cannot be deconverted + target << "NOT LIKE THIS!" + user.visible_message("[target] suddenly slams upward and knocks down [user]!", \ + "[target] suddenly bolts up and slams you with tremendous force!") + user.resting = 0 //Remove all stuns + user.SetSleeping(0) + user.SetStunned(0) + user.SetWeakened(0) + user.SetParalysis(0) + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.Weaken(6) + C.apply_damage(20, "brute", "chest") + else if(issilicon(user)) + var/mob/living/silicon/S = user + S.Weaken(8) + S.apply_damage(20, "brute") + playsound(S, 'sound/effects/bang.ogg', 50, 1) + return 0 user.visible_message("[user] shines light onto the tumor in [target]'s head!", "You cleanse the contamination from [target]'s brain!") - ticker.mode.remove_thrall(target.mind,0) + ticker.mode.remove_thrall(target.mind, 0) target.visible_message("A strange black mass falls from [target]'s head!") new /obj/item/organ/internal/shadowtumor(get_turf(target)) - return 1 - -/datum/surgery_step/internal/dethrall/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/braincase = target.named_organ_parent("brain") - if(prob(50)) - user.visible_message("[user] slips and rips the tumor out from [target]'s [braincase]!", \ - "You fumble and tear out [target]'s tumor!") - target.adjustBrainLoss(110) // This is so you can't just defib'n go - ticker.mode.remove_thrall(target.mind,1) - - return 0 - else - user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!") - return 0 diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 5e7b65eb543637305f3d73de502c942b4baed947..79144d6c4bb7da56ff3f27add934480a35ee9a6f 100644 GIT binary patch delta 17170 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 *&lY^ur=GwU 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 diff --git a/icons/mob/human_races/r_lshadowling.dmi b/icons/mob/human_races/r_lshadowling.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0e955e5bd977ceb870be8f9cd9803015a8d50c35 GIT binary patch literal 1772 zcmV*_H8nLNA|n3)0KmY&R>63$00001bW%=J06^y0W&i*Hzj{1c8yu(4A)oHhvVsa+fxj7!Bu;5x7w#Ek?U@nuE&<%ByNMRiLWlV~O zbPr3NeY-yDENH`6x3c)QuGYj+4Psz0s|Uki9kfw}^PxNas_oO?qxeBEI+#8#`|XGo zmw0iB7nfLZ1CmF^yKe4phEx?*zW&oUsRP6z-Zmlc000HINkl^WFu&k3rz2Vvh$f$wo3d)}>i|94n$O_u%}CbEpY@oe>XN@KP3n+Q;gZf`b%AP9mW z2!e1IsG=%%#MZWT6|s|j=N`bpeCx@9wf>up%iIgKZCgE2yQ-d{y*9Ru>Ay+xE!u4b zwsIxd8)IR>wf=%22*Mrkeqi=1+WkA)M`o|}SAW)E>%K=jum7U|bMlpRWto6= z{-Z(*E0!AC54I`b6dG4T2W$O@uVBH}ZijY;OB!R@BwXq5Mb~Um>8hX(*7^&AAP9mW z2!bF8f^d)AAigI%2p7E1ar@{3rahG8$=|vtU;T~3n6{bR1p*S>m5Rai=FeU5FG%AH zFdrLT>LLLyx&ZYt36kee+kFU#J_nNQivic>3DH!!a3qcSBK@bF?YkvHZE^mP0!PDa*wt(g%`AJom2-rs# z(0!~b(`-=y4%qFZZ&K-hhkgI7*$=+m-Kv(Z`x9?tUSALanl0zw>y2Muu%!Z0d+;=` zFWC$Y!qCmd)cR&fd;vAhU{u~+OcQ;pdDjqQL4Zaxi5?wSAYgtgV**rk0Y0?9i6DF} zvFi&$QN6c50ITIZ^##Git}h5hIct6O0q`bk`+0rA6$0Yc7laeLz95*`^#!3MrLnN0 z8ODPFJ@o<4krTwOtB~Z&HNY70Q3iUdS%-_b2-T$*bi4(z1pJhI|5?)QUCsnd z`vcrRn6&AJd0&$Kf!?-mcY2%zoE{zB5z!|{_6N9sIQ{we1IYfs`S%0T=_`AFKY;s( zqg)10pTxF!qsX97IGAHe;?1-J(u-!~v2VfBeDyypJl0_+2i?;Cao zGW1{qn13+ZJn;Db4ZhJ#0LJ&+KbRyt@c8}>I-LCr3@q8Wf4G3=g~#`}3|A$e11Ny` z2h%mL{QZ9oyOr8}DuDZklJ43U{{FwM>5VPTG6f)D4QToNBDP2du z-Bf@e2V?F^4Xfp#g%SVWf9`gx^ zosRhkC}3sYk%x0W0TndnBhb%zK0<8H`2--qmGo8bEFS^NF(Z(S`2u literal 0 HcmV?d00001 diff --git a/sound/magic/Staff_Chaos.ogg b/sound/magic/Staff_Chaos.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e8b1c0e6adfaeecc7179eefff1cbdcbbb9e5fc0e GIT binary patch literal 20499 zcmagG1z26NvoE@FcPZ|+ad&rj*WwPvDHMtqcXy|_yS5Z}cXunr9p0w>pL5TC zFs1jN|9!ppe5ZWG;nGA+eEWZ0LlFNM5rXL2)}O2xm7Fa}?5s^R|FS2MAz@`^=3?e# zWqluq2})O|V&-UKP9oxFX60i-Q87(004%6Ii#$o6-(;)?0Duab1_cl~!9oUDl$b~JIW3A-5<000T_qk)Sq*q5;x=dr}0j&{!Fu~y_RA%O{3+2n!yc|&FDP~1>#>o5+a zghkSU0)P}QEKM4WsrsIogp!8ffU<7{&V!^Sna=RE-*W@tSqDi1w0!oIT)1s10|gIN8W z774%)G);h19HvYy=148U*c64*CA|s;#}u1{n!17p=yEgAayMUacUy4x(Mb)~Yw^)( z3D#Q-Hn%H zkSVsXsj|*!vMO(~AE~1ssYCqR1Oyhy_t5}yt<#JDKgmKT+5G>Wgslc?0m2|%4mc4E zI8jKbQVclL!~E6oAOK`jVO9D*XLczU_5l}uP?B;LA4-%TyOu}!FC)C09RLt!A?R}= z7y@ZSm0`x2L(4^A!9`&Kq>6Wq{GTuXzjy&ngfz<{*~Sl+E!Oz2TKqt4aq?ir5dTR6 zH3-eyB}t!5zZ&B~PT$Kd#mt!b5vHC&-CCNO@z;WOj}7Nv%n z<3D(|Ks~~iGi+Po3_zs^v&`RPaPM{hJA8yeb~9eY>CXxv@ri~u!6YpvO(1fOK~BhJ z83Yy*MMX=>mIf-T;!+p62K=2l2>=j;`WMCjmHmbCKNJ_nhtm$z)Q_@`(7$IDz2m$m zHNB`}h%6u!({q4O9M!m=?NY@fZClhhuS-{ys45FA`sYy~qmr1#ia_K3b&`-&=V4$8 z$SeM*;r>uepb<{}k2G;Xpn^^bN>i*1YHR`;>Ka<^_BttUE6u?Mi*6eWJ{t>BMjt}{ zcVPXu=Kw%X6ZF?76HOvn1~LN`MdAJ#_`f{I33DKhU?`44u8u-snttq(UFnK_3PVDL zT|o`YU<%7^2HRYX(_n_fd`823&fR>e$y~45N2lpO4)f1#HWu9ehv&Sz2pLcGj&wZa z|MHw%n&@rrXmXi&3Y~bW&&ify>7{AeN2U4j|C{Gng_op;mxP8NghtbZC0mE3m$l~G z4OgAC{a@36dybSd1t@_$N5Yxne|Sz03xOEOo9gHluKvwYU<#yASBVe*(*OWKPb{L` z-*rSqm0?bmV@{PpLtWti>@gtf9J|5{J4mrf001rkKn^l;5Nfz{tf+&4HZ03N1ymjn zblxwVpb}IzL>?qE*H{s1ftGllUc{?SRT?aD`M@Yju4odZpT+tzd)%;~We*ad0s#22 z46^*faUPc$$`v1Hfy+u96r2-L=b z0|Y^%B72#ElOi+#07(xR=p#zQZYBXhr3P$%qL@fvm&2r#!;qN3G+)3_SV&?YW9Lv& z*BHUjm{ZqS!B)^{qEx_8P`Fmtz>v_u(wIqB&}g)uU^ib<*I2{Wm}@d$!S>ZkcH3Z6 z&;i}fgQ#u`$v#H&_6Di{VWoiimldbRLKBCItA>h(xsJMqj=Q}R#h=vS6yCZcLJhTeJ`t{FDs)jud8?}qd#f-Ue;DQ zTvwA(ResWRj?hbg()OvWs;a#1^qtyPdD8E6(#HIy7&uZ~e%w~t*5+{1<}})5Pf$>H z+(kR`vu3#N{G^Sk!HrZ!!)-0mU`Goy4|^kzY`weSI(xqE%BNuvgXw#o2}gofP`7#q zd{ABg6`hbVcXW|uI%uS2l^JE_Cv^^Vy%i^-DjGfpN#+||209-cHn^ho7NYXYj@xKQ zx)Mp|&+0~^nWC~D6q=38z!f#T6F{sEato0~ zWs3?i*Wgk!0y7FCkX&<&; zG)TCbEl2UZ%{xKQUSK}mMYeK&Ry7JlFtzWTOZPtiubG?JF!axxRK5$Rtxbvt3EyAV zjpRw3HUY7USB(Vq(6ehTPPPFN(p4iG_m^GlIBsWkE8b5LrSiGI*Xq3jq-ppR8bHC6z}B)g0iB->34#v>=6m5 z4p`*+PDoUR2LNb4fg++B6*HHBxLnYh2@d%DzGlkuz~m)L0{cl4<5fZ8KvODpMg-}u zPxGCSsC!BRf`%Q3J1PiP{kmeZm3`W_Ris7pCKVhDAP_h1r`yVc2)1Lb0Kh5~44?)A zUxJew2acBA?C&J}NI+_gWC_7E31>OT6oUo!rGjFdVx0HT1N4x6k3S+o1ki0ih`@6| z@SbJ5ME|eA3W~GPG(k`6ejI$*e^I$4`rlhqyZ;2~ssC>ON6h}eqWAw( zNzb+t1iAm20ff8ZVE}J1_?lAOKs*Hc_c@{>g95$YRM3c_34=m_hlN2P^W=%i^3YI% zPyz&k-~;mLL|xf57gbeS%A(}=rDIlCmI1^YhO%g0)dnPm7q+Nj_FdGXh%~ThUN?dP z8K@f#_UxmpJDGG+k?AW({LMU4e$^!fl z0RX2(n-k#tAW2_lP_kT5tTUG;SZxTp~*mrkbklVWvr>ic*%TEK6@i zqNXfOT)?z*MWg#DXsb#B3t&biW%CyX!^9Z`2?~M)0&;75CRy|$A$QSP;Su2nf?TGp zApodBgNSjV+KA{FW&ZglyZ~+ekApCNh*41u5eSE@Jx~U#ZX`h@kffn~V3@Ifffx>+ z+ek_+Kj3&Jije>9tib@F4QV_Q2^m>BPc(82N-Sy|T0D9JMj{Bl0Kg`g9}2*a0xC2# z)FQf|cL#z(+$^Z@*DfUGU-Ekf3;S=Y0{OT6Z|5y6_>cU)^L`h@-{+Dnb<11~)(IlY)Ed}vd*5>ZhE%kPUmq+_WL_2sGY^1QUvy_#U~e6r zJoDK*H`{Fnkyj%CnX*d1%j2232=2~_gmv#vNWRoX zD7;s;@V;hz(F-edlvt)Zx};{ACV!COrhW9)nqNujbLZVj$L1K_IK-XMGh zSN|dh*!$8#CD1QOlo=+>crd?Y|MiPTouax?kD8CAS-17XmQr43$Xy?gH?cQ zyf=jBlbho(xBM;h^(6T$wXE6I8T=lb<8*sXCV*bobhcdO3~8Yo>LbN0+(%hkw~0hF z&BZ7dHMZoIj+gHESC82+FC##ZiPHY9XafTBZTDA*qe#O|*O4HbjWHz`gti33UsM4L zzk8WroHl+_&r2m@g(11}YO&+Nd;%vX?(}s6J5-)UzOt{To%4@k{=T918hziNT(ZruG#x3b;{>7+pTp*xlGeb-*-U!dEyUg4EnqfQ&joQ@ca=}aN&v4avUfGQv|JD~#MDvo= zbq~=!QFp=#7j&`mL1RL-beyz+g#kW&asxXYZ#P_5Tq?s|LMzBSZZ81g3$H8~&NGa> z1%fp$eS5!!XElBAw@U}`hb*POI6MPUTq9{a%__S6 z?mJR)hGWgRAm<`J73t4-Udua=gfW2Z=NHdGPv10vr_>UdFm;c%@AhtksHR%(5%r9G zW9`tCuEDCgP!zh$9=jaVZTZOQGd@B2!quF;7n#9mU8AY-SeI5eySgtEmkZ;S!Gzen z>nMVzp{_6))sg+txrNGkDK85Z*oZum(Avj>2uIslKJdqNhV+BW)2@X7Rs}@~|AXFA2 z7NV+Itsk4Hn$r>FqY1M~Yz?bdb}K7hvCd>{TlLLq=OfqZUr&Rf_d ze+Rw`37J<>u9h#GcJ(ew5qK56yqLvq@quxn=<3dkfLGhjGtc7UC9{tkCVZXO)ISQ# z;v3?_)BR_)epl2BRjp+$KkodVUC=sL+^8gnsCHzX*cWQhJ?mf=Dm6yVN)n|wl)DuR zk1S0PmyR6IO&2bgT5*=NY%&tJM#pYj7st;Q2_*6X3<+2{8rqX;&yp? zbJ~+j4TTQ|HBi4h_vad6)|jN+hrt$^|`S0j?(`c1*RCobUqr5lp13Ubky_b$&(Y5PJM#@;KSQ`n9n4z`@JZEH@}_%ViF zor7k{NBTr(ij#`bz@|e7-WGVFRBZ0MHSpc*9yrsJEI9|~Pk8Lpy8@|2HhqCTP_0E2 zhwia_-KulkYA-ZbdSY@-f+kj{{hxnSy1P<{ocDhCpu8WWPRT^?MW=F3oJXJApS3op zV88LfYwo8XA^tcq;cLyWlT=#VD1#N5MKlRUX=W8({B+1d1aFVeZn>k!zLiFRWlh(V zTSIU2)L+u34b>S~kca!whNGQXcId?|V5d*jil+4t{Ve)2jY-^NJ!b_g)6Xskf5he? z-VW;bW8N0+UjBSESPxCf(H}hTe<+r4tR<=0)J{W+eAVL8{1owKP%%l*Gmro45}SRv zWiIQQazPY^w*&6j+-vxw2riKWuR$X|z1SSdr}*GPRHtL!aY6YX7Ig5O`c50y8##GS zvn-}t<95{nMu&!CqsFkpl;qPfB1wjMXEEv$y)6mSg02BXNQ>S|V4E^{*$Lc6PR8V; z&L2~iG+q_?+}Q^dCMl8z7UfFykqnPRAYG1V4Rlelb`b&D6>C){ssUh|2EGG7KlnLa zm(xa3+CmdOy1o5Kd!39p#fV%m{A&LBCV+*<=k?-CRw$3mYuAfHWpNAK0umVh5yY(J zm@-qvf?~gpl(RI~79O8k#l(3?n^=s%CdnDgvzvTM)b&Pa&#s1b@?+wsEh!!wl^CCK?P^9pJd0Y|qNq_sj*piS97TCqM9`73*{5(Q7Hkvjd zbv;dQJZXl}!i9(eFS2&GtRXW~Irp37;l|vq>z&Q$4&la)KzCca>~Trr*2*8@+&Uqf z2T9wgHNB#f%udCqCLvLONH{xUi9z9CZHtizyEp904iQt`Q z59V#evQ1HFZYe;4nVK6v92qUGgfm}fQ_Yr2wA>`395BU|>X%xwwnkTuIyeEB67=t1 zoE-6m6NZNU$#)bP1cdDfKRDh`i4@F82;-+Qh&W}SM{L~8h__S9J$qo3^c{l#R>qXehFOGkk^ReQS9&cPhg}K5&JFB;bovpe;=Q!th z=B|*%&RY>F$MgEMRss;t=(Ad-IhKwXIUlm<_LpC#Q>u&&O@^sl54$}R!j}R2bcAThp zU!-3SHqyWqV`Xb1TK`PV+M0kU*6V_P4SYDY9|QJ}kCm)2?k(JQuWcHfjU(ACBhX%t zsxKa#kpukWIcM59;#s>@dNm;Kwd_5M%dBz6y2&|JPmrF@^z z68h?upFJ1nV7~_a0dpDcOMPEfztb^JNJxiT9JE{cvHM<^4wqA+CZ(f7IoS>XGw1zBwi9`1=8Q#Vc1WL531h^SEU%c7DE2!+ zL+N%OMe}{W^qS@0+4?orM`=dM-@MG>HM7?}jI?xaAoO80te)Yn(l{u>-H8((z(jTdk0#2A4+O?p}9*)#F#H+cV#;@PBYS zdp@0dFrDL9D-~cgX1FyQDQzGp`+MwWbAaaT?uXsg>t+rnouB1XGoMvyw4xWOYbB@oi^)@oop{4)Up27@#gcn%bt~3}D?j1lN(+ z95u~_q2BjAQkF_?JraA6WS{loV!AX^;fuAEGqCFi*Vk<&26h@Qu?gs_-L-%@^ge71 zgUkGS*)lv8d}_nR!{$?9q~(aVyK3p?hx~a#I<`RU!L1cnfrEF=AMp4T91OT5bj2CE z^Qq+bpsD*tI9UlVPqkGhn8v&T%-@&0dfD6Q@69~hvixl`rY3d!hHrS5a{NZ!i1u?_ zEAFk{JvQTn#T&P89Q?`610^NW)OKYaS9eC)`A;B*?s0PSUYU~6xUAc!quY9J?R-O9 z1TAg^?~Cew*SA1$^H~T<8H}KmHMK?qod_)HSa%3^?_d}YvR-?9gV}R2gaox_Z=7J> zDlS#uQ3Qtg0OUJMB_X3@GRN4_7{p%h1s}4kiAQlFD3}V&y~lalNg}OzdPU5-nGdcy4)< zm_L&jgB}=$;SQ!DlS^E!_2BZ=)yL;6sEfV59SLllHJ^Tu+HVK()ytp485al`n$~;! z=dK=k(1LNE_CbTQ16r7xY@__=WrLm| zkQ0Nh_ahGo(07Spk`gupD;qcG?cM&)+2QW#(b4|;&ce##{%A<&B@(-{S|1@%=5Oj>~CQBVo#V*MSI&m4E^jbfe8!9ZR7I7R^$vp$}Ou(pD=O}H}awIdSzluSPa@|Du9EM3(;X9-0?ih*Xt!o77IKERzPQ}pe9Cg^8J=*j^<9?5)6#k5 zMWk@D74~b}D}w#BXq=mnj=g;7TCUDYY0Xt{#~PR(E>nB!qWc>qvtnTv18yRYZ|5Dpj9LMvphP#Ce6irmTmnR22Ut zRj<-utKhiPI$_Z1E|v^IdxO75-XsA|!NACGlVow3`_%nv`=_d>b)V|?Q-rE=1d10Y ze7SRWtGX;qx&91~9L;>zp+7nD!oJbXU3TplwlaxyRfLUv)?iY^BRF1P)QMCFWObK8 z8T-1a@YwEG*zk>}Z&R>tjK!P79|0|oulqH2?coqh6Tl(o$4MDyemwp`2+DqBFi1_! zFHYh*Ld0g6;oBkZ>KrtOnV}4gzsE|G(5gbf)N-?pqw5v(G@WWhyfSxSzi+bd{o`(w zL<1WkFOA~AZNWi`@sg*65VwR&NoJaZ7I07&S!Y5HjPNw>#!MO>s5FcH3ez|pVc*$R@A1pHsqgIYB?yC@O-Jr?)J_0CYdOnkl)L}dnH<#+s!F; zN>f=#?K3EvZksi=99*T}Mi#rBt<-l7A^r#z#+)&wK9a215dr|3i*j|-VI^zXD)JML z)H%n8TdWNzFY52~B@)bI#Si*1vo*FuscWL5Jq0v4EEU>=HF;>s+Dc09`V-rW&EhR= z9*EKB(@`kB-n-tE|M1Eu6Xbm7jP{WTdr+#&l^XfF%o} z>_KN=FY$rL_IADtk*Hm9fsooqImDR1#t&-dSdi+^2ai&QhE2XoU_^I62~ zjwmcBHw+}J>Y0bIK+ddN4Rj0R0+Z)8?xwf7(ff&EnM~W zJS2@$ZAliAA$<3Xxlaq)mr`O}2hIu++pQjow9$wKq@nUI>>3$Kk|7Woje5~mVouM& z@&`r2&Sd)txP;iBZ1t=A7tlP~!w90`B)_bcXk?Ec<78W^_UiSVTSIIHPA}rR!U^)P z8WMSrYX^@6!p@HO!VKYvP}UX)+eWD*bE%I)az4VKl;ut3VGQUFcXkwSp0skAesr&C zpR*l-rF*!M_3L}G9NpMo@c{t3^yWfhC}5c|&C8bR3z@F~KTSOo>F9&zqvMRfKJfX- z8QEt|KaiLIz&{zwaCo!%_HyCd)NS=PP&3wc@?92gKBJlU5x*s{M)s=K0G1cl1Hz>M zbAi-~P9^DZ{9fY+8=w;Jja~Ru7J0qjfR(U;H$6pV= zQVO+bFZxFus7A>yNqm}Jy>0Ul>^bPhQo*!vt%r8?zPK8V=n00Vrd<2{!(>L1Kw7Uu zsZC9V!ykUiSTB}Q_dH&`{vvE|%gRaM7#a|Qq$PWJznfjGsn-w!p7a@BvHOq#uNiKJ zVYzT0!tK&+ZkxW9@&ZzScK%7#gr*|ZhV2{7Oq%!Q!Y$^AzHrg&=(;VhXY>n_#v5N0!+Pwnit z%tIp?IK;&_E%hr=FNIGy);(>wthLm&5epl-xbRgR`2md0g5B$L$fJ>yWFGz@82ZlZ z-FnBUio3cZMMlk>#QE-Y#g8F)o`CfX^I$qu3?_*L1FW>cNZ*o_@HBqKGht}%@mc#FOA7rh32 zi>{cmka{DZ8b++Si}uNX0#6_grJxKqYEs<0dNb1`k(ZNi#1?TN`b=-};d^EMdANPs z$~C^f_r{R(tO+sK0gC}?dHe(84vUR_qBqGc?w4a1G}$KVXj6#fDA3k7t2J0dg^KxB zsN*>Bh!_>uiZ0X+1`NH{>PzLBX zx=plOrkwQNm*sO58^HU41G*xxvJu&@{K+zuI6k-5(p;d^XlVEbrwITR{OY&1@aKt3 zj2KR6uV!)<-f9(IhEBf;ny<8tMvP$FT8dx6G^fKey1=V-)MUV=t>(q%+i$6^HKLdG z(VgWiFppL6jygXF?^a^9ih0*y`*65R0kFqDy9gUbiYA0_e_`@hL9s-^=%q}%s$uFw zU^9>=&-DE5UZ26b9tMj@F2DcH=Ll(F@aW+&H1OM}Nln=YOQuHO;+MK$!ND>%eI4t@ z#&tvJjl^?%y!W#cy5J0-tib4UMw#t5;bIPWJ6Tj2!`_fEl}r22Q{q z5{}i+(FwC52s-+l*M$rXJ)VBsrVmMQl0CvHB~!+~y|wvkE3|VehN@E2n~!Wo3T<#K zIQKbq8z@7cNqA4fb*R_yKh*K|FMn9`8yG+?DkDWgaG$m1>oH90?;sx}EYUQefsm;A zCSh0>?qO0MJ7fSO3KT>=0slU6*sT!d0$H4U1nSz8GmZ; z7&1Mnyq=I=VS^-4R5QV9nma!>Q6cbiybxW0lc%yW>@+~4T`l~c5)-Y)sdfG-VojKe zYc)XhtEPOLbgBNIkO0K^(o>nUh|srmxkJSfoYqkowD8P!wCzBxgaqlOlB}wE`4_hj zn*CUH=YINLS4kdliOi%PrTYjkNOc)x4a-EfMmI_cch2<}G>VAmna&e09mB#NXUe&^ zvuh<`OsimUuii-pR9qp5v<+OgiN-~;#Ly>#{_*LFw`mRNpkE~-s^6B!s6D<$j#LYD zb-S}&72cjaUQhgBV=3L}(1_vp+x2P+6`&32B=$Ydtx<_ga6q73CFej| z=FdtI@ddm6x+l%gvJ50XMAum5>(}8D$jCU6MEMrj7T`F~uDzd< zjMPoxzAkB<2DSN{WVpC|XHP_H%ahJi>VeJ!=c*QcWXeygn4jX7^NsqDTAN4b7wtwT z_xCmy3dNJq%h~#N&I%1!e6yXVJqN#&2%Zp0R65g?dy*5l3j9L8RY2Th1Bi55C$S^@ zP1TW&`e9usO-N>}mb3!Nb9`hvJ1=z6jw_jN( zUe}4||E@{eR?!swp~P5w4OfizMDU6!o-1lL(vlt(p!GySxG{2LE82mMEG$GRJX@)U zPT!$TS}Y&FAb#!~082%hYYh>wTyN`g%x?M)09$hp*w!qTvA9w)Bh#5}U;>f#>Gm)kIk~x4Ex&dSS{b{oJ4}ZrU4?61S6+|C(Cfh#w`c{z8P2&;usi$P@CQBb`#-`j4hjp5U{bg{jwE%Ri-hDgapm2 zL(lg~56^R7J<3g+_lZY^PBwkZe_eiJGD+MzfT1Rm^GYp>ch&mU^lO_jVrQtDAdQmc zF+ZE`=)om~z64qWa5z%Ykj!3y%?aG5KI0@WF={_rqMq=!KWNT>;W+1q-qbHli|?mA zU+a(GoR7rCTCGP_6X4sgV}6~4R7gl7Bx(G@;bmHr<^#)agN&kOAgUUmB7(Ds0Y{!7 z@heboGu|GZrnDMw_=-r9s_N|d!zYUhn$Ljx=NGZX7udo%SYcrpfT5hZhG_O%1HvYs zSYg(gf&;mx1_`|qor-*DGLA|5?R{$YelpAF?gOTu5A7ZU2OX2a_siF#U#t>pMD(1c zXKYXk2?N91Ts=GiIsR2QPkj4C&kuuBiUK#u(DM~DyhV>=JeiK-duTJ6@GPL$WqQd5 z0n?_A((#i4VkF=v|vlmVd&eTys{|9LPoxl;V878#V5Vw0OJuvAV{-^&n==b%1mO z7T?~RXU+eS_}p!NCe&ARcu<+p`{%f?fJ~q4_jI7(pBx(QKq!@U6pUB}r(y8xLA3sc ztmhq^@7r$Ejv4qK1}l2O7>PUqk#6qRK?E5}Tr}4`gR%>fClm&xCjE&eqggN?QGYjd z94<#-kRNnTdqo}YGU&0j+mWfw%(QS11I-I-RD--v#+)jOD=$U6W-oLiJ1g~f8@>~i zVd{-te~$w$T|;j&RHiU!9P(oUeC4o)DA-0@0Iz(#h3li`J@B#f4HYJ2a@zfY8E+R$ zE>*gs&dD*=Uww|oD-hgmI_kUZL#qYXwJhg$bb7E1mbkuaxaGwsC5d((PWJ{Ma@8e3 zXyJT4%jJwGIIoB-1QUfB)VVWEHHTAE!?(5J&rwGacMm2}LK^Vd`3-}l)=n2zMS)0| zZ;rmiD!jJ0KPD9bf_i;JFbEgmR@GG4Xcg?x_7vaU2?WfS z=rp-sAD-{aFZaF<%*GX-X$1s z8FO*!{it(Iz=NNw6yqK{l)=nrUG|Nq?w^Ba;ZeApplI4Hw#|smhp+}e(l>znA%D+$ z>Z9|xcA3DA_QTKDiEl2px%ifgiE^31C=mF3^Y9PkBRe zl@;}aQ)2^<{}cxR9}D)2TXS7E8yRpqH57<{ce#+)9pQAaHQM>++x=+09{Paj!por& zi2-HUjZct-o-Bh|IM<>)?t88P*U*`1#i6EQt_`{JTVwq0a2hPe3>jzwda02ScE}m{_zoFDwPR8H5 z&DZtBVzVUWX}!bCwg#X0#I;-he4-(lK5J}wseGw=tacKU;_7#uM4y;$6vsY+UKW%K zj~C{QBdau{;KoK@UM+u-fG>pPu_eBplTZjN)6!qrKp)^;Mh=6AhWN@$F`PwAla++t z=To*<-K!)`wxYt^YRm5a*GKSB_d7TxQjry>3J8GMOAJEEBBSt58JS9fT8!)`eLr%BjkHR@yv z@+@Zu3S%>PZd6&liZA57Q!ZjGBl~1uVSoGUE4VwlB$tng<6A^PygwP^CHHV;+uov8}lJ0AJ zG{94P1+1v)s(3o&=Dq6eA^^P7QmXokbQNL^(5{uv9tPvts_PY0RK|ys{TjT#PI*eX zQaW&Mk|Jg+neat?<;Cr17jWV<3P&MqJC;N<*!g_frFs=st$#GnJBeIi8h`2IC)V*; zEJ%>o-cg`5Uoe9lY|A{JgWWRCQLH1TFr5yH`&ab5=zh-+IK5H4{#<#=qi?lql2yl= za-b^HPAWn2)uGy5-2~Q$yTUDuq`@W!q!gPTT>{%-{XT7QF)Z|_lv+DDl(`%g@ld3s zah0b`VlR8NFB|9+6r(gGTd+!Vv2);0-Ua|?rbXXIs(1mfyupJ)5QX1dPpnF2r zoewt2X^%qV=nBj5+$3(BoC~|lCFP41wDa%caxVHBQUb9uUL?*%-FaTr!)EFeGB7_@ zF;lUR;7fds`Aj|kCE#>ayJ9ki$kGw2&#*(iRsC+T<0z3;#$<9`N|_3}r%i5_S`c&V z>&RrP!3wVf$Y@Vy`6M=Ooy7~W^=Kkd4fA|=-|Dbx<1xxWKlN7C^rg;(eSEBRM+9{7 zQmRI=$3BcS<%O)^evIV(ZUm?R%p5nWu#<_K^{<_JHG1Dj^zR35-S@9+RX!xePrVKM zT6?3@gdlcj7FnD}nPgJTvnY5?tw{XljBP9pjsI{UvzcZlLk7-hOPV;;^s385*(jlu zd0E!-!54km`tBo5ESUp(P}V3JPniJ(T>EF9pO0vOfqbRvJ*&rjBA_7g5MOwwW5Zp zLi`N;i`N#9bC?bCUAp*9FC&59PQ3dClcUR%oVv2Hgz2_hsV|@~lrNazzUGj7WeDfk z^Cv~vwDO8Wk(i1JKxsfXt*YG97Nn;%`>@;YP{MuCg@X^jI|aS<)y1m(&5$L&vyy0Z zz-to`C8*Uvy19&kQ;?OS;vViojXNBMrHp85m!RBg1lkVWXxu$}O1h{T4{TFQ{I~s| zNoSoQY^*bNE$050WBXx;C<+xZI92<^2l(F}7oT9a$i-lgOVSt8g}mKp1(%!(6PreM1~j#ql(<%e8uT1G zo69OvmC5uK8fuCk=2Rwsh>_}5TgH88UUfJ42Oi=~(Tf zAyuZawj85XHd>AQX;)1;%tSesb%(k0_G3lDRcpROK*m`17-w=ZfWNgeg*qv8n3Dz==w}ZL%XocRLCg&Ech;g7QEVq*JJdp{(=TZ%mvvJi&!c-q{jlxLdt0qWBk3N|i<%k5t ze7I|zZ}|MXrzs9vQ5fTLmqjgvAV3&xCrqzjDdIq;6<^+Fn#s!?mHXApx1MrV#beUt2RhF>o+>T{OBdKpf+8|G?t+fUXY?E`cqd{ zz3U{otyxow_Q|6`0limZfWK-vNPs8Gq_Vsn-c~EP_e<@b`nR+wqQe&Y;{u+dIw{S3 z^y(ey>{erX;oQLVZ;oAf+s})$-^heC9dSeK)${fGOs&2|33&-%rOcpGV|oa?6DN=; zjl?lluS~O{l~SXhC4 zrM*%tJkv2$N8mztD;BVP(gacW6Uw*k^tXt(gp+eHBstY8)k;+9k4j*q@^Txg6y1{d zjYye@Pu?NiHm_K4+JGgLLDEuzwcng)YP=Vswz0)bs&|+MA>i*J2ILgx`+H;m4lzLg ze*lm`_EQOcb!B0CadmQNW`1;LXkuY-7{ym7(J*8bNF1;t@2wl6;AaM9=3y-ZUz2zkRUK!M)h{aC-fxLP>!HJRXV?8W zE8%0@Zb1TyyB3$nFqiolL0zb(UHqxvPgjM>chogG{T@Wav>*j#3j4)}b9?;XtbDj) z0R3gw`B^4XtfoS56G-IN4xM*5CT#al%KhXI)zES?TM-72*S;A+cf zZlxEGN;FGO4z^mS+Mc_iLp7s(YE%+r?r3sz+ln(_31Whs3wECoI#=(mp3T3G3|=3w zF;Ps>TS-#mv2`AIBOX77@Yp)zwYXvWNT9LsExH+wSC!^&R5vF2wB^@NmMRQPcEGy! zuYL)I?Vlm%^epzDso>AFXQqEzQ4)|p&+c92baQ%8dBhBBg#`vuxlwqm==i?Tn1y_q zuJ*nAp$gW_%QwBuZA>B@L?RH@81p0s=1C`qq*wcRbVdd)s&WZC0PH^MHuUawL#|eQ z^8H|p-@6lIz>F}qSmSoGb!ujYdAiGF8*uR{WD#j*%Om;=FMf}iW>lq#jit~=EUZIS zO}H%IYt@i}(ZSS_i#59VA8jxmy-M%Tp#YB=u9{1v&N=G-5d5|iWU5wCwob^t*gc1DTCLNHIuDh?HjfZCs1@lf?tY1^(sE`sOXtwS+y^Iu)+V{n-=6qsEK zPWrT-HgEc$dFc+77RVG?(d8>q_mhZy#>Pi^+S_m%{X(yhxv-=TZ;}6>03QqB^i&~s zW$>DZlpIr{=Px?jnnAn%Z+~}r^{!Vn@UBx8dM+I{LP{CUL&4 zpQ@wRO5N4=Us9_$mLdT@Np#*vm_R4kQuEHj$YmYIV65=8h)P&3m~rXW!!I_E1LKS9 zTdt-V_ukIpRPO9r*D_MiHx8PSeXSJUk~*6Vn}ycF9FZcaO#SlJ+Px%XQ0wU~ zO04|NI#R6AS?}aI;JwyT?_M+Bl$0RBsa(Xq>yR=+()6N?5(cYpagtUl9NF198P&Lu zv}>YraPk`_a?5Zo7(8o1F8f=q%xEgZHdcFcP4#mcf-~n5bCKtiRd?+xfNH+jhazyU zM2aEWRBKNfqyw&UHjmIQx%2{Cv(W&)NW`Y4JV0BvA@12ybVdNz{kK(xWb;ndUjc7G0e@Z1(BQjNzJ}9aa_kSQ~#^p7uCEaFY7N_O{^Nk z#H!cCPD%ChmC3(;yk8_TV&eEKZB+u>_t$ywB;cGi;? za0v(z!XwQLS&g1+S`2E$;r7c=QUj)|drB0|ts~MKys0O)!3cu}Fh_D)?>4Sur3Kv# zP7*_Q+^76vok~X(SJ*43R*S0`Hu>Dv-O(kEdWDq5Nld*P`&{wS=0qN0AGNM~DMrHfo;a~WX^=>KtcWSbMEJziY;iv2G<;%|?b0Ub z<5EDYHYIq$1S9j9cC?6(K^3frXj;JnEx(&#tWP=H+prtE?=N3rC8l)j-YK4GWmLYX z%N6Yc;x<;>Ie8VI|L!_p;PjCp$o$fB1Y+(4{z%lZM6&|Twqc(IW~Y=IV619O%i0*F zfck!An3#3Ce%3DZvmY1keVwl_`BH)rUOemLZgEwd!KMb_i^{6NsoDR>pU{f5Q|!(z zBP@LNhu76BSnEm6mZWG!1qib_zI55%x{`-@h?}EajOyq;r|W-~yLJE5cV?iBG8NuP z$7fADcGUrWb!8WPJgwkv(-7UPbMDVR2F0 zN@>G%FI|5!PQKr{UeGJ_DmLP<^e%})onS9Esm25m;2Y@219% zc3$*gdx@s?S;zsc8eF07eX*b?&|V-_mwEZZ%nJkHqc{DSBC*LL#HC6^T~HR}HW4EQ zK71ic{2e7SLNXYo6efaA@uC)!3RC#Mt?$uVow3+=8JtQJ0NzM+zQtt&J($nnI0p&< z({W5ovk;`GDB|+}<@tX$-Q8wh`DJ_T-12wh>8$%b*AFh2&VueIOI_rxLl@TJq^sN+ z`c-33 zPsX84f!l2$oG-O0ApKe zDeZe&F~wl(g9p_1*3W-zzAYb?Xdcgh|EH~uv6#s!9}q-fr<^lA!lHUqImMqsZZiFTQOX4*^=K+7 zq%If9@WDl}zp|GQMY-Yk+dYZTfZ9|M?Q%ExU!)xa@ZP`RMr>`B+;MtCw2g^_V@UA- zMh|*+T0F)pb*XC1)5Q{Sw*=(qb|q>=AL|tZ$m7nClklJbUPv@`3MN5Vz091G!wGixN zruduq?@vnj@-KH%_D}b>GM^?JUU_DAm;NDS4wiKqJ8z|?2)ibW^=l4pHy4bg^K;X( zT8g)>Etx2JWCLa0c@ptB*)sVMZpwDptev*wwiJCt+JYqItz0j{!Lir;Vt;ZQaoxL_ zo{c4r?kydwB^#CFF=)y%%Po6y6R?=uy6F)PZ(+cpLXNI(Zbvu?g{wX%yL`_EX~$fh z1?U?w7*tW{cv!WtN5C74+nQ%@z2+YI!8s!UzDR6oj^_yg(>)8OP)5LXD)-9QtW`)+ zw7XY+{a0V-+w}9p>@UrH{paTQgDh8leKs%q+jjB1&8-7j_S74+k#0GKLXK3J=@>>t z2Z6p}U-Uq(kye=XMxD7%OGPDKP)7XLXsHJ>;tXA;U%#TM^`SY!koUdfL(l1>wE}ue z%RMB$W_US=XaQdEL5zHMjp?w<%vv2_M9Yrss(}_D<>40>{tj@}H@j&Z9^Bg~1&U>; z8^SUy*pIVLB;y@^cbm!pR4!-OZ<=V>&w+wiM^J3es_OuY_5QM|x9cvl;a<9A{vtN1N;1!kGJuc{x{UWOh z11oaGNZ}W{kz9kje+q$em_2u&G|4f35e)zycpT##O$&f9cMDk3Z2}NZdP@M`XI92h z;KIcV51sw<`rqGI&t^SvAq=~>d7{)UrWqzFsZG%I^~8;R)CWG z@0M}J=F1~GClb3zA7C6sVffn8wwVi43{!1sUFZG;q?49OIU4zr=i^MX_@%`bCOHGX z#qdARlUaDW$cR{Du`T{7?91@uPRoK(q^vG59gwH3rP>Xep*Y=W*CT0Rc>;jrz(xk} nTSL)iuBuM6s1x6`GcwA<{Ystz9o}X9?