From 332ec63e8540a90b3a48bd40d826eb22e0422fc6 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Fri, 10 Feb 2023 20:59:52 -0500 Subject: [PATCH 01/53] Update extensions.json --- .vscode/extensions.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 37c401bfe4..0fc5b8b75d 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -17,7 +17,8 @@ "pranaygp.vscode-css-peek", "cschlosser.doxdocgen", "oderwat.indent-rainbow", - "ms-vsliveshare.vsliveshare-pack", - "Goonstation.goonstation-extpack" + "goonstation.goonstation-extpack", + "ms-vsliveshare.vsliveshare", + "hbenl.vscode-test-explorer-liveshare" ] } From a5e1fab5bbaf05afe7a837d03ee22e1770401472 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Mon, 13 Feb 2023 15:12:56 -0500 Subject: [PATCH 02/53] sauce?????????? --- config/splurt/discord.txt | 5 +++ config/splurt/title_screens_sources.json | 7 ++++ .../configuration/entries/splurt_discord.dm | 2 + .../code/modules/tgs/chat_commands.dm | 42 +++++++++++++++++++ 4 files changed, 56 insertions(+) create mode 100644 config/splurt/title_screens_sources.json diff --git a/config/splurt/discord.txt b/config/splurt/discord.txt index b58f4479c0..e182f12f43 100644 --- a/config/splurt/discord.txt +++ b/config/splurt/discord.txt @@ -34,3 +34,8 @@ ## Uncomment this if your players need to remain in the discord to keep verification ## ## Note, this only produces aesthetic changes, the real magic happens with the redbot modules #FORCED_DISCORD_STAY + +# Enable the sauce commands +## Uncomment if you've set up title_screens_sources.json to source your splashscreens +## This enables people to use splashsauce and allsplashscreens to get info about the splashscreens +#SAUCE_COMMAND_ENABLED diff --git a/config/splurt/title_screens_sources.json b/config/splurt/title_screens_sources.json new file mode 100644 index 0000000000..ccad14e78c --- /dev/null +++ b/config/splurt/title_screens_sources.json @@ -0,0 +1,7 @@ +{ + "example_screen.png": { + "name": "name of the pic", + "author": "name of the author", + "link": "link to the pic" + } +} diff --git a/modular_splurt/code/controllers/configuration/entries/splurt_discord.dm b/modular_splurt/code/controllers/configuration/entries/splurt_discord.dm index c2c100fe6d..5c1750a560 100644 --- a/modular_splurt/code/controllers/configuration/entries/splurt_discord.dm +++ b/modular_splurt/code/controllers/configuration/entries/splurt_discord.dm @@ -10,3 +10,5 @@ config_entry_value = "verify" /datum/config_entry/flag/forced_discord_stay + +/datum/config_entry/flag/sauce_command_enabled diff --git a/modular_splurt/code/modules/tgs/chat_commands.dm b/modular_splurt/code/modules/tgs/chat_commands.dm index f6c994c09b..1577638645 100644 --- a/modular_splurt/code/modules/tgs/chat_commands.dm +++ b/modular_splurt/code/modules/tgs/chat_commands.dm @@ -6,3 +6,45 @@ /datum/tgs_chat_command/tidi/Run(datum/tgs_chat_user/sender, params) return "Time Dilation: [round(SStime_track.time_dilation_current,1)]% AVG:([round(SStime_track.time_dilation_avg_fast,1)]%, [round(SStime_track.time_dilation_avg,1)]%, [round(SStime_track.time_dilation_avg_slow,1)]%)" +/datum/tgs_chat_command/splashsauce + name = "splashsauce" + help_text = "Sauce of the current splashscreen" + +/datum/tgs_chat_command/splashsauce/Run(datum/tgs_chat_user/sender, params) + //Check if the sauce system is turned on + if(!CONFIG_GET(flag/sauce_command_enabled)) + return "This command is not enabled!" + + //Get the current splashscreen + var/list/raw_path = splittext(SStitle.file_path, "/") + var/current_splashscreen = raw_path[raw_path.len] + + //Get the info of all splashscreens + var/list/splashinfo = safe_json_decode(rustg_file_read("[global.config.directory]/splurt/title_screens_sources.json")) + + //Find the info of the current splashscreen + if(!splashinfo.Find(current_splashscreen)) + return "The current splashscreen has no info set up yet!" + return "*[splashinfo[current_splashscreen]["name"]] by* **[splashinfo[current_splashscreen]["author"]]**\n[splashinfo[current_splashscreen]["link"]]" + +/datum/tgs_chat_command/allsplashscreens + name = "allsplashscreens" + help_text = "All info for all splashscreens currently in the server" + +/datum/tgs_chat_command/allsplashscreens/Run(datum/tgs_chat_user/sender, params) + //Check if the sauce system is turned on + if(!CONFIG_GET(flag/sauce_command_enabled)) + return "This command is not enabled!" + + //Get the info of all splashscreens + var/list/splashinfo = safe_json_decode(rustg_file_read("[global.config.directory]/splurt/title_screens_sources.json")) + if(!splashinfo.len) + return "There are no splashscreens set up yet!" + + //Organize the splashscreen info + var/list/data = list() + for(var/pic in splashinfo) + var/list/info = splashinfo[pic] + var/text = "- [info.Join(" - ")]" + LAZYADD(data, text) + return "Currently active splashscreens: ```yaml\n[data.Join("\n")]```" From c3e6b397fe3f25648fb13056b3ec8cad3d4d5c43 Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Sat, 18 Feb 2023 15:35:25 -0500 Subject: [PATCH 03/53] Minor Hypnotic Gaze quirk improvements This commit does the following for the Hypnotic Gaze quirk: - Add examine text - Add remove event - Change spawn event to use add --- modular_splurt/code/datums/traits/neutral.dm | 30 ++++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index 5fdca5e6f5..ef6346c66b 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -70,11 +70,31 @@ lose_text = span_notice("Your eyes return to normal.") medical_record_text = "Prolonged exposure to Patient's eyes exhibits soporific effects." -/datum/quirk/Hypnotic_gaze/on_spawn() - var/mob/living/carbon/human/Hypno_eyes = quirk_holder - var/datum/action/innate/Hypnotize/spell = new - spell.Grant(Hypno_eyes) - spell.owner = Hypno_eyes +/datum/quirk/Hypnotic_gaze/add() + // Define quirk mob + var/mob/living/carbon/human/quirk_mob = quirk_holder + + // Add quirk ability action datum + var/datum/action/innate/Hypnotize/act_hypno = new + act_hypno.Grant(quirk_mob) + + // Add examine text + RegisterSignal(quirk_holder, COMSIG_PARENT_EXAMINE, .proc/quirk_examine_Hypnotic_gaze) + +/datum/quirk/Hypnotic_gaze/remove() + // Define quirk mob + var/mob/living/carbon/human/quirk_mob = quirk_holder + + // Remove quirk ability action datum + var/datum/action/innate/Hypnotize/act_hypno = locate() in quirk_mob.actions + act_hypno.Remove(quirk_mob) + + // Remove examine text + UnregisterSignal(quirk_holder, COMSIG_PARENT_EXAMINE) + +// Quirk examine text +/datum/quirk/Hypnotic_gaze/proc/quirk_examine_Hypnotic_gaze(atom/examine_target, mob/living/carbon/human/examiner, list/examine_list) + examine_list += span_hypnophrase("[quirk_holder.p_their(TRUE)] eyes glimmer with an entrancing power...") /datum/quirk/overweight name = "Overweight" From d000275014dc9848c7d70d15bfe9bd9ae9c7d65c Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Sat, 18 Feb 2023 16:29:32 -0500 Subject: [PATCH 04/53] Add new cybernetic organ: Mesmer Eyes Adds the new Mesmer Eyes cybernetic organ, which can be used to grant any crew member the Hypnotic Gaze quirk ability. Users who already posses the quirk will instead switch to brainwashing mode, in which the ability creates brainwashed victims. The new organ can be researched after both Alien Surgery and Cybernetic Organs, and printed in the same location as other cybernetic eyes. Also reduces the intensity of examine text to prevent it from being overly distracting. --- modular_splurt/code/datums/traits/neutral.dm | 2 +- .../code/datums/traits/trait_actions.dm | 123 ++++++++++++++---- .../research/designs/medical_designs.dm | 7 + .../research/techweb/nodes/medical_nodes.dm | 8 ++ .../code/modules/surgery/organs/eyes.dm | 69 ++++++++++ 5 files changed, 186 insertions(+), 23 deletions(-) diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index ef6346c66b..eb8dc327fd 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -94,7 +94,7 @@ // Quirk examine text /datum/quirk/Hypnotic_gaze/proc/quirk_examine_Hypnotic_gaze(atom/examine_target, mob/living/carbon/human/examiner, list/examine_list) - examine_list += span_hypnophrase("[quirk_holder.p_their(TRUE)] eyes glimmer with an entrancing power...") + examine_list += "[quirk_holder.p_their(TRUE)] eyes glimmer with an entrancing power..." /datum/quirk/overweight name = "Overweight" diff --git a/modular_splurt/code/datums/traits/trait_actions.dm b/modular_splurt/code/datums/traits/trait_actions.dm index da19988868..bd70d3db54 100644 --- a/modular_splurt/code/datums/traits/trait_actions.dm +++ b/modular_splurt/code/datums/traits/trait_actions.dm @@ -12,6 +12,70 @@ icon_icon = 'modular_splurt/icons/mob/actions/lewd_actions/lewd_icons.dmi' background_icon_state = "bg_alien" + // Should this create a brainwashed victim? + // Enabled by using Mesmer Eyes with the quirk + var/mode_brainwash = FALSE + + // Terminology used + var/term_hypno = "hypnotize" + var/term_suggest = "suggestion" + +/datum/action/innate/Hypnotize/proc/set_brainwash(set_to = FALSE) + // Check if state will change + if(mode_brainwash == set_to) + // Do nothing + return + + // Set new variable + mode_brainwash = set_to + + // Define toggle message + var/toggle_message = "experiences an error?" + + // Define log message type + var/log_message_type = "somehow screwed up" + + // Check if brainwashing + if(mode_brainwash) + // Set ability text + name = "Brainwash" + desc = "Stare deeply into someone's eyes, and force them to become your loyal slave." + + // Set terminology + term_hypno = "brainwash" + term_suggest = "command" + + // Set message suffix + toggle_message = "suddenly feels more intense!" + + // Set log message type + log_message_type = "GAINED" + + // Not brainwashing + else + // Set ability text + name = "Hypnotize" + desc = "Stare deeply into someone's eyes, drawing them into a hypnotic slumber." + + // Set terminology + term_hypno = "hypnotize" + term_suggest = "suggestion" + + // Set message suffix + toggle_message = "fades back to normal levels..." + + // Set log message type + log_message_type = "LOST" + + // Update buttons + owner.update_action_buttons() + + // Alert user + to_chat(owner, span_mind_control("Your hypnotic power [toggle_message]")) + + // Log interaction + log_admin("[key_name(owner)] [log_message_type] hypnotic brainwashing powers.") + /datum/action/innate/Hypnotize/Activate() // Define action owner var/mob/living/carbon/human/action_owner = owner @@ -28,7 +92,7 @@ // Check for cyborg if(iscyborg(grab_target)) // Warn the user, then return - to_chat(action_owner, span_warning("You can't hypnotize a cyborg!")) + to_chat(action_owner, span_warning("You can't [term_hypno] a cyborg!")) return // Check for alien @@ -49,13 +113,13 @@ // Check if target is alive if(!isliving(grab_target)) // Warn the user, then return - to_chat(action_owner, span_warning("You can't hypnotize the dead!")) + to_chat(action_owner, span_warning("You can't [term_hypno] the dead!")) return // Check for aggressive grab if(action_owner.grab_state < GRAB_AGGRESSIVE) // Warn the user, then return - to_chat(action_owner, span_warning("You need a stronger grip before trying this!")) + to_chat(action_owner, span_warning("You need a stronger grip before trying to [term_hypno] [grab_target]!")) return // Define target @@ -91,7 +155,7 @@ // Check if target has eye protection if(action_target.get_eye_protection()) // Warn the user, then return - to_chat(action_owner, span_warning("You have difficulty focusing on [action_target]'s eyes due to some form of protection, and are left unable to hypnotize them.")) + to_chat(action_owner, span_warning("You have difficulty focusing on [action_target]'s eyes due to some form of protection, and are left unable to [term_hypno] them.")) to_chat(action_target, span_notice("[action_owner] stares intensely at you, but stops after a moment.")) return @@ -115,7 +179,7 @@ to_chat(action_owner, span_warning("You sense that [action_target] would rather not be hypnotized, and decide to respect their wishes.")) to_chat(action_target, span_notice("[action_owner] stares into your eyes with a strange conviction, but turns away after a moment.")) return - + // Check for mindshield implant if(HAS_TRAIT(action_target, TRAIT_MINDSHIELD)) // Warn the users, then return @@ -134,7 +198,7 @@ // Check for sleep if(action_target.IsSleeping()) // Warn the user, then return - to_chat(action_owner, span_warning("You can't hypnotize [action_target] whilst [action_target.p_theyre()] asleep!")) + to_chat(action_owner, span_warning("You can't [term_hypno] [action_target] whilst [action_target.p_theyre()] asleep!")) return // Check for combat mode @@ -152,7 +216,7 @@ if(!do_mob(action_owner, action_target, 5 SECONDS)) // Action timer was interrupted // Warn the user, then return - to_chat(action_owner, span_warning("You lose concentration on [action_target], and fail to hypnotize [action_target.p_them()]!")) + to_chat(action_owner, span_warning("You lose concentration on [action_target], and fail to [term_hypno] [action_target.p_them()]!")) to_chat(action_target, span_notice("[action_owner]'s gaze is broken prematurely, freeing you from any potential effects.")) return @@ -162,18 +226,21 @@ // Check for non-consensual setting if(action_target.client?.prefs.nonconpref != "Yes") // Non-consensual is NOT enabled + // Define warning suffix + var/warning_target = (mode_brainwash ? "You will become a brainwashed victim, and be required to follow all orders given. [action_owner] accepts all responsibility for antagonistic orders." : "These are only suggestions, and you may disobey cases that strongly violate your character.") + // Prompt target for consent response - input_consent = alert(action_target, "Will you fall into a hypnotic stupor? This will allow [action_owner] to issue hypnotic suggestions.", "Hypnosis", "Yes", "No") + input_consent = alert(action_target, "Will you fall into a hypnotic stupor? This will allow [action_owner] to issue hypnotic [term_suggest]s. [warning_target]", "Hypnosis", "Yes", "No") // When consent is denied if(input_consent == "No") // Warn the users, then return - to_chat(action_owner, span_warning("[action_target]'s attention breaks, despite the attempt to hypnotize [action_target.p_them()]! [action_target.p_they()] clearly don't want this!")) + to_chat(action_owner, span_warning("[action_target]'s attention breaks, despite the attempt to [term_hypno] [action_target.p_them()]! [action_target.p_they()] clearly don't want this!")) to_chat(action_target, span_notice("Your concentration breaks as you realize you have no interest in following [action_owner]'s words!")) return // Display local message - action_target.visible_message(span_warning("[action_target] falls into a deep slumber!"), span_danger("Your eyelids gently shut as you fall into a deep slumber. All you can hear is [action_owner]'s voice as you commit to following all of their suggestions.")) + action_target.visible_message(span_warning("[action_target] falls into a deep slumber!"), span_danger("Your eyelids gently shut as you fall into a deep slumber. All you can hear is [action_owner]'s voice as you commit to following all of their [term_suggest]s.")) // Set sleeping action_target.SetSleeping(1200) @@ -181,13 +248,16 @@ // Set drowsiness action_target.drowsyness = max(action_target.drowsyness, 40) + // Define warning suffix + var/warning_owner = (mode_brainwash ? "You are responsible for any antagonistic actions they take as a result of the brainwashing." : "This is only a suggestion, and [action_target.p_they()] may disobey if it violates [action_target.p_their()] character.") + // Prompt action owner for response - var/input_suggestion = input("What would you like to suggest [action_target] do? Leave blank to release [action_target.p_them()] instead.", "Hypnotic suggestion", null, null) - + var/input_suggestion = input("What would you like to suggest [action_target] do? Leave blank to release [action_target.p_them()] instead. [warning_owner]", "Hypnotic [term_suggest]", null, null) + // Check if input text exists if(!input_suggestion) // Alert user of no input - to_chat(action_owner, "You decide not to give [action_target] a suggestion.") + to_chat(action_owner, "You decide not to give [action_target] a [term_suggest].") // Remove sleep, then return action_target.SetSleeping(0) @@ -196,16 +266,25 @@ // Sanitize input text input_suggestion = sanitize(input_suggestion) - // Display message to users - to_chat(action_owner, "You whisper your suggestion in a smooth calming voice to [action_target]") - to_chat(action_target, span_hypnophrase("...[input_suggestion]...")) + // Check if brainwash mode + if(mode_brainwash) + // Create brainwash objective + brainwash(action_target, input_suggestion) + + // Not in brainwash mode + else + // Display message to target + to_chat(action_target, span_mind_control("...[input_suggestion]...")) + + // Display message to action owner + to_chat(action_owner, "You whisper your [term_suggest] in a smooth calming voice to [action_target]") // Play a sound effect playsound(action_target, 'sound/magic/domain.ogg', 20, 1) // Display local message action_target.visible_message(span_warning("[action_target] wakes up from their deep slumber!"), span_danger("Your eyelids gently open as you see [action_owner]'s face staring back at you.")) - + // Remove sleep, then return action_target.SetSleeping(0) return @@ -579,7 +658,7 @@ if(action_owner.stat != DEAD) // Warn user in chat to_chat(action_owner, "You can't use this ability while alive!") - + // Return return @@ -602,22 +681,22 @@ // Condition: Damage limit, brute if(action_owner.getBruteLoss() >= MAX_REVIVE_BRUTE_DAMAGE) revive_failed += "\n- Your body is too battered!" - + // Condition: Damage limit, burn if(action_owner.getFireLoss() >= MAX_REVIVE_FIRE_DAMAGE) revive_failed += "\n- Your body is too badly burned!" // Condition: Suicide if(action_owner.suiciding) - revive_failed += "\n- You chose this path." + revive_failed += "\n- You chose this path." // Condition: No revivals if(HAS_TRAIT(action_owner, TRAIT_NOCLONE)) - revive_failed += "\n- You only had one chance." + revive_failed += "\n- You only had one chance." // Condition: Demonic contract if(action_owner.hellbound) - revive_failed += "\n- The soul pact must be honored." + revive_failed += "\n- The soul pact must be honored." // Check for failure if(revive_failed) diff --git a/modular_splurt/code/modules/research/designs/medical_designs.dm b/modular_splurt/code/modules/research/designs/medical_designs.dm index e5228d97ec..99343587b5 100644 --- a/modular_splurt/code/modules/research/designs/medical_designs.dm +++ b/modular_splurt/code/modules/research/designs/medical_designs.dm @@ -74,6 +74,13 @@ /datum/design/cyberimp_thermals category = list("Cybernetics", "Medical Designs") +// Derivative of glow eyes +/datum/design/cyberimp_gloweyes/cyberimp_hypnoeyes + name = "Mesmer Eyes" + desc = "Cybernetic eyes with integrated memetic sub-systems." + id = "ci-hypnoeyes" + build_path = /obj/item/organ/eyes/robotic/hypno + //Cybernetic implants /datum/design/cyberimp_breather diff --git a/modular_splurt/code/modules/research/techweb/nodes/medical_nodes.dm b/modular_splurt/code/modules/research/techweb/nodes/medical_nodes.dm index eeb846271f..9b049b908f 100644 --- a/modular_splurt/code/modules/research/techweb/nodes/medical_nodes.dm +++ b/modular_splurt/code/modules/research/techweb/nodes/medical_nodes.dm @@ -36,3 +36,11 @@ LAZYREMOVE(design_ids, removed_designs) LAZYADD(design_ids, added_designs) . = ..() + +/datum/techweb_node/alien_cyber_organs + id = "alien_cyber_organs" + display_name = "Alien Cybernetic Organs" + description = "Morally dubious experimental parts." + prereq_ids = list("cyber_organs", "alien_surgery") + design_ids = list("ci-hypnoeyes") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) diff --git a/modular_splurt/code/modules/surgery/organs/eyes.dm b/modular_splurt/code/modules/surgery/organs/eyes.dm index 6959e01a60..440fbd2bc2 100644 --- a/modular_splurt/code/modules/surgery/organs/eyes.dm +++ b/modular_splurt/code/modules/surgery/organs/eyes.dm @@ -6,3 +6,72 @@ /obj/item/organ/eyes/ipc name = "IPC eyes" + +/obj/item/organ/eyes/robotic/hypno + name = "mesmer eyes" + desc = "Cybernetic eyes with integrated memetic sub-systems. They're full of swirls and bright colors!" + +// On add organ +/obj/item/organ/eyes/robotic/hypno/Insert(mob/living/carbon/eye_user, special, drop_if_replaced) + . = ..() + + // Check parent return + if(!.) + return + + // Define ability + var/datum/action/innate/Hypnotize/eye_ability + + // Check for pre-existing hypnotic quirk + if(eye_user.has_quirk(/datum/quirk/Hypnotic_gaze)) + // Locate existing action + eye_ability = locate() in eye_user.actions + + // Enable brainwash mode, then return + eye_ability.set_brainwash(TRUE) + return + + // Create new hypnotic ability + eye_ability = new + + // Grant action to user + eye_ability.Grant(eye_user) + + // Add trait + ADD_TRAIT(eye_user, TRAIT_HYPNOTIC_GAZE, ORGAN_TRAIT) + + // Alert user + to_chat(eye_user, span_nicegreen("Your [src] begin to glimmer with an entrancing power!")) + + // Add examine text + RegisterSignal(eye_user, COMSIG_PARENT_EXAMINE, .proc/examine_user) + +// On remove organ +/obj/item/organ/eyes/robotic/hypno/Remove(mob/living/carbon/eye_user, special, drop_if_replaced) + . = ..() + + // Define ability + var/datum/action/innate/Hypnotize/eye_ability = locate() in eye_user.actions + + // Check for pre-existing hypnotic quirk + if(eye_user.has_quirk(/datum/quirk/Hypnotic_gaze)) + // Disable brainwash mode, then return + eye_ability.set_brainwash(FALSE) + return + + // Remove ability + eye_ability.Remove(eye_user) + + // Remove trait + REMOVE_TRAIT(eye_user, TRAIT_HYPNOTIC_GAZE, ORGAN_TRAIT) + + // Alert user + to_chat(eye_user, span_warning("You power of suggestion fades.")) + + // Remove examine text + UnregisterSignal(eye_user, COMSIG_PARENT_EXAMINE) + +// Organ examine text +/obj/item/organ/eyes/robotic/hypno/proc/examine_user(atom/examine_target, mob/living/carbon/human/examiner, list/examine_list) + // Add examine text + examine_list += "[usr.p_their(TRUE)] eyes glimmer with an entrancing power." From 82b4a4e9c50cb419f7b51fa2a59b95e381128f5c Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Sat, 18 Feb 2023 17:59:51 -0500 Subject: [PATCH 05/53] Hypnotic Gaze standards improvements This commit makes various changes to the Hypnotic Gaze quirk to bring it in line with other quirk abilities. - Added cooldown support - - Defaults to 3 seconds - - Increases to 30 seconds in brainwash mode - - Resets when toggling brainwash mode - Added parent return checks - Added check wearing eye protection - Added check for having eyes - Added check for being blind - Changed type from innate to cooldown - Changes time variables to use defines --- modular_splurt/code/datums/traits/neutral.dm | 4 +- .../code/datums/traits/trait_actions.dm | 75 +++++++++++++++++-- .../code/modules/surgery/organs/eyes.dm | 4 +- 3 files changed, 74 insertions(+), 9 deletions(-) diff --git a/modular_splurt/code/datums/traits/neutral.dm b/modular_splurt/code/datums/traits/neutral.dm index eb8dc327fd..fa20b17ad3 100644 --- a/modular_splurt/code/datums/traits/neutral.dm +++ b/modular_splurt/code/datums/traits/neutral.dm @@ -75,7 +75,7 @@ var/mob/living/carbon/human/quirk_mob = quirk_holder // Add quirk ability action datum - var/datum/action/innate/Hypnotize/act_hypno = new + var/datum/action/cooldown/hypnotize/act_hypno = new act_hypno.Grant(quirk_mob) // Add examine text @@ -86,7 +86,7 @@ var/mob/living/carbon/human/quirk_mob = quirk_holder // Remove quirk ability action datum - var/datum/action/innate/Hypnotize/act_hypno = locate() in quirk_mob.actions + var/datum/action/cooldown/hypnotize/act_hypno = locate() in quirk_mob.actions act_hypno.Remove(quirk_mob) // Remove examine text diff --git a/modular_splurt/code/datums/traits/trait_actions.dm b/modular_splurt/code/datums/traits/trait_actions.dm index bd70d3db54..5ef8b23d7d 100644 --- a/modular_splurt/code/datums/traits/trait_actions.dm +++ b/modular_splurt/code/datums/traits/trait_actions.dm @@ -1,16 +1,20 @@ #define BLOODFLEDGE_DRAIN_NUM 50 #define BLOODFLEDGE_COOLDOWN_BITE 60 +#define HYPNOEYES_COOLDOWN_NORMAL 3 SECONDS +#define HYPNOEYES_COOLDOWN_BRAINWASH 30 SECONDS // // Quirk: Hypnotic Gaze // -/datum/action/innate/Hypnotize +/datum/action/cooldown/hypnotize name = "Hypnotize" desc = "Stare deeply into someone's eyes, drawing them into a hypnotic slumber." button_icon_state = "Hypno_eye" icon_icon = 'modular_splurt/icons/mob/actions/lewd_actions/lewd_icons.dmi' background_icon_state = "bg_alien" + transparent_when_unavailable = TRUE + cooldown_time = HYPNOEYES_COOLDOWN_NORMAL // Should this create a brainwashed victim? // Enabled by using Mesmer Eyes with the quirk @@ -20,7 +24,47 @@ var/term_hypno = "hypnotize" var/term_suggest = "suggestion" -/datum/action/innate/Hypnotize/proc/set_brainwash(set_to = FALSE) +/datum/action/cooldown/hypnotize/IsAvailable(silent) + . = ..() + + // Check parent return + if(!.) + return FALSE + + // Check for carbon owner + if(!iscarbon(owner)) + // Warn user and return + to_chat(owner, span_warning("You shouldn't have this ability!")) + return FALSE + + // Define action owner + var/mob/living/carbon/human/action_owner = owner + + // Check if owner has eye protection + if(action_owner.get_eye_protection()) + // Warn the user, then return + to_chat(action_owner, span_warning("Your eyes need to be visible for this ability to work.")) + return FALSE + + // Define owner's eyes + var/obj/item/organ/eyes/owner_eyes = owner.getorganslot(ORGAN_SLOT_EYES) + + // Check if eyes exist + if(!istype(owner_eyes)) + // Warn the user, then return + to_chat(action_owner, span_warning("You need eyes to use this ability!")) + return FALSE + + // Check if owner is blind + if(HAS_TRAIT(action_owner, TRAIT_BLIND)) + // Warn the user, then return + to_chat(action_owner, span_warning("Your blind [owner_eyes] are of no use.")) + return FALSE + + // All checks passed + return TRUE + +/datum/action/cooldown/hypnotize/proc/set_brainwash(set_to = FALSE) // Check if state will change if(mode_brainwash == set_to) // Do nothing @@ -41,6 +85,9 @@ name = "Brainwash" desc = "Stare deeply into someone's eyes, and force them to become your loyal slave." + // Set cooldown time + cooldown_time = HYPNOEYES_COOLDOWN_BRAINWASH + // Set terminology term_hypno = "brainwash" term_suggest = "command" @@ -57,6 +104,9 @@ name = "Hypnotize" desc = "Stare deeply into someone's eyes, drawing them into a hypnotic slumber." + // Set cooldown time + cooldown_time = HYPNOEYES_COOLDOWN_NORMAL + // Set terminology term_hypno = "hypnotize" term_suggest = "suggestion" @@ -70,13 +120,22 @@ // Update buttons owner.update_action_buttons() + // Reset cooldown time + StartCooldown() + // Alert user - to_chat(owner, span_mind_control("Your hypnotic power [toggle_message]")) + to_chat(owner, span_mind_control("Your hypnotic power [toggle_message] You'll need time to adjust before using it again.")) // Log interaction log_admin("[key_name(owner)] [log_message_type] hypnotic brainwashing powers.") -/datum/action/innate/Hypnotize/Activate() +/datum/action/cooldown/hypnotize/Trigger() + . = ..() + + // Check parent return + if(!.) + return + // Define action owner var/mob/living/carbon/human/action_owner = owner @@ -243,7 +302,7 @@ action_target.visible_message(span_warning("[action_target] falls into a deep slumber!"), span_danger("Your eyelids gently shut as you fall into a deep slumber. All you can hear is [action_owner]'s voice as you commit to following all of their [term_suggest]s.")) // Set sleeping - action_target.SetSleeping(1200) + action_target.SetSleeping(2 MINUTES) // Set drowsiness action_target.drowsyness = max(action_target.drowsyness, 40) @@ -276,6 +335,9 @@ // Display message to target to_chat(action_target, span_mind_control("...[input_suggestion]...")) + // Start cooldown + StartCooldown() + // Display message to action owner to_chat(action_owner, "You whisper your [term_suggest] in a smooth calming voice to [action_target]") @@ -1036,3 +1098,6 @@ return else to_chat(H, span_warning("You are already conserving your energy!")) + +#undef HYPNOEYES_COOLDOWN_NORMAL +#undef HYPNOEYES_COOLDOWN_BRAINWASH diff --git a/modular_splurt/code/modules/surgery/organs/eyes.dm b/modular_splurt/code/modules/surgery/organs/eyes.dm index 440fbd2bc2..cab6b30fba 100644 --- a/modular_splurt/code/modules/surgery/organs/eyes.dm +++ b/modular_splurt/code/modules/surgery/organs/eyes.dm @@ -20,7 +20,7 @@ return // Define ability - var/datum/action/innate/Hypnotize/eye_ability + var/datum/action/cooldown/hypnotize/eye_ability // Check for pre-existing hypnotic quirk if(eye_user.has_quirk(/datum/quirk/Hypnotic_gaze)) @@ -51,7 +51,7 @@ . = ..() // Define ability - var/datum/action/innate/Hypnotize/eye_ability = locate() in eye_user.actions + var/datum/action/cooldown/hypnotize/eye_ability = locate() in eye_user.actions // Check for pre-existing hypnotic quirk if(eye_user.has_quirk(/datum/quirk/Hypnotic_gaze)) From d997cd623989df06f250c57edf7ffd8dbbda816c Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Sat, 18 Feb 2023 18:28:45 -0500 Subject: [PATCH 06/53] Make Brainwashed Victims secret This commit does the following for Brainwashed Victim - Adds small (+1) mood event - Adds _soft antag_ status - Removes from ghost orbit panel - Removes from round end report --- .../datums/mood_events/generic_positive_events.dm | 5 +++++ .../modules/antagonists/brainwashing/brainwashing.dm | 12 ++++++++++++ tgstation.dme | 1 + 3 files changed, 18 insertions(+) create mode 100644 modular_splurt/code/modules/antagonists/brainwashing/brainwashing.dm diff --git a/modular_splurt/code/datums/mood_events/generic_positive_events.dm b/modular_splurt/code/datums/mood_events/generic_positive_events.dm index 161be9cd46..b5749813ea 100644 --- a/modular_splurt/code/datums/mood_events/generic_positive_events.dm +++ b/modular_splurt/code/datums/mood_events/generic_positive_events.dm @@ -33,3 +33,8 @@ description = span_nicegreen("I\'ve tasted sympathy from a fellow curse bearer.\n") mood_change = 1 timeout = 2 MINUTES + +/datum/mood_event/brainwashed + description = span_mind_control("I\'ve been shown the path, and I must follow it!\n") + mood_change = 1 + hidden = TRUE diff --git a/modular_splurt/code/modules/antagonists/brainwashing/brainwashing.dm b/modular_splurt/code/modules/antagonists/brainwashing/brainwashing.dm new file mode 100644 index 0000000000..bdcbed912c --- /dev/null +++ b/modular_splurt/code/modules/antagonists/brainwashing/brainwashing.dm @@ -0,0 +1,12 @@ +/datum/antagonist/brainwashed + // Do not add to living antag list + soft_antag = TRUE + + // Do not add to round end report + show_in_roundend = FALSE + + // Do not show to ghosts + show_to_ghosts = FALSE + + // Give minor mood event + antag_moodlet = /datum/mood_event/brainwashed diff --git a/tgstation.dme b/tgstation.dme index 5d31400ebd..2923f492c6 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4491,6 +4491,7 @@ #include "modular_splurt\code\modules\admin\verbs\vpnbunker.dm" #include "modular_splurt\code\modules\antagonists\_common\antag_spawner.dm" #include "modular_splurt\code\modules\antagonists\bloodsucker\levelup.dm" +#include "modular_splurt\code\modules\antagonists\brainwashing\brainwashing.dm" #include "modular_splurt\code\modules\antagonists\ert_cleanup\ert_cleanup.dm" #include "modular_splurt\code\modules\antagonists\qareen\qareen.dm" #include "modular_splurt\code\modules\antagonists\qareen\qareen_abilities.dm" From 05db5f8997298086eaa8f3c6e2a3a357fa7ff51e Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Thu, 9 Mar 2023 20:46:51 -0500 Subject: [PATCH 07/53] Add robotics production restrictions This commit updates the production machinery restrictions to include mech fabricators. Old production check code has been updated for use with generic machines, and some checks have been moved. --- modular_sand/code/modules/mob/mob.dm | 43 ++++++++++++++++++- .../modules/research/machinery/_production.dm | 8 ---- .../modules/vehicles/mecha/mech_fabricator.dm | 36 ++++++++++++++++ tgstation.dme | 1 + 4 files changed, 79 insertions(+), 9 deletions(-) create mode 100644 modular_sand/code/modules/vehicles/mecha/mech_fabricator.dm diff --git a/modular_sand/code/modules/mob/mob.dm b/modular_sand/code/modules/mob/mob.dm index ba6de1bc02..2aeb71c20a 100644 --- a/modular_sand/code/modules/mob/mob.dm +++ b/modular_sand/code/modules/mob/mob.dm @@ -28,7 +28,11 @@ /mob/proc/set_thirst(change) thirst = max(0, change) -/mob/proc/can_use_production(obj/machinery/rnd/production/machine_target) +/mob/proc/can_use_production(obj/machinery/machine_target) + // Check if access is required + if(!machine_target.req_access) + return TRUE + // Check if server is NOT using minimal access // This is intended for low populations if((!PROTOLOCK_DURING_LOWPOP) && (!JOB_MINIMAL_ACCESS)) @@ -97,5 +101,42 @@ // Default to false return FALSE +/mob/proc/can_use_mechfab_topic(obj/machinery/mecha_part_fabricator/machine_target, action, var/list/params) + // Basic actions that are always permitted + if(action == "sync_rnd") + return TRUE + + // Define user's access type + var/user_access = usr.can_use_production(machine_target) + + // Switch result based on access type + // This currently doesn't do anything special + switch(user_access) + // Type: Low population + if(PROTOLOCK_ACCESS_LOWPOP) + return TRUE + + // Type: Standard + if(PROTOLOCK_ACCESS_NORMAL) + return TRUE + + // Type: Captain + if(PROTOLOCK_ACCESS_CAPTAIN) + return TRUE + + // Type: Mineral / ORM + if(PROTOLOCK_ACCESS_MINERAL) + // Check if permitted topic + if(action == "remove_mat") + return TRUE + + // Topic prohibited + // Deny usage + else + return FALSE + + // Default to false + return FALSE + #undef JOB_MINIMAL_ACCESS #undef PROTOLOCK_DURING_LOWPOP diff --git a/modular_sand/code/modules/research/machinery/_production.dm b/modular_sand/code/modules/research/machinery/_production.dm index 103d83c98f..a61486f138 100644 --- a/modular_sand/code/modules/research/machinery/_production.dm +++ b/modular_sand/code/modules/research/machinery/_production.dm @@ -5,10 +5,6 @@ gen_access() /obj/machinery/rnd/production/ui_interact(mob/user) - // Check if access is required - if(!req_access) - return ..() - // Check if user can use machine if(!user.can_use_production(src)) // Warn in local chat and return @@ -19,10 +15,6 @@ . = ..() /obj/machinery/rnd/production/Topic(raw, ls) - // Check if access is required - if(!req_access) - return ..() - // Check if user can use machine if(!usr.can_use_production_topic(src, raw, ls)) // Alert in local chat diff --git a/modular_sand/code/modules/vehicles/mecha/mech_fabricator.dm b/modular_sand/code/modules/vehicles/mecha/mech_fabricator.dm new file mode 100644 index 0000000000..3a42a2477d --- /dev/null +++ b/modular_sand/code/modules/vehicles/mecha/mech_fabricator.dm @@ -0,0 +1,36 @@ +/obj/machinery/mecha_part_fabricator/ui_interact(mob/user, datum/tgui/ui) + // Check if user can use machine + if(!user.can_use_production(src)) + // Check if UI doesn't exist + if(!ui) + // Send normal warning + say("Access denied: No valid credentials detected.") + + // UI does exist + else + // Close UI + ui.close() + + // Send alternate warning + say("Access revoked: Valid credentials no longer detected.") + + // Return + return + + // Return normally + . = ..() + +/obj/machinery/mecha_part_fabricator/ui_act(action, var/list/params) + // Check if user can use machine + if(!usr.can_use_mechfab_topic(src, action, params)) + // Alert in local chat + usr.visible_message(span_warning("[usr] pushes a button on [src], causing it to chime with the familiar sound of rejection."), span_warning("The machine buzzes with a soft chime. It seems you don't have access to that button.")) + + // Play sound + playsound(loc, 'sound/machines/uplinkerror.ogg', 70, 0) + + // Return + return + + // Return normally + . = ..() diff --git a/tgstation.dme b/tgstation.dme index 55fe73d0c9..67de1c0bdc 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4258,6 +4258,7 @@ #include "modular_sand\code\modules\tgs\custom_procs.dm" #include "modular_sand\code\modules\uplink\uplink_items.dm" #include "modular_sand\code\modules\uplink\uplink_roles.dm" +#include "modular_sand\code\modules\vehicles\mecha\mech_fabricator.dm" #include "modular_sand\code\modules\vending\autodrobe.dm" #include "modular_sand\code\modules\vending\clothesmate.dm" #include "modular_sand\code\modules\vending\kinkmate.dm" From 36c8bbb024aa852afe9048b338acd491520ff13f Mon Sep 17 00:00:00 2001 From: Darius <5933805+LeDrascol@users.noreply.github.com> Date: Thu, 9 Mar 2023 20:57:47 -0500 Subject: [PATCH 08/53] Remove alternate mech fabricator locks This commit removes access requirements from the `maint` and `offstation` variants of the mech fabricator. --- modular_sand/code/modules/vehicles/mecha/mech_fabricator.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modular_sand/code/modules/vehicles/mecha/mech_fabricator.dm b/modular_sand/code/modules/vehicles/mecha/mech_fabricator.dm index 3a42a2477d..d252de855c 100644 --- a/modular_sand/code/modules/vehicles/mecha/mech_fabricator.dm +++ b/modular_sand/code/modules/vehicles/mecha/mech_fabricator.dm @@ -1,3 +1,9 @@ +/obj/machinery/mecha_part_fabricator/maint + req_access = null + +/obj/machinery/mecha_part_fabricator/offstation + req_access = null + /obj/machinery/mecha_part_fabricator/ui_interact(mob/user, datum/tgui/ui) // Check if user can use machine if(!user.can_use_production(src)) From fb2cddbaa0f2e4d396444e82320acc029235d6b8 Mon Sep 17 00:00:00 2001 From: Fennec82 <78709808+Fennec82@users.noreply.github.com> Date: Fri, 17 Mar 2023 03:28:14 +0000 Subject: [PATCH 09/53] Space Romans ## About The Pull Request Adds new, Roman Republic themed alt-titles for the Captain, Head of Security, and the Chaplain. This pull request ports the Senator alt title for the captain from Splurt, and also adds a "Consul" Alt title. The HoS gets a new title, "Praetor", and the chap gets "Pontiff". Roma Invitca, even in space! ## Why It's Good For The Game Given that Splurt has a senator alt-title and has a bunch of meme alt titles in general, what's wrong with a bit of harmless RP? (Yes, I get we are HRP, but still) ## A Port? Partially ## Changelog :cl: Arrhythmia_V Code/Add: Alt Titles /:cl: --- modular_sand/code/modules/jobs/job_types/_job_alt_titles.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modular_sand/code/modules/jobs/job_types/_job_alt_titles.dm b/modular_sand/code/modules/jobs/job_types/_job_alt_titles.dm index 1820fb3a55..8d7377b788 100644 --- a/modular_sand/code/modules/jobs/job_types/_job_alt_titles.dm +++ b/modular_sand/code/modules/jobs/job_types/_job_alt_titles.dm @@ -1,6 +1,6 @@ //Command /datum/job/captain - alt_titles = list("Colony Overseer") + alt_titles = list("Colony Overseer", "Senator", "Consul") /datum/job/chief_engineer alt_titles = list("Senior Engineer") @@ -9,7 +9,7 @@ alt_titles = list("Crew Resource Officer", "Executive Officer") /datum/job/hos - alt_titles = list("Chief of Security", "Sheriff") + alt_titles = list("Chief of Security", "Sheriff", "Praetor") /datum/job/qm alt_titles = list("Resource Manager", "Logistics Supervisor") @@ -32,7 +32,7 @@ alt_titles = list("Barista") /datum/job/chaplain - alt_titles = list("Priest", "Cult Leader", "Pope", "Bichop") + alt_titles = list("Priest", "Cult Leader", "Pope", "Bichop", "Pontiff") /datum/job/clown //The most useless role in the game, delet this alt_titles = list("Entertainer") From 8b762a721cd67135d3d2c4f19ca20cd72d349d4f Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Mon, 20 Mar 2023 20:07:38 -0400 Subject: [PATCH 10/53] Update TGS yml file --- .tgs.yml | 23 +++++++++++++++++++++++ .tgs4.yml | 8 -------- 2 files changed, 23 insertions(+), 8 deletions(-) create mode 100644 .tgs.yml delete mode 100644 .tgs4.yml diff --git a/.tgs.yml b/.tgs.yml new file mode 100644 index 0000000000..22a65f0edc --- /dev/null +++ b/.tgs.yml @@ -0,0 +1,23 @@ +# This file is used by TGS (https://github.com/tgstation/tgstation-server) clients to quickly initialize a server instance for the codebase +# The format isn't documented anywhere but hopefully we never have to change it. If there are questions, contact the TGS maintainer Cyberboss/@Dominion#0444 +version: 1 +# The BYOND version to use (kept in sync with dependencies.sh by the "TGS Test Suite" CI job) +# Must be interpreted as a string, keep quoted +byond: "514.1556" +# Folders to create in "/Configuration/GameStaticFiles/" +static_files: + # Config directory should be static + - name: config + # This implies the folder should be pre-populated with contents from the repo + populate: true + # Data directory must be static + - name: data +# String dictionary. The value is the location of the file in the repo to upload to TGS. The key is the name of the file to upload to "/Configuration/EventScripts/" +# This one is for Linux hosted servers +linux_scripts: + PreCompile.sh: tools/tgs4_scripts/PreCompile.sh +# Same as above for Windows hosted servers +windows_scripts: + PreCompile.bat: tools/tgs_scripts/PreCompile.bat +# The security level the game should be run at +security: Trusted diff --git a/.tgs4.yml b/.tgs4.yml deleted file mode 100644 index 932a3a6672..0000000000 --- a/.tgs4.yml +++ /dev/null @@ -1,8 +0,0 @@ -static_files: - - name: config - populate: true - - name: data -linux_scripts: - PreCompile.sh: tools/tgs4_scripts/PreCompile.sh -windows_scripts: - PreCompile.bat: tools/tgs4_scripts/PreCompile.bat From b51b791933d46cc01991bf39248ef04060e321fe Mon Sep 17 00:00:00 2001 From: Sandstorm Bot <85452301+Sandstorm-Bot@users.noreply.github.com> Date: Thu, 23 Mar 2023 15:45:01 +0000 Subject: [PATCH 11/53] Automatic changelog generation for PR #317 [ci skip] --- html/changelogs/AutoChangeLog-pr-317.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-317.yml diff --git a/html/changelogs/AutoChangeLog-pr-317.yml b/html/changelogs/AutoChangeLog-pr-317.yml new file mode 100644 index 0000000000..7b83f66e61 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-317.yml @@ -0,0 +1,5 @@ +author: LeDrascol +delete-after: true +changes: + - balance: Mech fabricators now use their access restrictions + - balance: Removed access requirements for maintenance and off-station mech fabricators From 710726b42f6fcf68c350ef400604b3e0b1d56a51 Mon Sep 17 00:00:00 2001 From: Sandstorm Bot <85452301+Sandstorm-Bot@users.noreply.github.com> Date: Thu, 23 Mar 2023 15:46:13 +0000 Subject: [PATCH 12/53] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-317.yml | 5 ----- html/changelogs/archive/2023-03.yml | 4 ++++ 2 files changed, 4 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-317.yml diff --git a/html/changelogs/AutoChangeLog-pr-317.yml b/html/changelogs/AutoChangeLog-pr-317.yml deleted file mode 100644 index 7b83f66e61..0000000000 --- a/html/changelogs/AutoChangeLog-pr-317.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: LeDrascol -delete-after: true -changes: - - balance: Mech fabricators now use their access restrictions - - balance: Removed access requirements for maintenance and off-station mech fabricators diff --git a/html/changelogs/archive/2023-03.yml b/html/changelogs/archive/2023-03.yml index 879f59517c..2addaa184d 100644 --- a/html/changelogs/archive/2023-03.yml +++ b/html/changelogs/archive/2023-03.yml @@ -16,3 +16,7 @@ - imageadd: fixed cargo technician rolled up sleeves, duffelbags and yoga pants LeDrascol: - tweak: Reverted R&D consoles locking by default +2023-03-23: + LeDrascol: + - balance: Mech fabricators now use their access restrictions + - balance: Removed access requirements for maintenance and off-station mech fabricators From 238bd7d87191de7afded2e97bf38be6dfa67b38d Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Thu, 23 Mar 2023 22:35:05 +0000 Subject: [PATCH 13/53] Automatic changelog generation for PR #766 [ci skip] --- html/changelogs/AutoChangeLog-pr-766.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-766.yml diff --git a/html/changelogs/AutoChangeLog-pr-766.yml b/html/changelogs/AutoChangeLog-pr-766.yml new file mode 100644 index 0000000000..51bb92e26a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-766.yml @@ -0,0 +1,8 @@ +author: LeDrascol +delete-after: true +changes: + - rscadd: 'Added new cybernetic organ: Mesmer Eyes' + - rscadd: Added examine text to the Hypnotic Gaze quirk + - tweak: Hypnotic Gaze consent prompt now includes additional information + - tweak: Brainwashed victims are no longer shown in the round-end panel + - admin: Hypnotic Gaze quirk can now be added and removed mid-round From 5618e8e206913bd86c813b10594cd138835cc9ba Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 23 Mar 2023 22:36:37 +0000 Subject: [PATCH 14/53] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-766.yml | 8 -------- html/changelogs/archive/2023-03.yml | 6 ++++++ 2 files changed, 6 insertions(+), 8 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-766.yml diff --git a/html/changelogs/AutoChangeLog-pr-766.yml b/html/changelogs/AutoChangeLog-pr-766.yml deleted file mode 100644 index 51bb92e26a..0000000000 --- a/html/changelogs/AutoChangeLog-pr-766.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: LeDrascol -delete-after: true -changes: - - rscadd: 'Added new cybernetic organ: Mesmer Eyes' - - rscadd: Added examine text to the Hypnotic Gaze quirk - - tweak: Hypnotic Gaze consent prompt now includes additional information - - tweak: Brainwashed victims are no longer shown in the round-end panel - - admin: Hypnotic Gaze quirk can now be added and removed mid-round diff --git a/html/changelogs/archive/2023-03.yml b/html/changelogs/archive/2023-03.yml index 4208664ef4..edf9578e88 100644 --- a/html/changelogs/archive/2023-03.yml +++ b/html/changelogs/archive/2023-03.yml @@ -93,3 +93,9 @@ - bugfix: Exosuit Drill Mech can no longer drill multiple times at once - bugfix: Exosuit Drill Mech can no longer drill people past melee range - bugfix: Exosuit Drill Mech now does the correct amount of damage to objects + LeDrascol: + - rscadd: 'Added new cybernetic organ: Mesmer Eyes' + - rscadd: Added examine text to the Hypnotic Gaze quirk + - tweak: Hypnotic Gaze consent prompt now includes additional information + - tweak: Brainwashed victims are no longer shown in the round-end panel + - admin: Hypnotic Gaze quirk can now be added and removed mid-round From 164923cdf0b773543426569a72df0047525b47ab Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Thu, 23 Mar 2023 19:37:39 -0500 Subject: [PATCH 15/53] Update _job_alt_titles.dm --- .../code/modules/jobs/job_types/_job_alt_titles.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modular_splurt/code/modules/jobs/job_types/_job_alt_titles.dm b/modular_splurt/code/modules/jobs/job_types/_job_alt_titles.dm index 5e292fe993..38dfea1a09 100644 --- a/modular_splurt/code/modules/jobs/job_types/_job_alt_titles.dm +++ b/modular_splurt/code/modules/jobs/job_types/_job_alt_titles.dm @@ -128,7 +128,11 @@ . = ..() /datum/job/chaplain/New() // Yell at upstream maintainer(s) to fix "Bichop" title. + var/list/rem_titles = list( + "Bichop" + ) var/list/extra_titles = list( + "Bishop", "Priestess", "Prior", "Monk", @@ -136,6 +140,7 @@ "Counselor" ) LAZYADD(alt_titles, extra_titles) + LAZYREMOVE(alt_titles, rem_titles) . = ..() /datum/job/clown // Sorry, but no TWO entertainer titles. From 4b35fc212e6075f9daef06ffe17ced9351187456 Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sat, 25 Mar 2023 02:07:24 -0300 Subject: [PATCH 16/53] bichop --- .../modules/jobs/job_types/_job_alt_titles.dm | 164 ++++++++++++++---- 1 file changed, 134 insertions(+), 30 deletions(-) diff --git a/modular_sand/code/modules/jobs/job_types/_job_alt_titles.dm b/modular_sand/code/modules/jobs/job_types/_job_alt_titles.dm index 8d7377b788..f1e7b2eb1c 100644 --- a/modular_sand/code/modules/jobs/job_types/_job_alt_titles.dm +++ b/modular_sand/code/modules/jobs/job_types/_job_alt_titles.dm @@ -1,97 +1,201 @@ //Command /datum/job/captain - alt_titles = list("Colony Overseer", "Senator", "Consul") + alt_titles = list( + "Colony Overseer", + "Senator", + "Consul" + ) /datum/job/chief_engineer - alt_titles = list("Senior Engineer") + alt_titles = list( + "Senior Engineer" + ) /datum/job/hop - alt_titles = list("Crew Resource Officer", "Executive Officer") + alt_titles = list( + "Crew Resource Officer", + "Executive Officer" + ) /datum/job/hos - alt_titles = list("Chief of Security", "Sheriff", "Praetor") + alt_titles = list( + "Chief of Security", + "Sheriff", + "Praetor" + ) /datum/job/qm - alt_titles = list("Resource Manager", "Logistics Supervisor") + alt_titles = list( + "Resource Manager", + "Logistics Supervisor" + ) /datum/job/rd - alt_titles = list("Chief Science Officer", "Research Overseer") + alt_titles = list( + "Chief Science Officer", + "Research Overseer" + ) //Engineering /datum/job/atmos - alt_titles = list("Firefighter", "Life Support Specialist") + alt_titles = list( + "Firefighter", + "Life Support Specialist" + ) /datum/job/engineer - alt_titles = list("Maintenance Technician", "Engine Technician", "Electrician") + alt_titles = list( + "Maintenance Technician", + "Engine Technician", + "Electrician" + ) //Service /datum/job/assistant - alt_titles = list("Civilian", "Visitor", "Businessman", "Trader", "Entertainer", "Intern", "Off-Duty Civilian") + alt_titles = list( + "Civilian", + "Visitor", + "Businessman", + "Trader", + "Entertainer", + "Intern", + "Off-Duty Civilian" + ) /datum/job/bartender - alt_titles = list("Barista") + alt_titles = list( + "Barista" + ) /datum/job/chaplain - alt_titles = list("Priest", "Cult Leader", "Pope", "Bichop", "Pontiff") + alt_titles = list( + "Priest", + "Cult Leader", + "Pope", + "Bishop", // How about you actually say something about it instead of crying on a downstream's comments i won't read. + "Pontiff" + ) /datum/job/clown //The most useless role in the game, delet this - alt_titles = list("Entertainer") + alt_titles = list( + "Entertainer" + ) /datum/job/cook - alt_titles = list("Culinary Artist", "Butcher", "Chef", "Nutritionist") + alt_titles = list( + "Culinary Artist", + "Butcher", + "Chef", + "Nutritionist" + ) /datum/job/curator - alt_titles = list("Journalist", "Librarian") + alt_titles = list( + "Journalist", + "Librarian" + ) /datum/job/hydro - alt_titles = list("Gardener", "Herbalist", "Botanical Researcher", "Florist") + alt_titles = list( + "Gardener", + "Herbalist", + "Botanical Researcher", + "Florist" + ) /datum/job/janitor - alt_titles = list("Custodian", "Sanitation Technician", "Maid") + alt_titles = list( + "Custodian", + "Sanitation Technician", + "Maid" + ) /datum/job/lawyer - alt_titles = list("Human Resources Agent", "Internal Affairs Agent") + alt_titles = list( + "Human Resources Agent", + "Internal Affairs Agent" + ) /datum/job/mime - alt_titles = list("Performer") + alt_titles = list( + "Performer" + ) //Science /datum/job/roboticist - alt_titles = list("Biomechanical Engineer", "Mechatronic Engineer", "Mechanic", "Robotics Operator") + alt_titles = list( + "Biomechanical Engineer", + "Mechatronic Engineer", + "Mechanic", + "Robotics Operator" + ) /datum/job/scientist - alt_titles = list("Circuitry Designer", "Xenobiologist", "Xenobotanist", "Chemical Researcher") + alt_titles = list( + "Circuitry Designer", + "Xenobiologist", + "Xenobotanist", + "Chemical Researcher" + ) //Medical /datum/job/chemist - alt_titles = list("Pharmacist", "Pharmacologist") + alt_titles = list( + "Pharmacist", + "Pharmacologist" + ) /datum/job/doctor - alt_titles = list("Nurse", "Surgeon", "Medical Secretary") + alt_titles = list( + "Nurse", + "Surgeon", + "Medical Secretary" + ) /datum/job/geneticist - alt_titles = list("Genetic Therapist") + alt_titles = list( + "Genetic Therapist" + ) /datum/job/paramedic - alt_titles = list("Emergency Medical Technician") + alt_titles = list( + "Emergency Medical Technician" + ) /datum/job/virologist - alt_titles = list("Pathologist") + alt_titles = list( + "Pathologist" + ) //Security /datum/job/detective - alt_titles = list("Forensics Technician", "Private Investigator") + alt_titles = list( + "Forensics Technician", + "Private Investigator" + ) /datum/job/officer - alt_titles = list("Security Cadet", "Security Guard", "Peacekeeper", "Enforcer") + alt_titles = list( + "Security Cadet", + "Security Guard", + "Peacekeeper", + "Enforcer" + ) /datum/job/warden - alt_titles = list("Brig Chief") + alt_titles = list( + "Brig Chief" + ) //Cargo /datum/job/cargo_tech - alt_titles = list("Shipping Specialist", "Delivery Manager") + alt_titles = list( + "Shipping Specialist", + "Delivery Manager" + ) /datum/job/mining - alt_titles = list("Explorer") + alt_titles = list( + "Explorer" + ) From ad145751a7222627143372d34993c2bc617f13ab Mon Sep 17 00:00:00 2001 From: Drulikar Date: Sat, 25 Mar 2023 23:41:05 -0700 Subject: [PATCH 17/53] Fix admin command to load away missions. --- code/controllers/subsystem/mapping.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 5abe772c18..a6c306e4d4 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -501,8 +501,9 @@ GLOBAL_LIST_EMPTY(the_station_areas) var/away_name var/datum/space_level/away_level + possible_options += "Custom" - var/answer = input("What kind ? ","Away/VR") as null|anything in list(possible_options + "Custom") + var/answer = input("What kind ? ","Away/VR") as null|anything in possible_options switch(answer) if(null) return From 7af02ff9ce66edbb5d4a566f44e22fa83a928fb3 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Mon, 27 Mar 2023 22:23:02 +0300 Subject: [PATCH 18/53] agony --- .../code/modules/mob/living/emotes.dm | 8 ++++++++ modular_splurt/sound/voice/agony.ogg | Bin 0 -> 51546 bytes 2 files changed, 8 insertions(+) create mode 100644 modular_splurt/sound/voice/agony.ogg diff --git a/modular_splurt/code/modules/mob/living/emotes.dm b/modular_splurt/code/modules/mob/living/emotes.dm index 300a7da222..ec5f1a1d88 100644 --- a/modular_splurt/code/modules/mob/living/emotes.dm +++ b/modular_splurt/code/modules/mob/living/emotes.dm @@ -631,6 +631,14 @@ emote_sound = 'modular_splurt/sound/voice/choir.ogg' emote_cooldown = 6 SECONDS +/datum/emote/living/audio/agony + key = "agony" + key_third_person = "agonys" + message = "let out a choir of agony!" + message_mime = "is visibly in agony." + emote_sound = 'modular_splurt/sound/voice/agony.ogg' + emote_cooldown = 7 SECONDS + /datum/emote/living/audio/sicko key = "sicko" key_third_person = "sickos" diff --git a/modular_splurt/sound/voice/agony.ogg b/modular_splurt/sound/voice/agony.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6898ed8fc8ff8a287feb6dcca93440195176e655 GIT binary patch literal 51546 zcmeFZby!@z_b<9)Ip?|0IrqQ2pUj@@WM!@7lVq)xO!lbS+G+w|;6E2W^1qRgoBcEp4aobIyM?{S zV-i@Z=07C2|9*FXR3A(Jx9hPa2=U|uGogdLc=(^L9;AO6u_N;J>|O0RRo!i&PWBc$ z|FDP3LwUJ*c)5AGpFvqvon7o*-K{;WT|8MId4o{?ElMl-QU}2v1dv&3vC3p=%qql? zd!+KnWLYFD#FU1UNXq4T5NTElFXcMcbhbjnArzWwtSDI;2^#j~mPwB>h@w2BC&6>( zJWGh7e9vO0W1K`ARX9$zh7xOksz$6NI=N;%>p-f8f+QNFC+_ooD$N817Kx5rkLuR+ zbj!F(&t!!I1}h~=Io60|1+-F46-hb%^hFI;Y7Y$!2Z?V8k&k;d2!()e_%k>}#vtj)=mfycG z;aK&UHYi*k<|adipv!LAmv9hRM5K|llnFa<4j^K5d;9XvoC}E9q%eZypIa4axreLD zBj=*aeFGOsQbbIQyxiYI@-gkd)BOt%qP-Gi0+DXzP`P)-A!O3g_QNG;>&1NxcG&Ki zm9oXfZ#52~sak{bta<;o9322?!-+KHXe0h}i>8evvlwPA&ke<7t1KysHL$O3T~uH#Mf5W3Kls5B-GfeUl_Vka z$T^y}EZ2RMwW0w051fe1$B7{_;vpsL`QO8khlp&dlsqD|D2>f4sS;~1q!}A7TCZO^ zo0EF4UwLg_dF?JmnCquo|4-rHrXyMche)FT+mKQ+%WPqA5KVopT)LQ0)Tc}`1O*He1EMS3MwdC60G#Zz0q)mXpHd1cYrG~Idg zD)4^@Uey0IQ4RpU$t9G?#g@n=>9bOiTpket{ev!IE`R}7?4cyYpht}O|Flu{0s*M;49fr50RX_w(5Jy6>%k|Vs-@Vf zrQE8eNUW`@{lB~TmFM`B5x_D65EKA-uK0BE3p+eDR42?1Vg>OyP101cfD~DbON>i+ zK_u-z4vq7m*6!=^glG2aJ&Pg=n?=CDjtrm12ErIX$z_k>A2^9EF%2-2te&A z3S#IG;Xlv+M_&jj`K;h z8_rVo-()c%1VO8q{%^?o|9SlX2>h=RfFm>`fQI;B6;3A+gJ8J;yvL0L3jnC(XE^}C zl|gY1p&MuU)DfNr!b0Nzuets2b72T>a3lZ*$FMG#PD%q{L;zfZM+C=A9~cAMQNZSa ze6%wWIAV4n<~<57LK_O$DRAJb*$pcIP)wk^fCZu8^U)AWMm@aDKAS~yj!%`S&_0_f z79u_MOxd^SAd5*!lSr8`y2u_Ap+#K*0KGv%)4~moP;Ov=76hQmHgc%`5}6{Dp3~B{ z%RY!HVu>xYuVUky`1Oyn=hG(6-hcg=SXottsr*Yso#>HLJK~Wt8$nrh)caqQ3tqIb zMRwVblt*1Kgr(p^s7GT`gzW6Hs;)W?By~Q7_0V2Qvo_1FLR?2(P1tJ62pU8Rys8WF zjG)odMmQU3*5q3V)jrzfvYOA#c@08r5l0-)V8ZznKhLNRglF@O>wK2jA_Ve}8UJ8h$ByWUN1&|qiKJ%`SbCZNgY97# zx3apH_JWu3aML6Hqr6V5e27PD@`|deQ3Qlb{~!tiwlHu37>Ynmf~y7}iQYeB1_^*e zk!eebBo$c0Q#H_8OCbaZ)3$|hLChq{S@^7^0SKb@P=?Y_6$Qq^M<3-MN9F(Mmh%6K zOY;AQTK@k+jsEYn>;G#mn85TKS717jyAYd*qKN>IL(GAA^;jPC$^jkP{!9-71IJp) zXr2RxmQ;(WOb>{H{nNI5o*`&zvO(O()Jb{y+Ey}uHtOPJ4Mm>I4MkSQ(q)U|kL5{{ z2~P)?{ik?JNertSuS_fz8W+ecPd{FfSyneLZup<_wCOk|pa5n9LI8|mx#4-Q{EVI% z!Vdw#5nfa;*`vewH~~}?M#wxSCD3WZAquSIh_uI;Br79g-k{Njt4XqyT8#@M)+CQH z#2i7RM&x3YrY7?oJg!p^F^%W{#8^rZGmR{0E5sylae$i=HO-t zLydY3oB{Z>_y7YF%Pc2n!5Bd5>9!OC35A41Nzl|_U|f}s?HECkZB*uOL}||v3lW40 zLjimN0LB83j<%`m-2v0Tv_MpTXdN7sfE#$4mftTo^y*s#!XbF|c#c(J|7~)6uarw&&->CZ#52 zX5|$oC1xdOzI~gQm6VW@nxM3FwM#W4Jm3L{`*sR0|3Yq`u~zlTvLZMV5EvGDSf`qN zc<2A{*TRtBNw`;Yp^3rH0c zuSY)G*RL6H8DvfA%}Xg*T!Kh7u}SS_gi>7^EW`lOed)K^J^U%zf+ z!khf4e1Mbx<;?5(g^a^t>_ny%zS62}3d0OttMU)QBVOI7K}k2+b33}<%}S(Fiy7XO zBt(IgmT139&p9=e-32+5v41sN9jb8@8*NU*`2&eJOm**kL9C_SS}05CRd#tI`(9*< zP z!_LEHGN}j;m7pXk9(gOr6N8b*>|cDDZas+w!`w^u$UW^UGnP9^TwUhplae)jK8^3=|X>`Hg~~kmwDN z@O+8mjFIl$H{?DZyppO!IaLn5_|cZkH>zA1JmC=oKgs=x#;I24dGi}@CEV-GRF)*H z7}FL+jT>`xuBEhDThBhO_ zeVBCRsbv6;cUFtLC9NB1jLFg5mbWbUrSVESYgA+BycD*`n0%4XE1LaH_umnXEK=xw zthVbzpVwUv_C#Mqm87tQZB;8mL#KBPg1pp2_CXC_+;S6ozitv7Z%npr-?FEDr1;ow z_(e=!KVEz@Jltd8A)xc4#xH`1*n!Y&uU99Y*DOODniJ7T$iZLneQUpq-}{psXIrJm za4)%+c91?j6A(~#S-zJ4h#v2y-MH^g&Ps0uduMMg=IY(9&*!jERZbs1qh6jN{Jq3H z8r0wlq)F}^#7mx*s078-jb);>i8Sz`atKV((fnjMuBjTr9;y(tTaB?#ead3S3 zOA6^>b4BVfjp_Aq*^xoir|f#=t35g25LHpAX=}mMV0M}e&w5&{?%~T>R=`~M>GRdx z859isa7B9R(<8of&y0y#ZJV)0`}K9)V#)HJom$yzV2=>slXac{6Ts_Nh(p9MwHk*C z0!GN~p45g~La@N{9|#K?Nmm?hmCavSXr)!c+GRN-L&4yBeV?UPCqkk~;*i5g>2?Qv zeNIp^tIel4n`3;(j69;%uf&)#ls}_+6pP7Z>U`f44R-Cf(e-BuW73)T!+Y)gt7Lu! zKi~;U#iPEA&cAYc{V9Sz%9yk8{MA~+MKdalS>z=@`lPU&C_GdxA_nJ7HnUc#MhgiJ ziq26)0;GR!usCKY9~(_&IZDViS>cy;?dY0ik319)p8rT=DgV1Q^8p)7PFd z85*c!Ut_EniGFGk$SH})oWDJz^$o;1!;I7EeXYs+tT#Ly11Vfy9-m3v=hbQ8P(Wq{ zkjwLWRj5g6fW70sW8GZa?4u?aMha-ebvQHgN{kyQ?_W@Zy1V>kclHP2gvg=Gj=(qV zYC>x0@f_(HxLyUaIcL(FI`KhwNi8piyBiV`@9sM?E_vQy{p5ysGm@+Hv-!L@P^5p#O{0F>E%er)0!paf9E;Su;ZTTou0- zQNL%L$_~{Sjx`P(KR*HM70<@%j`88kVDf)Aqwo3VpJ{B8cBZEeYB43XA8czSep5Y5 zvwTM zxn{ztpBl}~?>;*SH3aEtS-igSwb?95rE92|S3T8yQk{s^LVxiRc_YsIIN!NVDYYd% zFT!IkK`fhxYfzF^o1H%r^7ZAw!Dq0-5xYq+lUzSCMp(mV>zm`iJ+}9He1 zKp7koB~8LL*S+WCAc3J!Iwhn!5#6evXRCjLDF-dK&bT@5u34OO4fw#4wG6A5aK5P@ zhg)LcKI0Qm?iN$YT-UD}HH<5h>Vi3BAQ`A=x#g{A^<@gu&&9n{Irop^^0Y~YH0W+9 zepmTHr#5{rNbxXU-GIDxaz+OhbF|q?UL!&(tXYt`QI_>kwuzf3Ou?npqU;$;r83^~ z9b^ZZE02<;ndHI=)C#I%Kc}eqKOFz`3tJE(kR$x=75PwhOoj~z5lV`|F^56Z;paD% zo4Zw9;ZWmR$>5AzB-c7tFs0DW=T0K%5%Q2I6dE%^nZWHwJSZ_xkn46#2vbh zL}Gxl!$JPmyC0bQPVZ0enRSvMz|Vo(NMBFB!QzacU+b&;!bS=caNulp1_cd8o18$_ zZ!$OqCKoL!+?&RG4XcNN97|%^6Z2xr1E#$tA9f6l`E%6bYeNf!NSVzzjvo z=vxtviKETMB12Y5Y>C#9gzK00j-4ZMlI+Sz9k{AzbT?~4UYbkI$XEnCF=SGrA5%Rn z-wQcS1=X~l6vqmDvhRM0CTDt3Ifoo#a2S9GV`6j_CY$bFdMWH?j043WW$R9{!FwJE zo3%wRHl9FTDMtqQ&wuv}TYk>ka)m#I+;L)n?`iQ%vgtQ7OTTv%=n_+6;ZwS@YpME?+I*Z^vx=USiX|n6yk3W4n%*e&5Z zA#u9P-juF{CJ&SobLX`o3x(Y=l641=p3xp`z{G*&gQ~SkO{1s&EZ~m#n1j3)v~I!+ zB2OvrzdaLXp{l5Iw;4kU`e1y_I;=z($WlLD$brxx$Iw-#;AZ`LZ;wU%!- z+Z-A~3g1$aFryUwReyOO|F%RE(%g$m%Ag>aMlq?c-G1*iUU`+X161T{hNBJNqpTH3 zZxW{CHE`81;6vbF<>gI`87jEdx=C7U3n1GWTQ;D3f18u!w>Gv&v@=# zdg?k$vDH9ja|e?LzyT(i7Jh4m)S&h^;;%8nnHjw0)hEGw%Fk-s{<{jiDe1Na|s*&`0HVKeQ z4-37;hO@l(#esai^bH%C@wKlA1VViYhKqwNVFP?U0Lm5=2N*~0euYFVsAtAn_6oov zAf@YOZ@?sw!gfUqV0?7;&U0mi@grKE@}sEsIHlChMd(3#ovT=VFX&v|`IIM{N&1tU z0Pcp_0E|lboZRfvF`HYvh*9F4?|IeCR#RdcY?@#=KXk&c>|6x)C^a&350;)Q- zB6=GHmhx56QR|?43#yP|O50vh@Z<&!CIAL9*|s)-HMQ42z*v|lD0F)F(vWSWPssN< zi|0ypDd87oHfMKZi{E+Q&&$)jc9dILDV{4#oBS0SBVY8Ez+$v|1mlCxsnf~|A?3%) z4sL(H(>v>uD-}0~H<)i=q)2w`9mrNtS5mlxY{L$21ACbdXheCr%j=H5=IfzR1u2l? zZ;ASXGnEh?Esy9OpaTVaHX@o*(fyqZ5|{wogyR2;J{6e*W2l=M>r+np39oTBMr=7N z*K1sx_wM%XWfF>W$^1tjlq_-;>?b@@nH56GQ2WiM@eF7J#u=Rhye<^^1P(Ti-sf6+&nbojR$9zfPILI)3{0vkD(C&L2Dm7ELxbpl^)9mNT^rwe`i{t_*SEVA5Z@Ynr%HxZRf6-NyqokRmwHU8Q3AXbwQ$X$|) z0%66Tw!odP8w2>Duuy`egOr{iT5%wL)d0naFljqec3?t%!x%@7B?%=5rJ9z`OhRf1 zJ98Ykj}!QA;-XP3>sFIZP-yC}UV%n&ylqXbkRt}|00&t5pzYfvAK^6=*CTg#Ox=klRHN@SRNZ~f? z_`vlfWb0_4(-SOLt;c-z@MPs+tx)Ahtt>Ik6gm<}fx`cx&TVpAl6Jdy=|Oj+{TYYe z7R?NvAHsC+>zhO)cap4rsj#a5GUVuCOr$2*O2_Hz@8;A?EY4UIo*B0j6z^#tjIGpn zQFLRKxBUC;kDxVPj^(E4Z`N~6t?$0yhzca-dcLs_iNCk7e}$Zsyg&BtV44pm{Vl`h zv*;6Oi4UDkn7Vp4)eME>u+jrL8+eppiXk7;g!76lHCUgzPJO z@D_O?HvDY=#d9euvJ}8w@^5a!`2E4|-99a}@W695aPT$MZcj>rts_y_a$ z9%;i+;QMfzbHkvG;i)AIQzyrdl}ms6z}$FKPR;#!D)077bVe4i76gzX=? zd)~c*=Y2qr&$T;Q9B1k*()x#i+J$qY34@Zxfh*w2q~ahWv&QgtHRvEAeC{p}$2ZPi5CpG|~7oA2e<=JK*=H@wEvM z-~A&-b24>#J<(f`{+s^32C@ha{1XpS$shy#xU8s~Goy$SfMyxM*v+;g)p&37VQ@^> zX1zJ!FcALRR+6&bbqwnd#lvZQghFs%%uH0ZBzR>LCCG5`f<N>f$by*dYX^ldJ0oVJZ5+$(di^1P*k)Y-!hM3mG;#zGY=1O(Sk^^PO{yyhmpg} zGdKFpS1_sWAN=c0$f&Ma+iR9B7j7~D*KfqO?%ao?;C@Z+=eN&vI7xJ! z(z_D<+`CecI(WB}vTYn-$Pz&J_DXW+3|Pn<)Z8+b@v)R<(EMi{R}1*(R2yr z^3lowm|&}w_q7c^0LRE@7qGFfYno1)EATFHg>NT+z{E_Sb{OVe6S0z9GvL01Zoo7X6uU zU;(z7F)g4*u0{`(6x^a-S10jA&M^QFzz33dR0KfBPTLl&mx%?%?x#O-{5%ab37c$P z|HEm;G-|#*kWYDOGsz^}x^%$se);Kmi1)-~J-HL%i;rK~w!TEm)~^?CtBs=O#P>u> zsY&TUpka4~u{x-~7xX!Wp^M-9h6p~!yxRC6OfCCXq}BKx)n<^1$m}f1pK3T1mgP3o zS3qR{My)V`9h3>i2gIIJ3jpx;*rr7DzXUGe^By~1Qoz3Y8Nz(7DIpj1tx2*C1pqF+ zb!c9gq$(g$lzc1!H-|cAlt8lmFP4QRomRCO@l0~suY|N)=_7c3)!k8Lt=pXO=|WL3 z)FE)lY7u$)OXtbor@w@n`WEjOl`j{4qZmv$K3`ovdy(6Nd8Rp6kE0M@#1rVZt9!}G zsdg{`K4WLe#1TOQKCvyjKD*IWo6Z5jiB>_=AJxGQAOj3JB4Vb7Hyl_Ew*^LLv1v$R z?2)&*oGD>RsK5UdyM`LK$lH2kk$!V_{6mc+XM#H9Uj7>H(92}&WQ9R!E;Op0L1DG= ztFM0a=I~?weM>f4!&wy`bG4WCTC@;Jg*Yo3GcX@A!@ZJ+Ve!5CNgVJQ$3O>+GVHg; z0fL((%bSke<@v#L!q)Fm1nwL{E2HRZ?X27M&E?)n4lbI_5_^=eo`o`I2V-q^|5OX_U(}Zv4aMa7GI(9|BjIyB;?tr?%B|u ze*Tiz>zoARt~yz>N5!teID)D9E71WaScAtLf-=N0cUpC#B(YTSm-`$7WyJFVy7i8I z1>agj|4^mr%NG(V@>paB&2QZpC$&Z`P1V{tjm7nl4eHs&|FA39+sv-{Wr)(AmhaQt zhH}IBJxfMTUkQFZ@lpUo&GSKSQ!&cr>_`|W*lEfYL!ROLX_k?DfJSkArQ?Y=#S0d`r$_+CIK zowmyRx3=HWnbsk(UzZ1OUHHP-FadGN_6WW4WIUBjHXdRV>%FlG-|sVsm*3E@md{!4 zckMKj-SKABD$6)fdhF#Ve#~o11ZM0X6XH=8Ur!O*!7!x6cr;%cqrel-_=U!l1{-fq zeOFKYCf;oZnC8ei_ynE6rI)apDxAh5~BCnwj zFnLjCk@JQ>>8Q=2y~57N=^|^KjBS0MuE~&r=bFq@-&MYSg*k-1l-=7Rh6Q&H1BX+m zc(kd%%T`XcTsGB$nnARpV%73hFeUjVWkbZoFV4hVVu0!+L7TMs@akyE={7fyM109@ zSPr(_lZ<6lylMNn@IH34?2lK7EhHkhxre*LdjWKIr{Ol_s=bCEzT&guXXF(O40fKq zPz|U%d(cGRFXQ5bd&hK}7o2vOJ33k~Eb#BLi-m6^2AQJej9=<6|jzsInti(L?-U!VT2h=;^&BdRY)+HfnpiOdeTMiUd( z?WP&kAicIL1{NSZKb#oA^0HHSfFM4ffQ2SrJhxUE3E(41q*q?R5@!I26@b%Zx>Slw z%>Zk6f;CJtBp{#N<~I2$rYGfl`Q%wn{ZYk6epCk^%9SX!ugTDL+5+BIjXixjhW_?( z5p9|;t!LjSlDUR*@bqQj>`>v#BY$RTskOgbmpSx*M@ML5Uqmc^dgHpPSGX~|>Q5h= zOqY8_3}b-)s80bU#V!x0)sN=~Ei4vWxLSA-$uv`5So*VWhg!lH`&vbWBPwylXW z_#WV*PlKZFFZ8$x(CtQ?H`GEfu@X)%Z2&Pv)SYz2ELgB*d!cj#dx8sVoh?S4A7vBX z?DX+P0Zz*dlWv)sf)s|E_n1kO{H`?+)h)VmqkqD?OLBQ+8!YHM+xR<`i=h6mUE3dh zLC)6PIo1{JBv1=4;1~`{QUn2ltarRf@NZ~B$IlF%$Qc)jt3-fkUe|GRY~XIXj&&<0 zLLL^~eVzAt;QD-loWD?QUC5n@g}~)24M5|x_+6u(FGjxhl_+vsB7;PyuF`I42li0I z{I28T_XeSmxiI8x{=G7_Y`c=)h}u0ePzSx8i_@K3l<2nsQpNPm*RG>K{d}%QE+lfD zS6P%vq6?5@1QB-D&F2*`kf#89QI5O%iMMn4p> zzOJ+>59hO()ielJ8j_7V{oM7!)yLow!lr~S zVdiCo;ishFt5GE@y_3ElOB4=Yaw!VbdJ28~g|UMuN!)X4F$y-8l_7N~Sg-dLy5MVh zvrg?H!}cF})4G)6&obY>F3-Ws*x-GU`}ezNF55HjM7-iZxR%uQ_rF~7cLG)qKl+Ad zipSowCMJC!bLU2%^?vP){I2a!;zKC7S|vrChdSPhg(c-HiqdL|T*=LlqeA^3QC}zY z!zcaJeHEskM=qPQC>1Mh^%kF&4+b84*ECcV)QzfsR}KF8_AN6!yT&oAjvjIR=98h# zd47lt;i0p0JKTWVI>QMabNzfC=781#pL^b_W1v09CuaNvgVu2=kJ{legV0LX%N23#s zUge{F%)lUaft`w+nvgqe4S#}M_s<%phdNA^vzrc%Q4#d+!Xch^3tDH#e2UB8+An)P zyq&8|M)Fp*7y8X%Df<52`{dZc>(?pQs{lzQ!F@e{V^)yLQwXrFqY5xE7?W9!9y{)j z2Tf0SGj?~(qk*{XhBb=eLL^d__qJB4>05s>Zk?52*e;22*oSBGecob$z7g$Q={hGKuI{)tB-YLhNP7i%y!BYVVevzm4#l33+PnjRi}Ie9lj8kAL&I zWJ>(JCjDgo>88lC-rwWVo06z}#Q=W47`ZET@~HOwQ)vKnfdfg!A*=nsT&g>!gHn?y zSG+Zd9r#zFr!t%NjinGvkidoaoXn>uP7OtGmKON$z67YqvQtQ5EV^FjcFm1|Q(_gM zJT#0|Q|kONgRtJqeh!mA))&blC`s>@c?kbRoa>nE6kN7DOJuk?gFMf-zy_=X!hasv z{BF^9f7KeD=AWd?isgs`0GiEe^0$}|8G^Sy4+H6fKlB2v)0i~20B1OikT)}h1idwK zE|#h

