From 4aa7c1817db25baffe3895af2b89153f27617dad Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Wed, 17 Jul 2024 00:10:29 +1200 Subject: [PATCH 01/13] Automatic changelog for PR #84979 [ci skip] --- html/changelogs/AutoChangeLog-pr-84979.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84979.yml diff --git a/html/changelogs/AutoChangeLog-pr-84979.yml b/html/changelogs/AutoChangeLog-pr-84979.yml new file mode 100644 index 000000000000..03a22c982a51 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84979.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Style meter text is no longer blurry and doesnt overlap with UI anymore." \ No newline at end of file From bef3194774a4803619b2a68a111a52b11f22a7aa Mon Sep 17 00:00:00 2001 From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Tue, 9 Apr 2024 02:36:31 -0500 Subject: [PATCH 02/13] Less laughing from trace nitrous (#81223) Health analyzer displays blood alcohol content (#81306) Aheal no longer turns monkies in to humans (#82393) Random Name Generation refactor, generate random names based on languages (for species without name lists, like Felinids and Podpeople) (#83021) The Shovellening: Coroner and Miner Coats can now hold Shovels (#83139) Allows status effects with alerts to display their duration (on the alert), adds it to a select handful (#83211) `*Me` invoked via verb defaults to visible | audible, rather than just audible (#83283) Baby plushies are now smaller than their parents (#83937) Search Bar in Vending Machines (#84720) Adds informed default values for a bunch of preferences (to produce less outlandish random characters) (#84726) Humanizing monkeys removes undergarments (#84439) Dynamic Husk Icons (#81080) Monkeys now use height offset (and monkey tail works) (#81598) --- _maps/map_files/Birdshot/birdshot.dmm | 2 +- code/__DEFINES/colors.dm | 2 + code/__DEFINES/inventory.dm | 17 +- code/__DEFINES/mobs.dm | 22 +-- code/__DEFINES/research/anomalies.dm | 5 - code/__DEFINES/species_clothing_paths.dm | 4 - code/__HELPERS/global_lists.dm | 9 +- code/__HELPERS/icons.dm | 4 +- code/__HELPERS/mobs.dm | 58 ++----- code/__HELPERS/names.dm | 94 +++++++--- code/_globalvars/lists/mobs.dm | 17 ++ code/_globalvars/lists/names.dm | 4 +- code/datums/brain_damage/imaginary_friend.dm | 4 +- code/datums/datum.dm | 10 ++ .../diseases/advance/symptoms/voice_change.dm | 2 +- code/datums/dna.dm | 16 +- code/datums/mutations/_mutations.dm | 1 + code/datums/mutations/body.dm | 1 + code/datums/sprite_accessories.dm | 35 +++- code/datums/status_effects/_status_effect.dm | 32 +++- code/datums/status_effects/buffs.dm | 4 + code/datums/status_effects/debuffs/debuffs.dm | 1 + code/datums/status_effects/food_effects.dm | 2 + .../machinery/computer/records/security.dm | 6 +- code/game/machinery/medical_kiosk.dm | 2 + code/game/objects/items/cardboard_cutouts.dm | 2 +- code/game/objects/items/debug_items.dm | 3 +- .../items/devices/scanners/health_analyzer.dm | 8 + code/game/objects/items/plushes.dm | 1 + .../stacks/golem_food/golem_status_effects.dm | 1 + code/game/objects/structures/headpike.dm | 2 +- code/game/objects/structures/lattice.dm | 5 +- code/modules/admin/create_mob.dm | 35 +++- code/modules/admin/player_panel.dm | 6 +- code/modules/admin/topic.dm | 7 +- code/modules/admin/verbs/anonymousnames.dm | 5 +- code/modules/admin/verbs/mapping.dm | 2 +- code/modules/admin/verbs/secrets.dm | 2 +- .../antagonists/heretic/magic/realignment.dm | 1 + .../heretic/status_effects/buffs.dm | 4 + .../wizard/grand_ritual/finales/clown.dm | 3 +- .../components/unary_devices/vent_scrubber.dm | 15 -- .../medieval_sim/medisim_game.dm | 2 +- .../modules/client/preferences/_preference.dm | 11 +- code/modules/client/preferences/age.dm | 3 + code/modules/client/preferences/body_type.dm | 1 + code/modules/client/preferences/clothing.dm | 37 +++- code/modules/client/preferences/gender.dm | 5 + code/modules/client/preferences/glasses.dm | 3 + code/modules/client/preferences/language.dm | 3 + code/modules/client/preferences/names.dm | 15 +- code/modules/client/preferences/species.dm | 4 +- .../preferences/species_features/basic.dm | 70 ++++++-- .../preferences/species_features/felinid.dm | 3 +- .../preferences/species_features/lizard.dm | 3 +- .../preferences/species_features/monkey.dm | 15 ++ .../preferences/species_features/mutants.dm | 2 +- .../client/preferences/underwear_color.dm | 2 +- code/modules/client/preferences_savefile.dm | 8 +- code/modules/clothing/suits/labcoat.dm | 7 + code/modules/clothing/suits/wintercoats.dm | 9 + code/modules/clothing/under/suits.dm | 1 - code/modules/clothing/under/syndicate.dm | 1 - code/modules/jobs/job_types/_job.dm | 21 ++- code/modules/language/_language.dm | 164 ++++++++++++++++++ ...language_holder.dm => _language_holder.dm} | 0 ...nguage_manuals.dm => _language_manuals.dm} | 0 .../{language_menu.dm => _language_menu.dm} | 0 code/modules/language/aphasia.dm | 1 + code/modules/language/beachbum.dm | 2 +- code/modules/language/buzzwords.dm | 1 + code/modules/language/calcic.dm | 12 ++ code/modules/language/codespeak.dm | 1 + code/modules/language/common.dm | 95 +++++----- code/modules/language/draconic.dm | 20 +++ code/modules/language/drone.dm | 1 + code/modules/language/language.dm | 107 ------------ code/modules/language/machine.dm | 11 +- code/modules/language/moffic.dm | 16 ++ code/modules/language/monkey.dm | 9 + code/modules/language/mushroom.dm | 2 + code/modules/language/nekomimetic.dm | 13 ++ code/modules/language/piratespeak.dm | 1 + code/modules/language/shadowtongue.dm | 2 + code/modules/language/slime.dm | 3 +- code/modules/language/sylvan.dm | 2 + code/modules/language/terrum.dm | 19 +- code/modules/language/voltaic.dm | 18 ++ code/modules/language/xenocommon.dm | 1 + code/modules/mapping/mapping_helpers.dm | 3 +- .../equipment/monster_organs/rush_gland.dm | 1 + code/modules/mob/dead/observer/observer.dm | 19 +- code/modules/mob/inventory.dm | 7 +- .../basic/space_fauna/revenant/_revenant.dm | 6 +- .../space_fauna/wumborian_fugu/inflation.dm | 1 + code/modules/mob/living/blood.dm | 11 ++ .../mob/living/carbon/carbon_update_icons.dm | 21 +-- .../mob/living/carbon/human/_species.dm | 76 ++------ code/modules/mob/living/carbon/human/dummy.dm | 3 +- code/modules/mob/living/carbon/human/human.dm | 17 +- .../mob/living/carbon/human/human_helpers.dm | 16 +- .../living/carbon/human/human_update_icons.dm | 94 ++++++++-- .../human/species_types/abominations.dm | 51 ------ .../carbon/human/species_types/ethereal.dm | 16 -- .../carbon/human/species_types/golems.dm | 9 - .../human/species_types/lizardpeople.dm | 12 -- .../carbon/human/species_types/monkeys.dm | 21 +-- .../carbon/human/species_types/mothmen.dm | 11 -- .../carbon/human/species_types/plasmamen.dm | 11 -- code/modules/mob/living/emote.dm | 4 +- code/modules/mob/living/living_say.dm | 6 +- code/modules/mob/mob_say.dm | 3 +- code/modules/mob/transform_procs.dm | 8 + .../mob_spawn/ghost_roles/golem_roles.dm | 3 +- .../mob_spawn/ghost_roles/mining_roles.dm | 6 +- code/modules/mob_spawn/mob_spawn.dm | 21 +-- .../chemistry/reagents/other_reagents.dm | 2 +- .../reagents/reagent_containers/hypospray.dm | 2 +- .../reagents/reagent_containers/pill.dm | 2 +- .../crossbreeding/_status_effects.dm | 2 + code/modules/shuttle/emergency.dm | 3 +- code/modules/surgery/bodyparts/_bodyparts.dm | 71 ++++---- code/modules/surgery/bodyparts/parts.dm | 15 -- code/modules/surgery/organs/external/tails.dm | 13 +- .../surgery/organs/internal/lungs/_lungs.dm | 7 +- code/modules/surgery/plastic_surgery.dm | 6 +- code/modules/transport/tram/tram_doors.dm | 2 +- code/modules/unit_tests/limbsanity.dm | 26 --- code/modules/unit_tests/preference_species.dm | 4 +- ...humanoids__datum_species_human_tallboy.png | Bin 457 -> 0 bytes ...ids__datum_species_monkey_human_legged.png | Bin 909 -> 0 bytes ...ids__datum_species_monkey_monkey_freak.png | Bin 916 -> 0 bytes .../screenshots/screenshot_husk_body.png | Bin 698 -> 826 bytes .../screenshot_husk_body_missing_limbs.png | Bin 656 -> 788 bytes icons/mob/clothing/belt.dmi | Bin 48439 -> 48527 bytes icons/mob/clothing/belt_mirror.dmi | Bin 91209 -> 86102 bytes icons/mob/human/bodyparts.dmi | Bin 52884 -> 52010 bytes icons/mob/human/species/monkey/bodyparts.dmi | Bin 2688 -> 5467 bytes .../mob/human/species/monkey/monkey_tail.dmi | Bin 356 -> 369 bytes icons/mob/human/species/monkey/uniform.dmi | Bin 2222 -> 0 bytes tgstation.dme | 11 +- .../packages/tgui/interfaces/MedicalKiosk.jsx | 14 ++ .../preferences/features/species_features.tsx | 9 + tgui/packages/tgui/interfaces/Vending.tsx | 98 +++++++---- 144 files changed, 1148 insertions(+), 779 deletions(-) create mode 100644 code/modules/client/preferences/species_features/monkey.dm create mode 100644 code/modules/language/_language.dm rename code/modules/language/{language_holder.dm => _language_holder.dm} (100%) rename code/modules/language/{language_manuals.dm => _language_manuals.dm} (100%) rename code/modules/language/{language_menu.dm => _language_menu.dm} (100%) delete mode 100644 code/modules/language/language.dm delete mode 100644 code/modules/mob/living/carbon/human/species_types/abominations.dm delete mode 100644 code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_tallboy.png delete mode 100644 code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey_human_legged.png delete mode 100644 code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey_monkey_freak.png delete mode 100644 icons/mob/human/species/monkey/uniform.dmi diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index e43002ba50b5..9d042a26fcf9 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -57098,7 +57098,7 @@ desc = "A cold, hard place for your final rest."; name = "Morgue Slab" }, -/mob/living/carbon/human/species/monkey/humand_legged{ +/mob/living/carbon/human/species/monkey{ name = "Charles"; real_name = "Charles" }, diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index 6a71a8d6c3c0..c7da3473fa3b 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -430,3 +430,5 @@ GLOBAL_LIST_INIT(cable_colors, list( CABLE_COLOR_YELLOW = CABLE_HEX_COLOR_YELLOW, CABLE_COLOR_BROWN = CABLE_HEX_COLOR_BROWN )) + +#define HUSK_COLOR_TONE rgb(96, 88, 80) diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index ab131cc3d728..479373bb6518 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -64,6 +64,20 @@ /// Total amount of slots #define SLOTS_AMT 20 // Keep this up to date! +///Inventory slots that can be blacklisted by a species from being equipped into +DEFINE_BITFIELD(no_equip_flags, list( + "EXOSUIT" = ITEM_SLOT_OCLOTHING, + "JUMPSUIT" = ITEM_SLOT_ICLOTHING, + "GLOVES" = ITEM_SLOT_GLOVES, + "GLASSES" = ITEM_SLOT_EYES, + "EARPIECES" = ITEM_SLOT_EARS, + "MASKS" = ITEM_SLOT_MASK, + "HATS" = ITEM_SLOT_HEAD, + "SHOES" = ITEM_SLOT_FEET, + "BACKPACKS" = ITEM_SLOT_BACK, + "TIES" = ITEM_SLOT_NECK, +)) + //SLOT GROUP HELPERS #define ITEM_SLOT_POCKETS (ITEM_SLOT_LPOCKET|ITEM_SLOT_RPOCKET) /// Slots that are physically on you @@ -135,11 +149,10 @@ #define CLOTHING_DIGITIGRADE_VARIATION (1<<1) ///The sprite works fine for digitigrade legs as-is. #define CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON (1<<2) -///has a sprite for monkeys -#define CLOTHING_MONKEY_VARIATION (1<<3) /// When worn by a mob with digitigrade, apply a filter #define CLOTHING_DIGITIGRADE_FILTER (1<<3) +/// Any flag which has a variation for digi #define DIGITIGRADE_VARIATIONS (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON|CLOTHING_DIGITIGRADE_FILTER) //flags for covering body parts diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 4696b532ed38..1e0cfe1f835c 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -120,9 +120,6 @@ #define SPECIES_LIZARD_SILVER "silverscale" #define SPECIES_NIGHTMARE "nightmare" #define SPECIES_MONKEY "monkey" -#define SPECIES_MONKEY_FREAK "monkey_freak" -#define SPECIES_MONKEY_HOLODECK "monkey_holodeck" -#define SPECIES_MONKEY_HUMAN_LEGGED "monkey_human_legged" #define SPECIES_MOTH "moth" #define SPECIES_MUSHROOM "mush" #define SPECIES_PLASMAMAN "plasmaman" @@ -130,7 +127,6 @@ #define SPECIES_SHADOW "shadow" #define SPECIES_SKELETON "skeleton" #define SPECIES_SNAIL "snail" -#define SPECIES_TALLBOY "tallboy" #define SPECIES_VAMPIRE "vampire" #define SPECIES_ZOMBIE "zombie" #define SPECIES_ZOMBIE_INFECTIOUS "memezombie" @@ -668,18 +664,22 @@ // - They do not start at 0 for futureproofing // - They skip numbers for futureproofing as well // Otherwise they are completely arbitrary -#define HUMAN_HEIGHT_DWARF 2 -#define HUMAN_HEIGHT_SHORTEST 4 -#define HUMAN_HEIGHT_SHORT 6 -#define HUMAN_HEIGHT_MEDIUM 8 -#define HUMAN_HEIGHT_TALL 10 -#define HUMAN_HEIGHT_TALLER 12 -#define HUMAN_HEIGHT_TALLEST 14 +#define MONKEY_HEIGHT_DWARF 2 +#define MONKEY_HEIGHT_MEDIUM 4 +#define HUMAN_HEIGHT_DWARF 6 +#define HUMAN_HEIGHT_SHORTEST 8 +#define HUMAN_HEIGHT_SHORT 10 +#define HUMAN_HEIGHT_MEDIUM 12 +#define HUMAN_HEIGHT_TALL 14 +#define HUMAN_HEIGHT_TALLER 16 +#define HUMAN_HEIGHT_TALLEST 18 /// Assoc list of all heights, cast to strings, to """"tuples""""" /// The first """tuple""" index is the upper body offset /// The second """tuple""" index is the lower body offset GLOBAL_LIST_INIT(human_heights_to_offsets, list( + "[MONKEY_HEIGHT_DWARF]" = list(-9, -3), + "[MONKEY_HEIGHT_MEDIUM]" = list(-7, -4), "[HUMAN_HEIGHT_DWARF]" = list(-5, -4), "[HUMAN_HEIGHT_SHORTEST]" = list(-2, -1), "[HUMAN_HEIGHT_SHORT]" = list(-1, -1), diff --git a/code/__DEFINES/research/anomalies.dm b/code/__DEFINES/research/anomalies.dm index 12a114439c7d..24a29f7bda7c 100644 --- a/code/__DEFINES/research/anomalies.dm +++ b/code/__DEFINES/research/anomalies.dm @@ -20,11 +20,6 @@ GLOBAL_LIST_INIT(bioscrambler_parts_blacklist, typecacheof(list( /obj/item/bodypart/chest/larva, /obj/item/bodypart/head/larva, - // Re-add the ones below this line when the bug with offset is fixed - /obj/item/bodypart/leg/left/monkey, - /obj/item/bodypart/leg/right/monkey, - /obj/item/bodypart/leg/left/tallboy, - /obj/item/bodypart/leg/right/tallboy, ))) /// Blacklist of organs which should not appear when bioscrambled. diff --git a/code/__DEFINES/species_clothing_paths.dm b/code/__DEFINES/species_clothing_paths.dm index 2582d81b613b..99fe7baab1dd 100644 --- a/code/__DEFINES/species_clothing_paths.dm +++ b/code/__DEFINES/species_clothing_paths.dm @@ -6,10 +6,6 @@ ///The dmi for humanoid oversuits #define DEFAULT_SUIT_FILE 'icons/mob/clothing/suits/default.dmi' -//MONKEY PATHS -///The dmi for monkey uniforms -#define MONKEY_UNIFORM_FILE 'icons/mob/human/species/monkey/uniform.dmi' - //DIGITIGRADE PATHS ///The dmi containing digitigrade uniforms #define DIGITIGRADE_UNIFORM_FILE 'icons/mob/human/species/misc/digitigrade.dmi' diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 928a1b13c3d2..1c29bf639b3b 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -17,7 +17,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human, add_blank = TRUE) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard, add_blank = TRUE) - init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, GLOB.tails_list_monkey, add_blank = TRUE) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, GLOB.tails_list_monkey, add_blank = FALSE) init_sprite_accessory_subtypes(/datum/sprite_accessory/snouts, GLOB.snouts_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/horns,GLOB.horns_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/ears, GLOB.ears_list) @@ -40,13 +40,6 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/plumage, GLOB.avian_ears_list) //NON-MODULE CHANGE init_sprite_accessory_subtypes(/datum/sprite_accessory/synth_head_cover, GLOB.synth_head_cover_list) //NON-MODULE CHANGE -/// Inits GLOB.species_list. Not using GLOBAL_LIST_INIT b/c it depends on GLOB.string_lists -/proc/init_species_list() - for(var/species_path in subtypesof(/datum/species)) - var/datum/species/species = new species_path() - GLOB.species_list[species.id] = species_path - sort_list(GLOB.species_list, GLOBAL_PROC_REF(cmp_typepaths_asc)) - /// Inits GLOB.surgeries /proc/init_surgeries() var/surgeries = list() diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 02f2450630d2..0d0d75d6df7e 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -227,7 +227,7 @@ world /icon/proc/ColorTone(tone) GrayScale() - var/list/TONE = ReadRGB(tone) + var/list/TONE = rgb2num(tone) var/gray = round(TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11, 1) var/icon/upper = (255-gray) ? new(src) : null @@ -1544,7 +1544,7 @@ GLOBAL_LIST_EMPTY(transformation_animation_objects) var/list/icon_dimensions = get_icon_dimensions(source.icon) var/width = icon_dimensions["width"] var/height = icon_dimensions["height"] - + if(width > world.icon_size) alert_overlay.pixel_x = -(world.icon_size / 2) * ((width - world.icon_size) / world.icon_size) if(height > world.icon_size) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index a45b6b92cc63..d17019bff426 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -40,6 +40,20 @@ else return "#000000" +/proc/random_hair_color() + var/static/list/natural_hair_colors = list( + "#111111", "#362925", "#3B3831", "#41250C", "#412922", + "#544C49", "#583322", "#593029", "#703b30", "#714721", + "#744729", "#74482a", "#7b746e", "#855832", "#863019", + "#8c4734", "#9F550E", "#A29A96", "#A4381C", "#B17B41", + "#C0BAB7", "#EFE5E4", "#F7F3F1", "#FFF2D6", "#a15537", + "#a17e61", "#b38b67", "#ba673c", "#c89f73", "#d9b380", + "#dbc9b8", "#e1621d", "#e17d17", "#e1af93", "#f1cc8f", + "#fbe7a1", + ) + + return pick(natural_hair_colors) + /proc/random_underwear(gender) if(!GLOB.underwear_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, GLOB.underwear_list, GLOB.underwear_m, GLOB.underwear_f) @@ -88,47 +102,6 @@ else return pick(GLOB.facial_hairstyles_list) -/proc/random_unique_name(gender, attempts_to_find_unique_name=10) - for(var/i in 1 to attempts_to_find_unique_name) - if(gender == FEMALE) - . = capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) - else - . = capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - - if(!findname(.)) - break - -/proc/random_unique_lizard_name(gender, attempts_to_find_unique_name=10) - for(var/i in 1 to attempts_to_find_unique_name) - . = capitalize(lizard_name(gender)) - - if(!findname(.)) - break - -/proc/random_unique_plasmaman_name(attempts_to_find_unique_name=10) - for(var/i in 1 to attempts_to_find_unique_name) - . = capitalize(plasmaman_name()) - - if(!findname(.)) - break - -/proc/random_unique_ethereal_name(attempts_to_find_unique_name=10) - for(var/i in 1 to attempts_to_find_unique_name) - . = capitalize(ethereal_name()) - - if(!findname(.)) - break - -/proc/random_unique_moth_name(attempts_to_find_unique_name=10) - for(var/i in 1 to attempts_to_find_unique_name) - . = capitalize(pick(GLOB.moth_first)) + " " + capitalize(pick(GLOB.moth_last)) - - if(!findname(.)) - break - -/proc/random_skin_tone() - return pick(GLOB.skin_tones) - GLOBAL_LIST_INIT(skin_tones, sort_list(list( "albino", "caucasian1", @@ -167,9 +140,6 @@ GLOBAL_LIST_INIT(skin_tone_names, list( "mixed4" = "Macadamia", )) -/// An assoc list of species IDs to type paths -GLOBAL_LIST_EMPTY(species_list) - /proc/age2agedescription(age) switch(age) if(0 to 1) diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 33bb0348df56..95e6938330cc 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -1,20 +1,75 @@ -/proc/lizard_name(gender) - if(gender == MALE) - return "[pick(GLOB.lizard_names_male)]-[pick(GLOB.lizard_names_male)]" - else - return "[pick(GLOB.lizard_names_female)]-[pick(GLOB.lizard_names_female)]" +/** + * Generate a random name based off of one of the roundstart languages + * + * * gender - What gender to pick from. Picks between male, female if not provided. + * * unique - If the name should be unique, IE, avoid picking names that mobs already have. + * * list/language_weights - A list of language weights to pick from. + * If not provided, it will default to a list of roundstart languages, with common being the most likely. + */ +/proc/generate_random_name(gender, unique, list/language_weights) + if(isnull(language_weights)) + language_weights = list() + for(var/lang_type in GLOB.uncommon_roundstart_languages) + language_weights[lang_type] = 1 + language_weights[/datum/language/common] = 20 + + var/datum/language/picked = GLOB.language_datum_instances[pick_weight(language_weights)] + if(unique) + return picked.get_random_unique_name(gender) + return picked.get_random_name(gender) + +/** + * Generate a random name based off of a species + * This will pick a name from the species language, and avoid picking common if there are alternatives + * + * * gender - What gender to pick from. Picks between male, female if not provided. + * * unique - If the name should be unique, IE, avoid picking names that mobs already have. + * * datum/species/species_type - The species to pick from + * * include_all - Makes the generated name a mix of all the languages the species can speak rather than just one of them + * Does this on a per-name basis, IE "Lizard first name, uncommon last name". + */ +/proc/generate_random_name_species_based(gender, unique, datum/species/species_type, include_all = FALSE) + ASSERT(ispath(species_type, /datum/species)) + var/datum/language_holder/holder = GLOB.prototype_language_holders[species_type::species_language_holder] -/proc/ethereal_name() - var/tempname = "[pick(GLOB.ethereal_names)] [random_capital_letter()]" - if(prob(65)) - tempname += random_capital_letter() - return tempname + var/list/languages_to_pick_from = list() + for(var/language in holder.spoken_languages) + languages_to_pick_from[language] = 1 -/proc/plasmaman_name() - return "[pick(GLOB.plasmaman_names)] \Roman[rand(1,99)]" + if(length(languages_to_pick_from) >= 2) + // Basically, if we have alternatives, don't pick common it's boring + languages_to_pick_from -= /datum/language/common -/proc/moth_name() - return "[pick(GLOB.moth_first)] [pick(GLOB.moth_last)]" + if(!include_all || length(languages_to_pick_from) <= 1) + return generate_random_name(gender, unique, languages_to_pick_from) + + var/list/name_parts = list() + for(var/lang_type in shuffle(languages_to_pick_from)) + name_parts += GLOB.language_datum_instances[lang_type].get_random_name(gender, name_count = 1, force_use_syllables = TRUE) + return jointext(name_parts, " ") + +/** + * Generates a random name for the mob based on their gender or species (for humans) + * + * * unique - If the name should be unique, IE, avoid picking names that mobs already have. + */ +/mob/proc/generate_random_mob_name(unique) + return generate_random_name_species_based(gender, unique, /datum/species/human) + +/mob/living/carbon/generate_random_mob_name(unique) + return generate_random_name_species_based(gender, unique, dna?.species?.type || /datum/species/human) + +/mob/living/silicon/generate_random_mob_name(unique) + return generate_random_name(gender, unique, list(/datum/language/machine = 1)) + +/mob/living/basic/drone/generate_random_mob_name(unique) + return generate_random_name(gender, unique, list(/datum/language/machine = 1)) + +/mob/living/basic/bot/generate_random_mob_name(unique) + return generate_random_name(gender, unique, list(/datum/language/machine = 1)) + +/mob/living/simple_animal/bot/generate_random_mob_name(unique) + return generate_random_name(gender, unique, list(/datum/language/machine = 1)) GLOBAL_VAR(command_name) /proc/command_name() @@ -194,16 +249,11 @@ GLOBAL_DATUM(syndicate_code_response_regex, /regex) if(1)//1 and 2 can only be selected once each to prevent more than two specific names/places/etc. switch(rand(1,2))//Mainly to add more options later. if(1) - if(names.len && prob(70)) + if(length(names) && prob(70)) . += pick(names) else - if(prob(10)) - . += pick(lizard_name(MALE),lizard_name(FEMALE)) - else - var/new_name = pick(pick(GLOB.first_names_male,GLOB.first_names_female)) - new_name += " " - new_name += pick(GLOB.last_names) - . += new_name + . += generate_random_name() + if(2) var/datum/job/job = pick(SSjob.joinable_occupations) if(job) diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index fda5f03d38d8..8d35f2192062 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -117,6 +117,23 @@ GLOBAL_LIST_INIT(language_types_by_name, init_language_types_by_name()) lang_list[initial(lang_type.name)] = lang_type return lang_list +/// An assoc list of species IDs to type paths +GLOBAL_LIST_INIT(species_list, init_species_list()) +/// List of all species prototypes to reference, assoc [type] = prototype +GLOBAL_LIST_INIT_TYPED(species_prototypes, /datum/species, init_species_prototypes()) + +/proc/init_species_list() + var/list/species_list = list() + for(var/datum/species/species_path as anything in subtypesof(/datum/species)) + species_list[initial(species_path.id)] = species_path + return species_list + +/proc/init_species_prototypes() + var/list/species_list = list() + for(var/species_type in subtypesof(/datum/species)) + species_list[species_type] = new species_type() + return species_list + GLOBAL_LIST_EMPTY(sentient_disease_instances) GLOBAL_LIST_EMPTY(latejoin_ai_cores) diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index c51fbaa9eb7a..81fe08373b31 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -8,12 +8,12 @@ GLOBAL_LIST_INIT(first_names, world.file2list("strings/names/first.txt")) GLOBAL_LIST_INIT(first_names_male, world.file2list("strings/names/first_male.txt")) GLOBAL_LIST_INIT(first_names_female, world.file2list("strings/names/first_female.txt")) GLOBAL_LIST_INIT(last_names, world.file2list("strings/names/last.txt")) -GLOBAL_LIST_INIT(lizard_names_male, world.file2list("strings/names/lizard_male.txt")) -GLOBAL_LIST_INIT(lizard_names_female, world.file2list("strings/names/lizard_female.txt")) GLOBAL_LIST_INIT(clown_names, world.file2list("strings/names/clown.txt")) GLOBAL_LIST_INIT(mime_names, world.file2list("strings/names/mime.txt")) GLOBAL_LIST_INIT(religion_names, world.file2list("strings/names/religion.txt")) GLOBAL_LIST_INIT(carp_names, world.file2list("strings/names/carp.txt")) +GLOBAL_LIST_INIT(lizard_names_male, world.file2list("strings/names/lizard_male.txt")) +GLOBAL_LIST_INIT(lizard_names_female, world.file2list("strings/names/lizard_female.txt")) GLOBAL_LIST_INIT(golem_names, world.file2list("strings/names/golem.txt")) GLOBAL_LIST_INIT(moth_first, world.file2list("strings/names/moth_first.txt")) GLOBAL_LIST_INIT(moth_last, world.file2list("strings/names/moth_last.txt")) diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index 664bf50fd666..1d17c515cd9d 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -126,8 +126,8 @@ /// Randomise friend name and appearance /mob/camera/imaginary_friend/proc/setup_friend() - var/gender = pick(MALE, FEMALE) - real_name = random_unique_name(gender) + gender = pick(MALE, FEMALE) + real_name = generate_random_name_species_based(gender, FALSE, /datum/species/human) name = real_name human_image = get_flat_human_icon(null, pick(SSjob.joinable_occupations)) Show() diff --git a/code/datums/datum.dm b/code/datums/datum.dm index bf2b1084d7f2..77d787eb85ba 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -313,6 +313,16 @@ filter_data[name] = copied_parameters update_filters() +///A version of add_filter that takes a list of filters to add rather than being individual, to limit calls to update_filters(). +/datum/proc/add_filters(list/list/filters) + LAZYINITLIST(filter_data) + for(var/list/individual_filter as anything in filters) + var/list/params = individual_filter["params"] + var/list/copied_parameters = params.Copy() + copied_parameters["priority"] = individual_filter["priority"] + filter_data[individual_filter["name"]] = copied_parameters + update_filters() + /// Reapplies all the filters. /datum/proc/update_filters() ASSERT(isatom(src) || isimage(src)) diff --git a/code/datums/diseases/advance/symptoms/voice_change.dm b/code/datums/diseases/advance/symptoms/voice_change.dm index 255c2a3f3a7f..9654365c49d3 100644 --- a/code/datums/diseases/advance/symptoms/voice_change.dm +++ b/code/datums/diseases/advance/symptoms/voice_change.dm @@ -54,7 +54,7 @@ else if(ishuman(M)) var/mob/living/carbon/human/H = M - H.SetSpecialVoice(H.dna.species.random_name(H.gender)) + H.SetSpecialVoice(H.generate_random_mob_name()) if(scramble_language && !current_language) // Last part prevents rerolling language with small amounts of cure. current_language = pick(subtypesof(/datum/language) - /datum/language/common) H.add_blocked_language(subtypesof(/datum/language) - current_language, LANGUAGE_VOICECHANGE) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 2d84900d7955..1809d7162201 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -212,6 +212,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) L[DNA_TAIL_BLOCK] = construct_block(GLOB.tails_list_human.Find(features["tail_cat"]), GLOB.tails_list_human.len) if(features["tail_lizard"]) L[DNA_LIZARD_TAIL_BLOCK] = construct_block(GLOB.tails_list_lizard.Find(features["tail_lizard"]), GLOB.tails_list_lizard.len) + if(features["tail_monkey"]) + L[DNA_MONKEY_TAIL_BLOCK] = construct_block(GLOB.tails_list_monkey.Find(features["tail_monkey"]), GLOB.tails_list_monkey.len) if(features["snout"]) L[DNA_SNOUT_BLOCK] = construct_block(GLOB.snouts_list.Find(features["snout"]), GLOB.snouts_list.len) if(features["horns"]) @@ -361,6 +363,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_human.Find(features["tail_cat"]), GLOB.tails_list_human.len)) if(DNA_LIZARD_TAIL_BLOCK) set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_lizard.Find(features["tail_lizard"]), GLOB.tails_list_lizard.len)) + if(DNA_MONKEY_TAIL_BLOCK) + set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_monkey.Find(features["tail_monkey"]), GLOB.tails_list_monkey.len)) if(DNA_SNOUT_BLOCK) set_uni_feature_block(blocknumber, construct_block(GLOB.snouts_list.Find(features["snout"]), GLOB.snouts_list.len)) if(DNA_HORNS_BLOCK) @@ -478,14 +482,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(create_mutation_blocks) //I hate this generate_dna_blocks() if(randomize_features) - var/static/list/all_species_protoypes - if(isnull(all_species_protoypes)) - all_species_protoypes = list() - for(var/species_path in subtypesof(/datum/species)) - all_species_protoypes += new species_path() - - for(var/datum/species/random_species as anything in all_species_protoypes) - features |= random_species.randomize_features() + for(var/species_type in GLOB.species_prototypes) + features |= GLOB.species_prototypes[species_type].randomize_features() features["mcolor"] = "#[random_color()]" @@ -676,6 +674,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) dna.features["tail_cat"] = GLOB.tails_list_human[deconstruct_block(get_uni_feature_block(features, DNA_TAIL_BLOCK), GLOB.tails_list_human.len)] if(dna.features["tail_lizard"]) dna.features["tail_lizard"] = GLOB.tails_list_lizard[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_TAIL_BLOCK), GLOB.tails_list_lizard.len)] + if(dna.features["tail_monkey"]) + dna.features["tail_monkey"] = GLOB.tails_list_monkey[deconstruct_block(get_uni_feature_block(features, DNA_MONKEY_TAIL_BLOCK), GLOB.tails_list_monkey.len)] if(dna.features["ears"]) dna.features["ears"] = GLOB.ears_list[deconstruct_block(get_uni_feature_block(features, DNA_EARS_BLOCK), GLOB.ears_list.len)] if(dna.features["moth_wings"]) diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm index 0f5a15206d8a..4913a057e011 100644 --- a/code/datums/mutations/_mutations.dm +++ b/code/datums/mutations/_mutations.dm @@ -49,6 +49,7 @@ * make sure to enter it both ways (so that A conflicts with B, and B with A) */ var/list/conflicts + var/remove_on_aheal = TRUE /** * can we take chromosomes? diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index ef028e14fb70..436de72cb3dd 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -194,6 +194,7 @@ text_gain_indication = "You feel unusually monkey-like." text_lose_indication = "You feel like your old self." quality = NEGATIVE + remove_on_aheal = FALSE locked = TRUE //Species specific, keep out of actual gene pool var/datum/species/original_species = /datum/species/human var/original_name diff --git a/code/datums/sprite_accessories.dm b/code/datums/sprite_accessories.dm index bf4da0d98ea8..5264267417ee 100644 --- a/code/datums/sprite_accessories.dm +++ b/code/datums/sprite_accessories.dm @@ -55,7 +55,7 @@ /// Determines if the accessory will be skipped or included in random hair generations. var/gender = NEUTER /// Something that can be worn by either gender, but looks different on each. - var/gender_specific + var/gender_specific = FALSE /// Determines if the accessory will be skipped by color preferences. var/use_static /** @@ -75,6 +75,9 @@ var/dimension_y = 32 /// Should this sprite block emissives? var/em_block = FALSE + /// Determines if this is considered "sane" for the purpose of [/proc/randomize_human_normie] + /// Basically this is to blacklist the extremely wacky stuff from being picked in random human generation. + var/natural_spawn = TRUE /datum/sprite_accessory/blank name = "None" @@ -103,11 +106,13 @@ /datum/sprite_accessory/hair/afro_large name = "Afro (Large)" icon_state = "hair_bigafro" + natural_spawn = FALSE /datum/sprite_accessory/hair/afro_huge name = "Afro (Huge)" icon_state = "hair_hugeafro" y_offset = 6 + natural_spawn = FALSE /datum/sprite_accessory/hair/allthefuzz name = "All The Fuzz" @@ -148,6 +153,7 @@ /datum/sprite_accessory/hair/bedheadfloorlength name = "Floorlength Bedhead" icon_state = "hair_floorlength_bedhead" + natural_spawn = FALSE /datum/sprite_accessory/hair/badlycut name = "Shorter Long Bedhead" @@ -388,6 +394,7 @@ /datum/sprite_accessory/hair/bigflattop name = "Flat Top (Big)" icon_state = "hair_bigflattop" + natural_spawn = FALSE /datum/sprite_accessory/hair/flow_hair name = "Flow Hair" @@ -448,6 +455,7 @@ /datum/sprite_accessory/hair/joestar name = "Joestar" icon_state = "hair_joestar" + natural_spawn = FALSE /datum/sprite_accessory/hair/keanu name = "Keanu Hair" @@ -504,22 +512,27 @@ /datum/sprite_accessory/hair/mohawk name = "Mohawk" icon_state = "hair_d" + natural_spawn = FALSE // sorry little one /datum/sprite_accessory/hair/nitori name = "Nitori" icon_state = "hair_nitori" + natural_spawn = FALSE /datum/sprite_accessory/hair/reversemohawk name = "Mohawk (Reverse)" icon_state = "hair_reversemohawk" + natural_spawn = FALSE /datum/sprite_accessory/hair/shavedmohawk name = "Mohawk (Shaved)" icon_state = "hair_shavedmohawk" + natural_spawn = FALSE /datum/sprite_accessory/hair/unshavenmohawk name = "Mohawk (Unshaven)" icon_state = "hair_unshaven_mohawk" + natural_spawn = FALSE /datum/sprite_accessory/hair/mulder name = "Mulder" @@ -528,6 +541,7 @@ /datum/sprite_accessory/hair/odango name = "Odango" icon_state = "hair_odango" + natural_spawn = FALSE /datum/sprite_accessory/hair/ombre name = "Ombre" @@ -560,14 +574,17 @@ /datum/sprite_accessory/hair/kagami name = "Pigtails" icon_state = "hair_kagami" + natural_spawn = FALSE /datum/sprite_accessory/hair/pigtail name = "Pigtails 2" icon_state = "hair_pigtails" + natural_spawn = FALSE /datum/sprite_accessory/hair/pigtail2 name = "Pigtails 3" icon_state = "hair_pigtails2" + natural_spawn = FALSE /datum/sprite_accessory/hair/pixie name = "Pixie Cut" @@ -946,6 +963,7 @@ /datum/sprite_accessory/facial_hair/brokenman name = "Beard (Broken Man)" icon_state = "facial_brokenman" + natural_spawn = FALSE /datum/sprite_accessory/facial_hair/chinstrap name = "Beard (Chinstrap)" @@ -990,6 +1008,7 @@ /datum/sprite_accessory/facial_hair/martialartist name = "Beard (Martial Artist)" icon_state = "facial_martialartist" + natural_spawn = FALSE /datum/sprite_accessory/facial_hair/chinlessbeard name = "Beard (Chinless Beard)" @@ -1739,17 +1758,17 @@ /datum/sprite_accessory/body_markings/dtiger name = "Dark Tiger Body" icon_state = "dtiger" - gender_specific = 1 + gender_specific = TRUE /datum/sprite_accessory/body_markings/ltiger name = "Light Tiger Body" icon_state = "ltiger" - gender_specific = 1 + gender_specific = TRUE /datum/sprite_accessory/body_markings/lbelly name = "Light Belly" icon_state = "lbelly" - gender_specific = 1 + gender_specific = TRUE /datum/sprite_accessory/tails em_block = TRUE @@ -1787,14 +1806,12 @@ icon_state = "default" color_src = HAIR_COLOR -/datum/sprite_accessory/tails/monkey +/datum/sprite_accessory/tails/monkey/default + name = "Monkey" icon = 'icons/mob/human/species/monkey/monkey_tail.dmi' + icon_state = "default" color_src = FALSE -/datum/sprite_accessory/tails/monkey/standard - name = "Monkey" - icon_state = "monkey" - /datum/sprite_accessory/pod_hair icon = 'icons/mob/human/species/podperson_hair.dmi' em_block = TRUE diff --git a/code/datums/status_effects/_status_effect.dm b/code/datums/status_effects/_status_effect.dm index b8d77db4ff7f..637f2c3a0767 100644 --- a/code/datums/status_effects/_status_effect.dm +++ b/code/datums/status_effects/_status_effect.dm @@ -13,7 +13,7 @@ /// -1 = will prevent ticks, and if duration is also unlimited (-1), stop processing wholesale. var/tick_interval = 1 SECONDS /// The mob affected by the status effect. - var/mob/living/owner + VAR_FINAL/mob/living/owner /// How many of the effect can be on one mob, and/or what happens when you try to add a duplicate. var/status_type = STATUS_EFFECT_UNIQUE /// If TRUE, we call [proc/on_remove] when owner is deleted. Otherwise, we call [proc/be_replaced]. @@ -22,7 +22,9 @@ /// Status effect "name"s and "description"s are shown to the owner here. var/alert_type = /atom/movable/screen/alert/status_effect /// The alert itself, created in [proc/on_creation] (if alert_type is specified). - var/atom/movable/screen/alert/status_effect/linked_alert + VAR_FINAL/atom/movable/screen/alert/status_effect/linked_alert + /// If TRUE, and we have an alert, we will show a duration on the alert + var/show_duration = FALSE /// Used to define if the status effect should be using SSfastprocess or SSprocessing var/processing_speed = STATUS_EFFECT_FAST_PROCESS /// Do we self-terminate when a fullheal is called? @@ -30,7 +32,7 @@ /// If remove_on_fullheal is TRUE, what flag do we need to be removed? var/heal_flag_necessary = HEAL_STATUS /// A particle effect, for things like embers - Should be set on update_particles() - var/obj/effect/abstract/particle_holder/particle_effect + VAR_FINAL/obj/effect/abstract/particle_holder/particle_effect /datum/status_effect/New(list/arguments) on_creation(arglist(arguments)) @@ -57,6 +59,7 @@ var/atom/movable/screen/alert/status_effect/new_alert = owner.throw_alert(id, alert_type) new_alert.attached_effect = src //so the alert can reference us, if it needs to linked_alert = new_alert //so we can reference the alert, if we need to + update_shown_duration() if(duration > world.time || tick_interval > world.time) //don't process if we don't care switch(processing_speed) @@ -86,14 +89,24 @@ QDEL_NULL(particle_effect) return ..() +/// Updates the status effect alert's maptext (if possible) +/datum/status_effect/proc/update_shown_duration() + PRIVATE_PROC(TRUE) + if(!linked_alert || !show_duration) + return + + linked_alert.maptext = MAPTEXT_TINY_UNICODE("[round((duration - world.time)/10, 1)]s") + // Status effect process. Handles adjusting its duration and ticks. // If you're adding processed effects, put them in [proc/tick] // instead of extending / overriding the process() proc. /datum/status_effect/process(seconds_per_tick) SHOULD_NOT_OVERRIDE(TRUE) + if(QDELETED(owner)) qdel(src) return + if(tick_interval != -1 && tick_interval < world.time) var/tick_length = initial(tick_interval) tick(tick_length / (1 SECONDS)) @@ -101,8 +114,12 @@ if(QDELING(src)) // tick deleted us, no need to continue return - if(duration != -1 && duration < world.time) - qdel(src) + + if(duration != -1) + if(duration < world.time) + qdel(src) + return + update_shown_duration() /// Called whenever the effect is applied in on_created /// Returning FALSE will cause it to delete itself during creation instead. @@ -185,24 +202,25 @@ qdel(src) return TRUE + update_shown_duration() return FALSE /** * Updates the particles for the status effects * Should be handled by subtypes! */ - /datum/status_effect/proc/update_particles() SHOULD_CALL_PARENT(FALSE) + return /// Alert base type for status effect alerts /atom/movable/screen/alert/status_effect name = "Curse of Mundanity" desc = "You don't feel any different..." + maptext_y = 2 /// The status effect we're linked to var/datum/status_effect/attached_effect /atom/movable/screen/alert/status_effect/Destroy() attached_effect = null //Don't keep a ref now return ..() - diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 6cd180ab5970..744f32fca8f8 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -114,6 +114,7 @@ id = "fleshmend" duration = 10 SECONDS alert_type = /atom/movable/screen/alert/status_effect/fleshmend + show_duration = TRUE /datum/status_effect/fleshmend/on_apply() . = ..() @@ -376,6 +377,7 @@ duration = 1 MINUTES status_type = STATUS_EFFECT_REPLACE alert_type = /atom/movable/screen/alert/status_effect/regenerative_core + show_duration = TRUE /datum/status_effect/regenerative_core/on_apply() ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, STATUS_EFFECT_TRAIT) @@ -395,6 +397,7 @@ id = "Lightning Orb" duration = 30 SECONDS alert_type = /atom/movable/screen/alert/status_effect/lightningorb + show_duration = TRUE /datum/status_effect/lightningorb/on_apply() . = ..() @@ -457,6 +460,7 @@ id = "speed_boost" duration = 2 SECONDS status_type = STATUS_EFFECT_REPLACE + show_duration = TRUE /datum/status_effect/speed_boost/on_creation(mob/living/new_owner, set_duration) if(isnum(set_duration)) diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index 3c751432d3b5..f4e70c637ea9 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -677,6 +677,7 @@ duration = 150 status_type = STATUS_EFFECT_REFRESH alert_type = /atom/movable/screen/alert/status_effect/convulsing + show_duration = TRUE /datum/status_effect/convulsing/on_creation(mob/living/zappy_boy) . = ..() diff --git a/code/datums/status_effects/food_effects.dm b/code/datums/status_effects/food_effects.dm index e41ef67ad105..625a3fcc8762 100644 --- a/code/datums/status_effects/food_effects.dm +++ b/code/datums/status_effects/food_effects.dm @@ -3,6 +3,8 @@ id = "food_buff" duration = 5 MINUTES // Same as food mood buffs status_type = STATUS_EFFECT_REPLACE // Only one food buff allowed + alert_type = /atom/movable/screen/alert/status_effect/food + show_duration = TRUE /// Buff power var/strength diff --git a/code/game/machinery/computer/records/security.dm b/code/game/machinery/computer/records/security.dm index 3a929f7a298a..00dba3722944 100644 --- a/code/game/machinery/computer/records/security.dm +++ b/code/game/machinery/computer/records/security.dm @@ -49,10 +49,8 @@ if(prob(10/severity)) switch(rand(1,5)) if(1) - if(prob(10)) - target.name = "[pick(lizard_name(MALE),lizard_name(FEMALE))]" - else - target.name = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]" + target.name = generate_random_name() + if(2) target.gender = pick("Male", "Female", "Other") if(3) diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm index 8978bd4150a1..b9094192a917 100644 --- a/code/game/machinery/medical_kiosk.dm +++ b/code/game/machinery/medical_kiosk.dm @@ -239,6 +239,7 @@ var/blood_percent = round((patient.blood_volume / BLOOD_VOLUME_NORMAL)*100) var/blood_type = "[patient.get_blood_type() || "None"]" // NON-MODULE CHANGE var/blood_warning = " " + var/blood_alcohol = patient.get_blood_alcohol_content() for(var/thing in patient.diseases) //Disease Information var/datum/disease/D = thing @@ -354,6 +355,7 @@ data["bleed_status"] = bleed_status data["blood_levels"] = blood_percent - (chaos_modifier * (rand(1,35))) data["blood_status"] = blood_status + data["blood_alcohol"] = blood_alcohol data["chemical_list"] = chemical_list data["overdose_list"] = overdose_list data["addict_list"] = addict_list diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index f58ea90211d1..9f5d9e6cc9e7 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -296,7 +296,7 @@ outfit = /datum/outfit/ashwalker/spear /datum/cardboard_cutout/ash_walker/get_name() - return lizard_name(pick(MALE, FEMALE)) + return generate_random_name_species_based(species_type = /datum/species/lizard) /datum/cardboard_cutout/death_squad name = "Deathsquad Officer" diff --git a/code/game/objects/items/debug_items.dm b/code/game/objects/items/debug_items.dm index 4f6239acbe81..44f53df2c2b2 100644 --- a/code/game/objects/items/debug_items.dm +++ b/code/game/objects/items/debug_items.dm @@ -21,7 +21,7 @@ /obj/item/debug/human_spawner/attack_self(mob/user) ..() - var/choice = input("Select a species", "Human Spawner", null) in GLOB.species_list + var/choice = input("Select a species", "Human Spawner", null) in sortTim(GLOB.species_list, GLOBAL_PROC_REF(cmp_text_asc)) selected_species = GLOB.species_list[choice] /obj/item/debug/omnitool @@ -168,4 +168,3 @@ var/turf/loc_turf = get_turf(src) for(var/spawn_atom in (choice == "No" ? typesof(path) : subtypesof(path))) new spawn_atom(loc_turf) - diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 3866afd6add1..19db85cec156 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -372,6 +372,14 @@ render_list += "Blood level: [blood_percent] %, [target.blood_volume] cl, type: [blood_type]\n" // NON-MODULE CHANGE END + // Blood Alcohol Content + var/blood_alcohol_content = target.get_blood_alcohol_content() + if(blood_alcohol_content > 0) + if(blood_alcohol_content >= 0.24) + render_list += "Blood alcohol content: CRITICAL [blood_alcohol_content]%\n" + else + render_list += "Blood alcohol content: [blood_alcohol_content]%\n" + // Cybernetics if(iscarbon(target)) var/mob/living/carbon/carbontarget = target diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index eab3f34d343f..ca1425fe06ac 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -311,6 +311,7 @@ young = TRUE name = "[Mama] Jr" //Icelandic naming convention pending normal_desc = "[src] is a little baby of [maternal_parent] and [paternal_parent]!" //original desc won't be used so the child can have moods + transform *= 0.75 update_desc() Mama.mood_message = pick(Mama.parent_message) diff --git a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm index c89fae800b9b..ee459ec6e317 100644 --- a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm +++ b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm @@ -3,6 +3,7 @@ id = "golem_status" duration = 5 MINUTES alert_type = /atom/movable/screen/alert/status_effect/golem_status + show_duration = TRUE /// Icon state prefix for overlay to display on golem limbs var/overlay_state_prefix /// Name of the mineral we ate to get this diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm index b48cafc85d99..5f19807e4d3d 100644 --- a/code/game/objects/structures/headpike.dm +++ b/code/game/objects/structures/headpike.dm @@ -32,7 +32,7 @@ victim = locate() in parts_list if(!victim) //likely a mapspawned one victim = new(src) - victim.real_name = random_unique_name(prob(50)) + victim.real_name = generate_random_name() spear = locate(speartype) in parts_list if(!spear) spear = new speartype(src) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 72f28ed82517..339f10b6b181 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -23,6 +23,7 @@ if(length(give_turf_traits)) give_turf_traits = string_list(give_turf_traits) AddElement(/datum/element/give_turf_traits, give_turf_traits) + AddElement(/datum/element/footstep_override, footstep = FOOTSTEP_CATWALK) /datum/armor/structure_lattice melee = 50 @@ -100,10 +101,6 @@ obj_flags = CAN_BE_HIT | BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP give_turf_traits = list(TRAIT_TURF_IGNORE_SLOWDOWN, TRAIT_LAVA_STOPPED, TRAIT_CHASM_STOPPED, TRAIT_IMMERSE_STOPPED, TRAIT_HYPERSPACE_STOPPED) -/obj/structure/lattice/catwalk/Initialize(mapload) - . = ..() - AddElement(/datum/element/footstep_override, footstep = FOOTSTEP_CATWALK) - /obj/structure/lattice/catwalk/deconstruction_hints(mob/user) return span_notice("The supporting rods look like they could be cut.") diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 64aa0c60de77..b5cbb588390a 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -11,12 +11,12 @@ user << browse(create_panel_helper(create_mob_html), "window=create_mob;size=425x475") /** - * Randomizes everything about a human, including DNA and name + * Fully randomizes everything about a human, including DNA and name. */ /proc/randomize_human(mob/living/carbon/human/human, randomize_mutations = FALSE) human.gender = human.dna.species.sexes ? pick(MALE, FEMALE, PLURAL, NEUTER) : PLURAL human.physique = human.gender - human.real_name = human.dna?.species.random_name(human.gender) || random_unique_name(human.gender) + human.real_name = human.generate_random_mob_name() human.name = human.get_visible_name() human.set_hairstyle(random_hairstyle(human.gender), update = FALSE) human.set_facial_hairstyle(random_facial_hairstyle(human.gender), update = FALSE) @@ -24,10 +24,39 @@ human.set_facial_haircolor(human.hair_color, update = FALSE) human.eye_color_left = random_eye_color() human.eye_color_right = human.eye_color_left - human.skin_tone = random_skin_tone() + human.skin_tone = pick(GLOB.skin_tones) human.dna.species.randomize_active_underwear_only(human) // Needs to be called towards the end to update all the UIs just set above human.dna.initialize_dna(create_mutation_blocks = randomize_mutations, randomize_features = TRUE) // Snowflake for Ethereals human.updatehealth() human.updateappearance(mutcolor_update = TRUE) + +/** + * Randomizes a human, but produces someone who looks exceedingly average (by most standards). + * + * (IE, no wacky hair styles / colors) + */ +/proc/randomize_human_normie(mob/living/carbon/human/human, randomize_mutations = FALSE) + // Sorry enbys but statistically you are not average enough + human.gender = human.dna.species.sexes ? pick(MALE, FEMALE) : PLURAL + human.physique = human.gender + human.real_name = human.generate_random_mob_name() + human.name = human.get_visible_name() + human.eye_color_left = random_eye_color() + human.eye_color_right = human.eye_color_left + human.skin_tone = pick(GLOB.skin_tones) + // No underwear generation handled here + var/picked_color = random_hair_color() + human.set_haircolor(picked_color, update = FALSE) + human.set_facial_haircolor(picked_color, update = FALSE) + var/datum/sprite_accessory/hairstyle = SSaccessories.hairstyles_list[random_hairstyle(human.gender)] + if(hairstyle && hairstyle.natural_spawn && !hairstyle.locked) + human.set_hairstyle(hairstyle.name, update = FALSE) + var/datum/sprite_accessory/facial_hair = SSaccessories.facial_hairstyles_list[random_facial_hairstyle(human.gender)] + if(facial_hair && facial_hair.natural_spawn && !facial_hair.locked) + human.set_facial_hairstyle(facial_hair.name, update = FALSE) + // Normal DNA init stuff, these can generally be wacky but we care less, they're aliens after all + human.dna.initialize_dna(newblood_type = random_blood_type(), create_mutation_blocks = randomize_mutations, randomize_features = TRUE) + human.updatehealth() + human.updateappearance(mutcolor_update = TRUE) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index c8c3b660920e..31c34957544e 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -231,10 +231,10 @@ if(isliving(M)) if(iscarbon(M)) //Carbon stuff - if(ismonkey(M)) - M_job = "Monkey" - else if(ishuman(M)) + if(ishuman(M) && M.job) M_job = M.job + else if(ismonkey(M)) + M_job = "Monkey" else if(isalien(M)) //aliens if(islarva(M)) M_job = "Alien larva" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index e5cd0cf21e5e..2313c1741315 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -199,7 +199,12 @@ if(posttransformoutfit && istype(newmob)) newmob.equipOutfit(posttransformoutfit) if("monkey") - M.change_mob_type( /mob/living/carbon/human/species/monkey , null, null, delmob ) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.dna.add_mutation(/datum/mutation/human/race, MUT_NORMAL) + H.dna.activate_mutation(/datum/mutation/human/race) + else + M.change_mob_type( /mob/living/carbon/human/species/monkey , null, null, delmob ) if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob ) diff --git a/code/modules/admin/verbs/anonymousnames.dm b/code/modules/admin/verbs/anonymousnames.dm index 9a71d68637a8..7f56155c9989 100644 --- a/code/modules/admin/verbs/anonymousnames.dm +++ b/code/modules/admin/verbs/anonymousnames.dm @@ -94,7 +94,7 @@ GLOBAL_DATUM(current_anonymous_theme, /datum/anonymous_theme) return var/mob/living/carbon/human/human_mob = player var/original_name = player.real_name //id will not be changed if you do not do this - randomize_human(player) //do this first so the special name can be given + randomize_human_normie(player) //do this first so the special name can be given player.fully_replace_character_name(original_name, anonymous_name(player)) if(extras_enabled) player_extras(player) @@ -131,8 +131,7 @@ GLOBAL_DATUM(current_anonymous_theme, /datum/anonymous_theme) /datum/anonymous_theme/proc/anonymous_name(mob/target) var/datum/client_interface/client = GET_CLIENT(target) var/species_type = client.prefs.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type - return species.random_name(target.gender,1) + return generate_random_name_species_based(target.gender, TRUE, species_type) /** * anonymous_ai_name: generates a random name, based off of whatever the round's anonymousnames is set to (but for sillycones). diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index f69745f1f1d6..4bc8fb042354 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -307,7 +307,7 @@ GLOBAL_VAR_INIT(say_disabled, FALSE) else for(var/obj/item/I in D) qdel(I) - randomize_human(D) + randomize_human_normie(D) D.dress_up_as_job( equipping = JB, visual_only = TRUE, diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index f9879428ddfe..93354850b847 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -225,7 +225,7 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller) if("allspecies") if(!is_funmin) return - var/result = input(holder, "Please choose a new species","Species") as null|anything in GLOB.species_list + var/result = input(holder, "Please choose a new species","Species") as null|anything in sortTim(GLOB.species_list, GLOBAL_PROC_REF(cmp_text_asc)) if(result) SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Mass Species Change", "[result]")) log_admin("[key_name(holder)] turned all humans into [result]") diff --git a/code/modules/antagonists/heretic/magic/realignment.dm b/code/modules/antagonists/heretic/magic/realignment.dm index 081138b7181b..d3ddc03fbbef 100644 --- a/code/modules/antagonists/heretic/magic/realignment.dm +++ b/code/modules/antagonists/heretic/magic/realignment.dm @@ -53,6 +53,7 @@ duration = 8 SECONDS alert_type = /atom/movable/screen/alert/status_effect/realignment tick_interval = 0.2 SECONDS + show_duration = TRUE /datum/status_effect/realignment/get_examine_text() return span_notice("[owner.p_Theyre()] glowing a soft white.") diff --git a/code/modules/antagonists/heretic/status_effects/buffs.dm b/code/modules/antagonists/heretic/status_effects/buffs.dm index 607f485ff642..4a6586caa45e 100644 --- a/code/modules/antagonists/heretic/status_effects/buffs.dm +++ b/code/modules/antagonists/heretic/status_effects/buffs.dm @@ -6,6 +6,7 @@ status_type = STATUS_EFFECT_REFRESH duration = 15 SECONDS alert_type = /atom/movable/screen/alert/status_effect/crucible_soul + show_duration = TRUE var/turf/location /datum/status_effect/crucible_soul/on_apply() @@ -30,6 +31,7 @@ id = "Blessing of Dusk and Dawn" status_type = STATUS_EFFECT_REFRESH duration = 60 SECONDS + show_duration = TRUE alert_type =/atom/movable/screen/alert/status_effect/duskndawn /datum/status_effect/duskndawn/on_apply() @@ -47,6 +49,7 @@ status_type = STATUS_EFFECT_REFRESH duration = 60 SECONDS tick_interval = 1 SECONDS + show_duration = TRUE alert_type = /atom/movable/screen/alert/status_effect/marshal /datum/status_effect/marshal/on_apply() @@ -299,6 +302,7 @@ id = "Moon Grasp Hide Identity" status_type = STATUS_EFFECT_REFRESH duration = 15 SECONDS + show_duration = TRUE alert_type = /atom/movable/screen/alert/status_effect/moon_grasp_hide /datum/status_effect/moon_grasp_hide/on_apply() diff --git a/code/modules/antagonists/wizard/grand_ritual/finales/clown.dm b/code/modules/antagonists/wizard/grand_ritual/finales/clown.dm index bda79c908c04..d2f4a5a07635 100644 --- a/code/modules/antagonists/wizard/grand_ritual/finales/clown.dm +++ b/code/modules/antagonists/wizard/grand_ritual/finales/clown.dm @@ -24,8 +24,7 @@ var/datum/action/cooldown/spell/conjure_item/clown_pockets/new_spell = new(victim) new_spell.Grant(victim) continue - if (!ismonkey(victim)) // Monkeys cannot yet wear clothes - dress_as_magic_clown(victim) + dress_as_magic_clown(victim) if (prob(15)) create_vendetta(victim.mind, invoker.mind) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 50054417362d..b506b1f4df48 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -83,21 +83,6 @@ . = ..() disconnect_from_area(area_to_unregister) -///adds a gas or list of gases to our filter_types. used so that the scrubber can check if its supposed to be processing after each change -/obj/machinery/atmospherics/components/unary/vent_scrubber/proc/add_filters(filter_or_filters) - if(!islist(filter_or_filters)) - filter_or_filters = list(filter_or_filters) - - for(var/gas_to_filter in filter_or_filters) - var/translated_gas = istext(gas_to_filter) ? gas_id2path(gas_to_filter) : gas_to_filter - - if(ispath(translated_gas, /datum/gas)) - filter_types |= translated_gas - continue - - atmos_conditions_changed() - return TRUE - ///remove a gas or list of gases from our filter_types.used so that the scrubber can check if its supposed to be processing after each change /obj/machinery/atmospherics/components/unary/vent_scrubber/proc/remove_filters(filter_or_filters) if(!islist(filter_or_filters)) diff --git a/code/modules/capture_the_flag/medieval_sim/medisim_game.dm b/code/modules/capture_the_flag/medieval_sim/medisim_game.dm index 3546ce0881d6..9b274de740f4 100644 --- a/code/modules/capture_the_flag/medieval_sim/medisim_game.dm +++ b/code/modules/capture_the_flag/medieval_sim/medisim_game.dm @@ -23,7 +23,7 @@ if(!.) return var/mob/living/carbon/human/human_knight = . - randomize_human(human_knight) + randomize_human_normie(human_knight) human_knight.dna.add_mutation(/datum/mutation/human/medieval, MUT_OTHER) var/oldname = human_knight.name var/title = "error" diff --git a/code/modules/client/preferences/_preference.dm b/code/modules/client/preferences/_preference.dm index 82a9d24451d2..7522e4ff3af7 100644 --- a/code/modules/client/preferences/_preference.dm +++ b/code/modules/client/preferences/_preference.dm @@ -18,16 +18,19 @@ /// support the "use gender" option. #define PREFERENCE_PRIORITY_BODY_TYPE 5 +/// Used for preferences that rely on body setup being finalized. +#define PREFERENCE_PRORITY_LATE_BODY_TYPE 6 + /// Equpping items based on preferences. /// Should happen after species and body type to make sure it looks right. /// Mostly redundant, but a safety net for saving/loading. -#define PREFERENCE_PRIORITY_LOADOUT 6 +#define PREFERENCE_PRIORITY_LOADOUT 7 /// The priority at which names are decided, needed for proper randomization. -#define PREFERENCE_PRIORITY_NAMES 7 +#define PREFERENCE_PRIORITY_NAMES 8 /// Preferences that aren't names, but change the name changes set by PREFERENCE_PRIORITY_NAMES. -#define PREFERENCE_PRIORITY_NAME_MODIFICATIONS 8 +#define PREFERENCE_PRIORITY_NAME_MODIFICATIONS 9 /// The maximum preference priority, keep this updated, but don't use it for `priority`. #define MAX_PREFERENCE_PRIORITY PREFERENCE_PRIORITY_NAME_MODIFICATIONS @@ -336,7 +339,7 @@ GLOBAL_LIST_INIT(preference_entries_by_key, init_preference_entries_by_key()) ) var/species_type = preferences.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type + var/datum/species/species = GLOB.species_prototypes[species_type] if (!(savefile_key in species.get_features())) return FALSE diff --git a/code/modules/client/preferences/age.dm b/code/modules/client/preferences/age.dm index cad9786ce1fe..07b4644bc6a9 100644 --- a/code/modules/client/preferences/age.dm +++ b/code/modules/client/preferences/age.dm @@ -8,3 +8,6 @@ /datum/preference/numeric/age/apply_to_human(mob/living/carbon/human/target, value) target.age = value + +/datum/preference/numeric/age/create_informed_default_value(datum/preferences/preferences) + return rand(max(minimum, 21), min(maximum, 50)) diff --git a/code/modules/client/preferences/body_type.dm b/code/modules/client/preferences/body_type.dm index 469b564e46f7..6b27e0f0f0da 100644 --- a/code/modules/client/preferences/body_type.dm +++ b/code/modules/client/preferences/body_type.dm @@ -5,6 +5,7 @@ priority = PREFERENCE_PRIORITY_BODY_TYPE savefile_key = "body_type" savefile_identifier = PREFERENCE_CHARACTER + can_randomize = FALSE /datum/preference/choiced/body_type/init_possible_values() return list(USE_GENDER, MALE, FEMALE) diff --git a/code/modules/client/preferences/clothing.dm b/code/modules/client/preferences/clothing.dm index cf200ad1ffd6..b81291c7cbdd 100644 --- a/code/modules/client/preferences/clothing.dm +++ b/code/modules/client/preferences/clothing.dm @@ -33,6 +33,9 @@ DMESSENGER, ) +/datum/preference/choiced/backpack/create_default_value() + return GBACKPACK + /datum/preference/choiced/backpack/icon_for(value) switch (value) if (GBACKPACK) @@ -66,6 +69,7 @@ /datum/preference/choiced/jumpsuit savefile_key = "jumpsuit_style" savefile_identifier = PREFERENCE_CHARACTER + priority = PREFERENCE_PRIORITY_BODY_TYPE main_feature_name = "Jumpsuit" category = PREFERENCE_CATEGORY_CLOTHING should_generate_icons = TRUE @@ -86,6 +90,15 @@ /datum/preference/choiced/jumpsuit/apply_to_human(mob/living/carbon/human/target, value) target.jumpsuit_style = value +/datum/preference/choiced/jumpsuit/create_informed_default_value(datum/preferences/preferences) + switch(preferences.read_preference(/datum/preference/choiced/gender)) + if(MALE) + return PREF_SUIT + if(FEMALE) + return PREF_SKIRT + + return ..() + /// Socks preference /datum/preference/choiced/socks savefile_key = "socks" @@ -93,10 +106,14 @@ main_feature_name = "Socks" category = PREFERENCE_CATEGORY_CLOTHING should_generate_icons = TRUE + can_randomize = FALSE /datum/preference/choiced/socks/init_possible_values() return assoc_to_keys_features(GLOB.socks_list) +/datum/preference/choiced/socks/create_default_value() + return /datum/sprite_accessory/socks/nude::name + /datum/preference/choiced/socks/icon_for(value) var/static/icon/lower_half @@ -114,13 +131,27 @@ /datum/preference/choiced/undershirt savefile_key = "undershirt" savefile_identifier = PREFERENCE_CHARACTER + priority = PREFERENCE_PRIORITY_BODY_TYPE main_feature_name = "Undershirt" category = PREFERENCE_CATEGORY_CLOTHING should_generate_icons = TRUE + can_randomize = FALSE /datum/preference/choiced/undershirt/init_possible_values() return assoc_to_keys_features(GLOB.undershirt_list) +/datum/preference/choiced/undershirt/create_default_value() + return /datum/sprite_accessory/undershirt/nude::name + +/datum/preference/choiced/undershirt/create_informed_default_value(datum/preferences/preferences) + switch(preferences.read_preference(/datum/preference/choiced/gender)) + if(MALE) + return /datum/sprite_accessory/undershirt/nude::name + if(FEMALE) + return /datum/sprite_accessory/undershirt/sports_bra::name + + return ..() + /datum/preference/choiced/undershirt/icon_for(value) var/static/icon/body if (isnull(body)) @@ -152,10 +183,14 @@ main_feature_name = "Underwear" category = PREFERENCE_CATEGORY_CLOTHING should_generate_icons = TRUE + can_randomize = FALSE /datum/preference/choiced/underwear/init_possible_values() return assoc_to_keys_features(GLOB.underwear_list) +/datum/preference/choiced/underwear/create_default_value() + return /datum/sprite_accessory/underwear/male_hearts::name + /datum/preference/choiced/underwear/icon_for(value) var/static/icon/lower_half @@ -175,7 +210,7 @@ return FALSE var/species_type = preferences.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type + var/datum/species/species = GLOB.species_prototypes[species_type] return !(TRAIT_NO_UNDERWEAR in species.inherent_traits) /datum/preference/choiced/underwear/compile_constant_data() diff --git a/code/modules/client/preferences/gender.dm b/code/modules/client/preferences/gender.dm index bea6674d7b08..a95874f16068 100644 --- a/code/modules/client/preferences/gender.dm +++ b/code/modules/client/preferences/gender.dm @@ -11,3 +11,8 @@ if(!target.dna.species.sexes) value = PLURAL //disregard gender preferences on this species target.gender = value + +/datum/preference/choiced/gender/create_informed_default_value(datum/preferences/preferences) + // The only reason I'm limiting this to male or female + // is that hairstyle randomization handles enbies poorly + return pick(MALE, FEMALE) diff --git a/code/modules/client/preferences/glasses.dm b/code/modules/client/preferences/glasses.dm index 03c975abce78..d8ec141dbe8d 100644 --- a/code/modules/client/preferences/glasses.dm +++ b/code/modules/client/preferences/glasses.dm @@ -4,6 +4,9 @@ savefile_identifier = PREFERENCE_CHARACTER should_generate_icons = TRUE +/datum/preference/choiced/glasses/create_default_value() + return "Random" + /datum/preference/choiced/glasses/init_possible_values() return assoc_to_keys(GLOB.nearsighted_glasses) + "Random" diff --git a/code/modules/client/preferences/language.dm b/code/modules/client/preferences/language.dm index f602d6b3a66c..637c4542da27 100644 --- a/code/modules/client/preferences/language.dm +++ b/code/modules/client/preferences/language.dm @@ -3,6 +3,9 @@ savefile_key = "language" savefile_identifier = PREFERENCE_CHARACTER +/datum/preference/choiced/language/create_default_value() + return "Random" + /datum/preference/choiced/language/is_accessible(datum/preferences/preferences) if (!..(preferences)) return FALSE diff --git a/code/modules/client/preferences/names.dm b/code/modules/client/preferences/names.dm index 476fc7381a28..9afc8da18c1a 100644 --- a/code/modules/client/preferences/names.dm +++ b/code/modules/client/preferences/names.dm @@ -45,12 +45,11 @@ target.log_mob_tag("TAG: [target.tag] RENAMED: [key_name(target)]") /datum/preference/name/real_name/create_informed_default_value(datum/preferences/preferences) - var/species_type = preferences.read_preference(/datum/preference/choiced/species) - var/gender = preferences.read_preference(/datum/preference/choiced/gender) - - var/datum/species/species = new species_type - - return species.random_name(gender, unique = TRUE) + return generate_random_name_species_based( + preferences.read_preference(/datum/preference/choiced/gender), + TRUE, + preferences.read_preference(/datum/preference/choiced/species), + ) /datum/preference/name/real_name/deserialize(input, datum/preferences/preferences) input = ..(input) @@ -73,9 +72,7 @@ savefile_key = "human_name" /datum/preference/name/backup_human/create_informed_default_value(datum/preferences/preferences) - var/gender = preferences.read_preference(/datum/preference/choiced/gender) - - return random_unique_name(gender) + return generate_random_name(preferences.read_preference(/datum/preference/choiced/gender)) /datum/preference/name/clown savefile_key = "clown_name" diff --git a/code/modules/client/preferences/species.dm b/code/modules/client/preferences/species.dm index 9e4923d2b11d..1c74d7981b65 100644 --- a/code/modules/client/preferences/species.dm +++ b/code/modules/client/preferences/species.dm @@ -34,7 +34,7 @@ for (var/species_id in get_selectable_species()) var/species_type = GLOB.species_list[species_id] - var/datum/species/species = new species_type() + var/datum/species/species = GLOB.species_prototypes[species_type] data[species_id] = list() data[species_id]["name"] = species.name @@ -47,6 +47,4 @@ data[species_id]["perks"] = species.get_species_perks() data[species_id]["diet"] = species.get_species_diet() - qdel(species) - return data diff --git a/code/modules/client/preferences/species_features/basic.dm b/code/modules/client/preferences/species_features/basic.dm index abf4ea0e44e2..e6d86396b04a 100644 --- a/code/modules/client/preferences/species_features/basic.dm +++ b/code/modules/client/preferences/species_features/basic.dm @@ -52,7 +52,7 @@ return random_eye_color() /datum/preference/choiced/facial_hairstyle - priority = PREFERENCE_PRIORITY_BODYPARTS + priority = PREFERENCE_PRORITY_LATE_BODY_TYPE savefile_key = "facial_style_name" savefile_identifier = PREFERENCE_CHARACTER category = PREFERENCE_CATEGORY_FEATURES @@ -69,15 +69,32 @@ /datum/preference/choiced/facial_hairstyle/apply_to_human(mob/living/carbon/human/target, value) target.set_facial_hairstyle(value, update = FALSE) +/datum/preference/choiced/facial_hairstyle/create_default_value() + return /datum/sprite_accessory/facial_hair/shaved::name + +/datum/preference/choiced/facial_hairstyle/create_informed_default_value(datum/preferences/preferences) + var/gender = preferences.read_preference(/datum/preference/choiced/gender) + var/species_type = preferences.read_preference(/datum/preference/choiced/species) + var/datum/species/species_real = GLOB.species_prototypes[species_type] + if(!gender || !species_real || !species_real.sexes) + return ..() + + var/picked_beard = random_facial_hairstyle(gender) + var/datum/sprite_accessory/beard_style = SSaccessories.facial_hairstyles_list[picked_beard] + if(!beard_style || !beard_style.natural_spawn || beard_style.locked) // Invalid, go with god(bald) + return ..() + + return picked_beard + /datum/preference/choiced/facial_hairstyle/compile_constant_data() var/list/data = ..() - data[SUPPLEMENTAL_FEATURE_KEY] = "facial_hair_color" + data[SUPPLEMENTAL_FEATURE_KEY] = /datum/preference/color/facial_hair_color::savefile_key return data /datum/preference/color/facial_hair_color - priority = PREFERENCE_PRIORITY_BODYPARTS + priority = PREFERENCE_PRORITY_LATE_BODY_TYPE // Need to happen after hair oclor is set so we can match by default savefile_key = "facial_hair_color" savefile_identifier = PREFERENCE_CHARACTER category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES @@ -86,12 +103,16 @@ /datum/preference/color/facial_hair_color/apply_to_human(mob/living/carbon/human/target, value) target.set_facial_haircolor(value, update = FALSE) +/datum/preference/color/facial_hair_color/create_informed_default_value(datum/preferences/preferences) + return preferences.read_preference(/datum/preference/color/hair_color) || random_hair_color() + /datum/preference/choiced/facial_hair_gradient - priority = PREFERENCE_PRIORITY_BODYPARTS + priority = PREFERENCE_PRORITY_LATE_BODY_TYPE category = PREFERENCE_CATEGORY_SECONDARY_FEATURES savefile_identifier = PREFERENCE_CHARACTER savefile_key = "facial_hair_gradient" relevant_head_flag = HEAD_FACIAL_HAIR + can_randomize = FALSE /datum/preference/choiced/facial_hair_gradient/init_possible_values() return assoc_to_keys_features(GLOB.facial_hair_gradients_list) @@ -100,10 +121,10 @@ target.set_facial_hair_gradient_style(new_style = value, update = FALSE) /datum/preference/choiced/facial_hair_gradient/create_default_value() - return "None" + return /datum/sprite_accessory/gradient/none::name /datum/preference/color/facial_hair_gradient - priority = PREFERENCE_PRIORITY_BODYPARTS + priority = PREFERENCE_PRORITY_LATE_BODY_TYPE category = PREFERENCE_CATEGORY_SECONDARY_FEATURES savefile_identifier = PREFERENCE_CHARACTER savefile_key = "facial_hair_gradient_color" @@ -115,10 +136,10 @@ /datum/preference/color/facial_hair_gradient/is_accessible(datum/preferences/preferences) if (!..(preferences)) return FALSE - return preferences.read_preference(/datum/preference/choiced/facial_hair_gradient) != "None" + return preferences.read_preference(/datum/preference/choiced/facial_hair_gradient) != /datum/sprite_accessory/gradient/none::name /datum/preference/color/hair_color - priority = PREFERENCE_PRIORITY_BODYPARTS + priority = PREFERENCE_PRIORITY_BODY_TYPE savefile_key = "hair_color" savefile_identifier = PREFERENCE_CHARACTER category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES @@ -127,8 +148,11 @@ /datum/preference/color/hair_color/apply_to_human(mob/living/carbon/human/target, value) target.set_haircolor(value, update = FALSE) +/datum/preference/color/hair_color/create_informed_default_value(datum/preferences/preferences) + return random_hair_color() + /datum/preference/choiced/hairstyle - priority = PREFERENCE_PRIORITY_BODYPARTS + priority = PREFERENCE_PRIORITY_BODY_TYPE // Happens after gender so we can picka hairstyle based on that savefile_key = "hairstyle_name" savefile_identifier = PREFERENCE_CHARACTER category = PREFERENCE_CATEGORY_FEATURES @@ -146,19 +170,37 @@ /datum/preference/choiced/hairstyle/apply_to_human(mob/living/carbon/human/target, value) target.set_hairstyle(value, update = FALSE) +/datum/preference/choiced/hairstyle/create_default_value() + return /datum/sprite_accessory/hair/bald::name + +/datum/preference/choiced/hairstyle/create_informed_default_value(datum/preferences/preferences) + var/gender = preferences.read_preference(/datum/preference/choiced/gender) + var/species_type = preferences.read_preference(/datum/preference/choiced/species) + var/datum/species/species_real = GLOB.species_prototypes[species_type] + if(!gender || !species_real || !species_real.sexes) + return ..() + + var/picked_hair = random_hairstyle(gender) + var/datum/sprite_accessory/hair_style = SSaccessories.hairstyles_list[picked_hair] + if(!hair_style || !hair_style.natural_spawn || hair_style.locked) // Invalid, go with god(bald) + return ..() + + return picked_hair + /datum/preference/choiced/hairstyle/compile_constant_data() var/list/data = ..() - data[SUPPLEMENTAL_FEATURE_KEY] = "hair_color" + data[SUPPLEMENTAL_FEATURE_KEY] = /datum/preference/color/hair_color::savefile_key return data /datum/preference/choiced/hair_gradient - priority = PREFERENCE_PRIORITY_BODYPARTS + priority = PREFERENCE_PRIORITY_BODY_TYPE category = PREFERENCE_CATEGORY_SECONDARY_FEATURES savefile_identifier = PREFERENCE_CHARACTER savefile_key = "hair_gradient" relevant_head_flag = HEAD_HAIR + can_randomize = FALSE /datum/preference/choiced/hair_gradient/init_possible_values() return assoc_to_keys_features(GLOB.hair_gradients_list) @@ -167,10 +209,10 @@ target.set_hair_gradient_style(new_style = value, update = FALSE) /datum/preference/choiced/hair_gradient/create_default_value() - return "None" + return /datum/sprite_accessory/gradient/none::name /datum/preference/color/hair_gradient - priority = PREFERENCE_PRIORITY_BODYPARTS + priority = PREFERENCE_PRIORITY_BODY_TYPE category = PREFERENCE_CATEGORY_SECONDARY_FEATURES savefile_identifier = PREFERENCE_CHARACTER savefile_key = "hair_gradient_color" @@ -182,4 +224,4 @@ /datum/preference/color/hair_gradient/is_accessible(datum/preferences/preferences) if (!..(preferences)) return FALSE - return preferences.read_preference(/datum/preference/choiced/hair_gradient) != "None" + return preferences.read_preference(/datum/preference/choiced/hair_gradient) != /datum/sprite_accessory/gradient/none::name diff --git a/code/modules/client/preferences/species_features/felinid.dm b/code/modules/client/preferences/species_features/felinid.dm index b9f3c7bfa337..de794d3b770a 100644 --- a/code/modules/client/preferences/species_features/felinid.dm +++ b/code/modules/client/preferences/species_features/felinid.dm @@ -29,5 +29,4 @@ target.dna.features["ears"] = value /datum/preference/choiced/ears/create_default_value() - var/datum/sprite_accessory/ears/cat/ears = /datum/sprite_accessory/ears/cat - return initial(ears.name) + return /datum/sprite_accessory/ears/cat::name diff --git a/code/modules/client/preferences/species_features/lizard.dm b/code/modules/client/preferences/species_features/lizard.dm index 8c53d0ba45c6..c070b195f498 100644 --- a/code/modules/client/preferences/species_features/lizard.dm +++ b/code/modules/client/preferences/species_features/lizard.dm @@ -142,5 +142,4 @@ target.dna.features["tail_lizard"] = value /datum/preference/choiced/lizard_tail/create_default_value() - var/datum/sprite_accessory/tails/lizard/smooth/tail = /datum/sprite_accessory/tails/lizard/smooth - return initial(tail.name) + return /datum/sprite_accessory/tails/lizard/smooth::name diff --git a/code/modules/client/preferences/species_features/monkey.dm b/code/modules/client/preferences/species_features/monkey.dm new file mode 100644 index 000000000000..7ad357e21afd --- /dev/null +++ b/code/modules/client/preferences/species_features/monkey.dm @@ -0,0 +1,15 @@ +/datum/preference/choiced/monkey_tail + savefile_key = "feature_monkey_tail" + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + relevant_external_organ = /obj/item/organ/external/tail/monkey + can_randomize = FALSE + +/datum/preference/choiced/monkey_tail/init_possible_values() + return assoc_to_keys_features(GLOB.tails_list_monkey) + +/datum/preference/choiced/monkey_tail/apply_to_human(mob/living/carbon/human/target, value) + target.dna.features["tail_monkey"] = value + +/datum/preference/choiced/monkey_tail/create_default_value() + return /datum/sprite_accessory/tails/monkey/default::name diff --git a/code/modules/client/preferences/species_features/mutants.dm b/code/modules/client/preferences/species_features/mutants.dm index 7ecf25d9abce..1d18c78ee1ad 100644 --- a/code/modules/client/preferences/species_features/mutants.dm +++ b/code/modules/client/preferences/species_features/mutants.dm @@ -9,7 +9,7 @@ return FALSE var/species_type = preferences.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type + var/datum/species/species = GLOB.species_prototypes[species_type] return !(TRAIT_FIXED_MUTANT_COLORS in species.inherent_traits) /datum/preference/color/mutant_color/create_default_value() diff --git a/code/modules/client/preferences/underwear_color.dm b/code/modules/client/preferences/underwear_color.dm index 6e64b4423e50..1304bdaf2da8 100644 --- a/code/modules/client/preferences/underwear_color.dm +++ b/code/modules/client/preferences/underwear_color.dm @@ -8,7 +8,7 @@ return FALSE var/species_type = preferences.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type + var/datum/species/species = GLOB.species_prototypes[species_type] return !(TRAIT_NO_UNDERWEAR in species.inherent_traits) /datum/preference/color/underwear_color/apply_to_human(mob/living/carbon/human/target, value) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 15ba900b756a..6451d180e46a 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -291,13 +291,13 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car return FALSE // Read everything into cache - for (var/preference_type in GLOB.preference_entries) - var/datum/preference/preference = GLOB.preference_entries[preference_type] + // Uses priority order as some values may rely on others for creating default values + for (var/datum/preference/preference as anything in get_preferences_in_priority_order()) if (preference.savefile_identifier != PREFERENCE_CHARACTER) continue - value_cache -= preference_type - read_preference(preference_type) + value_cache -= preference.type + read_preference(preference.type) //Character randomise = save_data?["randomise"] diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 9a3d94e1dbf4..ca82b687d8b4 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -69,6 +69,10 @@ greyscale_config_worn = /datum/greyscale_config/labcoat/worn greyscale_colors = "#EEEEEE#4A77A1#4A77A1#7095C2" +/obj/item/clothing/suit/toggle/labcoat/genetics/Initialize(mapload) + . = ..() + allowed += /obj/item/sequence_scanner + /obj/item/clothing/suit/toggle/labcoat/chemist name = "chemist labcoat" desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder." @@ -106,6 +110,9 @@ allowed += list( /obj/item/autopsy_scanner, /obj/item/scythe, + /obj/item/shovel, + /obj/item/shovel/serrated, + /obj/item/trench_tool, ) /obj/item/clothing/suit/toggle/labcoat/science diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index 7ade6df6f7c3..45f17146617c 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -388,6 +388,9 @@ allowed += list( /obj/item/autopsy_scanner, /obj/item/scythe, + /obj/item/shovel, + /obj/item/shovel/serrated, + /obj/item/trench_tool, ) /obj/item/clothing/head/hooded/winterhood/medical/coroner @@ -503,6 +506,10 @@ inhand_icon_state = null hoodtype = /obj/item/clothing/head/hooded/winterhood/science/genetics +/obj/item/clothing/suit/hooded/wintercoat/science/genetics/Initialize(mapload) + . = ..() + allowed += /obj/item/sequence_scanner + /obj/item/clothing/head/hooded/winterhood/science/genetics desc = "A white winter coat hood. It's warm." icon_state = "hood_genetics" @@ -630,6 +637,8 @@ /obj/item/storage/bag/ore, /obj/item/t_scanner/adv_mining_scanner, /obj/item/tank/internals, + /obj/item/shovel, + /obj/item/trench_tool, ) armor_type = /datum/armor/wintercoat_miner hoodtype = /obj/item/clothing/head/hooded/winterhood/miner diff --git a/code/modules/clothing/under/suits.dm b/code/modules/clothing/under/suits.dm index 02f047c2f489..0dbf1880d7d2 100644 --- a/code/modules/clothing/under/suits.dm +++ b/code/modules/clothing/under/suits.dm @@ -84,7 +84,6 @@ desc = "It's a very smart uniform with a special pocket for tip." icon_state = "waiter" inhand_icon_state = "waiter" - supports_variations_flags = CLOTHING_MONKEY_VARIATION /obj/item/clothing/under/suit/black_really name = "executive suit" diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 20a5cda05920..e6f7c9f26d00 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -8,7 +8,6 @@ alt_covers_chest = TRUE icon = 'icons/obj/clothing/under/syndicate.dmi' worn_icon = 'icons/mob/clothing/under/syndicate.dmi' - supports_variations_flags = CLOTHING_MONKEY_VARIATION /datum/armor/clothing_under/syndicate melee = 10 diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 06cb8cbc55d9..65b5d9a4100d 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -117,6 +117,9 @@ ///RPG job names, for the memes var/rpg_title + /// Alternate titles to register as pointing to this job. + var/list/alternate_titles + /// Does this job ignore human authority? var/ignore_human_authority = FALSE @@ -545,11 +548,11 @@ dna.species.roundstart_changed = TRUE apply_pref_name(/datum/preference/name/backup_human, player_client) if(CONFIG_GET(flag/force_random_names)) - var/species_type = player_client.prefs.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type - - var/gender = player_client.prefs.read_preference(/datum/preference/choiced/gender) - real_name = species.random_name(gender, TRUE) + real_name = generate_random_name_species_based( + player_client.prefs.read_preference(/datum/preference/choiced/gender), + TRUE, + player_client.prefs.read_preference(/datum/preference/choiced/species), + ) dna.update_dna_identity() @@ -571,9 +574,11 @@ if(!player_client) return // Disconnected while checking the appearance ban. - var/species_type = player_client.prefs.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type - organic_name = species.random_name(player_client.prefs.read_preference(/datum/preference/choiced/gender), TRUE) + organic_name = generate_random_name_species_based( + player_client.prefs.read_preference(/datum/preference/choiced/gender), + TRUE, + player_client.prefs.read_preference(/datum/preference/choiced/species), + ) else if(!player_client) return // Disconnected while checking the appearance ban. diff --git a/code/modules/language/_language.dm b/code/modules/language/_language.dm new file mode 100644 index 000000000000..3876720cbd44 --- /dev/null +++ b/code/modules/language/_language.dm @@ -0,0 +1,164 @@ +/// maximum of 50 specific scrambled lines per language +#define SCRAMBLE_CACHE_LEN 50 + +/// Datum based languages. Easily editable and modular. +/datum/language + /// Fluff name of language if any. + var/name = "an unknown language" + /// Short description for 'Check Languages'. + var/desc = "A language." + /// Character used to speak in language + /// If key is null, then the language isn't real or learnable. + var/key + /// Various language flags. + var/flags = NONE + /// Used when scrambling text for a non-speaker. + var/list/syllables + /// List of characters that will randomly be inserted between syllables. + var/list/special_characters + /// Likelihood of making a new sentence after each syllable. + var/sentence_chance = 5 + /// Likelihood of getting a space in the random scramble string + var/space_chance = 55 + /// Spans to apply from this language + var/list/spans + /// Cache of recently scrambled text + /// This allows commonly reused words to not require a full re-scramble every time. + var/list/scramble_cache = list() + /// The language that an atom knows with the highest "default_priority" is selected by default. + var/default_priority = 0 + /// If TRUE, when generating names, we will always use the default human namelist, even if we have syllables set. + /// This is to be used for languages with very outlandish syllable lists (like pirates). + var/always_use_default_namelist = FALSE + /// Icon displayed in the chat window when speaking this language. + /// if you are seeing someone speak popcorn language, then something is wrong. + var/icon = 'icons/misc/language.dmi' + /// Icon state displayed in the chat window when speaking this language. + var/icon_state = "popcorn" + + /// By default, random names picks this many names + var/default_name_count = 2 + /// By default, random names picks this many syllables (min) + var/default_name_syllable_min = 2 + /// By default, random names picks this many syllables (max) + var/default_name_syllable_max = 4 + /// What char to place in between randomly generated names + var/random_name_spacer = " " + +/// Checks whether we should display the language icon to the passed hearer. +/datum/language/proc/display_icon(atom/movable/hearer) + var/understands = hearer.has_language(src.type) + if((flags & LANGUAGE_HIDE_ICON_IF_UNDERSTOOD) && understands) + return FALSE + if((flags & LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD) && !understands) + return FALSE + return TRUE + +/// Returns the icon to display in the chat window when speaking this language. +/datum/language/proc/get_icon() + var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/chat) + return sheet.icon_tag("language-[icon_state]") + +/// Simple helper for getting a default firstname lastname +/datum/language/proc/default_name(gender = NEUTER) + if(gender != MALE) + gender = pick(MALE, FEMALE) + if(gender == FEMALE) + return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) + return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) + + +/** + * Generates a random name this language would use. + * + * * gender: What gender to generate from, if neuter / plural coin flips between male and female + * * name_count: How many names to generate in, by default 2, for firstname lastname + * * syllable_count: How many syllables to generate in each name, min + * * syllable_max: How many syllables to generate in each name, max + * * force_use_syllables: If the name should be generated from the syllables list. + * Only used for subtypes which implement custom name lists. Also requires the language has syllables set. + */ +/datum/language/proc/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(gender != MALE) + gender = pick(MALE, FEMALE) + if(!length(syllables) || always_use_default_namelist) + return default_name(gender) + + var/list/full_name = list() + for(var/i in 1 to name_count) + var/new_name = "" + for(var/j in 1 to rand(default_name_syllable_min, default_name_syllable_max)) + new_name += pick_weight_recursive(syllables) + full_name += capitalize(lowertext(new_name)) + + return jointext(full_name, random_name_spacer) + +/// Generates a random name, and attempts to ensure it is unique (IE, no other mob in the world has it) +/datum/language/proc/get_random_unique_name(...) + var/result = get_random_name(arglist(args)) + for(var/i in 1 to 10) + if(!findname(result)) + break + result = get_random_name(arglist(args)) + + return result + +/datum/language/proc/check_cache(input) + var/lookup = scramble_cache[input] + if(lookup) + scramble_cache -= input + scramble_cache[input] = lookup + . = lookup + +/datum/language/proc/add_to_cache(input, scrambled_text) + // Add it to cache, cutting old entries if the list is too long + scramble_cache[input] = scrambled_text + if(scramble_cache.len > SCRAMBLE_CACHE_LEN) + scramble_cache.Cut(1, scramble_cache.len-SCRAMBLE_CACHE_LEN-1) + +/datum/language/proc/scramble(input) + + if(!length(syllables)) + return stars(input) + + // If the input is cached already, move it to the end of the cache and return it + var/lookup = check_cache(input) + if(lookup) + return lookup + + var/input_size = length_char(input) + var/scrambled_text = "" + var/capitalize = TRUE + + while(length_char(scrambled_text) < input_size) + var/next = (length(scrambled_text) && length(special_characters) && prob(1)) ? pick(special_characters) : pick_weight_recursive(syllables) + if(capitalize) + next = capitalize(next) + capitalize = FALSE + scrambled_text += next + var/chance = rand(100) + if(chance <= sentence_chance) + scrambled_text += ". " + capitalize = TRUE + else if(chance > sentence_chance && chance <= space_chance) + scrambled_text += " " + + scrambled_text = trim(scrambled_text) + var/ending = copytext_char(scrambled_text, -1) + if(ending == ".") + scrambled_text = copytext_char(scrambled_text, 1, -2) + var/input_ending = copytext_char(input, -1) + if(input_ending in list("!","?",".")) + scrambled_text += input_ending + + add_to_cache(input, scrambled_text) + + return scrambled_text + +#undef SCRAMBLE_CACHE_LEN diff --git a/code/modules/language/language_holder.dm b/code/modules/language/_language_holder.dm similarity index 100% rename from code/modules/language/language_holder.dm rename to code/modules/language/_language_holder.dm diff --git a/code/modules/language/language_manuals.dm b/code/modules/language/_language_manuals.dm similarity index 100% rename from code/modules/language/language_manuals.dm rename to code/modules/language/_language_manuals.dm diff --git a/code/modules/language/language_menu.dm b/code/modules/language/_language_menu.dm similarity index 100% rename from code/modules/language/language_menu.dm rename to code/modules/language/_language_menu.dm diff --git a/code/modules/language/aphasia.dm b/code/modules/language/aphasia.dm index 9d4e317c4d88..2d82b79892ee 100644 --- a/code/modules/language/aphasia.dm +++ b/code/modules/language/aphasia.dm @@ -7,3 +7,4 @@ space_chance = 20 default_priority = 10 icon_state = "aphasia" + always_use_default_namelist = TRUE // Shouldn't generate names for this anyways diff --git a/code/modules/language/beachbum.dm b/code/modules/language/beachbum.dm index d78be9788f35..bd319e717ffd 100644 --- a/code/modules/language/beachbum.dm +++ b/code/modules/language/beachbum.dm @@ -17,5 +17,5 @@ "heavy", "stellar", "excellent", "triumphant", "babe", "four", "tail", "trim", "tube", "wobble", "roll", "gnarly", "epic", ) - icon_state = "beach" + always_use_default_namelist = TRUE diff --git a/code/modules/language/buzzwords.dm b/code/modules/language/buzzwords.dm index c46088c0ad5b..2ed033bca345 100644 --- a/code/modules/language/buzzwords.dm +++ b/code/modules/language/buzzwords.dm @@ -8,3 +8,4 @@ ) icon_state = "buzz" default_priority = 90 + always_use_default_namelist = TRUE // Otherwise we get Bzzbzbz Zzzbzbz. diff --git a/code/modules/language/calcic.dm b/code/modules/language/calcic.dm index f4882e1105b9..477e442203bc 100644 --- a/code/modules/language/calcic.dm +++ b/code/modules/language/calcic.dm @@ -13,4 +13,16 @@ icon_state = "calcic" default_priority = 90 +/datum/language/calcic/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(force_use_syllables) + return ..() + + return "[pick(GLOB.plasmaman_names)] \Roman[rand(1, 99)]" + // Yeah, this goes to skeletons too, since it's basically just skeleton clacking. diff --git a/code/modules/language/codespeak.dm b/code/modules/language/codespeak.dm index 09db7ef511b4..242095b3bb7f 100644 --- a/code/modules/language/codespeak.dm +++ b/code/modules/language/codespeak.dm @@ -5,6 +5,7 @@ default_priority = 0 flags = TONGUELESS_SPEECH | LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD icon_state = "codespeak" + always_use_default_namelist = TRUE // No syllables anyways /datum/language/codespeak/scramble(input) var/lookup = check_cache(input) diff --git a/code/modules/language/common.dm b/code/modules/language/common.dm index 2dc7294983c0..6bad808fef26 100644 --- a/code/modules/language/common.dm +++ b/code/modules/language/common.dm @@ -7,50 +7,51 @@ default_priority = 100 icon_state = "galcom" - -//Syllable Lists -/* - This list really long, mainly because I can't make up my mind about which mandarin syllables should be removed, - and the english syllables had to be duplicated so that there is roughly a 50-50 weighting. - - Sources: - http://www.sttmedia.com/syllablefrequency-english - http://www.chinahighlights.com/travelguide/learning-chinese/pinyin-syllables.htm -*/ -/datum/language/common/syllables = list( - // each sublist has an equal chance of being picked, so each syllable has an equal chance of being english or chinese - list( - "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", - "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "cei", "cen", "ceng", "cha", "chai", - "chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", "chua", "chuai", "chuan", "chuang", "chui", "chun", - "chuo", "ci", "cong", "cou", "cu", "cuan", "cui", "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "dei", - "den", "deng", "di", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du", "duan", "dui", "dun", "duo", "e", - "ei", "en", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fou", "fu", "ga", "gai", "gan", "gang", - "gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun", "guo", "ha", - "hai", "han", "hang", "hao", "he", "hei", "hen", "heng", "hm", "hng", "hong", "hou", "hu", "hua", "huai", "huan", - "huang", "hui", "hun", "huo", "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "juan", - "jue", "jun", "ka", "kai", "kan", "kang", "kao", "ke", "kei", "ken", "keng", "kong", "kou", "ku", "kua", "kuai", - "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao", "le", "lei", "leng", "li", "lia", "lian", - "liang", "liao", "lie", "lin", "ling", "liu", "long", "lou", "lu", "luan", "lun", "luo", "ma", "mai", "man", "mang", - "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming", "miu", "mo", "mou", "mu", "na", - "nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ng", "ni", "nian", "niang", "niao", "nie", "nin", "ning", - "niu", "nong", "nou", "nu", "nuan", "nuo", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng", - "pi", "pian", "piao", "pie", "pin", "ping", "po", "pou", "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", - "qing", "qiong", "qiu", "qu", "quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", - "ru", "rua", "ruan", "rui", "run", "ruo", "sa", "sai", "san", "sang", "sao", "se", "sei", "sen", "seng", "sha", - "shai", "shan", "shang", "shao", "she", "shei", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shui", - "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun", "suo", "ta", "tai", "tan", "tang", "tao", "te", - "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan", "tui", "tun", "tuo", "wa", "wai", "wan", - "wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", - "xu", "xuan", "xue", "xun", "ya", "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yong", "you", "yu", "yuan", - "yue", "yun", "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang", "zhao", - "zhe", "zhei", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", - "zong", "zou", "zuan", "zui", "zun", "zuo", "zu", - ), - list( - "al", "an", "ar", "as", "at", "ea", "ed", "en", "er", "es", "ha", "he", "hi", "in", "is", "it", - "le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to", - "ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin", - "his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi", - ), -) + // Default namelist is the human namelist, and common is the human language, so might as well. + // Feel free to remove this at some point because common can generate some pretty cool names. + always_use_default_namelist = TRUE + /** + * This list really long, mainly because I can't make up my mind about which mandarin syllables should be removed, + * and the english syllables had to be duplicated so that there is roughly a 50-50 weighting. + * + * Sources: + * http://www.sttmedia.com/syllablefrequency-english + * http://www.chinahighlights.com/travelguide/learning-chinese/pinyin-syllables.htm + */ + syllables = list( + // each sublist has an equal chance of being picked, so each syllable has an equal chance of being english or chinese + list( + "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", + "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "cei", "cen", "ceng", "cha", "chai", + "chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", "chua", "chuai", "chuan", "chuang", "chui", "chun", + "chuo", "ci", "cong", "cou", "cu", "cuan", "cui", "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "dei", + "den", "deng", "di", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du", "duan", "dui", "dun", "duo", "e", + "ei", "en", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fou", "fu", "ga", "gai", "gan", "gang", + "gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun", "guo", "ha", + "hai", "han", "hang", "hao", "he", "hei", "hen", "heng", "hm", "hng", "hong", "hou", "hu", "hua", "huai", "huan", + "huang", "hui", "hun", "huo", "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "juan", + "jue", "jun", "ka", "kai", "kan", "kang", "kao", "ke", "kei", "ken", "keng", "kong", "kou", "ku", "kua", "kuai", + "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao", "le", "lei", "leng", "li", "lia", "lian", + "liang", "liao", "lie", "lin", "ling", "liu", "long", "lou", "lu", "luan", "lun", "luo", "ma", "mai", "man", "mang", + "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming", "miu", "mo", "mou", "mu", "na", + "nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ng", "ni", "nian", "niang", "niao", "nie", "nin", "ning", + "niu", "nong", "nou", "nu", "nuan", "nuo", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng", + "pi", "pian", "piao", "pie", "pin", "ping", "po", "pou", "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", + "qing", "qiong", "qiu", "qu", "quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", + "ru", "rua", "ruan", "rui", "run", "ruo", "sa", "sai", "san", "sang", "sao", "se", "sei", "sen", "seng", "sha", + "shai", "shan", "shang", "shao", "she", "shei", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shui", + "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun", "suo", "ta", "tai", "tan", "tang", "tao", "te", + "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan", "tui", "tun", "tuo", "wa", "wai", "wan", + "wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", + "xu", "xuan", "xue", "xun", "ya", "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yong", "you", "yu", "yuan", + "yue", "yun", "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang", "zhao", + "zhe", "zhei", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", + "zong", "zou", "zuan", "zui", "zun", "zuo", "zu", + ), + list( + "al", "an", "ar", "as", "at", "ea", "ed", "en", "er", "es", "ha", "he", "hi", "in", "is", "it", + "le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to", + "ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin", + "his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi", + ), + ) diff --git a/code/modules/language/draconic.dm b/code/modules/language/draconic.dm index f812c8dc1311..55ebd1ec2026 100644 --- a/code/modules/language/draconic.dm +++ b/code/modules/language/draconic.dm @@ -13,5 +13,25 @@ "ra", "ar", "re", "er", "ri", "ir", "ro", "or", "ru", "ur", "rs", "sr", "a", "a", "e", "e", "i", "i", "o", "o", "u", "u", "s", "s" ) + special_characters = list("-") icon_state = "lizard" default_priority = 90 + default_name_syllable_min = 3 + default_name_syllable_max = 5 + random_name_spacer = "-" + +/datum/language/draconic/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(force_use_syllables) + return ..() + if(gender != MALE) + gender = pick(MALE, FEMALE) + + if(gender == MALE) + return "[pick(GLOB.lizard_names_male)][random_name_spacer][pick(GLOB.lizard_names_male)]" + return "[pick(GLOB.lizard_names_female)][random_name_spacer][pick(GLOB.lizard_names_female)]" diff --git a/code/modules/language/drone.dm b/code/modules/language/drone.dm index 5b47533d45e3..09fb6546e4a1 100644 --- a/code/modules/language/drone.dm +++ b/code/modules/language/drone.dm @@ -11,3 +11,4 @@ default_priority = 20 icon_state = "drone" + always_use_default_namelist = TRUE // Nonsense language diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm deleted file mode 100644 index a47d097dd140..000000000000 --- a/code/modules/language/language.dm +++ /dev/null @@ -1,107 +0,0 @@ -#define SCRAMBLE_CACHE_LEN 50 //maximum of 50 specific scrambled lines per language - -/* - Datum based languages. Easily editable and modular. -*/ - -/datum/language - var/name = "an unknown language" // Fluff name of language if any. - var/desc = "A language." // Short description for 'Check Languages'. - var/key // Character used to speak in language - // If key is null, then the language isn't real or learnable. - var/flags // Various language flags. - var/list/syllables // Used when scrambling text for a non-speaker. - var/sentence_chance = 5 // Likelihood of making a new sentence after each syllable. - var/space_chance = 55 // Likelihood of getting a space in the random scramble string - var/list/spans = list() - var/list/scramble_cache = list() - var/default_priority = 0 // the language that an atom knows with the highest "default_priority" is selected by default. - - // if you are seeing someone speak popcorn language, then something is wrong. - var/icon = 'icons/misc/language.dmi' - var/icon_state = "popcorn" - -/datum/language/proc/display_icon(atom/movable/hearer) - var/understands = hearer.has_language(src.type) - if(flags & LANGUAGE_HIDE_ICON_IF_UNDERSTOOD && understands) - return FALSE - if(flags & LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD && !understands) - return FALSE - return TRUE - -/datum/language/proc/get_icon() - var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/chat) - return sheet.icon_tag("language-[icon_state]") - -/datum/language/proc/get_random_name(gender, name_count=2, syllable_count=4, syllable_divisor=2) - if(!syllables || !syllables.len) - if(gender == FEMALE) - return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) - else - return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - - var/full_name = "" - var/new_name = "" - - for(var/i in 0 to name_count) - new_name = "" - var/Y = rand(FLOOR(syllable_count/syllable_divisor, 1), syllable_count) - for(var/x in Y to 0) - new_name += pick_weight_recursive(syllables) - full_name += " [capitalize(lowertext(new_name))]" - - return "[trim(full_name)]" - -/datum/language/proc/check_cache(input) - var/lookup = scramble_cache[input] - if(lookup) - scramble_cache -= input - scramble_cache[input] = lookup - . = lookup - -/datum/language/proc/add_to_cache(input, scrambled_text) - // Add it to cache, cutting old entries if the list is too long - scramble_cache[input] = scrambled_text - if(scramble_cache.len > SCRAMBLE_CACHE_LEN) - scramble_cache.Cut(1, scramble_cache.len-SCRAMBLE_CACHE_LEN-1) - -/datum/language/proc/scramble(input) - - if(!syllables || !syllables.len) - return stars(input) - - // If the input is cached already, move it to the end of the cache and return it - var/lookup = check_cache(input) - if(lookup) - return lookup - - var/input_size = length_char(input) - var/scrambled_text = "" - var/capitalize = TRUE - - while(length_char(scrambled_text) < input_size) - var/next = pick_weight_recursive(syllables) - if(capitalize) - next = capitalize(next) - capitalize = FALSE - scrambled_text += next - var/chance = rand(100) - if(chance <= sentence_chance) - scrambled_text += ". " - capitalize = TRUE - else if(chance > sentence_chance && chance <= space_chance) - scrambled_text += " " - - scrambled_text = trim(scrambled_text) - var/ending = copytext_char(scrambled_text, -1) - if(ending == ".") - scrambled_text = copytext_char(scrambled_text, 1, -2) - var/input_ending = copytext_char(input, -1) - if(input_ending in list("!","?",".")) - scrambled_text += input_ending - - add_to_cache(input, scrambled_text) - - return scrambled_text - -#undef SCRAMBLE_CACHE_LEN diff --git a/code/modules/language/machine.dm b/code/modules/language/machine.dm index 36962a712a1b..4be282a5e281 100644 --- a/code/modules/language/machine.dm +++ b/code/modules/language/machine.dm @@ -14,7 +14,16 @@ icon_state = "eal" -/datum/language/machine/get_random_name() +/datum/language/machine/get_random_name( + gender = NEUTER, + name_count = 2, + syllable_min = 2, + syllable_max = 4, + unique = FALSE, + force_use_syllables = FALSE, +) + if(force_use_syllables) + return ..() if(prob(70)) return "[pick(GLOB.posibrain_names)]-[rand(100, 999)]" return pick(GLOB.ai_names) diff --git a/code/modules/language/moffic.dm b/code/modules/language/moffic.dm index 1d0aea96697f..fb8dea63dcc8 100644 --- a/code/modules/language/moffic.dm +++ b/code/modules/language/moffic.dm @@ -13,4 +13,20 @@ icon_state = "moth" default_priority = 90 + default_name_syllable_min = 5 + default_name_syllable_max = 10 + +/datum/language/moffic/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(force_use_syllables) + return ..() + + return "[pick(GLOB.moth_first)] [pick(GLOB.moth_last)]" + + // Fuck guest accounts, and fuck language testing. diff --git a/code/modules/language/monkey.dm b/code/modules/language/monkey.dm index e44f6a6268e2..423e94f22bd8 100644 --- a/code/modules/language/monkey.dm +++ b/code/modules/language/monkey.dm @@ -7,3 +7,12 @@ default_priority = 80 icon_state = "animal" + +/datum/language/monkey/get_random_name( + gender = NEUTER, + name_count = 2, + syllable_min = 2, + syllable_max = 4, + force_use_syllables = FALSE, +) + return "monkey ([rand(1, 999)])" diff --git a/code/modules/language/mushroom.dm b/code/modules/language/mushroom.dm index 08d494cc04d6..910489fd6dd9 100644 --- a/code/modules/language/mushroom.dm +++ b/code/modules/language/mushroom.dm @@ -5,3 +5,5 @@ sentence_chance = 0 default_priority = 80 syllables = list("poof", "pff", "pFfF", "piff", "puff", "pooof", "pfffff", "piffpiff", "puffpuff", "poofpoof", "pifpafpofpuf") + default_name_syllable_min = 1 + default_name_syllable_max = 2 diff --git a/code/modules/language/nekomimetic.dm b/code/modules/language/nekomimetic.dm index 82edc2afcb57..4be943f84417 100644 --- a/code/modules/language/nekomimetic.dm +++ b/code/modules/language/nekomimetic.dm @@ -12,3 +12,16 @@ ) icon_state = "neko" default_priority = 90 + default_name_syllable_min = 2 + default_name_syllable_max = 2 + +/datum/language/nekomimetic/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(prob(33)) + return default_name(gender) + return ..() diff --git a/code/modules/language/piratespeak.dm b/code/modules/language/piratespeak.dm index 5f6cb4897715..a2faddb544f7 100644 --- a/code/modules/language/piratespeak.dm +++ b/code/modules/language/piratespeak.dm @@ -10,3 +10,4 @@ "shiver", "timbers", "matey", "swashbuckler" ) icon_state = "pirate" + always_use_default_namelist = TRUE diff --git a/code/modules/language/shadowtongue.dm b/code/modules/language/shadowtongue.dm index 9c0adb5eea3f..351589393856 100644 --- a/code/modules/language/shadowtongue.dm +++ b/code/modules/language/shadowtongue.dm @@ -16,3 +16,5 @@ ) icon_state = "shadow" default_priority = 90 + default_name_syllable_min = 2 + default_name_syllable_max = 3 diff --git a/code/modules/language/slime.dm b/code/modules/language/slime.dm index fcb471774118..15960898673d 100644 --- a/code/modules/language/slime.dm +++ b/code/modules/language/slime.dm @@ -2,7 +2,8 @@ name = "Slime" desc = "A melodic and complex language spoken by slimes. Some of the notes are inaudible to humans." key = "k" - syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!") + syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix") + special_characters = list("!","*") default_priority = 70 icon_state = "slime" diff --git a/code/modules/language/sylvan.dm b/code/modules/language/sylvan.dm index 68cb73f9d525..4f66fb5931c1 100644 --- a/code/modules/language/sylvan.dm +++ b/code/modules/language/sylvan.dm @@ -13,3 +13,5 @@ ) icon_state = "plant" default_priority = 90 + default_name_syllable_min = 2 + default_name_syllable_max = 3 diff --git a/code/modules/language/terrum.dm b/code/modules/language/terrum.dm index 361106ed16c9..63b527202f4c 100644 --- a/code/modules/language/terrum.dm +++ b/code/modules/language/terrum.dm @@ -7,8 +7,25 @@ "sha", "vu", "nah", "ha", "yom", "ma", "cha", "ar", "et", "mol", "lua", "ch", "na", "sh", "ni", "yah", "bes", "ol", "hish", "ev", "la", "ot", "la", "khe", "tza", "chak", "hak", "hin", "hok", "lir", "tov", "yef", "yfe", - "cho", "ar", "kas", "kal", "ra", "lom", "im", "'", "'", "'", "'", "bok", + "cho", "ar", "kas", "kal", "ra", "lom", "im", "bok", "erev", "shlo", "lo", "ta", "im", "yom" ) + special_characters = list("'") icon_state = "golem" default_priority = 90 + +/datum/language/terrum/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(force_use_syllables) + return ..() + + var/name = pick(GLOB.golem_names) + // 3% chance to be given a human surname for "lore reasons" + if (prob(3)) + name += " [pick(GLOB.last_names)]" + return name diff --git a/code/modules/language/voltaic.dm b/code/modules/language/voltaic.dm index 40fa9dcb1e82..90ab90dbe48e 100644 --- a/code/modules/language/voltaic.dm +++ b/code/modules/language/voltaic.dm @@ -12,3 +12,21 @@ ) icon_state = "volt" default_priority = 90 + default_name_syllable_min = 2 + default_name_syllable_max = 3 + + +/datum/language/voltaic/get_random_name( + gender = NEUTER, + name_count = default_name_count, + syllable_min = default_name_syllable_min, + syllable_max = default_name_syllable_max, + force_use_syllables = FALSE, +) + if(force_use_syllables) + return ..() + + var/picked = "[pick(GLOB.ethereal_names)] [random_capital_letter()]" + if(prob(65)) + picked += random_capital_letter() + return picked diff --git a/code/modules/language/xenocommon.dm b/code/modules/language/xenocommon.dm index c5e6366715d8..f4949b7d73cb 100644 --- a/code/modules/language/xenocommon.dm +++ b/code/modules/language/xenocommon.dm @@ -6,3 +6,4 @@ default_priority = 50 icon_state = "xeno" + always_use_default_namelist = TRUE // Sssss Ssss? diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index ed69e8af884b..3824bc9eefff 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -921,8 +921,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) var/datum/species/new_human_species = GLOB.species_list[species_to_pick] if(new_human_species) new_human.set_species(new_human_species) - new_human_species = new_human.dna.species - new_human.fully_replace_character_name(new_human.real_name, new_human_species.random_name(new_human.gender, TRUE, TRUE)) + new_human.fully_replace_character_name(new_human.real_name, new_human.generate_random_mob_name()) else stack_trace("failed to spawn cadaver with species ID [species_to_pick]") //if it's invalid they'll just be a human, so no need to worry too much aside from yelling at the server owner lol. else diff --git a/code/modules/mining/equipment/monster_organs/rush_gland.dm b/code/modules/mining/equipment/monster_organs/rush_gland.dm index b3932afdaab7..7a97248df0bc 100644 --- a/code/modules/mining/equipment/monster_organs/rush_gland.dm +++ b/code/modules/mining/equipment/monster_organs/rush_gland.dm @@ -41,6 +41,7 @@ id = "lobster_rush" duration = 3 SECONDS alert_type = /atom/movable/screen/alert/status_effect/lobster_rush + show_duration = TRUE var/spawned_last_move = FALSE /atom/movable/screen/alert/status_effect/lobster_rush diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 525f6c636df9..0c9a5b942ab2 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -89,15 +89,10 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) gender = body.gender if(body.mind && body.mind.name) - if(body.mind.ghostname) - name = body.mind.ghostname - else - name = body.mind.name + name = body.mind.ghostname || body.mind.name else - if(body.real_name) - name = body.real_name - else - name = random_unique_name(gender) + name = body.real_name || generate_random_mob_name(gender) + mind = body.mind //we don't transfer the mind but we keep a reference to it. @@ -125,8 +120,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) abstract_move(T) - if(!name) //To prevent nameless ghosts - name = random_unique_name(gender) + //To prevent nameless ghosts + name ||= generate_random_mob_name(FALSE) real_name = name if(!fun_verbs) @@ -860,7 +855,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp client.prefs.apply_character_randomization_prefs() var/species_type = client.prefs.read_preference(/datum/preference/choiced/species) - var/datum/species/species = new species_type + var/datum/species/species = GLOB.species_prototypes[species_type] if(species.check_head_flags(HEAD_HAIR)) hairstyle = client.prefs.read_preference(/datum/preference/choiced/hairstyle) hair_color = brighten_color(client.prefs.read_preference(/datum/preference/color/hair_color)) @@ -869,8 +864,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp facial_hairstyle = client.prefs.read_preference(/datum/preference/choiced/facial_hairstyle) facial_hair_color = brighten_color(client.prefs.read_preference(/datum/preference/color/facial_hair_color)) - qdel(species) - update_appearance() /mob/dead/observer/can_perform_action(atom/movable/target, action_bitflags) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 219d8e357e7c..b5957a70b852 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -467,7 +467,12 @@ if(M.active_storage?.attempt_insert(src, M)) return TRUE - var/list/obj/item/possible = list(M.get_inactive_held_item(), M.get_item_by_slot(ITEM_SLOT_BELT), M.get_item_by_slot(ITEM_SLOT_DEX_STORAGE), M.get_item_by_slot(ITEM_SLOT_BACK)) + var/list/obj/item/possible = list( + M.get_inactive_held_item(), + M.get_item_by_slot(ITEM_SLOT_BELT), + M.get_item_by_slot(ITEM_SLOT_DEX_STORAGE), + M.get_item_by_slot(ITEM_SLOT_BACK), + ) for(var/i in possible) if(!i) continue diff --git a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm index 5a901fa2c79c..c906ce17c319 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm @@ -102,7 +102,7 @@ RegisterSignal(src, COMSIG_LIVING_BANED, PROC_REF(on_baned)) RegisterSignal(src, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_move)) RegisterSignal(src, COMSIG_LIVING_LIFE, PROC_REF(on_life)) - set_random_revenant_name() + name = generate_random_mob_name() GLOB.revenant_relay_mobs |= src @@ -345,13 +345,13 @@ returnable_list += span_bold("Be sure to read the wiki page to learn more.") return returnable_list -/mob/living/basic/revenant/proc/set_random_revenant_name() +/mob/living/basic/revenant/generate_random_mob_name() var/list/built_name_strings = list() built_name_strings += pick(strings(REVENANT_NAME_FILE, "spirit_type")) built_name_strings += " of " built_name_strings += pick(strings(REVENANT_NAME_FILE, "adverb")) built_name_strings += pick(strings(REVENANT_NAME_FILE, "theme")) - name = built_name_strings.Join("") + return built_name_strings.Join("") /mob/living/basic/revenant/proc/on_baned(obj/item/weapon, mob/living/user) SIGNAL_HANDLER diff --git a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm index 70b3506527a1..bba6e0eb460c 100644 --- a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm +++ b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm @@ -39,6 +39,7 @@ id = "wumbo_inflated" duration = 10 SECONDS alert_type = /atom/movable/screen/alert/status_effect/inflated + show_duration = TRUE /atom/movable/screen/alert/status_effect/inflated name = "WUMBO" diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 58df9bb19bf3..702c0725735c 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -1,4 +1,6 @@ #define BLOOD_DRIP_RATE_MOD 90 //Greater number means creating blood drips more often while bleeding +// Conversion between internal drunk power and common blood alcohol content +#define DRUNK_POWER_TO_BLOOD_ALCOHOL 0.003 /**************************************************** BLOOD SYSTEM @@ -310,4 +312,13 @@ // NON-MODULE CHANGE END +/mob/living/proc/get_blood_alcohol_content() + var/blood_alcohol_content = 0 + var/datum/status_effect/inebriated/inebriation = has_status_effect(/datum/status_effect/inebriated) + if(!isnull(inebriation)) + blood_alcohol_content = round(inebriation.drunk_value * DRUNK_POWER_TO_BLOOD_ALCOHOL, 0.01) + + return blood_alcohol_content + #undef BLOOD_DRIP_RATE_MOD +#undef DRUNK_POWER_TO_BLOOD_ALCOHOL diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm index 5071bdcbc1ea..3cc47547c479 100644 --- a/code/modules/mob/living/carbon/carbon_update_icons.dm +++ b/code/modules/mob/living/carbon/carbon_update_icons.dm @@ -483,7 +483,7 @@ var/old_key = icon_render_keys?[limb.body_zone] //Checks the mob's icon render key list for the bodypart icon_render_keys[limb.body_zone] = (limb.is_husked) ? limb.generate_husk_key().Join() : limb.generate_icon_key().Join() //Generates a key for the current bodypart - if(icon_render_keys[limb.body_zone] != old_key || get_top_offset() != last_top_offset) //If the keys match, that means the limb doesn't need to be redrawn + if(icon_render_keys[limb.body_zone] != old_key) //If the keys match, that means the limb doesn't need to be redrawn needs_update += limb var/list/missing_bodyparts = get_missing_limbs() @@ -500,15 +500,10 @@ for(var/obj/item/bodypart/limb as anything in bodyparts) if(limb in needs_update) var/bodypart_icon = limb.get_limb_icon() - if(!istype(limb, /obj/item/bodypart/leg)) - var/top_offset = get_top_offset() - for(var/image/image as anything in bodypart_icon) - image.pixel_y += top_offset new_limbs += bodypart_icon limb_icon_cache[icon_render_keys[limb.body_zone]] = bodypart_icon //Caches the icon with the bodypart key, as it is new else new_limbs += limb_icon_cache[icon_render_keys[limb.body_zone]] //Pulls existing sprites from the cache - last_top_offset = get_top_offset() remove_overlay(BODYPARTS_LAYER) @@ -518,19 +513,6 @@ apply_overlay(BODYPARTS_LAYER) -/// This looks at the chest and legs of the mob and decides how much our chest, arms, and head should be adjusted. This is useful for limbs that are larger or smaller than the scope of normal human height while keeping the feet anchored to the bottom of the tile -/mob/living/carbon/proc/get_top_offset() - var/from_chest - var/from_leg - for(var/obj/item/bodypart/leg/leg_checked in bodyparts) - if(leg_checked.top_offset > from_leg || isnull(from_leg)) // We find the tallest leg available - from_leg = leg_checked.top_offset - if(isnull(from_leg)) - from_leg = 0 // If we have no legs, we set this to zero to avoid any math issues that might stem from it being NULL - for(var/obj/item/bodypart/chest/chest_checked in bodyparts) // Take the height from the chest - from_chest = chest_checked.top_offset - return (from_chest + from_leg) // The total hight of the chest and legs together - ///////////////////////// // Limb Icon Cache 2.0 // ///////////////////////// @@ -568,6 +550,7 @@ /obj/item/bodypart/proc/generate_husk_key() RETURN_TYPE(/list) . = list() + . += "[limb_id]-" . += "[husk_type]" . += "-husk" . += "-[body_zone]" diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index b31169401098..0ed49bb1b9f7 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -211,6 +211,7 @@ GLOBAL_LIST_EMPTY(features_by_species) GLOB.roundstart_races = generate_selectable_species_and_languages() return GLOB.roundstart_races + /** * Generates species available to choose in character setup at roundstart * @@ -221,14 +222,12 @@ GLOBAL_LIST_EMPTY(features_by_species) var/list/selectable_species = list() for(var/species_type in subtypesof(/datum/species)) - var/datum/species/species = new species_type + var/datum/species/species = GLOB.species_prototypes[species_type] if(species.check_roundstart_eligible()) selectable_species += species.id - var/datum/language_holder/temp_holder = new species.species_language_holder + var/datum/language_holder/temp_holder = GLOB.prototype_language_holders[species.species_language_holder] for(var/datum/language/spoken_language as anything in temp_holder.understood_languages) GLOB.uncommon_roundstart_languages |= spoken_language - qdel(temp_holder) - qdel(species) GLOB.uncommon_roundstart_languages -= /datum/language/common if(!selectable_species.len) @@ -247,32 +246,6 @@ GLOBAL_LIST_EMPTY(features_by_species) return TRUE return FALSE -/** - * Generates a random name for a carbon. - * - * This generates a random unique name based on a human's species and gender. - * Arguments: - * * gender - The gender that the name should adhere to. Use MALE for male names, use anything else for female names. - * * unique - If true, ensures that this new name is not a duplicate of anyone else's name currently on the station. - * * last_name - Do we use a given last name or pick a random new one? - */ -/datum/species/proc/random_name(gender, unique, last_name) - if(unique) - return random_unique_name(gender) - - var/randname - if(gender == MALE) - randname = pick(GLOB.first_names_male) - else - randname = pick(GLOB.first_names_female) - - if(last_name) - randname += " [last_name]" - else - randname += " [pick(GLOB.last_names)]" - - return randname - /** * Copies some vars and properties over that should be kept when creating a copy of this species. * @@ -613,7 +586,6 @@ GLOBAL_LIST_EMPTY(features_by_species) */ /datum/species/proc/handle_body(mob/living/carbon/human/species_human) species_human.remove_overlay(BODY_LAYER) - var/height_offset = species_human.get_top_offset() // From high changed by varying limb height if(HAS_TRAIT(species_human, TRAIT_INVISIBLE_MAN)) return handle_mutant_bodyparts(species_human) var/list/standing = list() @@ -625,9 +597,7 @@ GLOBAL_LIST_EMPTY(features_by_species) var/obj/item/organ/internal/eyes/eye_organ = species_human.get_organ_slot(ORGAN_SLOT_EYES) if(eye_organ) eye_organ.refresh(call_update = FALSE) - for(var/mutable_appearance/eye_overlay in eye_organ.generate_body_overlay(species_human)) - eye_overlay.pixel_y += height_offset - standing += eye_overlay + standing += eye_organ.generate_body_overlay(species_human) // organic body markings (oh my god this is terrible please rework this to be done on the limbs themselves i beg you) if(HAS_TRAIT(species_human, TRAIT_HAS_MARKINGS)) @@ -638,29 +608,23 @@ GLOBAL_LIST_EMPTY(features_by_species) var/obj/item/bodypart/leg/left/left_leg = species_human.get_bodypart(BODY_ZONE_L_LEG) var/datum/sprite_accessory/markings = GLOB.moth_markings_list[species_human.dna.features["moth_markings"]] var/mutable_appearance/marking = mutable_appearance(layer = -BODY_LAYER, appearance_flags = KEEP_TOGETHER) - if(noggin && (IS_ORGANIC_LIMB(noggin))) - var/mutable_appearance/markings_head_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_head") - marking.overlays += markings_head_overlay + if(noggin && IS_ORGANIC_LIMB(noggin)) + marking.overlays += mutable_appearance(markings.icon, "[markings.icon_state]_head") - if(chest && (IS_ORGANIC_LIMB(chest))) - var/mutable_appearance/markings_chest_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_chest") - marking.overlays += markings_chest_overlay + if(chest && IS_ORGANIC_LIMB(chest)) + marking.overlays += mutable_appearance(markings.icon, "[markings.icon_state]_chest") - if(right_arm && (IS_ORGANIC_LIMB(right_arm))) - var/mutable_appearance/markings_r_arm_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_r_arm") - marking.overlays += markings_r_arm_overlay + if(right_arm && IS_ORGANIC_LIMB(right_arm)) + marking.overlays += mutable_appearance(markings.icon, "[markings.icon_state]_r_arm") - if(left_arm && (IS_ORGANIC_LIMB(left_arm))) - var/mutable_appearance/markings_l_arm_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_l_arm") - marking.overlays += markings_l_arm_overlay + if(left_arm && IS_ORGANIC_LIMB(left_arm)) + marking.overlays += mutable_appearance(markings.icon, "[markings.icon_state]_l_arm") - if(right_leg && (IS_ORGANIC_LIMB(right_leg))) - var/mutable_appearance/markings_r_leg_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_r_leg") - marking.overlays += markings_r_leg_overlay + if(right_leg && IS_ORGANIC_LIMB(right_leg)) + marking.overlays += mutable_appearance(markings.icon, "[markings.icon_state]_r_leg") - if(left_leg && (IS_ORGANIC_LIMB(left_leg))) - var/mutable_appearance/markings_l_leg_overlay = mutable_appearance(markings.icon, "[markings.icon_state]_l_leg") - marking.overlays += markings_l_leg_overlay + if(left_leg && IS_ORGANIC_LIMB(left_leg)) + marking.overlays += mutable_appearance(markings.icon, "[markings.icon_state]_l_leg") standing += marking @@ -676,7 +640,6 @@ GLOBAL_LIST_EMPTY(features_by_species) underwear_overlay = mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) if(!underwear.use_static) underwear_overlay.color = species_human.underwear_color - underwear_overlay.pixel_y += height_offset standing += underwear_overlay if(species_human.undershirt) @@ -687,7 +650,6 @@ GLOBAL_LIST_EMPTY(features_by_species) working_shirt = wear_female_version(undershirt.icon_state, undershirt.icon, BODY_LAYER) else working_shirt = mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) - working_shirt.pixel_y += height_offset standing += working_shirt if(species_human.socks && species_human.num_legs >= 2 && !(species_human.bodytype & BODYTYPE_DIGITIGRADE)) @@ -929,12 +891,6 @@ GLOBAL_LIST_EMPTY(features_by_species) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) if(ITEM_SLOT_ICLOTHING) - var/obj/item/bodypart/chest = H.get_bodypart(BODY_ZONE_CHEST) - if(chest && (chest.bodytype & BODYTYPE_MONKEY)) - if(!(I.supports_variations_flags & CLOTHING_MONKEY_VARIATION)) - if(!disable_warning) - to_chat(H, span_warning("[I] doesn't fit your [chest.name]!")) - return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) if(ITEM_SLOT_ID) var/obj/item/bodypart/O = H.get_bodypart(BODY_ZONE_CHEST) diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 305bf132f721..c172288da651 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -76,7 +76,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) cut_overlays(TRUE) /mob/living/carbon/human/dummy/setup_human_dna() - randomize_human(src, randomize_mutations = FALSE) + randomize_human_normie(src, randomize_mutations = FALSE) /mob/living/carbon/human/dummy/log_mob_tag(text) return @@ -102,6 +102,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) target.dna.features["spines"] = get_consistent_feature_entry(GLOB.spines_list) target.dna.features["tail_cat"] = get_consistent_feature_entry(GLOB.tails_list_human) // it's a lie target.dna.features["tail_lizard"] = get_consistent_feature_entry(GLOB.tails_list_lizard) + target.dna.features["tail_monkey"] = get_consistent_feature_entry(GLOB.tails_list_monkey) target.dna.features["pod_hair"] = get_consistent_feature_entry(GLOB.pod_hair_list) target.dna.features["head_tentacles"] = get_consistent_feature_entry(GLOB.head_tentacles_list) // NON-MODULE CHANGE target.dna.features["arm_wings"] = get_consistent_feature_entry(GLOB.arm_wings_list) // NON-MODULE CHANGE diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e025308b8c4b..d91915f932a3 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -56,7 +56,7 @@ ADD_TRAIT(src, TRAIT_AGEUSIA, NO_TONGUE_TRAIT) /mob/living/carbon/human/proc/setup_human_dna() - randomize_human(src, randomize_mutations = TRUE) + randomize_human_normie(src, randomize_mutations = TRUE) /mob/living/carbon/human/Destroy() QDEL_NULL(physiology) @@ -691,7 +691,7 @@ /mob/living/carbon/human/fully_heal(heal_flags = HEAL_ALL) if(heal_flags & HEAL_NEGATIVE_MUTATIONS) for(var/datum/mutation/human/existing_mutation in dna.mutations) - if(existing_mutation.quality != POSITIVE) + if(existing_mutation.quality != POSITIVE && existing_mutation.remove_on_aheal) dna.remove_mutation(existing_mutation) if(heal_flags & HEAL_TEMP) @@ -718,6 +718,10 @@ /mob/living/carbon/human/vv_edit_var(var_name, var_value) if(var_name == NAMEOF(src, mob_height)) + var/static/list/monkey_heights = list( + MONKEY_HEIGHT_DWARF, + MONKEY_HEIGHT_MEDIUM, + ) var/static/list/heights = list( HUMAN_HEIGHT_SHORTEST, HUMAN_HEIGHT_SHORT, @@ -726,7 +730,10 @@ HUMAN_HEIGHT_TALLER, HUMAN_HEIGHT_TALLEST ) - if(!(var_value in heights)) + if(ismonkey(src)) + if(!(var_value in monkey_heights)) + return + else if(!(var_value in heights)) return . = set_mob_height(var_value) @@ -803,7 +810,7 @@ if(href_list[VV_HK_SET_SPECIES]) if(!check_rights(R_SPAWN)) return - var/result = input(usr, "Please choose a new species","Species") as null|anything in GLOB.species_list + var/result = input(usr, "Please choose a new species","Species") as null|anything in sortTim(GLOB.species_list, GLOBAL_PROC_REF(cmp_text_asc)) if(result) var/newtype = GLOB.species_list[result] admin_ticket_log("[key_name_admin(usr)] has modified the bodyparts of [src] to [result]") @@ -995,7 +1002,7 @@ /mob/living/carbon/human/species/set_species(datum/species/mrace, icon_update, pref_load) . = ..() if(use_random_name) - fully_replace_character_name(real_name, dna.species.random_name()) + fully_replace_character_name(real_name, generate_random_mob_name()) /mob/living/carbon/human/species/abductor race = /datum/species/abductor diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index ef44318676e7..fbd487c6465c 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -259,7 +259,7 @@ if (preference.is_randomizable()) preference.apply_to_human(src, preference.create_random_value(preferences)) - fully_replace_character_name(real_name, dna.species.random_name()) + fully_replace_character_name(real_name, generate_random_mob_name()) /** * Setter for mob height @@ -271,8 +271,10 @@ /mob/living/carbon/human/proc/set_mob_height(new_height) if(mob_height == new_height) return FALSE - if(new_height == HUMAN_HEIGHT_DWARF) - CRASH("Don't set height to dwarf height directly, use dwarf trait") + if(new_height == HUMAN_HEIGHT_DWARF || new_height == MONKEY_HEIGHT_DWARF) + CRASH("Don't set height to dwarf height directly, use dwarf trait instead.") + if(new_height == MONKEY_HEIGHT_MEDIUM) + CRASH("Don't set height to monkey height directly, use monkified gene/species instead.") mob_height = new_height regenerate_icons() @@ -287,7 +289,13 @@ */ /mob/living/carbon/human/proc/get_mob_height() if(HAS_TRAIT(src, TRAIT_DWARF)) - return HUMAN_HEIGHT_DWARF + if(ismonkey(src)) + return MONKEY_HEIGHT_DWARF + else + return HUMAN_HEIGHT_DWARF + + else if(ismonkey(src)) + return MONKEY_HEIGHT_MEDIUM return mob_height diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 82676f62eca0..233b86064cc8 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -102,9 +102,7 @@ There are several things that need to be remembered: var/icon_file var/woman //BEGIN SPECIES HANDLING - if((bodytype & BODYTYPE_MONKEY) && (uniform.supports_variations_flags & CLOTHING_MONKEY_VARIATION)) - icon_file = MONKEY_UNIFORM_FILE - else if((bodytype & BODYTYPE_DIGITIGRADE) && (uniform.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) + if((bodyshape & BODYSHAPE_DIGITIGRADE) && (uniform.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) // NON-MODULE CHANGE kapu why if(uniform.greyscale_config_worn && uniform.digitigrade_greyscale_config_worn && uniform.greyscale_colors) icon_file = SSgreyscale.GetColoredIconByType(uniform.digitigrade_greyscale_config_worn, uniform.greyscale_colors) @@ -709,9 +707,6 @@ generate/load female uniform sprites matching all previously decided variables .[2] = offsets["y"] else .[2] = worn_y_offset - if(ishuman(loc) && slot_flags != ITEM_SLOT_FEET) /// we adjust the human body for high given by body parts, execpt shoes, because they are always on the bottom - var/mob/living/carbon/human/human_holder = loc - .[2] += human_holder.get_top_offset() //Can't think of a better way to do this, sadly /mob/proc/get_item_offsets_for_index(i) @@ -816,26 +811,97 @@ generate/load female uniform sprites matching all previously decided variables "Lenghten_Torso", "Gnome_Cut_Torso", "Gnome_Cut_Legs", + "Monkey_Torso", + "Monkey_Legs", + "Monkey_Gnome_Cut_Torso", + "Monkey_Gnome_Cut_Legs", )) switch(get_mob_height()) // Don't set this one directly, use TRAIT_DWARF + if(MONKEY_HEIGHT_DWARF) + appearance.add_filters(list( + list( + "name" = "Monkey_Gnome_Cut_Torso", + "priority" = 1, + "params" = displacement_map_filter(cut_torso_mask, x = 0, y = 0, size = 3), + ), + list( + "name" = "Monkey_Gnome_Cut_Legs", + "priority" = 1, + "params" = displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 4), + ), + )) + if(MONKEY_HEIGHT_MEDIUM) + appearance.add_filters(list( + list( + "name" = "Monkey_Torso", + "priority" = 1, + "params" = displacement_map_filter(cut_torso_mask, x = 0, y = 0, size = 2), + ), + list( + "name" = "Monkey_Legs", + "priority" = 1, + "params" = displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 4), + ), + )) + // Don't set this one directly, use TRAIT_DWARF if(HUMAN_HEIGHT_DWARF) - appearance.add_filter("Gnome_Cut_Torso", 1, displacement_map_filter(cut_torso_mask, x = 0, y = 0, size = 2)) - appearance.add_filter("Gnome_Cut_Legs", 1, displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 3)) + appearance.add_filters(list( + list( + "name" = "Gnome_Cut_Torso", + "priority" = 1, + "params" = displacement_map_filter(cut_torso_mask, x = 0, y = 0, size = 2), + ), + list( + "name" = "Gnome_Cut_Legs", + "priority" = 1, + "params" = displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 3), + ), + )) if(HUMAN_HEIGHT_SHORTEST) - appearance.add_filter("Cut_Torso", 1, displacement_map_filter(cut_torso_mask, x = 0, y = 0, size = 1)) - appearance.add_filter("Cut_Legs", 1, displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 1)) + appearance.add_filters(list( + list( + "name" = "Cut_Torso", + "priority" = 1, + "params" = displacement_map_filter(cut_torso_mask, x = 0, y = 0, size = 1), + ), + list( + "name" = "Cut_Legs", + "priority" = 1, + "params" = displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 1), + ), + )) if(HUMAN_HEIGHT_SHORT) appearance.add_filter("Cut_Legs", 1, displacement_map_filter(cut_legs_mask, x = 0, y = 0, size = 1)) if(HUMAN_HEIGHT_TALL) appearance.add_filter("Lenghten_Legs", 1, displacement_map_filter(lenghten_legs_mask, x = 0, y = 0, size = 1)) if(HUMAN_HEIGHT_TALLER) - appearance.add_filter("Lenghten_Torso", 1, displacement_map_filter(lenghten_torso_mask, x = 0, y = 0, size = 1)) - appearance.add_filter("Lenghten_Legs", 1, displacement_map_filter(lenghten_legs_mask, x = 0, y = 0, size = 1)) + appearance.add_filters(list( + list( + "name" = "Lenghten_Torso", + "priority" = 1, + "params" = displacement_map_filter(lenghten_torso_mask, x = 0, y = 0, size = 1), + ), + list( + "name" = "Lenghten_Legs", + "priority" = 1, + "params" = displacement_map_filter(lenghten_legs_mask, x = 0, y = 0, size = 1), + ), + )) if(HUMAN_HEIGHT_TALLEST) - appearance.add_filter("Lenghten_Torso", 1, displacement_map_filter(lenghten_torso_mask, x = 0, y = 0, size = 1)) - appearance.add_filter("Lenghten_Legs", 1, displacement_map_filter(lenghten_legs_mask, x = 0, y = 0, size = 2)) + appearance.add_filters(list( + list( + "name" = "Lenghten_Torso", + "priority" = 1, + "params" = displacement_map_filter(lenghten_torso_mask, x = 0, y = 0, size = 1), + ), + list( + "name" = "Lenghten_Legs", + "priority" = 1, + "params" = displacement_map_filter(lenghten_legs_mask, x = 0, y = 0, size = 2), + ), + )) // Kinda gross but because many humans overlays do not use KEEP_TOGETHER we need to manually propogate the filter // Otherwise overlays, such as worn overlays on icons, won't have the filter "applied", and the effect kinda breaks diff --git a/code/modules/mob/living/carbon/human/species_types/abominations.dm b/code/modules/mob/living/carbon/human/species_types/abominations.dm deleted file mode 100644 index 43ca71311c22..000000000000 --- a/code/modules/mob/living/carbon/human/species_types/abominations.dm +++ /dev/null @@ -1,51 +0,0 @@ -/// These won't appear normally in games, they are meant to for debuging the adjustment of limbs based on the height of a humans bodyparts. -/datum/species/human/tallboy - name = "\improper Tall Boy" - id = SPECIES_TALLBOY - examine_limb_id = SPECIES_HUMAN - changesource_flags = MIRROR_BADMIN | WABBAJACK - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right, - BODY_ZONE_HEAD = /obj/item/bodypart/head, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/tallboy, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/tallboy, - BODY_ZONE_CHEST = /obj/item/bodypart/chest, - ) - -/datum/species/monkey/human_legged - name = "human-legged monkey" - id = SPECIES_MONKEY_HUMAN_LEGGED - examine_limb_id = SPECIES_MONKEY - changesource_flags = MIRROR_BADMIN | WABBAJACK - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/monkey, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/monkey, - BODY_ZONE_HEAD = /obj/item/bodypart/head/monkey, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right, - BODY_ZONE_CHEST = /obj/item/bodypart/chest/monkey, - ) - -/datum/species/monkey/monkey_freak - name = "human-armed monkey" - id = SPECIES_MONKEY_FREAK - examine_limb_id = SPECIES_MONKEY - changesource_flags = MIRROR_BADMIN | WABBAJACK - bodypart_overrides = list( - BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left, - BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right, - BODY_ZONE_HEAD = /obj/item/bodypart/head/monkey, - BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/monkey, - BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/monkey, - BODY_ZONE_CHEST = /obj/item/bodypart/chest, - ) - -/mob/living/carbon/human/species/monkey/humand_legged - race = /datum/species/monkey/human_legged - -/mob/living/carbon/human/species/monkey/monkey_freak - race = /datum/species/monkey/monkey_freak - -/mob/living/carbon/human/species/tallboy - race = /datum/species/human/tallboy diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index 9fc68a635095..e5d53d9d58bd 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -89,22 +89,6 @@ QDEL_NULL(ethereal_light) return ..() -// NON-MODULE CHANGE -// /datum/species/ethereal/update_quirk_mail_goodies(mob/living/carbon/human/recipient, datum/quirk/quirk, list/mail_goodies = list()) -// if(istype(quirk, /datum/quirk/blooddeficiency)) -// mail_goodies += list( -// /obj/item/reagent_containers/blood/ethereal -// ) -// return ..() - -/datum/species/ethereal/random_name(gender,unique,lastname) - if(unique) - return random_unique_ethereal_name() - - var/randname = ethereal_name() - - return randname - /datum/species/ethereal/randomize_features() var/list/features = ..() features["ethcolor"] = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 0a9232476cc3..56de52b77108 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -50,15 +50,6 @@ BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem, ) - /// Chance that we will generate a human surname, for lore reasons - var/human_surname_chance = 3 - -/datum/species/golem/random_name(gender,unique,lastname) - var/name = pick(GLOB.golem_names) - if (prob(human_surname_chance)) - name += " [pick(GLOB.last_names)]" - return name - /datum/species/golem/get_physical_attributes() return "Golems are hardy creatures made out of stone, which are thus naturally resistant to many dangers, including asphyxiation, fire, radiation, electricity, and viruses.\ They gain special abilities depending on the type of material consumed, but they need to consume material to keep their body animated." diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 9907d28ef933..4cc265608435 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -63,18 +63,6 @@ /datum/species/lizard/body_temperature_core(mob/living/carbon/human/humi, seconds_per_tick, times_fired) return -/datum/species/lizard/random_name(gender,unique,lastname) - if(unique) - return random_unique_lizard_name(gender) - - var/randname = lizard_name(gender) - - if(lastname) - randname += " [lastname]" - - return randname - - /datum/species/lizard/randomize_features() var/list/features = ..() features["body_markings"] = pick(GLOB.body_markings_list) diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm index fea8b71cb677..776a994b0dc2 100644 --- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm +++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm @@ -4,7 +4,7 @@ name = "Monkey" id = SPECIES_MONKEY external_organs = list( - /obj/item/organ/external/tail/monkey = "Monkey" + /obj/item/organ/external/tail/monkey = "Monkey", ) mutanttongue = /obj/item/organ/internal/tongue/monkey mutantbrain = /obj/item/organ/internal/brain/primate @@ -40,19 +40,14 @@ payday_modifier = 1.5 ai_controlled_species = TRUE -/datum/species/monkey/random_name(gender,unique,lastname) - var/randname = "monkey ([rand(1,999)])" - - return randname - -/datum/species/monkey/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) +/datum/species/monkey/on_species_gain(mob/living/carbon/human/human_who_gained_species, datum/species/old_species, pref_load) . = ..() - passtable_on(H, SPECIES_TRAIT) - H.dna.add_mutation(/datum/mutation/human/race, MUT_NORMAL) - H.dna.activate_mutation(/datum/mutation/human/race) - H.AddElement(/datum/element/human_biter) + passtable_on(human_who_gained_species, SPECIES_TRAIT) + human_who_gained_species.dna.add_mutation(/datum/mutation/human/race, MUT_NORMAL) + human_who_gained_species.dna.activate_mutation(/datum/mutation/human/race) + human_who_gained_species.AddElement(/datum/element/human_biter) -/datum/species/monkey/on_species_loss(mob/living/carbon/C) +/datum/species/monkey/on_species_loss(mob/living/carbon/human/C) . = ..() passtable_off(C, SPECIES_TRAIT) C.dna.remove_mutation(/datum/mutation/human/race) @@ -60,6 +55,7 @@ /datum/species/monkey/check_roundstart_eligible() // STOP ADDING MONKEY SUBTYPES YOU HEATHEN + // ok we killed monkey subtypes but we're keeping this in cause we can't trust you fuckers if(check_holidays(MONKEYDAY) && id == SPECIES_MONKEY) return TRUE return ..() @@ -158,7 +154,6 @@ to_chat(monkey_brain.owner, span_notice("You will now stumble while while colliding with people who are in combat mode.")) build_all_button_icons() - /obj/item/organ/internal/brain/primate/on_mob_insert(mob/living/carbon/primate) . = ..() RegisterSignal(primate, COMSIG_MOVABLE_CROSS, PROC_REF(on_crossed), TRUE) diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm index d3b98fe67424..85c61cc26d85 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -34,17 +34,6 @@ var/mob/living/carbon/human/H = C handle_mutant_bodyparts(H) -/datum/species/moth/random_name(gender,unique,lastname) - if(unique) - return random_unique_moth_name() - - var/randname = moth_name() - - if(lastname) - randname += " [lastname]" - - return randname - /datum/species/moth/on_species_gain(mob/living/carbon/human/human_who_gained_species, datum/species/old_species, pref_load) . = ..() RegisterSignal(human_who_gained_species, COMSIG_MOB_APPLY_DAMAGE_MODIFIERS, PROC_REF(damage_weakness)) diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 1e0e3ad564b8..aeb0f2e0bf4a 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -124,17 +124,6 @@ else give_important_for_life(equipping) -/datum/species/plasmaman/random_name(gender,unique,lastname) - if(unique) - return random_unique_plasmaman_name() - - var/randname = plasmaman_name() - - if(lastname) - randname += " [lastname]" - - return randname - /datum/species/plasmaman/get_scream_sound(mob/living/carbon/human/plasmaman) return pick( 'sound/voice/plasmaman/plasmeme_scream_1.ogg', diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 1dbe5626e912..7b3e04263876 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -658,13 +658,15 @@ return copytext(sanitize(input("Choose an emote to display.") as text|null), 1, MAX_MESSAGE_LEN) /datum/emote/living/custom/proc/get_custom_emote_type_from_user() - var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable") + var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable", "Both") switch(type) if("Visible") return EMOTE_VISIBLE if("Hearable") return EMOTE_AUDIBLE + if("Both") + return EMOTE_VISIBLE | EMOTE_AUDIBLE else tgui_alert(usr,"Unable to use this emote, must be either hearable or visible.") return FALSE diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 7770179bcf5e..267deaed7b39 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -198,9 +198,9 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( spans |= speech_span - if(language) - var/datum/language/L = GLOB.language_datum_instances[language] - spans |= L.spans + var/datum/language/spoken_lang = GLOB.language_datum_instances[language] + if(LAZYLEN(spoken_lang?.spans)) + spans |= spoken_lang.spans if(message_mods[MODE_SING]) var/randomnote = pick("\u2669", "\u266A", "\u266B") diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index da8bd502fb1e..8c6bb0d917c5 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -42,6 +42,7 @@ /mob/verb/me_verb(message as text) set name = "Me" set category = "IC" + set desc = "Perform a custom emote. Leave blank to pick between an audible or a visible emote (Defaults to visible)." if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, span_danger("Speech is currently admin-disabled.")) @@ -49,7 +50,7 @@ message = trim(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN)) - QUEUE_OR_CALL_VERB_FOR(VERB_CALLBACK(src, TYPE_PROC_REF(/mob, emote), "me", 1, message, TRUE), SSspeech_controller) + QUEUE_OR_CALL_VERB_FOR(VERB_CALLBACK(src, TYPE_PROC_REF(/mob, emote), "me", EMOTE_VISIBLE|EMOTE_AUDIBLE, message, TRUE), SSspeech_controller) /mob/try_speak(message, ignore_spam = FALSE, forced = null, filterproof = FALSE) SHOULD_CALL_PARENT(TRUE) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index ca82e13e803e..b378d4e44c8c 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -35,6 +35,7 @@ RemoveInvisibility(type) set_species(/datum/species/monkey) name = "monkey" + regenerate_icons() set_name() SEND_SIGNAL(src, COMSIG_HUMAN_MONKEYIZE) uncuff() @@ -66,6 +67,7 @@ transformation_timer = addtimer(CALLBACK(src, PROC_REF(finish_humanize), species), TRANSFORMATION_DURATION, TIMER_UNIQUE) + /mob/living/carbon/proc/finish_humanize(species = /datum/species/human) transformation_timer = null to_chat(src, span_boldnotice("You are now a human.")) @@ -76,6 +78,12 @@ SEND_SIGNAL(src, COMSIG_MONKEY_HUMANIZE) return src +/mob/living/carbon/human/finish_humanize(species = /datum/species/human, instant = FALSE) + underwear = "Nude" + undershirt = "Nude" + socks = "Nude" + return ..() + /mob/proc/AIize(client/preference_source, move = TRUE) var/list/turf/landmark_loc = list() diff --git a/code/modules/mob_spawn/ghost_roles/golem_roles.dm b/code/modules/mob_spawn/ghost_roles/golem_roles.dm index b3475e9207f8..5fc643bffa62 100644 --- a/code/modules/mob_spawn/ghost_roles/golem_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/golem_roles.dm @@ -36,8 +36,7 @@ if(forced_name || !iscarbon(spawned_mob)) return ..() - var/datum/species/golem/golem_species = new() - forced_name = golem_species.random_name() + forced_name = generate_random_name_species_based(spawned_mob.gender, TRUE, species_type = /datum/species/golem) return ..() /obj/effect/mob_spawn/ghost_role/human/golem/special(mob/living/new_spawn, mob/mob_possessor) diff --git a/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/code/modules/mob_spawn/ghost_roles/mining_roles.dm index 208a74a3edbf..53fa00109703 100644 --- a/code/modules/mob_spawn/ghost_roles/mining_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/mining_roles.dm @@ -194,9 +194,9 @@ /obj/structure/ash_walker_eggshell/Destroy() if(!egg) return ..() - var/mob/living/carbon/human/yolk = new /mob/living/carbon/human/(get_turf(src)) - yolk.fully_replace_character_name(null,random_unique_lizard_name(gender)) + var/mob/living/carbon/human/yolk = new(get_turf(src)) yolk.set_species(/datum/species/lizard/ashwalker) + yolk.fully_replace_character_name(null, yolk.generate_random_mob_name(TRUE)) yolk.underwear = "Nude" yolk.equipOutfit(/datum/outfit/ashwalker)//this is an authentic mess we're making yolk.update_body() @@ -235,7 +235,7 @@ /obj/effect/mob_spawn/ghost_role/human/ash_walker/special(mob/living/carbon/human/spawned_human) . = ..() - spawned_human.fully_replace_character_name(null,random_unique_lizard_name(gender)) + spawned_human.fully_replace_character_name(null, spawned_human.generate_random_mob_name(TRUE)) to_chat(spawned_human, "Drag the corpses of men and beasts to your nest. It will absorb them to create more of your kind. Invade the strange structure of the outsiders if you must. Do not cause unnecessary destruction, as littering the wastes with ugly wreckage is certain to not gain you favor. Glory to the Necropolis!") spawned_human.mind.add_antag_datum(/datum/antagonist/ashwalker, team) diff --git a/code/modules/mob_spawn/mob_spawn.dm b/code/modules/mob_spawn/mob_spawn.dm index 086254aae388..b0c8bdadac9f 100644 --- a/code/modules/mob_spawn/mob_spawn.dm +++ b/code/modules/mob_spawn/mob_spawn.dm @@ -59,26 +59,15 @@ spawned_human.underwear = "Nude" spawned_human.undershirt = "Nude" spawned_human.socks = "Nude" + randomize_human_normie(spawned_human) if(hairstyle) - spawned_human.hairstyle = hairstyle - else - spawned_human.hairstyle = random_hairstyle(spawned_human.gender) + spawned_human.set_hairstyle(hairstyle, update = FALSE) if(facial_hairstyle) - spawned_human.facial_hairstyle = facial_hairstyle - else - spawned_human.facial_hairstyle = random_facial_hairstyle(spawned_human.gender) + spawned_human.set_facial_hairstyle(facial_hairstyle, update = FALSE) if(haircolor) - spawned_human.hair_color = haircolor - else - spawned_human.hair_color = "#[random_color()]" + spawned_human.set_haircolor(haircolor, update = FALSE) if(facial_haircolor) - spawned_human.facial_hair_color = facial_haircolor - else - spawned_human.facial_hair_color = "#[random_color()]" - if(skin_tone) - spawned_human.skin_tone = skin_tone - else - spawned_human.skin_tone = random_skin_tone() + spawned_human.set_facial_haircolor(facial_haircolor, update = FALSE) spawned_human.update_body(is_creating = TRUE) /obj/effect/mob_spawn/proc/name_mob(mob/living/spawned_mob, forced_name) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 0340d5b860dd..6df2e99c098f 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -912,7 +912,7 @@ return to_chat(affected_mob, span_warning("You grit your teeth in pain as your body rapidly mutates!")) affected_mob.visible_message("[affected_mob] suddenly transforms!") - randomize_human(affected_mob) + randomize_human_normie(affected_mob) /datum/reagent/aslimetoxin name = "Advanced Mutation Toxin" diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 29ccd0ccd872..54a742e8d99b 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -191,7 +191,7 @@ volume = 24 amount_per_transfer_from_this = 24 desc = "Contains a relatively safe quantity of methamphetamine, along with mannitol to ensure that brain damage is kept at a minimum." - list_reagents = list(/datum/reagent/drug/methamphetamine = 10, /datum/reagent/medicine/mannitol = 14) + list_reagents = list(/datum/reagent/drug/methamphetamine = 10, /datum/reagent/medicine/mannitol = 15) // NON-MODULE CHANGE replacing this /* diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index ac144938ea7f..393d165da9a4 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -144,7 +144,7 @@ name = "mannitol pill" desc = "Used to treat brain damage." icon_state = "pill17" - list_reagents = list(/datum/reagent/medicine/mannitol = 14) + list_reagents = list(/datum/reagent/medicine/mannitol = 15) rename_with_volume = TRUE /obj/item/reagent_containers/pill/sansufentanyl diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index a1d4eff50a6e..ca4b71f48c7e 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -7,6 +7,7 @@ id = "rainbow_protection" duration = 100 alert_type = /atom/movable/screen/alert/status_effect/rainbow_protection + show_duration = TRUE var/originalcolor /datum/status_effect/rainbow_protection/on_apply() @@ -37,6 +38,7 @@ id = "slimeskin" duration = 300 alert_type = /atom/movable/screen/alert/status_effect/slimeskin + show_duration = TRUE var/originalcolor /datum/status_effect/slimeskin/on_apply() diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index e6b701d015b0..1f14aeb07f32 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -282,13 +282,12 @@ obj_flags |= EMAGGED SSshuttle.emergency.movement_force = list("KNOCKDOWN" = 60, "THROW" = 20)//YOUR PUNY SEATBELTS can SAVE YOU NOW, MORTAL - var/datum/species/S = new for(var/i in 1 to 10) // the shuttle system doesn't know who these people are, but they // must be important, surely var/obj/item/card/id/ID = new(src) var/datum/job/J = pick(SSjob.joinable_occupations) - ID.registered_name = S.random_name(pick(MALE, FEMALE)) + ID.registered_name = generate_random_name_species_based(species_type = /datum/species/human) ID.assignment = J.title authorized += ID diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 50ac0e5021ac..d4309bd48831 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -17,6 +17,8 @@ VAR_PROTECTED/icon_invisible = 'icons/mob/human/bodyparts.dmi' ///The type of husk for building an iconstate var/husk_type = "humanoid" + ///The color to multiply the greyscaled husk sprites by. Can be null. Old husk sprite chest color is #A6A6A6 + var/husk_color = "#A6A6A6" layer = BELOW_MOB_LAYER //so it isn't hidden behind objects when on the floor grind_results = list(/datum/reagent/bone_dust = 10, /datum/reagent/consumable/liquidgibs = 5) // robotic bodyparts and chests/heads cannot be ground /// The mob that "owns" this limb @@ -178,8 +180,6 @@ var/unarmed_damage_high = 1 ///Determines the accuracy bonus, armor penetration and knockdown probability. var/unarmed_effectiveness = 10 - /// How many pixels this bodypart will offset the top half of the mob, used for abnormally sized torsos and legs - var/top_offset = 0 /// Traits that are given to the holder of the part. If you want an effect that changes this, don't add directly to this. Use the add_bodypart_trait() proc var/list/bodypart_traits = list() @@ -1041,16 +1041,6 @@ var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) var/image/aux - // Handles making bodyparts look husked - if(is_husked) - limb.icon = icon_husk - limb.icon_state = "[husk_type]_husk_[body_zone]" - icon_exists(limb.icon, limb.icon_state, scream = TRUE) //Prints a stack trace on the first failure of a given iconstate. - . += limb - if(aux_zone) //Hand shit - aux = image(limb.icon, "[husk_type]_husk_[aux_zone]", -aux_layer, image_dir) - . += aux - // Handles invisibility (not alpha or actual invisibility but invisibility) if(is_invisible) limb.icon = icon_invisible @@ -1059,38 +1049,42 @@ return . // Normal non-husk handling - if(!is_husked) // This is the MEAT of limb icon code - limb.icon = icon_greyscale - if(!should_draw_greyscale || !icon_greyscale) - limb.icon = icon_static + limb.icon = icon_greyscale + if(!should_draw_greyscale || !icon_greyscale) + limb.icon = icon_static - if(is_dimorphic) //Does this type of limb have sexual dimorphism? - limb.icon_state = "[limb_id]_[body_zone]_[limb_gender]" - else - limb.icon_state = "[limb_id]_[body_zone]" - - icon_exists(limb.icon, limb.icon_state, TRUE) //Prints a stack trace on the first failure of a given iconstate. + if(is_dimorphic) //Does this type of limb have sexual dimorphism? + limb.icon_state = "[limb_id]_[body_zone]_[limb_gender]" + else + limb.icon_state = "[limb_id]_[body_zone]" - . += limb + icon_exists(limb.icon, limb.icon_state, TRUE) //Prints a stack trace on the first failure of a given iconstate. - if(aux_zone) //Hand shit - aux = image(limb.icon, "[limb_id]_[aux_zone]", -aux_layer, image_dir) - . += aux + . += limb - draw_color = variable_color - if(should_draw_greyscale) //Should the limb be colored outside of a forced color? - draw_color ||= (species_color) || (skin_tone && skintone2hex(skin_tone)) + if(aux_zone) //Hand shit + aux = image(limb.icon, "[limb_id]_[aux_zone]", -aux_layer, image_dir) + . += aux + draw_color = variable_color + if(should_draw_greyscale) //Should the limb be colored outside of a forced color? + draw_color ||= (species_color) || (skin_tone && skintone2hex(skin_tone)) - if(draw_color) - limb.color = "[draw_color]" - if(aux_zone) - aux.color = "[draw_color]" + if(is_husked) + huskify_image(thing_to_husk = limb) + if(aux) + huskify_image(thing_to_husk = aux) + draw_color = husk_color + if(draw_color) + limb.color = "[draw_color]" + if(aux_zone) + aux.color = "[draw_color]" //EMISSIVE CODE START // For some reason this was applied as an overlay on the aux image and limb image before. // I am very sure that this is unnecessary, and i need to treat it as part of the return list // to be able to mask it proper in case this limb is a leg. + if(!is_husked) if(blocks_emissive != EMISSIVE_BLOCK_NONE) var/atom/location = loc || owner || src var/mutable_appearance/limb_em_block = emissive_blocker(limb.icon, limb.icon_state, location, layer = limb.layer, alpha = limb.alpha) @@ -1126,6 +1120,17 @@ return . +/obj/item/bodypart/proc/huskify_image(image/thing_to_husk, draw_blood = TRUE) + var/icon/husk_icon = new(thing_to_husk.icon) + husk_icon.ColorTone(HUSK_COLOR_TONE) + thing_to_husk.icon = husk_icon + if(draw_blood) + var/mutable_appearance/husk_blood = mutable_appearance(icon_husk, "[husk_type]_husk_[body_zone]") + husk_blood.blend_mode = BLEND_INSET_OVERLAY + husk_blood.appearance_flags |= RESET_COLOR + husk_blood.dir = thing_to_husk.dir + thing_to_husk.add_overlay(husk_blood) + ///Add a bodypart overlay and call the appropriate update procs /obj/item/bodypart/proc/add_bodypart_overlay(datum/bodypart_overlay/overlay) bodypart_overlays += overlay diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index fcf3f8f19ecc..eee42c49afb0 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -72,7 +72,6 @@ icon_static = 'icons/mob/human/species/monkey/bodyparts.dmi' icon_husk = 'icons/mob/human/species/monkey/bodyparts.dmi' husk_type = "monkey" - top_offset = -5 icon_state = "default_monkey_chest" limb_id = SPECIES_MONKEY should_draw_greyscale = FALSE @@ -453,7 +452,6 @@ icon_static = 'icons/mob/human/species/monkey/bodyparts.dmi' icon_husk = 'icons/mob/human/species/monkey/bodyparts.dmi' husk_type = "monkey" - top_offset = -3 icon_state = "default_monkey_l_leg" limb_id = SPECIES_MONKEY should_draw_greyscale = FALSE @@ -542,7 +540,6 @@ icon_static = 'icons/mob/human/species/monkey/bodyparts.dmi' icon_husk = 'icons/mob/human/species/monkey/bodyparts.dmi' husk_type = "monkey" - top_offset = -3 icon_state = "default_monkey_r_leg" limb_id = SPECIES_MONKEY should_draw_greyscale = FALSE @@ -566,15 +563,3 @@ can_be_disabled = FALSE max_damage = LIMB_MAX_HP_ALIEN_LIMBS should_draw_greyscale = FALSE - -/obj/item/bodypart/leg/right/tallboy - limb_id = SPECIES_TALLBOY - top_offset = 23 - unarmed_damage_low = 30 - unarmed_damage_low = 50 - -/obj/item/bodypart/leg/left/tallboy - limb_id = SPECIES_TALLBOY - top_offset = 23 - unarmed_damage_low = 30 - unarmed_damage_low = 50 diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm index 9fda5a87f1b8..fd79b56b1a8a 100644 --- a/code/modules/surgery/organs/external/tails.dm +++ b/code/modules/surgery/organs/external/tails.dm @@ -141,13 +141,16 @@ var/wagging = FALSE /datum/bodypart_overlay/mutant/tail/get_base_icon_state() - return (wagging ? "wagging_" : "") + sprite_datum.icon_state //add the wagging tag if we be wagging + return "[wagging ? "wagging_" : ""][sprite_datum.icon_state]" //add the wagging tag if we be wagging /datum/bodypart_overlay/mutant/tail/can_draw_on_bodypart(mob/living/carbon/human/human) if(human.wear_suit && (human.wear_suit.flags_inv & HIDEJUMPSUIT)) return FALSE return TRUE +/datum/bodypart_overlay/mutant/tail/get_global_feature_list() + return GLOB.tails_list_human + /obj/item/organ/external/tail/cat name = "tail" preference = "feature_human_tail" @@ -161,12 +164,14 @@ feature_key = "tail_cat" color_source = ORGAN_COLOR_HAIR -/datum/bodypart_overlay/mutant/tail/cat/get_global_feature_list() - return GLOB.tails_list_human - /obj/item/organ/external/tail/monkey + name = "monkey tail" + preference = "feature_monkey_tail" + bodypart_overlay = /datum/bodypart_overlay/mutant/tail/monkey + dna_block = DNA_MONKEY_TAIL_BLOCK + ///Monkey tail bodypart overlay /datum/bodypart_overlay/mutant/tail/monkey color_source = NONE diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm index b77238400bee..aa709771d4db 100644 --- a/code/modules/surgery/organs/internal/lungs/_lungs.dm +++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm @@ -47,6 +47,7 @@ var/safe_plasma_min = 0 ///How much breath partial pressure is a safe amount of plasma. 0 means that we are immune to plasma. var/safe_plasma_max = 0.05 + var/n2o_detect_min = 0.08 //Minimum n2o for effects var/n2o_para_min = 1 //Sleeping agent var/n2o_sleep_min = 5 //Sleeping agent var/BZ_trip_balls_min = 1 //BZ gas @@ -503,12 +504,12 @@ /obj/item/organ/internal/lungs/proc/too_much_n2o(mob/living/carbon/breather, datum/gas_mixture/breath, n2o_pp, old_n2o_pp) if(n2o_pp < n2o_para_min) // Small amount of N2O, small side-effects. - if(n2o_pp <= 0.01) - if(old_n2o_pp > 0.01) + if(n2o_pp <= n2o_detect_min) + if(old_n2o_pp > n2o_detect_min) return BREATH_LOST return // No alert for small amounts, but the mob randomly feels euphoric. - if(old_n2o_pp >= n2o_para_min || old_n2o_pp <= 0.01) + if(old_n2o_pp >= n2o_para_min || old_n2o_pp <= n2o_detect_min) breather.clear_alert(ALERT_TOO_MUCH_N2O) if(prob(20)) diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index d8d22c881610..b8ecb875fbe7 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -95,11 +95,11 @@ else user.visible_message(span_warning("You have no picture to base the appearance on, reverting to random appearances.")) for(var/i in 1 to 10) - names += target.dna.species.random_name(target.gender, TRUE) + names += target.generate_random_mob_name(TRUE) else - for(var/_i in 1 to 9) + for(var/j in 1 to 9) names += "Subject [target.gender == MALE ? "i" : "o"]-[pick("a", "b", "c", "d", "e")]-[rand(10000, 99999)]" - names += target.dna.species.random_name(target.gender, TRUE) //give one normal name in case they want to do regular plastic surgery + names += target.generate_random_mob_name(TRUE) //give one normal name in case they want to do regular plastic surgery var/chosen_name = tgui_input_list(user, "New name to assign", "Plastic Surgery", names) if(isnull(chosen_name)) return diff --git a/code/modules/transport/tram/tram_doors.dm b/code/modules/transport/tram/tram_doors.dm index d836685acf11..6008c383ec93 100644 --- a/code/modules/transport/tram/tram_doors.dm +++ b/code/modules/transport/tram/tram_doors.dm @@ -136,7 +136,7 @@ for(var/mob/living/future_pancake in checked_turf) future_pancake.visible_message(span_warning("[src] beeps angrily and closes on [future_pancake]!"), span_userdanger("[src] beeps angrily and closes on you!")) SEND_SIGNAL(future_pancake, COMSIG_LIVING_DOORCRUSHED, src) - if(ishuman(future_pancake) || ismonkey(future_pancake)) + if(ishuman(future_pancake)) future_pancake.emote("scream") future_pancake.adjustBruteLoss(DOOR_CRUSH_DAMAGE * 2) future_pancake.Paralyze(2 SECONDS) diff --git a/code/modules/unit_tests/limbsanity.dm b/code/modules/unit_tests/limbsanity.dm index 9988c7471e29..d7acfeedf4a6 100644 --- a/code/modules/unit_tests/limbsanity.dm +++ b/code/modules/unit_tests/limbsanity.dm @@ -10,29 +10,3 @@ TEST_FAIL("[path] does not have a valid icon for female variants") else if(!icon_exists(UNLINT(part.should_draw_greyscale ? part.icon_greyscale : part.icon_static), "[part.limb_id]_[part.body_zone]")) TEST_FAIL("[path] does not have a valid icon") - -/// Tests the height adjustment system which dynamically changes how much the chest, head, and arms of a carbon are adjusted upwards or downwards based on the length of their legs and chest. -/datum/unit_test/limb_height_adjustment - -/datum/unit_test/limb_height_adjustment/Run() - var/mob/living/carbon/human/john_doe = allocate(/mob/living/carbon/human/consistent) - var/mob/living/carbon/human/species/monkey/monkey = allocate(/mob/living/carbon/human/species/monkey) - var/mob/living/carbon/human/tallboy = allocate(/mob/living/carbon/human/consistent) - - tallboy.set_species(/datum/species/human/tallboy) - TEST_ASSERT_EQUAL(john_doe.get_top_offset(), 0, "John Doe found to have a top offset other than zero.") - TEST_ASSERT_EQUAL(monkey.get_top_offset(), -8, "Monkey found to have a top offset other than -8.") - TEST_ASSERT_EQUAL(tallboy.get_top_offset(), 23, "Tallboy human varient found to have a top offset other than 23.") - - - var/obj/item/bodypart/leg/left/monkey/left_monky_leg = allocate(/obj/item/bodypart/leg/left/monkey) - var/obj/item/bodypart/leg/right/monkey/right_monky_leg = allocate(/obj/item/bodypart/leg/right/monkey) - - left_monky_leg.replace_limb(john_doe, TRUE) - - TEST_ASSERT_EQUAL(john_doe.get_top_offset(), 0, "John Doe has a top offset other than 0 with one human leg and one monkey leg.") - - right_monky_leg.replace_limb(john_doe, TRUE) - - TEST_ASSERT_EQUAL(john_doe.get_top_offset(), -3, "John Doe has a top offset other than -3 with two monkey legs.") - diff --git a/code/modules/unit_tests/preference_species.dm b/code/modules/unit_tests/preference_species.dm index 8e49f49cdd6a..8d913cc8fb64 100644 --- a/code/modules/unit_tests/preference_species.dm +++ b/code/modules/unit_tests/preference_species.dm @@ -12,7 +12,7 @@ for(var/species_id in get_selectable_species()) var/species_type = GLOB.species_list[species_id] - var/datum/species/species = new species_type() + var/datum/species/species = GLOB.species_prototypes[species_type] // Check the species decription. // If it's not overridden, a stack trace will be thrown (and fail the test). @@ -29,5 +29,3 @@ TEST_FAIL("Species [species] ([species_type]) is selectable, but did not properly implement get_species_lore().") else if(!islist(species_lore)) TEST_FAIL("Species [species] ([species_type]) is selectable, but did not properly implement get_species_lore() (Did not return a list).") - - qdel(species) diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_tallboy.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human_tallboy.png deleted file mode 100644 index 262353dc0a95afa4307c8c162e9276bb09a17179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457 zcmV;)0XF`LP)E#@e2e>c6xkBq}W}Gt14YE62mqS@7!En1VMG7`0MItN#Dr&e)Fap^4yL z#_D|#;e_)L5HG+x_;BdaJrJ&gu5qVv5qR*H04v9z7IX%>0$+0+V;q(cR#-z=2Kf|B z!4yovUkRuUkSgf#IzV-R41vwR7BFucgB(1>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;Zh zDainGjE%TBGg33tGfE(w;*!LYR3KAHiHkEOv#1!Po{KZBC^0t`#5UwoR&e!m0hvE$o421!wfmpuOK+-^)_kYbjvME~@%XB*3e^DD~ z=SUyI@%X5!p7D%dkDBA>dQ+>WX;j_FI)|uNC)K>*M@i2}^-7&2z*)8Epp^k#tnbc( zenCdtww?TvkpTT75$d|@y22_gx>R3jA|w!LK{up1$Vl~8JKuSSd%oW4R}O9S1W(pE z^5mQ)pVhUssJB)Nx&y$W9`{TJbOQoHo19*GM;1u|q9vCBIMPNNgO3*U0Ks`Qp~F5S z>eiqEEJa2~hhF;yz<=!kBCPU3Pii7uLP{1=5^eb;i}?A^}~3*y^TXJ0Qzx6^*Hu-wN|aKz!&bo z6*^#@qP~`FgBOv1bNlQ&I)B$5Ps!|(Pe9Z~z{H!S;!QGT_1SaxAow|7|Gom=bAEIP-uYCe-Em z0de60p#&(;56HL_=Yu#P$U08!;4_}{H6Z(d!#!IM=fDl~4^v)vyaR*3W=Yz%Ru`Jj|2-*9hIdTLf|D6w3 zt2glfaTtc{O#m#95p8yY8 je|!rtiG;`W9{_& diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey_monkey_freak.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey_monkey_freak.png deleted file mode 100644 index dc13acaeffcc7e1f6c05a0330106ef62aa4262c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 916 zcmV;F18e+=P)rw$#_(iHo9mGXQ2nDRuw=00DGTPE!Ct=GbNc z003orR9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;Zh zDainGjE%TBGg33tGfE(w;*!LYR3KAHiHkEOv#1!Po{KZBC^0t`#5UwoR&e!m0h=^4?Ks>c%l=RXQy>2BJt5VqQ+E(sSYyG<=RJSGvl}lFsXPx&GSLb6S?%(zgxO+t$*N zkra2}xdW9%og|%u50QNHE_q7l&pO~;8h6PXpy*vdRIQuj4nX&@aSz-=KMnZ(&pLQZ z(4W$kjtIp+goL{;bnqQtCLZ{MNBV9MIvGRPKd=Efz#nu0FQe=q81TvlK};C>{sD1h zgU|!?{R1+NU4Kvvf~;d=$ACZ9_P{KWA%}?J-mJ&w#?*cZl^F z7Q`7QAg}A?Ds^zZtSjf71+N-IPW|=GYRa`idM9-2Zv?rX3Elca=+*x(fZjlP3NQ)V q9R^@}2*60fzeOTIYYe2n0e=8Ui!%cRQURd=0000bi)kB(BmjsnzCYtE#;QGnx#P2{(j`t!DO-Ct$ zzZ`}k5Mq|@@@5cdvP1kztJk~CG;q3?m}s^$fV_VReEfo3^Y9+>jSB|tw6cR>pn+5- z#wHS;t%DEQ9`Dgz)Ey$xgYYCJPLg^hdQsGku=T14=0M#if$u^rkU&;zcL0xi6Xqys zVm)mZ1F(Z`JOd3c$=4o^P~>Q`$j~DlW#&(MsuWth7>p zw@z1`*p8asnp2+jzyg~9}7{m7=Y zg|mX3I2XYofHqcv1`^>stgPUKfx?6~;DFOjc+$NuJOv7N6=Ksrm!|z_7nFDIZ|#Fl zPcPHeHlHvapPzGheSwPbzw<93TM1$M^H&j`ul}lNAYUfhKKOl^Svz5@Y}#Qwqg#QU ze_F^J!R)5Edy*++4PFRl5y-MNa(N^J0v5?m6bfA?g7KBs>nR1T8Gq9!GfIXbRC}yU z3~cYskogN@OFmJ)kK+2{MevlpxV*}`k}1cM_zZY+SYZ2rL>|DKBvvsXQ5lmivo!Ug5(SknL&S#u%f`jHB;WzADI z9r-dR!`rPNj(jJlEAQsRapuB2vG+m!i1JM43uEY|Aluza;ULe$CWR2bO!2kAcNWa1 m$bn6vgDle5T)-FO|KA%Ea%eQF5)$|T0000DO*o?8-x9Lm|eY`pcV1F?~r-ycLzx-*nE9sXR`)|={pVqwp>ZE376u}fT zn1Fs^P9`4J*3_{eV>)qesJ@euYQ}PBb`M&jW=1?mouGf_z2%n<=<%3pW`(K>N!gYN z1=Z|UG;wuEFl_+wfdFaqJvdA;<7p^j3fK+s*4hJ>EfYDTOSH@|uzSUB1!b!w-a;2@ z;}>VM9iDKNMg;{78Ou2VjMN=`20%GUZ6AQ{)*aLUR3BxX?`x>L>YGBK{1n&rE~&BX zK5Gh`EBAlbcfLQK)w%pRc@15-=H(Bnt7`|lC|CIt9oX77EWzc1Y4LCkfOiDsaBGe7 z2*|XJYU@B={{iR$V9F!Fk}pY(uK%P1n=mFo>fGzVV}7F#{p;v-PHP^y?NgeWeRoK8 z76tf%T!{D`)t4SI+HB#expBMDQNm9gF^e0%;)NnzpLueW1Xt7$pEmafMx6jKB%J^2-qgzWQ}S zYv7)gcouRF0K4 zzyn9OH^#ymn}y;{(4;Z|GM~FKw?Tm@9M0?A8QsVErT-vAa`~d Ze*;8!ehqbkqVxa&002ovPDHLkV1gx>DG~qx delta 506 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

Xc2-4PqeBZ|ahN z@=pHu-0puE;Qu@H=T239Pop8B%~9ztKoww^rha@}6Qv8>*qTdUmAN-#Bdt%mCp|*# zxk7-%hALWAfIz7t-{Cu4T~G9LPp6iuo-KhuN;`liuR5y&mb!CfY8s>EIKmQ7M6ALS zEY-S?t{F6db#wE!^twJGCxLjK$(ro*DrL@^pulBLsE4hP{aC>Z}eS@5N(&?JKeQ6msZ)zLeG7%@B;I|Q<*FlvVaH8p|GVC|P zy;|K_$`#bQs#>^BWa$Xu0T38i3INK?-~$SV5qLMy%!unKp3Nz*IN&zRH!%Tw9ZBvD zYj{694*e4iAE=Sf>(AA42E4ppF%KqF+M?(R{xrd#-G|;Mav64PCb1D&^Kp|$1wi`g zIRV)K>w9%%RAa|2-82Wk*2pF_IpLU6OU76JazMPaV=A|ZZK|%;OFy`Md#!F&qF}p8 zK*bxU;DTwH5u!z5iL{XVv4#&y6E{(p|7tmq5arJ#{PY^*&@dyyHsvR@s3QAbA`v0pH_&k3HAicQ!rjS)t#2DyzigQsZKri7-Vf_HR&2U z8T!FB!d*TpfCEoHgQQhPX9d&6?U*K?Q*doPeTLt>Uph)L%Gm0dL)&VXdD^n?LU3C! zU2|3_+r&$)3);k`r46KAbG`&+rjHee-^*t@m=gnh467P48liJBfy8qPI6L2qXG(i7i`V=QK_w zT`JCLvIJt}8x}B8>(d!xPx5OV_1?cxIJoIhUs5;Ia-}|hL8BsxKjj+-LsGH-wZK0r zlIs03s`q6?b!UcKTTc}*d=LQ8c>5#+h~bJLwi^(gPp+{@yO&KT=_?AYe+!W>C3pUt z(QgJRWTffrubXWT9pcgc^muagamgKf)yE(2UHO-g1Ov<@K&#A5!7B(}DDc0G~3Y1NMBbW{+AI+i3MJ*Y!7ZX@%$3bL~gb@(%W#DxLne=-(Bcfud{CPT4w6uPpQ+n z9xpwEWi5rDruJr>7l@4LlDZu^40nSPMq?I!k$@Z<=~%J~G0>F51qp#$S;Ap1)YYOm zvET|_99=@i;g;7s%i+pvHH%&BIwZ+**kL@fYTc{yHB6l4daYsLTwTmj2hGO~P$Fa|nEr7x{lY~HgolH~m z`_k>2Kca0owQR#&tCUg@Th;@c%E8D?uHcGay;)g= z{i#9Ek%FV>P7;jZZ&VkEdcsdQb+oxUZQKbxES;7tDbCJtX9%1h(qe*aS~r!bk9YN4 zJp7{6JGJyqP9fQER@xGy1!&8h$2jaa@+kxO`HQfUVO~;n1+iNmQqg!*uz(3A& z!1VgSxc<{ra18bVcxB8`@j>w+mm>^ZYE&27-w!4na;^29&u~_+`e*oNVGT{H-*}Ae z1qnbH@bsJ#81u#A;=JyM${XFZ?Y*8D=T&&uTsH(YJ0dTNaKUVT63X7>z;{M&6-6~U zhCb37u)uxeAWGOfiKm_VGw~We}IbFGAo4Cmy!J!>ZP& z|L<6iJzYdcQBihcB6lxg$Ic`Tg`Vv7ZB08$N=j~k5mELmXNhfa+KNAA${8@kBLhA9 zeFNGe!5R~Q4FB9lT$2;g1nG1NcU@e3yD!4F*@}p>>^sP25T&hdsvPcdQC0DQ5RmlHgg=(EQ0E-S0Uyjnbz>$;$5q_7glKo9*Q z?N`(2ujXAv_^hlvPI8A3RMtD+i}r%&EPj}Qs>g31(d+a$BcZPeJ1s!=l*Lx^*FykZ zF;I$C^=cB8Vs~`x()tr}RsGy=TYN#}yI{>lQ2qzu{IOK6i=cCBi#z}c{FnJTXjC+l z@?3uY4`KMi%;3138`Z~abGL!=W9P6~GI_}{7CxRaFc%YDl+MJCxM+1u*WnVcsc#ZkPre-PSQ`rM=0 z8GnVH`1PB|@Rq84Dp&xA6PmU;v;X{PDL{(b-CJIcTGEGncwpcjy3vE}GQW8>)0Qy^ zDu8&5KSu0L33|PJLN&g${s}UI-KLS=@l&V1Q9QrTaPkWx^dCE9a@Sg_V^yB^5?W>jXX=D&J%*fEz}ZTVN4QIdD>$G{Hk( zV>UWH>(BD_zAJ@T$t9)1vJc9GpK}LZ7;A5DUwQUZ%JqTrR)kOTiJYj5G>-=LkFKs_ zz!0X=8hB;_HJwc)Zbe=>}p%kHL`jFC}vX5Yw_9H0rxZV>w5@9VZv-m86 z>oQ|k4)k7p(8V+T!wc`A>VVSW#k>-P}QlNe-M1K__fTy&6@mNq{3WYi<| z16IA9ohz)yq@<^j?Qur$ulE(6wh?~xD15`C$yLwx|HFX+oGPViF-Q_#G+HF^5p5hoqsHly_2 z-a)cUxvOd}FR82*K1E&u(RE#_sKRn|Gu%W@ZT?}pV0;tOKJN}|5ivL;&Jw1#lyZ(j znbC!*(kdiEy%qyVGY1%=wi&CFJG}G#zFi^pOg~beU#=YX>KJ0|?dIIauApF=E)B{%+-3pv`zjK=J-Mj^ZUm~ZczwiAR#weXuo?4M1N5WNnSp-b_LS)`RJiavHYi#`2 zuLl&k$vl-QG_WV8Df}5ujUPFE|J#>DuQdRp9*<61F_hg>bJHtC{3)y4G@of__~Okj zrc%;HlF$>MN%E-0dZMXrGdq1DRist4pN!Q~<&S#tTrmBf9&mlVu~&dMzMLx}Pav?Z zi4%ypxiC|Mr=6U9Y>`A88OLpuXXq(+fU%JOHcBYkrXW?j_v?AV3Rz#?hsUU5=O>7Pgi#WVbRzsfrQpeFx4bn{Va{`3D)lbQX1|}hMCEZHOj_FP^KqAvOOos}cSm%;UDTGh)!X}1 z^lWU!KrSdSVAiqzp7-3n`izrg0zLjX?VT-Z-q5(l>rgi(NMbAD^jlicSWlAb>hqG! z1zL88E^cB-LQ`}-3QyJ!xC&y(B)EUnWL8vY9m9Dpzt+sr*i)XE;saj@k&$%%;~o*F zc-5c3W_9sCvitfavseMk(%iH0Iz>eb8|?1L;UrknV?D&eg1M(q$1g`I;_BMNvF2Sl z(kYSXHZW^S#3ApOwF^c}({Uqsyygx#Rm(b;AKSSDfRaJUyBm$YT zUQyk8KsspMta5XZBr_9*z&V(LW=^V<9N*}h?{*Hmm7`tCPe%+^Vm=EK9Um)hOy>;cX(QVj0DKMe8mmcUaaT&*t_(*&MBpl z_R5Q}BI7lO$=sT_8EYQO(_8nqoOr?OmKut8h`Tg-T*o#ceSp_?N*0pL5@c>}uIuhz z%?+*uT(oz=3o*L&ABD`(K;{>8l=y6c?wnZFjrqEb)xasd9LYP{hRpkXDzxv4+knAN z*P*$JVuY`xlrc6Xy~5Dok(%|XKX)idIN>2w+Vvn@+2&w+dWBX0Q<;Y*da*g!qLt)| zz{K#HibV_gtg>P&N|(=>^)3{#A5U*VF7!`I7^d@Oy-R11tkQPChXlQ(Du$#+9UE~3 zbEPnqD=HGv*n%Gk8i+G&w&gmXlfkjR+pR^^@$CH?II5xVb&N)YUK-phBP_K@_?BtS zdu$*ReQfE=LtgsW2AA#6vsa|3V8yjAK$6t;wzm|u6Br6Ax^AGN!O0U zS9TWC^Z}Nwoc7vWS1sQ9?Yy*xYVUHvlIqDt2R?;~``>crcW) zIgtUZ=aG$2DmwOx0mY!iDYIspq?IAh4Y(@_l2;x)WeIMZi1tta(srM0Vx94~yun$i z%~U`QudlEe#PXLv_-0dqx}j_92b!l;GCY;CWy1bY0SqMj2m(M%KpTM zyxxIhaq)WXWFX4lzE}(UlHTJ3ovDkh$nU248rYoC%qI(d3c)nVAZZ>7#UCS#)_}+( zujs+ch^SevWF*O-OwR$r2C^BP(#tp`*B7q?TnBWNe;mhcG^|>{3If>vJ0snB%m36% z{tGAbzciwMqv!t9*ZrUR5Vd#IJs{(LgpVqeS;Q#&8c2&&qTdA3mD{fU_Rgn2p9Dzr ztaIDzZv_lfU`f&-!I1hJPEB9`bK}BCK1Ibl{QOa~+6)qpj{5!ARp{w|!B;EXQPtTS za_;(_(Je+FB5%C5y}HNLtf)9%VtgC?`uIrH=bkN+Rrqz--6uZ_z9AFsmZIwQMBzBn z%CotiImA$W*E5-WhMlg)pA<;DvgM*?Rn5 z=$E|0+`d^v8N##VTALhcosXVgrwjJgvviN?ago!gTNUgPKP7;fhWKd8MsftyVK#;M zsD1J9{zHCCZ?4!EEmwUS&K$cA;Z26O^ zz007YqPF%m5=Gh`dj?TT3gqPH-1yi~TL55Um1`PvO#2DG*jEkB_+B++Sa){Jkd`tX zS3=I+2nU~cDN;BUMyayWkTblhkojG2qkbJ*-RL+4jl{p3C*mG<27-x7`Ln-tf$^}g zu-GwG*7*JK8MS`nMgTp1&jiVBc{}~HSbH3!ym`$Kn@ATN=oaM3y4tnr0+&SWkRbm{ zGpHcqN8MbKC?Do?BW)+~3X4#V>&Uk${AWf=nG<+5TFl_ort&W=TF;QPzIXSGG&Ss) z$Uy!g>2nn?{4-l`L_;wvV1N{KKRs z6ScZ#&dv!I(#%~S6zNYlqbdEcqN1??;x&5IN0f!}dJe1C>do!#xfk0U#__Ph)keHpb4fi7C0?ANeW(?`+lVOxVY-DFzOnq zTTc{uzsKZAo``0#NLq_LQC0m2;C#FCF&S}ju7eUpZ4~Lers`SwB-|_7XkSSt68oG0 zR!Sa*PqhL}|B`dneB<@Ng(Qxtx?lLKtIAv%S?3_SNikO38!=Yp1bW&;9P}*_M zHTrx`a%jUO3lmeG#1iJ8k#U{1y|WdjbC8Y%$tUuxYtF!j+I31LD90W7whrd}oYu7w z>u|egBnOgYn^BBqFI9|*E(?BRYjg!J2j!~#S2ja%otM%)CQYY_V>A(U$MVH=LK8>xM4 zE6jRqq;=pj6wmdKAhCYx`3v)GG=hC@e=k4aVPO22~|2kBKHQ!DF=*y(>eVxbY>cf6g0kvvv}4_lrZjQs8E%#d2q_{%(D=7t>6f z5ln;0NV8$=Fn|l^Twuy`KsR_R%SCbfM;h!cB#@~xJ2`-56?mW}YPXK_D}L&19wWpC z`+d~%*V`zh=ju$tgQM5z=NU0ws3^~LBg*9rt(Ovo9x{&Eo$`&$5XaLk^RK3r zh!F+fKUq93F0W-RZjIVzHSh_z%jK^x8Tb?B#pm>-?$_DkD~)dxY>US!6ZRysws3Fe zHz4`6_H_Cqt(P%!rxp2{eDzZp&cyRW;pcTH-g&MK=IZ4xxOQtcu`<>Y)<AHfbk6f_RBE{sddRUPRoGI91QJfxj~db+sLOQ|K69-dFYR(Y>A zRj;*vywvqGs?gErzwTbqn0J4ei@)YCcQHv|^i`ca@+pUQ6DvC-hir%}6dKlYuJ`b=my zBVWz={*~)gd0%;F6ZJZG+^<7*(+k~M$9wc%ko5dAj2Juap@QBmxzs|Og@c^qA_5s6 zcp;44DaA|L#&*{kb1>YJH=yyHHo)ShMOJ>#~9AH+|pF9B*vv^c^nwI<`M5e1e++Yz? z4WF&;*>I4U)3?HBxt_lJyBc6VZf>K3xxkoUl=w0x#W1m3HK6v7YgfS|F5|jgJ^{hVn(xdq%Fa*65{!Gk&7j>n2vLiIivgVSh7vGQ}BLlrr$P1 z$pivTnUT|EB-({TAlj}^7R7IfDJGU1nx~v|kev&%4Us_CvPdoiMd!f4SDx%z)k3%> zv{O@6bp#9sj|EkHG?)ceEI%Y3P3wiyuwgJNkHc3afS2xP)y22Eg&4X%RBLQ~PO@8X zEx$sKfi_kekr3S;U|6{O`gAza@8IsEN3WKbmX6$w6ciK^!;Wf5R-vdM+SWP$J5&1! z7IVbZ+Db#`(irJ?jy5iZ2?nPSAeBLRN&TzdQqH;Ct4WCoVU^w#rzjFgi)(B>O9X(7 zPeHHVp`oFvY`PiN&ZTtcc7C()UxR@zwMXlsBhNk~&lWb^I(Myatd2D>oXNc)1q?)= ziMLeJS<#%yO(7Bzu4lknUDAjfBuTUF{wCR}`x^~=b-Zx&?N3gv7kKuDB)8q?*LXt( z^D)j<`<{WgRvh~Zl@kJ}C#Z6MetWCb%-?B6k7P9D((K^$6|t*!Iii@oCDo*TesFfM zoLHB>c&cyc*aUQOzRjyCxjP4`i5?Htek_W{1{@y@D-O1p)YcZiO@~hbxdixc-FmVq zK>b)Mj|%}^B?%tRAplFqBkRLC{R_2~B*+|zoO>f+KepaCT=jB`Nj7JT+pY3N8HWWs z4Z$Uk604SR+*6Y-EEaP-X+t6l0!6yjk4_`+q{+37<9%hy-~BY(zG|_2qj86BLvu@R z9@DhxquQ9l9*ng+Ib ze)DKMmG$G?a)b<(+@PRdsz3ysxJ}|?ta+=RRxm&U12~c{3G5xK`b!f#wqE=SC(nq6 zv77!QnwWvdYri3%87iZr;0*Ca(YB_S51w|>rUJkYKAhk2YUf~ovL?IxDggR0DHo~WTR@zNV~N1pAT2DKdnP1F4MMm-~b7c*#hXy;<~`%A;{7lnokWn4Swwk`^Yq9{cX5u_;yDhkr18Bh@+A|N85R28L#-g`h)RGRcAM4I#_Lg+=5 zD807;3DOB6Ku9PdnPpkA4?AZk1_qyx38~#qXhlv` z?=J&pyu7KL?f}}t%k;9}Sk}_f!y@k!9~tmVLVt{?QrYq65*1t*oSBczVHM)ve01KW zb_-e3_V(}#M2uw_!l5Iot(&00A*51b|zXxF8=u8FT07v{F};V8F65@Fih(o=H2 z!_u;ZE3(=GBM|ZowKTtXc)F2Y_lK{swP&lPnN{(7S`O9(7tU&(5g^Hb`F6N!=8ZX9 z6`P+$9|b~ezFOb?c_`8oeqmX7{vOvS4TQrdr)Gs#C(jq3N~8}&>R)Di$&xr*0mWo1 z4Y5g8-#l-^D&WuZ!HWkXo@R8_mqloJq`KrN#Noh&=Fgl9TGoRuS$#M`_mj4b`;EbR z)%C$q2JdNKP$`nFjkz)mVSe#r?4@RIEUv6)B>Tr+YgfBhPgkzNG#O>%Xo}Pv*-)QX zDI+j}uXEvjbBplfz{W`Y_f}p=i&u`UguJFne z^V);OMaW>!gL>)wN{t4L*kgJJgX6AqGxQK2-Y_;XJKXp6L7iX1fM;QRsa7sS8o%R; z<5j;WzG7$2_<1uri7G7Xx4%X_vx{K1t;|f%2$W?dUl_}L5_!bj&7y2xMN=euT@T9h z;BfT)-1oNuHg0JTZtaH|7nE3aq7t{#yuI)yZQ1dBHiab3-7=C~=llwJv{&0#|F`GH zu>SraJ`XtZM)nrMqIPk!bim^D-3J%Z(JSTzXM!cyP~}|Au={+>u`*GtxXS` z&(1*eLd+edfY#ivca+ODIDT4`ZPh<7fSHL3B&=8q=9<53{j8ZG?5yM&+;)07IM*H* zyd*pHndy5_=Ma-JiP^*T3MuZ&4e!`+xz{%?guuMwe9%lYGd$utTAg;8eKP70{y_X% z+lto)#Z4e5<)r)A%S__##)W>aJ~781W064vrZ|fs5bmoPX&|g;;y2v~0lxfKA>pU#0$A zkQ1!uMYoQ9@x_W`Z*V+{b7V@4_#kbtc)HxmmBZ3z>nDG|$ZRRqKGyI9^pm(KMxf&` z_0d+UO`b^h(b9x0uAk>6tM5U3mDOlNcmm2ho%e_j{P>YGF8Jspysz|ccbN^G|Db4Z z*7EX{nbTad?X?>(r$etKF?D^=?;1Gd^F4&?>Mid4vtcD~5-O*dcRr=qD-G%1v@A=% z{y<$z`e^dYhfgP&LJep4-gaq*DXq+uHkqnhrw`n$IJwI_q&R>?^Fqyg2}eCyl4DI( z(DF4u6-VFthum;Bx3n3)KGT2euEU1T0W7*zqfxXf7FBWN_0W;?`sqhQm|oj_?b%Mu z$T?^)!)V~I7CEMkoPcKFwN8n=sz-B~y4AjdvL2ly$$s$te$nAlmzKuz<`-QhS#i10 zoFoPGoO_)>)B(jhVSTZRQnZ+G;OilFt>!9%xN>n$QA#P_J&#}kF|4@`&O~^8)tkC6 z(M_aeoYVHC_A-;+9iZ^u&h}^*Abc28h$S8tM<=l4w|)o=o@sfZ=sF?Wo}S%Z+q(Mx z^Ec^Uox}kVVX4UUt#GOE)IsrDzM8q8B#KNC3SA%Pe*N*MndQj*NU7OrKQc1$-7_)I zQgI2bN2lBwm64&ZSaqN3yufbsEkG|_j~fxvJ4Rb~AILs0**$I7Gqp+WPI5-z6q0EN zf*$pSIzw1=7#NWD(Azg3`b?}&dHbB4-)rCS55BKX5dOq;x8mhg=wnj8kHgLN3vYwp z2jAtc2w{59&3SxY_$8BDdB_uIHBa}|gBk~q4459ia`vhE(RCW_FxRy-W~SAy#ND7$ z3FBC{E=mt^)oCHa+skT~8pH@v0Rt!Du09j}gn{w&p99m?KL_R~e-4LR{v0@i{}dKx zI6%L=!9ZsbhG2$c^uvF8^WUpYq`gtjx9$kd!N0+o!wRk_U)_lBt59D&^{cMt*Rmf^ z?ruFt8n(BZ*E!I7l_Rg6wuU^f5hb9E)O!1UOm{R5r4|j`r)aXvw<3t!&7J1$G?(Ib zmTCcIucgUzXHQtEm^(ALnDE{WepK;n+`c=&?bG9!$Lg{Oe%mkhUk!&Nc4KqW${;^B zHbPO7a>xTn@4$7X&R-kqNFkHxdVkC_rN^N>mVVv*g$uePPhLz2<~p+_%dn{Sra+7Z zR6IY3LOgyjLkE=2*T$MyqRp4yZMEP@_F^WwQ9^apKEIlN0Gk>%g8s!<{HWT**~7xw zNUnp@Fua{>zb6%AUq{^G5UlT;WS8Gt_wWTIm)>P-V-8jE`A@yFkovaA|q(FMxm_rR(t#R1vhzJ~juT@JP8nXqw-s z4D;F2&Dd^DI|xNq^Voml6bW`IMUP$1-RR1F)NF5G@0rVy@Su;`RG~ij2c`O^7>M-} zVJ~apv}89XaIC?nC$5f?$3pt8q-T%0)qEH6d(c~r77IAv5k<`W9COZDlaVhJTZk6u zXrgZJ`3n>QHfK7L`|$AU%!nhUsDvbHTR#oHzpEftvye%Ww2zuuZN)f8^+Oe=i<&X~ z*{P&dTiBj`iCOJA0Mnq1PY~gwyk%M!ZyN26<9mRuKI?baKfcI(B3ED{H-mOFO8!&+ z2FsH43%mL+@g?|)%rL5+qH>Twe31za^le*KYS+hSI=rw?TO&q$Y_TWLsg$-jr=J9r zCAJnbk*_<|IUvthM$5|TJaL7(>B^hC0h<)+#87<#Q5?R`F9m{hN`jP_bd+r^1OQ7ZB90VKXFtu3VDXm?36y3LNX=cqA#%8Vl~ z_w%V@U)#p;RI8fHQ`LHBMv6y!4j>E+l5BsZk|vs5Q+*wbtbW!DE1c^ zi?W4ZJ?RXWo>3%jt<2m3LSYtV%R}vj6c!m2aA4?H+=KHf#~Lwq0P~pQS+? z`_ZjK>QphJWK|29a4ZW&k>MJdsRYO>f7^IySBWW6&3U?7JC{6vf%E4`L0*RIL-h3p zZfvkye6|3qZC*8P`{D$7@#~81u{jBP(=bUNmwTCXjsKLIR!{M)5?%gr zM3&g>)iG6xHibB)!PYXSrei0BYN{F~qJfuIVXCz7CdmG5*mass^TXSaNuPbB)ZT^~ zMF$02SMTLGN`m{KR3b&w7bnIJa(nylpa?cSX)>)HXDSi3{^VEZR%Ud8Fz<%JfXNMA zS+^eeWhkHEmS>GXl7TVln(_TQuflwcCw=Uxj;a>RN-EsFvthKTZiI11m)@xs^L#;LVHM)N;f-x=s6%~Z2UyT@r!fu_@{2ZHTb1- zM8E#+uj9qX91TB?B=``ulx_n@N5)1xgG@sIw8G%rb&|Q8!bTg^phUy4Ji0&capeY)1L%i@P1gvXi-9%$iMQCgMNn-!{`%w zZTSkIVz%keko1zyZ#TA73P=B9I!@UC96JWf5r2g&XgP5pQ55pkOe;EF`GUMSYs4l< zK#Mrc9{)qa!got7nsqb|_6_5ZzRv(50=n&3;L}w3t=D!&inp%*#p3sKGNtZSzErOf zXbNk(+U+K>f2eoiRrbKA|~6$KX69<*)9^p2V_hqAaOym6V-qhgdphJUY8mHiEA=I(~LxkY*P;dj3a zJElQy$3FZ#90VOWBO4tjTGg-tMXeA~Wxc%6yN~Mhi{Pf0p@ol|BdVRoiVmU+p|OI= zb3vS6a3{1Z3oBW=ygc?1C~ui}q*N6PSWWglC@>RD3%%E!D(^WExxGSAK%LyH4Wx*) zg(-RE`FPA-;Hsl)YDUSB$K-MH{owStZt3p+)-FpaSuUz_n`ea%6b)Kbuq&WkctJw` z)zcFzYFO|<9w1}U?P_X06@PfT0(DdXLz`X(Eflp+fUvtx9vnv9(!1al)_JBxa>yLY0!eJGyF*l(0RtPz@U{=;q;5k=MTB z?BTQ;Ehg1BsVCWAN+J&L7TNm+uBbLj6BS82#;Ky&rtQkcdq132ZQrxjgku8w_^+S6 z4;^gxmeGBUrLQZ5W(a+dTIk7Fa*+dKdrQ4s;KLD=>#1P;hlJGBLXgFdQX4>dw}Tx= zW9mF%w6QcK-mT$DL4o!|d&?-M5QlWX72flpHSls2T7q7}l{Gzhz3EF`GXETFF_9($ zov77T#_eB=I#_P%KWW{g4E$!AWkJ_m)W%CTja3|INpq^}{#w8D`xer9GCucwc#_@h z=gVyOisyU)6~b82B9qdt)hXrULv@i(b<5X??Pq4nTH7P=6V0;5xtCT4qDp)jFXt_& z9%NF|nC5A_2r_MZMBwf$4{HmH69=;!xa?r**G?)kueeByh@)Sntt^9dK7RF8pEwJ% z7y_C4fPsCZ8+$-v&c_?oqO}8X=$njTpO zk`g2sJz9bp@5J)S+vnU6{&Xjj&kjFPb+CzpnThY}lVD!8pav258Y&sBvqUq8Q%Pbq zg48{d`&Ntlw^v6%Ly_=`xruIpDm3pVkT7SYdN>+epN_Hr)Gf?eDSRj?p|<*l7GU$( z1_5^tq8=^Ezp-Mp^A&YiP*(03k36az0^~{!$4fux^;a`4lDKqXeV0eMK>s}61gLG- zosv|DXjo1^U}Om9Io|Q@>0)Wax{z|yt#-^ZR_X1~ z(0PqF+Wr=cIw{zlKy1TBuFC>rqgnR%>w^xU+JokQEE`3m{nCsrK3dqSIWGW;K<^wo2Q@yxMI24$pdHH?Pr?(rp zN6Iey=gKP{(|(}q$og=$^;yW z-oW%ErDBz8q)T)5hkGwtv8tk+((8=zh}6X${+CkDPC}cNWcFysFrbpWc~=)Lupz-&8-aGlwfvNH`&r5NB#0;}cq} zb?E*#sXxx|jaRqIO_P2LN}fFMx2GF?LI3>;x<$e8Z@A3=xp(~EbHIH@vfBi&hV7|l zpb+wQ5l3imJ*3V_BWBvd($oWmdS|1B)TWu?x9fnIWDe@K7ZBo7u^$9TJI`%2K_W!i zK$Bs9>lMqE&~rMyTw2D@c)_C4_Yy7{a$g^zGZ|?7TcnfU&)*qz!n>x$%uV=I$RL^m zDXBabKCSPE@w4l9rbb7#2Fh*N$(i}+-=6zg5j;9XUyrc^pT}LRzB)`L?xR-;LcFAh zX3=V}fzw>q*AfWz8WzUtlpZwtO=imij z&$eq~W%AxO9zEJW5m8rGri6>H)1a*u8>}p_Nav+LsxPKb(U_3Ne~}bJB6nT7)t;miYM!4!ZeDGMgVPD!)~x<G#e=;uKU@aIDYBZuwKVwF|y*_G~eJ66CTT8*{TqvqgKl@G)gOHM2&WqmONafWGL@Y4l z1;BdKO+Nuui#?t%CfN|Z!-a-La^UpB_O_NsScC#TU2~ks_upPC-NvXMf5Ni9JeX%% zWK=TnrgxF`E%%FW$Aj<$Jm+frU6-7(o4ppUUhbq(_Owj*cS9X8x$eBSqPz>7TE>lj zq@iq04p~Q&owZPi-_}*q%CLc-U!8J;-+K$&PA*NC^+tzp8?4Os(7WCq2?4{O9nx#0 zr5wgvVLuii2c5hp%55yl>GOM%zvw-zsKVfLcloODFKB zW%meI@$Ut`p7p`v$Cc-dpG>i4g4Ue`r=NPW_a&cKrCU*;oU*dz=pJRC%q*JbV&7`c zuYIEpYS88_8!Xl_&3uf2-B9pex?heFP|kmUlnP%t01rvkMW{lW0S+^~EJ+H7y$cA{ zOxQfEd?zC#!&JyQKg7~V4?hKfVU&fO5l0Vig6U;sd*thh+vi># zWI}1jE=@nLSrE6DjB({;2e@*(C;rhF<8^Rxq;bHB{O}gB}`KIP5 z=V^nb6VEAL3dIxg=ECc>Rhztgujq0aRc7#GqwmaRpJM%OlDyL!jAj_*Ne^u5cK4a# z2gEy7cTb*}wcA%exVaE%&s}qJ{9@;bV?SM+2dYfXOn2GY8NsPB2tC9$^y%h-Q5?Kx zL&O#9%(8iijqfB_{MUvqsKmLsxwX}sj+Mp&XXI>!rvklcc(#{8Yjg80t+PDC@H~{% zrgwj#q5a_JNc&#%5;awX1lwuslFu1cMA0DA18V2Q(x@eTp5d@GK3^)NX=AU*Ol?VG zg@lZiqwTsHffGMJa=zxk9)}EQhJAhZ<8JO}$%`J)Y90?5M%tdN7-rjcH8{kLYFUVcfb}Yo&sW>o*_qV1JPqjum9un9O+-W;Y}U}k#3ZEG$?}Z^ z6ts(E$@V@bCaJL536j%Damrrp7;wq3kpBx{SoCn?ArNXA-B7E}k^oDa+ex0E5VLa+ zWAFI+^McE+Jhp)0G8CTUn0Tg)!p2sw>E^FU?W;soNcplq|Gd05jeHc+_4S-(((0R} zy2%$kXam(}-Wh?*kNpZd&5s98Ib)gvBL#x+oD1I{fe2d(O4(I4W;)E>9>j%E$aq)} z{7WKicD`hPVR&j8YZ_a=Y<-xGEj{K~W(+IFDcaG}%YT0N%BJyIbu|`1C6CFca@PK0 z;5@6m^TTy_@Vxd!%X`+jR(TgU0I$#p+E7=>xfyvM-R{yZJzrYH!WSRz6zFHaNtCiI zrAyEb|GUw1Xm{4qkT{BS^RnT3veTQ!*e%Sj8`hRV=4L?A!-87?qZBh%0khjzx3IcU zs$1=yayRT)9%Z0%OI^>VM~eoIKcz-eYIVYSPxK;yTXk4$SB)Q(NR0X^VAC${UR)mq zoO5cUg(d|pu!n6B7XPZM8g4AnM8TD$cP@Rj z4*DJ8Kbag#-5UWBJ0Dcu*oSkAD=f4~uCpyo`@8ogfwsk%>DkF6Z{Q)xP?bfr69tTVZ8&`sng39_&z(9W-MWfJuB&J z>HG?fXE;>bLhGQJucej5J%S5%*smFo8c&V$YP#52>J~5nRY#N-Y%pcaEIG?Bo?S#P9(K5uvHG+^zEtCEBD0_V-eWU`C z;kagcxe2<=&fRa%U#YiY&)8Dj^`c!0Gxk^>_z|$T zoLBezy~L(-nmlYopM>Ck^8J|quzYMQ@&ZVX5rKB)=%RjdF4n2!CwZyA?e?==G`o2i zt6vz!x27FwY>qY?)NXE4Q&J07mJeFLRF+1l<9Bq2OtKaYN|e7XZYwEQZe$AosXWOF z6QvzHK3VyEr8OzF%E@n?tkF4tmy=zvSy4CAIa;7DkV3|CG3oZs+^3jMUT@mt?fZev}k|c>w3*{s;!wiIL@%zu6X{)H$>20L7f-=5_F=$ zS5~5hA$Z5Cd0`}Is(_kmTGk`w(_msKp;3G)n%%#};a7)i00KX1CTUuIkH_32=9Hva zzAdYIE3p!DaqQRb!DwU9N_;!~Y-fF@J!soXd^?541IY;7br+>H+YetFhlh`K`!bi^ z@uO}o(ubLG?2*i{jjp1uzU#nQANd{Iwla?h0uviUFsylJZxS}{tjNtqTn5?C7c^Im zmeOu2{R&Di5eO2|KkDBMGc0-dL|3G>w+{PB01&$h*P>D>nBmkPCKU(^{k7OMLs_ z&f7vROn-S}*du1(Fu;HR$Ge>W{zmHm4X+UFDfVqbCUeDNQc%$S#E1bb&!HRgdOKi>B!SkSrS%*}4?4 z@mx<&hoj?_5Pk4yEp2VtybQlW+CH&&9}R*$`10=z=v4Psrcgd*)_4&^c0ep|VML53 z_u`Z&jS?hcmCz!_>vz#&ACUcImr6SU%u1TqCAU%29#>i`4IK7g?Zcyy@W1ueETt`z zjI8l}17g0Vf|R*3K+dI*YfroiMM*^&%%ZKroG?w0omatw?utXSQwqH<2Q4YMl_T;* z=iaWVmH&!)bY-)#AC+mRn4V-WkG&BXa2uq(Ub`j zVQuLz)J~FI_;yq(UNn$`M@AibqR@U3%31$AOlWIrcTqdG`poPyH`cPWu47D`IdKiW zXv^Sb^)Z&Yf+c9Bz@|6tEOeq09-U_#Y}w>iTA_FN`GS+D97DadF7)NtUorrfAiSZP zLK>M?DWj(Cs%OhL(f}pC;HlGjqBk8ti6G%Wh(b*ewQYkEEfAGz1@e&)p~QpyY%NX^ z2C>3kD+PJ>p!FJ?0~!E&Wej<_xxAEDEf_d}|3^=j)z$8oEvjh6dO7!!wpiC8adl@X zuWpQh2_1h8=k#?@b`mDe625Pf1C=r?7%g0JdSFl1wXxA6g&LC$hjwB#1^ZLwVf;ci zprKS6;eNp;a3_oC)N;~2_sIPG+$r*$e;Sz_~gn#z0iB{{5k!3M}kD&71L@()t3 zm}r*2w4%3k#p6~>03tj8fHE^;sv+O^a}q;`}iMdMrlm8qZ|D|s}LkG5}Z1P`v!)R`c zJt#RIrmMlpi^ScC-o@FZv!pjD(evk1eE5%^hf8L$PFISO)GK=(20xr_?0S3rKv(P# zN3BrJL!xcIw{EmxJ9}$*org4e+f^tSDYcmbN?R&EJYZL7Qob>Jkt3YG)uYoZbZQ=c zpZn$M2LJWtk?S>O8pb-Yv9S^J53YK;U*>NO>^&`*BGNJ#5~RI|niDFkA?4l5{ZIS;#TPj*ozkARgbo7A=CBP=ZlyW8S zy?N{>{Ls!1JR*>?!9y)D1XP9-l=$u8>8t84efT;Vg9MX#ymOBwd;xIi@GTL*!J#j! z4Q6?ea5CP#tWHZnbsr%?2hh6yuqQ$AX==oQPe03XLd&5~kP9>0lq(9T@Yf6{ewpOt zM~>c%BuondL2s0xn6l03qI=}B9nrhW8jENz)1yl z`zjFK9o3WV*ar>ET9|ttxq5$?7^Y#paAeqXR<9t6MNi=yz9IrL-!NhXPC5uFH^31p zD@SAF*fqK@#>&48<9KP#`s@{EN%`!D`1t2;X8cllCh`|A{sM>LBJ`H&h-U+{j0M6qg(&c-qC;1v=)835IaNT$j|^F#W*&FJ~&4`uC#thO%7HbO<^P*y1_u! z+DX|&R;at=exF##iPM{bj%!mbW1p{bu2L@j8pE`m5j-vTbL_0oy16$m#owpxjB~@& zRnF^n1EN-N4u@<+iM`P_^3@It91klR#Feuq)vWNYYy0Z3!6 zg_J&L^e$m_98CRE@f>hP325HDzMux|MvE@@s1SxUc+79#y#6LZ%YF^S4GaOf6tVqM z%21fW-)Le9H;iq-5u21siujKCYSJ>q^-ps^>lT}REzNXxNLgTov7*Bz=4sD-`qI6p zQ?|F@6Lu%tLhB;BkE$|1^@a&vA&D{jCIt?JQd;_FPb{6j=D7m%Bm6++h?(bJhFbRK zT(FR-MGld38=~1*n!;>~O_93862?ZPj)W?kQOOchWK@>VPk^?qCT}-zTPIac-^eJD zw%rWqpKJ*|d$=XW>Y(DADhetk@%bEl$bu9YpXIZhgc*}ejCWgqBWZr&eOOlj#gRSe zy2J19@3w^2YjjyknO8)CEDSn1h+oK|~eeCNBXx2|q8{w*UKmHRt6XsvUg417Uw%uK%5o@ULwI zAI`^oT{b0`5WjtA}bMfNEAZ*~>Us11k}+BCMq$Sw=GY*N(zbRuJZo1*mc5a-~G!ilFB zVy*lGf$U5&14D}d2gbYXm!ry!BSaLg!ls>{NC*UpyykGL#Thh?qPKI9p~dv9BL7U% z-)nwsn)xVwLI2zK!auyae=#Edar57+ZNs@U1LCZIaF3o&6wJWCt?M`*d#(>o@6X=~ z@*ns0Zok{pNo%Tly1NNCIP&McPqr_f1+x5$G(yN-r#qK7J_=^%P%c5EA+qg-n6Cvk z7-|x25MH(=1XhodTrdvqZE9%z@=w_t+}M~rovnD_4rIe?y-7DkcH7Z^zPG3dE{Fr_ ziXBt-<~LhcsHpBOwI%7NqoNrUjxkWKHYn6LcR|Oom0_P~gUGk9TIra`C{pg0@(Q@F z(0-w3=PAe369R6zB=uKkYhFGLFtSw-9pd|!0C!UghgfWS~()T!@AaXEK@cH znjXac-mdDT4tN8~kqeri#L$aV$14H@mome;ULE0zh(|JAxCrNV0h0w5GQ$LAoFdeo zeq)~9rgYQOJNJX&G)LWN%WtWQ9o>FHJ;kl6?)G@TQxdJy&$rdyaXpz{15OB0w_N}w z#^;pb#Sp2xy?FsQ&wNB)e4sU`b=0GNzS`0zclc!9qdC|Q@zSF%IrGSa$aknJqSvi*`n=K(2vYoq zeRr@5=g+^U`PTyCT(24?;b3ZX_9-5TmU;!L`;i*NDt{uAal0S3yXtu3+!Or~`AK(? zM{%q#5;cl}5ROiXjp_Q6JLT7PqHpLh2_+g2P+}VAx(HG`N2Rv>rQ9kH#gr=8&>AB_ z;VZlW++;|M-&SsUwL3fCju5Xvy^lAvGfmiSOEXERPVjeTwtp7QeNjRcCK?G@=Pe!m zE=X6;ieF&v-@~)*>qspT(>SeB0FEbI_D@g>ThtB>X-p z)dh3VsDVI?a4k9yrCJACyK>yfq0(xZ*J4xnVDPJlpiR`Ko{aOAdXasr<`WD$AQ9VN)5mWZm)pNNyIh?`iZoN~1_kc91zF#FK_P;E{J;Cd) zN-5pnzuHCU(*YbFsdhAd&$&plpyH8y8~2?B7h^k;sUwC>gZBV$FPJAk!N%q7J=1yv z`V4f}0?J%R&ni9;Kl*zk=qd;)BG3d0<3v&FdK-r_m>eStMI)V)L`k^O-ikns%5RRq z>E)AEiJNU@c;Z*)De}J108bAdm_Gg*sRr)L>?e!}1?}976I1d(Hk79)WHo9QOW(KP zPPGE!tUd$MjZD{PscJ*`78@T9u(w-6*NlQ^>!h7B_bjJ;){bqTM-R+b}GZ7pc z?Hi?isWVaBpRh!iC3scd(G4TOsW{8noY^Q9-Poa0bCpOzh{-G}dKAoU{|GORRMau4 zv5egsj8-Ku>pc^Tey2s@B~gPD>K zK>!S4vpLMW55CuY#XnTAbUnh}1_-5va$^-sw;L`xr^=^Q7mTo!X$CIw`fT4PPKHOT z$n+Lui>IN(wmLB6#3Ge6+XCp)mc1(n5B$YV1RwgX>`a28RWs#|t&}wlY)t2Fa>n4|dqHUNBBf$IWBEKU;Hg zbf3Yhj7cx~YHOEbTWv-9QZr~hSdn?wQzIXLeq6~_nY)*jQ&Zzi?WXB>fx~pt6GllPaE^1G9298BKJ@& z^Sy0CJ_B;4j}2znLk%?buEDCE3>V1vAi!@~eZw%CH^!#WxKvV{jAoCQZ7(qjy~F+N z+5Bh$gF_e^%Qq&@vdZm7k#Wt){Z=+o@10`MPR%_ZyApubs%o+*3gpl_%2G9uh!azO z;0`ik`;A|Q#dQ}Ggr0s@}$y@f^A9=>+vvBhO*z6@znI=?((V1er}JxO|TeX-mR>k z;eRQMw6X6VDcO6nqJnB5c)k77W>H+R7A+~; zm;Z8A;ZXPx&Fjq2ZSwV1-yb;K*HD1HJZ<*JUGrzT(Jz=8q?f8>c~1D9g|1MWETzn6 zLEnfS*C;%%WCBebHyEZ=(Q}vd(DTy z@2I}#*$4_+4amsM52f8z;yZ-!`6X9spz{mje7&$1J>zYvnYR>Xi&lO#*fmF$LV%}p#yA#iCAsQ~xOVtxiP}nMrj^qEM2OUu zo`L{$#~iGuWH<1&kyN)nD8)n0BQ{1$^-nb2chcPf&t3TYWkmW){>^OG>zQW@%bCD$ zy*Lj(gX|wtNld^#;%Gtr2K&0H$MBk0mXWb#5o^yt-VFf13$w~{ikz(i6Iu84fMq&K{NXeDMYHjq<$|p^Xh)X( zZqnSx?EdRxu&m6M+Q_4zW+0#SNmuI)r^ksOFW+$4izeSf4VXp05c)@X|4P8ze&{C< zWOU~cy#b6mRZmZ^7ih9*^aEQ%JqMy~5ALj%v7{vM*1w48f01PVd3DtR8Y_J#e9g{L zH(y^@4S9x#e2agq>Cc7cZo0@~g>03K71BhlUJLZ-Ts=|$=sBUAhVdLV7vnsfuN}#^ z=X~dl>W6qSD40%QigXf_me%JI*FEMBAd=)hyIP$W6T1@_X;NjM3+Cnej~2hHKY;0@ z!FED~?tKC*mf)ynVG&=onGpN3Bfa4Y%+1@pSh!rP!R_ z!4n>6B3#Q-aWuG5gw+`iZe8!%umtVQuz(SaU;UMmfqPrhi|O7LVDi4-Ryk{T1@J2> z0`d?RHE>} zwszvut3t!`P@z}*mpKnF^^$O;w9qOb=vVA5G-0G9?MOx_m{GDVtoXJ&S-OoieYSw@ zOnV?8Z?^X&Cy?nCt-c>9Vu_TGeV$Mx3YDpMXAQUl6^b~sI!2QU@_f58RB**ETNT)M zPxoJ|Wf20J8}qmkP9v6Z>UsLtd^CBEdmV)4@$}gx8X8g#lY|n~hEc5PR$#K&Y!g5x z07CG6{WA(q5#ux=eFjO{-*R>{LC{N_L9F|eH#Hoa-4}ayEs?O%o{dUj^*6`*m-@58 zT!Ee6i^&z}mzxgI87;|wjnh@tVd7n;!>UvJPQ!SH&d_Q02jCRkMg zFQU9;GG|7waEaZ!O1`AIJ`TSKKiJa00cK{EfNQB&)=cvYn!+0fAK?;9=Cx5&AZrQ* ziWaQ1_TkE!1sj;=?A3adw)vMe|0pyMrI*<3Pu0`X0+D)v`!F*rn0KNU?mboKDN8Oi zU0*?%%4=z9_0g!5@bu`oq~$vXfWJV^zVD_MRDP-X3>A}}=nZvTV#Thp73@j`4;Yq` zeowmhc3U!fbb^a2LoS4Ym6&tnZNt4y3X9zmzS`g>&Mg{LTZ`yzVb&Va-=+YOAg*E) z!t@J}FOw3r3W<&)!+U-uWQgz;{-L|3rD;n)H|s$wWY+1rd6N83PlpJX0@9lK0%%dP z`4P8k0*+t*2S_=SfztXl88Bf!sctAg^IE+(F3PIvrjjpN_ z^!)2nVBy60EN0M;`e$(Zza1O=_o6L-n)pxR-O{$ny*9~0RGXkJ#BM*F9<+Q*2}Q7| z?O!ci^s#=$@p9_4$^(k#Ut^fD2ETp|s%K&d&X;$dzFtYFT^#BsAhR5u+yhj(e)+Ny zce^emwR^i?{%h3Ug#bNmAUHqq<3|V2ElP=!zE{E19FCxW%m^1qYd1c={~Y>+{jYl- z=dV!+S`1`g><=vHr;iCaMe=A@W&V?NX6JR=qi;| zf_VScU$sP97=!`Ma$qCqeqWZxQ7d?jYYVr8eC|Kn7dieiU2*9PN8v(un$0*G*!>88 zg%P-2TNy2&((!Bfr1;8kg_UOiAF_nYZL6&^)+`vRKP+lH45q`Orf%xd34;!e%gf6v z6IDf}jbsyZe|!~4Afv;f?Ws}OY94dCsTmoiCIWZz!B?}I?)*Q53k$s1dfpe+p<4b0 zWf!JK-&g^ zH1Ec5i~SYOsuf6oj6kDb-y;zydB@sYH>B+Ra;R&lfT@=y_;|R$z;xiw3mY38N(eqw zyO<#XW!)!d7zNZlrt8y3el-uu==G}?n>Vbzqp~S_00$W$_Nw&~Ak^)JSnK15GVvKqLu@lwV& z>kAD#n@gyAYIb-$5*PE7Be{5WYNAHkd`1u`E-;W6IeQcIDUC~Vjvl23fI*doSGdvv zF!jD`_A&3>kE&DsG?qGV1@)ql50HhOMHKhxvJp??f(~c6ecKy0W!TEY2)vx=mX8W`c)*bZVva$rv^R{K+ z?(7L&s~7`(;QM-wOXpCO=8iAVssZw3b}gXUz|;V;h*9m`iAv9soCeuG@?$JaF!}lW zz1-81^@9)2b6YTuHJ+7+AG}f5k-(y{9ul2)3n#E&*}$h*55nA+KYoAzAmH8$F(x!_ z3sSu^f%8iB2v9*j`Uqefe2K-_Q6@2Q@wDM0V_dp{o?#`1c0VC}Vi~DMJ4R6jT(LyZ zfFO-o$+F^&msleP53%z-6IfgP!x@u-f6HMm6^z5f9~~XCYrw3U$XkYBrjyjz0ac^C zjiAaGYlqX_dz5yO|8JQ6(hTaqXohcOhY)6@Li$fX|EkRLOXy`vu%bKqnqird4#>Iv zARo!QFLagTy<>ZARvmkjrA5S6#!E~U;?mOv4BS-{X@EcaTI2kEz-BjK;mV%SR5b7z z{V=drJsN0LwQ^3Qg;|arD5tJP(-eW(zE*M-Z)poqRfnc?;YoCilLYsU zT4Wh_x(*95*Gqflkexwx5ZqsH%WsnXgK6M%&hE?27@+2$?(^WDVC)(u$l~&1+1>(XeX-+2>FfYKx+BS91a^QYXpE7#jUym6?{wW@v zvv2>t6Ks36DY`d;;J!3F2d3@(`t?f;e6PlL{fx4;{$!J=YdpqTV67_ne2RDRYhk)( z!9BL%AP6*^;$>j?HvP0MV{~Q1Jyq_>KxXt&ZT{d;j)mB`xJdB3bg+Nn0H}ZQ-yL|pnt=nMFsaEvd*slsO&PI?=rS5xzn^;<6U_li2cUxtZX-R`91!qy$A+w6c~NE z<`C1kpXY>xCe_CWJQxXo(BVA9aNBV#Z8rmH`NpVm-w78%)B_Dz?FVru%0LEcBIm+O z^dN?@{A!1T@KvK-AC=rsUiXr#TvW8_;cp~Qz}A>woiK~_E&ihzF?aw3y2tbs{_*k0 z9SvXPHJN_A!rTxx4Y^T0odKaFbFhL3^cN)0l{XwhPSbw4D@?xkAr0k-|Ha#TfHl#5 z{i3KKR=YQ@!-}9aOoO^j3XR;@m*|TTwwbx$jw|*;u-R;(|BwvRzrFdSbOBi-5 zTG8Y6S2Jgy@3y}^uR9Ljp757Q!eY`rD04i?Yc(SUW|r%VK5&yHqvF2$w)~mR6_7=!{*R zUU+WTn3ZzLNoAlg3yG^4jQ7X_qC@)`mH8CH@qccM>ZQ%C<{S~yNLrpvxbO#C#cfy; zuqc67Qp&4!?+E6xL(!Ks?fUcYz{mqXCv>#yZY4425}?ij&6TOH&ulGs*4{8*$ALJ? z=a|2hFeSNN2lnccrE_zTy+9KT`=#>XA)}RG-R|9u>sSrb)Ff#H&YT~^AD-s1i@Khx z$?0UV`7|-({>-lg^~1m_F>o!8%wLkr;@x_PG0+JX3(au!;%$$ zMRouUY2WQa!SP8^HbeO2;||B^cI~#soTJY3>diy~Yx(8D`LTdlb#*}YZ8zLdooPz*soX8js6@KTTVi7M<2IM&_n8RDpIaDn z?Jt4_Ze;-k%3k4pi>KGZt~gy{|Md&Q_DDnHR<<6duP8ks%>vEH6yYlAc0kj(w-U0y zy+Ry3Xo&SJ;rGf}8NmKIeKy@c@Am1rDf18Tp6GF%)NF+wI&i#24(6X!ZRiVA4QHx(o;OFm$ltjueGM~vUMrA)VX zNm}2tvg53acV&X@L_5>s9=z!&x7bGA2>gD!eOPXS7XG=ISTt7l48BM@T&1?b>vIpi zzX^4cmwH}aUf#&IFRwS=v2o@n+CucM@`8m4xt+X< zhD`_^S~I5)L6q4z2_n>sMv*@OS-LNT^%{xD`PdK37`{>qMXByW&@~!nM0v3^gJvW8 zQ9gNhjxEb{3jCW-#p@M?_(Wg0hE}v32#D`ZD@|T~L-I~8eka?IuX*^dS2}IqayFQr&eBf()Eo_iAz~Fg-t?b4QB7wmZ@>AlOk<9`JaP5* z2@s(O=A(8B#FXr`UecB69+8!!337n1fR}VTEV+=QERXE4ci-B``>xE#ig|$@PhjY3 z@S@Oy73a8*E_#+f4SEe<8<}ihaA7~Tv%+I{!!1&>NiRM<;yRACSvP*>W(HVYJcCL^ug|On&JSq43jKTL`N1HL!F2tcPWPLx zs)LGroZy-54d^iH^gJ=j+;1r?c?5bLp`MtP%*KTA`C(gYSO;?rLERKw*l%x()iGs2 zwI+Q)c?~GnThb_8`i61FFdz%td#8@~^mjSywgA7o*1@JAAv^PFWoIxJrQAcq?qs1wH;-gR-jFF5u#REm|I zj7j-6Ff;Bwykal-@%#~%4+|>`&Ij@aHZDneHP1ZHR^eW@U^#|;ag{c>_ub+N_IvWY zjXEnOQ)E2F#`(Ea8AU^OCf={N zOPc_e=H3r|WBSoVFNB`_($g;YLp6({0LjIKu4tXRXdncZ%>Tm6IR5_sm}q458(Gn# zv6WZ;_v4R0v+=D3%B^lm3d(e#yc~0DK1K0e_3?fXw*S$ZQACs1iwa0Rw(R>m{NvD* zMufBgehM?5JFewPv}s)1I&jr~kV_XHdU0uvGDHa3)^7kliv~viLW!c2>%P1Bddjb^ zZK3IFlt=Yxgg5A;%J2;H&sC}6JLHi^!?ay4mEQW-1mvsv2vL_FNPy+7WA~w6wD`+y-sIUE&Cg-)7_v*xzUSLz;|s`EV&egcBsOyafMj^rrXdu=LruWHx8 z(G>d*AI$uen~F)TOkWYp>UWp!V2kcW;gX%!nQK-2T?K?o=`uZ?0*)cx8^WYb8nRMrE9_dCX@3z4V@Xe>P}5 z!&EScix{Dt!#Hx6JP^eU3#ox6m%gv+`=-H$5))t^Z^8=n=( zhk|L?b4fjS=zkaau+AY-1BG)5SktxUa_HxZTH&Gbz6nUtqAmNU949zWi@d#3GAET3 z;}$BZXKn15){|zU+{V{cUm(H3Rl~uWA9PpgJ!(24C}gz0$pkx>|>QINqBOB9a zOJB}qdmz<38;$=k6g5Y<;nR>FQ!!4c0rLwr%p3LLuq5CaaFN>|Z^M0gkhP=^tncxV(8 z%jWsnebd9{ch)FvHSltNiekl7;wbv$vg~J%{Jx@JQZO6EAL~cbb8d^x5laT&aD-Au zuWu9H9b5D#++)|?3n^Uis502G6BIK2;)ZZOFSOF}bD-}z029eTm!86K#LDgQ%Tavq ze+n;}{3!F{!wcTlZc7u6F%QzUT_cU9%$E#wE1x z_BXv%$LxGAafsB-)6XMMC(gP;u-Kannx$~C65vGBJffX`%X)qlqgt7{AUE9OlCYT6 z^y9QXV%KVI@9=A%qs*c+ud>sqcwOBW*y(fLUQe;N`eU?N1BWCy`#g2o^r~Qoa#dDv zuP@TJw)KQuY{JvPRSPxmo%+`CjolW`@Rtxz@Evf-qQ*?;lF%$c@VL{p!tptA3QyJqd@m3S034n%c$7W1jh_Pt*0CbxjYj<~=lV_L@75)9RhWc6B*@9o60goxmf8vH@yM5! zDV%#7bO_fX@A~RAuW^0Ti0kk7dXQJ}C6m{8Ob}hc1dD|>N|x1xQBZG5WvZ9xQ-Y{G z|1Db)#WPzzNp5sIi#y922yH+daAjk?#E3EpOa&5A-BS7ZZ*prFPJUeF>AjZyz%t=G z8!jgz57%}Hx30?YwijUdO<6$bnDvqzpRVT9T|=pxo2qyjG9;DI_JM+gl|pU_ON&#Z zzlf$^s=9j_>|N0|&1V4%O;UF6>C>mSX@?VfGQwPQA!D<2dpFun`sh>}@h+;et+Qas z2S;goU#7`jRCF62e+GQDq%!$E^Q$_Ii`U*Lc4@0L+Pgm&^r6gYWLi5zruNw4DuW*H z$_YFP(So^=Wq`Ok<9?aODD<8>hnVNfv*X_~`EGV$@jj7PM_c>a{FrgS+K2HKFQ+a< zbh!jZKQl0VOxk?0f28wP#~BjJRvT9RXB9vGqYlH>R>ip0jkZuW-%!&jN5;jvQc)z$0HOW>ec|v3|>8+z2%b5n#RfTLb`CWlPI;YRkm3J-P>vqHWdYT$U zi@a#^BnGC60OyQ75Ck-b3o;AmFOtQ=Fwt&u){YAtC3~W_H3s zr0We~sjN$gHzKS_iH<=A(2}9Y68StaS}`z>;dzk-uiD=-^tAmF@^xZ7$1l?(xJ@2H z@7fOfflGhYLK#`TuXZ`49Tqh|mI`1JmfPMIgo)6Wrelw`#S~eSbbox-5XHfAE?70R zVOu{hE*0vHT(o8$e}ocvpLS3L^X6VvKF#FasszRnbjEq!akPeCN5&4H`!kX;cPtx>g+A~g&vWI$3gQP- zdEjKthWt_eNWW;t+j*EQ4cULT|Ub@#Ch ztsuMj%;fUt?fE1=)FR=>iTA+UP8HyFosiw&SBH;VUo)yd%+t`r1D`UzLEQDSbB8nv zd`_H?g?W`yWQPFS|2qT6djR*GM9$!-EjYIof8^I;g5AoHc}Kyitv3P!Z>;P7bY_vt z?e&!%bNcGl#`M_lX6jt%zh)v*=g?GQv%M+N%c$#?zTfc4C_4Z-6PRRGenfgu`8sHa z51a*+ySD6gj()%N^>>aQWq@vVXl4SJtK$?h&%)dCyn};zvjYpRW#SO=6J^CVsG-Gs zNr|f%OmfZV`iIvyWelk^9eO$b$hpy^!-dK#c~dR*m2@Jp4EbmqUd)u6=Y|ZlAbZKx zZ>5qcbNkLodz$@L#^Z>Oo>0BA?zwCqJbFh`vQ2{hkJ%D*a;C=f5wRj?^=-y1^Mfih zhA?<%D6wOSTHN7ZP<6bPLp#IuzWztKlGiD52|#hU5;7Xut$)O8ED@bUn0Q#SzGE7e zqHRYM(XDgHXO7p_`QES;A(P6Lyn>Yo6Vj2JnsBVd<-0tyO2>j1BcCv~3jP6X00ZWg z`v?Cv+x{0EceQ)Wuk2yD*A9uV#{40Q?{+!J`c%<38!w_vDQdW>jioI@YF>5npAHIG zt%Hx9g%B{HnlN2x;7{QlSmAy6?oT~Ta@9IsrkA6Q;6fOF)zAD3jk{P7=K6Am*HwON zsZ{7bt=j&0S#-8G!bK=oN>%-J)PNwb(l&|w(U%@r25^s&stCk@ zrVvZ50W;25Yg8OZDpY!3|0qKmm=~s(56J#??3vGtTYZ}@(H{d%jgNy zeMeX%j(OIvI)n&q_)m~{)ny8#RGi8;g3z8Gm z?bf#ll$u>dJ<9=@*V8ThWcHe7X@Wd?)Ts}XfRVoMKSZjc6aDs2C>N9oR33VTQMF(V zMhaTda@q-T$#+M#zN~U`u`VqI=Di=xE<7mh`WMM`InHSv4pb}@*HK09#2+F$o2ge!M4$y_*{+rhwLltGyWz7#q$5ob`?=hC=RGuX=wOuYTy;V2KBs(D z0e}Fa-|Y+wJ15GPkhe7dO}ctZ_p9)RoCbR0gT}_DOmnnfylLxpI{(=A4FA+N z9=l7r2qEjQV)#0@V%uZ5!l|5OMTSc7IrB?%ekV2lfIwHNSN+!)8n}=*-AF!V>0~uu zc1}PMRon?qmDmw)1#?RV;LjKz#MwPnz8Y~ct)cCZBf-|kPSa}5f!P%P3pb{2tBxiW zI5w^OP=@g_S8DH<*b;OB3r)Ree(wa9Gnb$2W95Qc=Mz2gi!ww}EN=H9D`%_!wQbLa zOLLkwP@icnifz3nlW6oy8Z^Fx5+i7RJO~yG9D1S!FYYf5Rp7*@>tNZuVT`@{s8cYEFjTuKqANtXyYE3Yk+=y_?ni;bCwo4zA zM9@??srA>X(F?yWxRDdFgEMQ^t)pMc96C&w+`MStzf{4b^%|!R-t&Zxd#p#^InENw zq^7uko`owr`jX1Nd_uj0!c0f|)b}G2u*I3YrR#&6h9osVB+IG=ptrC9v}k#XR88MzKgM^$NAcuJxcvB?Ryucz6$g%8 z99o92!=abUhPS=n%#RXKcJ>t_k78sL8 z$*j$%?)z079bM<}CA!>bkBs3MhnjqdqgTaqe&`{^61f$UAA%EZ+!DCbp6|BZE!x9+ zyJ!FC_u5_Uvt_3N&UJQ;Y&ulJ!u!#m%8BAtcPtT8Y=&?zpq@%s_V7x||BkxZy8Ksr6Lf%G{&(cf)}{7; z9W%?D!10Gb<}b%A0nR4tZ?)os7mZE%@1y@Y8tU)D|ANo=zYtjX-vX}wAFuWwg@>uj zRpi#guZlv14?-}#V?VKx4Hz8}#P10PK2A^;q zkB*Eqzm#dyn{}p_g=HosE$xiV+%N#xB)aWk38^aag024+b=mx5$Fn)V(S)Z}&1C4l zRRKIE2yGzD1lL+%bL&I{kAT9$!d5a4%Ii?1UQ;@-&v696+nOiZeh!w{rh^-49e}A; zwB}Gp_w!R(jJvBVNDsScq{N>34ou%kOwZ94*OuQeB;>BiJw1AZ)Qmo%p{CYd`);4? z$t4M+(pQ}zg7qb$Yi+7U9WeJ@Jv92BTtn3W^7zLw{_w9~wI&HG0o{;+rtlIeRiw9Z zN&xNR)Bk33dja4mrNGw;7CW5T9Q6QSZ`*i7kcr2ll*6(#!VQ~z)z{m`YuYy!BFdD& z*Y9BEhJWsnk(AU4yJ}AjWJ!pw*XzW*{V3qP>1|#oqapbhp;RV|3Frsb#8Nvz z3~;7H>1~jP{L;-LP^VmzD&47;Xt&K9RtVJ?_qZtWO@H&DZ`G`oOPLR@&J7*kbN)oB z11azK?|X;#xIem7kD(7q0-CRdSlhg@L#JxZDML=7fCwwCY{XNo$fE6yd26bgk8bll zZt8-gUD=asx6TVCs3q+=uMGg4KX0GEeSxKXo=zc^y;s`j*a4zIA^_+G@M<;mzK#~( zG#ERA)BcC9wQKmlg{F`Y6CDtzZ#2bvNCnG zNX~YW?>o8Ie0=Qt%x8O}l4lRp;d0YI${GHS#x0U1y`#sEh|oU*NT*_7Je z>Gd3synGX?J@`&%mk>goLEElV)1G`U)z~!oL3}{U(Bt>e3E$n;<1wMc32O!KlN4E1u` zdXL#y+|2H2Io54_?ZJ@V(FD9_oC$FG77RR{wY1Gy6G=+Qy%lXbYjae?UfV!>q}d7M zHRL1yO26dpSE)+ISoAf_7PRHLthnDW>C1V1Yg+-{-y`>6DWPN#5CY0vwMlr?zd?B zF*JL$O{(I~tdCUOF4l6HqNeN6ahNa0>yVF(HFcS8nEyiO>x8&|0fOj8raa=j-clGC01}%3Pez8J^ER8o$(-?|ig{7u?)h%H;LXoBC`f6-8cdj;y>;t z%sPVPz3xkQ+3a!Zm?G=hRCb6!^_)@IU2Z$45k^n*Mc*tvK%I2l+s?@8&0!yz-Tsjh z@|Ot<@}Qno$k-WgkIgKy#kb`7@ic>pz{w8FI&2wt)dP+FB&%igEN{Ko_S*bBjP&YL zR?F7|)ItP_2Ms2X)af?5#hf-$AAKRgbx?PmM(t=OOs@J`zR)mCn`}XTqP8TN`C~=+ zJS$ww>&V3D((WCYLK51jD1lg#xfAo+L}y{qDFw#$`?s+X=ngt*ywxw|hsG#Vm}@2T z+CAS^y>`}r%fr5im?BrA$9Onn`=sIAE>z>q*y@v7TSCM!4xG>aP^}r;4sqwZ&sJPk zsoR<|xMV|bbif%RJH1Ww^I!$TtogL(@}SoAGJBQn>(mF&Av%xfh5TLz4tCX>mzKZOa@_)yy?S*naAQO-^0eMH*xL z?M`XN$-Q$*SHRFCh+{+iupQT=qUYb(k$ViIQAH0YbV%K!dZw>kkknvVn!8t$flXt2 z&CINVu8(wm{|`b9tK5k+8c77v^?uKA@Fln;s?v-uvsB#OYAui=VvfohEVKI&ss!Dk z&+C4!WF)x`T2D`O09QVLFS2Ifnqf@#O}=W@T`PYdwtmx?hm{Mbfil5K<*t=h8h$)m z3I<~c^;w1eszcvCM$*mo_7RKe1Z*2PKDGRon*+YQXol$0sd4&boD0`&p)83z8{N$F z3+$F|qZ%^BS0daimbo=VFKT5+r>jiCJmo)>(h73~$=dXst2Do|?J)T3VF`a-312*o3{`lcyuiJYVx z2WRxI<%Zd=^DJVYnje?DTP#X^IF<; zTrA45b0Tvlu?W12d3wXU{2|W$QRK|SUZEm@jLFnGgaGW$$X7-fSZOXnvtCL57>eDf zQ%+OZ4yk|VX~%M=8o@LVY>Ck3mj7wvVGt>(S#}p7+Z=Y9OAKq?*8d*v-m)zOa(n0i>tSy0*X|xG?dqJfHyX`Y(Obd8shE~5{EeK=9J!|by`sjw< zO3WfC*d=T=`lhX)@)TI?OdNiMN8kFqdvY&++zq0L7|oG%w-$(PN@>PFlo%P-ncB{# zYj&95x=Y5gu#~{piRq@E?`n2Nt7xZ3GwZ#+oxv0IG>22Ia`6&;j}lh`q{v5ch#Kqf z75S7aKGd%3SonF97EO0S8}b6@5nikJdRDMSxaz(ZO3xeY@zRrf2?~_>nZ%hhX&oJq zoMAl%t|>ety&d_hub-HBGrh+)&aHlBGbEJzD8tls<@ep<0HjxJ$U6E&kLCTu^dBO|TXpD(G;|82rMQ9QOSjH_0%LZ_K>|=flv2NYd!2CHfv!Vfd`s z^Ih)&fmMFg(tj(NAe%3kqj_7tfxIW23zME9EmeyW=HqsUD7J4?eKGq`>)l5y!9&lZ z+u#yTk4M>DWnAV@*il_-!RXQL?wWG0=Ry{p^dAl zrHAC#aFm<38-_cg?)!AF>tL~)lADV}Edz{0XbS;q%t{k=xFP)+Bka}SIl|M#CLY8Q zNa12{{St)kTtmP-F4FcoK42o3E0Mx=z$j3PyG(n)MRmbx1ayrO&YVR3Z1FFuK&R-Q_)=6pb{sSrRxrH)P>dY7rtHu+TSg8 z>PFuzroBr_?Bv{076+!9IjXL~MoKOvZ|MI=#EL}rDIuob`9CS1{~Ivo|5J2IGFcnO zbb)TCP4uJUcFY3%$s=x}Gp*(GK9Unzl%J)Il%2$Mh@)~Xm8UflHhio^s>b=A*Dm?{ z66cW{M1ixXN~BQfZVsRzA&KLLyi)K8qk{(}Ojo(LU1Mht=swISN;r~(H|bXBUvzmv z(O)lL3Vrhrl8ytLO0U_gvGKOXMC1eAyF*Hh32UWLIhIgVF@~FNh13hWUOfI%r_9{C z*UmuB#@8Yo9qr^||5fh7v5yS&z<@(YwzdHtc*aWZ6#3A*jT4MgG!EQLh7#xr>LuYV z8G}vcKyU3^ed_k#epGf=t|#84GPzycM8d{*TDiog0wniKIQHQl#6x!Pj~^1(5-wBw zJotS8Vi@MNi)jn90#CFg!TEaF%@@B9oZLN5bCRBZ+(jJD3L+DyE$%J1fDjb7SMeJg z&cT2A7}Pk##XVef0KD2g`!kD+i$Antpjxj-&^yYXpr22s^%+j}S*H&TZ?&6Y+cr6I zFDoQ=91<7wGFG9pGQSE6NFF(515Z;wor^Q^N0l~;VAci(y29;D?4Aurr3xWTNU_f> zOouz(IKA3MmP5Tg1HB9Zz0|^#>c|;O8hs9(A^?=g$t`7V?XLg7Rq)v!bXR62rxC#ifHdViW~o?G6&4WnlN z>9~d#ExH|cPQDBm1<4iN?urrNWh_>3ld3{CM_Z-%S{;IC41bh8HK}^+y4{vJWxVH& zjg+qE?z!L$N?}%>NyfDV?Md&u4u{=Fcc-G0oK;)0KY8;zuB{5}dYgrAw!oC;a*EoU zk}QL>N=&?tgq)SV1E|V9pUs|K@0p+gE?zV^>`uO~hUg*{kwiE2-FA0y2ECXzBq>B| zK&Nh9Mt+{9+GD}h#Lc1&B(EW1NvmlN#?>%#w8k{Q9(v#v35yKUeHE4!38PI`iy7sL zMg!YpA+%6freX(WccSt5kjJ#RXDvlM5_#$}*G{vzGOA z%jTK&rkS38#iW7XxRRyxUTe^mP$om?q@`R6E@h^cAiD#H$7}=`yRM%vGe`}p4?Q}2atw69 z`d{zOn>8&mSpv7;y>I)%4%;_JvfX7bf+F4*V`r;j|ASL_fT}xGK2Wsx#=hldz4>S%GL5lYqM?{5rAI(}=O~NDG++O$qNZ!nQ&vRdgD8 z6G2?(luvT>oL}|IMWS{PnVCV6v6bbu6L~FvMdyri3R8ype`eru@G@|=sguPf(3lFC zdn-?uFG&~{TV*bqPgHf<-Bv$^XkM>=N)wUSZg z!_XP!z}SwdSLf{{oHKSjNF4MW-{{+TFDM)5U6d(4NAcrw8IR?09-4j|CS1egLdP)H z+NR6f+V^)g0_cfa4Tsf74%5ASWO{VURbkq9`>I&gFpY|_{li{k1LxM4It;hBh+!!L z;tAv1iaeyMK8O3a8g@LPKKDHH+$(2qpluZhBE&@>Cq{JAEDfggmDhMrRD=ME*a4a1 zOmsH9H`YVCxO_$oZ-0`DV9CyeG}yL$kE|33BdmO>ei))`N{Z zj^!S5sbiIQDy6d{6tiL|_fB~O22xw?i#^bkC}End=3L~(6Q~g9L=Em03(coFTI&0V zrC$I)(^sjRD+&@Tp2n034Y+7hvh2_*NOjFF$*S};+w*-BH_zG?}T zzXw=>ZQFEZw-hSQYU*9@@L1EXH_<*}>diKM+(T}%yv=$S{ya;=*va?Q8?aiXLUf^} z^}VKFgpo-<{TkWAEvY*swWD=PC`1_*oDyQkv~r??3+N@-T^>V$^#1Hx!j;s&cKpJz z<1$Mnoa#37FWTZ|O*G*shaUK{WqZ8%RR{B8yqKQsZht<~X$T0$1eZS9LOuMj{vM8H zM9QOh8HraD(ORD$BJ&lY1*@aDEro=55@;wxil&I!e8O=aVb;1SvN=0dAa@L(m>#}v zt6!E}f||H>QuN&y5YOPat+4*AHmDD*7|_uoQ?s-@^qkN_!bn-{jb72l-v{40B8a8( z|NYXy)=`40SWqo0GOYL}bK#iyPV_eFN#V0I_CmwUJ4jS=1lssy!EO(9rKLb(-qL(- zW8;1F?W!i!daBjr*3hC_k}vFC*DK6r3)55i~&ozsQ{jcDvRI~=cN1U%1C|Y(a1cc5j+D3 zUV;>1@t_xc1dYqN+T_|2ECjW=4m2OI^#DR@xS`CVU{e8a=wzg$U z&)PSVWPv3V=!cY?B-ud)FFifo(pe=?r9EeFdmB~R1=?4SI^Vy@+R*jMusV;?$z&k^ z`}>-*7_y^i*o6a3!Z%|>Ly6iR)5#hpE-$mS1kXywj=?({Uqh?_Ke@9r1&r@4ktpJwa!j{fqU zQ`#d_BbB{dGElT4w>-P@=)kVL;MT~KD`#dNL1tdG`xc`$7;rS5fbEo;KqCYfejE>2AK{nA=cLcdq^tRL+%dX??UI#z&WrL)N2+)cAbBYz3fopCDvGuKN5`+_od651unjZ@7TzW(QjF`+5f%KaXL@uGAf#2JZI9 zfJ{-JF2v$h|NG;~-1H<=th^U*APF$hS%H|~!uk#mpFkBKoUig1I0QICy8#tyck7aylF%}DS0+N0>>2%9mo02o@F6!m zX{-29_aye=;o*4iH%>k)a|9daO<%sWoliFRbn{rOZX^#+WlOnq-T;N!n@yV=ztWKl zli_g!n<9=$jQSizN9YaP+%5?n-x6JGbx%~pTsQigExQoN=m31qhWo&Hzr8qE<0DT! zR$n4BC~Ilg5^;%ngWg#6!3t5ms;$MK82U(wWs>W1b8nVZT*TL}CeM;W0;Oe&uM2T)K+|NNRqZv}narZkBY?t}lM%27+(F$}o-DkY^tWod-cp}wCCNtii+fTee^R@l? zp)58%uWpY^>l1Zi``bYRB*pFc@e@`|DfaIiy#J}wn-Jhxd;WK;i z%n=(^`sgA}?ujMn4lF8j6?q+*ARozK`D?RBp?9#M?V#gs{#74pwLDZYIK3X@nAgK3 zzF{6#IL&z0kbjl9PmZa8c{H;-mO@l3` zg7Ly7(&h$fqNHYROf)hwGBp%Nl}W>YINhlqq#^CB9mv7=q>ao;wYevSBhCN$u}_ob zPRXpZa(YHA;g3eb1_1cT^g&>{c|XnG`@$++LrWINC-3Sfl@FduN8WYu`zi;4yI^d{ zrey<@7Skz}8PU?3sOh8P{puXo9(Ulj9TEje>q!xJ%oI!)z%$qY7xNl+CTLFL#r@*m zWaU7PO4?crb9CVw9p4ZOEP&6JS#nxTn5|}e{ICgFq5Yox@y&^A)JqS-z1zF|fro&6X?gqeabuAB9^@6h+#qv)qe+Nj#czvSDb!kABaFah% zatTkJhK>(&wfxa$DX{IAEmyjvA08K%4cPqe z^~M9gvkIs`*%7DVwl>+MFjMu|@^?rtx020zsm@P()67ir)yLFq!Aj(bw|iJ5?7%bh z0Z_r{?Ae0{5AtrX^^U(kEdC+(=_*KcA~zCOV21BP+w5_tP+n=|l`;lyYdf19?R8)A z-?dqZQ=viQ7g<0*)R=0HoEVwwG{k&;65RLL77S)T6PyI*-qc5oEEnzvsv{92oTO0r zcd7t!y*yq^LAbH4@W=*h50lBiGkfv0ikqPS6f-{aviD93j5y3I65`kj>d_`$jBO&uqTd>bjNF$rF&>}iiJPel~}w$#>` zM(wFJk&T18+K0WK{1`%}J=wJN;CNHZXr;79F^h~1BC|$5zyG~Q{9TA3KteX2ObT+T z0m9;F@9mVjGf&S0bEPIodH4wQvA;KPoIEXCuDzto{(hjO4_s(_cof7oKBXIG->oRj zdQuf>J8=u>Ne1KV+&GvkibVBMRGEI|Kp1f?%0ddPZyl^v5uCbFwCu~1JkJqRPJO;p zv-?R{F?v3J*DN<9rdtQ@W3gTnYgkm3wx2ZkmHJj0>^gG>OmyNXy*)Z`LCWDK4kN$O z+0L-{X!qTW~eTAL)JHoJQ6BJ!X0Hk4^C=a48W_M(rsaNP%o~ z=9>O@kfit{^@nm}jU3){B3QbW+cN&g88O3qIqiIk8c|a1mW^sz2J5laGv7gqJo52~ zn3&9Yu`t0kuV-NX+y$(UE?o%W&I2|a>`crJlgtPh|KlaUr(f=f)=0Y_603lmm-?Qr z-MDMQ=caa~*D5F_iSJtx7Ay69=$2@$iZyuS^g@>}k#Tg}C#`sa1Nt%1xVvV?S?g=X zF2;Lm7 zq2P@^KM$`Q7J(liDZw;aJ~n%7ReO9osO=3xo0t)!*IP9A)rii1@pLJG>7;`ExhK4T zKDspG7m}?wq|%0^4)Lgq;!4F9&dmP2;Pdq38QFQTPjxx`Bs0;=;l0buyN-kxDG!tc zwhvI^eaqBXLcY9NNQqpCQnks;vc$bYbk)A=l!Wcgmv^bL)b7qWcpmV2N(1II0>~*- z@_OQdB*=Wq(axLY1o8p`Ih6(wmMYcll7XgXiiQRtqfT2gNo#a2Jt>Xzws%l7-aU7s z{ZEw3;n@(il938RLP3;yNm1e!)og+CofH#Z`-5l_<+4beJTWWyWa|)4%5Gq%(z1(@ z5zkevHv=*R>jN58T_AhzZ*M+GNJ8yeXD>{UjX;Wp>#xV}?XsM|_~sUrdT6Ry`#|8+ zD|)(MNF^V8UAKnsA7Eo)1JUHtR)5|eTYQ$#-PQHGX+O*D;(Tc1IGIH~;SS4w1@8BO zfNTv6P$n$%01k+Oe=W0;&;1LR^6vJR7Zxhn6cXAz7a!3RW#gVbodgy)-9yH9=|XwE&#CVUk{iGs za>R@zg%HDrrJu7Z8q8)tmr`j3BV;kacCtR^Hc2DitX>k$3JbHA%Jb9er#qdB!byyB% z`No+=-UAKLCMKvmTXI}jMBYgd&!R!k!!F*?5tPGpKz)vUvj`Qr4 zmxk*z9d35jpNOT$Q9u6xh5PDzwdB_gKK@s8l}^|e?p@4hW!S5J<@%uRE)Btz_Y%wJ%y4j_8lyb!pmTc&^zUt2ru0&9IXK(+C^0EW$)R*~Fp z)ouY{`d9t#za9!3Qj;w-{E&5Lhs3LO+d@}P-Le~cD8LeJJV7y%<}$Vmo%NosfqEqz z1gBx|_G|0t1Yat#>UyU7$meYuIHbp)pskTvivcG=S`Ts6C+Vwe2%`H@C$Vr|Xr5 z^?^il4Pq&D?r8pD^FLs)N$|b>1%@TdF=&sBaWhbZR9-9@jyMyt4`5kX z+%>^va^T&hpg4-*1(tm>7maN=fa45%j2A}L{^YusIW(%7`Y!nU_X+%8h5zXg{V!Nn zH~`<}$43wTwgA1|jt&beOcMDwk#IW)1V8*U*4_6;D=|sf{#SK5&w~F52Jr6*;O_&5 zl$CtI;$-Yc`s~N*6C0OpOGAm8HhyB`wq4WM-($6CEH-pjFv@vpu=k-hNN`j959k}o zl&`ly%lrkpUmKW7d(+f;LiW5Be0^Fj1&7qid$ zoq)ng2Mim)!kP6b=Eh)^8>SgV*&m?Hb>o4(LRr$Hb;a0+nO6GJRX|f2uBrIi83JP8 z0dT+wA&M+Jrr+*kQE03=bp04x(0PFB)X~u3Q2*!z^6fU`)|`jRU-NqT{kRNt{e380 z$?%M%iLv{QH%>WLN3q%?Hm`ykQMR-y#r2_j?dH_>p88;k_#7>nvbZl_z7Gu<3thTo z)sYAXtQrwpivxm)9g;lX&4u3VbgUP}1|Px)R#_^)@B#IEia}1p%g$6F0&W0Z_z8&i z15?nnDw_FSfV9unN!Pf1la)(KC0(ebd^jaVV~Q(T#a08tYOP;N>S$G3*%WR{KeOY& zkZ^o&=Hxk3Fk+z>DPr@=_4Mw*x$Np@OUrB`m)apdScBOyA4BcKi0HM)EAbC=%BdDY zv7+-mT9NyNN!fYT?X=?l*-12ZW?+Wy*mKF=bl(u_fp^GhyS{6Ya>dPuJ-BVXEoxob z0}<(X$HE6=L-v69@{N-dh$#>U*nMP`>rxj$jT8e}%eHq9_=l(14HTLW7Mcfvu!RVv zG$S(tnA%qkhMkiFD$AT_sHCJMGi~;XwodB_q;b2}$3R<@GD*_<1G|kPva5={ju6`l zzmNLAqp}Fy?9<;wGII}06)cSHlHCzOm*4^$sOuD!S?u$^Jd##9?QiK90jv?a-` zcwkfLvK4uuNmyHu^~hGj%#u8q?$T_;ZE`X5XA0waVm)0k$z!+H2E(UFP?=TCSFHO* z=wrg1A^2zmuscf#D09&Rw-IgdYLh!#5#JtC*>5A zOoQd^?9B{a!8(Vtws-%Q8!Ybs%Hx>)#oVCMrc1AqnpbtC_kgDQKP!-9{-*IVognKo zo6Y~#+m}E?{kHuN5~-y8q$pCBP{@+(MUsRhOSVx+$iAB~qg9k-->JyX$i9uSBxOyE z-Pp3t7-OBmn3?z1?|t6$KIc6D=luWY|DJcwVdmW5nft!(>-)X0`@TNcriM2TKboDq zBKk)}Kn!hJ|7`#N566yw5>9`^(*Gmg1Xp#Jpvt4d*~ll;!5Z9s8keaF-Isk%fh^O> zpyunW*QvK$$H2ojCR!AF%x7k< zU)WTa0A44N+i62(j*;S)m4&U=eXt4v1?Sk4m!Bj$AhWerB`?wJqx>|g{xO3A$|`P(cGzP|OE?Mr3!oF4t^E%(})qGZOb z9()nM>blt!vh6&31eC7Cs@g^L_*|K1jMhm0_-^#})IR3p;ieXE)L&QL zOJuU+l9G6BhoH>=Hl(@?z~ol@O@^U*-T^7EUNG1kIdOSa=~OF3$JH z{C%UNAt(e%jeI*}Kv`PakRd>IpPluj^LODxi{H*CoPW?sl+f_l$~vOM63}&2cc-1W zj8giPpAWnQJ9BuIY+^DkkEiTSfZopXfS^}B!A=P2S0N3ZLml&%A1Q+{q<9t zgR9r5C`K-t4a6!>A#@%A5eN=MjZvVyO_4=Kyzp`p>wlfjRzBbOU(d|=&z7@)p_d_! zR=FmIjb84&b71cj$sV&h)8;KZHxmT)ANSpuXxnrv4cbTZAIA8lY8{1msB1!QT-n2n zvvP9E)>+g|w`@hUS3J>FzoKk$sZgjiw!XF4LDcnOK5B*L1Kcq`H+M3GWV{!*sI9I2S2Osh&8Her;%MXjC9*P0 zTxxJskLIZG%Q}?pLS_Bk^-p8+a$>=LLU${uEo zno9|;&{&RivBSL~JlXpLK|fb`H>S4P*&B-kK*1n2&k%7bsR2X88g~JR?UUGU+m!#7 z14`bzMer-W)2x0Bj&&9d@S53|U#tKx=2oU!Y-|PbrxNVPu(?Y}@xe65(`1#bs3bT?olA zK)GRqq>IZ=DtQSD4e7)jjtHWtFCX1!t3w>GGZPUJS!;g!XpgeJFvLa^^y5R5##YS4 ziJ(!^jWPR8_7-&G@@<)ZEUD-Sg(%E_%~(UG|AoML*X$s6^7sJ1e5 zCcnVaDIm=`VCcxX+0ztu<`O$mU{+{vZ{I`Z_aJ_`GGYQlB7#M5Qfqj4*woMOG76b7 zpjt(}+ril|c5tb%h2^-V-xff3MvUEG_*yzw@^JUvMM(!~?cFXE%IvwBW(I6o2^dSW z%fp!Lp!8D*@|6#L0qNN6bUB9c6hJd!Q`;Rd67ShGXtP?xm@>1$Qhkys6CCTEtQv7SMZiEVuHC+ifquS5-V~2nO3&9=8k( z3|wos*TP)2T~4<3U>*mmEd;Wqen?TiS`>u5@R9@z^EtH&Z|(#VJL2TxN%6r-KIfl| zR(AQ2aO0(d!*wCwzo~%}6(lz%KK@acZbp&Eu5N~0?@p-QJL_Vrqrc`Ww4|qaUvvIR zcQ7fucORq5Ii9G*VBI0TkwDagSBUhVdKwVO3hVz;EyV}1moM4I<7!%goc&WLF97#T zr7E#J?CJiOL*v|)`70kAg1l!9df28w;z6!{ph`2Hps)2yGtcEg_gy(kc0%7TQf)Zy zUOeW+A&4&kKe@c1gfM-dufic1^)5CKyU=1$E8O<`_mT|ErJHP(1|+Rs-{0ME*qu(% zJ)L57uxe zihT8;Us`akIdR0de_H{StKZjik&J*$9h3P6-)a*URbABJN{6T-b^{EFAvXMm<(WA4 zsyi>yk3A7xlFoz0nceF53Y*ZCdwu!LZdNH?DIx2@2P|rluSZM}LS>ExHe>Nk25hO5 zEgGUpA(wX5ee`5-a9jCPmF3~SbpMG#auGDu==>5n?c2al z%l&wrH1gtn((``$np!%wCI*pI0FF#Hu_4fX%+Xo%8p^jWE?^vE6B7DT*b980Gkbs) z;pQ8(vrc1vT4Qtm##pTQpY0$rMb<&8?v)0?6?Hw^!QLbCQ_B)xsLSSHSP5@0s;&CU zIyJ5Z3kKNmoU?k8k^^p6kpOR1=`@Re(MOBfnvCE^Y3GT3F00c{ z^)genwJ|GpVzVAHloNK$N=kFz=(Nqys~`Mk`6b@K$18lrZh;uifqS2;QBH zxHxTw^)j+Xc4F0PulULn>O4R zI*8+Pq(G7;6B7w5<8Pm}k? zG^=cL>TA%0L(WT+^+LvOad&T{g?jq;@`Xsly4VH1$tOAr_?EwtC2vDl-V(Kgn7 zHOo;e1gkVd6M|e`70+){g3zrCsV8I(c$*&%kGDX9UTvVj1qrz(s9?E%#M;yS_ioyR zuOV&t)Dp#*HcParT@1H6yfi_3+eW{S_zAx|cGpo+9ZIA6J7}<}a2O1(|5viCm}BV4OLPmgtYcKe zXx?33@}Uwa^9xydkJ1O=nKhN+l6h+TbFF!H&gPHVWr8&3ZJMUMX+W)lLr{f|UPlZj=XyBnIWA9f$Wgu6d_18z|Dq7!M zw18U1B*@Nh=O6d`X;~utU463bPj59@CN7&vLBOMtD)7`V1R~ z0cor3V3m%I1sCMpiOHB`a5hrZs4cC-1=HO6=Cd6aRJfU6Kb&wve-rKsFk>r-eC)hN zJGvTVSTpZtmxjGJcPHX5La^4ZpF1xy<d?IsuMLBY$_u5 z5B^@#!jCk-zHUs{p;11+1M6%8J_39&n}0vD5IF~rd=6CuIvAb3QKJFzv|FtzB0SuA zW5f_tT@d|4)r9G;C1GN`kWQ=fS|b1^#;SJJTO)27dzmJYD1r-AI@MKSj5DZ?67TY) zofJSb=AKyZdvO&Mu{x>jvmlPq0JRUG%hWxE2#P@zKk2|304>B*a$nUOr4Qk>(6iZs zST;^2ay{`O=fWp9*d`sBw6C0%Oip#lFL0n0J#j11r@sJ6$yP`&ARuA-u4#<8o!il= zs`w1k76Kc3Y6hXl$U6Z4%83E4F6xUDz*`94!Sy6`!WjGYz-eWl+=I;^%hTyrSM2Um z`|HIYQ(AHF)JX59D|dRnt#3L#IK;M31>)~Yot>e7=Tl)i0Ug!RRylwXd%cK=`VlyF z(Ro@6VR=|=!H9cnaIx7H=rjsoN)y_42waUaZHsZ!(+?Z z>oIE=b?;`l6gzBI31Es|ac|@vfFOq~dVBc%buh2_*5BTbRPj=!cUk-2ZyS6?(^?zm zkfA{2gdj+z<14q(JyTj{<1+7X)Ot~vziD26y(aXYNgo`tq6961U}BYerVY~wP)JpmX@Q@%dx_pdq$DoLBn2`iihQuCKE_gb$%p1@OfRgJm7g6+#%a|(Dx`S`Zz1yTrVq>q= zqQj$)>DQ4i_n`6(z+1x6NrY`RWIBi#@kecG$fsJ?zsE@dBk!lx5v)sRxa90(CR( zHEKnE5#8%P-&JL0bRB2){fNFNihqPW?>mxMK-$eL7=;IQXlMU8tn2Kh747)^(I7RU zM!C{MpM7^Z>iT+}&N1t8H!rW!J^vJ7Snc|7X)s9kNr10a?_@-;nT28})Wt0kGmuL8 z8IxXEX4W=q5^>IV5(t{NZEejaB>dIJ*iHTqyRhgk6O3WSE-n%hSsE@5RS>Dt(s|OJLilMJrv6dE&9TbUT_Syi!7+`p_c(zPrCO&1jf&d}Byb z;$A)>7`LlgDz!w!k(c3~iRp~lU(%FNN5k~T)jP#LZ99xX9kIk@)1v;?{?rY3R#Rhz zaSXIpp$#h_Un8U&y^-Rn)hRglxhClCLjO*x@xa12ws~dQcm4hMxCI4K;o;$S4~%aa zka4S|MQy{yaLKV@Q>)03ALGXkb&&Q~RRy=~R?H=*=nz`gq~E>NUySI*5g6YOt85ao zQx+J5Tv3vZPtj`gre_3j9wVmjVlxV6vkUvQ308(=bhDE%0sh;{x&)DK(Xd{4eD*IFYn!~w2#b8* zz|R(&_)!ah!Yq&{wsWmsIw<7lk08hFWc&*_I-JYvY?0$g!a)8K)}Lz?Iq~C=kpyW#Rdb za8%~`H!DJrtHuR}CL1}9(AePBL!RJVaAO|~_XfODB7GF=*$O->2c$G?41{X=$DXFV zUMTdZl_YQ-3c9@H%CYaZZ{zm!U)gq}C4{E*u*VgCnhjCTq%UzCMcQtFk6IWG+<|D>Z6*QV}_b6Qm>qxe3^k(=8~D``Z^V& zrO&6^)?K96A=$#WW0144Akb<>Eh$H&&oq@;XRhP%9v(YPGXufBV*7V1xYxSkykW|< zL|AqfzwVB4#@)}SlJZX%L@R9P1r`gqG<1{G5ue+a%x9N;YbdvM71QXBg;^3j$d%l1 zOE`3-4!apldl{FZ8$BR4?k2qWqg+D;cSM>ETJ^0O6h$e0mKYL<19!~#+)r>R3ty!0>6EBu-do%<2DBDq){GCvEdB3xm#)XTdpRSWm|PTqqW zunWWBUf76LP!Fw_dox!<=nJe$r69`YFxu@MYVNtBno;Bq_p#77eB^AXsmzJDom}Nr z^JBIty9aDe8r~|Xt`Vnti?JJ-xx=t>(aXLSW>4#Ga+pAH^vQE`E6G@inl-+_Rk|bY zDW5?;60`VGG{VRCoBu_P!A~V^KAX79mOA@I7oTme!&fPxMg??qBf{n|8&}QQ%Mcc~ zyxaN;BJSwf;Yo_ggOZt%ID7!Hf@4;s>BVh`Si^Q~ie&d6TWqK+a^!?hQ@`ySSBW&#%n&A;CQSY3orn5^C^Rx3fz( z^wGE8us0crUA{cvLm1GHj!j9?a|fqWKKLV54-6=E(`}6py2eHvs?p25G3GoS+N#3$ z!hok9R66;^6D^!m#V|pn$+vzz^2T3;eMG_hi_gn+J=h3`8AHQm_alO_^JLt+Px$^z z-k(Up4Z(f3Av~16t)|m&eD9}pM?V+3l3LJ-u%42-aN%B++c@Dp-=g*PIqv8m3g2CPjxG>kM!j4%1jI0c1S@F!MoH88dx zy_8y9W1($F&4P?Kz4<4*Hqp^P6-s!YdgAlD2K(5 zBnF!3Y<3!#0gp5)&gl`Q_~At>nTZ&-)Q%A!Q@rcEIGK%Csq|RA&@59~;n-swy025t zu&Z>eFceMHqt%RB*3{I90%e(*TqZ`06Wq)f~l}0J#Z_@_+pRx{lUmncXms*YIQ@6Bii!Lm}3|i z;;LB}H1YG7;NomXw2g#b|4)HmZ7o?-p=k%E1dpWTO%BU#_Q+!Om8*vtJ5ByqmxT0# zg>($xl2F)}j#yes%(bn1O`}C;=q4H&DKSh?N6U%wBVh6VR^)HE&y_5XjTKPOe~R2m zn-N1B8Z=D65!X^?8md69jM}S93VSVw!oK)yzQ26SrbLJGSp(!;aJw1U_%=Bx&Moj! z3}LgR%6e;}E590Fg*c>gBU(h))6?^ni6H~~J3CunKZZ=)OgOEwfR1!oBY=?CwAb3y z*~A=6rt;@Ep9~&UaQ<5K4%=+wS}rEA$Dt{6rYwdS1yia=RQi#ri241PAqaOZ6wY&K zYJEUJYHB`P>@B>pIWY@Xv%J|VKTURQ-ksI>`oL4N*%=4MTsUGO;1x518t9^tc3b2cH?l;;%fJpK7&L^Xk2zBhxM z@pyjpN5&L^fpSkjMy5+!RsXyNsIrum6;?3O^$d%ZWSwRfP2}Hj;F7w)kma@qu2Ak1 z4MM^6rKP2qN^VfTwxth`f@H|af50R6S6o6qca(nG0G`OX`t@$_CvW}Kx=-@G7dBzY zEsTV3#l(;lqcsJV&RrjO7E9RODHByxaCL5+aMhP?kxT9G`B3@qhOxEkur z4}t*#Mt0EJL7U5O2+iq(=*@-5jWR9jsiIKpgWz25&r>(>hFe;Pa#RvL$}8a;?)o;U zyf4aQf?9)l2O#~c-dhzci_I?&7DZ1-*B*F!$3W`lU0qMzaX(Ez<`xc_dN-|hmTwI? zel*ey&E62Cqw_!qTC>`{CD!Yf0mU0iTpHL@)_@mbL4@2%zrV3Nbl)g;Pr1+ zxqo4t{x9#He>P+P_aP_wPacOi9y+LQo4fCCRO^%SSE<9D<%r#0)1%Lr{vcYP&M#@Z zsO_~}1XuWWPHnr#=OftNsFahUQi+-oe}C(&(vo&5W{>W~#p$ei#{#*|nhfBCbTYj5b(I>tTl^KG@=5pE{@J^p(cVQ69D zDYJa^QjMdF-Zsw-3EcN?Hi*!#Y9WR(SXxn8@9??%u!shaDNTdd!Dm263m6Pl@b$sO zcWKH3l;9nb;6_G?88$B=KU`5lgM2K`=$MHwUWCW}9^$1@&p`YdL%k)|nz3>cBf8X) z9?B{x<06@S=P`u+C{XDUGn10KV4*tU4=M#cgd>ZjR6F9hKkke&Bn(_9aOAKaWd0>3 zwO4(vgo1A;@x(qPgN(_lzFtLJf$!B%#6<46zZqT2SCU#XIq~xBl6HPI3n2o>NLiD7 zTl^&0T#rSr2yi#-1=W}3Da5e}?7tJgc|9W^DTE99qf9$tw=6j?@2$q&p!@b1mIS1uHpf6+`pFn+zqp5x+`;a4B|u(cI{oiM02wKl*aHBgYWAx8A{F8#iu@|3FQU4qUvTk>9+Q8Jz`6#lOrKAgd(+E2)^Pm=zct zgL#jqILyt+Y2g@2kv$vt7%G1Fn+(G~#+~(t3}WQYgGBnE07I+mU>k$GC7o8>W5a>* zWE)8Fz&`KOg}gp>*n&xYJggRa@IGU$eCO%pZM@esgK9E*H6Sg(FpHl?S?A%6>PP0h zy9DZBzGFmHM%+9C^KAMnQ(eQ@ZN1|HepTV!USjt%kaMxzOl15-QhL?^QUGHpdmZ1v zwLBj}p>`sedS11&bHK=TqADk!Wjf6!Kn{UrVVIHX)qF63s^E@X?kDs|xI&@?_VWAp z`VGqgfMO5FIn&&dZY*@gt)oCxLqo%Pd0Pa+vQqHJi{(^~z46y#pLlCVNgVV+ROc79KycFfMA0 EA1y7iIRF3v diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi index eb06288d800bc5d42a9923164ac1676bdfa9fba1..a5c2fcef7784f300266012dceb164254610d6f16 100644 GIT binary patch literal 86102 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%0DPSAzy+9*!2p(J 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 NXV0G&KY8=v{{VEyn+yN| literal 91209 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 Ws~^qH3*2WQvab|h7Cblj=l=j!6$>5! diff --git a/icons/mob/human/bodyparts.dmi b/icons/mob/human/bodyparts.dmi index 2150b3c2c810f3106ab66cfe27c44d82b223024c..d6e4472973a328fa22250471a71c9a647190085b 100644 GIT binary patch literal 52010 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%0D(cvk#>Z^{&3IDs08Z7X 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%0AUA6naalN%Xf=^Q#Z|z{*>pY+Ldsoa+u)yz4 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

$NaLR7iX9gn^%LUwV1(FqlbRtksvGYu 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 DWOg{X literal 2688 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 diff --git a/tgstation.dme b/tgstation.dme index 3f7872a54360..72cdde8ebf44 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -636,7 +636,6 @@ #include "code\controllers\subsystem\ipintel.dm" #include "code\controllers\subsystem\job.dm" #include "code\controllers\subsystem\lag_switch.dm" -#include "code\controllers\subsystem\language.dm" #include "code\controllers\subsystem\library.dm" #include "code\controllers\subsystem\lighting.dm" #include "code\controllers\subsystem\lua.dm" @@ -3635,6 +3634,7 @@ #include "code\modules\client\preferences\species_features\ethereal.dm" #include "code\modules\client\preferences\species_features\felinid.dm" #include "code\modules\client\preferences\species_features\lizard.dm" +#include "code\modules\client\preferences\species_features\monkey.dm" #include "code\modules\client\preferences\species_features\moth.dm" #include "code\modules\client\preferences\species_features\mushperson.dm" #include "code\modules\client\preferences\species_features\mutants.dm" @@ -4238,6 +4238,10 @@ #include "code\modules\keybindings\bindings_client.dm" #include "code\modules\keybindings\focus.dm" #include "code\modules\keybindings\setup.dm" +#include "code\modules\language\_language.dm" +#include "code\modules\language\_language_holder.dm" +#include "code\modules\language\_language_manuals.dm" +#include "code\modules\language\_language_menu.dm" #include "code\modules\language\aphasia.dm" #include "code\modules\language\beachbum.dm" #include "code\modules\language\buzzwords.dm" @@ -4246,10 +4250,6 @@ #include "code\modules\language\common.dm" #include "code\modules\language\draconic.dm" #include "code\modules\language\drone.dm" -#include "code\modules\language\language.dm" -#include "code\modules\language\language_holder.dm" -#include "code\modules\language\language_manuals.dm" -#include "code\modules\language\language_menu.dm" #include "code\modules\language\machine.dm" #include "code\modules\language\moffic.dm" #include "code\modules\language\monkey.dm" @@ -4857,7 +4857,6 @@ #include "code\modules\mob\living\carbon\human\status_procs.dm" #include "code\modules\mob\living\carbon\human\suicides.dm" #include "code\modules\mob\living\carbon\human\species_types\abductors.dm" -#include "code\modules\mob\living\carbon\human\species_types\abominations.dm" #include "code\modules\mob\living\carbon\human\species_types\android.dm" #include "code\modules\mob\living\carbon\human\species_types\dullahan.dm" #include "code\modules\mob\living\carbon\human\species_types\ethereal.dm" diff --git a/tgui/packages/tgui/interfaces/MedicalKiosk.jsx b/tgui/packages/tgui/interfaces/MedicalKiosk.jsx index 5d8b081e0ef4..98d71c043314 100644 --- a/tgui/packages/tgui/interfaces/MedicalKiosk.jsx +++ b/tgui/packages/tgui/interfaces/MedicalKiosk.jsx @@ -248,6 +248,7 @@ const MedicalKioskScanResults4 = (props) => { overdose_list = [], addict_list = [], hallucinating_status, + blood_alcohol, } = data; return (

@@ -281,6 +282,19 @@ const MedicalKioskScanResults4 = (props) => { {hallucinating_status} + + + + +
); diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/species_features.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/species_features.tsx index 457e67fd0a61..b7d0d69959f0 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/species_features.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/species_features.tsx @@ -68,6 +68,15 @@ export const feature_human_tail: FeatureChoiced = { }, }; +export const feature_monkey_tail: FeatureChoiced = { + name: 'Tail', + component: ( + props: FeatureValueProps, + ) => { + return ; + }, +}; + export const feature_lizard_legs: FeatureChoiced = { name: 'Legs', component: ( diff --git a/tgui/packages/tgui/interfaces/Vending.tsx b/tgui/packages/tgui/interfaces/Vending.tsx index 2f8cd42dade9..b6106937a53f 100644 --- a/tgui/packages/tgui/interfaces/Vending.tsx +++ b/tgui/packages/tgui/interfaces/Vending.tsx @@ -12,7 +12,12 @@ import { Stack, Table, } from 'tgui/components'; -import { Window } from 'tgui/layouts'; + +import { createSearch } from '../../common/string'; +import { useBackend } from '../backend'; +import { Input } from '../components'; +import { Window } from '../layouts'; +import { Category } from './PreferencesMenu/antagonists/base'; type VendingData = { onstation: boolean; @@ -24,7 +29,7 @@ type VendingData = { coin_records: CoinRecord[]; hidden_records: HiddenRecord[]; user: UserData; - stock: StockItem[]; + stock: Record[]; extended_inventory: boolean; access: boolean; vending_machine_input: CustomInput[]; @@ -81,11 +86,17 @@ export const Vending = (props) => { product_records = [], coin_records = [], hidden_records = [], - stock, + categories, } = data; const [selectedCategory, setSelectedCategory] = useState( - Object.keys(data.categories)[0], + Object.keys(categories)[0], + ); + + const [stockSearch, setStockSearch] = useState(''); + const stockSearchFn = createSearch( + stockSearch, + (item: ProductRecord | CustomInput) => item.name, ); let inventory: (ProductRecord | CustomInput)[]; @@ -100,12 +111,15 @@ export const Vending = (props) => { } } - inventory = inventory - // Just in case we still have undefined values in the list - .filter((item) => !!item); + // Just in case we still have undefined values in the list + inventory = inventory.filter((item) => !!item); + + if (stockSearch.length >= 2) { + inventory = inventory.filter(stockSearchFn); + } const filteredCategories = Object.fromEntries( - Object.entries(data.categories).filter(([categoryName]) => { + Object.entries(categories).filter(([categoryName]) => { return inventory.find((product) => { if ('category' in product) { return product.category === categoryName; @@ -114,7 +128,7 @@ export const Vending = (props) => { } }); }), - ); + ) as { [k: string]: Category }; return ( @@ -129,19 +143,23 @@ export const Vending = (props) => { - {Object.keys(filteredCategories).length > 1 && ( - - - - )} + {stockSearch.length < 2 && + Object.keys(filteredCategories).length > 1 && ( + + + + )} @@ -155,7 +173,9 @@ export const UserDetails = (props) => { if (!user) { return ( - No ID detected! Contact the Head of Personnel. +
+ No ID detected! Contact the Head of Personnel. +
); } else { return ( @@ -181,11 +201,21 @@ export const UserDetails = (props) => { /** Displays products in a section, with user balance at top */ const ProductDisplay = (props: { custom: boolean; - selectedCategory: string | null; inventory: (ProductRecord | CustomInput)[]; + stockSearch: string; + setStockSearch: (search: string) => void; + selectedCategory: string | null; + setSelectedCategory: (category: string) => void; }) => { const { data } = useBackend(); - const { custom, inventory, selectedCategory } = props; + const { + custom, + inventory, + stockSearch, + setStockSearch, + selectedCategory, + setSelectedCategory, + } = props; const { stock, onstation, @@ -200,20 +230,28 @@ const ProductDisplay = (props: { scrollable title="Products" buttons={ - !!onstation && - user && ( - - {(user && user.cash) || 0} - {displayed_currency_name}{' '} - - - ) + + {!!onstation && user && ( + + {(user && user.cash) || 0} + {displayed_currency_name}{' '} + + + )} + + setStockSearch(value)} + placeholder="Search..." + value={stockSearch} + /> + + } > {inventory .filter((product) => { - if ('category' in product) { + if (!stockSearch && 'category' in product) { return product.category === selectedCategory; } else { return true; From 4816d2e12f7567d00b8bc713cc23c5594ba16c52 Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Tue, 16 Jul 2024 15:17:55 -0500 Subject: [PATCH 03/13] Fixes --- .../modules/client/preferences/species_features/basic.dm | 6 +++--- maplestation.dme | 9 ++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/code/modules/client/preferences/species_features/basic.dm b/code/modules/client/preferences/species_features/basic.dm index e6d86396b04a..68fac62f43dd 100644 --- a/code/modules/client/preferences/species_features/basic.dm +++ b/code/modules/client/preferences/species_features/basic.dm @@ -7,7 +7,7 @@ var/icon/final_icon = new(head_icon) if (!isnull(sprite_accessory)) ASSERT(istype(sprite_accessory)) - + var/icon/head_accessory_icon = icon(sprite_accessory.icon, sprite_accessory.icon_state) if(y_offset) head_accessory_icon.Shift(NORTH, y_offset) @@ -80,7 +80,7 @@ return ..() var/picked_beard = random_facial_hairstyle(gender) - var/datum/sprite_accessory/beard_style = SSaccessories.facial_hairstyles_list[picked_beard] + var/datum/sprite_accessory/beard_style = GLOB.facial_hairstyles_list[picked_beard] if(!beard_style || !beard_style.natural_spawn || beard_style.locked) // Invalid, go with god(bald) return ..() @@ -181,7 +181,7 @@ return ..() var/picked_hair = random_hairstyle(gender) - var/datum/sprite_accessory/hair_style = SSaccessories.hairstyles_list[picked_hair] + var/datum/sprite_accessory/hair_style = GLOB.hairstyles_list[picked_hair] if(!hair_style || !hair_style.natural_spawn || hair_style.locked) // Invalid, go with god(bald) return ..() diff --git a/maplestation.dme b/maplestation.dme index 24ded6fe9583..f47914369b91 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -4234,6 +4234,10 @@ #include "code\modules\keybindings\bindings_client.dm" #include "code\modules\keybindings\focus.dm" #include "code\modules\keybindings\setup.dm" +#include "code\modules\language\_language.dm" +#include "code\modules\language\_language_holder.dm" +#include "code\modules\language\_language_manuals.dm" +#include "code\modules\language\_language_menu.dm" #include "code\modules\language\aphasia.dm" #include "code\modules\language\beachbum.dm" #include "code\modules\language\buzzwords.dm" @@ -4242,10 +4246,6 @@ #include "code\modules\language\common.dm" #include "code\modules\language\draconic.dm" #include "code\modules\language\drone.dm" -#include "code\modules\language\language.dm" -#include "code\modules\language\language_holder.dm" -#include "code\modules\language\language_manuals.dm" -#include "code\modules\language\language_menu.dm" #include "code\modules\language\machine.dm" #include "code\modules\language\moffic.dm" #include "code\modules\language\monkey.dm" @@ -4853,7 +4853,6 @@ #include "code\modules\mob\living\carbon\human\status_procs.dm" #include "code\modules\mob\living\carbon\human\suicides.dm" #include "code\modules\mob\living\carbon\human\species_types\abductors.dm" -#include "code\modules\mob\living\carbon\human\species_types\abominations.dm" #include "code\modules\mob\living\carbon\human\species_types\android.dm" #include "code\modules\mob\living\carbon\human\species_types\dullahan.dm" #include "code\modules\mob\living\carbon\human\species_types\ethereal.dm" From 921e35bae74403a2439f9afafcde8e4b1774c17c Mon Sep 17 00:00:00 2001 From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Thu, 22 Feb 2024 00:36:48 -0500 Subject: [PATCH 04/13] Fixes, deletes holodeck monkey (#84708) --- code/datums/components/butchering.dm | 6 ++++++ code/datums/dna.dm | 10 +++------ code/modules/admin/create_mob.dm | 6 +++--- .../food_and_drinks/machinery/gibber.dm | 6 ++++++ code/modules/holodeck/holo_effect.dm | 6 ++---- code/modules/mob/living/carbon/carbon.dm | 10 ++++----- code/modules/mob/living/carbon/human/death.dm | 2 ++ .../living/carbon/human/human_update_icons.dm | 2 +- .../modules/mob/living/carbon/human/monkey.dm | 6 ------ .../carbon/human/species_types/monkeys.dm | 19 ------------------ code/modules/mob/living/death.dm | 2 ++ code/modules/surgery/lipoplasty.dm | 19 ++++++++++-------- code/modules/surgery/organs/external/tails.dm | 2 +- ...manoids__datum_species_monkey_holodeck.png | Bin 838 -> 0 bytes .../code/controllers/subsystem/economy.dm | 10 ++++----- 15 files changed, 47 insertions(+), 59 deletions(-) delete mode 100644 code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey_holodeck.png diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index 0cf6631f8074..1f432efc7345 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -107,6 +107,12 @@ var/final_effectiveness = effectiveness - target.butcher_difficulty var/bonus_chance = max(0, (final_effectiveness - 100) + bonus_modifier) //so 125 total effectiveness = 25% extra chance + if(target.flags_1 & HOLOGRAM_1) + butcher.visible_message(span_notice("[butcher] tries to butcher [target], but it vanishes."), \ + span_notice("You try to butcher [target], but it vanishes.")) + qdel(target) + return + for(var/result_typepath in target.butcher_results) var/obj/remains = result_typepath var/amount = target.butcher_results[remains] diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 1809d7162201..f2e4100989ac 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -212,8 +212,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) L[DNA_TAIL_BLOCK] = construct_block(GLOB.tails_list_human.Find(features["tail_cat"]), GLOB.tails_list_human.len) if(features["tail_lizard"]) L[DNA_LIZARD_TAIL_BLOCK] = construct_block(GLOB.tails_list_lizard.Find(features["tail_lizard"]), GLOB.tails_list_lizard.len) - if(features["tail_monkey"]) - L[DNA_MONKEY_TAIL_BLOCK] = construct_block(GLOB.tails_list_monkey.Find(features["tail_monkey"]), GLOB.tails_list_monkey.len) if(features["snout"]) L[DNA_SNOUT_BLOCK] = construct_block(GLOB.snouts_list.Find(features["snout"]), GLOB.snouts_list.len) if(features["horns"]) @@ -363,8 +361,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_human.Find(features["tail_cat"]), GLOB.tails_list_human.len)) if(DNA_LIZARD_TAIL_BLOCK) set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_lizard.Find(features["tail_lizard"]), GLOB.tails_list_lizard.len)) - if(DNA_MONKEY_TAIL_BLOCK) - set_uni_feature_block(blocknumber, construct_block(GLOB.tails_list_monkey.Find(features["tail_monkey"]), GLOB.tails_list_monkey.len)) if(DNA_SNOUT_BLOCK) set_uni_feature_block(blocknumber, construct_block(GLOB.snouts_list.Find(features["snout"]), GLOB.snouts_list.len)) if(DNA_HORNS_BLOCK) @@ -483,7 +479,9 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) generate_dna_blocks() if(randomize_features) for(var/species_type in GLOB.species_prototypes) - features |= GLOB.species_prototypes[species_type].randomize_features() + var/list/new_features = GLOB.species_prototypes[species_type].randomize_features() + for(var/feature in new_features) + features[feature] = new_features[feature] features["mcolor"] = "#[random_color()]" @@ -674,8 +672,6 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) dna.features["tail_cat"] = GLOB.tails_list_human[deconstruct_block(get_uni_feature_block(features, DNA_TAIL_BLOCK), GLOB.tails_list_human.len)] if(dna.features["tail_lizard"]) dna.features["tail_lizard"] = GLOB.tails_list_lizard[deconstruct_block(get_uni_feature_block(features, DNA_LIZARD_TAIL_BLOCK), GLOB.tails_list_lizard.len)] - if(dna.features["tail_monkey"]) - dna.features["tail_monkey"] = GLOB.tails_list_monkey[deconstruct_block(get_uni_feature_block(features, DNA_MONKEY_TAIL_BLOCK), GLOB.tails_list_monkey.len)] if(dna.features["ears"]) dna.features["ears"] = GLOB.ears_list[deconstruct_block(get_uni_feature_block(features, DNA_EARS_BLOCK), GLOB.ears_list.len)] if(dna.features["moth_wings"]) diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index b5cbb588390a..b4cad70d7584 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -50,13 +50,13 @@ var/picked_color = random_hair_color() human.set_haircolor(picked_color, update = FALSE) human.set_facial_haircolor(picked_color, update = FALSE) - var/datum/sprite_accessory/hairstyle = SSaccessories.hairstyles_list[random_hairstyle(human.gender)] + var/datum/sprite_accessory/hairstyle = GLOB.hairstyles_list[random_hairstyle(human.gender)] if(hairstyle && hairstyle.natural_spawn && !hairstyle.locked) human.set_hairstyle(hairstyle.name, update = FALSE) - var/datum/sprite_accessory/facial_hair = SSaccessories.facial_hairstyles_list[random_facial_hairstyle(human.gender)] + var/datum/sprite_accessory/facial_hair = GLOB.facial_hairstyles_list[random_facial_hairstyle(human.gender)] if(facial_hair && facial_hair.natural_spawn && !facial_hair.locked) human.set_facial_hairstyle(facial_hair.name, update = FALSE) // Normal DNA init stuff, these can generally be wacky but we care less, they're aliens after all - human.dna.initialize_dna(newblood_type = random_blood_type(), create_mutation_blocks = randomize_mutations, randomize_features = TRUE) + human.dna.initialize_dna(create_mutation_blocks = randomize_mutations, randomize_features = TRUE) human.updatehealth() human.updateappearance(mutcolor_update = TRUE) diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm index 57c3248f8cdc..a33a8d75f177 100644 --- a/code/modules/food_and_drinks/machinery/gibber.dm +++ b/code/modules/food_and_drinks/machinery/gibber.dm @@ -147,6 +147,12 @@ if(!occupant) audible_message(span_hear("You hear a loud metallic grinding sound.")) return + if(occupant.flags_1 & HOLOGRAM_1) + audible_message(span_hear("You hear a very short metallic grinding sound.")) + playsound(loc, 'sound/machines/hiss.ogg', 20, TRUE) + qdel(occupant) + set_occupant(null) + return use_power(active_power_usage) audible_message(span_hear("You hear a loud squelchy grinding sound.")) diff --git a/code/modules/holodeck/holo_effect.dm b/code/modules/holodeck/holo_effect.dm index 1bbedefb2e0e..afd4c2270388 100644 --- a/code/modules/holodeck/holo_effect.dm +++ b/code/modules/holodeck/holo_effect.dm @@ -62,11 +62,9 @@ mobtype = pick(mobtype) our_mob = new mobtype(loc) our_mob.flags_1 |= HOLOGRAM_1 - ADD_TRAIT(our_mob, TRAIT_PERMANENTLY_MORTAL, INNATE_TRAIT) // these vars are not really standardized but all would theoretically create stuff on death - for(var/v in list("butcher_results","corpse","weapon1","weapon2","blood_volume") & our_mob.vars) - our_mob.vars[v] = null + our_mob.add_traits(list(TRAIT_PERMANENTLY_MORTAL, TRAIT_NO_BLOOD_OVERLAY, TRAIT_NOBLOOD, TRAIT_NOHUNGER), INNATE_TRAIT) RegisterSignal(our_mob, COMSIG_QDELETING, PROC_REF(handle_mob_delete)) return our_mob @@ -103,7 +101,7 @@ mobtype = /mob/living/basic/bee/toxin /obj/effect/holodeck_effect/mobspawner/monkey - mobtype = /mob/living/carbon/human/species/monkey/holodeck + mobtype = /mob/living/carbon/human/species/monkey /obj/effect/holodeck_effect/mobspawner/monkey/activate(obj/machinery/computer/holodeck/computer) var/mob/living/carbon/human/monkey = ..() diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index e1f2fc05c99b..f1516906b387 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1370,7 +1370,6 @@ else set_lying_angle(new_lying_angle) - /mob/living/carbon/vv_edit_var(var_name, var_value) switch(var_name) if(NAMEOF(src, disgust)) @@ -1386,17 +1385,18 @@ return ..() - /mob/living/carbon/get_attack_type() if(has_active_hand()) var/obj/item/bodypart/arm/active_arm = get_active_hand() return active_arm.attack_type return ..() - /mob/living/carbon/proc/attach_rot() - if(mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD)) - AddComponent(/datum/component/rot, 6 MINUTES, 10 MINUTES, 1) + if(flags_1 & HOLOGRAM_1) + return + if(!(mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD))) + return + AddComponent(/datum/component/rot, 6 MINUTES, 10 MINUTES, 1) /** * This proc is used to determine whether or not the mob can handle touching an acid affected object. diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 7d31dd5ff90d..6d15f696bed5 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -6,6 +6,8 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift) new /obj/effect/temp_visual/dust_animation(loc, dna.species.dust_anim) /mob/living/carbon/human/spawn_gibs(drop_bitflags=NONE) + if(flags_1 & HOLOGRAM_1) + return if(drop_bitflags & DROP_BODYPARTS) new /obj/effect/gibspawner/human(drop_location(), src, get_static_viruses()) else diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 233b86064cc8..99d08f9c716d 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -102,7 +102,7 @@ There are several things that need to be remembered: var/icon_file var/woman //BEGIN SPECIES HANDLING - if((bodyshape & BODYSHAPE_DIGITIGRADE) && (uniform.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) + if((bodytype & BODYTYPE_DIGITIGRADE) && (uniform.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) // NON-MODULE CHANGE kapu why if(uniform.greyscale_config_worn && uniform.digitigrade_greyscale_config_worn && uniform.greyscale_colors) icon_file = SSgreyscale.GetColoredIconByType(uniform.digitigrade_greyscale_config_worn, uniform.greyscale_colors) diff --git a/code/modules/mob/living/carbon/human/monkey.dm b/code/modules/mob/living/carbon/human/monkey.dm index 88d46855a5e3..d11e4f5208bc 100644 --- a/code/modules/mob/living/carbon/human/monkey.dm +++ b/code/modules/mob/living/carbon/human/monkey.dm @@ -32,12 +32,6 @@ equip_to_slot_or_del(helmet, ITEM_SLOT_HEAD) helmet.attack_self(src) // todo encapsulate toggle -/mob/living/carbon/human/species/monkey/holodeck - race = /datum/species/monkey/holodeck - -/mob/living/carbon/human/species/monkey/holodeck/spawn_gibs() // no blood and no gibs - return - GLOBAL_DATUM(the_one_and_only_punpun, /mob/living/carbon/human/species/monkey/punpun) /mob/living/carbon/human/species/monkey/punpun diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm index 776a994b0dc2..a1ff60952dfd 100644 --- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm +++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm @@ -178,23 +178,4 @@ /obj/item/organ/internal/brain/primate/get_attacking_limb(mob/living/carbon/human/target) return owner.get_bodypart(BODY_ZONE_HEAD) -/// Virtual monkeys that crave virtual bananas. Everything about them is ephemeral (except that bite). -/datum/species/monkey/holodeck - id = SPECIES_MONKEY_HOLODECK - knife_butcher_results = list() - meat = null - skinned_type = null - inherent_traits = list( - TRAIT_GENELESS, - TRAIT_GUN_NATURAL, - TRAIT_NO_AUGMENTS, - TRAIT_NO_BLOOD_OVERLAY, - TRAIT_NO_DNA_COPY, - TRAIT_NO_UNDERWEAR, - TRAIT_NO_ZOMBIFY, - TRAIT_NOBLOOD, - TRAIT_NOHUNGER, - TRAIT_VENTCRAWLER_NUDE, - ) - #undef MONKEY_SPEC_ATTACK_BITE_MISS_CHANCE diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 4da845c11df4..0c228775662d 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -37,6 +37,8 @@ * * DROP_BODYPARTS - Gibs will spawn with bodypart limbs present **/ /mob/living/proc/spawn_gibs(drop_bitflags=NONE) + if(flags_1 & HOLOGRAM_1) + return new /obj/effect/gibspawner/generic(drop_location(), src, get_static_viruses()) /** diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm index bd60e84d2427..dd2f66000be2 100644 --- a/code/modules/surgery/lipoplasty.dm +++ b/code/modules/surgery/lipoplasty.dm @@ -81,14 +81,17 @@ var/mob/living/carbon/human/human = target var/typeofmeat = /obj/item/food/meat/slab/human - if(human.dna && human.dna.species) + if(target.flags_1 & HOLOGRAM_1) + typeofmeat = null + else if(human.dna && human.dna.species) typeofmeat = human.dna.species.meat - var/obj/item/food/meat/slab/human/newmeat = new typeofmeat - newmeat.name = "fatty meat" - newmeat.desc = "Extremely fatty tissue taken from a patient." - newmeat.subjectname = human.real_name - newmeat.subjectjob = human.job - newmeat.reagents.add_reagent (/datum/reagent/consumable/nutriment, (removednutriment / 15)) //To balance with nutriment_factor of nutriment - newmeat.forceMove(target.loc) + if(typeofmeat) + var/obj/item/food/meat/slab/human/newmeat = new typeofmeat + newmeat.name = "fatty meat" + newmeat.desc = "Extremely fatty tissue taken from a patient." + newmeat.subjectname = human.real_name + newmeat.subjectjob = human.job + newmeat.reagents.add_reagent (/datum/reagent/consumable/nutriment, (removednutriment / 15)) //To balance with nutriment_factor of nutriment + newmeat.forceMove(target.loc) return ..() diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm index fd79b56b1a8a..2643dba07528 100644 --- a/code/modules/surgery/organs/external/tails.dm +++ b/code/modules/surgery/organs/external/tails.dm @@ -170,7 +170,7 @@ bodypart_overlay = /datum/bodypart_overlay/mutant/tail/monkey - dna_block = DNA_MONKEY_TAIL_BLOCK + dna_block = null ///Monkey tail bodypart overlay /datum/bodypart_overlay/mutant/tail/monkey diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey_holodeck.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey_holodeck.png deleted file mode 100644 index d1bac73e30e95e947c69e00c76bd93f665dc6c9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmV-M1G)T(P)P)t-sz`(#W z0095YW|2q$l)ttB0GWx2iT{~1nKJ;eu&^~aL5`4<8X6&1T4S@bvvhZWcYA|TPg@Zb z6e1=j7#tj@sV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pS zoZ^zil2jm5Nr{UyC9|j)q@Ig2ttc@!6~s2=QdV&Fa{-$O0Gj_84mqJ=L;wH+I7vi7 zR9J=WR@-u`Fbo8o#zgX^29lHi|I)KEl$P2uGkr#Fpq#n-$s^k@3jRQcwRY4unH7LPG=;t&$FXrr z8?Ny?VnzcqDY#>jVyE#vg*e85d!6s;Q;K|DA+isFBZuHQR&nwkeD6uY0|Wy2xK}!W zJ1C&Y)$lF`_Gn4~J%@@wU~=RfKBV9YK!_NEQrVGl?=S$4qJm?>NO2R8zX}14cHIH? zU`xD9G1*1}q_z6H6+1fem3;GFTDawsE*D8I3O24^@LfMJ!O zHAK#M^+CSss;iE5k`K=CH6S!P`euHR0B}P-XbOA`dVUary95Nap>O90)I$P7OQ4+} z(D7*IgB%ca9B=FtE1vVS0LO%vdzBC8##_7Uyx;tQ7MOfR0etv&;Ff~$@mh9NQGo9{ zSQ{r1(FBCNHu)l@h;0E&5lb`#*u^A9zxms7f^7SIHUY0mp_qWO0LuVP0gS*|;P)Yj z`6m>g39xkeW0Di67xPcqJI@4ICP4e14>qUAvEVU6HM~zSsf6b5e6U-+ga0q{JU?HW z!0QPZO_Mw1gDx%gqVS9VAG&HJ^?cV! Q8vp Date: Tue, 16 Jul 2024 15:27:38 -0500 Subject: [PATCH 05/13] Meme --- tgui/packages/tgui/interfaces/Vending.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/tgui/packages/tgui/interfaces/Vending.tsx b/tgui/packages/tgui/interfaces/Vending.tsx index b6106937a53f..d3e9071a8f26 100644 --- a/tgui/packages/tgui/interfaces/Vending.tsx +++ b/tgui/packages/tgui/interfaces/Vending.tsx @@ -14,10 +14,8 @@ import { } from 'tgui/components'; import { createSearch } from '../../common/string'; -import { useBackend } from '../backend'; import { Input } from '../components'; import { Window } from '../layouts'; -import { Category } from './PreferencesMenu/antagonists/base'; type VendingData = { onstation: boolean; From 0719e012eda3f570591f558608a5cbaae63e3e79 Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Wed, 17 Jul 2024 17:37:12 -0500 Subject: [PATCH 06/13] Monkified Lizards are just really small --- code/__DEFINES/mobs.dm | 1 + code/datums/mutations/body.dm | 24 ++-- .../mob/living/carbon/human/_species.dm | 3 + code/modules/mob/living/carbon/human/emote.dm | 2 +- .../mob/living/carbon/human/human_helpers.dm | 7 +- .../human/species_types/lizardpeople.dm | 18 +-- .../carbon/human/species_types/monkeys.dm | 104 ++++++++++++++++-- code/modules/mob/transform_procs.dm | 11 +- .../code/modules/language/highdraconic.dm | 15 ++- .../human/species_types/lizardpeople.dm | 9 ++ 10 files changed, 149 insertions(+), 45 deletions(-) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 1e0cfe1f835c..1e4e1ddd1c52 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -120,6 +120,7 @@ #define SPECIES_LIZARD_SILVER "silverscale" #define SPECIES_NIGHTMARE "nightmare" #define SPECIES_MONKEY "monkey" +#define SPECIES_MONKEY_LIZARD "kobold" #define SPECIES_MOTH "moth" #define SPECIES_MUSHROOM "mush" #define SPECIES_PLASMAMAN "plasmaman" diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index 436de72cb3dd..007742104570 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -200,18 +200,24 @@ var/original_name /datum/mutation/human/race/on_acquiring(mob/living/carbon/human/owner) - if(..()) + if(ismonkey(owner)) + return TRUE + . = ..() + if(.) return - if(!ismonkey(owner)) - original_species = owner.dna.species.type - original_name = owner.real_name - owner.fully_replace_character_name(null, "monkey ([rand(1,999)])") - . = owner.monkeyize() + original_species = owner.dna.species.type + original_name = owner.real_name + owner.monkeyize() /datum/mutation/human/race/on_losing(mob/living/carbon/human/owner) - if(!QDELETED(owner) && owner.stat != DEAD && (owner.dna.mutations.Remove(src)) && ismonkey(owner)) - owner.fully_replace_character_name(null, original_name) - . = owner.humanize(original_species) + . = ..() + if(.) + return + if(QDELETED(owner) || owner.stat == DEAD) + return + + owner.fully_replace_character_name(null, original_name) + owner.humanize(original_species) /datum/mutation/human/glow name = "Glowy" diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 0ed49bb1b9f7..83be5e52acef 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -190,6 +190,9 @@ GLOBAL_LIST_EMPTY(features_by_species) ///A list containing outfits that will be overridden in the species_equip_outfit proc. [Key = Typepath passed in] [Value = Typepath of outfit you want to equip for this specific species instead]. var/list/outfit_override_registry = list() + /// What species is our monkey form + var/datum/species/monkey_type = /datum/species/monkey + /////////// // PROCS // /////////// diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 3a086be09583..bbe8c103ba25 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -202,7 +202,7 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/carbon/human/hiss/get_sound(mob/user) - if(islizard(user)) + if(islizard(user) || ismonkey(user)) return pick(user.get_speech_sounds()) return null diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index fbd487c6465c..79ef66af7d6c 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -289,12 +289,9 @@ */ /mob/living/carbon/human/proc/get_mob_height() if(HAS_TRAIT(src, TRAIT_DWARF)) - if(ismonkey(src)) - return MONKEY_HEIGHT_DWARF - else - return HUMAN_HEIGHT_DWARF + return ismonkey(src) ? MONKEY_HEIGHT_DWARF : HUMAN_HEIGHT_DWARF - else if(ismonkey(src)) + if(ismonkey(src)) return MONKEY_HEIGHT_MEDIUM return mob_height diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 4cc265608435..cde32fc6726a 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -45,19 +45,7 @@ BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/lizard, ) -// NON-MODULE CHANGE -// /datum/species/lizard/on_species_gain(mob/living/carbon/new_lizard, datum/species/old_species, pref_load) -// . = ..() -// if(ishuman(new_lizard)) -// update_mail_goodies(new_lizard) - -// /datum/species/lizard/update_quirk_mail_goodies(mob/living/carbon/human/recipient, datum/quirk/quirk, list/mail_goodies = list()) -// if(istype(quirk, /datum/quirk/blooddeficiency)) -// mail_goodies += list( -// /obj/item/reagent_containers/blood/lizard -// ) -// return ..() -// NON-MODULE CHANGE end + monkey_type = /datum/species/monkey/lizard /// Lizards are cold blooded and do not stabilize body temperature naturally /datum/species/lizard/body_temperature_core(mob/living/carbon/human/humi, seconds_per_tick, times_fired) @@ -170,9 +158,10 @@ Lizard subspecies: ASHWALKERS mutantlungs = /obj/item/organ/internal/lungs/lavaland mutantbrain = /obj/item/organ/internal/brain/primitive inherent_traits = list( + TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION, TRAIT_MUTANT_COLORS, + TRAIT_TACKLING_TAILED_DEFENDER, TRAIT_VIRUSIMMUNE, - TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION, ) species_language_holder = /datum/language_holder/lizard/ash digitigrade_customization = DIGITIGRADE_FORCED @@ -203,6 +192,7 @@ Lizard subspecies: SILVER SCALED TRAIT_PIERCEIMMUNE, TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, + TRAIT_TACKLING_TAILED_DEFENDER, TRAIT_VIRUSIMMUNE, TRAIT_WINE_TASTER, ) diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm index a1ff60952dfd..dac961ba8821 100644 --- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm +++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm @@ -22,6 +22,7 @@ ) no_equip_flags = ITEM_SLOT_OCLOTHING | ITEM_SLOT_GLOVES | ITEM_SLOT_FEET | ITEM_SLOT_SUITSTORE changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN | SLIME_EXTRACT + species_cookie = /obj/item/food/grown/banana sexes = FALSE species_language_holder = /datum/language_holder/monkey @@ -39,6 +40,7 @@ payday_modifier = 1.5 ai_controlled_species = TRUE + monkey_type = null /datum/species/monkey/on_species_gain(mob/living/carbon/human/human_who_gained_species, datum/species/old_species, pref_load) . = ..() @@ -53,13 +55,6 @@ C.dna.remove_mutation(/datum/mutation/human/race) C.RemoveElement(/datum/element/human_biter) -/datum/species/monkey/check_roundstart_eligible() - // STOP ADDING MONKEY SUBTYPES YOU HEATHEN - // ok we killed monkey subtypes but we're keeping this in cause we can't trust you fuckers - if(check_holidays(MONKEYDAY) && id == SPECIES_MONKEY) - return TRUE - return ..() - /datum/species/monkey/get_scream_sound(mob/living/carbon/human/monkey) return get_sfx(SFX_SCREECH) @@ -179,3 +174,98 @@ return owner.get_bodypart(BODY_ZONE_HEAD) #undef MONKEY_SPEC_ATTACK_BITE_MISS_CHANCE + +/datum/species/monkey/lizard + name = "Kobold" + id = SPECIES_MONKEY_LIZARD + examine_limb_id = SPECIES_LIZARD + inherent_traits = list( + // monke + TRAIT_GUN_NATURAL, + TRAIT_NO_AUGMENTS, + TRAIT_NO_BLOOD_OVERLAY, + TRAIT_NO_DNA_COPY, + TRAIT_NO_UNDERWEAR, + TRAIT_VENTCRAWLER_NUDE, + TRAIT_WEAK_SOUL, + // unique + TRAIT_MUTANT_COLORS, + TRAIT_TACKLING_TAILED_DEFENDER, + ) + inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_REPTILE + digitigrade_customization = DIGITIGRADE_FORCED + mutant_bodyparts = list("legs" = DIGITIGRADE_LEGS) + external_organs = list( + /obj/item/organ/external/horns = "None", + /obj/item/organ/external/frills = "None", + /obj/item/organ/external/snout = "Round", + /obj/item/organ/external/spines = "None", + /obj/item/organ/external/tail/lizard = "Smooth", + ) + mutanttongue = /datum/species/lizard::mutanttongue + species_cookie = /datum/species/lizard::species_cookie + meat = /datum/species/lizard::meat + skinned_type = /datum/species/lizard::skinned_type + knife_butcher_results = list(/datum/species/lizard::meat = 5, /datum/species/lizard::skinned_type = 1) + species_language_holder = /datum/language_holder/lizard/ash/primative + + bodytemp_heat_damage_limit = /datum/species/lizard::bodytemp_heat_damage_limit + bodytemp_cold_damage_limit = /datum/species/lizard::bodytemp_cold_damage_limit + + ass_image = /datum/species/lizard::ass_image + + bodypart_overrides = list( + BODY_ZONE_HEAD = /obj/item/bodypart/head/lizard, + BODY_ZONE_CHEST = /obj/item/bodypart/chest/lizard/lizmonkey, + BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/lizard/lizmonkey, + BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/lizard/lizmonkey, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/digitigrade, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/digitigrade, + ) + +/datum/species/monkey/lizard/body_temperature_core(mob/living/carbon/human/humi, seconds_per_tick, times_fired) + return + +/datum/species/monkey/lizard/get_scream_sound(mob/living/carbon/human/lizard) + return pick( + 'sound/voice/lizard/lizard_scream_1.ogg', + 'sound/voice/lizard/lizard_scream_2.ogg', + 'sound/voice/lizard/lizard_scream_3.ogg', + ) + +/datum/species/monkey/lizard/get_laugh_sound(mob/living/carbon/human/lizard) + return 'sound/voice/lizard/lizard_laugh1.ogg' + +/obj/item/bodypart/arm/left/lizard/lizmonkey + wound_resistance = -10 + unarmed_damage_low = 1 + unarmed_damage_high = 2 + unarmed_effectiveness = 0 + +/obj/item/bodypart/arm/left/lizard/lizmonkey/Initialize(mapload) + . = ..() + name = "kobold [plaintext_zone]" + +/obj/item/bodypart/arm/right/lizard/lizmonkey + wound_resistance = -10 + unarmed_damage_low = 1 + unarmed_damage_high = 2 + unarmed_effectiveness = 0 + +/obj/item/bodypart/arm/right/lizard/lizmonkey/Initialize(mapload) + . = ..() + name = "kobold [plaintext_zone]" + +/obj/item/bodypart/chest/lizard/lizmonkey + wound_resistance = -10 + +/obj/item/bodypart/chest/lizard/lizmonkey/Initialize(mapload) + . = ..() + name = "kobold [plaintext_zone]" + +/obj/item/bodypart/head/lizard/lizmonkey + wound_resistance = -10 + +/obj/item/bodypart/head/lizard/lizmonkey/Initialize(mapload) + . = ..() + name = "kobold [plaintext_zone]" diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index b378d4e44c8c..779a2bcbe487 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -8,7 +8,7 @@ if (transformation_timer || HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return - if(ismonkey(src)) + if(!dna?.species?.monkey_type) return if(instant) @@ -29,12 +29,15 @@ /mob/living/carbon/proc/finish_monkeyize() transformation_timer = null - to_chat(src, span_boldnotice("You are now a monkey.")) + var/datum/species/monkey_type = dna?.species?.monkey_type + ASSERT(monkey_type) + var/monkey_name = lowertext(initial(monkey_type.name)) + to_chat(src, span_boldnotice("You are now a [monkey_name].")) REMOVE_TRAIT(src, TRAIT_NO_TRANSFORM, TEMPORARY_TRANSFORMATION_TRAIT) icon = initial(icon) RemoveInvisibility(type) - set_species(/datum/species/monkey) - name = "monkey" + set_species(monkey_type) + name = monkey_name regenerate_icons() set_name() SEND_SIGNAL(src, COMSIG_HUMAN_MONKEYIZE) diff --git a/maplestation_modules/code/modules/language/highdraconic.dm b/maplestation_modules/code/modules/language/highdraconic.dm index 6006bb2f8ed6..16d5036b56ad 100644 --- a/maplestation_modules/code/modules/language/highdraconic.dm +++ b/maplestation_modules/code/modules/language/highdraconic.dm @@ -4,10 +4,6 @@ /datum/language/impdraconic name = "Tiziran Draconic" desc = "A distinct dialect of Draconic common to lizards born and raised on Tizira." - //speech_verb = "hisses" - //ask_verb = "hisses" - //exclaim_verb = "roars" - //sing_verb = "sings" key = "l" flags = TONGUELESS_SPEECH space_chance = 25 @@ -33,6 +29,8 @@ /datum/language/impdraconic = list(LANGUAGE_ATOM), ) +#endif + // Edit to the silverscale language holder - silverscales can speak high draconic. /datum/language_holder/lizard/silver understood_languages = list( @@ -48,4 +46,11 @@ ) selected_language = /datum/language/uncommon -#endif +/datum/language_holder/lizard/ash/primative + selected_language = /datum/language/impdraconic + understood_languages = list( + /datum/language/impdraconic = list(LANGUAGE_ATOM), + ) + spoken_languages = list( + /datum/language/impdraconic = list(LANGUAGE_ATOM), + ) diff --git a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index f7ce076b139d..7556ed04f675 100644 --- a/maplestation_modules/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/maplestation_modules/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -26,3 +26,12 @@ horns?.bodypart_overlay.set_appearance_from_name("Simple") human.update_body(is_creating = TRUE) + +// Same for the small ones +/datum/species/monkey/lizard/get_species_speech_sounds(sound_type) + // These sounds have been ported from Goonstation. + return string_assoc_list(list( + 'maplestation_modules/sound/voice/lizard_1.ogg' = 80, + 'maplestation_modules/sound/voice/lizard_2.ogg' = 80, + 'maplestation_modules/sound/voice/lizard_3.ogg' = 80, + )) From 8f0ca7642daa70dff657cf5b8cc4d3c65c6e4391 Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Wed, 17 Jul 2024 17:38:12 -0500 Subject: [PATCH 07/13] Revert "Automatic changelog for PR #84979 [ci skip]" This reverts commit 4aa7c1817db25baffe3895af2b89153f27617dad. --- html/changelogs/AutoChangeLog-pr-84979.yml | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-84979.yml diff --git a/html/changelogs/AutoChangeLog-pr-84979.yml b/html/changelogs/AutoChangeLog-pr-84979.yml deleted file mode 100644 index 03a22c982a51..000000000000 --- a/html/changelogs/AutoChangeLog-pr-84979.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Style meter text is no longer blurry and doesnt overlap with UI anymore." \ No newline at end of file From 220b0035017600b8c4031df2ec6edf17e98cf2de Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Wed, 17 Jul 2024 17:45:28 -0500 Subject: [PATCH 08/13] Tweak --- code/datums/mutations/body.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index 007742104570..12ea36a9f222 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -191,8 +191,8 @@ /datum/mutation/human/race name = "Monkified" desc = "A strange genome, believing to be what differentiates monkeys from humans." - text_gain_indication = "You feel unusually monkey-like." - text_lose_indication = "You feel like your old self." + text_gain_indication = span_green("You feel unusually primitive.") + text_lose_indication = span_notice("You feel like your old self.") quality = NEGATIVE remove_on_aheal = FALSE locked = TRUE //Species specific, keep out of actual gene pool From 77aa862b5deb9e06fca709b2108fc853593719e4 Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Wed, 17 Jul 2024 17:49:41 -0500 Subject: [PATCH 09/13] Don't floor --- code/modules/mob/transform_procs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 779a2bcbe487..6a72d14a74cb 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -17,7 +17,7 @@ //Make mob invisible and spawn animation ADD_TRAIT(src, TRAIT_NO_TRANSFORM, TEMPORARY_TRANSFORMATION_TRAIT) - Paralyze(TRANSFORMATION_DURATION, ignore_canstun = TRUE) + Stun(TRANSFORMATION_DURATION, ignore_canstun = TRUE) icon = null cut_overlays() From 709ac4b5ed3464263eba75d9e597fe730e2de62e Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Wed, 17 Jul 2024 18:26:21 -0500 Subject: [PATCH 10/13] Huh ok --- .../living/carbon/human/species_types/monkeys.dm | 4 ++-- code/modules/mob/transform_procs.dm | 15 ++++++--------- .../code/modules/language/highdraconic.dm | 4 ++-- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/monkeys.dm b/code/modules/mob/living/carbon/human/species_types/monkeys.dm index dac961ba8821..0de795f74ef6 100644 --- a/code/modules/mob/living/carbon/human/species_types/monkeys.dm +++ b/code/modules/mob/living/carbon/human/species_types/monkeys.dm @@ -1,7 +1,7 @@ #define MONKEY_SPEC_ATTACK_BITE_MISS_CHANCE 25 /datum/species/monkey - name = "Monkey" + name = "\improper Monkey" id = SPECIES_MONKEY external_organs = list( /obj/item/organ/external/tail/monkey = "Monkey", @@ -176,7 +176,7 @@ #undef MONKEY_SPEC_ATTACK_BITE_MISS_CHANCE /datum/species/monkey/lizard - name = "Kobold" + name = "\improper Kobold" id = SPECIES_MONKEY_LIZARD examine_limb_id = SPECIES_LIZARD inherent_traits = list( diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 6a72d14a74cb..537da8eae2da 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -29,15 +29,12 @@ /mob/living/carbon/proc/finish_monkeyize() transformation_timer = null - var/datum/species/monkey_type = dna?.species?.monkey_type - ASSERT(monkey_type) - var/monkey_name = lowertext(initial(monkey_type.name)) - to_chat(src, span_boldnotice("You are now a [monkey_name].")) REMOVE_TRAIT(src, TRAIT_NO_TRANSFORM, TEMPORARY_TRANSFORMATION_TRAIT) icon = initial(icon) RemoveInvisibility(type) - set_species(monkey_type) - name = monkey_name + set_species(dna.species.monkey_type) + to_chat(src, span_boldnotice("You are now \a [dna.species.name].")) + name = lowertext(dna.species.name) regenerate_icons() set_name() SEND_SIGNAL(src, COMSIG_HUMAN_MONKEYIZE) @@ -60,7 +57,7 @@ //Make mob invisible and spawn animation ADD_TRAIT(src, TRAIT_NO_TRANSFORM, TEMPORARY_TRANSFORMATION_TRAIT) - Paralyze(TRANSFORMATION_DURATION, ignore_canstun = TRUE) + Stun(TRANSFORMATION_DURATION, ignore_canstun = TRUE) icon = null cut_overlays() @@ -73,15 +70,15 @@ /mob/living/carbon/proc/finish_humanize(species = /datum/species/human) transformation_timer = null - to_chat(src, span_boldnotice("You are now a human.")) REMOVE_TRAIT(src, TRAIT_NO_TRANSFORM, TEMPORARY_TRANSFORMATION_TRAIT) icon = initial(icon) RemoveInvisibility(type) set_species(species) + to_chat(src, span_boldnotice("You are now \a [dna.species.name].")) SEND_SIGNAL(src, COMSIG_MONKEY_HUMANIZE) return src -/mob/living/carbon/human/finish_humanize(species = /datum/species/human, instant = FALSE) +/mob/living/carbon/human/finish_humanize(species = /datum/species/human) underwear = "Nude" undershirt = "Nude" socks = "Nude" diff --git a/maplestation_modules/code/modules/language/highdraconic.dm b/maplestation_modules/code/modules/language/highdraconic.dm index 16d5036b56ad..b671914981b3 100644 --- a/maplestation_modules/code/modules/language/highdraconic.dm +++ b/maplestation_modules/code/modules/language/highdraconic.dm @@ -29,8 +29,6 @@ /datum/language/impdraconic = list(LANGUAGE_ATOM), ) -#endif - // Edit to the silverscale language holder - silverscales can speak high draconic. /datum/language_holder/lizard/silver understood_languages = list( @@ -46,6 +44,8 @@ ) selected_language = /datum/language/uncommon +#endif + /datum/language_holder/lizard/ash/primative selected_language = /datum/language/impdraconic understood_languages = list( From 9b5a9cbe6bb494d5dd3f20ca244d2c632f6a0db9 Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Fri, 19 Jul 2024 03:37:19 -0500 Subject: [PATCH 11/13] F u --- code/modules/reagents/reagent_containers/hypospray.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 54a742e8d99b..4458793027f4 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -188,8 +188,8 @@ /obj/item/reagent_containers/hypospray/medipen/methamphetamine name = "methamphetamine medipen" - volume = 24 - amount_per_transfer_from_this = 24 + volume = 25 + amount_per_transfer_from_this = 25 desc = "Contains a relatively safe quantity of methamphetamine, along with mannitol to ensure that brain damage is kept at a minimum." list_reagents = list(/datum/reagent/drug/methamphetamine = 10, /datum/reagent/medicine/mannitol = 15) From 525c518f54b09568eaa0817eac2a77e09fcfed66 Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Sat, 20 Jul 2024 14:53:15 -0500 Subject: [PATCH 12/13] Upstream fixes --- code/datums/dna.dm | 5 +++-- code/datums/mutations/body.dm | 8 +++++--- code/game/machinery/computer/dna_console.dm | 2 +- tgui/packages/tgui/interfaces/DnaConsole/DnaScanner.jsx | 3 ++- tgui/packages/tgui/interfaces/DnaConsole/constants.ts | 5 +++-- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index f2e4100989ac..c275ed4b55cd 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -410,8 +410,9 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block()) if(holder && (human_mutation in mutations)) set_se(0, human_mutation) . = human_mutation.on_losing(holder) - qdel(human_mutation) // qdel mutations on removal - update_instability(FALSE) + if(!(human_mutation in mutations)) + qdel(human_mutation) // qdel mutations on removal + update_instability(FALSE) return /** diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index 12ea36a9f222..7686c00dde48 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -200,20 +200,22 @@ var/original_name /datum/mutation/human/race/on_acquiring(mob/living/carbon/human/owner) - if(ismonkey(owner)) - return TRUE . = ..() if(.) return + if(ismonkey(owner)) + return original_species = owner.dna.species.type original_name = owner.real_name owner.monkeyize() /datum/mutation/human/race/on_losing(mob/living/carbon/human/owner) + if(owner.stat == DEAD) + return . = ..() if(.) return - if(QDELETED(owner) || owner.stat == DEAD) + if(QDELETED(owner)) return owner.fully_replace_character_name(null, original_name) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 638f4e3367a5..1fe2c90a7791 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -20,7 +20,7 @@ #define GENETIC_DAMAGE_ACCURACY_MULTIPLIER 3 /// Special status indicating a scanner occupant is transforming eg. from monkey to human -#define STATUS_TRANSFORMING 4 +#define STATUS_TRANSFORMING 5 /// Multiplier for how much genetic damage received from DNA Console functionality #define GENETIC_DAMAGE_IRGENETIC_DAMAGE_MULTIPLIER 1 diff --git a/tgui/packages/tgui/interfaces/DnaConsole/DnaScanner.jsx b/tgui/packages/tgui/interfaces/DnaConsole/DnaScanner.jsx index 22fff93dfdda..8d6e53dbba63 100644 --- a/tgui/packages/tgui/interfaces/DnaConsole/DnaScanner.jsx +++ b/tgui/packages/tgui/interfaces/DnaConsole/DnaScanner.jsx @@ -10,6 +10,7 @@ import { import { SUBJECT_CONCIOUS, SUBJECT_DEAD, + SUBJECT_HARD_CRIT, SUBJECT_SOFT_CRIT, SUBJECT_TRANSFORMING, SUBJECT_UNCONSCIOUS, @@ -81,7 +82,7 @@ const SubjectStatus = (props) => { ); } - if (status === SUBJECT_UNCONSCIOUS) { + if (status === SUBJECT_UNCONSCIOUS || status === SUBJECT_HARD_CRIT) { return ( Unconscious diff --git a/tgui/packages/tgui/interfaces/DnaConsole/constants.ts b/tgui/packages/tgui/interfaces/DnaConsole/constants.ts index c588c765e765..e3d11a5dcd50 100644 --- a/tgui/packages/tgui/interfaces/DnaConsole/constants.ts +++ b/tgui/packages/tgui/interfaces/DnaConsole/constants.ts @@ -31,8 +31,9 @@ export const STORAGE_MODE_ADVINJ = 'injector'; export const SUBJECT_CONCIOUS = 0; export const SUBJECT_SOFT_CRIT = 1; export const SUBJECT_UNCONSCIOUS = 2; -export const SUBJECT_DEAD = 3; -export const SUBJECT_TRANSFORMING = 4; +export const SUBJECT_HARD_CRIT = 3; +export const SUBJECT_DEAD = 4; +export const SUBJECT_TRANSFORMING = 5; export const PULSE_STRENGTH_MAX = 15; export const PULSE_DURATION_MAX = 30; From 88486f8341a186dbc65c9937021720f619cd1e8d Mon Sep 17 00:00:00 2001 From: MrMelbert Date: Sun, 21 Jul 2024 17:33:04 -0500 Subject: [PATCH 13/13] Screenshot tests --- ...reenshot_humanoids__datum_species_monkey.png | Bin 838 -> 945 bytes ...t_humanoids__datum_species_monkey_lizard.png | Bin 0 -> 1188 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey_lizard.png diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_monkey.png index d1bac73e30e95e947c69e00c76bd93f665dc6c9e..5fd259a0ed4fa5a3b2f9ecf2982e7f1a6e2965f6 100644 GIT binary patch delta 742 zcmVpt^c)HTfvvO7;j#*z0ECDlY}zw2?i~uiRuphl7;T&dH7VR8NzMz17 z_;%o$g5;wuJ6lkI?>cldP9mZSNb*GTyD3F%3s{Qy3U!x|>tYh42Yr8ELAHG?p(cPO zOq0T{0-FU`3aBmtC2$t_xd~$a(l7Z)fQ99^lbm>^n19ONc_hG60qFE%u5w{p&@N*X z@6!YXixEv#$n@GIv(-a@#@p?7e`o@aJKzyCx0w%~W<4Yt{?_b$_V6aWAK07*qoM6N<$g6IiYwg3PC delta 634 zcmV-=0)_pt2gU}FBmqm2B{~@q6ci#RCKwzXr>eHp*WZbYqIfd^DZQp6k$ZuEI7vi7 zR9J=WR@-u`Fbo8o#zgX^29lHi|I)KEl$P2uGkr#Fpq#n-$s^k@3jRQcwRY4unH7LPG=;t&$FXrr z8?Ny?VnzcqDY#>jVyE#vg*e84fP0PO$aqlnyj-rBN!bouwkiQB6j&|Jv z_FzlAOEKA9z~a9W$G5ZcF~R}I)3x5yCXh^dL@3#PK0|UFZR45sBdaifC+1@HT>&RZ za*jtDt|nj1G%wHBzh#~jfoWO5UY6-?cGkWHxyS^eF@fNm@ttxgBZnxzv3>?;I2wRq zm7q05&Up1fzUr#0j&+g`&hRxLG&=fbevklgLq2E=Y}1p7XN+$Ap)Al@I5}Tf6GK-~50Un0!S6eE4?YmV)r{T6R=X zfbTk38z&Lb1cbac`68u=Z2?OWOEd)7#Uw_*`P*@VZ2NpR0k27+n1HeX%K%LQjKEpo z_aTV+ClsFvuypxjk`t#F^H143&jeT|K>MB#HmAq2;4wlqyiYJusf6b5e6U-+ga0q{ zJU?HW!0QPZO_Mw1gDx%gqVS9VAG&HJ U^?cV!8vprw$#_(iHo8D2><{D004RbnDZa400001bW%=J06^y0W&i*HWqMRt zbVOxyV{&P5bZKvH004NLQ&wYE62mqS@7!En1 zVMG7`1C2>UK~z|U%~$Js+aL_Z3aD$qhLNOQo%esw9SLX27lhmHSCzJQeWZgd&?V0O zD48Dqejg`thsk?C9pv`=xC?>#5JEUGhhX8J$piPq-ogpw6g)n9H^4<~+y&y7;D6zR zJL;Fvr%hfgTwHwhihJ8deXjVci90&t9SIH+vl&EYW$?^LGl`0;m`f-bSKEGxzeVC=GnBOCoJz`hNyWtDvcP^>;sDPe$gs!N&;UMz z0TO2mcO|CHxBR$AQw0hYpf7vMbss*HM&)dQpCAcuelWLv4osty+w38MTI z6Lwq@2|+4@eDm1rf>rXE0QoE~>=0DhiZMZ9k9zUH1f&FT!K^pB0ti?L>=lHd3WK+C zA4CC1&P-Mj#f55T}1^X}AFguj&!7I8A=SD#f){Ig}{NX=T z0aw%hBdF_G0Tg#P_$F?pRTXeG3D#zT<<9`I54AvQsS z*h-~4Lz|)oXdAMI_NdskAZ7P<0dT1(?xsCDH>$STd2b>udY;kb4F=ewZ|AhfAoeKR zb2J#xcV|?yRE182EETfl0;5<3KGE>#*m)O!!K?WfN?NNrN+Jcvq=#DQG` zxR8|KISA7HrD&$l2$EWB<^qAL zj0j;&APl9FneJDKU?UjSH1anB(*>CwlwhwWDuFi|{8ig_BiJiA8-Y}nCm&emxGxj< zr@C~NdMDqhDoT=F5I2H=f>hhrue%S|Z9KqJ)<_K*SmVq36;uj*qiExS%nPiO0T}H0 z00V;9LrKK-7!?0000