From e1ef02cda2b4d67f65e057e6078e12d01aad51f0 Mon Sep 17 00:00:00 2001 From: Antoonij <42318445+Antoonij@users.noreply.github.com> Date: Mon, 4 Nov 2024 18:27:08 +0100 Subject: [PATCH] add: ASHIE UPDATE (#5875) --- .../lavaland_surface_ash_walker1.dmm | 10 +- code/__DEFINES/mobs.dm | 2 + code/__DEFINES/rituals.dm | 18 + code/__DEFINES/status_effects.dm | 2 + code/__HELPERS/global_lists.dm | 2 + code/datums/components/ritual_object.dm | 119 ++ code/datums/rituals.dm | 1255 +++++++++++++++++ code/datums/status_effects/debuffs.dm | 34 + .../objects/effects/decals/Cleanable/misc.dm | 18 + code/game/objects/items/weapons/cigs.dm | 3 + .../objects/items/weapons/storage/fancy.dm | 5 + code/modules/crafting/recipes.dm | 33 + .../mining/equipment/kinetic_crusher.dm | 64 + .../simple_animal/hostile/mining/goliath.dm | 1 + .../hostile/mining/marrow_weaver.dm | 6 + icons/effects/ashwalker_rune.dmi | Bin 0 -> 23742 bytes icons/obj/lavaland/artefacts.dmi | Bin 30997 -> 32643 bytes paradise.dme | 3 + 18 files changed, 1574 insertions(+), 1 deletion(-) create mode 100644 code/__DEFINES/rituals.dm create mode 100644 code/datums/components/ritual_object.dm create mode 100644 code/datums/rituals.dm create mode 100644 icons/effects/ashwalker_rune.dmi diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index 1fad6ae212c..85a6f8c9e40 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -1402,6 +1402,14 @@ }, /turf/simulated/mineral/volcanic/lava_land_surface, /area/lavaland/surface/outdoors) +"qj" = ( +/obj/structure/stone_tile/cracked{ + dir = 4 + }, +/obj/effect/mapping_helpers/no_lava, +/obj/effect/decal/cleanable/ashrune, +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "zz" = ( /obj/effect/mapping_helpers/no_lava, /obj/structure/stone_tile{ @@ -1606,7 +1614,7 @@ ak ak cg cb -cg +qj cn bL dr diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 0e8c0873ed8..089ea970b09 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -207,6 +207,8 @@ #define isskeleton(A) (is_species(A, /datum/species/skeleton)) #define ishumanbasic(A) (is_species(A, /datum/species/human)) #define isunathi(A) (is_species(A, /datum/species/unathi)) +#define isashwalker(A) (is_species(A, /datum/species/unathi/ashwalker)) +#define isashwalkershaman(A) (is_species(A, /datum/species/unathi/ashwalker/shaman)) #define istajaran(A) (is_species(A, /datum/species/tajaran)) #define isvulpkanin(A) (is_species(A, /datum/species/vulpkanin)) #define isskrell(A) (is_species(A, /datum/species/skrell)) diff --git a/code/__DEFINES/rituals.dm b/code/__DEFINES/rituals.dm new file mode 100644 index 00000000000..c33d531225c --- /dev/null +++ b/code/__DEFINES/rituals.dm @@ -0,0 +1,18 @@ +/// Used in ritual variables +#define DEFAULT_RITUAL_RANGE_FIND 1 +#define DEFAULT_RITUAL_COOLDOWN (100 SECONDS) +#define DEFAULT_RITUAL_DISASTER_PROB 10 +#define DEFAULT_RITUAL_FAIL_PROB 10 +/// Ritual object bitflags +#define RITUAL_STARTED (1<<0) +#define RITUAL_ENDED (1<<1) +#define RITUAL_FAILED (1<<2) +/// Ritual datum bitflags +#define RITUAL_SUCCESSFUL (1<<0) +/// Invocation checks, should not be used in extra checks. +#define RITUAL_FAILED_INVALID_SPECIES (1<<1) +#define RITUAL_FAILED_EXTRA_INVOKERS (1<<2) +#define RITUAL_FAILED_MISSED_REQUIREMENTS (1<<3) +#define RITUAL_FAILED_ON_PROCEED (1<<4) +#define RITUAL_FAILED_INVALID_SPECIAL_ROLE (1<<5) + diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 29e33ed9265..b48227307a6 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -94,6 +94,8 @@ #define STATUS_EFFECT_CRUSHERMARK /datum/status_effect/crusher_mark //if struck with a proto-kinetic crusher, takes a ton of damage +#define STATUS_EFFECT_FANG_EXHAUSTION /datum/status_effect/fang_exhaust // called by poison fang (crusher trophy) + #define STATUS_EFFECT_SAWBLEED /datum/status_effect/saw_bleed //if the bleed builds up enough, takes a ton of damage #define STATUS_EFFECT_BLOODLETTING /datum/status_effect/saw_bleed/bloodletting //nerfed version diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index f8907ab3667..539019a41c8 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -313,6 +313,7 @@ prize_list["Miscellaneous"] = list( EQUIPMENT("Absinthe", /obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, 500), EQUIPMENT("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300), + EQUIPMENT("Richard & Co cigarettes", /obj/item/storage/fancy/cigarettes/cigpack_richard, 400), EQUIPMENT("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 300), EQUIPMENT("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 800), EQUIPMENT("GPS upgrade", /obj/item/gpsupgrade, 1500), @@ -342,6 +343,7 @@ EQUIPMENT("Absinthe", /obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, 250), EQUIPMENT("Cigarettes", /obj/item/storage/fancy/cigarettes, 100), EQUIPMENT("Medical Marijuana", /obj/item/storage/fancy/cigarettes/cigpack_med, 250), + EQUIPMENT("Richard & Co cigarettes", /obj/item/storage/fancy/cigarettes/cigpack_richard, 400), EQUIPMENT("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150), EQUIPMENT("Box of matches", /obj/item/storage/box/matches, 50), EQUIPMENT("Cheeseburger", /obj/item/reagent_containers/food/snacks/cheeseburger, 150), diff --git a/code/datums/components/ritual_object.dm b/code/datums/components/ritual_object.dm new file mode 100644 index 00000000000..31064e438db --- /dev/null +++ b/code/datums/components/ritual_object.dm @@ -0,0 +1,119 @@ +/datum/component/ritual_object + /// Pre-defined rituals list + var/list/rituals = list() + /// We define rituals from this. + var/list/allowed_categories + /// Required species to activate ritual object + var/list/allowed_species + /// Required special role to activate ritual object + var/list/allowed_special_role + /// Prevents from multiple uses + var/active_ui = FALSE + +/datum/component/ritual_object/Initialize( + allowed_categories = /datum/ritual, + list/allowed_species, + list/allowed_special_role +) + + if(!isobj(parent)) + return COMPONENT_INCOMPATIBLE + + src.allowed_categories = allowed_categories + src.allowed_species = allowed_species + src.allowed_special_role = allowed_special_role + get_rituals() + +/datum/component/ritual_object/RegisterWithParent() + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(attackby)) + +/datum/component/ritual_object/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_ATOM_ATTACK_HAND) + +/datum/component/ritual_object/proc/get_rituals() // We'll get all rituals for flexibility. + LAZYCLEARLIST(rituals) + + for(var/datum/ritual/ritual as anything in typecacheof(allowed_categories)) + if(!ritual.name) + continue + + rituals += new ritual + + for(var/datum/ritual/ritual as anything in rituals) + ritual.ritual_object = parent + + return + +/datum/component/ritual_object/Destroy(force) + LAZYNULL(rituals) + return ..() + +/datum/component/ritual_object/proc/attackby(datum/source, mob/user) + SIGNAL_HANDLER + + if(active_ui) + return + + if(!ishuman(user)) + return + + var/mob/living/carbon/human/human = user + + if(allowed_species && !is_type_in_list(human.dna.species, allowed_species)) + return + + if(allowed_special_role && !is_type_in_list(human.mind?.special_role, allowed_special_role)) + return + + active_ui = TRUE + INVOKE_ASYNC(src, PROC_REF(open_ritual_ui), human) + + return COMPONENT_CANCEL_ATTACK_CHAIN + +/datum/component/ritual_object/proc/open_ritual_ui(mob/living/carbon/human/human) + var/list/rituals_list = get_available_rituals(human) + + if(!LAZYLEN(rituals_list)) + active_ui = FALSE + to_chat(human, "Не имеется доступных для выполнения ритуалов.") + return + + var/choosen_ritual = tgui_input_list(human, "Выберите ритуал", "Ритуалы", rituals_list) + + if(!choosen_ritual) + active_ui = FALSE + return + + var/ritual_status + + for(var/datum/ritual/ritual as anything in rituals) + if(choosen_ritual != ritual.name) + continue + + ritual_status = ritual.pre_ritual_check(human) + break + + if(ritual_status) + active_ui = FALSE + + return FALSE + +/datum/component/ritual_object/proc/get_available_rituals(mob/living/carbon/human/human) + var/list/rituals_list = list() + + for(var/datum/ritual/ritual as anything in rituals) + if(ritual.charges == 0) + continue + + if(!COOLDOWN_FINISHED(ritual, ritual_cooldown)) + continue + + if(ritual.allowed_species && !is_type_in_list(human.dna.species, ritual.allowed_species)) + continue + + if(ritual.allowed_special_role && !is_type_in_list(human.mind?.special_role, ritual.allowed_special_role)) + continue + + LAZYADD(rituals_list, ritual.name) + + return rituals_list diff --git a/code/datums/rituals.dm b/code/datums/rituals.dm new file mode 100644 index 00000000000..4c3049d00fe --- /dev/null +++ b/code/datums/rituals.dm @@ -0,0 +1,1255 @@ +/datum/ritual + /// Linked object + var/obj/ritual_object + /// Name of our ritual + var/name + /// If ritual requires more than one invoker + var/extra_invokers = 0 + /// If invoker species isn't in allowed - he won't do ritual. + var/list/allowed_species + /// If invoker special role isn't in allowed - he won't do ritual. + var/list/allowed_special_role + /// Required to ritual invoke things are located here + var/list/required_things + /// If true - only whitelisted species will be added as invokers + var/require_allowed_species = TRUE + /// Same as require_allowed_species, but requires special role to be counted as invoker. + var/require_allowed_special_role = FALSE + /// We search for humans in that radius + var/finding_range = DEFAULT_RITUAL_RANGE_FIND + /// Amount of maximum ritual uses. + var/charges = -1 + /// Cooldown for one ritual + COOLDOWN_DECLARE(ritual_cooldown) + /// Our cooldown after we casted ritual. + var/cooldown_after_cast = DEFAULT_RITUAL_COOLDOWN + /// If our ritual failed on proceed - we'll try to cause disaster. + var/disaster_prob = DEFAULT_RITUAL_DISASTER_PROB + /// A chance of failing our ritual. + var/fail_chance = DEFAULT_RITUAL_FAIL_PROB + /// After successful ritual we'll destroy used things. + var/ritual_should_del_things = TRUE + /// After failed ritual proceed - we'll delete items. + var/ritual_should_del_things_on_fail = FALSE + /// Temporary list of objects, which we will delete. Or use in transformations! Then clear list. + var/list/used_things = list() + /// Temporary list of invokers. + var/list/invokers = list() + /// If defined - do_after will be added to your ritual + var/cast_time + +/datum/ritual/Destroy(force) + ritual_object = null + LAZYNULL(used_things) + LAZYNULL(required_things) + LAZYNULL(invokers) + return ..() + +/datum/ritual/proc/pre_ritual_check(mob/living/carbon/human/invoker) + var/failed = FALSE + var/cause_disaster = FALSE + + var/del_things = FALSE + var/start_cooldown = FALSE + + handle_ritual_object(RITUAL_STARTED) + + . = ritual_invoke_check(invoker) + switch(.) + if(RITUAL_SUCCESSFUL) + start_cooldown = TRUE + addtimer(CALLBACK(src, PROC_REF(handle_ritual_object), RITUAL_ENDED), 1 SECONDS) + charges-- + if(RITUAL_FAILED_INVALID_SPECIES) + failed = TRUE + if(RITUAL_FAILED_EXTRA_INVOKERS) + failed = TRUE + if(RITUAL_FAILED_MISSED_REQUIREMENTS) + failed = TRUE + if(RITUAL_FAILED_INVALID_SPECIAL_ROLE) + failed = TRUE + if(RITUAL_FAILED_ON_PROCEED) + failed = TRUE + cause_disaster = TRUE + start_cooldown = TRUE + if(NONE) + failed = TRUE + + if(start_cooldown) + COOLDOWN_START(src, ritual_cooldown, cooldown_after_cast) + + if(cause_disaster && prob(disaster_prob)) + disaster(invoker) + + if((. & RITUAL_SUCCESSFUL) && (ritual_should_del_things)) + del_things = TRUE + + if((. & RITUAL_FAILED_ON_PROCEED) && (ritual_should_del_things_on_fail)) + del_things = TRUE + + if(del_things) + del_things() + + if(failed) + addtimer(CALLBACK(src, PROC_REF(handle_ritual_object), RITUAL_FAILED), 2 SECONDS) + + /// We use pre-defines + LAZYCLEARLIST(invokers) + LAZYCLEARLIST(used_things) + + return . + +/datum/ritual/proc/handle_ritual_object(bitflags, silent = FALSE) + switch(bitflags) + if(RITUAL_STARTED) + . = RITUAL_STARTED + if(!silent) + playsound(ritual_object.loc, 'sound/effects/ghost2.ogg', 50, TRUE) + if(RITUAL_ENDED) + . = RITUAL_ENDED + if(!silent) + playsound(ritual_object.loc, 'sound/effects/phasein.ogg', 50, TRUE) + if(RITUAL_FAILED) + . = RITUAL_FAILED + if(!silent) + playsound(ritual_object.loc, 'sound/effects/empulse.ogg', 50, TRUE) + + return . + +/datum/ritual/proc/del_things() // This is a neutral variant with item delete. Override it to change. + for(var/obj/item/thing in used_things) + qdel(thing) + + return + +/datum/ritual/proc/ritual_invoke_check(mob/living/carbon/human/invoker) + if(!COOLDOWN_FINISHED(src, ritual_cooldown)) + return NONE + + if(charges == 0) + return NONE + + if(allowed_special_role && !is_type_in_list(invoker.mind?.special_role, allowed_special_role)) + return RITUAL_FAILED_INVALID_SPECIAL_ROLE + + if(allowed_species && !is_type_in_list(invoker.dna.species, allowed_species)) // double check to avoid funny situations + return RITUAL_FAILED_INVALID_SPECIES + + if(!check_invokers(invoker)) + return RITUAL_FAILED_EXTRA_INVOKERS + + if(required_things && !check_contents(invoker)) + return RITUAL_FAILED_MISSED_REQUIREMENTS + + if(prob(fail_chance)) + return RITUAL_FAILED_ON_PROCEED + + if(cast_time && !cast(invoker)) + return RITUAL_FAILED_ON_PROCEED + + return do_ritual(invoker) + +/datum/ritual/proc/cast(mob/living/carbon/human/invoker) + . = TRUE + LAZYADD(invokers, invoker) + + for(var/mob/living/carbon/human/human as anything in invokers) + if(!do_after(human, cast_time, ritual_object, extra_checks = CALLBACK(src, PROC_REF(action_check_contents)))) + . = FALSE + + LAZYREMOVE(invokers, invoker) + + return . + +/datum/ritual/proc/check_invokers(mob/living/carbon/human/invoker) + if(!extra_invokers) + return TRUE + + for(var/mob/living/carbon/human/human in range(finding_range, ritual_object)) + if(human == invoker) + continue + + if(require_allowed_species && !is_type_in_list(human.dna.species, allowed_species)) + continue + + if(require_allowed_special_role && !is_type_in_list(human.mind?.special_role, allowed_special_role)) + continue + + LAZYADD(invokers, human) + + if(LAZYLEN(invokers) >= extra_invokers) + break + + if(LAZYLEN(invokers) < extra_invokers) + ritual_object.balloon_alert(invoker, "требуется больше участников!") + return FALSE + + return TRUE + +/datum/ritual/proc/check_contents(mob/living/carbon/human/invoker) + var/list/atom/movable/atoms = list() + + for(var/atom/obj as anything in range(finding_range, ritual_object)) + if(isitem(obj)) + var/obj/item/close_item = obj + if(close_item.item_flags & ABSTRACT) + continue + + if(obj.invisibility) + continue + + if(obj == invoker) + continue + + if(obj == ritual_object) + continue + + if(locate(obj) in invokers) + continue + + LAZYADD(atoms, obj) + + var/list/requirements = required_things.Copy() + for(var/atom/atom as anything in atoms) + for(var/req_type in requirements) + if(requirements[req_type] <= 0) + continue + + if(!istype(atom, req_type)) + continue + + LAZYADD(used_things, atom) + + if(isstack(atom)) + var/obj/item/stack/picked_stack = atom + LAZYREMOVE(requirements[req_type], picked_stack.amount) + else + requirements[req_type]-- + + var/list/what_are_we_missing = list() + for(var/req_type in requirements) + var/number_of_things = requirements[req_type] + + if(number_of_things <= 0) + continue + + LAZYADD(what_are_we_missing, req_type) + + if(LAZYLEN(what_are_we_missing)) + ritual_object.balloon_alert(invoker, "требуется больше компонентов!") + return FALSE + + return TRUE + +/datum/ritual/proc/action_check_contents() + for(var/atom/atom as anything in used_things) + if(QDELETED(atom)) + return FALSE + + if(!(atom in range(finding_range, ritual_object))) + return FALSE + + return TRUE + +/datum/ritual/proc/do_ritual(mob/living/carbon/human/invoker) // Do ritual stuff. + return RITUAL_SUCCESSFUL + +/datum/ritual/proc/disaster(mob/living/carbon/human/invoker) + return + +/datum/ritual/ashwalker + /// If ritual requires extra shaman invokers + var/extra_shaman_invokers = 0 + /// If ritual can be invoked only by shaman + var/shaman_only = FALSE + allowed_species = list(/datum/species/unathi/ashwalker, /datum/species/unathi/draconid) + +/datum/ritual/ashwalker/check_invokers(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + if(shaman_only && !isashwalkershaman(invoker)) + to_chat(invoker, span_warning("Только шаман может выполнить данный ритуал!")) + return FALSE + + var/list/shaman_invokers = list() + + if(extra_shaman_invokers) + for(var/mob/living/carbon/human/human as anything in invokers) + if(human == invoker) + continue + + if(isashwalkershaman(human)) + LAZYADD(shaman_invokers, human) + + if(LAZYLEN(shaman_invokers) >= extra_shaman_invokers) + break + + if(LAZYLEN(shaman_invokers) < extra_shaman_invokers) + ritual_object.balloon_alert(invoker, "требуется больше шаманов!") + return FALSE + + return TRUE + +/datum/ritual/ashwalker/summon_ashstorm + name = "Ash storm summon" + shaman_only = TRUE + disaster_prob = 20 + charges = 2 + cooldown_after_cast = 1200 SECONDS + cast_time = 100 SECONDS + fail_chance = 20 + extra_invokers = 2 + required_things = list( + /mob/living/simple_animal/hostile/asteroid/goldgrub = 1 + ) + +/datum/ritual/ashwalker/summon_ashstorm/check_contents(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + for(var/mob/living/living in used_things) + if(living.stat != DEAD) + to_chat(invoker, "Существа должны быть мертвы") + return FALSE + + return TRUE + +/datum/ritual/ashwalker/summon_ashstorm/del_things() + . = ..() + + for(var/mob/living/living in used_things) + living.gib() + + return + +/datum/ritual/ashwalker/summon_ashstorm/check_invokers(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + if(!invoker.fire_stacks) + to_chat(invoker, "Инициатор ритуала должнен быть в воспламеняемой субстанции.") + return FALSE + + for(var/mob/living/carbon/human/human as anything in invokers) + if(!human.fire_stacks) + to_chat(invoker, "Участники ритуала должны быть в воспламеняемой субстанции.") + return FALSE + + return TRUE + +/datum/ritual/ashwalker/summon_ashstorm/do_ritual(mob/living/carbon/human/invoker) + SSweather.run_weather(/datum/weather/ash_storm) + message_admins("[key_name(invoker)] accomplished ashstorm ritual and summoned ashstorm") + + return RITUAL_SUCCESSFUL + +/datum/ritual/ashwalker/summon_ashstorm/disaster(mob/living/carbon/human/invoker) + var/list/targets = list() + + for(var/mob/living/carbon/human/human in SSmobs.clients_by_zlevel[invoker.z]) + if(isashwalker(human)) + LAZYADD(targets, human) + + if(!LAZYLEN(targets)) + return + + var/mob/living/carbon/human/human = pick(targets) + var/datum/disease/virus/cadaver/cadaver = new + cadaver.Contract(human) + + return + +/datum/ritual/ashwalker/summon_ashstorm/handle_ritual_object(bitflags, silent = FALSE) + . = ..(bitflags, TRUE) + + switch(.) + if(RITUAL_ENDED) + playsound(ritual_object.loc, 'sound/magic/fleshtostone.ogg', 50, TRUE) + if(RITUAL_STARTED) + playsound(ritual_object.loc, 'sound/magic/invoke_general.ogg', 50, TRUE) + if(RITUAL_FAILED) + playsound(ritual_object.loc, 'sound/magic/castsummon.ogg', 50, TRUE) + + return . + +/datum/ritual/ashwalker/transformation + name = "Transformation ritual" + disaster_prob = 30 + fail_chance = 50 + extra_invokers = 1 + cooldown_after_cast = 480 SECONDS + cast_time = 70 SECONDS + ritual_should_del_things_on_fail = TRUE + required_things = list( + /obj/item/twohanded/spear = 3, + /obj/item/organ/internal/regenerative_core = 1, + /mob/living/carbon/human = 1 + ) + +/datum/ritual/ashwalker/transformation/do_ritual(mob/living/carbon/human/invoker) + var/mob/living/carbon/human/human = locate() in used_things + + if(!human || !human.mind || !human.ckey) + return RITUAL_FAILED_ON_PROCEED // Your punishment + + human.set_species(/datum/species/unathi/ashwalker) + human.mind.store_memory("Теперь вы пеплоходец, вы часть племени! Вы довольно смутно помните о прошлой жизни, и вы не помните, как пользоваться технологиями!") + + return RITUAL_SUCCESSFUL + +/datum/ritual/ashwalker/transformation/disaster(mob/living/carbon/human/invoker) + invoker.adjustBrainLoss(15) + invoker.SetKnockdown(5 SECONDS) + + var/mob/living/carbon/human/human = locate() in used_things + + if(QDELETED(human)) + return + + var/list/destinations = list() + + for(var/obj/item/radio/beacon/beacon in GLOB.global_radios) + LAZYADD(destinations, get_turf(beacon)) + + human.forceMove(safepick(destinations)) + playsound(get_turf(human), 'sound/magic/invoke_general.ogg', 50, TRUE) + + return + +/datum/ritual/ashwalker/transformation/handle_ritual_object(bitflags, silent = FALSE) + . = ..(bitflags, TRUE) + + if(. == RITUAL_ENDED) + playsound(ritual_object.loc, 'sound/effects/clone_jutsu.ogg', 50, TRUE) + return + + . = ..(bitflags) + return . + +/datum/ritual/ashwalker/summon + name = "Summoning ritual" + disaster_prob = 30 + fail_chance = 30 + shaman_only = TRUE + cooldown_after_cast = 900 SECONDS + cast_time = 50 SECONDS + extra_invokers = 1 + +/datum/ritual/ashwalker/summon/do_ritual(mob/living/carbon/human/invoker) + var/list/ready_for_summoning = list() + + for(var/mob/living/carbon/human/human in GLOB.mob_list) + if(isashwalker(human)) + LAZYADD(ready_for_summoning, human) + + if(!LAZYLEN(ready_for_summoning)) + return RITUAL_FAILED_ON_PROCEED + + var/mob/living/carbon/human/human = tgui_input_list(invoker, "Who will be summoned?", "Summon ritual", ready_for_summoning) + + if(!human) + return RITUAL_FAILED_ON_PROCEED + + LAZYADD(invokers, invoker) + + for(var/mob/living/carbon/human/summoner as anything in invokers) + summoner.blood_volume -= (summoner.blood_volume * 0.20) + summoner.apply_damage(25, def_zone = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) + + human.forceMove(ritual_object) + human.vomit() + human.Weaken(10 SECONDS) + + return RITUAL_SUCCESSFUL + +/datum/ritual/ashwalker/summon/disaster(mob/living/carbon/human/invoker) + if(!prob(70)) + return + + var/obj/item/organ/external/limb = invoker.get_organ(pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + limb?.droplimb() + + return + +/datum/ritual/ashwalker/summon/handle_ritual_object(bitflags, silent = FALSE) + . = ..(bitflags, TRUE) + + switch(.) + if(RITUAL_ENDED) + playsound(ritual_object.loc, 'sound/weapons/zapbang.ogg', 50, TRUE) + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(5, FALSE, ritual_object.loc) + smoke.start() + if(RITUAL_STARTED) + playsound(ritual_object.loc, 'sound/magic/forcewall.ogg', 50, TRUE) + if(RITUAL_FAILED) + playsound(ritual_object.loc, 'sound/magic/invoke_general.ogg', 50, TRUE) + + return . + +/datum/ritual/ashwalker/curse + name = "Curse ritual" + disaster_prob = 30 + fail_chance = 30 + cooldown_after_cast = 600 SECONDS + cast_time = 60 SECONDS + charges = 3 + shaman_only = TRUE + extra_invokers = 2 + required_things = list( + /mob/living/carbon/human = 3 + ) + +/datum/ritual/ashwalker/curse/del_things() + for(var/mob/living/carbon/human/human as anything in used_things) + human.gib() + + return + +/datum/ritual/ashwalker/curse/check_contents(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + for(var/mob/living/carbon/human/human as anything in used_things) + if(human.stat != DEAD) + to_chat(invoker, "Гуманоиды должны быть мертвы.") + return FALSE + + return TRUE + +/datum/ritual/ashwalker/curse/do_ritual(mob/living/carbon/human/invoker) + var/list/humans = list() + + for(var/mob/living/carbon/human/human in SSmobs.clients_by_zlevel[invoker.z]) + if(!isashwalker(human)) + LAZYADD(humans, human) + + if(!LAZYLEN(humans)) + return RITUAL_FAILED_ON_PROCEED + + var/mob/living/carbon/human/human = pick(humans) + var/datum/disease/vampire/disease = new + + if(!disease.Contract(human)) + return RITUAL_FAILED_ON_PROCEED + + return RITUAL_SUCCESSFUL + +/datum/ritual/ashwalker/curse/disaster(mob/living/carbon/human/invoker) + var/list/targets = list() + + for(var/mob/living/carbon/human/human in SSmobs.clients_by_zlevel[invoker.z]) + if(isashwalker(human)) + LAZYADD(targets, human) + + if(!LAZYLEN(targets)) + return + + var/mob/living/carbon/human/human = pick(targets) + human.monkeyize() + + return + +/datum/ritual/ashwalker/power + name = "Power ritual" + disaster_prob = 40 + fail_chance = 40 + charges = 1 + cooldown_after_cast = 800 SECONDS + cast_time = 80 SECONDS + shaman_only = TRUE + extra_invokers = 4 + required_things = list( + /mob/living/simple_animal/hostile/asteroid/goliath = 3, + /obj/item/organ/internal/regenerative_core = 3 + ) + +/datum/ritual/ashwalker/power/del_things() + for(var/mob/living/living in used_things) + living.gib() + + return + +/datum/ritual/ashwalker/power/check_contents(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + for(var/mob/living/living in used_things) + if(living.stat != DEAD) + to_chat(invoker, "Существа должны быть мертвы.") + return FALSE + + return TRUE + +/datum/ritual/ashwalker/power/do_ritual(mob/living/carbon/human/invoker) + LAZYADD(invokers, invoker) + + for(var/mob/living/carbon/human/human as anything in invokers) + if(LAZYIN(human.dna?.default_blocks, GLOB.weakblock)) + human.force_gene_block(GLOB.weakblock) + + human.force_gene_block(GLOB.strongblock, TRUE) + + return RITUAL_SUCCESSFUL + +/datum/ritual/ashwalker/power/disaster(mob/living/carbon/human/invoker) + var/list/targets = list() + + for(var/mob/living/carbon/human/human in SSmobs.clients_by_zlevel[invoker.z]) + if(isashwalker(human)) + LAZYADD(targets, human) + + if(!LAZYLEN(targets)) + return + + invoker.force_gene_block(pick(GLOB.bad_blocks), TRUE) + for(var/mob/living/carbon/human/human as anything in invokers) + human.force_gene_block(pick(GLOB.bad_blocks), TRUE) + + var/mob/living/carbon/human/human = pick(targets) + human.force_gene_block(pick(GLOB.bad_blocks), TRUE) + + return + +/datum/ritual/ashwalker/power/handle_ritual_object(bitflags, silent = FALSE) + . = ..(bitflags, TRUE) + + switch(.) + if(RITUAL_ENDED) + playsound(ritual_object.loc, 'sound/magic/castsummon.ogg', 50, TRUE) + if(RITUAL_STARTED) + playsound(ritual_object.loc, 'sound/magic/smoke.ogg', 50, TRUE) + if(RITUAL_FAILED) + playsound(ritual_object.loc, 'sound/magic/strings.ogg', 50, TRUE) + + return . + +/datum/ritual/ashwalker/resurrection + name = "Resurrection ritual" + charges = 3 + extra_invokers = 2 + cooldown_after_cast = 180 SECONDS + cast_time = 100 SECONDS + shaman_only = TRUE + disaster_prob = 25 + fail_chance = 35 + required_things = list( + /obj/item/organ/internal/regenerative_core = 2, + /mob/living/carbon/human = 1, + /obj/item/reagent_containers/food/snacks/grown/ash_flora/fireblossom = 4, + /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit = 1 + ) + +/datum/ritual/ashwalker/resurrection/check_contents(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + for(var/mob/living/living in used_things) + if(living.stat != DEAD) + to_chat(invoker, "Существа должны быть мертвы.") + return FALSE + + var/mob/living/carbon/human/human = locate() in used_things + + if(!human.mind || !human.ckey) + return FALSE + + if(!isashwalker(human)) + fail_chance = 15 + + return TRUE + +/datum/ritual/ashwalker/resurrection/do_ritual(mob/living/carbon/human/invoker) + var/mob/living/carbon/human/human = locate() in used_things + human.revive() + human.adjustBrainLoss(20) + + return RITUAL_SUCCESSFUL + +/datum/ritual/ashwalker/resurrection/disaster(mob/living/carbon/human/invoker) + for(var/mob/living/carbon/human/human in range(10, ritual_object)) + if(!isashwalker(human) || human.stat == DEAD) + continue + + human.adjustBrainLoss(15) + + return + +/datum/ritual/ashwalker/resurrection/handle_ritual_object(bitflags, silent = FALSE) + . = ..(bitflags, TRUE) + + switch(.) + if(RITUAL_ENDED) + playsound(ritual_object.loc, 'sound/magic/clockwork/reconstruct.ogg', 50, TRUE) + if(RITUAL_STARTED) + playsound(ritual_object.loc, 'sound/magic/disable_tech.ogg', 50, TRUE) + if(RITUAL_FAILED) + playsound(ritual_object.loc, 'sound/magic/invoke_general.ogg', 50, TRUE) + + return . + +/datum/ritual/ashwalker/recharge + name = "Recharge rituals" + extra_invokers = 3 + disaster_prob = 30 + fail_chance = 50 + cooldown_after_cast = 360 SECONDS + cast_time = 90 SECONDS + shaman_only = TRUE + required_things = list( + /mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 1, + /mob/living/simple_animal/hostile/asteroid/goliath = 1, + /obj/item/organ/internal/regenerative_core = 1, + /mob/living/simple_animal/hostile/asteroid/goldgrub = 1 + ) + var/list/blacklisted_rituals = list(/datum/ritual/ashwalker/power) + +/datum/ritual/ashwalker/recharge/del_things() + . = ..() + + for(var/mob/living/living in used_things) + living.gib() + + return + +/datum/ritual/ashwalker/recharge/check_contents(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + for(var/mob/living/living in used_things) + if(living.stat != DEAD) + to_chat(invoker, "Существа должны быть мертвы.") + return FALSE + + return TRUE + +/datum/ritual/ashwalker/recharge/do_ritual(mob/living/carbon/human/invoker) + var/datum/component/ritual_object/component = ritual_object.GetComponent(/datum/component/ritual_object) + + if(!component) + return RITUAL_FAILED_ON_PROCEED + + for(var/datum/ritual/ritual as anything in component.rituals) + if(is_type_in_list(ritual, blacklisted_rituals)) + continue + + if(ritual.charges < 0) + continue + + ritual.charges++ + + return RITUAL_SUCCESSFUL + +/datum/ritual/ashwalker/recharge/disaster(mob/living/carbon/human/invoker) + var/list/targets = list() + + for(var/mob/living/carbon/human/human in SSmobs.clients_by_zlevel[invoker.z]) + if(isashwalker(human)) + LAZYADD(targets, human) + + if(!LAZYLEN(targets)) + return + + var/mob/living/carbon/human/human = pick(targets) + new /obj/item/organ/internal/legion_tumour(human) + + return + +/datum/ritual/ashwalker/recharge/handle_ritual_object(bitflags, silent = FALSE) + . = ..(bitflags, TRUE) + + switch(.) + if(RITUAL_ENDED) + playsound(ritual_object.loc, 'sound/magic/castsummon.ogg', 50, TRUE) + if(RITUAL_STARTED) + playsound(ritual_object.loc, 'sound/magic/cult_spell.ogg', 50, TRUE) + if(RITUAL_FAILED) + playsound(ritual_object.loc, 'sound/magic/invoke_general.ogg', 50, TRUE) + + return . + +/datum/ritual/ashwalker/population + name = "Population ritual" + extra_invokers = 2 + charges = 1 + cooldown_after_cast = 120 SECONDS + cast_time = 40 SECONDS + ritual_should_del_things_on_fail = TRUE + required_things = list( + /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit = 1, + /obj/item/reagent_containers/food/snacks/grown/ash_flora/fireblossom = 1, + /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem = 1, + /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf = 1, + /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap = 1, + /obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings = 1 + ) + +/datum/ritual/ashwalker/population/check_invokers(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + if(!isashwalkershaman(invoker)) + disaster_prob = 40 + fail_chance = 40 + + return TRUE + +/datum/ritual/ashwalker/population/del_things() + for(var/mob/living/living as anything in used_things) + living.gib() + + return + +/datum/ritual/ashwalker/population/check_contents(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + for(var/mob/living/living as anything in used_things) + if(living.stat != DEAD) + to_chat(invoker, "Существа должны быть мертвы.") + return FALSE + + return TRUE + +/datum/ritual/ashwalker/population/do_ritual(mob/living/carbon/human/invoker) + new /obj/effect/mob_spawn/human/ash_walker/shaman(ritual_object.loc) + + return RITUAL_SUCCESSFUL + +/datum/ritual/ashwalker/population/disaster(mob/living/carbon/human/invoker) + for(var/mob/living/carbon/human/human in SSmobs.clients_by_zlevel[invoker.z]) + if(!isashwalker(human) || !prob(disaster_prob)) + continue + + if(!isturf(human.loc)) + continue + + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(5, FALSE, get_turf(human.loc)) + smoke.start() + + for(var/obj/item/obj as anything in human.get_equipped_items(TRUE, TRUE)) + human.drop_item_ground(obj) + + return + +/datum/ritual/ashwalker/population/handle_ritual_object(bitflags, silent = FALSE) + . = ..(bitflags, TRUE) + + switch(.) + if(RITUAL_ENDED) + playsound(ritual_object.loc, 'sound/magic/demon_consume.ogg', 50, TRUE) + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(5, FALSE, get_turf(ritual_object.loc)) + smoke.start() + if(RITUAL_STARTED) + playsound(ritual_object.loc, 'sound/magic/cult_spell.ogg', 50, TRUE) + if(RITUAL_FAILED) + playsound(ritual_object.loc, 'sound/magic/teleport_diss.ogg', 50, TRUE) + + return . + +/datum/ritual/ashwalker/soul + name = "Soul ritual" + extra_invokers = 3 + cooldown_after_cast = 1200 SECONDS + cast_time = 60 SECONDS + required_things = list( + /mob/living/carbon/human = 3, + /obj/item/stack/sheet/animalhide/ashdrake = 1 + ) + +/datum/ritual/ashwalker/soul/check_invokers(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + if(!isashwalkershaman(invoker)) + disaster_prob = 40 + fail_chance = 70 + + return TRUE + +/datum/ritual/ashwalker/population/del_things() + var/obj/item/stack/sheet/animalhide/ashdrake/stack = locate() in used_things + stack.use(1) + + for(var/mob/living/living in used_things) + living.gib() + + return + +/datum/ritual/ashwalker/soul/check_contents(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + for(var/mob/living/living in used_things) + if(living.stat != DEAD) + to_chat(invoker, "Существа должны быть мертвы.") + return FALSE + + return TRUE + +/datum/ritual/ashwalker/soul/do_ritual(mob/living/carbon/human/invoker) + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(5, FALSE, get_turf(invoker.loc)) + smoke.start() + invoker.set_species(/datum/species/unathi/draconid) + + return RITUAL_SUCCESSFUL + +/datum/ritual/ashwalker/soul/disaster(mob/living/carbon/human/invoker) + for(var/mob/living/carbon/human/human in SSmobs.clients_by_zlevel[invoker.z]) + if(!isashwalker(human) || !prob(disaster_prob)) + continue + + if(!isturf(human.loc)) + continue + + human.SetKnockdown(10 SECONDS) + var/turf/turf = human.loc + new /obj/effect/hotspot(turf) + turf.hotspot_expose(700, 50, 1) + + return + +/datum/ritual/ashwalker/soul/handle_ritual_object(bitflags, silent = FALSE) + . = ..(bitflags, TRUE) + + switch(.) + if(RITUAL_ENDED) + playsound(ritual_object.loc, 'sound/effects/whoosh.ogg', 50, TRUE) + if(RITUAL_STARTED) + playsound(ritual_object.loc, 'sound/effects/bamf.ogg', 50, TRUE) + if(RITUAL_FAILED) + playsound(ritual_object.loc, 'sound/effects/blobattack.ogg', 50, TRUE) + + return . + +/datum/ritual/ashwalker/transmutation + name = "Transmutation ritual" + cooldown_after_cast = 120 SECONDS + cast_time = 10 SECONDS + required_things = list( + /obj/item/stack/ore = 10 + ) + +/datum/ritual/ashwalker/transmutation/check_invokers(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + if(!isashwalkershaman(invoker)) + disaster_prob = 30 + fail_chance = 50 + + return TRUE + +/datum/ritual/ashwalker/transmutation/do_ritual(mob/living/carbon/human/invoker) + var/list/ore_types = list() + + for(var/obj/item/stack/ore/ore as anything in subtypesof(/obj/item/stack/ore)) + LAZYADD(ore_types, ore) + + var/obj/item/stack/ore/ore = pick(ore_types) + ore = new(get_turf(ritual_object)) + ore.add(10) + + return RITUAL_SUCCESSFUL + +/datum/ritual/ashwalker/transmutation/disaster(mob/living/carbon/human/invoker) + for(var/mob/living/carbon/human/human in SSmobs.clients_by_zlevel[invoker.z]) + if(!isashwalker(human) || !prob(disaster_prob)) + continue + + if(!isturf(human.loc)) + continue + + human.SetKnockdown(10 SECONDS) + var/turf/turf = human.loc + new /obj/effect/hotspot(turf) + turf.hotspot_expose(700, 50, 1) + + return + +/datum/ritual/ashwalker/transmutation/handle_ritual_object(bitflags, silent = FALSE) + . = ..(bitflags, TRUE) + + switch(.) + if(RITUAL_ENDED) + playsound(ritual_object.loc, 'sound/effects/bin_close.ogg', 50, TRUE) + if(RITUAL_STARTED) + playsound(ritual_object.loc, 'sound/magic/cult_spell.ogg', 50, TRUE) + if(RITUAL_FAILED) + playsound(ritual_object.loc, 'sound/magic/knock.ogg', 50, TRUE) + + return . + +/datum/ritual/ashwalker/interrogation + name = "Interrogation ritual" + cooldown_after_cast = 50 SECONDS + shaman_only = TRUE + cast_time = 10 SECONDS + required_things = list( + /mob/living/carbon/human = 1 + ) + +/datum/ritual/ashwalker/interrogation/check_invokers(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + if(invoker.health > 10) + disaster_prob = 30 + fail_chance = 30 + + return TRUE + +/datum/ritual/ashwalker/interrogation/check_contents(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + var/mob/living/carbon/human/human = locate() in used_things + if(!human || QDELETED(human)) + return RITUAL_FAILED_ON_PROCEED + + if(human.stat == DEAD || !human.mind) + to_chat(invoker, "Гуманоид должен быть жив и иметь разум.") + return FALSE + + return TRUE + +/datum/ritual/ashwalker/interrogation/do_ritual(mob/living/carbon/human/invoker) + var/obj/effect/proc_holder/spell/empath/empath = new + if(!empath.cast(used_things, invoker)) + return RITUAL_FAILED_ON_PROCEED + + return RITUAL_SUCCESSFUL + +/datum/ritual/ashwalker/interrogation/disaster(mob/living/carbon/human/invoker) + for(var/mob/living/carbon/human/human in SSmobs.clients_by_zlevel[invoker.z]) + if(!isashwalker(human)) + continue + + if(!isturf(human.loc)) + continue + + var/turf/turf = human.loc + to_chat(human, "HONK") + SEND_SOUND(turf, sound('sound/items/airhorn.ogg')) + human.AdjustHallucinate(150 SECONDS) + human.EyeBlind(5 SECONDS) + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(5, FALSE, turf) + smoke.start() + + return + +/datum/ritual/ashwalker/interrogation/handle_ritual_object(bitflags, silent = FALSE) + . = ..(bitflags, TRUE) + + switch(.) + if(RITUAL_ENDED) + playsound(ritual_object.loc, 'sound/effects/anvil_start.ogg', 50, TRUE) + if(RITUAL_STARTED) + playsound(ritual_object.loc, 'sound/effects/hulk_hit_airlock.ogg', 50, TRUE) + if(RITUAL_FAILED) + playsound(ritual_object.loc, 'sound/effects/forge_destroy.ogg', 50, TRUE) + + return . + +/datum/ritual/ashwalker/creation + name = "Creation ritual" + cooldown_after_cast = 150 SECONDS + shaman_only = TRUE + extra_invokers = 2 + cast_time = 60 SECONDS + required_things = list( + /mob/living/carbon/human = 2 + ) + +/datum/ritual/ashwalker/creation/check_invokers(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + for(var/mob/living/carbon/human/human as anything in invokers) + if(human.stat != UNCONSCIOUS) + disaster_prob += 20 + fail_chance += 20 + + return TRUE + +/datum/ritual/ashwalker/creation/check_contents(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + for(var/mob/living/carbon/human/human as anything in used_things) + if(human.stat != DEAD) + to_chat(invoker, "Гуманоиды должны быть мертвы.") + return FALSE + + if(!isashwalker(human)) + to_chat(invoker, "Гуманоиды должны быть пеплоходцами.") + return FALSE + + return TRUE + +/datum/ritual/ashwalker/creation/do_ritual(mob/living/carbon/human/invoker) + for(var/mob/living/mob as anything in subtypesof(/mob/living/simple_animal/hostile/asteroid)) + if(prob(30)) + mob = new(get_turf(ritual_object)) + + return RITUAL_SUCCESSFUL + +/datum/ritual/ashwalker/creation/disaster(mob/living/carbon/human/invoker) + for(var/mob/living/carbon/human/human in SSmobs.clients_by_zlevel[invoker.z]) + if(!isashwalker(human) || !prob(disaster_prob)) + continue + + if(!isturf(human.loc)) + continue + + human.SetKnockdown(10 SECONDS) + var/turf/turf = human.loc + new /obj/effect/hotspot(turf) + turf.hotspot_expose(700, 50, 1) + + return + +/datum/ritual/ashwalker/creation/handle_ritual_object(bitflags, silent = FALSE) + . = ..(bitflags, TRUE) + + switch(.) + if(RITUAL_ENDED) + playsound(ritual_object.loc, 'sound/magic/demon_consume.ogg', 50, TRUE) + if(RITUAL_STARTED) + playsound(ritual_object.loc, 'sound/magic/blind.ogg', 50, TRUE) + if(RITUAL_FAILED) + playsound(ritual_object.loc, 'sound/magic/castsummon.ogg', 50, TRUE) + + return . + +/datum/ritual/ashwalker/command + name = "Command ritual" + cooldown_after_cast = 150 SECONDS + shaman_only = TRUE + disaster_prob = 35 + extra_invokers = 1 + cast_time = 60 SECONDS + required_things = list( + /mob/living/simple_animal = 1, + /obj/item/organ/internal/regenerative_core = 1, + /obj/item/reagent_containers/food/snacks/monstermeat/spiderleg = 1 + ) + +/datum/ritual/ashwalker/command/check_contents(mob/living/carbon/human/invoker) + . = ..() + + if(!.) + return FALSE + + for(var/mob/living/simple_animal/living as anything in used_things) + if(living.client) + to_chat(invoker, "Существо должно быть бездушным.") + return FALSE + + if(living.sentience_type == SENTIENCE_BOSS) + to_chat(invoker, "Ритуал не может воздействовать на мегафауну.") + return FALSE + + if(living.stat != DEAD) + to_chat(invoker, "Существа должны быть мертвы.") + return FALSE + + return TRUE + +/datum/ritual/ashwalker/command/do_ritual(mob/living/carbon/human/invoker) + var/mob/living/simple_animal/animal = locate() in used_things + + if(QDELETED(animal)) + return RITUAL_FAILED_ON_PROCEED + + animal.faction = invoker.faction + animal.revive() + var/list/candidates = SSghost_spawns.poll_candidates("Вы хотите сыграть за раба пеплоходцев?", ROLE_SENTIENT, TRUE, source = animal) + + if(!LAZYLEN(candidates) || QDELETED(animal)) // no travelling into nullspace + return RITUAL_FAILED_ON_PROCEED // no mercy guys. But you got friendly creature + + var/mob/mob = pick(candidates) + animal.key = mob.key + animal.universal_speak = 1 + animal.sentience_act() + animal.can_collar = 1 + animal.maxHealth = max(animal.maxHealth, 200) + animal.del_on_death = FALSE + animal.master_commander = invoker + + animal.mind.store_memory("Мой хозяин [invoker.name], выполню [genderize_ru(invoker.gender, "его", "её", "этого", "их")] цели любой ценой!") + to_chat(animal, chat_box_green("Вы - раб пеплоходцев. Всегда подчиняйтесь и помогайте им.")) + add_game_logs("стал питомцем игрока [key_name(invoker)]", animal) + + return RITUAL_SUCCESSFUL + +/datum/ritual/ashwalker/command/disaster(mob/living/carbon/human/invoker) + for(var/mob/living/carbon/human/human in SSmobs.clients_by_zlevel[invoker.z]) + if(!isashwalker(human) || !prob(disaster_prob)) + continue + + if(!isturf(human.loc)) + continue + + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(5, FALSE, get_turf(human.loc)) + smoke.start() + + var/mob/living/simple_animal/mob = locate() in used_things + qdel(mob) + + new /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient(get_turf(ritual_object)) + + return + +/datum/ritual/ashwalker/command/handle_ritual_object(bitflags, silent = FALSE) + . = ..(bitflags, TRUE) + + switch(.) + if(RITUAL_ENDED) + playsound(ritual_object.loc, 'sound/magic/demon_consume.ogg', 50, TRUE) + if(RITUAL_STARTED) + playsound(ritual_object.loc, 'sound/magic/invoke_general.ogg', 50, TRUE) + if(RITUAL_FAILED) + playsound(ritual_object.loc, 'sound/magic/castsummon.ogg', 50, TRUE) + + return . + diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 839a3cdf909..d95b87db1f1 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -57,6 +57,40 @@ /datum/status_effect/pacifism/on_remove() REMOVE_TRAIT(owner, TRAIT_PACIFISM, id) +/datum/status_effect/fang_exhaust + id = "fang_exhaust" + alert_type = null + duration = 2 SECONDS + var/modifier + +/datum/status_effect/fang_exhaust/on_creation(mob/living/simple_animal/new_owner, modifier = 1.1) + if(!istype(new_owner)) + return FALSE + + src.modifier = modifier + return ..() + +/datum/status_effect/fang_exhaust/on_apply() + var/mob/living/simple_animal/new_owner = owner + + for(var/thing in new_owner.damage_coeff) + if(!new_owner.damage_coeff[thing]) + continue + + new_owner.damage_coeff[thing] *= modifier + + return ..() + +/datum/status_effect/fang_exhaust/on_remove() + var/mob/living/simple_animal/new_owner = owner + + for(var/thing in new_owner.damage_coeff) + if(!new_owner.damage_coeff[thing]) + continue + + new_owner.damage_coeff[thing] /= modifier + + return ..() /datum/status_effect/shadow_boxing id = "shadow barrage" diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index 4c9df1cec23..82e17d98a83 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -257,3 +257,21 @@ /obj/effect/decal/cleanable/glass/plasma icon_state = "plasmatiny" + +/obj/effect/decal/cleanable/ashrune + name = "Ash rune" + desc = "A rune drawn in ash." + icon = 'icons/effects/ashwalker_rune.dmi' + icon_state = "AshRuneFilled" + anchored = TRUE + mergeable_decal = FALSE + mouse_opacity = MOUSE_OPACITY_ICON + +/obj/effect/decal/cleanable/ashrune/ComponentInitialize() + AddComponent( \ + /datum/component/ritual_object, \ + /datum/ritual/ashwalker, \ + ) + +/obj/effect/decal/cleanable/ashrune/is_cleanable() + return FALSE diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index 3b1b3cc915c..a548b051206 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -331,6 +331,9 @@ LIGHTERS ARE IN LIGHTERS.DM /obj/item/clothing/mask/cigarette/shadyjims list_reagents = list("nicotine" = 40, "lipolicide" = 7.5, "ammonia" = 2, "atrazine" = 1, "toxin" = 1.5) +/obj/item/clothing/mask/cigarette/richard + list_reagents = list("nicotine" = 40, "epinephrine" = 5, "absinthe" = 5) + /obj/item/clothing/mask/cigarette/rollie name = "rollie" desc = "A roll of dried plant matter wrapped in thin paper." diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index c491bd96b2a..b1c8f7b30f9 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -335,6 +335,11 @@ item_state = "upliftpacket" cigarette_type = /obj/item/clothing/mask/cigarette/menthol +/obj/item/storage/fancy/cigarettes/cigpack_richard + name = "\improper Richard & Co cigarettes" + desc = "Курят только отчаянные." + cigarette_type = /obj/item/clothing/mask/cigarette/richard + /obj/item/storage/fancy/cigarettes/cigpack_robust name = "\improper Robust packet" desc = "Smoked by the robust." diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index cd2fd7af4fd..4dcd10981ba 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -1519,6 +1519,39 @@ subcategory = CAT_WEAPON always_availible = FALSE +/datum/crafting_recipe/pickaxe + name = "Iron pickaxe" + reqs = list( + /obj/item/stack/sheet/wood = 2, + /obj/item/stack/sheet/metal = 5 + ) + result = list(/obj/item/pickaxe) + category = CAT_PRIMAL + +/datum/crafting_recipe/pickaxe/silver + name = "Silver pickaxe" + reqs = list( + /obj/item/stack/sheet/wood = 2, + /obj/item/stack/sheet/mineral/silver = 5 + ) + result = list(/obj/item/pickaxe/silver) + +/datum/crafting_recipe/pickaxe/golden + name = "Golden pickaxe" + reqs = list( + /obj/item/stack/sheet/wood = 2, + /obj/item/stack/sheet/mineral/gold = 5 + ) + result = list(/obj/item/pickaxe/gold) + +/datum/crafting_recipe/pickaxe/diamond + name = "Diamond pickaxe" + reqs = list( + /obj/item/stack/sheet/wood = 2, + /obj/item/stack/sheet/mineral/diamond = 5 + ) + result = list(/obj/item/pickaxe/diamond) + /datum/crafting_recipe/drone name = "Inactive Drone" result = list(/obj/item/inactive_drone) diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 978864203c5..822765b8858 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -361,6 +361,70 @@ if(.) H.charge_time += bonus_value +/// Massive eyed tentacle +/obj/item/crusher_trophy/eyed_tentacle + name = "Massive eyed tentacle" + desc = "Большое и глазастое щупальце древнего голиафа. Может быть установлено как трофей крашера." + icon_state = "ancient_goliath_tentacle" + denied_type = /obj/item/crusher_trophy/eyed_tentacle + bonus_value = 1 + +/obj/item/crusher_trophy/eyed_tentacle/effect_desc() + return "causes kinetic crusher to deal 50% more damage if target has more than 90% HP" + +/obj/item/crusher_trophy/eyed_tentacle/on_melee_hit(mob/living/target, mob/living/user) + var/procent = (target.health / target.maxHealth) * 100 + if(procent < 90) + return + + var/obj/item/twohanded/kinetic_crusher/crusher = user.get_active_hand() + if(!crusher) + return + + target.apply_damage(crusher.force * bonus_value, crusher.damtype, user.zone_selected) + +/// Poison fang +/obj/item/crusher_trophy/fang + name = "Poison fang" + desc = "Уродливый и отравленный коготь. Может быть установлен как трофей крашера." + icon_state = "ob_gniga" + denied_type = /obj/item/crusher_trophy/fang + bonus_value = 1.1 + +/obj/item/crusher_trophy/fang/effect_desc() + return "causes fauna to get 10% more damage after mark destroyed for 2 seconds" + +/obj/item/crusher_trophy/fang/on_mark_detonation(mob/living/target, mob/living/user) + target.apply_status_effect(STATUS_EFFECT_FANG_EXHAUSTION, bonus_value) + +/// Frost gland +/obj/item/crusher_trophy/gland + name = "Frost gland" + desc = "Замороженная железа. Может быть установлена как трофей крашера." + icon_state = "ice_gniga" + denied_type = /obj/item/crusher_trophy/gland + bonus_value = 0.9 + +/obj/item/crusher_trophy/gland/effect_desc() + return "causes fauna to deal 10% less damage when marked" + +/obj/item/crusher_trophy/gland/on_mark_application(mob/living/simple_animal/target, datum/status_effect/crusher_mark/mark, had_mark) + if(had_mark) + return + + if(!istype(target)) + return + + target.melee_damage_lower *= bonus_value + target.melee_damage_upper *= bonus_value + +/obj/item/crusher_trophy/gland/on_mark_detonation(mob/living/simple_animal/target, mob/living/user) + if(!istype(target)) // double check + return + + target.melee_damage_lower /= bonus_value + target.melee_damage_upper /= bonus_value + //blood-drunk hunter /obj/item/crusher_trophy/miner_eye name = "eye of a blood-drunk hunter" diff --git a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm index da1aa23923b..b9a6169ab4b 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm @@ -244,6 +244,7 @@ speed = 4 pre_attack_icon = "Goliath_preattack" throw_message = "does nothing to the rocky hide of the" + crusher_loot = /obj/item/crusher_trophy/eyed_tentacle loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) //A throwback to the asteroid days butcher_results = list(/obj/item/reagent_containers/food/snacks/monstermeat/goliath = 2, /obj/item/stack/sheet/bone = 2) crusher_drop_mod = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/mining/marrow_weaver.dm b/code/modules/mob/living/simple_animal/hostile/mining/marrow_weaver.dm index c70328f1574..2fd8b9fe08b 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/marrow_weaver.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/marrow_weaver.dm @@ -7,6 +7,7 @@ icon_aggro = "weaver" icon_dead = "weaver_dead" throw_message = "bounces harmlessly off the" + crusher_loot = /obj/item/crusher_trophy/fang butcher_results = list(/obj/item/stack/ore/uranium = 2, /obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/sinew = 1, /obj/item/stack/sheet/animalhide/weaver_chitin = 3, /obj/item/reagent_containers/food/snacks/monstermeat/spiderleg = 2) loot = list() attacktext = "кусает" //can we revert all translation in our code? @@ -136,15 +137,20 @@ /mob/living/simple_animal/hostile/asteroid/marrowweaver/frost name = "frostbite weaver" desc = "A big, angry, venomous ice spider. It likes to snack on bone marrow. Its preferred food source is you." + icon_state = "weaver_ice" icon_living = "weaver_ice" icon_aggro = "weaver_ice" icon_dead = "weaver_ice_dead" + melee_damage_lower = 10 //stronger venom, but weaker attack. melee_damage_upper = 13 + poison_type = "frostoil" poison_per_bite = 5 + crusher_loot = /obj/item/crusher_trophy/gland + /mob/living/simple_animal/hostile/asteroid/marrowweaver/tendril fromtendril = TRUE diff --git a/icons/effects/ashwalker_rune.dmi b/icons/effects/ashwalker_rune.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3c703403738527c82e74720c5b56234b47c48d59 GIT binary patch literal 23742 zcmbrmcT`i~-tLQnL4<&S(gmeTM|wx47eS;c9qAoJAb}9jNRuWVq)C$|MX5q4q4y?8 z6B0T~OHoK5z>UAX-*eu5&U^1aHzRW;S+lG$k~Q1&`96t#Y^V*q#&(U2j0~u&qw$1{ zjJ)e_q97-oxrzstlU`UJ8<=W#b#+~gX3e~}s|iwxdUEUMmk`pKg%2)|g2mEEWiGvZ zVrW8ke{0@_^r0lg^yy0t=K#kS?tU-beSOHtK)EL7elG%#f1CJW{%i>8iwcd8PMFl0 zNlZzh)W$!OFfbLCZ%^fcP*ti#q_qx(Bs%RDZcu0mOZ)+(!GZdWjF)18=*3L4ji7;U)93?#>x;91qAE~|~o zzsi))F9=}gak>h|-RQZIxSicAs2uJO<4fGW`S&UN)P)OMHC$svV70KX$u@j zJ%y2STBZn>hDNFwX{`K<5N#f?oL4h|xF1?oFEnqetokQ&$)^%@KCCi4r+@L>I4e+NG!ydP%8k!6@@}+=fzg4U9s~0{qUSggl zkE{)8b(`(E|7+2_JvVB-{_sO(`FmI7eY5}1$LtZeRlV^}pj2UY(`;Za0k#tKHW9GC+j2U-3 zv&Kejlo?FQBPM~jacPl(eJHWPlqxSg%$R*>y8XS>6j`N%+61aQ%9t=6)ec8AYJB{I zO})_19BgOR+6-=fNx4whO|JXvGF2&f`oyz-FzztzdsUK@9!_OSLdb|I@b=f{E6roCq#RN@@*6JoR% zb&w=Ld$z>r&AX5v%OlsV2(??Qh*RuPwj&x}D#n&ZpGR`t+)EG$&PfztyZB|~YNw+9 z?$0+p$j@k4n^a2%zTwDxEw1WiY}ub*!C7}ceu4NKYmbxrZxDag(&6(45BL9EGArdO zec5}zr(H!@`26M9mKXqYI7@3i%@m_Paij|0^Nl%N@%*HcuVa`=hN0!(R8fz=sPtaf{XB%ez&Jmc0yiA-NWRylx(Rw@|T(Z2MzY`>{1> zJg3SBWd8s8yZ(u)yrWXfhh0&UDcLU7pev~bs2Tsh>-OGG$_{8)jyHE&7x+n|^*ipK z7BMP?`>;{RCMOH-daYV1DkkCZ9~OONqbb-l5~tV|^>r9#IB z#t<<^#;}JIUv}v7f-%4r_9CX29AL?4P|GlxQ&0;_RcpSc(hv>p;2Y)@r zrmY1&1@dEXRMPp3-w!`DBN{lS3ayGG3ruhtD9u2fRn1=}AIDSmMjo)<-z<9$_xem_ zaTptHLMX%T_3Hwv77MZB-NA94^Nb;er>}?AGPzjC?8n{h9uu~)>(AJg>1!`u+N!!e z!1dfdC3P?k=YnfvQv9)Z4^>lbW3D1;29mp*>ythgATq4fV~s}@rKO?roZYdE9e9a+ z3|!}4kUDP6-|+L-clLxMkvQGgT!7OdyXKdn+(ep*p2<{&NgM?-=AJM$?KJ@5!NEa- z)*q=lk8`cHob|(BuD56NG41NcP(_FpFY{;HCpUXW#@O>%-u&&OhpiGk+kn0>STVXkBiAa5N$?3S z!l?Kc8j4eO4A7y}z)*^dSoC)*KfpQT>Z3;ogo}tx@JidDu=rjJg#mpN2NlLVrGne5 zx%$$Io}|Zl*z5e9J4B9xd+}~{l^@W6<5^S!@W}FpK`bu|dvnun1SKGc zwLKq}#ukS@;g4Mid6Gt%9bYS;307)*XZ7JMjw3Tz54y*?mn8bC5>aXfga*UDafKea zR=yN}BVbZ$w;X!a^yiV>@S~bNgnO6$DSN5IQBP?E;z+Ke0Kp38lQdatSGD@s8yY6t z*?Y<-X|s05kS&I>k(oD_0U?VFr_q%^;t?wV0ajRh*p(^-a{9Q<^rwH5uTeOeY}QLq2@EXAN!d0H3OKBt>M=N_mnNR*c4sjWt7#gNJ?^Ih+1eWrnRb{g?(Zun;7skWBo8Iwd zGF)j6C^3t5UF(RGdjd&}@gwka8AkjmABfI*_wVCQx7=>%sozaFXX&}^FUZl>y1~io zqh1|IaN$`5RH&Ekp6c}TB(d6hosy*S+ejM4IE|G^%>0>?W>%O$AkQp4c>-5Ixgdq7 zlbbES{QA?5WToL3nMppH%lYE8;_DklR{FusRA|`Sx_F*X6;a%j7 z@vHL9%x+MYew=llJ(%7{WRW_@Hwu3Zz}=d*M5N(jq)+mSh1%ljKFuY*FgoB^s>0M1Y3MHf`rL+^>b+Xx>V^2y1ly zcfdd{1I?gT&|o=Jf;V9q_(P~uw6hHww%NQH9IT#>%=pjz<;R=#%KPz8sBfBe+%UQ& z7^Woo8Jn~jEH_g_Y$6``lw+5$ZEc0az9WYRQU5f>UimkJGuVQ3ktB88u$+>?EDd1&R)}oZ@5>D1= z(eIX1HY%6+NPleLo8;(7L4?g*g7_|dV?hg}G}6Y%q3fBQF78a_$(GrzHkZNlq;%;& zZjNF-BgZXP3tKZb?)oc%@l9@S6Yg#}lxBCQMlX@IMnMrpOT=g`3*1qVdbM&|w6dv3lh;jHpwgmYw+r;LQo+8WT z)>yr#^Js|j=MZbRXRRb4^p8oueJymD#cS4R);>)VAfWGbe~5uqVjjoqSm!+7#$vG1 z?7eojm+rG>^2lSy1A6oYeBp6B6exCR2Sm?|Jw2}QZvOB`R99`T0>Eq`BR||3jhF!n zelrURc#%|6_4~X2^ESQX!|I$*;e(;%fY4xSn$wry@OpzTljc&eCc&9Byqrm74oKZYd|v0=6F{Ry*?c#wE!jZWo#ci?)>S672@09Lp8x z-d^A!>gR5KNZ)ylwG0XPWAz-Y;51<5s5kU80bo2#gQU^c5VRr?v~%f84RGBk_M#a# zTh{pPbOb0rRnK1m);^jcm=?jjerizI0Cw=JdCbtV17^ zU&bM!9=~Q;pH76{ekeh32-l4s1|GDAGT=@)9?%(i&qEglCCJzW7(cFXGGOu zBV;3j6ipY)IDC}SPG@JWDE_C=+Bu|kH(Gb)_e*~W>dGIZb^Q^iQj|raSmx^79HY+4 zn=Invj+RmHHyzX0#@1O@6wSdm>@1IL-c(v=j-tO84m;x4DgkPl;x!)V0K(cA-|h>& z>$fIw%JNUZ6n56LsBLT?X*DBeXMJ>$sXaKZe&#tp2K~z=E?YZKjb`2AGi45#`|4x+NjaGr zmZy$XE{Wya{6>`t--!{EEJ#t~*{7WKgf%5hpXP$9E~~-1;3;Dj#mO@Wm>%d818CNO zwdJv*PXLTT3iLOreV){=`lp5flX7M}L3&2cNyHl77Xr?nb_kQLd}>a$DO*h1lR9mv zMJ2#@;!v+>NqZs7Yb$3xwzt_e1z{4LqoZ80eL}`br=~H({vP;o|6Ijb@#pKZm(y2_ zgrzsZ*UreyV9i^CzsWV^vYJ%!xp!g!CRz@X>ZUN0lh+81^Rjdhsf;nD&&&L#2Nc`* zD@8YwY;4SM4R-gp|JK@{`vxAqYk*EO&O!+mOAsbOLL(+Sl;v!28Kc6VMLtbuWH9$O z>?rG+#=3S9!m9|QB$d^AWt^ObA6sj?CMeymG2PD_?ctX%?j`YAW89HuQI3Kc5F%zI zomCJ6ae!fzy06OcBrpSv(ijJmBb3(JxseQnL@%_?@Q3|abMnS*O6AshMkI{}jMVLo z^Qq(~Hu%@!PSp>SJJ0bSFzd1X^&?54tE5e21snXH9dN}u z63Bz)nX=cC&brWmxg#H}u^V$!L4@^qUma@1@}kuwy_z=Uwcx}Lq+eJwVs_>7LNGJl z_MaO&t#JPS#=xuo`eb=<+`g~m!U2DQ@rz{8b-mTTD!OapD>Wu~6+_C>|LO=We3VY| z{>3!?=r36Jbc9=n380u@BQ{jm#>e3o7xkkr%4JO8eWqGn`!xQ*aNW!S9N5t!@3Tv>5Ofcih_!2>V?L)WQaP zOQdWozJfB@*=~ite&(Z6E`W6at0dEn?DGFC!}K|K2&8R(a$K|*sRj09If&Z>=u&5- zCQ7(k-DB#Ba_!)78R7rx-+piC!L|hD|LEPQDELqcD(ZmKH~bgZg7fQx1aYxbtJVfY zo52T*?SFUhfBO2!`EZwzLmQWNhvI*4!FEgdjGyJlm0-f;E%W?g=1jsc>dUhqn>1Y3 z^HK=P@TsKj5&dvycFWe;-dmr7KVIxS)Nkg;qlBKOi;L%__hY`<=vK>3z2fir*~!w@ zI-<-6rq2a)V^$QMoQ7)8}#;FZu_nz9ehPiVf0zI<#&OJ2|Gy(hLalLgr#U9sTRwq|}y;tku}2kYKf zz!sw5S>uh%mM5(!D8n?s5!~cNB{E@_(S;MzrwJdxVdIg4L`Z)^zj`=5mTiPXEwMqQ z(ARbN6;N7!q!#ZQkYY)z*Y?PEeN~z)lnt3GZ`Ryt3u*6!uKAO8y&qRpD(yX4U{rOk#xiDAN^NZ zAFe3(Nkp!LKmKyPY*dw(`HO4J#PfoD!9I2!OgbG|49r-d^hHDD;-A-*hux)G%x4{n zNSuaqeKO=o$y`iF0LSb}g?wH@?_;sQ-cZ>1i%hry!V53>H9Y@O8Yh?@FOo_$i(6vJ zn;yOYx6+8`{Pxz7P%q0ez#i^TWY)AUe&3Win_GUvc7yWaR_?80C&ToGN#b-^Rvo;T zO5e1eGOJB#s-HOk`eAB4JL+3V0Z(awD(Q0nNBnB>ZmA29Qhe_Wqy^1#s4g1&30%&mCXK_ z(yJqBAIabwXCA}Yb-$TZHZeEqaF>yZd#H{xVyG*dZpy4_c^gDAyT3L!vz>VtAEg}m zu3yaynP0%&>d>Iq%6Da-le3YqNnPc|Q_+MhjkzJCQpJ`_PZApesV)v&&<}_i+p+t~ zuh`}x9n+v;I8z~)Ty5kJ9fr2*8QaI&((%Kc5b-$0-{Q;O-qh?zI2wN0l+w29Tc49f z#tv)QA90=>ep=GozhVp~nmU%Av0Bg9O)r0+R-Ua}1I#gGoBw2Zwu0hvnP1W4U9kV+ z5J{Ob^UA?J{{&Q^_&5QZjG+MECVuN@Egj&?!O+8o)=Mn72&n{Dk|rugQXU7xuoIFX z->7!)STCcT9~0+#8&xb?o6S;L8AXV^loaKCW)njG{3FQC4%Y7VbP3XO?CWREn6ktl zS9kGYv1K(Q#~&f1CFEOdef7`Y;))Rm{~g*uyQ z?zQuAg-bz|r#e1l;BBz}F#S&276!tybIeaZd<$ZxY=j(RJW$oCiVEhw$ejbuph{cx zI(>FxUPXn5nm09T3%(>x-sMKMcFO9%dl@>_V6j5yuQ7cEiJc_Hx3|o!wfE3)MrS^1 zzPdKKZh{HS8TylO-xTV)-jvBKqYfu&piR?i_e-n*oa>AyDz7Yvg+kOPt`11MzRwQT9>PeE45>GEVT2`W`Dfs zrj2(-Cc^&^xo%NZCJAxfISp{Y2C`mdh{n>LYh4O@gtHsMSesHbkbC0GC z6%)5v2W>G?ixh-PF+nC%EXA(9&QtYOcK~!ibN0U^Rn1v-h5xOoia&`Oqvbh!5*vH0 zFQD245wwMn`?$nyDFpej@%i5{QhJp^P|V?Vf?CcB8h(Ln3xS zHdxpw>*Yh?#Fyuj|ChSjZK4;qrr@5e{=^+jhD-&q*^qV@`g64D;{A?*CY7?V2b;$| z+HRG5IWrxS%9>QH60-w-?b}Pu4FFv6@1S>n5w$vX6{!OYlsxUMB;=ed z=*SEpXXi*_tFN1_%M$wl7B=3b19bwgK%WT9oyKB4{%D4(h~}emN?&}TT&A*p+GJ{Y z720tGuFfSQrNs&yHaDt1p&Q8){)(;e6$JNKPO!i--w++TGGLmtHJDN;YrBnisdyn@D)x-Yu%qUY|5T?7VW9ke3IEn)5)ZpC&UVUr2Oa#*yK3ihVL&ZhwrcR$v&dG zuJK%GVa;mf##~XxR$#K1p}Z~gP>`s{gB9VO<+P1C$j7)WL5~MenJYuJAK$!{_%GRY zb*xJi8qL)ejwN0t>8;hxC>o+bx0MoyKf2(mug41x-&@qPT<3))wpIU2fj!RE6UfGP zzu+~|7ZUf%d}t$X<^Zfr?WQ9$o?% zZGF0XVF@tlX_EEXXeXw-Z)hKv7%@bZuFV#{7SkkUUkhIm_9HX5ray4V|Iqm-5E<{0`#|dzH}CW8TlQx@og>waW((; zFTI)GTdy8&stdc-WkQ5+%FeGdi+A-^hx;8rAEpNRU+h0V@lL-88iZPHP8b~_X%~E} zh~90}zNsl56X1UH;1Q{&CswMFG)Dyc)OME_1$43tyDb*Dk7*JGP5tff<)*By^Y_tm znSbBB3I3`a3}zgY!4UPOb)_IHwe0Ym?YASvv-vDP-yA%Y`c%LG`JiBg zDKwwmraYvpkOAo7PCS0W5X+ru4?0+Xk5$s0W7KFT?jRFAN15Lq&a_Gs>AFVrj6dNE>$)zCsI^}E(1)Y`I&#S>;PhpSwca7U|JtOj81L<0W-q0DeE>Ykg zXg;m6QfoH6-msYKv$_4|xtB`rcHqO<9GDK7%o`-QiaxCr{*{)h{l$Z6|I}6(@9JLEwff1tqgVYyyGAtFO7!f-FsTW-n zRI~T4*X3?GKYSJOjD;vKul!&pjGhthS+}Rc4{}3GrrsW}dgyju;le=1NztSPT#!ud zTFbO|5iPUaQwYZMWi6mh;w^5*GS<* z@wg7@t-H$=6yLf`5F>car#eeynsiHkq4_A+{n@A+AQ19EfQ?HwYcUR_yP{`_a4jRV z(mjo|Wm*$^Or(>YzZXC33T#U8=<#_uiellClJ6g&NyIqZT&=cCT-$GEwL{hWLiU7DAmR9)abo~ zDQ7>0CZU~`V~Q5UlJ*C}>FzgL_q18WW!@a3p$Xa*rFcy_aqGG=XwN2sQhc?7j(hFw zAjYAMC36!0-8TFRf}EU`nMBf0DFSm_Dao(lmgOV-jgC@Efx=FH8WVCTYIq}=b$+yd z3Af}MoaN62Wg7C(a9G>!w!~wal{`|{F4RGqy4+uR@y@y(bGb`+|ZJ=3uc8HvuH@*7f z%q|Bcw=4AIk8W4lb9Z|7=)i@rtB><`{zwU5R?aWzHjR(A5$dG^?`I5rirTkPQ+wu! zWL?_@Xm2O%e@BUVpW3epwA|bZ0E|F4WY<$b4PsNMt6aX`M@qCkqLw(I z>Jr6BtoJNx8Ep!y&wJ^N<|m(cgLt6o;P=jmg;@70z@JlQVsZ_KqnZ8Wxd`;`8IaP* zN^*^{IUaU{tf1(+wt=c)hfy7fOxc#UX_|wl+8gf2-?Zn*q##mn5*J?swh4VG!K3A5 z_LFOes!Rr~A|Sb-+s<{UW#C}j&iUF117C3P6hKK^dWGU%aMEX5k>aUD7etZ-lDxyw z1wj|rtoT!_f~PF|ZkH`-i2&=Pg%(uqQ7gg@URp^i(r z$vZ|@|H2Lg)uZ1OLpX&Yd!Xy))fTDE?g>}2mBk_`$NpeidUWKl<#%<>kGUDKvBuDL z)oqXH(8haMP=s>w2p$qR`#4_3C$K|b_SU)EBq7l%^}-SjjC&`P`RI~4Z$gYWd zUIn{is!_%{!BR(Rst>h+hb}W0>4`PkYK;hgXkC(RBjTQ|yaKa**vowvjZ+@_W!)>F z9PKL=u4GYkY2&vfl-2UT%<|=%>xEo@p<%*%{~wB-3RRvPtusd zU2Ajs(4Yk-?OsjSv&pIWhgVeH{m|t{!i_4HZnqpd?@7RM*~DvAWOQO&9wVQgZ)2cK z(vYVE4G1b|1L?*P5X0Rvm3Sv&rWuXzT}1t5E+*6x(U#s-4(1khgf6#*;Y1-m@0E!v zuJ3o!Q$U>bDa_L*l5b{9TDhEQj((NJBW%xZ$UPmdEYM?t+-8F#@_|OO^3S+MHFIX- z5&0yvyU%>&`&=R!SrTisSIg+W#(enXUu;H?^4Tj54(pXpHk5YevFIgjmSh1{v-2X^ zh1aqUej62jGWao|ttn7U>{nD8LTH%<@)W}q!Cx{s<^WLZ7uGqPa;NKy zzgwOq_YELe!#ckiNVh2PfyIGD#oPVDuzf|;E#Qh%TIzL|lSt7+IcGh%FPdsZZe_PC zm{ic=Zn427OqyLInGm`^a2VZ=tJ;O_!10y+H0e_@nK^7H~K%> z%@@k(-&<$9FKkkKS8oOU<_ekg#G?}xgw?)6Bq~%?d4%!Qe55qAe!zneh^t$*5Xp81 zc0L~x@x;xUMNoZf-0V)T47#8NrE4jFi8);du(gIwO}p*hs#+5+p*p98q))~Im* zaGaoLB&u^#+x10)$@khk8_(92f{!HS>gNCt0rF51{<{;cZpB(l5O~g3J%+^GQy02z z+D}uc7;dfoj`KdRTe;I$cwVjZ&^1wlJtn9lgRkmV7|c6=DVk2`>EffWH^g6;_UYwb zRpq`J7V0|h%Bk3J9c@3>X$EHStwMU{3r&cl*O zT7RVcZ^A>O*iXaFGwdq)@~$haFizDD`}XGSfH`V`A6F(qx=jgTIG{93Xjs@~rdnbg z<_l8+8nkKm_F{V0-}6-sQKH*cCz0zJ$Y_gY;;LGqfVpoe0rulKujo=i*2jjp*)}Q& zkNIIg?m{u2RecQnm{{N%nt7@m-sw;!;^R&Se;mN8a+}FL$@%n;ZLj44A^tNq!Foi+ zYFJvFrsK|w#w`-z`3rg!zNDpZr4O@uxsv+BKXhjUdz$^9c<09JfAG%tLnwczTPW-+ zw8Qz!`=__V7wijj;VN{~OXM_6ys+78gAgduaAn-~8|C zqa#>2o1Jy&DS|{+#7_B%wG`T*&F1YmPhT}WNdj(c<|2N>uPrXoox4N)_xJyyGXGJj zragiBzct~fUVZF;LJ7*5!jCLm?g%C@CU;&ZxF18n*|mFRvW@dX$As~rV*5+GWJo0< zs0g$7aGlT)-qC_TNheCQIwXH*z?`^v=Ocm_$0R<21>S7ROEQGJxFG7LXdKmqfSRofN&&pfpWgM zSg2Lz)Wu5i_=~fW@QBsyi2@U4N_g%GNFA3zbH3@;k$$HW)R8)lB0$+YTCy6ariXsS ze7EM^Oh8|;y2zrd;!C})#yoVlHpAdG+^y_6#1}WRAt2ppFhUB>XrPgJD(0afy7^X1T28P`!kYm9TD340%>$I3 zukP~qP9EnOjek}qtMrEho0qqv z0PCv<$y1bJ6ks;0u3hB#>z^zB5&`wzreRhZHU?E01=ual`0j_)9!kofi=9LDP0Z~F zXJO^j@J>3jr~=yjj-k`8;!QRK(*A?tkc~!?VhT0NZ~~1g2Pn){Sh_ z1QBu_UanAbR(tsE^*jP`%|D45gF8q`A|G$v$ea+xZ(w;O<`2`qDwAJ~@6rBZeYbFH zW?iZccA|{8hzV9hniK9Z5TcY}v8>z{Ybr2@sM~D03s#d8*NtRZjJfX=*h$c>JUEZC zR{hu2z}rI=nT|FqKbu3S-mSJPs`P~Z)O=)gS0k3fL;INai=4)m8Ut4}p47Q`RcSHb zIzYrksfS}a>!g4Jb}aWLxvhV|nNKjFjh(A>HvcZQ`Up$h58zj!5jpY%-vJJ~-G; z)))9jV2al;A+*2WUsv9dX-DjKZ?k)`N8Q6aosm0AOi4_7hRDI{Z$>%#WdxHJ`ayZS zEF2sAip-4Mj&ontB%Gq%SpETb7O-Y>)zNQH{(*M$d=plH;%-Axm@(WLZA6nZM(JV2 zaLN3JEyYu3aMj$KYaGoXkM6EyXD4q~7av~7=NGWrQ#sc;vkar;q`blbIpRYTQXF(K zLuMbxH)(ou6q)6~)P_+@OHN;wAF1vN0_?~NfnDhBU_OQ;Ms3M8@;d1VC=ACkH{K9agR7Zq{m)wBY|7>O)?LBBXl-{Iz0MJ5*Tb~suvAmgrZ=qMYZ`}(S#lMPWVaGp@s z(zc$S?WVVfBKb-XG3*U6V%ct}mhcoJD`k(xS=z z$vv%Y?F(zi!h~lB=HG9Hc4S|cD5(Np`0x|jKOu# zr=+;MwdrTNd)t98R3$GJ@b|E;*hGs=7^NTMv6e+-uCUtT<_*M)%pf0Yf`T?kpOY7? z_NEj|H~B)Ga(o`IK*NP9k6r%*9$yHYG4{V}>l8~JDOUg&zaSH}lV?}fgZ&vp%SZvh zpC6veZ^zO}i;uUAyQ09!0yR95%&wClE2CAL#tk#=WNJ5E7$UC}T=Rt@-{RRr15pI_ zf6>OC-{IV~GSKPoJ#5?3eaWKIpkd4{5^+49w5On>(ZXaPbfB}}2%4KTwn2;hPIAVY zCLm)?PuM+pxnCnfeuX7|Q?Rc}THI{fzJkOWdp9H)kd-9J7)&D3xONX1m2$<)o7;4D z?*FjHfgc{U=wFUOBYJ~Uo~f1;6D-9vLahX>^tsku>ld@`3`n(zf~&+rg~aVWuW+qIoh1-UsoiQwR(1o186{o(765@@zhu%T1!u zLh8EF2Y_rrEx4b_**0!6DQE7X4{z+Uxrg}Ra*MC$`DW;|nZod&KAu+dbp@^xB;L5} zy&sd{^E15SbVlfi;fwGj!S&TNu3;~+IW z0}(2<=dJG)y0`&7vf#GsBW2|w8gA^zEDt9(&`9JR#xD0-tmfQNwxz<2`K7VDz5)Fj zOsGplW`cgTLVSk@XlQZ%FuHn#z%($O>!cH3{5k=@6Z+*US49z>FZ$(?ic~Kn@FO;K zh zt@^zimB`}O((LLS8k+Wyc?uPE^82JuO2bG5b1Icpz9!CMNBoH&VYk+YSeEJ&4>S_q zc*iWCuu+|QC2xPu%%{`X43_l?1shBCR;euz`~j)KTIGzxD^@c;VHjJaQI4;vHHlz0 z3n}Sv_oIvc zid3Zet)PwR7ksQgq~6;F{NyIgQnzg}-c{ZXwl>|*l`omuivd3~RY_x1B)K`ZCGSlM z{N{F^-;7oDf%M%hHZ(evygIW!`=K;CI#N~3`(?0Y}r(L_`Qyo z`;Q6Fm0j$Y0v4G~p=ywqc_97VZyg`7kpzQ63ZfUKlI&MwS49H>qO$L6b;JS&oWqsw#pWnhyjlD7+&6A?OBPHDf z>c?^S%>&2e1{C_XkZ(4ZaJkQQp=6CV!6uQs-4kf}MOaL}0A34z`?>w&>)Y(c{H`pV z3FrjrrvmjCRqs113KC2Mh&ExsC;Nn`E$60oe-X7Euec5EjO~4a#uxPkcWce<8s@&O zQFS~M5(u5lLq$64Z@xiodlt+M4_!Q3$FiCmb_`#$QKMy^YLJSl;~_m z)zWSRwln`?v(*+obHf{Z=qX9wkB|HVnD3t-pRID~{c3y*$95;` zcinIZov3)3A}B7RE!kLt?G6$&-F$)va1>=EMf~-DM3b@h!~m+UUGw$3pn*LoJ@o;E zieCGu!9dfIRbK@6Mmvqa#cJxK9Xw$b4p!{{%?Uy^|G%9ebwju9E(C^`7Wf90m?DIg zp$?WWtXBjHpI!Zqdw}QV0MfvfnD6a(;y7{Ms7JR=^WU8z%tNBSd&g3jVEevlR3V1g zYS($uq2QzBcL+m)-64SMM*1MXcio)pNE)biVk;BWsqs-CZpZzNZ$&)$C&M9oh7dxn zAEk46ehUco5coe~7VOXo-4Ek1ihW>+t~%qAkiQti6o+F<5Tl*=CV)Ue2Y^Nk zO<`LgCOa|KgIq zOX<*@G}F*=sisz|{Lkr&SV5<{3Cf&3nbcEA-H`172}72?AvDMw%)(>0*05gDonQaH z;f9ZFejUkitI6h4F;V8Mmh$K7V;5A_*7(p%c!z*O^htFuj@GRVN4V6{HOV?Pb zss;+zslNC4{hWmf7tO(WDGhe)gRglQI_bh6L`w*=cIqd<);^`(oX9P(QvE~3N!|&A@_<^|CengJNv4ZTvjqU)UZ79Rm7&W zIO8>n(QecLVwI}sATA4K19LvShfs%QW>fgv-h7BNl1U{)->zGBAI!+6VCtlh@>H08 zKJm3j95EVI@El&LlN;eY8Ac$3RFy&I;b*m5Jbr3A#ztN2x$8aZzwRRQU}uQC;Z(<5 z>&NPwz6hf<#8=^G?O4I4Fz;M}pMf;A$H&cW7r?*B@sd;2V3Z1LgpWjx1q{U#rAerB zoY@}_9&+u;7lD1vWynZ&mT0F>3}cX$pQ2Wr!q<^vrF!+T=F``plZAz!EC4X9?TK)l*A4*i$SN}{ml41cCJ%z zKqKP~-$owsMA_Xd`z>=$%zQK#$VhM~jSX-mLd}xLgXTgli0r|o4mP+b5;{%ebD=90 zKire`;cllKjA!u@9qdc~1P?Hgm1#Glk7ns@Qu$Ti_Q?Ba)K~J?lu7N>XcV9Fp9dOn z~-+aP1Zn?>ls`Q%W2R*?wtoh@?r}Apjt+nwcU- zaDK6-8c}|>!YVn@4)%w>e!*uPfVYS?sZVUVGuG?VmDX}uYYWO09bKocJAs6Lqi}cq z@Kw$SRhhNVW8IHwqBE1}cOM$Qi1lrOeq7b;jkInadmH~Q?sZa7^6!IzoUjf49T->~ z?BM2?9}FzUzDj;FjJnV3IBg$2!R7_ZMXa1T(SYO+HEG)b3XpyY#m;E$D><0w>0Q=N zzTME8B27{O)*GRaso60AWkc;@j^>wU;m$O=5TE2V0D(5V*$1mO^Lz*3Oa(-ktlukA2#lQ;7>f*hSQ(Lo)N4atPi!lAHZ#Vkcr<55}Zrb%I z?X1H~$b0pu=sv5w-}y@lMcdflTC856(3Lx&?$Qjurx^*aEXF;ztY#dodxGoj(Dp@Y z_i$%>b7bQ>%D)+jdvo%y8QHS=XBMTjh~|5 z8YqY|G8Pj~)ejz^5 z{`}Q40Mv5yxmC@Rl`qJqBk8Yo>t51*Z&kFV;$IZ}qiA*CE7OBqny%i)>6vs~@Zxe% zMTQnWAu4#W@2KFy+wP-^AgrGFqNS~z!x>YzWj5At&-BphSA60W6EJd&JgO{kSoY9mFC6kFk!@wH{6hGaO%l`twobI?BJGPE;r7=bxs#Ex$N&9b z0KXSvT_-z>V=+hC+^wnC(6UL_o=lL@a7oXT5G9>?-c0UXF3XA_)h`;88a2}TfC|P7 zx2;?KIubX#_#GBMGH(VUT$a+hu-2V2n%D1$b*hYl6>ZC^*lRa(Y zqIu7!8hhNUsW0ib%=8xF1r}K(6|687BT2xL_#U#C6pWzDSTJuVFx@M@Qu=;oa+bK4PW$C@ ztb7YRT&62Y?9l3RVjUSB6k&2C_QQ#K@eLxmtXr)Qb>reYKs+QAR?yil5~x0GpYB7W z`jx9x+q*imHz@r8$)0tqgp+U40(Zc~yHhrD>R%Vp*$U^Pq{g=mEERClhW==q6jvuL zd@>7vTN!uKlVzjA>M2Z$rG3#}YcKm;G zp3wpUC-~QhocI?E-3Fa?o2(gvm=1)12oh9F9_&`9bp1B_k6ei~OIra0YYMA<;w!2iq5vFXx5cD)lpm;Hxa1H*~_@~=)qk0 zmAx+@lgU4Jubdr3R&LbEX#GEpoM%`QUE8ivH0VPUR1&&?;vF{LGZRd=CScWFB0BNpz)+nRh%7BvlHHKm?1jJ-5$ z(-$1Y@uFp%bRZ-DtV5M7ZyC@5(~w3%Y1``h{NQsghb)t_bcLYi3iR#4>LKN9A7>bm z>>iIu{j5vKLeyaupx0r8CAZVU-MoJsGiLi5j1Pq2mkT{8mX(g0<8Q6}z4T5;ww9z* z3lftKW72WWd>6moR31DloFJ#zwMm-aWBh>{TtK^}HF^vGeOP3)e%Dhz?u^dG<~By% zY_5nNEcbp5s~n85wbYjhZaZ7-nuST!8KLO9h+DN6QlEYyGjQTQs@wE`nb$m(jOIx{ z5GU9rWeZ~mooVh*+tVbBYl#K@Y6U_tQ|t0Mmp9`j&gFAgvEnt4bPCwxq<)a^Ap8#- zGTl0Zr!n{)Js(;c$8O%fRlZc9;;D$~ZJ4S1FL#>k`2GLwPLs1lmQljJjsft0mCWa# zS4I?`d!@*#TIfCY%zudu(Rl3oH%tvQ;D}%-MO79C-M<C!jKtPGv1dQ!*9Uhv(ipVP;L42WLf80$|~fbHf9l z{a9`rNyuC7;`Qz`aL>OZ#n+x1CACE!+}{L7No7}mB0iFdy%xDZZq$nXgQN80bBFTF z=V{XuJX$%}mr+t}0DXKEQEWLIe?F_5(w1*xjUB)7H%!WY`+&r9NAIU6O=1s{6C#Ps z)z^4r3kVMp9P4gciXy_JIE785_NEw)5&@3UcolYZT$KPgxk9XT*PGJ<_q4_@MOIyb zs?BNj<5lco=f0go9RqN48a{?=amTB38#1Drk6>byiWLGh#w{)X+N zM^G#;$`KT-G3u%NDYLdG?ih8D`$Pmkz-}vzeW2)t6a@k$lMe#g@;N_$iVW^I*KTE7 z+nsOK#Ln^otUpdM1-SyYF^K`&n_UX@bq({WY8B7K5AKNyVxaiX#c}QpFJQIE#A_m| zppm|V0L0y@T_nKZab7HPu!-Mxs(}6xN z?F1ciQ~hgf=hg0kK`+g#ZhDTLI}bqNkT<~)Q2blL90@@fab0yOvL_Z#-kBRH%G{Zg z0?o7ntUHinN?SMc9sIKxQ2eW?>e#T@O-T;R9~u6R1buXl^@qZWW*B56DtHD?UeE#m zbdYs%?Z=5G3;D#W4H(FPd(zW)H5N|0JbiBy$vOd3%Gg2e0cebY6D!JH8ohN~L4R~{ z2cdbt?$uh?Xh+$52>ExkN|@MQ3GuN$=dz{1&si|TECNYckG$2B2JHzv?E)q9ab_2q zOuH)J2J41-HK{zo)rW{3AFcI*I-Gp>qY?F4rEny`x>YM*eStvmZ;@ z&($kZ{udrcj7UJ-XKfJCJpEHXEB6A;{ggAv-=N4bV;su2?{x2wh58SbS(DDBaE0$X z+6XI{=|Ac-;%Q-VlrtA%0HYOieecsX%BpLKvG;tCkc+e+g-5&MVVk8OP+zt3VOuF@ z4pG_+l0*S_QFMcJWC_Bemsp=a&7Pvw3D}sE{p?;WMrC`qFiuN4a)X0-05tSF;Khx2 zAU{dWE$Sw+uCAg~=$3dzAMfk`Z^=6H_{-#ls|DMU=?cL?riyu~`LjJZ->RE8pXj4B zdNmXa97tA_?F(PVG&5fOLygYw^kTTB&3DBYDS)J#o`;zanf|HiqVy1S6cZ%S zvv4ZpY^!Dhjsi6-Fy^S=)SDqJ3FARL$&3iq7w93Z!#bQ%N#@(XNa3D^jp7VjW)uXY zhag2qdg5XF6a&QIz=R!1$FOR!J}M0;jp=5eEAZ=%_4aB)AOmNY_*KdONlD^F!L^n)#3@ zxS$&)qnk1$x<=OHmKwnG9d8@BM|0HLU11uMuM@E;fe*q*Zw;#wzx0W&5#3IRIM__j zBN-QCq!nKB99`Ws%fgwZ*k|m^^k@Si-2yj0f!v+Aetu8OHa}H0vsmH6JEj=R;eQ1C ziF~A9$5Uj{6c*ChUxrQ)QL`pJ$Q|F32k{V(*!}z^eL}M0X>+B5a0Y`!|ZD3OQmv9*KAYX)2C++(bz8 z$taZD+xBQUN~OG$Uu5aux_!=n==KI{ z_fGy}hwUd1SBH#YkMAgIU^F*eNQE2g@v(|sE5mri>+>(?tYtP& zyL=ZxZ`jY2STw!`sNyXQsty2s$7WImllMV^Vo(+Po3XTq2U<-RZ2;hjY8~WE*l>jV zq@(FIgc)g2t(j)BkE)zle@p>#+t~8Z>=Fv1)KF|LyqoGwZu3-CSo^IG>UIRMyQ=S~ zZRklErxy0S^vP6^*VZhqIC0<>)OQd+M4>W8m%6*+?@}hAiCl_Cl0l7}m$g;Ey@Ph_ zxcFcX;rfujJx(Usy~FVNbN)ukUb(k6*nJV)AK{_U`4+PqP^cmPRRFr_j%`(KqP=0W zy>$UsFIoBP3KULZQ6&1qHW%Z(*X|x3sHirW#499<#)|5|7{63Qb#=vyx5fx4#C@M; zS`Sv?IXm4zy@8BhC;9gs8#&~VK^Y9c|6t{dBCXHmg8w1thj{I<%9)d=(f@`BX78yh zAZUvkz0>XGZAc)8D=tvwT=$EFUw0^Nhu6|o3?KiVvEgk|!3AmjPne*iz^82zqAfHa+kOSX(a6Jwsog#W;1HBR{_aVP?}hRY(-u4I}1otp*H ztZNHBnEP#$f&x7u1z28{`BSwPRa5tLyMBuX*aP`jHUx%Dp&lb5Qh$yoeFe8U#hgJT z_WfvFIQx8aBC89XReA~1LwqLUF4T}PXiaRcX!##R0o3Z#u2Ice#vgI5d{fHJ)S%IQ znBWVYe_)5cdjY!Q`KtU`s{^t0!t6wgw)_8sDOmgLohKLd{n}~RW9|gpCsRnUj3x)c zdFqwd2zzosxme+f%2iz;O)wvyTXGaH%f5f`e)rkQ60R!wG?8x1)l*6@8s~bAk`UrX z)vxA%#DtwQYrT#CeiC!X>*0vdcf+Lk(|vWMyW~vPGH5(;@dVHWmu6Zi8Z>rZz;Y0d&60(ip1JRiY>b&8N z8y!|R^EPK5=c>0MOu|zW&R`{hhphi04q862ccOM5eI{nGuJs@PrfT!;SbUtgDF`6E ze1`8m8AzmU=Lb(jsKzYy86Bvp7>t>OcsRZ_4v?y;5Ln|l`dL4r&jZ5Vh?hnKjWT08 z$HLt(S@LY|&W-np?E*24QC%(xVSWaT!i1C^WpfZf{m?hnG#Snid~uhCbEZ?XefJAP zQ`?cED;NK@Q9ZVIm~XljIViHJi8^*>Zt~CDY?DoU3*#v_)oT_Y!1pf=SNA?56Zf+E z00s-%-f$lV0KNe6hA)E)LHPC1Hx7C1IbB_bTUWb`jfI?)Q>=m*3473XB#4IPtTr^^ zHmrC7(s!`k!#sX>7Kb5^EbQz;`E#@<(8soA9v|>_L)sYrdOfWGe5B5K z*OUl;3XN0N-FeNhOEOxA=fNSp$HpOo>RpCIaL(!&%#_|%03=SQCY%SO8dAiN4eF@H zSE54T{<6Z61=19V&%&L8gyT&Vh#cAFBt6o_@h7Qu2s5_B&?)pb8iK+GuE^fl4CTro z!P07@BJ2tw#&$;Cn73PNfif;V*1-|)jD_63+;vzx@JqNvCnj97{fuCCYrQ4m$B^DP zNAjsYh735%xc8jV4@0$Gj|UCcKz^wr#bGrSn+ZJto1tJ0B@R< zSTZ&a`S+YUsITf#G^={8KBZs4wD`qGV)2VHz}?8}hwsB5wyA;8A>Z~8`c=Q>Lg2RV z_kH639pTX5K^#UP#7n1cFv@R~YTp=&`{+%vo4#_U)ldLM+%>)24ja9Y_bXa|*&Q#9 z_`vd*iYtiYapj?#0LtQGu(}vafcHC%zzdopY2cFtFKOX>_3%4nhh$x!=+6 z@;oZ2(U^H84zV$niP*Zn%Ip1KU9uIfTe7BEMS++p98R54z~S%h*F9E@=*`->Hj0ntj`F-D6;Vd=H~ ztAr%u+z#02_tl>O$G7fw2{*W_mZ;BAv)xXJyTM=3OLVI&yu(G{2%OIg_>q6Zmh=qZ zT8eyj&p`k7r&Lbe^D5tE$$L@_S4&<3Chb=RJ?j$LSa%Bp4!g1|iLw(xGM zMHtw3zT2&L9#@H_5?s9_ftT{}^)Z4U+ps{vHlxA~Q2rm@ZK^=!RQx;{XJKk+=Z zCYw+f=Jugdg)PIZ0_504!M*(qCVSKYNimfGG@zvn0Q||#SI}-}5vsN;n^W{gupBTH zSm*mdbTVbbp9?z8%`ZSLuH${U=eSd&Os9vqpS-=kMV%zGeN|c#*B%lPf|bbdVxAu4 zWXV<+$9anGr;dmGre?J}OY-ET2N0z@khdCWVQ^0kze}Yj(y?kbJ&urAty{iPJ14*QDa7Ob2C&SY7L;kjdn1WZmN0;$Cn1r9 z+X3a&6owO=#Q-`TUl?cS>eCyS8b_ zn%$Ue(I*Jlq@Yp?td&V`=$AOrehN1KNWe!L8a{KC@Rvz(j>Y~+Eo|@H0UF^pP}}Wi zA^S{$774BHsOd>mFSG?&ad!B+x_PUVhhW19Kn1L>kDh~v)$e_cv;Ivu8`!X_xVmmG zxcy{JHHn?SR>>(UoA(b&lrQV3Y&)=RP#_FI5qN@XR|&N|pAu|TjsQH*!_87ulP7aO zkH5s+AI&+$cZB-H&28&8|E(c4p>gY3zfoY<`3BMD!*Q2-5O0)zbBAfp0H3RjyB375 z5L6xx#}T}PnqJ5Y{AE{^eh9$Cfk_1#O$&6o)pu9rao70kV^koDU=kTJ8v=mq=3xSD z;Z&-@SOq|(?%61tRmj(p39A$PUDIBKgsB|4px**uq^SBlQG(k!)wi&27)0bO(ciuq zI~8oA6&Z3KzUOi*Ih2`=q|-~eR32vgl5^i&RmfiX3Jgh}#C*7Dt| z8TM5^rx8~d^JPd`fyWlEGcL!sVVhZ2rBXZ-2J~x&HTFX}{VEec;7@rK0O|f>FoBvw z^BKhsP}39~29)b7gASU6URtsUYc54PDo!UAbRs&&`ZCHYRYUd$L2WJwF{cZYE?e@b z(;o{$mI+B;e9(vLsq}I&C-Y%!=ldU5r9#0;tL0@yD@W&Xbo7-w9F~Wgb}{R%i>HNg zUxrrg-sj+>^%XA_bb!#wG>zRP74b#7;;>sd7a)lzD~DeDE|$FMca|XS3U&Vbc2Lu6 zqwMnPFgbAKru2Rzpxb zzvW2_Clse(V793RBlKeA2 zsqL6p74N(DS5kGaWLR`NM}kaJx^N{Y_N8jxRKFq6Q37; z#Hpuby>5t?hqq)RHwlB@kMON6YPXIW-ow`kfWX}E2j-snI`EbOaz^C%Tp&*TW7i|l zxK}xPJWiZ!ZVQXPqo-rLU7AfOqs>{lx>k-{=T|P_0hKpCb>Yw6Q%1YhScGadrFDvI z0>|C(uhLcveo3wQW!uhVPIY*9g zUX9>tDjf|N36pR#f2n3~h_2?}xCL+ZbguV(AjCvZ5bkXN@wCvh4%<>($1x_ zN-FqBz8UA^_i?unlkuYO z!t+Ib)p|t?$JGE-cgq_W5k=@;X+;Uo6~ruz7Qg3!8LxtaQbJ{433m{I2eN@7!HaYc zd$6RSE9Y6S$TEShW|9psM%XVQosY3Avd{&;zn31J`&xOx4PeDdxhM6X?4J-jTO7S7 zTvHv>*?2kT`4Rh-A1YenHKeVD*;N0T-$4%RZJPgzU@SJjyufDWTBcoGf2CnX&S~UcwO<&1%>^ z!&i%5I3K4tltcUA8(;KSE{+*JUZrr_P{Y=Ts)(MR+UA5-Swi^LAzYa@utV1 literal 0 HcmV?d00001 diff --git a/icons/obj/lavaland/artefacts.dmi b/icons/obj/lavaland/artefacts.dmi index 178610b7424dd6ddc710946af375db0749e620f8..4fc1f5cba29ca8a35adad7799aa17ab7330076b0 100644 GIT binary patch literal 32643 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