From 0f224dcc1d6be53318088a6ae2b382fad7c38517 Mon Sep 17 00:00:00 2001 From: Icarus-The-Sun <119832971+Icarus-The-Sun@users.noreply.github.com> Date: Sat, 13 Jun 2026 19:51:30 -0400 Subject: [PATCH 01/20] Physical Flaws (Part One) (#1122) ## About The Pull Request Adds the Hemophiliac (VTM Ghouls and Revenants pg 136), Lame (VTM pg 482), Light Sensitive (VTM pg 495), Permanent Wound (VTM pg 482/483), and Short (VTM page 481) flaws. Please tell me if anything can be done better, I've been going insane. Lame applies paralysis on the chosen leg, so a _cane_ won't help movement, but crutches will (I'm not smart enough to figure out how to make an uncurable wound for limping to apply). Short applies the dwarf trait (please tell me if there's an easier way to set height to be below a certain number). Permanent wound applies some damage when you first spawn in.
Details

I wasn't really sure what to show for testing for this honestly. Kindred character with lame, permanent wound, and light sensitive selected. Screenshot 2026-06-07 163724 Lame character. Screenshot 2026-06-07 205634 Hemophiliac after being shanked with a glass shiv (blood loss worsens, and was incredibly easy to begin bleeding) Screenshot 2026-06-07 163622 Character with a tall height set with the short trait selected (reverts to proper height on removal) Screenshot 2026-06-07 163748 Light sensitive character being obliterated by the sun. Screenshot 2026-06-07 213703

## Why It's Good For The Game More flaws are always fun. ## Changelog :cl: add: Adds Hemophiliac, Lame, Light Sensitive, Permanent Wound, and Short flaws /:cl: --- .../code/negative_quirks/hemophiliac.dm | 33 ++++++++++++ .../merits_flaws/code/negative_quirks/lame.dm | 54 +++++++++++++++++++ .../code/negative_quirks/light_sensitive.dm | 19 +++++++ .../code/negative_quirks/permanent_wound.dm | 22 ++++++++ .../code/negative_quirks/short.dm | 34 ++++++++++++ tgstation.dme | 5 ++ .../darkpack_merits_flaws_preferences.tsx | 9 +++- 7 files changed, 174 insertions(+), 2 deletions(-) create mode 100644 modular_darkpack/modules/merits_flaws/code/negative_quirks/hemophiliac.dm create mode 100644 modular_darkpack/modules/merits_flaws/code/negative_quirks/lame.dm create mode 100644 modular_darkpack/modules/merits_flaws/code/negative_quirks/light_sensitive.dm create mode 100644 modular_darkpack/modules/merits_flaws/code/negative_quirks/permanent_wound.dm create mode 100644 modular_darkpack/modules/merits_flaws/code/negative_quirks/short.dm diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/hemophiliac.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/hemophiliac.dm new file mode 100644 index 000000000000..6f4007aa946f --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/hemophiliac.dm @@ -0,0 +1,33 @@ +// VTM Ghouls and Revenants pg. 136 +/datum/quirk/darkpack/hemophiliac + name = "Hemophiliac" + desc = {"Your character suffers from hemophilia. +If your skin is cut, you will not stop bleeding without medical assistance."} + icon = FA_ICON_DROPLET + value = -3 + gain_text = span_notice("You feel like bleeding is a lot more dangerous.") + lose_text = span_notice("You feel like bleeding's a lot safer now. Whew!") + failure_message = span_notice("You feel like bleeding's a lot safer now. Whew!") + forbidden_splats = list(SPLAT_KINDRED, SPLAT_SHIFTERS) // Kinfolk, humans, and ghouls can take this. Debate adding Garou/Corax to it? + +/*Your character suffers from hemophilia. If your ghoul’s +skin is cut, you will not stop bleeding without medical +assistance. The Blood does not have any effect on a ghoul +or revenant Hemophiliac. +If your character suffers lethal or aggravated damage, +he suffers an additional level of bashing damage every +five minutes until his wound has been dressed to stop +the bleeding. Any vampire who bites a Hemophiliac may +“dress” such wounds. By licking the injury after biting the +ghoul, the vampire will put a stop to any future bashing +damage.*/ + +/datum/quirk/darkpack/hemophiliac/add(client/client_source) + . = ..() + ADD_TRAIT(quirk_holder, TRAIT_EASYBLEED, QUIRK_TRAIT) // Easier to make bleed + ADD_TRAIT(quirk_holder, TRAIT_BLOOD_FOUNTAIN, QUIRK_TRAIT) // worse bleeding when they do + +/datum/quirk/darkpack/hemophiliac/remove() + . = ..() + REMOVE_TRAIT(quirk_holder, TRAIT_EASYBLEED, QUIRK_TRAIT) + REMOVE_TRAIT(quirk_holder, TRAIT_BLOOD_FOUNTAIN, QUIRK_TRAIT) diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/lame.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/lame.dm new file mode 100644 index 000000000000..9f8b8f5bed98 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/lame.dm @@ -0,0 +1,54 @@ +// VTM pg. 482 +/datum/quirk/darkpack/lame + name = "Lame" + desc = {"One or both of your legs are damaged, which prevents you from running or walking easily. +You are forced to walk with a crutch or possibly leg braces, and you have a pronounced limp to your stride."} // we give them one leg trait to select, since using both will make them unable to walk entirely. + icon = FA_ICON_CRUTCH + value = -3 + gain_text = span_notice("Your legs ache!") + lose_text = span_notice("Your legs no longer hurt.") + failure_message = span_notice("Your legs no longer hurt.") + var/lame_leg // Which leg are we not using? + +/*Your legs are damaged, which prevents you from running or walking easily. +You are forced to walk with a cane or possibly leg braces, and you have a pronounced limp to your stride. +Your walking speed is one-quarter that of a normal human, and running is impossible.*/ + +/datum/quirk/darkpack/lame/add(client/client_source) + . = ..() + if(!lame_leg) + lame_leg = client_source?.prefs.read_preference(/datum/preference/choiced/lame_leg) + if(lame_leg == "right") + ADD_TRAIT(quirk_holder, TRAIT_PARALYSIS_R_LEG, QUIRK_TRAIT) + else + ADD_TRAIT(quirk_holder, TRAIT_PARALYSIS_L_LEG, QUIRK_TRAIT) + +/datum/quirk/darkpack/lame/remove() + . = ..() + REMOVE_TRAIT(quirk_holder, TRAIT_PARALYSIS_R_LEG, QUIRK_TRAIT) + REMOVE_TRAIT(quirk_holder, TRAIT_PARALYSIS_L_LEG, QUIRK_TRAIT) + +/datum/quirk_constant_data/lame_leg + associated_typepath = /datum/quirk/darkpack/lame + customization_options = list(/datum/preference/choiced/lame_leg) + +/datum/preference/choiced/lame_leg + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + savefile_key = "lame_leg" + savefile_identifier = PREFERENCE_CHARACTER + +/datum/preference/choiced/lame_leg/init_possible_values() + return list("right", "left") + +/datum/preference/choiced/lame_leg/create_default_value() + return "right" + +/datum/preference/choiced/lame_leg/is_accessible(datum/preferences/preferences) + . = ..() + if (!.) + return FALSE + + return /datum/quirk/darkpack/lame::name in preferences.all_quirks + +/datum/preference/choiced/lame_leg/apply_to_human(mob/living/carbon/human/target, value) + return diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/light_sensitive.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/light_sensitive.dm new file mode 100644 index 000000000000..32846f12ddc6 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/light_sensitive.dm @@ -0,0 +1,19 @@ +// VTM pg. 495 +/datum/quirk/darkpack/light_sensitive + name = "Light Sensitive" + desc = {"You're more sensitive to the sun than others. +Sunlight deals double damage to you."} + icon = FA_ICON_SUN + value = -1 // A lot less awful than in the ttrpg + mob_trait = TRAIT_LIGHT_WEAKNESS + allowed_splats = list(SPLAT_KINDRED) + excluded_clans = list(VAMPIRE_CLAN_SETITE, VAMPIRE_CLAN_WARRIOR_SETITE, VAMPIRE_CLAN_TLACIQUE) + +/*You are even more sensitive to sunlight than other +vampires are. Sunlight causes double normal damage, +and the light of the moon can cause lethal damage in a +manner similar to the sun, though it must shine direct +ly upon you. Even bright lights hurt your eyes, requir +ing the use of sunglasses. Followers of Set and related +bloodlines cannot take this Flaw, as they already have +a worse version of it.*/ diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/permanent_wound.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/permanent_wound.dm new file mode 100644 index 000000000000..ecaca6cc0df8 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/permanent_wound.dm @@ -0,0 +1,22 @@ +// VTM pg. 482-483 +/datum/quirk/darkpack/permanent_wound + name = "Permanent Wound" + desc = {"You suffered injuries during your Embrace which your transformation somehow failed to repair. +At the beginning of each night, you rise from sleep heavily wounded."} + value = -3 + gain_text = span_notice("An unhealed wound aches.") + lose_text = span_notice("You can't feel the pain of your wound anymore.") + allowed_splats = list(SPLAT_KINDRED) + icon = FA_ICON_USER_INJURED + failure_message = span_notice("You can't feel the pain of your wound anymore.") + +/*You suffered injuries during your Embrace which your transformation somehow failed to repair. +At the beginning of each night, +you rise from sleep at the Wounded health level, though this may be healed by spending blood points.*/ + +/datum/quirk/darkpack/permanent_wound/add(client/client_source) + . = ..() + var/mob/living/carbon/human/human_holder = astype(quirk_holder) + if(!human_holder) + return + human_holder.adjust_agg_loss(90, TRUE) diff --git a/modular_darkpack/modules/merits_flaws/code/negative_quirks/short.dm b/modular_darkpack/modules/merits_flaws/code/negative_quirks/short.dm new file mode 100644 index 000000000000..4d89739d9ec3 --- /dev/null +++ b/modular_darkpack/modules/merits_flaws/code/negative_quirks/short.dm @@ -0,0 +1,34 @@ +// VTM pg. 481 +/datum/quirk/darkpack/short + name = "Short" + desc = {"You are well below average height. +You have difficulty reaching or manipulating objects designed for normal adult size, +and your running speed is one-half that of an average human."} + icon = FA_ICON_ARROW_DOWN + value = -4 // Higher than in the ttrpg because it's a round-lasting debuff that'll be painful. + mob_trait = TRAIT_DWARF // Grants passtable too, but it seems like the simplest way to lock them into being short? + quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE + gain_text = span_notice("You feel shorter than average.") + lose_text = span_notice("You don't feel so small now.") + failure_message = span_notice("You don't feel so small now.") + +/*You are well below average height — four and a half feet (1.5 meters) tall or less. +You have difficulty reaching or manipulating objects designed for normal adult size, +and your running speed is one-half that of an average human.*/ + +/datum/movespeed_modifier/quirk_short + multiplicative_slowdown = 2 // Play with this number? + +/datum/quirk/darkpack/short/add(client/client_source) + . = ..() + var/mob/living/carbon/human/human_holder = astype(quirk_holder) + if(!human_holder) + return + human_holder.add_movespeed_modifier(/datum/movespeed_modifier/quirk_short) + +/datum/quirk/darkpack/short/remove() + . = ..() + var/mob/living/carbon/human/human_holder = astype(quirk_holder) + if(!human_holder) + return + human_holder.remove_movespeed_modifier(/datum/movespeed_modifier/quirk_short) diff --git a/tgstation.dme b/tgstation.dme index b75a6ff09724..c9558f136ab5 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7499,14 +7499,19 @@ #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\derangement.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\dulled_bite.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\grip_of_the_damned.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\hemophiliac.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\horrific_appearance_quirk.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\lame.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\light_sensitive.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\mage_blood.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\monstrous_quirk.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\one_armed.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\organovore.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\permanent_fangs.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\permanent_wound.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\pierced_veil.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\prey_exclusion.dm" +#include "modular_darkpack\modules\merits_flaws\code\negative_quirks\short.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\speech_impediment.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\territorial.dm" #include "modular_darkpack\modules\merits_flaws\code\negative_quirks\thaumaturgically_inept.dm" diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_merits_flaws_preferences.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_merits_flaws_preferences.tsx index 3cdaa85c123e..03d1bca66070 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_merits_flaws_preferences.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/darkpack_merits_flaws_preferences.tsx @@ -11,10 +11,15 @@ export const territorial: FeatureChoiced = { export const prey_exclusion: FeatureChoiced = { name: 'Prey Exclusion', description: 'The Prey Exclusion of this character.', - component: FeatureDropdownInput -} + component: FeatureDropdownInput, +}; export const missing_arm: FeatureChoiced = { name: 'Missing Arm', component: FeatureDropdownInput, }; + +export const lame_leg: FeatureChoiced = { + name: 'Lame Leg', + component: FeatureDropdownInput, +}; From efeae808f8752aeb336b8d91c97ccce11cf61a71 Mon Sep 17 00:00:00 2001 From: "darkpack13-api[bot]" <220339179+darkpack13-api[bot]@users.noreply.github.com> Date: Sat, 13 Jun 2026 23:51:50 +0000 Subject: [PATCH 02/20] Automatic changelog for PR #1122 [ci skip] --- html/changelogs/AutoChangeLog-pr-1122.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1122.yml diff --git a/html/changelogs/AutoChangeLog-pr-1122.yml b/html/changelogs/AutoChangeLog-pr-1122.yml new file mode 100644 index 000000000000..597350f5ca2d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1122.yml @@ -0,0 +1,4 @@ +author: "Icarus-The-Sun" +delete-after: True +changes: + - rscadd: "Adds Hemophiliac, Lame, Light Sensitive, Permanent Wound, and Short flaws" \ No newline at end of file From 2991c625a1be4f04252b4c6c1886a476a2a18ff7 Mon Sep 17 00:00:00 2001 From: Stutternov <47883419+Stutternov@users.noreply.github.com> Date: Sun, 14 Jun 2026 15:09:30 -0400 Subject: [PATCH 03/20] Dread Gaze Re-Intro (#1062) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## About The Pull Request Bit of a rehash of https://github.com/DarkPack13/SecondCity/pull/873 I am instead atomizing that PR properly this time. I came back to the Terrifying Presence one after figuring out how to properly force mobs/players to flee the caster, so that's done. The extended action is still a little up in the air, I think it replicates TT's extended action pretty.. okay? But happy to hear alternatives for it. (Fine with axing it too if it's really not wanted, I just really think the forced-flee is a better mechanic.) This is what the V20 book reads for reference regarding the extended action: "The character may attempt Dread Gaze once per turn against a single target, though she may also perform it as an extended action, adding her successes in order to subjugate the target completely. Once the target loses enough dice that he cannot perform any action, he’s so shaken and terrified that he curls up on the ground and weeps." **Note:** I do have recordings of it working. Like usual, Github says too large to upload. Boo-womp. (Will supply if needed tho in the Discord) ## Why It's Good For The Game Overall tries more TT parity based off V20's Dread Gaze effects. The forced flee on 3 or more successes makes it viable as an ability to force enemies, from NPCs to players, to flee from combat or the vicinity of the user. The extended action is a little bit homebrew as we don't have the exact mechanics needed, but this works similar that while in TT you'd keep rolling till you exhaust your opponents rolls - instead you just have to have more successes than your opponent has dice. (This means people with low courage and wits would be very effected, as well as NPCs.) This would be rare-ish vs players, but you underestimate how many players only have 3 courage and 1 wits, etc. ## Changelog :cl: add: Adds forced-flee movement to terrifying presence. add: Adds extended action debuff+stun to terrifying presence. /:cl: --------- Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> --- .../code/discipline/presence/presence.dm | 19 +++++++++++++++---- .../presence/status_effects/dread_gaze.dm | 16 ++++++++++++++++ tgstation.dme | 1 + 3 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 modular_darkpack/modules/powers/code/discipline/presence/status_effects/dread_gaze.dm diff --git a/modular_darkpack/modules/powers/code/discipline/presence/presence.dm b/modular_darkpack/modules/powers/code/discipline/presence/presence.dm index d76958da9431..1965c00e180d 100644 --- a/modular_darkpack/modules/powers/code/discipline/presence/presence.dm +++ b/modular_darkpack/modules/powers/code/discipline/presence/presence.dm @@ -159,7 +159,20 @@ /datum/discipline_power/presence/dread_gaze/activate(mob/living/carbon/human/target) . = ..() apply_presence_overlay(target) - + if(successes >= (target.st_get_stat(STAT_WITS) + target.st_get_stat(STAT_COURAGE))) //We check if you just flat out have more successes than their dice pool total. + var/extended_action_prompt = tgui_input_list(owner, "Attempt to force your target to cower in fear? This will take time to preform this extended action to stun and debuff your opponent!", "Terrifying Presence", list("Yes", "No"), "No") + switch(extended_action_prompt) + if("Yes") + ADD_TRAIT(owner, TRAIT_IMMOBILIZED, DISCIPLINE_TRAIT(type)) + if(do_after(owner, 3 SECONDS)) + to_chat(owner, span_warning("You force [target] to cower to your mere presence!")) + to_chat(target, span_userdanger("You are consumed with an overhwelming sense of dread, forced to cower before [owner] as even your legs betray you and your very being is rocked to its core!")) + target.Stun(1 TURNS) //~5 seconds + target.emote("tremble") //Shaking emote for visibility + target.emote(pick("scream","cry")) //Audible emote + target.apply_status_effect(/datum/status_effect/dread_gaze) //Debuffs for set time + REMOVE_TRAIT(owner, TRAIT_IMMOBILIZED, DISCIPLINE_TRAIT(type)) + return TRUE if(successes <= 3) // already checked for above 0 in pre_activation to_chat(target, span_userdanger("You are consumed with terror toward [owner]!")) to_chat(owner, span_warning("You've struck terror into [target]'s heart with your dreadful gaze!")) @@ -168,9 +181,7 @@ to_chat(owner, span_warning("Your terrifying presence sends [target] fleeing in terror!")) //V20's 'dread gaze' section states that with 3 or more successes targets will find themselves scratching at the walls or fleeing against their will because they are so terrified. - //var/datum/cb = CALLBACK(target, TYPE_PROC_REF(/mob/living/carbon/human, step_away_caster), owner) - //for(var/i in 1 to 30) - //addtimer(cb, (i - 1) * target.total_multiplicative_slowdown()) + GLOB.move_manager.move_away(target, owner, 10, target.cached_multiplicative_slowdown) /datum/discipline_power/presence/dread_gaze/deactivate(mob/living/carbon/human/target) . = ..() diff --git a/modular_darkpack/modules/powers/code/discipline/presence/status_effects/dread_gaze.dm b/modular_darkpack/modules/powers/code/discipline/presence/status_effects/dread_gaze.dm new file mode 100644 index 000000000000..2a4632983d10 --- /dev/null +++ b/modular_darkpack/modules/powers/code/discipline/presence/status_effects/dread_gaze.dm @@ -0,0 +1,16 @@ +/datum/status_effect/dread_gaze //Used for extended effect of dreadgaze + id = "dread_gaze" + status_type = STATUS_EFFECT_UNIQUE + duration = 5 SECONDS + alert_type = /atom/movable/screen/alert/status_effect/dread_gaze + +/datum/status_effect/dread_gaze/on_creation(mob/living/new_owner, generation, time) + . = ..() + if(time) + duration = time + owner.st_add_stat_mod(STAT_DEXTERITY, -4) //Nukes your dex temporarily + +/atom/movable/screen/alert/status_effect/dread_gaze + name = "Overwhelming Dread" + desc = "That person- that THING is a monster! I don't stand a chance!" + icon_state = "hypnosis" diff --git a/tgstation.dme b/tgstation.dme index c9558f136ab5..2de37a424a4a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7696,6 +7696,7 @@ #include "modular_darkpack\modules\powers\code\discipline\potence\potence_status_effect.dm" #include "modular_darkpack\modules\powers\code\discipline\presence\presence.dm" #include "modular_darkpack\modules\powers\code\discipline\presence\status_effects\awe_status_effect.dm" +#include "modular_darkpack\modules\powers\code\discipline\presence\status_effects\dread_gaze.dm" #include "modular_darkpack\modules\powers\code\discipline\presence\status_effects\entrancement_status_effect.dm" #include "modular_darkpack\modules\powers\code\discipline\protean\beast_form.dm" #include "modular_darkpack\modules\powers\code\discipline\protean\claws.dm" From 31d85d4711d62e5fada26e1249a9de0b191cec21 Mon Sep 17 00:00:00 2001 From: "darkpack13-api[bot]" <220339179+darkpack13-api[bot]@users.noreply.github.com> Date: Sun, 14 Jun 2026 19:09:55 +0000 Subject: [PATCH 04/20] Automatic changelog for PR #1062 [ci skip] --- html/changelogs/AutoChangeLog-pr-1062.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1062.yml diff --git a/html/changelogs/AutoChangeLog-pr-1062.yml b/html/changelogs/AutoChangeLog-pr-1062.yml new file mode 100644 index 000000000000..c20c842d90dd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1062.yml @@ -0,0 +1,5 @@ +author: "Stutternov" +delete-after: True +changes: + - rscadd: "Adds forced-flee movement to terrifying presence." + - rscadd: "Adds extended action debuff+stun to terrifying presence." \ No newline at end of file From 5c755fe59dcc577d6ae00a03920dde9b14df90ff Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Sun, 14 Jun 2026 14:10:04 -0500 Subject: [PATCH 05/20] Tribe gifts: Part 2 (#987) ## About The Pull Request Part 2/3 of tribe gift prs before all of them are filled out. This already has alot of them so im atomizing a little. ### Children of Gaia **Jam Weapon** TEMPORARY WILLPOWER. 1 Gnosis. makes every nearby mob unable to use "weaver-born" weapons. difficulty is based on highest nearby willpower ### Glasswalkers **Control Simple Machines** MANIPLUATION + CRAFTS. 1 Willpower. Highlights nearbly "simple" machine and lets you do a handful of interactions (infinite feature coding i had to cut myself off on so its as little slim rn) https://github.com/user-attachments/assets/cca4f87f-9ec8-4c28-8ce4-66a9c9e473c8 ### Red Talon **Hidden Killer**: INTELLIGENCE + LARCENY. Clears any blood with your dna, and and blood or fingerprints from you on any atoms nearby. image ### Shadow Lords **Aura of confidence** (so minor i gave them a second one) **Fatal Flaw** PERCEPTION + EMPATHY. Roll to spot a "weakness" which grants you a bonus dice on any attack on them for a scene ### Silent Striders **Speed of Thought** 1 Gnosis. Double run speed for 1 scene ### BSD **Bane Protector** STAMINA + LEADERSHIP. 1 Rage. Lets you tame any bane OR summon one if you do not target one. The summoning will prob be phased out when banes are a more common occurance ## Why It's Good For The Game 2/3s of tribes not having any features is bad acctually. ## Changelog :cl: FalloutFalcon, Major00 add: Adds new gifts: Jam Weapon (Children of Gaia), Control Simple Machine (Glasswalker), Hidden Killer (Red Talon), Aura of confidence & Fatal Flaw (Shadow Lords), Speed of Thought (Silent Striders), Bane Protector (BSD) add: Adds some little lesser banes qol: powers that spend willpower log it to chat qol: removes pointless to_chat that just says "you cast gift" as most have better built in feedback image: "Tribe gifts: Part 1" gifts now have unique icons code: adds signal that code can hook onto to change bonus dice of rolls /:cl: --------- Co-authored-by: chazzyjazzy <33268885+chazzyjazzy@users.noreply.github.com> --- code/__DEFINES/~darkpack/auras.dm | 7 +- .../dcs/signals_mob/signals_mob_living.dm | 4 +- .../~darkpack/traits/declarations.dm | 3 + code/_globalvars/traits/_traits.dm | 9 +- code/_globalvars/traits/admin_tooling.dm | 3 + code/_onclick/item_attack.dm | 10 + code/modules/projectiles/gun.dm | 5 + .../modules/doors/code/vampdoor.dm | 6 +- .../code/discipline/auspex/aura_component.dm | 35 ++- .../powers/code/discipline/protean/claws.dm | 1 + .../modules/splats/code/powers/_power.dm | 14 +- .../storyteller_dice/code/roll_datum.dm | 4 +- .../code/basic_mobs/banes/_banes.dm | 33 +++ .../code/basic_mobs/banes/religion.dm | 12 + .../code/basic_mobs/banes/suffocating.dm | 37 +++ .../code/gifts/_gift.dm | 8 - .../code/gifts/auspices/galliard.dm | 1 + .../code/gifts/auspices/ragabash.dm | 4 +- .../code/gifts/auspices/theurge.dm | 5 +- .../code/gifts/tribes/black_spiral_dancers.dm | 38 +++ .../code/gifts/tribes/bone_gnawers.dm | 3 +- .../code/gifts/tribes/childrenofgaia.dm | 57 ++++ .../code/gifts/tribes/fianna.dm | 2 +- ...black_spiral_dancer.dm => galestalkers.dm} | 0 .../code/gifts/tribes/get_of_fenris.dm | 7 +- .../code/gifts/tribes/ghostcouncil.dm | 0 .../tribes/glasswalkers/control_machine.dm | 277 ++++++++++++++++++ .../gifts/tribes/glasswalkers/glasswalkers.dm | 16 + .../code/gifts/tribes/redtalons.dm | 54 ++++ .../code/gifts/tribes/shadowlords.dm | 119 ++++++++ .../code/gifts/tribes/silent_striders.dm | 41 +++ .../code/gifts/tribes/silver_fangs.dm | 0 .../code/gifts/tribes/star_gazers.dm | 0 .../code/subsplats/tribes/garou.dm | 100 +++---- .../icons/basic/banes.dmi | Bin 0 -> 1937 bytes .../icons/werewolf_abilities.dmi | Bin 15811 -> 20008 bytes tgstation.dme | 15 +- 37 files changed, 821 insertions(+), 109 deletions(-) create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/banes/_banes.dm create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/banes/religion.dm create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/banes/suffocating.dm create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_spiral_dancers.dm create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/childrenofgaia.dm rename modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/{black_spiral_dancer.dm => galestalkers.dm} (100%) create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/ghostcouncil.dm create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/glasswalkers/control_machine.dm create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/glasswalkers/glasswalkers.dm create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/redtalons.dm create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/shadowlords.dm create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/silent_striders.dm create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/silver_fangs.dm create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/star_gazers.dm create mode 100644 modular_darkpack/modules/werewolf_the_apocalypse/icons/basic/banes.dmi diff --git a/code/__DEFINES/~darkpack/auras.dm b/code/__DEFINES/~darkpack/auras.dm index 663c4938eafb..960a2672f80a 100644 --- a/code/__DEFINES/~darkpack/auras.dm +++ b/code/__DEFINES/~darkpack/auras.dm @@ -21,6 +21,7 @@ #define AURA_SAD COLOR_SILVER // Silver #define AURA_SPIRITUAL COLOR_GOLD // Gold #define AURA_SUSPICIOUS COLOR_STRONG_BLUE // Dark Blue +#define AURA_CONFIDENCE COLOR_VIVID_YELLOW // Primarly for the Shadow Lords gift "Aura of Confidence" // Modifier auras. #define AURA_ANXIOUS "Anxious" // Auras appear scrambled like static or white noise @@ -65,7 +66,8 @@ GLOBAL_LIST_INIT(aura_list, sort_list(list( "Anxious" = AURA_ANXIOUS, "Confused" = AURA_CONFUSED, "Daydreaming" = AURA_DAYDREAMING, - "Psychotic" = AURA_PSYCHOTIC + "Psychotic" = AURA_PSYCHOTIC, + "Confidence" = AURA_CONFIDENCE, ))) GLOBAL_LIST_INIT(emotion_to_quality, sort_list(list( @@ -94,5 +96,6 @@ GLOBAL_LIST_INIT(emotion_to_quality, sort_list(list( "Anxious" = "anxiety", "Confused" = "confusion", "Daydreaming" = "absentmindedness", - "Psychotic" = "psychosis" + "Psychotic" = "psychosis", + "Confidence" = "confidence", ))) diff --git a/code/__DEFINES/~darkpack/dcs/signals_mob/signals_mob_living.dm b/code/__DEFINES/~darkpack/dcs/signals_mob/signals_mob_living.dm index 3a96936550da..95c19115e7af 100644 --- a/code/__DEFINES/~darkpack/dcs/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/~darkpack/dcs/signals_mob/signals_mob_living.dm @@ -7,5 +7,7 @@ //from base of living/CanAllowThrough(): (atom/movable/mover, border_dir) #define COMSIG_LIVING_CAN_ALLOW_THROUGH "living_can_allow_through" #define COMPONENT_LIVING_PASSABLE (1<<0) -//from base of /datum/storyteller_roll/proc/st_roll(): (mob/living/roller, datum/storyteller_roll/roll_datum, output) +//from base of /datum/storyteller_roll/proc/st_roll(): (mob/living/roller, datum/storyteller_roll/roll_datum, atom/target) +#define COMSIG_LIVING_PRE_DICE_ROLLED "living_pre_dice_rolled" +//from base of /datum/storyteller_roll/proc/st_roll(): (mob/living/roller, datum/storyteller_roll/roll_datum, atom/target, output) #define COMSIG_LIVING_DICE_ROLLED "living_dice_rolled" diff --git a/code/__DEFINES/~darkpack/traits/declarations.dm b/code/__DEFINES/~darkpack/traits/declarations.dm index 4ef7a8b1e544..59a10181749b 100644 --- a/code/__DEFINES/~darkpack/traits/declarations.dm +++ b/code/__DEFINES/~darkpack/traits/declarations.dm @@ -152,6 +152,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_SMALL_HANDS "small_hands" // Traits granted via gifts #define TRAIT_RAZOR_CLAWS "razor_claws" +#define TRAIT_JAMMING_WEAPONS "jamming_weapons" +#define TRAIT_NATURAL "natural" +#define TRAIT_AURA_OF_CONFIDENCE "aura_of_confidence" /// Sixth sense restricted to view range #define TRAIT_LOCAL_SIXTHSENSE "local_sixth_sense" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 8926c5af804f..3239f43454ac 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -39,6 +39,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_UNHITTABLE_BY_LASERS" = TRAIT_UNHITTABLE_BY_LASERS, "TRAIT_UNLINKABLE_FISHING_SPOT" = TRAIT_UNLINKABLE_FISHING_SPOT, "TRAIT_TETHER_ATTACHED" = TRAIT_TETHER_ATTACHED, + "TRAIT_NATURAL" = TRAIT_NATURAL, // DARKPACK EDIT ADD - WEREWOLF ), /atom/movable = list( "TRAIT_ACTIVE_STORAGE" = TRAIT_ACTIVE_STORAGE, @@ -675,6 +676,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BRAIN_TRAUMA_IMMUNITY" = TRAIT_BRAIN_TRAUMA_IMMUNITY, "TRAIT_NECROPOLIS_WORSHIP" = TRAIT_NECROPOLIS_WORSHIP, "TRAIT_ANIMAL_MUSK" = TRAIT_ANIMAL_MUSK, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_AURA_OF_CONFIDENCE" = TRAIT_AURA_OF_CONFIDENCE, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_BETRAYERS_MARK" = TRAIT_BETRAYERS_MARK, // DARKPACK EDIT ADD - MERITS_FLAWS - (Tremere) "TRAIT_BLOODY_LOVER" = TRAIT_BLOODY_LOVER, // DARKPACK EDIT ADD "TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD @@ -692,8 +694,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_DIFFICULT_FRENZY" = TRAIT_DIFFICULT_FRENZY, // DARKPACK EDIT ADD - FRENZY "TRAIT_DIFFICULT_RAGE" = TRAIT_DIFFICULT_RAGE, // DARKPACK EDIT ADD - FRENZY "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, // DARKPACK EDIT ADD - "TRAIT_DULLFANGS" = TRAIT_DULLFANGS, // DARKPACK EDIT ADD - MERITS/FLAWS - "TRAIT_EAT_FOOD" = TRAIT_EAT_FOOD, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_DULLFANGS" = TRAIT_DULLFANGS, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_EAT_FOOD" = TRAIT_EAT_FOOD, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_EFFICIENT_DIGESTION" = TRAIT_EFFICIENT_DIGESTION, //DARKPACK EDIT ADD "TRAIT_ENHANCED_MELEE_DODGE" = TRAIT_ENHANCED_MELEE_DODGE, // DARKPACK EDIT ADD "TRAIT_FAIR_GLABRO" = TRAIT_FAIR_GLABRO, // DARKPACK EDIT ADD - MERITS_FLAWS @@ -718,6 +720,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_INVISIBLE_TO_CAMERA" = TRAIT_INVISIBLE_TO_CAMERA, // DARKPACK EDIT ADD "TRAIT_IN_FRENZY" = TRAIT_IN_FRENZY, // DARKPACK EDIT ADD "TRAIT_IRRESISTIBLE_VITAE" = TRAIT_IRRESISTIBLE_VITAE, // DARKPACK EDIT ADD + "TRAIT_JAMMING_WEAPONS" = TRAIT_JAMMING_WEAPONS, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_LAZY" = TRAIT_LAZY, // DARKPACK EDIT ADD "TRAIT_LIGHT_WEAKNESS" = TRAIT_LIGHT_WEAKNESS, // DARKPACK EDIT ADD - Setite Flaw "TRAIT_LOCAL_SIXTHSENSE" = TRAIT_LOCAL_SIXTHSENSE, // DARKPACK EDIT ADD @@ -754,7 +757,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_STAKE_IMMUNE" = TRAIT_STAKE_IMMUNE, // DARKPACK EDIT ADD "TRAIT_STAKE_RESISTANT" = TRAIT_STAKE_RESISTANT, // DARKPACK EDIT ADD "TRAIT_STILLNESS_OF_DEATH" = TRAIT_STILLNESS_OF_DEATH, // DARKPACK EDIT ADD - Gargoyle Quirk - "TRAIT_THE_LARGEST_MAW" = TRAIT_THE_LARGEST_MAW, // DARKPACK EDIT ADD - MERITS/FLAWS + "TRAIT_THE_LARGEST_MAW" = TRAIT_THE_LARGEST_MAW, // DARKPACK EDIT ADD - MERITS_FLAWS "TRAIT_THIRD_EYE" = TRAIT_THIRD_EYE, // DARKPACK EDIT ADD - Tremere & Salubri Quirk "TRAIT_TIMEWARPER" = TRAIT_TIMEWARPER, // DARKPACK EDIT ADD "TRAIT_TIME_SENSE" = TRAIT_TIME_SENSE, // DARKPACK EDIT ADD - MERITS_FLAWS diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index fd17092644bc..e1208f161f76 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -9,6 +9,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_RUSTIMMUNE" = TRAIT_RUSTIMMUNE, "TRAIT_UNHITTABLE_BY_PROJECTILES" = TRAIT_UNHITTABLE_BY_PROJECTILES, "TRAIT_UNHITTABLE_BY_LASERS" = TRAIT_UNHITTABLE_BY_LASERS, + "TRAIT_NATURAL" = TRAIT_NATURAL, // DARKPACK EDIT ADD - WEREWOLF ), /atom/movable = list( "TRAIT_ASHSTORM_IMMUNE" = TRAIT_ASHSTORM_IMMUNE, @@ -363,6 +364,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_RIGHT_EYE_SCAR" = TRAIT_RIGHT_EYE_SCAR, "TRAIT_CARPOTOXIN_IMMUNE" = TRAIT_CARPOTOXIN_IMMUNE, "TRAIT_ANIMAL_MUSK" = TRAIT_ANIMAL_MUSK, // DARKPACK EDIT ADD - MERITS_FLAWS + "TRAIT_AURA_OF_CONFIDENCE" = TRAIT_AURA_OF_CONFIDENCE, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_BLOODY_LOVER" = TRAIT_BLOODY_LOVER, // DARKPACK EDIT ADD "TRAIT_BLOODY_SUCKER" = TRAIT_BLOODY_SUCKER, // DARKPACK EDIT ADD "TRAIT_BLUSH_OF_HEALTH" = TRAIT_BLUSH_OF_HEALTH, // DARKPACK EDIT ADD @@ -399,6 +401,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_INVISIBLE_TO_CAMERA" = TRAIT_INVISIBLE_TO_CAMERA, // DARKPACK EDIT ADD "TRAIT_IN_FRENZY" = TRAIT_IN_FRENZY, // DARKPACK EDIT ADD "TRAIT_IRRESISTIBLE_VITAE" = TRAIT_IRRESISTIBLE_VITAE, // DARKPACK EDIT ADD + "TRAIT_JAMMING_WEAPONS" = TRAIT_JAMMING_WEAPONS, // DARKPACK EDIT ADD - WEREWOLF "TRAIT_LAZY" = TRAIT_LAZY, // DARKPACK EDIT ADD "TRAIT_LIGHT_WEAKNESS" = TRAIT_LIGHT_WEAKNESS, // DARKPACK EDIT ADD - Setite Flaw "TRAIT_LOCAL_SIXTHSENSE" = TRAIT_LOCAL_SIXTHSENSE, // DARKPACK EDIT ADD diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 618868072488..ae36b8552164 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -235,6 +235,11 @@ return FALSE var/final_force = CALCULATE_FORCE(src, attack_modifiers) + // DARKPACK EDIT ADD START - WEREWOLF + if(HAS_TRAIT(user, TRAIT_JAMMING_WEAPONS) && !HAS_TRAIT(src, TRAIT_NATURAL)) + to_chat(user, span_warning("[src] ineffectively jams or malfunctions!")) + return FALSE + // DARKPACK EDIT ADD END if(damtype != STAMINA && final_force && HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to harm other living beings!")) return FALSE @@ -288,6 +293,11 @@ user.changeNext_move(attack_speed) if(get(src, /mob/living) == user) // telekinesis. user.do_attack_animation(attacked_atom) + // DARKPACK EDIT ADD START - WEREWOLF + if(HAS_TRAIT(user, TRAIT_JAMMING_WEAPONS) && !HAS_TRAIT(src, TRAIT_NATURAL)) + to_chat(user, span_warning("[src] ineffectively jams or malfunctions!")) + return FALSE + // DARKPACK EDIT ADD END if(attacked_atom.attacked_by(src, user, modifiers, attack_modifiers) == ATTACK_FAILED) return TRUE SEND_SIGNAL(src, COMSIG_ITEM_AFTERATTACK, attacked_atom, user, modifiers, attack_modifiers) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index d0f61730727d..c7a76d851536 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -452,6 +452,11 @@ /obj/item/gun/can_trigger_gun(mob/living/user, akimbo_usage) . = ..() + // DARKPACK EDIT ADD START - WEREWOLF + if(HAS_TRAIT(user, TRAIT_JAMMING_WEAPONS) && !HAS_TRAIT(src, TRAIT_NATURAL)) + to_chat(user, span_warning("[src] ineffectively jams or malfunctions!")) + return FALSE + // DARKPACK EDIT ADD END if(!handle_pins(user)) return FALSE diff --git a/modular_darkpack/modules/doors/code/vampdoor.dm b/modular_darkpack/modules/doors/code/vampdoor.dm index 1158f4192fdd..8d55a1924410 100644 --- a/modular_darkpack/modules/doors/code/vampdoor.dm +++ b/modular_darkpack/modules/doors/code/vampdoor.dm @@ -365,10 +365,12 @@ /obj/structure/vampdoor/proc/toggle_lock(mob/living/user) playsound(src, lock_sound, 75, TRUE) if(!locked) - to_chat(user, span_notice("[src] is now locked.")) + if(user) + to_chat(user, span_notice("[src] is now locked.")) locked = TRUE else - to_chat(user, span_notice("[src] is now unlocked.")) + if(user) + to_chat(user, span_notice("[src] is now unlocked.")) proc_unlock("key") locked = FALSE return TRUE diff --git a/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm b/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm index 8b8ed738a0c3..4d030c687f05 100644 --- a/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm +++ b/modular_darkpack/modules/powers/code/discipline/auspex/aura_component.dm @@ -65,6 +65,9 @@ /datum/component/aura/proc/update_emotions(mob/changed_mob, new_emotion) SIGNAL_HANDLER + if(HAS_TRAIT(changed_mob, TRAIT_AURA_OF_CONFIDENCE)) + new_emotion = "Confidence" + if(current_aura == new_emotion) return @@ -94,6 +97,10 @@ /datum/component/aura/proc/update_examine_message(mutable_appearance/aura_appearance) var/mob/parent_mob = parent + if(HAS_TRAIT(parent_mob, TRAIT_AURA_OF_CONFIDENCE)) + examine_message = "[parent_mob.p_Their()] aura is swamped in so much superiority nothing else can be made out." + return + switch(current_aura) if(AURA_AFRAID) examine_message = "[parent_mob.p_Their()] aura burns a bright orange, tense and flickering at the edges." @@ -214,6 +221,9 @@ holder.color = null var/mob/parent_mob = parent + if(HAS_TRAIT(parent_mob, TRAIT_AURA_OF_CONFIDENCE)) + return + if(output_color && has_pale_aura(parent_mob)) var/list/hsv_color_value = rgb2hsv(output_color) hsv_color_value[2] = hsv_color_value[2] * 0.7 // Reduce saturation for kindred @@ -273,6 +283,20 @@ aura_smoke_image.color = aura_appearance.color aura_smoke_image.alpha = 50 + var/matrix/smoke_transform = matrix() + smoke_transform.Scale(1, pick(1.25, 1.5)) + aura_smoke_image.transform = smoke_transform + + var/matrix/classic_aura_transform = matrix() + classic_aura_transform.Scale(pick(0.65, 0.75), 1) + aura_classic_image.transform = classic_aura_transform + + holder.vis_contents += aura_classic_image + holder.vis_contents += aura_smoke_image + + if(HAS_TRAIT(parent_mob, TRAIT_AURA_OF_CONFIDENCE)) + return + if(HAS_TRAIT(parent_mob, TRAIT_DIABLERIE) && !HAS_TRAIT(parent_mob, TRAIT_HIDDEN_DIABLERIE)) var/mutable_appearance/diablerie_image = mutable_appearance('modular_darkpack/modules/powers/icons/auras.dmi', "diab", ABOVE_MOB_LAYER + 1, parent_mob, ABOVE_GAME_PLANE) holder.add_overlay(diablerie_image) @@ -300,17 +324,6 @@ if(isavatar(parent_mob) || isobserver(parent_mob)) holder.opacity = holder.opacity * 0.5 - var/matrix/smoke_transform = matrix() - smoke_transform.Scale(1, pick(1.25, 1.5)) - aura_smoke_image.transform = smoke_transform - - var/matrix/classic_aura_transform = matrix() - classic_aura_transform.Scale(pick(0.65, 0.75), 1) - aura_classic_image.transform = classic_aura_transform - - holder.vis_contents += aura_classic_image - holder.vis_contents += aura_smoke_image - /datum/component/aura/proc/update_aura_filters(mutable_appearance/aura_appearance, image/holder) remove_wibbly_filters(holder) diff --git a/modular_darkpack/modules/powers/code/discipline/protean/claws.dm b/modular_darkpack/modules/powers/code/discipline/protean/claws.dm index fb4799c83acf..0e6186356fc7 100644 --- a/modular_darkpack/modules/powers/code/discipline/protean/claws.dm +++ b/modular_darkpack/modules/powers/code/discipline/protean/claws.dm @@ -16,6 +16,7 @@ /obj/item/gangrel_claws/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NODROP, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_NATURAL, INNATE_TRAIT) /obj/item/gangrel_claws/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) . = ..() diff --git a/modular_darkpack/modules/splats/code/powers/_power.dm b/modular_darkpack/modules/splats/code/powers/_power.dm index d99530edb81d..2b6a9942b956 100644 --- a/modular_darkpack/modules/splats/code/powers/_power.dm +++ b/modular_darkpack/modules/splats/code/powers/_power.dm @@ -7,6 +7,11 @@ /// Means that this action is not a real power, but some sort of innate ability we represent as a power/disc/gift mechnaicly. var/innate_ability = FALSE + /// If the power manually calls `StartCooldown`, otherwise handled by Activate + var/handles_cooldown = FALSE + /// If the power manually calls `spend_resources` itself, otherwise handled by Activate + var/handles_spend_resources = FALSE + /// How much temporary willpower is required to use this ability var/willpower_cost = 0 @@ -17,9 +22,11 @@ return FALSE /datum/action/cooldown/power/Activate(atom/target) - . = ..() + if(!handles_cooldown) + . = ..() - spend_resources() + if(!handles_spend_resources) + spend_resources() /** @@ -40,6 +47,9 @@ * when casting the power. */ /datum/action/cooldown/power/proc/spend_resources() + SHOULD_CALL_PARENT(TRUE) + if(willpower_cost && isliving(owner)) var/mob/living/living_owner = owner living_owner.st_change_stat(STAT_TEMPORARY_WILLPOWER, -willpower_cost) + to_chat(owner, span_warning("You burn [willpower_cost] willpower.")) diff --git a/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm b/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm index eb62e412dbbe..0963013cef57 100644 --- a/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm +++ b/modular_darkpack/modules/storyteller_dice/code/roll_datum.dm @@ -54,6 +54,8 @@ var/auto_success_amount = calculate_auto_successes(roller) var/used_difficulty = calculate_used_difficulty(roller) + bonus += SEND_SIGNAL(roller, COMSIG_LIVING_PRE_DICE_ROLLED, src, target) + var/list/rolled_dice = roll_dice(dice_amount, auto_success_amount) var/dice_used_text = "[dice_amount] dice" @@ -94,7 +96,7 @@ LAZYADDASSOC(mobs_last_rolled, WEAKREF(roller), list(world.time, output)) - SEND_SIGNAL(roller, COMSIG_LIVING_DICE_ROLLED, src, output) + SEND_SIGNAL(roller, COMSIG_LIVING_DICE_ROLLED, src, target, output) return output /datum/storyteller_roll/proc/create_balloon_alert(mob/living/roller, mob/player_mob, number) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/banes/_banes.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/banes/_banes.dm new file mode 100644 index 000000000000..34458348d8ee --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/banes/_banes.dm @@ -0,0 +1,33 @@ +/mob/living/basic/bane + name = "creature" + abstract_type = /mob/living/basic/bane + icon = 'modular_darkpack/modules/werewolf_the_apocalypse/icons/basic/banes.dmi' + + mob_biotypes = MOB_SPIRIT + basic_mob_flags = DEL_ON_DEATH + + speed = 0.35 + maxHealth = 80 + health = 80 + melee_damage_lower = 10 + melee_damage_upper = 20 + obj_damage = 20 + + attack_verb_continuous = "bites" + attack_verb_simple = "bite" + attack_sound = 'sound/items/weapons/bite.ogg' + speak_emote = list("gnashes") + + faction = list("bane") + + pressure_resistance = 200 + bloodpool = 0 + maxbloodpool = 0 + bloodquality = BLOOD_QUALITY_LOW + + ai_controller = /datum/ai_controller/basic_controller/simple/simple_hostile_obstacles + +/mob/living/basic/bane/Initialize(mapload) + . = ..() + AddElement(/datum/element/ai_retaliate) + ADD_TRAIT(src, TRAIT_WYRMTAINTED, INNATE_TRAIT) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/banes/religion.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/banes/religion.dm new file mode 100644 index 000000000000..4e32c692f266 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/banes/religion.dm @@ -0,0 +1,12 @@ +/mob/living/basic/bane/religion + desc = "A strangly familiar looking creature that reminds you of your aunt." + icon_state = "religion_bane" + maxHealth = 50 + health = 50 + pass_flags = PASSMOB + mob_size = MOB_SIZE_SMALL + +/mob/living/basic/bane/religion/Initialize(mapload) + . = ..() + AddElement(/datum/element/simple_flying) + AddComponent(/datum/component/swarming) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/banes/suffocating.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/banes/suffocating.dm new file mode 100644 index 000000000000..e935f9d81399 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/basic_mobs/banes/suffocating.dm @@ -0,0 +1,37 @@ +/mob/living/basic/bane/suffocating + desc = "A disgusting gasping creature that writhes and contorts." + icon_state = "suffocating_bane" + maxHealth = 50 + health = 50 + + ai_controller = /datum/ai_controller/basic_controller/suffocating_bane + + mob_size = MOB_SIZE_SMALL + +/datum/ai_controller/basic_controller/suffocating_bane + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + + planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/random_speech/suffocating_bane + ) + + +/datum/ai_planning_subtree/random_speech/suffocating_bane + speech_chance = 15 + speak = list("gasps") + sound = list( + 'sound/mobs/humanoids/human/gasp/gasp_female1.ogg', + 'sound/mobs/humanoids/human/gasp/gasp_female2.ogg', + 'sound/mobs/humanoids/human/gasp/gasp_female3.ogg', + 'sound/mobs/humanoids/human/gasp/gasp_male1.ogg', + 'sound/mobs/humanoids/human/gasp/gasp_male2.ogg', + ) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/_gift.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/_gift.dm index dddbe9be9d7c..dc5b3ff86fb0 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/_gift.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/_gift.dm @@ -10,8 +10,6 @@ check_flags = AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS - var/default_activate_message = TRUE - var/rage_cost = 0 var/gnosis_cost = 0 @@ -24,12 +22,6 @@ owner.balloon_alert(owner, "not a gift user!") return FALSE -/datum/action/cooldown/power/gift/Activate(atom/target) - . = ..() - - if(default_activate_message) - to_chat(owner, span_notice("You activate the [name]...")) - /datum/action/cooldown/power/gift/can_afford(feedback) . = ..() var/datum/splat/werewolf/casting_splat = get_werewolf_splat(owner) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/galliard.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/galliard.dm index 20544f098885..1320746e034e 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/galliard.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/galliard.dm @@ -44,6 +44,7 @@ /datum/action/cooldown/power/gift/mindspeak/Activate(atom/target) + . = ..() var/input = tgui_input_text(usr, "What do you want to tell to your Tribe?", name, max_length = MAX_MESSAGE_LEN) if(!input || !IsAvailable(feedback = TRUE)) return diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ragabash.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ragabash.dm index 0a0f7bfc8de2..1dc3575b9d27 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ragabash.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/ragabash.dm @@ -77,11 +77,11 @@ return FALSE /datum/action/cooldown/power/gift/infectious_laughter/Activate(atom/target) - . = ..() - if(!last_spoken_message || (when_spoken + 3 TURNS < world.time)) return + . = ..() + owner.emote("laugh") playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/infectious_laughter.ogg', 50, FALSE) var/list/hearers = oviewers(DEFAULT_MESSAGE_RANGE, owner) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/theurge.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/theurge.dm index bd0f90aaac4f..b92433961d1a 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/theurge.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/auspices/theurge.dm @@ -26,9 +26,9 @@ the scar is received and an extra Gnosis point is spent. /datum/action/cooldown/power/gift/mothers_touch/Activate(atom/target) if(!isliving(target)) - return + return FALSE if(!(target in range(1, owner))) - return + return FALSE . = ..() @@ -40,7 +40,6 @@ the scar is received and an extra Gnosis point is spent. living_target.heal_storyteller_health(successes, TRUE, TRUE, TRUE) SEND_SIGNAL(owner, COMSIG_MASQUERADE_VIOLATION) - StartCooldown() return TRUE /datum/action/cooldown/power/gift/sense_wyrm diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_spiral_dancers.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_spiral_dancers.dm new file mode 100644 index 000000000000..3d95b08b5a61 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_spiral_dancers.dm @@ -0,0 +1,38 @@ +/datum/storyteller_roll/gift/bane_protector + bumper_text = "Pact Binding" + applicable_stats = list(STAT_MANIPULATION, STAT_LEADERSHIP) + +/datum/action/cooldown/power/gift/bane_protector + name = "Bane Protector" + desc = "The Black Spiral Dancer binds a Bane in a pact of mutual alliance." + button_icon_state = "bane_protector" + + click_to_activate = TRUE + + rank = 1 + rage_cost = 1 + +/datum/action/cooldown/power/gift/bane_protector/Activate(atom/target) + . = ..() + + var/mob/living/carbon/human/human_owner = astype(owner) + var/mob/living/basic/basic_target = astype(target) + + var/datum/storyteller_roll/gift/bane_protector/roll_datum = new() + if(roll_datum.st_roll(owner, target) != ROLL_SUCCESS) + return TRUE + + if(istype(basic_target, /mob/living/basic/bane)) + qdel(basic_target.GetComponent(/datum/component/obeys_commands)) + human_owner?.add_beastmaster_minion(target) + basic_target.ai_controller = new /datum/ai_controller/basic_controller/beastmaster_summon(basic_target) + return TRUE + + // Just summon a random shitter. + human_owner.playsound_local(get_turf(human_owner), 'sound/effects/fire_puff.ogg') + human_owner?.add_beastmaster_minion(/mob/living/basic/bane/religion/summoned) + return TRUE + + +/mob/living/basic/bane/religion/summoned + ai_controller = /datum/ai_controller/basic_controller/beastmaster_summon diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/bone_gnawers.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/bone_gnawers.dm index 5782e5d09769..790a5b14ead1 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/bone_gnawers.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/bone_gnawers.dm @@ -20,6 +20,7 @@ return FALSE /datum/action/cooldown/power/gift/desperate_strength/Activate(atom/target) + . = ..() var/mob/living/caster = owner var/static/list/radial_menu_options = list( "One" = icon('modular_darkpack/modules/werewolf_the_apocalypse/icons/gifts/tribes/bone_gnawers.dmi', "radial_one"), @@ -71,7 +72,7 @@ /datum/status_effect/desperate_strength/proc/on_dice_rolled(mob/living/roller, datum/storyteller_roll/roll_datum, output) SIGNAL_HANDLER - if(STAT_STRENGTH in roll_datum.applicable_stats) + if(STAT_STRENGTH in roll_datum.using_stats(roller)) qdel(src) /datum/status_effect/desperate_strength/on_remove() diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/childrenofgaia.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/childrenofgaia.dm new file mode 100644 index 000000000000..1b745104ad7a --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/childrenofgaia.dm @@ -0,0 +1,57 @@ +/datum/storyteller_roll/gift/jam_weapon + bumper_text = "Jam Weapon" + applicable_stats = list(STAT_TEMPORARY_WILLPOWER) + numerical = TRUE + +/datum/action/cooldown/power/gift/jam_weapon + name = "Jam Weapon" + desc = "The Child may stop any Weaver-born weapons from working within the range of his voice." + button_icon_state = "jam_weapon" + rank = 1 + gnosis_cost = 1 + var/list/datum/weakref/jammed_mobs = list() + +/datum/action/cooldown/power/gift/jam_weapon/Activate(atom/target) + . = ..() + // could use better flavor/sounds + + // "The player rolls Willpower against a difficulty of highest Willpower of any armed individual within earshot. " + var/highest_willpower = 0 + for(var/mob/living/carbon/human/guy in orange(DEFAULT_MESSAGE_RANGE, owner)) + var/guy_willpower = guy.st_get_stat(STAT_TEMPORARY_WILLPOWER) + if(guy_willpower > highest_willpower) + highest_willpower = guy_willpower + + var/datum/storyteller_roll/gift/jam_weapon/jam_roll = new() + jam_roll.difficulty = highest_willpower + var/roll_result = jam_roll.st_roll(owner) + if(roll_result > 0) + for(var/mob/living/carbon/human/guy in range(DEFAULT_MESSAGE_RANGE, owner)) + guy.apply_status_effect(/datum/status_effect/jam_weapon, roll_result TURNS) + + +/datum/status_effect/jam_weapon + id = "jam_weapon" + duration = STATUS_EFFECT_PERMANENT + + status_type = STATUS_EFFECT_UNIQUE + + alert_type = /atom/movable/screen/alert/status_effect/gift/jam_weapon + +/datum/status_effect/jam_weapon/on_creation(mob/living/owner, duration) + src.duration = duration + return ..() + +/datum/status_effect/jam_weapon/on_apply() + . = ..() + ADD_TRAIT(owner, TRAIT_JAMMING_WEAPONS, GIFT_TRAIT) + +/datum/status_effect/jam_weapon/on_remove() + REMOVE_TRAIT(owner, TRAIT_JAMMING_WEAPONS, GIFT_TRAIT) + return ..() + + +/atom/movable/screen/alert/status_effect/gift/jam_weapon + name = /datum/action/cooldown/power/gift/jam_weapon::name + desc = /datum/action/cooldown/power/gift/jam_weapon::desc + overlay_state = /datum/action/cooldown/power/gift/jam_weapon::button_icon_state diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/fianna.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/fianna.dm index 09d0206e5adb..e39bcd411556 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/fianna.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/fianna.dm @@ -74,7 +74,7 @@ /datum/action/cooldown/power/gift/faerie_light name = "Faerie Light" desc = "Create a bobbing mote of light to light your way or attract targets for an ambush." - button_icon_state = null // TODO: icon + button_icon_state = "faerie_light" click_to_activate = TRUE rank = 1 diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_spiral_dancer.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/galestalkers.dm similarity index 100% rename from modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/black_spiral_dancer.dm rename to modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/galestalkers.dm diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/get_of_fenris.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/get_of_fenris.dm index 198c30aaced5..4a0644b788ba 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/get_of_fenris.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/get_of_fenris.dm @@ -10,11 +10,10 @@ * TODO: less placeholder sound */ -/datum/storyteller_roll/visage_of_fenris +/datum/storyteller_roll/gift/visage_of_fenris bumper_text = "Visage of Fenris" applicable_stats = list(STAT_CHARISMA, STAT_INTIMIDATION) numerical = TRUE - roll_output_type = ROLL_PUBLIC /datum/movespeed_modifier/visage_of_fenris multiplicative_slowdown = 0.75 @@ -31,7 +30,7 @@ . = ..() var/datum/splat/werewolf/our_splat = get_werewolf_splat(owner) - var/datum/storyteller_roll/visage_of_fenris/roll_datum = new() + var/datum/storyteller_roll/gift/visage_of_fenris/roll_datum = new() var/successes = roll_datum.st_roll(owner) var/obj/effect/temp_visual/decoy/D = new /obj/effect/temp_visual/decoy(owner.loc, owner) @@ -39,7 +38,7 @@ playsound(owner, 'modular_darkpack/modules/werewolf_the_apocalypse/sounds/gifts/visage_of_fenris.ogg', 75, FALSE) - for(var/mob/living/guy in viewers(world.view, owner)) + for(var/mob/living/guy in viewers(DEFAULT_SIGHT_DISTANCE, owner)) if(guy == owner) continue diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/ghostcouncil.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/ghostcouncil.dm new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/glasswalkers/control_machine.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/glasswalkers/control_machine.dm new file mode 100644 index 000000000000..cc9b1ca0d61e --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/glasswalkers/control_machine.dm @@ -0,0 +1,277 @@ +/datum/storyteller_roll/gift/control_simple_machine + bumper_text = "Control Simple Machine" + applicable_stats = list(STAT_MANIPULATION, STAT_CRAFTS) + difficulty = 7 + +/datum/storyteller_roll/gift/control_complex_machine + bumper_text = "Control Complex Machine" + applicable_stats = list(STAT_MANIPULATION, STAT_SCIENCE) // or STAT_COMPUTER + + +/datum/action/cooldown/power/gift/control_machine + abstract_type = /datum/action/cooldown/power/gift/control_machine + + click_to_activate = TRUE + + handles_spend_resources = TRUE + willpower_cost = 1 + + var/roll_type + var/datum/storyteller_roll/roll_datum + var/is_complex = FALSE + + /// Stores the most recent target of the ability that succeeded + var/datum/weakref/last_target_ref + /// When the currently weakrefed target was first used. + var/first_target_use = 0 + + var/list/image/object_highlights + +/datum/action/cooldown/power/gift/control_machine/set_click_ability(mob/on_who) + . = ..() + if(!on_who.client) + return + + var/existing_target = last_target_ref?.resolve() + + // Movable cause i dont feel like checking EVERY EVERY atom. + for(var/atom/movable/nearby_atom in oview(on_who, DEFAULT_SIGHT_DISTANCE)) + if(!length(nearby_atom.get_control_machine_options(on_who, is_complex))) + continue + var/color = COLOR_BLUE_LIGHT + if(nearby_atom == existing_target) + color = COLOR_BLUE + + var/image/I = image(loc = nearby_atom) + I.appearance = nearby_atom.appearance + I.layer = nearby_atom.layer - 0.01 + I.pixel_y = 0 + I.pixel_x = 0 + I.pixel_w = 0 + I.pixel_z = 0 + + apply_wibbly_filters(I) + + I.add_filter("control_machine", 1, outline_filter(size = 1, color = color)) + + LAZYINITLIST(object_highlights) + on_who.client.images += I + object_highlights += I + + // Could probaly use a sound. + +/datum/action/cooldown/power/gift/control_machine/unset_click_ability(mob/on_who, refund_cooldown = TRUE) + . = ..() + if(!on_who.client || !object_highlights) + return + for(var/image/I in object_highlights) + if(I in on_who.client.images) + on_who.client.images -= I + QDEL_LAZYLIST(object_highlights) + +// could use sounds +/datum/action/cooldown/power/gift/control_machine/Activate(atom/target) + var/choices = target.get_control_machine_options(owner, is_complex) + if(!length(choices)) + return FALSE + + var/choice = show_radial_menu(owner, target, choices, autopick_single_option = FALSE) + if(!choice) + return + + . = ..() + + if(!roll_datum) + roll_datum = new roll_type() + + if(first_target_use + 1 SCENES < world.time) // Its been active for a whole scene. Clear it + last_target_ref = null + willpower_cost = 1 + + var/free_to_use = FALSE + + var/last_target = last_target_ref?.resolve() + if(last_target == target) + free_to_use = TRUE + willpower_cost = 0 + + if(free_to_use) + target.run_control_machine(owner, choice, is_complex) + else if(roll_datum.st_roll(owner, target) == ROLL_SUCCESS) + target.run_control_machine(owner, choice, is_complex) + last_target_ref = WEAKREF(target) + first_target_use = world.time + + spend_resources() + + return TRUE + + +/datum/action/cooldown/power/gift/control_machine/simple + name = "Control Simple Machine" + desc = "The Garou may command the spirits of the simplest machines, causing levers to flip, doors to unbolt, pulleys to roll, and so on." + button_icon_state = "control_simple_machine" + + rank = 1 + + roll_type = /datum/storyteller_roll/gift/control_simple_machine + +// DARKPACK TODO - (gifts past rank 1) +/datum/action/cooldown/power/gift/control_machine/complex + name = "Control Complex Machine" + desc = "Similar to Control Simple Machine, the Glass Walker may now converse with and command the spirits of electronic devices such as computers, smart phones, and cars." + + rank = 3 + + roll_type = /datum/storyteller_roll/gift/control_complex_machine + is_complex = TRUE + + +/atom/proc/get_control_machine_options(mob/living/user, is_complex = FALSE) + RETURN_TYPE(/list) + + . = list() + +/atom/proc/run_control_machine(mob/living/user, choice, is_complex = FALSE) + return + + +/obj/item/grenade/get_control_machine_options(mob/living/user, is_complex = FALSE) + . = ..() + .["prime"] = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_use") + +/obj/item/grenade/run_control_machine(mob/living/user, choice, is_complex = FALSE) + . = ..() + if(is_complex) + return + switch(choice) + if("prime") + arm_grenade() + + +/obj/item/lighter/get_control_machine_options(mob/living/user, is_complex = FALSE) + . = ..() + .["light"] = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_use") + +/obj/item/lighter/run_control_machine(mob/living/user, choice, is_complex = FALSE) + . = ..() + if(is_complex) + return + switch(choice) + if("light") + set_lit(!lit) + + +/* Breaks due to requirng a user really hard. +/obj/item/gun/get_control_machine_options(mob/living/user, is_complex = FALSE) + . = ..() + .["fire"] = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_use") + +/obj/item/gun/run_control_machine(mob/living/user, choice, is_complex = FALSE) + . = ..() + if(is_complex) + return + switch(choice) + if("fire") + process_fire(get_turf(src)) +*/ + + +/* +/obj/machinery/get_control_machine_options(mob/living/user, is_complex = FALSE) + . = ..() + .["unscrew"] = image(icon = 'icons/hud/radial.dmi', icon_state = "machine") + +/obj/machinery/run_control_machine(mob/living/user, choice, is_complex = FALSE) + . = ..() + if(is_complex) + return + switch(choice) + if("unscrew") + toggle_panel_open() + balloon_alert(user, "maintenance hatch [panel_open ? "opened" : "closed"]") +*/ + +/obj/machinery/light/get_control_machine_options(mob/living/user, is_complex = FALSE) + . = ..() + if(status != LIGHT_EMPTY) + .["unscrew"] = image(icon = 'icons/hud/radial.dmi', icon_state = "machine") + +/obj/machinery/light/run_control_machine(mob/living/user, choice, is_complex = FALSE) + . = ..() + if(is_complex) + return + switch(choice) + if("unscrew") + var/obj/item/light/bulb = drop_light_tube() + bulb?.shatter() + + +/obj/machinery/button/get_control_machine_options(mob/living/user, is_complex = FALSE) + . = ..() + .["flick"] = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_use") + +/obj/machinery/button/run_control_machine(mob/living/user, choice, is_complex = FALSE) + . = ..() + if(is_complex) + return + switch(choice) + if("flick") + attempt_press(user) + + +/obj/machinery/shower/get_control_machine_options(mob/living/user, is_complex = FALSE) + . = ..() + if(!is_complex) + .["turn"] = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_use") + +/obj/machinery/shower/run_control_machine(mob/living/user, choice, is_complex = FALSE) + . = ..() + if(is_complex) + return + switch(choice) + if("turn") + interact(user) + + +/obj/machinery/firealarm/get_control_machine_options(mob/living/user, is_complex = FALSE) + . = ..() + if(!is_complex) + .["flip"] = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_use") + +/obj/machinery/firealarm/run_control_machine(mob/living/user, choice, is_complex = FALSE) + . = ..() + if(is_complex) + return + switch(choice) + if("flip") + alarm(user) + + +/obj/vehicle/ridden/scooter/get_control_machine_options(mob/living/user, is_complex = FALSE) + . = ..() + if(!is_complex) + .["roll"] = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_rotate") + +/obj/vehicle/ridden/scooter/run_control_machine(mob/living/user, choice, is_complex = FALSE) + . = ..() + if(is_complex) + return + switch(choice) + if("roll") + step(src, dir) + + +/obj/structure/vampdoor/get_control_machine_options(mob/living/user, is_complex = FALSE) + . = ..() + if(!is_complex) + .["lock"] = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_rotate") + +/obj/structure/vampdoor/run_control_machine(mob/living/user, choice, is_complex = FALSE) + . = ..() + if(is_complex) + return + switch(choice) + if("lock") + if(!locked) + toggle_lock(user) diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/glasswalkers/glasswalkers.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/glasswalkers/glasswalkers.dm new file mode 100644 index 000000000000..b89ef6e9f4d9 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/glasswalkers/glasswalkers.dm @@ -0,0 +1,16 @@ +/* +/datum/action/cooldown/power/gift/hands_full_of_thunder + name = "Hands Full of Thunder" + desc = "Invoke the machine spirits to support you in these trying times. Abstain from needing bullets when you fire a gun." + button_icon_state = "hands_full_of_thunder" + rank = 2 + gnosis_cost = 1 + +/datum/action/cooldown/power/gift/hands_full_of_thunder/Activate(atom/target) + . = ..() + ADD_TRAIT(owner, TRAIT_THUNDERSHOT, "thunder") + to_chat(owner, span_notice("You feel your fingers tingling with electricity...!")) + spawn(1 SCENES) + REMOVE_TRAIT(owner, TRAIT_THUNDERSHOT, "thunder") + to_chat(owner, span_notice("The buzz in your fingertips ebbs...")) +*/ diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/redtalons.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/redtalons.dm new file mode 100644 index 000000000000..a6c015997227 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/redtalons.dm @@ -0,0 +1,54 @@ +/datum/storyteller_roll/gift/hidden_killer + bumper_text = "Hidden Killer" + applicable_stats = list(STAT_INTELLIGENCE, STAT_LARCENY) + +/datum/action/cooldown/power/gift/hidden_killer + name = "Hidden Killer" + desc = "The Red Talons didn't survive for so long without learning ways to conceal themselves. This Gift allows a werewolf to leave behind no physical evidence that would betray her hand (or claws, or teeth) in a slaying." + button_icon_state = "hidden_killer" + + click_to_activate = TRUE + + rank = 1 + +/datum/action/cooldown/power/gift/hidden_killer/Activate(atom/target) + var/mob/living/carbon/human/human_owner = astype(owner) + var/mob/living/dead_guy = astype(target) + if(!dead_guy || dead_guy.stat != DEAD) + return FALSE + if(!(target in range(1, owner))) + return FALSE + + . = ..() + + owner.visible_message("[src] presses a hand to [dead_guy]") + + var/datum/storyteller_roll/gift/hidden_killer/roll_datum = new() + var/roll_result = roll_datum.st_roll(owner) + + if(roll_result != ROLL_SUCCESS) + return TRUE + + var/list/owner_blood_dna = human_owner?.get_blood_dna_list() + var/full_print = md5(human_owner.dna.unique_identity) + + for(var/obj/effect/decal/cleanable/blood/blood_spot in range(12, owner)) + for(var/blood_dna in GET_ATOM_BLOOD_DNA(blood_spot)) + if(blood_dna in owner_blood_dna) + qdel(blood_spot) + break + + for(var/atom/nearby_atom in range(8, owner)) + var/datum/forensics/atom_forensics = nearby_atom.forensics + if(!atom_forensics) + continue + + for(var/fingerprint in atom_forensics.fingerprints) + if(fingerprint == full_print) + atom_forensics.fingerprints -= fingerprint + + for(var/bloodprint in atom_forensics.blood_DNA) + if(bloodprint in owner_blood_dna) + atom_forensics.blood_DNA -= bloodprint + + return TRUE diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/shadowlords.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/shadowlords.dm new file mode 100644 index 000000000000..16a605fd0e7d --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/shadowlords.dm @@ -0,0 +1,119 @@ +/datum/action/cooldown/power/gift/aura_of_confidence + name = "Aura of Confidence" + desc = "The werewolf projects an aura of superiority, preventing attempts to find flaws or read auras." + button_icon_state = "aura_of_confidence" + rank = 1 + +// Effect is permenent +/datum/action/cooldown/power/gift/aura_of_confidence/Grant(mob/granted_to) + . = ..() + ADD_TRAIT(granted_to, TRAIT_AURA_OF_CONFIDENCE, GIFT_TRAIT) + SEND_SIGNAL(granted_to, COMSIG_MOB_UPDATE_AURA) + +/datum/action/cooldown/power/gift/aura_of_confidence/Remove(mob/removed_from) + . = ..() + REMOVE_TRAIT(removed_from, TRAIT_AURA_OF_CONFIDENCE, GIFT_TRAIT) + SEND_SIGNAL(removed_from, COMSIG_MOB_UPDATE_AURA) + + + +/datum/storyteller_roll/gift/fatal_flaw + bumper_text = "Fatal Flaw" + applicable_stats = list(STAT_PERCEPTION, STAT_EMPATHY) + numerical = TRUE + + +/datum/action/cooldown/power/gift/fatal_flaw + name = "Fatal Flaw" + desc = "The Shadow Lord can spy a target's weakness, gaining an advantage in combat." + button_icon_state = "fatal_flaw" + rank = 1 + click_to_activate = TRUE + +/datum/action/cooldown/power/gift/fatal_flaw/Activate(atom/target) + var/mob/living/living_owner = astype(owner) + var/mob/living/living_target = astype(target) + if(!living_target || (living_target == owner)) + return FALSE + if(!(target in range(DEFAULT_SIGHT_DISTANCE, owner))) + return FALSE + + . = ..() + + if(!do_after(owner, 1 TURNS, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_HELD_ITEM))) + return TRUE + + var/datum/storyteller_roll/gift/fatal_flaw/roll_datum = new() + roll_datum.difficulty = living_target.st_get_stats(list(STAT_WITS, STAT_SUBTERFUGE)) + var/roll_result = roll_datum.st_roll(owner, target) + + if(roll_result <= 0) + return TRUE + + living_owner?.apply_status_effect(/datum/status_effect/fatal_flaw, target) + to_chat(owner, span_notice("You study [target] and discover a weakness granting you a bonus dice to attacks.")) + + return TRUE + + +/datum/status_effect/fatal_flaw + id = "fatal_flaw" + duration = 1 SCENES + + status_type = STATUS_EFFECT_REPLACE + + alert_type = /atom/movable/screen/alert/status_effect/gift/fatal_flaw + + var/datum/weakref/target_ref + var/image/highlight + +/datum/status_effect/fatal_flaw/on_creation(mob/living/new_owner, mob/living/target) + target_ref = WEAKREF(target) + . = ..() + +/datum/status_effect/fatal_flaw/on_apply() + RegisterSignal(owner, COMSIG_LIVING_PRE_DICE_ROLLED, PROC_REF(on_dice_rolled)) + + if(!owner?.client) + return + + var/mob/living/target = target_ref?.resolve() + + highlight = image(loc = target) + highlight.appearance = target.appearance + highlight.layer = target.layer - 0.01 + highlight.pixel_y = 0 + highlight.pixel_x = 0 + highlight.pixel_w = 0 + highlight.pixel_z = 0 + + apply_wibbly_filters(highlight) + + highlight.add_filter("fatal_flaw", 1, outline_filter(size = 1, color = COLOR_PALE_GREEN_GRAY)) + + owner.client.images += highlight + + return TRUE + +/datum/status_effect/fatal_flaw/on_remove() + owner.client?.images -= highlight + QDEL_NULL(highlight) + + UnregisterSignal(owner, COMSIG_LIVING_PRE_DICE_ROLLED) + +/datum/status_effect/fatal_flaw/proc/on_dice_rolled(mob/living/roller, datum/storyteller_roll/roll_datum, atom/target) + SIGNAL_HANDLER + + if(!istype(roll_datum, /datum/storyteller_roll/damage)) + return + + if(!target || (target != target_ref?.resolve())) + return + + . += 1 // One extra dice + + +/atom/movable/screen/alert/status_effect/gift/fatal_flaw + name = /datum/action/cooldown/power/gift/fatal_flaw::name + desc = /datum/action/cooldown/power/gift/fatal_flaw::desc + overlay_state = /datum/action/cooldown/power/gift/fatal_flaw::button_icon_state diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/silent_striders.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/silent_striders.dm new file mode 100644 index 000000000000..37e0c0385111 --- /dev/null +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/silent_striders.dm @@ -0,0 +1,41 @@ +/datum/action/cooldown/power/gift/speed_of_thought + name = "Speed of Thought" + desc = "The Garou doubles her running speed." + button_icon_state = "smooth_move" + + gnosis_cost = 1 + + rank = 1 + +/datum/action/cooldown/power/gift/speed_of_thought/Activate(atom/target) + . = ..() + var/mob/living/living_owner = astype(owner) + living_owner?.apply_status_effect(/datum/status_effect/speed_of_thought) + + +/datum/status_effect/speed_of_thought + id = "speed_of_thought" + duration = 1 SCENES + + status_type = STATUS_EFFECT_UNIQUE + + alert_type = /atom/movable/screen/alert/status_effect/gift/speed_of_thought + +/datum/status_effect/speed_of_thought/on_apply() + . = ..() + owner.add_movespeed_modifier(/datum/movespeed_modifier/speed_of_thought) + +/datum/status_effect/speed_of_thought/on_remove() + owner.remove_movespeed_modifier(/datum/movespeed_modifier/speed_of_thought) + return ..() + + +/atom/movable/screen/alert/status_effect/gift/speed_of_thought + name = /datum/action/cooldown/power/gift/speed_of_thought::name + desc = /datum/action/cooldown/power/gift/speed_of_thought::desc + overlay_state = /datum/action/cooldown/power/gift/speed_of_thought::button_icon_state + + +/datum/movespeed_modifier/speed_of_thought + multiplicative_slowdown = -0.5 + diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/silver_fangs.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/silver_fangs.dm new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/star_gazers.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/gifts/tribes/star_gazers.dm new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/garou.dm b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/garou.dm index e5947e031686..02f75b986c38 100644 --- a/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/garou.dm +++ b/modular_darkpack/modules/werewolf_the_apocalypse/code/subsplats/tribes/garou.dm @@ -1,4 +1,3 @@ - /datum/subsplat/werewolf/tribe/garou abstract_type = /datum/subsplat/werewolf/tribe/garou fera_restriction = SPLAT_GAROU @@ -6,21 +5,14 @@ /datum/subsplat/werewolf/tribe/garou/galestalkers name = TRIBE_GALESTALKERS desc = "Tireless trackers and peerless hunters, the galestalkers carry the namesake of the wind that crosses the tundra." - // gifts_provided = list( - // /datum/action/cooldown/power/gift/stoic_pose, - // /datum/action/cooldown/power/gift/freezing_wind, - // /datum/action/cooldown/power/gift/bloody_feast - // ) + gifts_provided = list() subsplat_keys = /obj/item/vamp/keys/nps /datum/subsplat/werewolf/tribe/garou/ghostcouncil name = TRIBE_UKTENA desc = "Seekers of mystery and highly secretive, the Uktena is one of the most misunderstood tribes. Their ranks include guides, academics and the religious." gifts_provided = list( - /datum/action/cooldown/power/gift/spirit_speech, - // /datum/action/cooldown/power/gift/shroud, - // /datum/action/cooldown/power/gift/coils_of_the_serpent, - // /datum/action/cooldown/power/gift/banish_totem + // /datum/action/cooldown/power/gift/spirit_speech, // DARKPACK TODO - (Selectable Gifts) ) subsplat_keys = /obj/item/vamp/keys/nps @@ -29,20 +21,15 @@ desc = "Growing, creating, cultivating and maintaining the most natural of Gaia's creations, the Wardens are some of the closest to nature. Wherever they are, they coax Gaia's blessing out of whatever they can." gifts_provided = list( /datum/action/cooldown/power/gift/faerie_light, - // /datum/action/cooldown/power/gift/stoic_pose, - // /datum/action/cooldown/power/gift/freezing_wind, - // /datum/action/cooldown/power/gift/bloody_feast ) subsplat_keys = /obj/item/vamp/keys/nps /datum/subsplat/werewolf/tribe/garou/glasswalkers name = TRIBE_GLASS_WALKERS desc = "The closest to the Weaver, they find themselves deeply entrenched in modern human society, religion, technology and cities. Every new invention and every new discovery is one that aids the Glass Walkers, instead of impeding them." - // gifts_provided = list( - // /datum/action/cooldown/power/gift/smooth_move, - // /datum/action/cooldown/power/gift/digital_feelings, - // /datum/action/cooldown/power/gift/elemental_improvement - // ) + gifts_provided = list( + /datum/action/cooldown/power/gift/control_machine/simple, + ) subsplat_keys = /obj/item/vamp/keys/techstore /datum/subsplat/werewolf/tribe/garou/bonegnawers @@ -50,9 +37,6 @@ desc = "Survivors and scavengers, often destitute and homeless. The Gnawers are seen as mongrels who live off scraps, but they know better. They're the true survivors, patiently waiting for their moment to strike against overconfident foes." gifts_provided = list( /datum/action/cooldown/power/gift/desperate_strength, - // /datum/action/cooldown/power/gift/guise_of_the_hound, - // /datum/action/cooldown/power/gift/infest, - // /datum/action/cooldown/power/gift/gift_of_the_termite ) subsplat_keys = /obj/item/vamp/keys/children_of_gaia @@ -60,11 +44,9 @@ name = TRIBE_CHILDREN_OF_GAIA desc = "Peacekeepers, negotiators, treaty-makers and philosophers. The Children of Gaia strive as hard as they can create an understanding and unity between the disparate tribes that will allow them to form a united front against their foes." gifts_provided = list( - /datum/action/cooldown/power/gift/mothers_touch, - /datum/action/cooldown/power/gift/resist_pain, - // /datum/action/cooldown/power/gift/stoic_pose, - // /datum/action/cooldown/power/gift/freezing_wind, - // /datum/action/cooldown/power/gift/bloody_feast + /datum/action/cooldown/power/gift/jam_weapon + // /datum/action/cooldown/power/gift/mothers_touch, // DARKPACK TODO - (Selectable Gifts) + // /datum/action/cooldown/power/gift/resist_pain, // DARKPACK TODO - (Selectable Gifts) ) subsplat_keys = /obj/item/vamp/keys/children_of_gaia @@ -72,10 +54,9 @@ name = TRIBE_GET_OF_FENRIS desc = "Warriors, compassionate and fierce. They view themselves are Gaia's strongest heroes, but the rest of the tribes view them with caution, their violence more famous than their courage." gifts_provided = list( + // /datum/action/cooldown/power/gift/razor_claws, // DARKPACK TODO - (Selectable Gifts) + // /datum/action/cooldown/power/gift/resist_pain, // DARKPACK TODO - (Selectable Gifts) /datum/action/cooldown/power/gift/visage_of_fenris, - // /datum/action/cooldown/power/gift/stoic_pose, - // /datum/action/cooldown/power/gift/freezing_wind, - // /datum/action/cooldown/power/gift/bloody_feast ) subsplat_keys = /obj/item/vamp/keys/nps @@ -84,68 +65,58 @@ desc = "An all-female tribe, and the matriarchs of the Garou. The Black Furies are known fondly for their honor, wisdom, pride and impressive prowess in battle." gifts_provided = list( /datum/action/cooldown/power/gift/breath_of_the_wyld, - // /datum/action/cooldown/power/gift/freezing_wind, - // /datum/action/cooldown/power/gift/bloody_feast ) subsplat_keys = /obj/item/vamp/keys/nps /datum/subsplat/werewolf/tribe/garou/silentstriders name = TRIBE_SILENT_STRIDERS desc = "Highly spiritual nomads, the Silent Striders have headed deeper and longer into the depths of the Umbra than any other tribe." - // gifts_provided = list( - // /datum/action/cooldown/power/gift/stoic_pose, - // /datum/action/cooldown/power/gift/freezing_wind, - // /datum/action/cooldown/power/gift/bloody_feast - // ) + gifts_provided = list( + // /datum/action/cooldown/power/gift/sense_wyrm, // DARKPACK TODO - (Selectable Gifts) + /datum/action/cooldown/power/gift/speed_of_thought, + ) subsplat_keys = /obj/item/vamp/keys/nps /datum/subsplat/werewolf/tribe/garou/shadowlords name = TRIBE_SHADOW_LORDS desc = "The closest one could consider a Garou to being a 'politician'. They manipulate the tribes, and their enemies, and rely on cunning and wits more than physical strength. Not to say there aren't adept warriors in their ranks, but the tribe tends towards brains than brawn." - // gifts_provided = list( - // /datum/action/cooldown/power/gift/stoic_pose, - // /datum/action/cooldown/power/gift/freezing_wind, - // /datum/action/cooldown/power/gift/bloody_feast - // ) + gifts_provided = list( + /datum/action/cooldown/power/gift/aura_of_confidence, + /datum/action/cooldown/power/gift/fatal_flaw, + ) subsplat_keys = /obj/item/vamp/keys/techstore /datum/subsplat/werewolf/tribe/garou/redtalons name = TRIBE_RED_TALONS desc = "Exclusively consisting of lupus, the Red Talons shun humanity and think of them as a blight on Gaia." - // gifts_provided = list( - // /datum/action/cooldown/power/gift/stoic_pose, - // /datum/action/cooldown/power/gift/freezing_wind, - // /datum/action/cooldown/power/gift/bloody_feast - // ) + gifts_provided = list( + // /datum/action/cooldown/power/gift/beast_speech, // DARKPACK TODO - (Selectable Gifts) + /datum/action/cooldown/power/gift/hidden_killer, + ) /datum/subsplat/werewolf/tribe/garou/silverfangs name = TRIBE_SILVER_FANGS desc = "Commonly known as the 'Alphas' of the Garou Nation, their ranks consist of traditional rulers and wartime leaders. Known for being honorable and having courage, odd mental quirks have begun plaguing their young members, and the tribe is beginning to suffer from diseases of the spirit and mind." - // gifts_provided = list( - // /datum/action/cooldown/power/gift/stoic_pose, - // /datum/action/cooldown/power/gift/freezing_wind, - // /datum/action/cooldown/power/gift/bloody_feast - // ) + gifts_provided = list( + // /datum/action/cooldown/power/gift/inspiration, // DARKPACK TODO - (Selectable Gifts) + ) subsplat_keys = /obj/item/vamp/keys/nps /datum/subsplat/werewolf/tribe/garou/stargazers name = TRIBE_STARGAZERS desc = "The calmest of the Garou, they are well known for their introversion. They are the smallest of the remaining tribes, many of their kind wiped out by the Wyrm." - // gifts_provided = list( - // /datum/action/cooldown/power/gift/stoic_pose, - // /datum/action/cooldown/power/gift/freezing_wind, - // /datum/action/cooldown/power/gift/bloody_feast - // ) + gifts_provided = list() subsplat_keys = /obj/item/vamp/keys/nps /datum/subsplat/werewolf/tribe/garou/blackspiraldancers name = TRIBE_BLACK_SPIRAL_DANCERS desc = "The lost tribe. The dreadwolves. Those who dance lockstep with the Wyrm. They who have entered the labyrinth and come back, changed.\n{THIS IS AN ADVANCED TRIBE AND NOT RECOMMENDED FOR BEGINNERS. LORE KNOWLEDGE IS REQUIRED TO PLAY THIS TRIBE}" - // gifts_provided = list( - // /datum/action/cooldown/power/gift/stinky_fur, - // /datum/action/cooldown/power/gift/venom_claws, - // /datum/action/cooldown/power/gift/burning_scars - // ) + gifts_provided = list( + /datum/action/cooldown/power/gift/bane_protector, + // /datum/action/cooldown/power/gift/resist_pain, // DARKPACK TODO - (Selectable Gifts) + // /datum/action/cooldown/power/gift/sense_wyrm, // DARKPACK TODO - (Selectable Gifts) + ) + // tribe_trait = TRAIT_WYRMTAINTED_SPRITE /datum/subsplat/werewolf/tribe/garou/blackspiraldancers/psychomania_effect(mob/living/target, mob/living/owner) target.playsound_local(target, "modular_darkpack/modules/powers/sounds/daimonion_laughs/demonlaugh3.ogg", 50, FALSE) @@ -155,9 +126,4 @@ /datum/subsplat/werewolf/tribe/garou/ronin name = TRIBE_RONIN desc = "Garou who, for one reason or another, find themselves as outcasts of the Nation." - // gifts_provided = list( - // /datum/action/cooldown/power/gift/guise_of_the_hound, - // /datum/action/cooldown/power/gift/stoic_pose, - // /datum/action/cooldown/power/gift/smooth_move, - // /datum/action/cooldown/power/gift/shroud - // ) + gifts_provided = list() diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/icons/basic/banes.dmi b/modular_darkpack/modules/werewolf_the_apocalypse/icons/basic/banes.dmi new file mode 100644 index 0000000000000000000000000000000000000000..76eafbcf10ca9e770c28e32686474887072c7d9f GIT binary patch literal 1937 zcmV;C2X6R@P)V=-0C=2T%drlEFcbyQx$i4(U^T`fYZn7C9pD#CwGVg+v`Jev{=I{P#_H|A_#oWWG%n6T#!C)WF_uBOc!eE8E;S0quAR1|g@V#cRYNeewAnx~ zfgF5s6#|JMhx(A(wFnVDg%S&IAYhP;z&ccqZ| zK(M>g>b*B_X5O3KH-JDO5C{Z<_lqxYC6sg5?kXR;4oBr9D>t40?ST^R>%rDy9F1y# zX3)V7xE*lr+FfO1AqD{GAD(SU12lsUcERm{t;IO{hi3r*r`pe;e|Q$b&%U)?v1Zr7 zF1Q^)hTr=6D{SXCajN|c)?X!TSFG7}unTSnygasI9zT0@1>5;eTNQd=bg&CcLHI*P zkphMy1&n&HA4UuB4X@w6#k0jLytmm(BXy7h5&%Hf3x>L@djLRg@fma-T88WYxE;_a zqSHGH0QmiR%q=fBL zfQ(;%mB521Pw@Eu0Dw{^0u%$`H@~bY)BtwEHvYy!3>ynEv*9asSbvp(-=BvQdH_I5 zFPIIzG&65rr(-RnA*C0%{_{WwR2sjv7)QrYq-q1aJho!H@gzT)&Vm+R9Yc|tI&3V& zFt@zys1u}sgc~pJ;l_)5$f>KysjKF>83#D1>40j+|Nh6{_~g{5W&_ZtV<_UN@o!%5 z006p2qxj+C#j=jT>Hs+F1a(*UXc-L;FHa-)e963?d%lE+m#3j+G*Do!mqVu@GM?>e zttU>HJ+Wgbg000k0Oxz)=O2#%C^~|i!0K@6YRc3jna(<* z_>-+(0L4JtKRkA-DL9PPrG6y>kl4H1~JPy^s?t z2G2Bfr~@jE?`mhAP$HSm!i%%@%B_poq<1Phy`zNtdhq6T)Xad$36*pmzkqEx^H@TW z0_I{%%V-#!7%NLfmuBYCDfc2W62w5Jt?soz%@`1y^iHjF1tuo;YJ^+=|( zHRH_5y#&As`9Lua4EWl>I)aWAR1|WGeA=ifU*%l=e!OOSU_&^8FGuysC6z7 z2m}IwKp+qZ1OkCTAP@)yf=albT~mc{<(r>c*PWoU4&M!#PU*p2o^E%2JTGi{2qEhQ zgZE|lQFTb^g?+W43cyvG4sh;}sjQEGdgr$B^v-P~G7>b4l&tI$sTXpzmeEXkq|4yM zn4_`@MG6>$6Jua)COxEp1l|`jmN#hFRUglTx~qGT0ArxGPZzf!o7tE1DV_hFF!vrY zdJ$c%Fv)6xDi7+e?xC09WVn@rsG~wMNr%Wt(9-*0t`R`OXzpX3Kt-#(8x*WS(+&W9 z{nsP_;Nj(I$K?{VCjbDXJ-LqUkYOPYR})6p+^Py7d6l*LZb5qjSY52Z9RsKYqngkG zUmH|Sx2#OPOlcWUG1&2M39<{?6JWI>j^MuO&+&1i)?6PM3F5oCIak&JG!3%4xHbCN zOoygID^+m-=Ln$s_?vRCxiu3g&i|B&@Ycs$ft42lGyS5o!bUb%0vby#sC24fBMyx5n!i$?lg31X1;2=8BeUZmJTk>%p<3+ zR?WuTf@Deo2|0Duvh8(GK~q}BqX1@od}R=(U<5eZ`vI78Slo01D~sB}YBInz0@#LS z1+vF(J&!4^J_}`!Cfs2E3fOukW+@FV4*mW0@qp$^AXImCPbm{}KNYQJx7Civ9Rn&? z!|bt}4N*-Gx3R-+OAq5Jhr64@zm{A#>+;oI-6Oa7j7HhrH1+X~uFG$ literal 0 HcmV?d00001 diff --git a/modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_abilities.dmi b/modular_darkpack/modules/werewolf_the_apocalypse/icons/werewolf_abilities.dmi index 115c799106edb865b9fa7dd19ccf3be8017d7a37..c7d80d11f83f2b9c6ca768040463a1dd8732e52b 100644 GIT binary patch literal 20008 zcmW(+byQSe7kx9-&>afWEz;fKk5U?>yQI5wKuVAjkZ$ReZiX%?=^ms-y89cyKi=cb zVy&5X&%O7YefHk>v#PQjHpWW~006KR6QII%>J1N&)PNCOQ0SO|!Oc)O@4xh;Q8^->q|Wma>n_U~w^ z3cR2$o%(6LH8?u4Ys^udQoPQw`?^;3O$t@YagKP73i;TZKZ8xxyBh!LnY9JTe+qB) z_ZG~tGMm~?IcMRtXs?vODC&Phl&(uk&A=LM*KlvGrIC>6&SrFtKc0ub z6izy2DmoTE780o1FXB4+o5+pNO#c0x%iB76{P#75Mcw-}n^S8YDC}DqEA2Na5eyO` zQBKMG4gHsmI)*<4rR3lG`*q+N8iZ7ldO!)nWwt5O#0$s0(zpwoRyQ0m87jYe*%7z# za{j(|c@}udIiF;kV(9BT z$Q0&m(cXuAKIGn)8QVJiPphjf?So|98LmYWO$CyQ24Eqb5*snAg~Z2uF{a_gKTyjn zBF-q=9JY2s?!h3WE~O79Vbnhdp4sxX_}=FoBo-tFya~2q3#2}Xn%}kP8~lMkQw?>2+80Y8i3AyGer4*k3!_&Txf5>s-wuyE^Wm+ z5uBt33dC?7_=N2%8|#d6vN*Mwt}ob zawMIoKOpFD=G;Ed^;+lk)!`!5kv?BTTOH4|*y^>&u1MD>$0p44mV9Oc04Ue0LI$88 z%C$fMEW+5k`@p61Bz+zLV8e+_yMfulC;+hPC;)X$KCo<+CGAnzgLNIbQANlU%z zfpP%}!}S(dq=)XyRVS@Ly zo^9AXfNJ&pZYap_@!t}fdQwZHD z{yBf0(na|M04B$uPKGvB7zW?E!L-udYDOLX=j;q%6MVv}GXT(__vUudvB|XEC?f5$ zJh&?bBfdSunFfL%_{zU)&64Kk_Rl)G>1$;BW72?*Bg&YYyPh0tUbpEciKR1cCDx`~c!&?o{rvjb88y>T1allAB^QQ)~qR&3M6 zZIu0P%eWMjKgn`C9Pe_#d6htft=+GH|dD(*X#XO$NrSPzWP=b*rh z>$sl+H)`ZvhxrY^o`XD&KMfyeRIPuz^||1?=y2co!F*oR5_#w;BGVDTp1idaV)C$u z9=S=jbjV-7>=2pH?1T8T{c+jW-j;jlsrWt!KRsJQQ<_w2&ao*^uM!N%f-T`oC>Tlnb^8P?{m1E2%&&i@w8fYK{+1h z;ujeR*s)E6TD$xM;=g#|G<`0acjL@tr+TXJkLV!%2r6Q{JUO|dV>_1n_Ng%7DUnH~ zXZ)Ef`D~;>JIC+df#jMvx5hhE2&oP>m@|mo_eudGzl!SSffGw5#wB^+(mQXiQW1rvzkX z1}$R{VgGPY?nf26)+-V6?;@}2Sh{-@F!1v@3$(?k&}$)JuhRS)@#ZmxPe5R_@$GId z%VS)={1+-QP>k$b>TQ`xFX60UH?CP%;jw%-JXeX3pSquOuQ#l>^o%{mEIq|NBGt7_ zz>+U+S~{oz$y^iAgO30H)5m;Z&-`KU^GxqI6mK{14(J)Ne@$k~J~%HHrWEn=f#(_M zBad$pdro5~1oLv26i3Q>6U{ls1(ODqKd5**c(vG^WfnZd{M#L>G&Etf z6Tx+RkR_O+Xie`{Szb#A&)YV9habBOvp8!M=U_Z!DWj#2S(%gtw3w^xSj6;jGH{+; z>vgcB__nQv>q#iuVa%KsFroTWUQkS8Vf5lPR#uRqhZuk*Q5>~nsxbxwZl9bOvjdmI zjyK`P4YtG-2bYH~c|)`yzvGURy^UVZ^-;co7;@YO{`n`9G=~M-2K9{! zQSqBxMULmTFA?=ltdF*As64GonmZVLeClF{@;Y z+9W5Ze0;pCe)fHLbCU61ph{7HLajDxX6-w_U>w1uQbBY>Tll!UDK~ks)tr!X9rT_T z&%II$lQsFB`VaY6>6*+|=)tlDG!`@yoLFcS!3J>4{s+Sa$qu6k#Al_dr`uBX@Bk(m zngh*MFL$zCPcR93U>db#nGpnOGU?guOULxSWclp7Of5AcbZujx*ric{oVO!Ic@?j)(XlmOH@#055!|7Pv;z{KeMn6;Cokf8BVvTu zrT+Ih&qDaT7Yoh9B}p>aAOZ2i<$m3{Y27XnCV%vT##GqJJ8Aw^^Un}CzHA!(>^p531xgKQGE zR?bo!gwFh5dKm6_5oz$t>netHL+?t5)SV&!PdRoEL3dY8nCK|th)j?v>Vcu0Eu3sY zIr4y$RQreZKr?B&Xs<6R+^cQX#Ol%3k|g8jqRd1F>2Nb|GHm_!GBO|HU?x>)F2JjZ{(Z!n6os6dLhFC+mvE-=Jfh31L zMeKJX3BHTIYYv!>?qY!YL}i7Jlk*6;Y?c*fh;2?KNfz#wWseB>%rKu6<1fdi4jbPT zi`2I%nP_bw6Y|@f_rF!Br|!J7Y_L&{dO5L@rCF|K(BF+96Db%r!nL`frnb)@y`vv0 zR01G-C2R|@HNi=5= z8v3yPdl%HqQJfotH+k4JmCxrt*YiEoyu-+Ji7KsseZ|X|z^tB_-k3;UHHUtD z|JLpL9@ckQiVaKJn}gqyeTw4smjM>#Z@w2sS57}$ase;ZYNnn#M@q7?pt`Up`#Ss^ zumqM6fn;H6n6+1T*4O;qp4ID#Z?w#;+P2;1;8MO_>M%uEOGu2;3dt0&$s3`Co z#Jk|ORk^Cp$>o;B=T;M!^eD^_F@sNIFPFxx_zv^l>$TN zU{y4{2Hg)a9GZNmRWb^D4sn~_QrI7cm%~b?tRcGW5Hty5B2%(=yL)ad(aB*r%RR@gIntz5(F(3{0@;es9Z-r|y;`4KE!$P7wxkJ>?8;l$Zl$;hD9m ztrL_tqAy{uv>NorS{SqMB%%~q^&sze_og3>Q9ZR!%CF?`f0`hZ$Wub?57*m7u0Kvs zr%gVR$yk4|4yZM>AXIv5Sb72g&99*Pl+h}z772PDKq3LQ+PB%d*61#9Rk zO?1}L>x`sfE5HOj5PgZG6vslqrAx`z)sKE&C?+7IcvkRc@|4P*%?kjNfmF>S~V^`L< z+aTKMFV2^MM=GC-)C(tJt-t@E+P`mKdzz$4ZR8X=3#qo=uf)_&ejQZiVo%mNI(_?* zrUq(~_XTa20Y(+LfwCVzS$!0sDzvbfAQz`#{CpLG!?4+%IJ4<0>fJKJ_YBT8*k+xl zsNV?lc8F?ar(<_py^%zvHaeX*zOy2`dT4fi zBPLaoI_|}FyxWI7c^QBAV zj2Q-#HbIuL*CY+jF5a`zNpr5+<*9J{oG(9VquTzE0VX$oPu^rT3)R5{SdlGWX+)6# zwW9vIR_Q9ilgq6iN}$z*;LX=N+2lodWF$AZ{%3AAr_)q#{(~%dzSk>*?_xo&JMAqf zWH&U;*AXxy-ps6TFy*x{InI5pz)Nfz^29Gfr|#TQV>-4}aBcL^Q)1hoZnK)(pp(sA zRPpm2%&H;e=U|nUD&LPqCdgv~@aeaBK;o<>-(nomVe6+e@CIeWAb-*}d%eRnQ z;=idrV8QD`c|y1M;jr4;#-5U*%4ZN{MW zyB`_5fj-BVfQo1y3EpbQoHPPVwqTEE>cUkiWB~X|3NC21 z;0~rKGmfDv<-b-3filPgoHC4{H+qS90b1KT)^k#LH$0DPZrs>kzD7L13a7E}y;2j> z<2~mx&~cLp)TY~a>XNF{-P_?L28-7Rsj78XmfR~^VF`Y?38G0CuNDZCDIBc)qeuU(>C zT?xlGlm><5#HH?NsMj#?=E%PT*>A>A2Y2aJ_T;@E|AZ)*FXJUSd@Hp+AzCaJPw4p9 z3caWPnks5ZB%t~1tQ_98{wP5x1@HYXc|w=!^tdqQd?JF&04tKHzVF3_c?8`A6Wus< zoZ~cKj*GyfnvBuAo=4|>Pd~V~86q-iZi@mQGSdC{ccC)uSH?|OU>(GD14na$(n$z{ zyY9+_Oz+F9eJ#(tH<%<8{+?jVWqX))HIDZ&NBuYFHN)rlVyf`IY%OwJ!qyLyCReMR z!R^9Y#rI+*0}?F%>zq<7d)3j)1TXX*L{)b3*f=HA3ICPD2OpqwJ~_o01+D8GZ>6>l zz3Xhm5)8n5{l*et1M$mw$ZDoU%MwFdu~f z7>w;sR1w1lfH*NvtbeQN;puOAyH^;u$H;l?6l=c#ZTS_C&1L8!l)rvd6T-P;BKGYy z1ND(Dy>vkd>dRj6^S>p-?%SK`@YwY{F`u}5>h+KlcbPq14c*Ot)NVd+ROy{Cda%i# z`WN$?#b}8z5vP0iGd*Nc3C%42gRmZ?huI35p;b0Lb?L zW8;03aE#j?_S;Yv;_2UUSz4KS|ue?lqv#h!<8uM&=GHUvERH3Opv!aoY&{x1gkMmXE_l zvc(|+#?CTloC=g9`6qh@8e=1yShR6YP~Qa*Kq>J^0NW1=8>AFLeLXHl${w_=4?k<_ zU_g1|@j6DofhXmo2Ew`auD_>KMXZ#i9+w=LL{>ycEh^L^qh!%37d>Y2^(&2iH%qvB zqx0q9QQrxXrQ)7P2~QpiBr?xigZ3S7)IV~poEtwA9RdaI5Cbr%H+zv8h_8-i(%-V%Q?zRodQZ{%cvdyV&C&J8gNvNR{5(Le z_AkTY5X)pJ>E3}Qx@b|OB9Y9mdRg1$i3;P&%x~`|knR^atnQvK#f)(}J9kGxA&N2=P=@8I6f>7pj&SuK|?b9 zmu?F19!M*7_|cvcy78v=NsU7vtM$pYzAD$KV~Y-307*OMH!&*N+f;gp24yz5-n)C| zBXqEzXyCN%CD2E);Jme%)Qh`Mje+JbG5atiPvS-?Nhb5V<>@$Mz6&1!*1X2Ldv%(gKJ=T5E^OlVi;l)l*0igX zw4UqLCV_?8ZQmciQ;IjLC;U9BzB6f@!)Cvz20Y_aeU?%{N&e4(^?Wj%Nv-L)}P zhlG1^VLr@FEZhjM{<}zMVdJH7X#AhrIJR$o|a?4URUnl-da#5veSl|JC4)*m&V431{n+x6IW=iMPSqOq~fg9v0bY7<9j`S5=JBMT-p(LxDF@uH0c$6Xl^^FciITK z!^+hPd0b9`)B9%#QZ#dSO6S$3rVbvT#8Z7 z+XlTJfB^o{+Lv4dHh-WwuELI$1cut_ioZzyh^#)`%X7nQl4eXjL;$`KXJ54VDa}}c z;55Eg0c^e$$;uE58FajplG}ecgZReM50X>NnesLi?7EIxB`zc>;TYt#sIN3D?b=FH1 zKlf(J6fbXCzs#kEW1@5;AQ8^m7H7;t&0;hxO3={hoi19%Yqq6D3< zc6=mTP1wP_Nfnf9a~t0AP(5*bh&kh!*VRpUhhG-FDHz_=x%moDW@?50!|$vQTp(@M zIm`3K2o&!Z@s>(bYNO}t0gDgk*nxzMumWTR)$J>4DAqMWiH@14W<%1uqfya9WirEv zqO+re-a9#jl)*&OrmF5evC_d*lDm^qf6Mx7k(2{^Tm=TBJWB&%%6QEf!C`_e5Uygg z)fqYI0GG5+Qr0gx$4WGWJ~nGk@%`=lp5@9JDTEX`3MzUZQhRTNP4cu!ci)U;yc0^5 zY?!HBK;zvUQ$(^vkA`i1=*qT`|LY+-V0Zy$mX>6(#Pu3Cnlf2I28$5E$K<`M%A=gu zDn}`zTu?txvFlVyEo^Q6tklpsa%&We#-ZI}G+_6=9U0L-jC#fN;JxD1X(SJ)*+V7y zW8bhX;7DBm;3ZCn^uGHWGLl?kLryWwZP=_rjp)T;r7Q7Izye-O{H`p<@+%R2s63_2 z#dTdw97n%YiEd(Y2~yeo0r~|g@ec$Zf%K}Trj|brR2z+>RRinGY?K83sz` zQa<3f0y$S81PQEz%1Yu^ULDqM9ZU){ktRc91tkCJE4Kd0P2>k)3(KBI=hUHIi1o4% zMY~PU4dR<&zXcYz{xWa?C4KIP=#qSFMIs{vNve>GHX>Y)lfknTUHNJEl_XrL$%D)K zm&Sb9?*<@ChmFo+DF}{O5(458+7|6^d&T*l*p;F_r+sIZ(__I9mup|s4_iNS-I9bEpLet$pY zpoCS#Y=UBo2ISRp3$uIz=!FqoC_{1&Yrp9|GD$wtWC|WaO`y)`Q}pAUT*PHHh0`Ky zPCFoIjYx{OG6tl4To#W^9zLHg%zWLA>)#RsAT!RS4RI9x3aB-*Xv8l3xo-|8^{HsHfDFc62i=T>m z(~&;JBoQsMv5&9r&&~mcrvYeawEFfIzTO@uab;PLLd79dtYioRz@I(&`JN5N{<8&J zD6%St;uEWihe=J&UuZ6)Z3QI}LxwNUY{3XXo*<}j6Vn^pSsOiR&yPep!6p{2EP|bZ zA_-EW{84Iyhpbwv3C{La>Y~ab+I$PydQ~Yy?(+*rT~`{qyq~1j=OS8@_Jd$n&gc^h zrl9+3Ixbr?TD=Q=_3LN<*XH5~%Rb2n?K!c{{UK97X;5gRs5F^sLQY861;%w<~ z)g-(>MKl;>*4mXhu>v zL=AF-g`H3GRuV2`CN7;|D!;@YofPmcP9eivmBz%b>IB=7AaK+2_a3ZVs~oXRE2Lf9 z@2f}l!^K#NNl$g!-w~F1Ru&-i`}c>r;2f|j|00^G z%G-Wy>Vi@kPEftW6ewJ8r1<-wT}kb=5Fw|FYC2Y_rkZ;N&#`A4(tMh&CM%v#g!Q~C zS%^>+En*>-?jgsi!?_%GwbD~t$zw$kjW-O@O1x(%!2Zcb-)n#3+k6zwiG?!8NL2CO z<(*(?Ueb%mFMF`aiTJO_m@2_zJV5CuW~^Qi%lpk58H`-odjAe1m6xLVcrY}9wmb8g zFTNX#*3XE*qOcPq4>g}OP(+rYa#w-X1fJf_Qjmy-Y2YG|^$@KAuR32{pocAWC0YzF zq77g_%;KscA|#}pWjD0KiKOKLSqd=6nghQ@e-viBYmBYTgd%XuBtj%LaQSo#$O&_F z9LJx@PS{+3So`vWxvW}5_S-E&G@Jg-kU18a;U~FV6Enafp>jXaM>hWffq<0Wv^Y+e2&dvDqn=6AN;J1ni}A179S{|5Cqz-=5$Y z|8Py4%N0m>M13K7B4l{;GeTDt`93dCKzH5CSCIyJC^I4HE+fSF$}rw#*dKVbB2)a6Fj-H>#6f~^Q*pxnXo{NdTcgEpN}tZ5^f_{dW6%$bNq$PGF{Ocge4JUSfJ zV;rVtW2Kg3M)}p^bXeBY?Zo^#fk&vGD$9vI8j>4iN}eJ7eY)=-jjs2#1ya<$^plj? z!o?@qe6k)YBT!^mnC4uqsufz$=Fc{MrCG3l`g9LzDOEHsyCl@ebxI$vFwU9*-HewM z3K4r}?Oz_b3#%snhoqPf(6MrC!k8V+=1U}Z+`t@76906ignI7>hu5z^Q^VweCA$kQ zM5FA(G4L~h>G)>+p~tSojKtgF=J^ASwEpA<(lJZc6VmEO6s2yznRqHzb&!x z%=y#Zn4GMb!O3xB`8DMm;piU>%_}l0;v+i)vM%L|f71256;b^`x#FJs7#n#S33Bl1 zwG66i`K-Fbnh!s<7|v=uE3_f?5F@vWU~3nK)^n0aT07-&A(Tm`nA2nGd0u=UBa2}Wg47+8fzqD8lJlK6u!|#wnXvaSb zajpkHlbWXV#@n4L(Xz27_AyY#>S-6Lab1HN{_O>6bMGAM&i3f5K?uabb~ucj^$lY9 z4dNCTb@4VqBk%Ub>>BitD*D0`@>b(+de(0#b0-Q^6?Mqmz_u@dhI_SxL6^)G`I#ry z6VikSvzH%)2vcVQ`dSpREuUv_E~YLlpuH#omt@aQ-okkA6GcZ`ehDO@)PtuSUfACvE{F~MDwSS{)4!|ZU)O6i>&|>Bo{4$aMK>%fTAa}yjN?+%J+m}@YE;KcZJ`vn5{q2>_tO@ zw^@u7Z2NUbYx4j6ASEE2l%Y0IOn6sFfDoXi#((a5-LRWs`9{TG8Shyq+_vv;xd+r^;9n)l@wCqbi|jp+eT7svFNCT1wB>sdYHnba|bzf;i)!Z;c+iy z$dB@$hWC?`k&_KRZEkXif@Q}JJe!@1sn#PTT;Ad!oeO=GBU4DuEdf|J0PH@$)_;EV zYf|F_n&k5l4_d;tf3pH~(5RxqiHHPF_A%>)Bpqt|R%!;LjJy?wr*hEg&5EP`NC@;E zB?>u|y?qV=JU-B>P2Ib5W%y%yiZ&}kocE&zq-M)k1sHn6zj8CyXxay9#~2WeO^gt1 zZ73uI%jzdJXDg|To&8zaMw45GR1fG!xfRip6&s4 zOr8tR13rK*Fdai3g$ZWNp%Pr*7{Emq z{cjp5K^VvqwU85<_sxc*FSt}Dc;-4=3q-~JwaVG{tFvHrLc4hq^G)v)r}SO!^QZ{3 zM)9ME(DwG3K%oCl{T&}q@nbBD@lbl&kymxjn^2;M);VW|$4?+~uPe}=YZ(iydFgEegB42jz)n+UR~{=04ptZ}(t*T)EPU=0r{O-qad>{~RJ#^PWRwVQ zjt6;4xSxp@%N+qy&mG0WvuFM*>tSSIagGP4eR;RW@I?z!srpoTZKv0k=?nbWKjsD z5p;j)7XzC}1K6aUBy5AIXvDNhOwKaV8{}f5{O0LvlRcEhJDywBcLifBmzGBvc|^FN z%u%QmOcWL?jrp|@R(stMBUsCgs+bg0I9v;&o`_}-Jva;I+NS9{&Q<4p$SzeO}Z;HcB4Ha#G34d-G z(V8AGc|tWIQbek`gQdv;y3KuVJ%?Z3&Jh0jgz|I#_e*2T=}~{wlE?EqeETrK3;E8o z`E*xRVPD#!S5N$^6{}r$Bu+iZCWSt6%47vO*JpqgF6VE{#s%_E2gA~(;ew9uqB%eK zEC_UzguRp)C7M(VqLifw$J3EFVXbws!@qBv-iJcFU5pSuKAWl7I8H3WaFepj7FVrw zK=(6Y)mtimh5m}J(pSk$FRVLRzS|MRzq$0%rMgRugAjoch?Jd1TT`$pUWLVI2v(ff zK-0Ud!bE%U04ke^>fz**@}_@X5M}2RsH$CErWCA#aA?4WdZD~>P$beePzs9FE%Yf* z;x-aKvD$t}2c01825ZtZX|AD`!z-!z{=P=pU)Nq?5HWb^c>lIebX_H98g zn6hvs!z2-;jm+W_!fa)0VaxVvRI^eGG|1%AX7d9nXWH-Gp;}wHVi=QEs}U^dyfF?y z5g|quaJq-AxE$H#G1J5+`+vHxF{*y;_MdZ8(V*$@Ir=yO+{capS+3DMH#6SS`z&-YR_Bi===~N&1 z%*T{HVn_}(5kTLk*;8Y_kq6Y#LyrTG(ZX(#?DOSH9w$xTWYGT%MiTN<{SOt#aSAQ( zvzcP+%S|Zm@a`{q8vnR=HEI-|ZHAF|A=DVXpz{DtfjowC4u35=*^^mtdshfELB3H0 ze;f`nsBhJAGOV!9pyTFW4uM_&`~k)*%5m8_66^MsAkvAZb#XH;2)y=_fckY_+yY@R zJFO0qr{-4TqlL%Yt=oTUsMCSg)N-o_OaQvkzx0_fO*2g+fOrg{(IV)%+Ut0fl7Y{k zBCKlMDSQy|c86nesKoW)A-q|&O-caWI0je7TbkC zUX?gL5ML^uA({0XHs~pRH&uJ(jc^0!8?W~D3L(}11%WGJf_g5EdMB z6+uDw(-OLI-!}(ZILyed-4&We#0n~=!q+seHh<{(X@S$8<+ay0bkJW+=->y%cuFFG z;^D>;!Bjr>aw=x`&VMMM{T|fz8ff`W^p%5**)?n54(W5>7#$J94t3IbZOnwwOb$|z zNG-29zI)8-uOt8e6}p7|)M3RJIdwoX3%uB5eE;AuA!G~9&!4ZV>h*PCe+RIFU->aj=Pxo6zXNUgFkT|5*n%6&MKf*u~jv}4M z$rh2jk0ELklsf1O98D$)T{6Qz6 zRWC)ZI)quj!m12SPRr)zp~Jn2NEoTe!h{kKwNbVE2ifBg4MVp+nyhfQ9#4c#JRV7ZP3}|aSF)&?lEOxI?UtQkWM=J_ zk;^k(x@`u;)7j$R4O$1G;z|_GeRjPhLOhaYI(hk?#PbCEzPdN(7RGlJvqx@3+H*!p zg=-@O3;xC_oLKz`E9Qpe^Rd(8+HsUu&?eO<1{y$7A9Gjf*3do|m(5uJ!UJELEi$~A z=s|p!>rW>+ins$=#-*vT=}(D z1`_R6H(j%Zv|7KavVGswqP>oUR5ffyJ2f+jT*JotM1>1i+{Kc(H)8KeACo z?Rm5ulvv^RCgMTrLz|`!E6w;g6oT=-M~ysn(2X|zZ*jrVLN!6pfeZCEiF?l%Bd8@i z5o}Dk%61zF+6~;FCy<#Wpfw|?SW1`WoKPjoW;T3V(Ff1agc|H>NHA;40WX13`o|Afs7)q{_-3mO{~ z;d!w8tvUfJl0A#Vsr=pl>{pt(n(!8Wn9Jq!j(i56C&yy2|g4W zT2?H7sfrpkfjn_oQ*%xJ4fd;#J>x*8fxqzYLd_Iw-3E#*AGGXO zdA$bQHB^Gm0KbuojH8ChVC*Z<{3KCdBO{1Zt9F8Nws4dGC3YS;j;+Y&nI-f{Y?`}R znCXhYUf6;Bw9s6vp|FFb&`9+p!)Val}lfuX9q0N0E`T(ltWWeOC{R zm^AUBG2{Y0Gcz+Q$BBswMzA-dgPBSo;s7t~>tUFa0ajlz^7#O@c$g%`Ac*-7VKZS= z97^I9$A5{m5P%k%A5Ss^T}Y$8Qtp<3E? z-(_?nFmfOFiBrS&ENIhgRVdzp4z%^r8A*4I5q8cH)Zh+;4V6mF)W1VbaBCPv^5l4_ z;q@Mp#G-MV=OIQ9GXeR%Gwt3+<+~7@+lAc37k>D2@;=YTBxAOC6L^sIp#e z(_;CsqvptG6v{ZHoR6L6Ax zArdmEy9$YnUjY6lW1xXYCZrAPaxRi8V5@TeB=kcVOi~aWDdSJdqyzRRL1p;bb82;VVfrk zQOV8y5A#8FU}w7v4TnF)FVt5=R6 z_`kmA*Px9E|F-6|IQd>vdT2q@yul;d@Af_@y0nxfm3~9aB0&ekA5k;~uX?G9LPP96 zEJ`7=%I{i}- z2x8}VSs?`*aQ?zSI;242;u@$zie_i~iNdR#rar5bs#)-7JS@;Dr*KMB-yGs>YirBC zo$@ye2@MC8*=k#6YXgmF7r(n%FR?=mPJAtxBTQDLPYu`{(iuxkxD?q zh66}*tr1H>Lc{GD5U;UZ3oyb99g~W(#b-RfXcI<~3($-%wcoUDNUwgUQc%h=8Gpsn zp!m$wL(OSB9-J#pk_+x~G!mhj&qPBWv*Ll=`QRB2|MYoSL73kS#yF0AigCJ5zxWLW z0HR>CuU&a!ffB!=^Xa>!swDCK!iGoPh_q^Qj*Hvt@X@NU6t?2eT>B|*WMCapKH=(Y z0_mg=Wkp}uFC?(u1}h5_tFrK=YzKJhVoMP`xecKWo$YDV>@yb+C44S1*A|taa~e5R zl<36?D#~WMrQ(L2_fVwVSBpJO5h{2m)Zr>VuOcXBU+io`3_5Ml!;#a2Ihg&$O+eU{ zeNSSoU=X6RG!Yt0(tx3e!$7gWU0lgCREkdDs?64*pXhKU&=8aGzS7YS7|4oukzkld zyRo@{!}_49pyTs39?zbLZBvb2klEuxL`6My__TbM6>)UveJDz8Xxb%b3YWJwl9i)v zPtCW9Y(N)2;d*rVJlB*IfZ~b{tN~w_`zi2R?8Sc}L6@KX-}cih40sWfjRlgI^d;K+ z){m*(AQWfnt4!p=)=tC`OJ|#gLgc*Q{UUHzblkws4WbPbMyzXRT99u!RWj^+5iUd< zR@f;_XhN25obn=)&GNaab2|lek{7u`GVa&w)1IyFMR;hVUV$8o!9T=`x$&dGO zXLC9__hD})|E*p?no(JMpl!<~#zXJnbCWu;o6PCT*5VhM;40ix5@XAV7)6q`55W5Hb|IKzzr*SD7w_p2>hN4qqT zc@kHjIF7bXgBQ21Ps2LE^+f?EvnxB4?WlUp4K&CM{WC^nf5B+pDR_wqcT;eY5B|i3 z=Ps=G*L>=$HL`f60&^=BP~AKYLNzwe2%18)pnZ$7{3Mq@&)bnkLNs@+e2o?3R3<>z zS&A&TsL%dYv^&V(k)iK+2I-OFn1WOfBgi!u69#)J+}N!ZZGIdlY-`@Tl<8jh5d8{L z14+MYJM~FZ{VHT>I5E9*Q~xHjg1cV+q=0Tx;8EM>*unMQRA;lh;7jHmZ5I8^G|pSf zA%#a;USU;w%>7H>5bGtA)XmA-PQvt;;wZKIr#4Pe3mU(Y4~@Q?cl%pBmHzUo6Me3F zH>>-PuIAXiJdF!7AW8-a{%o*Dft_v+qWtPOTy8?!{+9VntgQIGS8aNFJ0Ms_n9@J* zQ_xsCAHvObb+~N0JDz2xBMo(Ooo<-vhWi?l+)K-ZVqROa0O2)^jEsF37w&k2T=wgo z0mJsztnd-bpml$AePn@eHzBvqrQbzPq`TtiqE8v;4=%TM{;sst;pGlYPlLq6(H}Um z-k)&9H&~6On;?EKIC^td-8u;ihDtv@J>C7E@muqS;ieZRJwVZ&>9B&rMq)I4&s{j$ zYIE`+@zT)2$nIT(lF@-ie7>xg*l~WS@0wkkH8N~GOGF02RIpo+g(Ho3ncjhm^eXGJ z%;*v5$P`NsXu=?d_K$%fV>J{hH<5*#5N>aOuz4 zOc-B=hlhKPaJw3<33}C|!OkWsii(ggkK^OxMeKr%MO(zkrO_fH8A~R^Zc*6GesQHh zF1b;o%j8z~Rtlfp9CGi)i^+qp5a|9s)M zf?i&9yo>fkC;T20dzvi}TbE0@pxbpe^|9SvQGVh_04TaQNrm)oc_m`<9GZ|L&N(6` z_}_WCB-i|$-@;;IV$8tKxR6J-#^ZTTcJ`I;W&#L7xqxDL*jjCBPp$Z_ErqMEcHsiv zYiNY>u4MQ6-a1q^T_NHNC)Z|c!{gy@W;5bflufT0tw5=KX6FD8?4*vl~8`=%Or2 zj_8c_qot8CRGB$8CZ;g7G6s*#WA^IOZ9JmuVWkR+iGt&<4@bhhR{A~m{i+`MVTL6o z6>M&znm&k2An*C!|W6IRaYDg?qXgt4))ISt!q1L$0ukW_(9O-&^?Y1*+g zH;&_g+HBZuDEYkES?KhsKHnIVcq7Kf5_17Jfy>QD=N{ViHcWzRjA29yW)0X%Zrfi+ z{j**-J8R_+;IEmUo)(}|Dq~}?h6_v&<>AKu5GXJY;J*9z23xjVFHjJ)e*Vl^Eq%`U zux{<#@2`3FtKs2Cz7N0iuFdfCU%Uk8j4p%m2lwTw%$l8}0x$*uoqntB3DTPYFY+wW z{HEi&HJjB)6PYx?pwS7NY{fncNhWkR})~}+6w>x;DaB$0k+-yH?aFu4-zH-bMxX} z_{mQI0O04pcnQ2U{2%}yBO|D13*2AZw{H)2?%XN3a6v%h#2a9}3Z|x}5&<+F#~6)} z<}A3f6B{A2ef##{`0?Wcos%Z-rSv`v@TQy2l>W<%Ghjd9p&?9)(JEMwOCpeQD)7uB2jSnJd=&ovfo~+>ub*>%^8ekZdhp~^PXhqJ zV~-t!#~wQdPyFa#y*I=N!*I?dz|fn<*2_zsl4G$=*6DPT|Fv4J^e{|vKKMUd$KJ%m zgxI-rr25{2eS&W&lW5M2F%&n+2NW1*m&XQ&wd`p?`k9(|H;RW!6pFM|GM;b{K-$A zOMW8#cku&EPEO8I9`x$>yWS3XLT6{^w1vwo0+Vx?oP@ElF$kIMKRG#>3hyLi(!&s@ zr>9}kp--L)C@Pz^A7?(R(G)b_6o4|VrV|EP8qiiN$>vGO?zb!iX3Ppa`a6o${4(%Q zwORngxt!O(Gio~zV8fAT;i47G;Pi9HV8yxT!iBH@P1p_q4?pt##9tu$oHKm~qKh+d zA`D?VBO`2ba&jOgcXD#lZ9s{HL8zt@(^lNNVI5FFO@u7Wa zDCtBkDY(!hZQ?(WUB7z0o)!Ro5RXX&(QKBM?1usK6o^esOo&;B+=jeiSMKztnTM)& z;wFM&)TS37wxxRf^h;Kj4R2LM=c?zymK%k@Gh1falTj83NmzDsG)4wc#cv@aeN z0(iY#3rJ-4C%>7PF_?J!`{y=!_U`8{i>2@9n>(DC5HLHNfR6e4Lh{xQYRxPXdOYToft=seWy5=tI1?ahYZzi7p>Iq;9H7(+SDZcn#asB^_Psf zQ18CuYabV}=Oz+Gf>6Q2I;J6D}wQzs$d zm>480%oVsw|2iQsVx#@<_{2v50N|ec_XPlR2}1O5D1d(B=E~AA1ECU6 ztN@QoKWlPw5~io8p<1oN)YR0R!%uFH=c0cIa@j-HxP(7kgn-HG=!W7Oa)N2`F-vD; zi`nQciOr4z0l_${a?Htc0l=;Vm=^VLAuwAo__^a(r}}@PzjjVa z``2o+yY>jU6NK+YOe1L~Y)w&~OeBw1uf)~5mHX>qoy@|$S|z&-cx3qEx1W?0S^|uwf-O{r?6iZ=V71O`o?@l&&1tN3Fk&36LcO zxB$?d)1qz*J`~>rZrnaFrsFuNNswv#S&yZ4(h`szzwC+yh#_L>FJaZaS>vs znobJ9ex{r+;M=tRk_oUPOaa^L152qZuxYZ-L;-^|XZi1a@Q;xKCExb9%jfw9Kh^xQ zyoe%budLV#91FX^vqzpYA)PQNa$>Yf2-uVmk1S-(8~00pCnTfEbwwjntro;_oSXie z*1gXTEBOZIfAWn?BT@~_U+?0J*uH&xzyV*c*R9jKi%7wy#X4GQt=r-_DoBNm5Qi?jKR2y!x zUQb;Ymyul*bS5UjFbBmV&~-wQ{x6SdWRnkoAxeHpL1c3uR4$!7Ew z3pcf87s`ZanYrY{C*m^xZb=G&axK0An?-N_r9K)y&+JRgtX$9nAc~?Aapfu(EVAjq zFV}hSlRkfKyUP`V__RSJNi6{ZXm__FG%si`R;69nZd*OC_i zp+URo#cC$#fG-R4OifLRQV5i*WB?5CMS_3XvSk7Q;H8&d3X1MLl=Zrai3#U&({hyy z7NZl8cAOdZv={_G{!ahSyEbp$EL>76CrXECxt2NuFexil6`}YVnS@}Ml; zHMNkvo;L_7SGme4z>wyp6)h0TRjyJ1IC}IE{Jt{FUV7=JVA--|BC8;z6bR)i*E}%LDF7tkFDe>Gcn~kRSp7SZPv}YZ0%^ zVj$k`7$mKm5Rlw9H|fV_Qw&7Gk3i;{UKhrT<5&w;Rg?kb^X1R>q@SG)%2eQTElB~u zr_id}M5_ikCe0#q3IMM8O&di}CSanevxETcNIcdDe_0Dqu9vkBz;t@658BT)zs%Oh zR#L52OFOz7GMtQAYyiPuu5!I>82}hK)$%X^mFDN#UkB8Bz3ybEtFjDbz%Lm%7v!%wIEx#kB?AxEjyBw!bPAt9D6JNy6ADOj$hXabmO+#S)zfJ&A z@4OEI#es{@?c2965E(^CCpysNHeio-E(KUau#hq`!ls=bawQM%auoA>h(5L`U7h(9>@c2{1WM zxyrR5Is)lD@-kMChatT5(n|q8=;!GK0%a#fYkpJPy|nSm1&ciqh|lB$`$?+WF02zSE=aj2l3)Tmax3bUYgjN}tQ6R|JN6}S! z6Mdm0dmi@fD|c79%9db7FADOpg1ZIFLUV=-0C=2@RZDK&FbrHjpW-3e7j4pQH${RVi{=UfZBrHzeGF21hI9JT4V+y; z?Id7Gk7kDS{q^_r%j?_q>CfwMLl!Fe`s@1h+xOwJ(OiRG9v_BFKw3imyhw$Ldc3SRUi zATcRrSG=nM-L}WsEJ&1R?G5iXXB1K*E0Fy@nK0LrN9Bgj7fxo`3Jh+<7@Lh<8VR1C z2&HBFt&}~AZTpdpFYd^RDw;I`R7U69slL)dHmg*b8jgYm2yCm0GGghBqhOXJ10Av- zxux!il@+rSgxIC`r1Q|kMQA#x9g;9CYG+UPF*ZJJN)+FBhr4Z*)IyV6i`Y=lh#$xN zZ`2X4F_tp#&L7iivj|+8-E%4w<$R+ctMYd55i&{8lvM1nzEW1@e6yXoVJ@k6XEn}; zaxwwiXh}t*?NYhfrp&ZZg{V5?v77DY7%{1AT0&`M{Y2^!aSBBv;$YR4gmxAK$y)5i z5@BQ;CM|22CVL}m-rdYrvez$)Cl%PR?2hi;s0029(NklNpx%dCu-|qj(Q^6r+;f4zI;nGfs^J^ms6 zvfDoOr}OWGF2i^3^OcvraehpY5a$31aZZx31=x|aB=nE|@`bzl`>)@A?G~5eJI|>& zcIN2|+v{=c{;jUF6}$uqUUO}mh$Bai%)cK!dbEE(CGQ5rJ5ty|+;-b-yO&&YNhez7F5c0hLx<+)T{!^( zN6!@f2%~qwhF9!9=^;-_?a0Ac|NM6CGf~*fd`-3CWa9C ztVGjB1>j}#KVJ0V84)27?Y>IjTC9^Kwa=mT_B9~+EQWWpOA_9t)d_#~@+(HG5C7yD z|Db!^V;(mDO;Ww&U%sjTC?WsF%dYCqea>b52j2;7!|nAL0FI4wOpR-|4glFw&~0>I1<$3DHwA5IkS?nFwS=BWNn(k3`17~-4G-6X&rGG7fABkW>{5xP zDyz3Hw!SqWx$K9qogN!Go(0GVkeFHL64LSGZR73BF<%VaW;6kF$d|JXq|;~qpH$bHvo&mPOI=yFhOneqfyc7vb4K7O1(sAObF<>k5VJ!BB zfAj7It0b+O*4kMDJ5~fh*3TGYObDUI$`@z{@+3s;1=kv9Ks-GMzy=2bLh|w4{C(*# z1}s77o;{0dXkF{^AxRi}uH42Wo2q<#PQl{@$Y)hhC7LDO&d^cBK#OR#1Z+jV5THJS zIQTsOX-_TQANz2BRYhU>eAuBw^G^((dUZ7NaASHuK;ujZR{aE7K|H7{RJlkx{I}PV z+sntKRLnqQ$B~|~h@@*_=mAvfc`#PSh2{DmP}SUX3Cz#wkdOcQ!3JAqAKfoB46y5( z8DT6+$cM2QK970Sqvp#XsYsj}mjw60F;rbGg{OXz1SR9ZS|1nAVH+RL|E6!>)=M|6 z!wc0$h~K5sPo-CgJW4RTpLaZVBDwdjS^+y8NPLfccm_%?HM)ezhkZc282J>|uwsF0 z+lKlp*Uj&j%$~nTLM*#va1#Ml1Pqa@R^o-+0U!=7ou%M@mV6-kt+(A)bgUdziVqvo z%9Dg>Omq+As-M`We_=AlgG2!N2yKXZ-cnP$N-i#o8DI2wXuH`p^b)^ss0AI6r*h)n zcz@_z*zxH46j~9_p3@p#l!UYQwMFAtx3#smOx}Mn0aGNy`Vt~O>1Thod*%ff^d$U~ zn{Qr_f>QwJz~_H_^rQX9L(G^!sS;B$EYSGam@bvxZ!BPp8IC_UIshar*5d;;mSe~m zV$#f0H~IanTfWg9d&w0GB*QWS*8?KvkPw{{-3q!t!RJRphNO)Bt9jzJ~(gH{{5@Ks>YZupOp8+rgClp1XC=l3yXQ}sPRZ%`C zeQvqri%C5t4kTX6znB|2lPv*TINCjY>s#NN;;=3tUGae-CdUWpjd?7fW})HprP~*y z(yv7QOhL&#S>5Va!@tHY*nhVS4&pqi${qI~yyhlPb4t?<< zl}X(OXq47eAA*&dBsV0E8X9t-#tSvSZk&w-_U_1kK_IJmSw4+InwVFNB?{O|C}R#FXxbRfE4}ggo3D)F}Ux2?>qml z#uz?afDOl!R_NW2969d3&<3buFhH%O`qE;)wp!DD%uMf{Cv=?DHCVOOj%nHG@hl;I zDDBjsq@7X>AR*K}&*g&SSwjrL4kzXF3n3;AalbhCK9zsCzEH?o2uT7?Nj`;ILZK#3 zF&2zXKT;nX$6gq(;CHDr+Z+F&0hJ!dHXv0yy>sLM5+mlzROon+zww{rJ_HrxKN=;T z8J-`GPf}>00>1OSxbEC*00~KA9zSG!vB(WOBSOUC`Prdrgbh0f`zEYZwabVmvmwS1 zPbD86!h?ExKL|ldbwmmg_TOj3d_r@lGwb1228$14AAro)4A(TY< z*GkJA;J6@~K0iuCJhxJ^g@EIubEhgkH!w^Fi zRHbc9)m62JYGtYAF@)5N1aA)D!m`s26*n-If_=yEuP;yTBNKo3W^%*mBF_Zin6H(j zOTp`GKK;lCbeR2lnXIdEypwz$@iYb(z&6-6)G6c|Vq6KhOzF2zEo_*lMPbR814=@w zq}H!B1}O>Tg?n+CHg-GaB-nsF=~n`Ev?G`t&qP(PQp@I8puvM&_~70Sn~tPb>)0N~ zdg`;a z5(LnRsJboGwZj?bgUdxvM9c74%VsO|(nmV7-f%S{4K{|j= zaS&oE=?CE0|LOYc=dq@xWT#51?uwL3I#ybGJ~{iF#uz0Yp})PcOb)C8hmkBC>v8$A z$u|{3PFwF>>xxK~u!S`c~vqEW;8CFc`ZAs*(bpk;XRknn|$=8xFS@2yomQ zYSm($Egk|S$C$~orL!BRMC(bvwj&|YLLH3Gobcumrd$$RA#=8>qEir#c<~EgxU2rZ zWd&nX62AGZZ!Nwz&n;kmgE0b*Q9*T9gN|836Hh~P;&RVvgTiTTM1x$Xq{d@s;lst@ z`GNr@pAxl?O?75Dl*EMwRnRF(XAv8Zef3Kp*q7@i7j|EeuD7_3RCTG2>I+jVnNB?l zCCaU7DBk$bOGc!#BZwOE0oEE!tLG5#Ts^a4U7-ZSP1{(|oMWi!Im!{gOvEH#4GFQ2 z1zjCu4L&gm7)prb`P6C^Jkrl#gX<_)`+Z!0;?PpKhuw(jkLO zuEnkd>uC9G`CMbqO7DGcJIPF65yI*TIE01~7^nTrCqCVEGr}OD(({JpNHNIlXw2)0 z9G~8AO>2*1U_Tu5L+0Eq3_iJz-`3=dnadAQ2OS@yYsn#2P0a{J&2ROjVjFqdPrQrNH&o70s*`MD0x$fQ9 zU4J0e4p4+uReP!;VChtrl4IuVXA`nwJVe9DLmu_$X6HG;$%kdvP0S`>X|9r-lyZx#Vt6mv}7OsEcCXg@U<$7UwyWOm*} z+;*Y=P7YnWKKHiio!&A!jwAtFJ;d6Zu|#B=2Q|TKZVtQOi3Hr!u{-y^A3pW?a$R<8 zAm*xxSgQe*9@}Efxni?VrXph03OYq2PTffAoX84oubCN>fm8%a%Ll2EDO0;MDDjkd z3X;%b6-11sv2S(E9E=HiZ+W~Jii|K`eSy~DRw-c8C6l}|?r|A4zX^>4)$?jJJaMZTMU{kOZbf8(Xe{aTV{3Tc>4K(9b#zub(!QiLqchmwO- z0IeRoUAYL+R%MJ298fg_7|^kGPqFd^je^*Awn* zpLDnJB%vkfR3zkfCC9ZWQb9wKMx*lSlRG>RqK1gEn@1U}9n<*L3K}|h&4cpD=gj~J zr9ju`QZsjMjPxU>mV#3mM7-m^ZTmU>|DVM7GtTJ0|H_PLF@oyxYOhC=5j)76Be+*5 za9r>(l zY4OgAyexe=xg=~M{fO35@PQ9IvwQt(->^#({`{Z+-+uWY{`fuS+l-NZP$_@m&L8gn z%c=jb|Noj_f9}3*Uh`X5&cFZJjDRtMDhX52B0Ypxp-JagA_I76B6bQ{6LQB$vRVm* z9F!ycK#$E05ak8$&YEsbqNXl zw(Tw_ITo;wfc64OpjgA9br3xVKVwu-kS|u#j>Z=qd!ZL%DP%w`lf1qh654H;Uu7t+ zxi1lHh=eK;Sum2yX!qp>F)#Iu?*`#!j@)wkmyJ5b(i{{L^i_BZwjMxq&lKKe0_o$rrrAN-&P7oAfpA87{gR91nIPd!G$qLdVD$Rr#8 zdrYsLEDEb(PO1Y&!<2~qToM||S)7($0m72BQ%#^<7WtrdKJ=&e##X=cAKo`#&hK2; z0+4=peB*!h1o}VU{j0e|!w0{yoFL&yP=e%B0}ZUEV_~&A{eT0Fh1lb<-7+{DkQWXzJL6;0V-C4#)L$%71X;RB?B#zp$6JQJ+Vd?4=kMM)hvh^ zLOkhL3y_a9Hgw+NCgRx_KEEf`m;UFMyU%|9i~X{RlfCfq|EHJ|4 zf}~UOVfdrgaUz?5wi2qMXL_LV*zCb$B%fD|GFE5LHfT-J?m5tNz;Pc8DaXt@jO{qq z<9%w6=v@c%Xtqp_L@Z1FeBZUd+qVrRBJil6{;BTw|NZau-#_uGkN5vCIRB~LHP?>6 zSC9}O5ebruH5KHmm3{z;r@tu`yO~P)3*8UzvyuW(KQRte^39DfU&|*TF{Z=RePit| zX$7^25o}qr5EQmEpvp-DQ4Lhp<~YudIYBo2p{0`&TS;F^KKScW(k)l|F;Kf@Bn(td z0OX@e3et@wpVv<277SNHW}@ zjXe!5_biustPpG=#%oSH)bTNgUwtBT~X3WF;j?M2!0$k$Fzlf)tU-*1O24 zjeTOdi9&EwQmi5s1;H>h!q(~LgSgjS@7n$Ezx~^N`^Qw*8e@p9gk&Y+RI}hMLMbUy zhL{$rXR65L)W~U%YN*jUg3C<6mAX#vTGonyIIoQw@n#n2Sg)^S<5;J>{kVNCQEbn+ zY!x#rDbw)1)tGP9+7PuQEXjtZ(~vZxBs4g-t_9E9X`^)3=|!zGa;m%@AdFOA+O;Df zwo~H=kmJ7#A(SEefPe>BCPLZb*19?p3^MrdSvb|=1oLmm0(By&n+G^?vDO4UzyVHl ztVNCZ103LF#o9XJ6`N39$Ai`T89xgnk(NV_?QicJ%QOyml`8h8zLyfv9%0eS|2vw1 z2SyDa9{Fr4`y3J~;D>}2SN)z_TU#qjb*PalC))eB0T>n<+DKc)p+kp?pTQ^sPW|xb zDdI3MZ-|gVEMBU?EwgA!3O1#G%^Wk{4~VDp5Mh)Wrol8xgMWbiP#-g(t}ttvuOZ^- z3b|AFd}y%!%=BS$YzlY?XzY?ouvpTJg+8C!If(!z45z>lHZ3DaIAn=isx&+iOTfio z{m>!lSVF`iBMct+GRbFwMurBBhUNv#a+xh*9n$019lRghgQj7G%SAs}UYoV87VAbn z+cw951X83Tta6WIkwrl7=9WP|^yU=voR`PkpCF<~EStA;*{~f$?e%DeHULBm1tV~l z$dD9hX~bB^abGJEGVP`(989sl(&cDC=rWa8QVc}b7iIWhO?vQ*Kj=8xKm(S$e8 z(yMCQqK&2|)2h}Ho3srQhSbrZ1PqDv(2eE1gt0FQ4;~-f46{`;KWS{Nl{g{zmO!{Cjo0C&2wTsW80)2m|fqeg`G)?UM3bqC{96U!#JT00+67v2uou*3UWl2JBdq7iG;9fjQxK9G6NP^EZ zp7EUBfBw>!yMzf9xz7d8pZe(bXv{Q5gmm(;`8YkFUXIjL$qP#^2$Le8SD6X$ip7M? z22X_o; z_4;$~*zF$tpr7d8`8QwhF1_0WXW#dhgNWY#-#Kz*7h@nMtj+0(O2!i0HgrtyLAA_C zt!|DGcnybTS*b+Q`v|E%0Pc;AL|qh9NJ6SoY>>Q0`Xi^5x|%LR-Avv&tt8atCFitl zDMmQE58E84)Zv*~DHt3B>V@8T|E=yTU;SE7MBtor_LALzl=^x6=eT0I4@6Se6a&?r{o9$gvHrfPBV4D>a|bFf`t?k}w2qcd@MR zL};AGL|k55(lNJoNH#-Xs0~Kl5PAb7*)RU$^SfKVa7*_i_uMPSi2wY2=P&=VUxslQ z64lnEs4q3<;02`!R_h}xRbNUA#^iwaW+PzKFNhayr(((4sJ`3e4z>CiliH2Ua9sopX|=~vAcEu`G!AOSbw)4I;H#6 zXFj{I>~o*HwQn%b`rbWfB%B>1eZNh>fxDeQNb~$u@QBw-rV%yj^`#yg3_3UuR9cT% zlms?Y98)*8R7FG2xD`BAGj@)Y`m4s7ocF-mAYN&5z^b8E<+NdktSsgs%Mnj&-z$Fe zE!~%o?Q~!Nv%LxdP)jZO0I00k=gVKYHB0n!J&i1}ZN2TZ2#WQ`)D+sl%MYm|knA4e z?0FSqRB*4?)XqeETCag}SYVJfEU0mKW56NL zP=5_9SDlNb1hfv(FWve5?xCli(tYl`-|bGl*S)$k9`aNDauN~b!;S8k7k+9@r;-?zP&)%Q+;PsyP&GF@B-D1}7WKF}7p@gyC zd|A+r){~I-J?GqK$p1GSZ(&u3&C#n-4K4T|^9OTVQeRjNHoKo#da8Hfkm zd6)gEn(v%R#a;r&4!R`hO|#cdRmZjNg}$d98hOl;rRNz#KC0Bcq=JMSBrsnpi9~|+ zrSUjBwHFtGjTUK*5XrOxt(FX+$~wj^qHRUTbi5X8ZwN^|>z}nqN`uA?Z7kKIq?(E+GfWI?eUZZN}S{!Q~tEtAJAkV2e5rg$pEu?59 zxdK7mYH8-AUtH_43C3j0hN`+?K_iSO z{jU7g7xn+I{=kR(hDJxcl8;#CbQRARq>=2Y2cgjy9AEIkLdr0_Ekr)XsMcP;jq)k! zyl`!d%mL_>SHObW2ZRqn5iO_gObLyC0lc~&p^j1AG&NwG!t>OrUrK0?cmz8_t2x+7m-G8N^a2%guXouT@Ty-B&n ziFrelbXP$>PTlc(85^6&Wu>ISOSjQ9T6K3-@FcNDhb-G!zATAr4KoCY*MfW=Ntm7j z|3g)986z4>o)toIQYQVqD&i?p4Na|~wT)6qJGIX%7o6;y$~iOTyg))bsAVL;Vparv zS`km-kx=IY>g;z*Is(HQ?I=PiDYDZNu44jL5-Zfxs8M39)KYWuSij#`(D}|t7$7y) zXaSJRjT?wJT9??dY zC5=PRcNyeg1xTFOJi*wr&nZE$5w#&a*tC7QSa*|rYBq>=gm%i4H|_;m-m{X;8hv>F zS)*%py0t)zh;~TAHkqpyZ)|xon>)oblmJsT#HkU>NT(P6CGWzYhA4zYVU67lsNo#@`JA?!qW*2_jz0#f3Itc{GJ^pevK zgxwt@5p}A^_E4NMH@yJk_i_Vi*A=tt-yM<;g|`{V7a|(gPesCo^9=1oCF21Z;|LNE zjW{M9bEo6r7$~4pD-B`cLjydjHVio`zmm_Bf>_RVwIuW; zaLf(F<(u5`EekFILoc2=FYJRy?;K0f&fJZ)k`TwY6CaguJ(#m)i1%a^J1}*0MxV$D z*V#?iquPc)t;Sy*S3|m#kUSaQD4e~@1EZVM8UK;ANsRCXQb)4u+--ENG8`}}}5D;URmY|!>d zUJbVpYUit|0fO1SLeN|uL`yQ_N_K}2Nwy{Hy6(7C-0k*1uUvT3T5K{}z)C$Onk8Os zN5JQ&$$h z5YSE~;X~#;I(ue3=-dRPp>yOwB_C8#kWh(er{-`bGl1)!N)_5o{I7-gj5Hlys)5H` z61C7;4IZYPrUl8z@1Onr7n9pBNW=={s*fq;kaB^5cI?NwPO;kLr6g<>`o=L~?1i(j zH1Cnc;AEey{;n~~aO}4|Q~*|J`UxfJGTaQBlvwA$u~Sg(re$Fms-2L0IpiZK37cHR zgh+;>(ZU(Ba*~|b4vnT%B9_2PK0*s&G6f$261I|n3pq&=<6c!qODDv7zEj)CK>!U1 zRzpiGGBO)LY#Ne%mRTeTNaCSUa7sQM+&bGFphRr_&|vul z@jz}!KAU=7w<8%rLgsL(m4N7dA!$e=Jc&?ByltGrk&Je{m;#B1bKC687F-^4z~`JZ zhFJYU3r%R;0#rRqr5{l%1wG4Wjy2R%TT`lRRxD_0#<>Mvz}N&qb~+A7H!qqZ1XRmg zKUN$P6}1?PY)g&rZjkI;*8k^*v+LU7I@y2Me9w`?>VAlo0kg!6IpQ-;8wH-FUX#5J z{`QP8n_RDcPvRZ7Vumc6-k6cnFEx(LnhnAF>zbCE=^gCDo&q42&Up*Xf79y)Xn+|i zBo+6B+QC5O+!o(gpQ;ejUR2Q?(;;mIzNfHl%3x^+sNeTh?GY8Ur7Ehxvt^A0UJHJ6 z=y9TCW~0PQsiHB})4DM{Bqd--t*~Q*sl$#y!qE8gu*m}LrKGR9KJ?mfJ~I!B&4scc zjm-10u8CX;KovA*Enar!GyCjpi88yM8iKd31glPSL5WwhZ>|+JNkB`yP;SkZ@qeL| z4C;=U8)H~L40-w+sh)sJOs1U!sQRf2*snMHj|ojvN4Mscn_R^&df!0opIW^?U)+JC$ zL?eunWn|LW-2P?9Z26(#9N%ABZ}eJZF|9n_MKI=&?zpvzkL1a0uON9~)zqIy`E5zmRN7M>H{R^th&pLSiTDv19c0X=ea90=I^C{>44o%2c)D;azD zgM{j}P`#)IQ^i+Rn8D7#va^x#y7+u~jZg;xJeK_h8Odr6W{ z)lddw_f|%cg1DwW`sK7k%~Y~J`o$FQRCRQrHu<26wK%7he1M(e!%W`{wc|TsM_Stv zSn_zWu3M%;khkrYL&7ng6G%843--sn!%Rm~v>5j-6LSI%z0BU!6|rdM)ZI(D9Rsr%Y`T5T&O9diBqqLiz=g5C zvyc7Vf)SL2FMRQfcRv;AWLuFhXZ)5zj^SoO0$M|g*PvAOvBgSs9|m!cNy@~`&sGhc zCxhx10|Gp&>6l(ujZHg4Z90wx@t+f8;jHI4aZCrmJS(B8Jyx=-OJeFkh}1*m`ejT% z=qn>lm{6Jyc#^Pme;qfb9P-6!3EBA72oM_Q(IPoEJt1J7^C}TTXzhohdPo&?jH(wp zzW&x{Y~2pF{5Idi*z3_08$`(gWBYEBU(gy=Yz5B(LHRLTh21Yrjie^VQ4B9 z0jj5-h4cka+i4dI8iS|ySZRpgElJ3+4W* zbzNGuw8T6SV5L_qHq?ub$w78;7D_)&OK8W6sc}e7y|i3VB}I`+;6zD>Pcms|VlA5_ z=~S_nwS-o}T5OsGTo#Iov&78%AV6+*v=-3ByeA6z0QEl-R^6u*UN@XDFJXzOQb9eV zOQ?#d-L54-!lN6I_hT$PvP~&b4y4uca8Muc00&qh4(bCQ-~cPc#@2{G8K5~{t`h&_ zzI-f9!O=){q!A`HY&aPw+^V0{T8Qzx^m!bpplgVQ_9GI$4Zqp?48A z!dOX`BGbN1WiujPQb8n-d^v=)WwWRzt-GT>x2N@_U}!2-9~w5Y6N_c#UL`ar9?-gl zt&WfXr9tVTu)QIC$-Ty)3YtH4qsGh8&5W-N>s|g7wDg7nn)68@+5-Rx!TNq_5a%Q}= zChA=6(Sd%k_ZSf&kFk7$|X?p zG1n?Tx%*lygbP+&C)K5tB%Y)k0gW&m`vp>ccm+#GpIZKhtiaT?R0?_$(O$K87yAgP z(yxU}p;ij!EXz?X`I7jeY6^tf^S88qhQM?eC5?=P)m$=TfU$F`6JS!P(I+DYiK4YF zj_w7YFVwnVjS8(-5>g*?EvdRczi=qCYy7dCki9)r4axAqa>M3E2{%f|Fy=s&W!Ag;f;SXX6S1zIf~7)a+?FQmdZ_X`H7y30c{M9qmrY~CraErVxvyR&JIJlAehk?E7kKZ{He{aD zn}MRx>cE7T$7dd^EBhu@P!J6tyX+O0y{O~zDM%PH`RjwT0mHGB8DpYia%!-TAtuLm zDTK(E%*7+)AsTtcs)VP4C;>?{C7Y5F%dfoGefsZHkT9j@Y1wS+mm#d={oB#73}u=O%pj|HtuDaS>#&kD-ACeFLjF`9j*T7oWhjUjkrz#=1z z67u7J{Dt}Q)=v78aTR-istI0X!Wb)+g%T?!^{@e6Vou@A`M5#+UUnO6{*UEm)yC6j z_a2DYM|Lcsy!8~;XAU_+K?=e9kznqWmcq^?#}MOzR$^W&+NOQ+HXd|g4A{F123G`v zs9!Ni6p-!ecf6(F5hT3#{qEEK(~B>Sk{TQdsA%|77Vr`jH&MB3E&IGQ3)-jePu< zU)nE+;~Qjr;@^ElFa2UrDOe)?YQUTJ8mz5jS89OKqMLR(ppvKmZkB69i5W_IV}`Tb zYrx)gE5+Q6!4wt4e{b8_^9Wv3E@JZr=@_q`Dx}5}1HB)TBWQ#hjseM+(*~Js+>?Tq z{Gs=u?Lm)g&y{pTfN=QyyKAmpAfBq9iWdIC+!+xp3k{$r+8L@DsR_7+8=`*^c+gb$ zoRsmqvTZA*q1MnbswYVpA|yz~ntjyI zy+&K(`}6dD9Mh_j-ZJ&q4gRvy)6b7%-3}oV##G!^nbPoIH41MIBQa`*y37Hz=_u^| zbH>Op=d=2h{$=c?`QZDbCEAja(6V(vXlS8`8etej4PYGi{=57|G%K2ykg4Y7+kMm` zn&YCN%7$u8wb2;btE+?6d&!=fTbn5?c7Icac%?8;(J&)~J`ZyS&#+q~N zTxbfCq3Uw~eQf3B63l}xjJjQG>^mUf8e-W5tU>G=r@97aTd>p4maX!0T&&j7S}A-$ zzylm$g*Yfrw&94S&EEt};XWwAss+#}0@^sgQE`7Gq2}_IGqH10Fj#mAl3G6(sAFfJ zeRg-#@cSeG=pXJr`49f4CF{{+wIt$AH{I0r zB>dzjM;(V_t8>piw|mvAUNtF+OV9PLcfHGf2Nz#_@je&HCSnu;HS`Nuc0BX_VePsi}EG$|5#UW`@oX_*@)G(+0kZc0EJdH@Mwn8`T?$Pgj~2=ltvy{`IQ;`!_TF$s9y zdFSocbW}4EuG|h$i);z#5sJ|W+Q^s-r4<-?0OF*io)XM!__}?I+2En`ObI)V;ux?6 zKn_Yk1y$2pNobE5JI;qb^r50-V|z%!O~oi93)dbB%u>d*<4Ot?gOU8d8!dl{mRMFPtjE(-M%&MfB*aU55$vzSO$w=|NY{N=aLYFtbs}@Pa38WayK+5-`)4_ z4@&E%vU-wGG)lx0g9jYcGosC3Tu7qWA{=k}_HFZZ_d5))q?DNFmwc+ zT+?M{oLUntMDo$vrzGU~59~|*6f^zKYx3+UytM*;|pY?eB&G6 z*f;VS@#e(9G7J;W9!Ln(NB5>)9X=@ZZW{6I8H>4^9w)Q)(gYd3r9^)wz zPE}6)CJ9USOYI+nbwiL)o~r3dy%+&C82gk{PH}y_78eiioizO3_rAAP8;Z8-VC*ac zYVy_Xp@OT84gnb!-o~t9qT!V~yzx>s$0yIL8LIfw)bOJX+lHpqq${w_d)~8ks(a7R zrZLYUU`d$PK8t5X&dVAiT7a0|7_mg^+1U^&5?(BwE(i$n;rpf%Fv}57r#nGa%1h7I zKL+N=tgry$L9&s0Ww<{5$OrW5Ag!G`J|kHu8EYNyR{B{VWa^kDWvZBdz4#(40phjr z8|v7vrF((uq^9`@f#lm{WJkhiO#)5GN~r4BA~Ic%0n$MQR5eh4r!t3uJS|FPO%ZpB zWJDxI4l%rKxXiB8-+FvVzA@5II}AuVD+R|!&wzxMi2U?wCx~|fkPpbVf0S0(GXibz9x57+zA_R#0`4{y+@`(3JTh zsQRg7pm9YbT&!i#I^6M_+unNXtqa>K3CF6OAxRxG)QmyMxT2l&?x3>H{vThzK}MM@ z0x~D3l8_CJ`7k&>LK^!^1`^gzj9nNPfL!=3|4F7}!zQGbtp`zCqd=k3)th>y<3UE@ zkdUFWVlh}N=kR-%B%G6PQ1dwz3CnN&;uq(~!SC8x5guY{vW=jj^|J*KAF97U{NWGJ z?}y~Gz;Y#F>=>&?mI|t4qN4)|3F_%s&c>Ki6E6h%*kX;$Lj4qIrAAb0w=H%nHt=tfR7gA;k)>;h(EOB&Mhx<7nINiOP?3C8A!kLPijsVgOq(Yo$$iD}S9phQV#(Wka;}lcS zPIOd`0v;dVZ#3l%f&C}5zYoi*Npw5=b!!7WUwlI8GZ(1kZ!|kVrNh* zg(1n@ncn$TC!d@y11CQgjn+>^pm9z4{MH;lWe? z?De!hKaR`a{EuyDm1Q}%Wg#^~z7#R?rHm^#e&i#g4KO)lw3MYY#}c{@W5Fx}YFz++ zY;WFjjD<#=lWi?TzOhq)Qs>A0)Ae!eC0FzxNIm?As|25%Olc*cQDq8gr^pEk2t~P2 zN`r(`B6sYz4r9C&^8J8=Q6ZLsd#u@C)jmK;VAq8v-qx7@OU~~FBzREbwMfR)8&qc3 z(^}doY9*gn0ST&T?R9`S%aBeu&nsW~%BfEiMV16i1rU4N)qv_8RX;AXQ83>4lCBZ0 z)>`Tc$T@$=MWW$nUhVJ}8Um!C7ws~&R0KG#v(hhQc!}kiX@#c*jBBCg>xe7@mgL=J z710)jl>`JWl7~%i%TB>cy)h{vO3n{x2%f#RDal7)U~APg zlof3qlPQr%9?@d!)(yoIa{E%k6GK(ZR3oOUn>$Wzd48QUXeIE}l8*)xO-tV*@+A~L zma=>THR@+>btIChMuNrmUG;pxgZh9QikH9q Date: Sun, 14 Jun 2026 19:10:24 +0000 Subject: [PATCH 06/20] Automatic changelog for PR #987 [ci skip] --- html/changelogs/AutoChangeLog-pr-987.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-987.yml diff --git a/html/changelogs/AutoChangeLog-pr-987.yml b/html/changelogs/AutoChangeLog-pr-987.yml new file mode 100644 index 000000000000..645763b78351 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-987.yml @@ -0,0 +1,9 @@ +author: "FalloutFalcon, Major00" +delete-after: True +changes: + - rscadd: "Adds new gifts: Jam Weapon (Children of Gaia), Control Simple Machine (Glasswalker), Hidden Killer (Red Talon), Aura of confidence & Fatal Flaw (Shadow Lords), Speed of Thought (Silent Striders), Bane Protector (BSD)" + - rscadd: "Adds some little lesser banes" + - qol: "powers that spend willpower log it to chat" + - qol: "removes pointless to_chat that just says \"you cast gift\" as most have better built in feedback" + - image: "\"Tribe gifts: Part 1\" gifts now have unique icons" + - code_imp: "adds signal that code can hook onto to change bonus dice of rolls" \ No newline at end of file From a98d42e6f38f350879fb35ff8c4eef08c5a20a43 Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Sun, 14 Jun 2026 14:10:33 -0500 Subject: [PATCH 07/20] Reworks Melee to use rolls and stats (#1015) ## About The Pull Request Mostly reproduces the same code as brawl. This needs a followup pr with a ton of balance tweaks for the weapons, we have some varibles that lets us replicate ttrpg stuff. (like attack difficulty) ## Why It's Good For The Game This has alot of balance effects but TTRPG accuraecy and parody with brawl is good. ## Changelog :cl: balance: Reworks melee to roll damage based off two rolls (to parody the TTRPG and brawl) balance: Protean claws use brawl refactor: Removes snowflake protean claws damage buff in favor of generic melee code /:cl: --------- Co-authored-by: chazzyjazzy <33268885+chazzyjazzy@users.noreply.github.com> --- code/_onclick/item_attack.dm | 37 +++++++++++++++---- code/modules/unit_tests/novaflower_burn.dm | 1 + .../master_files/code/game/objects/items.dm | 6 +++ .../powers/code/discipline/protean/claws.dm | 7 +--- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index ae36b8552164..358aa249d23f 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -312,12 +312,16 @@ return ATTACK_FAILED var/final_force = CALCULATE_FORCE(attacking_item, attack_modifiers) -// DARKPACK EDIT ADD START - if(isliving(user)) - var/mob/living/living_user = user - var/stat_multiplier = living_user.st_get_stat(STAT_MELEE) * 0.4 - final_force *= stat_multiplier -// DARKPACK EDIT ADD END + // DARKPACK EDIT ADD START - STORYTELLER_ROLLS/STORYTELLER_STATS + // This is pretty evil, but we are gonna convert all the tg force into the +# that melee weapons have listed. + // This means we can do stuff like set force of a baseball bat to 2 TTRPG_DAM and it just works. + if(isliving(user) && !HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER)) + var/bonus_dice = round(final_force / (1 TTRPG_DAMAGE)) + var/datum/storyteller_roll/damage/damage_roll = new() + damage_roll.applicable_stats = list(attacking_item.st_damage_stat) + var/damage_roll_result = damage_roll.st_roll(user, src, bonus_dice) + final_force = damage_roll_result TTRPG_DAMAGE + // DARKPACK EDIT ADD END if(final_force <= 0) return 0 @@ -358,8 +362,25 @@ if(mob_biotypes & (MOB_ROBOTIC|MOB_MINERAL|MOB_SKELETAL)) // this should probably check hit bodypart for humanoids final_force *= attacking_item.get_demolition_modifier(src) - // DARKPACK EDIT ADD START - (Makes Melee do Something) - final_force += final_force * (user.st_get_stat(STAT_MELEE) * 0.1) + // DARKPACK EDIT ADD START - STORYTELLER_ROLLS/STORYTELLER_STATS + if(isliving(user) && !HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER)) + var/datum/storyteller_roll/attack/attack_roll = new() + attack_roll.applicable_stats = list(attacking_item.st_attack_ability, attacking_item.st_attack_attribute) + attack_roll.difficulty = attacking_item.attack_difficulty + var/attack_roll_result = attack_roll.st_roll(user, src) + + // What i want to do is acctually have it return if not success. But that creates bad visual feedback as all the FX still play. just give them them SOME damage.. + if(attack_roll_result == ROLL_SUCCESS) + // This is pretty evil, but we are gonna convert all the tg force into the +# that melee weapons have listed. + // This means we can do stuff like set force of a baseball bat to 2 TTRPG_DAM and it just works. + var/bonus_dice = round(final_force / (1 TTRPG_DAMAGE)) + var/datum/storyteller_roll/damage/damage_roll = new() + damage_roll.applicable_stats = list(attacking_item.st_damage_stat) + var/damage_roll_result = damage_roll.st_roll(user, src, bonus_dice) + + final_force = max(damage_roll_result TTRPG_DAMAGE, 1 TTRPG_DAMAGE) + else + final_force = 1 TTRPG_DAMAGE // "SOME damage" in question // DARKPACK EDIT ADD END var/wounding = attacking_item.wound_bonus diff --git a/code/modules/unit_tests/novaflower_burn.dm b/code/modules/unit_tests/novaflower_burn.dm index 165a738fda30..a9903dfca37c 100644 --- a/code/modules/unit_tests/novaflower_burn.dm +++ b/code/modules/unit_tests/novaflower_burn.dm @@ -20,6 +20,7 @@ botanist.adjust_fire_loss(-100) // And give them the plant safe trait so we don't have to worry about attacks being cancelled ADD_TRAIT(botanist, TRAIT_PLANT_SAFE, "unit_test") + ADD_TRAIT(botanist, TRAIT_PERFECT_ATTACKER, TRAIT_SOURCE_UNIT_TESTS) // DARKPACK EDIT ADD - (Ensure melee rolls dont skew damage) // Now, let's get a smack with the novaflower and see what happens. weapon.melee_attack_chain(botanist, victim) diff --git a/modular_darkpack/master_files/code/game/objects/items.dm b/modular_darkpack/master_files/code/game/objects/items.dm index 0ba0a0b0bbaa..381615140712 100644 --- a/modular_darkpack/master_files/code/game/objects/items.dm +++ b/modular_darkpack/master_files/code/game/objects/items.dm @@ -2,3 +2,9 @@ var/onflooricon var/onflooricon_state var/masquerade_violating + + // STORYTELLR_STATS + var/datum/st_stat/st_attack_ability = STAT_DEXTERITY + var/datum/st_stat/st_attack_attribute = STAT_MELEE + var/attack_difficulty = 6 + var/datum/st_stat/st_damage_stat = STAT_STRENGTH diff --git a/modular_darkpack/modules/powers/code/discipline/protean/claws.dm b/modular_darkpack/modules/powers/code/discipline/protean/claws.dm index 0e6186356fc7..48569fad6a19 100644 --- a/modular_darkpack/modules/powers/code/discipline/protean/claws.dm +++ b/modular_darkpack/modules/powers/code/discipline/protean/claws.dm @@ -12,15 +12,10 @@ item_flags = DROPDEL masquerade_violating = TRUE obj_flags = NONE + st_attack_attribute = STAT_BRAWL /obj/item/gangrel_claws/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NODROP, INNATE_TRAIT) ADD_TRAIT(src, TRAIT_NATURAL, INNATE_TRAIT) -/obj/item/gangrel_claws/pre_attack(atom/target, mob/living/user, list/modifiers, list/attack_modifiers) - . = ..() - // Based on V20 - if(isliving(user)) - var/mob/living/living_user = user - force = (living_user.st_get_stat(STAT_STRENGTH) + 1) TTRPG_DAMAGE From a445abbb5c5f69e3c8bf4314921886e9e3d86199 Mon Sep 17 00:00:00 2001 From: "darkpack13-api[bot]" <220339179+darkpack13-api[bot]@users.noreply.github.com> Date: Sun, 14 Jun 2026 19:10:55 +0000 Subject: [PATCH 08/20] Automatic changelog for PR #1015 [ci skip] --- html/changelogs/AutoChangeLog-pr-1015.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1015.yml diff --git a/html/changelogs/AutoChangeLog-pr-1015.yml b/html/changelogs/AutoChangeLog-pr-1015.yml new file mode 100644 index 000000000000..bb8896daa5d3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1015.yml @@ -0,0 +1,6 @@ +author: "FalloutFalcon" +delete-after: True +changes: + - balance: "Reworks melee to roll damage based off two rolls (to parody the TTRPG and brawl)" + - balance: "Protean claws use brawl" + - refactor: "Removes snowflake protean claws damage buff in favor of generic melee code" \ No newline at end of file From 394cfef1af871f7d634efe21ace5ee213737b8df Mon Sep 17 00:00:00 2001 From: dwinters99 <65516417+dwinters99@users.noreply.github.com> Date: Sun, 14 Jun 2026 21:02:39 -0400 Subject: [PATCH 09/20] Mapping DLC 2026 (#1144) ## About The Pull Request some new map goodies for mappers @DarkPack13/maptainers all sprites except for torches, barrels, pallets, and trash by @Major00 barrels, pallets and trash by INFRARED_BARON torches by me (@dwinters99) image ## Why It's Good For The Game decor !! ## Changelog :cl: dwinters99, Major00, INFRARED_BARON add: sleeping bags add: carwash rollers, torches, and grates (2 kinds) add: fallout shelter signs (2 kinds) add: bollards (4 kinds) image: new urinal sprite add: new table type + addons add: cigarette shelves add: metal rack add: commercial freezers image: onfloors for ketchup, mustard, forks, knives, and spoons add: new trash and alleyway sprites (all by INFRARED_BARON) add: lectern and pulpit /:cl: --------- Co-authored-by: chazzyjazzy <33268885+chazzyjazzy@users.noreply.github.com> --- code/__DEFINES/icon_smoothing.dm | 1 + .../objects/effects/spawners/random/trash.dm | 2 + .../objects/structures/beds_chairs/bed.dm | 3 +- .../crates_lockers/closets/secure/freezer.dm | 3 +- .../equipment/kitchen_utensils.dm | 7 ++ .../reagents/reagent_containers/condiment.dm | 2 + .../darkpack/fastfood_table.dmi | Bin 0 -> 2543 bytes .../darkpack/fastfood_table.png | Bin 0 -> 630 bytes .../darkpack/fastfood_table.png.toml | 2 + .../darkpack/fastfood_table_addon1.dmi | Bin 0 -> 2472 bytes .../darkpack/fastfood_table_addon1.png | Bin 0 -> 634 bytes .../darkpack/fastfood_table_addon1.png.toml | 2 + .../darkpack/fastfood_table_addon2.dmi | Bin 0 -> 2616 bytes .../darkpack/fastfood_table_addon2.png | Bin 0 -> 652 bytes .../darkpack/fastfood_table_addon2.png.toml | 2 + .../darkpack/fastfood_table_addon3.dmi | Bin 0 -> 2889 bytes .../darkpack/fastfood_table_addon3.png | Bin 0 -> 685 bytes .../darkpack/fastfood_table_addon3.png.toml | 2 + .../master_files/icons/obj/bed.dmi | Bin 0 -> 5749 bytes .../icons/obj/bed_inhand_left.dmi | Bin 0 -> 305 bytes .../icons/obj/bed_inhand_right.dmi | Bin 0 -> 305 bytes .../icons/obj/food/containers.dmi | Bin 0 -> 339 bytes .../icons/obj/service/kitchen/kitchen.dmi | Bin 2572 -> 1738 bytes .../icons/obj/storage/closet32x32.dmi | Bin 2539 -> 1864 bytes .../master_files/icons/obj/watercloset.dmi | Bin 35499 -> 35900 bytes .../modules/decor/code/bollards.dm | 18 +++++ .../modules/decor/code/carwash.dm | 16 ++++ .../modules/decor/code/cigarette_shelf.dm | 15 ++++ .../modules/decor/code/commercial_freezer.dm | 7 ++ modular_darkpack/modules/decor/code/decor.dm | 75 +++++++++++++++++- .../decor/code/fallout_shelter_sign.dm | 11 +++ modular_darkpack/modules/decor/code/grate.dm | 25 ++++++ .../modules/decor/code/lectern.dm | 14 ++++ modular_darkpack/modules/decor/code/racks.dm | 3 + .../modules/decor/code/sleeping_bag.dm | 71 +++++++++++++++++ modular_darkpack/modules/decor/code/tables.dm | 38 +++++++++ modular_darkpack/modules/decor/code/torch.dm | 12 +++ modular_darkpack/modules/decor/code/trash.dm | 20 ++++- .../modules/decor/icons/alleyway.dmi | Bin 1398 -> 1858 bytes .../modules/decor/icons/alleyway_32x48.dmi | Bin 0 -> 620 bytes .../modules/decor/icons/barrels.dmi | Bin 4841 -> 6171 bytes .../modules/decor/icons/bed_onfloor.dmi | Bin 0 -> 417 bytes .../modules/decor/icons/bollards.dmi | Bin 0 -> 518 bytes .../modules/decor/icons/carwash.dmi | Bin 0 -> 1065 bytes .../modules/decor/icons/cigarette_shelf.dmi | Bin 0 -> 4292 bytes .../decor/icons/fallout_shelter_sign.dmi | Bin 0 -> 329 bytes .../modules/decor/icons/grate.dmi | Bin 0 -> 537 bytes .../modules/decor/icons/lectern.dmi | Bin 0 -> 683 bytes modular_darkpack/modules/decor/icons/rack.dmi | Bin 6180 -> 6585 bytes .../modules/decor/icons/torch.dmi | Bin 0 -> 3056 bytes .../modules/decor/icons/trash.dmi | Bin 6965 -> 11739 bytes tgstation.dme | 9 +++ 52 files changed, 353 insertions(+), 7 deletions(-) create mode 100644 icons/obj/smooth_structures/darkpack/fastfood_table.dmi create mode 100644 icons/obj/smooth_structures/darkpack/fastfood_table.png create mode 100644 icons/obj/smooth_structures/darkpack/fastfood_table.png.toml create mode 100644 icons/obj/smooth_structures/darkpack/fastfood_table_addon1.dmi create mode 100644 icons/obj/smooth_structures/darkpack/fastfood_table_addon1.png create mode 100644 icons/obj/smooth_structures/darkpack/fastfood_table_addon1.png.toml create mode 100644 icons/obj/smooth_structures/darkpack/fastfood_table_addon2.dmi create mode 100644 icons/obj/smooth_structures/darkpack/fastfood_table_addon2.png create mode 100644 icons/obj/smooth_structures/darkpack/fastfood_table_addon2.png.toml create mode 100644 icons/obj/smooth_structures/darkpack/fastfood_table_addon3.dmi create mode 100644 icons/obj/smooth_structures/darkpack/fastfood_table_addon3.png create mode 100644 icons/obj/smooth_structures/darkpack/fastfood_table_addon3.png.toml create mode 100644 modular_darkpack/master_files/icons/obj/bed.dmi create mode 100644 modular_darkpack/master_files/icons/obj/bed_inhand_left.dmi create mode 100644 modular_darkpack/master_files/icons/obj/bed_inhand_right.dmi create mode 100644 modular_darkpack/master_files/icons/obj/food/containers.dmi create mode 100644 modular_darkpack/modules/decor/code/bollards.dm create mode 100644 modular_darkpack/modules/decor/code/carwash.dm create mode 100644 modular_darkpack/modules/decor/code/cigarette_shelf.dm create mode 100644 modular_darkpack/modules/decor/code/commercial_freezer.dm create mode 100644 modular_darkpack/modules/decor/code/fallout_shelter_sign.dm create mode 100644 modular_darkpack/modules/decor/code/grate.dm create mode 100644 modular_darkpack/modules/decor/code/lectern.dm create mode 100644 modular_darkpack/modules/decor/code/sleeping_bag.dm create mode 100644 modular_darkpack/modules/decor/code/torch.dm create mode 100644 modular_darkpack/modules/decor/icons/alleyway_32x48.dmi create mode 100644 modular_darkpack/modules/decor/icons/bed_onfloor.dmi create mode 100644 modular_darkpack/modules/decor/icons/bollards.dmi create mode 100644 modular_darkpack/modules/decor/icons/carwash.dmi create mode 100644 modular_darkpack/modules/decor/icons/cigarette_shelf.dmi create mode 100644 modular_darkpack/modules/decor/icons/fallout_shelter_sign.dmi create mode 100644 modular_darkpack/modules/decor/icons/grate.dmi create mode 100644 modular_darkpack/modules/decor/icons/lectern.dmi create mode 100644 modular_darkpack/modules/decor/icons/torch.dmi diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm index 21747c742922..9eb09cf8f2e2 100644 --- a/code/__DEFINES/icon_smoothing.dm +++ b/code/__DEFINES/icon_smoothing.dm @@ -244,6 +244,7 @@ DEFINE_BITFIELD(smoothing_junction, list( #define SMOOTH_GROUP_COLOR_COUNTERTOP S_OBJ(90) ///obj/structure/table/countertop/(color) // DARKPACK EDIT END #define SMOOTH_GROUP_CITY_LOW_WALL S_TURF(91) ///obj/structure/platform/lowwall // DARKPACK EDIT ADD - WALLS +#define SMOOTH_GROUP_FF_TABLES S_OBJ(92) ///obj/structure/table/countertop/fastfood // DARKPACK EDIT ADD - DECOR /// Performs the work to set smoothing_groups and canSmoothWith. /// An inlined function used in both turf/Initialize and atom/Initialize. diff --git a/code/game/objects/effects/spawners/random/trash.dm b/code/game/objects/effects/spawners/random/trash.dm index d5a510a071d6..e80fde513eaf 100644 --- a/code/game/objects/effects/spawners/random/trash.dm +++ b/code/game/objects/effects/spawners/random/trash.dm @@ -187,6 +187,8 @@ icon_state = "vomit" loot = list( /obj/effect/decal/cleanable/trash = 20, // DARKPACK EDIT ADD START + /obj/effect/decal/cleanable/trash/big = 6, + /obj/effect/decal/cleanable/trash/books = 6, /obj/effect/decal/cleanable/litter = 6, /obj/effect/decal/cleanable/cardboard = 6, // DARKPACK EDIT ADD END /obj/effect/decal/cleanable/dirt = 6, diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index c6435e1973d7..c286b7fa2c8d 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -11,8 +11,7 @@ name = "bed" desc = "This is used to lie in, sleep in or strap on." icon_state = "bed" - icon = 'icons/obj/bed.dmi' - anchored = TRUE + icon = 'modular_darkpack/master_files/icons/obj/bed.dmi' // DARKPACK EDIT CHANGE can_buckle = TRUE buckle_lying = 90 buckle_dir = SOUTH diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index c9986bae481f..64628e508b5a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -4,6 +4,7 @@ icon = 'modular_darkpack/master_files/icons/obj/storage/closet32x32.dmi' // DARKPACK EDIT ADD flags_1 = PREVENT_CONTENTS_EXPLOSION_1 // DARKPACK EDIT CHANGE START + base_icon_state = "freezer" door_anim_time = 0 enable_door_overlay = FALSE has_opened_overlay = FALSE @@ -23,7 +24,7 @@ // DARKPACK EDIT ADD START - handles fridge open/close states since parent type handles it alot differently /obj/structure/closet/secure_closet/freezer/update_icon_state() . = ..() - icon_state = opened ? "freezeropen" : "freezer" + icon_state = opened ? "[base_icon_state]open" : "[base_icon_state]" // DARKPACK EDIT ADD END /obj/structure/closet/secure_closet/freezer/process_internal_air(seconds_per_tick) diff --git a/code/modules/food_and_drinks/equipment/kitchen_utensils.dm b/code/modules/food_and_drinks/equipment/kitchen_utensils.dm index 4991cffe03ce..920cec2408a5 100644 --- a/code/modules/food_and_drinks/equipment/kitchen_utensils.dm +++ b/code/modules/food_and_drinks/equipment/kitchen_utensils.dm @@ -22,6 +22,7 @@ /obj/item/kitchen/fork name = "fork" + ONFLOOR_ICON_HELPER('modular_darkpack/master_files/icons/obj/service/kitchen/kitchen.dmi') // DARKPACK EDIT ADD desc = "Pointy." icon_state = "fork" icon_angle = -90 @@ -90,6 +91,7 @@ /obj/item/knife/kitchen name = "kitchen knife" + ONFLOOR_ICON_HELPER('modular_darkpack/master_files/icons/obj/service/kitchen/kitchen.dmi') // DARKPACK EDIT ADD desc = "A general purpose Chef's Knife made by Cookoff Incorporated. Guaranteed to stay sharp for years to come." // DARKPACK EDIT CHANGE /obj/item/knife/plastic @@ -197,6 +199,7 @@ /obj/item/kitchen/spoon name = "spoon" + ONFLOOR_ICON_HELPER('modular_darkpack/master_files/icons/obj/service/kitchen/kitchen.dmi') // DARKPACK EDIT ADD desc = "Just be careful your food doesn't melt the spoon first." icon_state = "spoon" base_icon_state = "spoon" @@ -245,6 +248,10 @@ /obj/item/kitchen/spoon/update_overlays() . = ..() + // DARKPACK EDIT ADD START - WORLD_ICON + if(item_flags & ACTIVE_WORLD_ICON) // World icons have nothing but the base state atm + return + // DARKPACK EDIT ADD END if(reagents.total_volume <= 0) return var/mutable_appearance/filled_overlay = mutable_appearance(icon, "[base_icon_state]_filled") diff --git a/code/modules/reagents/reagent_containers/condiment.dm b/code/modules/reagents/reagent_containers/condiment.dm index bcf0cc7e76c0..565f1539b32c 100644 --- a/code/modules/reagents/reagent_containers/condiment.dm +++ b/code/modules/reagents/reagent_containers/condiment.dm @@ -331,6 +331,7 @@ /obj/item/reagent_containers/condiment/ketchup name = "ketchup" + ONFLOOR_ICON_HELPER('modular_darkpack/master_files/icons/obj/food/containers.dmi') // DARKPACK EDIT ADD // At time of writing, "ketchup" mechanically, is just ground tomatoes, // rather than // tomatoes plus vinegar plus sugar. desc = "A tomato slurry in a tall plastic bottle. Somehow still vaguely American." @@ -340,6 +341,7 @@ /obj/item/reagent_containers/condiment/mustard name = "mustard" + ONFLOOR_ICON_HELPER('modular_darkpack/master_files/icons/obj/food/containers.dmi') // DARKPACK EDIT ADD desc = "A spicy and tangy sauce made out of the mustard plant. Great on hotdogs!" icon_state = "mustard" list_reagents = list(/datum/reagent/consumable/mustard = 50) diff --git a/icons/obj/smooth_structures/darkpack/fastfood_table.dmi b/icons/obj/smooth_structures/darkpack/fastfood_table.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0762bebba22d1f4086a8ef0112ff8000ec2a0106 GIT binary patch literal 2543 zcmb7GXH-+!7EXeYNRhViA&vyF!AS8T&w!N6AR=HvDT+!F5wIWu0qK{3z=%NtLs0<< zAP6WWf=H8M5D`Hm(z{V0KuAy%l91#klX>&rk2imw^W&Vo_Bnf>z1IG|Z?BVj;`m_& zSq)hj45r{UVVAK%Fj!>4gWRXG4LpuMcr;^EKY4cJ^%H( z>5FY!X5Cl1zBGSt`k4?Hxw5^-t+(LPy-Wr7*0C)pMZ2Du5R2!=Ge=&>Q1|JXDYj;p zd)}VJ>@&`p#0-wt4fW8e;$A-7RQG-3aUic6218Xl*#6=gS-_ZndetpJz2_TdY0FgW zXm=6*-pRV=TWZ}7kF}m0t0{Jlk641Y*mNImZz0@is9$mzT5pv7YH4fqZOV@Q6t?c%yzsG(b~b)`&px7J3IC z%(@#~W3wKK^Ye(FbO!pGRdLGdH^`gYE?q{vCv$W7ilD>1;e^h6Y-I}e%j#MPY;=aO z;1w7YSgr4^7hqJNcX(-?|9P&uyXOvaet4q7BaU6AZ%|M;rGPIadI}ig;P12}a(j5O zAN!5S9v&XEUcBhy53Kr7F?wYHtq4eyyh} z^9@9)p!XP(*-)VLP(;_sVOO>3cXy*8%L@?1Lbu5}GI=5kT&(<@aD`4Ns+pFQ`+J!D z37wKgXKsY9RRx+f?92Noq!Jr8`+)xLFac;nCduF<J}!dlf7EiFC?j?G|V)0k)qL-?S<|(tlXWbc$E6(nhQa zlKOs4-7-(1KG@G! z`$_^$qpjk$6c##R#Y@0dOEiG+zYC%6c{X9mV@`L^J%rCyZwW9=Ydb^ zYo@}eA7k`ii9eJH1w+Stme$?c4)=d8FWJW)IdsN1336Jh0GoUOEz6Eo`Zkx{?b_;!Itt-w4Yej0y*`Z1DbFzg!(J$@QC5ij5G)r26(67J-t6>GE6h`5|&jHnB`Xu zYyjT{n)h&~Q;Pj`Wc>kzhzPcf=&<+sgCaLgxGJ6`Vju1-v8>}tO%TR%;ZtrM8?&CG zGnll#sbkLJb6MKX7_Zm4r6?$ElH^~4GD`BChPzr02Gg<(4ut{Q#opLyrZRuMuEBLp zfR2%y;IeXH##~jqMWlX)=+nU(v?a1%Bm!&zpAoQA#Ms>i8jw%IyPU=_^bK@Wr3Vf#$xS`a1LMQB1 zrX+Sj`2>Orf2N(9Be}G|f$}fE%j))RFFM?*lTQ1yz6CDx0Akcy=bGab4DVlL2C?-~5VH~RPSWkoHh#JF`pzgdSDU}`;Qx-sOECH|pI(8p zKe6@(W|tE zw^79H1BLfNd1{YRDSgi0>&H#V zK-&foYmF=I9~Qx@@UtM|0^{g7EnuWkb%1gH@@(QJ!IJTNis4(1Q`{!|4v59ry@$-< z>ZJWW4*Z8I%Q{m9xpvh6d16mAbRU~OHJn#9$qn*ROk51ex2x({MW*4r07$r<7SVua ze2Zg>)NO&uRu{P#QNDZptfFalIK*ZV3J63gVuVpJ2_*8PN{jgHF^=;e;o?H!C4zz?D?>byS>u~3Y_DY8zlsI0Czxn zo^r;5a_3qWIZpLaIB?EH@}`2Obqnzh6ZxiHw9-O-uk}GP(F5Ns?WvQM^ZX;l9nhGj zY%W8mtN1|}L!$vBYh3|6tB$x=MgUi32?;cc)Q>9Ue}q)D{+oK7%PFi}?K60(U|nZT z>UP$CoM4URmshK9fy}n9q)0e2m`aoAqimDbbXr#1eMeCKq&+CFO~9qn@HDf33siT_ kOlw-_k zUi02apcrR?M`SSr1K(i~W;~w1A_XWYS>hT|5}cn_Ql40p$`Fv4nOCCc=Nh75s%NNY zXe7+&UIJ9KBQ?S^&C^qhfdj~4WsqWIWncudynt95$_9BugOM35&IDu|GBPm;0_i9q z&TMA^i{}8@AdmpWApI~J-Btz$W(I}{>ob+uWXO%oSFr-48FFtJ~t&U?J~fHQ`-0+ZLZ43R3-nO_5#(-kfQg z2X$0uEM?g|C1IM-nNMtvrV?zoPO}QWY4%{hwAT1c=i%mqb3z0r+ATc9;T|4h(8RTF zt3Z~*TzLe4F!S_cYgR zJH3sim+QoX>#y%~{rmJ(x$pDGZ{XS0pvqqFJ5CXSMwjuRYM hBtL!?+x_R&Uv8)Q@{5JV_Z|a-pXHAJ=_7_wyv%9VKE`;Z^|v zfU&kRw-?9ZUkfcQ-f=quMgTx!MYN;yIrB3SUg7>>=lnxM03hn&O9Dut+o`m>stP>V( z=tVM$YA)zkcfGwP$YiG`!ZOkaN`s zeV1cI9!7;rhp!J`6R!AGsLs+@#Ma*LP?a@HU0Za`&NsnE>oe{TM)HDRA&`*~KrPD1 zn3~vSL`zk?jxi#VT)EF2Nvw%Ul|YxGn48CqOAC!X_a~3_j~r0F&RDg0a^yhyto>Nf z&a?aOaxhB5LrrTk7paB}7@6W#^MMURR(88fNE`q_yIGqba*TR7Gf*C);-vg~-Yf7b zhjZ@uZ1V}g-~N`Sykl*A-fG1yBhvQq3G3{(u3OpvIKs?K>7CO=ZTxPZw3$jHHG1!j zs18y3ps4KU9lDiZHk0Y=>%++M-6|2o=2rW<$8gUmO-?Yt_B1fI`h;W{a*+Xci>S)k zfMz|gN?pL;7NC4uT3FmcV1VgQNPhSDYt|*h_&TAFLYyfzFoaFzk}Tw312*bXI`ONs zQM=;g+m;9Xl$-eC_PDPgL*Gx<+L9?k2mZ+j&eC+xps8waav%c%Y6$vy#oQ=Vzp|{qaKn~mZ*59u1U|4xwy|u z)BU2c;KnQW>fX)0JuqHA!DH5n-qeJnrb{9p%!+9G{~>CBJkYZhxwVuICDcwfmYIOR zErMRk2WeD-jf36sS<(EIa`W@7?Gd1ANr+5^b{j%3gx?5pIowJ`JNQa&5p^r=fi9b` z?1{{9(}erwYsdN`0iH@5kIBFva;+m{|IbGJw_hKD>o3gaOQEJ?^pSkt*Hllf_w?1W z9xzdhgT%E)+@qHTn>eC1|A!>=F4q~_B=9mv7;#lOR1LnwB#)`l*9gl@uVpXF77qQa zKa8BKd)}N;U=YBAlmC za^nD&NKfN(k8-a5U5iqmv%Ph65;CgDfjj?bF=17*W&PR*=^2RXK2uQL^_ZoPhZtJ!?XvU$ zhgVEp{JFSn^Zvu*ewu=j-Xp(H^17F<6e~r;ImP-fg$0Kl!P7%nD|%>bEKwU4PYZFQt{>7EqJMfRE5&D705 zUdd6Fb-iqVWnqdlbzUluI9>pp=%43eDjp}z5;i^K_ROd~qUfHob?Os++2RMYwn=!; z60Uv3I;+nNo0a10rQbtB{3D89An5TMlE;`!)LZUA_@}0gO_~D_4RfdAf)R=0RO7EH zaap8y4G>PPDFreu)e&1ojP5hyz8q32hoS+FoQOu#Co z_6fc%j>&0f+Ha0BE8PUHNVk)=lT9GZ=eor)S+MDVOzr?IoY|9Y55vq}rME5x zkGZ>_WkCm+?~RRX$dIk&GrZmA;bVvZvu8A*P1>)c?^{IfI z1yyJUk->zU%Ms;Y+BqaV==xO1B|2ZSCS*!3v2Rjl$@}+q+Bo%;hW4wX#t*st0LG1W$wX*FOT$H{8wIv^++6qvBTo ldZ2A$F;*8^n9fhg5|>5#M+sGD#a}M~u(mjAUTW%b`7f+1rtbg% literal 0 HcmV?d00001 diff --git a/icons/obj/smooth_structures/darkpack/fastfood_table_addon1.png b/icons/obj/smooth_structures/darkpack/fastfood_table_addon1.png new file mode 100644 index 0000000000000000000000000000000000000000..d3910b99b73129a3008164851fd85baad672c174 GIT binary patch literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^3xHUGgBeIJTG)IXNHG=%xjQkeJ16rJ$YDu$^mSxl z*x1kgCy^D%7YgtRaZQM?U9s)hvD-Ht*)%M*e1XE&yCNci6kAD+ zXMsm#F#`kNVGw3Kp1&dmC@5Lt8c`CQpH@C!ZXd&Q;UHE$YEuWVq|4t1hTwFdX4{zf&^ny_VNRu(C~Eib6Mw<&;$VOH@Hv$ literal 0 HcmV?d00001 diff --git a/icons/obj/smooth_structures/darkpack/fastfood_table_addon1.png.toml b/icons/obj/smooth_structures/darkpack/fastfood_table_addon1.png.toml new file mode 100644 index 000000000000..90965114b28b --- /dev/null +++ b/icons/obj/smooth_structures/darkpack/fastfood_table_addon1.png.toml @@ -0,0 +1,2 @@ +output_name = "fastfood_table_addon1" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/darkpack/fastfood_table_addon2.dmi b/icons/obj/smooth_structures/darkpack/fastfood_table_addon2.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0f854ccd873957ea4b6af6b7f408b07f42e9eaf0 GIT binary patch literal 2616 zcmbVOeK^x=AK$D{*`ZWI8mXoug`E)bo6K8JA}?`@^rodkM_xv=P4%d}jglUTc}*xz zjmX<}aBz;=>>1X)vw|Lm<$Vslj0hn5Zjf;-fDoM90NKAh?Isg}>Bw z+ZuRsUWcxTpm`&GBTpE`V%8cd)~xfru;xNJT%p_;k#%`u`w$FOf@&!d&ZJT&g(I=` zvC*5_)pbT=U}0TrvRw=NSCf#YT9;;dqVbi1XlKR)+mDatrz~zx?K3-&4UVV^P$9js zn`)4l4X+J$3li1zRnvOYyQVi!e?I`aGdx6y_`M}A8#7ESgN@4>y7#;u@6~QJoMQz* zciD^thS=DQu%Z$YOszMYCghg3%|_RjGFa?=qfNo`txs{`M^bv@*Y&^bNps%ZxIski zPCGqW-Nz08aCx`D)LwO+WM)4f6xYB}j)>!=(6wVeME{J!atK6M8_#rxQox6uZ za;tCQ*}g&C{`QaLrEv0MIB?tXUq-6WMck|BurW;60!Wuqro7(RC2x~RBrU-2{($D^ z5UtB#3I`b0)S8w-wz@)Bn=2L87fd_WsN75Z8;Dj&M1Z4Icl~YQe7pLiE##kpoQaP? zLPX}aY-j;mJ3z}Az3MDvd){9IL-r&ovZ)`~pqlxR6o1D*0GWqEhD}?>Ia%V*Ut((wX*5iYIEy)Tgc*+olycymdmH<}X$o zB3j_bfcYF3&Y+o*SM9+A=5az2)?p6B-_cfSG& zhDXzoui7+3wwQWFgDQkp6{lAGurg{!J>R%Rw@`YvNGUj<=#ppSE+TqG05Z10Q_54) zF~`jzej%($d=ZCdAdF)YCH?sWX1oU2KtGzn>{9E_j)5tEr)S?pmvd-B64g+I@`ANBoI1Rx@@?nD@OHby-~1^3P$u>XYC{pHD7io#}(*` z`9mP7^WzkU)Lc<(p@0hH+#}<}@9Yrpcep7>u0k;DU>=#l64yMR)68iVCpAk&I#qnE zcZ}v`WG`N#7lxp>Sq6~_PN{BYUa4-KAV*+_(Af7%Rt>cya!dVbaDQe^i)Ml+*oOdM zjNgX+?}K_yNVZyEUSca_≦$rl9-ltz+4!<*Pj>)UNzWXm-F6PbO0mfAO#^^SMD* zjZ!d>*>Ev5spTP)v8T-9DsWt8dHDtb-BywPik{a=$+`3>hfbiM8J_yWhyGRCe|y4Z zsSKfIJ@=^W|KbM9FN$)b6Xo_esrYs4p$cL9l0mb!IfCI zWuf02RP-tfEN3JKs8GQVPYMjoy>_vs!|sR|Gv@f{l^ikfC_~69(Pybp;E= z7q$D=rQ_`}vweea?yN7TEEtR)TK^vHG;D?*LFFX7aRV_+hU>;sg-PTg=KZJDb#uhe z+s_O6*3h#eWcHALnEBkaM+2f$`;}S&8~{#@66mtUyC-OI-9F|pt8~4x751cc1CWD% z6{tof`LT@RBQh!b3uM%5%c3uuSrZir!1dq#1XzR?`22}pUqr9EL4gW#U+9|sRP|X{ zlcHUK#z86_wnd%t-LXc$EHdMy{5z{bR2i1OHJ9_>3igxoowZQUn+rEo6xYa@Q_W;``=}S#1a(ncUecnA%B@;N(~TJT1;m)jCIMJd=oc^)f{xV-bNR zJuU;UFB5fYda|1cChx??Lrb4%|mDLTaXTNv3zo+DD>&iC5Thru*`;)&i zST@Ei$mp+kIcP3l*d#EXKXcs?Ot!gIz=*I?>&=(75>@Db{8N;Ku7bL9ahiCdh% zU%4*Wbg6#8g*;<(KziyWz1~Ov!n=t@sRvjCH7R#{I!FI#cr@%V|2BH zQKlaS>VZcd+F6{|IfqZXbu{109TsLp{JNrdtmrwD`J~y9HFq*P@>;G^V9#Lg{$1vu z2KS+<#4||iZrPIGroSx+Kb4@DsQJQ1Dz%Z~1!SZX ztRIT7mKvvs=!sv8BI43ru6odiyvKA~Aq{lDJN zdr*qu73@6-lsQE&mmv0>)me{>fiP$JN*Xg%?*!~%*)WI1Z5Q;4^{mnZb@F2So|y*` zjJ2lkTTC04|LQL7s`mGno{SJXbOY|)b!E|)e}oWU&%>C811GQj2hMi> At^fc4 literal 0 HcmV?d00001 diff --git a/icons/obj/smooth_structures/darkpack/fastfood_table_addon2.png b/icons/obj/smooth_structures/darkpack/fastfood_table_addon2.png new file mode 100644 index 0000000000000000000000000000000000000000..e861a41c3188f9a56d8d1937ea3c46d4b94376ba GIT binary patch literal 652 zcmeAS@N?(olHy`uVBq!ia0vp^3xHUGgBeIJTG)IXNHG=%xjQkeJ16rJ$YDu$^mSxl z*x1kgCy^D%7YgtRaZQM?U9s)hvD-Ht*)%M*e1XE&yCNci6kAD+ zXMsm#F#`kNVGw3Kp1&dmC@5Lt8c`CQpH@C!ZXd&Q;UHE$YEuWVq|4t1hTw;VPQ7;|NnHXb=Xp~8{H{IE1p<} zXx16n=*g%*&S2a#=j!eD(}i-1B}}J3Z}edox+eK1n@fC4|8b3jI;u04vTUA`Fiq%8 zP*bFrfj4K`Pj*Mc7s4v1Saok6H}EJ9zT(V` zxoh6Do46;ud??G;RTDVUo1(i$z}ihOV@gZdCj?1 z3)+{R=y#V0k-LA8w`tog&6o>9v1S}X9SVnU-|M!x6_uU8%UNRnOAbqaQ22Pd`njxg HN@xNA*w4b# literal 0 HcmV?d00001 diff --git a/icons/obj/smooth_structures/darkpack/fastfood_table_addon2.png.toml b/icons/obj/smooth_structures/darkpack/fastfood_table_addon2.png.toml new file mode 100644 index 000000000000..2edb630d6a89 --- /dev/null +++ b/icons/obj/smooth_structures/darkpack/fastfood_table_addon2.png.toml @@ -0,0 +1,2 @@ +output_name = "fastfood_table_addon2" +template = "bitmask/diagonal_32x32.toml" diff --git a/icons/obj/smooth_structures/darkpack/fastfood_table_addon3.dmi b/icons/obj/smooth_structures/darkpack/fastfood_table_addon3.dmi new file mode 100644 index 0000000000000000000000000000000000000000..bb2259b53b8da77bb7b3cece4fdac11aad7f109c GIT binary patch literal 2889 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 Bx77du literal 0 HcmV?d00001 diff --git a/icons/obj/smooth_structures/darkpack/fastfood_table_addon3.png b/icons/obj/smooth_structures/darkpack/fastfood_table_addon3.png new file mode 100644 index 0000000000000000000000000000000000000000..236183de314078d20430a6c084ca11588b40da8f GIT binary patch literal 685 zcmeAS@N?(olHy`uVBq!ia0vp^3xHUGgBeIJTG)IXNHG=%xjQkeJ16rJ$YDu$^mSxl z*x1kgCy^D%R|)V5aZQM?U9s)hvD-Ht*)%M*eET^$&r3>nr5OJIS5xVyx~$(9s8D3S zI*?@GDGBlm{*M3*Lif*|1B!DNctjR6Fz_7)VaDV6D^h@hk|nMYCBgY=CFO}lsSE*$ znRz98ey$-3rh0~YhDO4S?j=A)J5nP&(>y)37&w3&Rt70XRt82O%L|C5p=^-1G#Ht| z;!HrcAtMumAdrp%;>>myuy_uT4FU;34AKvy(QRd500zwjb_N!p8UrI^1I7gqb3uAo z7eLIK24sT(6VN0ku*x7y3m^-s%h138BztrDtf?orbH@Yi6ZCX(42f`mJL4eVVFeC{ zz|7UJ|Nnn~pkPLK1Lxhu&i4tP47D4-B|QArkn&)A^?5sl_3R}_Bd%4Rn7?L($<)2wam#Z zJw4*WAyF3>&AASqTYd*JiB`2s_I#)SqrQO>vzMs2E_28Yj`zCF2+143fF1zP^KONj&zTwMH zw-uYWZraxD_FviBB6fkWz?%&Zl&x26(pYiHyW&EG&=TggkGQ=So?>p|>s!$NxBB$C cWm7Imr|eg4{l5K*FesorUHx3vIVCg!0HxO4jsO4v literal 0 HcmV?d00001 diff --git a/icons/obj/smooth_structures/darkpack/fastfood_table_addon3.png.toml b/icons/obj/smooth_structures/darkpack/fastfood_table_addon3.png.toml new file mode 100644 index 000000000000..21f6b5ce892e --- /dev/null +++ b/icons/obj/smooth_structures/darkpack/fastfood_table_addon3.png.toml @@ -0,0 +1,2 @@ +output_name = "fastfood_table_addon3" +template = "bitmask/diagonal_32x32.toml" diff --git a/modular_darkpack/master_files/icons/obj/bed.dmi b/modular_darkpack/master_files/icons/obj/bed.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c283250197f9df7a0d77e4bcab759b4f246164d5 GIT binary patch literal 5749 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 literal 0 HcmV?d00001 diff --git a/modular_darkpack/master_files/icons/obj/bed_inhand_left.dmi b/modular_darkpack/master_files/icons/obj/bed_inhand_left.dmi new file mode 100644 index 0000000000000000000000000000000000000000..64022c3fe59e29353bbd5db336520e4eb6b32ed7 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSJOMr-t_Kbr2-K1_WM-CNV7s=$ z*AghsSQ6wH%;50sMjDWlQxy_X;*wgNT$EW*l9`{!z)&$KIIN(k^!u0Kf{$OHXnE^u zojY?rctfbcMdJsLbk6%|o@6NM>D^&r9Atdi*h^u~qe(|5g(w7TYML(9uvd5Q>^4^2 zyh370Z@2MU4MTI$BW6#6!V10?GfML?R7yyF>a3g}0<<^U)5S5wqBl7~g4LygK|rzT zfw61DiA)bBdxs}>HB8zLPqb8=?Hf3xSM4em;bA*)@W2FyMKhHol{RpHFfhnrxOnEZ y#5D)j84H-s3NWUzJ!4Kd_W!^9i>G-;3=FGg3O;k&QtAh^hQZU-&t;ucLK6TDIBKf^ literal 0 HcmV?d00001 diff --git a/modular_darkpack/master_files/icons/obj/bed_inhand_right.dmi b/modular_darkpack/master_files/icons/obj/bed_inhand_right.dmi new file mode 100644 index 0000000000000000000000000000000000000000..461fcb2c7a1b67a725c778eb7e9dba0d38380602 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSJOMr-t_Kbr2-K1_WM-CNV7s=$ z*AghsSQ6wH%;50sMjDWlQxy_X;*wgNT$EW*l9`{!z)&$KIIN(k^!u0Kf{$OHXnE^u zojY?rctfbcMdJsLbk6%|o@6NM>D^&r9Atdi*h^u~qe(|5g(w7TYML(9uvd5Q>^4^2 zyh370Z@2MU4MTI$BW6#6!V10?GfML?R7yyF>a3g}0<<^U)5S5wqBl7~g0-cAqe+rM zZTZ2UK7t8Z@=g!f%Nj#D8buRMu_eA>*VHYaZfQqloFA+84w95^p2dE;bQKPP8b zis5fx%m4psf*6d07^KP{uImCSV=M{s3ubV5b|VeQDXj{LC~-+GPAM5 z6C74hRQml(aKXo~Pqe&swa%S6AG{&d;G*$^M>^+yG*2=V_4MwrFb*=lZ0w~l=h37i zlR^}NHLbU*ST5e;(AjOQx_O0!M$(C+GsC9Ln9Y@V`0CSXOfy|IcU;lb-tlW^gDeBX z)m3V9-LK7g2XsKHr;B5VMQ?I~1nU*no{So`64o}h6*cPYCalLYxMD7dY~bQv^xC0004`P)t-s0001z zAUD6iZOSZ6-rj!y|IEL{zv}GhZgX>f8!u2-Su{61JR%!;AS5?f#3mmnmzNL~KYjlV>N@scF%m zS-6NovV1U8Ga-#vIfPL*YDO|-Jt$^AEYF%v(VtexluEvsVZ4Yze@-)lP&Ic;Gj>uw zY)3LkK|{T*Y^7!>Y(6K`q+rU9H;Gg?b4D#{W@k_@En_t#%8xkEn^3@pGk{MtZ9*#^ zXC{eUOFTI&ugc2G+S=N*w6wXox$5fb=H}+*^5LYp!c$p& zm*}7R00001bW%=J06^y0W&i*Hz{b8PE)}R^D6bGj!D%c)jFJ>yzY(Y%3v74xcQ;rr_`Q164KJTH8^H%8$8Y?4II?WQ zHkxEEXO$7KISZI(T6lTu}pi}!=is6Do`F|FGjfoR^&iTQfmu4 zL&}gMn^rq=?+~e9<-0AYf;)$L{kq@EzjVQ? zrkwxp10!m}P6A5abN~PZ2uVaiRCt{2n2T4_RvgD~n?9~dAXt+M$fKoYZRzL+IAA(; zo2X-(vMHPE*h83)O|}_bD{)iMF?HfU?eC_gq)l$_IW|3UXTJ~7drrQG`}^d+I2S?~ zkw{dEMk0iVDDRSJBo>zvkytG1lPCFk*Y)G^xFk_Yl44P>5~93&0eC+t4qsBlTR@O^ zFF>GwC=i25_7o800T3ZESY%PcTV ze(LDp;8A^OczCEOkWL#06OfNlR-f_&8hH=`BcmWNIx^HT0!m_EfDTX(fkqyLz~~4F zjEsT+b&ddO2_&dplhTGjvn4?Zj13Ns>Epx0<20E}QpXxN5MZ!0Ne|lK1oW{nUDwCQ zb=Y6BqH8v80hYqBw_2A#CYzneW;5JMxqN;ypU-&+yyZzsPBsOSp3p|_s9%_vm?&@! za{1!q$a~<`)*{-|rMCaRnN=!WHP~sBq%s2XnKtr?>*A&wRMJu<(&f zfJ;+=OJ{}h%-rnE$7N1^LMro%3-f0yosUbZH_iIQUi2QgkKv_r=P!IxUg8QYfBMy52?CpU@7}w&aUjr^`wEauW+{{9)(3;!axU+BYO?gW7{X?^~AjS7-+HhmW>*9$VIv zkm}d!+dG!^*n04HNJCKDsqg*+Q}A>*tU0JX+pa&~`q!`i3qcp%=3Ca*^IgB+-}CQ5 zn4c9Hh+u4}TGc gE`T5ig8ct@1$hG3FmZj|iU0rr07*qoM6N<$f|Z&uwEzGB literal 2572 zcmV+n3iI`eP)V=-0C=30kUI*)Fc3s*=@i25Lw;?VU=v)#S1`+J6$vaaNE`e55iz7op>95J znrY3we+;APo`YT~<-m)%nd{-G)fTMyVlHQ`JcXB+-DClwA{)nS5t1}o*^qLHPFlGH zk#_w90}>{JIIU0tBQG><;M`1=BlL_sm#Sj-&cg8@-ABmbnMbM86#KIc6Dd!BR7%@t_~z=^W$9ObodH9&o27`Bt;=zsANYdbp9 zmlo(Zu|#V7i6ldKapA%djt2V7zgtmW{zH6GdmOgE`~v;$udq6zcC>-px$|UPoDj%< zS=XC5UB4$G_NBlx5E^_-%L|?c8a(k%YZcl%2R-!#A3lQ7(HT~br6Z)aFBR#+i{ar9 zS3)+Y9J~;E@_Mb4tQ@Z=Pip&8;5QIj0BNDq z>tE$)s`HB=K?CR8k^g2>U{Nfoz9sUu^_@ zlA3j;-1nB0tZduA2Uj{yv+})$cUdmKbN~h09>cLCFL{3R#>v0o&KLiMc~OI*(Lt~K zR(`9BE0S4Rxm$lb?9(fBSnHEJ(fRoWuXdqb-gczz@4x%^RW*CkeJgn9Kc-f*r2gjz z(5RHm`46{0$`UVxFOP50vHX#5*Kw3eiZ-&uw^5?|(=|Prlzi_&&L;=*iSWG+M5OJ! zxWViv8ZQCJIppkXE*EYuF0w@B?^bGIy?Pbq>mw{tITXe_(=0tukjIiQ6%ycI@z~qid=c6398>X29jX?ug>>-o4M@=FLHt`$Bd@2@|S4 zQu~P@BT%JrZVr2UF9YsGWrD+Xd@}P2u=)GodR_;Giki*UsQG0zYiFTj*ucuX)A^@g zqf|xRL0{+l+V$9uuzj@=P=KeNsKKAl-SCu&y)|E<EC03rXE+AKv$;v84I)3$zUexRgC;;)3 zgOB>vy;wZ{O(_QliYd3QH0I^9>}OBsgfvKtJS~Fsly)F^2%+{seDd*`koOPQPO~8r z`@!IyugFZt#MC^iBN4RuN>DwuixI(30NU|cIQ17BH~T3T?jcQ5ew%1?t+#$ z4jIZESSP<`&R>`w#)7+Em0bX@up9w?Gk`*blu(FR&HVb5KCQB(liSv^4{5Rt=6p@b z!x+BNgQ-aqYZr4rKLJ$hZHB7|bC%Nbxyd&v>1>sS0YEFfIVj`RI?*)0mj4s(1(C0VRAeroo)j(YK14K#J7<{iMEC+ zPa@|ZIM#y4H@iHkNtY|SQ{;F`f$Z~bQj?*|hq|cBy&aW9TbPZkb@r(4<0pWZ<0~FQ zQE>sw2`USPAQ8@9TKRje*^&lh=Q*$Y&Cf52>X4V?L)e#Eg!#z<_YSC^Ey9ke|GCcq z;=>Q&C4g0y>lrw4uCohzy#c-5z3g;LWrBBvuLxHf7hteIh=26S@#beXmP}4Z#GRQl zPKvTGl?b!8doWHrpeT5dIiHxAS-`Y4e2DeMYe6b4-ozE>=Xzcx5Z3vXsU>{1Kn^fX z&7ih$9a|451YNu`0@blH)^4yYZ^z0zTo{`&F`?++g<6E8vA@6l#}N;fc381`5l1Ip z%5&6mCJ3E^e}85~^u7HSVc)_3;pAV@cj-L4KJ)f_9w!L@9pMQ@Z;Y^ve+N3|S`gKt zXzeE&vG06>5%gUU4gT5ZpTnR2_&ZFDj6qwriCqhwz{4-dfha;|R2>szKbZ+CfDjsd zFcNWa3uS+`AKbzbQ~-L)y3d|NbK4W1I=c3K`obNo=+B&y9KfQrA1;GgcL zr6uI&=cBQ)kqN>xI5-HC$&^&HAgUSggW8Rpb8-3mc={qtow@uq-8xx1KJLF2*BHEe z_img&f1WwsZns0L)v~9bFdB_0EiJ{ZTe159E8d897VrEFx3ewwl|Q&=t1{to*T-7~ zdb+Ess*s+Zj`8tvw6(QiXlMvJoelkEVS(vgef2C}4i!tjCOJAGk zQfq(+qTaF4iI{SQI}|ybF3{=t^RL4HXH2UNsZYX5=df5KwE#)=HgqkL5004jp0{{R3ySVN=!7VLlXJ`Mz zQ?e>5$&qB&GBQw5Q2*}FVPIfDKtNYiRQ21dU`#%DX`qm%zQpC@gKSZ%lxn-FhQzs} z?En66Z&_e$Z00DGT zPE!Ct=GbNc007o{R9JLGWpiV4X>fFDZ*Bkpc$}q@%L>9U5JlI?SA=#e;%nb$*h1ZCO_4yDxtyCj1BuBYIi(pno>Sa{v0N*%C%feeqmDCI`)0er zs0LouZfLBd4tyEil+eW$ScDPd#(HUuQE8}zp&r3N%r?|qxvD;cJFkME_m{lr&)eC7 zU;zQ80eFB3<#Yq;CtFa%F4|wYZJ^*(gggExk<=|nQ107IGgp|xzh!AD!GtY7qG4l= zcy1*XbKV~eQzgP%nl)?ItXZ>W&6?#=i*e

{7+XHEZrnVBfYHS_e~CU9Eb8A4#c2KZIlMK%Sbg^|Fl*MVS+jmX zEs=(oPpxo;6b>z)obL_;+=au+z3Ue(Ug`kLVdd8Vya%EHd&@oR*N1N$@WXE=pe6&b zzuY_EM;$Q2?MFJGRzC4Wv;O!&yAnnb90O6LkK!o$9Vns^A4`qr+pO1X0}z^Qb!P%@ zA>fwI;^UK$55UdZ%-{<4;EDj;{?TZ=T?$jKRyyM2pF&8MN&B zHtU@O;HMVwlgMBs5%2FYAR~jE)33iayNv@NPz4z2fSe36P7rs`4=+7{;$wvb{M@Jk zj8+)XlLvzrr!FQkr~}$F$UEPp07Enn6M&zAwiVxW8Pu-pU7naH4ZB|!?MCk#NDLQ4~Bxh;@&{GDDc{&J}c%IW+Hp-=LQS@EA)<>XR0tXiiH3>t z=?3u-#Y%nGlQex*O49@d{ARMZQdt&f^_P&0B~RG{XKqvSAT0j zDmwuvs{mtN81Qc;1=t4efQJ@PHr|0J0d4|#z6N>Bg*EFSCWVvEN(fC=D3 z0SADU!5#nx;4x`+L_s&;p$jmZ05D1O%67TzVi0gLVO@Us)&VUU>;zx|o@z-z5O6%!WbiN{-~bOA02PJt0&g)BP~C2n ztIG=T2my~BfL$J|Aol-Ay}gMQqWrh7-rfpWz=Z`!T`m+L^x%=>K@2DvVr?ah>;4fL z>I9S-szT%W>N+2=%VQ1TxvEw+b#4Jgh9n{ZD159kWK(j4g9HYE!SERPK8c$iX#uka zuqY7;j|sej3266VY|w%Xn3R-@QeT@BH=M69&e(K4UZ9k=UQ3@ z$BG4Lc&ryt&)`@<`%0qskOk0p2JI_}254q5)-o7h8L%)i1UxPm5@QhTuj@e#@T>tE zd?n#EJ=mYYeO4IrT#@bl0ou2nh2b#>m=y$Ik@*5Vc1i=p6D=q#g6iuCs0ap3#r;BA zL)l~k20{JN1mue@!24n(m_bt*&{94Q5cVZ?nRh;CJGgT^*yD(IK4&|)b3E8%0y2)j zZ0BN*=Vm_$pnam$?y}Y58IW;4r`=_%#V;V3hlJ5lK;M;6(*mp|O}zppmwzi=QsJNr z48UFVxfofC7|0U>rYLX(^h%gqzE--3&UsBy00F5l$69c@`T z22JMT<@-cw6^EoZ-?Bf3V-1I-c#LUu@T(;=|0000ElE1~K-m=~{B-rL1ENGfFi`m=L#T>t-2y*3npo5YbJUnZ`9` z30bns5+Q1Gi#vI;hin=9cIkD$yif1bs~U zJ7`P5=Rs$J!j8VtiGqG9=S1{$ca&eMomX*UNh>WOZ@Jj7vGf`()yZOD{Q@gvHBTN} z3DEig*Y?EVCg|pUof1#N^2d&FQt(f&jvpS+9yBGAzKvcqXYqyNx6*8`aHe^#p!Z_Y znU1?MuK@rtZG*SC9LZQ_#?y~FO7{5h1mj7EWPii-y58R9`BIB#numytR|W$d{dwef zn*=8uOYcpB_!8oTDpm@MgCX5rlJ{NcV8!DvO-FN?Rp`|o>DO5rnzzsJ zd_XldtwL4borZ%66c+p2Iv@tZvTCLI`6<0yse&Y2*F$&^LQ{F_b9N)Yd9XKwbeMTbVKAQm;%s1XlsLC?9%$AtFP)3 zMv7`JD=RBrF8PS;l;41~^Z$`5URqk=XmmJOV$R9Dj$|jy8Q$z2KO5+7*Fw!UrNWGw zn;7Uq>+ITy*$qm>M=%=5a5afHqsaM}!)sanidd)r8yg$DDU-6EF>nbq0J@b-qYPZ4DH_!3xm*rVtvd{Rbd_BF?Y3kpj_RDu zA>YF%jfd4}4=v2kQ!J^?@sqeKqgfi+zyRMx=Gqc;$!8eJdDc8K|84ZAzJ6v!T4<58 zaYW3gwzkmWSo=9OG0^5*PD%S>{=fsb=J5ND88XwZ|B7jFFb!}m<-rQ4HAEibYj!3t zU{?M3Z<{hQ7aT13uq;cuN)^x&*h}Aknsz2HVCP-FVa^7U^)&%;InsAnrDU3D0?6VF z;vV7J7X>%fFG!tqXQZ5M@6A?a*8a+yJ%I;QZ*4w0p3Cj9^^jBx0or0mBLg>ER?W3m zNN$cZvPyW5Fbz^YXdCuD@aC}n)>2d0ZYLr06H~}QSq91(MaD>BZS1@uH7#1bO-cwy z#DI;Bsi?lPHWmS#KcFDEjv6pJ!+FmZ_<-@byEbKDntYp5gOnOT=enMMa_CiHdRe(Fj90!dXCj#78jy}`5Jc9T*ENyfCQiYvXc+6%k_s~ixkHGE|G2jjD z&Z>LY*FBA@w?NYh2Xxd*Q2dRh>)f`BFYP;nxW`9hS(YiN!={*9?b~P?Ox^zjF*F)I z?*q=jw~Y7Oa-vr*9Qen+&c;AUKtml9hcHCS=uhm=-;tg^Z6&-Z54bhyD*MJ`5|st= zjN7^oB$H510tD0h^-m*#A;&{C!9@6X9txv z{3KZFSow=!u;BZb8)-55itSK(zV3(Ca)}J2sN7YT%7eJj$IW2FN`yRQ*`hg)=dcEB zBF$wN@2){qB0YBd@cx_`@B`ybbVl0&(==P+g6;X~A_S+j%2YCeC!r}c;Y!$$J>}u- zwXs*bT^|@W9^>c`Qg}{!&*oP#wlS=qKU9^&eY-kzFy2w=-{$Uei_zQ~OeMASq!g$D zGM!J80+4|D+J?)U>v}IFqzy{Tex`AemSmv1P)TO%yANZiO#erLF6T7Hj_0-SX5CYi zdMS;5F0-H~=(_=K}5liYq4JZK3(P4p-`%FF}63^L6{rzSfO3(b{Ce0g)-4c0}2)E4&cZKLzh^2MdT})%ex0xivczpDr{V=5je5uk=M0%?LUy8=g$ivfZ1UkYxvm6V*AS5K2w z9YdlFMw0eS-2CI4ih`_fsvey}6ksTJ#jbZ%?ke6Fs!`xUCp0alzoH;@8N4a9FAR#K ziYZ4Pd7qcGA`fIdIR!iAjWQDYf^ppoy45g)p~ztbti-)R3-fa_TmPHqL@sy+_P}fj z)b61-1I(3=A_4ghe_&@JR6U6o{K*o+tXhD1@v`>g_54IFKwjOmKc%EWU*&mvJ39&4 zn725E4iu7hASRuG>|e=TKtp5|pC=^?kxRQcv_-H*6_tcd;PL&mLw@;Ef+DaZW;DG- ztvlE0hIhamtbv$tf!$ZmSQGx)OX z^IG?<>>GCrH(Qstw$4rvh*##PPa{rWcrbfMjtJF#hsz=)G~eMEYHMn_+n7Mf@M-D0 z9Vnk|>|aVUji#i1=~I*leApBI&2W2q;^S?-+3@O)j*E@I%=Eg#g3{=d3l)cMO0PPL z)_l{3BzC4Hl5c9+(_ETWMb=kkrrwkS#Kkue^{(VVnNQMZt5Pcr3|1m{LAk8;sE^ zJ&|%n_dQ~kqWUgS0EW30lXB*%(Xcq}F-99Fg*zm;eQC1>_}AO8{Y;3U2aVgG6t0-=Sxkd=DvmARMY?e|(M{W9>Azlm}bn!V&} zdRzw{b+xSy%r(h*+LH^+iGB1r<@S1EMb%J#F)PAmB$P=qxm==cvL$Z?Jja!Hm2}8R zO!=IhLC7B^70ngX{Fipx0vDb&9JIc(Z#U4&KHSvI`EuZv?f&^$`)THBraR}?uU~0V zP1uYdSwE+x(fK`IuVrvD479ZqRs<#^1`Q2i(v3W?CvsO-)`oNxTAQH9?9!qNRKADc zwQ00Gs2@bLL-&a+eNhwKUt9!REk8c#3!ediVr3;d+ z>m83jZ0I)HL@%@9$+E6BKnBdhi}knTVT-dmzglZ5__q#bM`)HTXPbACGM}F!IiU8n zi`N+I9R9SqU4#$OsjuGrpfgg3frW*_mTcAu>Er&$z(8*(PDO8mV-F=79^NlmFZWR} z7N_HUq^?Uu6r8okwj<;=(GwBK@_fY;({W{?)j@`wwSzaO`~xmP4C+j%$> z+unct7%#Z{3D16s3cgGjBwSJ|*xbTOUg9EdkcJTxPLYd_X6Kbftwglj@u$^e=8he! zOoQqsOF>lgF(Q2EoKmnD9R&U-OuyX@u8O=4N_2#^Z4ms-1{!^5MQ?(=IvY%kI#j8f zaoTUEv4lPEG%+Ab_tRLE1m~t9M9HhnRY{ghMD{5aE7@KLcq`4ie%(s_S*Vcy3=cjB zRFVX|STz+DK{vM)i{TT2g^Pyz3FkOeHUxBOFKZJv>x!xgoS(0&9JOW|^}?mFPjXEofL7kY@ikmgkD zZ-N(_*x2NFSWZ&uHQ@F-Ij3v?l%$|%E-2ZS(Ckc&COa;$Wd@+Lm(C**1b_I;k z0t_q6-h6SCU_>l`_Z)I3KtxE4?(Jyr^wziKO1Sm(WpU!vh{Q5&7|l>S(=t$UsFCNlFPnNUiJ*{#!2x1gB_&@kN0xi9E4Ejjh4|A6sAkaFLqK7UHFGbQ=JCDC-Hc-UIPibxj|kLo`SLb zySR=$9!Ns$a%Cg4I7(C%kNrMU)<>W!&gCT~kHKELLjCNj{5^^GRi(e|R{q85<;x&l zXu6PhW~E~@D`W+@53TbFA|$9~U`)w5Jl%W}J$ho2z#JJzo<>tCS1 zB=i2*N9TMZY$&R=rhLK>67y@YKSLDz@oWgOxVQx~7nLSC>mS5)IK>1Zi1z3%;Iz_n z8Y2Xy%TDZNc(b;EDF|@ryX^x*L+_(-mcB>MC@ocSe0`1-RmVWP!j#>T^d*!wkwMVXgADQYs-b?3m!KXeJc-n&H~JPcci z?jPhnnkN_pzqfd|p|R3uu;=nox|j&i51!S0(o9j(@w*cz*S<`WWont{I@5^D7{7mT zx2I6@-Jl4e-iEs?jfYwCvpk+)sXS~@+*z$Hp_BZer>x&+Z2&{nK{-em58T3(`-r ziVOTYmmAZCxU|R|qhi-J`sbabj!Oo*{p^Dk8a3e!{*ss}@}v<-Li<*KLvfQ`KA||L z+xp2Rx+;o@-04<>rNOk~0I8)&^_vTnImpOF?wTz*OBgCBm)t&G^zRhMiHld+T2PE*rpL#HMqWn`%|xcDSQy-oSxzW*}OGN$2C2nF(3|Cp0? zQPoB#vZw1&u4h_<5%>Dmj<&pW`nApr^cQ?E%6@O(CGl6lO0j94$ASkV;e=x0TG0eu ziZidPbgx)gs~gV-HC*m%wj!E{Vuxd`i@iNE8W0am=Gb6+PtX^cz}9KGCp0T za|+PJr#u$_NA}16x^DYsD(*ruuKti41d6a0-+7odbCo}M+Mw8AitFmX?_Bf7DU>xk zi_PKc$9t3l4!gYA(aM{QOT_FjAAf!Ez>0!p5aKSrsaf8W5F+(yf=#(94x#b;)q4rI zNa%a?D`&xnEZqAPA#Y0YZ(dXqL%x!m3;1?5$HDQ68T@;bmM~T!&B~C~x-9O3jd_=a z>j}N|%`u8XWe-B#=8HCl>)-X?ef{bts)F;+g_A+F0Ffm%T|%?EwPy#HhZvT}k0Cc3 zO%M@JVt#MoHZugv$o3yt9X|IC)gH;Y3F5b;rBkwz{+I}LLwX*8^^!^vbuIsggA^}u zrxxL~VpT<$q2D@EaB9glU-%1ck|+A~{9I{RUlHV$$C3&*gp*HxAs20DbtC+CNPuVfaI#cq2KR<&O&6q+j`m;>N1Q@$k}7AdjE}# z^qT#*(#kjUgCVRjr}g%S&(rH+#n*TK*%%4uh|#UI+BVg{J<>6L^Im39dW`7ikl*I) zYvPxHxE(dlQ&D~-keo8ChRc3|7(VR6MM5L^B$RF`B_(P9Z8@2#a){=swfP}M1==gc zO401+r{T=Q5dh8R^raSynSPGOF1@blTI`>N5f7yuOlC3@E7pyzUZYH+tSiR{e4)RD zBqnERV_I83*7(;v?Dz~Uxb7M9#iKn7SQjhmXV6hM(4WMPuRlcpDy_;%yK3{~*zSAJ zF3kqDpI05NG^g~77k+W+Xn8Hw&Z8uhEXZyvOzHk;GSVwRQ+!z5kysfoe3L??WQA!}i~%TJ0gXxwCvpR!duU;%oC) z?imB8P|CbUj6J0I()9MZwZK%P*Mg={(Zu?SlJYJP1H#=~tMb;(29THlSkS#}tW8wE zE8iA5^#pMP9ldpsWcly8w=@{jC&=G4p}$=z*rxXLm80gotBMs#EyTDOlJImY(R_)c z;{LD7O6l0cb)wMgHs|7j0Fug#8=SaGoB>tV~M}9U952+LuqdGa&O^|6635w z>4_w+Nq9&hNeC%gaY-n(aW8$yf%t)`@NLVJWlG zRuS!%(j|f_-;rrOq?CCXhG5cG$UmO&b9m=PP5>XYAe~!r9ss@LKIzompUu?GHUCQjmH=;-M z*KTTZ%G#}K4e!<^r=;BYeJBhNR5CG>KbD}{Fr52hR_jNRz>@9Ty+KG_ zmWvehy*+?PXdxw{Lc-D2U>P~o-{kb>GV#9OcJB7^wCfhK{LUD@cF>L`i3#Y;o8X{$bwH&g#SLyCtD`)^!pjvv8bwg|H`Q zchPDgu>N&`g_t;O5jy@i*uCriBwrCO1H%>zq)+AzhcxY2Vtu;Ul`K!pG0!%!&JrkT z)F=AD#m{8IvbZ;T>WL-xxXdzH!HtVaLhH@KQSiM94<5Nf?&(Tg{lVy{Khq;qB255z z>1Rd=L&6mc^m#bDQ+N`ALI>&?)_S9&FV^9*EOx~vCb?lZ_h{$47|Ckw5_tjs!K1nDVurvV8cKu{o2 zz$+8edN;S~@OLwzR383B8%1g!t1#jx`uL;gRrLWPi~JK;=wgo@d7FpSJ`ZhGXL1~$ zMc1?k>hn<^hL8$Sy$NXrv8Br9_LyVvBEu2V;fm!qdN-d=>XV!d=<-dH}bi!FR(*)06*3ia$pmyXeC zaRy|&0p2nf^S)xOtI<;&N}q=VFcpg1z)xm+H~Csyh;|b9dRrGzTQTfB0K7rTUHES# z*}=K$nX%~<8oS3anf!0hp1Hn_O7a!J##DQ``!Di1RxB8;(@y{hxdP)=;XVYQ0st+7&EI}2kKtr6vB1N; z%@ID0oWNo;bm)mJpeX7ceD$hkp%9RT%YCx}-gTLA3Y=SaC}RGwZ;*3ATD`*!=T^Ko z236*ziF_V3wysa(CO2tbdNE1IX6(-UqYmcpY zxs__GA)n`eYMd7SjRO_ekCD6Qbe{R925csFngA!;eyni?Y)GcKx1n1rJfjCh>DO{i zoPL%bS-P*X;~NL_TU8J0Uc)8sIJMaYccv8g&=#J~P-6X4xz7C>l>Jo)uC|dm!u+pC zuvdk#C4sZMI`4&boYS?Rl?ytrVLQ*lka#LfFq zxLNAxoKUc-IC|a{wyvXvlJ_P39P~vWCXFmHz8~l!IC2;Y2f_qQ4^Yq>O$+0m2Ylm^0X;k z>VYlKhJY?=p)a|Tw*WyQF>MGfD*fBzQk*DS)DT*Pa2WiP2Zj$n-i50e1P-FgfQ$e> zF@yhqpQP*B!h~_i;oRvxz4sZ|^&Csy1qnf1a*+3`bDZS6ihW>h&O@B64NQs%Hw2aP zBnY(&=Y#bE``uE&4IiSrG%2(+NUeu~rx-rWE(LHZW}U3znRi#1^Lxm3CvaayJF&?- zLAN|>Ron*||Nl-qDF3%)^ncA%|JRedP&^pk+hnTe^qiq;Jl5jF@=v6PeGAV0nZY{I z7qdS12+IIf(^bG$>*G4{!xfEUSjSQZ(WMxtU*KtcR%Uyb>+!1G3w;zE>UF2a6=bbL zK7mefOMaf?*_$DGKo(b?r^Uk=O6=Cl90nh=MnHu&Ra+=DW@b82iuplyA1?iceXbxX zIid%i>CZh6WE~y3rtS}K)eH<`!)&nM^d-1dv|gm!U8aLAi^?_M<)b)W{#klF_xp2r zJ3|`$c5wQ62?x;6#N2ubh=*N#}?B z=d!qPi3gNd%I}B(=NAVYU8cKeZw4>H|E!)X!dn8QvC5;qN7E7jAweAZ7KLL0#v%P< zC_>*D7l{rREH_|nZBiZiP^4@=;duY}+=x)whju?sN!J1yuW{_*)?v#=DpekF&wUheI^`A za|R<|n(e)j$NZ(C1_v{;qZ*n2Rs>gR&V~)D*qqm5%zf~ODK^8?777~ zEvN{2o)JDzrGq=nQOJ*Uj0F^wMH#RjPC4zQV3sbocRljf9L4|j4|v1@$}nX3!=)6I z-+jV`<&qSzEZAJn_jp2=8J5_8sjhrvK*7X9L-FFBVjhk?bYZeNEh!NZueK^MNNFxqBse#TUr%_4B*?jAIu~A@B@oz zBe+Q6zx@&BNI(hTBHqIP;KBc683Bm=e}KjRZzs*{=BioHYqD7kCH~kVzy0dC>K-*J zzkN;6iHL@4rVmcKv0-TuGqV~kW!8AHyR2{G=Dq4V*K8_x{;jt@ANLDqC6IgD3}*KuWu$H=Su-3&FEA6(;Abr}Z6R&djEJw< z+1Yi7hh31WUsZO=8?XIAI6nW%|5|SnpRe`(re5r3&$v*iu>G-0zg&Fu53=%UqVkjC zaLHIln44;dht#tUI&lu|GSqJfAv{85Xo=p&K2h0om3}q5JkKOLBO03;b~D^nLY(S- zza_J{KGaqAELKS#$c_3+hCM`?2p3>jbM3_j4lSNNPs6IRu^XddR&jo7Zm1|2T=z!x zt==(D#ucRew40qye-?}15udipS-NT&nu+09AUCDcef{T0J+;GSuR%8vZcyNK=!!qd zrluj9`b0$fcA9YzI|qlzMUwL?Rn@+sG(L4by@BB@p^-Cg1y+lH^{#R<`2G2%r?oy# zRP@OB*H`Kwz(>H?aUnZC|ouCI9Mtj17WM43>KWRv_*9*pXn6`QyaE`7z#ldgP zb~ZO;cKtH%(oO=WE~m;C2^FFnhy$S%^C6UzlY?A|(=c`Ccf+6f1ml&hUzj%Sx;I{E{Z?SdWnr^nn8VCLjKIKf^IJ9Y-Su`pKnC}C0+T1xAHB|(+ z(;(fD%UJIlk z2Z~23H48&I3imTK%sguS@}-+_`1PkxpBAz_7uozCmqT$79`e|~+DRl`%B4qLr9G{buQSbRY@H7Z%Vtd?)d-^KfH&!))|E6`WeY8mF zdV#g@hw)Rn=5BhC#?8S&1NpVb$>Pa(XeNb86L6I$>$kePIyyD= zPt#O}XU&cn#*j|&qfNvbkEFvVwtOaAl-rI#X;{RkD?2#pQb80aLtC(xn5X?F$WS?{ zpopYK7i>s?Y48E<3{P#avfPn#Mhpz&0EK;+_ewU`I zSh&!l*Uyc6@3nZL#-eN=bZ|JN#~d$AjDBw457Q3QIhe2>otG#U{bSjAPH zCp~>8^8@TkJoaz1=k64yHGdhm9oTHemoKH?ykTNi&2~rw-u<<$jXDyWsw+<>@=hfu z%f!Tl`-_2|Ui6nQjG8c${yb?j%L0Y3k|Xc$OiTTu&>~uV#c=-^Z8o)7iH}chH$6Vw za>2J%LqmfRigFTMRnh+NOvk_gBf}l~qNy*8KacJb^ zYe5VdD zSe}3t+u1NKx)Scg>ZPHJRc3t9D7N-!T3!dA+lfMlUof#eH<45K^UiXuL{B=>+u#tU z5va1fUEwS$>bV)WtHFhAh5hZSd+iW~j4H2bcvk7Vpfi1({!jj`MF`_R9(z8wY?;OW zwdT|6UH2Z_F>*OSVB#>5It{Tb;L-)_6_9mv2`ohALMkBPj)?h5XIm zS+9sty3|?{LM-YGzcM9ll%ABVK*M8Lh}fq)aT{)ZPgQWKUmzTod+dE0 z#FK%)=ffg0pPRKp>-VB5`3Y$ly5mI+|GYrtMu=WUq9d2&_TpXLqq&GnW34I_#!gsr zNfwKDf&6ue8mYWb757ayx^OgGMk+NKjKx5LSJ?*d4*x=eK!IU)8>d&p3%WVKv#t?} zRH^#_P1kkID7|Q=4}IAfz#d6UOqb%^st^&0p7&Onx}1rurGqi}($J?fHWbS*P>tJ5 zJ-RlKelO5W;t8eSM+1H@yqL-&A=Ag_HWK2$vaN)@RHLGGM$yz}s~8q0@6zDiUCz5> z37eY)FiEn8gX2HKpfw1Q1l>u%$wPtw*;56|I-t}+%c&q>0Wvmflkc&pL=}OrHSiYB z_FnzCGoGxq*N2*i3+`I**z+Y8wb-(WXCEX{+i+EOE`)8rS!7r_a-;9Wz~22?HPhY~ zLXyBU78zQAqqFdt!c5{b6#;hJY&@Du?fuUXiV$qq&WfT2I^rBan~a%QyTbcfr+0*e z#H&ED5Pk@+5s}>g+52$A3x;g36Wf(rAVPs9XDdK8*k{hl{_v?Pwk`Ebe_r|3Hgl@} zJkiIbrgl3~CsxA(zmgPc`aLRPU6vAo@iP7+O)=H_0Bo?8QYPWA|!3aQe3icYiJQdr}>wtRz5vms9&Qo=63C zY6#y-zm)m(72_Z2(IyTY@_+I2WIcVIN&-7FR->U*x3606+3>v$AdbR?Mt<(@D*xH( zE5hm0iD2BA+AlXdfl7{Nj)Y)ioiqfa|L^6P-_X1NLULhXy7r zR!1C=UrO@PZAn!Mwr?dl|1-07?6cABHsUelC{4XOy3?D`6{frwQeQ^uMu;Stz-XH- z!)WP;V2`k%Cu}w7-g^ICM&dwEaFrIkWqJ9wZQBfKB}8Nb3IP?Kja_vvAz3UcdXRg4PdQfAnHWRr4cJBzD_wEnGTQT;Z%X(ef%4MH@~egQ+077Zw!$ zKnHvs>b*Kp#5_Bn^^yUKGZEs~o#Uk?<@kG*XL{6kOr|)BrEO%+6FlGkImNSalL?Kav)VIQ%>Nd~>G6bzu2x@o$@S7Py2)r9e3j?D-4=*RrIw?zx^cM8>Y=uDZ zZyhKglwOxyV5Z?#&$xi3s2i}TD#kieW_h%-oRVEMpuH1zD+UNjMg$%{KE#PVZ&cWX zuVhe-kXb!5nRh_#9?2NJQ4Rft*Nm9pso47pbwn=#3CdIHuI1FapimjhuD!=1Xd`t8 z7K9l>iWq>qBXFVmlrjY0LPCL(s_#Ly?y!MM%!i*u93^tj9wnCcC`eZCp|a||C+2LNcxPp7^uklRdZRR6VtCYpxa|; zSdHZ(J9QTkLXCrwDFW_%hRrG7YIbgXuS{|)?gOb${$PlE<>Dj+7nLl_6_ELPd1T%@ z*KUboP);0%g*sM-!U^HLZamf++drEkbzo09a(5;^aKRR&gcHk75UUFK+au^zSJI#Hx)^DK*jHftj@0KWSU^|$PlGZp@42c?A4WXjdfC8)ezh8+BUanYWIIPfw;KKW5u>!@T;WxZ4O7i4v zH#z>+{?9n?o*}eIzU#!pB7ye3mZ)0JI9x?&s;}+!URZ!V5GX!d>_GR?8Gh-|tczPK zSu(-|v^bw#CEV(r{mJ333$$KiwmIbHoWubl2061)zK6cJ^9|zrwId`-G!gsdO+UA~ zma^_mqh>TH7(O!!`Zy3SH=z8oYCot8OoT0wbc@mnW(3aw%7ECVBbbCMWr~NAZb4~z zJs6#BS*+xV#7P`{ER!!F0Ue#@RYAAr)Sk7alTR;)y%)xazJ3#r1sXFr74MXD`1d$i z-U`Sp{OQ}eq{m5EQQc{wsH^L5t3w!U*n=OJ_V^(%@pt?*WJt2xb& z_?^j+hfrBRR=R9U9np8)_&^jC1uRGt3WblCC!~)26?k1>LYT87iB*TqI||uUezs6+ z?!(Qtl6aQx-a9Wq*nN7UZX>U0G9nb-WRHy@8&{`7Gb$N$#+o^VAJoBP5Fk%3zYs`t zJKxobA%jV2{DQzMZ!4VPC}?Ob{YtRtqPuvIlRFE`~#9F!SL=sU3CgEmGHF+($6}A zw0slKS8!zal=q=f4Jp1`VN%zJ+FwO!6($&>V(tvqn-`2e;w=@3%RTg%ExDD2buLH7 zn5R~$SCwt^0k@G^eZTi3WO8R{r=*0tYG)lVjF%clE=SfL{%IR~K}>%wi#q)>@0j~_ z=*;Q1r%Aylm-k6WkX6u=Y{j+8#a`zY0dEcHe@JtK@CybUX-D=6!UPST(pb5$EJKE&6vH*g^*CHHJ@eLsy66)sG+!ET+!Rre-GsZM2(&HGWJl?Dh6v1qaWSfO zQCU=ndj4(JU-_#pE;fu*uT1YY{_OjW;K8d|P1Ns?Gsh|%q3$o+xgbQO1j{&zI(~Zi zcR6E`yd!pq_NuUoU$}70EXkfTN|KVO&#F-cg~m7wNqp}aVu#HUy=5rF(UPorL z-`k7{2x#m}-)0z-QiU^9r~VR`#}Xx)9|F?8g-FSs$g1lmu9N`+cc}0|>(v8_&tGwj z_oX2^hgP^Xao)VI#LuK{Z^$m%)u~hQJhW`X{x;l8;vKK+w@wd(Jf5bhPE+B6_GFiWGknG;{_cD; zef{D^7!WDBDM@8s7N78xxq2~+Sq;_Io*!+!D(tB`wD zna2KR>Rh?53@+Zju*hGzy03oIghFQ&lpr@%#ri`9Odn~9JNcg@vqAMsE?;b6S%o_x z2BMi0mgSVMa{}#Y@#Etf7`LQZpG}!`7-G)fum|@ zJR&)S`=$SKPZ3Q^?l!4-F7-(xs-MfP z={85^0IsQ0P~yEayEvQXO z|B1|tu*u&!8a_VfQjOK{sv;I|P$PAvi36>D(fGY6DpSzrD8eE^6LJe_6%%neBDd(r z<50Vv615t7rPv@h!Oy616>E zo8W0Vih>f+(z>>2K=GWlYn@U7fxh4oI4U1p=W0t*-fp4!sV72GaPHdDHjH8OJkUia0r+Q^L%60(>P`r6ao) zB!&nB9Ej;go4G&CzTUo>)xe+(!dT82%wIWrJ7fM%DNI*Qs^Pw(g^WutMG&LO>J>K+ z9zE($v^iHvH{H%ME$H`mH;Y|20T2c2#%3*zP_nPP1dk)xa??VaoO|g;e+dLmlg8DU zL=lf~bCXrMPsT75-p+X+(Z9BRoP=BvOA=ib)_EKa+dE!7&Xyr#fy&Ha^MbSm;FK`0Q&sRC*p8W>^>Z!%?J!%ZS9I=v2AU;QfTe z{l|ad4+npno3JPZy+oZ({|*0$p_jsaAmB&no`N1Dle6Sv4I$b(Ii)x}{-k;6_*zti zINFPd7d!HAIKzm#!R#lp!%StcEUT>R`2#d4<&Y+iN{UYMlGC8~I}ocu#)+=1hSKBV z?f!!y5;&x-v|EB>Fh=Q}E?Lw4xw=YU@hDr^E7H>ZEeT<}c9vo+6obqDIqaf|S7@GbxVE>%aZpvPBk`rA+Wum=nRXe$ek?niwe2W*YdOiA~H&(6>D zs;clHYU=92fZ(zK3(-F~hzPNK^QP&!5kWEnLoNH=S?wG7xPbq9)IsZ^6r`g|?%O}P zBp@zG`p7^;z$^|_6Lfwg7zuY?T&&0 zygnhFg9G7A<)gYR_feW*HsLn5hik}y(zgmoIU6tAP&#kEk;31OkqGqrXmSZJ7*(>V z34nH0wVOJMlv!TihZbW;_Nya`fa_zK?()X1tfo5OS8+)=r_L=D{O1M#JSm)q_Zao+O|pq}`_hO#(eK z=b`g7mkck*2hCC47E2N1`2h?#s{yAl@=O$4_QCr>1#QMTJthCUPQ(tv`CxkaHMbHM zRA)CEd2p33N9FXE?vl2ZRfK7zqlNbLrD1`B17SxeP z2L_;|*{PN`2Qx2J{_Sz{1Fpo;GzzaKUn&88GiD#~h! z%b#Ds({Ul3hK;z}+uLw=06Z&WpX~=Ik}j7Yu-R0JKyh<(bACr;bKA@F^OgQ22K?K+ zgfS2Xu#CMWPeRnN38)0njYL-8v8G0Twajq^$aY2a&(jqK0BB;a&rq0-$0)p44zan! za8nMxX_Yd1SLuJBsk8rFKJpw)8Z3{n*AXow7dVTao?cXR^s$STX;g+3AedvpTB6~Z z=EdkON=W((&!J;g8!aAx#g&6Hr1s%0LL&TpO40$!y^^5PS&1aIj zAN6SeQ?hXq`rb|zg)d`@MMpmj`PI>rmtSUYy@skD{A;7!dOWu zu4GBfIiCcoV3I#ImTc9{0R^(y4)B`R+Qs!E(>Ddn6g^YAZ4AP$_CH$~2Hgem_xbP*jC6XD2_*EaG(%D$GI>R8o$w#S?ioM zD>Hf3{sNLu^h~WH%!J1;gJx1`oJ&f|$C=QFZ2&_950aKv2qM8zRa4t299G}X=j=;B zJCK$OBOde>{yIeSx;>o%e+^PNw{+egCkDbG3!Y2~oux%MPm3%@G9)3x+2~ zKh`zA%z9OWW-%Q%w{v%t2paARN$1heX>wOqpW^uxRb&o@!vWLaWp9+$c;iWq^l>G) ztYL-t>wxJ7DKD8r<+Acwem1bB5V&kAG1c|yjA_T`Ejh7#w&DM1K8)#zKWmk0yGq<| zs~*!l9@D@b{>{$_EYQPzBIq#Fk%W5eMbTQU!~c~G=tZI+JnZ* z;j%0V_(gIpoMG7n=H#{p3FBpi@K(+NSd91FqW)$*F+?HL3^}r&X~og+=Z7x9h8jvvYzV=z4~H-DoEVsPlvPs4$bdeKf2PH|hKZgY zLFn&W0!2VK9WD+N5fdjwJx~VH!X;Tbt^#zN0<9wOM!Jr+cErw(9X<`oe`FpuLH_bb z?~O-T)QZs(Xi=pZ6#W(~fQm)n84gSeM%Ve2Bx6>$&W?x$hhBY75T6!`ZZ7yZSVIYM zxZ3v_HeR6OK2)ProSvVLU8D}6ADU?-?e6Vm&wf1pBSGUT!5%`}!eDb7MD4ST_oDNv zZ`$NfT`u3;!@of96yJ+&b4bTce1|vCKNwMNjN}(1!<6~OdFpehf zckDmSWdb+Ij!jI|$&AQx^kh8 z(F?l!v}ly3?JHLAX5H@|v$#^9`m+}*EwD-hGy@*lp19FHOo#FUkpFsVuyI3TPOTVEBnu22GMA!mO&9P8s0!?8lze@gS1;Dr zE!z_&5ImJX1@lYUeJba8($b#Qe5_#4xpx>Zq0jK5eP@(op+iz4KR+J|K}5WV1Qi$C zygfgoqkAHM_1txZn^P;&c%?f~Z1!=O`(QQT@mCJlUPViXs}5ocgG%H*)2*e6$|$z1 z|5mUE42$9SoGB0Ce5m0uve`kB+^_OoKz)uK=J^@5PF zFzYon8Ci*!;r>^4hXAM8Lc}+-0x?MfQa670+3AvqO%*SB#_*g=pPiwj97z)p5yb}w z2Vi2lM#V-;t1bn(7&<>f=znrm&I-%Q$w48=kr7vZEKI28Fi3frV##|Kt>w38*bHof zh9_AKB5`N3ivbn)=TY%*3FU)!_4#LM(k^6vA^uqV@!aL^>czT=FTroWKA}#eRcQ3c zaQg)_r9=R}r=e%$`}!2t^G;ZLN(Fq7Z@>hQCJ(=Uy^1mmAt>8!KJh?~5XQvD%4<%1 zlxy(7LD+AJq_B^P9r_n~xNIYFzL;V7b{zMEs^w-j80BMkrQsx&ullT-{4l`Mk z7)mCnH+-X_o7V8CeolMb+#;)K`M(MDu~12oPSg0uJKi%J(+Dq|IV_;K0byTj5h(~~| zd*;YaLn5zGv2~s!^ZZM<`AiQJMyJ*`h4|(1z2^yk?2>S^{2C{1F|SqhnAPT)rJ$OF z1sR<{`NAUK#0dkVuK}ZQ^aT(in{+(<=Lj#RJBBJDET~zeH z+fZZ+g@OWb?EyNeB(W@xgIn5z)Pn4kZcl7GJwu;P1C%oert3Xo8N7C7F>_I0nc1l&a;zhP+>VhbnmMkx?mu zUH8J%)Bz#T^7S-$Mf6iGvC@S?`F$=i?J=bTJVFMLf4>cCqxjZyUHVBlua`wTBGBn$nh)3tJn!PqDtE2FFU3k6{ z%iqJ*RZdBXzpLw~DMfu=X%Put8q(GwO?R3HZB-GrP)E$l6gI1tqtB`n4C0GLqUbEl zI7<_uf7UzrJe$078-GX~?cXuZc z+}$C#+ahQ3yze>ZyS^VRGqb%j)z#J2Rn>RZbV$6^^D-^HBo$_=t&;a1LpaPgEJl*H zMb|cw2CVtfKH8?!yuB!NXLl!#IAU*aZyy?y>F;kb2k1xSwI{b_wX-}r@V8683jxTU zm}W)iI3OX60Y_I$cir6F(9j1tq}HM@Ps~jQ9t_DiZtvw>IWr+5b$4E>cLrrl=HYxfa@w{o?Wlz^`P7jEov&(5X5fp&Gw5QAtx2PSCQIzJfMbv zN~Q38kcgD3CLwhXUm4_HdgV%RodL?c-06D38gd#g_IFcz+Q4^W93d$sF=+HdhwO1{ zjy9NAHC%~Ewq%*;XDn?Vd!r3}8794mh&~o|dr`^5K&hQqwz@&IQiImj@?AMu504X$ zwkF>z4qmvzdY51Pebq_NYt5B6^f7Qx5M+6FJTNg)mG=p#nZ4lBlcr;PtPtlaC=$6Fcy3nN3EP5=c_UE#)r`Ps-+bB3c z_iS5<$`#hulJGaazyn|A)D~iX{MZ|}jrg|Uyna3E8Far?N}BIKIPH`8)p^k8+Fi+*&! z2%UP$gjF*N-2{6Mf!0JcS2`a~5d(o9N;B@G=q>iy@^5T%|1#%CiZ8%(KRr#(Ho*dx zUYtTzJ|;-lmjOh{$w@vL8(W3G93Vo9uL|PxM^7+>E?j)+%cY@-O(tYt2n}=AyR%i$ zM%C$=NB&qo5k#?k!dR_oQTx`GLNN2w$HliD_|{!2_8otAAO161yfBeLd-&{K^3l87 z>w~tlD>TF8T!@{vzOV-Ej)>B{WOFn4o5I##wDS7)3d4jca4F06ATshH-4UmiN^>qW z#>7zo8w|E!0t16la;N6!&-4Q%jTYWw+weubWU}E(`bO6E@%iXCxr=UCtVF?kwT}H0 zhJgW}h+7QlO_=l7+M$BAd-29VMO*hg$BJKAP+}7k(Sf|bwHGIYtugo%R4FtO$I)M) z0BV|7cpw`0)eMT`@iyAZ`Y7o{LB^Iibk>?%04+$xyZHC^hNACY&or|h|2Bb;@n18S z`cJ_*AOgpfw19+_>LTbV^OEGYUvg1MJC!@frmXDet^*tCZs$Fki0~JDSx%##h@~>D zLo)cOEt-ibS8}UgzC+P)vare|q<^a=KIxLUA(aX@ny-f_eIy(DEGvF;p%;SZX#ntX z8Pf~K*dGMyFSVY0ZELs<)0j1$uBi66D@Ra3slDwcj0C$O*B4MtG3y0YRq0Z27^3wy zbvroi9cRUYvPB=v7i@W`0t9&Iwcmbar5AXwyg*==MMU%N-5V5nGfNxTOS`uFfZ$-k zj1hXCU0a^I8Aw1i%9E~s{h~W%b1x^oDPxZGdlAV9)=e9uEZ_qKb{SjH^dT-yY>B1~ z#9RbKdmTwtO@|Krm^H5n0RcGOw!Q+Tz&O7XYm&ZEBjgGrhKUdZ#L> zonH#CV`;y4>6%!?K|)PK6C*mRz<@_V5$;)QK~2Moz$A+j5*aCF`|X2r+}oJA1WMa+ z8M$t5D<(iZu}H`wpW23p4upPO->M8zh=e|E#>+%B7|w8mUw?YMSLUG`L2G@rl~ss< zwWvk8a)%N7qRXRQ>mX@!8)>Pa4J6{ELTDqWCk4J@+Z|W`obYOEjEy|GpjH<4t zpeZ>L%552=VHJ@$0OKnJ$^N%C>SGSgij)P+A;Qp)IHi*|Qb1 zcITydSz4QpKJ`g6!M7D$Y4Rk@5Jpu?Is$>_&UAnU$baOU1Nq~d>f7(X8=s#Y-kH7L zc%P=um=?Nz*E9g7eHCRDfn{CI)rvU*%%h%N7CS;-dIZq<15k~GTbC{liJ2~N%!K7^ zYk`;(@Hvpm0ss8tQE}*X=3^0H$m<#yP_#TEa@yABv>FJA7nAO>hK5G(k?<&}6@&NqXDBkM z(9_V+zzGWrADo^JJY4-OL7hloipQp)hz2w`pf%N|HT+q}y8@6wL3UA`;_bJ1N-6F* zMEF7CP#=1MtvW=cV8_*r&TE0rE#m4X4(#J_^)^)r-J$=CRkHS856^LN;E8mAXDvPs z#6y}WSRZ30{nkY9JFLGGy@OPPic>lmnAeu+tq|X!)l%~C;6KCts6rQ1&&CZOYrbo6 zQSoh)`uQXbK3o5M%z`K5=aREsTp)itEP{fCeI3vO@`OA32umuC?nSNNqgC!7eH`5J zoQ>H_j~p}y)N*KTmFK?8Af%C$j=&BiU&Qo*?!aJEeFwg>T)`7B!u;Q~UvW{apOiq_ z$=ClYe=K(ca8vz5fZ$F1$jC^%ZD~jv5&k^t*JJK?-ok4_hEeTLC>0XmHb^ACo`t5pn^hG~ToQIh03%SPCeN!pS zFm~bgNt+lTTk+4aHm^O<6jr z9*X8`R1COW3@l}_6ISw(^lv= zMXedp_6Nyzz;$g*a7^JmEPD3W=7-IbyWdd9{SO-;`4a#9Q_?PiYbB*gLc)W=F0A0D zWX9_S3pgadwHFx4ARWV6r;xC)n*G46JZ^3#aV)s58)aOnWp|`2pB>mdS`m|hi0*Lq zjv_Bb|8O4)hKp(k?_nMGAv21Y``shFa?pz4Mlyt#deomP4f>BK$U)|-{fsSqo-&^UvQ3_L5%<1 z_Gd82W1V1!R_wSRr<0>XeZa=H_3*m$$r~`V9dlj3Xrd46$wwRmV=emrgi9f({uf#= z4~7vw+L9My2L3kM|9DoQ3DV3T@H%L@&H9cTF;+JI+_tzNpX!dGA>=-3#{=>j!%^-~ zkghlN=`nBcJ|(1y{Ld!;Q~jHHxnuXheEy2*j&Tj>=OKil_~m1>Imc6U${`7jxD(x+Z)VJ))`_eA3k zZ9QIE9$S5M+m>fIoHgh_+MQ2o5$?4GTWIwMQqHxi3U;oU} zLR#=SC&9j>hR2rQu5W);c2cZMk7Gp%PNVE#W=bwo#=Iqo0vxrzK|TwyVG*46rDPHq z&~$-raLBn%7k48yHyuj3-Mo>ZBbHTctc<*@guU&X5}TuLn5Ij}TR!jDlSqieg%tS1 zz_0uJxMW}tR`v1{9RuBDXaI#fb7@U5X3bHCuREw3It(15tB+PWsdjvoQoCbWW!)C@WJ44J4x= zC+;FgVr*h!h*Ar{rA65A0Sk19jF)&_RZl_^-k>wuitlu;gCQAdC;Z-W2gZ|CM8sPx zB9l-5RLBy`FDbGuXjZ*~BXW3b zx(LSD#U+sH2~H?M1uV{G-ex0r(*04V6K?RKwf-Bs*>0oG?xnDz5J&K0X6RV*q)dtr z!C^;hSc^kROkyf6_V>gFjJi5k8TjnY61)qi>Y-L2YWk=@;%aunsb#DOp$dpeU@p+c z7r~eXm0%LXen%T5dao)2?-yz*13}ctIdkysC;lY?0c;$+z@~f6ynNc6#!dsi&gOcu z-d>&$S~?TU^U)V3HItThQgSweQ#BSeEHq>mV=WD5p^8^v!no#*Owg4|zsTSzcRk!%M8~IZ?7AGrFfy+E`u_sqU<7V=QDaGi3=9S2|ttaA8#}?bZEzYd+s@# z?4Ro2LU9J7y8|vvzExv({eAp->TAzNQ1vV~t6|uyX}W7BThV!{T))F*B=lOwrduv$ z&sMl}V`JCZ*hsKQRBU-dE@?4p33!{E#;&YO0xf_$ZFF7#YeJMSWW0lMu#jOqw>cmE z533#EtBTopBWY_dPp&LQMUB~mJ#U3tyrBU=m?^x!j)bAxy!JZ@FJ=bkFHSzbfVu?9 znJ2U0+~;&1U;psg`edG6fxf~1+~FmEz~c}Hd$o8wRkz>^ueSFvuyPYYAZ?Vc-`uvR zej-MU{e}mD*QbJ{Y`ByQ*7Ggb3EsS=;4BHn1OP?WAYcItQracH95QAmXK4{CWw^r5d>k_65*hUlL zf~haqK2c*{)aOaF|GBJ_p71yeB`fgXfRBCkS-eVDBJxKD7Vee#b=3U@J`7GJC9sNy z_4`LeL`Anp79(FxK7&5_G-oma!PZ!pBLznwv?k#Fm<}&y>w8_F!gn>xYiVUC{Y4em zhtC3EM8NGWh@FqM{N$e`u6Ka|3Bo3z2zN2?WeHK#P+&hKNrPuc1}Uq=tt`0%33Uki z;EPY7wb1dGXQ+~r(x%#y$a&mzCGXaipaYJYZd48sc?){$b&SO46F^5ncE_U^3-j`n z6F^?az%PNa+CR?n|M}d}A_C@35QEF?K#0cHuY3qlbIJ$-{o{+Cv+XIN+VO~BtKMRQ zg9SwD`+`LvLzlO&bEO=LQ>Uig%|6T`X0JP2G>NFsJNp(ZW{}J!9lluNt6}x}>U4Nt zpGV(-Bv8f<3$W;Qm(EWAesWi++&~W<22?X}$&h64W7qb!G2kahpOUZrs9xmzc75Gc zhY13 zi`aBvbA`y{RJqVe`qg2**?Af1k6!hqqsrteoM39dXf}au7#HF<_kFsr_J6LZa4Yfh2tcdHcxQ%ltd`Kw%Ba=UmF zJx;d$?e(WnPD=}7A#_}#2Cmw-_z~5f^e0QmVZYq^=2X7+CQZ;{r;{ohXe0htq_|1e z(HT7GgLWD=8Br*`P51^3r$P_{2-H>>o0$3zJFA%YOV7cvQjcc}k=4I-*rMZ6>fE;J z<*Vc;{_)x{H93YT5SpYSLPdveja{VSI3&jtCwmEHZ$@Frxn?eEY$UFnr-uW;2*B zveOw1dKqLOuk3!IAc1ny%V$M8h_0cF2@t0qzrNm%30IUbKfj*+Sw&-{WMPj{H}t&}>g&v9YQ0tolc zfeJjc`z+U5MJ2}xNr991|pmBdnx^OUf#PdDPellLrQlF=L$oqM0Xg54SJ4p2~0 z!%@!GB8xiOZ-PWA&vZ)0H5`GvP<B(EB+DP4}TU7}G&1C9}s` zFi1;=^A`QJ+(g74Z(5LSa$n!5WyXNFMj9cbj$!>>m zQ9bpTfAgO2nQe^zde6yq%0Z_(>efY0!cVXod@oD1Rn9)ym507ND=iLdN^COvvCw{J z0Z{{TUA3Q{xhsbnjhfT6<53JKD4xI&CJ~*1s_w~1bl(ho5we5I39femTy$o-+!sWJ zC#8PFrY+gehfCTnn@(Lm-u++v#9X??q16jI2zLh;wbzj|x*KO#NQVx54F}3s;fwE& z6<+?T&mQ=ou^jlM`sxi| zdU4j%N)qbWPvoE{^FF6ZEHfn~%*-X$#if<|y7l-l7EFk+n?{6xcPjfe5Zo~gCjttu zgDBYA@cau;8X4G{s4^~sE&H0bb66upYyJ(v2=kHVOE-NmMce=0v}1u>92rI|!^j}# zcMzFup!??0?kBrm&&dOlk&<$5Y~j-j9+S>?Lk+)(FAv)uwV$qRpDDW^rT2%%f}ZMXv84#ZsLS#Mk;pB2RM*0QHdmfChi|j+x+)Xbp^YIrm$vKK757p(Xz%H)M%N=~mRphJo;D=~5u7pn2=@G^g<9 zY`{drsPd`%Zz|^bM0E7gR@FrT_t$*jTNEAozw42M6+QY7Q*hQlzOXbi534_3Zs_q$ z)5XpGZe$1pg^(?^FIrVJiE!3kcpDedzh&~)ofe|U;7wWNT6#3|MJjzd(utXiJBnOq zuubXP35nzxaZlW7Ls8!iH(?U{(-jXpVYs}PNizMpq9xh2N&+>zPpbttU&}R;Ki0e! zZ7k(|PBq$BaCC^}(`hOjU-?M6+@mzQ#lYo#(<%6RQo60 z^0A5mNF$}-H$)P~xed(;3-oS_HD*993~ARpAKb)S*74@)m%6ypIC9~{Cu+B2O#Z~D ztq=6A`PledR|nOmsa4~x5c*d603pxUTRwwtn?gx7kZlr(H*oW1KDz&I4uGFSBO*+J z`+mt1(Gz7L&PzzZZ4C9RazIl`0!kG%_jg!=*<-t!pZ{MhfN7T5i0&FPN&g@W)E=8k zVXae=y7_~X2l>Pxg>RX}uR#+@TO1a*LmW>%Srs$wx#8K{PmS@vZlxVEFLK+R;`SB_ za+d#~KtXKfKMGGfnS@Rt9!njC?U)M7?gXbzl?~Tr5!;fdY|}=VGT*#ebs8f2`Xq19 z*2iniMn*3eyanA5Zd+C(BG)gr2UpdREKVHaZ|UNAk8Pf}8G zad8sH#?)sW(26xYUf>6btUBhi$j$Ku#G)ptK;xx+3 z`3mal>S>JAdLOvWw-4WEq$1J6OM3`F@6PsD-Pd;km0&g$LuGI0C$xGm3snXKWO{mf z0zh$2w`0x5Ai4eBUEpXzok7a@<_J&#jRA%vCjkLLDWS2`Qp5cL3D zc6D-Q$h3dT1D2RLx#+DeW1wuy^>$(zjK$7BR*vemGO@8CQc_b(h}zo)xS>r)>kz{* zV8uE%*!snj#~|0@lTZ8`tbsv3wjDO?%m3}H3~fa(6{gG=0eN8eKJBg+cp&~e&Ft{6 zz~G;voUC`QoBjOo)yp;SBL0@06)LaPBKVZMU{!t#U{ROqA?_Q@XVR2y*$w`sZ4}@0 z2~7K_VBVH~k(QD=^vw>9Nv1I-@&oEe6i4175O`g={e0f-ZjEb*)Om`ly=?^kDa*}& zv}tK#?pHv4S#i!g<0zf+}WiW47?WLTY2RnqM zpiz6Scv9?L*w6|vwDH=Xv<{Q)+$X~IeCB!Cc+}gW$Yjm?WBICCu3J**OFVsv#TlXR zH4b&GmrcF5fPR*pPJY8Q%+6!>x+)T{ zw|38lx%Trz`402i3D?6X<+x@)h-1!u@@)6VI|tK$^m!5?jZQ_)rycC=j;9C?l#kB99?J1)xJ79XRUutO)^qJjCxICd$Uf{LSZM z%fIe4;6Ju$3dVU&byx=2v5qZP(G)Ke8~j3E)K0JK7HJX(j~;I1KnZrtNGYlHq0-Lp zP6R>J?O;BA2j{{?b(7bP?jLVR`4mMFk>9+@Yin!MTS(H?{$L|#uY>-4zS*mzpT=Y8 z>v>+0XSI#5)Z9{l&&Aa%^;bHc_x2vIol7&n<<>>AqUsW35mHlY#!YYoGe;RzR zAg>Yae5C}^yg7M#w)oiCqIg$q*Qe3JK&8In;bAvGhdUt_YV;<`EC~`35q%aD0|EcS zE*7S5S~Qz3U%1>)=7ggGvk53GlOemj+;jBjFfKE5EnUYERgMHu>@E9Bx_Nft8T&DxU`3k%qT-0RU=u0QZ4 zbmGX_<*dAb^3;EYQb&lRRK7y6Njer*j=d^B`$#+Wr`k<&_JY1Cg+&pW(<`!~NPz6@ zngPY?TytlPpAgfoff^%8ZPlqO)1_Pe)?aYMfr;QPhelbz#EhpI;+nM(YJZo$YQ!KY zSTQ9wcCGC5yC{lM46)X4gs4-KJfsozQFL zFAgQL-q48%>O(AaO&$+PH4mnJTDEB85_3%*qLpDfNL&+a8t(cp7u0l%o(!bOX8Xm{ zT|Si4&1aR!CZY$WdG4iHsH&+IS5)jBQf0^z#`XH%N?lBBS2BSp+Md%NTaB9YPNMgM zpYiUY&|i$GK)oBU(gz0BQ2lw9mn@`}D7F~^>^Qlb< zXXWKv@o7#{uf{?z_A^R7`hR!c(gcoY)iSSp*oKz7L>2IRLkgALN~x+h4pV(gcRNo9 z&R$t}e#|;-=v~0EbR5f$pWZUeGlfZHt+jK`&MN6Eea~{|_r`!KtLXgNFD@=O8aFa{ zYLgEL48&e&<`P+3YrCG3D=AsJ+fcy6<+|BZnQ`q%4JHStroN`h8@{qUbf00e*_m$D zZmanX@}z}Fih+GOw4p0bGOYt-)TXwQ+qK)X?vFZ!yaXCa^V(Hl^HU%G7``Yq0#d^{ z^!+e4z7e*@h82Xnr8ornTPu;fnRNWurcPZ*wAa;-thyFoS_@y1a*?+F@ay?O&bny! ztajeOI}t%yA0H7QC%{z0oSu7j*2B}&ssE?O*4h5x?aA`r^-j@xdK|r$Z&Y3DSv_19 z9;eOwqo-%}^ZF{iEv~;xT2cZ14~Bs6Z{`h%fGSzD+}ux1-n;-D$I)u>)sv%-JOkvBfYbgd_nrvO@{6PjMeOcT_kBX zS!+*bQETaM8&*vbE+(;ZB!0{x6n&i_;jYqM)s<9sj^nCOiAdQuEBKe$Oy|vApS_TOk3c_k`DVzG(e2S?1xA zS>w1VQJsX3+XmzZ=X;Wx<#Dpr@9}P<=P5 z`(R9I#m|FKw4iQ`<|Lg$kXBdsfh(t)mYMnY=*K1R9=T?l->|=b|4yZo;19;Y7B&O{ zv)B1Bt##%Sy5_)5eSOJNdGOk`uJBbIO zVDNW1q#Em4=GGg7dh4G8jvHcNFc^7gjNWvb9xvN*rxy50H*BZq`-cfv+$eD3U3~nF zbA)R%E_P%Ap$@D~tOrMnlTZ)Cvnr^oGy%#Uc60`_1%+@bkX%EQIrXEj&u zT{AOP4YiBIo|5A5x$V?SY{#0iGiS?n+grM*Bj)Bhip$?Ad?&5 zEoOR|i6gs16q%^KTLs{p9v_ROj^yTQe!)%p)V;J#Lufq2wf(p7r-JCSs<7)Nt+4mC z;r2k}VE_sau3sbxZwYW=!&VkW*!yPdwDpX~Tg0YR8q0yvo56jm@sV#Ziei3n81yJ9 zMSXZbv@>k?iZtJ45;Uu=zHjMpJ>V%rgOoh}(U}L-v!I9;okO=J_ux45 z6&t)Fjt@e9bul!w;Q4VQ>@eXM&Jl-$C}qeS*CXFqhe2@mvG8WThXfde0dyYfD`Gfv zMxJ|cpj1I3yi^vu-s#vT(6p8`!Qop{dW3Q%>Yyg2sEFmsaC}y%Qdt6zfS{GHaQ&Kz zUFh4hz8;?2W8E`0b19=-qD8R5yWF6(iI+2fq1?M*7#1|6{7#a5q|ry(@{MU#!(#fS zHe8etS17lH2mbTlGu#Z8scB5SJ)YLl*Tn{1gt7n`)EKxOU+*By5jR*t*;FTXOd%19 zX_2edXK)Y(z12WFE$a&*Xu5-|jUu^BpXXAGp5pgzO%bEl-S1s^zIPJwn0nHeehw?H zI_4j^JO4Hp?lJyiJ45U$8fkTEn73rXG#NTpHGA#3V79QnIZND)pb*txY;?%-V&qK< zW&kwh`}UhTormSCaU4S2zWa;q@(Pmof@%*wn;x_Gs~#OWY}WG|hV4;NEAj0vb}%L& z2{{r~C&+xGy{T7L_Y;R6SbC%K^ZCgujIBFY)Z^;M63ZEw)>WMb$-%dr>w`@_-%Cn<`zIOLU$&tA zdKCQuecfjl%Lk@i$fB<8TgN z3U3R!IOZ=dO?>_+;y;2Etk%yqFv8!A%`Z+bL`bxKd|D?h>|@y9Nqz-Qw)cb{_-6VM zQ*bb4mnf3M?~i{}q)gCI{ORI68ZB1A637U&^XWqG=(s-E_#@dbDHi$JEaS6Uh6LHh z$;qd7)GVHbSGtz@x!eM|da01{F`D(-+s@aK7^;tiq#_|Gz4kfTWie`k>Rfzatj-f& zSifACPvDL_G~w~_hsBm8+6rt><%V(wr|T1;`1=o)g>5EN-Mh#L#^{}5(&J4!!Xh@7iavvta(GDFz?28?;4_15v%Lvb)g>CSU=I&N zSedEl0S=*0wl}Qp!9qEGe1z8O;TjQAkPiuE3dc4~lwojik-iVZi>%GyC7q|$pngp| zlo{ja-}`l-uaj{}2ZjZYwyYoqV{XO&c{M-reI-z_BfE=$!U4?kPdO6~SMb9O{pB#< zzaJe=foQlD>7D{XN`{QPv}M|OOXOi%QcVSus296gG=1aL=IAk6wXqYVrKOEYOf29v zT=so$pkqI?yUMr3!E>qa{GQ8VY$r+_j+=njw^aMW18z z(l)s2)xwI|AG?9<-PU0Gop{xvO3Nf8Ep0jXy$)K#schb-JEBn=Is78Kc9ySOBF>h9_UyPGK#T_Mb(!G7kxc;E)X3V!V8KUlyHlgoZerZjZzW&Oo@c1gZuHj^u4)ADc1nq2ds-H4#AMRzmIf$GB?eBu&SLIenu~ z>t}QH_9E64emC5FX}e$(S$uLx`~vxrA>DyA(Z8R?rC#lHMi0o-{w&mB6JQvR90^uI zJsI`MO#&|=A@@W9L7ul5o)~hfjOs*<9brU>3|}?tN93x;zjE5biCZ*NfTB*7^}YY0 z)#7Apdeu?!jTBD-r0B8t1~Bj;9i6QAZ(1H;$Iv2b9}2%_Si44={a{^qnI@{`J!UZP zFTFYoBoINoc$h0aO=x181S(JRVq*>~t;2`JCaGP?JiweoB59*E;rNk` zH1p*P6eIZ=CPds(E(kCa*?fJt$fT`I#G=1smT9sLSRJLpSy(^p?V}RRuW$l61^j~; z3!^GEy!ya9CgqVMvJ^(0pGm_R%oiKfYUUeQO)}W)z;TksNcGu-B{q}&g*L^__W?m- zN}TB;aNT;@*~qX@b(~a|7n)Lfc4UWtor_dq*bfw8$v)>4;iTWq9j7x*wQT+#|B)-E zNEw#9Sm81gqu>{oeX*az+j41aQs6y1af?jh!&kr7t2e0=?O?*T3OS=_|Ye zQ%Bp+s~c5Z`oQ;~Ss%H4@6)-y%@Wz`C#dnT@+q739O1R|nRpzj@gvxb(V#q3!y$P_ zC|X9BCEzqjcCH~a8Lx6ox_0+iScXTyoP+uG$Si=U=v_Nts7y+euAQl@_d>^QPI2Sr=k&(Upw#Cn+$w*@h&f~hDXLNx<}Xr zpDB;IbH@qnZfI3HI1Wud4|<2~8Wk31 ztpbA^ryi(bmQVklzf)q3>CXtC4yvoGq9bC|?#FQsKD|8Y9wkNOpK4-U2wi@iC0i;w zaDf&ZLr&!wpXgFgR1g%kD?(N5%FSzc-pv4Sa75B%Pqz&2)a93#U2GtqkSI_AhIP)U z)8a+cU=x_F9==PWd@-+FJ?dTY@L*oIJn3Ev^V|OeQ@#?on#7%_2 zP(9ukjP!RKvvTY~LZNZ@0httqt6}gqYm5W$stYvI?b>yizN;B2j5^Y?98rc7!kIu+ z``WV=_}Uxn(D@JLJX1|mpyGd{OTt<7I#-%{Hyw9Dsbi+O6n@H;QB7mG+TwZ$w9KC8 zZW%XhH8G-&tF9{Zb}6N|q5y>6GFMp-uHT}2o}dj^Y_g~539@-0dw%tON?9Hr457?p z!Tnj+1UWfA3U}ZCT11Z%mX)RMRv5Lh{cDz{iDietaxGT7(zTySeE-m%aBOuTtR8`YtQxvXDrQm^$O zb&WKWGJx<=P*BGP3Cj$>wHWLk=W-0n>&7hZobR`|o99-4kW2uw*zJ1>18la90u_-t z-y@z{AQ$ ziP8ADu4abk;Vs_pS)|cD65evC9mR-B;`iAi;(7PC)$b!FhazC0%e}>;-@VrQ=zpsW zRZ#gkTs9(~N5t?e40z3!r|>R%8GWub2{X%MMNYQj_c_@#G5A?|*%a zew9rNv>dmQk&&tL9($*K$`U-vL!z^6KsYWwZTwCjYt6?2C4BEUmTf3x%eX=RXNs`7 zw+x5I!^2kT0%28AnSa!aHbHt)u4|yDw~C%~;%j*LqL&=nNuil}bg@|ekgBvqWGE#& zJ8XN~xw=|;>51xhd{6gNp&M>)+_~A<%AU?I^mBdvw!(X5@>CKN2Y)oZSbLT^z2vB) z+jqSr?=p463W(kPnag`YIjVZi9uk-pTTFabtYTQDd$8YY6 z(9~J0h?GeIl^`MEueETU9=u;=dh#~-gdowi5w*F&b|Ve-1V0i;9H@_24V0f9R&U9_ zV{Bcgjlv?RbyYRLO)l@J3%EO!1#&T-aPv8z9#mlh5N%w(mmC)HyGLdDsj%Wv{CGY| zSu_D&w(w9;5tXB+_Egb9o?j7F^5|uKcv#F*+NGnWgd50ybo4;VH%)qhjU0<5L0eTn z6Xj&2Oq2MqW1Pp@S9b<-=xhuae7#1f#ed3txMQQ)qrZxgxG=X{vJh4%qI;*+D(Pvx zrE#LAgBR99ffsNOIRn!AKy_C zpP+VjH%$W=i&cc<-=pL>aAioJNnT3)S{}XHzJt{A+1Si&GE0w_aL_fV5r)JQ%k=(x zioBfMG)?78S*mm^3Z~((_PqPaf0S=rJXiy6gq;_|BXzNoRv(Ya3EMB^?>BKD<u*uN`P<=@Ms%IS{Ir3u-JF2@5~8z~@HM7JDg zqOcBM1-XImefQCfHU!pbXkr}3OYVL}%jA0$S(aQE5OywuXjW$Cuu9Q~rE=FM#m4v! zWicEVlVc-Xsu4=0s#|)o@P^g}^p+}Km$lEXGrM!tR=A|wS8-c3v2|>t@CP+PV(`_p z(Ja_<=XJZoMY$};W1;Be6T*8AYo+*Q&eq5MT7Xe~ZPyvOEw<&YsR+~E`#wRimV`bO zW18N@r(yYG*Xf-wl?fc1EeXx2vrtpIJkUs`kmvM|DGT98%6@5TE64%t4#s4)v`)Am zR}CPUpUPx!r=HZ*_t~V#-n94B}w zptE~-h%1EEXb$wqDuyJ1+@Ug9hC z{da>!FITftfQ#LcJPTkkzHXSHAb$coO&Mzj{?}HBLFwLfDFyV|U`i99zeb zpmSlZZ1z8a{-mbhLVA(iiRIvP4mLNq%0Oemj;$ZZLGd!$6#sS}3XdqQ2KxpFy<1QL zWXQ)M^uNGHgya@Bu(<*p^wG%t4`xI<2A1|8VkDXpL53PQAQ%6)p%5!0anox(~K_RuuK`Z;~Ma=PQo`qPlLcq96XZ z;c*JTY9{LkK@AVu;3}U~WDN%p|%4BkK0;OjtmS>Ipxnf|>OyaZkz7;rZQdgQxw>{RPNYLEcU|V9qDC0Cm&T zVHfG^Vr6l0_xSkuUUM2Te!)sy;#?jwnTLG|a{$B1Ppz+u4q>GXUlBKg>xbpTCICj1 zNO-8fZtE4=s?N<#cF*5lQTR@4f|MKcc$p+FE|6wrWs|149dKE=Gz82#nF_K)7k`g_ z;lhrSyO5zhA>e{}yA}Vs>JE^x%L{?RVquZ4P}8W<(LFg|GyWQgX5bS@m6uCe!lj}T z(Gn#$mD47MLwrK?19k{OryUNYSuZwRpw%7;eihBW)w{^;POEhs?|!kCKv$~$Bpi4o zB;Zv8W0N$V=}hl(+uG7U2K#Il1i(MuhHte0q*(ZO*N1h;Af`?HU(tKwS}3MaDuP(j z@pHn!o18X>ccQ+nDdO`{aAK=>+~VTm33rjRS4nq~`6YP)2AJT%SsVr&QZo4^mRj4e z7_2N4t!3HOxUpR&$ml5rC0`j52+ko@#_4O~DYokY@j!Li2`B+KbM7h;H?shsCCfP) zcmZ5>z)iUMjp$lElSJYcmsQU$=-Z#GeOpOxo46+uQ~3A8b&qGHg;{|`dDgWqHastV zxLbUJIjP*TqJODr0fDya)O76*Wh>Ol1jqSJD3*kU*}4fMNK3xGzE2x*}!+ZVe1{Ht9ir5rD8wXC~*mx35Ch`Tm{xdT(0kXTAohX#v-_ zcD5%@UxAVCTgO70ac1U9TU)2Fkh8F(n7=34Vnh&-lAef#_0qtt-Ch3E2k%PF$QZ)5 z2)(J9iQPt7iTxaXfc$tHLSth09%a09DGy?jq+@89&BiB%xb`7df92jnr6(Bh#H69@IgOe;Wm z0il@{4elRE&EWOv+#P0M8Xm4rQAjWwL95w)zV0le09l}hH*p#zu)PO*Be91Gy{@xT z_(Ju_+dllT3qP{1JzU37fJI6wGZ&3?a|Gk_#5r9-VEXqN=#bH3W32G^1XxKGv6?x|$1Z!@WZ~TuvMU6+1D0zq1EAEl|JU3y8 z5JnRTXoV?5^PY|IgX~Bhk>tPFdtS;iUw(-G=phWtSwTaHPcl-FFL(2lxQl%3DIs-M z_-giiu*~jHf+L0HexoQ1S;A4#e3|>)5*V1O2VJi_yV?FFeL3`aLCH%Wk?qilyj4MN zow%-l?!Wtd7cuRY6^?S)cgJuU+DR1!$oj7j=E&crYY#Rx#5~tEsjs4NaArc&n8S!B z1=BCtMd{8h@%3u%uAW1|WBWUky_FmOcMjJ+{=Hrt=LMl{wP5}ud{Kq01toA|OW+o% z{LF6_o4?p^zuaYmyaM1=^tDP2Y>oteG3;1^dQ)lT!7bYG1bm-Q2c#}0Lw{6|q-kUV zD5^RR9LkX(r|GGD^Y6%s;wXs{CYU46z-k`^bh7HH{O6PFqi$kny)r@J#)epdFlV5= z0oW+ft)MCdIIlhGuLp)!7SN~!bq=1d9VCq$2TM+-Nf{;+_1i=DpGofSUnE6Z1Erlk zY?nST+Z^$ItMMbJ>LwM?5;Ldhad-W=V69N=DSG3Ykn(-k&GhhT`PN6dNoi( zx(jHtBNIL;BW5NhhO1ym3j_QFYZ)4#?p(zWm)Uy`A4e%}`E7L+1^=HtRJ(F!eJAHD zm-qVrSl01{d@fFUb6msD=|E1bI+O6MM>$8zVq09c-(J#@Wsp%WQ^?oL z==j)Tf`Ql@N#5QN~reqLr1iR+s>%+B%A7Pt!|{$XRpt z3$Oq;lkBqn_>LtNSbi^P^~v}2HWubvTz*+sX9_TJ{?HemZAVByS{p?G;^^rhJ%yo=RSMC79- zj@KV3(Y7t*QYNs9Q!XSZS5vq_d$G#)4n{gXJE*m}t}D{)B7J%#K+f{;Zzz z%Zd4DRo`(l0VEedWVH}m{_`IXdG5IJKZg_p5O})! KxvXJa literal 35499 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 Ef=c+x5&!@I delta 1143 zcmV--1c>{>4)zL=BmseuC37dhz`%i4K~6I%J|`VlEfy#l84h15MgRZ+0d!JMQvg8b z*k%9#0E&^+e}8c)Q&w>Ga{>Dg0M)oYY{=zsE&u=o4M{{nRA_s`H8FPkZH+stssBiqt&589Qb1-R(nYl2F)08>=51(>0d?cV@g zp{OmOKtW-8uDbDS6tyLkC@4+ObvJ&4qPBtx1(oT!VSfN=ZQ1}JtxX#Mq_t@s0Jh}o zTr>#+;5hj@7fpfyI8MIKMU&_Q6a#>A08qsMx3_rlNw|Q!JG}TLT)_Q3UVIW9Al*5` z1xRiPIIGpFb9^KBcf;uVt4af&I!Cl#uYau9dJ+uq z(mA5_X7h8i(UV|+x6To*x7%Oat)7Gh6a~iQfdFd;C={S9F(!`$*f2n;09A!CnG;~k z0F@5_0ssSm0{{X51Aqen0ssSmTA(t?1ONsA1%FUUCIB!1D1b^b0e}G@1Ym~2Bsm0N zhQTB`1Ym~2Bv}FMGJPVzGh3z;XPLeb;FT@Ysk2Pq2=LC9>C6Y%HV&|D9AH}x7=5c4 zf3urR7T#XHaJK8|bm{HYOJ}>D%~sxCy>ho}JbOdH6$4BofNKVrMF8x;kw+#6$RiV+ zBY%?vq0csgKUtNCyh}HiFAQFJaiGMtwNCPrB{q?^O5RH%kp#g4W7{LPi>VJ%} z2M``0^8Xz`fBjFZL@0m|8Xyc{CXxjsZ^o4ulyUd{}Dj?JBWvwBU~(YU<_BnF_rA{t*sEY` zK-;P`@5lHKM$LhH&z^&QknDUpkb8tS<_XA|1Cv@4qRe|y8{{DKUeu131HDb_y-2-( zWy^sEc=vpOgOUb#Iv?;Qb=1=D>Yfjv{&9YQHrDs!(S!#llxGHXd>!nQeL&5WgHZua zKy-lQL!J=nDk5?J1^^Qn79ke0^8vO9^8Y=Jd;`F-U*`kH)^8=aX5FS)vz!0`002ov JPDHLkV1keK|8M{R diff --git a/modular_darkpack/modules/decor/icons/alleyway_32x48.dmi b/modular_darkpack/modules/decor/icons/alleyway_32x48.dmi new file mode 100644 index 0000000000000000000000000000000000000000..35eead0680234129bf79ff68ef611e83456f46c1 GIT binary patch literal 620 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 literal 0 HcmV?d00001 diff --git a/modular_darkpack/modules/decor/icons/bollards.dmi b/modular_darkpack/modules/decor/icons/bollards.dmi new file mode 100644 index 0000000000000000000000000000000000000000..644c09e5f1136d131843100d7732c2baaac19076 GIT binary patch literal 518 zcmV+h0{Q)kP)fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TB zGg33tGfE(w;*!LYR3KBSGBqbBzdSyrG%-hsi!&v&s2HS`i!-e#F*g;&HbkgRFG{T> zP9?-tgfc_i2I5krtl;YB0`?LB%VIv8%r4b00003ANklfJ{Dc1v@dycyjWFr$2eM5_4X57PgYgk@w{18^(jv9hXxoB)<}bd5oHE6%GDF# z1K~5kfIQAtSs!&?-mQiwU=&ZlpnYjD2?G{gg!ZxMBBgyv@dbP5=M^07*qo IM6N<$f~a2F5C8xG literal 0 HcmV?d00001 diff --git a/modular_darkpack/modules/decor/icons/carwash.dmi b/modular_darkpack/modules/decor/icons/carwash.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e5b19dd66c50d5295ed18669dae64470efe2027e GIT binary patch literal 1065 zcmV+^1lIeBP)%z2A}KRLQKqcm>gNJ>007{^Cb6Za7bE}x113pCK~zYI?Uk`^+CUh` z4+caKNZeheq#JijttcH__YImTFA#Q5-cv=&N^Y`fkg~>PpqcQ+4^Tpfh$(RyqE24& zF8$768y~UF1N1vfK1=@}-}g7x{Sn%wx^+xA>h7dfRcDx581tP0MnClXXBO_Q9v#Q2 z0?hrB{wc*Qeri-Us8MtO`1llC2N}>n(8W$Ad6P|Qe!9H8WL9?*fRzHeNrpKTqj(cQ zb~c-45?#?R08nhK0LQTvkTuXuqPl>7mT8eeu0sZBCQ(yx3`Mxe01(?LpqWHSFwO~> za5sU*riYwKwD;3sTySDcQU!`#q%HC$QESS9AcB8H`APuIBtnvLg9~;zMDLeo5}}7* z5^6f16abn@)cP~KRW*Mq(Ca4Kp`4Fz=Z`Wh0JcmneJRzo)P(Slzi-kDq#yV)7_6UH z-(4fs>n2+v=w%?i1aMYBHj-wtEkN&i{vvs6w(aDAEt7wbIA1J|c(k6#w(T6SWik@# zQ{nDwVj%$%Ml;!r3^!g;4nR)gS~uB=A|qaJ=}U?~qx9_9GTCt>wML2OHITkl-6Rli zs?Y||$N`#3y=;Wmfb+h|LLf1%n=GpAz|>6cPlVDu|Q0>!;LHc$HfZzd_%*BDiifX!Z=;*0*-xk<`XxtT-)%!4nEkI$(&C~uKO z!oihAVDp`t6(iAABq$F=?XX!f5~E6I;XxByiZs)+zMup(Et6VA7);%%X_V{hNhG)~ z%mu}bUinB@Ttx!ogJyi={Gei_Dd+?E&p2$=(_ z!%6F&s2!P3%3Gw7(3%g`?#E-f9wm_w2J?6`{#~wz^LIWQk00f7DIaFD@mvPwBeh>v zi4Z)sLr+S$?w-n9T(1&A-t5UxdH_9Fco;&603pKwem|6Mg{Sc5@{qv jBUh~o{bnS@n?n6Rn7f7|2H2pi00000NkvXXu0mjfHwN2& literal 0 HcmV?d00001 diff --git a/modular_darkpack/modules/decor/icons/cigarette_shelf.dmi b/modular_darkpack/modules/decor/icons/cigarette_shelf.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d5b652420855ecadb5aec2b488f112752e4d3a61 GIT binary patch literal 4292 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 literal 0 HcmV?d00001 diff --git a/modular_darkpack/modules/decor/icons/fallout_shelter_sign.dmi b/modular_darkpack/modules/decor/icons/fallout_shelter_sign.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f923ca5ecf7d35ea1b7b9c335ae17982ded201b9 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQv3lvA+84w9B>lni}y90Iyqd0 zk-fAd;s;QQu_VYZn8D%MjWi&qxGE%~#3i*jxhS)sBr`vcfuUkfa9BZ6>GvSI(O!L@P<%>i^dNg>74h`Jjqbh)4RjMILP?2v6sS}N0W|B3Q-7Nsj=Tg-?g*b zSatIXi4*2e9{Ff{o$+nm@NiWZx3_S2P@yK!*ssNmxA_=6?y4sJd^Tw=(E3bI7sn8b z-nac5c^eFPScKIM7&1>d!aYN$;o$G{F0=h7a&@-7{#QEbzT%%6ZzZqSJ}bg^mS;?3 z3fz&akzopr0P8@2I{*Lx literal 0 HcmV?d00001 diff --git a/modular_darkpack/modules/decor/icons/grate.dmi b/modular_darkpack/modules/decor/icons/grate.dmi new file mode 100644 index 0000000000000000000000000000000000000000..8288f99e76567b573726e31a78ea72e80071d21e GIT binary patch literal 537 zcmV+!0_OdRP);M1&0d!JMQvg8b*k%9#0ET*0 zSad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP1RE(aOlX%lgKr7?OWP6s57?y6}#2e_7u)+tK#G5T#@+P^LqJAf%260;aUmI}osv zITvN!nOn8iwZlqy$RdkZB#_b=DM8?UO5THDIY%vJUJ4h`QnjsFxBuyUV%?+e6IAFP zb)VJ>Y;h4DL9al41KB0=9LSR<|D}O}f!~f0X?)jOrSRtvLp%@!FV$7|hIiO*%b2&< zEm?|po{n3=^E+OBPwP{7LU5iL0R`tNtQ2@*C(bk>^03H2p6P b{55<5uJC6OC&u2s00000NkvXXu0mjfUt8u6 literal 0 HcmV?d00001 diff --git a/modular_darkpack/modules/decor/icons/lectern.dmi b/modular_darkpack/modules/decor/icons/lectern.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e7c8bd6380da635662d58c49b67f00a41e909633 GIT binary patch literal 683 zcmV;c0#yBpP)x00DGTPE!Ct=GbNc004D*R9JLGWpiV4X>fFDZ*Bkp zc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LY zR3KBSpfsl-vqXuDGbOXA7^I7fGp#5wHx&tAkqH<2vrP3%3)-{SAb_|x4;8h4gzp#E+1Z$wyyo= z1a#BmByQOa<%(H6hDbT}D#tRuOY3K#2bjm_n4xdTM)# z<6L&qz_G8uz<{s2RqUlidr!m@Jvh1f>UI_b=Jj^=p#W!bg;P6myJL512WEHtIN<96 z8+ONso~<(zY{{6haw zfo;FgsQPdD#o-T!{#L>y z&@X-%yzURsFZ6im56~}^us=Y*(1QK|{Xz@+1N4iH93-$S2L$frpkDv6yek0wLG=p? z0Dn;Zf(F*LRlRG!Bmn+^F$(=b^$Q9>f53i00q76dFQ806P=Hn5e+@k12VbmDtDxm{ R5}yD7002ovPDHLkV1g#hDW(7b literal 0 HcmV?d00001 diff --git a/modular_darkpack/modules/decor/icons/rack.dmi b/modular_darkpack/modules/decor/icons/rack.dmi index 9f03e310d95439fe0c7d987b8a744b0d8e0a479b..c098e4586f8bb78e7de985a7f005b71c23e5dcb9 100644 GIT binary patch delta 6465 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 delta 6057 zcmZ{oc|4T++s6l?#gewMHcmn!N+R0~A%$$&WhuKb9J`ELiA)(w5fd8QSjH{}gBhh` zbds&?G?vJi7|K|NG0&XN^Lw7>pXdJXetqxj`~AMI`&vHltMzip#q_gW`5Ceq0B^RF z7q2}G9K6R3!fqs62y7iV2Lgew-89sHm1bmd9XC7%E$)rp-6LGb;N|I2uOwRxMaIbk})kZv#g1z9)HRbtL)fd=%1jBPVz^T1w=Kc$fW=T>-T;N!*uDH zJE}s%9VR%&@k{HaH)lT|`E_q-o7o$^^_Vn9d}0E;QOY!DPJo{+M_Zjz-Du)!yy(*>NnkEl`tAH&XbeE-SqsRv-R!bw zMo^D+>08Hx?K(NY&mjoHSyt*M;l>ZBE3LsGMcTetpWKKt_4o8a$j(HA`W-n zLrm~|U%6HBl%(>?M#AAp{ijb-i{k7VGPcU;HxTxG7w?Z$9gPGuJQ)t#j%nh12ckA!_0_F!fMZ8#^{6@&*e6C z(3B1oZ^#RrVGJUiTwPDUQBE)v$1$eU6-cBSE~Se;nbOPrhXO%ibFJJ-hd!Q0eYnz# zzS9(!KFFu%9~%s#@{4g6?*&*H86|G48`^Pf6H+)ox!2=qyEODTZbbO}1n7(zT2=N0 zn!6I>c}GmIXni~9!KJIWn&Jkm5NxC6HdRn4V5q#E>1uqCE|MJu367Zne|qWtgOB;>k?*0)c^hX!;q1TsT*VKkPX$Dptr8ACKY%uw1iwcIZdV_ zabME-vHtY09SYw+qXJmS2k;_!H^&bz$>EylZr0@4iFNC+4rnB3(yc^su8FwpDyzZ} zfr_MlKWV*ie!g;~c^APgpgXfW=7>L&MVCn)(YPc1zKjgJ=jz}fI`^5>pWB7^ z2x50T@*8=7QvxFA0 z74poVB~QngS9+8599hNnJ`rK!CwAJ>F4U%Gb~`}gz8!R?NRHD#kO4WfNnxh1TW8(! z();_Fq#T!PFhF9bePs7Eh>!U)$Wzm>kDZYxy)14a}3bg}W!`%k?) z;mp)OGF$uUHN_A-ymYp;kvcMJCr%|36#~Nrny151ETcc|#`ZqAN0>(Y;$?$uF(<(Fu-MQdnA_<%<@wsFAc0l-P-> z)McE<1+jXm%UYt4_}UIQ<+Qlkw)s3eUCfGmK9*HgI|)+HVeMuWLR@~nSaW#FET{@; z8Ya{y4p9NS>J$F)xQ*6bu9n@0;-zqxNWhMJOSghFoBDR!ANt^;a+fZ72z_L3PKpzh zO`^!$t zFLcj6kI54kmP&cqB2w4;eTvc9kd>5Aal=C|gNE0swzSDajq-u9SHLa=;XA?;nsPLu zLg$B7HJrV#@%d#qaAhP(Xw^tN0#fqhk$%SWt@mB6ce|1X@PTb9L!vZk2F0zN=p~^S zz7#ObL~b`2gqV4JOiAv3?Y6Pakf{kN*1zPJ_q(&o%$T)t@A}$Te)(Qh+Qb zr}F;0O%#ifSm+EVjW&c`L#C`KU~7ISk+Jzj2L>22^Uy%*29e)|}%wNv-k5`-@_R0XA{a*obOV_ZQ$DGnMqqTHI&z!z4QoxMNU zrRb+@FW>#0HN~d3umhcVnUdDf9uj7*$GeL@Nt0T{@ycj!uIlqq0{d_ z3^cp&NPk`#7n6!a^>)vqkGVf6I;O=bnfzCv#N&M`(A>ku`9`;zoKb8Q=;gFi{Xh=Z zqs`27NgKzd4tFwtB4jsUG-{?X1a)O-6TBxF8&)3_l^%^|jrN7b9*g^IKV4bkL^{s^dy#G3UAc5~>9iynI zD2D|>c;f1EXAnsdBu)sR*i$mQ;80$BFnRrMD*DFe4WeFd+eoe`mvJv z1%||axcVnx?{r~Pycxnd5VQwct34tvB*OA?sZ6_A$GD+|_kg`gQ|7j1uCE9Mxr5Mf z_pMdn(rnLzuxEm%$4IY(n0ZxICcKfiWPh758tN-s;!K)rGzPYT+_lw z9=D-IVd+cyW2Q~~)WW~V(p1)ZlfweCk=e|4DJ!dWu29(AG;Y~r@cGH4?38KSVLzY( zo;Y0QpkbRSJFR?7jG0Q|*Ylu}B5lOn&XZMVP#4CduxSEMhMFVk?V{iVSb;}PuRglB zNaz&L?y2fi4sYP4O@39X?5oO2(Y9lBWA63ps!A`MAqh{BOh(Bn17l*1BmkuVCQSy zLrXlg`-FF&8I}^~-v+nW|0Oa$_VWc49_ij%%1qnH76#XM%fHr`k@I*Y@lK+6Jx*O! zMy`3k*&lJaC-#Xj#QP%>+V%J6ddMaiX@)Sq0t#AO1CkL7tMa2RWM)xO?Da%vn??TE&f9$k2E++U=v}!YgiC|YPWW-99i8Dgc za^laR)`e632CtI8fH$G>J>4%U8|?MDihyg21_mFe#;$n>Xq`X}CG{p%7-P7_FD)L! z>xBQj(!Cir%V7Yeg;yGYLWUCCdXeAJvIRC8M!|6&$l zWjPjK$nsBTTnj=zNaP@=juM6O^Xxm%V#?`bymP2(4@xx5)%0at!&s)MKdP+W_wnjP z2W2TCjSgQ#qq6bN8b8X60)5AjX&mJw)#BFS{+4@WEQMbz4WPd`mr(jh2|-pq3bzUO zhuoXDpZn}3V*rDm)*ab-JXqRp5%;afw8Et=B5aS%H#D}+zV`hDJ4Z+giagwx%!f6S z^JKea!mB*qMJNiAmYNfHx+dE*1ATpyTiJ`N#$u4e*;slxUot#kz2=;BaXr=q1`T7< zO4W+tW1NOxzT}BEg_8| z^W7!8&-Cy_8J=Xj+E%4E534aXm+*xpXw7*p`6r<%N-SwISy(GopmS<0X033nETlpm zZ?nv=$*G=}grXC8ad<+I;~>w+w;+@rbKG(^4p-fYJdO10j`T z8_AS+>N1+Vu7pdGEB`JJ+9O_HGEYE$?jy)Q$YatUe+RD!fqsdt9L+V+5O!Q+cmyX8P zsM0Up%^#+R*q5MAU`}$ox|@eeRGR`#an5U3p$>NIhf9B7f%nz^uU&(^7rzXW1PW87 zw8bZ*qJlEZ7p=35Y1}!vmmy#0$euzT83M!1S2O92VBfwJj8m!1K@oy1ISrz+P_kD9 z=N~puw4s%02cAOyf{=1Qt#jS$gbgNq6^(tG1XStUHD2Tx_saPR26qEg9%t-&N>cYZ z=3<7(>{IDCg^_%#{EKH)G5>h3%Rk<*UIEPM^J{AAkoWK+I?#Ul1_aY9hKM()p%TX z5)5{J>g2brPZ4YZqGJP)hYgqI3GAW}=I(<+_&DE;_C2Ee%|k9wEvE)`4GrV$C&I;B zqt{`UDbG()bLi7;+1T}HoIK8iqmqR3SO3v!ZR^xBc?Y~HZhhVBpAij3-m(JIC^&PH zL*=Q<9F2z&i(lT}_|F@~_g^UsTLL&b3%7y(KdS3IgE1ot_O$+u*PXoR6A;*vFHbO+ zYW}#-!pAkmBS(&0c7?qdpzseI5SJ3S`Uk*&PkcBzgL1zm5IGfFym9y7FE`g8xiwCl zR1xjYixg)pk0kozBoZMH+|4z##>SNPS}JD7Kyd)$$B#9L9lWU7u1c+Hn{defF*#Mj zy!lhq9fH@c5&O&39r3H~AX7!>wwDD!qr&r$%~h-$u}*IyItuIN;%3oSN%IRfCuR1d zA^dzZ8j{Ui!M{S@tQ$;07YG*@9gGR!Z6lI2Nn>S#m}tH_Vdl-^v|Y83cL)4}9&-W? z=n4^xe-0KC{^$eF*LVIKsxici$yH%YMp6TOUooCtPb-C0yBH^ghB|zR?P`Jvk@h#? ziI^9oOn#xAk6t3Ed2!GxUyx2I0auGuk#XrhBsWC=a|9&Iq+9_E>_&w(zG1FoEEv1A zNoX>NwN1+|q;#DbO8R@gr?Z}GZ5eo(t&{W1-%*_uv%R|Z?Pjq;n=u#qMq5@`?*UL{w*sJR<6p1^FJz=zy7 z^-LD~v!5%7chNWgG;GSf1TgpmHzmf3^le6*-Zyj{Q~2zRS}%x%n2pG2)wUha@_Zk<@kTn#FmMrd^>1hQnrK@!BCzScPvgKw)NBL%DEp=+p zN7S!OQrBusMryJiV-^RcJxnkW*iXXqEbzJc4sa|TV+xQy)Eo6<` zw}f*VqqUI7tOpA zm^>^Ebuf!7_1XL`vhfmVU%F={0-ebbpCb z(D_u!<#+yVQw07-mn6@yjdi_Wah=EAz0@A{csDYSCQ!rG5EB+Sy!$Y`{fx9 z>JBsG=Ab=%Sg1}rResRfEi1z=Mrh}L`fCp!hq`YU)K8OuRpj%snpJ62aE$j&U&;c1 zfas&cssM|*lYp~Oj}=Sizgsf_5{-Fww^NiS;dxpbIeVI~GY8!1cHrUuKmgpOpui0% zogD*NE;x6*P~5G!$b5T=Tz>l`Gw=68EmQ#oPZuG4D?~RlgOZa{1#!rSK10T@W2|0r z^<2d}hY1!S^%pI9NrDL=&fN6Ct46WIg;Ik(dJ-J^+=IO@mx{D#m~91do|{JIhBepR GAN?2gUpeXk diff --git a/modular_darkpack/modules/decor/icons/torch.dmi b/modular_darkpack/modules/decor/icons/torch.dmi new file mode 100644 index 0000000000000000000000000000000000000000..38c97a794b0ab8cfb00d70c7b2993dd280ebc17b GIT binary patch literal 3056 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 literal 0 HcmV?d00001 diff --git a/modular_darkpack/modules/decor/icons/trash.dmi b/modular_darkpack/modules/decor/icons/trash.dmi index 9eaa281aadd543b140cb44c14deb2b81ce198abc..cf1b35a677b8224d895a8ace2333cc259cafc87e 100644 GIT binary patch literal 11739 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 Date: Mon, 15 Jun 2026 01:03:01 +0000 Subject: [PATCH 10/20] Automatic changelog for PR #1144 [ci skip] --- html/changelogs/AutoChangeLog-pr-1144.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1144.yml diff --git a/html/changelogs/AutoChangeLog-pr-1144.yml b/html/changelogs/AutoChangeLog-pr-1144.yml new file mode 100644 index 000000000000..76f8d9b01c43 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1144.yml @@ -0,0 +1,15 @@ +author: "dwinters99, Major00, INFRARED_BARON" +delete-after: True +changes: + - rscadd: "sleeping bags" + - rscadd: "carwash rollers, torches, and grates (2 kinds)" + - rscadd: "fallout shelter signs (2 kinds)" + - rscadd: "bollards (4 kinds)" + - image: "new urinal sprite" + - rscadd: "new table type + addons" + - rscadd: "cigarette shelves" + - rscadd: "metal rack" + - rscadd: "commercial freezers" + - image: "onfloors for ketchup, mustard, forks, knives, and spoons" + - rscadd: "new trash and alleyway sprites (all by INFRARED_BARON)" + - rscadd: "lectern and pulpit" \ No newline at end of file From e68f77e17ff19cb3651a3c5a627ec47c45b105b5 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 05:06:43 +0000 Subject: [PATCH 11/20] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-1015.yml | 6 --- html/changelogs/AutoChangeLog-pr-1017.yml | 5 --- html/changelogs/AutoChangeLog-pr-1062.yml | 5 --- html/changelogs/AutoChangeLog-pr-1091.yml | 4 -- html/changelogs/AutoChangeLog-pr-1108.yml | 4 -- html/changelogs/AutoChangeLog-pr-1109.yml | 4 -- html/changelogs/AutoChangeLog-pr-1114.yml | 4 -- html/changelogs/AutoChangeLog-pr-1122.yml | 4 -- html/changelogs/AutoChangeLog-pr-1126.yml | 4 -- html/changelogs/AutoChangeLog-pr-1127.yml | 4 -- html/changelogs/AutoChangeLog-pr-1128.yml | 4 -- html/changelogs/AutoChangeLog-pr-1129.yml | 4 -- html/changelogs/AutoChangeLog-pr-1132.yml | 4 -- html/changelogs/AutoChangeLog-pr-1137.yml | 4 -- html/changelogs/AutoChangeLog-pr-1139.yml | 4 -- html/changelogs/AutoChangeLog-pr-1144.yml | 15 ------- html/changelogs/AutoChangeLog-pr-987.yml | 9 ---- html/changelogs/archive/2026-06.yml | 55 +++++++++++++++++++++++ 18 files changed, 55 insertions(+), 88 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-1015.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1017.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1062.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1091.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1108.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1109.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1114.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1122.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1126.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1127.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1128.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1129.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1132.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1137.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1139.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-1144.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-987.yml diff --git a/html/changelogs/AutoChangeLog-pr-1015.yml b/html/changelogs/AutoChangeLog-pr-1015.yml deleted file mode 100644 index bb8896daa5d3..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1015.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - balance: "Reworks melee to roll damage based off two rolls (to parody the TTRPG and brawl)" - - balance: "Protean claws use brawl" - - refactor: "Removes snowflake protean claws damage buff in favor of generic melee code" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1017.yml b/html/changelogs/AutoChangeLog-pr-1017.yml deleted file mode 100644 index 6046101dc5dc..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1017.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - balance: "Locks plants mutating behind a \"strange\" tray. (To be mapped inside pentex labs)" - - balance: "Removes the exotic seed crate from cargo" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1062.yml b/html/changelogs/AutoChangeLog-pr-1062.yml deleted file mode 100644 index c20c842d90dd..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1062.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Stutternov" -delete-after: True -changes: - - rscadd: "Adds forced-flee movement to terrifying presence." - - rscadd: "Adds extended action debuff+stun to terrifying presence." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1091.yml b/html/changelogs/AutoChangeLog-pr-1091.yml deleted file mode 100644 index 8d5bb5581c3d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1091.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "chazzyjazzy" -delete-after: True -changes: - - rscadd: "adds artifacts to dumpsters and the fishing loot table" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1108.yml b/html/changelogs/AutoChangeLog-pr-1108.yml deleted file mode 100644 index d4c1c6f5aa12..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1108.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FalloutFalcon, somniworld" -delete-after: True -changes: - - image: "Replaces the corax war form hud icon with a better icon" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1109.yml b/html/changelogs/AutoChangeLog-pr-1109.yml deleted file mode 100644 index 7b4f7e4aa8e9..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1109.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - code_imp: "ritual book pulls vars from runes in a same method" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1114.yml b/html/changelogs/AutoChangeLog-pr-1114.yml deleted file mode 100644 index 39627fa506c0..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1114.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - bugfix: "underplates layer above tables again" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1122.yml b/html/changelogs/AutoChangeLog-pr-1122.yml deleted file mode 100644 index 597350f5ca2d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1122.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Icarus-The-Sun" -delete-after: True -changes: - - rscadd: "Adds Hemophiliac, Lame, Light Sensitive, Permanent Wound, and Short flaws" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1126.yml b/html/changelogs/AutoChangeLog-pr-1126.yml deleted file mode 100644 index d04a0064670b..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1126.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - bugfix: "Corax can have form specific flavor text like Garou" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1127.yml b/html/changelogs/AutoChangeLog-pr-1127.yml deleted file mode 100644 index 79b95bde816c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1127.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - bugfix: "Corax and Garou fur colors wont override one another" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1128.yml b/html/changelogs/AutoChangeLog-pr-1128.yml deleted file mode 100644 index c7b30290a3ff..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1128.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - bugfix: "Characters who have tzimisce selectected internally will not have a zulo preference if not the proper splat" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1129.yml b/html/changelogs/AutoChangeLog-pr-1129.yml deleted file mode 100644 index 8182659837a8..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1129.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FalloutFalcon" -delete-after: True -changes: - - bugfix: "balefire no longer runtimes" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1132.yml b/html/changelogs/AutoChangeLog-pr-1132.yml deleted file mode 100644 index ad88a05353df..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1132.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Marshmellow105" -delete-after: True -changes: - - bugfix: "fixed stone floors using cave floor icons" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1137.yml b/html/changelogs/AutoChangeLog-pr-1137.yml deleted file mode 100644 index f2bdab0f1e56..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1137.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Dusk-a" -delete-after: True -changes: - - balance: "Gives Corax the proper amount of gnosis they should have" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1139.yml b/html/changelogs/AutoChangeLog-pr-1139.yml deleted file mode 100644 index eda8cac2747a..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1139.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Beautiful TG coders" -delete-after: True -changes: - - code_imp: "TG Pull. Thank you TG." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1144.yml b/html/changelogs/AutoChangeLog-pr-1144.yml deleted file mode 100644 index 76f8d9b01c43..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1144.yml +++ /dev/null @@ -1,15 +0,0 @@ -author: "dwinters99, Major00, INFRARED_BARON" -delete-after: True -changes: - - rscadd: "sleeping bags" - - rscadd: "carwash rollers, torches, and grates (2 kinds)" - - rscadd: "fallout shelter signs (2 kinds)" - - rscadd: "bollards (4 kinds)" - - image: "new urinal sprite" - - rscadd: "new table type + addons" - - rscadd: "cigarette shelves" - - rscadd: "metal rack" - - rscadd: "commercial freezers" - - image: "onfloors for ketchup, mustard, forks, knives, and spoons" - - rscadd: "new trash and alleyway sprites (all by INFRARED_BARON)" - - rscadd: "lectern and pulpit" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-987.yml b/html/changelogs/AutoChangeLog-pr-987.yml deleted file mode 100644 index 645763b78351..000000000000 --- a/html/changelogs/AutoChangeLog-pr-987.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: "FalloutFalcon, Major00" -delete-after: True -changes: - - rscadd: "Adds new gifts: Jam Weapon (Children of Gaia), Control Simple Machine (Glasswalker), Hidden Killer (Red Talon), Aura of confidence & Fatal Flaw (Shadow Lords), Speed of Thought (Silent Striders), Bane Protector (BSD)" - - rscadd: "Adds some little lesser banes" - - qol: "powers that spend willpower log it to chat" - - qol: "removes pointless to_chat that just says \"you cast gift\" as most have better built in feedback" - - image: "\"Tribe gifts: Part 1\" gifts now have unique icons" - - code_imp: "adds signal that code can hook onto to change bonus dice of rolls" \ No newline at end of file diff --git a/html/changelogs/archive/2026-06.yml b/html/changelogs/archive/2026-06.yml index edefa309d06c..7958517a5180 100644 --- a/html/changelogs/archive/2026-06.yml +++ b/html/changelogs/archive/2026-06.yml @@ -43,3 +43,58 @@ - bugfix: sarcophagus event will now fire only once per round max ellie: - rscadd: adds dragon's breath shotgun ammo +2026-06-15: + Beautiful TG coders: + - code_imp: TG Pull. Thank you TG. + Dusk-a: + - balance: Gives Corax the proper amount of gnosis they should have + FalloutFalcon: + - bugfix: Characters who have tzimisce selectected internally will not have a zulo + preference if not the proper splat + - bugfix: underplates layer above tables again + - bugfix: Corax can have form specific flavor text like Garou + - bugfix: Corax and Garou fur colors wont override one another + - balance: Locks plants mutating behind a "strange" tray. (To be mapped inside pentex + labs) + - balance: Removes the exotic seed crate from cargo + - code_imp: ritual book pulls vars from runes in a same method + - balance: Reworks melee to roll damage based off two rolls (to parody the TTRPG + and brawl) + - balance: Protean claws use brawl + - refactor: Removes snowflake protean claws damage buff in favor of generic melee + code + - bugfix: balefire no longer runtimes + FalloutFalcon, Major00: + - rscadd: 'Adds new gifts: Jam Weapon (Children of Gaia), Control Simple Machine + (Glasswalker), Hidden Killer (Red Talon), Aura of confidence & Fatal Flaw (Shadow + Lords), Speed of Thought (Silent Striders), Bane Protector (BSD)' + - rscadd: Adds some little lesser banes + - qol: powers that spend willpower log it to chat + - qol: removes pointless to_chat that just says "you cast gift" as most have better + built in feedback + - image: '"Tribe gifts: Part 1" gifts now have unique icons' + - code_imp: adds signal that code can hook onto to change bonus dice of rolls + FalloutFalcon, somniworld: + - image: Replaces the corax war form hud icon with a better icon + Icarus-The-Sun: + - rscadd: Adds Hemophiliac, Lame, Light Sensitive, Permanent Wound, and Short flaws + Marshmellow105: + - bugfix: fixed stone floors using cave floor icons + Stutternov: + - rscadd: Adds forced-flee movement to terrifying presence. + - rscadd: Adds extended action debuff+stun to terrifying presence. + chazzyjazzy: + - rscadd: adds artifacts to dumpsters and the fishing loot table + dwinters99, Major00, INFRARED_BARON: + - rscadd: sleeping bags + - rscadd: carwash rollers, torches, and grates (2 kinds) + - rscadd: fallout shelter signs (2 kinds) + - rscadd: bollards (4 kinds) + - image: new urinal sprite + - rscadd: new table type + addons + - rscadd: cigarette shelves + - rscadd: metal rack + - rscadd: commercial freezers + - image: onfloors for ketchup, mustard, forks, knives, and spoons + - rscadd: new trash and alleyway sprites (all by INFRARED_BARON) + - rscadd: lectern and pulpit From 59a9a8848bd989cf9a6f4017eb4d9368370181a8 Mon Sep 17 00:00:00 2001 From: Stutternov <47883419+Stutternov@users.noreply.github.com> Date: Mon, 15 Jun 2026 06:22:37 -0400 Subject: [PATCH 12/20] Update obtenebration.dm (#1083) ## About The Pull Request https://github.com/The-Final-Nights/The-Final-Nights-Rebase/pull/332 Mirrors fix on downstream, fixes Obten 5 still taking embeding damage which allowed you to shoot out eyes of targets despite being damage immune. Also Gangrel claws were fully ignoring the form, only fire-based Agg damage is supposed to effect them; not physical agg. Plus doubles the incoming burn damage as it says in TT material. Re-enables flying too since it's slower than mist form and very obvious anyway. (Think it's TT accurate, hard to tell due to vaugeness of what 'gravity immune' means.) ## Why It's Good For The Game Fixes Obten 5 to no longer be able to take damage from bullet embedding stuff. Plus TT accurate changes to let you actually counter people properly in shadow form still. ## Changelog :cl: fix: Fixes Obtenebrate embedding issue balance: Makes Obten 5 TT accurate with burns, agg damage, etc. /:cl: --- .../code/discipline/obtenebration/obtenebration.dm | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/modular_darkpack/modules/powers/code/discipline/obtenebration/obtenebration.dm b/modular_darkpack/modules/powers/code/discipline/obtenebration/obtenebration.dm index f08828f82ca8..8c84ce5d4be2 100644 --- a/modular_darkpack/modules/powers/code/discipline/obtenebration/obtenebration.dm +++ b/modular_darkpack/modules/powers/code/discipline/obtenebration/obtenebration.dm @@ -239,6 +239,8 @@ cooldown_length = 1 TURNS var/activating = FALSE var/saved_brute_mod = 1 + var/saved_burn_mod = 1 + var/saved_aggravated_mod = 1 var/saved_clone_mod = 1 var/saved_stamina_mod = 1 var/saved_brain_mod = 1 @@ -273,8 +275,10 @@ playsound(owner.loc, 'sound/effects/magic/voidblink.ogg', 50, FALSE) saved_brute_mod = owner.physiology.brute_mod owner.physiology.brute_mod = 0 - //saved_clone_mod = owner.physiology.clone_mod - //owner.physiology.clone_mod = 0 + saved_burn_mod = owner.physiology.burn_mod + owner.physiology.burn_mod = 2 + saved_aggravated_mod= owner.physiology.aggravated_mod + owner.physiology.aggravated_mod = 0 saved_stamina_mod = owner.physiology.stamina_mod owner.physiology.stamina_mod = 0 saved_brain_mod = owner.physiology.brain_mod @@ -286,6 +290,7 @@ ADD_TRAIT(owner, TRAIT_NOBLOOD, MAGIC_TRAIT) ADD_TRAIT(owner, TRAIT_PACIFISM, MAGIC_TRAIT) // Can't physically attack while in this form //ADD_TRAIT(owner, TRAIT_MOVE_FLYING, MAGIC_TRAIT) // Flying to simulate being unaffected by gravity + ADD_TRAIT(owner, TRAIT_PIERCEIMMUNE, MAGIC_TRAIT) //Stops bullets from embedding and taser electrodes no longer connect owner.pass_flags |= (PASSDOORS | PASSTABLE | PASSSTRUCTURE) // Phase through doors & fences / tables / machines, dumpsters, barrels, lampposts @@ -297,7 +302,8 @@ to_chat(owner, span_notice("You return to your normal form.")) playsound(owner.loc, 'sound/effects/magic/voidblink.ogg', 50, FALSE) owner.physiology.brute_mod = saved_brute_mod - //owner.physiology.clone_mod = saved_clone_mod + owner.physiology.burn_mod = saved_burn_mod + owner.physiology.aggravated_mod = saved_aggravated_mod owner.physiology.stamina_mod = saved_stamina_mod owner.physiology.brain_mod = saved_brain_mod animate(owner, color = initial(owner.color), time = 1 SECONDS, loop = 1) @@ -307,6 +313,7 @@ REMOVE_TRAIT(owner, TRAIT_NOBLOOD, MAGIC_TRAIT) REMOVE_TRAIT(owner, TRAIT_PACIFISM, MAGIC_TRAIT) //REMOVE_TRAIT(owner, TRAIT_MOVE_FLYING, MAGIC_TRAIT) + REMOVE_TRAIT(owner, TRAIT_PIERCEIMMUNE, MAGIC_TRAIT) //Stops bullets from embedding and taser electrodes no longer connect owner.pass_flags &= ~(PASSDOORS | PASSTABLE | PASSSTRUCTURE) owner.density = saved_density From db8ab21ed0d53872dc3031b3a489f5830a80aeb0 Mon Sep 17 00:00:00 2001 From: "darkpack13-api[bot]" <220339179+darkpack13-api[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 10:23:01 +0000 Subject: [PATCH 13/20] Automatic changelog for PR #1083 [ci skip] --- html/changelogs/AutoChangeLog-pr-1083.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1083.yml diff --git a/html/changelogs/AutoChangeLog-pr-1083.yml b/html/changelogs/AutoChangeLog-pr-1083.yml new file mode 100644 index 000000000000..bf0e2d94d485 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1083.yml @@ -0,0 +1,5 @@ +author: "Stutternov" +delete-after: True +changes: + - bugfix: "Fixes Obtenebrate embedding issue" + - balance: "Makes Obten 5 TT accurate with burns, agg damage, etc." \ No newline at end of file From dd040efa5db548614f2652fb68c061428e992356 Mon Sep 17 00:00:00 2001 From: chazzyjazzy <33268885+chazzyjazzy@users.noreply.github.com> Date: Mon, 15 Jun 2026 06:24:34 -0400 Subject: [PATCH 14/20] thaumaturgy 'inscription' ritual (#1111) ## About The Pull Request clanbook tremere revised page 58 lists a ritual where tremeres can, via ritual, inscribe another ritual onto a piece of paper for non thaumaturgists to use ## Why It's Good For The Game ideally this will allow non thaumaturgists access to certain tremere rituals, furthermore i have plans to restrict rituals and lock the knowledge of them behind the research system so not every tremere is omniscient ## Changelog :cl: add: adds 'inscription' ritual for tremeres which allows them to inscribe a ritual onto a parchment for non thaumaturgists to use /:cl: --- .../rituals/code/ritual_rune_drawing.dm | 2 +- .../ritual_thaumaturgy/icons/onfloor.dmi | Bin 0 -> 293 bytes .../icons/ritual_scroll.dmi | Bin 0 -> 403 bytes .../ritual_thaumaturgy/rituals/inscription.dm | 69 ++++++++++++++++++ tgstation.dme | 1 + 5 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 modular_darkpack/modules/ritual_thaumaturgy/icons/onfloor.dmi create mode 100644 modular_darkpack/modules/ritual_thaumaturgy/icons/ritual_scroll.dmi create mode 100644 modular_darkpack/modules/ritual_thaumaturgy/rituals/inscription.dm diff --git a/modular_darkpack/master_files/code/modules/rituals/code/ritual_rune_drawing.dm b/modular_darkpack/master_files/code/modules/rituals/code/ritual_rune_drawing.dm index 6cb0555f1c08..cdf5539c2c65 100644 --- a/modular_darkpack/master_files/code/modules/rituals/code/ritual_rune_drawing.dm +++ b/modular_darkpack/master_files/code/modules/rituals/code/ritual_rune_drawing.dm @@ -53,7 +53,7 @@ for(var/rune_path in subtypesof(rune_type)) var/obj/ritual_rune/R = new rune_path(owner) if(R.level <= level) - runes[R.ritual_name] = list("path" = rune_path, "cost" = R.cost) + runes[R.ritual_name] = list("path" = rune_path, "cost" = R.cost, "level" = R.level) qdel(R) return runes diff --git a/modular_darkpack/modules/ritual_thaumaturgy/icons/onfloor.dmi b/modular_darkpack/modules/ritual_thaumaturgy/icons/onfloor.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c45d82b3a38ae469d045696f9ee9c573459ede6e GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{*8>L*=xS*`e02Ehx5qoS z%s<1xu%q~M7*Lk6B*-tA!Qt7BG$1FdDkP%BCAB!YD6^m>Ge3`kp<+&OSV2+g_bh0;`7@{#TIYA=I zL4YHGWy+K(zA_hBWdgVC*s()HiQ8aR+bXF=92%OMf&u}&p)R5ZW@aKs1Oyz!1PcoV n1s%l%f`WvK4t}|`fQ>=s3&*Te3P$BXV;MYM{an^LB{Ts5*r#X5 literal 0 HcmV?d00001 diff --git a/modular_darkpack/modules/ritual_thaumaturgy/icons/ritual_scroll.dmi b/modular_darkpack/modules/ritual_thaumaturgy/icons/ritual_scroll.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6cce672dd52ee3f926b87b9abc74288d4a11d7cc GIT binary patch literal 403 zcmV;E0c`$>P)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+ z(=$pSoZ^zil2jm5sW`bPKPN|ti!&v&s2C_<$iOc$m|vMSxrCXRiw{83*{zQ)XIikh znb@iQ@?U$sDEi-umorE=yD(6lZvn+M5Yiq9DXH}!OcM~12AAVwN089gLjnV#s}EFw z5h~nyAp!LLy_f=xP&WpeUIKh_ux5t2Fte+OWzYO5{S_$@2GBNj6`AyeIS}Rc>DxT$ xH{^Ewi4tm+{g~rG?MelMRe2VU^?UHYuNRMuF3RV+aq$2E002ovPDHLkV1f?msFnZ# literal 0 HcmV?d00001 diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/inscription.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/inscription.dm new file mode 100644 index 000000000000..c973f37b456e --- /dev/null +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/inscription.dm @@ -0,0 +1,69 @@ +// from clanbook tremere revised page 58 + +/obj/ritual_rune/thaumaturgy/inscription + name = "inscription" + desc = "Create a scroll inscribed with vitae to allow unskilled thaumaturgists or those without thaumaturgy to use a level one or two ritual." + icon_state = "rune5" + word = "" + level = 2 + sacrifices = list(/obj/item/paper) + var/ritual_selected + +/obj/ritual_rune/thaumaturgy/inscription/attack_hand(mob/living/user) + var/datum/action/ritual_drawing/ritual_action = locate() in user.actions + if(!ritual_action) + return + + var/list/ritual_selection = ritual_action.get_available_runes() + + // gonna inscription the inscription ritual + ritual_selection -= "inscription" + + for(var/ritual_name in ritual_selection) + var/ritual_level = ritual_selection[ritual_name]["level"] + if(ritual_level > 2) + ritual_selection -= ritual_name + + var/selection = tgui_input_list(user, "What ritual do you wish to inscribe onto the scroll?", "Ritual Inscription", ritual_selection) + if(!selection) + to_chat(user, span_cult("You decide not to inscribe a ritual onto the parchment.")) + return FALSE + + ritual_selected = ritual_selection[selection]["path"] + . = ..() + +/obj/ritual_rune/thaumaturgy/inscription/complete() + . = ..() + + if(!ritual_selected) + to_chat(last_activator, span_cult("You haven't chosen a ritual to inscribe.")) + return + + var/obj/item/thaumaturgy_scroll/ritual_scroll = new(loc) + ritual_scroll.name = "thaumaturgy scroll ([initial(ritual_selected:name)])" + ritual_scroll.desc = "A scroll inscribed with vitae, allowing its holder to perform the '[initial(ritual_selected:name)]' ritual without thaumaturgical skill. The ritual is described as follows: [initial(ritual_selected:desc)]." + ritual_scroll.ritual = ritual_selected + + to_chat(last_activator, span_cult("You inscribe your vitae onto the paper using Thaumaturgy, allowing the scroll, and the ritual inscribed, to be used by unskilled thaumaturgists, or those without any skill in Thaumaturgy at all.")) + qdel(src) + +/obj/item/thaumaturgy_scroll + name = "thaumaturgy scroll" + desc = "A scroll allowing non-thaumaturgists to use ritual thaumaturgy." + icon = 'modular_darkpack/modules/ritual_thaumaturgy/icons/ritual_scroll.dmi' + icon_state = "scroll" + ONFLOOR_ICON_HELPER('modular_darkpack/modules/ritual_thaumaturgy/icons/onfloor.dmi') + var/ritual + +/obj/item/thaumaturgy_scroll/attack_self(mob/living/user) + if(!ritual) + to_chat(user, span_cult("The scroll is blank - there is nothing to invoke.")) + return + + to_chat(user, span_cult("You unfurl the scroll and follow the instructions, invoking the '[initial(ritual:name)]' ritual.")) + + var/obj/ritual_rune/R = new ritual(user.loc) + R.required_discipline = null // no discipline required to use the ritual + R.attack_hand(user) + + qdel(src) diff --git a/tgstation.dme b/tgstation.dme index 7db1ccf8dac9..5ea6eb34d162 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7811,6 +7811,7 @@ #include "modular_darkpack\modules\ritual_thaumaturgy\rituals\chime_of_the_unseen_spirits.dm" #include "modular_darkpack\modules\ritual_thaumaturgy\rituals\deflection_wooden_doom.dm" #include "modular_darkpack\modules\ritual_thaumaturgy\rituals\gargoyle_transformation.dm" +#include "modular_darkpack\modules\ritual_thaumaturgy\rituals\inscription.dm" #include "modular_darkpack\modules\ritual_thaumaturgy\rituals\question_to_the_ancestors.dm" #include "modular_darkpack\modules\ritual_thaumaturgy\rituals\self_gib.dm" #include "modular_darkpack\modules\ritual_thaumaturgy\rituals\teleport.dm" From 8e3071a5e70ec560a13d80449f9c3e048e7ff9e9 Mon Sep 17 00:00:00 2001 From: "darkpack13-api[bot]" <220339179+darkpack13-api[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 10:25:02 +0000 Subject: [PATCH 15/20] Automatic changelog for PR #1111 [ci skip] --- html/changelogs/AutoChangeLog-pr-1111.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1111.yml diff --git a/html/changelogs/AutoChangeLog-pr-1111.yml b/html/changelogs/AutoChangeLog-pr-1111.yml new file mode 100644 index 000000000000..bb314f805dd5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1111.yml @@ -0,0 +1,4 @@ +author: "chazzyjazzy" +delete-after: True +changes: + - rscadd: "adds 'inscription' ritual for tremeres which allows them to inscribe a ritual onto a parchment for non thaumaturgists to use" \ No newline at end of file From 95fbd6b914d78f7ab41eb58f5b30fa378ba134c5 Mon Sep 17 00:00:00 2001 From: chazzyjazzy <33268885+chazzyjazzy@users.noreply.github.com> Date: Mon, 15 Jun 2026 06:31:27 -0400 Subject: [PATCH 16/20] thaumaturgy 'donning the mask of shadows' ritual (#1134) ## About The Pull Request its literally just a fake obfuscate the core rulebook says that this ritual doesnt require ANYTHING to be used so i made it require a glass shard ## Why It's Good For The Game more tremere rituals ## Changelog :cl: add: adds 'donning the mask of shadows' a level two thaumaturgy ritual which is just a fake, bad obfuscate /:cl: --- .../rituals/donning_the_mask_of_shadows.dm | 59 +++++++++++++++++++ tgstation.dme | 1 + 2 files changed, 60 insertions(+) create mode 100644 modular_darkpack/modules/ritual_thaumaturgy/rituals/donning_the_mask_of_shadows.dm diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/donning_the_mask_of_shadows.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/donning_the_mask_of_shadows.dm new file mode 100644 index 000000000000..5b78c9a4b29d --- /dev/null +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/donning_the_mask_of_shadows.dm @@ -0,0 +1,59 @@ +// v20 core rulebook page 233 +/obj/ritual_rune/thaumaturgy/donning_the_mask_of_shadows + name = "donning the mask of shadows" + desc = "Renders the caster's visage smoky and footsteps muffled. Requires a glass shard." + icon_state = "rune1" + word = "" + level = 2 + sacrifices = list(/obj/item/shard) + +/obj/ritual_rune/thaumaturgy/donning_the_mask_of_shadows/complete() + . = ..() + last_activator.apply_status_effect(/datum/status_effect/mask_of_shadows, ritual_roll_datum.last_sucess_amount MINUTES) + qdel(src) + +/datum/status_effect/mask_of_shadows + id = "mask_of_shadows" + status_type = STATUS_EFFECT_UNIQUE + alert_type = /atom/movable/screen/alert/status_effect/mask_of_shadows + var/datum/action/remove_mask_of_shadows_action/mask_action + +/datum/status_effect/mask_of_shadows/on_creation(mob/living/new_owner, duration) + src.duration = duration + return ..() + +/datum/status_effect/mask_of_shadows/on_apply() + . = ..() + owner.alpha = 50 + owner.color = "#5f5f5f" + mask_action = new(owner) + mask_action.Grant(owner) + ADD_TRAIT(owner, TRAIT_SILENT_FOOTSTEPS, src) + +/datum/status_effect/mask_of_shadows/on_remove() + owner.alpha = 255 + owner.color = null + if(mask_action) + mask_action.Remove(owner) + qdel(mask_action) + REMOVE_TRAIT(owner, TRAIT_SILENT_FOOTSTEPS, src) + return ..() + +/datum/action/remove_mask_of_shadows_action + name = "Become Visible" + desc = "Lower the Mask of Shadows and become visible." + button_icon = 'modular_darkpack/modules/powers/icons/actions.dmi' + button_icon_state = "thaumaturgy" + +/datum/action/remove_mask_of_shadows_action/Trigger(mob/clicker, trigger_flags) + . = ..() + if(!isliving(owner)) + return + var/mob/living/living_owner = owner + living_owner.remove_status_effect(/datum/status_effect/mask_of_shadows) + +/atom/movable/screen/alert/status_effect/mask_of_shadows + name = "Mask of Shadows" + desc = "Your visage is obscured by shadows." + overlay_icon = 'modular_darkpack/modules/powers/icons/actions.dmi' + overlay_state = "thaumaturgy" diff --git a/tgstation.dme b/tgstation.dme index 5ea6eb34d162..2a76d63d8485 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7810,6 +7810,7 @@ #include "modular_darkpack\modules\ritual_thaumaturgy\rituals\burning_blade.dm" #include "modular_darkpack\modules\ritual_thaumaturgy\rituals\chime_of_the_unseen_spirits.dm" #include "modular_darkpack\modules\ritual_thaumaturgy\rituals\deflection_wooden_doom.dm" +#include "modular_darkpack\modules\ritual_thaumaturgy\rituals\donning_the_mask_of_shadows.dm" #include "modular_darkpack\modules\ritual_thaumaturgy\rituals\gargoyle_transformation.dm" #include "modular_darkpack\modules\ritual_thaumaturgy\rituals\inscription.dm" #include "modular_darkpack\modules\ritual_thaumaturgy\rituals\question_to_the_ancestors.dm" From 3881875c52f97b162ffcee3c50cbae01755dd7ce Mon Sep 17 00:00:00 2001 From: "darkpack13-api[bot]" <220339179+darkpack13-api[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 10:31:47 +0000 Subject: [PATCH 17/20] Automatic changelog for PR #1134 [ci skip] --- html/changelogs/AutoChangeLog-pr-1134.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1134.yml diff --git a/html/changelogs/AutoChangeLog-pr-1134.yml b/html/changelogs/AutoChangeLog-pr-1134.yml new file mode 100644 index 000000000000..61e9dc3898ab --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1134.yml @@ -0,0 +1,4 @@ +author: "chazzyjazzy" +delete-after: True +changes: + - rscadd: "adds 'donning the mask of shadows' a level two thaumaturgy ritual which is just a fake, bad obfuscate" \ No newline at end of file From 112b5b96b1a9c5361fe0933bd701f312c8f90316 Mon Sep 17 00:00:00 2001 From: chazzyjazzy <33268885+chazzyjazzy@users.noreply.github.com> Date: Mon, 15 Jun 2026 19:22:10 -0400 Subject: [PATCH 18/20] katanas can be worn on belt (#1159) ## About The Pull Request katanas have sprites for, and are supposed to be able to be worn on belt but that hasnt been the case thusfar ## Why It's Good For The Game weapon ## Changelog :cl: fix: katanas can be worn on the belt slot once more /:cl: --- .../ritual_thaumaturgy/rituals/donning_the_mask_of_shadows.dm | 4 ++-- modular_darkpack/modules/weapons/code/melee.dm | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/modular_darkpack/modules/ritual_thaumaturgy/rituals/donning_the_mask_of_shadows.dm b/modular_darkpack/modules/ritual_thaumaturgy/rituals/donning_the_mask_of_shadows.dm index 5b78c9a4b29d..24676af0275e 100644 --- a/modular_darkpack/modules/ritual_thaumaturgy/rituals/donning_the_mask_of_shadows.dm +++ b/modular_darkpack/modules/ritual_thaumaturgy/rituals/donning_the_mask_of_shadows.dm @@ -28,7 +28,7 @@ owner.color = "#5f5f5f" mask_action = new(owner) mask_action.Grant(owner) - ADD_TRAIT(owner, TRAIT_SILENT_FOOTSTEPS, src) + ADD_TRAIT(owner, TRAIT_SILENT_FOOTSTEPS, MAGIC_TRAIT) /datum/status_effect/mask_of_shadows/on_remove() owner.alpha = 255 @@ -36,7 +36,7 @@ if(mask_action) mask_action.Remove(owner) qdel(mask_action) - REMOVE_TRAIT(owner, TRAIT_SILENT_FOOTSTEPS, src) + REMOVE_TRAIT(owner, TRAIT_SILENT_FOOTSTEPS, MAGIC_TRAIT) return ..() /datum/action/remove_mask_of_shadows_action diff --git a/modular_darkpack/modules/weapons/code/melee.dm b/modular_darkpack/modules/weapons/code/melee.dm index ddee072479df..f1acd9918727 100644 --- a/modular_darkpack/modules/weapons/code/melee.dm +++ b/modular_darkpack/modules/weapons/code/melee.dm @@ -36,6 +36,7 @@ ONFLOOR_ICON_HELPER('modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi') pixel_w = -8 custom_price = 1300 + slot_flags = ITEM_SLOT_BELT /obj/item/katana/vamp/Initialize(mapload) . = ..() From 1da29e45e892921ef80ddff3665dcf501bb8e610 Mon Sep 17 00:00:00 2001 From: "darkpack13-api[bot]" <220339179+darkpack13-api[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 23:22:42 +0000 Subject: [PATCH 19/20] Automatic changelog for PR #1159 [ci skip] --- html/changelogs/AutoChangeLog-pr-1159.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1159.yml diff --git a/html/changelogs/AutoChangeLog-pr-1159.yml b/html/changelogs/AutoChangeLog-pr-1159.yml new file mode 100644 index 000000000000..5c8a5bf70b8a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1159.yml @@ -0,0 +1,4 @@ +author: "chazzyjazzy" +delete-after: True +changes: + - bugfix: "katanas can be worn on the belt slot once more" \ No newline at end of file From 207f3b84fb2b24544d74322f098182052a53f3dc Mon Sep 17 00:00:00 2001 From: FalloutFalcon Date: Tue, 16 Jun 2026 21:28:11 -0500 Subject: [PATCH 20/20] fix flaky fails that pmo me --- .../Vampire/special_fran/endron_ruin.dmm | 91 +++---------------- 1 file changed, 12 insertions(+), 79 deletions(-) diff --git a/_maps/map_files/Vampire/special_fran/endron_ruin.dmm b/_maps/map_files/Vampire/special_fran/endron_ruin.dmm index 2fb374fd161b..d9a56285a8f2 100644 --- a/_maps/map_files/Vampire/special_fran/endron_ruin.dmm +++ b/_maps/map_files/Vampire/special_fran/endron_ruin.dmm @@ -68,10 +68,6 @@ "bb" = ( /turf/open/misc/dirt, /area/vtm/outside/forest) -"bf" = ( -/obj/effect/spawner/random/trash/garbage, -/turf/open/water/bloodwave, -/area/vtm/interior/forest/cave/bane) "bi" = ( /obj/machinery/light/directional/north, /obj/effect/turf_decal/trimline/red/line{ @@ -250,13 +246,6 @@ }, /turf/open/water/bloodwave, /area/vtm/interior/forest/cave/bane) -"ee" = ( -/obj/effect/turf_decal/darkpack/cave{ - dir = 10 - }, -/obj/effect/spawner/random/trash/garbage, -/turf/open/water/bloodwave, -/area/vtm/interior/forest/cave/bane) "ef" = ( /obj/structure/flora/rock/pile/darkpack, /turf/open/floor/plating/rough, @@ -289,14 +278,6 @@ }, /turf/open/floor/city/plating, /area/vtm/interior/endron_facility/forest) -"eJ" = ( -/obj/structure/lattice/catwalk, -/obj/effect/spawner/random/trash/grime{ - spawn_loot_count = 20; - spawn_scatter_radius = 3 - }, -/turf/open/water/acid, -/area/vtm/interior/endron_facility/forest) "eK" = ( /obj/effect/turf_decal/darkpack/cave{ dir = 8 @@ -595,13 +576,6 @@ /obj/item/clothing/head/vampire/pentex_beret, /turf/open/floor/city/factory, /area/vtm/interior/endron_facility/forest) -"iZ" = ( -/obj/effect/turf_decal/darkpack/cave{ - dir = 10 - }, -/obj/effect/spawner/random/trash/mess, -/turf/open/water/bloodwave, -/area/vtm/interior/forest/cave/bane) "jf" = ( /obj/structure/table, /obj/item/trash/raisins, @@ -757,7 +731,6 @@ /obj/effect/turf_decal/darkpack/cave{ dir = 4 }, -/obj/effect/spawner/random/trash/garbage, /turf/open/water/bloodwave, /area/vtm/interior/forest/cave/bane) "ly" = ( @@ -882,11 +855,6 @@ /obj/effect/mapping_helpers/door/lock, /turf/open/floor/city/plating_mono, /area/vtm/interior/endron_facility/forest) -"nl" = ( -/obj/effect/turf_decal/darkpack/cave, -/obj/effect/spawner/random/trash/garbage, -/turf/open/water/bloodwave, -/area/vtm/interior/forest/cave/bane) "nv" = ( /obj/machinery/shower/directional/north, /obj/structure/curtain, @@ -1054,13 +1022,6 @@ }, /turf/cordon/secret, /area/misc/cordon) -"pD" = ( -/obj/effect/turf_decal/darkpack/cave{ - dir = 8 - }, -/obj/effect/spawner/random/trash/garbage, -/turf/open/water/bloodwave, -/area/vtm/interior/forest/cave/bane) "pG" = ( /obj/effect/turf_decal/darkpack/dirt, /obj/effect/turf_decal/darkpack/dirt/corner{ @@ -1336,13 +1297,6 @@ /obj/effect/spawner/random/trash/janitor_supplies, /turf/open/floor/city/circled, /area/vtm/interior/endron_facility/forest) -"tE" = ( -/obj/effect/turf_decal/darkpack/cave/corner{ - dir = 8 - }, -/obj/effect/spawner/random/trash/garbage, -/turf/open/water/bloodwave, -/area/vtm/interior/forest/cave/bane) "tG" = ( /obj/structure/fence{ dir = 4 @@ -1713,14 +1667,9 @@ /turf/closed/wall/vampwall/rock, /area/vtm/interior/forest/cave/bane) "zn" = ( -/obj/structure/rack{ - density = 0; - icon = 'icons/obj/tank.dmi'; - icon_state = "holder"; - name = "tank rack" - }, /obj/item/tank/internals/anesthetic, /obj/item/clothing/mask/breath/medical, +/obj/structure/rack, /turf/open/floor/city/circled, /area/vtm/interior/endron_facility/forest) "zx" = ( @@ -1809,7 +1758,6 @@ /obj/effect/turf_decal/darkpack/cave{ dir = 5 }, -/obj/effect/spawner/random/trash/garbage, /turf/open/water/bloodwave, /area/vtm/interior/forest/cave/bane) "Bl" = ( @@ -1979,13 +1927,6 @@ /obj/effect/spawner/random/trash/mess, /turf/open/floor/city/factory, /area/vtm/interior/endron_facility/forest) -"Dh" = ( -/obj/effect/turf_decal/darkpack/cave{ - dir = 1 - }, -/obj/effect/spawner/random/trash/garbage, -/turf/open/water/bloodwave, -/area/vtm/interior/forest/cave/bane) "Dl" = ( /obj/effect/turf_decal/darkpack/dirt{ dir = 6 @@ -2056,13 +1997,6 @@ /obj/effect/mob_spawn/corpse/human/endron, /turf/open/floor/city/plating_mono, /area/vtm/interior/endron_facility/forest) -"Ee" = ( -/obj/effect/turf_decal/darkpack/cave{ - dir = 5 - }, -/obj/effect/spawner/random/trash/garbage, -/turf/open/water/bloodwave, -/area/vtm/interior/forest/cave/bane) "Ef" = ( /obj/effect/turf_decal/darkpack/cave{ dir = 5 @@ -2349,7 +2283,6 @@ /area/vtm/interior/endron_facility/forest) "HB" = ( /obj/effect/decal/garou_glyph/wyrm{ - pixel_x = 0; pixel_y = 31 }, /turf/open/misc/dirt, @@ -6015,7 +5948,7 @@ wD wD bi Mh -YT +tw sL Pw Nj @@ -6232,7 +6165,7 @@ mK Mf wD HO -eJ +tw Ul Ox qz @@ -7405,7 +7338,7 @@ za za Ef FR -iZ +IA za Jk za @@ -7513,7 +7446,7 @@ za za za za -Dh +ed wb IA RS @@ -7624,11 +7557,11 @@ za za CX Ux -tE +Wi +eK eK -pD eK -ee +IA Lp Lp hP @@ -7734,7 +7667,7 @@ EE Ak CX Ux -bf +Pg Pg Pg Wi @@ -7847,7 +7780,7 @@ Pg wb Pg Pg -nl +ev Lp JR Iv @@ -8171,7 +8104,7 @@ md Lp CX Ux -bf +Pg Pg Pg ev @@ -8279,7 +8212,7 @@ za Lp iN RS -Ee +CX Ux Pg KX