From cbb0fc429f67f860763e178b774eaa81820f8842 Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Mon, 24 Jul 2023 05:04:44 -0400 Subject: [PATCH] Lesser Drones (#3939) # About the pull request This PR adds lesser drones that can be joined as from ghost. You can have up to 1/3rd of the hive as lesser drones. Lesser drones can build basic resin walls/membranes/doors and can spread resin nodes. Lesser drones can give off weak pheromones. Lesser drones are very weak and die quickly. They will always gib to avoid intel bloat/clutter. When lesser drones die they do not change your last time of death so you do not lose your queue spot. Perfect to play while waiting to get in. You can spawn as a lesser drone by using the verb in the ghost tab or clicking on the hive core. Once you die as a lesser drone you must wait 3 minutes to become one again. # Explain why it's good for the game Having squishy and fast xenos with very little consequence of loss adds to the "horde-like" feel of xenos. Having something for xenos to do while waiting as a ghost is good. Makes the game feel more alive. # Testing Photographs and Procedure # Changelog :cl: Morrow add: Added lesser drones /:cl: --------- Co-authored-by: Ben10083 Co-authored-by: harryob --- code/__DEFINES/keybinding.dm | 1 + code/__DEFINES/mobs.dm | 1 + code/__DEFINES/typecheck/humanoids.dm | 2 +- code/__DEFINES/typecheck/xenos.dm | 1 + code/__DEFINES/xeno.dm | 10 +- code/_globalvars/global_lists.dm | 6 ++ code/game/gamemodes/cm_initialize.dm | 32 ++++++ code/game/jobs/role_authority.dm | 2 + .../admin/player_panel/actions/transform.dm | 5 + .../structures/special/pylon_core.dm | 17 +++ code/modules/mob/dead/observer/actions.dm | 23 +++++ code/modules/mob/dead/observer/observer.dm | 39 +++++-- .../living/carbon/xenomorph/XenoAttacks.dm | 2 +- .../lesser_drone/lesser_drone_abilities.dm | 1 + .../lesser_drone/lesser_drone_macros.dm | 1 + .../lesser_drone/lesser_drone_powers.dm | 6 ++ .../carbon/xenomorph/castes/lesser_drone.dm | 97 ++++++++++++++++++ .../living/carbon/xenomorph/xeno_defines.dm | 59 ++++++++++- colonialmarines.dme | 4 + icons/mob/hud/actions.dmi | Bin 21312 -> 21996 bytes icons/mob/xenonids/lesser_drone.dmi | Bin 0 -> 11221 bytes icons/mob/xenos/lesser_drone.dmi | Bin 0 -> 2081 bytes icons/ui_icons/map_blips.dmi | Bin 1537 -> 2672 bytes 23 files changed, 291 insertions(+), 18 deletions(-) create mode 100644 code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_abilities.dm create mode 100644 code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_macros.dm create mode 100644 code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_powers.dm create mode 100644 code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm create mode 100644 icons/mob/xenonids/lesser_drone.dmi create mode 100644 icons/mob/xenos/lesser_drone.dmi diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm index 422edb05508b..1878ca63f34e 100644 --- a/code/__DEFINES/keybinding.dm +++ b/code/__DEFINES/keybinding.dm @@ -189,6 +189,7 @@ #define COMSIG_KB_OBSERVER_JOIN_XENO "keybinding_observer_join_as_xeno" #define COMSIG_KB_OBSERVER_JOIN_ERT "keybinding_observer_join_ert" #define COMSIG_KB_OBSERVER_JOIN_PREDATOR "keybinding_observer_join_pred" +#define COMSIG_KB_OBSERVER_JOIN_LESSER_DRONE "keybinding_observer_join_lesser_drone" #define CATEGORY_CLIENT "CLIENT" #define CATEGORY_EMOTE "EMOTE" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index ba928e202cf0..673bb4fc6d81 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -221,6 +221,7 @@ //Mob sizes #define MOB_SIZE_SMALL 0 #define MOB_SIZE_HUMAN 1 +#define MOB_SIZE_XENO_VERY_SMALL 1.5 #define MOB_SIZE_XENO_SMALL 2 #define MOB_SIZE_XENO 3 #define MOB_SIZE_BIG 4 diff --git a/code/__DEFINES/typecheck/humanoids.dm b/code/__DEFINES/typecheck/humanoids.dm index 58d245c486e4..7076cf67c95c 100644 --- a/code/__DEFINES/typecheck/humanoids.dm +++ b/code/__DEFINES/typecheck/humanoids.dm @@ -25,7 +25,7 @@ #define isspeciessynth(A) (A.species?.group == SPECIES_SYNTHETIC) //Size checks for carbon to use instead of typechecks. (Hellhounds are deprecated) -#define iscarbonsizexeno(A) (A.mob_size >= MOB_SIZE_XENO_SMALL) +#define iscarbonsizexeno(A) (A.mob_size >= MOB_SIZE_XENO_VERY_SMALL) #define iscarbonsizehuman(A) (A.mob_size <= MOB_SIZE_HUMAN) //job/role helpers diff --git a/code/__DEFINES/typecheck/xenos.dm b/code/__DEFINES/typecheck/xenos.dm index 4d1b7819bdf1..d313090e8305 100644 --- a/code/__DEFINES/typecheck/xenos.dm +++ b/code/__DEFINES/typecheck/xenos.dm @@ -14,6 +14,7 @@ #define islarva(A) (istype(A, /mob/living/carbon/xenomorph/larva)) #define ispredalienlarva(A) (istype(A, /mob/living/carbon/xenomorph/larva/predalien)) #define isfacehugger(A) (istype(A, /mob/living/carbon/xenomorph/facehugger)) +#define islesserdrone(A) (istype(A, /mob/living/carbon/xenomorph/lesser_drone)) #define ispraetorian(A) (istype(A, /mob/living/carbon/xenomorph/praetorian)) #define isqueen(A) (istype(A, /mob/living/carbon/xenomorph/queen)) #define isravager(A) (istype(A, /mob/living/carbon/xenomorph/ravager)) diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index ac783b6f426e..82237cd793b2 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -70,6 +70,7 @@ #define HUD_ARMOR_STATES_XENO 10 /// Multiplier for time taken for a xeno to place down a resin structure +#define BUILD_TIME_MULT_LESSER_DRONE 2 #define BUILD_TIME_MULT_XENO 1 #define BUILD_TIME_MULT_BUILDER 1 #define BUILD_TIME_MULT_HIVELORD 0.5 @@ -206,6 +207,7 @@ // Health bands #define XENO_HEALTH_LARVA 35 * XENO_UNIVERSAL_HPMULT +#define XENO_HEALTH_LESSER_DRONE 160 * XENO_UNIVERSAL_HPMULT #define XENO_HEALTH_RUNNER 230 * XENO_UNIVERSAL_HPMULT // Killed by 1 PB #define XENO_HEALTH_TIER_1 250 * XENO_UNIVERSAL_HPMULT #define XENO_HEALTH_TIER_2 300 * XENO_UNIVERSAL_HPMULT @@ -603,7 +605,8 @@ #define XENO_CASTE_LARVA "Bloody Larva" #define XENO_CASTE_PREDALIEN_LARVA "Predalien Larva" #define XENO_CASTE_FACEHUGGER "Facehugger" -#define XENO_T0_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER) +#define XENO_CASTE_LESSER_DRONE "Lesser Drone" +#define XENO_T0_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER, XENO_CASTE_LESSER_DRONE) //t1 #define XENO_CASTE_DRONE "Drone" @@ -631,7 +634,7 @@ #define XENO_CASTE_HELLHOUND "Hellhound" #define XENO_SPECIAL_CASTES list(XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND) -#define ALL_XENO_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER, XENO_CASTE_DRONE, XENO_CASTE_RUNNER, XENO_CASTE_SENTINEL, XENO_CASTE_DEFENDER, XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_LURKER, XENO_CASTE_WARRIOR, XENO_CASTE_SPITTER, XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER, XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND) +#define ALL_XENO_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER, XENO_CASTE_LESSER_DRONE, XENO_CASTE_DRONE, XENO_CASTE_RUNNER, XENO_CASTE_SENTINEL, XENO_CASTE_DEFENDER, XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_LURKER, XENO_CASTE_WARRIOR, XENO_CASTE_SPITTER, XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER, XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND) // Checks if two hives are allied to each other. // PARAMETERS: @@ -695,3 +698,6 @@ #define TAILSTAB_AIRLOCK_DAMAGE_MULTIPLIER 2 #define FRENZY_DAMAGE_MULTIPLIER 2 + +#define JOIN_AS_FACEHUGGER_DELAY (3 MINUTES) +#define JOIN_AS_LESSER_DRONE_DELAY (30 SECONDS) diff --git a/code/_globalvars/global_lists.dm b/code/_globalvars/global_lists.dm index 586d5e71a92d..7e65cfecd8b0 100644 --- a/code/_globalvars/global_lists.dm +++ b/code/_globalvars/global_lists.dm @@ -50,6 +50,12 @@ GLOBAL_LIST_EMPTY(mainship_pipes) // Resin constructions parameters GLOBAL_LIST_INIT_TYPED(resin_constructions_list, /datum/resin_construction, setup_resin_constructions()) +GLOBAL_LIST_INIT(resin_build_order_lesser_drone, list( + /datum/resin_construction/resin_turf/wall, + /datum/resin_construction/resin_turf/membrane, + /datum/resin_construction/resin_obj/door, +)) + GLOBAL_LIST_INIT(resin_build_order_drone, list( /datum/resin_construction/resin_turf/wall, /datum/resin_construction/resin_turf/membrane, diff --git a/code/game/gamemodes/cm_initialize.dm b/code/game/gamemodes/cm_initialize.dm index a42ff3f22e59..a7e8ab612bb4 100644 --- a/code/game/gamemodes/cm_initialize.dm +++ b/code/game/gamemodes/cm_initialize.dm @@ -548,6 +548,38 @@ Additional game mode variables. return TRUE +/datum/game_mode/proc/attempt_to_join_as_lesser_drone(mob/xeno_candidate) + var/list/active_hives = list() + var/datum/hive_status/hive + var/last_active_hive = 0 + for(var/hivenumber in GLOB.hive_datum) + hive = GLOB.hive_datum[hivenumber] + if(hive.totalXenos.len <= 0) + continue + active_hives[hive.name] = hive.hivenumber + last_active_hive = hive.hivenumber + + if(active_hives.len <= 0) + to_chat(xeno_candidate, SPAN_WARNING("There aren't any Hives active at this point for you to join.")) + return FALSE + + if(active_hives.len > 1) + var/hive_picked = tgui_input_list(xeno_candidate, "Select which Hive to attempt joining.", "Hive Choice", active_hives, theme="hive_status") + if(!hive_picked) + to_chat(xeno_candidate, SPAN_ALERT("Hive choice error. Aborting.")) + return + hive = GLOB.hive_datum[active_hives[hive_picked]] + else + hive = GLOB.hive_datum[last_active_hive] + + if(!hive.hive_location) + to_chat(xeno_candidate, SPAN_WARNING("The selected hive does not have a hive core to spawn from!")) + return + + hive.hive_location.spawn_lesser_drone(xeno_candidate) + + return TRUE + /datum/game_mode/proc/transfer_xeno(xeno_candidate, mob/living/new_xeno) if(!xeno_candidate || !isxeno(new_xeno) || QDELETED(new_xeno)) return FALSE diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm index b909c38cd9e6..e7697d54f0de 100644 --- a/code/game/jobs/role_authority.dm +++ b/code/game/jobs/role_authority.dm @@ -762,6 +762,8 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou M = /mob/living/carbon/xenomorph/larva/predalien if(XENO_CASTE_FACEHUGGER) M = /mob/living/carbon/xenomorph/facehugger + if(XENO_CASTE_LESSER_DRONE) + M = /mob/living/carbon/xenomorph/lesser_drone if(XENO_CASTE_RUNNER) M = /mob/living/carbon/xenomorph/runner if(XENO_CASTE_DRONE) diff --git a/code/modules/admin/player_panel/actions/transform.dm b/code/modules/admin/player_panel/actions/transform.dm index 11dd7525bb07..185165357e05 100644 --- a/code/modules/admin/player_panel/actions/transform.dm +++ b/code/modules/admin/player_panel/actions/transform.dm @@ -38,6 +38,11 @@ GLOBAL_LIST_INIT(pp_transformables, list( name = "Facehugger", key = /mob/living/carbon/xenomorph/facehugger, color = "purple" + ), + list( + name = "Lesser Drone", + key = /mob/living/carbon/xenomorph/lesser_drone, + color = "purple" ) ), diff --git a/code/modules/cm_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm index a29b49b7745a..993d4f833fa6 100644 --- a/code/modules/cm_aliens/structures/special/pylon_core.dm +++ b/code/modules/cm_aliens/structures/special/pylon_core.dm @@ -327,5 +327,22 @@ // Tell admins that this condition is reached so they know what has happened if it fails somehow return +/obj/effect/alien/resin/special/pylon/core/proc/spawn_lesser_drone(mob/xeno_candidate) + if(!linked_hive.can_spawn_as_lesser_drone(xeno_candidate)) + return FALSE + + var/mob/living/carbon/xenomorph/lesser_drone/new_drone = new /mob/living/carbon/xenomorph/lesser_drone(loc, null, linked_hive.hivenumber) + xeno_candidate.mind.transfer_to(new_drone, TRUE) + new_drone.visible_message(SPAN_XENODANGER("A lesser drone emerges out of [src]!"), SPAN_XENODANGER("You emerge out of [src] and awaken from your slumber. For the Hive!")) + playsound(new_drone, 'sound/effects/xeno_newlarva.ogg', 25, TRUE) + new_drone.generate_name() + + return TRUE + +/obj/effect/alien/resin/special/pylon/core/attack_ghost(mob/dead/observer/user) + . = ..() + if(SSticker.mode.check_xeno_late_join(user)) + SSticker.mode.attempt_to_join_as_lesser_drone(user) + #undef PYLON_REPAIR_TIME #undef PYLON_WEEDS_REGROWTH_TIME diff --git a/code/modules/mob/dead/observer/actions.dm b/code/modules/mob/dead/observer/actions.dm index 49a3890088f6..ff897db4a3f6 100644 --- a/code/modules/mob/dead/observer/actions.dm +++ b/code/modules/mob/dead/observer/actions.dm @@ -81,6 +81,22 @@ if(SSticker.mode.check_xeno_late_join(owner)) SSticker.mode.attempt_to_join_as_xeno(owner) +/datum/action/observer_action/join_lesser_drone + name = "Join as Lesser Drone" + action_icon_state = "join_lesser_drone" + listen_signal = COMSIG_KB_OBSERVER_JOIN_LESSER_DRONE + +/datum/action/observer_action/join_lesser_drone/action_activate() + if(!owner.client) + return + + if(SSticker.current_state < GAME_STATE_PLAYING || !SSticker.mode) + owner.balloon_alert(owner, "game must start!") + return + + if(SSticker.mode.check_xeno_late_join(owner)) + SSticker.mode.attempt_to_join_as_lesser_drone(owner) + /datum/keybinding/observer category = CATEGORY_OBSERVER weight = WEIGHT_DEAD @@ -108,3 +124,10 @@ name = "join_pred" full_name = "Join the Hunt" keybind_signal = COMSIG_KB_OBSERVER_JOIN_PREDATOR + +/datum/keybinding/observer/join_lesser_drone + hotkey_keys = list("Unbound") + classic_keys = list("Unbound") + name = "join_lesser_drone" + full_name = "Join as Lesser Drone" + keybind_signal = COMSIG_KB_OBSERVER_JOIN_LESSER_DRONE diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 3a35eecd8557..9e8fa264af1d 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -54,7 +54,7 @@ var/datum/health_scan/last_health_display var/ghost_orbit = GHOST_ORBIT_CIRCLE var/own_orbit_size = 0 - var/observer_actions = list(/datum/action/observer_action/join_xeno) + var/observer_actions = list(/datum/action/observer_action/join_xeno, /datum/action/observer_action/join_lesser_drone) var/datum/action/minimap/observer/minimap var/larva_queue_cached_message ///Used to bypass time of death checks such as when being selected for larva. @@ -368,12 +368,13 @@ Works together with spawning an observer, noted above. if(ghost.client.player_data) ghost.client.player_data.load_timestat_data() - // Larva queue: We use the larger of their existing queue time or the new timeofdeath except for facehuggers - // We don't change facehugger timeofdeath because they are still on cooldown if they died as a hugger - var/new_tod = isfacehugger(src) ? 1 : ghost.timeofdeath - // if they died as facehugger, bypass typical TOD checks - ghost.bypass_time_of_death_checks = isfacehugger(src) - ghost.client.player_details.larva_queue_time = max(ghost.client.player_details.larva_queue_time, new_tod) + // Larva queue: We use the larger of their existing queue time or the new timeofdeath except for facehuggers or lesser drone + var/new_tod = (isfacehugger(src) || islesserdrone(src)) ? 1 : ghost.timeofdeath + + // if they died as facehugger or lesser drone, bypass typical TOD checks + ghost.bypass_time_of_death_checks = (isfacehugger(src) || islesserdrone(src)) + + ghost.client?.player_details.larva_queue_time = max(ghost.client.player_details.larva_queue_time, new_tod) ghost.set_huds_from_prefs() @@ -418,9 +419,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(ghost && !is_admin_level(z)) ghost.timeofdeath = world.time - // Larva queue: We use the larger of their existing queue time or the new timeofdeath except for facehuggers - var/new_tod = isfacehugger(src) ? 1 : world.time - ghost.bypass_time_of_death_checks = isfacehugger(src) + // Larva queue: We use the larger of their existing queue time or the new timeofdeath except for facehuggers or lesser drone + var/new_tod = (isfacehugger(src) || islesserdrone(src)) ? 1 : ghost.timeofdeath + + // if they died as facehugger or lesser drone, bypass typical TOD checks + ghost.bypass_time_of_death_checks = (isfacehugger(src) || islesserdrone(src)) + ghost.client?.player_details.larva_queue_time = max(ghost.client.player_details.larva_queue_time, new_tod) if(is_nested && nest && !QDELETED(nest)) ghost.can_reenter_corpse = FALSE @@ -779,6 +783,21 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(SSticker.mode.check_xeno_late_join(src)) SSticker.mode.attempt_to_join_as_facehugger(src) +/mob/dead/verb/join_as_lesser_drone() + set category = "Ghost.Join" + set name = "Join as a Lesser Drone" + set desc = "Try joining as a Lesser Drone to support the hive." + + if (!client) + return + + if(SSticker.current_state < GAME_STATE_PLAYING || !SSticker.mode) + to_chat(src, SPAN_WARNING("The game hasn't started yet!")) + return + + if(SSticker.mode.check_xeno_late_join(src)) + SSticker.mode.attempt_to_join_as_lesser_drone(src) + /mob/dead/verb/join_as_zombie() //Adapted from join as hellhoud set category = "Ghost.Join" set name = "Join as Zombie" diff --git a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm index b12ff5d6c3bb..6361ff595b10 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm @@ -185,7 +185,7 @@ var/is_shover_queen = isqueen(M) var/can_resist_shove = M.hivenumber != src.hivenumber || ((isqueen(src) || IS_XENO_LEADER(src)) && !is_shover_queen) var/can_mega_shove = is_shover_queen || IS_XENO_LEADER(M) - if(can_mega_shove && !can_resist_shove) + if(can_mega_shove && !can_resist_shove || (mob_size < MOB_SIZE_XENO_SMALL && M.mob_size >= MOB_SIZE_XENO_SMALL)) playsound(loc, 'sound/weapons/alien_knockdown.ogg', 25, 1) M.visible_message(SPAN_WARNING("\The [M] shoves \the [src] out of her way!"), \ SPAN_WARNING("You shove \the [src] out of your way!"), null, 5, CHAT_TYPE_XENO_COMBAT) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_abilities.dm new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_abilities.dm @@ -0,0 +1 @@ + diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_macros.dm b/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_macros.dm new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_macros.dm @@ -0,0 +1 @@ + diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_powers.dm new file mode 100644 index 000000000000..515efea23d53 --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/abilities/lesser_drone/lesser_drone_powers.dm @@ -0,0 +1,6 @@ +/datum/action/xeno_action/onclick/plant_weeds/lesser/use_ability(atom/A) + if(!(locate(/obj/effect/alien/weeds/node) in orange(4, owner))) + to_chat(owner, SPAN_XENONOTICE("You can only plant resin nodes near other resin nodes!")) + return + + . = ..() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm b/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm new file mode 100644 index 000000000000..48bf0d95ddcf --- /dev/null +++ b/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm @@ -0,0 +1,97 @@ +/datum/caste_datum/lesser_drone + caste_type = XENO_CASTE_LESSER_DRONE + tier = 1 + melee_damage_lower = XENO_DAMAGE_TIER_1 + melee_damage_upper = XENO_DAMAGE_TIER_1 + melee_vehicle_damage = XENO_DAMAGE_TIER_1 + max_health = XENO_HEALTH_LESSER_DRONE + plasma_gain = XENO_PLASMA_GAIN_TIER_7 + plasma_max = XENO_PLASMA_TIER_3 + crystal_max = XENO_CRYSTAL_LOW + xeno_explosion_resistance = XENO_NO_EXPLOSIVE_ARMOR + armor_deflection = XENO_NO_ARMOR + evasion = XENO_EVASION_LOW + speed = XENO_SPEED_TIER_6 + + evolution_allowed = FALSE + can_be_revived = FALSE + + build_time_mult = BUILD_TIME_MULT_LESSER_DRONE + + caste_desc = "A builder of hives." + can_hold_facehuggers = 1 + can_hold_eggs = CAN_HOLD_TWO_HANDS + acid_level = 1 + weed_level = WEED_LEVEL_STANDARD + max_build_dist = 1 + + tackle_min = 4 + tackle_max = 5 + + aura_strength = 1 + + minimap_icon = "lesser_drone" + +/datum/caste_datum/lesser_drone/New() + . = ..() + + resin_build_order = GLOB.resin_build_order_lesser_drone + +/mob/living/carbon/xenomorph/lesser_drone + caste_type = XENO_CASTE_LESSER_DRONE + name = XENO_CASTE_LESSER_DRONE + desc = "An alien drone. Looks... smaller." + icon = 'icons/mob/xenos/drone.dmi' + icon_size = 48 + icon_state = "Lesser Drone Walking" + plasma_types = list(PLASMA_PURPLE) + tier = 0 + mob_flags = NOBIOSCAN + mob_size = MOB_SIZE_XENO_VERY_SMALL + life_value = 0 + default_honor_value = 0 + show_only_numbers = TRUE + counts_for_slots = FALSE + counts_for_roundend = FALSE + refunds_larva_if_banished = FALSE + crit_health = 0 + gib_chance = 100 + acid_blood_damage = 15 + base_actions = list( + /datum/action/xeno_action/onclick/xeno_resting, + /datum/action/xeno_action/onclick/regurgitate, + /datum/action/xeno_action/watch_xeno, + /datum/action/xeno_action/activable/tail_stab, + /datum/action/xeno_action/activable/corrosive_acid/weak, + /datum/action/xeno_action/onclick/emit_pheromones, + /datum/action/xeno_action/onclick/plant_weeds/lesser, //first macro + /datum/action/xeno_action/onclick/choose_resin, //second macro + /datum/action/xeno_action/activable/secrete_resin, //third macro + /datum/action/xeno_action/onclick/tacmap, + ) + inherent_verbs = list( + /mob/living/carbon/xenomorph/proc/vent_crawl, + /mob/living/carbon/xenomorph/proc/rename_tunnel, + /mob/living/carbon/xenomorph/proc/set_hugger_reserve_for_morpher, + ) + + mutation_type = DRONE_NORMAL + + icon_xeno = 'icons/mob/xenos/lesser_drone.dmi' + icon_xenonid = 'icons/mob/xenonids/lesser_drone.dmi' + +/mob/living/carbon/xenomorph/lesser_drone/age_xeno() + if(stat == DEAD || !caste || QDELETED(src) || !client) + return + + age = XENO_NORMAL + + hud_update() + + xeno_jitter(25) + +/mob/living/carbon/xenomorph/lesser_drone/initialize_pass_flags(datum/pass_flags_container/PF) + ..() + if (PF) + PF.flags_pass = PASS_MOB_IS_XENO|PASS_MOB_THRU_XENO + PF.flags_can_pass_all = PASS_MOB_IS_XENO|PASS_MOB_THRU_XENO diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm index 060c3aea2814..fa01938a1203 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm @@ -1,5 +1,3 @@ -#define JOIN_AS_FACEHUGGER_DELAY 3 MINUTES - // Actual caste datum basedef /datum/caste_datum var/caste_type = "" @@ -352,6 +350,9 @@ /// How many huggers can the hive support var/playable_hugger_limit = 0 + /// How many lesser drones the hive can support + var/lesser_drone_limit = 0 + var/datum/tacmap/xeno/tacmap var/minimap_type = MINIMAP_FLAG_XENO @@ -893,8 +894,11 @@ qdel(S) for(var/mob/living/carbon/xenomorph/xeno as anything in totalXenos) if(get_area(xeno) != hijacked_dropship && xeno.loc && is_ground_level(xeno.loc.z)) - if(isfacehugger(xeno)) + if(isfacehugger(xeno) || islesserdrone(xeno)) to_chat(xeno, SPAN_XENOANNOUNCE("The Queen has left without you, you quickly find a hiding place to enter hibernation as you lose touch with the hive mind.")) + if(xeno.stomach_contents.len) + xeno.devour_timer = 0 + xeno.handle_stomach_contents() qdel(xeno) continue if(xeno.hunter_data.hunted && !isqueen(xeno)) @@ -908,7 +912,7 @@ qdel(xeno) stored_larva++ continue - if(!isfacehugger(xeno)) + if(xeno.tier >= 1) xenos_count++ for(var/i in GLOB.alive_mob_list) var/mob/living/potential_host = i @@ -1047,6 +1051,53 @@ playsound(hugger, 'sound/effects/xeno_newlarva.ogg', 25, TRUE) hugger.generate_name() +/datum/hive_status/proc/update_lesser_drone_limit() + lesser_drone_limit = Ceiling(totalXenos.len / 3) + +/datum/hive_status/proc/can_spawn_as_lesser_drone(mob/dead/observer/user) + if(!GLOB.hive_datum || ! GLOB.hive_datum[hivenumber]) + return FALSE + + if(jobban_isbanned(user, JOB_XENOMORPH)) // User is jobbanned + to_chat(user, SPAN_WARNING("You are banned from playing aliens and cannot spawn as a xenomorph.")) + return FALSE + + if(world.time - user.timeofdeath < JOIN_AS_LESSER_DRONE_DELAY) + var/time_left = round((user.timeofdeath + JOIN_AS_LESSER_DRONE_DELAY - world.time) / 10) + to_chat(user, SPAN_WARNING("You ghosted too recently. You cannot become a lesser drone until 30 seconds have passed ([time_left] seconds remaining).")) + return FALSE + + if(totalXenos.len <= 0) + to_chat(user, SPAN_WARNING("The hive has fallen, you can't join it!")) + return FALSE + + if(!living_xeno_queen) + to_chat(user, SPAN_WARNING("The selected hive does not have a Queen!")) + return FALSE + + if(!living_xeno_queen.ovipositor && !SSticker.mode.is_in_endgame) + to_chat(user, SPAN_WARNING("The selected hive does not have a Queen on Ovipositor!")) + return FALSE + + update_lesser_drone_limit() + + var/current_lesser_drone_count = 0 + for(var/mob/mob as anything in totalXenos) + if(islesserdrone(mob)) + current_lesser_drone_count++ + + if(lesser_drone_limit <= current_lesser_drone_count) + to_chat(user, SPAN_WARNING("[GLOB.hive_datum[hivenumber]] cannot support more lesser drones! Limit: [current_lesser_drone_count]/[lesser_drone_limit]")) + return FALSE + + if(tgui_alert(user, "Are you sure you want to become a lesser drone?", "Confirmation", list("Yes", "No")) != "Yes") + return FALSE + + if(!user.client) + return FALSE + + return TRUE + ///Called by /obj/item/alien_embryo when a host is bursting to determine extra larva per burst /datum/hive_status/proc/increase_larva_after_burst() var/extra_per_burst = CONFIG_GET(number/extra_larva_per_burst) diff --git a/colonialmarines.dme b/colonialmarines.dme index b241992cf172..4a5798995693 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -1855,6 +1855,9 @@ #include "code\modules\mob\living\carbon\xenomorph\abilities\facehugger\facehugger_powers.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\hivelord\hivelord_abilities.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\hivelord\hivelord_powers.dm" +#include "code\modules\mob\living\carbon\xenomorph\abilities\lesser_drone\lesser_drone_abilities.dm" +#include "code\modules\mob\living\carbon\xenomorph\abilities\lesser_drone\lesser_drone_macros.dm" +#include "code\modules\mob\living\carbon\xenomorph\abilities\lesser_drone\lesser_drone_powers.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\lurker\lurker_abilities.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\lurker\lurker_macros.dm" #include "code\modules\mob\living\carbon\xenomorph\abilities\lurker\lurker_powers.dm" @@ -1891,6 +1894,7 @@ #include "code\modules\mob\living\carbon\xenomorph\castes\Hellhound.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Hivelord.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Larva.dm" +#include "code\modules\mob\living\carbon\xenomorph\castes\lesser_drone.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Lurker.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Praetorian.dm" #include "code\modules\mob\living\carbon\xenomorph\castes\Predalien.dm" diff --git a/icons/mob/hud/actions.dmi b/icons/mob/hud/actions.dmi index 4d06977332078ca179f87621b7523a533d0c176e..9f885c44f50f133c73c834145e8925d06d86108f 100644 GIT binary patch delta 21536 zcmZ^LWmr^E*XU3JA~AG#BT~}cC?KVDgMdhP3>-wdTe>9-Qb42|q`SMDA&0)l_x-+K z_g;9OIp?rvpS{*z9h=r7q=WBBag0cwl}yIS0RN0T;TyaXLe12-V?cBR)ltq-NJCHP zJx%%7)meN!TXG157V=6?`mI;yVU{yo^Hk)#45JdLO3KWkVczOvd1r)vk}qoMBg<(cBe<^;GfpvvON$W&z{q9O}#UG;3F z0aT156d$Hy1s?E*Kw)`_*pYxq2{mbQQ>){d#;pX6a)KouY z;$~?#w+T$9d7XFfaQBqpoC9qIkgwLy3oo~S{_hpwtvV&4hXx0?ImB*;$r~7CtewHn&Mb^Yvy$6z6um20p!926X}Z07 zZ%V@)ExKYkRX-I}4isQO;o-pS$r+ybx@eLAtghz*KAoBn<)%%`qfo#5@5dFVBwxZ$ zL&PR;117@IY3OBK451mVt+_>i{)oJz(Z`UKltg{5sb-{z(fYreF|lLIf*0rqE8wKIfZO2+t^l1xV8lh9Q%uaT4p;5u z>`eAuvg}kX6uSD2GL%q2Qc}t)VzvZvD$x`?du3uB!Nn%k+19HngB4EH!pf{T5O#Aj z|7+ivLq61MURrHpYV1gM86nW=Gc&b=AU<7L21aE=P$1u8s1j-b)xDpPfZo94w~K)O zdNuq4K}{8Bc*OwpEcS|PTgs(o4iYk4kkszN#W6>d$lE0{++p(nNIl~(yEau}mwSQwu`5z(^S_IH92U`!ijz8>vsShzF;TdXcXD-zFxT7a=N!+ve#z zok1j!ARfoFpLhy-%&xMj21K^u9c5WS{_mcZ$oK?bebu`@t~Z2YQ}@c_xi!4@XE;C}LYsB>=I;;7Mh=833b0-@savJ*mZrzl}|NoT>iojRT01UGON68J>dt81(_1V%9v&jgm34*Y`iz9|T9R`QdfPbHV9z{ek5@%f97T zRB^>(u@gT1NNL*vFbx>S5r+9o|I^tJHO+e@6 z_4ofC?VYpybm*gtiad_ehjl#{Z-Tpts7W@`LM=7#283Udns@G}FW8Y9%x^og*v z1QgB4&47XXyJl9IB^8-7D#*&sCOWE%0m9L%=W5$yj+P{4D($ z>UY9jH%DDc&dt#*LWmhh?73cg!IyDz;uMgdYl;dWNzcs%2uwLaUU#F6aY#&3o9uc? zDRfTrQpX9RwW+|7c5ch-S(ks-7T0w8r4ia5w+s=Q)IxT7o`)`2#KD!4qRi-n$1LLE zUgzYpp_IztY@eRGICR%X%=^F7?2nr|K9BB2h(9_V`x>ZcFX=O|1EK|WN#r%+_BOw5 zhXG*%kQH3wExP7x2KsN&j?rPPxYhsGSZ0|=A|lMhs-3sUIHx48`ZGs1&|+iWnNmb6 zd0ygR!HXg_mrT>QG{tk#-`zTiB6}XSe6z#$QOqWdkTCP}BK7zEio(gsH+7*?5#vl4dTKXrvqq55gVT2sD!DenIyCQK__ zPxsN*>R4@1?4RMbEmB~fKc20&PD*j*5tYao65_9#g}W2bMp7h>7APL083MR9hGDup zbW&E`b=)L5Dl!IMH1$UX1>h5UKa!rVZfb}G=lyf==WQ!nU|JSx?V4vZV z^f@2j_cnt`M;yiad0CsT;rvF*oHIO+O9b&2ZEBE*&|i0ZRHeB2=AH->2RX0VLs1c5 z7}oJBvlM6*opg0c4=w@Sp^p3_J%I+4^l?4118{qMeK39^Hf>^u^~z*npf#kXX&<7d zff(zZ79GjAwMW1j?{c=^*O!58FoJ{z+P`?}N}rYO?NHD%GDE5|(L^7L&I#xeuW-jE zIHi?g;_6VEC!JrKnu-zSji>lq!$A8l#A^+58c5*hKVd-G{+xudmdurqm7a9#yS{aP zqn3OF7(c=mCXIADL7|PU@3S5f8tOXr=(^VQnXl;150Ftr+cObHyzu(>a%k1R*WPaLsLj;^+Z`ULf z+mjL(DF7(V!6hb4$M%G+)*8nmG}Q$t?2>+4@bmhg$E`vFzFCAe5v-Be5+qvjQ}Q*R@ILY7 z*J&X57cM>gfcVIV2NkXNfG6!5u7fLr$Gh1Yry#ZDtt!l2=)A5}6?=(TaE)t;o!e)% zmb{EY(>LFRN(vrxS3!OlH%%oWT&_kx2OT;0mX}F+N{VE8)(>WWqR=$Cje%0qt0-W_ zCzWsqZd`i?d@jRL`pbsO?>Tvn_1k%a=MAu=_#DUgzB|6`Y?M4F^Rup@8Xx8k)MQ^m zp?mo^-SoP@;NR`5&aQr@omug4D4lgR%5-{J{(%eHALQTUWFZqNWz+=YKC(eOBXPvf zB#YDphlBm587x_+FT}Fyv(Jow-XghqNR182KJd)KyNp5`*Xv`xzL22dVcD2P+9d#h zrN-IbLD48PSq1L?5Nxtf9gwQINE!XCFx|U%-;Fy1(SSfug|;Dl29s8HANWKh=xV-l zKvv1iBEKl3UeO8XR`nAp9a3ATV#K>L5TY8&w=vWqLqhg<0<^b=-CX%$pEUOUAt)|V zuQCIiaInY`+Qp1ammhZA#T66 zB?X~XWQCL~zjM+>+=j?@;qfs9JdS!w5JBLw4zD)BPjF-UR0DiGwo@?66+-fUbdy3~ z+wVqr0yB|(Xrd4ZgU8X=FBF+5^ccdl{72~Atmu|F(5%$*M(6QiiMpV*U%5ZnsQ`l{JXPndR2Zb4OYN&e^#;jtar)PNTR-=sGWPOa5Y?Y*Z&;JXH ze(^=~H=(|;XuLv&gYOZE2)zX0DopbI{e7O-*Yp`Xc{$w+Mhv5mdm4DVd!j{XdA9Bz2Om{$HvQ>k z^EJkIs_fiVYalzr{UmuHzeSyNx<$H(rmVl_zqz0ct0qx<+Ra-?g|~c-m-K-Ada|Tc zm`2?HQmq92#3G9I_wl^zF)3(IIllbXOfJEOTIVgQcG z%!}h>7&e6U8#`X~S6@+D&LPF;&Cu&-{I^Pe5{@-N#!Wt)2cJWoYni%u9e;Juz4`G? znXAtJ;#*VFIL_-ZHmz#657AWK!48X!AXF13KV`-DgmBH&opgfSu@&zpMQ$W*zyMe- zLe}>Mb$4rp@gE`Dgdpa28PqsGV<1XdG>eXF@vS|4 zoz5Gt!8H)m;8|+lIa%#^zVuvtCGCMLFE=wnNDAk z!BkjS$bA?$(an$zF+G6%LVS#(H7B9dW~Wr8ry$_d4?x5lp7c zVo$rJQvzbp3#UohU&k^L=LliZ%fUJ`Lyh5+`M!7hNMGoF{XprO9{Z#J;qKUt=)I+h3 z439LCIe&FD+}K?3kw!$Z^V=U5dP2elqG|FMSX6+_Vi*_#2rQXu5Xwv2(&~vTcHXX! z&Qk=hd6IZ||LGCDJ+ttLJ~^$SM`7Bf1Uw3y?rP|k!j}BKg6pAZRy~c(5RfV4!DuAQl&g5l+V{g@(2rcz8L(EFRkRqs-&U8I3;A55zWL zTGtaH5#+y&69&GNuuVsz+6pjrcOAt76?E9(-4mz&%fJ9#S`Wv#e;g|{>q%EX!t zd>6qD-M;5~IlYd|wd!Miyjrz}|CHnOee`PPlw-bw-@uIFSwXqzt0Iy~qJomL8GF&u znIEXHKt0MSgM5pEj7$h-xHkU9BEWxwk?#KlBi#`+xS<7xH`6zql|<8GT~~z0+OW}+ z=%w)3M%DIJrWg)E3CL`8a9&VM0mpFb`{^s? zBRBfWDL=htEA~&X+m2UQ*;<24)H-WD>*$%;h&-cy zCs!{h{XpDwec_aH=|ayfF5#C6Dtf$!OnQX_)DdR=%hoOqCl_gHgpk7Epp_WGCGLYQ zng+`kM1IR^M%xqNawTdmTw*mgIFQ^E8DVRq*X3T%4Jx0gai)KM&oM>nLk+G$Wb?>x zwR~`}30Yy4IIb-xTCQ8`$ET&2c>krVICV2J5lTPdwd>o7-7h1%3$>JJ&ZejTCBX+I zzQ)3A`W{qJw*Chu@?kj-tv71AOUD*d3aGjH2bO2JjSxJ~o@ z3#-{5&+Fc+{p^2lJbt+>G*t#0wVyo*F4Lfhj(NN|l4TW9lw27)Jxje^z#sA{SV#Fq zK)=w2Pt62>FZ$14Wi2P7IVo+d#eoCR^NK{5tOU*UZ%;Lxg-Dz`b~3om;1?5%OgVv^ z62Yq7(S zJw>HoayxNOw1H=(&p=!t0Xkn^coNVtT;HvDW)44s6kd>1!l^S5dt@s&(6D&v+5S^_NU?GMhG2n~WH(Bj+=Q5huqmw{zGmW28T@1h;~ zOf_}$=Q3jnY4%ZgdEEto6y4zjZVEH5qN z{-YmqZ&29qu){5M?B+t|RJD)wCJ)1U$hcK!nUcpaC=9W{v!-3h{5zo%?J!)=F--k* z(C=h~ArS(Rq~fCtm3$<;L`Z~m6Ru~|T=lRlXKOdLDE?#cV_*vwVY_JW;esk2Ho>;7 z7lW~D^o#&MkL*jpM3K2{S19Mp4fn-Q79k`(dciM{WA}n zZ`d)lXl}4;R_*`zG{bFfn?+<6a3OL*<0wvQX+lpZ>W(hIfzD!kraB>$ zqd1r&qa@Y(H$d;S_H0#4z39-j-$SbN9wQuA?~PoqjsK`_04~xS=Yf*>*etiQxoiGF ztu<&u$^ev(A;RKdjle{S-1ZxMOnK~ceD&4ncUER*-X;8;mf@UFtiGOxA8Zu7KZyTT zt}nnh`C!u>kS7kmy5@`HJ(XBocl7n-xQT5H?Q=Yt?*N2eKjjwr_@uU};oa4YOyeK7 z`VT{jT!imBBExZgn?~v7@Q3vBuzT@)G2tJ3esTX}MWL<>ZxEW%w>y8HZ16*A=wE}9 zlFLu<;_W$oCVPDlrk-S5a02i7>({N|h4L;R_4C>xYt#MJYWfuY`N`F&8xY9%ZikrMM(GYzV<2oN1v%CjwZX#6-$`O%X+3tOVg;Dr^KGy2_7cuTUT_wqeizL=kqJoA%9AzJ2Y)ZRId) zzCP`NZNuKpCZ!(4OJkzO|Bh(wUN8mtPF#5PrNx#4R5x08^pBuZQ{gII$eI$qUCPOq z^Oh>ZPb4lh2ZWZD%iR&L-`EjV4hBLPI>zXU zWLbVie6W^UH+y=@Yxe>0J3EAOC0 zm2qAEkSpV}kgt6A51#ey00iC_xz5nvc>@mhCYr2zzm*t;!B3RJAjFit9-yQV#VH{d#jO>~w*q>Afr2JRyR`#0L2}(0HKw3` z?5fh!!@$8&04d#;udSs;kgfmaqY|~%WxJ%=;a?KyIM9G=o}dY3*a(amwgCU?&4g=d zbxH=Y<>)_|6c~M#Zb@elAhrnv(b|X7znluJoWHc}>Y_WJ)L9JL1nD=w)jTc*g@5?Q zK0%m>3#Chlvm)szOV(Zk)wmX+MW-T)b1@&Q)Nc&;4Gh8SJ=g({VJdIeA!%Mc+1p%bmO5y`U z_y^4cbJ4tyUz1BfL9VvD>K^=Np>sZ59lQltshi8QZd=5z!mOBY>}CTE>;z2L6>`z* z4vG30cJ-c}c{I>SbfUcz4c;af{6k0YEN#wd(m0A2ukLo#_@S$!i>o=1DVuuS;t9oWSCT)Ir&GF8JX(MV?KMLP*>>KI&oB1v)nY&l#)U2 zN|F~UQ}OCpz`LziHC|^jv6u5*o8!Arx!*(uZ;V zdp2}I?UcNm*lFz0)xxu;ERs9djujS*p;)8!2kXhFFv8NnFMFcQp;_rdoy0kaFefm{nFl5w z{E4%Qb~?}ZwDZ1F#c|>BCS^!1om`66mg3%rm}3oX4Q6O)8={V3qvT$N%Rc$qV>qr5 zbI5=`_B(d*Hhm@f2>>Rx*VnL~;x#a^K@+@!)|1YjL*Q#*d#g23@||p$={M61|Uy8w7fe z5*Sbad7Qz56!DsR$ZpU(>_j#`zmRkhTS`QEkV8y5jXx_%_$_bewh)F;OMQ$y& zAavj7(?%GCLL624l}go5Cb=7#qEM?28ei70I$|k5bw3vq54KeieS9VyTM{HUbLg=_ zBWe4$!_foQ6wf3T-sF>a-i~HjW6 zpS=)pSj2{8PAl+%xJ+;^b~r0vIcWuf2tg`NzD}10b2XJI+kw;S8S;1ewZqfaWGTO- z-*dm2rL}u)I_!l+%16>TD|S7@@K%QM5U6c%$9=emXVrg_jdTlHLiO+({ab zyV*CV@doS9yHE|^^HP33{@TMR*&IoX@r)GGX@uK`p=-A)|3;Bh+27oRb(=~ufku`yfFo)8 zF`x6L;Ai%4kOQnn205|=MCc20eAhAL8|quy?RSu}J}8n?5&GP3_qq)3ct0IZf0c1z z7~lJ+lU!_=LXRj98R*Z1-r(}XzKM`RxP33}oI&~p0EHCBB|ftRH)>s{xncO& zjtXh5wVxL;gb84o_+&+>Ds^AlJJJi#kyT>$c{z_O=F3<9t)lmGQA(c&klc3(LiV>8 zw|6fEJ_;PPHXK&Vk)lEA=|0i*Pcr}fI#bL2IlUr*gBeWYZelFvXZfm%~9x4Xf`2%pnA*I^`xz~M|R7752lgQugF(OWm}GoSI8d)BfN>xY)h z1y?W2T}{4o+Ml7ncUKY!Nbd(~ZG)=^;(%nQIy`&cH#uNDgC zF9bv-K4sm`HXo`g*qIX~AVKOLU!u&{HSLbVPwH0^V$hdA4x+>ejGRSJOivf^aN*8J zL~59r#CC+@u4nrKN4x59%+5tTI%FF~xvA1uO5cfd_opc#0Syjn9n%@OyvI$L4Kw_E zCdUwnKNTUW-Hfzjg&BG}(o+bs=fTL`_lovxD}$H#f%UWuE|ME&?jU#1TvJw>Q_p{z zB^kM8bC*8wlBs-^IiE88M0<;;zmt+y82#a6ec?SUHDM5NFaBLm)`Wthv9K_pw^aP? zX-ibJd`lr?=EYSHdT?+_Y)p3old@YAdf}Q$mIwASGX(xV;GWZBjX)a|JBoR<$}b;< z%b3yMy6m6~h@2xqXoY@dq{x<<4^22b;Mj0|Y|_9qbF6M5OdWYhzmEf}-DmOvO*!}n zScYd~)h0k4vi!zi82jdl_nf!{d`>C5U4kmc2^GbS{B{EF(0mX zY#PVrA}YSI&v0<8s=Pva*4w7k)e|bEuS@!en3$Z{B#NtfXna%X8(OcPVR%q8%E?$l z%X;``Y{B!#q!%oOg!D3qX;EXgknkET-m1k|U1uPIQ%*+adoAgck;ywb)0uLlFUp`M zNSH4U*s7B@cN`{RuP4-*$o(zj`+aLIf?V~MYrZLC9QnGAtkn@3!O+7|QHm<{`f0Vj zwl*=E)byTH^?D>UBko5%XB@aGDZtaj;^pE^ygw_dQ2hQg()dR+lANFjGxH(z+(^+& zG+-}r#2mSO;#^fP60|P{8otSr(0ro9`B#{!nh}waP<;G+ua@p^g*WZ`oEv#K$R`DD z&MLA}v^W{B$x}(Yy1F1cjZxV$rXH|XaZJ^OVg1pU)ao+JNHgc%Zy3+1a{K#i%s^7O zJrsYgYDsz+9+rfkNn47~8e; zXpzG57Br^{7!DH%m{L_5V@^1hrmxr}@~?xeD~%K&g3X`PciXQfbPSt;9H2|bmJC{6x=LF{$0=Xt3j=e=rUEhD+J`)Hgl)&LmUpvjgMokw>pbXE5Akzb`G^ zb9@lu79w_6m`;%!DLGCYY%!PbbSEGSGoi=Omjmq)YUKtWl#UauGNiGIC}?}%k{4n; z8Nuag@Wr5@m#{S8m*=_!By8t#;Z%v#J(jLkYl}+rH*9A&D}Dvs=G(?rY1wh1k0+}g zzpc(ZKVpy)6aN!h6v&%Qp-&)!MIxDD-Qff*4l@Y53GEu?yw?E|k_akFCbZO({qUK~ zBkg|%JqB9ml0p$Y%Wq)*Gb>txWlb*gJ8wx>AD@ulMA%s$0HW-Zw<8&Hg=W#S-XaJh z{OQ;u3O@(jY}=7s>46RtL&GR=H9K}Bf#jFJ9Ep%~v%N=q(`` zq22I5?;Ke=@v*2y;0=hO-v)|Nc-ZA4aKaj|v=!f0A{1nULc-!SK(6pDA#M(?x@Ua*(%ZG{C^KgOfdgx{G}$}$`9kr@0LduBWViXyc>UI0*pPr zX8$5%n;8-kf}AVA@rh(f%MVDUTDF1d2f(O4E?8TniFxz#0}rsl9`DU$owrzV!IcXq zO{;^Q_%!R+S1phBmu$MEVVnPTEYs6x|9>9kNvVFtz`&0u!v-Jz(;Dg6Sy@p5#C2QS zw*70EG&f&s!tY;Yt&{6*Z%032Lze@aKR$~)e$7lxMKBK=fSFXhDy&3CQL^pAq*OuH zCMeh((FW#GE9NbP%}1xEiV(W~{$+$;{-=+^fW8oSqx;#6!4rsX#-cg@--Fz^<5ac& z64b+%4mi)izO*6CTzx=+$)>jZZszX&-FpA* zmI8AFcR26anTjZXw9m&@gQ8BsF(fig?8npP6ip6e!w5;0w0zsRZ(s-H#N=e2^p=>S zrIZ`;ESEU+_s@$+JQuP00oaD;1R|M+me-HmO5#*BA}n67mxw07g8|96Uo2%YxqIso z4xLjdcjcyV!3G9y#KzyK7JTFQ$bC5Ra=dJN?tqx$R;_$}?@@=mDsx-fu|6)PACJ4p30)cT4Czg`)- zvIk}BIY0K2vy4lZ_K}DAaz+_47;}-NG=%^T3nhCplM_{$v7HC(@fR-uM=Fh5r0EIzZ=%msUecuUIX*#y{InN{ zGPy>o=F9_HGI-A7O*C!glu8khqoJN3CiYFVK;YA`?aao*Ffr+bGbabB9Fr}lkofUFF~fwc$=-Hg`@Nu z_N&!XN-c+KV8c86&{GVRw%;bZjAlV81?8~D^lvf#w$uXFHCJa&$^$l})e)fY`>DV1 zhKA)w%eON;0tOGbrNkfVez_b)*ghrWu zJ4jAQ)HE-kp*=!T(HB$R44qgC+VBFE4{K@uI}bB_CV=Vr!G$fgKYj+~XFst^-qPV! z&TZLr@d}!U6b;PN%vEf>T87**ugh0fL#yG}+qWm}RnsGLvDz)CG!dv* zku7Xw)3%e*T-}~hgALur9H)@V_{@KP%qF1);EdRR5{MD& z4jV4k33<8pRM4c;LuN_g=gtWaAG(}euRWR?Mi4dOWxbCpEA~Tu$$hf+zSMd90b)t& zZ9pTZh@DvYFiq^z5-GJ+$46Piq3zrj-&@*t!QV~r+9@s-C|y(B?LJqspho1FfV5SI zBnjuX)n$i+2dn^I|G}FQ08e~Gxw}u@Q4X4k)JcxV*}^)adduK za3w~)P7~$NVeHq-FYwyly~8m=k7HRY*ya)C%eKwKIG~CTAY*GM_5=W*tEy7!iBg%A1Hdu4|bety@UE*D8+8H5TB06Kg5XJ);>#K0Oj zu?v`y{J-5t3(nMH2`Podhrc#&?(Wa7bSHlk6H}qSLc-sBwmlf*v|Aok^rmHcz$j!i ziAe?=LeW6N&%x;yWwLqQ z;|?x=C^#qVT&M9ka091ma@3bQqYIotFCI^QPixd2rF1)~I^Zk2@-t0v0_Qo))dDJ7 z*uW1~iSuG-txSkpzVKF=C|Li2M>^@7XK93C<1qdH`APn*+V~1Nbex2CtwX`KP?ChUIAFjVR%Qul*9>3yj{}a1^kKk%ry##?YlGYDSC= zo5^KIVZ=@#x-C~KVwmMLhgd92ZZD%1n_P{pRz7&>GK7f4r-*e|*VZP&x@#d_7@UuwCCB+&tP9#wlS{X>ay~-|T(%y!!y@QldBa8IF;g z0atB~K4Lg$q)BQS}vEZ25jz98;%NZ>R3wAvIuq>6Nr%#t5STv^nWcY#yha@ZB`)p;uk*l zHC_o;rZ8JTmp`d9MN+1w0pvKf<)r zgC_0um0ulfODn_3NSL(p!cz~>byPr_v8JQ!J(}j)$jWyE@@6lYiV@7HzH5SXpP2TM zbNzNOIW0u1gTGgYsqc;{HToWsQ%_$1?sE{#+fL%|0$z4@R4i}W$vYCB>nhJSV z7K4?gleOG?yB-G501=5mBc2&S0JJV$4+I(PsVyy;@6EZ_#*h4GfPZLT0Ni*yp07md zg!_~5fr>g6H%rM<_oWb(`Ded}l>07PMol}nk98mrN5AjG&RJlz9P-@k$_4Bw*4+@3 zjc@sUg{gBTXgT^qDTgngZa9~VSCpmI{>F|CJZoV93-aGJD!6dXdN!M)rC_fkSL(t+ zQ;WbL`g%FMY(e0{YiY0+^Y69;=0jzj_8RDY1~u10OLW(#@esGFHB~FMczJNW94yfg ze-z0j;X}V^ydgrX)}s+wm*LY}8UuQT=7xG6bg9`2l-)dQw-THxZI#= zMK({@wZj=7%vc2Q*9W~hyJBlP?=GdS3D8_$q>qvlSX(k6S(bS(hU$I zeXJc@LxFHfz8UVi-_NCuLJK%+)rDBVsUW7HFv$0Kfb^wJXwUgiEb`;`xb`?T7|L*Ep(?1$o ztQ!a)g>vDU3#QIds5JwwV=dkCFX9P4p6vgGp}V0)EADzo-6|V#<^|8ci4>(a2>W`G$ z?vh6QZPj9;Gc%TzJZZJRcNv$}>=}P>=%J9O!S4ubOdK;2Kji@WJq;BE=Rxj%(qc>= z{)Hx#u8W&q;#T<+=3&3mp|%EET&6M>wxo{S+;gILy(E&giO_GorjegU+>^=cW$ZbV z4{mAa-yJ0Q+DUCo@4oU6OS+wr=f31+XmF}9(5Q|yJ$Ua!(iEgFN+ayF?!I|4g&R$( z5QYcE(X^vqlQjfzihh6`o&GaSD9eLRfAodi-8bKQ8OBX7p~2^EdNUYPZ| zYueHwZ*Qe4NLNVnxenc-9S8>mJtwWUOG136Pbo}3lU52$`xQt`jvMv?o0FbV#zC>X zJJKP#LhN}RH}TkB8etE4>>h*EC7QQ@KQvNGE(`+-c|HdSQ9wB5?)+q2yUt#{hHKMs z^Ovwac`8DiAeJOjqMo15SQLD@?&fq6cPo5v%-2aySXH;W?WAO`ZzK5zT?eh6M&RJV zRED$jx}P(u>u1X}6@STiC2nfc$5II=JmK}CxhhY)-2aq8Scd;|jc$smdx(&v;NNZNqO^@G0sD{mM2RefU zk?$PXvQrFpuyzTy26_C07O>WR{$-ku!RpGpR za2`1#Qu(`z5>IqG?-I49^$6Qh0ahBxQ4=e8yXodOfJcLDB8PaPc;s&zw{JM$BY>$H zZA?@XRO_Uu8fk9wk;sq1q6m>1Y#{M&tw)9ZYVU)IxQ6R+17=*NztWuN)K67iNYDt~RsVxuD0lg=DLdplacKd)Fh@wjrVoSm0`GTHt5xwIvm7G0 z`G)~QmXXf|G3xvc&g4@JbafX-W=>B}2PDw3up-|?@C!DARmcBrbkpVspZYAVtkN_q ztH8spg9iw09MI6q@$v!HC8?=iTIQmZn-B=!I(QPTy$U6Q{w@VO`V!c3JUTzl9>Sfbze|A908Isi|)7<82nnM%N+EbBs35kvg8Wc?-;?Mp&b4QbW5>- zA`WbuKVujWR*4&aWMpLdx~u=3Chf2W;h6Zuli%CzDIv2T?IvTs)?w^eh=Cc7EBzg# z)ES^*yMMw{9t*o>1B+(zR2Z~IhP({TYw&;#^XOO$i95>R;#X^yRd2fmjE8&NP$z`& zBtW!{-KF%`m7m6?AXWHzpBxM!o7kN@$^F}(d84=)AK5dhL%6(A+^9VFR8+OY3szId zSs~78-Ds5hw=UG;2{*Y@dY@Jt=!`u9@IC$Pfv*N(Pk$Goz$fR@haxn_8NtXG#=(fZ z^cp!bJg#mHD?Cmcjx-@0*CATBa)~)U>h=|C-Eu<+LUMi`_8YH>DsBo< z4Vvh@dx9<2#^|0{ZEF6)WRME$aq_-&)`In8zipHJ+Y%QkbBw|JvN{x(GJF7`c(AbV z11z&fa3NbhQD$;=xz&ep#%1Dq+x+t9%EoW~arg|1ga*fcC8x}ki}Z!HR8{V~Gc9JH zVBXK4*s40@&;?Gy0Kkn}!4aL25NKymTOE%s{~J;MDqtq2r$oBEYiokK(v?elW;~V4 zdvvIY@Zdw$)m0b5T;AyGJYKJCZVzr?@f=s);e{KRsS0gs%BJ6V1)C}PiLJFK71$7r z(VX(PV`n#@b1l)LFTC8BA2wj*IfmQYf`wP$-1~N$9WI=V11t$f`0wZ)JMZMrdtmGB z8HJI-yPkX|Fi=zLGPi3t+3gsfQzKz1q-%abUnmE|0JBHoDD{5rZjdtVK9Em;k2#UG zEy^^m1q7|3m=2kp=5HdL7O|+;`-y3VC*l8G<4b}zHq@@{L?Z`E0nH=nG8DKQrAY)= zG2*YuayIacUq8rFlm_d9)twgH6!?97xpRN4|5HebyLPUkCQZ38tv~EiIBwlLqTEKG zT8%ZWx}QMv$O3E$$R&N@lASk`FQvX7DAv_te{E;_p1L|}fTWD6IXxf$yFxb}RC8ZK z_x7WUv`FXlM&Qg5%RfdGeiLR_Jb~8dPFtr2q{g&Yv#7()Kc3&tE;{V6Iz(jc339|}z2QhtK=o0Jy*x?Lmq=oBNQPP8y;q8_^e+Yzt z^xr=wSf^`YdI?Bk;r6=I23xDqiiuHja;_!5#Hh!WqCsaQk_1;sBD$v)ZFYENGrH?S z{S4KZOqGo@+dEw=1KJJP)XD-|yY z0kxMNw?z11jfWJhQ%+&f(D=Wm7aaoDSWvs`6PjSFtK|UtPJV)}gyIKSE0c^|7{qk6 zdlq6tw{~2>EJ0B~?)6tLW*r{18DP26_vw!1%4neXhJXEqzJ7X|hfpC$=Pa&-d|TUn zh!CwBeBJk=?NaBFo!o%6S?wx>#0C3*%`ck0AvuH4zorWcbhbS2hRHv;rS~8dmP1T{ z^}<^NkJD%D|E?$tuCn?IxT5GR? zT@Qau@W%!gk0mbSRu2Qtp2Ct&87jYIPr7 zePzb{QA36EsJj%ShX40q+671)v81W5ETrs>FyIq9LV+A*^O8VLcDr?WX#YqZBD(=)HrK&_a`5r3ON8 zN#5nVe|~$;p4~lXXU@#*uRJsJJi7pewC{)ht>MW#O8(W*R4VTp7ROkf!O6h8!Ob>0 zAf~Z#h-4g0@+Uk;8oy`It}u;kp6A@+`@9ss=M++~Z0^_oXhKC}RV|g123|ZQTB=;H z`ZElqLQ@OMlZtKFFEn<8tHQ<&qtTu;fBnuUuy=|JSip^|WRo1DdP*h_EkDnH_Mam& zlI4WHwLZsnh6<5wg(f=V@poMq)3%0PZ_8cKO^_T2k`H*7uGE=3<=9zX+9cLFho)d;^cBo z6?p3yJ$TP1jSUT@+xv*He39<22MQ30jruzfbOqT!6YKP{%Hy#ak?^_DZr^0OO zgCcB(*1JEo?FM|_xKt%>7LyX*@GuS1LEJWm$nKwMhu?h&v+aTs7GO((d(p16Ce)}! zpcXXYOPT4j=#^HKfnVMbypN<9-{S?F(LF;TMp!F~RZyR}PoQ1B| z1suK36=vphO#m)sC8YN`GdgL!0DRY?vssfY)2ErB-n9F^DBsz^J4UHPAgO-JC?EBf2I?cgKe z>{5@%i~?(KHRDc40x`x5p>v@u>EYpe`QN_1p*sz5c78wiALIcG{_PE$&C`y(AMnwi zwn*956AIqUfdsExR)k;pQBC1;`T5;8YDiLYvH$+b?(vHj9~`BrYgzAC)#Qs2k&XSz zF4}mj(|hA)O-`8k@dvof9Dwzx*+f{agHA}@+y9a-@Tx^((cKp=~aKube| z9vU314Lx%O8^FrWK5S`f>U^ZxFI2^vYAHhvG4ahnTci$(aCbi}Xflmjwi}O>b*Q<@ zG;x*iUj>&oq;jf`PdIiOs*bBii{NRd+NbVo<3uxQOA{opEQ6^%>UsIJ5BvS(`X$sg zwfPlc^@%Ib-I!ec-qYyWDf2)X&7Wj5?;IZL8p5UozMv_sXo$qBLsGVWd@jhfUJfYR zm6CIvE;yMCKlKGg0w8y>BMWe64@x8}MKNBemso+q4{+ng)y^3E&E3#8>Xr405uKbs zaFmMe0kY6K?E=0pUFXtj(3;=q&y0KaLFT{CxTdz=Lw~QnhzN&3IP(iyDYF9G3Qm`Z z#{B8!SC~6uzm>ZHGfaF?Pv&%Im^8QnXV=JfLd=^wiT>SlotGEI9`#V~0tH31w5L%{ z3tUPnKOyta2w`;GDG)QJ4dGWKMA+-;tpxo7eijt~^;kL5d=GCq}uzTq&~R|*+Njeop+q=-tYA4ot$ z18&J}Y#yU3bWvGc#%>UIy4^Xbf1@FD=C@MHzgAjWf>b6H+%s|=o&0PN9M0@?cUK(> z4dNtxm2>8hwR>SKD7dGNKwSK1dXQeI0Ui|`tkFw2#%CI)Nj!$z79Ur7JYgmrk2}LP zEE{a}>Tj}Z!&&Bf#$iWm$pT|_WPtZNd{3m0+LX46w4q{RXUDpH5?cd*yTg_ z1_r$I%gREYHBc^_Jy4`0dVr>D2~}F{u`$|#Lx?CDklS60yLM5_chBuMG7u?BXSx*`=CRUtd2rH`i|ZYE!lqrsTMW z6ZhcZyveg`+@xV?g$Jc+fctH)gaqG!Q49pNF`ko)E>rwWQ)2S?`CJWmbKaEtCtKQs z3gxMKc6x_B!2m9X%|J-`QQYCv6h=kfj6dRX+2(RD2L%z0{i!z;Oha}C{bCrVR(g{jcnZEWq!Mg^8=gdaaMxj}%z2 zDY)?p3kyrQ&8l1Xh5ZC$gxP&3;XnfB>(Ta)eYc07?K>WkpN^1S7dnoHKb=DRV>&(5 z@heF($K}FQ%n$3E9zRuW6H-zNMK~{w29{(*Jp)J9z*xSuh`6KmsZRMK){IY9l!KO5 zbx(;(zQ{HU&@HT4KafGz9rNx^>s5#RGjE_NeSawP!=UuAa{xHHEa*Iq3KN2b;&5XT z@nd(9^_FDuR`ssX*x@)C3R%Xc{8+DAN=(rJtpXw@gp0nicb5%?gurXae~)I`V+oU8 ziJtE#KA3!>bWl#+Yduh5cvVC45!~?^4grHKJutrzT*;@3juZOZ5~h+aPC{^gJUP7m z_~fbC#!TxO*`}lY_*$4+V}T|Q1QM)Sv+85V*y$*MH$v3e_Vz!-SK&JL zz_>+$Ma_r@oTBqwECrB)YtSiIDNt`~=+j4EYzoQx;2$sF3s^6#*v7U48M??LbaahS zmy?}F;Xn&*S@~cdRdTQEXOm6VwC~@qKNeSuO=Y|XK}8ai8BF}yFQ3Z4RHTzfwN>Jm?6=7Jr|N-5xVPLv#^;=Fhg>!?Ew< zpWx3 zB<^e?!HzI+az?vk1cm?daU_98B*m}whw^2cORRnVB#}sDWE<1oIf>s_6)2ux{HCkMBGKbI~tHN7%_|JuRgK-Vspub-Lw{ zwYvK1yD0LDh3kVRLjgmSnrLQ})oMgDkU&Q_W^3S@!+LLE!1px8XM1pl9AvoUbwlJw zGjkMo$K3#bhuv~AO=MgHFv|%54r{rx0|S!zFjc3+1pq`2s{*|Hkn1gm>l>opcwg3MaLIo-)n1qvcA`Y4c|ZNV$4HI3CdOyuP0e?DhbZd*bwW9;1y1JhBq4k-cyG1_j z?H!ePV{l!rejkfQp-{3~$q^;GoO<}jYDo_IEQySH?RnNq+7L{%pYp;15D$mIGC*U<_lKGQc*Q0BHh}WxriDfN! z)|qSL$li>LHlZX%x^swU#2^s)RPnU1D}d@oVq8Dv(zkuR zyLX#{0&?OM_@NQR6?Q||;mf|^&Q-@}X12GgI)+8m+*O>N3w!os!^6Kku(n?ECN9h~ zZ8wSoLA_P3PficW_KTe#atjOFDCt#Dt*u(%Z|~-_V%0u!`L7=wI-h^5oe`ezYPbAY z%Z82a$$Nsxq|xLNa2QoMF;j8wa%;jOh2?OmZGC8@@g+^dz))wB96N}UI`Mwe)qD82 ziM9Yo8uCmup5{G_zHOd1KF+N-=!(?^ODtYjLxcWK>c@zqRtc2`2g%HhDan@~Js2Ix z^W~*7#hCH4=Mk5o+(~Eaig4}$*1Wu%M~e%t?z4@fF8~Ch8TxtUMIo0G2&a>$NofVn zSXS$P7Q?$vbqknc;Pvjl*QTs}@Ptj>pYRl(z<2aM_~!K6lnfjkk!j?!zm=Qi6A~}_ zdC>~)8t%yQIF+*>j$hCW>O!dzv)hNz%HiEBgGbqrYl3@?`}4b<%HID_QPHtU3104q zxyIJsB)@lx<&sr*ag5s;M)8P|DbD~~@FEYnJnzj{; zHlkLWtb#pz_Kk*aGc-M&*J+}hPT9Nix)cyF7sASNNF`9@IDb@PwpB{G07wRtF z{Do*(oQtQ>Vv`Z16N*W>t*IF@QQaIRi$2V*>ur{|c6K?(d{k5+`PEuK{TnLE%Y&n3 zO}nqUyx#8;T2>*nYSr!yJ_P+*per>z*(&9RNXl>?7iTie>^K3lmofdtp>88V4geg-L>^CX|+-2~y5osBAK z(ILO+*GGSwgoNDE9XK~(_4cZ9sd9RMzXA)3TYTkBRRP5dK@@!wm0h_wsg z#ATC*fk7ckwg0k(&UBi%+w2}tf~mYF%YE}^z}4RpmtQ^HYKi0XObp@EykGKsUv2pB zfJI(j-U0okjd^ck$e#+O+_kM5Bz zN!7E}fG9A d{I|(Z;_1w-WmM|mw-r@0Z5lfh@^D4zybo2OYI^H zeCzxEzQ4ZjpS^Q;cJ7=xbMBdEo^xgoD#6_q;8aeqYaN#*7I4#L(emSFdesw&s=dSh z+B?M)f!CxD0K`G+*!SUgX7J^psb8f@H{qe4r|VcGaf$shm`NR zic&G(Knwc=Ew!p9YPIJtx~Wgz8{x*qV;QPg*ceyQG0(j6>HOxMr+5+ zEpVH>?`;^xpY$oZw|9%0Yq>3#e-xjz9BbZlBJ-qHYhB3C{L2G_ZK?(zf_P$nR*BEC*1|c%s2<_{2~Q@mi|@Y--aMqYssrierMDoXthqU4idQ!u#5)y6lJ8K564wGDw;9#- zh-Xig6N(!pjg8lwR-U{rYR2@T^M2E1yE`1axwr9YBnnw5MhtxXB%c&n)+xV_njuBe zMW=ivH0HwFy#DMD>OOfM00xm9EygauLo51e9$rN~F+qMnQVq;7+(iv#)Orn5gSstR zR(d)B^ySNw4}McSHo;Gw!a`W|^Uipb9VClt=L(voF`u3gPpA?$i|q4gD^ zPGdt#)5#5C2G7QoZgcK2EE1oA;X!q-!~mF2p+btJ4DwuWj%2V3a~MeSHO;Ri{< zHaNhbmo08RqnkX|`_0c*q>z)OubUIMDRN9&TZ6m zJmgnhC$1+=Sy$I`pR1;_BZU{<~E#D9*18o zb_D>&9*qkt1nq)6NlUV^u_S3!dv`u>Su;ldy*4#Kd)UyL!97;$as4hF)z;Shh6U$j zSb-qswu>3?;tmY!ITYV0j_mH1f?5V2V;s<<>EK@>Hn(^aS#O@x-!frWn2u0Xn|8~BX7?|#Ar0u@>Tr+W99^jvS`8F5}-UxXUU z7+)JYDnaYm7X$-VBLo@b+i~8M$)G&mBir6sn4gjn z)pztNfKfNOpCYVx3G@ z&H3cG;&$O2I_#|Hc=mvx32R*H?CeR;bqX5(v>LhC)vzswv;5kR)p--Uii6zU(H~85 z*g1@rQtZP{A2R%q;P&AanHYfOrx>1weIEx>U&>aJgT20%;jmV?%Gb#bPNz3gaedju zq}x|SG8l%ZT5Aw_@F$+l{|=G;xY^Wn|*;z+23Ei zy3!-k2c=oK#N0+NLT|gIY?p22jxDt&5=ChQac*l zv6o{AX016#92_GSe+8wVq_4n(ZFj=d+k zwzdy3>p`Ep5??-&B}uqD9RitcCeW7#vQ16Im5M1}@E-JiCiv?F?S5`z;xrhJmSW{< zW0MwdxG)e)VNnQc&-#=$bctEJ89wZoA0&@|kkLtU4S@c@iS>T{Fbs`4gzXd?-G>lz z;0%rdD9R9mLC!~g!I@uEzR(xilFopi^HMI0RFtzsDHl6+SK>PakmvLthdmiojMuGW z{(_&Ck+E!Vc=3MNaQlpG3e}d_hv;DLIbz1NEqUUUUHNlD9fnhW7~+I}AlAe0zBakK zX;Ae;17`l^^U3b6lVpBJ2Q#(cX#Ew_#L5vMwjpF}*xD77+FzsW2(8(^*Na(Kw~=fI zM+mU>VuS>-@cpb8h252R!8&RCe{>LPOnOdECWLzs7aS!eC46FH7jV&_>B(jdLkO?! z>6p#euUxxv9ys*yACai|79)Ny(9(-ip{257UM8Fw&u0FgDxZekBJAwRZ(Bafu+VF zkO?IC&nLC4f%*7cl$PZ4mr0-h-aGQ~b|o5nFP`o|qy7RmSfg9p^Q*zT@$4R_e!NJS z0mpSh!|$(eARv*8gpCqqOj$T|4q$*-k@RoC-lX|gIrQt&irxq5`Bj~F3$3&QEY1Az?<#h=i{tR?vXL)8+-b$>n~kh%F_J0$T_tXnor_d;MLPyh|{&d*%3;)X}MA+)=_@ zGfqnxvXx*Pyq=&tiEV6ytlsoIJ`{%M>oWh?9bHblT0&Oz-GhDbw!{NHI>yVwSb3BC zFGYU~)g4yy@hYUHaMVWtv?#~jAaZ+Z)6QOTKtD;uD^tVQuKuWoN#$~qW$l_V^SJav z`oUs~f?arliF&Uv?@EF>XgIs3o~v^zG?A6-0RfM5C4{QC;%v-+LCjO-x67JOgi7R) zD_c4Rl};-9jwI0LBX+vaeVb}IzZFk`Om4MAW+%aB^Q9gp}6ND7rg7*Q}vPi@*EHFTB1HbBD8Yl2(F9%H{jMcH`&| zRd#r(3xbQAe;Ch7I8yOeeCt@5M)%e}7eCF1gEA^l12X|&kUHHi?4O!9og=YIXKz5< zTd>HnH!1JBU|M5+wT!W`6sJ3|#8`z_&O-O^BfZ;5l>udas}1|P+L zN&o@h!mhy9_EyKhMuW$EA~d+dAcCp;PnUJeD)0%Z1&X@CY4l8j`1ujDB$|P;rJHAG`bLsPiHSt^ z_ONwqaSk1T72q(83$h-pEry6@`y|yz@j_Auv zsU75q5<#k{Y6_PHir>z%q>3D?QYy)ro!WpY(cxa6EC7G1tu_?UlVQSAZiy?!3AIH#VgR;MEM>#GC0 z$^PN}^WMc|YG}}b-x%0U{ww1=;P8q6FK=<{IWK5kTW(q6n8x@gsXQOol=qjBOn=3) z#{xogA#GV!iX1DcbR?Rnn<|X7wMbuvX7}aDsA=xF`zb4;Rh~r{Yxa{N>$vmjK*Zn- z6xApDDU~hv&CkY2)j{6O#D-dg(spUn$74h`ccTSasMS8lQ?7Nyxdyt%(8xA)v zL=@;-?}x8fSb4>9yg-}hPnY+#Ck67unA?x;ov^Z4k@G4S)#rI1j&qoMKhIv(2{+Pa zU&keADq1uQ)QdOHU|V<9=tVwU4)*TJSm6J)WAeqPiFPJ{H@Q$=fPNUGHRT-@y=y{V zu(swqA)L3Ypw`PFuf_eu-gDIjm2oMxC|&$ZI(-htQBqrsb3Orz$wt9 zbndF?%To$`9R~bvj#lw+e(JpnQ@>!X4T2bl+tWN9l14jnIT8@f?cHRB-VzH!T?OU* zNctesd8|41WREWb!FOLOWk>}`@{76KY=WLnSZ%HrHkcNpL`(frSAY~V_>PlBVc_!Udrv7_PB-R)uH?^4jR`Q|bc2Q?W+c&~Ht z`Pt&!$EBxShef?P55?zG=N7zn7Uo8mb&l0GukJl6`M%FaM0gyxTOjHryVl(qLB+Bnd?qgNjR$k<(izrXtmg1?)RoP@p#emu`5Ar0L z)A2;*@a%lh|2!tfRjjO(vKXU(4h||RIW|NlcCtmc7Gb8O)pi~;hE{=OH{`k9>g(ps zy`Yp-@dC$~Ezf9fxbM@p`DP&YobfoDz%+NZ1Ut92JV*m&;kNcgDcLl+b6u4 z-~1)nmOtxr^swN&oO_F9-M3RQQ&{Tp;vtV_Z~4vI?cpCrz5l@K37H5b4ZMl(3?xdU zfg(MqUV=2F?KL8#c%YA-!HUqK*F#t#yn6X@(6&r(mR}P}_vRHFfDE%=BTL*8S6i2O zIygAEzQp!ANmufZeC+;pgNiF<;mRAI>QQsiN{<)xE7d|m!oFY28F$RyPX;0c?wQNq zzbP>|30h<(@~=O0WpS6~qWLNOt|s(&7Q4W@?}U+Kb4o4y%tsA-3a`{--2U4Y_WSo* zx`UacH)Qq$*bkkFsDP${^myGoTnIax{@9O?C^J#nu#VVavX^sF@cq{o)sMq4X4PsI z2JgiKm4v9W$x-uG*C^La;0ukbSdKS6=8$_#Hz~JZ_4mwc5`%#L$uepCo;vor&eojO z2Jtizy!WOJIe)>}{W~_$5UCp3(-Q($o;Iyhabkc>g1Z4WT7h^Q+CgGYm#x@9U@698Gpf3Lya+zIbh)x7^4{NRB!-I4F5yQsIx$dXw=>q+t3h<*hE z3~jWfLJOR~L7~1f5l?lUVm1vdlQZ;pcyWkOhNY@F0C7%QGQ3PrubN$%ba%7p?N4N< zG#f;OJ_bHFK|bIR%9v>4z#$(vF$F;ij7#NF0x1z5JSCAN*Q{PK)6uv^gVj z^l56Z8fPs#XT1U|yJB42kRS$e2R=(0p7`{d5g>^vdHvc6ZQp8cc-l4R@ua$SUAVLB zBp&`W+M}6U{{DPiOt#dQDHMouoY{sNv!nWmjoFF3HJw0Rj#PlFm6TY^X_k67MNyW znJ0(yq*NbtHoi_CI04w{6gNj_0PaEzNN*mJ+28WG^8xq|23cqFB1CPjJh8n3o_kvY z$#H{P$Nuc+Tj-b^@ZOZcG-Y-{59~aQS4b{O?Wv{s;a6zgbx7;a1QA3_M(xHMWLi#E z+`hWicGHTs6Lb^KPt95m$F4P)$z@ZXwp{9abk|GLS9@DdXDNZ&my!aAK=x{?>t7{) zi5&j!vir`+y)ow^yEBud>ZBN~AS(qt1{H0+csu_!F>J`B(VnXyPk|vJtLo8(>=%Ym zs);L?k*>w7VQ{yh(LsZ75{n6fihvAK__JZkVB~(^5D~=rb`Os;X++JSPku}Gue6Hl z?nNFWH$OX;v6^~G(N}t4o{oAln~=(J0$N20G2L^LH;Rw8z!M?fonlwb8_zg%yv8RD z7sxjAc$DDq`>#NVw;vc;&~*2^&Uueee%N93EOE)nAMMe6q_p?s5*%PmWjEG9_-*bz z6N_~|*@kq%$;Y^w1+Za3wYp))IZW5^f><;8RZRYiKbbRA`UVlepAKA2`k`M?sg%yK z6_Z;!6x?9S_LnAofI!ZV$ns0|A78MY_&)VS#f!z#iDAKlba?li9vjHDPVBVm%AUfE zpKbdHcl~Zin(1`jNEly2wv=>k2-w<{h`gE_HA%YzBY!=h9vxBpCU$@5QvplM=XiC2 z+;{t2$`1bqKr0LU=EkRJsLbkI$9#ntb2;`ZIUAjm1Hq^WX|7{a-~F51n&Z2^qvKFj zO@esbkDoiiO>PQ9?gsm}1S)xN{^4Ot$lu+hzGRsSL2DHIIUQ_;Fh&w#ik{S{kW9;) zFWii`?7jLo6jdYXmLxj%nQttb5iO}inqKgJ0^k?PdYlF`reUVL?l8yWnHFk#7E)p4jhi zzBOO}-G8Lrfn;_Vm2tg*p52ax5=XYOfMSzu@YV|+?m1M20+r&C9o0eCuvPQOJCJ3cXoI^#*i@Ut znFRj0CPr^xv+>_OXWXPIj8vX_VVpo?mC2Hr*Ol^IO_VRKP77+8E5n2sH$=Y|4pA(!Ci8SOjjs z%6I$77`y(z7bG@r^Ql=68NsS*ygQTg@3L~qq38X!qY>wmaH?b(YG7m|-fHWuBr}!* zCT?RZ6_{+Qut_jl7o{f5mQCype-Xrm)Ix>Zr2bqU8!XA0?Gs>Ag~lh(7Jcq%Q4#<; z=*SR@NJF*l{9QPPvKP$N6QHB!=4{$RFLor zDIZ!JH=3a>^W;Fp^%`(JY#O>_!%jVHd3qH^q0cDTxl-q`-V*i?LvFDCKVJ0sYj zgWLMNmzO8lK<~3c;K;&UOoWuvSJ7xbqN%a5XxD_;Oxi{IWuSP$#>R&Hep0`oQDW#x zqsK;z&yxd%ZkJG7;4D9`{b!!Pyq09!&ePsYo$u?S5*xc;09`Nd@oZT1z0}X`wx}Pw zwzOXIAk{v+lV{ozh6gHVx(cXAMl(PE(&>7#&*?6R_q9qcM<31)(Vf`Q(C;e0_krf0X2hEJ^&ZSTOE z+QX_PIfM@Y{{E^Upq`V|-tm+U^k@79e4jWy;}M^79q4NKE>>xYr0-7^?qbe37waPc+XGY-k>gtt5b`XOFLY&v+ zkGCqX(=H$#@@cfQ+6x8Y6@CP4MMKLjLFE;^@S%pSLwyEz@tPs`IyN z_3gK6hp)&Q<4IWhIM~f*`(tX?lVx(MV(}?o7{598cc`*DCUfyb{hJkNvFY6uk;cU@ zEYoO#(_fxuSi{0QpHcL9$z6?LBZKs8xrns0gu5=GcX z12mwBC&@`lhN0NObK-E!mgTd~$VYdo;3Y6F7Q{H1Cw2bY*%!M%9Y_)A_n_krq@JnK z{V8H>YvdE<$9BEu(+O>VwkV5uA^|xY0%%uiKw?vx9G4Lsa=zx-Z|KnBpJAfaz`v~PwGzh*4U1nC7 zB(7F4-&Vso0ic&rJ6AP>kE~>PX;S1>y9r;T}2R_S)yfp=6kQ( zkWX2zOTR39b^d;f$aJ(UxeIcro0l$CcWzj|+S1MWGq~Is4bG(68*KZno8$cR*+v-G z`zN}#eGXe6J6CG-HrA(;2P0f78tFad0oNq5S7)2YQf^u!?JN$*btz}YpcCz6{BD=v zqNZby3kY}pF@K6e$v$Ie{=+D`%&dEqcd;#m;cR$|#nCA<(byn|(cC_eqMaSb{rmTc zx=8#7Bq&C)&Qm^6v-)>?){HAdrV`8$rfm)s4!Zf)yHcR49A3F>3>ow6iDJ7IV1xHA zK;C@U3G4bK<=40TmxZDGk`-i8Bp<9_mX5zk;GtgQgupq(Y2KOoWTwU3-C*OvKH{T= z7-+)?Wfp#Y7wj&*BTzr;jRV1m86Nw#p`gDzPyrPITGEf*11UNTrY2>$n1rjYRqJ{E zE9xn48Pkva73J=!Zrauz%dQ$V0N$hA&P zKD1Pp0M7jH=`;^&L~6Jyl%^(laQEyLM;WLwj1D-Cty^0#MGy3C>^CPY1k}=lWO_xe z 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 LNkvXXu0mjf`83|T literal 0 HcmV?d00001 diff --git a/icons/ui_icons/map_blips.dmi b/icons/ui_icons/map_blips.dmi index 85ef9959027f3cb3de1da36b7a6b324e71dd80f6..829d9b8a43b09a6bab06c96c8145c04426b97288 100644 GIT binary patch delta 2659 zcmV-p3Y_(U4Db|?84Lyh0038C5Z?d*0ko4q0Th3fzi!+x48~{sDTHJ_9GXjlOkRo$ ziW`zwIM5Pp6DLzHCE2;R@6aO2l9GWJ4?pqWM}D{N=ku@At2@4&+7%^JV%NEc{g1ZU zD3r-{?x}4iq;V>)b5Ct9P|$VmrU!o+B~=bLZ4*ec>)c)23<5L${eMR*UpQ^7a-O`( zI(M4S3Fa7hXpM zGlKXDMb}zrg`!s$5rQFHiTVaEXjtYMq>Po>kaNahI1ishFfWM%vOd9FWz|FK&AuV) z`yD}6{VE6WIMs19OeA8?DCZ!Fb!Bao*tCBLI3QaVrLQ7sGk_Vn5TicoiB^nBbkp@9 zLWay6h)^<2yUNAV$U>zUIDr)`B73RXcHw{}34v~FeWGZJhyfxYpKY7_hMay^H2CU! zWK&F|C-q6b#10Q_6EMQnb?$EWt?wfNECxeEE^<9DkTb3Nx&6Zj65{cT(myJ{-`#(I zwytG~SM|+d|F}EsA3t@GC7Z@xD*xvmZ{73j(H&n-?H?Alq11{brPu%f2zNC)EX%Icn@n=kFqm6_k&zKj#0Lil`QYH7!#*)F;YdZSudnk|D#fl| zz1rp!^(zy#TrTr+x!hK+>pG_yEF-?MvclZ`X}MfZRv(+2n|9tb4Cy1Vy1L3Ll?p1A z3QW_)lP6Cc^%fTw9qDfH@Zo<$tgfy~$L;IuW9#ed4kDRMhGjAt1^_2do^*&o#NAwj zD=RA)8yjmIpjN9n?kW0?vff^9nkE3?g$TT_ug|U{MqDO<*R-$K>#STZJNgreKX~u} zLqkJ$IZgGowKZvfB;?VfN4aHL3;=?rX`<0+pjxfk6&sBP8jXgdu`GZ3rfD+HIcJP9 zH*pnV5vf#)-M@doO#pJ#-5+6SXo!i#0U)2xum(6+7Q-Hth~{UFU0SYslyGj=|#b zIKO-Mt|QIma*j3QT*kSE=+kNeGFMu44a49wGc%xVO~k!>_xOL((h^2TM=?1$>99XL zf1dZu&9SeONk0B!?Fs_Gi4!MKuh;SP=~INmVLX2P*lt*E(ED|A)&`n>;zR8%IbK*)~=v6tKL!jBGZ`mY0{M?L(muCqkkhL`)Pdo6WL; zfdTv6E(RnPi}CI4ZD^Xt>-9P>l}fx;tKre3M=dV7-$9nz ztv5Y)8Waci+D6=m7^?3UL`F!}j{20fQ9WwnViyX9?DNC+_BKMHkX>(UYs=1;fBYxb z_t&3tF$E66iwy}tQ{A#GY;A3!R;wYANO%S!=w*L=9YB$fL?XN1Vl@DGcBANcj@|cr zK~hgDow}oVnW1u(y%XHglbkLpvll!f+-)I@jM3HC)ouzC1c07&jEN+B(y<*+Ayqq> zXk-^1r~GNxG1rS+C&W)@40cCPa&a7c+LL2$A>0scUhR6)G1ilgv86wp2~b{igq#rb zqFsMXcM93mmi0@}M91k89rd%x(pL#DVf;jMi}KoUb$fyDi_Kw%gZ#U1%}SpYDp%RP z;MFHxZd+_>ii_!PplTDFn&Na(nQ!FX&Z+KYB;I{%mVfi@1=fjZDtHOAThTOfQY0Zd z`^~o(7!jbnyOU1HQ9rW&{0MjvFW$b*WOaY2oKoP$K2Hu1L9r1L6C!NFd%0KI zZA{OrkGr4Ue2=T_zSG{1_#gk(`r3g~+o3KK_ab=Y$aj?Odi##y%7^k3Ul3?H{_%f1 z?O#FsUiiU+(yt)UPD&MBx2+TGH$gA#`&Re)SMT#c z__@^K*`*Zklt?FFlNX}gEN`J!+irhb6+i##eXiBRklAOKQv7)}fc>)n<|lu5_$Jza znfi-V$mi7ne*L4rNyVI9N^y32Cd|Dm>}MoY@Y)4FyZIh>3q$x~;R7xc26z$JSMe-$ z8!F-eP^)b#+nMDprA@1cq5ZEA>=b(u=1~8V<0s6U7n}cAydf{c>{9BLe-(du&`^?p zUJa;BhejABd95B+HaaZAD9QUB5L9@bgi(^;%gITFgAm5+_XFjZ8J(P*rstDf_P$Q# z?$=qdycr58%B!Haz}=Put=|v6Sonau%K@KP+K+zrtFA{Q&i<{m<@ooyJsjT7e^+Vq z{U+zr^FMDZyEJ#rVY@VU&5?iivwdB91OOP13_J2-yH9?R#+SdpA?@>%S^-}k8ECW3 z+X}WUcaUih=7WS*W=)2lSRE#Ts*UAN4ywJ6oCwo8Gi!+003Zt;Ozha0Rm7=R7JqR!2kdMCcSdV1U2+v@7-prD}G*x2jq>!PBfQBhH{va*bfjLgi;#l^+S%F2d@ zhQGhRfPjF4f`ZS_&rJUSxHmV^(b3%8+`+-Y;NalY)YQVl!hioW0Evl-dwY9>0086T z@gE%-iW@cvH-QAUym34J>czAg5@bJ^q)3LF!@ZhhzySuBatD&Kx z@Wn#TavqkJmXMH;xMi(<{{Z>dM$-%oTaxAb@-{R7%rj;HIcx_-dJ;o_2}XzpAs;+E zARj>qR=~i(mw%R}{}BNH0094xkQPJfo2|DgKaTP811A6g00DGTPE!Ct=GbNc00F9c zR9JLGWpiV4X>fFDZ*Bkpc$}4%!A`?442I9^Q&i(RA=p5ixF8VPfxW`yCSGeTO@foO z?Cr@w0xpw{s!3k-)k*ySwtCe*y}WLB?ep8VnUE6&-+w-~ch@(~VkVo1`sblp3`qTu zzv7f3V~v&_m}AeOc)M&CmN?bL+h%cK81Xy)L5n~7Fnf_RWJD&Nd>&*9L1ZGikVVQG z`An0HP!JLHJ&BOw#A6hZ8Q7w%hs6VR9dr&A68{4plY9#!BaBsMHUqM(HPci>k#h)E zkuE#gfqxMdW*&iaU%XfBIigjxhY4KE5<`{4%N0z8Cpo2j*$?!xza8)-cjW;L4yErE z6|o$=EGg^CTkVTpqkUJH!>j;PRe(Io)f;F+7g(O72AD~)^L*xl%(=ox%|#;Rtl$_X z(CB8kBwf=2=D-Bo7X#A3x6s`CswpmE>$|#)4o>Iw z)xVzK4InCJRJAdm_7PI5KGos}V)FfkqyL_Kv)cTfMlrgR_|E$JepP>eZjm^t%AU`o z;9@^swJ*EpuMeS5G_aI0T1}Vl0008_Nkla=zCX-oS!PX-g$Wrx~ zK#f(eMp3;c?Mx5^nRSwrK{lJs?~oE{6X0F+AfCE(!Tfcfw#pg|FeVk4K!`jYt!_LO75^|R+M&;g2N z1k35Jd!^ycl+JEStO9F)0gx`q}3urcvDq9Hf`Td4sL0u472>B!kY z6N?4uG@JGyF66b^#*m{o)U>GOk7%-Kz?1?j-33b@#W#8fzKjJeIiksEbf9f(h`H2g}rE%*4f7~o6yMhJy_9a z62=>7MMjWDn2c_3W?@$@qIU~}uvkv!ba#w2hdHNB3V3bO!?l?k?R)AU3erDO7jwUK zjr6a|J^2)m(|hwW*uIjwBXf0E>Yh`B)X>rY(Y_A@fp_j&U?TU2gg#O~rom`LA2xr> z;2);(cs%T1-w-T4dM4|w!T$I!7K(r4#MgS81|!U#^v>KEwqvkw@>3ulIj< ge7*k({r%4WAAEc4kh@