Mr3gNLpjXJ-c$&_I5k@Ku8Q_Pv0dumJzS?eN~aQrf$Z8$k$j@w@2eg&q@c z`zkaxBYsS$(4Rbi< z3rGy)BLa6t*DR|PVkf+R*=SrJFtHJnIFZ%qI4h1sFneET&liiP`taMjo4d%|V-yMh zYzB#Y4Yfh7Pt1p6^l986U7b#7naRP z>IYPc=$tRGuLE(8R7I^iM#Kt2%H-orgNmi6qGsNg?;E+(R%U+Wz3)S({^qoP^6Bz> zW$(U)M7Gg~T3`;%7gBA+e!Ze>vM;3oSS_HrEW}wrV9+nwAe)oqnEv+SkFqI>>6oTf>= zxpe}Yu$NscO}Z1#F{ob(84jA|C@D$NZm1}GV~(0QcHFF{Y4~X?DA`kKwQ(8>mFXbvC8@>J_zjP_X|)F&r09Qepvz8{2K+(ZcIZqjh5>%)~Ch z5TD&(oYvrGEd(c;x?Gi47!FD$wC<@qIlVk)fD@-9vma|1)C#1fZ3(HOt*grzWdai6 zl%^R&C3!&5pR@+svl3eILc7Sdrf`pB6`9oCrIiWXbc7{fOIr>N?q?W!zi~Hw@oVWP zPjE)fl+tEpA8+w5ZQo1ryQ6`>F0cNM`P)L4x@?6EWI$tkyJB{ps@6l8T|V1o44AW( z=3ke81GtI<4GOXqKLSmWul%33*R=%A>GK8$?M{E3#6!GRo!aF)q)8E@E*NL`mpZ4~i)Ngw}Pd+iZqD4+ZN(EV+1Pnu5 z!sOE}qH6MxIO)MprMBlN$-*!RZOX&izTbVG`W-=9E~DLSUb9~5QxZJ5O68mG#XjV! z`E%$=tf71*i&0$oho9~VS)=9z3-S9gzV;j3~%L+N<3dZ-Co}-7hxcsnwqi9m~^~)(-(~Eq!Kk-X-~nu zZh)d!^gd;=i*;UI{=QBCAHABuD**Xq`~kPpkEP1&KE{euRYIs+6n4EAAj7mz0_+Rx zg`{J=h0d>FXj<%isTAhrDRznTiWH3=r`j!zG>#?k&%|8pa z{hq&n-Pns*9mxuLnj7)3uznAhi|(;ZU#d1~ocA<;BVZCNe3V+gD<`YCa5gDBdF#!r z=e5CofD2axBLNC>SDLGx2dWu{AXwK~QVbOEQ!K=WSdd9|vvZRIKfd-P4y`4ZoS1NI z!=Ymlmt`IXzg}%RVua%pot&&eI`Qhj?A^#Flx4mnYLhG?xUUOc7mXT8GzIWWdcB4z z*s;HQezn2JW>X3em4k${2nPiOZLjJYy%IJ+yoVOi=Vb0TLpwXNesX(@Mp^Fv(=cfH z?-q_{L!;BJQ5BeLtkwzhX1yg16W!I7vtA=Kt6yr9L1 z=8Xc(EE#Cxx9LPN9zgtlSF*tc%P0g~x>0DbBJEV_6vjMd{{}R=9@ptL@rO~;{nZ&! zL80?6P0pcGV9)0nAyA1=>LpF1Ngu^reJ8Gye(l_^O~xa(C`xgicDi#RoW!p!u=%l!LyJNFdl%TM+c2)~)6UuZ?HZE6%VsR^FVxX4znW*5B2$^2O;hGi*`Yyr) zNXx62?jukcPGX=%FMSrI+d_F{AG8?g@~6^$Hn>%*xTPiV<$zVm5_={6_;1{k z%FbKF`_Ge^6LLo={ON|CST|8A0nkb=LbPsb0xox{ArY2|O9F-FTI|<5E+9ZSRxL^D z9=>FX!VT_Du#X;Ym_|b}!76hal@xX@q2#D&$E4W0zAF>majv^l1HpOxbA$>`mqVXOI=^aO^t`Ffl6=Apm;= z03PoP;I!S-XvQX#HlCy3dSF!ZM3`6~aTEn?wPahrZnqp7aX?ob8HxXtRVfG+O2tMK zQ2gmKq1P%{ynnyTr(?>0Z}q+Jx7WC!7*268_hwcg2>V3fB>kNL)Qe9Y??B_`Nc2pv z_QVrgufjn*%D7tQN0aw!Vgl0y==~?`)Tyg`x&iI6I9uB!hL-}fL_UY`-)Z3E+5`b~ z&a+kzRE7u=KPxvzs(e5UtITsmhN-sdXNBof*j6gL&2>C$xmN22O~?B(J)zLK$<9h* z-Eudn@xVWQ%Zaw@*bf7OPXkB=O+V!+pLT!xbMhI#F#)gb^YvlW^wT`zB1KSxbL1qD zoFBbbtp`GEepnTNaB)<0!+A!Ky%*-tU{X)1X!O+v`IB%Zq57Tmd--M?lQk|;CpJf0 z6P`mDFBskmm}9Vr{nazj#Ixav3>_7pjsBHl7>apn!154{sIblTa6ymFM4wjqTNqEf z(r#UOkRnygF7a`^6JNMqOjAHs5`I=VIw-2NXXPfTH=<18^i`iH&$r*{ zV#*)JY9=j+?*F9Z!MiYd)iz%~gD#QHqNydIfWbzXTUD81C>MOf{QVI>?FMPSK=i;-vqWt9o=da{GPQ{?310Yd!F?z6gc?(cJrOo;9w-M~y zfcJXu>+mAz$0KRiZ060NE)G$JJ+_5N25dpzi}N=e>e=WowYvw#4Bl`!a;_13-TmCe zC=C_s7Yamju>uC+H?uTWr?_@Whfwu0cLRMgmwSw%7B`D<#0> z-@}`I{QNg^L_bxVpLldF_{Q(rD5;cLHYahNFSf=$eOSIIvM+PZ7hwvuF39`O1Pn z_QB7(+5E2Wtfy(GYf-TMQ}k8&i@S^&LMg%hb?xa0?%4_ObnQF76%W-R%td*=Zt8k@ zexwv=oI4<_%)4*xJF)bp50c{0`?TESi26)=qT*G$Gz_o1#i5rrF%IG zoeo73y+}kV)wnMLRlEPv1+kO(j>{0CY)5@CVwHSKHY0k2EyZ(xoz35iN$+p&X-=w3 zHJHp8x+_P!(f^yFpksfLC+gFhJL&YAbReSZYV9 zWNz^1l25TbGw@;Jq+~%pJdSWOvKjg zBpM>)By+3<>SvI!cXPX7#ES)C4W5rjyvSMRUp>x^cIkt;JnOK;Y}I#&K>pei*Qw7I zlpT#fS+uq?z&k~%gTN(n8SMH+hd92s49_HNftr6>SaHz+qMk-Wl(Txwx{l(F^M zv32Ly>E{<6-pND^Bk!izHw^m9CQLi^RX2+91=Cs7$pn8$?qB6TM;!Mg*#7hN;*)i< zy_THXxsUU62+=1;8P6#hq>+j~X{HBcEk{&$7f#Vi`JL-*-LsM0(gD7|E8n1cLvwjT^@46p}6F;GwTDK7$%Iyk7F{Moj~ z^xcv1QQrGXa<3p`<}8TMqOnA^J?Hu&(qg2IK=U}(Yd@9jgQRL*6tEThOpZg5KEYhb z!NLD;9*B-q!pBfqfU}Lmm9b`}e=fLY;hyz94a*maO+07z)U;qy%+&mM(h81Ns}1M; zNcCO{!<+qpJM(ooK?QHOueaNirArsgw*uRwY~whA$53=Jy-jYIc8J7nwtfOWRuh>J zkW}|yM;zY$_bm#?uN^_O6ZjO^^(%y-!Zxf!{+`8n^}N=nNci%W_Mvx|fLBhQ9e zNJ5@#4Kd|0diWZeXwk7AxpsZD;8IhHN>_C25QyUa$`%v=-Zc9C`u5Nl*1b6UQG?%Fm=un z4DMpDs#`)&+$@4w`@2>|-WiA^0y%))@tGE`8 z4@WM-D6=5iX@4vl*sa$Yfq+@rnjXgrnCi~6{s_B*&N@0;HxaZdM{Pjj>n)zeX**fl z%*`jC(=u%0YnUreG=Gdm)}nF+9RUg{u^=7x;d*oku>?ljYcYQryPP*%_OqY)wc;Gk zJlV_qCeoN#XV)E?2VKt#F9IkMxJ8h=J1ez>6nEc}wFn*GnGz{o$9>8RDv41p>G83| zTUss2_SZ07phlb#J?E`f2>Cz<99`;BcToY5CtMW(+FRK>UDSMB0iIzl9)%a#Ir!9(X4Qm4<@X2w}X+(yTKwyQ3Wh0qZ zl(#8bBUi;|TSnCc`uVwM&d6cpJB?%rd;Aosuk`!UtY!iol9TlN6kF+VJ%S&#n)!Om z%Tn_}+Q$NyP3&+28HTX*0Lgxw%$fRPmWFdX>EbecxpD9IKb#h==lc2WouT>E z=>=l9@YGi`Uoluoa$ChvY)`sRHTda0^nqj~K`U8t`i&}xm!`^rYyvh`+$Jtjj^HRy z5ujv-RlWzW8p10@VR|WV3qhsz zY%FEubMFt*lpfG0zW3dfxoMGE+=Jn+lG%}ioJK@Jp0fj5*A!wd?KSXUzgAPzf~;x$ z^AE63QNN)pW#X_F$W}3Xz$-HAc_fngDu#eh^ePieIXEcrj&GYNEFnq?TW8`8w&n7T zC~FPnLxku7mE16^yOKN@OT^$Q5{4z~QEoVIg;|ugD}Z-2#kj4#m#`Y5?Z>9?(G^0GdM4s^Nc2Rws1t zYreOTXqS5}{k0J(glAC{m6Xhm*`bGoJ0gT$uH$X1J*b;h0tqqT+*#3PqUS4<`J;n| zOq9r#!!pZRMJnfBf=5}D4Fs^R~7Obsg@pSf|-v%oQ|s-<)w7PEFBWNB@S{DT{V_?l1W^d>jZ=_BuL1i|GoKB ze}Qb6hOir8E@{37J5IX=K`L_l8>&N!WmC6<1lPWn*a_vx-vZP%|Pam77Y(q!aCH8d@2C00#yJ29DoH4Kt|90!8lz5ys7EC zEs-ZmWGvv3>8?6^V;qNTx64F@v}+u0QQ5&*KnT#pl{twTO+zmQ)yFz5Su@-fL(MeT zxP3vbQ79d$u~>u?vx#Ijah59u8v~av)=VQPXfKJy06BZZ>OJxQhp4j*iz-^%@Sb59 zy1Tnex}>{9P&%c%8;0&Kr9nWt8zdwYkS^&E=?-c5IM+GX_5GUvYwta4?PuT5{XRCF zuZ66gJpAEz+*5lg(ySv6$1I@3xDt(5Kb<$ef}(0Kl^=g)hYHab^8tHA1N?A68Q{Dc zzFFXlu|t~Zu=gmNp{iG_lJ>cLa^Yhjywv!AOp$wBRm`-EXy&E6OZwk^r}waHM)Y?PIEu{F z&4Yh#Y6cX!QY^Xs2%Z4BK6smsuAA?VyY*OqbyP8m8DbmM4+C1(ajR{TDVJjj_g>P^ zjMj4n-Bl*yu{%zsobyDy3*l(Q=PxeB9`(JUdS+FlIc^&SeuYFG)a^Halo79L;*-KA z)A{ksMBEnmNu?ZGK2y`C$y?0&l=f!w+L`ag8a1%qZ$FsdVY#*6_-UAN;2?5Y`{Jb} z^W@|MVls4k0f(s9Mh@6-6T1C1jhY4Go_-%Jys0nP_ZjOS$BJ05Hh|gvih~Qj2t?wk zH}tHFfb1Ubg>=5OQ6XGsv_+O@5Nqrm@C*?~fQ%7OE^E59QsD=&SFFg_Vq~{H6WS=R zgXU|FGQO>3kce1csr5!~y5+hAe}H3rJ%tFG?~DD?nsR+|-PE}5Y?v~6@L1;UbH}wg zt@IkMD^B0|3-s1io9bCoKpn8w_ItA%s?iGgy&!Le;=*WyCiRz6JV7-TI11yrE$cr! z2EhXiU3Egh(X_auVG_p53h75L&sFOoKnBHVHSDo|BBPUTul*IAJTMn8#^`u^B|=2 zCDg+ou(+7AjbOaObgBk%uroa5Ee8OLc7cDzKRzzowHtmdkairU4iQBuj5X4!*K z#@k0YqgJmny}3qrMJ8$4y9m{U&FsLSw+nZ=ON|TVm_4g6yT+tG-%egI zl3Bn~o{XsZw^*{RqMzll%y}03`LIB{#sH0}AYDT-?}rAn3*pu3!NbE5nSpgtF8@jFH@fAo2qp6#;nmjRfQ8wWGCrcy2?-ToQ#myRD zVuZQDgV%^i!$Ldy2uEDGx+YhV&B!4t(w|yG%EDPcrH< zDgD4-HAP0;Zi#VECXAyCE;8GLr8J}?voS12dou_$4r=J3-*}#XQyhIreAhjA>HpCC zGH{yrYogXS;CGNq0&i%e)=LaBqC)e=Mk|x#0}0+XoLYyj9|$!EIhE9PHS=v-R1*Yt z7z#qgq1oN@$YMe~bsS0i#;daUY7jQVT&*7A(#%c#mh{=84{nk#3fSt@>RS717d@J8q(id@p{3KO0< zQ;BUxfDpEp%*A$XZFP683{5&vUCEp!{%l*}^LaHbCEJ#@5s_?;=$|a}Fh#}(4wXHj+yw~IV!nQD zVogyBmk~y+-LP=yzhT)A(a^b}1M-wSud=2X=ngV!@!hu;j<(qJIVJXA7$xb9P`{!d z>3vp=#8v(C4ly)`L(%_o{f)@&XM?D0-Kx_E9jUF%phhntCk@m@O0$e~!#1>yj|Ea8 zq1K>1xVlzrNtUNN5U0BdpO(Va<01&tf87+2q_?}inQ_ylG>cM4rvHbl9d1-&?KbaV zF~yEZQ_)qgs7q_A8T{F_iF>+DmsS)K(?_uf4+Prb-)69)!yP7GhZwo>Sk>bp?7jRX z)}o+a>;3`fSrQk+l9wxr#b`j~eNx6Bqn7XRR$Nx)!PJkcEtlwI@G*$N01=)aB_z+Y z5nzRp{ERROz&W#mdSCw=zD0%sDlimhdTl6{4L;z`5B)hFBqr#kbcs}&Yun}M9cbEA zKV#)8BxwQzJE56U(54sg9wauGZF^+%|62J-UZaFnjmG}0ulk%dMP3j%th!~;XuiBn zieC7_Ig(z15fp`RvytvO7_S)lQ`47}um)0TwY&E4bmRTDA>stLE6_=C-6>Hwze-e8 z_=&3M*gfo}m>X~YNuXPFrjz=Ed{3FjdfL_p0wDnPs{ed4xwT3YkTR(aIl zE9{$W7m|f~86;+*^|g(8f)+3>>ysZwCG8l$wKfftz(R254oB|RFTGFxg^}<+2(hMY z!C>IC0jbH|4~c_*-~G7G5UCF_yV$DxHfJUW&uB(-?K#igdB^2ATdSRP_#DQ?^}>r! zGw0x>U;X=`M>7x@Tn7YLmxSXaE)a`EZ7|5hrpk?y8mvhT0$f*h2EWvysVk6!uYB!& z2i6=&0p@BYDOy@}^*?AAYP5sQqBwY*HZTcCcb98QB7-JCR6pY^#Q+2TJQ2F@C>Wyz z6|^Y}`Z#9BkvH^klLRy48@!8qjxNw+sI4VP9-NQ~VlYLUapHod*=}#YQR>Kglq2R_ zV-E^3-hGb)pizS- z<*PNZdrmOXXM+rJxHKP(#4C<}v#4_m=S{Bs(v+%sg!5La2F9gAEBjv{0tWwI&%=L! z2j`mmdnF^CI2& zU|}qOIkugAlGyiR6RG)VLt4u2-|@6YL?s0=L;L_^Y$NH95=BgjMP~Oi{$wGQFAa|L zBuW8#R~5)p(mHLW77hu7`Dw}b#R-kQ*M0Z*et8=~G$t`oZ2vMIwVQz?4E1ej6%$GZ znkq&x4=Q4iu=-xv_@SNjDT2^jEB#i9+1HKgGZp=%{Iy*T(^mg%pmp%O4>49>gTUot z*6sdwD}h0|{yEAPRq_*K$S(H+X#&ry+&|XxXeyW@p6KQk#6MxGqrq&YT=;1vIQ6Y` za^$5=a=ltE-pn;?Hu#@c|kXg@gG? zb$nU*c_f+--{Oj-<*C6;;Md1&hpdx6yzWtlOWJibMKooOEBYz%SmScbj&UB{h$)?b zTucVMbjVIjNNT~cP&p@g-+gkX;<%IJIjeJk+y5+T&4Vw_uH*-DCA1$?Z@lp{P!I6a zMacNcDJ~SThzN6Rmna}295U<6rA6BCh~hm|o+K(}9-~rOPLLR-grCKP_9rWrq#1Il zzO!;iZdz1)`7LxPyD)9K@p?$FmABC%V1q(`%F$hMd3l$Yh~X@gqic(r^K6n z@z#7&PE^SM+3DGo`(>G5J@E?dTLIN}hRBxn^HbwiI^KL^4Zr+>S#X$%3g@XL;d z6{X*EDWXLUEm{z`+N;wLNT9yuNwNbOPx-U6rq}TFdSi4b(_pQK=}5&w+vjm!PovL^ zM=w#@0s<%XkADAd*Kfp>gOX<5{ti{eXU`O_Uu~rRW^;FAyy8<~HR0Eoh5glxtCv;9 z_kEx1UTNAjr3gDsyd!+I7c5XEEkcLn_BK}8UhJK!%v(oU+z?0tRD^0@K1<|FQo61> z#~rHBg>H9v?JWbNVN>yH89cTEP_8ogS=$02Pk4fNa1HHgE|oTnqOT;K#GC~G`MPfDC6lr6!OmeKs&Xn-K84FC_)Pby{p9zhP8TldlF_&%WkiyfO6@kg`%3uz7J$l}KAvpAJkqBY|_uUbG^GeB>QxVYV% zDsR~T!g2b7&q~gp5VgaZ__Y$grJM1L#Hcgv-qlK$_k*Hgw`Dpd;F3~&SB}EvIdt8V z3O4mT**dW6Hv`$Q266Y!%PJ0p!w{W6L_A`z>?y9fh3?NKZKe`qgR@xl8eLiMPMoiK z$>a{PyjHJ>$!Gj7r#;5MISMy9#{K%pX~?Fj$tt;;`5AS4PF>}K_<;T0;dg2_j}U1} zSI~dJ(L7G}mL^ht{#Ns2$1yw{9gOzrMVnoN;T$WRjAZP~MT^VzdmZ838`A3M!wGV4 zf%;1q!FRQyt*!TFzT1*QcRR8nWp{Hlvu^nB*mZ$~4?x#!OnaT~mp{-;UgPq9(eWf&BdAA=StD(jPL7G<~NA7!yT7MU%b&1bE z5_)9>cs{JP33z+01X};(G8S_rBc3Y1p@3R(XRP@53N~J6`jBVH4vC;`}-7SK7v1Wy(w~Ou734bq|~=tfCAN(HB)9V2{m#Hv{W~vaFIZGKVxQ9x2Pf{{>LSx_P;Wg(NjUgKsU}S*w*p&cTy_5wHU)RX z-q)amXUi)Lu@~F*swlY+!m<5S-K!3V0m|*ib(}4c%qz>hAXo>Q`20xwD3%0X@eGWy zKmkVDYyXb=16UjCzJUcDua&i0qaZa;dk)4KM@TnrF~-z#%ZezG6?<)@5^JK(K1T84 zQQJ2AzKz1h3lx?;$(_RZ;~h!S>do>&(QbHpC0nUp{3#`~*ho2eh^azl?9iV2E=t^~ zIq%eeJ#{U=wt66}KA9uq`47XET&AepujgUEhq)b)rjix&%ych(DLalJ~8KM0o|*Z-}z<>WRz-8P>wXxQeB} ziwLh#$=$hdCh$}1z_BMMQh@@6WFJKo7`|!*{mdzDHY3hoyr))JT`t7+ob}(vQ%%~K z?V8_waVblP@l0Gi^6YzgDlT8EMjeBSrUz(DPCb4w4ibCoPY8)XGgZKa7jOVjLp|d$ z-oYh(>y9jcaF@6MiR(E5w+*UbfR7>S2e5y@qM@gFzIMery9jmoCuTUhFTDXpplm>-0IkDXaa9-5$dnkn5STy-P`%#r&a@uybH+tU*6>OQ(SxlvX z+FoU}G}TgQjPNjVUoUiL9AA{W^=XLjCj$_m0Vkeg3v+g>n?*wT#l|aJpuz``s7cdK zd~1%)VQC*LK;{|n3yRIadnfOYO+kko1C>LPJWry0T}S%g&FveM)^`)SX=(>fgOcl^ z`1%>3qzJEg@36`^Bf~e)LCp z0}+J*4WIb!`J)g*zqirZOthfNdrU*x>R;$1b!;bS$y^hNa~}&MkYa6HlR)Gs^MQ82 zk+kOJa={+_v8VDAcc@yyLp??F!S|5R?2%86GeHxtRD9#*tmLJ*-mo?)Y@%jOc!m#nICTGuD^Y>M81zdX1H_J!UF0O9kpOx)9;n8puQ!oAd&K zuYZIhUtTY4=J)gtea^~6d-Ed1r^NSyKSj5Mq+Y>Z3=peI%|-+hnVfT<{Strsb4yls zVw2WyHQDtoQrI2VH?-R6J!iy`$qar{uXMoI%(Ba}S{9<;k-+AnUqOMw{2*6g7?O+) z2ZI9sawziCyp)w&>EJncxc5Eu!If{|%|bl3^zLl3HDjbMqDOzI$BYl_j8>?l;3&cn zyOHV7M0`}<)U;|8*fg8JcT_P#D84uMD8Jb(ipZZ4YS${tIhRb?qcF%)_xG^KdC?WS zZ=2U{(c%bHiWDyF`FkTjZrK`mu`7;petucUZej)x(4En~=R}#ZN?F@@TlsUtQ7?Oh zlD3T)aD;Y9>rs;7;)DbaQW(Z937fOjnn^%%zFRb{nEUX4+I^UC+_OQfsZXLO*H$EK z?Rvk|ss$Fq$I81OG|N`Kq>naLAWUM-M{a$w^92K2IsX>EI71ZC5FvDJd7=2;`{NH)yKIlTg^{+lw?S366c0eKq=;f*i$?d(=f?*9zHit zokO0+SQL?1V(-q+i}k0J52zRgw$JVh@-dRY4Q6n`Txxf6wj<|e4u+a-V-=bEp>l@% z?&UvS^l&IBde*#K!wVZ^!Apr9bz`ayeqEhM&nE1!RZ$ezONU-nP*Gioqn&eC?~q5xyc@bh<{HvSn1Tnnf4c5d7klWLa^UFT71!L zev#C0Mg>KMUC`9?g2uD2nC05KbLZ2M(d^nCq>k~Omeq@z>#(Pj&CPh?To+l|+2@yrVKRJJ$XD{!HQl`>4csHPb~vm1aox^0zQ;z2kKV1Xxi< za)$?G(I|gsY=~RUm;KH|ZGaMAv>0=*)V>=u4_l(6L@^Ej+e?@uTopm1#EMjqLt@p^DKn8;^8#GYW&;+UFHwvkCh!f%H-8cD|em_sAem3zh7qee*x0k zGH1-$O%6tWp9UTV)s;;gmPTw=OvjL&Y_ zFpg|}*&kz0jhmFUXk4wclCIt{WE2-2UaAe1P|#al#(KOhYH$EU4xQrX5}uzuLb9S6x!wwvqCi6Bpg>Pc%GLc%5Yi9Y2X}QY3>Q z8pK-9nJY?LKx%T|!LrLBc#Dp2f&EI)Bo; zD#-va61p}Ek9MKEVi>9$R)q0!U_G8EWWO-G*#xw8hka5L+4Gm;Z3DhE@d%_VF3F#Zizj>YQSSIK~7{AAF+IRB<&&W{ck>4?b>9=Z!Mq08Pc)!Gz z$cNiVxUbJ9i?}33FT8@`zqDy&zD>Qtik!9U8~v$UY}nRx3M%Z~?_=cI@GM*XXRCx# z>M@o6}}7wnt5i0mWplhW8?yG1sbS)X4Limm0{+Xi-5@ zs8s}_hl8%F^YM~ijjazq>`)`_7D>wCcnqjaS9nYlmQ#8+s@yNR@X_cQtLm+blGF z?>Tj+#UspDrOVO!opbQ7!*EUvw_oA2-fMtRO3h9gK9j;o1-)O=J1`RMT0a}y(H#5! zsM7u#oopR-#3#1nB#Zx+=o^D1rIYu1s1K$10P~ zS^Olk?jQ_O@B#G(Gb&3vX4r!H`_M%n2EA1eMu!DTK7-9jfzQGKX1zxk(X-Jf=IPkQ)`!HYo^8{4ejR@Sy4A;k_V?L`6^J(Sq1dZzJtub^9h{$kZ5+p=9~ zec(aD=2k&)_($1G5a_umO)2?HAO_Ztjps8l%=RA%RlKd2T>$@E55=@ z;y{X1>nn;e(36l$)$jp4R&YVAARQwjWydMf*&#sw0Pj2Y22G|TfiIWr7`7Amjdjt} z3e~6;5`!muy=jwQZsd>RIi`|s0=FrTi1Rs&GU@NzxBido`F5XsrbSrHUar}wwx|5L z6AVu@RAJtYaE`4|m@w=EB8)^G%L9Ou&?KNdB>4tQmPj0W|mAB0yYx zXQXfBGFrzT8F(EsFv;|}|8w|!2w?Q!(PruXwJ?7vCLnJYC z*u!MB_!kH>BBMl9c93|-+6}@in1A)xv!jE0?-3ktQPk5v3ScKWJ9!4fzdR$rNPwek zv;xZBImIMk4S8rAcQFTlyXG@73VipI?+SNWV{8q2KW~I&a=@o8GSyoMY0T#eRcA?s zpNJaZ!HVg~*uKQ8ho4zydd<>r+Sd{54M?$vs#>OURFe2}j(c zCo2+KwmS>B{6_F{0+;av;+pKcljRi1WNPF`Ag*lzZMLPg(CWI{9Wca;)Z5x4JZgP*sE&%2PcJ%yUmt0UqNtWo``OV?^rW zQ26a?UdvLZS~1+{E7y#h!!L(#{m4Dx^0#<8?*h38(UOa=YJP3AB-sa_`_gm7|ArU zM3W=>O|rBkR9cvw)%fL?rH$8(kKD6|U&S5Rd(vb4dbR#glsP_ns)z%b@VA9D>@YnM z==vzl$hb!NZ3CI4cuT#heIMhm{+ z(7xAfGe(*|8m;>t-b4j|9JS-QJpGUzcVw10V&i8E{BCJaIS6T-eFcKBt61L1qZ-9O z_1Vp{w|78LKd4bvX5D5rYM6 zcQe=@d5IE(40U=wp0z|+W8Rr0_hUGvcYn#b=MEdebbKw$)c;rvy`Qk_Qq5tZKkC2q z?S)A-VS{!zudozC(sti?UgaGw&uktbwzMTNhhv@lyyE2h<8UeEr+80BRKTW zR*Pd^$v}yL8@Cw%ki6`10CnULb^^PRw}?ZQEJQ>|+5)6MT53bUo}j_%5%OWP~>CdvxX-{e9DbSXPLt@A$@9EA`#!hmEFTRE@AeA6% z{M*d6sE1=E*b&;-$ZLVJ;=XJaiNYobiU!$4CNGATcCA*j-AGOHtEA{V0Xz^^IkSynai1e<$* z3KN}lj~O$^Vwh{`5{BE5&%Y2kVnLkJ0?|z#v#5@rzVdjavV#9qzw9{OatPxnjnR!d zh&ebc6&ohBY7of+L5&(wEVNXs&K3xHOxD4{%t@AzXAIqXUK$`^{+=VCBir{H!lC-O zwc=zyCKc%M_@#R|VAPWyPb1M|g>hPxd-4Zldby>cN*agyewDOjrqojE^_002#SMq* z-rsR$E;)*4?)gz%+$hFlQBu-#ld#UMglFQlgHYNT({XXh%|wj|d3RzE?`N^Ozwg9h z7jRK8Eac<)Mj@4NXKInE({>wT4G&GUv|=oUzCUKcBFd|CM99E0;ME2pAl7Zqasd6u zbxxWi6c77|Do2?)bC{7D&GmjyUmACO#-nwPO(hGLj{V##nA{55HzeO|wfu2PGq$Wi zd|l!<`n4o{W!?HvceX~vw0QvZ0oPs1SO!A@j4CvYZmkOlCk0 zOl@x%fVh)iZ1~s^*fIz~{Clnm0RaSDvlW~Wf;&YP7VixR0YHU}A^5<<+~%kjog){0&W-|)$huY(A;DunN^h>;ucUsj=a z?*CJT*P(MjzY{waNp5CZYFc(y`lqbyr2O>k^x~58lCqM*qVnwAXQk4Mqvg*{Y}+`q zRAr+Bm?AZQ>J6g?W^cTH)9sMBb2pc3JD}Xvd^KYksVAA_VuH4nVAf< z8eB*X{9{iZks%Qmoy3>8LLxMg-$m}lcCJS)wnYKU|i9b{zSc~RAFZC@`Y@qejlxzso*tS%+fo zE(H640Ci&61WQ2&s7_p55Y`kdR~P)i&V`@>xO3KBIQQj(;Rc!oMz;||6saMH(DpE6U;=*vwU2qsu8f9t?$VLYneZt&wYIq!-HiH z7DRv?ImDZRHq_u*7y$gR8~fhL0iYHTW5(H>c|iYc%HdOz5{rvPulDwOe6u6U3r2qV za;d1Eq;HP~uETam>cs+#^dt7HC!tJEU#h4WpHseMXICpg0&;M7J^?;|;rG?IpgHxD zOjM@QmJwSN5lyv1@gyOi%CKHK?-QvO53yqrj54=M_N)XGc;J(SdIy9dC+>D80GmO_ z1U4oW$m7$8Hl84$O57K$MQDz#V!tWgI|=_YaIRN;72(g>k3+*dhc_ckFEf8Fr|MXk z`V<9B2aLgiEE(?hEqZa)hY6G};>h%NJ(ho>X>Wemmbq-Io)L@NI0g?8ajVID&%cMx z%|3NGmxo1W(tH3(>O?ScKkQ(vH68vSNJMi+*dHLm?X>{-KvUh7=y7nMzg4yXpj`lT z>b(U6*d?G(>;N737kIp_kO$#N6h)lou=pf_LlEC1R_BS5L)ke&#KE_h zfVa4fR%dgqFZh$zB#M_{4S+{B z6$98-1ZkSV6`;AJ|NMi?nD*|hfi+7fsyRu${-b;wWnqyj0J{P5Vl&J*xa(1E#X>kx zaVw@b8_VU^2dJmw3%JZU^zT}aHxZf~@h$31&7wz?w}yJBd)J*m+l#+5W)mf4lLJ9= zvP|_1Ew+1@YM*sBuBmkJVaVd(UwWXEQuAIA#1|~clLU+MECk{8KxP3Glsd3k7uZW1 zX59#l$2LIP$e$cUK(<#kCm~aJL7@($#CwBHjf>h_3GhIlV=TRM9qfZ^gxNV6Juz=G zWLB2rmd&-G)?78$ikV3sZT@k)l_>Bhqmyef6=v*Too$l-Ord^KxiS&my` zGz+rp(@mAx__M{v-VIWl>H@>IO1HuZmA-}%7EK4uto|N(IQyOTf;+?0i>@O%NTv9F z?^98dj26fm`bBN%ty!=7EdlH(mj5THFa^t&1qFN0^-xIyRX`90Bg|k9kQnQ~ zCxtc3_db2c1`1*}@=<&F1-q=_wHkmhQNmYvU$BX)4DPA7ec}Plt@ND)?*{kFKuyj9 z>xd}g5NH2tD0+C%wv;$+5rl>J4Yb=1e=CcXm)=ExnNPx5XjmztN>JgLfnIxC>Xugt z7I_L{XJ?km6{W(i>a4S#Ofpuu;d>ttG3ch|<9tVEBfLvIdj%|;T;C#*1!KJrfpZ77 z0+fB9dV44#Ct_@r2H;0ou(44y^$*scmSTKJh~ISl2YC5@)}Q9j1X5v{gQoPklFcQv z_2qfn*iWFJoE*i+A4%!%>EUGJ;t+f1Q+8i`I>R$B$85CfT zw|^{uYZ?+l*+ClgZTIWmO|s0A4iV#k=Q5Sw?%ez+yXoiHTDeI6?2YfqP(lgVMz;8Ml)hwHPcRMVR>1IA$qvugvM2O6%>76lqxudUdiCmD zSV}nPrfZkP-yeN{pv-^Zj@#Q}aw>Z2t0Nm1^FDrusm+nEh5JvExd3|30J{Q`_Ptsa z(2;ErJQ;2vrEu3PFba1_iX)L^(o$v_$C=$PG4$NMOAmB^Glq@4pXYB@CE@7!?xk4&bd5n}-Vir4rH(4DV;P1bie?sNn_-G4Fn7UVaOrrRxmIUinFsQyTq7 zYfLZ3Xd#!6YIzLbglF0ir?#1v!EF4zgE{$~ zsJGc>M7fmbg}ON`Y83o@AHJ~{QBs&45u<>dH)Y;&@+P=LD(Y-gKc9o|hjVZv;|IZ< zlKeN;%_L;C4hc2$Yg$G07(<&rruubHu9lC(<=FH1Z=0zGyhf@(e0AS@%Ej3~*0BXy z4cmj@mRwNfjhoeXv!h!DvnHTkn2reIacK|F*fjF~9_^{h-ok$?H?e8lt<#c-olR%^ zBUcu`#|Udl4ERB2PU$(6h@oL&^2#8%Zf5#P-uDctP0AmqI6KT1`F+dneh~S6n>=-Z3545dNpw9*BfM-k%05;w)IAWoBEhcV zlcu|;X1%|vAf8pPQR=Qn0Z(;Pxj-ssj7f47HjwT?=0^Xg`(!q#=0N_MK88%gUi8^= zlN}2;;U=Twdn}3Q7f5A$n8UWv#aar|4xNw{oJ6=yUah<$D33Y9Ia|XhZ`+X)pWusO zfCY|{{E};iCJ6W3MWagW3Eb8Qi^xvGmCgvH4w+tdd3WXM2Hr$jbZBVBMP(&$e>nA?VJocZjQvToYW3rdPGuAFt_u|pvLPVDtiGOw9U3zl28R|jGK&0L=E6PK+PJKI*<-x{UL{fd)PHYb;hxH^>(=V9rgP}TI ztNKb=2$)Js4BUyJp&{emXBa9~#m^AXo)(Omfl~4T z0U)mbAeSH8m8_adJ8Ff)_^?LyD`@t8q`j0}(Pd{o?d+ypxO6&ki`T?n0%Py0W(bWf zqt(Z?8E^Y;ni-qEr4xBA^9u^SCJrl|I5uaa}*dgrV zP0%UrC(^9ik2A$OIr7)G`;+tDKZ$R-b7eHPOvNK43@Ls%{5yR)z?3U;-VUMVtmZ*OUpdG!C2{UvMYgQ&q+yD?%uVRv$fd47>MUZs3Sq(B$G5#6xikwsh1`%>$}=ch;M?33+vMFson^8wMR>J zI%9a;;^%#X<4gkc{vflBEMopL#>RamgEw5B*Li$|M}UtF=6&O8;qC#v2|J0S1sw?@Qw!4jfkq17eIrZPj$yAQX zLe6vLS2LSN=6W^|Q12pSnpumjlbr2*Um1R%;3=o2tk!5-=`eG5&dgwg z>OwV%BK!*%MGhoV)2Z~4&pFuGvN6ahvt2uWZN2Bq8t3YC0%U)UinC&< ztAPA2qqam-9cBy5x+G;~OeAVed7l35&}8MOhkxueYL2+9bYo~;2FK#9teJ~nTFa#R z*fdVwp_KXoPEr#L%C&L5Na`^E@w!Bp6GlR+K3Y@Yhdj7V-#g`P_3ZcSig$mY%3l(H z_AU^6AX7eo&MKmC*_rWH|AL?OpnKRw!R)C5CG<$Qdh;sf z??^~=)S zCcwKxSkt3#w>yKDtKq)eCa8XDL2qVch1dNVP9^AVAxX(fXAu^b^5zMsvI?FMi%*(^ zec^l=^xz#gA_=7VRV4A-*XtweS^Nq7CwN0b2Bgvsr;Dd_(?fcQA$Tv^sf+1`_Ke8% zW3Y6nWqi^{n-a-qId&QzbVF?Qa+NLLwR#f6DCBu9zr55oHf%)3rc2=UYp7Ya0a{oy zVYsbiP8|DF$B;E`4Hm4iZl*|kxF3g8f;ukk*Weeimq@V>r(3ritxi@Mgx?%;(60K4 zD>J$0nEd`Ai9W+@w zj*4fj#8!W;$$fn}ZJn@;tbDIYIcn6?cyvr^LWG%c=X^_{Q3B3<$c4{Sq)%@gYqE(Z zrv0l#`{hf!SEWN7wR;G1j1Y?e*@s3Z8d^k!G;^N^F|lePc5^;eAE+Y%I zT=pcOt%}Ah__jY4y(`RraE_gLW7BW`a;IouQS$Hq$^79Y5~8-{w=*9-IOnqVS0te0 z^JLGr`k|KtlOs0*h<_lP*<-`nP4kX3TAg;T^43AM(2Vpz_?yxlD%oy6=+N0ECGv6nn=`dci7Vhp@lx43!yctB{b8X7 zEsq$w@;mOk#@-jnZrY|#q^sSo9&qIopq6$f__IREcpN#xyP~X2%MeWI5ac8Yy)Imq zr|?H9Rg!XkOjFty;;z=T;+?sSDoJmnG ztW5#_k9d)z7^y{y)zqy=hIB&6wKAd#M)1FZ6nrSQW1W>N+#6<~AQ$`A3>1taA_9=x z(YM(RGW_AYC;ZNmW`E*HB+DRghd#jOY}$433df%-t14rHWRE04`^{%|qH6}pV{tE6 zjcpD=!$&VcBFE9AC`bR!xKvkK^L{Fzs8hYA92TTYvo3k28&R&Mxyo#YE2V=n3SQ&j`g6^PMY;777@Go<3EyZ#>V91_ zzMsH+n6c!f-TW38ms2$lxx!$)Rfw9o1pmB;uz=IWFVfGH)by;LaUWWGWP^mqA{yU+ z{MvS~IlcWZL8jF~l?=(^;BI8xeK#<+i}8$FIF~YvJd)ob z1Vs~&-NxXeq_M=+_NS&oS_j4V{>OG*Ho0$!6u-+1thRA}$`MJmyFo5v-0^Cm*gb&{ zjt&10&@=G)7n(QiBlgZ(ea5nA1Wk0Uc#HN^r_P`Uh}iqh&r0unK3AA?5U&wOZMvOl~MAc0n3!w`TET zvIkLKc)sHk2a;Ufiw}7z%tJ$y?@O86F}bcS?5%QqtWiN_R?kcOBmEobP&nt-te{Ypxj2c*gxGrn1MX=e+9;aNGDZ zjt++BxBV{IwBg^Eb_%ybg1E-SsWLv*u52EB=SDUv@U9!`hL6I>h;|%=bM*(owY!Wo znYX3n<1`U?cfziAKcP(_u}-<_r5y}{ZWNkY&p0>g$J-^;HH{s{A74C*8*EUZWmMKhM2ll$Ak-;0LI_6JHJr zoEs>UtVWbyV4Z|m3h;=+W5sjb-ai<5I1L_qd)j+@r$vcBonwFOiqK)t$_8UrhP+bg zSvtF!41*L$d*ZZU8MELsilDupl45Iu$TFfTqB)3kYa!!ZbCHTReGh2w2g18OXZA9J zRIy5hx}Ac4?sHQ8Q@>f5szd-GmiK${kb$yD7{c1-Eb_+j>#9+L2Uaqz@ho#LX`zcp z*<9xi_q~<nC(L{P*ymf61_7NGd z#GJ;DL)(>w$LjA#bALz#ldaWn&L@%vl#u|qJ2pnS+aIX{-P~$ktd%}B)?{5ATq~Tu z*W&zS?wVa%qQ4{1Ki)YEm%f;7zt5r|C01bM%P83Y1MpkWnU~-Bn5mkDBH8<0nLJR6 zT95&)Z>uPVd$0!KZWH8+4zO*Jo|p7$Z)3yruKN|TRX+PbUf(IsraGa#REPW!L( z`wxHoQ^!m=lvEAj7bL80QR9_y=|MC@R(^wijVWEl^jn1pUh%G6u%vwLa+vX!$wEGz zaR3qJ)j{x%dn|1mO$Cn=kZh!*;jQ={y@We%1TU|F0E3S`taup4Q!!GUhSR zf6`ZoSajTnbG(+I4hqf+{#D@wdB-i*9lFl4bCKPqeOdFRQ*_!MAwWH+%YSqWw`{o& z{WnL{SG|uhw9IP;@jrKfDNHUv2a&m|hDc|vdD`lqJ@7+Lk*1~qjw)Y}(WPgpp5brZ z_bsTENqZNfCS4beJ)>uoLq*5OD5MC`6@S|vswOs?^eluKT^L2JoK_7z(t1rc)N`Q! z>l+lLjr?_aBCmg(ambaXJD>JszY|f5(V-k9OqL}tuh=%!jNKkob9L&h$hJ;jC>~oG zqE5}*%TRKYd?uj-)6v;vM%Ga0GA+0}P`?QR-F#wd7AN0obACKY0PeL;YN(?qM8rPmyMU8l8J zz#@{SQJ{qSlI%S{BRk)@kSL}(H}HiiYYHTsiJ=!J5Wtj3L~WQ?)!rum_TXdY_cs+~ z`4)(oHwjzOuA*26QIftoAdVgTH= z`mHmg+wOh&Q>{@As&QY^o$0<)o-j89IMlshYPm0}tv8V5(Zs6ZBDM=4M8=TclDL7=CqbGGu4zO?MRSWbt+u@kWNIMONYjKw65#zJ93oWv1o@h zY7i4FR{3ijpbT05fWyOF585 zi~fJnI}Lwy(-L&&a+F`PtFsrkz_@4zDY99f3Opg2C82z66=bm=0UFM8TOccq;ntH2 zeIXy~M;Don!a141LCyzBHjw&~pit7rbYz_|XoCq+P<`UJIit8-;Mjxu>MHxQc8eZ) zqx%8hR|Auc*SA$sxNz9R_F54pv!A>&V=NV#?M0_}W0*CgRcry&bakCYHZ-{?94JLS z|8C%*@bXAL{Bq(VZ?)85x8p2-b7a8rE&2l@&7GE_H+4E@7lP>Kynw5Ej#%fBDd<^1 z&EJN{knZ0A)fBQp0@)8U>EI?f(_avIYIrmJI}bjcxR?o-UV8SY z4_r%qAt%eDHaPx4+(Xwtg$=#y0jPxMCs1>o2PkYp7|Fs7XjK3*LhG=Qu|Td#4Cx|` z3k4t`8C2p7c|R^T>m4;?!Do!}xFUb}i&R}QrQh2_4r{HieY@eZvbURx`sdTW{XcOq zGZ6WLu)>14Tdv7(QHhRhpsBNTEw}DU)n*o&$^b81;mKTrg7-DzV`_!d>+7!o%X04O z?+uE`vm~ac?60tWVISK@!hC~_j&YldMw#(Y_A>pMHM{ufALzS08X9G&pky2aL~!YO zepBG0{h&&G?13vp4ySTj5nb}M2@Npf5{)@1{cg6wXV@Xt?xf1=p}p|!@7pq zh(NKm#TxM2doQDJ#F1bur2aec!>w^veJ|tdkq;XeBiSChylW$^m7}(|o8&h&3`0f8 z_!9FYVXa8(-9g@~jJ=N%X}?fdHC{k^o@N#;)TF(pxa$6W%9K6B@P_jso+6@+4NfLJ z*bYQ+C*vZoI51EgnS&&H^i=4XM7Xv5q+1*Xr#ntfcEfTv1$1N}_cuo|hE+hxoo<@U zo&6TdoA>Jp8_*Q^x#q%Jp8sNatz@WR?6+9RU}2pU-+NU zt^EFGx5$Ok**o>`qpd9T^}cRE62qf&Z??PPuH?;m5)9-7H4klkMtkoMaVZ zl|bp0PrtkqBIq0=>OxUtP0V;kg|MAPa+8=fZDJQGmujEa+7%H4D_w^1>Wsqxd#REw zZPu(`k^mclxhrk%VIhsvSBfF5R2J@~Cebw0dseZ*TWodbDda{iSy2V`b{G!y>H;9( z$ZZZ})90P1flg4vb+Q9vny4%$xrTdQZ`2;|`aYV!gm%_zQi$GW!8LFbBGG339RH%1 z!Axa8{_1eTp@oqW|DTHS^S>$v%BzYYox&tYn)*E>IV~kMJUS^pB{4ZSGdI1g;1w8= zot={Z{K?EB>TQVVTeLpro}J-8U_sFeW@$N7O1l*trdO-0)vsO4?)cE07x~E*(yp8X zbR)&lk0p{L8V}>QhZTI)vSXY+VNX_YlI>ibrJ#pg0(idoRsM*AVA(K`7#}(}4AeRE z#BtzdZ7&sy&HK*BQEuRV;gl(cne4(2Q!#KZl0z7~TM46s$-&u-T2xg06Z>{xpcsa9 z)+fY$ip^Z?x6Emm4Tnpb+aC6)b%6x5)w4`AhdQjL!7=tUcywYq_YUX0Rg0S~Pa9Sl zcTuWMr?pAHU+((N#2*id$NtU>^U_ZEBbY3AW55Fign%tNXbrj;N)``KbfbVC4OF$} zm0FibsyUca#Y9@t+T?Q{AHPe-tn4G?!bH~lCEf}iDzKSCWQp?!O`+Q=?ILIZdLD?6 z<5~<+OPKzmmtHF)?TFuEH`{|ahr!uG_^o7}Z^?9=Y|P%61ghX*f6(#rCAWBcPPMg2 zifM<=M(nV>6QC@`m=*kI=Yf*f=2mVxUv=tm7d1|57>W=Ql>{uCq=i^9cZ7RK(r&Jue64*Z#m@Rt3mx5L;^CRqWlx z$(LOeTjuz~H05vTbUC}(Ow`R2(1%A!SnH=a*V9TY+~pu6etVhe(=(Q-J2G`F1EhdE zlAld*L~N;=xwW`RXv8Lnv`o}T1tF~`$|Wb30B9E_`ipE8F;G--8Y;EVIL!;G9S~*J zy0g0#OYOF@qe@C`LU|!AQ3=>(&>~S-u1EEUhsTq&ph0EkwkK7_ZGSE0=t~05Nj|Lv zQa6%475YerGS=yqnITXbim`-2IP$W-b+x&4ZiesCB)gGUKkl47Z3LXH zVODhYT;Wr^^QRJ81}TGx_{l*^d%&EXPe~KI7YfvFS@&rY-HVQ94-BQ#RpS|#94A@! zu#dImn`sw5KMe!Hc?KIMOsH6pnqf)%eG-idU8r1Sr7MRv0V|&*mzuEA+4_7U3tNmv zuX!v}ZEc7#YScF+Ha4|cTPK>w(#1o$aJpQoauNf^BRV85o-?dN)44L__j!DA2f)71 zx3zEwRwrTjp~>UNur;6Y`>19|i~?RNmpwpk0Yr8T8qB9{JEILqmv{?fFAmwiU1`hR zY*FET>`ja$u>^sDOv`Ui=-+6n@B+0a%RvBw#3-Og!jM!*g%emtt$_BrteJ`MT6|L* z6n|ds+uqXM3B>pSYs2P$jyU13M-1)w&f@7MS1VdyrBKF`7mzgUdzc%a1?N53-4Nu; zry|Hryf0~{0hJiTGBn~ze89*+FE7CVQwR&aT#AVmQw40ma+}!a2ZQl9=x8Ol6C(0F zN*KUrxSf0%qb7jhp%FH!e{5^$igNz-0CyS9ZL z)BlOuu$hU?%Ont>M?d2dl(x01FQ6PqyX&=q|uCF0Y_a1%OJ7u0F@myt3wsY)-u7CkSX+Z)t1TSi;53VJLVlybo~j^K#x7z7f5pTMkXF))meTNWqcC$L zGVahlxu+vl782E~<4YK`aXAJ6c7h6d`QXT*L3j`>HZeCp#C5Om#{UkEll*1zW(?%v zZ%Etpcc)=fk6*Xt`Ew_^np6%UV44NwfvDW9rD59$fXOW$Hf;Odn{u>NL@UHGOlgyp z#X0U4#=~R-I6qQ>PK?Y`>#-A@&U+YRnjaf}Py}ly+-oHJrq<8O31j`BtR`ED_Se`4X8c18zpBMLbXlS24?i7KV(8f z6RX0RKp$xd^nrpCh%SAVX@j(-J3W0^&Axi`V5k0LnWCRUi)fp-rto9vfKMg%$~epi z?boUoF(CBtbie8n@xciUJ_P|Ci|uWzzq0RfHk8m7%lLTpOPevoTlppaqAbMIf#{Xt zZZSIf=u-XsIm!^BpOv_P1~@*@3?N1)>Uxmqe;8&PQVQy%%S~6?GF$$5Sj8z8Y$*qN zV!#!*?`i^>QqjZ{&C#3_3bXbb5fk!Q$RDSv9%T6RWL_niR>;q&vT5j;Q*w@G1_8DP zJ4wU0)l@j2NQ52Ry;fU@2+022GwHSrVm-t+3btQ8l@ZtroyC45Vbf89i+~d?L};>4 zN05IF-pkZb2RPJz=HplB4s~&eA=BVZgK;(0kXCjoIL}AMB_Z)t1KFbA=?$pEYz3!0_MNC>YRPieJb#-7WLY2JuQc-(KsEIfzzJBvAG>`=tL@PyvW2bu0o5IvQl!37R zz9$2X_&L8;pMpHEg*h8Tq(`^s0JWi{Lw-msHQv&LXcF%fSz4*l>oNDj=8qfoCeuassJh|TNj6XMlEHX0g7bfsi}wyZpZ9%p z%;ltHvz)k#`!jh?7V}menPP<=d){CKZC3&bt65cl=e+Jau9Ee?12~-@Q7zu;^ZJch z>_cwm+k80u2tbdc)Ckm>c^#9(gFDR#=+)sL>%wQE(CQC3&0hLlUV-%d((#}Dgse%g z6p_%d#FIz?;RE_L3Z_`Jd?m~#qaO{#NB$Y8h8tUb0lF7vNtxbxRgRmysZr|mN4mm~ zZnQY$4@R66ZN5Krd+t=lNR6zfX2tH~@E{+*z)|HO5E=$P>cBBUMGQ&-?RPd?6?9rh zN=iY$MU6z@$K9A5ym%cLXhVXwBvn75WrTYs#W~kAiT803^g)9V$EqfL zD0U|CaN;O$F?<9G4u7Yz)8v+zFm`chHq+({Q1$s~ul*87dQW39$7*>#LfjY6WkNWq zzvGSMMegnH>f!jkq0x&!laW1YRWNz=O%{5vE&2cf4PHIxPlHCz!Bvv(#$bE2XOt}Q z91vSWMKc?pf~HzMC;>LrK2T+sx%YG7xw-U~?8i^-lTtxR4WS#!=z`SGpyJ|d1)l1t zDkU_HH6pEcf7&Fx9DiD2R>U*~2xaPu-}fa5}bY1kPhh zH^N3fiQAXrq9JPJSPCpF(239mZ#F1SHb@(Ie$Oz*KEzi4Jp{kfprQPVexnLz$>v3K zv)wCWP6c-+VUYR8^t@FrGE@>xq-}S@i~Eb!(1|WZUdJjEL;bZwHsA z(sl<*uv^^r9N6Da$4x2MQZ|11Wbz*i4%Rg67qp2l5L;*kmwZPg&!qUpVbJG=ZIp4y zLtjEuQqADruBYKkT!Ta3b;<}?7nrcCc-^=7@pEoJug)fIyO!kAPxE2H&d{a|B*yT5-#0S6uXhu7!OH7K%RNJ>9ZF8DK1C&(GU4GwfA4V z=-aApSv$>CPeca)8u&sO?m0;incLhq`ZOn3$xtHh48EuiAEQxMhrk0HkK^d)zbV=Y zx4v%ACKV5}e26<@#t&@=MQX+^0IMS3?K>R0>JI@e#s!3Q!*|MTOqunO>ah0Ne(SVx zVmf)Cysd}nNj9(N@UeA5VVZv~gT$Pbm~R9-8ejCgo5!-%wBoz)SUQ9Drz6WsG<*X8 zO`q4hy?sh6L)cX+T9>l?+NQ{wfS1UD;R(IQl!xJ)^em0ME_f7@Zq7zkxy=+i0Log+7^c;4pgc3YKE;k#Uu4+$Gp7w*vQ6A z+NpAVDx)}*4qCBS)I1zl()T{23SR~1r!LJ4X8r%6eRE7DT*>H}W)OVXEdu@=2b+fzQsapNhtxh!8>kjsY zoI*d>zsPS?A194o+R1OnXjABr>*=lDCuE$i>P4K1o1$ffm+k+N^=#~Q2(6Bl9j@#H-0qJ*?5d-s2U70JP9#d|#Q%Fk970(jRSpG(cu{w*SwAQ$Pb zmwYO$$q~!tdL^w9oYzQdhi(@9!yiTvbeQ6n&A}vMJUriKI!q(Xj*7&}p(_~eJ3{K& z>MC^A*JjO+UJ>~A60%X@)xj!XW$b!Ww9)NR*Stv64U+CaGc z?DHV#PT*}54;>VigIMTLTl$`CscJuk)OEP9qd1cGUwX4|hoPs16{il`EX0d*K%mAZ z65Ts5y!JYiyRkpf-@lLZ|Br*o$nhh77 z@OI_dHbu}t$$<2TH(TS2c@A4Igb(y=RkW*jQT-ZKgF;I0I1;@QABEnGRazp`9fHwX zXW$*J>|psZlbnGLk1o=egfgm9)bqJ!+;PFk=9u`%rV?fNwZ$u&rSUU9mBaFp*|<(W z$r_vqJFVlQgI6AX_7&KoJ#nLijPDTpWS%(cc6oBmB0!DE?deZ~~Gv3a`WQ3Ez) zUJ?zQ`0W%{LLz1v0e#EVZ}ITVMWr+cq7dv~(?To79#VM>avjoIieO{ssafbw3DTvC zr>>Oyy~QLhooa9J9IGH17jepRV}#>A09vP(NV?NlMRdj!yGCP0oO0Zx1U(QuWI#;h4_Tsiq1{#}ld9_N@`;Drop173lsC)oBa4JvKJ+<*-%TCkX*)rzK3#T0iJ58S`kHE^WgJgP9IYDHm z&6tf*1nzSrJ{LF$T-qO}$;LgF<2fMbBMGC%nd~t4zop6-LEehB>7776GZ$j5jlj5! zUQ3{`Hmp3vFhL9#1&-sPMO`N+kH8*8Avbg1o`905(qlfr)T&KzNb%VZugpf2l1|qE zqfqd4sv!PaGp{=gi{8(j-+#7jOTlS!y0aGRvnQE)v%0PoH{Ay2v5$-4zm4=KN^`yE z$##|D=}fimCJFTMe)2O>WU;9J%TH`9Ip5;KSxR2*uyP}MThZRR8(i@-E{T$?PvgfX z7oM0$vTV3-8GT%B<+XPjm(u4-|A zw9JI1uBB*#IX%7tObLeowMiSrHvs+!}6-C|7JlcGw-3T z-5I-22$esA`NN+=#(v{qIW^j&D13*kv0VB=o=LU`Ww{V&vap?Bn*(!Z(h<<#pM1nP zlw3RW8f$XR=!1~4=?(L-15<48bsp?c-M2>7PmUfhncKZiw12NWrh1w*o&LGs$awc5 zLC72kU*ypKtzz7ab!!tZsMapzr$kyH5XG!ddS- zB-VBRY3#hwMhYtSMjU=r7X>t`e+<}CD+>}!*q>zvWlU(r);R~SfqEC z*r|`U1Rjjj$||;K;xA|XI&YU1TWSfCHxQLr!*74xI4N;8y3ap~#8Lw7#{E~~zatwk zkHIjf{`hhBRYb%%xk*bUsG=hE1nfWek0 zL=^_gF2Aij79YM2VKl;oJbteq&<&+Pdwy-R;8>?iCbA=VqVFq`?^>)0QgDVcB*( z%2_0$=KzcVn1!DMV^Wm+b-lCOTiiWcG${e;3hZY~75G414gwM|DF{{;3<(LwXO zN6XI73;1@}kA|XjazyXdn^I;5VCEPRoCC!1-N+{0dp4-1_`)J^^>n#Er4;HT>Xb53@&h9(@L?Y_y@4O>o1|J6vb(FS~_RfBg}) z-g7$^{!SY~#m4#69h+Qpv^;E5*~chhL`PJwUTHmW40i6jrnZQR%Zq9Kx3#<-`jH|C z1YYj)y|Ca7jx^*9+QJ+uyUehB6EKYybd14s7>L0BArMP{Sd(U+W@5iMV@N=yzH5Xe z1q&OMYJ>Ou+T$is{h62skx=!b`7x{QpACS(%fbe%cm((6~#}YqefQYt5UV4nmB@!1|`DJLVVG%uORh#c?I-bvKxVB0l?!{T)Q-s!Pv?kh20L zK6Qr!mb7?=&7jgJn=CmkDgUO^7w7~OBbtp5Dvnke3ENKqh#Hh3TlGbFg`T=i)AF;~ zspy(<*X-iet6sjf4K4vOyEt>-H6A!-Z>7>CbljRWjvHGRseO}k91Y`vS9Rtxu1k)A z*%mBM)A03_)&$jxA{o|$dcuwIC+Vlr`PU34_^5yQ+OwW@Hybbc+P}1$w~~IRYks|P z6P$0`alOAqO1}?4B{hpzP2BXbdY zsb(FEbU#m{mFu?h^V_tHbowHO@aWi|uN$-1Zg3(9!3;NU^~nx2*XgKO?BWyAlz3-T z)k)Syp|`{#lnLPW_x+Ewnpz~)1YmXdhQl)<&2~ITa!H@tK^My^Iw{HiaLQs_?8BuG zl_Ja8e7q-Z6+;AiX}|co8;+Dmhg=SN_9N#AC*n2x`akz1>dM;&wAmSv_VMn<4hrqr zI5U3)aw3nQg3<&q<-iTOecm&{9m=5<*d zVgFEAkauPUDQybSQX>k1XRZEC_Bn)H3^-rMku<%JS~&`AA6n_^7INKDIeYt^lOfj; z;faDJZhd9g4e@w+hYHQ-BOG$y{?3vKi1aq(9|(KlXwwvX{{2%o5)^CEcT2Z?L-IQ< z_5dUxwdrr$KV9x{;^Ur$3Y7TyNl!8rjTLI0vXGJ0?YFh-NY2o^OClQ0CMVe*IEM;c z;H`H8=eW{3yCT{7D=8RweyA&O6x#ipLa7M!3@BPyOUb+~42lV&k$(Q1kk;VYFCFCJ zd@~tQGnSw5MlmtATf{3<%oJ$NDbXJ!i`Q1$+wPg4)|(VESIWocA9s=@U(HZdE%HqY%W$Zu^&5Wk{Y#`sau$9!_^H9!5v z1=@&G6&R+KlU_rZO?)~f__ld2E*O*Z$86T;E7n{AMvR33dY;L>^r=I1n}(Za4LZ9kzr6h075p)>yD-~56ua_jA*ggo zLh_8gR;x{@!B3e{?Sho@RKJJcoTMKe^mO@V=qk4V7+scR<(P5^vG|>eY~6Wu4XiOh z3vkvdqGt4V&UTvnuu)*hFq9lKgOEW%YsdV*VF?RtfixAb$+_$2%*Tf}0#6aB{NwUo z7WzI)Vky!z-D0r+{3I{&GRPxx+db~_dOFAsr^pOWc6P7VS}QR84f5%-oOn2&Cp#7n z&u(>lTKV(-Fh9ZOLBv+b-nBnynw92fw8D}BwL>+!Ol=FSvtRu0(k#%|P5^X`{@P4^ zI94aBqaHWPOaF_CfN9 zJ~v1CCl+lDHYH;0R}17O`-B`yb6Cn!P2#Kph7zV91z{0)xxGSvJg>-8HGjjX23S6= zouqZL9?F(d?XbtG6=74SIf5 z2EICi1xRiZ{p)=v_GE9gf+U5qINGA3Is5elIbi>J2uwq)@d;!kyXL7vq0>%O`=0O5 zb3N-rrX%UU&+6D%gMo0l$L7gN`=8brrZzFEBS;C3J@EC+bK#eMqT*=EhWZF5U)G-+ zik72~)L2)z$B;7)o*CqxYJPA(i(6O9_?l#r5_k#8Pi?L3@KUL(nI}TPzlSv}cEmUo zZ(YbXEY`qp+w$U{c_>yWq2y14p!xf?t7H>Mogr=4C|8rhLjDjN+u6bW_O!pec%eWSarA+-#vj{^lHBdLTaeca-#&oy)pG}!QHuXAL# z)>WvffoVF`1+xYufwn}q_U{|Zo9=l&yXp;T&qcE8X`e5Xa`4MVE??PheC-U?9=()K zeLHuNYW?-$F7H*8(`x?1lbC@{0iZ+I%~J0q)F+Fu9Yl5ALV?f%bbx~yB(c^=pQzZ( zn7ATEv0dh{HkhM`ZV#q;!sZ`P>S|6fR4EN+s_Dk3TIMciB%)J#4O7-G+KpRcv-z~F z@>}Xiqg%ELU5p$)Z7?EX^}VC%SC-p&97!~= z`kAHHVRJPrHKtD}jDs6&dkJ37zrOyaRfqOxf{^Ln3hh{|mi(P%2e4S@@>o9c0dXWC zIUypi4Tnf9!!c(^5<+WbQDc;2G@B?cEJGQQLX3%D+cA&4(sXqH=XePEufTxzDlmNi zh{r{ik)D&En-ias5*-yCAD$iH+?==@Y=;$apzmj~{o>(0m2f}1BR}w9w6<9x_ zh_6>zaF?9e;W{`LF4<5UxZADETq9fAxm(ojMB2ZyUyUs*2()_6D60j z2-+WVm8?KvpANDzO@F}#vf2Dema{p$w+MkBr#!XyEN0V%7L_|00CSznIwNPZAP1*>Cwnjldro zx_OsVO}wleJ8Da4l$7+YQ{p4Q(tXR2NQhl? zn-@E!NQ@WAw>J#w=iMdW&Ay>IZO6g zKd-(G+4@^CO&RkpMCNM9W5cyPVQL{mrz$8NUm^7>qh7gM(V;sl*k9P0^YZzkaq;jA z2nPRcf+0i0oU0#oW{RFkaS**p^taS{k~T6?cXRo_#W$lLiYr3{!-MvFcfa_2A?DIp z1Gj4>zm|P?#;VrN-6(3grz8ZIX>9mdf+(C!w-CmaM#(sdH=?qA4F1TVG$2s9t#vQ`QDCqmZyqQ{@&1WLwK z-;^EI%J+B&!PO&(cZCHhYxo@>9Zd6vKZ9t*60jWVGp5eyPtY)q%?2hNf*FVU`rf>7 zXNbL*FU7~$Q}!fDJvej=|8N8(U~mc&2Xq;L+FAO0g&6FxXjl|*NC{4{ z-{46%k*KG+ zwxFb8_Es9h*Ow6Lj`SfyJ2Yp*+fGIc2o=-Bv<1VU+}E;eZX9ITwhnNhthK2?4685; zQhb=bGPOLGMKm$i8V(cS^B!@Db`xDJJW&rX3m^4SI+>S5;Kv`vpbU)BAuyhC2yz%5 z_1-bF6e-0?_U)kc;_=h89K7$#c~fN#o!$~f$YEF8onByL?v^Pv-GmwZmR9lQ`@aSWA2fhkHbwm<$W zia+>~cMj2r&KD;ffwVPhG#nP%TE5%e@^Ma;zQQoH2S82@eZywIu6@2&%Ht zWO}^e*=*?7apdf}y~};OaXATjGC1Twtj4Gjoh%%)u9xBgz4>A0q zc~{Rmy#8S~?7egi0|VoA)L+Kn(0}Z}_@*d73^iPxIrQ|^;N6(z7YD&}HBL*Wx|glN z1X`(vc{D73#{We9=+oNG?fnzcNRS4# zxyMB_ct) z(3EgTX}Du+5!cXPsGLnHnw#sC^;w7ju(;qX{jG|1=^*#NuGN7$3JCEz9ZOs{uxg@h zL+XU8B8~#O1$~LlQR+nSx$j$xH%S+hp4SHAQuf5^ckbb}KI=U^oXU{I&|0*eMg!;^x<37|5Es)+As$IPiwf`$>GMMV}gJySp! z_!F@$plSkOQ#5ad*~k)5+05XxqtyA=%_W>mB=RM7rv$!!1fB8)={hBd9Qa@FT`YXw zzE_N-ho^AsAbX{a(ZH#>DfCrG7E!s%-`piW@Bw_DEhr@5FDKWjijcLjL+SI6VPl5#Wu#Cl5vz!zSkgu{^$aBKixImLeXp>!;MKs`wL0zwtvc>v~w z<<`L1p64ZYNth!-@lw|PQ>2eb?1QIvr^MI&IZ(cJ;p-me73E+j86gMZ;&8=vZ(8T* zUi%8BU6xUK+7#Y)RWkVc9w{7#FZQHM6F9N|mXs-tnnc%uGq9bLqv8OS4>DV1V%3{^ z-*6X(e}L_(11WILJy4F(g@Ai&5Z*IZvM#K6it{h)aj`f$mdJXIa* zoFD@$e5tb)>mb`+EnBxnrWSw`8#*|eG^zV^>0;wsp%@}$ZjfnWfG89xP6gaBx~4;-Fy@CnvdZ7i5X%>g zFGB}3t>jF<+qeSIINZ$!{h0j7p667j-6GjdKB<;se@b+WYNQ(>-Nca(;y`XOz&ZF) z1LaXPgatDAmjdihhXW${4Ni-#f3J)VuaE!ktY%(vFkl#5T5MgM3As4&+dY<1d?P1; z@<$3!azi9>I(3km?c0FE&fjo zKu5p^Ee6yAO<@S_LxsD^AK0U&;)6>dqd0{+qLf{4As2;&}T!-g==z-fmgQ4hO;#^QMnNaA9;7H~2 zN}t5PbKd|tA`5DBj~j|JNAI0;DM4$_>sh2G-Ab5b(ZxGy**LEsaeU3SqP>4c{F?cM zz_4YyXUc-_o6BD09=J-Gvv|?ik~xiR?HmOamMClxrE$BD;cPiHfbdY^rjTYmRWejm zp*vgW$7;1>9P-c}#~Rfp{kO8iPcpJ+xF2ca19QC`u`|p%-b){E-I)J!`=L9(KA!S2 znO{sG)}Xi{rTD3w=K4q}+9Y2W?sVME3HBB?z7rgT@OC5OS;*MM)g>P=$U)B7M;yCk z0YQbx8_0Ke53(=gZibX($V3_PR}~Stl#oht6uxN08bAzQm({mP%dAa>ZUr}_Sb-fA zOTaW_WgB}M$LY%^8PLbp4GA-6judAK!y4zq+V!3gVlg~zZ_!N0v#Bp2G!8E@$rf>Z z8o-S*yo)ZCxUp1p6+)(JHSZUh8UZzrA`Kp+CQrZHZBZdd0=Se!Ia)&B!fBi_Jv93k z$7Jks7^13#r&7Z@2#p$7z)aGJ1fkkk?_sKb@Ondi!-724?@Gx~bUrU_lDNmzjzXE> z+o4y@r=;oI!~VZi_^IRQ#NIx(>K_dR1(Oy>In#wd_a5^-*=BFdNPD$zymQN5i~Ez8 zolV)2^Z*Ca{mPHQ2ZsW8dJkr6=7QcV>);q%|9Ybnlin4^? z98n7NCLxEbzYfAC6=X_6LC9d7hst@eXaE^+Wsv^%uQZNd6}h;klX%-E$zwP<7?MDP z5%kJkNr!7)UmFU|n}79Ti2U=~biHFu*RoDQ@^NJ9ed@Cws2rnDa2GOfR1}*kmrrTK zpTJ~&4HL&w_T=jGYp<)!RVH0{^t#gcAz1nbz|lm~hg*RAVIJx$H;PGqMt{&NJrxIRN_Y2KYDTHS7E}^&|I3YlS1b6h{(%0fKjd8ev4$k%rKiS31b=NG z?AsJ%a3bMG{~|g{?L9PoO3UMfMHYag5Lk|i>Z%urZO%+vz^$MJZx=J~$toyUjCBBd zH*w1$x$<AM0Oy7djb%4X!?j>>dj+2lR5)*;7bIl?zmGcKD_%S}xDpZfv%rCw-tP!z-vZg0}@(u0*3_iK;+1eVDgJv7lh#L4;v- z6BOIe?q7OwqI7~g5)jR~hI0!fs42Tn22>CZQQmQhrA0A(mJ7vN&cYPTEL?r6+p}2@ z+a=YUjru;(GwyuYz~fa-(Z8SBPyId=%Mr6SEe)VpRQy|v)BXiEgFgo3jZR0X?+$y= z!f_eQj>+M@PYh1Qu+da&JQfCZc#L~1>F&L;fSg1>i!3pA9vuMd+A%<^9iLwQJ%Zd;b9tpd zrfZmEv0~&DXDs4gJ}VUS>oRJYxD0XBH=Y$3MuAEpGUwXr@c%O_(e`QvF;H&8<`cY_-$C3wAgPhsYA*;}UcRy$797|0Yti+KU~c{ALdv)g2S*ZWW<#|`Wx>bn>xGzHVLo>c4VD?5`Q#WXs3m2WY}plfE0qbLCCKmDPLe5{a!uEb zG5#qob#pSddh+({PjqOLKu4*NzGf(uC_NOueL&(=u|O4%+2)~ZBbIb;cG$@@@2fur zVU|%;A%S6~!XSWy4M4|uvpk=Ump)!)bGQ7MK3!Ba<6~4@Z5PnI$gRwXefTR9R&Hw# zPrzqK=;w?HJpi$_{RF{>UbtV@V_PgQqjq|Oc%Ue#0L3W@#?OV^TPL}@c1H$z6EQWC38@DlZg&qC>RiOi zn&=v?`QF>nn;MvPR1L@{9=wB3QoWAteg3hA8)~bm%TmZJ=ZzPI89!bx*>}!6xCbjxF?67xeabw{@{oA~6wD^Pq uAE#5m7nM;_*inE{(D%STGMce2#==PfpAZkVy Date: Tue, 28 Mar 2023 15:06:18 -0400 Subject: [PATCH 19/53] Add sprite accessories from ARFS ## About The Pull Request Adds tails and ears from ARFS This PR adds the Zorgoia tail and ears plus the downward fennec/Zorren tail from ARFS-Coyote. That's all. ## Why It's Good For The Game More anthro species options are always good for furry servers. ## A Port? Yes, from ARFS ## Changelog :cl: Arrhythmia_V add: Added Zorgoia tails and ears add: Added alt Fennec tail /:cl: --- .../new_player/sprite_accessories/ears.dm | 7 ++++++ .../new_player/sprite_accessories/tails.dm | 21 ++++++++++++++++++ modular_sand/icons/mob/mam_ears.dmi | Bin 550 -> 588 bytes modular_sand/icons/mob/mam_tails.dmi | Bin 388 -> 1105 bytes 4 files changed, 28 insertions(+) diff --git a/modular_sand/code/modules/mob/dead/new_player/sprite_accessories/ears.dm b/modular_sand/code/modules/mob/dead/new_player/sprite_accessories/ears.dm index ae41189936..887c2be58d 100644 --- a/modular_sand/code/modules/mob/dead/new_player/sprite_accessories/ears.dm +++ b/modular_sand/code/modules/mob/dead/new_player/sprite_accessories/ears.dm @@ -9,3 +9,10 @@ icon = 'modular_sand/icons/mob/mam_ears.dmi' icon_state = "cobraears" matrixed_sections = MATRIX_RED_GREEN + +/datum/sprite_accessory/ears/mam_ears/zorgoia //Ported from ARFS-Coyote + name = "Zorgoia" + icon_state = "zorgoia" + icon = 'modular_sand/icons/mob/mam_ears.dmi' + color_src = MATRIXED + matrixed_sections = MATRIX_RED diff --git a/modular_sand/code/modules/mob/dead/new_player/sprite_accessories/tails.dm b/modular_sand/code/modules/mob/dead/new_player/sprite_accessories/tails.dm index 9465fc210f..9b04a8d631 100644 --- a/modular_sand/code/modules/mob/dead/new_player/sprite_accessories/tails.dm +++ b/modular_sand/code/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -9,3 +9,24 @@ icon = 'modular_sand/icons/mob/mam_tails.dmi' icon_state = "demonspade" matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails/mam_tails/zorgoia //Ported from ARFS-Coyote + name = "Zorgoia" + icon_state = "zorgoia" + icon = 'modular_sand/icons/mob/mam_tails.dmi' + color_src = MATRIXED + matrixed_sections = MATRIX_ALL + +/datum/sprite_accessory/tails/mam_tails/fennecdown //Ported from ARFS-Coyote + name = "Downward Fennec Tail" + icon_state = "downwardfennec" + icon = 'modular_sand/icons/mob/mam_tails.dmi' + color_src = MATRIXED + matrixed_sections = MATRIX_RED_GREEN + +/datum/sprite_accessory/tails/human/fennecdown //Ported from ARFS-Coyote + name = "Downward Fennec Tail" + icon_state = "downwardfennec" + icon = 'modular_sand/icons/mob/mam_tails.dmi' + color_src = MATRIXED + matrixed_sections = MATRIX_RED_GREEN diff --git a/modular_sand/icons/mob/mam_ears.dmi b/modular_sand/icons/mob/mam_ears.dmi index d15acea8ddfb0bba7d76c8f8174e878b3257445d..2360da03c97eae43dabe622d94b9b3da2dde6717 100644 GIT binary patch delta 484 zcmVXz~Gk%?CWtO6v``*lTcuuhmj;qg%NK+f*=UuC&_vmh_dkBmApB>`00001bW%=J06^y0W&i*Hevw~u ze}zYrvVyCh3)pD@-JCEQWRZ2E0003mNkli;iZi!^ta(jYhp-h&*xke8P(_j*eGDvUAN7}v(o^M#t^8RmPBxw3vs^c9rp zIdJEXhcZV8iW4zd)@{A@SK0yu-USQ2f2oOJ(djEJ*n1*aQwM#6GP~j@c~73i96E~% zeI!_51K6mjK)+Y8C|r&Y*p2!O+I=Vx2n7FytS`en!V{K$1m5;~O$9U$?vM|wI&cfz zQo+RIPRH}YLS8ubq-lwobt*4f%$gub=0)dl2|Sq>+##74-F=uR^8(OdK{77@T>Juo zKp+@}<{POdV)+JdL)>6a=L2PS;}&c_;CT@nu=zmIyciJhzjxZr2L$Wb;qq07Xg*+h oF(8QMgJxV1&j*qh0>OXa1;q;|jmT3;;Q#;t07*qoM6N<$g1wlu`2YX_ diff --git a/modular_sand/icons/mob/mam_tails.dmi b/modular_sand/icons/mob/mam_tails.dmi index c0fa5d349ebfdaf4b4a2e5eb44caa6b3f3a1b95a..faa2b13ffad751c595b1cce40aba1c9d060f7fec 100644 GIT binary patch literal 1105 zcmV-X1g`suP)V=-0C=38kv$8-Fcd}SVA>uq)GP)xUbhjS0Sm$RZea>2?or!RC~Tf+`)zgklgwF=!(c3Vn1)NL1j#RmvD z#H^PA^g}A_t?^G#DC_G*+%ig(c7B|pq;b&Wm^X7=QJuIb{{$nnOPv!mNh{yhwN}GI zD(y5jng~ucXbj#HjT3lQoU=-l-{*e-S0A5$^fkwS0009VNklGk9QwQQO5o1bXY7Fi^XE?wFb252V}qrZTgT55VYxX{{X}c;(A&n$UOrb zoDlEbU`V{z$JF=Wm^PpO;t&_aVzF2(7K`;+e^&z`!P!zs zM}J2E3?;l+!*!ekm;%euw&Ed5dyhBLj+UA1ABZCR2ePRCfh^w}V6mQ5(Hp<@yHVWp z3W$>E?ZhkLMRe&G&>NkNy#hMv=*lmklfL&15YxXLAVTH2{#1Gegj3HO(0=P1fGmGQ z&j7Xk^#mxNv95j4t=kY0>Z#H?tOL}1{|C~4HIFLP+A!(>?zqc82t!cyH^~90^AAF) z+VwlT0h7 z#U^oN)2V(Sj^o$w;85>Fk|g#h)em%&F$Oq~q2r_afy4Cj9FC07(g`$9^#h}iBP4JI z2gvRE=rcV25&@F|SOU^a(ft4oK=%VC0|9`Q$bP^ym&l3))Y8)ZK!|53ZSRfj2Si!q z8j2j1a0vqlexR&@wTAa}YeBM!A9w_q66zX?9I5+g1<=qB>;i;_0cLN&1#9RB9s$~9 zfcJE}RNyH$^8-6&jKJlHG6JBR`GG&mU@sbiZsrGmOCcNBvY*6c;|EGPY8H#dVzF4P z=TYE{&KnP+_2yq)^>b)+?IKw9zBvFv{sS6btQ|R4y=;b0UKBUba8`g^q+T||m(vbV zsTVBK6AkhLga?J=jI4UWQe(5RLKqmXX9loCY73~;%e0=sr?kKUu7^;qmo1H-*=+2Y z{k&MgfK{=+#R1iN!O9Gzsg=>cD{w$@ffDR`B{IFRCf=pR8oZ?@BQJmiw4OnJ*#$nR zpMHWjP-c7w67YKS)eZ0n%ofl$WbW7iR1f~c>qFEBZEhU^_a7*W#bU8oEEbE!`v3G3 X#dF(9o3&zC00000NkvXXu0mjfK;HVB literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?K3?%mjbVdLv&H$efS0Mc#D8j(7B7LG5ki%FK zaK~d@VFTn*Lzdq6O*3~+9=6vvm zP=kxc4<6~9_t8AbP}I}A!@@Yo__DE=!kkBwj!X(s2-Y;;r($TVZl`K$Zohtqf}yJE zJ>3)c^<6rtwP77Z?xmDO#yDodGXw2W3 z1B}cJGap5$O5BeA2XtGnr;B4qL~C+_1nc4i0cLh5E;WIm1r8gV*qA=~wD2gba0qH> zUbP0l+XkK^gV*= From e6dab1762a5d68b13b9a96986c41542d2158452e Mon Sep 17 00:00:00 2001 From: KeplerWasTaken Date: Tue, 28 Mar 2023 23:21:37 +0200 Subject: [PATCH 20/53] Removed die of fate from being acquirable through ic means --- _maps/RandomZLevels/away_mission/Academy.dmm | 2 +- code/modules/ruins/objects_and_mobs/sin_ruins.dm | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/_maps/RandomZLevels/away_mission/Academy.dmm b/_maps/RandomZLevels/away_mission/Academy.dmm index 98c69e34b3..a780e8072d 100644 --- a/_maps/RandomZLevels/away_mission/Academy.dmm +++ b/_maps/RandomZLevels/away_mission/Academy.dmm @@ -203,7 +203,7 @@ /area/awaymission/academy/headmaster) "aJ" = ( /obj/structure/destructible/cult/tome, -/obj/item/dice/d20/fate/one_use, +/obj/item/dice/d20, /turf/open/floor/wood, /area/awaymission/academy/headmaster) "aK" = ( diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm index ddb5c9df3c..1de929fd22 100644 --- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm @@ -67,7 +67,8 @@ And see a bag full of dice. Confused, \ you take one... and the bag vanishes.") var/turf/T = get_turf(user) - var/obj/item/dice/d20/fate/one_use/critical_fail = new(T) + //SPLURT CHANGE (So long, free wiznerd) + var/obj/item/dice/d20/critical_fail = new(T) user.put_in_hands(critical_fail) qdel(src) From 3a81451a2da564af0baed5dde21c01bc244d72c3 Mon Sep 17 00:00:00 2001 From: KeplerWasTaken Date: Tue, 28 Mar 2023 23:22:32 +0200 Subject: [PATCH 21/53] Tweaked cryo messages for heads of staff and AI, changed greeting messages for blueshields and bridge officers --- code/game/machinery/cryopod.dm | 8 +++++++- code/modules/mob/living/silicon/ai/ai.dm | 3 ++- modular_splurt/code/modules/jobs/job_types/blueshield.dm | 4 ++-- .../code/modules/jobs/job_types/bridgeofficer.dm | 5 +++-- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 6dcb73dbf8..cc8bab617d 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -285,19 +285,25 @@ GLOBAL_LIST_EMPTY(cryopod_computers) if(target.mind.assigned_role in GLOB.command_positions) LAZYADD(caught_string, "Head of Staff") addendum = " Be sure to put your locker items back into your locker!" + //SPLURT CHANGES (Addendums changed, only tells antags to ahelp and not heads) if(iscultist(target) || is_servant_of_ratvar(target)) LAZYADD(caught_string, "Cultist") + addendum = AHELP_FIRST_MESSAGE if(is_devil(target)) LAZYADD(caught_string, "Devil") + addendum = AHELP_FIRST_MESSAGE if(target.mind.has_antag_datum(/datum/antagonist/gang)) LAZYADD(caught_string, "Gangster") + addendum = AHELP_FIRST_MESSAGE if(target.mind.has_antag_datum(/datum/antagonist/rev/head)) LAZYADD(caught_string, "Head Revolutionary") + addendum = AHELP_FIRST_MESSAGE if(target.mind.has_antag_datum(/datum/antagonist/rev)) LAZYADD(caught_string, "Revolutionary") + addendum = AHELP_FIRST_MESSAGE if(caught_string) - tgui_alert(target, "You're a [english_list(caught_string)]! [AHELP_FIRST_MESSAGE][addendum]") + tgui_alert(target, "You're a [english_list(caught_string)]. [addendum]") target.client.cryo_warned = world.time if(!istype(target) || !can_interact(user) || !target.Adjacent(user) || !ismob(target) || isanimal(target) || !istype(user.loc, /turf) || target.buckled) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 2e9030765a..5a9891a787 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1037,7 +1037,8 @@ if(incapacitated()) return - switch(alert("Would you like to enter cryo? This will ghost you. Remember to AHELP before cryoing out of important roles, even with no admins online.",,"Yes.","No.")) + //SPLURT CHANGES (No longer tells AI it has to ahelp first) + switch(alert("Would you like to enter cryo? This will ghost you.",,"Yes.","No.")) if("Yes.") src.ghostize(FALSE, penalize = TRUE) var/announce_rank = "Artificial Intelligence," diff --git a/modular_splurt/code/modules/jobs/job_types/blueshield.dm b/modular_splurt/code/modules/jobs/job_types/blueshield.dm index 9f0467fcee..a6de268cb3 100644 --- a/modular_splurt/code/modules/jobs/job_types/blueshield.dm +++ b/modular_splurt/code/modules/jobs/job_types/blueshield.dm @@ -15,8 +15,8 @@ considered_combat_role = TRUE //Brigger then shit yes it is exp_type_department = EXP_TYPE_COMMAND alt_titles = list("Command Security", "Command Guard", "Command Bodyguard", "Blueguard", "Blueshit") - custom_spawn_text = " YOU ARE NOT PART OF COMMAND. YOU WILL NEVER BE PART OF COMMAND. YOU ARE NOT PART OF CENTRAL COMMAND. IF YOU ACT LIKE YOU ARE, YOU WILL NEVER PLAY BLUESHIELD EVER AGAIN." - + //SPLURT CHANGES (Tells the blueshield they are command, and just a bodyguard, not security) + custom_spawn_text = "You are a member of command, meant to act as a bodyguard for all Heads of Staff. However, you are not a member of security nor a Head of Staff yourself - avoid acting as either." outfit = /datum/outfit/job/blueshield plasma_outfit = /datum/outfit/plasmaman/blueshield diff --git a/modular_splurt/code/modules/jobs/job_types/bridgeofficer.dm b/modular_splurt/code/modules/jobs/job_types/bridgeofficer.dm index a148a6a9d2..5132b7fa60 100644 --- a/modular_splurt/code/modules/jobs/job_types/bridgeofficer.dm +++ b/modular_splurt/code/modules/jobs/job_types/bridgeofficer.dm @@ -16,8 +16,9 @@ considered_combat_role = FALSE outfit = /datum/outfit/job/bridgeofficer plasma_outfit = /datum/outfit/plasmaman/bridgeofficer - custom_spawn_text = "Bridge Officer: You are here to assist the bridge staff with whatever they need. You have very limited access. You are not Secuirty and you are not in the line of secceustion. You have no power, listen to the Captain and the HOP." - access = list( ACCESS_HEADS, ACCESS_MAINT_TUNNELS, ACCESS_BRIDGE_OFFICER, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH) + //SPLURT CHANGES (Changes the custom spawn text for the Bridge Officer) + custom_spawn_text = "You are an assistant who's primary focus is serving the Heads of Staff. Nothing more. Nothing less." + access = list(ACCESS_HEADS, ACCESS_MAINT_TUNNELS, ACCESS_BRIDGE_OFFICER, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH) minimal_access = list(ACCESS_HEADS, ACCESS_MAINT_TUNNELS, ACCESS_BRIDGE_OFFICER, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH) paycheck = PAYCHECK_MEDIUM paycheck_department = ACCOUNT_CIV From 02c20c35e42bf2b3ac21353320c244c74684ab2e Mon Sep 17 00:00:00 2001 From: KeplerWasTaken Date: Tue, 28 Mar 2023 23:22:55 +0200 Subject: [PATCH 22/53] Mafia verb removal --- code/modules/mob/dead/observer/observer.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 2dcb8ef98f..42316b6832 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -918,6 +918,14 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp else to_chat(usr, "Can't become a pAI candidate while not dead!") +/* So long, Mafia mode, disabled for now +/mob/dead/observer/verb/mafia_game_signup() + set category = "Ghost" + set name = "Signup for Mafia" + set desc = "Sign up for a game of Mafia to pass the time while dead." + mafia_signup() +*/ + /mob/dead/observer/verb/mafia_game_signup() set category = "Ghost" set name = "Signup for Mafia" From 538ef4457c49e8c4e5ec981e390d3a1c711319a4 Mon Sep 17 00:00:00 2001 From: PhazeJump Date: Tue, 28 Mar 2023 23:58:45 +0200 Subject: [PATCH 23/53] fixes this damn eastern dragon tail line someone wrote "Eastern Dragon" instead of "Dragon Eastern" and the animation did not play properly --- .../code/modules/mob/dead/new_player/sprite_accesories/tails.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm index 7f9eff453e..a7ae4ca2d5 100644 --- a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm +++ b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm @@ -194,7 +194,7 @@ matrixed_sections = MATRIX_RED_GREEN /datum/sprite_accessory/tails_animated/mam_tails_animated/easterndragon - name = "Eastern Dragon" + name = "Dragon Eastern" icon_state = "easternd" icon = 'modular_splurt/icons/mob/mam_tails.dmi' matrixed_sections = MATRIX_RED_GREEN From f6ce4b186ac2ea07285a2a791f618013ffbae63d Mon Sep 17 00:00:00 2001 From: SPLURT-Station Date: Wed, 29 Mar 2023 00:37:32 +0000 Subject: [PATCH 24/53] Update TGS DMAPI --- code/__DEFINES/tgs.dm | 119 +++++++++++++++++++++-- code/modules/tgs/core/README.md | 3 +- code/modules/tgs/core/datum.dm | 2 + code/modules/tgs/includes.dm | 1 + code/modules/tgs/v3210/api.dm | 9 +- code/modules/tgs/v3210/commands.dm | 5 +- code/modules/tgs/v4/api.dm | 15 +-- code/modules/tgs/v4/commands.dm | 8 +- code/modules/tgs/v5/README.md | 2 + code/modules/tgs/v5/__interop_version.dm | 1 + code/modules/tgs/v5/_defines.dm | 3 +- code/modules/tgs/v5/api.dm | 31 ++++-- code/modules/tgs/v5/commands.dm | 27 ++++- code/modules/tgs/v5/interop_version.dm | 1 - code/modules/tgs/v5/serializers.dm | 52 ++++++++++ code/modules/tgs/v5/undefs.dm | 3 +- 16 files changed, 244 insertions(+), 38 deletions(-) create mode 100644 code/modules/tgs/v5/__interop_version.dm delete mode 100644 code/modules/tgs/v5/interop_version.dm create mode 100644 code/modules/tgs/v5/serializers.dm diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index 83e06658c5..54fc1c8b0a 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "6.0.6" +#define TGS_DMAPI_VERSION "6.1.0" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -227,6 +227,8 @@ var/is_private_channel /// Tag string associated with the channel in TGS var/custom_tag + /// [TRUE]/[FALSE] if the channel supports embeds + var/embeds_supported // Represents a chat user /datum/tgs_chat_user @@ -258,7 +260,7 @@ var/admin_only = FALSE /** - * Process command activation. Should return a string to respond to the issuer with. + * Process command activation. Should return a [/datum/tgs_message_content] to respond to the issuer with. * * sender - The [/datum/tgs_chat_user] who issued the command. * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. @@ -266,6 +268,107 @@ /datum/tgs_chat_command/proc/Run(datum/tgs_chat_user/sender, params) CRASH("[type] has no implementation for Run()") +/// User definable chat message +/datum/tgs_message_content + /// The tring content of the message. Must be provided in New(). + var/text + + /// The [/datum/tgs_chat_embed] to embed in the message. Not supported on all chat providers. + var/datum/tgs_chat_embed/structure/embed + +/datum/tgs_message_content/New(text) + if(!istext(text)) + TGS_ERROR_LOG("[/datum/tgs_message_content] created with no text!") + text = null + + src.text = text + +/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/channel#embed-object-embed-structure for details. +/datum/tgs_chat_embed/structure + var/title + var/description + var/url + + /// Timestamp must be encoded as: time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss"). Use the active timezone. + var/timestamp + + /// Colour must be #AARRGGBB or #RRGGBB hex string + var/colour + + /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + var/datum/tgs_chat_embed/media/image + + /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-thumbnail-structure for details. + var/datum/tgs_chat_embed/media/thumbnail + + /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + var/datum/tgs_chat_embed/media/video + + var/datum/tgs_chat_embed/footer/footer + var/datum/tgs_chat_embed/provider/provider + var/datum/tgs_chat_embed/provider/author/author + + var/list/datum/tgs_chat_embed/field/fields + +/// Common datum for similar discord embed medias +/datum/tgs_chat_embed/media + /// Must be set in New(). + var/url + var/width + var/height + var/proxy_url + +/datum/tgs_chat_embed/media/New(url) + if(!istext(url)) + CRASH("[/datum/tgs_chat_embed/media] created with no url!") + + src.url = url + +/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure for details. +/datum/tgs_chat_embed/footer + /// Must be set in New(). + var/text + var/icon_url + var/proxy_icon_url + +/datum/tgs_chat_embed/footer/New(text) + if(!istext(text)) + CRASH("[/datum/tgs_chat_embed/footer] created with no text!") + + src.text = text + +/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-provider-structure for details. +/datum/tgs_chat_embed/provider + var/name + var/url + +/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-author-structure for details. Must have name set in New(). +/datum/tgs_chat_embed/provider/author + var/icon_url + var/proxy_icon_url + +/datum/tgs_chat_embed/provider/author/New(name) + if(!istext(name)) + CRASH("[/datum/tgs_chat_embed/provider/author] created with no name!") + + src.name = name + +/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-field-structure for details. Must have name and value set in New(). +/datum/tgs_chat_embed/field + var/name + var/value + var/is_inline + +/datum/tgs_chat_embed/field/New(name, value) + if(!istext(name)) + CRASH("[/datum/tgs_chat_embed/field] created with no name!") + + if(!istext(value)) + CRASH("[/datum/tgs_chat_embed/field] created with no value!") + + src.name = name + src.value = value + // API FUNCTIONS /// Returns the maximum supported [/datum/tgs_version] of the DMAPI. @@ -296,19 +399,19 @@ /** * Send a message to connected chats. * - * message - The string to send. + * message - The [/datum/tgs_message_content] to send. * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. */ -/world/proc/TgsTargetedChatBroadcast(message, admin_only = FALSE) +/world/proc/TgsTargetedChatBroadcast(datum/tgs_message_content/message, admin_only = FALSE) return /** * Send a private message to a specific user. * - * message - The string to send. + * message - The [/datum/tgs_message_content] to send. * user: The [/datum/tgs_chat_user] to PM. */ -/world/proc/TgsChatPrivateMessage(message, datum/tgs_chat_user/user) +/world/proc/TgsChatPrivateMessage(datum/tgs_message_content/message, datum/tgs_chat_user/user) return // The following functions will sleep if a call to TgsNew() is sleeping @@ -316,10 +419,10 @@ /** * Send a message to connected chats that are flagged as game-related in TGS. * - * message - The string to send. + * message - The [/datum/tgs_message_content] to send. * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. */ -/world/proc/TgsChatBroadcast(message, list/channels = null) +/world/proc/TgsChatBroadcast(datum/tgs_message_content/message, list/channels = null) return /// Returns the current [/datum/tgs_version] of TGS if it is running the server, null otherwise. diff --git a/code/modules/tgs/core/README.md b/code/modules/tgs/core/README.md index aa3c7a9c9d..b82d8f49e2 100644 --- a/code/modules/tgs/core/README.md +++ b/code/modules/tgs/core/README.md @@ -5,4 +5,5 @@ This folder contains all DMAPI code not directly involved in an API. - [_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals. - [core.dm](./core.dm) contains the implementations of the `/world/proc/TgsXXX()` procs. Many map directly to the `/datum/tgs_api` functions. It also contains the /datum selection and setup code. - [datum.dm](./datum.dm) contains the `/datum/tgs_api` declarations that all APIs must implement. -- [tgs_version.dm](./tgs_version.dm) contains the `/datum/tgs_version` definition \ No newline at end of file +- [tgs_version.dm](./tgs_version.dm) contains the `/datum/tgs_version` definition +- diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm index 4d37ed662d..68b0330fe8 100644 --- a/code/modules/tgs/core/datum.dm +++ b/code/modules/tgs/core/datum.dm @@ -4,6 +4,8 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) var/datum/tgs_version/version var/datum/tgs_event_handler/event_handler + var/list/warned_deprecated_command_runs + /datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version) . = ..() src.event_handler = event_handler diff --git a/code/modules/tgs/includes.dm b/code/modules/tgs/includes.dm index 4018074f4e..25e1b8421a 100644 --- a/code/modules/tgs/includes.dm +++ b/code/modules/tgs/includes.dm @@ -14,4 +14,5 @@ #include "v5\_defines.dm" #include "v5\api.dm" #include "v5\commands.dm" +#include "v5\serializers.dm" #include "v5\undefs.dm" diff --git a/code/modules/tgs/v3210/api.dm b/code/modules/tgs/v3210/api.dm index 3c218d5b10..b881662d71 100644 --- a/code/modules/tgs/v3210/api.dm +++ b/code/modules/tgs/v3210/api.dm @@ -193,16 +193,19 @@ /datum/tgs_api/v3210/ChatChannelInfo() return list() // :omegalul: -/datum/tgs_api/v3210/ChatBroadcast(message, list/channels) +/datum/tgs_api/v3210/ChatBroadcast(datum/tgs_message_content/message, list/channels) if(channels) return TGS_UNIMPLEMENTED + message = UpgradeDeprecatedChatMessage(message) ChatTargetedBroadcast(message, TRUE) ChatTargetedBroadcast(message, FALSE) -/datum/tgs_api/v3210/ChatTargetedBroadcast(message, admin_only) - ExportService("[admin_only ? SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE : SERVICE_REQUEST_IRC_BROADCAST] [message]") +/datum/tgs_api/v3210/ChatTargetedBroadcast(datum/tgs_message_content/message, admin_only) + message = UpgradeDeprecatedChatMessage(message) + ExportService("[admin_only ? SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE : SERVICE_REQUEST_IRC_BROADCAST] [message.text]") /datum/tgs_api/v3210/ChatPrivateMessage(message, datum/tgs_chat_user/user) + UpgradeDeprecatedChatMessage(message) return TGS_UNIMPLEMENTED /datum/tgs_api/v3210/SecurityLevel() diff --git a/code/modules/tgs/v3210/commands.dm b/code/modules/tgs/v3210/commands.dm index 4ccfc1a8a6..ad698808e2 100644 --- a/code/modules/tgs/v3210/commands.dm +++ b/code/modules/tgs/v3210/commands.dm @@ -49,4 +49,7 @@ sender = "<@[sender]>" user.mention = sender - return stc.Run(user, params) || TRUE + var/datum/tgs_message_content/result = stc.Run(user, params) + result = UpgradeDeprecatedCommandResponse(result, command) + + return result?.text || TRUE diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm index 0e37a7aa24..2f05c38633 100644 --- a/code/modules/tgs/v4/api.dm +++ b/code/modules/tgs/v4/api.dm @@ -256,33 +256,36 @@ /datum/tgs_api/v4/Revision() return cached_revision -/datum/tgs_api/v4/ChatBroadcast(message, list/channels) +/datum/tgs_api/v4/ChatBroadcast(datum/tgs_message_content/message, list/channels) var/list/ids if(length(channels)) ids = list() for(var/I in channels) var/datum/tgs_chat_channel/channel = I ids += channel.id - message = list("message" = message, "channelIds" = ids) + message = UpgradeDeprecatedChatMessage(message) + message = list("message" = message.text, "channelIds" = ids) if(intercepted_message_queue) intercepted_message_queue += list(message) else Export(TGS4_COMM_CHAT, message) -/datum/tgs_api/v4/ChatTargetedBroadcast(message, admin_only) +/datum/tgs_api/v4/ChatTargetedBroadcast(datum/tgs_message_content/message, admin_only) var/list/channels = list() for(var/I in ChatChannelInfo()) var/datum/tgs_chat_channel/channel = I if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) channels += channel.id - message = list("message" = message, "channelIds" = channels) + message = UpgradeDeprecatedChatMessage(message) + message = list("message" = message.text, "channelIds" = channels) if(intercepted_message_queue) intercepted_message_queue += list(message) else Export(TGS4_COMM_CHAT, message) -/datum/tgs_api/v4/ChatPrivateMessage(message, datum/tgs_chat_user/user) - message = list("message" = message, "channelIds" = list(user.channel.id)) +/datum/tgs_api/v4/ChatPrivateMessage(datum/tgs_message_content/message, datum/tgs_chat_user/user) + message = UpgradeDeprecatedChatMessage(message) + message = list("message" = message.text, "channelIds" = list(user.channel.id)) if(intercepted_message_queue) intercepted_message_queue += list(message) else diff --git a/code/modules/tgs/v4/commands.dm b/code/modules/tgs/v4/commands.dm index 4ca1500167..8c16da8e23 100644 --- a/code/modules/tgs/v4/commands.dm +++ b/code/modules/tgs/v4/commands.dm @@ -34,8 +34,8 @@ var/datum/tgs_chat_command/sc = custom_commands[command] if(sc) - var/result = sc.Run(u, params) - if(result == null) - result = "" - return result + var/datum/tgs_message_content/result = sc.Run(u, params) + result = UpgradeDeprecatedCommandResponse(result, command) + + return result?.text return "Unknown command: [command]!" diff --git a/code/modules/tgs/v5/README.md b/code/modules/tgs/v5/README.md index 5b48d57a1f..619b58cd72 100644 --- a/code/modules/tgs/v5/README.md +++ b/code/modules/tgs/v5/README.md @@ -2,7 +2,9 @@ This DMAPI implements bridge requests using HTTP GET requests to TGS. It has no security restrictions. +- [__interop_version.dm](./__interop_version.dm) contains the version of the API used between the DMAPI and TGS. - [_defines.dm](./_defines.dm) contains constant definitions. - [api.dm](./api.dm) contains the bulk of the API code. - [commands.dm](./commands.dm) contains functions relating to `/datum/tgs_chat_command`s. +- [serializers.dm](./serializers.dm) contains function to help convert interop `/datum`s into a JSON encodable `list()` format. - [undefs.dm](./undefs.dm) Undoes the work of `_defines.dm`. diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm new file mode 100644 index 0000000000..4add7374ad --- /dev/null +++ b/code/modules/tgs/v5/__interop_version.dm @@ -0,0 +1 @@ +"5.4.0" diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm index 10bc4cbe40..7f31c23ef4 100644 --- a/code/modules/tgs/v5/_defines.dm +++ b/code/modules/tgs/v5/_defines.dm @@ -25,7 +25,6 @@ #define DMAPI5_BRIDGE_RESPONSE_NEW_PORT "newPort" #define DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION "runtimeInformation" -#define DMAPI5_CHAT_MESSAGE_TEXT "text" #define DMAPI5_CHAT_MESSAGE_CHANNEL_IDS "channelIds" #define DMAPI5_RUNTIME_INFORMATION_ACCESS_IDENTIFIER "accessIdentifier" @@ -75,6 +74,7 @@ #define DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE "chatUpdate" #define DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION "newServerVersion" +#define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE "commandResponse" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE "commandResponseMessage" #define DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES "chatResponses" @@ -93,6 +93,7 @@ #define DMAPI5_CHAT_CHANNEL_IS_ADMIN_CHANNEL "isAdminChannel" #define DMAPI5_CHAT_CHANNEL_IS_PRIVATE_CHANNEL "isPrivateChannel" #define DMAPI5_CHAT_CHANNEL_TAG "tag" +#define DMAPI5_CHAT_CHANNEL_EMBEDS_SUPPORTED "embedsSupported" #define DMAPI5_CUSTOM_CHAT_COMMAND_NAME "name" #define DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT "helpText" diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 572944ed40..36610b1242 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -19,7 +19,7 @@ /datum/tgs_api/v5/ApiVersion() return new /datum/tgs_version( - #include "interop_version.dm" + #include "__interop_version.dm" ) /datum/tgs_api/v5/OnWorldNew(minimum_required_security_level) @@ -104,6 +104,7 @@ return json_encode(response) /datum/tgs_api/v5/OnTopic(T) + RequireInitialBridgeResponse() var/list/params = params2list(T) var/json = params[DMAPI5_TOPIC_DATA] if(!json) @@ -297,7 +298,15 @@ RequireInitialBridgeResponse() return revision -/datum/tgs_api/v5/ChatBroadcast(message, list/channels) +// Common proc b/c it's used by the V3/V4 APIs +/datum/tgs_api/proc/UpgradeDeprecatedChatMessage(datum/tgs_message_content/message) + if(!istext(message)) + return message + + TGS_WARNING_LOG("Received legacy string when a [/datum/tgs_message_content] was expected. Please audit all calls to TgsChatBroadcast, TgsChatTargetedBroadcast, and TgsChatPrivateMessage to ensure they use the new /datum.") + return new /datum/tgs_message_content(message) + +/datum/tgs_api/v5/ChatBroadcast(datum/tgs_message_content/message, list/channels) if(!length(channels)) channels = ChatChannelInfo() @@ -306,26 +315,33 @@ var/datum/tgs_chat_channel/channel = I ids += channel.id - message = list(DMAPI5_CHAT_MESSAGE_TEXT = message, DMAPI5_CHAT_MESSAGE_CHANNEL_IDS = ids) + message = UpgradeDeprecatedChatMessage(message) + message = message._interop_serialize() + message[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = ids if(intercepted_message_queue) intercepted_message_queue += list(message) else Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = message)) -/datum/tgs_api/v5/ChatTargetedBroadcast(message, admin_only) +/datum/tgs_api/v5/ChatTargetedBroadcast(datum/tgs_message_content/message, admin_only) var/list/channels = list() for(var/I in ChatChannelInfo()) var/datum/tgs_chat_channel/channel = I if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) channels += channel.id - message = list(DMAPI5_CHAT_MESSAGE_TEXT = message, DMAPI5_CHAT_MESSAGE_CHANNEL_IDS = channels) + + message = UpgradeDeprecatedChatMessage(message) + message = message._interop_serialize() + message[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channels if(intercepted_message_queue) intercepted_message_queue += list(message) else Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = message)) -/datum/tgs_api/v5/ChatPrivateMessage(message, datum/tgs_chat_user/user) - message = list(DMAPI5_CHAT_MESSAGE_TEXT = message, DMAPI5_CHAT_MESSAGE_CHANNEL_IDS = list(user.channel.id)) +/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message, datum/tgs_chat_user/user) + message = UpgradeDeprecatedChatMessage(message) + message = message._interop_serialize() + message[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = list(user.channel.id) if(intercepted_message_queue) intercepted_message_queue += list(message) else @@ -354,6 +370,7 @@ channel.is_admin_channel = channel_json[DMAPI5_CHAT_CHANNEL_IS_ADMIN_CHANNEL] channel.is_private_channel = channel_json[DMAPI5_CHAT_CHANNEL_IS_PRIVATE_CHANNEL] channel.custom_tag = channel_json[DMAPI5_CHAT_CHANNEL_TAG] + channel.embeds_supported = channel_json[DMAPI5_CHAT_CHANNEL_EMBEDS_SUPPORTED] return channel /datum/tgs_api/v5/SecurityLevel() diff --git a/code/modules/tgs/v5/commands.dm b/code/modules/tgs/v5/commands.dm index 6d31dd3422..48dfd1c4d7 100644 --- a/code/modules/tgs/v5/commands.dm +++ b/code/modules/tgs/v5/commands.dm @@ -30,11 +30,28 @@ var/datum/tgs_chat_command/sc = custom_commands[command] if(sc) - var/text_response = sc.Run(u, params) + var/datum/tgs_message_content/response = sc.Run(u, params) + response = UpgradeDeprecatedCommandResponse(response, command) + var/list/topic_response = list() - if(!istext(text_response)) - TGS_ERROR_LOG("Custom command [command] should return a string! Got: \"[text_response]\"") - text_response = null - topic_response[DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE] = text_response + topic_response[DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE] = response?.text + topic_response[DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE] = response?._interop_serialize() return json_encode(topic_response) return TopicResponse("Unknown custom chat command: [command]!") + +// Common proc b/c it's used by the V3/V4 APIs +/datum/tgs_api/proc/UpgradeDeprecatedCommandResponse(datum/tgs_message_content/response, command) + // Backwards compatibility, used to return a string + if(istext(response)) + warned_deprecated_command_runs = warned_deprecated_command_runs || list() + if(!warned_deprecated_command_runs[command]) + TGS_WARNING_LOG("Custom chat command \"[command]\" is still returning a string. This behaviour is deprecated, please upgrade it to return a [/datum/tgs_message_content].") + warned_deprecated_command_runs[command] = TRUE + + return new /datum/tgs_message_content(response) + + if(!istype(response)) + TGS_ERROR_LOG("Custom chat command \"[command]\" should return a [/datum/tgs_message_content]! Got: \"[response]\"") + return null + + return response diff --git a/code/modules/tgs/v5/interop_version.dm b/code/modules/tgs/v5/interop_version.dm deleted file mode 100644 index c7bf62ecae..0000000000 --- a/code/modules/tgs/v5/interop_version.dm +++ /dev/null @@ -1 +0,0 @@ -"5.3.0" diff --git a/code/modules/tgs/v5/serializers.dm b/code/modules/tgs/v5/serializers.dm new file mode 100644 index 0000000000..38814e2d9f --- /dev/null +++ b/code/modules/tgs/v5/serializers.dm @@ -0,0 +1,52 @@ +/datum/tgs_message_content/proc/_interop_serialize() + return list("text" = text, "embed" = embed?._interop_serialize()) + +/datum/tgs_chat_embed/proc/_interop_serialize() + CRASH("Base /proc/interop_serialize called on [type]!") + +/datum/tgs_chat_embed/structure/_interop_serialize() + var/list/serialized_fields + if(islist(fields)) + serialized_fields = list() + for(var/datum/tgs_chat_embed/field/field as anything in fields) + serialized_fields += list(field._interop_serialize()) + return list( + "title" = title, + "description" = description, + "url" = url, + "timestamp" = timestamp, + "colour" = colour, + "image" = image?._interop_serialize(), + "thumbnail" = thumbnail?._interop_serialize(), + "video" = video?._interop_serialize(), + "footer" = footer?._interop_serialize(), + "provider" = provider?._interop_serialize(), + "author" = author?._interop_serialize(), + "fields" = serialized_fields + ) + +/datum/tgs_chat_embed/media/_interop_serialize() + return list( + "url" = url, + "width" = width, + "height" = height, + "proxyUrl" = proxy_url + ) + +/datum/tgs_chat_embed/provider/_interop_serialize() + return list( + "url" = url, + "name" = name + ) + +/datum/tgs_chat_embed/provider/author/_interop_serialize() + . = ..() + .["iconUrl"] = icon_url + .["proxyIconUrl"] = proxy_icon_url + +/datum/tgs_chat_embed/field/_interop_serialize() + return list( + "name" = name, + "value" = value, + "isInline" = is_inline + ) diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index 5885a60e75..6209945372 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -25,7 +25,6 @@ #undef DMAPI5_BRIDGE_RESPONSE_NEW_PORT #undef DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION -#undef DMAPI5_CHAT_MESSAGE_TEXT #undef DMAPI5_CHAT_MESSAGE_CHANNEL_IDS #undef DMAPI5_RUNTIME_INFORMATION_ACCESS_IDENTIFIER @@ -75,6 +74,7 @@ #undef DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE #undef DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION +#undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE #undef DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES @@ -93,6 +93,7 @@ #undef DMAPI5_CHAT_CHANNEL_IS_ADMIN_CHANNEL #undef DMAPI5_CHAT_CHANNEL_IS_PRIVATE_CHANNEL #undef DMAPI5_CHAT_CHANNEL_TAG +#undef DMAPI5_CHAT_CHANNEL_EMBEDS_SUPPORTED #undef DMAPI5_CUSTOM_CHAT_COMMAND_NAME #undef DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT From ffafd8e48b26675d87d09084c224265abe33796b Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Tue, 28 Mar 2023 20:52:08 -0500 Subject: [PATCH 25/53] Update _job_alt_titles.dm --- modular_splurt/code/modules/jobs/job_types/_job_alt_titles.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modular_splurt/code/modules/jobs/job_types/_job_alt_titles.dm b/modular_splurt/code/modules/jobs/job_types/_job_alt_titles.dm index 38dfea1a09..b988f3ba16 100644 --- a/modular_splurt/code/modules/jobs/job_types/_job_alt_titles.dm +++ b/modular_splurt/code/modules/jobs/job_types/_job_alt_titles.dm @@ -306,9 +306,13 @@ "Police Officer", "Slutcurity Officer" ) + var/list/rem_titles = list( + "Peacekeeper" + ) if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) LAZYADD(extra_titles, "Spookcurity Officer") LAZYADD(alt_titles, extra_titles) + LAZYREMOVE(alt_titles, rem_titles) . = ..() /datum/job/warden/New() From e47d3adc6bc9126ceb2045603d40967c4e3e09d6 Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Wed, 29 Mar 2023 02:53:29 +0000 Subject: [PATCH 26/53] Automatic changelog generation for PR #792 [ci skip] --- html/changelogs/AutoChangeLog-pr-792.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-792.yml diff --git a/html/changelogs/AutoChangeLog-pr-792.yml b/html/changelogs/AutoChangeLog-pr-792.yml new file mode 100644 index 0000000000..4037d70694 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-792.yml @@ -0,0 +1,4 @@ +author: Anonymous (feat. Bagzerk) +delete-after: true +changes: + - rscadd: 'Emote: \*agony.' From f4323c411951f1551ded35ae556b24ef3c65deef Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 29 Mar 2023 02:54:53 +0000 Subject: [PATCH 27/53] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-792.yml | 4 ---- html/changelogs/archive/2023-03.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-792.yml diff --git a/html/changelogs/AutoChangeLog-pr-792.yml b/html/changelogs/AutoChangeLog-pr-792.yml deleted file mode 100644 index 4037d70694..0000000000 --- a/html/changelogs/AutoChangeLog-pr-792.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Anonymous (feat. Bagzerk) -delete-after: true -changes: - - rscadd: 'Emote: \*agony.' diff --git a/html/changelogs/archive/2023-03.yml b/html/changelogs/archive/2023-03.yml index f71c82df32..ee186ac57f 100644 --- a/html/changelogs/archive/2023-03.yml +++ b/html/changelogs/archive/2023-03.yml @@ -101,3 +101,6 @@ - admin: Hypnotic Gaze quirk can now be added and removed mid-round - balance: Mech fabricators now use their access restrictions - balance: Removed access requirements for maintenance and off-station mech fabricators +2023-03-29: + Anonymous (feat. Bagzerk): + - rscadd: 'Emote: \*agony.' From 2df434efc862e606011a86d4121f0ef0b7bb92a4 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Wed, 29 Mar 2023 00:02:50 -0500 Subject: [PATCH 28/53] Update chat_commands.dm makes it neater with the new embed system --- .../code/modules/tgs/chat_commands.dm | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/modular_splurt/code/modules/tgs/chat_commands.dm b/modular_splurt/code/modules/tgs/chat_commands.dm index 1577638645..16617d9220 100644 --- a/modular_splurt/code/modules/tgs/chat_commands.dm +++ b/modular_splurt/code/modules/tgs/chat_commands.dm @@ -24,8 +24,18 @@ //Find the info of the current splashscreen if(!splashinfo.Find(current_splashscreen)) - return "The current splashscreen has no info set up yet!" - return "*[splashinfo[current_splashscreen]["name"]] by* **[splashinfo[current_splashscreen]["author"]]**\n[splashinfo[current_splashscreen]["link"]]" + return new /datum/tgs_message_content("The current splashscreen has no info set up yet!") + + //create info and embed of the sauce + var/datum/tgs_message_content/message = new("Source found!") + message.embed = new + + message.embed.author = new(splashinfo[current_splashscreen]["author"]) + message.embed.title = splashinfo[current_splashscreen]["name"] + message.embed.description = splashinfo[current_splashscreen]["link"] + message.embed.timestamp = time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss") + + return message /datum/tgs_chat_command/allsplashscreens name = "allsplashscreens" @@ -34,17 +44,23 @@ /datum/tgs_chat_command/allsplashscreens/Run(datum/tgs_chat_user/sender, params) //Check if the sauce system is turned on if(!CONFIG_GET(flag/sauce_command_enabled)) - return "This command is not enabled!" + return new /datum/tgs_message_content("This command is not enabled!") //Get the info of all splashscreens var/list/splashinfo = safe_json_decode(rustg_file_read("[global.config.directory]/splurt/title_screens_sources.json")) if(!splashinfo.len) - return "There are no splashscreens set up yet!" + return new /datum/tgs_message_content("There are no splashscreens set up yet!") //Organize the splashscreen info - var/list/data = list() + var/datum/tgs_message_content/message = new("Splashscreens:") + message.embed = new + + message.embed.title = "Currently available splashscreens" + message.embed.description = "These are the splashscreens with info currently available" + message.embed.timestamp = time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss") + for(var/pic in splashinfo) var/list/info = splashinfo[pic] - var/text = "- [info.Join(" - ")]" - LAZYADD(data, text) - return "Currently active splashscreens: ```yaml\n[data.Join("\n")]```" + var/datum/tgs_chat_embed/field/field = new("[info["name"]]", "by [info["author"]]") + LAZYADD(message.embed.fields, field) + return message From 70ca275bd8878a646dc840bdda8aabdbf88284dd Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Wed, 29 Mar 2023 00:05:07 -0500 Subject: [PATCH 29/53] Update chat_commands.dm --- modular_splurt/code/modules/tgs/chat_commands.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_splurt/code/modules/tgs/chat_commands.dm b/modular_splurt/code/modules/tgs/chat_commands.dm index 16617d9220..0ccc1b0034 100644 --- a/modular_splurt/code/modules/tgs/chat_commands.dm +++ b/modular_splurt/code/modules/tgs/chat_commands.dm @@ -13,7 +13,7 @@ /datum/tgs_chat_command/splashsauce/Run(datum/tgs_chat_user/sender, params) //Check if the sauce system is turned on if(!CONFIG_GET(flag/sauce_command_enabled)) - return "This command is not enabled!" + return new /datum/tgs_message_content("This command is not enabled!") //Get the current splashscreen var/list/raw_path = splittext(SStitle.file_path, "/") From 3e7af2ce611cfdd3be6d1bc1fe6a0b2938624184 Mon Sep 17 00:00:00 2001 From: PhazeJump Date: Wed, 29 Mar 2023 10:49:23 +0200 Subject: [PATCH 30/53] western dragon tail mirrored when looking north --- modular_splurt/icons/mob/64_mam_tails.dmi | Bin 3699 -> 3713 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/modular_splurt/icons/mob/64_mam_tails.dmi b/modular_splurt/icons/mob/64_mam_tails.dmi index 71249b8896b23e3251d3a8954acb0f15313b76a8..d02544643bcc3d0b2e58fe7e31717d1b4931fabd 100644 GIT binary patch delta 3379 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 I>T=5e09y}}#sB~S From fc0ed12307c39464260bd1b5aa7380834eec3169 Mon Sep 17 00:00:00 2001 From: CloverIsLucky <69725817+CloverIsLucky@users.noreply.github.com> Date: Wed, 29 Mar 2023 07:28:41 -0600 Subject: [PATCH 31/53] Why would we need two mining points card? --- .../code/modules/mob/living/silicon/robot/robot_modules.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modular_sand/code/modules/mob/living/silicon/robot/robot_modules.dm b/modular_sand/code/modules/mob/living/silicon/robot/robot_modules.dm index dd9ea00929..2bbb9f4c7d 100644 --- a/modular_sand/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/modular_sand/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -88,10 +88,11 @@ basic_modules += /obj/item/reagent_containers/borghypo/borgshaker/sodashaker basic_modules += /obj/item/reagent_containers/borghypo/borgshaker/miscshaker . = ..() - +/* /obj/item/robot_module/miner/Initialize(mapload) basic_modules += /obj/item/card/id/miningborg - . = ..() + . = ..() +*/ //Sandstorm, the main citacode already gives a mining points card to the minerborg, borgs don't need another one. /datum/robot_energy_storage/plasma name = "Plasma Buffer Container" From be45576f3abb7a491949f3dce015746a036996c4 Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Thu, 30 Mar 2023 02:26:53 +0000 Subject: [PATCH 32/53] Automatic changelog generation for PR #796 [ci skip] --- html/changelogs/AutoChangeLog-pr-796.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-796.yml diff --git a/html/changelogs/AutoChangeLog-pr-796.yml b/html/changelogs/AutoChangeLog-pr-796.yml new file mode 100644 index 0000000000..80038f232e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-796.yml @@ -0,0 +1,4 @@ +author: CloverIsLucky +delete-after: true +changes: + - rscdel: Removed duplicated mining points card. From fd6070db0a3660b1a5a37e62aebe6b2f97089861 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 30 Mar 2023 02:28:36 +0000 Subject: [PATCH 33/53] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-796.yml | 4 ---- html/changelogs/archive/2023-03.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-796.yml diff --git a/html/changelogs/AutoChangeLog-pr-796.yml b/html/changelogs/AutoChangeLog-pr-796.yml deleted file mode 100644 index 80038f232e..0000000000 --- a/html/changelogs/AutoChangeLog-pr-796.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: CloverIsLucky -delete-after: true -changes: - - rscdel: Removed duplicated mining points card. diff --git a/html/changelogs/archive/2023-03.yml b/html/changelogs/archive/2023-03.yml index ee186ac57f..313d601616 100644 --- a/html/changelogs/archive/2023-03.yml +++ b/html/changelogs/archive/2023-03.yml @@ -104,3 +104,6 @@ 2023-03-29: Anonymous (feat. Bagzerk): - rscadd: 'Emote: \*agony.' +2023-03-30: + CloverIsLucky: + - rscdel: Removed duplicated mining points card. From 6f06e8d84e479341fc0bd0b19d68ef6e9dfa42b2 Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Thu, 30 Mar 2023 02:36:28 +0000 Subject: [PATCH 34/53] Automatic changelog generation for PR #793 [ci skip] --- html/changelogs/AutoChangeLog-pr-793.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-793.yml diff --git a/html/changelogs/AutoChangeLog-pr-793.yml b/html/changelogs/AutoChangeLog-pr-793.yml new file mode 100644 index 0000000000..755dc4b419 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-793.yml @@ -0,0 +1,7 @@ +author: KeplerWasTaken +delete-after: true +changes: + - rscdel: Removes Die of Fate from Academy + - rscdel: Removes Die of Fate from Greed Ruin + - tweak: BO and BS arrival on station messages are now more fitting + - bugfix: Head of Staff and AI cryo messages no longer say you need to ahelp From 7fb9b11f57342eb2d083ec917b3d663b917bb0f3 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 30 Mar 2023 02:38:16 +0000 Subject: [PATCH 35/53] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-793.yml | 7 ------- html/changelogs/archive/2023-03.yml | 5 +++++ 2 files changed, 5 insertions(+), 7 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-793.yml diff --git a/html/changelogs/AutoChangeLog-pr-793.yml b/html/changelogs/AutoChangeLog-pr-793.yml deleted file mode 100644 index 755dc4b419..0000000000 --- a/html/changelogs/AutoChangeLog-pr-793.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: KeplerWasTaken -delete-after: true -changes: - - rscdel: Removes Die of Fate from Academy - - rscdel: Removes Die of Fate from Greed Ruin - - tweak: BO and BS arrival on station messages are now more fitting - - bugfix: Head of Staff and AI cryo messages no longer say you need to ahelp diff --git a/html/changelogs/archive/2023-03.yml b/html/changelogs/archive/2023-03.yml index 313d601616..85af759b28 100644 --- a/html/changelogs/archive/2023-03.yml +++ b/html/changelogs/archive/2023-03.yml @@ -107,3 +107,8 @@ 2023-03-30: CloverIsLucky: - rscdel: Removed duplicated mining points card. + KeplerWasTaken: + - rscdel: Removes Die of Fate from Academy + - rscdel: Removes Die of Fate from Greed Ruin + - tweak: BO and BS arrival on station messages are now more fitting + - bugfix: Head of Staff and AI cryo messages no longer say you need to ahelp From 7bf1b9a0a66cb5c7c1a1a995a0cbdd56f64cde34 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Wed, 29 Mar 2023 22:30:00 -0500 Subject: [PATCH 36/53] adds media and color to embeds --- config/splurt/title_screens_sources.json | 3 ++- modular_splurt/code/modules/tgs/chat_commands.dm | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/config/splurt/title_screens_sources.json b/config/splurt/title_screens_sources.json index ccad14e78c..6b64107deb 100644 --- a/config/splurt/title_screens_sources.json +++ b/config/splurt/title_screens_sources.json @@ -2,6 +2,7 @@ "example_screen.png": { "name": "name of the pic", "author": "name of the author", - "link": "link to the pic" + "link": "link to the pic", + "dw_link": "direct download link of the pic" } } diff --git a/modular_splurt/code/modules/tgs/chat_commands.dm b/modular_splurt/code/modules/tgs/chat_commands.dm index 0ccc1b0034..16d7299cdf 100644 --- a/modular_splurt/code/modules/tgs/chat_commands.dm +++ b/modular_splurt/code/modules/tgs/chat_commands.dm @@ -34,6 +34,8 @@ message.embed.title = splashinfo[current_splashscreen]["name"] message.embed.description = splashinfo[current_splashscreen]["link"] message.embed.timestamp = time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss") + message.embed.image = new(splashinfo[current_splashscreen]["dw_link"]) + message.embed.colour = "#00ff00" return message @@ -58,9 +60,10 @@ message.embed.title = "Currently available splashscreens" message.embed.description = "These are the splashscreens with info currently available" message.embed.timestamp = time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss") + message.embed.colour = "#350bce" for(var/pic in splashinfo) var/list/info = splashinfo[pic] - var/datum/tgs_chat_embed/field/field = new("[info["name"]]", "by [info["author"]]") + var/datum/tgs_chat_embed/field/field = new("\[[info["name"]]\]([info["link"]])", "by [info["author"]]") LAZYADD(message.embed.fields, field) return message From 2387eed8389cb2a9f4dd81764344560b632f46ff Mon Sep 17 00:00:00 2001 From: PhazeJump Date: Thu, 30 Mar 2023 11:27:06 +0200 Subject: [PATCH 37/53] Fix for succubus tail succubus tail doesn't have an animation as it doesn't exist at all, but at least now it doesn't disappear --- .../new_player/sprite_accesories/tails.dm | 6 ++++++ modular_splurt/icons/mob/mam_tails.dmi | Bin 30707 -> 30817 bytes 2 files changed, 6 insertions(+) diff --git a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm index a7ae4ca2d5..fe76b9267c 100644 --- a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm +++ b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm @@ -407,6 +407,12 @@ icon_state = "succubus" color_src = MUTCOLORS +/datum/sprite_accessory/tails_animated/human/succubus + name = "Succubus tail" + icon = 'modular_splurt/icons/mob/mam_tails.dmi' + icon_state = "succubus" + color_src = MUTCOLORS + /datum/sprite_accessory/tails/mam_tails/kangaroo/alt name = "kangaroo (alt)" icon = 'modular_splurt/icons/mob/64_mam_tails.dmi' diff --git a/modular_splurt/icons/mob/mam_tails.dmi b/modular_splurt/icons/mob/mam_tails.dmi index e2ec928443928dc2b06e8cd4d1bf4081180e5ec6..ae30f9745b9661b5f1a542c45d220be254a85c02 100644 GIT binary patch delta 11198 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 DTk2`3 delta 11112 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 DB9)2e From 11e6f3ca8019c61410cfd46857873d8399ed40fa Mon Sep 17 00:00:00 2001 From: PhazeJump Date: Thu, 30 Mar 2023 11:33:09 +0200 Subject: [PATCH 38/53] Revert western dragon tail tweak honestly, I have tested it and when it doesn't sway as much, it does have a heavier feel, as it is this large. Looks and feels a little bit better this old way. --- modular_splurt/icons/mob/64_mam_tails.dmi | Bin 3713 -> 3699 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/modular_splurt/icons/mob/64_mam_tails.dmi b/modular_splurt/icons/mob/64_mam_tails.dmi index d02544643bcc3d0b2e58fe7e31717d1b4931fabd..71249b8896b23e3251d3a8954acb0f15313b76a8 100644 GIT binary patch delta 3351 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 I>T=5e09y}}#sB~S delta 3379 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 Date: Thu, 30 Mar 2023 10:22:15 -0500 Subject: [PATCH 39/53] Update chat_commands.dm --- modular_splurt/code/modules/tgs/chat_commands.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_splurt/code/modules/tgs/chat_commands.dm b/modular_splurt/code/modules/tgs/chat_commands.dm index 16d7299cdf..60e864b19a 100644 --- a/modular_splurt/code/modules/tgs/chat_commands.dm +++ b/modular_splurt/code/modules/tgs/chat_commands.dm @@ -64,6 +64,6 @@ for(var/pic in splashinfo) var/list/info = splashinfo[pic] - var/datum/tgs_chat_embed/field/field = new("\[[info["name"]]\]([info["link"]])", "by [info["author"]]") + var/datum/tgs_chat_embed/field/field = new("by [info["author"]]", "\[[info["name"]]\]([info["link"]])") LAZYADD(message.embed.fields, field) return message From 5f1492c192ebeb97004cb8c5cb4ad57038067fcb Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Thu, 30 Mar 2023 11:09:33 -0500 Subject: [PATCH 40/53] #freeprotolathe --- config/splurt/general.txt | 4 ++++ .../controllers/configuration/entries/splurt_general.dm | 2 ++ modular_splurt/code/modules/mob/mob.dm | 8 ++++++++ 3 files changed, 14 insertions(+) diff --git a/config/splurt/general.txt b/config/splurt/general.txt index 71f874a79c..b42b8e7234 100644 --- a/config/splurt/general.txt +++ b/config/splurt/general.txt @@ -18,3 +18,7 @@ WEIGHTED_STATION_TRAITS # SM delamination # Comment to make the SM not explode SM_DELAMINATION + +# Protolathe access +# Comment to make protolathes and mechfabs use their access locks +PROTOLOCK_ALL_ACCESS diff --git a/modular_splurt/code/controllers/configuration/entries/splurt_general.dm b/modular_splurt/code/controllers/configuration/entries/splurt_general.dm index a6e389db1b..f73ee4a324 100644 --- a/modular_splurt/code/controllers/configuration/entries/splurt_general.dm +++ b/modular_splurt/code/controllers/configuration/entries/splurt_general.dm @@ -9,3 +9,5 @@ config_entry_value = DEFAULT_SAVE_SLOTS /datum/config_entry/flag/sm_delamination + +/datum/config_entry/flag/protolock_all_access diff --git a/modular_splurt/code/modules/mob/mob.dm b/modular_splurt/code/modules/mob/mob.dm index 3d5b2fea19..cba1b8c2d6 100644 --- a/modular_splurt/code/modules/mob/mob.dm +++ b/modular_splurt/code/modules/mob/mob.dm @@ -1,3 +1,5 @@ +#define PROTOLOCK_ALL_ACCESS CONFIG_GET(flag/protolock_all_access) + /mob/Initialize() . = ..() create_player_panel() @@ -79,3 +81,9 @@ // All checks passed return TRUE + +//Makes the protolocks able to be disabled +/mob/can_use_production(obj/machinery/machine_target) + if(PROTOLOCK_ALL_ACCESS) + return TRUE + . = ..() From 111fcbab0017dddb370909504703e2801ee8d53e Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Thu, 30 Mar 2023 16:49:17 +0000 Subject: [PATCH 41/53] Automatic changelog generation for PR #795 [ci skip] --- html/changelogs/AutoChangeLog-pr-795.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-795.yml diff --git a/html/changelogs/AutoChangeLog-pr-795.yml b/html/changelogs/AutoChangeLog-pr-795.yml new file mode 100644 index 0000000000..2a590b7748 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-795.yml @@ -0,0 +1,6 @@ +author: PhazeJump +delete-after: true +changes: + - bugfix: Fixed the eastern dragon tail + - bugfix: Added a file for succubus tail wagging sprite + - bugfix: Added some code for the succubus tail not to disappear while wagging From 14e46b460168701cd7dfeee9fdd644ba814afe72 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 30 Mar 2023 16:51:01 +0000 Subject: [PATCH 42/53] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-795.yml | 6 ------ html/changelogs/archive/2023-03.yml | 4 ++++ 2 files changed, 4 insertions(+), 6 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-795.yml diff --git a/html/changelogs/AutoChangeLog-pr-795.yml b/html/changelogs/AutoChangeLog-pr-795.yml deleted file mode 100644 index 2a590b7748..0000000000 --- a/html/changelogs/AutoChangeLog-pr-795.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: PhazeJump -delete-after: true -changes: - - bugfix: Fixed the eastern dragon tail - - bugfix: Added a file for succubus tail wagging sprite - - bugfix: Added some code for the succubus tail not to disappear while wagging diff --git a/html/changelogs/archive/2023-03.yml b/html/changelogs/archive/2023-03.yml index 85af759b28..fd17e15288 100644 --- a/html/changelogs/archive/2023-03.yml +++ b/html/changelogs/archive/2023-03.yml @@ -112,3 +112,7 @@ - rscdel: Removes Die of Fate from Greed Ruin - tweak: BO and BS arrival on station messages are now more fitting - bugfix: Head of Staff and AI cryo messages no longer say you need to ahelp + PhazeJump: + - bugfix: Fixed the eastern dragon tail + - bugfix: Added a file for succubus tail wagging sprite + - bugfix: Added some code for the succubus tail not to disappear while wagging From f4a42557ab5692ec8b0b35049ccd9cfd67c841a6 Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Thu, 30 Mar 2023 23:54:01 +0000 Subject: [PATCH 43/53] Automatic changelog generation for PR #798 [ci skip] --- html/changelogs/AutoChangeLog-pr-798.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-798.yml diff --git a/html/changelogs/AutoChangeLog-pr-798.yml b/html/changelogs/AutoChangeLog-pr-798.yml new file mode 100644 index 0000000000..5ea01e3025 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-798.yml @@ -0,0 +1,6 @@ +author: BongaTheProto +delete-after: true +changes: + - balance: Removes the locks on protolathes and other machines + - balance: Well actually makes it a config but it's set to disable the locks so + potato tomato From bb453e8145e0c10531725f02b8601f813fee5e3b Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 30 Mar 2023 23:55:36 +0000 Subject: [PATCH 44/53] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-798.yml | 6 ------ html/changelogs/archive/2023-03.yml | 4 ++++ 2 files changed, 4 insertions(+), 6 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-798.yml diff --git a/html/changelogs/AutoChangeLog-pr-798.yml b/html/changelogs/AutoChangeLog-pr-798.yml deleted file mode 100644 index 5ea01e3025..0000000000 --- a/html/changelogs/AutoChangeLog-pr-798.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: BongaTheProto -delete-after: true -changes: - - balance: Removes the locks on protolathes and other machines - - balance: Well actually makes it a config but it's set to disable the locks so - potato tomato diff --git a/html/changelogs/archive/2023-03.yml b/html/changelogs/archive/2023-03.yml index fd17e15288..ecb27cc59f 100644 --- a/html/changelogs/archive/2023-03.yml +++ b/html/changelogs/archive/2023-03.yml @@ -105,6 +105,10 @@ Anonymous (feat. Bagzerk): - rscadd: 'Emote: \*agony.' 2023-03-30: + BongaTheProto: + - balance: Removes the locks on protolathes and other machines + - balance: Well actually makes it a config but it's set to disable the locks so + potato tomato CloverIsLucky: - rscdel: Removed duplicated mining points card. KeplerWasTaken: From 38e002e4490044b7381e5b6d351c693b2b4dd17f Mon Sep 17 00:00:00 2001 From: legu! <129433703+legumesan@users.noreply.github.com> Date: Fri, 31 Mar 2023 03:08:33 +0200 Subject: [PATCH 45/53] just a dorky hairstyle hehe fluffy hair :dawgdoin: --- .../sprite_accessories/hair_head.dm | 4 ++++ icons/mob/hair.dmi | Bin 184207 -> 184669 bytes 2 files changed, 4 insertions(+) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm index 9e868d69c6..f291e832de 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm @@ -1060,6 +1060,10 @@ name = "Zone" icon_state = "hair_zone" +/datum/sprite_accessory/hair/fluffball + name = "Fluffball" + icon_state = "hair_fluffball" + /datum/sprite_accessory/hair_gradient icon = 'icons/mob/hair_gradients.dmi' diff --git a/icons/mob/hair.dmi b/icons/mob/hair.dmi index 55c79b974000fdfe4d77f555e14654eef1077e8b..59df6f483d4943d81ea257b0e472f8d784138ef8 100644 GIT binary patch delta 13656 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 C4Y%b0 delta 13176 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 From 443c8a2009f6145ca7806f28349f3666cb8c73d2 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Thu, 30 Mar 2023 21:32:14 -0500 Subject: [PATCH 46/53] modularizes --- .../sprite_accessories/hair_head.dm | 4 ---- icons/mob/hair.dmi | Bin 184669 -> 184207 bytes .../new_player/sprite_accesories/hair_head.dm | 5 +++++ modular_splurt/icons/mob/hair.dmi | Bin 17836 -> 18305 bytes 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm index f291e832de..9e868d69c6 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm @@ -1060,10 +1060,6 @@ name = "Zone" icon_state = "hair_zone" -/datum/sprite_accessory/hair/fluffball - name = "Fluffball" - icon_state = "hair_fluffball" - /datum/sprite_accessory/hair_gradient icon = 'icons/mob/hair_gradients.dmi' diff --git a/icons/mob/hair.dmi b/icons/mob/hair.dmi index 59df6f483d4943d81ea257b0e472f8d784138ef8..55c79b974000fdfe4d77f555e14654eef1077e8b 100644 GIT binary patch delta 13176 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 delta 13656 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 C4Y%b0 diff --git a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/hair_head.dm b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/hair_head.dm index a25ebdbf27..64a26a6134 100644 --- a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/hair_head.dm +++ b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/hair_head.dm @@ -160,3 +160,8 @@ name = "Deathhawk" icon = 'modular_splurt/icons/mob/hair.dmi' icon_state = "hair_deathhawk" + +/datum/sprite_accessory/hair/fluffball + name = "Fluffball" + icon = 'modular_splurt/icons/mob/hair.dmi' + icon_state = "hair_fluffball" diff --git a/modular_splurt/icons/mob/hair.dmi b/modular_splurt/icons/mob/hair.dmi index fad073e9c2190fe25949898a3b6109d6a9036f15..58352c60cc9f785a7f74d2c97c5e5ae737ed43c0 100644 GIT binary patch literal 18305 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 literal 17836 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 From fef2636058cd2e5b8afce3f3425e04af88f814ed Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Fri, 31 Mar 2023 03:17:02 +0000 Subject: [PATCH 47/53] Automatic changelog generation for PR #799 [ci skip] --- html/changelogs/AutoChangeLog-pr-799.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-799.yml diff --git a/html/changelogs/AutoChangeLog-pr-799.yml b/html/changelogs/AutoChangeLog-pr-799.yml new file mode 100644 index 0000000000..acae13ba92 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-799.yml @@ -0,0 +1,4 @@ +author: legumesan +delete-after: true +changes: + - rscadd: new hairstyle From 20011e773d4f47b12385a06e40d83b5ab7d5b29f Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 31 Mar 2023 03:18:35 +0000 Subject: [PATCH 48/53] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-799.yml | 4 ---- html/changelogs/archive/2023-03.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-799.yml diff --git a/html/changelogs/AutoChangeLog-pr-799.yml b/html/changelogs/AutoChangeLog-pr-799.yml deleted file mode 100644 index acae13ba92..0000000000 --- a/html/changelogs/AutoChangeLog-pr-799.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: legumesan -delete-after: true -changes: - - rscadd: new hairstyle diff --git a/html/changelogs/archive/2023-03.yml b/html/changelogs/archive/2023-03.yml index ecb27cc59f..4dde24147a 100644 --- a/html/changelogs/archive/2023-03.yml +++ b/html/changelogs/archive/2023-03.yml @@ -120,3 +120,6 @@ - bugfix: Fixed the eastern dragon tail - bugfix: Added a file for succubus tail wagging sprite - bugfix: Added some code for the succubus tail not to disappear while wagging +2023-03-31: + legumesan: + - rscadd: new hairstyle From 815afcc45a5e1a2670a23fe0461a366fe236ccc7 Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Sat, 1 Apr 2023 16:01:05 -0500 Subject: [PATCH 49/53] suits all the suits from that file --- code/modules/vending/autodrobe.dm | 1 - .../code/modules/cargo/packs/costumes_toys.dm | 8 + .../code/modules/cargo/packs/misc.dm | 9 +- .../code/modules/client/loadout/uniform.dm | 68 +++++++++ .../modules/clothing/suits/miscellaneous.dm | 11 +- .../clothing/under/jobs/civilian/suits.dm | 138 ++++++++++++++++++ .../code/modules/vending/autodrobe.dm | 17 ++- .../code/modules/vending/clothesmate.dm | 8 +- .../code/modules/vending/wardrobes.dm | 21 ++- .../icons/mob/clothing/under/suits.dmi | Bin 0 -> 7510 bytes .../icons/mob/clothing/under/suits_digi.dmi | Bin 0 -> 7993 bytes .../icons/obj/clothing/under/suits.dmi | Bin 0 -> 7752 bytes .../icons/obj/clothing/uniforms.dmi | Bin 32788 -> 31771 bytes tgstation.dme | 1 + 14 files changed, 266 insertions(+), 16 deletions(-) create mode 100644 modular_splurt/code/modules/clothing/under/jobs/civilian/suits.dm create mode 100644 modular_splurt/icons/mob/clothing/under/suits.dmi create mode 100644 modular_splurt/icons/mob/clothing/under/suits_digi.dmi create mode 100644 modular_splurt/icons/obj/clothing/under/suits.dmi diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index e5b47f3a80..5a6c7c973f 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -164,7 +164,6 @@ /obj/item/clothing/under/costume/christmas/croptop/green = 3, /obj/item/clothing/head/christmashat = 3, /obj/item/clothing/head/christmashatg = 3, - /obj/item/clothing/under/wedding_dress = 1, /obj/item/clothing/under/costume/drfreeze = 1) refill_canister = /obj/item/vending_refill/autodrobe default_price = PRICE_ALMOST_CHEAP diff --git a/modular_splurt/code/modules/cargo/packs/costumes_toys.dm b/modular_splurt/code/modules/cargo/packs/costumes_toys.dm index 904d19048e..2290fe603f 100644 --- a/modular_splurt/code/modules/cargo/packs/costumes_toys.dm +++ b/modular_splurt/code/modules/cargo/packs/costumes_toys.dm @@ -5,3 +5,11 @@ LAZYADD(contains, extra_contains) . = ..() +/datum/supply_pack/costumes_toys/wedding/New() + . = ..() + var/list/extra_contains = list( + /obj/item/bouquet, + /obj/item/bouquet/sunflower, + /obj/item/bouquet/poppy + ) + LAZYADD(contains, extra_contains) diff --git a/modular_splurt/code/modules/cargo/packs/misc.dm b/modular_splurt/code/modules/cargo/packs/misc.dm index bf5eec556d..98bdc574ac 100644 --- a/modular_splurt/code/modules/cargo/packs/misc.dm +++ b/modular_splurt/code/modules/cargo/packs/misc.dm @@ -250,18 +250,19 @@ /obj/item/wrench) crate_name = "stripper pole crate" + /datum/supply_pack/misc/wedding - name = "Wedding Crate" + name = "Small Wedding Crate" desc = "Almost everything you need to host a wedding! Don't forget a ring!" cost = 1500 - contains = list(/obj/item/clothing/under/wedding_dress, - /obj/item/clothing/under/tuxedo, + contains = list(/obj/item/clothing/under/dress/wedding, + /obj/item/clothing/under/suit/tuxedo, /obj/item/storage/belt/cummerbund, /obj/item/bouquet, /obj/item/bouquet/sunflower, /obj/item/bouquet/poppy, /obj/item/reagent_containers/food/drinks/bottle/champagne) - crate_name = "wedding crate" + crate_name = "small wedding crate" /datum/supply_pack/misc/random1k name = "1k Surplus Crate" diff --git a/modular_splurt/code/modules/client/loadout/uniform.dm b/modular_splurt/code/modules/client/loadout/uniform.dm index 12c14d564d..fedfbf61bc 100644 --- a/modular_splurt/code/modules/client/loadout/uniform.dm +++ b/modular_splurt/code/modules/client/loadout/uniform.dm @@ -170,3 +170,71 @@ path = /obj/item/clothing/under/rank/cargo/miner/lavaland/stripper subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS restricted_roles = list("Shaft Miner") + +/datum/gear/uniform/suit/tuxedo + name = "Tuxedo suit" + path = /obj/item/clothing/under/suit/tuxedo + +/datum/gear/uniform/suit/tuxedo/carp + name = "Carpskin suit" + path = /obj/item/clothing/under/suit/carpskin + +/datum/gear/uniform/suit/pencil + name = "Black Pencilskirt" + path = /obj/item/clothing/under/suit/pencil + +/datum/gear/uniform/suit/pencil/black_really + name = "Executive Pencilskirt" + path = /obj/item/clothing/under/suit/pencil/black_really + +/datum/gear/uniform/suit/pencil/charcoal + name = "Charcoal Pencilskirt" + path = /obj/item/clothing/under/suit/pencil/charcoal + +/datum/gear/uniform/suit/pencil/navy + name = "Navy Pencilskirt" + path = /obj/item/clothing/under/suit/pencil/navy + +/datum/gear/uniform/suit/pencil/burgandy + name = "Burgandy Pencilskirt" + path = /obj/item/clothing/under/suit/pencil/burgandy + +/datum/gear/uniform/suit/pencil/checkered + name = "Checkered Pencilskirt" + path = /obj/item/clothing/under/suit/pencil/checkered + +/datum/gear/uniform/suit/pencil/tan + name = "Tan Pencilskirt" + path = /obj/item/clothing/under/suit/pencil/tan + +/datum/gear/uniform/suit/pencil/green + name = "Green Pencilskirt" + path = /obj/item/clothing/under/suit/pencil/green + +/datum/gear/uniform/suit/executive_suit_alt + name = "Wide-collared Executive Suit" + path = /obj/item/clothing/under/suit/black_really_collared + +/datum/gear/uniform/suit/executive_skirt_alt + name = "Wide-collared Executive Suitskirt" + path = /obj/item/clothing/under/suit/black_really_collared/skirt + +/datum/gear/uniform/suit/inferno + name = "Inferno Suit" + path = /obj/item/clothing/under/suit/inferno + +/datum/gear/uniform/suit/inferno_skirt + name = "Inferno Skirt" + path = /obj/item/clothing/under/suit/inferno/skirt + +/datum/gear/uniform/suit/designer_inferno + name = "Designer Inferno Suit" + path = /obj/item/clothing/under/suit/inferno/beeze + +/datum/gear/uniform/suit/helltaker + name = "Red Shirt with White Trousers" + path = /obj/item/clothing/under/suit/helltaker + +/datum/gear/uniform/suit/helltaker/skirt + name = "Red Shirt with White Skirt" + path = /obj/item/clothing/under/suit/helltaker/skirt diff --git a/modular_splurt/code/modules/clothing/suits/miscellaneous.dm b/modular_splurt/code/modules/clothing/suits/miscellaneous.dm index 7a14c9ff14..8307e30221 100644 --- a/modular_splurt/code/modules/clothing/suits/miscellaneous.dm +++ b/modular_splurt/code/modules/clothing/suits/miscellaneous.dm @@ -6,6 +6,8 @@ mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON //Own stuff + +/* Already exists /obj/item/clothing/under/wedding_dress name = "wedding dress" desc = "A luxurious gown for once-in-a-lifetime occasions." @@ -15,14 +17,7 @@ flags_cover = HIDESHOES mutantrace_variation = NONE can_adjust = FALSE - -/obj/item/clothing/under/tuxedo - name = "tuxedo" - desc = "A formal black tuxedo. It exudes classiness." - icon = 'modular_splurt/icons/obj/clothing/uniforms.dmi' - icon_state = "tuxedo" - mutantrace_variation = NONE //temporary - can_adjust = FALSE +*/ /obj/item/clothing/suit/hooded/wintercoat/security/pink name = "pink security winter coat" diff --git a/modular_splurt/code/modules/clothing/under/jobs/civilian/suits.dm b/modular_splurt/code/modules/clothing/under/jobs/civilian/suits.dm new file mode 100644 index 0000000000..8c2668d802 --- /dev/null +++ b/modular_splurt/code/modules/clothing/under/jobs/civilian/suits.dm @@ -0,0 +1,138 @@ +/obj/item/clothing/under/suit/tuxedo + name = "tuxedo" + desc = "A formal black tuxedo. It exudes classiness." + icon = 'modular_splurt/icons/obj/clothing/under/suits.dmi' + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/under/suits.dmi' + anthro_mob_worn_overlay = 'modular_splurt/icons/mob/clothing/under/suits_digi.dmi' + icon_state = "tuxedo" + can_adjust = FALSE + +/obj/item/clothing/under/suit/carpskin + name = "carpskin suit" + desc = "An luxurious suit made with only the finest scales, perfect for conducting dodgy business deals." + icon = 'modular_splurt/icons/obj/clothing/under/suits.dmi' + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/under/suits.dmi' + anthro_mob_worn_overlay = 'modular_splurt/icons/mob/clothing/under/suits_digi.dmi' + icon_state = "carpskin_suit" + +/obj/item/clothing/under/suit/pencil + name = "black pencilskirt" + desc = "A clean white shirt with a tight-fitting black pencilskirt." + icon_state = "black_pencil" + icon = 'modular_splurt/icons/obj/clothing/under/suits.dmi' + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/under/suits.dmi' + anthro_mob_worn_overlay = 'modular_splurt/icons/mob/clothing/under/suits_digi.dmi' + +/obj/item/clothing/under/suit/pencil/black_really + name = "executive pencilskirt" + desc = "A sleek suit with a tight-fitting black pencilskirt." + icon_state = "really_black_pencil" + +/obj/item/clothing/under/suit/pencil/charcoal + name = "charcoal pencilskirt" + desc = "A clean white shirt with a tight-fitting charcoal pencilskirt." + icon_state = "charcoal_pencil" + +/obj/item/clothing/under/suit/pencil/navy + name = "navy pencilskirt" + desc = "A clean white shirt with a tight-fitting navy-blue pencilskirt." + icon_state = "navy_pencil" + +/obj/item/clothing/under/suit/pencil/burgandy + name = "burgandy pencilskirt" + desc = "A clean white shirt with a tight-fitting burgandy-red pencilskirt." + icon_state = "burgandy_pencil" + +/obj/item/clothing/under/suit/pencil/checkered + name = "checkered pencilskirt" + desc = "A clean white shirt with a tight-fitting grey checkered pencilskirt." + icon_state = "checkered_pencil" + +/obj/item/clothing/under/suit/pencil/tan + name = "tan pencilskirt" + desc = "A clean white shirt with a tight-fitting tan pencilskirt." + icon_state = "tan_pencil" + +/obj/item/clothing/under/suit/pencil/green + name = "green pencilskirt" + desc = "A clean white shirt with a tight-fitting green pencilskirt." + icon_state = "green_pencil" + +/obj/item/clothing/under/suit/scarface + name = "cuban suit" + desc = "A yayo coloured silk suit with a crimson shirt. You just know how to hide, how to lie. Me, I don't have that problem. Me, I always tell the truth. Even when I lie." + icon_state = "scarface" + icon = 'modular_splurt/icons/obj/clothing/under/suits.dmi' + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/under/suits.dmi' + anthro_mob_worn_overlay = 'modular_splurt/icons/mob/clothing/under/suits_digi.dmi' + +/obj/item/clothing/under/suit/black_really_collared + name = "wide-collared executive suit" + desc = "A formal black suit with the collar worn wide, intended for the station's finest." + icon_state = "really_black_suit_collar" + icon = 'modular_splurt/icons/obj/clothing/under/suits.dmi' + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/under/suits.dmi' + anthro_mob_worn_overlay = 'modular_splurt/icons/mob/clothing/under/suits_digi.dmi' + +/obj/item/clothing/under/suit/black_really_collared/skirt + name = "wide-collared executive suitskirt" + desc = "A formal black suit with the collar worn wide, intended for the station's finest." + icon_state = "really_black_suit_skirt_collar" + icon = 'modular_splurt/icons/obj/clothing/under/suits.dmi' + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/under/suits.dmi' + anthro_mob_worn_overlay = 'modular_splurt/icons/mob/clothing/under/suits_digi.dmi' + body_parts_covered = CHEST|GROIN|ARMS + mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON + +/obj/item/clothing/under/suit/inferno + name = "inferno suit" + desc = "Stylish enough to impress the devil." + obj_flags = UNIQUE_RENAME + icon_state = "lucifer" + icon = 'modular_splurt/icons/obj/clothing/under/suits.dmi' + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/under/suits.dmi' + anthro_mob_worn_overlay = 'modular_splurt/icons/mob/clothing/under/suits_digi.dmi' + unique_reskin = list( + "Pride" = list("icon_state" = "lucifer"), + "Wrath" = list("icon_state" = "justice"), + "Gluttony" = list("icon_state" = "malina"), + "Envy" = list("icon_state" = "zdara"), + "Vanity" = list("icon_state" = "cereberus"), + ) + +/obj/item/clothing/under/suit/inferno/skirt + name = "inferno suitskirt" + icon_state = "modeus" + unique_reskin = list( + "Lust" = list("icon_state" = "modeus"), + "Sloth" = list("icon_state" = "pande"), + ) + +/obj/item/clothing/under/suit/inferno/beeze + name = "designer inferno suit" + desc = "A fancy tail-coated suit with a fluffy bow emblazoned on the chest, complete with an NT pin." + icon_state = "beeze" + obj_flags = NONE + unique_reskin = null + +/obj/item/clothing/under/suit/helltaker + name = "red shirt with white pants" + desc = "No time. Busy gathering girls." + icon_state = "helltaker" + icon = 'modular_splurt/icons/obj/clothing/under/suits.dmi' + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/under/suits.dmi' + anthro_mob_worn_overlay = 'modular_splurt/icons/mob/clothing/under/suits_digi.dmi' + +/obj/item/clothing/under/suit/helltaker/skirt + name = "red shirt with white skirt" + desc = "No time. Busy gathering boys." + icon_state = "helltakerskirt" + +/obj/item/clothing/under/suit/error + name = "error suit" + desc = "Oops! Seems whoever made this suit forgot to download the base cloth for it!" + icon = 'modular_splurt/icons/obj/clothing/under/suits.dmi' + mob_overlay_icon = 'modular_splurt/icons/mob/clothing/under/suits.dmi' + anthro_mob_worn_overlay = 'modular_splurt/icons/mob/clothing/under/suits_digi.dmi' + icon_state = "error_suit" + diff --git a/modular_splurt/code/modules/vending/autodrobe.dm b/modular_splurt/code/modules/vending/autodrobe.dm index adc0a19b57..065deb7ff3 100644 --- a/modular_splurt/code/modules/vending/autodrobe.dm +++ b/modular_splurt/code/modules/vending/autodrobe.dm @@ -8,8 +8,23 @@ /obj/item/clothing/suit/hooded/pyramidhead = 1, /obj/item/clothing/suit/baroness = 3, /obj/item/clothing/suit/baroness/ladyballat = 3, - /obj/item/clothing/suit/flatwoods = 3 + /obj/item/clothing/suit/flatwoods = 3, + /obj/item/clothing/under/dress/wedding = 1, + /obj/item/clothing/under/suit/pencil = 3, + /obj/item/clothing/under/suit/pencil/black_really = 3, + /obj/item/clothing/under/suit/pencil/charcoal = 3, + /obj/item/clothing/under/suit/pencil/navy = 3, + /obj/item/clothing/under/suit/pencil/burgandy = 3, + /obj/item/clothing/under/suit/pencil/checkered = 3, + /obj/item/clothing/under/suit/pencil/tan = 3, + /obj/item/clothing/under/suit/pencil/green = 3, + /obj/item/clothing/under/suit/error = 1 + ) + var/list/extra_premium = list( + /obj/item/clothing/under/suit/tuxedo = 1, + /obj/item/clothing/under/suit/carpskin = 1 ) LAZYADD(products, extra_products) + LAZYADD(premium, extra_premium) . = ..() diff --git a/modular_splurt/code/modules/vending/clothesmate.dm b/modular_splurt/code/modules/vending/clothesmate.dm index d6dee6e947..7051fb2edf 100644 --- a/modular_splurt/code/modules/vending/clothesmate.dm +++ b/modular_splurt/code/modules/vending/clothesmate.dm @@ -21,7 +21,13 @@ /obj/item/clothing/accessory/longcrop = 3, /obj/item/clothing/accessory/formalcrop = 3, /obj/item/clothing/under/misc/leia_outfit = 2, - /obj/item/clothing/under/performer/polychromic = 2 + /obj/item/clothing/under/performer/polychromic = 2, + /obj/item/clothing/under/suit/black_really_collared = 3, + /obj/item/clothing/under/suit/black_really_collared/skirt = 3, + /obj/item/clothing/under/suit/inferno = 3, + /obj/item/clothing/under/suit/inferno/skirt = 3, + /obj/item/clothing/under/suit/helltaker = 3, + /obj/item/clothing/under/suit/helltaker/skirt = 3 ) var/list/extra_contraband = list( /obj/item/clothing/under/rank/civilian/lawyer/galaxy_red = 3, diff --git a/modular_splurt/code/modules/vending/wardrobes.dm b/modular_splurt/code/modules/vending/wardrobes.dm index 6115c7d19f..378abf4967 100644 --- a/modular_splurt/code/modules/vending/wardrobes.dm +++ b/modular_splurt/code/modules/vending/wardrobes.dm @@ -31,11 +31,30 @@ /obj/machinery/vending/wardrobe/law_wardrobe/Initialize(mapload) var/list/extra_products = list( /obj/item/clothing/under/rank/civilian/lawyer/galaxy_blue = 3, - /obj/item/clothing/under/rank/civilian/lawyer/galaxy_red = 3 + /obj/item/clothing/under/rank/civilian/lawyer/galaxy_red = 3, + /obj/item/clothing/under/suit/black_really_collared = 3, + /obj/item/clothing/under/suit/black_really_collared/skirt = 3, + /obj/item/clothing/under/suit/inferno = 3, + /obj/item/clothing/under/suit/inferno/skirt = 3, + /obj/item/clothing/under/suit/inferno/beeze ) LAZYADD(products, extra_products) . = ..() +/obj/machinery/vending/wardrobe/hydro_wardrobe/Initialize(mapload) + var/list/extra_contraband = list( + /obj/item/clothing/under/suit/scarface = 2, + ) + LAZYADD(contraband, extra_contraband) + . = ..() + +/obj/machinery/vending/wardrobe/cargo_wardrobe/Initialize(mapload) + var/list/extra_contraband = list( + /obj/item/clothing/under/suit/scarface = 2, + ) + LAZYADD(contraband, extra_contraband) + . = ..() + /obj/machinery/vending/wardrobe/blueshield_wardrobe name = "\improper BlueDrobe" desc = "A vending machine for blueshield and blueshield-related clothing!" diff --git a/modular_splurt/icons/mob/clothing/under/suits.dmi b/modular_splurt/icons/mob/clothing/under/suits.dmi new file mode 100644 index 0000000000000000000000000000000000000000..2e002c0f6a2c580c3accc9f40f956827b0027122 GIT binary patch literal 7510 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 literal 0 HcmV?d00001 diff --git a/modular_splurt/icons/mob/clothing/under/suits_digi.dmi b/modular_splurt/icons/mob/clothing/under/suits_digi.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b83cc5c45449661535eb12f6076461772e28689c GIT binary patch literal 7993 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 Zz>R6u^_cdl9schG?5rKF$}BzO{s($wSxNu^ literal 0 HcmV?d00001 diff --git a/modular_splurt/icons/obj/clothing/under/suits.dmi b/modular_splurt/icons/obj/clothing/under/suits.dmi new file mode 100644 index 0000000000000000000000000000000000000000..74736b982720c707d11579e6b33ed6fd933a0493 GIT binary patch literal 7752 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

