From b8a9fcb6b4abe67edc171abd2ce58a90840fbe04 Mon Sep 17 00:00:00 2001 From: Zandario Date: Fri, 3 Jun 2022 16:38:04 -0500 Subject: [PATCH] Does the neutral trait thing for everyone, and also updates Shadekin a lil (#4148) * Auuugh * Fixes shi --- citadel.dme | 2 +- code/__DEFINES/carbon/organs.dm | 8 +- code/__DEFINES/controllers/_subsystems.dm | 1 - .../signals/signals_mob/signals_mob_main.dm | 2 +- code/__HELPERS/global_lists.dm | 8 +- code/_globalvars/bitfields.dm | 4 +- code/_onclick/hud/_defines.dm | 3 +- code/_onclick/hud/human.dm | 13 +- code/game/dna/dna2.dm | 28 +- code/game/dna/dna2_helpers.dm | 22 +- .../client/preference_setup/vore/08_traits.dm | 99 ++++--- code/modules/client/preferences.dm | 249 +++++++++++------- code/modules/lighting/lighting_turf.dm | 2 +- code/modules/mob/_modifiers/modifiers.dm | 143 ++++++---- .../mob/living/carbon/human/human_movement.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 4 + .../carbon/human/species/shadekin/shadekin.dm | 190 ++++++------- .../species/shadekin/shadekin_abilities.dm | 88 +++---- .../human/species/shadekin/shadekin_hud.dm | 26 +- .../human/species/shadekin/shadekin_traits.dm | 139 ++++++++++ .../living/carbon/human/species/species.dm | 22 +- .../carbon/human/species/species_getters.dm | 52 ++-- .../carbon/human/species/station/adherent.dm | 12 +- .../mob/living/carbon/human/traits/_trait.dm | 19 +- .../living/carbon/human/traits/negative.dm | 7 +- .../mob/living/carbon/human/traits/neutral.dm | 62 +++-- code/modules/mob/living/life.dm | 12 +- .../subtypes/animal/space/mouse_army.dm | 12 +- .../subtypes/vore/shadekin/ability_procs.dm | 2 + .../subtypes/vore/shadekin/shadekin.dm | 2 +- code/modules/mob/mob_defines.dm | 13 + code/modules/mob/mob_defines_vr.dm | 10 - code/modules/organs/internal/adherent.dm | 4 +- code/modules/organs/subtypes/shadekin.dm | 3 + icons/mob/shadekin_hud.dmi | Bin 129969 -> 0 bytes icons/screen/hud/common/shadekin.dmi | Bin 0 -> 11527 bytes 36 files changed, 759 insertions(+), 506 deletions(-) create mode 100644 code/modules/mob/living/carbon/human/species/shadekin/shadekin_traits.dm delete mode 100644 code/modules/mob/mob_defines_vr.dm delete mode 100644 icons/mob/shadekin_hud.dmi create mode 100644 icons/screen/hud/common/shadekin.dmi diff --git a/citadel.dme b/citadel.dme index 4753414dfa2..99726d10667 100644 --- a/citadel.dme +++ b/citadel.dme @@ -2639,7 +2639,6 @@ #include "code\modules\mob\logout.dm" #include "code\modules\mob\mob.dm" #include "code\modules\mob\mob_defines.dm" -#include "code\modules\mob\mob_defines_vr.dm" #include "code\modules\mob\mob_grab.dm" #include "code\modules\mob\mob_grab_specials.dm" #include "code\modules\mob\mob_helpers.dm" @@ -2807,6 +2806,7 @@ #include "code\modules\mob\living\carbon\human\species\shadekin\shadekin.dm" #include "code\modules\mob\living\carbon\human\species\shadekin\shadekin_abilities.dm" #include "code\modules\mob\living\carbon\human\species\shadekin\shadekin_hud.dm" +#include "code\modules\mob\living\carbon\human\species\shadekin\shadekin_traits.dm" #include "code\modules\mob\living\carbon\human\species\station\adherent.dm" #include "code\modules\mob\living\carbon\human\species\station\alraune.dm" #include "code\modules\mob\living\carbon\human\species\station\custom_species.dm" diff --git a/code/__DEFINES/carbon/organs.dm b/code/__DEFINES/carbon/organs.dm index 218657bccf3..faf8546084f 100644 --- a/code/__DEFINES/carbon/organs.dm +++ b/code/__DEFINES/carbon/organs.dm @@ -150,13 +150,13 @@ //* ADHERENT EXTERNAL ORGANS *// -#define BP_COOLING_FINS "cooling fins" -#define BP_FLOAT "floatation disc" +#define O_COOLING_FINS "cooling fins" +#define O_FLOAT "floatation disc" #define BP_JETS "maneuvering jets" /// List of all Adherent body parts. #define BP_ALL_ADHERENT list( \ - BP_COOLING_FINS, \ - BP_FLOAT, \ + O_COOLING_FINS, \ + O_FLOAT, \ BP_JETS) diff --git a/code/__DEFINES/controllers/_subsystems.dm b/code/__DEFINES/controllers/_subsystems.dm index f7432be32d8..8e2ece86edd 100644 --- a/code/__DEFINES/controllers/_subsystems.dm +++ b/code/__DEFINES/controllers/_subsystems.dm @@ -164,7 +164,6 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define FIRE_PRIORITY_SHUTTLES 5 #define FIRE_PRIORITY_NIGHTSHIFT 6 #define FIRE_PRIORITY_PLANTS 5 -#define FIRE_PRIORITY_ORBIT 8 #define FIRE_PRIORITY_VOTE 9 #define FIRE_PRIORITY_AI 10 #define FIRE_PRIORITY_VIS 10 diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm index b9a935fd6af..b1c32e24978 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -77,7 +77,7 @@ ///? return this if you want to block printing this message to this person, if you want to print your own (does not affect the other person's message) ////#define COMSIG_BLOCK_EYECONTACT (1<<0) /// From base of /mob/update_sight(): () -////#define COMSIG_MOB_UPDATE_SIGHT "mob_update_sight" +#define COMSIG_MOB_UPDATE_SIGHT "mob_update_sight" //// From /mob/living/say(): () ////#define COMSIG_MOB_SAY "mob_say" ////#define COMPONENT_UPPERCASE_SPEECH (1<<0) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 6aaaed2f3da..60a2a493c02 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -255,7 +255,7 @@ GLOBAL_LIST_EMPTY(mannequins) wing_styles_list[path] = instance // Custom species traits - paths = typesof(/datum/trait) - /datum/trait + paths = typesof(/datum/trait) - /datum/trait - /datum/trait/negative - /datum/trait/neutral - /datum/trait/positive for(var/path in paths) var/datum/trait/instance = new path() if(!instance.name) @@ -303,11 +303,13 @@ var/global/list/hexNums = list("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", //* Custom Species Lists *// GLOBAL_LIST_EMPTY(custom_species_bases) -//Traits +//! ## Traits /// Negative custom species traits, indexed by path. var/global/list/negative_traits = list() /// Neutral custom species traits, indexed by path. var/global/list/neutral_traits = list() +/// Neutral traits available to all species, indexed by path. +var/global/list/everyone_traits = list() /// Positive custom species traits, indexed by path. var/global/list/positive_traits = list() /// Just path = cost list, saves time in char setup. @@ -750,6 +752,8 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN, negative_traits[path] = instance if(0) neutral_traits[path] = instance + if(!(instance.custom_only)) + everyone_traits[path] = instance if(0.1 to INFINITY) positive_traits[path] = instance diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index d2e442e87ef..688ad0755f2 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -76,7 +76,7 @@ GLOBAL_LIST_INIT(bitfields, generate_bitfields()) "AMOUNT_VISIBLE" = AMOUNT_VISIBLE, "NO_REACT" = NO_REACT, ), -/* + "sight" = list( "SEE_INFRA" = SEE_INFRA, "SEE_SELF" = SEE_SELF, @@ -88,7 +88,7 @@ GLOBAL_LIST_INIT(bitfields, generate_bitfields()) "SEE_BLACKNESS" = SEE_BLACKNESS, "BLIND" = BLIND ), -*/ + "obj_flags" = list( "EMAGGED" = EMAGGED, "CAN_BE_HIT" = CAN_BE_HIT diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 5cf61d423d4..179516431a3 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -164,8 +164,7 @@ #define ui_spell_master "EAST-2:16,NORTH-1:26" #define ui_genetic_master "EAST-1:16,NORTH-3:16" -#define ui_shadekin_dark_display "EAST-1:28,CENTER-3:15" -#define ui_shadekin_energy_display "EAST-1:28,CENTER-4:15" +#define ui_shadekin_display "EAST-1:28,CENTER-3:15" #define ui_xenochimera_danger_display "EAST-1:28,CENTER-3:15" // Ghost ones diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 0ea9a800104..a7c19438964 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -309,15 +309,10 @@ mymob.hydration_icon.screen_loc = ui_nutrition_small hud_elements |= mymob.hydration_icon - mymob.shadekin_dark_display = new /atom/movable/screen/shadekin/darkness() - mymob.shadekin_dark_display.screen_loc = ui_shadekin_dark_display - mymob.shadekin_dark_display.icon_state = "dark" - hud_elements |= mymob.shadekin_dark_display - - mymob.shadekin_energy_display = new /atom/movable/screen/shadekin/energy() - mymob.shadekin_energy_display.screen_loc = ui_shadekin_energy_display - mymob.shadekin_energy_display.icon_state = "energy0" - hud_elements |= mymob.shadekin_energy_display + mymob.shadekin_display = new /atom/movable/screen/shadekin() + mymob.shadekin_display.screen_loc = ui_shadekin_display + mymob.shadekin_display.icon_state = "shadekin" + hud_elements |= mymob.shadekin_display mymob.xenochimera_danger_display = new /atom/movable/screen/xenochimera/danger_level() mymob.xenochimera_danger_display.screen_loc = ui_xenochimera_danger_display diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index d5cb7078bcc..f376ffe7a59 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -201,23 +201,9 @@ var/global/list/datum/gene/dna_genes[0] // Technically custom_species is not part of the UI, but this place avoids merge problems. src.custom_species = character.custom_species - if(istype(character.species,/datum/species/custom)) - var/datum/species/custom/CS = character.species - src.species_traits = CS.traits.Copy() - src.base_species = CS.base_species - src.blood_color = CS.blood_color - - if(istype(character.species,/datum/species/shapeshifter/xenochimera)) - var/datum/species/shapeshifter/xenochimera/CS = character.species - //src.species_traits = CS.traits.Copy() //No traits - src.base_species = CS.base_species - src.blood_color = CS.blood_color - - if(istype(character.species,/datum/species/alraune)) - var/datum/species/alraune/CS = character.species - //src.species_traits = CS.traits.Copy() //No traits - src.base_species = CS.base_species - src.blood_color = CS.blood_color + src.base_species = character.species.base_species + src.blood_color = character.species.blood_color + src.species_traits = character.species.traits.Copy() src.custom_say = character.custom_say src.custom_ask = character.custom_ask @@ -225,10 +211,10 @@ var/global/list/datum/gene/dna_genes[0] src.custom_exclaim = character.custom_exclaim // +1 to account for the none-of-the-above possibility - SetUIValueRange(DNA_UI_EAR_STYLE, ear_style + 1, ear_styles_list.len + 1, 1) - SetUIValueRange(DNA_UI_TAIL_STYLE, tail_style + 1, tail_styles_list.len + 1, 1) - SetUIValueRange(DNA_UI_PLAYERSCALE, size_multiplier, player_sizes_list.len, 1) - SetUIValueRange(DNA_UI_WING_STYLE, wing_style + 1, wing_styles_list.len + 1, 1) + SetUIValueRange(DNA_UI_EAR_STYLE, ear_style + 1, ear_styles_list.len + 1, 1) + SetUIValueRange(DNA_UI_TAIL_STYLE, tail_style + 1, tail_styles_list.len + 1, 1) + SetUIValueRange(DNA_UI_PLAYERSCALE, size_multiplier, player_sizes_list.len, 1) + SetUIValueRange(DNA_UI_WING_STYLE, wing_style + 1, wing_styles_list.len + 1, 1) SetUIValueRange(DNA_UI_TAIL_R, character.r_tail, 255, 1) SetUIValueRange(DNA_UI_TAIL_G, character.g_tail, 255, 1) diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 59fc0c47e31..8bc45e5b37d 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -238,24 +238,13 @@ H.custom_ask = dna.custom_ask H.custom_whisper = dna.custom_whisper H.custom_exclaim = dna.custom_exclaim - if(istype(H.species,/datum/species/custom)) - var/datum/species/custom/CS = H.species - CS.copy_from(dna.base_species, dna.species_traits, src) - CS.blood_color = dna.blood_color + H.species.blood_color = dna.blood_color + var/datum/species/S = H.species + S.copy_from(dna.base_species, dna.species_traits, H) - if(istype(H.species,/datum/species/shapeshifter/xenochimera)) - var/datum/species/shapeshifter/xenochimera/CS = H.species - CS.copy_from(dna.base_species,dna.species_traits,src) - CS.blood_color = dna.blood_color - H.regenerate_icons() - - if(istype(H.species,/datum/species/alraune)) - var/datum/species/alraune/CS = H.species - CS.copy_from(dna.base_species,dna.species_traits,src) - CS.blood_color = dna.blood_color H.force_update_organs() H.force_update_limbs() - //H.update_body(0) // Done in force_update_limbs already + //H.update_icons_body(0) // Done in force_update_limbs already H.update_eyes() H.update_hair() @@ -264,8 +253,7 @@ return FALSE /mob/living/carbon/human/proc/force_update_organs() - for(var/organ in organs + internal_organs) - var/obj/item/organ/O = organ + for(var/obj/item/organ/O as anything in organs + internal_organs) O.species = species /// Used below, simple injection modifier. diff --git a/code/modules/client/preference_setup/vore/08_traits.dm b/code/modules/client/preference_setup/vore/08_traits.dm index 07dafd3cef1..0d3ae788e5a 100644 --- a/code/modules/client/preference_setup/vore/08_traits.dm +++ b/code/modules/client/preference_setup/vore/08_traits.dm @@ -72,21 +72,21 @@ if(pref.species != SPECIES_CUSTOM) pref.pos_traits.Cut() - pref.neu_traits.Cut() pref.neg_traits.Cut() - else - // Clean up positive traits - for(var/path in pref.pos_traits) - if(!(path in positive_traits)) - pref.pos_traits -= path - //Neutral traits - for(var/path in pref.neu_traits) - if(!(path in neutral_traits)) - pref.neu_traits -= path - //Negative traits - for(var/path in pref.neg_traits) - if(!(path in negative_traits)) - pref.neg_traits -= path + // Clean up positive traits + for(var/path in pref.pos_traits) + if(!(path in positive_traits)) + pref.pos_traits -= path + //Neutral traits + for(var/path in pref.neu_traits) + if(!(path in neutral_traits)) + pref.neu_traits -= path + if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits)) + pref.neu_traits -= path + //Negative traits + for(var/path in pref.neg_traits) + if(!(path in negative_traits)) + pref.neg_traits -= path var/datum/species/selected_species = pref.character_static_species_meta() if(selected_species.selects_bodytype) @@ -99,27 +99,28 @@ pref.custom_ask = lowertext(trim(pref.custom_ask)) pref.custom_exclaim = lowertext(trim(pref.custom_exclaim)) -/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character) - character.custom_species = pref.custom_species - character.custom_say = lowertext(trim(pref.custom_say)) - character.custom_ask = lowertext(trim(pref.custom_ask)) - character.custom_whisper = lowertext(trim(pref.custom_whisper)) - character.custom_exclaim = lowertext(trim(pref.custom_exclaim)) - var/datum/species/selected_species = pref.character_static_species_meta() - if(selected_species.selects_bodytype) - var/datum/species/custom/CS = character.species - var/S = pref.custom_base ? pref.custom_base : SPECIES_HUMAN - CS.copy_from(S, pref.pos_traits + pref.neu_traits + pref.neg_traits, character) - //Any additional non-trait settings can be applied here - CS.blood_color = pref.blood_color +/datum/category_item/player_setup_item/vore/traits/copy_to_mob(mob/living/carbon/human/character) + character.custom_species = pref.custom_species + character.custom_say = lowertext(trim(pref.custom_say)) + character.custom_ask = lowertext(trim(pref.custom_ask)) + character.custom_whisper = lowertext(trim(pref.custom_whisper)) + character.custom_exclaim = lowertext(trim(pref.custom_exclaim)) - if(pref.species == SPECIES_CUSTOM) - //Statistics for this would be nice - var/english_traits = english_list(CS.traits, and_text = ";", comma_text = ";") - log_game("TRAITS [pref.client_ckey]/([character]) with: [english_traits]") //Terrible 'fake' key_name()... but they aren't in the same entity yet + var/datum/species/S = character.species + var/SB = S.selects_bodytype ? pref.custom_base : pref.character_static_species_meta() + var/datum/species/new_S = S.copy_from(SB, pref.pos_traits + pref.neu_traits + pref.neg_traits, character) -/datum/category_item/player_setup_item/vore/traits/content(var/mob/user) + //Any additional non-trait settings can be applied here + new_S.blood_color = pref.blood_color + + if(pref.species == SPECIES_CUSTOM) + //Statistics for this would be nice + var/english_traits = english_list(new_S.traits, and_text = ";", comma_text = ";") + log_game("TRAITS [pref.client_ckey]/([character]) with: [english_traits]") //Terrible 'fake' key_name()... but they aren't in the same entity yet + + +/datum/category_item/player_setup_item/vore/traits/content(mob/user) . += "Custom Species Name: " . += "[pref.custom_species ? pref.custom_species : "-Input Name-"]
" @@ -128,15 +129,15 @@ . += "Icon Base: " . += "[pref.custom_base ? pref.custom_base : SPECIES_HUMAN]
" + var/traits_left = pref.max_traits + . += "Traits Left: [traits_left]
" if(pref.species == SPECIES_CUSTOM) var/points_left = pref.starting_trait_points - var/traits_left = pref.max_traits for(var/T in pref.pos_traits + pref.neg_traits) points_left -= traits_costs[T] traits_left-- . += "Points Left: [points_left]
" - . += "Traits Left: [traits_left]
" if(points_left < 0 || traits_left < 0 || !pref.custom_species) . += "^ Fix things! ^
" @@ -147,19 +148,20 @@ . += "
  • - [trait.name] ([trait.cost])
  • " . += "" - . += "Neutral Trait +
    " - . += "" - . += "Negative Trait +
    " . += "" + + . += "Neutral Trait +
    " + . += "" + . += "Blood Color: " //People that want to use a certain species to have that species traits (xenochimera/promethean/spider) should be able to set their own blood color. . += "Set Color" . += "R
    " @@ -266,8 +268,12 @@ picklist = positive_traits.Copy() - pref.pos_traits mylist = pref.pos_traits if(NEUTRAL_MODE) - picklist = neutral_traits.Copy() - pref.neu_traits - mylist = pref.neu_traits + if(pref.species == SPECIES_CUSTOM) + picklist = neutral_traits.Copy() - pref.neu_traits + mylist = pref.neu_traits + else + picklist = everyone_traits.Copy() - pref.neu_traits + mylist = pref.neu_traits if(NEGATIVE_MODE) picklist = negative_traits.Copy() - pref.neg_traits mylist = pref.neg_traits @@ -313,6 +319,13 @@ var/conflict = FALSE + // if(pref.species in instance.banned_species) + // tgui_alert_async(usr, "The trait you've selected cannot be taken by the species you've chosen!", "Error") + // return TOPIC_REFRESH + + if( LAZYLEN(instance.allowed_species) && !(pref.species in instance.allowed_species)) + tgui_alert_async(usr, "The trait you've selected cannot be taken by the species you've chosen!", "Error") + return TOPIC_REFRESH if(trait_choice in pref.pos_traits + pref.neu_traits + pref.neg_traits) conflict = instance.name diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 6d4cd68e043..b7f202448de 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -3,91 +3,157 @@ GLOBAL_LIST_EMPTY(preferences_datums) /datum/preferences - //doohickeys for savefiles +//! ## Doohickeys For Savefiles var/path - var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used + /// Holder so it doesn't default to slot 1, rather the last one used. + var/default_slot = 1 var/savefile_version = 0 - //non-preference stuff +//! ## Non-Preference Stuff var/warns = 0 var/muted = 0 var/last_ip var/last_id - //Cooldowns for saving/loading. These are four are all separate due to loading code calling these one after another +//! ## Cooldowns for saving/loading. +//? ## These are four are all separate due to loading code calling these one after another. var/saveprefcooldown var/loadprefcooldown var/savecharcooldown var/loadcharcooldown - //game-preferences +//! ## Game Preferences var/tgui_fancy = TRUE var/tgui_lock = TRUE - var/lastchangelog = "" //Saved changlog filesize to detect if there was a change - var/ooccolor = "#010000" //Whatever this is set to acts as 'reset' color and is thus unusable as an actual custom color - var/be_special = 0 //Special role selection - /// Event role prefs flag + /// Saved changlog filesize to detect if there was a change. + var/lastchangelog = "" + /// Whatever this is set to acts as 'reset' color and is thus unusable as an actual custom color. + var/ooccolor = "#010000" + /// Special role selection. + var/be_special = 0 + /// Event role prefs flag. var/be_event_role = NONE var/UI_style = UI_STYLE_DEFAULT var/UI_style_color = "#ffffff" var/UI_style_alpha = 255 - var/tooltipstyle = "Midnight" //Style for popup tooltips + /// Style for popup tooltips. + var/tooltipstyle = "Midnight" var/client_fps = 0 - //character preferences - var/real_name //our character's name - var/be_random_name = 0 //whether we are a random name every round - var/nickname //our character's nickname - var/age = 30 //age of character - var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2). - var/b_type = "A+" //blood type (not-chooseable) - var/backbag = 2 //backpack type - var/pdachoice = 1 //PDA type - var/h_style = "Bald" //Hair type - var/r_hair = 0 //Hair color - var/g_hair = 0 //Hair color - var/b_hair = 0 //Hair color - var/grad_style = "None" //Gradient style - var/r_grad = 0 //Gradient color - var/g_grad = 0 //Gradient color - var/b_grad = 0 //Gradient color - var/grad_wingstyle = "None" //Gradient style - var/f_style = "Shaved" //Face hair type - var/r_facial = 0 //Face hair color - var/g_facial = 0 //Face hair color - var/b_facial = 0 //Face hair color - var/s_tone = 0 //Skin tone - var/r_skin = 238 //Skin color - var/g_skin = 206 //Skin color - var/b_skin = 179 //Skin color - var/s_base = "" //For Adherent - var/r_eyes = 0 //Eye color - var/g_eyes = 0 //Eye color - var/b_eyes = 0 //Eye color - var/species = SPECIES_HUMAN //Species datum to use. - var/species_preview //Used for the species selection window. - var/list/alternate_languages = list() //Secondary language(s) - var/list/language_prefixes = list() //Kanguage prefix keys - var/list/gear //Left in for Legacy reasons, will no longer save. - var/list/gear_list = list() //Custom/fluff item loadouts. - var/gear_slot = 1 //The current gear save slot - var/list/traits //Traits which modifier characters for better or worse (mostly worse). - var/synth_color = 0 //Lets normally uncolorable synth parts be colorable. - var/r_synth //Used with synth_color to color synth parts that normaly can't be colored. - var/g_synth //Same as above - var/b_synth //Same as above - var/synth_markings = 1 //Enable/disable markings on synth parts. +//! ## Character Preferences + /// Our character's name + var/real_name + /// Whether we are a random name every round + var/be_random_name = 0 + /// Our character's nickname + var/nickname + /// Age of character + var/age = 30 + /// Where this character will spawn. (0-2) + var/spawnpoint = "Arrivals Shuttle" + /// Blood type. (not-chooseable) + var/b_type = "A+" + /// Backpack type. + var/backbag = 2 + /// PDA type. + var/pdachoice = 1 + /// Hair type. + var/h_style = "Bald" + /// Hair color. + var/r_hair = 0 + /// Hair color. + var/g_hair = 0 + /// Hair color. + var/b_hair = 0 + /// Gradient style. + var/grad_style = "None" + /// Gradient color. + var/r_grad = 0 + /// Gradient color. + var/g_grad = 0 + /// Gradient color. + var/b_grad = 0 + /// Gradient style. + var/grad_wingstyle = "None" + /// Face hair type. + var/f_style = "Shaved" + /// Face hair color. + var/r_facial = 0 + /// Face hair color. + var/g_facial = 0 + /// Face hair color. + var/b_facial = 0 + /// Skin tone. + var/s_tone = 0 + /// Skin color. + var/r_skin = 238 + /// Skin color. + var/g_skin = 206 + /// Skin color. + var/b_skin = 179 + /// For Adherent. + var/s_base = "" + /// Eye color. + var/r_eyes = 0 + /// Eye color. + var/g_eyes = 0 + /// Eye color. + var/b_eyes = 0 + /// Species datum to use. + var/species = SPECIES_HUMAN + /// Used for the species selection window. + var/species_preview + /// Secondary language(s) + var/list/alternate_languages = list() + /// Language prefix keys. + var/list/language_prefixes = list() + /// Left in for Legacy reasons, will no longer save. + var/list/gear + /// Custom/fluff item loadouts. + var/list/gear_list = list() + /// The current gear save slot. + var/gear_slot = 1 + /// Traits which modifier characters for better or worse (mostly worse). + var/list/traits + /// Lets normally uncolorable synth parts be colorable. + var/synth_color = 0 + /// Used with synth_color to color synth parts that normaly can't be colored. + var/r_synth + /// Used with synth_color to color synth parts that normaly can't be colored. + var/g_synth + /// Used with synth_color to color synth parts that normaly can't be colored. + var/b_synth + /// Enable/disable markings on synth parts. + var/synth_markings = 1 - //Some faction information. - var/home_system = "Unset" //System of birth. - var/citizenship = "None" //Current home system. - var/faction = "None" //General associated faction. - var/religion = "None" //Religious association. - var/antag_faction = "None" //Antag associated faction. - var/antag_vis = "Hidden" //How visible antag association is to others. +//! ## Background Preferences + ///System of birth. + var/home_system = "Unset" + ///Current home system. + var/citizenship = "None" + ///General associated faction. + var/faction = "None" + ///Religious association. + var/religion = "None" + ///Antag associated faction. + var/antag_faction = "None" + ///How visible antag association is to others. + var/antag_vis = "Hidden" - //Mob preview - var/list/char_render_holders //Should only be a key-value list of north/south/east/west = atom/movable/screen. + var/med_record = "" + var/sec_record = "" + var/gen_record = "" + var/exploit_record = "" + var/disabilities = 0 + var/mirror = TRUE + + var/economic_status = "Average" + + var/uplinklocation = "PDA" + +//! ## Mob Preview + /// Should only be a key-value list of north/south/east/west = atom/movable/screen. + var/list/char_render_holders var/static/list/preview_screen_locs = list( "1" = "character_preview_map:2,7", "2" = "character_preview_map:2,5", @@ -96,7 +162,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) "BG" = "character_preview_map:1,1 to 3,8" ) - //Jobs, uses bitflags +//! ## Job Preferences +//? ## Uses bitflags. var/job_civilian_high = 0 var/job_civilian_med = 0 var/job_civilian_low = 0 @@ -113,72 +180,68 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/job_talon_med = 0 var/job_talon_low = 0 - //Keeps track of preferrence for not getting any wanted jobs + /// Keeps track of preferrence for not getting any wanted jobs. var/alternate_option = 1 +//! ## Skills Preferences - Depricated. var/used_skillpoints = 0 var/skill_specialization = null - var/list/skills = list() // skills can range from 0 to 3 + /// Skills can range from 0 to 3. + var/list/skills = list() - // maps each organ to either null(intact), "cyborg" or "amputated" - // will probably not be able to do this for head and torso ;) +//! ## Body Preferences + /// Maps each organ to either null(intact), "cyborg" or "amputated" + /// will probably not be able to do this for head and torso ;) var/list/organ_data = list() var/list/rlimb_data = list() - var/regen_limbs = 0 //set to 1 when altering limb states. fix for prosthetic > normal changes not working on preview. - var/list/player_alt_titles = new() // the default name of a job like "Medical Doctor" + /// Set to 1 when altering limb states. fix for prosthetic > normal changes not working on preview. + var/regen_limbs = 0 + /// The default name of a job like "Medical Doctor". + var/list/player_alt_titles = new() - var/list/body_markings = list() // "name" = "#rgbcolor" + var/list/body_markings = list() //? "name" = "#rgbcolor" var/list/flavor_texts = list() var/list/flavour_texts_robot = list() var/list/body_descriptors = list() - var/med_record = "" - var/sec_record = "" - var/gen_record = "" - var/exploit_record = "" - var/disabilities = 0 - var/mirror = TRUE - - var/economic_status = "Average" - - var/uplinklocation = "PDA" - - // OOC Metadata: +//! ## OOC Metadata var/metadata = "" var/list/ignored_players = list() var/client/client = null var/client_ckey = null - // Communicator identity data + /// Communicator identity data. var/communicator_visibility = 0 - // Default ringtone for character; if blank, use job default + /// Default ringtone for character; if blank, use job default. var/ringtone = null var/datum/category_collection/player_setup_collection/player_setup var/datum/browser/panel - var/lastnews // Hash of last seen lobby news content. + /// Hash of last seen lobby news content. + var/lastnews - //Character Directory Stuff - ///Should we show in Character Directory +//! ## Character Directory Stuff + /// Should we show in Character Directory. var/show_in_directory = 1 - ///Sorting tag to use for vore-prefs + /// Sorting tag to use for vore-prefs. var/directory_tag = "Unset" - ///Sorting tag to use for erp-prefs + /// Sorting tag to use for erp-prefs. var/directory_erptag = "Unset" - ///Advertisement stuff to show in character directory. + /// Advertisement stuff to show in character directory. var/directory_ad = "" - ///Set character's suit sensor level + /// Set character's suit sensor level. var/sensorpref = 5 - ///Should we automatically fit the viewport? + /// Should we automatically fit the viewport? var/auto_fit_viewport = TRUE - ///Should we be in the widescreen mode set by the config? + + /// Should we be in the widescreen mode set by the config? var/widescreenpref = FALSE // Doesn't exist... Yet. /datum/preferences/New(client/C) diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index fc9cd0336d9..f2507af6809 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -60,7 +60,7 @@ #undef OPERATE // Used to get a scaled lumcount. -/turf/proc/get_lumcount(var/minlum = 0, var/maxlum = 1) +/turf/proc/get_lumcount(minlum = 0, maxlum = 1) if(!lighting_object) return 1 diff --git a/code/modules/mob/_modifiers/modifiers.dm b/code/modules/mob/_modifiers/modifiers.dm index 7d1de3088e9..f92babe82a4 100644 --- a/code/modules/mob/_modifiers/modifiers.dm +++ b/code/modules/mob/_modifiers/modifiers.dm @@ -1,54 +1,101 @@ -// This is a datum that tells the mob that something is affecting them. -// The advantage of using this datum verses just setting a variable on the mob directly, is that there is no risk of two different procs overwriting -// each other, or other weirdness. An excellent example is adjusting max health. - +/** + * This is a datum that tells the mob that something is affecting them. + * The advantage of using this datum verses just setting a variable on the mob directly, is that there is no risk of two different procs overwriting + * each other, or other weirdness. An excellent example is adjusting max health. + */ /datum/modifier - var/name = null // Mostly used to organize, might show up on the UI in the Future(tm) - var/desc = null // Ditto. - var/icon_state = null // See above. - var/mob/living/holder = null // The mob that this datum is affecting. - var/datum/weakref/origin = null // A weak reference to whatever caused the modifier to appear. THIS NEEDS TO BE A MOB/LIVING. It's a weakref to not interfere with qdel(). - var/expire_at = null // world.time when holder's Life() will remove the datum. If null, it lasts forever or until it gets deleted by something else. - var/on_created_text = null // Text to show to holder upon being created. - var/on_expired_text = null // Text to show to holder when it expires. - var/hidden = FALSE // If true, it will not show up on the HUD in the Future(tm) - var/stacks = MODIFIER_STACK_FORBID // If true, attempts to add a second instance of this type will refresh expire_at instead. - var/flags = 0 // Flags for the modifier, see mobs.dm defines for more details. + /// Mostly used to organize, might show up on the UI in the Future(tm) + var/name = null + /// Ditto. + var/desc = null + /// See above. + var/icon_state = null + /// The mob that this datum is affecting. + var/mob/living/holder = null + /// A weak reference to whatever caused the modifier to appear. THIS NEEDS TO BE A MOB/LIVING. It's a weakref to not interfere with qdel(). + var/datum/weakref/origin = null + /// world.time when holder's Life() will remove the datum. If null, it lasts forever or until it gets deleted by something else. + var/expire_at = null + /// Text to show to holder upon being created. + var/on_created_text = null + /// Text to show to holder when it expires. + var/on_expired_text = null + /// If true, it will not show up on the HUD in the Future(tm) + var/hidden = FALSE + /// If true, attempts to add a second instance of this type will refresh expire_at instead. + var/stacks = MODIFIER_STACK_FORBID + /// Flags for the modifier, see mobs.dm defines for more details. + var/flags = 0 - var/light_color = null // If set, the mob possessing the modifier will glow in this color. Not implemented yet. - var/light_range = null // How far the light for the above var goes. Not implemented yet. - var/light_intensity = null // Ditto. Not implemented yet. - var/mob_overlay_state = null // Icon_state for an overlay to apply to a (human) mob while this exists. This is actually implemented. - var/client_color = null // If set, the client will have the world be shown in this color, from their perspective. - var/wire_colors_replace = null // If set, the client will have wires replaced by the given replacement list. For colorblindness. + /// If set, the mob possessing the modifier will glow in this color. Not implemented yet. + var/light_color = null + /// How far the light for the above var goes. Not implemented yet. + var/light_range = null + /// Ditto. Not implemented yet. + var/light_intensity = null + /// Icon_state for an overlay to apply to a (human) mob while this exists. This is actually implemented. + var/mob_overlay_state = null + /// If set, the client will have the world be shown in this color, from their perspective. + var/client_color = null + /// If set, the client will have wires replaced by the given replacement list. For colorblindness. + var/wire_colors_replace = null - // Now for all the different effects. - // Percentage modifiers are expressed as a multipler. (e.g. +25% damage should be written as 1.25) - var/max_health_flat // Adjusts max health by a flat (e.g. +20) amount. Note this is added to base health. - var/max_health_percent // Adjusts max health by a percentage (e.g. -30%). - var/disable_duration_percent // Adjusts duration of 'disables' (stun, weaken, paralyze, confusion, sleep, halloss, etc) Setting to 0 will grant immunity. - var/incoming_damage_percent // Adjusts all incoming damage. - var/incoming_brute_damage_percent // Only affects bruteloss. - var/incoming_fire_damage_percent // Only affects fireloss. - var/incoming_tox_damage_percent // Only affects toxloss. - var/incoming_oxy_damage_percent // Only affects oxyloss. - var/incoming_clone_damage_percent // Only affects cloneloss. - var/incoming_hal_damage_percent // Only affects halloss. - var/incoming_healing_percent // Adjusts amount of healing received. - var/outgoing_melee_damage_percent // Adjusts melee damage inflicted by holder by a percentage. Affects attacks by melee weapons and hand-to-hand. - var/slowdown // Negative numbers speed up, positive numbers slow down movement. - var/haste // If set to 1, the mob will be 'hasted', which makes it ignore slowdown and go really fast. - var/evasion // Positive numbers reduce the odds of being hit. Negative numbers increase the odds. - var/bleeding_rate_percent // Adjusts amount of blood lost when bleeding. - var/accuracy // Positive numbers makes hitting things with guns easier, negatives make it harder. - var/accuracy_dispersion // Positive numbers make gun firing cover a wider tile range, and therefore more inaccurate. Negatives help negate dispersion penalties. - var/metabolism_percent // Adjusts the mob's metabolic rate, which affects reagent processing. Won't affect mobs without reagent processing. - var/icon_scale_x_percent // Makes the holder's icon get scaled wider or thinner. - var/icon_scale_y_percent // Makes the holder's icon get scaled taller or shorter. - var/attack_speed_percent // Makes the holder's 'attack speed' (click delay) shorter or longer. - var/pain_immunity // Makes the holder not care about pain while this is on. Only really useful to human mobs. - var/pulse_modifier // Modifier for pulse, will be rounded on application, then added to the normal 'pulse' multiplier which ranges between 0 and 5 normally. Only applied if they're living. - var/pulse_set_level // Positive number. If this is non-null, it will hard-set the pulse level to this. Pulse ranges from 0 to 5 normally. +//! Now for all the different effects. +//! Percentage modifiers are expressed as a multipler. (e.g. +25% damage should be written as 1.25) + + /// Adjusts max health by a flat (e.g. +20) amount. Note this is added to base health. + var/max_health_flat + /// Adjusts max health by a percentage (e.g. -30%). + var/max_health_percent + /// Adjusts duration of 'disables' (stun, weaken, paralyze, confusion, sleep, halloss, etc) Setting to 0 will grant immunity. + var/disable_duration_percent + /// Adjusts all incoming damage. + var/incoming_damage_percent + /// Only affects bruteloss. + var/incoming_brute_damage_percent + /// Only affects fireloss. + var/incoming_fire_damage_percent + /// Only affects toxloss. + var/incoming_tox_damage_percent + /// Only affects oxyloss. + var/incoming_oxy_damage_percent + /// Only affects cloneloss. + var/incoming_clone_damage_percent + /// Only affects halloss. + var/incoming_hal_damage_percent + /// Adjusts amount of healing received. + var/incoming_healing_percent + /// Adjusts melee damage inflicted by holder by a percentage. Affects attacks by melee weapons and hand-to-hand. + var/outgoing_melee_damage_percent + /// Negative numbers speed up, positive numbers slow down movement. + var/slowdown + /// If set to 1, the mob will be 'hasted', which makes it ignore slowdown and go really fast. + var/haste + /// Positive numbers reduce the odds of being hit. Negative numbers increase the odds. + var/evasion + /// Adjusts amount of blood lost when bleeding. + var/bleeding_rate_percent + /// Positive numbers makes hitting things with guns easier, negatives make it harder. + var/accuracy + /// Positive numbers make gun firing cover a wider tile range, and therefore more inaccurate. Negatives help negate dispersion penalties. + var/accuracy_dispersion + /// Adjusts the mob's metabolic rate, which affects reagent processing. Won't affect mobs without reagent processing. + var/metabolism_percent + /// Makes the holder's icon get scaled wider or thinner. + var/icon_scale_x_percent + /// Makes the holder's icon get scaled taller or shorter. + var/icon_scale_y_percent + /// Makes the holder's 'attack speed' (click delay) shorter or longer. + var/attack_speed_percent + /// Makes the holder not care about pain while this is on. Only really useful to human mobs. + var/pain_immunity + /// Modifier for pulse, will be rounded on application, then added to the normal 'pulse' multiplier which ranges between 0 and 5 normally. Only applied if they're living. + var/pulse_modifier + /// Positive number. If this is non-null, it will hard-set the pulse level to this. Pulse ranges from 0 to 5 normally. + var/pulse_set_level + + /// Vision flags to add to the mob. SEE_MOB, SEE_OBJ, etc. + var/vision_flags /datum/modifier/New(var/new_holder, var/new_origin) holder = new_holder diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 019de5aeb28..7eaf4f395be 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -222,7 +222,7 @@ return(prob_slip) // Handle footstep sounds -/mob/living/carbon/human/handle_footstep(var/turf/T) +/mob/living/carbon/human/handle_footstep(turf/T) if(is_incorporeal()) return if(!config_legacy.footstep_volume || !T.footstep_sounds || !T.footstep_sounds.len) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 6dd15fb7d66..652d711db36 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1471,6 +1471,10 @@ if(!druggy) SetSeeInvisibleSelf(SEE_INVISIBLE_LEVEL_TWO) + for(var/datum/modifier/M in modifiers) + if(!isnull(M.vision_flags)) + AddSightSelf(M.vision_flags) + if(!glasses_processed && nif) var/datum/nifsoft/vision_soft for(var/datum/nifsoft/NS in nif.nifsofts) diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm index 9b202f9b49a..e556e1d439a 100644 --- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm +++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm @@ -4,7 +4,7 @@ icobase = 'icons/mob/human_races/r_shadekin_vr.dmi' deform = 'icons/mob/human_races/r_shadekin_vr.dmi' tail = "tail" - icobase_tail = 1 + icobase_tail = TRUE blurb = "Very little is known about these creatures. They appear to be largely mammalian in appearance. \ Seemingly very rare to encounter, there have been widespread myths of these creatures the galaxy over, \ but next to no verifiable evidence to their existence. However, they have recently been more verifiably \ @@ -25,7 +25,7 @@ /datum/unarmed_attack/bite/sharp/shadekin ) - rarity_value = 15 //INTERDIMENSIONAL FLUFFERS + rarity_value = 15 //INTERDIMENSIONAL FLUFFERS siemens_coefficient = 1 darksight = 10 @@ -33,8 +33,8 @@ slowdown = -0.5 item_slowdown_mod = 0.5 - brute_mod = 0.7 // Naturally sturdy. - burn_mod = 1.2 // Furry + brute_mod = 0.7 // Naturally sturdy. + burn_mod = 1.2 // Furry warning_low_pressure = 50 hazard_low_pressure = -1 @@ -42,11 +42,11 @@ warning_high_pressure = 300 hazard_high_pressure = INFINITY - cold_level_1 = -1 //Immune to cold + cold_level_1 = -1 //Immune to cold cold_level_2 = -1 cold_level_3 = -1 - heat_level_1 = 850 //Resistant to heat + heat_level_1 = 850 //Resistant to heat heat_level_2 = 1000 heat_level_3 = 1150 @@ -62,6 +62,7 @@ has_glowing_eyes = TRUE + death_message = "phases to somewhere far away!" male_cough_sounds = null female_cough_sounds = null male_sneeze_sound = null @@ -82,64 +83,70 @@ move_trail = /obj/effect/decal/cleanable/blood/tracks/paw has_organ = list( - O_HEART = /obj/item/organ/internal/heart, - O_VOICE = /obj/item/organ/internal/voicebox, - O_LIVER = /obj/item/organ/internal/liver, - O_KIDNEYS = /obj/item/organ/internal/kidneys, - O_BRAIN = /obj/item/organ/internal/brain/shadekin, - O_EYES = /obj/item/organ/internal/eyes, - O_STOMACH = /obj/item/organ/internal/stomach, - O_INTESTINE = /obj/item/organ/internal/intestine - ) + O_HEART = /obj/item/organ/internal/heart, + O_VOICE = /obj/item/organ/internal/voicebox, + O_LIVER = /obj/item/organ/internal/liver, + O_KIDNEYS = /obj/item/organ/internal/kidneys, + O_BRAIN = /obj/item/organ/internal/brain/shadekin, + O_EYES = /obj/item/organ/internal/eyes, + O_STOMACH = /obj/item/organ/internal/stomach, + O_INTESTINE = /obj/item/organ/internal/intestine + ) has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/chest), - BP_GROIN = list("path" = /obj/item/organ/external/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head/vr/shadekin), - BP_L_ARM = list("path" = /obj/item/organ/external/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head/vr/shadekin), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), BP_L_HAND = list("path" = /obj/item/organ/external/hand), BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), BP_L_FOOT = list("path" = /obj/item/organ/external/foot), BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) - ) + ) //SHADEKIN-UNIQUE STUFF GOES HERE - var/list/shadekin_abilities = list(/datum/power/shadekin/phase_shift, - /datum/power/shadekin/regenerate_other, - /datum/power/shadekin/create_shade) + var/list/shadekin_abilities = list( + /datum/power/shadekin/phase_shift, + /datum/power/shadekin/regenerate_other, + /datum/power/shadekin/create_shade, + ) var/list/shadekin_ability_datums = list() + var/kin_type + var/energy_light = 0.25 + var/energy_dark = 0.75 /datum/species/shadekin/New() ..() - inherent_verbs += list( - /mob/living/proc/shred_limb, - /mob/living/proc/eat_trash, - /mob/living/carbon/human/proc/lick_wounds - ) for(var/power in shadekin_abilities) var/datum/power/shadekin/SKP = new power(src) shadekin_ability_datums.Add(SKP) +/datum/species/shadekin/handle_death(mob/living/carbon/human/H) + spawn(1) + for(var/obj/item/W in H) + H.drop_from_inventory(W) + qdel(H) + /datum/species/shadekin/get_bodytype() return SPECIES_SHADEKIN /datum/species/shadekin/get_random_name() return "shadekin" -/datum/species/shadekin/handle_environment_special(var/mob/living/carbon/human/H) +/datum/species/shadekin/handle_environment_special(mob/living/carbon/human/H) handle_shade(H) /datum/species/shadekin/can_breathe_water() return TRUE //they dont quite breathe -/datum/species/shadekin/add_inherent_verbs(var/mob/living/carbon/human/H) +/datum/species/shadekin/add_inherent_verbs(mob/living/carbon/human/H) ..() add_shadekin_abilities(H) -/datum/species/shadekin/proc/add_shadekin_abilities(var/mob/living/carbon/human/H) +/datum/species/shadekin/proc/add_shadekin_abilities(mob/living/carbon/human/H) if(!H.ability_master || !istype(H.ability_master, /atom/movable/screen/movable/ability_master/shadekin)) H.ability_master = null H.ability_master = new /atom/movable/screen/movable/ability_master/shadekin(H) @@ -147,14 +154,14 @@ if(!(P.verbpath in H.verbs)) H.verbs += P.verbpath H.ability_master.add_shadekin_ability( - object_given = H, - verb_given = P.verbpath, - name_given = P.name, - ability_icon_given = P.ability_icon_state, - arguments = list() - ) + object_given = H, + verb_given = P.verbpath, + name_given = P.name, + ability_icon_given = P.ability_icon_state, + arguments = list() + ) -/datum/species/shadekin/proc/handle_shade(var/mob/living/carbon/human/H) +/datum/species/shadekin/proc/handle_shade(mob/living/carbon/human/H) //Shifted kin don't gain/lose energy (and save time if we're at the cap) var/darkness = 1 var/dark_gains = 0 @@ -166,94 +173,95 @@ var/brightness = T.get_lumcount() //Brightness in 0.0 to 1.0 darkness = 1-brightness //Invert + var/is_dark = (darkness <= 0.5) if(H.ability_flags & AB_PHASE_SHIFTED) dark_gains = 0 else //Heal (very) slowly in good darkness - if(darkness >= 0.75) - H.adjustFireLoss(-0.05) - H.adjustBruteLoss(-0.05) - H.adjustToxLoss(-0.05) - dark_gains = 0.75 + if(is_dark) + H.adjustFireLoss((-0.10)*darkness) + H.adjustBruteLoss((-0.10)*darkness) + H.adjustToxLoss((-0.10)*darkness) + //energy_dark and energy_light are set by the shadekin eye traits. + //These are balanced around their playstyles and 2 planned new aggressive abilities + dark_gains = energy_dark else - dark_gains = 0.25 + dark_gains = energy_light set_energy(H, get_energy(H) + dark_gains) //Update huds update_shadekin_hud(H) -/datum/species/shadekin/proc/get_energy(var/mob/living/carbon/human/H) +/datum/species/shadekin/proc/get_energy(mob/living/carbon/human/H) var/obj/item/organ/internal/brain/shadekin/shade_organ = H.internal_organs_by_name[O_BRAIN] - if(!istype(shade_organ)) - return 0 + return FALSE return shade_organ.dark_energy -/datum/species/shadekin/proc/get_max_energy(var/mob/living/carbon/human/H) +/datum/species/shadekin/proc/get_max_energy(mob/living/carbon/human/H) var/obj/item/organ/internal/brain/shadekin/shade_organ = H.internal_organs_by_name[O_BRAIN] - if(!istype(shade_organ)) - return 0 + return FALSE return shade_organ.max_dark_energy -/datum/species/shadekin/proc/set_energy(var/mob/living/carbon/human/H, var/new_energy) +/datum/species/shadekin/proc/set_energy(mob/living/carbon/human/H, new_energy) var/obj/item/organ/internal/brain/shadekin/shade_organ = H.internal_organs_by_name[O_BRAIN] - if(!istype(shade_organ)) return shade_organ.dark_energy = clamp(new_energy, 0, get_max_energy(H)) -/datum/species/shadekin/proc/set_max_energy(var/mob/living/carbon/human/H, var/new_max_energy) +/datum/species/shadekin/proc/set_max_energy(mob/living/carbon/human/H, new_max_energy) var/obj/item/organ/internal/brain/shadekin/shade_organ = H.internal_organs_by_name[O_BRAIN] - if(!istype(shade_organ)) - return 0 + return FALSE shade_organ.max_dark_energy = new_max_energy -/datum/species/shadekin/proc/check_infinite_energy(var/mob/living/carbon/human/H) +/datum/species/shadekin/proc/check_infinite_energy(mob/living/carbon/human/H) var/obj/item/organ/internal/brain/shadekin/shade_organ = H.internal_organs_by_name[O_BRAIN] - if(!istype(shade_organ)) - return 0 + return FALSE return shade_organ.dark_energy_infinite -/datum/species/shadekin/proc/update_shadekin_hud(var/mob/living/carbon/human/H) +/datum/species/shadekin/proc/update_shadekin_hud(mob/living/carbon/human/H) var/turf/T = get_turf(H) - if(!T) - return - if(H.shadekin_energy_display) - H.shadekin_energy_display.invisibility = 0 + if(H.shadekin_display) + var/l_icon = 0 + var/e_icon = 0 + + H.shadekin_display.invisibility = 0 + if(T) + var/brightness = T.get_lumcount() //Brightness in 0.0 to 1.0 + var/darkness = 1-brightness //Invert + switch(darkness) + if(0.80 to 1.00) + l_icon = 0 + if(0.60 to 0.80) + l_icon = 1 + if(0.40 to 0.60) + l_icon = 2 + if(0.20 to 0.40) + l_icon = 3 + if(0.00 to 0.20) + l_icon = 4 + switch(get_energy(H)) - if(80 to INFINITY) - H.shadekin_energy_display.icon_state = "energy0" - if(60 to 80) - H.shadekin_energy_display.icon_state = "energy1" - if(40 to 60) - H.shadekin_energy_display.icon_state = "energy2" - if(20 to 40) - H.shadekin_energy_display.icon_state = "energy3" - if(0 to 20) - H.shadekin_energy_display.icon_state = "energy4" - if(H.shadekin_dark_display) - H.shadekin_dark_display.invisibility = 0 - var/brightness = T.get_lumcount() //Brightness in 0.0 to 1.0 - var/darkness = 1-brightness //Invert - switch(darkness) - if(0.80 to 1.00) - H.shadekin_dark_display.icon_state = "dark2" - if(0.60 to 0.80) - H.shadekin_dark_display.icon_state = "dark1" - if(0.40 to 0.60) - H.shadekin_dark_display.icon_state = "dark" - if(0.20 to 0.40) - H.shadekin_dark_display.icon_state = "dark-1" - if(0.00 to 0.20) - H.shadekin_dark_display.icon_state = "dark-2" + if(0 to 24) + e_icon = 0 + if(25 to 49) + e_icon = 1 + if(50 to 74) + e_icon = 2 + if(75 to 99) + e_icon = 3 + if(100 to INFINITY) + e_icon = 4 + + H.shadekin_display.icon_state = "shadekin-[l_icon]-[e_icon]" return diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm index 329e4e35620..986e73df472 100644 --- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm +++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm @@ -24,7 +24,7 @@ name = "Phase Shift (100)" desc = "Shift yourself out of alignment with realspace to travel quickly to different areas." verbpath = /mob/living/carbon/human/proc/phase_shift - ability_icon_state = "tech_passwall" + ability_icon_state = "wiz_jaunt" /mob/living/carbon/human/proc/phase_shift() set name = "Phase Shift (100)" @@ -33,24 +33,44 @@ var/ability_cost = 100 + var/darkness = 1 + var/turf/T = get_turf(src) + if(!T) + to_chat(src, SPAN_WARNING("You can't use that here!")) + return FALSE + + var/brightness = T.get_lumcount() //Brightness in 0.0 to 1.0 + darkness = 1-brightness //Invert + + var/watcher = 0 + for(var/mob/living/carbon/human/watchers in oview(7,src )) // If we can see them... + if(watchers in oviewers(7,src)) // And they can see us... + if(!(watchers.stat) && !isbelly(watchers.loc) && !istype(watchers.loc, /obj/item/holder)) // And they are alive and not being held by someone... + watcher++ // They are watching us! + + ability_cost = clamp(ability_cost/(0.01+darkness*2),50, 80)//This allows for 1 watcher in full light + if(watcher>0) + ability_cost = ability_cost + ( 15 * watcher ) + if(!(ability_flags & AB_PHASE_SHIFTED)) + log_debug("[src] attempted to shift with [watcher] visible Carbons with a cost of [ability_cost] in a darkness level of [darkness]") + var/datum/species/shadekin/SK = species if(!istype(SK)) - to_chat(src, "Only a shadekin can use that!") + to_chat(src, SPAN_WARNING("Only a shadekin can use that!")) return FALSE else if(stat) - to_chat(src, "Can't use that ability in your state!") + to_chat(src, SPAN_WARNING("Can't use that ability in your state!")) return FALSE else if(shadekin_get_energy() < ability_cost && !(ability_flags & AB_PHASE_SHIFTED)) - to_chat(src, "Not enough energy for that ability!") + to_chat(src, SPAN_WARNING("Not enough energy for that ability!")) return FALSE if(!(ability_flags & AB_PHASE_SHIFTED)) shadekin_adjust_energy(-ability_cost) - playsound(src, 'sound/effects/stealthoff.ogg', 75, 1) + playsound(src, 'sound/effects/stealthoff.ogg', 75, TRUE) - var/turf/T = get_turf(src) if(!T.CanPass(src,T) || loc != T) - to_chat(src,"You can't use that here!") + to_chat(src, SPAN_WARNING("You can't use that here!")) return FALSE forceMove(T) @@ -67,6 +87,7 @@ //Shifting in if(ability_flags & AB_PHASE_SHIFTED) ability_flags &= ~AB_PHASE_SHIFTED + mouse_opacity = 2 name = real_name for(var/belly in vore_organs) var/obj/belly/B = belly @@ -85,9 +106,12 @@ phaseanim.dir = dir alpha = 0 custom_emote(1,"phases in!") + remove_a_modifier_of_type(/datum/modifier/shadekin_phase_vision) + RemoveSightSelf(SEE_THRU) sleep(5) //The duration of the TP animation canmove = original_canmove alpha = initial(alpha) + // probably replace with a trait later. set_movement_type(GROUND) @@ -98,7 +122,7 @@ var/mob/living/target = pick(potentials) if(istype(target) && vore_selected) target.forceMove(vore_selected) - to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!") + to_chat(target, SPAN_WARNING("\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")) //Affect nearby lights var/destroy_lights = 0 @@ -115,16 +139,17 @@ //Shifting out else ability_flags |= AB_PHASE_SHIFTED + mouse_opacity = 0 custom_emote(1,"phases out!") name = "Something" - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) B.escapable = FALSE var/obj/effect/temp_visual/shadekin/phase_out/phaseanim = new /obj/effect/temp_visual/shadekin/phase_out(src.loc) phaseanim.dir = dir alpha = 0 + add_modifier(/datum/modifier/shadekin_phase_vision) sleep(5) invisibility = INVISIBILITY_LEVEL_TWO see_invisible = INVISIBILITY_LEVEL_TWO @@ -140,46 +165,9 @@ density = FALSE force_max_speed = TRUE -/mob/living/carbon/human/UnarmedAttack() - if(shadekin_phasing_check()) - return FALSE //Nope. - - . = ..() - -/mob/living/carbon/human/can_fall() - if(shadekin_phasing_check()) - return FALSE //Nope! - - return ..() - -/mob/living/carbon/human/zMove(direction) - if(shadekin_phasing_check()) - var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src) - if(destination) - forceMove(destination) - return TRUE //Yup. - - return ..() - -/mob/proc/shadekin_phasing_check() - var/mob/living/simple_mob/shadekin/s_SK = src - if(istype(s_SK)) - if(s_SK.ability_flags & AB_PHASE_SHIFTED) - return TRUE - var/mob/living/carbon/human/h_SK = src - if(istype(h_SK)) - if(h_SK.ability_flags & AB_PHASE_SHIFTED) - return TRUE - return FALSE - -/* -/mob/living/carbon/human/MouseDrop_T(atom/dropping, mob/user) - if(ability_flags & AB_PHASE_SHIFTED) - return FALSE //Nope! - - return ..() -*/ - +/datum/modifier/shadekin_phase_vision + name = "Shadekin Phase Vision" + vision_flags = SEE_THRU ////////////////////////// /// REGENERATE OTHER /// diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_hud.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_hud.dm index 38b49173258..c6029da09a9 100644 --- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_hud.dm +++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_hud.dm @@ -1,24 +1,12 @@ /atom/movable/screen/shadekin - icon = 'icons/mob/shadekin_hud.dmi' + name = "shadekin status" + icon = 'icons/screen/hud/common/shadekin.dmi' invisibility = 101 -/atom/movable/screen/shadekin/darkness - name = "darkness" - icon_state = "dark" - alpha = 150 - -/atom/movable/screen/shadekin/energy - name = "energy" - icon_state = "energy0" - alpha = 150 - - - - /atom/movable/screen/movable/ability_master/shadekin name = "Shadekin Abilities" icon = 'icons/mob/screen_spells.dmi' - icon_state = "grey_spell_ready" + icon_state = "nano_spell_base" ability_objects = list() showing = 0 @@ -27,7 +15,7 @@ screen_loc = ui_spell_master -/atom/movable/screen/movable/ability_master/shadekin/update_abilities(forced = 0, mob/user) //Different proc to prevent indexing +/atom/movable/screen/movable/ability_master/shadekin/update_abilities(forced = 0, mob/user) //Different proc to prevent indexing update_icon() if(user && user.client) if(!(src in user.client.screen)) @@ -36,10 +24,10 @@ ability.update_icon(forced) /atom/movable/screen/ability/verb_based/shadekin - icon_state = "grey_spell_base" - background_base_state = "grey" + icon_state = "nano_spell_base" + background_base_state = "nano" -/atom/movable/screen/movable/ability_master/proc/add_shadekin_ability(var/object_given, var/verb_given, var/name_given, var/ability_icon_given, var/arguments) +/atom/movable/screen/movable/ability_master/proc/add_shadekin_ability(object_given, verb_given, name_given, ability_icon_given, arguments) if(!object_given) message_admins("ERROR: add_shadekin_ability() was not given an object in its arguments.") if(!verb_given) diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_traits.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_traits.dm new file mode 100644 index 00000000000..5510f283059 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_traits.dm @@ -0,0 +1,139 @@ +/datum/trait/kintype + allowed_species = list(SPECIES_SHADEKIN) + var/color = BLUE_EYES + name = "Shadekin Blue Adaptation" + desc = "Makes your shadekin adapted as a Blue eyed kin! This gives you decreased energy regeneration in darkness, decreased regeneration in the light amd unchanged health!" + cost = 0 + custom_only = FALSE + var_changes = list( + "total_health" = 100, + "energy_light" = 0.5, + "energy_dark" = 0.5, + "unarmed_types" = list( + /datum/unarmed_attack/stomp, + /datum/unarmed_attack/kick, + /datum/unarmed_attack/claws/shadekin, + /datum/unarmed_attack/bite/sharp/shadekin, + /datum/unarmed_attack/shadekinharmbap, + ) + ) + +/datum/trait/kintype/red + name = "Shadekin Red Adaptation" + color = RED_EYES + desc = "Makes your shadekin adapted as a Red eyed kin! This gives you minimal energy regeneration in darkness, moderate regeneration in the light amd increased health!" + var_changes = list( + "total_health" = 200, + "energy_light" = -1, + "energy_dark" = 0.1, + "unarmed_types" = list( + /datum/unarmed_attack/stomp, + /datum/unarmed_attack/kick, + /datum/unarmed_attack/claws/shadekin, + /datum/unarmed_attack/bite/sharp/shadekin, + /datum/unarmed_attack/shadekinharmbap + ) + ) + +/datum/trait/kintype/purple + name = "Shadekin Purple Adaptation" + color = PURPLE_EYES + desc = "Makes your shadekin adapted as a Purple eyed kin! This gives you moderate energy regeneration in darkness, minor degeneration in the light amd increased health!" + var_changes = list( + "total_health" = 150, + "energy_light" = 1, + "energy_dark" = -0.5, + "unarmed_types" = list( + /datum/unarmed_attack/stomp, + /datum/unarmed_attack/kick, + /datum/unarmed_attack/claws/shadekin, + /datum/unarmed_attack/bite/sharp/shadekin, + /datum/unarmed_attack/shadekinharmbap + ) + ) + +/datum/trait/kintype/yellow + name = "Shadekin Yellow Adaptation" + color = YELLOW_EYES + desc = "Makes your shadekin adapted as a Yellow eyed kin! This gives you the highest energy regeneration in darkness, high degeneration in the light amd unchanged health!" + var_changes = list( + "total_health" = 100, + "energy_light" = 3, + "energy_dark" = -2, + "unarmed_types" = list( + /datum/unarmed_attack/stomp, + /datum/unarmed_attack/kick, + /datum/unarmed_attack/claws/shadekin, + /datum/unarmed_attack/bite/sharp/shadekin, + /datum/unarmed_attack/shadekinharmbap + ) + ) + +/datum/trait/kintype/green + name = "Shadekin Green Adaptation" + color = GREEN_EYES + desc = "Makes your shadekin adapted as a Green eyed kin! This gives you high energy regeneration in darkness, minor regeneration in the light amd unchanged health!" + var_changes = list( + "total_health" = 100, + "energy_light" = 2, + "energy_dark" = 0.125, + "unarmed_types" = list( + /datum/unarmed_attack/stomp, + /datum/unarmed_attack/kick, + /datum/unarmed_attack/claws/shadekin, + /datum/unarmed_attack/bite/sharp/shadekin, + /datum/unarmed_attack/shadekinharmbap + ) + ) + +/datum/trait/kintype/orange + name = "Shadekin Orange Adaptation" + color = ORANGE_EYES + desc = "Makes your shadekin adapted as a Orange eyed kin! This gives you minor energy regeneration in darkness, modeate degeneration in the light amd increased health!" + var_changes = list( + "total_health" = 175, + "energy_light" = 0.25, + "energy_dark" = -0.5, + "unarmed_types" = list( + /datum/unarmed_attack/stomp, + /datum/unarmed_attack/kick, + /datum/unarmed_attack/claws/shadekin, + /datum/unarmed_attack/bite/sharp/shadekin, + /datum/unarmed_attack/shadekinharmbap + ) + ) + +/datum/trait/kintype/apply(datum/species/shadekin/S, mob/living/carbon/human/H) + ..(S,H) + if(color && istype(S)) //Sanity check to see if they're actually a shadekin, otherwise just don't do anything. They shouldn't be able to spawn with the trait. + S.kin_type = color + switch(color) + if(BLUE_EYES) + H.shapeshifter_set_eye_color("0000FF") + if(RED_EYES) + H.shapeshifter_set_eye_color("FF0000") + if(GREEN_EYES) + H.shapeshifter_set_eye_color("00FF00") + if(PURPLE_EYES) + H.shapeshifter_set_eye_color("FF00FF") + if(YELLOW_EYES) + H.shapeshifter_set_eye_color("FFFF00") + if(ORANGE_EYES) + H.shapeshifter_set_eye_color("FFA500") + + +/datum/unarmed_attack/shadekinharmbap + attack_name = "syphon strike" + attack_verb = list("hit", "clawed", "slashed", "scratched") + attack_sound = 'sound/weapons/slice.ogg' + miss_sound = 'sound/weapons/slashmiss.ogg' + shredding = FALSE + +/datum/unarmed_attack/shadekinharmbap/apply_effects(mob/living/carbon/human/shadekin/user, mob/living/carbon/human/target, armour, attack_damage, zone) + ..() + if(user == target) //Prevent self attack to gain energy + return + var/obj/item/organ/internal/brain/shadekin/shade_organ = user.internal_organs_by_name[O_BRAIN] + if(!istype(shade_organ)) + return + shade_organ.dark_energy = clamp(shade_organ.dark_energy + attack_damage,0,shade_organ.max_dark_energy) //Convert Damage done to Energy Gained diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 1d8125cc9ee..674c9ae3615 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -70,7 +70,7 @@ /// Used for mob icon generation for non-32x32 species. var/icon/icon_template - var/mob_size = MOB_MEDIUM + var/mob_size = MOB_MEDIUM var/show_ssd = "fast asleep" var/virus_immune /// Permanent weldervision. @@ -127,11 +127,11 @@ //! ## Soundy emotey things. var/scream_verb = "screams" - var/male_scream_sound = list('sound/voice/screams/sound_voice_scream_scream_m1.ogg', 'sound/voice/screams/sound_voice_scream_scream_m2.ogg') - var/female_scream_sound = list('sound/voice/screams/sound_voice_scream_scream_f1.ogg', 'sound/voice/screams/sound_voice_scream_scream_f2.ogg', 'sound/voice/screams/sound_voice_scream_scream_f3.ogg') - var/male_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg') + var/male_scream_sound = list('sound/voice/screams/sound_voice_scream_scream_m1.ogg', 'sound/voice/screams/sound_voice_scream_scream_m2.ogg') + var/female_scream_sound = list('sound/voice/screams/sound_voice_scream_scream_f1.ogg', 'sound/voice/screams/sound_voice_scream_scream_f2.ogg', 'sound/voice/screams/sound_voice_scream_scream_f3.ogg') + var/male_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg') var/female_cough_sounds = list('sound/effects/mob_effects/f_cougha.ogg','sound/effects/mob_effects/f_coughb.ogg') - var/male_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg' + var/male_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg' var/female_sneeze_sound = 'sound/effects/mob_effects/f_sneeze.ogg' //! ## Combat vars. @@ -141,7 +141,7 @@ var/list/unarmed_types = list( /datum/unarmed_attack, /datum/unarmed_attack/bite - ) + ) /// For empty hand harm-intent attack var/list/unarmed_attacks = null /// Physical damage multiplier. @@ -212,7 +212,7 @@ "You feel chilly.", "You shiver suddenly.", "Your chilly flesh stands out in goosebumps." - ) + ) //! ## Hot /// Heat damage level 1 above this point. @@ -235,7 +235,7 @@ "You feel sweat drip down your neck.", "You feel uncomfortably warm.", "Your skin prickles in the heat." - ) + ) /// Species will gain this much temperature every second @@ -330,7 +330,7 @@ O_EYES = /obj/item/organ/internal/eyes, O_STOMACH = /obj/item/organ/internal/stomach, O_INTESTINE = /obj/item/organ/internal/intestine - ) + ) /// If set, this organ is required for vision. Defaults to "eyes" if the species has them. var/vision_organ /// If set, the species will be affected by flashbangs regardless if they have eyes or not, as they see in large areas. @@ -348,7 +348,7 @@ BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), BP_L_FOOT = list("path" = /obj/item/organ/external/foot), BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) - ) + ) /// Used for species that only need to change one or two entries in has_limbs. //var/list/override_limb_types //Not used yet. @@ -774,7 +774,7 @@ GLOBAL_LIST_INIT(species_oxygen_tank_by_gas, list( /datum/species/proc/handle_falling(mob/living/carbon/human/H, atom/hit_atom, damage_min, damage_max, silent, planetary) return FALSE -/datum/species/proc/get_offset_overlay_image(var/spritesheet, var/mob_icon, var/mob_state, var/color, var/slot) +/datum/species/proc/get_offset_overlay_image(spritesheet, mob_icon, mob_state, color, slot) // If we don't actually need to offset this, don't bother with any of the generation/caching. if(!spritesheet && equip_adjust.len && equip_adjust[slot] && LAZYLEN(equip_adjust[slot])) diff --git a/code/modules/mob/living/carbon/human/species/species_getters.dm b/code/modules/mob/living/carbon/human/species/species_getters.dm index e84c4f00fff..d4668234a1b 100644 --- a/code/modules/mob/living/carbon/human/species/species_getters.dm +++ b/code/modules/mob/living/carbon/human/species/species_getters.dm @@ -1,31 +1,31 @@ -/datum/species/proc/get_valid_shapeshifter_forms(var/mob/living/carbon/human/H) +/datum/species/proc/get_valid_shapeshifter_forms(mob/living/carbon/human/H) return list() -/datum/species/proc/get_additional_examine_text(var/mob/living/carbon/human/H) +/datum/species/proc/get_additional_examine_text(mob/living/carbon/human/H) return -/datum/species/proc/get_tail(var/mob/living/carbon/human/H) +/datum/species/proc/get_tail(mob/living/carbon/human/H) return tail -/datum/species/proc/get_tail_animation(var/mob/living/carbon/human/H) +/datum/species/proc/get_tail_animation(mob/living/carbon/human/H) return tail_animation -/datum/species/proc/get_tail_hair(var/mob/living/carbon/human/H) +/datum/species/proc/get_tail_hair(mob/living/carbon/human/H) return tail_hair -/datum/species/proc/get_blood_mask(var/mob/living/carbon/human/H) +/datum/species/proc/get_blood_mask(mob/living/carbon/human/H) return blood_mask -/datum/species/proc/get_damage_overlays(var/mob/living/carbon/human/H) +/datum/species/proc/get_damage_overlays(mob/living/carbon/human/H) return damage_overlays -/datum/species/proc/get_damage_mask(var/mob/living/carbon/human/H) +/datum/species/proc/get_damage_mask(mob/living/carbon/human/H) return damage_mask -/datum/species/proc/get_examine_name(var/mob/living/carbon/human/H) +/datum/species/proc/get_examine_name(mob/living/carbon/human/H) return name -/datum/species/proc/get_icobase(var/mob/living/carbon/human/H, var/get_deform) +/datum/species/proc/get_icobase(mob/living/carbon/human/H, get_deform) return (get_deform ? deform : icobase) /datum/species/proc/get_station_variant() @@ -34,25 +34,25 @@ // used for limb caching // todo: rework limbs and get rid of this, numerical static keys are dumb as fuck, // limbs should use their own types! -/datum/species/proc/get_race_key(var/mob/living/carbon/human/H) +/datum/species/proc/get_race_key(mob/living/carbon/human/H) return real_race_key(H) /datum/species/proc/real_race_key(mob/living/carbon/human/H) return name -/datum/species/proc/get_bodytype(var/mob/living/carbon/human/H) +/datum/species/proc/get_bodytype(mob/living/carbon/human/H) return name -/datum/species/proc/get_knockout_message(var/mob/living/carbon/human/H) +/datum/species/proc/get_knockout_message(mob/living/carbon/human/H) return ((H && H.isSynthetic()) ? "encounters a hardware fault and suddenly reboots!" : knockout_message) -/datum/species/proc/get_death_message(var/mob/living/carbon/human/H) +/datum/species/proc/get_death_message(mob/living/carbon/human/H) if(config_legacy.show_human_death_message) return ((H && H.isSynthetic()) ? "gives one shrill beep before falling lifeless." : death_message) else return "no message" -/datum/species/proc/get_ssd(var/mob/living/carbon/human/H) +/datum/species/proc/get_ssd(mob/living/carbon/human/H) if(H) if(H.looksSynthetic()) return "flashing a 'system offline' light" @@ -61,7 +61,7 @@ else return -/datum/species/proc/get_blood_colour(var/mob/living/carbon/human/H) +/datum/species/proc/get_blood_colour(mob/living/carbon/human/H) if(H) var/datum/robolimb/company = H.isSynthetic() if(company) @@ -69,7 +69,7 @@ else return blood_color -/datum/species/proc/get_blood_name(var/mob/living/carbon/human/H) +/datum/species/proc/get_blood_name(mob/living/carbon/human/H) if(H) var/datum/robolimb/company = H.isSynthetic() if(company) @@ -77,13 +77,13 @@ else return blood_name -/datum/species/proc/get_virus_immune(var/mob/living/carbon/human/H) +/datum/species/proc/get_virus_immune(mob/living/carbon/human/H) return ((H && H.isSynthetic()) ? 1 : virus_immune) -/datum/species/proc/get_flesh_colour(var/mob/living/carbon/human/H) +/datum/species/proc/get_flesh_colour(mob/living/carbon/human/H) return ((H && H.isSynthetic()) ? SYNTH_FLESH_COLOUR : flesh_color) -/datum/species/proc/get_environment_discomfort(var/mob/living/carbon/human/H, var/msg_type) +/datum/species/proc/get_environment_discomfort(mob/living/carbon/human/H, msg_type) if(!prob(5)) return @@ -104,7 +104,7 @@ if(covered) to_chat(H, "[pick(heat_discomfort_strings)]") -/datum/species/proc/get_random_name(var/gender) +/datum/species/proc/get_random_name(gender) if(!name_language) if(gender == FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) @@ -118,12 +118,14 @@ return "unknown" return species_language.get_random_name(gender) -/datum/species/proc/get_vision_flags(var/mob/living/carbon/human/H) +/datum/species/proc/get_vision_flags(mob/living/carbon/human/H) return vision_flags -/datum/species/proc/get_wing_hair(var/mob/living/carbon/human/H) //I have no idea what this is even used for other than teshari, but putting it in just in case. +/datum/species/proc/get_wing_hair(mob/living/carbon/human/H) //I have no idea what this is even used for other than teshari, but putting it in just in case. return wing_hair //Since the tail has it. -/datum/species/proc/get_wing(var/mob/living/carbon/human/H) + +/datum/species/proc/get_wing(mob/living/carbon/human/H) return wing -/datum/species/proc/get_wing_animation(var/mob/living/carbon/human/H) + +/datum/species/proc/get_wing_animation(mob/living/carbon/human/H) return wing_animation diff --git a/code/modules/mob/living/carbon/human/species/station/adherent.dm b/code/modules/mob/living/carbon/human/species/station/adherent.dm index da1a6c3d2ba..29ca2df8851 100644 --- a/code/modules/mob/living/carbon/human/species/station/adherent.dm +++ b/code/modules/mob/living/carbon/human/species/station/adherent.dm @@ -95,12 +95,12 @@ ) has_organ = list( - BP_BRAIN = /obj/item/organ/internal/brain/adherent, - BP_EYES = /obj/item/organ/internal/eyes/adherent, - BP_JETS = /obj/item/organ/internal/powered/jets, - BP_FLOAT = /obj/item/organ/internal/powered/float, - BP_CELL = /obj/item/organ/internal/cell/adherent, - BP_COOLING_FINS = /obj/item/organ/internal/powered/cooling_fins + O_BRAIN = /obj/item/organ/internal/brain/adherent, + O_EYES = /obj/item/organ/internal/eyes/adherent, + O_JETS = /obj/item/organ/internal/powered/jets, + O_FLOAT = /obj/item/organ/internal/powered/float, + O_CELL = /obj/item/organ/internal/cell/adherent, + O_COOLING_FINS = /obj/item/organ/internal/powered/cooling_fins ) move_trail = /obj/effect/decal/cleanable/blood/tracks/snake //If you wanna copy this for your mob, dont diff --git a/code/modules/mob/living/carbon/human/traits/_trait.dm b/code/modules/mob/living/carbon/human/traits/_trait.dm index 40631438a80..52b7953e17e 100644 --- a/code/modules/mob/living/carbon/human/traits/_trait.dm +++ b/code/modules/mob/living/carbon/human/traits/_trait.dm @@ -2,15 +2,22 @@ var/name var/desc = "Contact a developer if you see this trait." - var/cost = 0 // 0 is neutral, negative cost means negative, positive cost means positive. - var/list/var_changes // A list to apply to the custom species vars. - var/list/excludes // Store a list of paths of traits to exclude, but done automatically if they change the same vars. + /// 0 is neutral, negative cost means negative, positive cost means positive. + var/cost = 0 + /// A list to apply to the custom species vars. + var/list/var_changes + /// Store a list of paths of traits to exclude, but done automatically if they change the same vars. + var/list/excludes + /// A list of species that CAN take this trait, use this if only a few species can use it. -shark + var/list/allowed_species + /// Trait only available for custom species. + var/custom_only = TRUE /// list of TRAIT_*'s to apply, using ROUNDSTART_TRAIT var/list/traits -//Proc can be overridden lower to include special changes, make sure to call up though for the vars changes -/datum/trait/proc/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/// Proc can be overridden lower to include special changes, make sure to call up though for the vars changes +/datum/trait/proc/apply(datum/species/S, mob/living/carbon/human/H) SHOULD_CALL_PARENT(TRUE) for(var/trait in traits) @@ -25,6 +32,6 @@ S.vars[V] = var_changes[V] //Similar to the above, but for removing. Probably won't be called often/ever. -/datum/trait/proc/remove(var/datum/species/S) +/datum/trait/proc/remove(datum/species/S) ASSERT(S) return diff --git a/code/modules/mob/living/carbon/human/traits/negative.dm b/code/modules/mob/living/carbon/human/traits/negative.dm index b70c33ce803..f3bd7ff173b 100644 --- a/code/modules/mob/living/carbon/human/traits/negative.dm +++ b/code/modules/mob/living/carbon/human/traits/negative.dm @@ -28,7 +28,7 @@ cost = -2 var_changes = list("total_health" = 75) - apply(var/datum/species/S,var/mob/living/carbon/human/H) + apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.setMaxHealth(S.total_health) @@ -38,7 +38,7 @@ cost = -3 //Teshari HP. This makes the person a lot more suseptable to getting stunned, killed, etc. var_changes = list("total_health" = 50) - apply(var/datum/species/S,var/mob/living/carbon/human/H) + apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.setMaxHealth(S.total_health) @@ -215,7 +215,7 @@ excludes = list( /datum/trait/negative/blind ) - + // todo: organ disability? better way to have mutual exclusion from having all 3 /datum/trait/negative/mute name = "Mute" @@ -224,4 +224,3 @@ traits = list( TRAIT_MUTE ) - diff --git a/code/modules/mob/living/carbon/human/traits/neutral.dm b/code/modules/mob/living/carbon/human/traits/neutral.dm index 533813e3230..a9371fde36c 100644 --- a/code/modules/mob/living/carbon/human/traits/neutral.dm +++ b/code/modules/mob/living/carbon/human/traits/neutral.dm @@ -37,6 +37,7 @@ name = "Autohiss (Unathi)" desc = "You roll your S's and x's" cost = 0 + custom_only = FALSE var_changes = list( autohiss_basic_map = list( "s" = list("ss", "sss", "ssss") @@ -52,6 +53,7 @@ name = "Autohiss (Tajaran)" desc = "You roll your R's." cost = 0 + custom_only = FALSE var_changes = list( autohiss_basic_map = list( "r" = list("rr", "rrr", "rrrr") @@ -64,8 +66,9 @@ desc = "Makes you unable to gain nutrition from anything but blood. To compenstate, you get fangs that can be used to drain blood from prey." cost = 0 var_changes = list("is_vampire" = TRUE) //The verb is given in human.dm + custom_only = FALSE -/datum/trait/neutral/bloodsucker/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/bloodsucker/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.verbs |= /mob/living/carbon/human/proc/bloodsuck @@ -74,7 +77,7 @@ desc = "Makes you able to gain nutrition from draining prey in your grasp." cost = 0 -/datum/trait/neutral/succubus_drain/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/succubus_drain/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.verbs |= /mob/living/carbon/human/proc/succubus_drain H.verbs |= /mob/living/carbon/human/proc/succubus_drain_finalize @@ -84,6 +87,7 @@ name = "Vetalan / Vampiric" desc = "Vampires, officially known as the Vetalan, are weaker to burns, bright lights, and must consume blood to survive. To this end, they can see near-perfectly in the darkness, possess sharp, numbing fangs, and anti-septic saliva." cost = 0 + custom_only = FALSE var_changes = list( "is_vampire" = TRUE, "darksight" = 7, @@ -92,7 +96,7 @@ "burn_mod" = 1.25, "unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp, /datum/unarmed_attack/bite/sharp/numbing)) -/datum/trait/neutral/vampire/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/vampire/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.verbs |= /mob/living/carbon/human/proc/bloodsuck H.verbs |= /mob/living/carbon/human/proc/lick_wounds @@ -100,9 +104,10 @@ /datum/trait/neutral/hard_vore name = "Brutal Predation" desc = "Allows you to tear off limbs & tear out internal organs." - cost = 0 //I would make this cost a point, since it has some in game value, but there are easier, less damaging ways to perform the same functions. + cost = 0 + custom_only = FALSE -/datum/trait/neutral/hard_vore/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/hard_vore/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.verbs |= /mob/living/proc/shred_limb @@ -110,9 +115,10 @@ name = "Trash Can" desc = "Allows you to dispose of some garbage on the go instead of having to look for a bin or littering like an animal." cost = 0 + custom_only = FALSE var_changes = list("trashcan" = 1) -/datum/trait/neutral/trashcan/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/trashcan/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.verbs |= /mob/living/proc/eat_trash @@ -120,27 +126,30 @@ name = "Glowing Eyes" desc = "Your eyes show up above darkness. SPOOKY! And kinda edgy too." cost = 0 + custom_only = FALSE var_changes = list("has_glowing_eyes" = 1) /datum/trait/neutral/glowing_body name = "Glowing Body" desc = "Your body glows about as much as a PDA light! Settable color and toggle in Abilities tab ingame." cost = 0 -/datum/trait/neutral/glowing_body/apply(var/datum/species/S,var/mob/living/carbon/human/H) + custom_only = FALSE + +/datum/trait/neutral/glowing_body/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.verbs |= /mob/living/proc/glow_toggle H.verbs |= /mob/living/proc/glow_color -// Body shape traits +//! ## Body shape traits /datum/trait/neutral/taller name = "Taller" desc = "Your body is taller than average." cost = 0 -// custom_only = FALSE + custom_only = FALSE var_changes = list("icon_scale_y" = 1.09) excludes = list(/datum/trait/neutral/tall, /datum/trait/neutral/short, /datum/trait/neutral/shorter) -/datum/trait/neutral/taller/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/taller/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.update_transform() @@ -148,11 +157,11 @@ name = "Tall" desc = "Your body is a bit taller than average." cost = 0 -// custom_only = FALSE + custom_only = FALSE var_changes = list("icon_scale_y" = 1.05) excludes = list(/datum/trait/neutral/taller, /datum/trait/neutral/short, /datum/trait/neutral/shorter) -/datum/trait/neutral/tall/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/tall/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.update_transform() @@ -160,11 +169,11 @@ name = "Short" desc = "Your body is a bit shorter than average." cost = 0 -// custom_only = FALSE + custom_only = FALSE var_changes = list("icon_scale_y" = 0.95) excludes = list(/datum/trait/neutral/taller, /datum/trait/neutral/tall, /datum/trait/neutral/shorter) -/datum/trait/neutral/short/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/short/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.update_transform() @@ -172,11 +181,11 @@ name = "Shorter" desc = "You are shorter than average." cost = 0 -// custom_only = FALSE + custom_only = FALSE var_changes = list("icon_scale_y" = 0.915) excludes = list(/datum/trait/neutral/taller, /datum/trait/neutral/tall, /datum/trait/neutral/short) -/datum/trait/neutral/shorter/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/shorter/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.update_transform() @@ -184,11 +193,11 @@ name = "Overweight" desc = "You are heavier than average." cost = 0 -// custom_only = FALSE + custom_only = FALSE var_changes = list("icon_scale_x" = 1.054) excludes = list(/datum/trait/neutral/obese, /datum/trait/neutral/thin, /datum/trait/neutral/thinner) -/datum/trait/neutral/fat/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/fat/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.update_transform() @@ -196,11 +205,11 @@ name = "Obese" desc = "You are much heavier than average." cost = 0 -// custom_only = FALSE + custom_only = FALSE var_changes = list("icon_scale_x" = 1.095) excludes = list(/datum/trait/neutral/fat, /datum/trait/neutral/thin, /datum/trait/neutral/thinner) -/datum/trait/neutral/obese/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/obese/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.update_transform() @@ -208,11 +217,11 @@ name = "Thin" desc = "You are skinnier than average." cost = 0 -// custom_only = FALSE + custom_only = FALSE var_changes = list("icon_scale_x" = 0.945) excludes = list(/datum/trait/neutral/fat, /datum/trait/neutral/obese, /datum/trait/neutral/thinner) -/datum/trait/neutral/thin/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/thin/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.update_transform() @@ -220,11 +229,11 @@ name = "Very Thin" desc = "You are much skinnier than average." cost = 0 -// custom_only = FALSE + custom_only = FALSE var_changes = list("icon_scale_x" = 0.905) excludes = list(/datum/trait/neutral/fat, /datum/trait/neutral/obese, /datum/trait/neutral/thin) -/datum/trait/neutral/thinner/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/thinner/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.update_transform() @@ -232,8 +241,9 @@ name = "Antiseptic Saliva" desc = "Your saliva has especially strong antiseptic properties that can be used to heal small wounds." cost = 0 + custom_only = FALSE -/datum/trait/neutral/antiseptic_saliva/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/antiseptic_saliva/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.verbs |= /mob/living/carbon/human/proc/lick_wounds @@ -242,6 +252,6 @@ desc = "Lets you shift sizes by yourself. Remember that abusing size mechanics is against the rules!" cost = 0 -/datum/trait/neutral/size_change/apply(var/datum/species/S,var/mob/living/carbon/human/H) +/datum/trait/neutral/size_change/apply(datum/species/S, mob/living/carbon/human/H) ..(S,H) H.verbs |= /mob/living/proc/set_size diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index df24c54e53f..989746c2a59 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -190,10 +190,18 @@ return TRUE /mob/living/proc/update_sight() + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) if(!seedarkness) - see_invisible = SEE_INVISIBLE_NOLIGHTING + SetSeeInvisibleSelf(SEE_INVISIBLE_NOLIGHTING) else - see_invisible = initial(see_invisible) + SetSeeInvisibleSelf(initial(see_invisible)) + + sight = initial(sight) + + for(var/datum/modifier/M in modifiers) + if(!isnull(M.vision_flags)) + AddSightSelf(M.vision_flags) + return /mob/living/proc/handle_hud_icons() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army.dm index 8cd7a7f088f..4c75b5e43ed 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army.dm @@ -112,15 +112,13 @@ icon_dead = "mouse_[rank]_dead" icon_rest = "mouse_[rank]_sleep" -/mob/living/simple_mob/animal/space/mouse_army/Crossed(AM as mob|obj) - var/mob/SK = AM - if(istype(SK)) - if(SK.shadekin_phasing_check()) - return - if( ishuman(AM) ) +/mob/living/simple_mob/animal/space/mouse_army/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return + if(ishuman(AM)) if(!stat) var/mob/M = AM - M.visible_message("[icon2html(thing = src, target = world)] Squeek!") + M.visible_message(SPAN_NOTICE("[icon2html(thing = src, target = world)] Squeek!")) playsound(src, 'sound/effects/mouse_squeak.ogg', 35, 1) ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm index ca1a9bebe81..8825103b197 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm @@ -19,6 +19,7 @@ //Shifting in if(ability_flags & AB_PHASE_SHIFTED) ability_flags &= ~AB_PHASE_SHIFTED + mouse_opacity = 2 name = real_name for(var/belly in vore_organs) var/obj/belly/B = belly @@ -70,6 +71,7 @@ //Shifting out else ability_flags |= AB_PHASE_SHIFTED + mouse_opacity = 0 custom_emote(1,"phases out!") real_name = name name = "Something" diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm index c2c43161e02..e29a3828ae8 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm @@ -6,7 +6,7 @@ icon_state = "map_example" icon_living = "map_example" faction = "shadekin" - ui_icons = 'icons/mob/shadekin_hud.dmi' + ui_icons = 'icons/screen/hud/common/shadekin.dmi' mob_class = MOB_CLASS_HUMANOID mob_bump_flag = HUMAN diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index a0a6d859247..c163efc499b 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -299,3 +299,16 @@ /// A mock client, provided by tests and friends var/datum/client_interface/mock_client + +//! ## Virgo Defines + /// Do I have the HUD enabled? + var/vantag_hud = FALSE + /// Allows flight. + var/flying = FALSE + /// For holding onto a temporary form. + var/mob/temporary_form + /// Time of client loss, set by Logout(), for timekeeping. + var/disconnect_time = null + + var/atom/movable/screen/shadekin/shadekin_display = null + var/atom/movable/screen/xenochimera/danger_level/xenochimera_danger_display = null diff --git a/code/modules/mob/mob_defines_vr.dm b/code/modules/mob/mob_defines_vr.dm deleted file mode 100644 index d2238bd03d3..00000000000 --- a/code/modules/mob/mob_defines_vr.dm +++ /dev/null @@ -1,10 +0,0 @@ -/mob - var/vantag_hud = 0 // Do I have the HUD enabled? - var/flying = 0 // Allows flight - var/mob/temporary_form // For holding onto a temporary form - - var/disconnect_time = null //Time of client loss, set by Logout(), for timekeeping - - var/atom/movable/screen/shadekin/darkness/shadekin_dark_display = null - var/atom/movable/screen/shadekin/energy/shadekin_energy_display = null - var/atom/movable/screen/xenochimera/danger_level/xenochimera_danger_display = null diff --git a/code/modules/organs/internal/adherent.dm b/code/modules/organs/internal/adherent.dm index 2ffb12e4c71..1df735f5a7a 100644 --- a/code/modules/organs/internal/adherent.dm +++ b/code/modules/organs/internal/adherent.dm @@ -117,7 +117,7 @@ name = "levitation plate" desc = "A broad, flat disc of exotic matter. Slick to the touch." action_button_name = "Toggle Antigravity" - organ_tag = BP_FLOAT + organ_tag = O_FLOAT parent_organ = BP_GROIN robotic = ORGAN_CRYSTAL icon_state = "float" @@ -156,7 +156,7 @@ gender = PLURAL desc = "A lacy filligree of heat-radiating fins." action_button_name = "Toggle Cooling" - organ_tag = BP_COOLING_FINS + organ_tag = O_COOLING_FINS parent_organ = BP_GROIN status = ORGAN_CRYSTAL icon_state = "fins" diff --git a/code/modules/organs/subtypes/shadekin.dm b/code/modules/organs/subtypes/shadekin.dm index c7594dcf950..9d22d0e57d7 100644 --- a/code/modules/organs/subtypes/shadekin.dm +++ b/code/modules/organs/subtypes/shadekin.dm @@ -5,6 +5,9 @@ var/max_dark_energy = 100 var/dark_energy_infinite = FALSE + +//! Blackeyed limbs. + /obj/item/organ/external/chest/crewkin min_broken_damage = 20 diff --git a/icons/mob/shadekin_hud.dmi b/icons/mob/shadekin_hud.dmi deleted file mode 100644 index a1340290e19df9f16d7801b3bd3a370c0702571b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129969 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%0AkhsIqFqf2Yk0 zA{RtodPYY5t0O`14G?{R=Yg>vP)Gn7!C^SN%TC<7+H7xse+lToSwP%#C_bE>o#BMN zsc95Y$Uq8h&D17*`Em=y`}+F&A}HAbN^MnXLP9~YveXrW)6F0&0uU}PD&hkDrkTL8 z_~%boYip2+BH%rMfPfImA6=hp@D%}chk}xFadovDpc;UZ#l!W{#^Y(H|A($KkL!8g z_J5`=5+y@2Rg#c2AVZ{7rp!r5RHThf88em?jgqlYQDU1V^Nuu&3>gbM4U!>S$xx(z z&&4^9dmq1h&iUiqdp5hi-_K{g*Ltnj>$TRK$GkZu#e(8V8$?7Yftfw?mU?&`IC5m< zq9?mX=`3HlGIsJ&a)2`>f=54i@L)ic)`krmz@iW`p|{<-b? z+yGMppo!>Fjhi%?J2TcgScC!+k_$A6oxS~bkQmVE$*EZ*;&O2{ z473^(KbhgZfsW6wtOyPdSM~MvRqxz6J}$1&v}w~k^ODwoA3&vee#vtawN}oUXgmBR zJ$-#0Bcn=dmwPW23=68&)-_RIRU3G_Ugw8eC-3d`l^HRGwL{8Y?agfQljwW!Kn-}o zndUfRHW}m5TuCWo`EHIJ!bx^{+Wv(mPp6`wyp3$-O6BqW_eSXycg@}zZX)U+i$r7f*HfUgz_ zAvSvLoH;(g?#WZ8SgVyg=#-*(QXh+ef-cDxo}NZDYO&b^=!HPaq7(Bp&z#vtGr$QU zSgpxxbe9HBNjJ81-Ef05V5kx5wR$zAPC#&QH)G@NP?m0Y_6LqXQbH3G5)vYPmBf+z6q)I=c!YNPo4}VDHgtYlg*(VwEkN^9tkIT ze^iue`h#Le=nl>1Ybh9Dz7U&k0KiLs{Y9T&b|(r=BpmlNur39TqC=N1nYV691W>?W0XP=j z!bc6H=0OB%4ISEBE`mp{l2`PbGDp(8FUOxd*G+&elm(*~2IFJZju zpXXXSI*ow`laIdSPif+UKYZhXX&M-8Mdw$Ac(Ar^@*%l?7$^<2b7%jc5i@3J0CYL6 zJeZz+`_AX)<>%MdcLc*AKt>w5{zigw&~I1h@15$FnBZArQ(RJ#@hOhV7}z@ADDoaE zno8paWY61fahOejmc_-zLi5vIlP>u3^s7<-m2s^4WFEzJ)gJmvaHO+*w`09RuSv}1s;Zn^&me#oBxlX zCANV$nT3U#{rmSX-aJM-TsZuKwI7BO4ZxE4BS*Fr7rT&mc$q+V&}aIG4PS>``}Vds zhg4Bn*}B&*7`;?9!W`gZ8U~w@Fv!`rZV3-aN;Bakk;sJId2x}So$&rqZZ2Ax_JVI& zhfJ7_)Aj85ymIj*cH{jvQD^%Z4xqfB&^Ac+<^@I^cs) zv?QvvU&@Q%N)Cc@Fgz@+EVkyf=-%93TU%RERRu=cjr1XhC~0+-RphORormM%HgQHK zPo0`Up*VB#VpC~Oh71|f*aA)ya?}D^gpRBH@4xnZec>H*@Sv8_*%kUG^{;c|co&JQ ztK2+&?2bPw{$mt09N|fe8T|V&bV%1n$ENZ>)aYLL_^20JKE z*~rMq;iNtFl3xMw)u^w_Ff}!`{4>st$Sk#=9!wB=u(Z@4cp3U^#z{eVoHx1!FiJ&X zN+bA7>o*U{Toj3J`udBODyVzcHoMj^WJq25EAQ=f&9<6n*H;%$@Thb3u2g#9us0io z&uh-$>;gWqfn)=M(BRdALjY_X?()2ZP4rWfCr-T1F*k~|)zQ^0e*b>l{P{gV(#~Yo z=Siz~knS2bYJ}8CPcC%P`ful6_wj;ZNmm>doMFjdh7prIa_7$Y<%2uFdwjA4lD-iM z3F^P({rga8>jn)P(D+Z9IMIhzhJNRSoijX#1_*kC@>0ST*MK;U;z9(pgoyU&#f`z>afJ#V6;8ZRxz1h~r z#zyiJKRh7HI#@E`wNwlNCBQzV=#hVe~DG6z1mJF1v+MeGNDINb!7>ea2b{h zIZX+xPDXHz)Ns14!i8~k{?@wDv@B0mZC6y z`S4$ZcW*e&zIlDENpJfT2aX>P=9I&aMnY#3IvmfIjaPjr z=&rAC+pk+#_Ii#SZ??Lo2H9L0gpmH{ZE9Ao-Ow+~2z_cTU&{5??mi&A+)c(`erR-D z2lE0=DS3lbGlf>{N z3lK8qoS!jz+&EwYO&1ym`c=`(mpTQClKXkv!bA&EO2^K66WfCwcJvuEaA3fPLo}9jG^9zC9V{NCt{qSLa z{@HmuckfkXL@EGOyWo#-$So>z?qa?{ zU-!F}wKbSp>Ml=(1_LQcujQ4pyD|7f(rVvK@FvmxhNL-fUa6A#jsFf-l>!3~8yyXz z5Vs5Vr`iY3SmKMit{| zQV`(7mM?E3cxmnm9?#r)^F-s;?$#~ilO`fCB>C;zw`n2I%)i@(U>G-MO!E~hR^&tt z*#k(U08lCDh1(o|)a$~Xf@JR)upGfp^@U9KeD}ByxaQB(r`x*@48wSp>#n1xr-sYxf-dosYl>&pCZCNU3nlpEWMv6I(BijEUJcE^d^ll${LlIi@7}qx zx`&pz@ZCG5;po4sSFaYaCVZ4)t5!V>4OOtBC5A*Zh?HSKoqy_(( z1Aa5ct%c~Fme%O9nwRPXeQ~InfDRWP+Ie^tT>)G4mV#0xD&{7!s+T>V5ji9 z)F0^fPQ%tk0D~a<%3{224E8|JhuZZjg%YOQ9=Yzcucj1P$ldfylR<8Yi6*=%=34x+DusKJc2j8 zmJmjLd=wro=#QpU3|m5nNh$Cd6aVdqvXN$V>dce&5|{|F&*zR9(P-Yhc`aJDT>7D4 zD1AUGAnebRC)gq?x$1x=NSMf+!9w*qCruA0?Tl&5JAm306Y>1xGEbu5b=N z4Od^e*;1wPKhH038WUff8QKxfRpbTQ!S;Qf4*m7lzK95Q;#z>!65uw$?y_<3qXnfT z!q=bI5Yqy&0njAiz!5udyQ$SbhR_gQx6x_PiFs{BBmPvVi^-FH?T?q%vOD0fRjnWl z;qPm(rKB1>YJ?hF7Jgo01!PL679p{c3qL*zKlnuUJc16mZk zv}ln&37Zllwu9hcB^q$;K7EueRBqh4V{`h+GSCa39unlhsZ(3|VCX?;xdb}dZurcZ z9Yq!p?Ww|Y_c<6MeT;3ZzJL2BoGj8>`lv?m$7YacabukKR|Y1s>xJC5>IMZB{yJ#+g4i}K^jHX?quYo0x9=84_Mv8RH zV|0zw;_UXb*I7_Wuzd6F)Y`PMqHh4F(6vG}BGgehM)#WrvkLiP!%Kh~p$A?H$^+OT z@f2dqqt=U{&-+C#7JEgzcAGU7&DMTt;UlccqI^rV$Z4mY=GE8zAZu)q0*2WG^3FW_ zAO|)Qci`;xpW7mUoV341)~8-{FmVg`BL$ZN)DtSgEo|XbqZASYAfiYp)V>+%=@a=A z(%h)gqgBVnldaalMUpYM(cw{k-@JXR-M4QT?gm^Ypq9CHwKY@;Xnyl;lznu8L0%P_ zq*Z|0Z#%Me7GFvJ{?8CGB@)&sUfr~{8;07XU0LxCx25+joZETunDDO{4I=2P!S_Iu z_{78=xV{5S8@bvzP>pEUn>1-c5j8?xvpiS`36rgSqZ>HEox;K0Y;TEZ$R4zk)>0`576F z57Vr48M?*~nVzW!G#AXgRscoT7oClIxv|1oOKn>EuNp0g?}Fi;Cd zV%)v~^v+0&u9!bUOdq~k&Q}we)R1~qm@#@SWk{T(;OCN*O-+jftMW44%iGN<=c~@c z@k|UoK%B!aLenGKG3g5n>v-g%(9lp|f_yuG4dsnH&F@ zLjmOR9U51Tr?A!?YMT4|;{7T?O@(k5+J5~vJKG?!P$k!WKAq7ZB|AHi9{P++Msv|3 zsdTIHf`d_kLIIm6G1kZwJV5{YojY6U!mDVArp%f(4rLFEi6iEdt4LhwFkIQV$rvSbml&{B%6{XY|I!I4) z1;?3pi!4psSXosiqa(a%+>s;4k8cSkfP!@f2Yx)w+lI`8rp5>}@zV~z(X5@uC+R$E zYu7DUxG*p%NB}I*n>Liv{Ik(?T05?jX69lwYI^_^;mT>`UdL=uw7k+qH|eKVDND+?QhU3M-es!xKNkQyTq_OOjFmE=NzEv_Af5G6Jdn@wV~$$Z0Prm`EiF;7dAJ2-Om7<~@)% z=+#|~BV{_J>ecNyFwMDh{XqHYI-O8KXg&}(ffDy$yy#nCiAu4w@Op!vDo|Bt4GqSq zwWxH+uTXyktd{hip`eX$zBjt~K#C0f*?jm$1xN(x1^}@g9kb?6!2B3BJ_`%YbcS)r zmZZ3kFk{^meSazzR&nkmV+1|oScu&Vi~k<8e0e`UqFQ_p#1jIM(qxOyC%rHQv%1<# zh%TZqL+>WZB4JU!G4EOuGqH3eHrAH{hC#Xeg(@s4yTPiQwbgaCg9PMCmOy@oCWy^- zcSv+oM&NN-oNU)C9#laAfHmPiv8FCLEr#J>=J8O+EU?nKX0_zUh;TtyLtXpn;rI>k zh*>9x-b4()bY$Jh;V_^9ZwBG>XER9|BR5g(2=TTrq|>5tPKB@m?$d>*-`PTq zTUuM~i7z(&tEukg{Bysn2`)Q#PW%kG^fG5IxoXWLIc|S4mCw%HjR*Wj!-fs-y;&Zc zeUau7g^ZRRmf@E#5--`vBM&Mm+O1Vou7mm0Q-^qk&*}fT>4AxQ=^K=!S^n)eF&9vw zWBnE{WrJqJ|LjDijYs7OAyUYy92aqTM%vnN4Eb&AYAdtE-@}6vZJ=viMN_dGV(&Tr z=>Fr!bSH-}PXz@v=P~|CKWJbe9vZhy5P>n)X1Hx(3Tb#?8L5n2HgDd1$*WSkxqn0W zTlq<35W#8yQ&1`i2iMNJ)ZV9)7%knobLX7-^G5;)Kpi7a+LJ>RVB?`(P59CHo3FzO zrVn^RgCI;Wwev$#RZISEHys_Toe2UxXhl6;O}V>I^V@bK{B@BHrm(4Au6=C5q1E^11y5mzXG>e4z4#$mzv8H=v| zK+C+e_NxJ&DS;;t1j0%oqEHkV1_^||RZ~^n_|u3$s>bCH+*NJUCLJMsEaer-PC*hZ zvXccek9q!k5n^H6f3>zCidFircWX;w;G)cf+yLL57 zOul?Ml2U%)(E>yQw-b*B!`#8gp?a@exe|aZCR0vE_RX7?923|OOfI@NvwHRJeR*kV zb5NdiW#YRBNSBwtB#C3k%*9hibR0OKfN4-rGWsF=IWB5KEykTb9Y$sq%N}fq!5(%h zw9+h4hi4xDUxBE%^UQs3nC6)aDUDVe0Ba|#9AuneHJ%_^VqnLrgegz|{8JArdAC<- zt(2Ad6xn20q*4IHL?@^5jK4t4XK^^;chn#NkJ zBz5xI89$i~{?AHF+XU8nbvI@L3J3HneD7Ikb^4?{YBp4pNSKTMzJlPr+S>MMKH~@2 zrlF=M-GL^_rfnVX;-U@zP>RSZ{Tnb?+8{>*InbZpOi74rr=olrkWL}u5gTcQlBrvF z>2e1q9=6OColnvCIwPY!@q*Hi(icFzOKZ}zXEUBP4Ud&_66cDZL2BlrizgAls2FqS z&rc*u+Vz>Cqx-TJ2+29|`W77gb)*U?bR*p2~;UiAq8H!1Ri=v%qe`lja8_6TU~Qkt3&Ip&+2h zg^&xtpe$5oDv-DXs9D(Hgoo(Xtr7eU(3q25Ki9+iOL?T;k{x5>ckbGS@oYE{jy^=F zHG!`2zw?q^a%ZhxJ%~=hrH2L02Gk&_$~7?`fJQ`3a&*ig%bdwyBt8)k+kdw}bqxyX zH~pmjo#>%s$(;x*eCEV?x7uwWa2oLtpqUOIKD-&Lp%8>HUZ_nlm{M|1ow7Odps2iD z+;47)5_uUe&b((Zn0VX((`oybTpPV~sc~4Bp)Q}_K9X0t{`*RyG$o+0@BN%VumF7^ zf-7)l?>%{vMf#uzR#msGSK<>TjbQcLyxaNhAPdMki-cRR+cEH5K98QJr6>-__qt^&h3P`seFuaPaL1MKYj?40xJk#f!>0T6Zo14%tfu%>z;l4 zb_S+C>UHjNKHli*(>qXZQ(Y2d3Q_@w4=GIB+x}MJl#D%4Z)-w0!>7nsghM1r`|L0;K zGdd@;SyaTUT05jH@!%(=#u46R3kJ_uJbsupzs_Y+JqARqFWCMt*S6Vnut zLB9jn^LqK<+)jIU??&Zm`r9Vv#Di$sU_T*Vf- z^LBg$yq}fecVHcklvA_*$^*itjkS3VmMtKnI47Va&QK(I~1@{_=(n?CL`20B@hKRC=O4AHZn84k4I}_wZ zAC31n6p8|@7lDpV6UTEsL#pMaNyhf@*d_xR4AkIo?A0qs6iqX;9CSRf2*M%IoOuAn z;ZFhs0_1UU@TW|gv~m0qwFk@K((!ZifPy-fY~S9RFEkPYNpwgixL+84xkGV+s-o%v z5z-II)8k(u`QyTp^u<(o`iE>deeCvH$gN1uiJ0y9WeE=Y7z{yfjE{7KM2FGFiNYWP zJ)%j!etvXteUodAdCg=(qd%VZqo0D;IT^9-9AA#UDC1xud>p?AdxW?U!CnXl!I-u9 zL;6Tk+(N2ki62g{Y;~AUK23?F^R$j92H+pC46M|NZo^8rxwz?!Gkn^?$00 zjrQFp&JAW=`Kff1Cl~@Mgs0b^ezq|@|Ki1`+zn?j=I@i&NoiX|L;!sYtq<*BWtlkS zO+6_bnA>j}&}TIFvFkODy#mFfKi#{hLP;y5%WX=NT154|uC%E%x&C`{@VAfBWVq*Q z4_K6^kfe8h%=qzcSgt5!ykCEkFSLPl2XhDPY+8;&}e1R7zsGuQS@aYDPQDUxD7c0prWHP!p3?r35wmVSY zfn~g!=gHn(y>ct@a*m|&pzg#%*+KQFv~8OKnCPIcUdUj7Bk?0+`Nh4?%8vg3(lT+K z1Wt}fu$Z$*LEWUoSe@3Cp0t>{Pd%i#^#BW*aeXW6j^$bwce;pkh=~$D1U~8-ws72~=K>Vdep`O(rocub zPGS2Vzj4^Lzsi%MK0?t}UP!^@6&tIK_f5tsd^N@2!Wj|2k4j^7v>r=-&gpe+5c+>q z__5JuMw}&RafPJ3QSI8b3(Efo7`xZQhe8gCp&-K^AQ3!5o^*H|CV3l2#z$!n8Wf4V z0NV`tDh$%Yhv^98Vh6=z1Pd-o#OTq@@F8Nt7c&~1zKq&H4aY|uf5AlXPvfDVXtboO zE@ocR=i&3il}zQyVmOypj8eUj&m zyLZbl+rVgw0~LUhap?gJ0>Z7Hfq@(D2p9cwYAoCndTQL0cQr5()>msQDhwG;woqYs zq@Ann+BIv0spm5)a`kJ-v5z;uCz~J1E$VdhVCTX6M|`-tNk_vaxQ~Wf|2wv8j7+j~PV`@O z_|TqbuhahwOvrF@wNPzqrP5YaX-wNm6IFJOQfs_%N_6{{YyYk>|GLJhuIfbh@3Yp0 zuTQwUV*S^Ga(LVWP8z=LS*xRJOcct=_f7bzMkU zrO~ju4`D30_?Xdtc7WduWJQb_6b9VD&iyo+G%1d$ukAsd6OTGQ%*0L(4WzSQ{-!k! zM*$aL6FMTR$>l+958OYq@ZVm5-s*TYm};Hl;i0l@*|MVb=4NIsuJfv2zj*_h-Vrua zSV#p=kA({tmY~+Z#2cgqn4>9|EiD)TP%Pb$!)t5qdcUG0x?XZC$KlKMwI8l#(K1l? z^PWCEOL_CW!Gy1(o0}V-WRmj$jZpEXU>=K%>;U5=i%S0Z;>T8u(r3u4 zK;D|K$@R+DsVBE(aD`#X{QOAR59YH{c|;7grOh?Qlxw|el_`9G@t`sWv1u1sc2r2= ziobYq4=YX@7fy?8EtYRdlE)vNWhfpNKAqkkyb2b?rro3AYXxBsZAOl)c@R_QmokSr z_&q{o-Wl>i;13M(4gQ4&;MF6vZ9ZVkh80ZFx;i^=L_^OE=^#xN9R})iFll7$jVpM&z+1@U$ zX&g#EUg|3&daJg*?WI=$r!u@zi2jGq8Di%~c6JJ(&y14ZAlCs0;P#RZR4saOEs7iq zUV{sW!w{ODZbkBBG#2nLwH@SodBcyv%xR#2Qr9hMm>)lWY+1OLGfxK~PA2SQu+vez zh>26DT4TSqx3@nrJ2{$Xj{(N|%ye8HFgDj+uY{B8;pOP-NrTl)`&!-GW2LQn$`bkj zfUFW|<%_0>gg=*b1`Tb|$qxYn5(ABYxY^ea-t}vXbmQ!LNt=$4WqokswjDb*oj>0n zwg(NDBP#Y%6So|!aS?QS^1zY85z=TloxF;gO!6$i+evex&zJDE;YT61lTjH~e)Il) zMrvw9Mv2G7TXNxPmo7g=Sp&yHi0;_f54gGM0hn=WyQgc^_>uIa6n#wwA*mb_C;r@3 z1bUE>0OUusXc!@U#Ni-x3N3C4rJ+NI!eYsC9XK(+*XMcKba~94Nl(3)Km%|p7G+BFViU__=8T0Z|<>s05G_8|yS{R-cB4 zc^H0*ZB@LJLqnB`T#SVx{zDU|7k!|iNUBIxV(fcAG&c=-K4K)M9|s2qu|xwZ1TGU^ znAR{c{dwZVTzCwZtNQx-d`av0$qo1bm%ZzU@u6v#P(U@W$OI$k?hF`)bwSE6-}pWO3`5q%uG6tI#GMJ%zr)#x>Ednz!yj{Q%f5qAq+ zgt(VktzqU>;RBCBR>K+p5&@Z34E>gUF;A+S6kd#}Z}y_WhN_yF^3Ppo*Y#LeSNXaA zk23GnC*~z#-Yxcw(#gxq^LTT=I~XX9aN-Tqs!c&>Vr+pIC%#9}5uL+H`@}z<4fsVt zfM`m}%WWwh{FUpjq1Op0PODf)o2lt4DE@QNO52$|Ahm4%YtJ8CFA4UKiHR9l9y4^U zy<+gQXU_(4Dk;=(liOhZijG`^QKlK^-9v?nu8N%!2oIQb?We(*a5o0;j@pf(=|yd| zjWFEEJcSec0m#CZ+-LlMAw#6URX*2L&203|)^qUV=X5qD$=l|)TtM=NI#fSAL& zC0j=-D^(xIyFQFb*gA=!EttRJhRYy_AXFx>WrKsnV77c13K+ixKLIog(+L8!5m6Tx zB#FN`@A9%9vT2Bl-R_PBCJS^ghS0~rp2OoJ;rfI6!&yZ#X_D%Ule-beS~DcZQV~7} zKzRGMZDJ9YvB({|<65t744anm?Ac6r4J0ku;6@Fg_|cWzp}xu!pKI*NycJP^#X^jD zCGCA)Y#?NtR{w`eUq3;qc`E0N+$nZAyIyRBIDF-b2E_s9`FD2VJbk(sp%CMTZsYCF z&dxxxWhAbmwZrVAPGWkYiKOI!>ga4hQ;G2Rm?ttCoFQ}45YYhBcw-ibAZaU^Mso@& z;MrJuNuk6VnxkZlSD3O6-OA7JKr@Y1ney25!_}|R2hyOXWHMXWpR;FMTR5T;h*kOp z`!K;ZExVZM)&32o!@y+blP7yPHKN&>)T7)pc`mYe9A!D{!&o zy{)nrkbzFdXm}N(cA(|4sN={3(UA~0?$YAZ#xZB!lxbj`V}Mk(Si87fz3o9b-x&rg zBmYy1IG#*aJM?|*fBah-ieUO`*f?^?TT~d;x&g+KS zp?L@?aAtV8&zw1P{pQUeP7pu}shzzT+i@H*)dRxDZ{xCf@g4SM@%+o^anY|`_}Cw{ z>W&Ao)~tDJkfR5+rb3ii(Pb^sn**k%8fZMeblfqP|m71i6P8W~o&DB}K1atx{$d zeN+9{EM$^Vxa2Av90s-X*%=wxOta-d_%>&lWXrj02yd~m;29y$iay7AMN-}9Xi$b{ z3D$@rsX%3HJN227g&RTzO{0P=Kj9%EyiLF3riG=>#LqFJnhLxn%!g!YD)vU=<#4=Xb2H>L4zSSaVmGe zF?h)~42!7k*>jncld@C!0`f^5DY69OdWqq2@}WhjfFX1qDxd;i7R*Nu#=Zxs;u{~| z-J9V8GNG29Ucl%by0X!$z`K5Z_*8}yWp(DXQ;u-kzafL%xDjxmO%yZC%ou9jKZTHM zY}{Ib1dG=u7|0ClTvuJR1uSX|F#;2~G0XlKjWC?FLRgcc`l`szI6^q~vPup9Ek^OH zaip!FUmDZL_)V-oCcudE7`4mTC>sX;7A}l$1IaAYi}35LV@&6(AnA)NxusRt=FjfI zGh@*r?rzi@P95rf;)fWRsBbtf=$jAT=!@DsmLEA{WP+6Sv7yBC!O4Drof zQs@w;!>da>3BqB_TygAi?4z9HY)YCqF6a<&Npct)$YdyuGiOa5Ul^_rSrh_tWXxqm zwMN*FD8|t_$n0!NWdn<>n}TSzJpF|E^69AV*wO|oC@U)iaAjX>YuHMYyJjP%P21x! zPQlOm3EhwwocM+^%3^Py$>;E5jj9)`gQNq7)G8*E+eR8&Uow{CCz}_55@aL%DkTM1 z*K(wowei7=Ab7-cw`EsTu8d%z#6E^Mi|A(nSpacO}OM)&H2u0=X<50ZXrOZ$4Oe)t<`OJzvQ z9zBv>9KZHII6Cfk@MaMg$wj^c%yH{xJE&bFPd_oi;#T=rA0}*AZ`l%^YSABmWF&`W zEN0Bl5D@|bI@`RyW`c-#Bw6Vwg?#XP@eyWU+BL-M>Rq!v5xW^zOf9P>S(&l-5DO?I ztk}m%kzN`@aIW+55f$Jwg|Oj}q7$RSHk_mLIP7>&Om;^8v*d`0tP^oDQ0gS*%nEcB1>$M}hQ zb<=8rnO$(Ri%KG{3~*d!G%F6nWk4q)qB^;FHkAS>YiDOC`#$TM*OQ5x)X}t0qM$+H z)b_50?~kr_%4~Q~Vc7R_6Nd5iJeX1SqXok^Bx{063bxT^k@5_AG)lEfty(n|Yd82y zbP*B*?%7f@Gdh#s*|Wy@r?%no?lT5&C4~}sP`^)~d=`px4y0uUc!O7AY_#(Zpy=Rj zn*;5KWBZLOc6x1Wu3$_EMPysFNCqfnjVFscicxH({sWqqetbC^Xm^Qt;L`!uFi{KBk1DzO zCiN;cOgBx3AGMRkI(EI76a|>ev@N2zCKw)hf}Wq9NYRDK%yLxVu3&+OJUxHDpR?Jl0VJ3rdM_=_4rDni?Gz?U zpqP=Z82nZ4IA9w(KC~eVB$!24nmKbOjV@nTHuKRFLTOe|vKa=W^YFzgz{4OYP?!_! zU2|Xla)U5S)MUb$g9jVnYUOi+_hhRK2(QTh9fQ>vlUVrHdeT#D9PlfG=Xhz6tSFX! z5UYnASm92bFPFZ1*L#3J7BV_2D$R)a$(7hJIW#zIMIop1OPRu@3S}fJ zHC73_`zG~FBX-6%>ZwBOJ(qZw^=f-=^vcRGShDqI_Us8DX4pRhlHLaHiE-{Oj6$Fs!%^am z5$%&DK~}wMynm|*3CyLD#Be_1^piOI<1z}tEA0WL%43p^z&SZN)f_`9Z;Vf}*bSX+ z3qNb$J8}_erX}XK3d{Pk7yZ6CViftQ5z@#AE6VnrycT>0LK#KGb>YIXEF+~q5;cd3 zG&Z)%_!JJU9wa8F((o0C%k<68l4{ef-v9Go6Ey0w5u+}=W+zHFx-yJhLbkk$oIen4 zi~KFdBlsoYFdRW99S@#bcw3nl7dQ!%l+K(xGdtlPhuLV?t5+%;3<$|d*690jP%oHX zrIJ8N1Aq9tFhdi(y^{;8JGA(XPlc{8eH2TQw?cnSih|LPh>T>Yc|2c;poS)Koi{Io zY-44c>`5b;1k{l%A|%`8J6uoVU(PBx_xuP`Q<3?_^k6`(kT;k;te;0PcY z5GGz&QXrCnfG}yy=^OYYQ>IS!-?ghPEeYfoYX+`UUWQY~C|B?l6Pca4c=4j*B|T;= zSziFF_-iVZQuUFA%mP+fhN?6CH6H?ccG|!$1iBjVnK+gugTx%(tOmVYH{6iM9zhVV z%2|9bh(ow0#XTU|mZ}Y3$oP^bqA7`3jOWAdlW`e0U^Vd)*yd8^7G%Q%zhw_Sa4xgJ zm=*>OjQF)z&^lnWz5VV{BR(-Rjw|R;lVgt-{PQ9?46gwVI!Orj2r5YCI+MXs5OxG1 ziCn%l4EM^F7b-Sg1L}&olgx-i!+G93Yt{lV7hb{}l9jiqYgdcy36hZ}kk5-j#0QjSd?^|>1>VUX~GoXk!NIb`n7d~I(P1j7coGu!f1S1-iv&` z2(2p33PAnrh97GhG)9c|J@Px`%`s#6GiL0_oA9@sHERXdDrA&YdmP<~Uxo5ggbOR1WO`U5XlvF?oIq%mA+da4tLFI++xDb{xi}hQrb9xyE4hCWQ?+`>JYc zBS=UvZqhqo+-Ii)G01`SK&7TY2njZHXlG`U|7--Drx>u+pJA3%TrZxr9R(cy`@ec9 z*U#mK5A$~8sI+*r51yLM9>L)DeP7|*e7|dZi!Y(@1%2cJkVw5@9s~&7WvDdCt%Xf^hV8P@QF=alI>a7B-(6w5L;Lf z1@hpR(~x6?1o;3YBcnYXeKF)BjQjYbjY-ym#)Xi@$11S)X*}OV7c1sbyPHV#;&w(p z-snEB3w$TjcI+a;bS5r$m|IvUMjpkaOPvvso)-qQ$UwmGBz0m!Y-3bq#U?crg}Xqu z#@2F$0=f&HML4-qS)^N7oZ@Pp4};JAHPfnXZq}e26&4kxpn}U51Ku4L6YBrLi71Yi z6eO8EgYOnFfvVOZZ02mr3O>>jR6)2+SwCJ{S}Fqq7&Q3Ynlrqi*Lm?Dk)EV(QXdsW z0(yVa=<8-9(=D`{I|x!vnETovcbngIXxkU-&!XpWy5wEfVvqgfk3KwZ#Is`d{ZPjs z_EA6;H%{b>@Vht>bDW)1;CIB*$>W9&HF8dEEF z>F2joW%Ivm{D&}Qqw>AckhFI&iy4}lws(og8ANespEAQkBP(>+OA+R1koEX+yGYy3 za0O77WEz>R;l&FR+OMD8z3G|0;^knpLexOAr>wC9Xxg#`z#$o-c2Xn|6ai?$z`>Z6 zKCQW`a01s9Dc>4%?7vx4}OVNwLE(O^h?{nSr1FPJ=CSO#`;!Tmtm$Htmm=Y_I}S*r zp0O1Tt&*u1_rwH4(#S_<|%7`s9WUHl&~tYFW~|ODoYhd=`cP3Siz4em-vWO2x;#;{WDt{ zg4>k|W6Mw*$jmZ{IG33M@FXKUlXgM7%%`j5(H^irPKlQF95|8TO(q>I8SLgC05Rqms#9p^BDx62Mw2H`=g(t^>N4(fXTQwY1L^1!!23KG zH~ywrPk?nWyD!#%?aafG@k~f1$Y*ljPYVT)puNxU{WRW`mmj)vWiQ#dHCdj5f-=Et zrJ|!PF#>U)_W{e-riU&FPE)Xi27jR(>cDfC3 zn=SD1^Aj*Zc(JJ1ip@bxXdj#?$ygz`-~!LYv&41ZC7ZY+f{3<-?Zmgi>!NnRACkk* zE`Kw*?%R`O8vkxHQnB*Mz$0uIeE^0TZR-ax#Esvx8#bYcBL}W$tAGy3iNC_ymyHMx z5bLivWT2-Nehl@Lpdsi`w%IU?p)U8 zLSe&w01k+)o_+d&U7B2W+G$t%=Or@YY|wHgCj%MFVxSKX+30_x+LG$8hl*m#nd))cNsBIMnwuoR zgh|!K!Q$4!1_MWql`<(KKVdrQ2YB?iV4&%j6dW%v^~Wb%xfGthBbo~pI&kaO%+yq07Ka5j z&r-i@Vq&7k5D{zw!6y?udzO26OiYU4>H5~^1H_r~_3^4>{||KoxXuI-b_A^5W&A8^ znah$Tcj3b2Dgtg_aE6w}tkFeWN#?8{`HfE7HVj!@!n1*1a18*9ve3H-d#s#UFY3OSI)854y0scF42rB{ZDrQ3mRuS9)L;?c$~r!( zq_~fufC%AG9_E?;c)Px;V>gACrF{>_L;*e&&V=IMF3Fl%HTp6YGj{C<5Hi84&oIpT5J-tGb$UL?mF~>{gVa!L2bOAO+V)<)(Z~rHa6ZsG-H&^bnnMu%S5(|?7wh#wTE1>1IhvMc-`MkgU<&81W92f z8rj0jWRZ2wSFGkd8Q~t##IcV9n0ipEX)a)=Wt{{NpU4qn3q-7^r-;Eh>wU~D;`|-t}0g=TQmg0=3BZX!Z=8CL=DjnP1^i_%@Deute9Rpc!L$(I_ zHZu()Me{Rg@Tqll2){30Od-=CQEt<#Dq7)HIy}Y4)LgqWtSgAtCk824kaJ$ zUALN1q+p~38SElr8AoEZ*)32iE(JVC%{Ha@0Dpfi2WXc2AY$4|;1zSvvb6w}wfO=W zJ|>#liEJVFH^E83z+wRR#~?zRn*}pTVn@PF*Fd=2wrdw_&(c{Sjd>Funp}YJ&e#ga zA!Cl=8MHjvh6BHjTHUm1Q(82n-$ERMl=B7~{&hk-vf-X(|2ekL@K{|COU>$2Id-Y&FRJ4VBK-GwyC6d7?t(9>|& zOH9D8vh>R**PnH09CBm{tZsu@kdyQzKfekA^_0L4{0yn&KG9+7woKJ^X7uh zX>hQJm9B+&dyY7Ou4{)C>=?r2;f#@J#&fsV`cG_q)v(s?8mcyguqX!BN0v*G zuPzBpYlQ27vIq(h=L9K;1+5l~7M+-wI&;PhhPY68WCACq{?hMEQpuDSJ*DoB(dlj^ zczT7-d-v@Veg;TVy!k!T5NLRKz`&ztm?fuvjrzHkS#DVYgWAlQb3kQBcO9L8$6v82 zi1D4v9N6nsennhCVCe?(sFyFdvwNzbrP5I?lDnW7-V*~4pY2d`a*PzvJ5jd~P-W>6 z^C+yoQ$V*Dtj4y=O(}BKikw6>U0W4rBcxX;PEd!u8T_$)@h#BGCUke4Ydjg+wl)l; z-f_mWgI7cPGM)$`9Gg+VE^Ju8g#yF?U3&`?*Fay_@XrFLKt~L3kph*j!*zq|LBpE6 zhK)DwwD3dB;1$j3EwR?yl12z2<_csxp)}{5dm0^Jy_OH$ZX3YGKhIf)Cxk6|SAprj zRE>VD0|?L=%7#7nevryR%5rlZ2};XgCZyK?fA(lPu?D}lb~R&vbuU?+17AAVSX`gH zb}!cQ_SDm3LGWnBnbZcMX-VI*^TAM^_V|^cN$HF=ME0h>TzUgi7a0~Z4NHaUwOk%b zIuT0$LM4l2?izxEJBDO^mI&;;_k4t8vaEvk)WzjrOpT2#c>y#PWbrm=8z)YlybLwN zM1hsxcQ7+cc;FgvDYhxN>v~YhH8uzZlR9h|X^W3lDL65q$<9$-vfLRQU~O#={e80F zeaVvf?8K53Ofx_)j2cT;0+9m5eS=NEGz@9LblMPc3PW&*GbZPBnu*6ycmUa7V`sOs zFdUg+D|`Ye3ce?Wt>VSS@=0YKXdGM8)$W4wEFn9vR05{$B=l0-a?b0lM4Ep z;@*#i$dDH{tT1FskxN<>?vt7qzqodL;pwY3IM0~xVGT(jU1{utH-29K5I(Y$5P}lh z7H^+#3Br_}CO)ICk-*u}+k|?E((mEnF$Y7BSOxIR6Ie3Y1xmonz|aNQ!wr%Y`GXxM zfmR>$8kX1n_zsvwnj1^>P}R7q%}OzWJ`>Wgn4E|%R_yB|1qjCCqXs&g93$PO0q6ug``;bc`Z+`WubV*R!HzL*XkUET%R z18<4@P!KfLg+XpS`)pD14*zvY7qYMH{bQMrVyo};>M$CkU0h=Gb~eCZ$10FEr(~Nr zPvT$evgju%O(N1VhY4Ll$Ak6O3WkT;23sorVW{H+twV;si+DDY*Ty12X%<0z43#wZ zw;b3HhLw9z?oOF76n3l$NmE+IBlPq<*`*MyDPcR=Z2}XA`wo+aI6Ikra%0B|G>2R} z8Wq)<6F{pd<1Sj;7cN-Pdc#NAA4T9V6xFDEH6K8d4=})>0Y-PHnfE2xj&KT=~5H%Mr z1kEfJeK4HaQ{7%&TvN1M=N!&;mkWckvzy_>p=>+g<&ee1ge=z@12I6%4Dxys228*L z(MrJ$sSC6n}mUJyPzc>b0200dgpw+>N z6PYH5cZVr$)7N6<$^kS1R8EmY?2jXakE?hO1mjQHb0NGe=avqh$_eYoH3q!YA{Kcq zSn&4ri3h+tE+peSxH{T9oYihOr6yat@@Ls_m82jYyGsB$?_1!-p%-7EXY8q7ETyN*f=3Z(wE` zN@Dz>Lyajl=(J*`Vc>ytCA*J<@;)Ve;T!hk1v8^>gvXn{dJx?+CsdCC}Ndvx#K1il>h1)Qd$JzODX)(u_QSItod z2nWso!O#j82U*1=+BC!`jddm0DA5%X*O`?|I@SNre?|AJ-Eoq(CYM2T^)6iihb9zE zI5+)vcUZS32Cqr%I_p3_fMTD_oG(4*ThbX>{pP>W z!*9NR|6bO>puWp1V3khM)u$vE*coIV9s_NY^>HFZo-jm_|JQQ$ri*iW4}?F*UImWH z2xGk55>O$1k*Vpl=htPvSvGTNW#+N*P-es7nur6oI0sR?IQ017WhXj3Pr|u#oLY=t zbc2ONHkh`GJt;puMrK&$h|#!53pnFst7gMZBW-1EIHDo;ryz_G1$Q_aK$1C}6Q&5E zlTa)fG`2z<;PDa}&91XdPc8MFkro$bsPk&%)(_}#XZ{Up80G>J4U@rs2;aP4GBuie z#+G%MD`h}JBNT3w8(T7fVcy++_F|Dh<0HU}Nz}uK`;2P%2Q`HTSgw$#r^CAdZUrvN z11EdqS}aDW;&fKAPn)isDOZ)0-kc%IF8Vk_;Ihm>tgV;?DEM+qo>2k1fZ2-;--R>h zI10^z%-gm1i~6brlxU>NKKEB(?-%PWj)-4wVX%XMX`Cc_ovdHwebXA(?IO|x*D1I%Hm`6`WQ zK!06U5J;k=jKgw?G=@&*?yktX0x>dQyNK+L>?JBEU_G{&cD)8~0J)q+S}k~NBt6Au z&4kMk`C1ks5ldnN0=J1Qf>j%XFy{|OsaU1^j%+NZF3bK{w1~E-F|~jsgOd>xOHkTl zX%bkmbTkCHqf~BXhd-q2VEYeu+zKvfL%0=0TLDr@21zV*P4f`QLa5Cp1?a{B(tEH$_aX}o5FSy@9dM|EOx+6q6IN1Nk z6HJAKKP#wYAQ023kOe$UszD;>m_7p+Pzgpyxu%yPHo3L{`dacS*+?5lCA|hGpWOk~ zQwJi`7J<>2g4iYI1gJThE~x*x>`cIAEGHQ#;ODcD|IIN~RaXyS8ja$^$qs0@+{r20 zqX+h8^TAOq=^N<@i6}N(OYaI25jykq=~f6IRIw~%VoVCLoppHWY>pVcc=4$`2TCqx z2=PC-xyel+BKFQPw=!aOVBcYz}mj$gY8ew5cUCBBV`q54jcC5SYqH72Xd=n)jrJD!(DVI`OKJ+v*-NFc!wTU^|; zm7)Q1hWcvrXbVJv>a04%5?LGxlm`SK=C4o-AlcXs!35gyytLa@VcaO<3NuFA zWEp^1wul=j9`LZIhsSULJGhRK?TCSu_0AuzzKFe6b+tY#$I$T8u!jegubO;ndBMHB zPp(zTnzMs+b@!F8c%Ogu)Uv3=wOES5VW@xb{ZI3Zr#5t8O1R>w5QhF`m(VaHu?2u58!2B?k->766Vjn27$uf5d}6 zt6|zzx)K>|$4D!ZyV#Fl3rQ6Nei`XHz~BgK{`z&~Nqbi;`uwR8l>FB<%yfNd#3 z(%R8;=rY4YGQe9Sw|8<<5yWHy2J|RPyJV;Y*8=x>$n2QY)it27CI$brdiQya+-zcp-Zno>-o{L- z5BWC#Ve*T8b=k5YYn4CYPBxQ~+Xr`ecYY0I-iLf98=@T@J(;Z&~(uA6rdN$$|iU0rOAveymaV?zuI8Q^9<6E&oUDlyEU z!~AOzoZNwpSH2rZ$I#qkL90DU2n0N<*&7pr^kjfg;iB1$w-KzU*SXz&p$-Bslq z{~D*H?9u|dxVhOZSa2-wiALwnZAS;d;&C@`Ol74fQI?^2{@_6ivorL z$zjFdmLbKKAMp-y*mU8#0|T2eg{|FkL0TR2;HUGl@CoV(DFp12>PR(V0i0guN2UdN z5o#!;7^^yT?K&U(kxR}(_3o=ytdL#f!g&l@CY*@^0$=mAohkiF$uT&q#jVGAbDKNY zN>fRBZ4lh}9EciT$P`6xunB(sTQpk?s0zpwjc>a^Ur1OpqD-d5ZNO9ALNx&+(_Mm2 z8xojdtjwVaWV9B)0)fF(ZLs8bW#mJ4U^c;ggw3Vm<45%G4j^x5$4~GWPoHWqjlxqP zKY()@(F!CCmMgU|Wlf;jgb{h$ac#GMdjZrx-~C^w_3PRP=8-c_IzhfGVVoN41bh2- z00#*+UVO?0?pV^sX#$NQi#wSWWR(XQYeYyUW{>V6TJXDPZ1#gseVp(-o6Ua(5 zN{*eF{jqHF30XQcAEI?hUq9PSu^L1~T!$K`@d+HbY((SbAa)#q2=lf&1Nq|IhMI%i zJZNRPx-28Z?zh~I9+I*I0uJ0d5jO<7daQ=Yr5feFf#3laHV8pLbNlh_qu#173E>H_ z=$ty~cw{RDDV;^2ykD-G6S@5J3fl+|j@ZKO z8M4`k23hbLO8|*marU8|%56yuvq5U;a%kAao4}d^0$3(X$g0Q^4D3?OoA5tS)uvk= z?wDDM9|?XztUa(VdMNN9QxHvifgFY|LWx-B+BcqCQb8N!QWkbVR_^QApf zs39L9Y-9x+!#Ep8-1oT{Qc6HcOfty^OAu1hW87Yy`z=bBiirvSl0{=8Rl!lF5CQb^ zu=Jv}gVT$7DYEH>>Q{V&GXlx&ST|ZbrPNwIdOq6`z$cP!VuA1 z`32MH;!UUHku{nxmtM|G8DKVh^Cok)kpeJDij9x2!4Km5dlCSPV1NwF#I{bZ4r;_$ z>lnXs+1O{c`lBCOf{fOH(`4WD|EiJZadkfmK1~=vuh5pJsIB89ABK4<50VX#Da0zs zJt5HhkOs1)kAws14u>SZ%$$9ut&V=`GwcM+7M};)D7OdWwgbjA0Xb3)VZ}?AMGI_w*ZN}0?V47_ds&!+S<=_lY~a8f z2xqeKgR)90ksf2|QcJqS=6|cG&YCnyYvq*|Q_leb$hLBiD0xV(?Iw}?VhDkcCy6VP z_$ba|RgN2%HXnaL#NNFKrIrL8+^Wm8fAHdlgocWy;4Xz&+xYpt&cG#CS}EQI$W#`W zb>2Z|BD=uJIdUlhYgtjY*jSzlXBY=Ch`+cJxm06<^!lpa@nbv5Bu~{ zM(<=IU8IQKy_Il6+1lD(Vppf^QSu6e@0PnR0SSmJtpPFPk90#L#Y{om5SVglE}$S+ z^%-NpbSAZI(2-?Vu$nBjJ7B1u`GwwH{hI7=1>%6YFnuwlX<)br1Oc`lU9Nbmbg86z zQZ7}SHkOlXg&_l=_mUka;-2W*RSb=2A6%3(>(Epu_G+U`OBs5zoJJ*Z(g_PqS=LTE zy`d(fLr&y|SIFd^r^3b`i92-25Bh`Y9$YR*hy&&~WRpLqPxh(FIQu>Zmm6ez>2}0c^)JWP+umXss?60lK|-?MQ%YC|gd z9=$T-;lrKuS?nMr^UbC7(rgJ3=O!B@dHJraAcYc?i@{f1zjP z<}yebnJ?eJ-xj4D7{0C|r76Z-kU6*O$yP5ittZ5u45U<759Hyy*ewju_pW*sn%Cb> zuZ`q#P>S@rvOXV7bt65!G5WjelU$Vt??LoH8gdKx7_o*18X1Y<>I6EUD1V9?82JwG zQOwBycoOxDmogj0CzUIz=m>d>FA+Hevf;>rwZj59Z{0e!kMx+_zALM&8BO8X!>*w2 ziG5mEcQe&mvBlrQaIzbkRYxq$rWwHZg!Un$*w9-%uH=K$#X^N4RaK1xZUM<+W_yW@&3IxH-a3>VD?a!&SixBb!0Mj%0IiLBCL#VxEZ|fKBWnUBIBfwfcNUc` z9~_nEz5estw&*o!?0BJxP{5QfbLf;)OfwT*SPtqnwvyWMiax@|}xM5aDZWZPtCWAdyurSRnFiIaL@ALK&0jDXiHn55tN*p>>HVsN|OXtf_5{Z4= zzJ0xmA5Orp=V-tp#zwez;Ks$t^K~i<>T+`}sM*&)=d&{qF~?SyZK2#@(aUo4mB0Ry z;Y7wI=dc+SbSx@2DNz>G@*>u;s2X8IW(&|W^4V?!S}Xp_&yhVjTtGP3M$ciKr7$K|vu8MtuGu^qB0L+GbCYlTh z6r;B%wndpzrYKTrxM#H$2^p^Eu8g@NQj6@xhG2+ELpmw=9wQ(DBy950QL`K!kv(KW z)~*Z%YTnJAJvoLG+2jFr8P^AJB%|jL+SE=iVF+;dW25M4=yQ;X1DAnIJMhJiJ9zMLuiUId)LD^DH ziA-864hLUj4h6v03d~U)Pglr0zRzZ9{yH8T-{T9HENL|ys+hTrS9qUL>*Seo{}B{{ zEEMAopsQDZENR&|%>uHBTRXdft0HZ6Jr<%Jh`|vThRnW0*y3xB#r6?#3}>m(ad=JG z!H4mh5h<5dk5$?U$pMCwDPxSplsu;CQ0q@!asukK?K~LfZF>!5EuRu4nk&k9(Xvg8 zrFNV$nWd%tYH`SY>yJNpBg@i$jmI!z!Tk+|{OIBs#YRKa3$z=u3sHR*P0ZP~Ul#)- z6n`$IqGEOxK^Ft0(4B}8{Jf0-1V|gJE5*!c;S^#I#$GYd@y@wL9TLp9;K1agvOMDP z<8~wmC@-Wg_$y!%`X~f1_$ZCXo^i>P<46|{5{LN}qKIe_w;usa2LeuKjZ_MFI3Jw= zc-W+1Yw5D3OR;ZE2spH+IG?Gc z03spd(D+ni-R79_2s`7)2LMipHk17^2>$#46j;l-m?KEVGJ6eSnadtU0D#f|J&MBg z_HL2A314rl2DUcU@AhcHXK|w z!(rEAmyz6Kz_Mm(IbrkRA~Wh-U?ZMcihCUJL=%nc^gQATNFZRNM zz-D2qUI#4FUnH&WcB}|@8POmoozWhiqhu~JGoF-g%nso$6kLrJ2bE7?No6**1xBzK zC<^<=&ELZzY>>1)mSey0QcLf3y$AjKa$;`ep%yC_mcU zN}003-ITz5661>LN-xo&&>z{KE1(ub9JCK#N9~n%+Ido{%}--p1`*9rQXCfq5St{N z6eLNeMv#}4F|z^9k+x8W6_&WZ{aT(sf({(@or`7+*M3%9LaXN3^Eu)0&y^>Wa$sS3=sBFjY{!HiZx~}s)&p)o))fdO{`Mlq+*K<4` zkLTkFBhX`a<*>9fSJ`D_QL zu6uEQyIS&MktUJ~bwv+1nt~ ztX0kF0m-rUZ7gY4@PA2(YM$&`@B;57?tk-l>B3ZRI9-^)9m7YB2toxdGlX1KG%<7= zQ;~s860@2h=I;|6-QlDvj2FQXtU@hpscb>Djumno7EnA3Uu=n_q#say#Gq`2+QLog&EBKh&h zb5N%QFGg8}p-53_#8uu1Nj0Wru3042>)~Qf>h;j2p9`kF;RcOjtV%C1uL{uGcw<*GtiMSg%(# zX*?5xGWcQTEf%#^wpnHoa9DE2btArkb(*t*=Cc+f44o@^yq&LI>497!#JwX9a%^^A zw=M}#*m6Rd(xngi7`nJtFT7A&pNCkw3(6l689?;t46yw?V z?~{DKPf=bn_?s9pI6Nrh@%*V~eXAV=M*}qkq|BG=9O#o=5hy2JsQoVh1TF&JW66U@ zMx<^-a6P@6sdj3(gM7WTn<3Hnft45%Ug5h|DZl3}SP-g%#b0E6eIVe-)Q0*nY^$RI zI6eoN8{5XIX7!qDWO03db zprpBoT0l5m3~HkURN8G}0ABxX5A~{vBND6Isc!>%1v?;E)1;5_FM=b27o5L2$6+PP zN$z|R&cL>YzAu$lQqQO`lulrSD!!x&c1^j3_BeR;(sX$G$C|b7XIdpVxR^#$LyZe1 z=HAde&ibWG;jNV8?&c#Lu!Rf9aU%9AQvY~=fdW+$XK;HQ_(Xf;Q|!GK9;LscHRh_) z1M#Dv^71#Dc8Pa_>F~J2&!}Ikr9h!D?Ur03!D=o#@tSpDf?mk7`NwWsa0)arF-)VQ z({~Oer)s4TR2mrKkB!%=q#Iveh<#D(GQ|*Pk$yA3&v@^Ie&KtgZjxGv?mKD6rSHWU zLEoIEJgY*Zu$9o_dikiry`t}BA{%8;Xz6-Zv;Oknqqmpu)K^-Km5NT|`sGiXj-){< z|KNi$?2fN)G3j>bI1x0sqVVq@v^=`ZZGuch<)bLGg?0S^Yf-P)RMD!wdI~m; zOsk|4+<%ZR{}V_38$0%~&Urfii)_VARB#gCd}CgFK;0s(J9MZ!{mbInth>miV%343 zx%AhIdM9e?!=TB3MJ5&a3Gmrdg#Diy#bjT-#~vG3vrpN1PiFji zi9Z@TD(q6ofVIi_%a$GEfQF|RZ!?DA#HqXy&kcc_QLClc^}<34KJZa8ruDDyv<=q>3NUKiU&5-k`{3}qS7?j- zqoI{l^$Fz#)Be?<%SkA{nr~b=kbL!7MXg1$hy9Fja?n@cy;V%mzp%20`fy5|w4#p()f#hqib>6OG!Y8S#s!jNq&Dt7}1f#r6LuVQC#`Q-3 zSL`tsG?rmb_*SB|)jgY6DaTd+uq7`D948>Eg$m+@7fP_H$_E2MHHvhx;{+yC&-lzvK|n{UkK5Y_2L`!BjF zEdB=%9{l~Daw7(M&LuWfbwUh(byCtmbMAlb_glkB`JQ{iy;Qg^`syF5i8Rad4vZ#U z#C3KD_WMXSreh6>V&7pc_nZnDx3!ymD26{%a_#UJhWz&O^Ut@$yTts_n#m>}`!1R} zJIzfw5{B#;6bp7_7wr%i?2y))xfv~}z|GgKZu4_v`n~Y^OaIVWbvR}t=mFYaX9W~C z`LoZ)V8~6+UF7=io<%~1*q0t=0D0Ah4QXSXdIo}e==VL$6`&F>Je+(YISeWl@(83@ zb0~3glz!9Ai_ETcRp>^G9scdA$%zlX_G!L)lHic?oz|8wTe9Sc5cbm8XobUno0Vc@ z844ddI9Q#xHKa|A0f~7w^wL@vc;F!^S4m09PiD{-PFS;0$BS!;h5W@p&Ab_*Qq3Cs zHbeQH;+~|}qvD(XVAIDR502PueMmOo-~BV4q1d>|45mz9)!4V(9lIEkuWU~~YVtf5 zB0&pU9{$h-xoWsd2en4E!BnOxkted?MId|ZdtA=mNlz!fuehhAZ$iorg#l^VB4$hilg$c}X-mv%( zJ}Etdjv?x1Z==S_=^QGW<5Y!pLsF6z3R{5S&~zHbD;o~B`F>}UkG^eHE-x_AdH3e7WL+UB(GSj-Eh8-2cB-qYqwX zx&D3pz_;IdCo~>(El&DDJg<36F*mFbBd62w`_@I?zVPDFv;U<9NQIzd;zV+FvsoTo zD_vVYgH6B{&s(tXb@i`39$CLs?uj;ffXv@-_g>Q;&?X3m8O;&WtGOs-e`n3Nu8aYk z&Mqhx(JjiFWz=8syt(+bo=RMNI2e@$9gGhgyJAa8nig$fu}rRSRDY>k*5j5JpIiFnm+-gH z`Z@LCxdVm>kWsG^@f-N=OvWr7`DN>$zI+8FFf`q1oCT6O1t{hi@*iG7ja)oK36SsM zDYrmAr!=J23){uj{nJE&x8~<~jdryeO1t%;Ud`r>P5yJ%!xqnwOhbhlal4WAn{j#( z_Lg-&laf4;ICPV6I`BfC4ej7xZS6W%hO1ZVgd zU-o9YPlKv{1D`~Hh7y-H#QYk5FU}YV@hh;PPJndO|wpik?HWvr~9S4Vbj*F1;uf^E5l4= z5i*+RJi1o{UaMC!GWUdK5Cwg*I34;__2f2#ne?zNBtn|^tgM*eId~-(Hch2Y+cs|4 zpdqMchJAF+?)no6pOQM9-T59U^OyDfYZxlC@`zITZhG*62Y4zUfm~hL*yqaN3maGO zSbq~0=Km$J`BxCs-Dsu!#_p6s; z$3UwqrXRoqsTB%QIVhj*dV29H=_Oa*yum)Sx{@MYjrprbg|ArVHxC{c^1WyFvGN`#BT)7J|bu zqM7zk(2vz!RL%Zfnl2@AdO+(jNFJImFcTO?zB+m8RBIX0AVcJyx_{q$siMqdf~=IC zRtaHc;Tc9ga;S_x2vNdHRBQ%??2P<6COwtRu_uwsMhvD^HS;>QgKyMx|D(1qF#=Z;=1h#orsI^z#$hS>spiT zzS5;vGf=?+R2d?S#(vx&hX9a{ar*q{%`d=%Mvu-+$`Au2YV%MnqpKyt zj>gf4>VMmmJ*RqD!mL<4+#(23lY+Kpj|ISe{^Td$|8dX0&%_Kt6fiA6-Pm|w{&!c* zo;^g_#=)uC;!ab#*N5C3l zdU4^CG^P|uD$3h}PW(R#xZWKv6*cm)Zt3952^3D~&BF^79Ap|yjS)HYrRB(D6VvDAS_L7e7PP5gt=VqO0fd2Cz zHbGBPzI#k=lIRjE5S{&95D-@)fKkq~0ii*Xf~-Yr@pxz6OE*?0ZV=gBILO>{&tpSga24rPL(SyG!gSYP z`$_0E5Vx>Y{U@$ZKbza%Pg&*U;~c~N90&<-+O>D@FpwLomsWlLf*|-N z!8j;Dnl0;IT1^)w%YH%#~z=8qYkFms&1M-da_kt7kM-i!y)6^6{JZ&&=6W&`bLY z{f;XO^2hY9JNI$ZkNT7ycHggU|Jb)AD;1U!QMojQ+mQKE?)RQy41sG~S>O#}q@fw` zJ^0QIt1)f$|ICO``p?!hjP>)D^we=3@L!BMM&XH}6*SSu1i;wQlR)K57^h2QTl-|M zP=Kj+PL4r;oYeJ@&D_1Rpcn+OY1KF+C zqB@EWN)S3To1C60Kd)$!BB8c0FL~lb(WH*VG6HzGXHjNcIC6XPCW&|biUVP0L(u0! zLlZ0(uWMKjGhpxEkWv}v{P|MSYt$qzE?Gxrw%C4`Nw2#ha4lF~iPo7ovIJ2fEIEH| zf!}H(OTKIP+_9tk`jDgJk~C`4gRj+}H!|bOAGd6|u`gvxqx|%VXHXEbEua3JReD3G z5ZBz_@zm*;Hz!00p*YMnCc4#KoOJ;NV=Un)A{$lysy~eU8W2WWXkWD zqJbA$#z-BKzixSO-BAuwG1Z#yoMJ-Sid8B4a4{F0^+}5>C9>T}yItQxbwOE~4eU>o zcU7gg&8Ln{cYq{$BZ|z(OKe}4lO_sBT<@m>Rb@jLzxu|l++B5Xq4zPT69f9YcRxDf z%klQ#k#~kRl%gx?%f!aF>#j&|pzb5U{|Jr^5PJeg&06?RQjy>^*W_#4y*^q@I%~o4 zC6JNj*IpXIbGLkK!zS}n?AY1(i2nf?7P?b-#-Sre3O?|1EYO(R82zXhTXnT!kF%+j zm66B3>^5gr|K+`}z6(V0-)iyDVYYhKgUTkf+sd$L(c>+yG+)*|f6WZx4#0WIo?Agv zVSQ*-zf{;h(yYEjjCj2(;QT8m8}w27PE>xsbJsIu3B!I~@E4a>^*XVR8A3(x08kg5p&9rv2OdH>99`i+E1EDtPKfLhDU*H0@M>J)i!b0z6=*;n|0UHgmIo) z*f|1)ReS2G|9qc>!@ z+mkasSGrJ|B1MZH!B@)d@#QmJ^|ga%>vnQi$JuGEBu!px%qT8Q2o&}&e`-|95MgRn z6zx~eyw%4ZU4&UIHX!_odO*&Mk|uxewClcC>JRL!7I?AMEoGcQ6Q z^cy!@(vxrgqR?I_O;JkA0C|2Rp@(KvjT3=g$mwAlvEvnUs{QuidHw$n@6XFM&R>be zIV3HS)veSDFIP)t#GP=0u>^*&m{wZ<9Fj+nQdslga#KD|FYX-K8PV<8SAW~PKDK## zT|ux4xABQid7x|MV|8|HwFc{VHlL`73van!yQM1lpfNgJV$AX4#3kz(iH;$}@S`MI z65vAY;zuZwn`EjJ&ZsH{pyC8QuOM&TWlNS z4u~Zpix{T*FWRxj)yvCIe();~=BJ?4p~eeicQsF|U)jioz+ZdRj^1_h^bCVyMN-Q( zlAeka=xmQOk9dBaG{KH7>i!1K##36?!4oUs*D6ki}C0}USTf06>d$N;TyPT(GibD z@2RF#?tvTz*4%uoi%uanQG?bU#kc(VzboGYz5`1C`JkyN(tcfviIo9S-T6Dp<~0IQ zwF;Ny_F%3a?5h^3l$~2=w3@m!D3LRX0qJErq`=SILehO$0~2}s8-HeIh^eG;Ft_rK zP$q=PDS#6kwjpaNdc=i&QH)J4u904F-Np<-9}{FQU*_A8u+gEZINCGHGXIX=lL)=- zu5P`AQsRNTe8}T=Os>akju?$2;0jZawUx$-LJp+tFSl;relU^R=p!T%#wCWl`3|sH zywrRCb>HAV-mC}P3eg$z0l9Y9H{S$@6^0l-aA2e|Kgpnor}^t*bg}u0UNJllaw>Gk z9d)|h85THg+Dxx`(|gw71QEfiZSr3j_COtH%t)h0i5XpNS^zDOIO(RW&29ED+F-z z`fRT=X~M8V;pNIjy2OpSqoHewnf9N5-b5-N+s5x2AIqp!9T)jXM&)5cmArRmbI}j< z!iCF!snq><*@o%Rn0zTyrt!fw!R6M?4tP}t533&==@9ToB=7KpVjq{wfCePoTc*Pb zE>syAzLaoP7%*@AuK=g)5(>*?dNtrtFoR2%QuHer55-#9cX`n_VW9DO)Q?;s=}elpKjH2@3h<#eszwLF$i0=>>$9h{nd%59#3StbZY z@I~}(CIEageM4ONA%|cZC|X-LZt5#81%CYZUCWm(L(8v7*Nh?2)KV=|9R6dGmeN>8 z#jSpF{@&cVqEx28O}~3P&EgVrV?>@A5u0S=J3CgCFjKyL!MsN>7l(VIm3`y&&0jQ@ zPqh)Y%LYt&7th|+woERib`YjEBXtJA&mZ4YSX6!}MGGqO5TGFr*0Q%a51P}i=HJoN zT@AJSf(6NMEkB=O_@%GTCqKLU=Td*(J9bKj<>znizjOBd>LZJ6_+shFqHXUhy7a`} zS6_X!-Ycz3mVP(!^^W;U^v{>0;jn>I`_^ofI)Azw)1_Sd)gS%Z|9;?yN0O5VBqtxP zeEjN;Q)j;%Jn@fxU043GeQA?}&JSTfQHEq2osLAozU#Q05pI>V6d!*0p+0Xl+DS77 zotW@&pKuEcyO3Dn_+`e2cPPT*K{LzN`tAN!JrNShRb`rgdv})X z847lTCU6DCenN7?%iua;OjHK-F$A&y|cQrt7ERI9}(8^G)iX{`<#{Ak3}E$*_o(unT;+nVtb$Bq-b_rsEe) z8M<>+r*OjrL|jyCU0i$nwZ14LO1ou$?|sqj336h}MHEe5VvY_N+`y9d?-0%1x(F>$ zUy-O)`}Uzijaemhqap?-tkntWcFyMA`(Y4D&s+{Njlu&&CrU973dKaJwv1Gmq6Y8` z=9G`pXB{qt&R%%mh@$_Y&wcCyIcl{tNtG`b8(rbf?H6MD(Ov02PXoCAt!Jp2l>eGX z+}HZ?ztQytykFsvUK=1#94wH{BGXInOZG77)pzBQ?T=M}i3PVjB+iQ=1$Q z;j+0Jvj>c-iqzPu#iYT~%;l@`J;kgf2-FVe&hmY(EvtFM|GT2{g@vuMzDXwr+@~Kn zw;@l*I8U*SUSEeiWaW30)>qA&zs3v}v2PEV$7`EN4NvRhW=@L-C{RWTJ&l?- zua857mr-Pd_l$R-B|Pe3$>>=*$?z?u38qG+-Bs;XJAd-8o@Z|Jbb-cZDYHF%kbHQW zWm)dc8Eq`ynm%EJ)<~SMJtOvY*f(dJS9Jw|G#ne&q96r~#USD6_pnjVQ6~VXMeo~; z;OJf#XQn=_!Z(HR$YBq4hnCcqILHLp;~?*-79MDUx0bpc)DNY<6FyEzj1fiH*(2~m zB)e@}y-gK0IU-fSj8){>+dv!=b8N4!Td!WsCRo^2smPc!$mcN(=W0yLkAIc{ zp>TIx>)!pBnS*A1y90I?v=2Ehfa1FBTrSyp>Vta^=KAwLgGPSaVn35muLq5d0uvwd zkEF%(bPxa!EI>Y&&3PISUA$gWSOU|-= z_pIWdvzJzv9z1fSDzMJjg}?~q>euum@83C)RQVR9GNL+$n4tkEGdvZziXg_K4R(_f(l9^NF6S(hw7n6k0sBIN?k3_ zESy)2#wI0&LIV-NI1dSJP8M!mR3MKTwDavu4vJ7Py;&$Z-=GCy&e@&Gi>5UC2k+_6 zx(a#9;V+3+`SkVOoB7VZd)`uR=skZ|^1k7>zpX1MtBm#Os={x3IK|Xr!QvpjENUwG&{vw(x34d`edd{G z!eM!8zq!P2?&g^(dG5`zc5TDQAK$3b54=#KE$(kk?ff;Zpf}+##!%YQxUL#v7aEo}g8z|=F9^6c9)sNF)P z|5S@%KN-3@-!Y0>+3Lc!j=c-ksA2Fo!~wtoJ%#d_K4=X3q1)6!+nOo2j~y#~_Nm88 zWT(N%^zy6Zelbl9-ZG$Qi*=W&>Hxy9R?5B5&~`XGsBVi?1;0HNTMr=qv5qAmR%JnW zCFXtb)l%pg?O8}k$gF{~+B4lX<{>5Zb5QVK>~8UN+39%|O3l{o%=P(PhPka;e{-^1 zg4&!gb**ma3F?4weD>Yp5*FlC(IQ9Frn-wjPDw*#6I7h5oh`WZ)06jzL#gK;rqdsd~y-hBDq?Aa;XQ<4xx0@!})%oEei@N z69R7f_1>~&vyS^Yl(TFp+rj`fUYA!@kIi4H~>v z>Vt|_@o)r0TaWyw$ow~vsXWiW_+xURp37HsSENQUxoCgS;nAS((d8qg= zr{ReOZPHVSIp1AX59M-?Oq`)UqR&e*Sucf#o<;fB{EfdJ(_+QtyW@`G3YOi9VgZFf z;18A7E59^>yBQ_SvG91`9YuSx#CU2r`hUt>yH0)Z&KNr4 z)7<#ZndNV^uaj~j#%r7$!_;DI`k_ak|Li@k@tY0+Lhg!AHTlYkhu2r_Db@rzypPew zvv2$rkWUz#s{YUX(evu=y}v2G$oL|ECSN^}T+evD`+5AMxhoEbccHRD_$*5<5KthD zHEHLKu_BnUz>V8}2%!nNbW~o)x&S`IDA`!H4vxOdHz{H<1d<<8qd{YEj`AwFqT8S! zvtfK<>X}1pfH|ZNSzgRD;nSuc9W&rY;(OM{+?^KkY2u>ahC~z?*^;O&oK9P{TB98g zA{Cc-LVr*;d}IQhmbhanhzk{%%17UNE%Cu&gFx_Xm$tq2(4`@I5f2#&U*Y_|u2WyS zyHu%$<=V3FKFyQdr#FYUJXY4L3!C-{6N>fTm!b7bYcJeKCZc}TqS3H8 z-tt&6n^&MRQNILarP|Tp%$q+y#pGqn-cy|f5G@&@wMGAa_95Wcwo0$-w>7O_|INg% zdFBzqWBJ!*+)NCRy6b%v9tj~Hiqok1P(0B?7Y?S<^~JrQo}~*6Th-WSK+v$(j@MMH z_>feqI=lJYSx^ZYjQN8O9T1>2G;N7$!aU6gs-XF7UMdmT-CJr6CImQc#zud^fMb=J! zqHOsU;tJp<`va?C(Jl&rBwUS!l* z#&F}FWUf0X^Qg-0f7r9<5k(L~vzTJ&T+BFJOo9<3L!Y+FZ9vPaMaIkrp*o57hRlNh zYcYT@QvcJ-dp`E_Ep9ZcqM6H=zb}JL6nbOZz400_xY>+RT+jWSSPn1iNUf?r9!kS^ z414*91p^~eIOX1Y$l+xQt$SyFGo-T4&l9ZGhkxg6^cGhlLuw0@K9En=G zp+Q-GHwkPHaxChr*_!&s8H!(!EQqEuP}8n&Cq$hb=mGg~=p?9Psqbn^2T`g1{da6b z2VODYG*&%j=a`z4-q`^o12N-H5KgH$94H16J?}4J6PChup3N=h&Ax+_V(_K_h7cR3%e|Y9g@8J2205SLgbvu{*#Mjt*jUO-)xm zL@8S4rmP60Vj=t&%-e6Ax%S6v$@>mo`(WPLZPk+}eD&AJ79HN+bNhs&e?3yP$JHOl zEW5V0R`Wg!Zduj9^*Ud)#~THUWM06;vwd|_0w(+WTsd;P>SF>P=itfwAG7r!0~@~1 zC~yv~=miy6=y}xO;z;M&X0%(Y`?BTCdG5QXI-*(E60{C1dqpV_eWiO2vK&lYrGTG$ zbz7&J77eZQ_F|wPsvBoVsEJV;_eCpU|8uxtW5i&3jat2J4}xHV(Wi?e`{-dcctV&6 z>S35H)MyGeGJ(*=uB&JW)p*Wc$edK%P}+%Q+72srHdb<{$t|`U-tF(l(j}~oQBS7< zg`zUy^|RLeQFtS5-%jgr%jnB{?Gk+Jt+y6GVWmO9WYKDnd!!t)cGk+3E1#PJ;%-Bw zW3#LZGXF0NG9I~Y?EzsUmLWl&3gr9&MS$bIX<7qH0VQ6Qs_ka~^tIJ?bN37{*-j-1 ze^FH9F=G@dn*8(UbEdAxfE0e6h2N58F2$yTnL`>(DViw1>V(=QW|IZFWEkBj-o3}q4ly&UDU=vgR3LjNiWElF4tKCCG zuXBibN|N!(4U1J9d4U!z256KRKokCii+lc6LOB}J6;w6&wL9gQLNs%|Vb|#b0F|X- zvHjDB?L7Q83S0RnnEGf9?6K|eyI#|9%)kvD)#vcsX!byFv3az3@mh6HC@EY(Lne&9 zM!=-yY2hb?F}_x+eD5Y8uetfeRLPnNfi?ZJ_7l^W?vWL7P+1ml<;1C@X73#|>+OPTxAoE`Lq7`aTB()5nKC&MmE zlMT!h_7NYkl|Ht1_TVh981}Z|B-N1J3Ibu+SY!;p_BdN@-*b63ty1S}r88|Ctk>?a z_w%89p6&BKgkwmzl&PM`d;9HDOP=c^7hY}*dQQQd3|I!h3x6YD=)UgQH`s0?XXY_pKh(bdhqxkc-63!Y?3`*k~_@ zk7`KSVw5B%Mif{aLz%S0_3mBz}EIod-w_`Lc7Wp~TNH zhZvKls){ulAmA9{rx`;RuaBW^JxNlbc4#_PmFD-lMM7G(kuXL9a_V!S*deJF!7LQh z?mEAVf%Fy>_~Ao9p>)U;=DsUR%QaU!cCQc4jG?X6|!<8_EX13jj=csGaauItN*`Fg0$8G2_mWO?I2Y8mSi`)yiRzi!=-(;0POhHgwYs}SP!r#now^fDS%4RIrZ zsAZ_PV3I+L7)#$#z0S^zXXXGP_~=)S4_mIfPFXZ{YJo8LRhLtI#vF_K z!KqCvg(IFG+h)4fdOf9UFjpBea9n9n?xTyBFUw*rs!m{1AL^w3A+l(wO;veqJQkv>7Z!h zu%D%XdZOAJRslCelS7E>n!Jp-^U5n{0;h#{m}0J`UDunWo|JpaxpU_RE(^MkR7Jpu z%SWG6V9*vifofIWFvq0TjIkfDjNM@n&!fr@SXbNTydN{J;0C7|HEI+a7>5t4tH#Tm ze;nbN_zD|5?hl1OI(Kiyclmd@VQeB5O@;L!A6jh-yH9YE^%*g6sqv4QBObW^f)Zdb zWaav};+oUH;*uUBez*azgKr}Mrfj&QS1RzbD2))=Ou43|DDcb2^j=ZgLE9HDY|Gn8 ztp&*)DpwRPTzz_BCCz-3WL{QPdTN5ysmJ$~Izvm$WG)*l*XPlUPMbYDomMaG4Pl$j zR`j|*fdUDnvwP2;fLZN>YR_a;^yIKsoEa;cjVW znrBl@?GrFM+aEXdb$KpSFp(QTkZZ2$4nUp3#$AP;hr3Uwy!5LB`}dKOHX^wowMAz3 z^_5BM1P$X#tLP@3D zZ-p7sX>l0KvovVl<5+g-PX8jjki}iRd>}dGT3YaSiqBv+04L&DGy|`EFNOyCrShgM zeqv?sieLnRT-{xC?>-RN4=dhSI;z*xD|+Q}Qv6)QXSfJbpc?Jk6@iyBRn&tmHbxm+ zY6Jm;9dFxo-pF98H-~WGhlho-H!H5sQ=0@XAxX(cnLWHs)&Wgl|Ld1;L0n{kk<=|m z$XB!|m}?8q<&9mpR~$@Ns8^19-fB$vE*s+l1D2TbA#d$UgCd7ltNTv10{Jb$#O9Dn zdRE@AQRQ$An$skUiGJ7TK(BKdCBxVQCLV+&iDT;b%qDE)HPyZrm?10{ zb`mN}O>o$7mH76Bi6-^b-ytcJuCYEzCwGs^j_Da@iwF^aYhYECCtsnZi^wO{uU^*U zTw5&_}!6y6#Y` zC_q~^#>|Aoo^@Z}sXpQzxY(;=Wm=wz}T%(2FI_M4smVVeatoU~AH z!|$e7q&h^Y{^RP{Xx(=&0d7Eb^(R%>4C~yY4~9V5b7IB#MlNv!bDfWQ2UE3%2LcPS zrg6g8)Qvt&c#6e1+ZTo&0vdNU!@(!U!d2gV0oV&qxUci)1Ww(@n#(yBUCdR-V-r;&EtTkjA)malodDvwyE&uU_>c zV}h-pS$AR;(ZqZ9twLsvo}wo7^FzT%)D&m9>|&n`jx??D99+67jes9x6;VjZP~w5- zo&M$E!M>LDVT-4yFI=?fIrmg1gGEif_eZ;f@P|9iQ-DOAS!G@5a#VW&0;~ zO`kprUn}TiUP5c*UbLKP!Dyyk9|ZPXrc8g869s9&6TklYmA_KGQNSNsf(8e^PrkoH zo(v1pj`_qq6>n0b9A?b7xM2=b$>z%@Ktil8vV4!*YTmxE#gN$eW9L+F92baF`kh-^ z>7?SKIR$#yK(ek+_HgSMTKC1O6HV4y<#)3HBd%;PO7FE{i9;>SC9-xop#o7pP1`z~gjc z>TQ(&K*&|v)6}D*U+Ah)mYvj?1%;59CLi|P4l%N27VA4SEF^0sZvM*SdW7?O*WbX` zNiFZOs2k=G3*3EQjYlNp@aDd;d)2(lu)`Gj%dVW=>Yd1O#kVxhu=&A+Sm)x`$}Wf6 z8{jN-@4cZEf=Wh-_d)WNqJrEktzVS)p|zD0w7=3HQmJgH4>CsJh$X{amd0(u z;JMGPe3Q%rv=NG2gJtrC*)EvStkGW$YMjLPDr$3&=fW*<{|Vsj-_dVsDV6f9AuTmMtN_&HMAXeuiiwYJN2$!7+CWjXB4zY z=kEI3-g`n*-?eK&FsMftVtnaH&*1buY9$%M$fpZaKC|jP0>iVmaf!7r-ZMR~FdNEm zkFHwAFEqyK?-5dMzZeD70Zbj_)%aNb*F`F>5DHmFof)0VtY)7@-Eg^4B6MK>cn9X)>wSN?-t?} zb^~AvXE@B7ZmrP0;pd6D(-*li`@ggRPu`PpQL zuz+EH_+hhyS^o9EOJZCjZ5zMP$N{T#Nl>SeMOqXbk-9~fe-XD*t#;+Jr}3#XE2kBN zfatt2x^(yTWgcA@mLz_F6y}?S`KU0`Xw73N40xxyK+MzIJp!!XUg6w`P4C=YvgC9+ zK2R`}x`z(Iy<4+5Pu8pj-`!1#wuFhKpQ^wfnrf=MD;>BX;AH3KU=GN;LntqWK9w$YD2{BVXxTdXdaKfiL3G5@OfEZ zQejr*o7*2)^O^X|&hE9}2L0fuh>Z9H1@+E>SwoXsqVTzw09p2-K~$Le+*g*WpqBI94JA$>`7`HM{3t{sOCFx=IbI zT0iROp+gUe1cuGs$}pj{)2sl;CHWr?3?5v=`xugsv02|__32;h6w0!1-@bM0wl=)A zeZJ4oNs^Ub;*4F4qC>_!_nyWeSbVt7C9%gV^MP5k_@`|@vwOMD>#r{z^6pi9F(fuT zXHZ75qs$=A>7I#0zF7THW_keQ5kIbcxJ{vil`kiz{|9)Ba;?R>>6QQ1@AMuh6B;nm zu$gXrL^G}~)MIoW6?zj#9sd_{D*r+Dm)tI48(T&&nls8y3J#XD-ek`s6y@p$t0{sB z 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 diff --git a/icons/screen/hud/common/shadekin.dmi b/icons/screen/hud/common/shadekin.dmi new file mode 100644 index 0000000000000000000000000000000000000000..fd635a202cfd684765a2f325009f99b573fd96ea GIT binary patch literal 11527 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ⓈW6nY1bqlv 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 Mx9(|`YFdZ>A3;s1)&Kwi literal 0 HcmV?d00001