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

A horrible wail echoes in your mind as the world plunges into blackness.

" + world << "\"VYSHA NERADA YEKHEZET U'RUU!!\"" world << 'sound/hallucinations/veryfar_noise.ogg' for(var/obj/machinery/power/apc/A in world) A.overload_lighting() @@ -147,16 +153,14 @@ usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/hypnosis) usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_phase_shift) usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/aoe_turf/glacial_blast) - usr.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/vortex) usr.mind.transfer_to(A) A.spell_list = usr.spell_list A.name = usr.real_name A.languages = usr.languages if(A.real_name) A.real_name = usr.real_name - usr.alpha = 0 //This is pretty bad, but is also necessary for the shuttle call to function properly + usr.invisibility = 60 //This is pretty bad, but is also necessary for the shuttle call to function properly usr.flags |= GODMODE - usr.notransform = 1 sleep(50) if(!ticker.mode.shadowling_ascended) if(emergency_shuttle && emergency_shuttle.can_call()) diff --git a/code/stylesheet.dm b/code/stylesheet.dm index fac26760073..9ba50242b59 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -83,7 +83,7 @@ h1.alert, h2.alert {color: #000000;} .kidan {color: #664205;} .slime {color: #0077AA;} .clown {color: #ff0000;} -.shadowling {color: #311648;} +.shadowling {color: #3b2769;} .vulpkanin {color: #B97A57;} .rough {font-family: "Trebuchet MS", cursive, sans-serif;} .say_quote {font-family: Georgia, Verdana, sans-serif;} @@ -94,6 +94,7 @@ h1.alert, h2.alert {color: #000000;} .interface {color: #330033;} .big {font-size: 3;} +.reallybig {font-size: 4;} .greentext {color: #00FF00; font-size: 3;} .redtext {color: #FF0000; font-size: 3;} diff --git a/paradise.dme b/paradise.dme index 131d5139d79..dc1abbf3b06 100644 --- a/paradise.dme +++ b/paradise.dme @@ -352,6 +352,7 @@ #include "code\game\gamemodes\nuclear\pinpointer.dm" #include "code\game\gamemodes\revolution\revolution.dm" #include "code\game\gamemodes\revolution\rp_revolution.dm" +#include "code\game\gamemodes\shadowling\ascendant_shadowling.dm" #include "code\game\gamemodes\shadowling\shadowling.dm" #include "code\game\gamemodes\shadowling\shadowling_abilities.dm" #include "code\game\gamemodes\shadowling\shadowling_items.dm" @@ -1389,7 +1390,6 @@ #include "code\modules\mob\living\silicon\robot\drone\drone_damage.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_items.dm" #include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm" -#include "code\modules\mob\living\simple_animal\ascendant_shadowling.dm" #include "code\modules\mob\living\simple_animal\bees.dm" #include "code\modules\mob\living\simple_animal\borer.dm" #include "code\modules\mob\living\simple_animal\constructs.dm" From ed24ac47de08a88a717bda059aea5bd5f9dde0c2 Mon Sep 17 00:00:00 2001 From: DZD Date: Fri, 31 Jul 2015 18:15:45 -0400 Subject: [PATCH 2/3] Up to date with -tg- - Ports /tgstation/-tg-station#10871. - Fixes some errors currently present in the above. - Ports /tgstation/-tg-station#9927. --- code/datums/mind.dm | 19 +- .../shadowling/ascendant_shadowling.dm | 12 +- code/game/gamemodes/shadowling/shadowling.dm | 49 ++- .../shadowling/shadowling_abilities.dm | 170 +++++++--- .../gamemodes/shadowling/shadowling_items.dm | 3 +- .../special_shadowling_abilities.dm | 302 +++++++++--------- code/game/gamemodes/wizard/wizard.dm | 7 + code/game/turfs/turf.dm | 5 + .../mob/living/carbon/human/examine.dm | 2 + code/modules/mob/living/carbon/human/life.dm | 12 +- .../modules/mob/living/silicon/robot/login.dm | 1 + 11 files changed, 356 insertions(+), 226 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 853191a4d7d..1b0503faad6 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -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 << "You have been brainwashed! You are no longer a thrall!" + 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 << "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." + current << "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.\ + " ticker.mode.finalize_shadowling(src) ticker.mode.update_shadow_icons_added(src) if("thrall") @@ -997,10 +994,6 @@ datum/mind usr << "This only works on humans!" return ticker.mode.add_thrall(src) - special_role = "Shadowling Thrall" - current << "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 eating. Their children, the Shadowlings, are to be obeyed and protected at all costs." - current << "You may use the Hivemind Commune ability to communicate with your fellow enlightened ones." message_admins("[key_name_admin(usr)] has thrall'ed [current].") log_admin("[key_name(usr)] has thrall'ed [current].") diff --git a/code/game/gamemodes/shadowling/ascendant_shadowling.dm b/code/game/gamemodes/shadowling/ascendant_shadowling.dm index a7c87ca7aa3..0c18d927e53 100644 --- a/code/game/gamemodes/shadowling/ascendant_shadowling.dm +++ b/code/game/gamemodes/shadowling/ascendant_shadowling.dm @@ -18,9 +18,9 @@ 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 @@ -31,3 +31,9 @@ /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? \ No newline at end of file diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 0fbb94aaa2e..80c70788fc6 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -86,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) @@ -133,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.current.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hatch) + shadow_mind.current.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/enthrall) spawn(0) shadow_mind.current.add_language("Shadowling Hivemind") update_shadow_icons_added(shadow_mind) @@ -144,18 +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()]\] Became a thrall" - new_thrall_mind.memory += "The Shadowlings' Objectives: [objective_explanation]" - new_thrall_mind.current << "The objectives of the shadowlings: [objective_explanation]" new_thrall_mind.current.add_language("Shadowling Hivemind") + new_thrall_mind.current.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/lesser_glare) + new_thrall_mind.current.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/lesser_shadow_walk) + //new_thrall_mind.current.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/thrall_vision) //Uncomment when vision code is unfucked. + new_thrall_mind.current << "You see the truth. Reality has been torn away and you realize what a fool you've been." + new_thrall_mind.current << "The shadowlings are your masters. Serve them above all else and ensure they complete their goals." + new_thrall_mind.current << "You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls." + new_thrall_mind.current << "Your body has been irreversibly altered. The attentive can see this - you may conceal it by wearing a mask." + new_thrall_mind.current << "Though not nearly as powerful as your masters, you possess some weak powers. These can be found in the Thrall Abilities tab." + new_thrall_mind.current << "You may communicate with your allies by speaking in the Shadowling Hivemind (:8)." + 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 + update_shadow_icons_removed(thrall_mind) + thralls.Remove(thrall_mind) + thrall_mind.current.attack_log += "\[[time_stamp()]\] Dethralled" + thrall_mind.special_role = null + 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("[H] jerks violently and falls still.", \ + "A piercing white light floods your mind, banishing your memories as a thrall and--") + H.death() + return 1 + var/mob/living/M = thrall_mind.current + if(issilicon(M)) + M.audible_message("[M] lets out a short blip.", \ + "You have been turned into a robot! You are no longer a thrall! Though you try, you cannot remember anything about your servitude...") + else + M.visible_message("[M] looks like their mind is their own again!", \ + "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...") + return 1 /* @@ -191,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 << "The shadowlings have been killed by the crew!" else if(!check_shadow_victory() && emergency_shuttle.returned()) - world << "The crew has escaped the station before the shadowlings could ascend!" + world << "The crew escaped the station before the shadowlings could ascend!" ..() return 1 diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 1935f3159d7..5aaa3030529 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -28,7 +28,34 @@ 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 +/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 << "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...") + if(in_range(target, usr)) + 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 /obj/effect/proc_holder/spell/wizard/aoe_turf/veil name = "Veil" @@ -68,6 +95,9 @@ /obj/effect/proc_holder/spell/wizard/aoe_turf/veil/cast(list/targets) usr << "You silently disable all nearby lights." + for(var/obj/effect/glowshroom/G in orange(2, usr)) //Why the fuck was this in the loop below? + G.visible_message("\The [G] withers away!") + qdel(G) for(var/turf/T in targets) for(var/obj/item/F in T.contents) extinguishItem(F) @@ -78,9 +108,6 @@ L.on = 0 L.visible_message("[L] flickers and falls dark.") L.update(0) - for(var/obj/effect/glowshroom/G in orange(2, usr)) //Very small radius - G.visible_message("\The [G] withers away!") - qdel(G) for(var/obj/machinery/computer/C in T.contents) C.set_light(0) C.visible_message("[C] grows dim, its screen barely readable.") @@ -111,10 +138,59 @@ 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 +/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 << "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 + sleep(40) + user.visible_message("[user] appears from nowhere!", "Your shadowy guise slips away.") + 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 << "You shift the nerves in your eyes, allowing you to see in the dark." + H.see_in_dark = 8 + H.dna.species.invis_sight = SEE_INVISIBLE_MINIMUM + else + user << "You return your vision to normal." + 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 @@ -126,19 +202,19 @@ 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 << "You feel a blast of paralyzingly cold air wrap around you and flow past, but you are unaffected!" + M << "You feel a blast of paralyzingly cold air wrap around you and flow past, but you are unaffected!" continue - target << "You are hit by a blast of paralyzingly cold air and feel goosebumps break out across your body!" - 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 << "You are hit by a blast of paralyzingly cold air and feel goosebumps break out across your body!" + 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 @@ -147,7 +223,7 @@ 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 @@ -164,7 +240,7 @@ usr << "You need to be closer to enthrall [target]." charge_counter = charge_max return - if(!target.key) + if(!target.key || !target.mind) usr << "The target has no mind." charge_counter = charge_max return @@ -212,24 +288,21 @@ target << "Your unwavering loyalty to Nanotrasen falters, dims, dies." if(3) usr << "You begin rearranging [target]'s memories." - usr.visible_message("[usr]'s eyes flare brightly, their unflinching gaze staring constantly at [target].") + 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 << "Your thoughts become coherent once more. Already you can barely remember what's happened to you." + 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." enthralling = 0 return enthralling = 0 usr << "You have enthralled [target]!" - target.visible_message("[target]'s expression appears as if they have experienced a revelation!", \ - "You see the Truth. Reality has been torn away and you realize what a fool you've been.") - target << "The shadowlings are your masters. Serve them above all else and ensure they complete their goals." - target << "You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls." - target << "You can communicate with the other enlightened ones by speaking in the shadowling hivemind (:8)." + target.visible_message("[target] looks to have experienced a revelation!", \ + "False faces all dark not real not real not--") 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" @@ -291,9 +364,12 @@ usr << "You may find Ascendance in the Shadowling Evolution tab." 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.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/shadowling_ascend) if(M == usr) M << "You project this power to the rest of the shadowlings." else @@ -472,7 +548,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) /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 = 0 @@ -485,18 +561,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 << "Making an ally explode seems unwise." charge_counter = charge_max return - usr.visible_message("[usr]'s eyes flare as they gesture at [boom]!", \ + usr.visible_message("[usr]'s markings flare as they gesture at [boom]!", \ "You direct a lance of telekinetic energy at [boom].") - boom << "You feel an immense pressure building all across your body!" - boom.Stun(10) - boom.audible_message("[boom] screams!") - sleep(20) - playsound(boom, 'sound/effects/splat.ogg', 100, 1) + playsound(usr, 'sound/effects/supermatter.ogg', 100, 1) + sleep(4) boom.visible_message("[boom] explodes!") boom.gib() @@ -522,7 +595,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) usr << "You cannot enthrall an ally." charge_counter = charge_max return - if(!target.ckey) + if(!target.ckey || !target.mind) usr << "The target has no mind." charge_counter = charge_max return @@ -537,12 +610,8 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) usr << "You instantly rearrange [target]'s memories, hyptonitizing them into a thrall." target << "An agonizing spike of pain drives into your mind, and--" - target << "And you see the Truth. Reality has been torn away and you realize what a fool you've been." - target << "The shadowlings are your masters. Serve them above all else and ensure they complete their goals." - target << "You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls." - target << "You can communicate with the other enlightened ones by using the Shadowling Hivemind (:8)." ticker.mode.add_thrall(target.mind) - target.mind.special_role = "Thrall" + target.mind.special_role = "shadowling thrall" target.add_language("Shadowling Hivemind") @@ -575,7 +644,7 @@ 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." + desc = "Extremely empowered version of Icy Veins." panel = "Ascendant" range = 5 charge_max = 100 @@ -585,6 +654,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) var/mob/living/simple_animal/ascendant_shadowling/SHA = usr if(SHA.phasing) usr << "You are not in the same plane of existence. Unphase first." + charge_counter = charge_max return usr << "You freeze the nearby air." @@ -598,10 +668,24 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) else target << "You feel a blast of paralyzingly cold air wrap around you and flow past, but you are unaffected!" continue - target << "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!" + target << "You are hit by a blast of cold unlike anything you have ever felt. Your limbs instantly lock in place and you feel frost burns across your body!" target.Weaken(15) if(target.bodytemperature) target.bodytemperature -= INFINITY //:^) target.take_organ_damage(0,80) +/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 +/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 [world.name]?.", "Transmit to World", "") + if(!text) + return + world << "\"[text]\"" diff --git a/code/game/gamemodes/shadowling/shadowling_items.dm b/code/game/gamemodes/shadowling/shadowling_items.dm index f3da8bda1bf..e494c7507f0 100644 --- a/code/game/gamemodes/shadowling/shadowling_items.dm +++ b/code/game/gamemodes/shadowling/shadowling_items.dm @@ -98,7 +98,6 @@ /obj/structure/shadow_vortex/Crossed(var/td) ..() if(ismob(td)) - td << "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." //A bit of spooking before they die + 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) diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm index 05af76eb2a9..8f4cdca3f73 100644 --- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm @@ -1,170 +1,176 @@ //In here: Hatch and Ascendance -var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "Noaey'gief", "Mii`mahza", "Amerziox", "Gyrg-mylin", "Kanet'pruunance", "Vigistaezian") -/mob/living/carbon/human/proc/shadowling_hatch() - set category = "Shadowling Evolution" - set name = "Hatch" +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 - 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 << "You decide against hatching for now." - usr.verbs += /mob/living/carbon/human/proc/shadowling_hatch - return - if("Yes") - usr.Stun(INFINITY) //This is bad but notransform won't work. - usr.visible_message("[usr]'s things suddenly slip off. They hunch over and vomit up a copious amount of purple goo which begins to shape around them!", \ - "You remove any equipment which would hinder your hatching and begin regurgitating the resin which will protect you.") + for(var/mob/living/carbon/human/H in targets) + var/hatch_or_no = alert(H,"Are you sure you want to hatch? You cannot undo this!",,"Yes","No") + switch(hatch_or_no) + if("No") + H << "You decide against hatching for now." + charge_counter = charge_max + return + if("Yes") + H.Stun(INFINITY) //This is bad but notransform won't work. + H.visible_message("[H]'s things suddenly slip off. They hunch over and vomit up a copious amount of purple goo which begins to shape around them!", \ + "You remove any equipment which would hinder your hatching and begin regurgitating the resin which will protect you.") - for(var/obj/item/I in 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) //drops all items + var/obj/item/organ/O = I + if(!istype(O) || O.owner != src) + 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("A chrysalis forms around [usr], sealing them inside.", \ - "You create your chrysalis and begin to contort within.") - usr.Weaken(30) - sleep(100) - usr.visible_message("The skin on [usr]'s back begins to split apart. Black spines slowly emerge from the divide.", \ - "Spines pierce your back. Your claws break apart your fingers. You feel excruciating pain as your true form begins its exit.") + H.visible_message("A chrysalis forms around [H], sealing them inside.", \ + "You create your chrysalis and begin to contort within.") + usr.Weaken(30) - sleep(90) - usr.visible_message("[usr], skin shifting, begins tearing at the walls around them.", \ + sleep(100) + H.visible_message("The skin on [H]'s back begins to split apart. Black spines slowly emerge from the divide.", \ + "Spines pierce your back. Your claws break apart your fingers. You feel excruciating pain as your true form begins its exit.") + + sleep(90) + H.visible_message("[H], skin shifting, begins tearing at the walls around them.", \ "Your false skin slips away. You begin tearing at the fragile membrane protecting you.") - sleep(80) - playsound(usr.loc, 'sound/weapons/slash.ogg', 25, 1) - usr << "You rip and slice." - sleep(10) - playsound(usr.loc, 'sound/weapons/slashmiss.ogg', 25, 1) - usr << "The chrysalis falls like water before you." - sleep(10) - playsound(usr.loc, 'sound/weapons/slice.ogg', 25, 1) - usr << "You are free!" + sleep(80) + playsound(H.loc, 'sound/weapons/slash.ogg', 25, 1) + H << "You rip and slice." + sleep(10) + playsound(H.loc, 'sound/weapons/slashmiss.ogg', 25, 1) + H << "The chrysalis falls like water before you." + sleep(10) + playsound(H.loc, 'sound/weapons/slice.ogg', 25, 1) + H << "You are free!" - sleep(10) - playsound(usr.loc, 'sound/effects/ghost.ogg', 100, 1) - var/newNameId = pick(possibleShadowlingNames) - possibleShadowlingNames.Remove(newNameId) - usr.real_name = newNameId - usr.name = usr.real_name - usr.SetStunned(0) - usr << "YOU LIVE!!!" + sleep(10) + playsound(H.loc, 'sound/effects/ghost.ogg', 100, 1) + var/newNameId = pick(possibleShadowlingNames) + possibleShadowlingNames.Remove(newNameId) + H.real_name = newNameId + H.name = usr.real_name + H.SetStunned(0) + H << "YOU LIVE!!!" - for(var/obj/structure/alien/resin/wall/shadowling/W in orange(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("The chrysalis explodes in a shower of purple flesh and fluid!") - var/mob/living/carbon/human/M = usr - M.underwear = "None" - M.undershirt = "None" - M.faction |= "faithless" + for(var/obj/structure/alien/resin/wall/shadowling/W in orange(H, 1)) + playsound(W, 'sound/effects/splat.ogg', 50, 1) + qdel(W) + for(var/obj/structure/alien/weeds/node/N in shadowturf) + qdel(N) + H.visible_message("The chrysalis explodes in a shower of purple flesh and fluid!") - 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") + H.underwear = "None" + H.undershirt = "None" + H.faction |= "faithless" - sleep(10) - usr << "Your powers are awoken. You may now live to your fullest extent. Remember your goal. Cooperate with your thralls and allies." - 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.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 << "Your powers are awoken. You may now live to your fullest extent. Remember your goal. Cooperate with your thralls and allies." + H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hatch) + H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/glare) + H.AddSpell(/obj/effect/proc_holder/spell/wizard/aoe_turf/veil) + H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/shadow_walk) + H.AddSpell(/obj/effect/proc_holder/spell/wizard/aoe_turf/flashfreeze) + H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/collective_mind) +/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 -/mob/living/carbon/human/proc/shadowling_ascendance() - set category = "Shadowling Evolution" - set name = "Ascendance" - - 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 << "You decide against ascending for now." - usr.verbs += /mob/living/carbon/human/proc/shadowling_ascendance - return - if("Yes") - usr.Stun(INFINITY) - usr.visible_message("[usr] rapidly bends and contorts, their eyes flaring a deep crimson!", \ - "You begin unlocking the genetic vault within you and prepare yourself for the power to come.") + for(var/mob/living/carbon/human/H in targets) + var/hatch_or_no = alert(H,"It is time to ascend. Are you sure about this?",,"Yes","No") + switch(hatch_or_no) + if("No") + H << "You decide against ascending for now." + charge_counter = charge_max + return + if("Yes") + H.notransform = 1 + H.visible_message("[H] gently rises into the air, red light glowing in its eyes.", \ + "You rise into the air and get ready for your transformation.") - sleep(30) - usr.visible_message("[usr] suddenly shoots up a few inches in the air and begins hovering there, still twisting.", \ - "You hover into the air to make room for your new form.") + sleep(50) - sleep(60) - usr.visible_message("[usr]'s skin begins to pulse red in sync with their eyes. Their form slowly expands outward.", \ - "You feel yourself beginning to mutate.") + H.visible_message("[H]'s skin begins to crack and harden.", \ + "Your flesh begins creating a shield around yourself.") - sleep(20) - if(!ticker.mode.shadowling_ascended) - usr << "It isn't enough. Time to draw upon your thralls." - else - usr << "After some telepathic searching, you find the reservoir of life energy from the thralls and tap into it." + sleep(100) + H.visible_message("The small horns on [H]'s head slowly grow and elongate.", \ + "Your body continues to mutate. Your telepathic abilities grow.") //y-your horns are so big, senpai...!~ - sleep(50) - for(var/mob/M in mob_list) - if(is_thrall(M) && !ticker.mode.shadowling_ascended) - M.visible_message("[M] trembles minutely as they collapse, black smoke pouring from their disintegrating face.", \ - "It's time! Your masters are ascending! Your last thoughts are happy as your body is drained of life.") + sleep(90) + H.visible_message("[H]'s body begins to violently stretch and contort.", \ + "You begin to rend apart the final barries to godhood.") - ticker.mode.thralls -= M.mind //To prevent message spam - M.death(0) - - usr << "Drawing upon your thralls, you find the strength needed to finish and rend apart the final barriers to godhood." - - sleep(20) - usr << "Yes!" - sleep(10) - usr << "YES!" - sleep(10) - usr << "YE--" - sleep(1) - for(var/mob/living/M in orange(7, src)) - M.Weaken(10) - M << "An immense pressure slams you onto the ground!" - world << "\"VYSHA NERADA YEKHEZET U'RUU!!\"" - 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.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.invisibility = 60 //This is pretty bad, but is also necessary for the shuttle call to function properly - usr.flags |= GODMODE - 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 << "Yes!" + sleep(10) + H << "YES!!" + sleep(10) + H << "YE--" + sleep(1) + for(var/mob/living/M in orange(7, H)) + M.Weaken(10) + M << "An immense pressure slams you onto the ground!" + world << "\"VYSHA NERADA YEKHEZET U'RUU!!\"" + world << 'sound/hallucinations/veryfar_noise.ogg' + for(var/obj/machinery/power/apc/A in range(200, H)) + A.overload_lighting() + var/mob/A = new /mob/living/simple_animal/ascendant_shadowling(H.loc) + for(var/obj/effect/proc_holder/spell/S in H.mind.spell_list) + if(S == src) continue + H.mind.remove_spell(S) + H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/annihilate) + H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/hypnosis) + H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/shadowling_phase_shift) + H.AddSpell(/obj/effect/proc_holder/spell/wizard/aoe_turf/glacial_blast) + H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/shadowlingAscendantTransmit) + H.mind.transfer_to(A) + A.name = H.real_name + A.languages = H.languages + 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) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 2455637e61b..785fbb38f59 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -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() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index ca526459f37..8191421e8c8 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -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 diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 96d9f6ddc0e..c0c11aa1aa7 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -419,6 +419,8 @@ msg += "[src] has \a [implant] sticking out of [t_his] flesh!\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) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 613f0ad99b3..73053496473 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -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,11 +766,7 @@ 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 + light_amount = T.get_lumcount()*10 if(light_amount > species.light_dam) //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. diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm index 3aef61fb3d5..df9f6e050e5 100644 --- a/code/modules/mob/living/silicon/robot/login.dm +++ b/code/modules/mob/living/silicon/robot/login.dm @@ -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 \ No newline at end of file From 7637fe95829668ee064effa4cbff7e4b6837ca69 Mon Sep 17 00:00:00 2001 From: DZD Date: Tue, 4 Aug 2015 11:14:52 -0400 Subject: [PATCH 3/3] Finalizes Changes - Adds action buttons for Shadowling spells - Fixes bugs and runtimes found while testing. - Remove stupid snowflake check that allowed mobs with environment_smash >= 2 to smash reinforced walls, but not regular walls (what the actual fuck?). --- .../shadowling/ascendant_shadowling.dm | 3 + code/game/gamemodes/shadowling/shadowling.dm | 12 ++-- .../shadowling/shadowling_abilities.dm | 62 +++++++++++------- .../special_shadowling_abilities.dm | 31 ++++----- code/game/turfs/simulated/walls.dm | 15 ++--- code/modules/mob/living/carbon/human/life.dm | 6 +- icons/effects/effects.dmi | Bin 276951 -> 277385 bytes icons/mob/actions.dmi | Bin 31861 -> 43306 bytes 8 files changed, 73 insertions(+), 56 deletions(-) diff --git a/code/game/gamemodes/shadowling/ascendant_shadowling.dm b/code/game/gamemodes/shadowling/ascendant_shadowling.dm index 0c18d927e53..b57a75d9bf2 100644 --- a/code/game/gamemodes/shadowling/ascendant_shadowling.dm +++ b/code/game/gamemodes/shadowling/ascendant_shadowling.dm @@ -4,6 +4,7 @@ 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,6 +14,8 @@ see_in_dark = 8 see_invisible = SEE_INVISIBLE_MINIMUM + universal_speak = 1 + response_help = "stares at" response_disarm = "flails at" response_harm = "flails at" diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 80c70788fc6..3d85f9ae4f9 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -133,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.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hatch) - shadow_mind.current.AddSpell(/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) @@ -152,9 +152,9 @@ Made by Xhuis update_shadow_icons_added(new_thrall_mind) new_thrall_mind.current.attack_log += "\[[time_stamp()]\] Became a thrall" new_thrall_mind.current.add_language("Shadowling Hivemind") - new_thrall_mind.current.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/lesser_glare) - new_thrall_mind.current.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/lesser_shadow_walk) - //new_thrall_mind.current.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/thrall_vision) //Uncomment when vision code is unfucked. + 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 << "You see the truth. Reality has been torn away and you realize what a fool you've been." new_thrall_mind.current << "The shadowlings are your masters. Serve them above all else and ensure they complete their goals." new_thrall_mind.current << "You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls." @@ -168,10 +168,10 @@ Made by Xhuis /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 - update_shadow_icons_removed(thrall_mind) thralls.Remove(thrall_mind) thrall_mind.current.attack_log += "\[[time_stamp()]\] Dethralled" 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. diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 931f91ae361..09f089d1400 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -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) @@ -34,6 +35,7 @@ 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) @@ -65,13 +67,14 @@ 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/proc/extinguishItem(var/obj/item/I) //WARNING NOT SUFFICIENT TO EXTINGUISH AN ITEM HELD BY A MOB if(istype(I, /obj/item/device/flashlight)) var/obj/item/device/flashlight/F = I if(F.on) if(is_type_in_list(I, blacklisted_lights)) - I.visible_message("[I] dims slightly, before the shadows around it scatter.") + I.visible_message("[I] dims slightly before scattering the shadows around it.") return F.on = 0 F.update_brightness() @@ -125,6 +128,7 @@ 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) @@ -149,6 +153,7 @@ 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) @@ -199,6 +204,7 @@ 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 << "You freeze the nearby air." @@ -230,6 +236,7 @@ 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 @@ -319,6 +326,7 @@ var/screech_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) @@ -372,7 +380,7 @@ M.mind.spell_list -= CM qdel(CM) M.mind.remove_spell(/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hatch) - M.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/shadowling_ascend) + M.mind.AddSpell(new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_ascend) if(M == usr) M << "You project this power to the rest of the shadowlings." else @@ -388,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) @@ -438,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("[usr] lets out a horrible scream!") @@ -458,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 << "ERROR $!(@ ERROR )#^! SENSOR OVERLOAD \[$(!@#" + S << "ERROR $!(@ ERROR )#^! SENSORY OVERLOAD \[$(!@#" S << 'sound/misc/interference.ogg' playsound(S, 'sound/machines/warning-buzzer.ogg', 50, 1) var/datum/effect/effect/system/spark_spread/sp = new /datum/effect/effect/system/spark_spread @@ -479,12 +489,15 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) clothes_req = 0 var/targetsDrained var/list/nearbyTargets + action_icon_state = "drain_life" /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(M == src) + continue targetsDrained++ nearbyTargets.Add(M) if(!targetsDrained) @@ -514,6 +527,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) clothes_req = 0 include_user = 0 var/list/thralls_in_world = list() + action_icon_state = "revive_thrall" /obj/effect/proc_holder/spell/wizard/targeted/reviveThrall/cast(list/targets) for(var/mob/living/carbon/human/thrallToRevive in targets) @@ -531,15 +545,15 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) if(ghost) ghost << "Your masters are resuscitating you! Return to your corpse if you wish to be brought to life. (Verbs -> Ghost -> Re-enter corpse)" ghost << 'sound/effects/genetics.ogg' - if(!do_mob(usr, thrallToRevive, 100)) + 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 energy into [thrallToRevive]!" + 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(20) + 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.") @@ -556,6 +570,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) range = 7 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 @@ -585,6 +600,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) range = 7 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 @@ -627,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 @@ -645,37 +662,33 @@ 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 Icy Veins." +/obj/effect/proc_holder/spell/wizard/aoe_turf/ascendant_storm + name = "Lightning Storm" + desc = "Shocks everyone nearby." panel = "Ascendant" - range = 5 + 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 << "You are not in the same plane of existence. Unphase first." charge_counter = charge_max return - usr << "You freeze the nearby air." - playsound(usr.loc, 'sound/effects/ghost2.ogg', 100, 1) + 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.") 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 << "You feel a blast of paralyzingly cold air wrap around you and flow past, but you are unaffected!" - continue - target << "You are hit by a blast of cold unlike anything you have ever felt. Your limbs instantly lock in place and you feel frost burns across your body!" - target.Weaken(15) - if(target.bodytemperature) - target.bodytemperature -= INFINITY //:^) - target.take_organ_damage(0,80) + continue + target << "You are struck by a bolt of lightning!" + 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/shadowlingAscendantTransmit name = "Ascendant Broadcast" @@ -685,10 +698,11 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) clothes_req = 0 range = -1 include_user = 1 + action_icon_state = "transmit" /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 [world.name]?.", "Transmit to World", "") + 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 << "\"[text]\"" diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm index 8f4cdca3f73..0116b4f893f 100644 --- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm @@ -8,6 +8,7 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N clothes_req = 0 range = -1 include_user = 1 + action_icon_state = "hatch" /obj/effect/proc_holder/spell/wizard/targeted/shadowling_hatch/cast(list/targets) if(usr.stat || !ishuman(usr) || !usr) @@ -24,10 +25,8 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N H.visible_message("[H]'s things suddenly slip off. They hunch over and vomit up a copious amount of purple goo which begins to shape around them!", \ "You remove any equipment which would hinder your hatching and begin regurgitating the resin which will protect you.") - for(var/obj/item/I in H) //drops all items - var/obj/item/organ/O = I - if(!istype(O) || O.owner != src) - H.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 @@ -91,12 +90,13 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N 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.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hatch) - H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/glare) - H.AddSpell(/obj/effect/proc_holder/spell/wizard/aoe_turf/veil) - H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/shadow_walk) - H.AddSpell(/obj/effect/proc_holder/spell/wizard/aoe_turf/flashfreeze) - H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/collective_mind) + 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) /obj/effect/proc_holder/spell/wizard/targeted/shadowling_ascend name = "Ascend" @@ -106,6 +106,7 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N clothes_req = 0 range = -1 include_user = 1 + action_icon_state = "ascend" /obj/effect/proc_holder/spell/wizard/targeted/shadowling_ascend/cast(list/targets) if(usr.stat || !ishuman(usr) || !usr) @@ -153,14 +154,14 @@ var/list/possibleShadowlingNames = list("U'ruan", "Y`shej", "Nex", "Hel-uae", "N for(var/obj/effect/proc_holder/spell/S in H.mind.spell_list) if(S == src) continue H.mind.remove_spell(S) - H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/annihilate) - H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/hypnosis) - H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/shadowling_phase_shift) - H.AddSpell(/obj/effect/proc_holder/spell/wizard/aoe_turf/glacial_blast) - H.AddSpell(/obj/effect/proc_holder/spell/wizard/targeted/shadowlingAscendantTransmit) 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 diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index b89c84cbcd8..3405a2489db 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -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 << "You smash through the wall." - else - M << text("\blue You smash against the wall.") - take_damage(rand(25, 75)) - return + if(M.environment_smash == 3) + dismantle_wall(1) + M << "You smash through the wall." + else + M << text("You smash against the wall.") + take_damage(rand(25, 75)) + return M << "\blue You push the wall but nothing happens!" return diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 73053496473..72022255700 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -767,7 +767,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(isturf(loc)) var/turf/T = loc light_amount = T.get_lumcount()*10 - if(light_amount > species.light_dam) //if there's enough light, start dying + 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 @@ -1797,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 diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 7a45b29f2ec0d872cacf57b1eed13edcb5958be0..299c0a12e654ec6641959fae4dadf143f139138e 100644 GIT binary patch delta 18956 zcmY(q2Ut@<*DZWPXwrL^Du@(miqr%Y6)A!OQlx_*MS5>1Gyz2c1wja6qlGR4A|>=9 z2rANh4H9|{kn)H3``-WF`wThZ$unoN&z`l{UVCOTy2p}q#FBae0#6fH1fAx`(l%1_ z(aki*zA+b>8ZuC{H(8auVFZ^5qh`%WFiJcp6SD+#(UtXN%LuLXma_MoIUDZEyfqUJ zS-vYYa*xK@aMSa~&zTuNh+poei5WC{e!>?9G_ra{{6N9gYkp2Dv^22q}@m&M0X?cf#54x)TGfaze3Nl89tV6O>bd%a|u25@@ zKU1TTNUr;?XQ|=_yML%qROadMx6tj;zCBAqm(?9Q+xp6EyXSSc+@-&QC&x~)w04<_ z`*9S;6K2{Z`*z*S&Xyb48HhjAO^j^8Hr^|cxXN+o)($hp3yF^r6(EYj| z)uYdPO&j(NT1ycwmSthG@4(#I_vTOQ;(^~19 z&wVAoiq(W9!@nP-w?L4ZnpKUj;daI zKS;NZML0gCGt;fQQMxqqN*=WMOqvh&9ch7Zm~9pZd{6t^wI$C_ZNb`mcckyGpV2$p zYtDPSNIZmi{apI(L|`b^37X&pg^*tqbxu%d*A56%d%0$C6p4EHs_sQ{Usdv?{p$x^ z%A#{Rx8}y?KQSI(h*hjjne%IM8K`=jCEg>F@cbgodc;~{so&~O7X700GQ#{ROWu+I z#tAv6umts^`6~ippnZI{7a_x|+hlX8Dj6%4=Ku8NR_W&zX+kr#9CPGYW)2Ch%m4N@Db zw$J17ebPm}2SzDyV#t6~mUdkM3dN*^5`@U-M2omkwDnpTyjc4_&{31pX)4cET}?4! zRco1bz*xxB?l$1B<#2)Pc|Na`8t}p&_7TLYSv`E{aCK=&Wi)Wrms5@3;X&bcdO_}s z?nQ3*Y_8vd=XbuXM!~8SGx5ht(1>9*1EzxPKvo7%N-e8+R9%rQABJbVIsD-u;b?Z2 z&OT0|z_PnQvFp~i0oQiqtpdRP?(5bhnf8u)<-8mfCbLJDW{(O3a&x4U{>c-}%u>Kk z$Ls<(u@P4VsneVd0fjb)pigyO*SdJrsr>WHdnn@`zgAROC`c-B1E4&q)I2IUTErEn z_0K326u4W2(&J@eD>hYy=6Pjavf`9-Ju!%eQNPZM^FUa9m5ZhMCb^#-Ioi;&66JP3 zR_ndble?`}(dE05`R|nz&AvP{{ICns8H?MTI##C9D3@67Erb#J($6dO27m6nBI--i zfJO^pN6MV`#(MjufVPPV`_rdS*MXm*O}Wu(sp=bgNE3yiP`*5# zYL#2655*5p$VEoVq8*0?GgaxN+(k7I&h@M`6uUS|B*aSG!gQu|Q(J@!?VhKiP?kX96+`$VLOGu=7kuVpZHy8@ z)^Lcr6BE?^^87UU>A>(3xILeD=zyKwPWa=? zlr0}nG9_626`Ge2jZfD#y$%HaIVGQ`w)dQEZu0(VvQLqU!gyYl&aHRG>z_4eADh`PV|k3y+^$t<_|FP~JW%mv!)i^YnWTsCr6L*g zOMbTCheos#lRXFgb_aIhZY}Nm=p;mOaq&4L%>$0?>};Pw%_E?PkYHzS?rLO4fmm5_ z;fF1qF#nGGX{euh`Ddt1jE={Fpt^hj*Uk^YDvN&V%nu(#1XTSxHh&Rz`{cMOg+izN z7H>e{*#+~veV|-jW)UY_AfKV3VbCX7Xm+wS^V|shx?n6%=Bfs>0b*>vJz*o8G4$E% zD`qt0P8L;;@tS4^uxrQ926KsycEQtu=1dxizO+SbPMnJzfl?n$zA+>W7^M2M0+t&a z8$l9!wg|0vuP(X@QGR}we6H?UXJM?p`2i+YFOeLSU}Y?<)j(ny(fzL3cTtb0)V%2GXeI zi?An?d|yA9e>F!If{Fe_H{{ci=wF6<{9J}R_O%y~hmzMrzf$EdJljOqC=lZvP-{woFou!u3iyl>B=j+Zl`SqQ$aESqrQ(~5_61F#CY#_j8OyKeq{ zlE_EnYr8U#`MA3F(@!;c5jt~Cp?fRH^@R1=$w`lEkNyUphvUFj<}>pr?Zskx z38zO+Lj{IByu4L;+*_;%N(sP2k_RK8U2_j`5^4Iw#Uvw=V1-c`SUe}x6W0vnDi|TA6WF}#w^ zF_|R* zJ61VWS*$zDa4A8wW9~CC*^H+64qb{RdJW zI;nOclz=}YuWE1Xgy191%$Om%z5~qI@5JVEY%HKIn9@1;_3Kxjk*yV9pdC=WG;<`O z!c>PUQza&Y3Xe51hCc{VZ%be_oSHD-sC-7Q+S@0;c$gZj%w;kt-!prhcK%D85Iw818M*D9l@FKTH+ zvwtUe(*s5M{(3ycFJ#-Yqy55f{YLmIb-eAN-RcQ97zskY1*)f*K-B2n?zgJZ-AMe1 zLha1OGB055NZ&P^Zkd@iSWKvj(_~qE4EXmaUnK%pIUV`%UAE{N4>C9>cL)@W!Z~oj>~p3SKCL%|vk@)<2D{wa zK{htvd6xm?TPQ^I+nYiQS?g~s2~6jIK*V;CLw3nFZ}v2luU>T^;*V9w>BsF1u33G3 zd~YB?a=yY!)0$G=Z(t{*B7%w;j+cKUXU7B_?qA)3VXk_(ySJ^6S3hZC`@WLx@oRQA zC7zyp;;QsV=BKO6qG5h2gJ@j8>heB%r;Fbo{9@i_m)!XzEC&Gqs>1KFYRcX-$=yPr z1|}P`N9uQl#d6z4D7eD?4(}jM=A|pfB!sna6fI?SGtY!bxbDYZUbXW`%K5twXB!tPJWn_qNuyfOmoeCrc0yF3 zSIr|Kr?r;aya;~^*oA43L?|mZU1KvGdH{SI2@7LF9Pe0I&m*DzrPrz+gk&Sm7c)@; zrd&#;G6R(dc%dtXlifW0J<&q?lgeHm)43CjKqgR0;C1o``du@2D7itHGZhKgrU6bJ ztHxTSYUz$PzXktMn2I{xDEnS+*QRO*nX@VpSrTA^&6eJTIF7KP)wri87K0@21M;J) zD)v6*%>TY$&LfTTn#@igzV@CFYSa;BbwA%zZqv~AwGKPh_6n!Y`NlT%(S33i;NnDtmiB z9S|@Hm_YpQ`_VxBVl+2u_a=QlD}eC4RBw6Z-ug)&D&8Z{=(rqxzlddbCCB@gR7P8d zxvd*_dS3}Aq_VYDwMLJFsSlDf8o0IGKwM}7N*5-xG;>|ZY7t!B+N$$V&}sFvvB}N- zo$Ao0zmc?^xm7-x2Nz0U78>|>NdY8A@Jk_Ughhcz{p&iH5gjFH1`*M4k#`Mbh-`F4 zw%w*|*$t4Jw;RAs*Jk9g`$*011n;5oyL}svLi%>NM~$3?$q4k~{z6}Iorv5+hNayn zEJr3~^yoN&*L@AA@SPa*cbgf5b^xtC1){)>oMweyb~^T{VoCyRQWT$tWpu9i4!B|? zKBm4?pf;1Ce{|4OSz!CZXL}L&gWO}l;5mU)UZ<^cs~S4H(}_`Qi1T9C3o=mX02qV4 zD#8r-=*v}sncGuYtX{qzWoEV^DE3G1At2A@3hpf0>v~xC$#>cQzVZZ=;R@%L$J$Qe zM@ub-+zB`bpl?y8nNBM`b`<*y1Idyl$+7@E&x^TOC;*xO=^sg9Tja3T;`D1ct0GkIDb`+Pa6P;M@%UrA(wQVP7SMOQQ%NJA=nI1sKy5$~tNDY&+J<5A8We3mvv-{@bFaY=V_3Dta{YcyJYNv11Dj7Uj8!nd) zP1+O5lN+~t7iQXTcgWejsodFn33Jt=F~qkQ10L@#hwOB6U(8icb6_8}2gwOhm1%l>xknWl#tZ^~OHgY3F5UaoHlv>uxS%|W0#k(}S#pYfU-+Y})3fvN_apFiP(DK<)qz2b>S^H$|p|4@o zE+-|A?UQdpv_?a_Jm2>WkV|DACpS(hKzWRuRoys=%s@|2U?Ab%p%@?noHMCm5Y|RH z0+&R9T&Czk6Kz*HDKjPnM=t^rK+wdEvk0aDq)Psay$1=H6ntZd3|%3nNeaO`|`M;q;R^}GNtuQpkhF$uvuxoi4}MzCY& z*4GRBuF2#2^<+uzM4rpTD;Mh}v>PuEbUx#hevfj$yM3Cw6;b%UZpg0mf%xd}#7FjK zW;KO3d_8VnPRmF;f@W#nZKRyNOR|u0srX2h1rDW=rOwmByePis+;X)_0s{=O{8<{f zx!9ZYHx5BEQZ^jD@9~SpM5Gbeg6DFwvww|^JNH00HEFoK+5lp~U*U5w4O z>d-xxQ&+>G^>sds0D(X_<2Ja^?G(YA-rf~9eSSyN!5HT+je3-;$yE?Q6NQ2afhpZ~ z%XjLn>A%(&D$c=(OY4sh$!#c7clN19IP4M}LxJtA4*z=m;RhQo-Et#GL5w0@y~VVfPf z2N^gP=^E2EGb2-60>H4U22ay-`v)t#oiJecq8hh{LLGK2?nH-Z*mA&tYC+dwl$pK3 zdEggxE)=Lx>!GC!>+ZN#P*1hHwtc6F30kO4Pn$7G-9j?6A2w zX11g&2d0%rH!ekLX*^b=&I1YpWMjE;Jtb^dtAaIETC0TC%5USlrFtDa?Y}?W-YZ9?56+em=SCiS*A%|3KkoCN z?mQoQyjfc`%yJbJU3mG;e`0*3?BUMpr<4iI-*JxLKWE>*V8eVGn+~+}TfB{d?Y*$^ zl+NBg2davR7@4tSbpIk%0%s$S=6~N7k_}hOieN;ZrWOKfM`Q)>g6~7)`#wiypd%RXeKpnpVSO(M0TLhQ!huk5RBzu}f5;V+CsQtMI5(1w#+? zLw!ULZ+*E25e^JecNP4Lr?tDXx>Wd=1a9ydJ?ivp$bUT9^`uNKV1HGU)yxb-R^L?F z1)cYc)7NKzeXK=9zxaoW`XPlATta#v_gYP*u6~su9+%RsSoz;G@E9$B0%5slR+Hr4 zY%%mz9{^ z)+D#dLM6h?jC=LFpp&&t3(rawPXmh!7cCO&^nJj{cOa$RQ?UrbLn;3kRqNs;^ClRd z4*9^KoAr^Q$GP4G{yA^@1a7Lxm~f@Wbo~ShzJ^0H{ze`OBeIhlJo6TMWuVO(j;GQs zvu)x#J=}m|1ei6p0l~=qdv;B`$53|Z(B9Dqa`}fF2ySNoMp|7h(!46o^?d%N`X<=( zFHGnwiA)}TUF(fA%O~6vEGkU4yR*?d0(mc{~xJ<&^nvXn)@nTb{ZuHe!I@FIp*2`1YjC$}#hV2wi{U#&%smfkcV-x_= z|K{icv+n=~c%0nnn5^)?`#?qyY?ndTb)#K=^7)543`p~lFmTfGgS00@fssKBRrI`0 z+&&pf1EEdBna;1!MP`?%K}umtVTWhH1#{KTFPHUET<$P)+Ut@)86#%{QR^HaMKBnh zwNXZBknnrBHty!s;P?W}yKtsF!n!N{rUA$2hJWVh6V8zeyDh#VO%jOT`}VIOXI*QP zjOCw}5RaACZE)eS77K(g~Hbrrh;c953%G5`H-zS{wq0|GcYnP%iN;};P`oFf3;k7 z!m=-YdoCC};|8Cp^A>tgYH{zE9Y@0RHqX!q_2A8pr;Pm8gyD(=uw|tP!ndonKh~YveuCfKeP1qL-+RJeS3^-mOR1)= z{*bKs+_N8a^OztzSKA(%nURabCE2fX=4ZiUX2$8;(F$2LsLm|ldVW6Zg~(4q@ngE_ zT+#oeLrUTL?0}<5u?XO$Fh|zk2545ZiI@A$_;R>01%e`gpsD+BZH?}fNB6?3+p^wG zYtO*z6}?qG<)6f|T!0X-vpxmr7am%shG0@~C(1L_Ouh)DAl$Raab+ z0gzl#&3G9PB$9jUVyc6bC6XCG-ML9*qGT3T=V!l_lacXnQ+fVIM1@2g?ke&7LQbmg z&_lmpO{8zT`J$6B2k(at@|#@i+y{BCV?=O)5G8o~YPS)2u+M+ebxT9V->zG69{M6H z*tF~L$PfXJMB44g?UauL^ljA}*s0mhed1$Tz~Ihl>3*iLnh6``^!rsdAgS@lZYC%c zYi5+rABUko$?U(>IvbO=TxM=_uh%zy!>$!~=K}cwv-SMwn;)q{eUIz?8UdvS5is^P zY}Q>Xadxqy_>#rLH&3z-dLF6|M#xqbY!q=UFbj>9lmCavsmq ziX%G=CH5l*C+E6tBg2zf2W^Z^1Q`Ui9JX2BvR1v=tIDHu#9z&TsD>VTY61e9BUjiF zO%ZzEqqL#@)b>NS?CwU?&!aDrPA$f|ePKTsVU!^~kSLKC1wTD|iHkon-wZ0f+s=;f zp%J3cxTP8O!}4$c16r_Z>;6maL+&}>THRBwQ1x+mUhraeZuzB*-{p*EZ^1#UaZKHp48V_HqjQ#KWA8^@Y!d{_dORvOBr1kp>p@bk+iE*skKqF^ z%;wM)SJ!`h3><_ ztF4{}K>?>9Y^Lb;{{UYmnKym}DF^?B^3eEbyZU!qVvj#wbTM>%@h4;bOC8p8Gg0zj zQAsUF{c=CDB#$1Pvzdp(9=MWSC|?K$6eyB?xM;0PbV!*kHu#%(_VK)3-kp-%pXV<+ zlR^&|)86CT1<~tr<)q9vrFN#7Ny+C(^lSX0g+orRkk5lVJN1*ZlYs>SATJEjJD29o z_X>I5{+^QXwWGA0Bp(wP4)AM*_ShweqG8#}O^-m@o$PaI^EZ<9-<@R0(Tm~ZkSwpf z@e7x&El9W@2bo(cKT`CY#Oyp4gI}6QH6uOaW*6nI(VIzQ^6gf4bcvCksq2v`Wrt@YE4X67$EfYoI0Z| z7&|E4f3%Fd-OaxST)COPp5RPcP2LHc&%5i&eU7vrqA5KJU*AzDeEMyWyAD@=d8-f% zlXN=ezZKx?>VMlgLPoustDCgkk^MA+xNtHk|50WZH^lnrK{4^;oSIOCN;PCaZs&Vy zNCooTrSHjQ^bv^+32N;KWQK24(rD))NWn3sC=%b5#|+a661StiHSj0VGf~A`IZmZZ z=nxKv<6rldo8`N}@cR`y%ecNpPN#QL+afOqu{A}Vdq%{itpYzHb-X6=-~0QqA!sEY zhmv17dae%-Ayd{sCWSF10+{my3L%a3_Ao?x%}?#DR@>YI{Hgp_I#i2Viwo3pCPU|@ zOIpqe7LCKcePJ1O_s~4OKh;6!VR~Yk!j~VA`HEy|##_0*99ofIVM^++Un*0C%*ucC z=M>+IA_L_mNm`cFO*Q-P^q<=}{Q0U6<=eMycK6bUo;pZ=0b>QPcKz*_0rpsvZl(Qf z%vffu7V|Wy$lrl(j@sd#W5Eg@`=>FB@m*WPc2Ak@9VaqU0cJTrFX;kf2z&fLKkBx! zmFtbS5eX_1!X#7qy5uB)Yv)}={JdgBkCRUf%bYA!OsFIR7Kh$u3TIM0&fMIJd!e@` zFU1Qs8yH;bHr2<#6WbQ7_(-Nla{HmBPtg$qrqG4FU8-NUEgxSofH9ddyAhK(%VfbN z9R1zaF9pAfNZJyOZx;YH|H#Dlbhg3Oy&B)^ zC|o$rvrNA`^5PZ(BjOrKgK-@cB%p`OkT>FR<`=Vm`7{83;j!lV>zL#`F zMny8#`+I?;l zFLmx2fp&lQ{Oe4u(l-O>Q3a}Hp*Z*PS<5}Mfxw;csszx_T}$sk`0XqHo%$x*fBX54 zLq##xJ3sbz%v6YXOe)DSBT9~;K=O-m1b?gmbOQkp6{u1Xf4nNED{p_ppHs+sEHC0+ zm95>mIf<;`{v7fxYfT&!^dJ@^K$7{=zi;l+LmUrydXD5PSse$4S=Ya}CdqeuN7fNI zpH8!&t;_n{!wLa}vo;L1i!Cvj=(G*DBDCJfhOCK)m>gdWKxi z{GoVk5+YS^=}l|TH7bL~7387#7q(?`Lelxrw5N|q+CHGL_6nZcozB>ka&`DtZK3g) zbl+5;IQ$)I=ZSZu%fgRsoP@o7bzdI?=HUz9p>es}O3<-yE`|3t)9<43v4>^iy}8XE z+EKB0QWt~i)7HrAp)eY)>Sl(lz13N$4^6-NKt&5OoWz>tPo#k$V|WvlTN_Pa6iNtB zK)x@`+EciVH25ZELnuk=tpW8lNlO6*j{S2ag9}#N(Z19zm&81*i?SfwNortcqBBGO znLn7bTAQe~`fkb3QZP>1CGi9TGtsP15U(r&d-+#_{9MFaU0G$4KXh$k6_s8qxIe*{ zkHYzG-jIkjdWOxrDtbW2Flooz*WWAkgNBs{(}8Qkse8cb41N8$;^>pwyjuta_QCNQ z7Nhkuxi#?5+-sa!g!d`9`^bTEU&W65G~glMsO9Orj2gF8dc3OoJNS^8tM+HB)Q>}z zKg^1Q#oLJq52cCP2b|kZcx{7r)Em7WW>Nb4`ipt)#3<{8`vig&MWZ$NCywqBbKak&H*Q~=%!P<)v*=gZXZCM~e?H9G@%L$M02Y&n@=_Gbc#{Tm5EO~1#db|47m zR%A7td1cyz8sQE9+SkXCd|b%PcCz!-@&zbY4+tbhu{e!w?23&3p=a&wD#Wr}i8~4Z?EYOz zwGskTiQ3K|+}-ddo#=F|vFBt2aX==q@yENoyx7V?5WF<;3Ue1P29ssaG0JGuso~(r zqP$AH133O{07t`A+#~HM=0t%Khk;^}W&@Fz3hVNpB_Ubbc!Ve|Y4?^j&B%7~8uLWL*jcaG<7M9Ds8@inQLcSeEE@Hi=6v`3NX^re+El9As^9EIpod=p$j zU58U|j{-#6J*GXNU;TGx>v~@$txM&1j+XNKn=s6t`P!%c9_N|Y1Wp~hE2);kc(DV^ zcfDCeR_AcUDr3}f!c}782Oi!|mHBNNMEyM-3yGX3$vS?77p00!ow(GrUIu^_Y~m0m-$>?;FAw zLXUkP@>k}oJ5W-IEK^P_Q)9qoty{nB**b80GtxEBK473Y`mDX3!8YW;u1OXI!wEz& z`9~2hWd(o!l(ovZ!=DvMX@}sYeRJU&DE2yfXx2EHhoMmdUlvAlzQsE^VE=|5M>k=Y z*%!a1Ldc+H5c7Bmr;F!x$xA*5icd1nfv&8_6bOua1RkXJQC3u*0aKHtLMzY?I-hvO zcG*&k$MQ_iUo9VZGxg}zhvNymvZJ%!$N%iSw*8xv;gY2H^G>J~G#5cXI>nKgZ+&WY zN|3%uYIf$~p@zk)KK6hL3MvbEKgoFw71u5{7Pcvq(G}_0E;+Ur@kV#&ach;Tcg2!t z*$KD|sbq0sQR4?)THe+O=EYmio$~cxUnVhD!xpdf1KYe=((D-*Du~ZMI5XO>Tp;=O zo2~hb=_;tK&}e41vQBzYTY-V9C}=0R^8rHnSQC%IhKj>Zc0 zN{!1@HryvUvgLMl4i3L*Y%{B=7HZKc4Bqjt=i8Wg52pLmT%OI{xc^*9|3L2RehD{P zk3e{kPu#WWtA}DcXPH;`uqUTwj>LGnmwOvSTYEyE-G9z*xfy39qsIadzcU2NI%@&; zSfr{%KudpE1f4%>WkdYiA^Y_o8yl<~ag!Q zn?F9d3>O~_OP?&d_aHxbZmK{$5z|CjzI+05)79#q>u7I=S|)*2ME)owSb?c}#fd1` zJsu1eq<>NK_f~*ODBh%Zc90smj0@MiEFuRcw82QWUpwgE}`PQWYo4})pt zl&R~Uo5rOQKFfN=w@)ni4$6sdzxqB%S};{EaTb;LB&msoD}S0x79!Gy;ydxxZ)wd% zyY7s`U%z}Q=7=<3ycR-GSyQ66E=Ob<~KL=XB@sGb8dQf_O_ml~l$#653n2&lx*rQSzz)1IM zg*Np)^t$oQN`;gkRgk-@1YNBotEUtX^SMe%N|9aV0hr*z7!y+tv29W{>NmZPK(!2pt^K%b zHN7#pa+`YwaSCtH+qz8soAKLUU=(}kK&ob*nAK;w09US?HV#00-TdY?nE9Q-y=HlM z7K1N-ipSVQ+ z$gnf1iV+0w0acsAuIf4J$z*kqyWzRXL%IDh%YU1^b{JQ$caIBEOZZiO1rb0l!Om2G z(*yI3dUE9}<-z-RV1;Qp=ETxTH>LhW+NE%d{g#Ucqs|i&DdOJ~ZZG&(Y`PG+xzc*lzsR)cMB~$b_Zm`8D+=%8;?dP&-&MGT!QTz|?-8ZD$38Av zQ!B#id3$QPg#sCCa?(YrbHm6?n`a&=V87`YX10Xx0Pwy16YI*=;lZ+5n`;MYtlpl& z`ZYw!^zrZG=v}l*1sUA3`byS-k0Ul4tXYN&99h~DrB67pC9M;66s8;z${?USNRs?A z5uSfMnrE8f8Dtco^$IwANKzTE)m;qEBOnAr~`6bdt3No{yn(rnK%1jC?ahQ#=cvDZ9YG zAZ{#GxA)b~M6qpCV|^G7>e7}h5$^$?!9J?Rri8R)UG2Zeb zc78z)lp2epq0294u`k}#o)$9-% z3-_{2yl0^DPUP^wkV`ThNI;hrEF)Ms7}=u3s8#>^-XEZ=<_OIGI5L=z8{F>`5;+SB z**@idwOqlR+Qlu;O_kqS%i_oC9@>1^i#KSEL+H|FTn}4haY1@dQ}NN@4g+N>J%wV# z((8w^J9s)=j34=DD4vq@1)?#u}#%!N^$Z z0XTmkkRGlHI)j+zA2x0!>B;k^swAz;0f~H{g~KaV2-5fJ(b5iir2FEo*PMCIeS(IG z9CLo9nVuAr3_TBOlLmpJTeWZX)w7va@FSmPwQaD6jvcID^Nj&h6!7G*eLOHMvHFU=U5 zk&~R+hg1gmJ@!8BlY^9sbUuVIz6tdPPjGLxC>7TqqE0Ra#6N( zPADYFk&*WKqxfe}Ov*uVsr|QPWjgu_+@%`X-P68n{;E|}$Qj2dG!S{JNo)b)bWo4# zwP}rUn{dRPpXc6BO zh;{$_jJ9QU^WBuJrYi{xySpzbcU34p;=p8o6actF&khrG z4wB~)>ZPWF#CmUiidih`KwHoHnU&>-KZ0Y}@`v}Ct#&!y?>#c8`B)qJ=tz};$qPX?#_Ht z3~GD1Td^WaurJ_L!=PK?^|QVwKki*M|KZmc6GtVS@iLF>Fez;>V`1sU_YGMXQ#Gy_ zCbmmF@vJN+EO$i>-w1?2hx?*>h%GwI>F%uw>s#Ib*+Af910lfKwukP#lnl=2#GIde zc$_ROEre1(u4si^L^!YgHA%WXgA-}?83sElE?Z|#-G8#h-2CFyYK0>5V)Sz&y2EvH_jR-YvF`+jia0;>{gqcT{@|Oa4V}KTOKoB3&Jk zqx9iu*+qBAy@|MbEQFfZ^uF+$2%o5Or9zCcX{pn$L$~vYjCQ46p*@Y+IE>~)->uOK z8W)n7{I2k}JsWPJeT>WIEgl_n=(=^G7LQ}XqwPQ=pc)OECxNge^rFxm7~5C0TDHZ0 z1sHD*&u(oSQ?%cfof`~PnW*BIKImFXdryGO&B4WC!B>(RFj5u~e_H0_&uP>ymGrun z%*%d$DZ%Ad@##{~)t6=-Q#A$H2Nyr0K~+oVw;Xwz=HeeKNJgIP;e2`LkAXc`o460s zUSO*~`Qd}`#0>kC<*MbP$tJ4FsMDqn-LQV^ycGciFC)*B26pvk9PK9KZp75@*q?(D zRI@NY>gu&L`4tKk$lQ70hYYfQxdA7K7we7bBbk4^I@{_E9^Hsoxxm&{Qxe^UjsDFY z4R2)7pr3n6N}RQgxV>8)e|S$3ky!5nKFQK01O!8CMkG6p45!AEVRE+a0T)30uXZbT!aq@T)Sy5 z>O-Q>wx`ZX>mA&C{}WRAe0!)%vR31DN86YSJK!=pFWEo~FMEof$7ER1Jh6R;Qn18@rTNVN70uE+h4K(BZv#OG4XTnl9j*6ETjp+YbMPLCrN?@ambn1!$l zY1;$a16w|mRZ3Y0s=#Ytj=`mAD1P!XQx9o^Jmw+^p)UrMQ^;?jAwS&hyZW>y3!_0A zp9LH1FyAyn2sI0@#@YVer7Zb|t89RQ9bge5UfW0r$J_6N{Er1aTRwD}Kk#0^J_G^U z7+Ts7FOrWdoi#}b3V;G(1x5G;o~-)>btS91iXwPVl8%l4h`v2g@+laLqN7OE=r*8c zz7|gdLyBqOi&oI@;gI67C{Zt?O>zkp)YXpK@`-&$-rLM?;8#h_>WS+~Df!Th@d>9l z03KHfn)mUiQV``K?;%aS-U#$GVn!aYCx>^_$GP(NSRuOe?b(H|)MNJFU3>LdC|qP` zu5n%`+*t59;4GZszh7#4Ys4kI198&psyL&hJoCQr8QqUfgLEwwmK3FwzmD`vD@HSHK_gSMd?!0rG_l5QvmG*I3Dmd*nv}pys_P0Oh8kM9rq#Ra+ak){{V{ z926t40dLLB^lUwU_FiHGl3k#CXs~<|dlrPo3$b)1jwo(Og;&;v2M%|U^pVe8Y@fIZ1R$~!jHmC(`f z?TRGG4uC9*z+Aqs@Fe3LZWf9c*$ck}7$;?yw*iKyxbGHHUH8cAA&XYM6JyE{+~+z=OtMCZ%d6 zpTm!Rm0MzYt?hkYyfFE&+HII0pkq5)#}-l~5yt``NdORcjmqsiRBP4yo(|^V&CO6Y(gOdtSl@nTs0`Vb5%I1 z^+t_w9PnN(yZkEc(0QPZ=|7<$e-lXUehrY%AD^MQ<{S_u0Dbcw?A2W59((~={kL-% zH7dGaX7DnV zF{=cn;#ux>*wO=wH_74SPxmK)1`x&r8lE5m5U#ig0U%`DoV5=B8cHAvC9oCKx6Kus z>VBOX(y~v9s8nL11PcCR>X9fpTFLR6^yI96jDMaAH3eYe5SCf;O8rB4+N}L`Kt2*8 zyv{&*W|sryoCA4}2RyUuf7)MB0QW(UFPi&_P8Rb8R0cs9$eIDQfjT`?r zH3$P_zp%WNf&lPFX*bHvaOw_kc@Z*aWYO``%4K`~uLsWT|4&0)qCiYQ5qiT%0$!vG z{kP`+m(oGM+@l9Pk082NJ>X|%BZ_mPvj+a(yAdo9EfrBfQV5VT%YV_bN1>~l%1W7a zW_5^JjS|b*T>am+rJiBH*aI*wmU=>I>qq^W#hLOqJPv5#fM^L0vXF1!{qN)ogJhF? zIR7&~neVv&`wfZw&LO=%ln^qf&0LuV$WH4Bphi?ew<`%}T-Kq$0%VE)ha-z*fo&|$ zk0+Fybi!xHFCJ3Se08`|ETGjk3cp1OglZHj0C8`lv;Gezw18A;3WSf&e}D=a3j%Rv zF(#EvDqnc=ov(dwfWWJTZFR^~1pu_ypbFDu0KfrqNRbh!#r415Y&kA^&llZ5kqEq~ zrTZhSZP4k*{(s;wPxGItU3vxx3$Xt00U+T2gw6sF zEnx89zQ`0cJIMR27%xg&AG$aETIm#=+DG&vKvwgA&_H%~he8}LB4I=B`Tz3`d%VE2 zORKl$nuD)%qi$7Sr$GE;1RPw2X#qdZ|HQ-pZ@nZ1Vvqelox!;@M}AKpL#gR$7wzxN zQO*C(GFnxzKLkODJ#J!@u*?nN&a|ylV`Xfcr35&r5byDZK#TsORxN+a4w?pcVY<$*~vCPw0d=h{zWy%(E}pt3>{{6}V|JSXqkH)P3qqBG3e5LBOIW(W9w<>0At zlZ>m3P+%p{aY&kOGkY}2@B^g9r1!i-h&iZ#CODnsE(jv8As<)N9<_RlM-g?@4;yz_ z1j808DlufW7iBBE6)Ki=2qP2d|CO9lA#+_@(7FqVD+WN(Q&5C_K@Zd7SC#I}#s6%P zd(Hl$g)l}w4xn3HBQV?(74j3H*|DvHCPM+9zh4#HHUqs#t>7pP)h+u$LQF4z0&^`%= zAcP5p6o5hgCEX#;|2r6IZO_z0tOa@g%h4d5 zJh;}c|A}QXdp&!_ADt3`IIg~Y{mzS)J_;6Bt_#WQ2`mucQa_mkX#UFqD6uoL#q3c6 z!>r^?W0nsXr`0i&?-)Rwq4|sng6rNgo|C2*Jqr>;4B0dPn^L&DwE!06|FAkO2o!vD zKMzQy3B72^C@(Mn(qCbdn+PLX;)~^y`iRnqo20z)#K90=9^92}dBht^ChKG4FZnXD zqGvfIDr^$DNf>nKd;nzPxr|}wc;q0^JOx4~$aQ)-TsYK>g$VepjCTYdML>finG&r} zlakE75i7ZIvZ;hVnr$2vm}f}DyvMtqzw}rvH?C7w*3(T4$gQTmYHS?AH$Fv#d&d%uJGU zjre;RH=g0o(+cXaspl#Gs^xn8kUn6m7JadDM3Vcu?%5eKQA4>5M&UDDE$|f30dY-q z<~0}I--x=a!9=Iyyv_1HZT0C!##sHNFs(@1*&RzaA3C4nADYhh6B1$Fs$SCO> z>8iDAjZ(Rykz$xR&o*7x`R}~{y??y#^SrJ3dAscd9bTok*dmXcxAdWd&gBPZ#bF6du#2f^!jeiI{&(@Y7lmu^^FWU;*0 z-7X7-U*hOJM4TC(0XV~mw8QCIXAkZNtq!BzWt3d}j^GmYur2@5y4zDlKDGrfw(QXF zQuJ=~x&!oY3y%t=3v^?ovWF!3}GQ%TJ zVFLW@gzjPG7#CIGeRUD_v?B*J0wzQ%{*IB96=b`lZ|iW7t8nInnR*~urS#4F69dkgmu#%(WHhWg>~QG;Ar*N1 zN>Y9+FneKn<69l`=~A^<Gcf&?p8sh&j0l^>L+;&u~%P2BRw?FvPDE&(dhUX_s#=*MPXRbj)4}*-PopQ zoR^8YrPsI3|C&4R?XJEgpgW$HB_>5z1)1-)0u$5V0TNxZZDjSs zGy>I*QU-M{0u^z;mLe&^Mb?cV&$;*J596IY*47&SddXmPdbgzAfY`OPw>jh))i=Z}G813k0B)k-r) zPl`EJg|q8c3GQR(=U}TaTtRn!abJK?yWRtFfpx7k?p0sK&B$B-(EU*Z!CCosjf)>L z2w>Vq5NZZ@EM5i5pJV&{cs5*D0;nWP=N1c^V~yqPvrP$45IEb)1yXIjMu9ug?O$_v zb@~r65zIH|R%2|&QuuCMUfE=@Xp=z2<2nwgjLVz5jq_5icSkaM>B88}`$zlT4ykZm z)KllA>*9MNl21_NWLRUV>j%f{$%SO*->VL_ewO9{i@Vj?}ZF7Mdd>+%kzCIfcEpd z-T1s5HE$Zgjs2Xo0{^svGo>`*DCIp=!96&|MVYu)$Z(tPXD;tUa1_chh3wJzZb3q@(xs)o4_Zh7E;YUKZW z$V4GjYnsF;z(6jnGWSr2Bi2L7QUJf~N9p9Pg$w1w)GtfQFA7w{G7e;m1!pMg@D;hO zlg5k37N^0p%#)H}dBqe)ViL*{F&~FfneQnm2Rib;K@adQE<4lP)1Q$=f{!TQ8WJtF zWgj|EohhytNvqaMyHJYyE>V}Uz)M)&ORxvyXey;Y`o>v>Y}byDkLYRya6Vm+!_}OS zn6itQ+YFuh4%c1EZk&LAZ1r;13Kqv|!%Vm(2Ef4?6Cajw6$dAVZhI+l>%fcCel{N~ zuIC>mvcFoPO&_WAg}>bLIwLt@E_;cYM2z+N%b>GZPHV$>RcU%I5_jx!ow4Ej6n_H^ z!(ih(mup~J+IC#R)_h- z6B$q{4EG+PNwy)M4bmh=g~6KQakP5r-n59c(r>j9)?ectsBKm{vCKS0bXjNl^qDHw zA7ebnFVnyOB%W*_MB6wbf0?;PA-L@MICgBlu5|0~o6%AyTT$1yvp(z*W?G1hZm;T$6TZ*L7)HHyr=@gw zsQg>kT{()^l*Fc{C@wO7&u6!*d7nL_2;vX-dmsFyFJ*!64^Aa~L$(b&T&X3}+S)D5 z*;u|#r`r15ux$IMOtH(lPf=5IQ*-fCXQ?btug}}%<*u_}anfPXX5(;hm;XB%*Urw) zx>Pc&;M3o4JPGQY+QKbJ#(cl8e+lOHGU?r(ZFbIOw-e3C0{yXs8n4#(dg+J#2?W+A zv~|WU9*rvi`2xIMs$sk&QAN*9CQ}=Zt5WcKEPZs_3HpNa%=;{-m38K931sK0Vy-pctm&~&-Slm0EPRm#FGEtV~Zpw-)8)5;k zh5)l#qW57%wkDWxT8wzz?2U&GQ9WX>>zw9)d0$_i)MHRtM%zzR6-8GumLIJ179_AE z(#EXaxCVKB%D=7l#46|*=;}x^50RVn%QKjV)Kq6g5n63PVbDYI*3 zdojE{v7N?6ocy-(U))ov+{YBh1Q9TT$8dtXLAbJMe8QiKHyD9lZJj&4y8H=dg6>Dh_2kR7xZJj;CRCGL!a$EjP|X5{+S z#!fe5`W|T^{@0f;VS&?T(;9tRo#A|>W3R&Nrob#?{KX;chC5YwkexFh-tKX^x;R_g z-mVLCw7^wrW6p1lu$QZ`8%C{fW*2j;pfVkII*WLsBmGPr@}!9gAbk@r4{Rn!Y;;CK|6M0#@caH}toSyA+|*_Cv)z9RJ$z}o*H`oM!i z5!_}2|MZd0=tr*FSTWMtu6kNJ$-3~hh=MZLXT!}dUymkqQU3H+TT(q!)uK`K%LFmT zlXpCIZ%cghzH;ZH(DF8sNcS{NRNVJ~By>FK7}h!LG}sz1~E(WzS9 zLy7>sIfuZ|9JRQhnt)gNJsm5KPm5AOaIyEZ*2}-HzO!CqYF10DPSjMf9-k8U^7VzN z4b;Y%7axUM6L_F&akX{6VThL7qun=s$0KS^M=5IWWUTMlr%gPNt~aW8`P*_d0U8-P*E0nJdXgR*1@r{t-U@Zg)A#j4?p&b9fxVws!LQ)fc7P$P4j+BF`+%mboIYZHB#u+#@t4gK+5T-KkyVY zA8Bd5pDk4X$jUqkZ#asJ?`7y=5g&$IJ=$t}3HSN-TC)2|T5(u@J}Z|&b=OA@)~xiP z?$u|(RTUE34a~ig5$?EJEIk}O>>JvO1#Z)K#RcS0N`SR)nW2qc&L1q?KkWV<$8ss! z34FhGs~SWnEw`8i5{H9;Ht;neEf9@Wmz$d_HmPk)oXwN&KD`yOrA6iQ}C~|3mN+!1bgEq$5{2G%PR1hc^MerhFQACz+bx{T|Ycx$nExX^|Io?p# zDtOlY5{|RA7umcF6><0+#1F1(6JR^|H5NJO}cl{b8!eG5{)r> z@x1hqmA35cV0C8F($8<|BMnRRs}w_4`mm`tBP5f`t)?A+A|@4cpHyX@az*U9&NkIL z+JG0F2KgnB3kK^g89rM2$$-c$(stNFJFIBd6&D}(T2_TsrJy08mAD<%jcr+#Vo!2k zYoI-Q6a5@@#vsb?KC$nTQF|Bi-}9OItGYpH(u`ai8_6gtqQYV{H-ca_NMr0v?u6L4 z4e?2x9wOevVDhMLB6k$=dQ*tTtXmQVjAPt#s)jK4@5&%{J(ZGA&dPmkCulOBur z#hn^t$tD_x@`vKHb7HcQ#vnq zZ~>8dzYX4+#>HSQ~6^fvwuvtaw>5m^c+J&E*lUm zaBEEA+bd+5qxTAv=Q-!`0xzRlk%&fbi8!)$FA7WJc5%FP5+xm-rFIXPvm$)?_^<%reP)I^4MI4cBJS-FdyAyK zR5(H!UZV!tcbx+x3tX4swf0O_FP5aQ6O`|RT2Ojwfw}Qtvelrm;uio{Y z4;G;dIkn(2ZJ`3T)*TmvQH~QoeuS@&70h5ibvs*5h60h&a}`zVsH;d%FgmDo_{Z%d zxR>g=_yf6;20D6F>&cr%cRL59^TGg+XhiwuRHX%+4!qdQaQvu#{nQM7+cfxSJma!& z`hokiSLH31(1Y@nfJ^I{?ZuXzjDn|UjkAkhF=z6xnxl{9-!_Ho)13D;SKU#`Zm5dN zIS~b&X(s@0QcVk%GF$5@;bo+>FtPl50eh(VG;9JK37OBS+p<-a`f|29PbWZs`(z#j z9XS%k)yKZD0Oge*Kf=s?Bq{VnR{?=dwbDBudxm1QaWDXmC~92_yODsaleGN5w$b+n z_+%*3C!JkpKmH^FR$-M#)K&t(kgfT1my^W>gPtLsLeWXahX;<7EuL;+5cXqT1G|Ah zGiX&cmA&jFwmls%++fvkG+|`qZ6Xur*^1eAM^~Yb`fgC2K@>(;DNBeqcT;WeU)9gN zZN{q$i1x<0ip{2=t9e`1OSgkzq%*jCJ5sUGn_;HT8DDFz+zKCm&zFPCXZvpQtx}F* zsT1Qu^u2rcY_PQUf5d&l;GbmigPm6u!oWUSgt+c!kFggY0*o54N-R|d6@}t2|7i;1mBu~sfG>5XMMhxiSn=FC(S@9%_4H{ z#y_{4KN*{r;Ub*xW@wct{;s@R>2Gpk+PcXzhu_B08Z$j+4{^w-xjEBj3I%emNpO68 znwoH0)vrj36um!tG+kr21Z8|NDHhw|kIw0Mb`K+PWvK-u67UrkbU^1)Fh%IU$~q+FiztUg)DE2p@vDGgs8imi$r zG39Lxp5Nw7i0lbpOlw$=8m^E8XF0Q4c^MG)fS{TJMYSnH*;FWi=z#0}MZNS%|h7hp1J=Z-3v8T)y^laVA#sAnpE;79HPSLXLX zr%Q@j8_+l=?icb143RjO!wx5Sobsa>29qQ|(UmnlfJF;1$XbwTvH=gRKmWq;ABLxV z>a%L91LjhI(-3n6&uu%>`^eH1;0XIX3w% z-zOJTm9rUy{`T$L+Rjez)^yG2{Ct)`x5~!}=GHF3LMT;%R_5mB#(Kw^N1GcPm2SV~ zn=4-NGFZ}@Z=ovgmSR-KnUzjx7hf$Wn|;(0+-Vt;@!kHF0nRP{iqL6MB=uogO0KA- zx_*0y(^zl+_Ns!kS#_)AQDI7JDQE1g^V|1it3oLpJaKL)b$8SoORgl_==NeeKfTGL6W}gX+)g!p2qPW<00!WRqMWvO ziR13Wc-1!l;$rT%HA%xBsMW(Y6F{S)c*85@9ymtpWfIq;Phj5X=4M2{;-DT;N(%J`G}5(s^-O8^=)+ef2gLM%=;C7W z+i|_mii*WCGxNMNne$E#i=Yg=dLgAYMg&7h9u35JZ%))Yq`el6%IX!P$nzVvgRlp@ z+e0O&R$^zK-})B2N1q(<%CsB8e!E3(VYE6#>LpkGCdg_$DysO~MDFMy}`_XK9;-Cv;Rum$7`KCe4d zE!+fHiKS1?pC2%8BGDTqK2`OFF{E;>eIbz&yJ~7`(2BkcpIw|C{9U&fnGf=O_V+dA zrJkvOcX|4BrA63fO}@R4PmE_Qgl&h%$3L^;I^PiIHaE|d+cX}aBs}>IOi5wlR$C+p zZXF%7*xn`Ao+Wn^Fs5W3BKSjwJ>D{H0gb2=chpHqalm7!H4$AUXlHB}{k2Fwc=~5A zqmE8g8gU!JNHULEEF@9*s@99|b#h}dk~*r}t4H5(^2n;GoZd3}Z(O(KxwcT9x=qz( zbd^GJF+`I?uvtX96C?49Y`O(Fx)u(xT%Pr++qcOmJH6m&MWv)xRhIzKy0}b|iv2oW+0!?u`RJO{L5P@iFYPJp`Lz_D z0Yd>9%Y(^bd`Hj*0Uo&Dd%k>up6>)3eAqq_eBQ|7p5vn8CLRi{6QddWn%L*7(a0i& zKrs-tXu|sqCu1dyAtF+_eU3Qq5VqH5O&|?ZT{FbySz+d3nW$C$;YlL6h>lASt#ueL z&S+-JQ_XZ=bP|5BbMO*}j!F++8F1v#Oc~iyhP$Y!AXddeYDMsdm>$(!tSKE_j}A+B zZJqvTyOPf{>`m$WXSsPMM_1uTM1;g5${w_XD0N3}oU}uhmYtTONU)u-N=BTe@1)J2 zo;XzS3T^Y0uHZ5m+T)S@$6{7gLZO(u$IjQ2#ZhJYhk@cLL4+CS@dbeR$ybX`?2AF< z#b84)g~Z8zokvW<2+7!XS8e<}a}Q6NyZA{Xw8o1~tmR&s{HX-9P~8+3MOd&MS2SA&bRi$NQR-rpIjUCE&mnf21b zM?@4Ct7ROVrR8Vhm=hrkqN~6ftEw9eDc(dwrJ}ozPMky91SD@bJ|WFJF<;I9(b?6N z$6)5W>$tZRR07zR6pJfQ9#JiA-0k6w>YkeBt&v?YrXTeV$?yyzw|y^1C`*sH(ybMu zwW?}aDj>kMk?jcQXIOIo7V=o8`3NkurXk|1V)MCtxtH})WkVKZ6~Jk#wDXmd}AAsl_H%d2a;%d;uqsKf`1K`nyV5Jx95?ZmvsfyPFf4ii0-zG=F@dO;!^44Le}>pL62n>Pk##(C(X59>wcncg7cVn zZ~#G74Yie>d!hi!|Lb_Nbw+EU4!iADA0i%hi;SP4@elc66IYR8;h8ZbnLO-;v&I%0 z&O)WJZr60RJ%#-TN|rr(Nc4CMr{LGq#i)kurcJzURr1fxdz)t0G>#Lc?u0*XN@U}} zzqOzb!^v81+zQtux_SPRNY5eH?!+Tb$?i9KB&N@1y-@m`BA89pqXXnV$WNFykvH%fm;|r#eUJ#@ zXTW@pVL^qkOe0&@?*m9NfOrFvRcs%lqYFWq(GkVb;+ zG1Cho3r+deCwKBOcVP0Z(|Pz;=U43wMwMpTV3NgV)XBO3-SN9Jpd1P2bDGGmfy{pE z-u=qBB~>NN*?rGNca2AiRB?G!0yLTLCbTkd!6U<;6Ot{ip7tY16k!zgrU6xVy-Kw3 z)Tfi{O@0NelPzQaJ`26V5>OebAL?72c*;}$M|5DK!u$eSEhb-r8-A-z#><8aV=+TS z>TGj@{s+9I%nN2HWm`!G-9!})zpq1A)}?#En004ex~KSVOpR=f)Pc* z=R5H>!Te0n0>)ofGh8hZv_@eq?fW2nnVD#bKUMCLq>@&FF$Yyyn0!}h0|yYj3tpawSe`S)gIg~&zRpKGdH=b|XZUqf$r={yi-5x>8rKAiT{KKr?7 z&_iZgLvnWWhfX?~WiAI>&hXYLU-n*xP5dSI;>YI{{t^Z7m0N0Wtrgj2f-qL=EF2Y9(2%wWeY-6KAoF~pEaYE8Os>> z8RcSR-tDNpdg1EA>BsQ*o3mZ5NWGe)t4ow$a2#d+qm6tF+51vx_Or8u*W#=)L@M)} zt)U}G<~d=#IX(1l+ce5~A~@h4zKR)Z=_XHu)ulP?Yocgsb-$FsHXrTF_ueayq#@7#K*KVXoQem zAqT;ckeqd}$lu?wwQo<~WpM`N1m_rET31{7GgW!mF;#sxRo1y!O3uPpndiBf;IY|~ zTLY8v*56;He&V^7;^>ZlBXwo?>D|IiWb*n`SsUsb2hXb^o7x<^y(1Sp?}^=ow?b1| zp#^n%Jk@w<-`|_725IXtz6v6?k}hYeA$=SHk6;<&bH98B0$SH14N~=sydZD-`!jup zN#%0w!|_U8jX=Ss9mc7~T3qZ8>c8JW=b<9{%wknYhY}{SAyZ4f?;>duj#q?P4>twu zYri)BO(~TrX=S|q0s33=QTNgH&rqR*4gLhuY*05?;g4d#A9BQ@y|lRJpz_Q!sOn57 zHgDPM6Cr$pBC0H;j!!@D`=;2C0JWMMd*FR$Z?xWbCvY2@>)3Y;=YSNH6=X;!Czb8XN>5v5k5qC~QDB8w(;V3ak6_N_hkad;Sey&0KEcy`!*lx3-C(7IQ^Jn%*HNU7ah`r!8vwkWb| z6JyU*j7-yu+KBRik^k-nIow0H=ZwXaat1$lA?X&o;8hT~qF}AJZ)5(4E2i&t#DQ%( zN$+Xr)#~b-5dP_^mLEfJve1bdv8|G(d@GTb(p`K0Uny$+uAXEa&a$n#YD_I<5qzNO zI?rs!O_yKd(GPdQaua}M5X)li-aqOH03Qd+^58qyh2$41I*Wu5p{-i%s@CR%)n7lD2eY#YFO&lz*K z%0khOLuF;j3-_PF`{Yq+A>gvx6-SVmd-G zx6gKNaR2o>sc_EZ_fy!(CJ&@AJpx{Z_EGtz6R`NkW1M~_%2E;Yh}PfHDnwLuc!|M( z>v}TIF-N}YO%N1s6;g zekRI&x3@aj^}$26*6S*ajjKFwPu=TMKC9PZZLn8Ph~X-M2XSo4#nI2;$IdofACuJ$ zuF1tB7s$CB@nY}<;+^X1WU$TeATEKq&{U;V*a8he4})q`5?kJ%_@3g=dYTS09)8wS zm9hMhC%_v^{hA-Ajq+89H6Cifn(I<^_Ey`e0C03fn9H1N&$5{ulCo5xoMuBJrnhFN z9HaMv4Q+Gz{@{Cm)9=1y7y-?rl}ZdyF|ml5kkR#BXR)joI>#YX5-ULdTV| zGJ2V^8IR-E+e_TT{d@0|WlNJ#$Von|JbKL9(w)*Xj@72quTu(QLJWBhB&;4FvvmC= zXJ)Im6OB$hr>VbmD_*aR3!ZMEr_txHjb-J~r#($Z24eviK?FRo!1nIsEm-6V_16m^ zM$GcUN8V3t4g$vb2eJNIkjU3$dGl=7%Z%JCrKD8!0J(uoI*K=22G1sKL_LnfF0q7u z<+N<4uGP|^^wlBURx2%}FzEW}5OSqkF5BPT* zP;GNj5E~-N9iAW!eHWr)%v53T>6=Z=c(gPf)-T>)b&XLX$wEL|fL2f1=7U7u7|-P= zZ^v7WW4;d;>iKSYT(~f5-WzJ3DuBJ1NQQaRT`B`EVg9}T4~7~~DBCg)=5ZE8hh)Fp zTFKmJOo3U$5%v>HmT*!uSncI>`B=N(n!mxYfALfHC*?IerqL$c==VS@t-+F0HvuAU zoc+;#E4Jm0H)3E&8^N{^U??0qoiti`lo;_GX8}$%ip`cP2B4YN6Xdd8t)ti9<`9ev zv1tiV=T7wO1YG7m7qsR-ZE3hNVAiZ?gQOCMqDymvZohOljGm8bt%1&!$RF6rHOP{O zz_)kk15xF#{4CWcB|xudNRPn~Tx)?3JowD2aR=U2pn83tduA;?D#ueUn`@|O^dgl` z44-K{lsxmb4tL&MBEdPmOW7LExL#Y_9u6O2iQ$JFdPR!QNj);7hnEdRc^l`on0}4u zE~;16KsP^TH=FhS4pay($30{^jJjKYR}{YT$80MwM@?s89c&B1+v>OGS8VWx*br7R1|dmW^L$nR9GV$7C zh&I|>*ZFRXUav%uDp4TPgm<5JwOE-|L%~KbmMKPTyC4OZ73RP5+MQo-UL!gJW0_w8 zs$3eZTUsrFh7qc6BMk?~i(S9VJ7Z4?aKYeQi$m)V%1n>Q4V0dzS(u({9yw>gkTrGk zk0c+YldNi&YP#9V?B9!uZWiM;j+?~yIPQFi&&>SseN2+%osv(nRy492FnbMjB6hf3 zw2bPdO2Nw?=+m$t#7y`)PnWXT(0RshEN526d~N0a=p0{M+zk)DdTL?yQDQId^ouI! zB+Vg2HqOLmb^FI@FExqd+~u2zPK(WR3}6+|hj~7`bmY~$FHW@J2@qk3n&C<70jJDE z;s|!$umKnkj`m}jbe%_}?4=dfxy-UXKlDDe?W)Us*~@ApXFK&Ykii%d0hmjuM%kia zaFy7Q`#BfwywM*tap2TH#t%>Njjus2a=Mp%gl%V{F?4JRRhwq7L->9 z-3B}QdT_>2|3T+!3o(s=fjze+iO0uc9$qO6u%zl zrGIr8wxBw3vVW4D(&|}-BNJOfei^AKeZYvM_(JNQ`*X!Q$65w6F?wD|J7F6nKY;Qn zc8YJ;CU75SjOD45odrAP1VDuUn=_IjiBZaqtwCO5+sY=AwmQvi>D4j4johI=Yw34K zcNEQp;!~LqnU4%U_NSmpt(y^R<00#Bgsvj8si?a}S4MCUsm~SlS<{`P6+Mn(O8N1+ zPd_B|-^E}Gco;{IRSuGq+JX!McncbWX=PE0J>_5{+BAM=Ln5lRPC`T2Y_w*$SRkga@`!pGYR)Xx22J7bx+2&shEqC9Oe&M@idEpQ4BpP;))W9yN zht5t5%%9o$)7ZB8^C9faQ57;o2eDq{R$m!I@M~fhN_gSz@7%^j_^CyY2)iTN+l=Jr zi+x967ZZ<_W%3l=fACzA^j^QzGK*~EtzJ3J)kv{8?xz~ltNsdHsZ%6WVE9$_^j<#z z3YeI42~!K-ouFwS38sO3Ocn6dw?~m1BMtlPxrR?o(b+r6E{*7rrGk*g_Tg0it51hv z!t`Xp7qx|EZ_n8B%?4^KYUh!frzcopZ4A3uLv7#l+B(Blmeiiw{YiQEiH-cR9w)wL zpY`c@P-T4G{L-+aY^g*~Fht3i0Ti5<(w0R0o^4xdEnQZq!2)6(_&yozS2;2-3p&|S zy0?NZ%nCE!WTcIAPz!sfm-g-muWWAlfk&BgV+@TA$5;5O@IyJt9TvBTdPt2*6BP!! z<9mIe%3;*e{O;04pj2F9DIl0I47MKVzbMTU&PnfE%6g0r5nkX@p5Ju8)pBtU5Ate@ z+&g{}YHuVjH|8k`EVX1`cO{3=v1~0B^@LY_G3I;f%5z~PEYi0Z$j5*;bSL#$8`qyq zoP*eXCEjG?JHB1SMlwiZPw&r9f%`KMFE0Ua88@;WJ*Iz>JEtS_UicaN^Sh9FRWV#^-v3igiXffNL#fnqi4|Ge)P6`XDpp> zrgk_-eevs-Lp`bMi8hw8mn}idJM1rw7I@qon!Gi6?g(_g54`Kq-WcuqirfFFRQ?nU z#z8%O&Gh(Ev&iN$2o`&Aroyjby0f1&LsCwG0*kWjAB5Nfm-$IYmnjsKho@1g@s-0! zJvzF(m=q}n@hH@Rq*)W>pz`4?D~QC45BrwX)`lrHMFYse{Yg=wL_Wi5wzE5 zZCeE-FQ@Sr4O6t7nRww^L^Z&fI>?*sCTSld%#(#tQQ-8BTwIIq__tNfDo!q>VP1+BxY*sSHjKh7D!l3i7Q zX$6m7)p=gzP)3N_Qm@|bJnLCgG<~GMhVR^VnPrmaOBuF?ZR~*9^gge=p2jKLVZnVz zpFUImu*s~R$+&*?sR?%NPrvaKbR(xXhjG=q>7o!%uLf$z`C;a@Lz&{rgS@M&aXhmr zkxoIT?^a0skxSk?Hg{Zn!8C&`k3B~Y-H|082M8znrlH!?YVgXr04m$iKntcP(G>v@ z!>h+WfH6|HHJ^kX@8aq*=roOV?%F7p@`RqWc^LL{?pJ<>j*K(rIw^!5TZh3zebM+SPlP zLA}ezhE?uH7Pk zOY3#%&eov`xRud#ITw(MeP4#?{DLz5ww@Dcngnv|$>4TOoP-K=R@wIuOlFA)qwDc> zsa6yg-n=aIqKB~XJ9G}@h691BT_?eIe!KCN7w(F7x<9X;T^gRJ^cC)q&bvpY^&jB} zE{FC2n=g%Opy$l==x=7pv8m5VIay_{DR-X45uAhB&|NdL*sE00tF_&`Qe#s%6==J0 z5rWLeaT)tLJiZDzJ$3>reB>zS%&!s|)PS9c*O`<{uri*F0o05>3+r4;$8EBa{j-N3 zY^Uty&Lw-5<9p_PQ=0uALNt7n^O0Wl7FQShP|QR2=0t~vuuLXyeb-aP+o8`wOL#*z2LkwgS z!f%hp&Hoy~IPj!tfzNgzw!z=r?}wW>;CIQfwK!>cI#3L4w|FWL6a1VLf9VO5hm4O# zYGZILUJ>!|q&{AN_$)eNW^-SVRpfxtJ}&)rqEVQ|l`-!0pS1!$ZhWY}A==B6PQr)n z&SiP+(m>53X0#-HiN`kQU;oZ2B3ZWR7iug-tsl4fpi=LWK~0}!$5(TMPp#_!G%Nni zy&T)DcWKG#d`F^A6Yuxed-l8y>y(2Y;x+P#7er74v_iyI<(sUUVtA380FxYdyAkKT zk<8O^vioa$l~ucwv79fH;CMe3C-o_#&TZTkRud?pkoWLP8Aj%V6)P(O&kN(fkf z_UH+mYFygkt)WbEj?6euaJVFR<#8x-(|%M8u>Ky4g!(=DR!Pa9cS^DBOX*$Z5gl5e ztTU$J^-xdBNq!&as#}0WwwyHno3ivT2f3c~_zQIPbiy~~)}O>}*JnHYrpei*iuK}oK%?b-7fi+Sf|oY^$h%QK>R0-=y@2q zH8Dj&2+N1_=G(_-Ja@#J8PgMZ#XnJYRD6a{uK{@J$VAB-Qe_I*FE!!67#cmMbYb=D|yKW z8@wt8-y2A}w-LUJ$5p*l>B&*dnA9Mezq@CrfDg)x$xmxlmBj|v(5ZZEN={tuQi<<6Zw{Xzje{FmI~^}y$qLiSmY=avoDTk!H!FwwjOoOy?nw^Pf2`cn zV|9jt#OgT(|Kd}fuRcf$JKUr*RD0baVLqai#cV{LaBIs;~sSpdDynTk@cy`86z}er!l-0jG6C`@__v92V z0QJ-d8&XL=?aqS0QW{y3rE~_gniRnN;(Nn0>oD!uGdH?0Et&a4ftOAiZ&Qh1n)xma zJk&i=K)!3^-I9oRLAxk{eJ<^8t--p6VWh{W4?8oF7Ej@tClVFjQC`9&lC)FkvDEk+ku|0VpJr4ln zBR3ZZK68d79oYyh^t84c2M5yMxvR{AUfxK0TAQ?;c$D$dRy z6sJ^Dq+pUJ+jtO(ois}JoV|o1&+yfTyt*(gRFzb>n*B4QQlA~Ras3hFn(x>{WtoVj z!j;p=-A|u5f-dw|#)qv^owDBai`wRhx@g4~H)dqDAtIWGMme`YB+V*npmD^QGoP=m7nk@1J7}g?JcrxWN$Nc55(5^r*yH zIs=^;jnt=)&smi9dw}2-yK-7g@C^yAFhytWZr12M5YaU{f4}p4E-6)Z7;r<)FOE9U zb*B5?Ckk$*UFE(M9`TpiMJt{9O)vEy6oYv(7lU1^u`ca#tEvi~^G~+2#$%6S9N#sE ze)klh>O`srZU4<$%o)6*nT>G_)nx6kp3txy|6N~Yy`47|?Dc5B(ZONo{Mllv6tX?7 z5g>x=Ur?Sdhn~N?&ZhZU^ZItl)hfr9J_bV_FmeoQhFz?JoiXF0#Hk`=*DY3L+u+%X zPTL`f@tO{kP8CB$I{MqFP5-sXi{N89%cWtLPVm|mBjxHF-{tk`{i|5B_@MhQg1trg zcFeACyN0laHC8Ff&Ih(-ZMZc!OC+tw^oPl9!rNMRSX+ZcBPHxOQe?~*+J0fu8M&G5 zzjAni|KoR;mOZtl(mhnVJx1`kk)3H_6{pK0*(X=$S*Y4AB{VKVI5;Ic+G^wEb1 z&C?3wF+HA~LjOdW$1PWN7tXYjrkkNHEZL+i%hf$;+CE?t@O-^zlaB zN$W%C+P+`oErcu_QMzwdj~Aw09X3wIxn$rg1sE%-)+Fd74+ zHf>uoIl*_GVquT9#{o(3nzqycyC1l~bCmWCwA2wobv~GF5GGuJ##&M_rKh7Da|cPF zHjx@{*tfpZRsWGiU`oudiSKR9@B==Px^_WeY|||zGpwK_yF!GOSQuofx(d6$eOEO4 z3?3s&qP|e&fc+bP`)RA&^u0)#*Y?0+&mXzE+c-xK_{p+U*r56F^_%H2)D!J*fN>)e z=`5sQ-)oXhYxr)v>+X2mywYY&+LH2c;uxKitsUXttoPC=^Ams3~*!dZqmbSuy~gV&DSYk zf;etl3K<~il5puK%uu~Y@+enJr9FJQEPxeWNmJ@*D&L;st>q3H@lC?+ynQaTFJsrvJ_1uqE+Q1TIA(}5lCj0 zN^<5dbmJCvZGynVi6sYnxMmxDKJ108@4nH(j>sno0yuBUy-i<^2Ie*N8~NVKeQ^5E z1VgPIA&YKI%R4`}33E#w4Vts5lgusw_0o=5U%Czj^$QlCt#g;fR0sQE8kN$GDvaGh zN?;H;gnXvho33LbnXpYr2E*ksV4s5hi3a_OKvwARA>8fs?EdZm_JUqNA6$blcnmPV z#EF?24W??IckPNjO|EMFiETa(4(}ad(YntRXDw}xm&*X*u*W`Xf6!r^diQg>>-P;j z{h0=iS*}=*h9e8;%_5WMu2;LpN=5cW^tg$y^vjJCB3!N|oI%Ot-@w*j4=5S8}+0eb`8=zwt$XM5k zUn2_g^IhniC?EiA01y}e{)~UV`Bj!0;UNGdno}bMw=uARLlx|W@4z)H zSCfU?&TkRBUq|iQPAY%9-^D$%a`3@>mg&jpW46m8*|PS!{cC3d-VSpwqHhzeYe`pZ zFW(1boM8jFu6W%cgkO0Q0V3-|u8AAb zuZN}JQscVcwFZm@6$sioCm#H>o`1p{dS6HOZTP|)AC{Q5;9dJ`vaC1LxOY$B703vq7%mP!unbwX=nJWzDO@wQAGad~ViE9#L>R0@#1pZV8<_91p{4>!*_`)RLhZ)>o;|R%dFoics*G<;( z&HDk<`$3mhir5TsEBA!~3ux9G|M=HEARANi1HW(V3s58W31p|pGeT=86S~=0nn$N^ zou*>#VNfIbtpJ1@H1R9|{Qi%tGbsEc18LTdNlpmESBRnG1y>mZ;q5MME|ES!6?_IM zA3Kyl_ViyPdoaRDi2h@15^_0VjNx?HUZ*UkGqg2T)0>Ae82+_a>;Kvm1Kf?(BcBFg zi8+hg0-Xhlz@NV@!fi6cg;wPVu*zdwR?`CR1Qys(1P=a3eK*U5 zs04YDJg?SEV}m0ODj;~o&W7-d9HRg0>DWL;9LDrBK>3<(fjD*E2EsgP5K5&|&4{go zW&|Z2_Q!dw7Ita`!x7~yZ^KE)ru$@uOmBsjmfM=ig1!SDQRczw=~0eO!{CrCfo<4# zoS{wLYKH0Nh4Md7DX+EmlkvAzS_PpI+DE)UfBrPA#iIZ9j|pYCVrA0(K3jR`oS)W2 zDtC-r{RwP1iIN?B0M2)Q9hZLnk<#4}Ull%LDOH}|dT;lQJwP*(c|mb{PPj(Y2@E;( zqBHTfQy^xVO^vX7Z`3(bPI1F6ADKRp6m{gSD*pNNy!E}`N~F%z9!kM)EfU!k8$7Qj zsrB%$fkLE?R1&Nq2v$iTJ6utjZ@4Na3`}0&HZa0IThM?Ahc(Ex#z*RDUebq1-)gCb zo$7d$k~YwvpL~F^*CyrCOcPg7BR*khK;IeQ<~%p*vB%To_QDDAkf(;=TLT-x56H<; zBLqa?8U%xYQ;>9IV-+F9ORa9wp_~ZDi6qujVMfRIXM|6LhHw^U0Zi%-{(OMkMj#&u zeOJeX^CsjosOiE`&q# zgn|v)4gkmZ<7`sDY3g{$sh1&gGdgW=tI#nJ+6M*8n|?_w`)XQ5C49H?sGAQOA^Hzc zrbPT`f)!%Q(7fcl`PYm{vnnRi;0y7Kst1wy*PICd>lvpmyB648G}A6GA_?=@bYG)7 zkLxAVm%2I*^?CkWPjEO&zxr02KM!nR6}IHPFp{i#**$4-@{0IA51~9g@T@idv_01K zcPtM)fm2$f4sUYD7sdmdM*0D9S>7i5NX$H$zvel4ONlIs zNT4fT0s&!Yk~(O%ejGdFGdUb#!maLi5jtT4W5w-HF6!ICNrZWfg`;E1eu1+9g=)Bs z-=M|vK%xab26X33jzm$1T>>tj+0ePur4}s8I>BLla~BL6cOMXDxPhq%s}wdU0q8V9 zCE`t$xcET|3;z?l>>`zeKVEzmL{aahg(}^MbXn&z!R4{dE#8!o zi@$+Ai}DT~c5B&x-jw2`?Ig>38_HW2OkABa{A6p?0P4(0((oyi{Bi$T!~2-WdulCX zKY!9V@Wl5!NdNyr{C`FG&?CeRE!`mdcNclTOF$SSd-_XaC^ zg!)a!e?0hCB`Ud=(6*s8KZX6tUCm>10K$*{pqt%e%Kg9j)YNN1!V%KR2I|-o6#kNL z+4-Y&C6Dg}@E*wi@$tj<3wN$J{7sZ#P}o@a+`sT*>f0B5XBpNUl$8AgY7krfF`IT~ zugLEHa~^i$-#$W27I+$1C_mw0yqaBk33r`My40-Seo6Hb90=k zZIfyMm4?deRpjQF&WH%jeOr6K-qYsu5v?~B&lPRH9Endl4(vM5TRH99nuSMJ&AXof zoN=G7&oGVg#ZS>|A+K#}E&=y&Fy!sv+VRZ&057Kk?}N#EcWjgTl~?l4>?}LOo=>l? zwi&2E;?|`wYZ*VN`paZEmvzXI;j!JyZ=XZm%%s!jrq;c`!)xSc!S>(c)xAr-i{`(+!wU?8`QmKOGy3LzXZX11$G>OR%RD1@seDfd?yvs0 zY||`3NdAmkz5_(v)UUfk-;>c&a24Z@B3GqdwaRAi|0!Nu>V6@D|A9$^Ca*+XmG!oJKRDi1zU}SI zby^{)2q^}59zTU-zLH-Y0{NEq3TkievPzqrF@XdeYzSo|2#3T=H5%XY6VCj8t z(|P;cUXk~Ym{`&n?0(4RSr!Rh-pBKxOVr_U=z$Nb54^w65NFYuDPQtnS}`*`-!Fg0 z3u%7!)pX$L{|7vRCfG<|i3duB9H$w4W;RV0WZ+`x*!MW-|HogN7Lp5WprsC*C~&bd zsMIlG_&oj5*Sq?UHqUiv`D=S&21DCq2lWP>33JOO7qdqf@baBWyNsPn@~CfsrA7ufw)V!Ea~&@zgnJ3P93Gr>iS)I~lN{YruP8ku=+P zxw_(GvGP7gmtBd|`T4?RS=#akS1iSozO%+3I^3Nnap(3`(FcssVn_9JJ>xQF*4RPE-H@ diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 7103c823a4e1805e1cafd5d5f6a7b1b4af204671..7ef3beadca4f6329ddaf2e8d496ac41876ae6137 100644 GIT binary patch literal 43306 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 ZzhtrX35%cs6k0$aT}>m68Z}td{{Tq=O@ROa literal 31861 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 buh52Kh`H~GC<(!G;()xgiqsDYvylG-b)mO}