uqay%{8-^iaDDOU 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 A+yDRo literal 32788 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 Date: Sun, 2 Apr 2023 00:34:40 +0000 Subject: [PATCH 50/53] Update TGS DMAPI --- code/__DEFINES/tgs.dm | 4 +++- code/modules/tgs/v3210/commands.dm | 5 ++++- code/modules/tgs/v4/commands.dm | 3 +++ code/modules/tgs/v5/commands.dm | 7 +++++-- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index 54fc1c8b0a..3744a95a0f 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "6.1.0" +#define TGS_DMAPI_VERSION "6.2.0" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -258,6 +258,8 @@ var/help_text = "" /// If this command should be available to game administrators only var/admin_only = FALSE + /// A subtype of [/datum/tgs_chat_command] that is ignored when enumerating available commands. Use this to create shared base /datums for commands. + var/ignore_type /** * Process command activation. Should return a [/datum/tgs_message_content] to respond to the issuer with. diff --git a/code/modules/tgs/v3210/commands.dm b/code/modules/tgs/v3210/commands.dm index ad698808e2..d9bd287465 100644 --- a/code/modules/tgs/v3210/commands.dm +++ b/code/modules/tgs/v3210/commands.dm @@ -10,9 +10,12 @@ var/warned_about_the_dangers_of_robutussin = !warnings_only for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) if(!warned_about_the_dangers_of_robutussin) - TGS_ERROR_LOG("Custom chat commands in [ApiVersion()] lacks the /datum/tgs_chat_user/sender.channel field!") + TGS_WARNING_LOG("Custom chat commands in [ApiVersion()] lacks the /datum/tgs_chat_user/sender.channel field!") warned_about_the_dangers_of_robutussin = TRUE var/datum/tgs_chat_command/stc = I + if(stc.ignore_type == I) + continue + var/command_name = initial(stc.name) if(!command_name || findtext(command_name, " ") || findtext(command_name, "'") || findtext(command_name, "\"")) if(warnings_only && !warned_command_names[command_name]) diff --git a/code/modules/tgs/v4/commands.dm b/code/modules/tgs/v4/commands.dm index 8c16da8e23..d6d3d718d4 100644 --- a/code/modules/tgs/v4/commands.dm +++ b/code/modules/tgs/v4/commands.dm @@ -3,6 +3,9 @@ custom_commands = list() for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) var/datum/tgs_chat_command/stc = new I + if(stc.ignore_type == I) + continue + var/command_name = stc.name if(!command_name || findtext(command_name, " ") || findtext(command_name, "'") || findtext(command_name, "\"")) TGS_ERROR_LOG("Custom command [command_name] ([I]) can't be used as it is empty or contains illegal characters!") diff --git a/code/modules/tgs/v5/commands.dm b/code/modules/tgs/v5/commands.dm index 48dfd1c4d7..71ede42c3b 100644 --- a/code/modules/tgs/v5/commands.dm +++ b/code/modules/tgs/v5/commands.dm @@ -3,14 +3,17 @@ custom_commands = list() for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) var/datum/tgs_chat_command/stc = new I + if(stc.ignore_type == I) + continue + var/command_name = stc.name if(!command_name || findtext(command_name, " ") || findtext(command_name, "'") || findtext(command_name, "\"")) - TGS_WARNING_LOG("Custom command [command_name] ([I]) can't be used as it is empty or contains illegal characters!") + TGS_ERROR_LOG("Custom command [command_name] ([I]) can't be used as it is empty or contains illegal characters!") continue if(results[command_name]) var/datum/other = custom_commands[command_name] - TGS_WARNING_LOG("Custom commands [other.type] and [I] have the same name (\"[command_name]\"), only [other.type] will be available!") + TGS_ERROR_LOG("Custom commands [other.type] and [I] have the same name (\"[command_name]\"), only [other.type] will be available!") continue results += list(list(DMAPI5_CUSTOM_CHAT_COMMAND_NAME = command_name, DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT = stc.help_text, DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY = stc.admin_only)) custom_commands[command_name] = stc From a570656e86181d5c24acce691ac939ad13c60a8d Mon Sep 17 00:00:00 2001 From: BongaTheProto <93835010+BongaTheProto@users.noreply.github.com> Date: Sun, 2 Apr 2023 14:45:21 -0500 Subject: [PATCH 51/53] Update TauStation.dmm --- _maps/map_files/TauStation/TauStation.dmm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_maps/map_files/TauStation/TauStation.dmm b/_maps/map_files/TauStation/TauStation.dmm index 7d378ae1b3..1d64701453 100644 --- a/_maps/map_files/TauStation/TauStation.dmm +++ b/_maps/map_files/TauStation/TauStation.dmm @@ -8244,7 +8244,7 @@ /area/science/xenobiology) "cST" = ( /obj/structure/closet/secure_closet/personal/cabinet, -/obj/item/clothing/under/tuxedo, +/obj/item/clothing/under/suit/tuxedo, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, @@ -8421,8 +8421,8 @@ /area/hallway/primary/starboard) "cVT" = ( /obj/structure/closet/secure_closet/personal/cabinet, -/obj/item/clothing/under/wedding_dress, -/obj/item/clothing/under/tuxedo, +/obj/item/clothing/under/dress/wedding, +/obj/item/clothing/under/suit/tuxedo, /turf/open/floor/carpet/royalblack, /area/commons/dorms) "cVU" = ( From 9192e006847e578036d8aa77e72c89b4bef9fb89 Mon Sep 17 00:00:00 2001 From: SPLURT Bot <97993072+SPLURT-Station-Bot@users.noreply.github.com> Date: Sun, 2 Apr 2023 21:27:11 +0000 Subject: [PATCH 52/53] Automatic changelog generation for PR #803 [ci skip] --- html/changelogs/AutoChangeLog-pr-803.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-803.yml diff --git a/html/changelogs/AutoChangeLog-pr-803.yml b/html/changelogs/AutoChangeLog-pr-803.yml new file mode 100644 index 0000000000..9f7ce69fc1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-803.yml @@ -0,0 +1,6 @@ +author: BongaTheProto +delete-after: true +changes: + - rscadd: Adds a lot of new suits + - bugfix: fixes the tuxedo sprites + - bugfix: fixes the double wedding crate From 6beb065bc69a2676b6c5a06c1ab93dc1e012456a Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 2 Apr 2023 21:28:51 +0000 Subject: [PATCH 53/53] Automatic changelog compile [ci skip] --- .../{AutoChangeLog-pr-803.yml => archive/2023-04.yml} | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) rename html/changelogs/{AutoChangeLog-pr-803.yml => archive/2023-04.yml} (69%) diff --git a/html/changelogs/AutoChangeLog-pr-803.yml b/html/changelogs/archive/2023-04.yml similarity index 69% rename from html/changelogs/AutoChangeLog-pr-803.yml rename to html/changelogs/archive/2023-04.yml index 9f7ce69fc1..71ff37a767 100644 --- a/html/changelogs/AutoChangeLog-pr-803.yml +++ b/html/changelogs/archive/2023-04.yml @@ -1,6 +1,5 @@ -author: BongaTheProto -delete-after: true -changes: +2023-04-02: + BongaTheProto: - rscadd: Adds a lot of new suits - bugfix: fixes the tuxedo sprites - bugfix: fixes the double wedding crate