From d7c5ab79874a185ba27c589a80abe574ea1e6e27 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 20 Oct 2022 13:22:53 +0200 Subject: [PATCH] [MIRROR] PKP Mind Virus: Glorfing Cigs edition [MDB IGNORE] (#16995) * PKP Mind Virus: Glorfing Cigs edition * conflicts Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com> --- .../signals/signals_mob/signals_mob_carbon.dm | 23 +- code/__DEFINES/traits.dm | 2 + code/controllers/subsystem/timer.dm | 26 ++ code/datums/components/food/edible.dm | 2 + code/datums/looping_sounds/_looping_sound.dm | 62 +++- code/datums/looping_sounds/choking.dm | 12 + .../mood_events/generic_negative_events.dm | 4 + code/datums/status_effects/debuffs/choke.dm | 300 ++++++++++++++++++ .../status_effects/debuffs/strandling.dm | 8 +- code/game/objects/effects/particles/smoke.dm | 10 + code/game/objects/items/cigs_lighters.dm | 23 ++ code/modules/mob/living/carbon/carbon.dm | 4 +- .../mob/living/carbon/carbon_defense.dm | 2 +- .../mob/living/carbon/human/species.dm | 6 +- code/modules/mob/living/carbon/life.dm | 4 +- code/modules/mob/living/status_procs.dm | 4 + .../chemistry/reagents/toxin_reagents.dm | 10 + code/modules/tgui_input/say_modal/speech.dm | 1 + dependencies.sh | 2 +- icons/effects/particles/smoke.dmi | Bin 398 -> 480 bytes sound/creatures/crack_vomit.ogg | Bin 0 -> 18354 bytes sound/creatures/gag1.ogg | Bin 0 -> 13346 bytes sound/creatures/gag2.ogg | Bin 0 -> 6317 bytes sound/creatures/gag3.ogg | Bin 0 -> 8819 bytes sound/creatures/gag4.ogg | Bin 0 -> 7058 bytes sound/creatures/gag5.ogg | Bin 0 -> 6769 bytes tgstation.dme | 2 + 27 files changed, 484 insertions(+), 23 deletions(-) create mode 100644 code/datums/looping_sounds/choking.dm create mode 100644 code/datums/status_effects/debuffs/choke.dm create mode 100644 sound/creatures/crack_vomit.ogg create mode 100644 sound/creatures/gag1.ogg create mode 100644 sound/creatures/gag2.ogg create mode 100644 sound/creatures/gag3.ogg create mode 100644 sound/creatures/gag4.ogg create mode 100644 sound/creatures/gag5.ogg diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm index c98168560b74..96b949c5999f 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm @@ -1,7 +1,12 @@ +///Called from /datum/species/proc/help : (mob/living/carbon/human/helper, datum/martial_art/helper_style) +#define COMSIG_CARBON_PRE_HELP "carbon_pre_help" + /// Stops the rest of the help + #define COMPONENT_BLOCK_HELP_ACT (1<<0) + ///Called from /mob/living/carbon/help_shake_act, before any hugs have ocurred. (mob/living/helper) -#define COMSIG_CARBON_PRE_HELP_ACT "carbon_pre_help" +#define COMSIG_CARBON_PRE_MISC_HELP "carbon_pre_misc_help" /// Stops the rest of help act (hugging, etc) from occuring - #define COMPONENT_BLOCK_HELP_ACT (1<<0) + #define COMPONENT_BLOCK_MISC_HELP (1<<0) ///Called from /mob/living/carbon/help_shake_act on the person being helped, after any hugs have ocurred. (mob/living/helper) #define COMSIG_CARBON_HELP_ACT "carbon_help" @@ -84,10 +89,20 @@ #define COMPONENT_OVERRIDE_HEALTH_HUD (1<<0) ///Called when a carbon updates their sanity (source = carbon) #define COMSIG_CARBON_SANITY_UPDATE "carbon_sanity_update" +///Called when a carbon attempts to breath, before the breath has actually occured +#define COMSIG_CARBON_ATTEMPT_BREATHE "carbon_attempt_breathe" + // Prevents the breath + #define COMSIG_CARBON_BLOCK_BREATH (1 << 0) ///Called when a carbon breathes, before the breath has actually occured #define COMSIG_CARBON_PRE_BREATHE "carbon_pre_breathe" ///Called when a carbon updates their mood #define COMSIG_CARBON_MOOD_UPDATE "carbon_mood_update" +///Called when a carbon attempts to eat (eating) +#define COMSIG_CARBON_ATTEMPT_EAT "carbon_attempt_eat" + // Prevents the breath + #define COMSIG_CARBON_BLOCK_EAT (1 << 0) +///Called when a carbon vomits : (distance, force) +#define COMSIG_CARBON_VOMITED "carbon_vomited" // /mob/living/carbon/human signals @@ -103,9 +118,11 @@ #define COMSIG_HUMAN_EARLY_UNARMED_ATTACK "human_early_unarmed_attack" ///from mob/living/carbon/human/UnarmedAttack(): (atom/target, proximity, modifiers) #define COMSIG_HUMAN_MELEE_UNARMED_ATTACK "human_melee_unarmed_attack" -//from /mob/living/carbon/human/proc/check_shields(): (atom/hit_by, damage, attack_text, attack_type, armour_penetration) +///from /mob/living/carbon/human/proc/check_shields(): (atom/hit_by, damage, attack_text, attack_type, armour_penetration) #define COMSIG_HUMAN_CHECK_SHIELDS "human_check_shields" #define SHIELD_BLOCK (1<<0) +///from /mob/living/carbon/human/proc/force_say(): () +#define COMSIG_HUMAN_FORCESAY "human_forcesay" // Mob transformation signals ///Called when a human turns into a monkey, from /mob/living/carbon/proc/finish_monkeyize() diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 2d6ef8cb537f..363b8233f4f0 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -855,6 +855,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define ITEM_SCALING_TRAIT "item_scaling" /// Trait given by Objects that provide blindsight #define ITEM_BLIND_TRAIT "blind_item_trait" +/// Trait given by choking +#define CHOKING_TRAIT "choking_trait" /// Trait given by hallucinations #define HALLUCINATION_TRAIT "hallucination_trait" diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 8ca3ee76f9b8..ad5b743e9634 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -661,6 +661,32 @@ SUBSYSTEM_DEF(timer) return null return timer.timeToRun - (timer.flags & TIMER_CLIENT_TIME ? REALTIMEOFDAY : world.time) +/** + * Update the delay on an existing LOOPING timer + * Will come into effect on the next process + * + * Arguments: + * * id a timerid or a /datum/timedevent + * * new_wait the new wait to give this looping timer + */ +/proc/updatetimedelay(id, new_wait, datum/controller/subsystem/timer/timer_subsystem) + if (!id) + return + if (id == TIMER_ID_NULL) + CRASH("Tried to update the wait of null timerid. Use TIMER_STOPPABLE flag") + if (istype(id, /datum/timedevent)) + var/datum/timedevent/timer = id + timer.wait = new_wait + return + timer_subsystem = timer_subsystem || SStimer + //id is string + var/datum/timedevent/timer = timer_subsystem.timer_id_dict[id] + if(!timer || timer.spent) + return + if(!(timer.flags & TIMER_LOOP)) + CRASH("Tried to update the wait of a non looping timer. This is not supported") + timer.wait = new_wait + #undef BUCKET_LEN #undef BUCKET_POS #undef TIMER_MAX diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index 97583ef0baf0..9106c6e73ebe 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -451,6 +451,8 @@ Behavior that's still missing from this component that original food items had t var/who = (isnull(feeder) || eater == feeder) ? "your" : "[eater.p_their()]" to_chat(feeder, span_warning("You have to remove [who] [covered] first!")) return FALSE + if(SEND_SIGNAL(eater, COMSIG_CARBON_ATTEMPT_EAT, parent) & COMSIG_CARBON_BLOCK_EAT) + return return TRUE ///Check foodtypes to see if we should send a moodlet diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm index c13ee7bba8ff..d8b5abc5560c 100644 --- a/code/datums/looping_sounds/_looping_sound.dm +++ b/code/datums/looping_sounds/_looping_sound.dm @@ -2,12 +2,14 @@ * A datum for sounds that need to loop, with a high amount of configurability. */ /datum/looping_sound - /// The source of the sound, or the recipient of the sound. - var/atom/parent /// (list or soundfile) Since this can be either a list or a single soundfile you can have random sounds. May contain further lists but must contain a soundfile at the end. var/mid_sounds /// The length of time to wait between playing mid_sounds. var/mid_length + /// Amount of time to add/take away from the mid length, randomly + var/mid_length_vary = 0 + /// If we should always play each sound once per loop of all sounds. Weights here only really effect order, and could be disgarded + var/each_once = FALSE /// Override for volume of start sound. var/start_volume /// (soundfile) Played before starting the mid_sounds loop. @@ -26,26 +28,34 @@ var/vary = FALSE /// The max amount of loops to run for. var/max_loops - /// If true, plays directly to provided atoms instead of from them. - var/direct /// The extra range of the sound in tiles, defaults to 0. var/extra_range = 0 - /// The ID of the timer that's used to loop the sounds. - var/timer_id /// How much the sound will be affected by falloff per tile. var/falloff_exponent /// The falloff distance of the sound, var/falloff_distance - /// Do we skip the starting sounds? - var/skip_starting_sounds = FALSE /// Are the sounds affected by pressure? Defaults to TRUE. var/pressure_affected = TRUE /// Are the sounds subject to reverb? Defaults to TRUE. var/use_reverb = TRUE /// Are we ignoring walls? Defaults to TRUE. var/ignore_walls = TRUE + + // State stuff + /// The source of the sound, or the recipient of the sound. + var/atom/parent + /// The ID of the timer that's used to loop the sounds. + var/timer_id /// Has the looping started yet? var/loop_started = FALSE + /// If we're using cut_mid, this is the list we cut from + var/list/cut_list + + // Args + /// Do we skip the starting sounds? + var/skip_starting_sounds = FALSE + /// If true, plays directly to provided atoms instead of from them. + var/direct /datum/looping_sound/New(_parent, start_immediately = FALSE, _direct = FALSE, _skip_starting_sounds = FALSE) if(!mid_sounds) @@ -108,6 +118,9 @@ if(max_loops && world.time >= start_time + mid_length * max_loops) stop() return + // If we have a timer, we're varying mid length, and this is happening while we're runnin mid_sounds + if(timer_id && mid_length_vary && start_time) + updatetimedelay(timer_id, mid_length + rand(-mid_length_vary, mid_length_vary)) if(!chance || prob(chance)) play(get_sound()) @@ -140,10 +153,41 @@ /// Returns the sound we should now be playing. /datum/looping_sound/proc/get_sound(_mid_sounds) - . = _mid_sounds || mid_sounds + var/list/play_from = _mid_sounds || mid_sounds + if(!each_once) + . = play_from + while(!isfile(.) && !isnull(.)) + . = pick_weight(.) + return . + + + if(!length(cut_list)) + cut_list = shuffle(play_from.Copy()) + var/list/tree = list() + . = cut_list while(!isfile(.) && !isnull(.)) + // Tree is a list of lists containign files + // If an entry in the tree goes to 0 length, we cut it from the list + tree += list(.) . = pick_weight(.) + if(!isfile(.)) + return + + // Remove the sound file + tree[length(tree)] -= . + + // Walk the tree bottom up, remove any lists that are empty + // Don't do anything for the topmost list, cause we do not care + for(var/i in length(tree) to 2 step -1) + var/list/branch = tree[i] + if(length(branch)) + break + tree[i - 1] -= list(branch) // Remove the empty list + return . + + + /// A proc that's there to handle delaying the main sounds if there's a start_sound, and simply starting the sound loop in general. /datum/looping_sound/proc/on_start() var/start_wait = 0 diff --git a/code/datums/looping_sounds/choking.dm b/code/datums/looping_sounds/choking.dm new file mode 100644 index 000000000000..444204efa1fa --- /dev/null +++ b/code/datums/looping_sounds/choking.dm @@ -0,0 +1,12 @@ +/datum/looping_sound/choking + mid_sounds = list('sound/creatures/gag1.ogg' = 1, 'sound/creatures/gag2.ogg' = 1, 'sound/creatures/gag3.ogg' = 1, 'sound/creatures/gag4.ogg' = 1, 'sound/creatures/gag5.ogg' = 1) + mid_length = 1.6 SECONDS + mid_length_vary = 0.3 SECONDS + each_once = TRUE + volume = 90 + // We want you to be hard to hear far away + falloff_exponent = 12 + pressure_affected = TRUE + vary = TRUE + // Same as above + ignore_walls = FALSE diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 27786632481c..1e2bc75649b4 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -154,6 +154,10 @@ description = "I'm nervous and on edge and I can't stand still!!" mood_change = -2 +/datum/mood_event/choke + description = "I CAN'T BREATHE!!!" + mood_change = -10 + /datum/mood_event/vomit description = "I just threw up. Gross." mood_change = -2 diff --git a/code/datums/status_effects/debuffs/choke.dm b/code/datums/status_effects/debuffs/choke.dm new file mode 100644 index 000000000000..27ed856d8bff --- /dev/null +++ b/code/datums/status_effects/debuffs/choke.dm @@ -0,0 +1,300 @@ +// Status effect given to you if you're choking on something +/datum/status_effect/choke + id = "choke" + tick_interval = 0.2 SECONDS + alert_type = null + /// Weakref to the thing we're choking on + var/datum/weakref/choking_on_ref + /// If the thing we're choking on is on fire + var/flaming + + /// The particle holder we're using to run our ash effects + var/obj/effect/abstract/particle_holder/ash + /// Our choking audio loop + var/datum/looping_sound/choke_loop + /// The delta client.pixel_y we've got + var/delta_y = 0 + /// The delta client.pixel_x we've got + var/delta_x = 0 + +/datum/status_effect/choke/on_creation(mob/living/new_owner, atom/movable/choke_on, flaming = FALSE, vomit_delay = -1) + choking_on_ref = WEAKREF(choke_on) + src.flaming = flaming + src.duration = vomit_delay + return ..() + +/datum/status_effect/choke/on_apply() + if(!iscarbon(owner)) // Ghosts do not have stomachs, and non carbons can't vomit + return FALSE + var/atom/movable/choking_on = choking_on_ref?.resolve() + if(!choking_on) + return FALSE + // If we've got an item, remove it from storage + if(isitem(choking_on)) + var/obj/item/chokin_item = choking_on + if(chokin_item.item_flags & IN_INVENTORY) + var/mob/inventory_in = chokin_item.loc + inventory_in.transferItemToLoc(chokin_item, owner, force = TRUE, silent = TRUE) + else if(!(chokin_item.item_flags & IN_STORAGE) || !chokin_item.remove_item_from_storage(owner)) + choking_on.forceMove(owner) // backup + else + choking_on.forceMove(owner) + RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_NOBREATH), .proc/no_breathing) + RegisterSignal(owner, COMSIG_MOB_LOGOUT, .proc/on_logout) + RegisterSignal(owner, COMSIG_LIVING_POST_FULLY_HEAL, .proc/remove_choke) + RegisterSignal(owner, COMSIG_LIVING_DEATH, .proc/on_death) + // Of note, this means plasma lovers lose some methods of vomiting up + RegisterSignal(owner, COMSIG_CARBON_VOMITED, .proc/on_vomit) + RegisterSignal(owner, COMSIG_CARBON_ATTEMPT_EAT, .proc/attempt_eat) + RegisterSignal(owner, COMSIG_CARBON_PRE_HELP, .proc/helped) + RegisterSignal(owner, COMSIG_CARBON_PRE_MISC_HELP, .proc/shook) + + RegisterSignal(choking_on, COMSIG_PARENT_QDELETING, .proc/remove_choke) + RegisterSignal(choking_on, COMSIG_MOVABLE_MOVED, .proc/hazard_moved) + ADD_TRAIT(owner, TRAIT_MUTE, CHOKING_TRAIT) + + owner.add_mood_event(id, /datum/mood_event/choke) + //stop on death + choke_loop = new /datum/looping_sound/choking(owner) + check_audio_state() + + owner.visible_message(span_bolddanger("[owner] tries to speak, but can't! They're choking!"), \ + span_userdanger("You try to breath, but there's a block! You're choking!"), \ + ) + + //barticles + if(flaming) + ash = new(owner, /particles/smoke/ash) + var/clear_in = rand(15 SECONDS, 25 SECONDS) + if(duration != -1) + clear_in = min(duration, clear_in) + addtimer(CALLBACK(src, .proc/clear_flame), clear_in) + return TRUE + +/datum/status_effect/choke/proc/should_do_effects() + return owner.stat != DEAD && !HAS_TRAIT(owner, TRAIT_NOBREATH) + +/datum/status_effect/choke/proc/check_audio_state() + if(!should_do_effects()) + choke_loop.stop() + return + choke_loop.start() + +/datum/status_effect/choke/on_remove() + owner.clear_mood_event(id) + REMOVE_TRAIT(owner, TRAIT_MUTE, CHOKING_TRAIT) + clean_client() + clear_flame() + if(choke_loop) + QDEL_NULL(choke_loop) + vomit_up() + return ..() + +/datum/status_effect/choke/proc/clean_client() + // juuust in case, reset our x and y's + var/client/client_owner = owner.canon_client + if(client_owner) + // Ok listen I want to use non relative animates here but BYOND WILL NOT LET ME + // REEEEEEEEE + animate(client_owner, pixel_x = client_owner.pixel_x - delta_x, pixel_y = client_owner.pixel_y - delta_y, 0.05 SECONDS, ANIMATION_PARALLEL) + delta_x = 0 + delta_y = 0 + +/datum/status_effect/choke/proc/clear_flame() + flaming = FALSE + if(ash) + QDEL_NULL(ash) + +/datum/status_effect/choke/proc/vomit_up() + var/atom/movable/choking_on = choking_on_ref?.resolve() + if(choking_on && iscarbon(owner)) + var/mob/living/carbon/carbon_owner = owner + // This will yeet the thing we're choking on out of us + carbon_owner.vomit(lost_nutrition = 20, force = TRUE, distance = 2) + +/datum/status_effect/choke/proc/on_vomit(mob/source, distance, force) + SIGNAL_HANDLER + var/atom/movable/choking_on = choking_on_ref?.resolve() + if(choking_on) + choking_on_ref = null + choking_on.forceMove(get_turf(source)) // Gotta be on a tile to throw yourself bestie + var/atom/target = get_edge_target_turf(source, source.dir) + choking_on.throw_at(target, distance, 1, source) + +/datum/status_effect/choke/get_examine_text() + return span_boldwarning("[owner.p_they(TRUE)] [owner.p_are()] choking!") + +/datum/status_effect/choke/proc/remove_choke(datum/source) + SIGNAL_HANDLER + if(!QDELETED(src)) + qdel(src) + +/datum/status_effect/choke/proc/hazard_moved(atom/movable/source) + SIGNAL_HANDLER + if(QDELETED(src)) + return + if(source.loc != owner) + qdel(src) + +/datum/status_effect/choke/proc/no_breathing(mob/living/source) + SIGNAL_HANDLER + RegisterSignal(source, SIGNAL_REMOVETRAIT(TRAIT_NOBREATH), .proc/on_breathable) + check_audio_state() + +/datum/status_effect/choke/proc/on_breathable(mob/living/source) + SIGNAL_HANDLER + UnregisterSignal(source, SIGNAL_REMOVETRAIT(TRAIT_NOBREATH)) + check_audio_state() + +/datum/status_effect/choke/proc/on_logout(datum/source) + SIGNAL_HANDLER + clean_client() + +/datum/status_effect/choke/proc/on_death(mob/living/source) + SIGNAL_HANDLER + RegisterSignal(source, COMSIG_LIVING_REVIVE, .proc/on_revive) + check_audio_state() + +/datum/status_effect/choke/proc/on_revive(mob/living/source) + SIGNAL_HANDLER + UnregisterSignal(source, COMSIG_LIVING_REVIVE) + check_audio_state() + +/datum/status_effect/choke/proc/attempt_eat(mob/source, atom/eating) + SIGNAL_HANDLER + source.balloon_alert(source, "can't get it down!") + return COMSIG_CARBON_BLOCK_EAT + +/datum/status_effect/choke/proc/helped(mob/source, mob/helping) + SIGNAL_HANDLER + INVOKE_ASYNC(src, .proc/heimlich, source, helping) + return COMPONENT_BLOCK_HELP_ACT + +/datum/status_effect/choke/proc/shook(mob/source, mob/helping) + SIGNAL_HANDLER + INVOKE_ASYNC(src, .proc/heimlich, source, helping) + return COMPONENT_BLOCK_MISC_HELP + +/datum/status_effect/choke/proc/heimlich(mob/victim, mob/aggressor) + if(victim == aggressor) + return + if(DOING_INTERACTION_WITH_TARGET(aggressor, victim)) + victim.balloon_alert(aggressor, "already helping!") + return + if(DOING_INTERACTION(aggressor, "heimlich")) + victim.balloon_alert(aggressor, "already helping someone!") + return + + if(!thrusting_continues(victim, aggressor, before_work = TRUE)) + return + aggressor.start_pulling(victim) + // I want the thing to look vaugely like the heimlich. Sue me + victim.setDir(aggressor.dir) + + var/hand_name = "hand" + if(!iscarbon(aggressor)) + hand_name = "paw" // Fuck you + + var/mob/living/livin_victim = victim + if(iscarbon(aggressor) && livin_victim.body_position == STANDING_UP) + owner.visible_message(span_warning("[aggressor] wraps [aggressor.p_their()] arms around [victim]'s stomach, and begins thrusting [aggressor.p_their()] fists towards themselves!"), \ + span_boldwarning("[aggressor] wraps [aggressor.p_their()] arms around you, and begins thrusting their hands into your chest. [capitalize(GLOB.deity)] that hurts!"), \ + ) + else + owner.visible_message(span_warning("[aggressor] places [aggressor.p_their()] [hand_name]s on [victim]'s back, and begins forcefully striking it!"), \ + span_boldwarning("You feel [aggressor]\s [hand_name]s on your back, and then repeated striking!")) + + if(!do_after_mob(aggressor, victim, 7 SECONDS, extra_checks = CALLBACK(src, .proc/thrusting_continues, victim, aggressor), interaction_key = "heimlich")) + aggressor.stop_pulling() + return + aggressor.stop_pulling() + + var/atom/movable/choking_on = choking_on_ref?.resolve() + owner.visible_message(span_green("[victim] vomits up \the[choking_on]. [victim.p_theyre()] gonna make it!"), \ + span_green("You vomit up that accursed blockage. YOU CAN BREATHE! The broken chest is a hell of a price to pay.")) + if(iscarbon(victim)) + var/mob/living/carbon/carbon_victim = victim + var/obj/item/bodypart/chest = carbon_victim.get_bodypart(BODY_ZONE_CHEST) + if(chest) + chest.force_wound_upwards(/datum/wound/blunt/severe) + playsound(owner, 'sound/creatures/crack_vomit.ogg', 120, extrarange = 5, falloff_exponent = 4) + vomit_up() + +/datum/status_effect/choke/proc/mirror_dir(atom/source, old_dir, new_dir) + SIGNAL_HANDLER + owner.dir = new_dir + +/datum/status_effect/choke/proc/thrusting_continues(mob/living/victim, mob/aggressor, before_work = FALSE) + if(iscarbon(aggressor)) + var/free_hands = 0 + // Listen bud, you need at least 2 free hands for this + for(var/hand_i in 1 to length(aggressor.held_items)) + if(!aggressor.has_hand_for_held_index(hand_i) || aggressor.held_items[hand_i]) + continue + free_hands += 1 + if(free_hands < 2) + victim.balloon_alert(aggressor, "need 2 free hands!") + return FALSE + + if(iscarbon(victim)) + var/mob/living/carbon/carbon_victim = victim + if(!carbon_victim.appears_alive()) + victim.balloon_alert(aggressor, "too late...") + return FALSE + + if(!choking_on_ref) + return FALSE + + if(!before_work) + // This check isn't valid at first because it looks dumb if other things fail + if(victim.pulledby != aggressor) + victim.balloon_alert(aggressor, "must be able to move them!") + return FALSE + + // Similarly, but also this is a burden of knowhow that's cringe + if(aggressor.dir != get_dir(aggressor, victim)) + victim.balloon_alert(aggressor, "must be facing them!") + return FALSE + + // See above + if(victim.dir != aggressor.dir) + victim.balloon_alert(aggressor, "must be facing the same way!") + return FALSE + + // If we ain't starting, deal a tad bit of brute, as a treat + // Note, we attempt to process 10 times a second, so over 7 seconds this'll deal 14 brute + if(!before_work) + victim.adjustBruteLoss(0.2) + return TRUE + +/datum/status_effect/choke/tick(delta_time) + if(!should_do_effects()) + return + + deal_damage(delta_time) + + var/client/client_owner = owner.client + if(client_owner) + do_vfx(client_owner) + +/datum/status_effect/choke/proc/deal_damage(delta_time) + owner.losebreath += 1 * delta_time // 1 breath loss a second. This will deal additional breath damage, and prevent breathing + if(flaming) + var/obj/item/bodypart/head = owner.get_bodypart(BODY_ZONE_HEAD) + if(head) + head.receive_damage(0, 2 * delta_time, 2 * delta_time) + +/datum/status_effect/choke/proc/do_vfx(client/vfx_on) + var/old_x = delta_x + delta_x = WRAP(delta_x + rand(1, 6), -13, 13) + var/old_y = delta_y + delta_y = WRAP(delta_y + rand(1, 6), -13, 13) + // We run on fast process, which procs us once every 0.2 seconds. We want to move every 0.05, so we do 4 animates + // In other news, ANIMATION_RELATIVE does not work on client.pixel_x/y. Thanks byond + animate(vfx_on, pixel_x = vfx_on.pixel_x + (delta_x - old_x), pixel_y = vfx_on.pixel_y + (delta_y - old_y), time = 0.05 SECONDS, flags = ANIMATION_PARALLEL) + for(var/i in 1 to 3) + old_x = delta_x + delta_x = WRAP(delta_x + rand(1, 6), -13, 13) + old_y = delta_y + delta_y = WRAP(delta_y + rand(1, 6), -13, 13) + animate(pixel_x = vfx_on.pixel_x + (delta_x - old_x), pixel_y = vfx_on.pixel_y + (delta_y - old_y), time = 0.05 SECONDS) diff --git a/code/datums/status_effects/debuffs/strandling.dm b/code/datums/status_effects/debuffs/strandling.dm index 9dc9ede90d66..0b63c17401f9 100644 --- a/code/datums/status_effects/debuffs/strandling.dm +++ b/code/datums/status_effects/debuffs/strandling.dm @@ -12,11 +12,11 @@ /datum/status_effect/strandling/on_apply() RegisterSignal(owner, COMSIG_CARBON_PRE_BREATHE, .proc/on_breathe) RegisterSignal(owner, COMSIG_ATOM_TOOL_ACT(TOOL_WIRECUTTER), .proc/on_cut) - RegisterSignal(owner, COMSIG_CARBON_PRE_HELP_ACT, .proc/on_self_check) + RegisterSignal(owner, COMSIG_CARBON_PRE_MISC_HELP, .proc/on_self_check) return TRUE /datum/status_effect/strandling/on_remove() - UnregisterSignal(owner, list(COMSIG_CARBON_PRE_BREATHE, COMSIG_ATOM_TOOL_ACT(TOOL_WIRECUTTER), COMSIG_CARBON_PRE_HELP_ACT)) + UnregisterSignal(owner, list(COMSIG_CARBON_PRE_BREATHE, COMSIG_ATOM_TOOL_ACT(TOOL_WIRECUTTER), COMSIG_CARBON_PRE_MISC_HELP)) /datum/status_effect/strandling/get_examine_text() return span_warning("[owner.p_they(TRUE)] seem[owner.p_s()] to be being choked by some durathread strands. You may be able to cut them off.") @@ -40,7 +40,7 @@ INVOKE_ASYNC(src, .proc/try_remove_effect, user, tool) return COMPONENT_BLOCK_TOOL_ATTACK -/// Signal proc for [COMSIG_CARBON_PRE_HELP_ACT], allowing someone to remove the effect by hand +/// Signal proc for [COMSIG_CARBON_PRE_MISC_HELP], allowing someone to remove the effect by hand /datum/status_effect/strandling/proc/on_self_check(mob/living/carbon/source, mob/living/helper) SIGNAL_HANDLER @@ -48,7 +48,7 @@ return INVOKE_ASYNC(src, .proc/try_remove_effect, helper) - return COMPONENT_BLOCK_HELP_ACT + return COMPONENT_BLOCK_MISC_HELP /** * Attempts a do_after to remove the effect and stop the strangling. diff --git a/code/game/objects/effects/particles/smoke.dm b/code/game/objects/effects/particles/smoke.dm index 3355dffa6da6..85ad0e30ba11 100644 --- a/code/game/objects/effects/particles/smoke.dm +++ b/code/game/objects/effects/particles/smoke.dm @@ -22,3 +22,13 @@ spawning = 1 velocity = list(0, 0.3, 0) friction = 0.25 + +/particles/smoke/ash + icon_state = list("ash_1" = 2, "ash_2" = 2, "ash_3" = 1, "smoke_1" = 3, "smoke_2" = 2) + count = 500 + spawning = 1 + lifespan = 1 SECONDS + fade = 0.2 SECONDS + fadein = 0.7 SECONDS + position = generator("vector", list(-3, 5, 0), list(3, 6.5, 0), NORMAL_RAND) + velocity = generator("vector", list(-0.1, 0.4, 0), list(0.1, 0.5, 0), NORMAL_RAND) diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 77d5e29d5644..05f8216b1d75 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -166,6 +166,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/smoke_all = FALSE /// How much damage this deals to the lungs per drag. var/lung_harm = 1 + /// If, when glorf'd, we will choke on this cig forever + var/choke_forever = FALSE + /// When choking, what is the maximum amount of time we COULD choke for + var/choke_time_max = 30 SECONDS // I am mean var/pollution_type = /datum/pollutant/smoke //SKYRAT EDIT ADDITION /// What type of pollution does this produce on smoking, changed to weed pollution sometimes @@ -186,6 +190,21 @@ CIGARETTE PACKETS ARE IN FANCY.DM STOP_PROCESSING(SSobj, src) return ..() +/obj/item/clothing/mask/cigarette/equipped(mob/equipee, slot) + . = ..() + if(!(slot & ITEM_SLOT_MASK)) + UnregisterSignal(equipee, COMSIG_HUMAN_FORCESAY) + return + RegisterSignal(equipee, COMSIG_HUMAN_FORCESAY, .proc/on_forcesay) + +/obj/item/clothing/mask/cigarette/dropped(mob/dropee) + . = ..() + UnregisterSignal(dropee, COMSIG_HUMAN_FORCESAY) + +/obj/item/clothing/mask/cigarette/proc/on_forcesay(mob/living/source) + SIGNAL_HANDLER + source.apply_status_effect(/datum/status_effect/choke, src, lit, choke_forever ? -1 : rand(25 SECONDS, choke_time_max)) + /obj/item/clothing/mask/cigarette/suicide_act(mob/user) user.visible_message(span_suicide("[user] is huffing [src] as quickly as [user.p_they()] can! It looks like [user.p_theyre()] trying to give [user.p_them()]self cancer.")) return (TOXLOSS|OXYLOSS) @@ -447,6 +466,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM smoketime = 4 MINUTES chem_volume = 50 list_reagents = null + choke_time_max = 40 SECONDS /obj/item/clothing/mask/cigarette/rollie/Initialize(mapload) name = pick(list( @@ -519,6 +539,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM heat = 473.15 // Lowered so that the sugar can be carmalized, but not burnt. lung_harm = 0.5 list_reagents = list(/datum/reagent/consumable/sugar = 20) + choke_time_max = 70 SECONDS // This shit really is deadly /obj/item/clothing/mask/cigarette/candy/nicotine desc = "For all ages*! Doesn't contain any* amount of nicotine. Health and safety risks can be read on the tip of the cigarette." @@ -554,6 +575,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM smoketime = 11 MINUTES chem_volume = 40 list_reagents = list(/datum/reagent/drug/nicotine = 25) + choke_time_max = 40 SECONDS /obj/item/clothing/mask/cigarette/cigar/cohiba name = "\improper Cohiba Robusto cigar" @@ -605,6 +627,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM chem_volume = 200 // So we can fit densified chemicals plants list_reagents = null w_class = WEIGHT_CLASS_SMALL + choke_forever = TRUE ///name of the stuff packed inside this pipe var/packeditem diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 6c6dfc42ada5..16d5cb10aeaa 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -425,6 +425,8 @@ if((HAS_TRAIT(src, TRAIT_NOHUNGER) || HAS_TRAIT(src, TRAIT_TOXINLOVER)) && !force) return TRUE + SEND_SIGNAL(src, COMSIG_CARBON_VOMITED, distance, force) + var/starting_dir = dir if(nutrition < 100 && !blood && !force) if(message) visible_message(span_warning("[src] dry heaves!"), \ @@ -463,7 +465,7 @@ else if(T) T.add_vomit_floor(src, vomit_type, purge_ratio) //toxic barf looks different || call purge when doing detoxicfication to pump more chems out of the stomach. - T = get_step(T, dir) + T = get_step(T, starting_dir) if (T?.is_blocked_turf()) break return TRUE diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 46e44668e648..6d346ed8b7c8 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -458,7 +458,7 @@ to_chat(helper, span_warning("You can't put [p_them()] out with just your bare hands!")) return - if(SEND_SIGNAL(src, COMSIG_CARBON_PRE_HELP_ACT, helper) & COMPONENT_BLOCK_HELP_ACT) + if(SEND_SIGNAL(src, COMSIG_CARBON_PRE_MISC_HELP, helper) & COMPONENT_BLOCK_MISC_HELP) return if(helper == src) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 5eb15b7eb8e2..05bc7aa84a61 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1084,9 +1084,11 @@ GLOBAL_LIST_EMPTY(features_by_species) /datum/species/proc/spec_fully_heal(mob/living/carbon/human/H) return - /datum/species/proc/help(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) - if(target.body_position == STANDING_UP || (target.health >= 0 && !HAS_TRAIT(target, TRAIT_FAKEDEATH))) + if(SEND_SIGNAL(target, COMSIG_CARBON_PRE_HELP, user, attacker_style) & COMPONENT_BLOCK_HELP_ACT) + return TRUE + + if(target.body_position == STANDING_UP || target.appears_alive()) target.help_shake_act(user) if(target != user) log_combat(user, target, "shaken") diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index ee437c4a91f2..53452bddf7b6 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -78,7 +78,7 @@ //Second link in a breath chain, calls check_breath() /mob/living/carbon/proc/breathe(delta_time, times_fired) var/obj/item/organ/internal/lungs = getorganslot(ORGAN_SLOT_LUNGS) - if(reagents.has_reagent(/datum/reagent/toxin/lexorin, needs_metabolizing = TRUE)) + if(SEND_SIGNAL(src, COMSIG_CARBON_ATTEMPT_BREATHE) & COMSIG_CARBON_BLOCK_BREATH) return SEND_SIGNAL(src, COMSIG_CARBON_PRE_BREATHE) @@ -187,7 +187,7 @@ failed_last_breath = TRUE throw_alert(ALERT_NOT_ENOUGH_OXYGEN, /atom/movable/screen/alert/not_enough_oxy) return FALSE - + var/safe_oxy_min = 16 var/safe_co2_max = 10 var/safe_plas_max = 0.05 diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index c14a3e274d5f..c5af051f4cee 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -761,3 +761,7 @@ /mob/living/proc/get_drunk_amount() var/datum/status_effect/inebriated/inebriation = has_status_effect(/datum/status_effect/inebriated) return inebriation?.drunk_value || 0 + +/// Helper to check if we seem to be alive or not +/mob/living/proc/appears_alive() + return health >= 0 && !HAS_TRAIT(src, TRAIT_FAKEDEATH) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 308c0ace3c63..a2286ddc247a 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -176,6 +176,16 @@ C.emote("gasp") ..() +/datum/reagent/toxin/lexorin/on_mob_metabolize(mob/living/L) + RegisterSignal(L, COMSIG_CARBON_ATTEMPT_BREATHE, .proc/block_breath) + +/datum/reagent/toxin/lexorin/on_mob_end_metabolize(mob/living/L) + UnregisterSignal(L, COMSIG_CARBON_ATTEMPT_BREATHE, .proc/block_breath) + +/datum/reagent/toxin/lexorin/proc/block_breath(mob/living/source) + SIGNAL_HANDLER + return COMSIG_CARBON_BLOCK_BREATH + /datum/reagent/toxin/slimejelly name = "Slime Jelly" description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL." diff --git a/code/modules/tgui_input/say_modal/speech.dm b/code/modules/tgui_input/say_modal/speech.dm index bf357133a7d5..eff380b5d591 100644 --- a/code/modules/tgui_input/say_modal/speech.dm +++ b/code/modules/tgui_input/say_modal/speech.dm @@ -65,6 +65,7 @@ log_speech_indicators("[key_name(client)] FORCED to stop typing, indicators enabled.") else log_speech_indicators("[key_name(client)] FORCED to stop typing, indicators DISABLED.") + SEND_SIGNAL(src, COMSIG_HUMAN_FORCESAY) /** * Handles text entry and forced speech. diff --git a/dependencies.sh b/dependencies.sh index 54df3c4ccb12..3b8c5cf26626 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -15,7 +15,7 @@ export NODE_VERSION=14 export NODE_VERSION_PRECISE=14.16.1 # SpacemanDMM git tag -export SPACEMAN_DMM_VERSION=suite-1.7.1 +export SPACEMAN_DMM_VERSION=suite-1.7.2 # Python version for mapmerge and other tools export PYTHON_VERSION=3.7.9 diff --git a/icons/effects/particles/smoke.dmi b/icons/effects/particles/smoke.dmi index ba52a5d80be3ff83bbbdae006941704fc80e7a6b..4a3239499b965b8b35f854eb90d216983f5e78f2 100644 GIT binary patch delta 350 zcmV-k0iphm1K;XV9i(+p8ye)S3FWG`2A^e}a%iZ}Cf?>Xk)GJ0&qt?v^4P(HN4g<0=1s1lhno89a zprv!9P-A~UIWnM)#ezbuw1tAOI5@{H4>AnH`~jI?G1?Bb?+<8%07jNDkoBR(!YLi6 zGVfc^SxThPVIWUrz=w#19Chv^6hy?qIdOTAVHoBQ`20Uy=zkdSFYL*GxDVtG>~7Um ws__b1J|AZ+(Esov1Le5#A4>iY%Hq)$07*qoM6N<$f-pIoGynhq delta 267 zcmV+m0rdXh1C9fb7d$`&0{{R37aDIp0000LP)t-sz`(#vPf#&3H*$4$)z;Uap{4)- z|9b5WdH?_b0d!JMQvg8b*k%9#0E3ZScz-zURaS8Ia{&hs0B-|RG6G%{ZU6uPm`OxI zR7i>KjIj;FAQVIaK_6g&m`s4YKnhHq!ej#E{YOaahb6m9iu~8T)7>d02;W8fiy%yN zKi?R{h(Ko+^c({Rk9^;&nFCzsJPallOdbw=OdJ@x@d*Q!cz7h89}0pX`~kLH1Vqb9 zFWZwrtq5#q!ESZo;N4$)b=v~By$^$x1=ojzQX2=3?n=WzH69*m=ZAvu13vn<6LAVZ RM=1aR002ovPDHLkV1gWAX59b) diff --git a/sound/creatures/crack_vomit.ogg b/sound/creatures/crack_vomit.ogg new file mode 100644 index 0000000000000000000000000000000000000000..93c3606c3b86424b807c21f9cdb3afcf7e32df1f GIT binary patch literal 18354 zcmagF1ymhDvo1OtcXtWy5NxA?;O_1T?(PsgK=9xYf(Cbo;1b+jf+oS;UEU`7&pqee z_tw3$dV2MAbysy)ebrq(d$y8=g&F__{O7t6{#Rgsfbs&p0=YXl8(X=&RDs0H{!suA z(BHy$kkU)f|8>3ee4%`>LU6>`e*S-5gV6sNfgyBlD@V)MO3oJKwpPZPf7z4EkaMtc zu(9#5fywDr%}m`)tn4kwCG6d;oE_}#%1J5m z>gdAH%4+UxX7;!GwS%(-tD~8NqpcaMtecCgmA$AI>tBisD-RnxI|nPdu^0J&QScz5 z)czw^P~OPhoQvl*FXwA^HZ~CKziBdvifMuX1V}q}dGg+XiC7H)zyJV4Y6i3fa~X#G z#2k9B)I{l*QZHM0YGQaVfk_m5-+yJ~U{hQGfB^#N5o2<I!V^#~5f3P<3Ddhz*6MDMD~mUozt`ickVb_KC!KfTA$n8Huqd zI|zwmfc&F8$8KJNBL8ktZVdk(ecgm8GE3c*tUUXyrb$H`oPm$a7~gjKe=@|s^B{+e zMHG(E6hjo@g?$)9L8>!^)xT+x0|Ag}0#b1}GSxW4)g+^n)JkW}D%f0;oDyp43L22h z%|OfDY~I~%-rZLxHAL^bug>=ny@e2i>kuP?(Ep?x-?i(P^mppyARwEHFZmC{H%g*! zzxlpF2ZxqH0j4i1AxDg-WQfm|DKNLLu=?6yS=wMXT*EwEgYvft1b;9uqXDw5(hB}R z$y_Jd?EjvGEe99@VTdmKok;qfs3laX`<!i(7fK$xAR*NJ2hq77A+X=g4i7r}WKg?Wf7UNrK5z5@T^1u_we4D)2` z00hohqrYkifUqUVK@davCkfIZEN6o}Z6fV_ln*U!GrJh)>vUJR`d7N9;?%EyEoeJN z_y=N3hM_OL*Ik>f(fSCDAnmNC(%_31wIO|VCepTw zns6Yc@Wiil^-b#k`27bK#qZL`y7+!UdW8S{YSV;h04d#?rXP(WzSRBi@DYaC&1iw3 zFC&QDHwMlahoXQY;g#!Ww1jN-0fxL+(J_*;#UGVb3F-1(gZ|E(8~}nb{-XH5vcFLN zhvK~W2*x4$+7XUn=9jGO#~A;9)ej6Y6m|%TnYkb+j;`OzbgAHzw#l!b(`Cv}RF!4O z|L0KKa<^ zb~-6;ON}803vO%kzH9T*@9{(bcVPW5&jBD#6a3dF6OE(T`_n%viX#3q@PB!Z6Hb2| z$zU9{Tn)9t6!YjASm_)*i7lZ5R#3w=n8bCP#xqmnHkjrzo7OO!bvIjVFw<-F)oJ*T z!~AobwRyMy;W;lZLdh5NM>-znzda|LKIS)X43$hgwN5;(SF%NTTJe|6-QsUZ|C{Gn zMiiz-6oy4?hsDr`CtHQ5l{9^`9je%G{=cUG?C3kZ>nKd zIR7_C!AXchT_y1UrvU(eHQ$}+3UHLJ>^p)UA;_816t7OXH0hA1`(00;qq z3S#77j0opgQF}pc1okaz*c?8%oF0PULJUq6K2%EASP?qG@9}&;P|nv?>2by7KStB= z#E_$Q7wF4u@*+T%Js3a*00P(t*n0?^$7BYx#mCqYGZF{*=<*Y$WEfbI2{;*O3b0K6 zq~}h_4CW;g$VFu2VVQ)NLplNQkQ+H?A{G}Ui~|71D5^*dA&IJE3|q0PL+qO*s1tzq2&BP7>~I+$F&Oem)W#V4NrFd2Hq$>&h|mK7c_#>Ri_(KlB>)UMVBL{=JOM0+ zLnDVRF^*$4kF7AD1Re!*siw+l_J+kCR``#C#<)c>$j!1>FHTVuX~OT|?~MZ-)- zT|>v+Oy^odYtB~=LRC{(#MRJf&{({*(@6IH<*H$zWwv;&p@ZkAHy`rr%J&z+3+MS+ zHwe{e&djLMZH?Y4&C2>)QArwoNl9@@gI!5Qx!$*(l5ZtLH5MfmWkWTUr4_dO5NbtH zNey#J33F*p*?kG~enU}7bNNtB)z^yB{f1-YAI$sBjwKZpr8NgH)aLU2KBxU=HlG59 z;eyh==HljN`~7C8kp?@G+>*U^#^LU&p_=3UX4X143Kb2vl|+L-T9A3zz4yq}yAG+b zd(%;VKLlYgb;CFAK+**1R%=fTsp~su5;EeA$+t*@jI^ZuYf0&TjXl$kvVBn%4PS#K zvo#(A9en#Wo*2FP=x-%^&5XnC5JBwAeGVioY$OIt+z>)WO*yi!$-p(@xXn_Z(>?#6 zE4SQA6vY0|5Nv>6uz@`!oI}9`6~GGu;3&3n)G!!($z3s2_sH|q+2JT$6lHr!5|w4G zDH3NG`^eQ}WCqd`uw*S65~oz*bMlpCZE_OlRBfsYW{eNX^YCP?SQ4jnt&96+bfYj$ zFgUjJOvhvp^Xpy+5LVmSd1#`t`FS{UvMib-5FqDHiAWdcVX4U!*F#w4=i$l8vNz!9 z*|X1)Kzih1>B%tk;i%cM^rcbtkwaJwz6k#-V>2}o!s^S%cv;!rB7E+zTOQ(7y0j~%Ih_4tjqf#!fEme z7!pDdxI>JX+>?|+Jz@RZA zfc?WJI9AWlaD9I$kMB6!@vNU1q&qZ`0KWC3gNvVBvc(lKpf)5edLgJ2aYhG z;Nt{A9*zkHWj+DKF8Men5Zw~EpouaPnv99iGXyKkGBSi<$jZ>r>lTC&%0uQj( z)nx*J1IU05{;nf5KrB2UOppta%V&XMJi@m_0*0)NB*AEmed!<3L=kWy!+`8nBYcny zLli=Q#Ctg(Az6On)C)mXc9$Gd$B^&(LP%6a0suxwNJLbnV(JnUmkn7np#ZO!HB*)k zJ||IL6JXaT*fsI z0df6SnvE=kU^ChT0L!rOKovBx1UDT4A|u%J?<4}qA!>|b55+N#VBby`LtyAlg~T`o z1TUcnWRrb~KcXN6$YURbz_(5ElBK)E{C8mT-zCKVpGg!$;w(%}$Zp+7K#cG&Dwo9i z`)FeOpCCQ;-{b#?+5bCw|38)VY|0^!`=1#g+<^oSJi`-fO7SufAv3?s5d#ep=>15A zj2MnIIFw;0FBoE;95GowdKw5y7#JY%fp~PHuIv{VRaHis{N$IVV@6k&1;QJiCVx)V z8X|=sA-`_sMbv_bG(-NJZX^rDYU{X4o`nQBg@uIH3jVb>1eTfAj5QTnO zg{gL^bB8Ex!N0npl`RKkfdCW$a9Xh5XP6rx?@bR*mJ5z`#xQ=3sT#p2Rc$6s*h?^* z$exd*rfRd3ZXBhelwl&v{-Z2WQ)-hBje`XxsI*f1zK1BF321OpI3!7vO! zc2(yDyFLue1{Mbr3Q~Wt%aj!~fDt@^5*Mb8f`wfY_|2Ff(AGB`fDb^4j;@PD-r?wk zHCT2d4XSBXJF;zn46%ZrKMry<_2@Jv2w7}v9Yl-vvM%g(KFDBlbXS)Dr#s-qs4d$f{dWJ zz2InZSU4^i*Up~|^KVRrQxbM$I-q(;_3%1343WC6mW~uU*>5cO4juC^ZXGd{#HV~Y zs_kDRQ93^$myx>A)^L!}OBb>qn+K7joYk?TGQPHZ2$VqfPj*Yw1sw zK`q6`1oEM8lX&}QdCsrRWM7qNlngB0KZlu+eCHraJiX8dFhhjafD%K>^v$2Ot59FX#!eSzX4!-@KPZdyE|m`}y-?{DtV7!J+z_ zqKLgRpE;%B@O^kNGN(e_*QZ11yi1=>ebHjn>gjRQAZJVFFqz&PqW+mrDBSO3{XQY{ zH(Q-QeVlIh?V^ac<;{Ht*&Zq@EC$m?A)t8#)GUS|A?KhkBpAq{J8fj zXaBl%XE91=G*2&MG72X6mKn;fjvfceKP^ypM>CiDlI!$Sx&`4+=VVvU6OY2s^7kBM zPHBj@A16$mLBSwCo~EFx)XXm)Xr0hqKkPcbCW|u@QVls~d=xz+LwJ1qvGhFQ9xeEm zSISM#1LbL%5HQJZV&)6x*zCjf**)3c5LA+Uop6VArCAB2AErt(gidE;9Ra({$m?6V zAH+10IBcrF>+J~J(plYZF5?yVJTE;Tzx&WtF&0Yq3TQnQSJ%pR?)>!D3UZc+jrOl& zSDi=_190Te^`nrm{poZhpM}Ug2DJG#`2T_8i2W*yvnpOe|_DD znKM#^J83Pd`JBG8a@AXom8`l#QVQ>Sd4UmZj8gge16i!~nW29`B&Xlm$uHyDZ$F&siB%jRZH#w6 zHEe!}*-)g4ml3mh+i=HihW>ylS3MfHXJ1HN>uYIx)^wP}l7Xyc?EU?BPHWND1Gyhb za3XG2Mx4g|A2-3Se10Wh2IMPCg^iQFdS?X!qai<5zZbD%E-af)=M+ds?bk0nlRm53 zn`mtA)mn~#mKGp_YTbqDHZwM%j^^YCa^au96$q!dAHglDNHL?0l}56ViL&@+ZP(BM zK9>SfG#|L>#9KfFq;y=4lUAIFZB>!=q@2^=H|nkeB~nefMCjr$fW+G>s+9p$(QH zmKi2_n!R?W5flpoh?Ndm&;>mMKD zMvac9#a91_8sEZ`iyGbI?!~tW1W`)pewwrF_RVKI!<1Ngy17vVEjL#_PQIqhtg)^U z-D^dk+q<%!5!rqh3a1g9>hXrJZ%QF}p&s+3!|+%11B~kI=d(&`9HQtfx+{<(hgWM6xRLMOYedxN~)GT~dMK~np(*$V8PwgRA z?<+sKb?l?#MfU!d(PFrhnMW5nnszwP!)obb?10WY?V%);naUaeoglkDX!6!Ve(JY6 z`MHS#YuiulS^vB1S|tB#CrKEWsQ#msSfC7+Qv#uM0j>U#2RaruBjFu!W9yM}#cso? zk2dp=AI)KbhmOrj)3K%~)1~T1z~`1t3bm@!7Vt!LgVJu!*(Z^fsPakA*eq%x`r=Jl zw)rX4zbp<4))u5gZtznfFUn+O#nLcwUHhCyC!gTSee3-k?}`~t(psL3cu^U2B8W~} zGHy%a_<03(%E-`>N-RQWY}dxOGv=OvP%y~KXm!jsIbHX075VNvWGy9^@U)zwsCh05 ztifnno}Q54^<~j4jx~-+>iJfx+?AcM8yz7q$qBuBJf4mf^+*B}MDixNM*EF0Un2ba z!ZNXgMaoy4l_=%2(KlyH4U0YriTk26qFU!6-@NOAGs$He+3pEp!gsB&#`jzId23?w zp@Nyh{V4S|b$}(ckv6A`d&#DsKTZ@HOHS`*#hPwoYlPZ{uxYn1=5&@O&kH~I>Wb2* z*=rD{T4sN3i?|PK`AyHdRE5mCSBQTp;prbxaPe!$BIm@&yA8jh@|UWkBO9%L2tgm0 zh8kyp=JF$+U|!GAvy#R2bIV(Pd;uny_QEi2z=b6L8EL zf<*+vWO?ja4gF3GY#DAYCGEzoQB$pg0Suc+ERKuWa(D@`kF~;|$6TH)J15CZFlhZA zJ?fAbDY#We^lVfKL_ne+ser3$@vMV;*YTLRG{e-UpZ4zcvxs68V7hBbL_!=WV_E7B zT!=U><;Inmitp=1#}n?34U{>D;vinaTR27R(?lWGt75#;4Y(41LaIVzKi{ssq^67Y z*n1E-RkthN_T<}^u^}lWC`CP-ayYyfiozXE;#7^M2-JQ0%oBhLcoGs^m8kJ3xf(wu zaKT*n>!9A6xCu)5U)4bk3pVgO)RBOCc6XrqR*^p8#B(`8eMSLN$CsEnNCn$hL(~(F zA8V@^1(!m<8D(Z6kBv-KIfXnVA~tiUGp6{ITGqkVEZiF;Z^m4@^PBc{LKUdmsrE>l z4(fm&jvN&|_$mF{EzD`pe!4ol>a|}S+ofIG`m=;H)-Am2y29;)Qx7E8f46-<%#8iP zNYCzQUh+FJYVzgNEKi<7a~t2rC?jIiVepS^OVuo`<_wj@q^P9<1_oEQTNAQPb#h-_ z8u72Dr>eI!{L_0EKWFWfS8+O}?^`-L*oesaPl|5~ZfF@!Vny6BDs@SMkNxI_Kw zBv9)JWlBd3ZO;YP?g;`gDG=|ypS4Y>?1ki^8n_b?6SXHz<#ZC)p4(^IUD4YFZKYSZ z;deBe!V$uIr~$l2q48_vucIxS(N1W1&Sb53_q9pUMCntTntJk$3CtI*Y5fwN^5xSa z!=;_pUU(IXAsC~gt~BrXSoVx==jx9^w!n!%$z~1~pxmUs zKkhlHyMWi@WD2MZ3!)UXe8KiFQQ#x;pJ$>M@pbvaKX*H2{Am^~kJhaV>qAH{NLf#8 zL9k?PH+;)m*gdc06O)PJ&t3PfM0keh_lY2&?lje$av=Rw>zBVN6qN{=l5#emm+%~? zmeM<+_2{a1&xY0Nmh)BODTd{5am_Ih4>npS4O^bx7VmIyt#4!g?Uwhp*Sw*YC03=l zR^BBJZONpQ^!*wX8zcQl0kkF->yYEHx%kmT`m40v_p6m@&>e1Nhm^61Z*WP5)?n75 zkb)9;7hoRvb=^t#r0(bk^PGA=91`5X*PVhTTV@xBN9+VR!_n3~cZktB%gp{1?%c&w zn(e@QX9>52o7X^gB_RE@6+yZien+|yJ|Ija3T}@Y8_ zJqqKl*@7BLHdy|Y0N*;enOzu6Z4K&=ZSFvr2%w=1C*4|){V^fUz1gVDxP>DP-!C7t z{i)d(DQVfhw_9?$%u`BPl{gXZ5im>=+@>WPz53DT6BH%5^oF56Zn)KZo256P|9Se_ z<>{COoas;fwO~Bcj+8BY8rGGzO<0Ch0%QEK31Do1OFatZ6sdZ*`fy&)wTgK%{_Ru# z@PntkgsWbh;epK~6JlpHNZ?EvHdq`g0{+rY4A+P2dSRxgF=9xKKv5}OA@M_Eq=t9y zJPIaVpuO>y*B3t(=#58L04!-Q{PtD_2mzOoXmxR@#O2l&Wy&_WF=7i8M-c11`YfQ~ z|IGP?ebNhlWcL9~A5|@yy4;Xu85sIG_!r5!9_`nV<0VEDzqjA`^@k#k6`wR`SZya_ zQbr{NXMuxD;2YJKw7jM%r{@B=AtRf~q6oQnTJ5$)iAXu|DKU>xy^GO{eCx&{v}E>l zx+%=9hvH~3Hbg#sUj(50I@7G!Gi7P~+uOf=_Z_|ipR)2S__c|TlR-j0OW6csHpin5 zD{^RHjy5zPdR~-HYx`=5Ip$>F|L%29NBcm9&Pr0b)|Jg~A%n8npH=RrAIr^ZeGzo%aoGm2>h@3_Zi47qX@?9ME%WsV)U#d;cD4-K?vzg6B%| z;>eNpMpE>=IQW>%F2-eQ)iM7aQLf63?GpMd;B$&Z?-nas+cR1I)C|<50ryfll{yy1 z=tbSj@tJA9he}dz260w2rhlSAJ&!O*0enP>zk`ytbu^M-PS~c==8n0UUzs$i(*+|>(Xq9bB8k+(OwVGtUT9%Odnx0{Da*(@a& z&d|dFa>W%SL6A(T!`Ucg7XyjU{MzEJOl-E?$M-^)+E-b^cAl$%>r{ryL&Y@yt(&pj zA|!-Hp42rRt1{a3{V~{_Xk|0flFV?k?DRB+|AY)S@svIvJ}Rlz3EmNPk6QWOnTLJ0 zh&n3zD0cjK?o)V-su|lYBlGeaB+$)93!a0O^e&&0sS$;rtM=H%vNXJY2$+IYk{ zEsu@w(q#2>fMes2Rf&8}6LWsfjuu23$`gQafwncq{6m6JPCt*^ZoS zO&fV~eRj=`5+0zD5C8nMYynf3ANYolrZLQMZ~$euyjs=Zbdz>y({47y;qxTTV$~*V z(&LsJ^ACad?J*%N`~IuNR8FdFeZxZ3Ko6$aObAi<+eY$~j^qGLwj0LWa6;Tdsj|8! zN(Bvv+?#`V)++2WQl0!rI~iM8A--IWKnnS_h6UqrWy&+VA9T%U*_+Ra$F+bDsSI$H zknGa+&FVvAAO>7eQ)_%ul1()59Q(_^%DAo6ve5;yXkt2%&ji%g=dL)wDx(6?8jl?9 z2b^nqfWSb-d7<$8@>lu zK0S^DN`pBRF%5&)^1dO9oFr)0U@}MAA3E+49PSx8q|>B@N!U|VLg*f#T4buA>uW}gds=%|CQJqtf3{_tUu zE?@Ps{r&0I*FqTJgRie|8`$cI9asjz{-!B)ubHO97hVT|TuD1^8JRv#Uu$^7sB%<3@% z>af08(zIA=2&)2I7>Fnt=Ur4Z5<1ej2D*Obj6+io*uYz%Ddq*33m6Z9NZ%u6sK#BZ zhEYU}ZLInePELWTf#5UOcPj>(iBi(!CFS*O_1|G!H^miyqDeCIt);`qVyXJec7Lnk zk`Q8is>+`>$nF|%>rQZ{34aBoZ^Dq$Wl)DEdvOEk06j7}e0@6_b7Y^HL|em;H~k3@ zAEIWj_W9OoWIuU6px2dNlFs}RfR)#f5%~1MpKG!c*}cCq@Mpiq_n05CLc#a%AKYWI z?otA{-Uh$X3deZRrw45u=4IhXezgj|U84?;0!7)VnTI0m8b73kV+KdGu&n8&w_LMF zk}wL$eosIp*3BX9ISfFfZnJY7?cm9VnhC7zo8>j*^G+R-z64f$%-yP1ElQzTy_=J9 zr@{^#51l}Hn?vF9$8^yHf(nl;0W~K#9O?-fndy(tDNh0XZ{8}AHn@C!1(R2=csc7% zOeFL<9Jn|{im)Xhtui}q)K_LNm2(8wQJrMnZ@yqXgC0Kd z&H$nmVY6co z8mp}?Fm~B$DgsKnr?Wfnx-(X(u$A9 z5}1nWmbml7mjEi7^(7;@e)9OU(^^2-%!i3KlPqDJWz?S!xqTQPI3T?g78Bfz-uL|} z97P*y!tOr8e*8uLJgf4R9NZf>qz7>owgw|GTpGP%X*8u|7b#$uwQ@CWx?Mp6YO*^GY80DS;Bm$X8BGw z1cM8l)FR3k zadjRJ-XHVYbF8(s@HT9G>+;JTue`Q11=q9-u%4k`o0QXx20zmE97X^E#Q3LDN07K! zrc+%9EftT&K5L_#V(168(*WJQ&YTlC8XWdR5Xs*TQ0)vSFl zNZvGz)Su}vh+HpN!f*)hCoEu<{dm{1!qv0*;2leo*DQP+3^UcO%+kQ~&6)Ss6W>kq zw7tM7Qo!V5JA_FYAJ*(6&TFzz6kv**T0jRoRQ_F}gW~nk+7QX(as%j{fC!jj(UYP#~MjwS~^sI9Yyg|Zk}%maCMp5?vp)n{ltCmmOT5; zYDGVuz%zGlId^lLavOjLvEtqoYW}~{t|iSfKoBd-ZS>HD}6#Hzh>N)~lxwNkx?%0B7jTbMQl2(#7JW zusEl)K)2MY+<9$3-sKtnyKZsgB;-dze2-R0kl)h8!rlD#l1l;LuM2>a|6b3tRIDR+ zRg*dQgdF~{wN@tCx$Kzk{*wIzfv1ypDlv2qY^CQRcVqQhkrvskFx&-Nsz34`X`jK~ z!MIlfTA7kaBZG%dTeyEEeLSOlvcC`6_lF(O%x%SuogV$HacR7bF0?W`md`ss`QP@k zi^OuTZTN0{jizf-tVQY0BqlAlba2b#;Kqgvqd+s8K7OAwCVL#4iEKk@2!%m}@aKYj zKhDwp+;>*8f-HP;3o~z=DcMW$3GV~znBj-$t9xs z?D6!J8=EIO49u)T?9~;FtnD(V$EM$EL<&6#nNY8kmL<7h=<_?z1Su!MJ#%E_ce7IN zsT{s*njc-%R_&h?t_JpLPsFTwN^WI0b8%OZU~lP=65py!(nk`ExXc{7v1G@x(`GA3 z9+YHmDDJOK$vCH9JoF!+Ak^BHrM7Mn_G8IW|Msm%wtX_q(Uc@WtbSw(i~#xg)<^M0 zED4_tHe9<<__1h8lo!%i*iM%;6~yw6mvrj5HNY`nQ6oi7iIu&%-$MdQV9|LO%q>cl zKi}Ill(uI%;`RP`uxQ(rr$oWURaE;vexHkNK|^wd0EJ?bR_B!JK}dcX%Pk!*!~QMR zqmW+?)gZ;(G^K&QdFfu*)DW_gUBV;^#}>!g{Kkbfyr|+<;}DJe$*X3Rlw-Vcs7m;$ z4*S&XR!!*;c(@FUnL zNP?O8KirX5l~D6SI(A7}_M4y11ZNrEeu%;7qAD=DPMYk1`%$^FI4xB0%md6IdPH6= zS)P#2+|ZE(*ntApZ(9gtdA=g6^4t2C|7bX!HQXtHB|ZD;-^V!SXU}tqEH47(O6mLR zb9n%D@BC%Ep)z~G@afHF@TKkIK&nieJ#?0_KyR(Y@u>LY%w*5(#SE3YoeZ6ZEs`KY zZDWZQy^ep=90thj*LMEM?x4J?A7N$-AJIOM%Oh`8BL1!-Mds}_Vqxt~gTNTV#iP%+ z75Y45X@kA@=ny$-8oN%bdHURj$4no+_+~(88iX*~14SAg;R}mF@Is&ys8E&FGW3o}>x>p=0)#@TyY zDTcuhM%%j4+9I@h)EnFCCD$X4=r>U?%fEaiprHL@9QZ1M`5zv`}zc}0DRv-8``bv0uu%bn7u zM}ftI)XQfdc-VBG>eN{5eD;C{VVDGc`D24!qR@2Caw~~YUNhYP^^>r8h-T>U<_~Cr zxc&f9=j0L)&Yr+4&Egv2U9~57AOjyA?_f_Ay3MFE=i>HH-S71La-MqD8el>CR zMY!QLa6l7DsHcApmuQh%4B$fZuKa$NAd@m!QHY**;{KN3<4L1<7_XS@w72WN&>;K9 z7Z$u@5iI#wv@$_sm%hci59zZrW8xOgYp3`7D7WjiU8TL0fqPcw_ahRy+LYvoS5~ZJ zcbh!aSRSBqgD3)-LQ7Oj;l47oSIyvs{tar4=ty=QtFMF8(ah{`XX$G4S2NyxlyH0Y zwuOaB2Ecb1ZEZ)v+8ald)o|~B&#Mv?dO$r*l!xAHse^H4^9nl<%ZrPS8AGJ zH67JLQ=f@Ll_Y0UIP++=835DbMR7L5{Eq?16%32=iZpg3Us)UP@A6VsAe(He*n18wB5?$y1 z%+J4c(_@Z*=;2h0KH+}vK9Tj;{U zlEaKGUKT6A+l#Mrw4ENh5W`oNs8E$FR_(3R$gKY%Qm|A^=dAnuJI^!b_>djIxkGB( z091HR?kE`pHrKD`z=d8-q;$WGe@}b(eg8a2({xfTBzLeBrXaZQQY)_(#e*V%=K<=4 zxj$UEWim$=#GneiwLa;iRSUIJ`C+|*sz&$ue4IAs&h*23T#9xx10oTYkR0trbTAZh zn=67I*;bgs{%BBe)E8J=fqn~)n5n_h>Is+O-Q>-AAtB9Z^37VUnGmf~J10e=(?%X2 z?nv?RI7&Eee_3iG1V=>0uiPQDQrzvq_Fn#(zqPWW!fiEoeYepwZGHu5+J?Wn`JMBs zN7J`c8n&|;y=XcImIv*mcU{Swym!PRFExI_KKyM>S}KR-bi#Dx8?-BF+&^{g8Q=6_ z#z<#4e8WU(t#0f%U4P@9t*yAX^TGY;Pl;H?^bKvSD0~1SK2{_YxTmT6SfRL5dSnY{ zJ2>wvrl)kCVjP@JQ5Q)MPM;3w=||L>4Mvfad+Fd@+o21C)QRK-03vAVQOn=bKRWNP zYc*5D3z<|rHM?UzP?{(CcJNpoFYEYVfaE!lVPVBW1FP=8=quxKA6&9v-v6F9rpWYL zwVw;2xua9qY4_PpT^|ZutG`)dv~B}EaCuN>T4p=OEWgcG>q#|aC1;SlS)`WBc#7+~Q^0YuO=QYG1d4}sFI4i{AtRU~tK5paP6L#bW9dlZ> zv_Wt&6!TW=E4{%3BFCWfM$QRD5TK>B#Q)1FO4myID?x>j&&@@r0-Vnvulik~sExwj zncb{}pO<$Li9O~ZRNzez<9Vr&Wc?rBm_LV3P-TW?Rb(cF;jUuvz^9b$$!Wo~7N^{} z9J9A`E2GN_zE0$$8O8HIpj*Jz=+nR|#kwiuzW!jL*ro!{7S6$+P%CD5h=8BBYd-^)Ki|=PtoY^QE%%~jPYqFBA?ZiDCA4K?Aqjii zk!dgUhEa631`~~2MryK77+}B>Ek&qeJH5?ETZikQL7+;mwWWy5|3k(tyM;VcC%=)V zy9aN}SK>d1l~a&E85x#!dcxy!WU75S13cb8+g+M2Up&}@omEXxgC2Ff?M|Ay8LfrQ zjj8-$YdcHYKq*pLJBav;^9Y7hoveRweUZJhx2zRkcic!+^FK6*MmpL@8|yOmx6isC zt5IFq3$slL&d-*8gJo`+S|u~|5iZu*yCM+vo(d>B!0AD^|pv2oB|B1 zd52gph~&4d)qvJ8beBy7YG1dImsvup_@mcQihaSFp!NNi7@@W8IhsC9#3bNg*BuH~ ztk<$lw~{D;Y8K`wwBrt|Ji$(^N$nC&QW9nl&37LrCXn%bbpvhV&|Mh`ja|4cqXxkc z3b={vTWO|3YelE$!mcU0sZuzx_>fmd5usH-K{wSBl%W4q>V8XB7QwqtKc@|!8 z9WE(Ub|EP~`_1(&x2$#6jzMie&azf1(Z(Nd$D!1b#i4QoABy61=1vJtTgZZhJfI2A z*H3EyXyfjgDB$e4sdwQ(yS{1@UW#~oz`lGr4ub6eBo{n8xTxD5e%!pI%1pgxYB~Ix zaDQ$egH=^mGIPJgvYXsLAqLZO8UIjb$^~nMJt-mfc(Oy;MoLV3E=N14x)ib6@!R_v z)Ax9ctsV8a{~UbZY-NZa+*=~g(e`D9u&JnBxEJ00u?7|c8u|02omQOBnV@jpy8*a@ z1QpI{?;f9@^Ts?ZQ$w#)&g#=Zws;JMj%Jk+$ao1F{!*TUO<#JIv@7R)5>U7!Pj>zLNe}(P zB;d!1(au(84&EzwnmIla4VlZBX-=NKbFcY(&=F$e zyH@eC73a@X$%D96(ca)e&v!x*lTj!2-CFn1-jRG%hf?hNQywbhGuvVC2<6GeFs#R? zjB^H~V~t?Mm^GY~CJo74Q=zo`%> z#APM(`fJ_zzs?1XMUEl;fyrs3k(uHg!;N~yU@S*S-D70}L!CJuY12F~n~laOvpq5P zq&_%=l(LY@hAF_53nqzdv!B}iJF}eIHl{&XHZ!hKf`8b7oNgHe=UD-_2y0Vo_eTC z*2$xbxGGU<)pDk@@buD~>@lud^M-g*(o7}9DF4qWEUW{_3$02$JsTOcZ*N$#B=5CPU)QQW)hB8}majq_T85jr4M#YUEU zeD@z>@3b5;y8P~xbQ+XR8#ClY2p{MA?WVl;IP9i8^eK_U1mo+7gY?YH&*8Flg`rXV zITe_!b`G#a%6F}IBknxc7nr?npFe6UM|#>bntfiXt#>EMdnF-DlwQD6g03l~lx<9{ zZD6~7C*Miu;Xmy!=GiBOGHW#bMo?3{={LIkh-rGIo9jFf#f_=HNRFYr=&u0~Qgzzp z5ly#q2&A{3{4&ITU0K1>EA>D_fj6Ar`^4O}s62w957#Q`HWi~RD*EH(?M9yQ>#pgM zwy1_BZ4p6V&*Z9a*E&upF`;?miHRwmvs_EBv^^S_^Prbi38AO|>}h8nmVSc*(B4*M zEeS3XUt`0ot+Ff7QDVBmeVg`YTuyzu;8@&qV(x&B0h&EYe_NB@1$peSY={d50Kt{Q z4kSRt0>KyQbSof0v}Z57P*HDHzBJ^o zDk@v6ru2<40c#D*i02&ozw1fj8YroTM07UY+ida`&& zyNVcaW%z#XdJHM7zS7OtxI8_Pxm<}Gfe-CK0~0_to#cI&V)pHbG)Pn260`<-TF`*v@5O7aUjErfyKz(PIjAbIX^co4-KuW z_zuSX#MlhkjMlmzFc(?#*V87f%Q1 zOMbfCNv5sdm&U3fK>qm1A7!Qbdhz`_=T|SWAW%YyTYniEL7P^;V`AJ|n^Sk{c9{Ce zh7eBU7~zyEf@@AC1ill@af16cV{kNf$S0P4+^`uVE}AJ5Q2c${X2rRG0d2g z2>~7HsI7jgtK!{Y^YNs=}w%U+DD}$@q>(vG7pyyz>y1CFOB+l+6d06w^K#E_T zGkcmjm)Q`_U35E-U-PNsBS}DNw999nMt}Ea36F=rUh#{mP#Mp6M?J8Gv#o>B;f&TA zp_WJgv*20pB6P%IQ3MyR!6PZM`fLKEqzO)-^jsj;Ha(`8 zT0de+sj&ifQLKIZgVNAtGg4phWa~3vP<;5&R|Xiq9*YBub2&)?sV5)n5Xw z%<*;k7|$^wOYjjAK=bQQGT}1G(xGo@tNid@6}vv`;5#mX<*22Oj?^zg9|SMGp02~c zWWF(IcL0DTVuEjB0*%Zo8dRAoEW&y}km|(79A*T80CAl2%dyu%0?X_|iLk�)ORa z%TF{~JjxD-(a^RZUV+JZLb66pEhH1Wd2|e_pSzK-G|&ORy}Y;qi3cIdrI^70{nVw> zWAaX<@WFT(;)98=7x-4Mx4qy18(8vZWHf`vQ$DKAQfTz|OE|Owg4_%3nMd0h_hqIM zj1<9E?C|>Wq3ipuRL5E&d{Cm5RrE!|kp?KB{tcLHOiXH(5S-v|`?AJc->ta;!-jd_qEt7Q3mjzn`-u>|2 z*L>>gr->@=Nk3_>#5Ek}gX`txr{m?vlWkor5D+O7Ltupe`fV^Lo^VR8j*p8bwVSedS+K?sCpoLjd4l{^k2!mV~NXPhUEmGODEXr2(ll z;np)>nFGA-yp*vxVTIxP6A~y3yp^e@xXiK-n-68&<-S@{6EB~}%1Kvi`@i{r%W1LD zS`7fa@lXvIs)cr*R|b$4vXx2x6jR(QZnYdfyMFDPhf4WG6gzrxQjz?OFn9V80E`7S zAZeU#mfW7TUTri;3&X(|2QzK%#XMGn@`^&Hlj3KQb{i3h+)(0&b!tj5!%9to;09NCt+ zq-tUGG_FeuwBewhNXD3hs{9r}B`k}5K|KlTqd!m9pIyV9I6Afk9VfdJpFOR0Hndwh zZVmvf>B=*0KRp*ignMoQl!ZD0B&>U2mdtp}xNaujHuGBIHDO-jC3wg+9k5gSi2Jrj zodKi)eL>qDqpWde{jUjB!D`f!Tg|vQhkwMF;}Yw5KP$JD6diF@)2y+5MJg{aEnz~_-#<~-fF)|HJ-yCNOBRYHH2r2O<_*B>*$n`|vm2QB0RYc#;CeyY Z0N7JgQ&Uq@Q}S_!KkVZGFiZiHDL>?MZ4Lkc literal 0 HcmV?d00001 diff --git a/sound/creatures/gag1.ogg b/sound/creatures/gag1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6b2781a9b13e7f5c13bc686e06b45f8e89db4bd4 GIT binary patch literal 13346 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 literal 0 HcmV?d00001 diff --git a/sound/creatures/gag2.ogg b/sound/creatures/gag2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ae11cd25b41b6e1601f3ca3bb9f301d42f286f7a GIT binary patch literal 6317 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 literal 0 HcmV?d00001 diff --git a/sound/creatures/gag4.ogg b/sound/creatures/gag4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6b2c1eaef6ffcd0d2ad5237bee8f3fc2dd27c688 GIT binary patch literal 7058 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