From ffa565484cbcfba4b806dd28a742d4306be8a872 Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Sun, 16 Feb 2025 11:41:43 +0300 Subject: [PATCH] Modular weapon inlay (#903) * slots lists * blade inlay * tadam --- .../EntityEffects/Effects/Electrocute.cs | 2 +- .../_CP14/MagicSpell/CP14MagicSystem.cs | 41 ++++++ .../CP14SpellEffectOnHitComponent.cs | 20 +++ .../ModularCraft/CP14ModularCraftSystem.cs | 30 ++-- .../CP14ModularCraftPartPrototype.cs | 4 +- .../CP14ModularCraftSlotPrototype.cs | 4 + .../Locale/en-US/_CP14/modularCraft/slots.ftl | 3 +- .../Locale/ru-RU/_CP14/modularCraft/slots.ftl | 3 +- .../Objects/ModularTools/Garde/base.yml | 12 ++ .../Objects/ModularTools/Garde/sharp.yml | 13 -- .../Objects/ModularTools/Inlay/base.yml | 12 ++ .../Objects/ModularTools/Inlay/quartz.yml | 102 ++++++++++++++ .../_CP14/ModularCraft/Blade/axe.yml | 15 +- .../_CP14/ModularCraft/Blade/dagger.yml | 13 +- .../_CP14/ModularCraft/Blade/hammer.yml | 15 +- .../_CP14/ModularCraft/Blade/mace.yml | 12 +- .../_CP14/ModularCraft/Blade/pickaxe.yml | 13 +- .../_CP14/ModularCraft/Blade/rapier.yml | 13 +- .../_CP14/ModularCraft/Blade/shovel.yml | 15 +- .../_CP14/ModularCraft/Blade/sickle.yml | 13 +- .../_CP14/ModularCraft/Blade/spear.yml | 13 +- .../_CP14/ModularCraft/Blade/sword.yml | 16 ++- .../_CP14/ModularCraft/Garde/sharp.yml | 12 +- .../_CP14/ModularCraft/Garde/sturdy.yml | 12 +- .../_CP14/ModularCraft/Inlay/quartz.yml | 129 ++++++++++++++++++ .../Prototypes/_CP14/ModularCraft/slots.yml | 6 +- .../Recipes/Workbench/Anvil/modular_garde.yml | 8 ++ .../Recipes/Workbench/Anvil/modular_inlay.yml | 89 ++++++++++++ .../ModularTools/Inlay/quartz.rsi/frame.png | Bin 0 -> 254 bytes .../ModularTools/Inlay/quartz.rsi/icon.png | Bin 0 -> 163 bytes .../ModularTools/Inlay/quartz.rsi/item.png | Bin 0 -> 280 bytes .../ModularTools/Inlay/quartz.rsi/meta.json | 20 +++ 32 files changed, 581 insertions(+), 79 deletions(-) create mode 100644 Content.Server/_CP14/MagicSpell/CP14SpellEffectOnHitComponent.cs create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Garde/base.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Inlay/base.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Inlay/quartz.yml create mode 100644 Resources/Prototypes/_CP14/ModularCraft/Inlay/quartz.yml create mode 100644 Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_inlay.yml create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Inlay/quartz.rsi/frame.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Inlay/quartz.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Inlay/quartz.rsi/item.png create mode 100644 Resources/Textures/_CP14/Objects/ModularTools/Inlay/quartz.rsi/meta.json diff --git a/Content.Server/EntityEffects/Effects/Electrocute.cs b/Content.Server/EntityEffects/Effects/Electrocute.cs index f6a5f1a2da..d13c6f0419 100644 --- a/Content.Server/EntityEffects/Effects/Electrocute.cs +++ b/Content.Server/EntityEffects/Effects/Electrocute.cs @@ -6,7 +6,7 @@ namespace Content.Server.EntityEffects.Effects; public sealed partial class Electrocute : EntityEffect { - [DataField] public int ElectrocuteTime = 2; + [DataField] public float ElectrocuteTime = 2; //CP14 - float [DataField] public int ElectrocuteDamageScale = 5; diff --git a/Content.Server/_CP14/MagicSpell/CP14MagicSystem.cs b/Content.Server/_CP14/MagicSpell/CP14MagicSystem.cs index 8cb4a6f084..b0f4182c94 100644 --- a/Content.Server/_CP14/MagicSpell/CP14MagicSystem.cs +++ b/Content.Server/_CP14/MagicSpell/CP14MagicSystem.cs @@ -1,12 +1,17 @@ using Content.Server._CP14.MagicEnergy; +using Content.Server.Atmos.Components; using Content.Server.Chat.Systems; using Content.Shared._CP14.MagicEnergy.Components; using Content.Shared._CP14.MagicSpell; using Content.Shared._CP14.MagicSpell.Components; using Content.Shared._CP14.MagicSpell.Events; using Content.Shared._CP14.MagicSpell.Spells; +using Content.Shared.Projectiles; +using Content.Shared.Throwing; +using Content.Shared.Weapons.Melee.Events; using Content.Shared.Whitelist; using Robust.Server.GameObjects; +using Robust.Shared.Random; namespace Content.Server._CP14.MagicSpell; @@ -17,12 +22,17 @@ public sealed partial class CP14MagicSystem : CP14SharedMagicSystem [Dependency] private readonly CP14MagicEnergySystem _magicEnergy = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; + [Dependency] private readonly IRobustRandom _random = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnAoEMapInit); + + SubscribeLocalEvent(OnMeleeHit); + SubscribeLocalEvent(OnProjectileHit); + SubscribeLocalEvent(OnSpellSpoken); SubscribeLocalEvent(OnSpawnMagicVisualEffect); @@ -31,6 +41,37 @@ public sealed partial class CP14MagicSystem : CP14SharedMagicSystem SubscribeLocalEvent(OnManaConsume); } + private void OnProjectileHit(Entity ent, ref ThrowDoHitEvent args) + { + if (!_random.Prob(ent.Comp.Prob)) + return; + + if (ent.Comp.Whitelist is not null && !_whitelist.IsValid(ent.Comp.Whitelist, args.Target)) + return; + + foreach (var effect in ent.Comp.Effects) + { + effect.Effect(EntityManager, new CP14SpellEffectBaseArgs(args.Thrown, ent, args.Target, Transform(args.Target).Coordinates)); + } + } + + private void OnMeleeHit(Entity ent, ref MeleeHitEvent args) + { + if (!_random.Prob(ent.Comp.Prob)) + return; + + foreach (var entity in args.HitEntities) + { + if (ent.Comp.Whitelist is not null && !_whitelist.IsValid(ent.Comp.Whitelist, entity)) + continue; + + foreach (var effect in ent.Comp.Effects) + { + effect.Effect(EntityManager, new CP14SpellEffectBaseArgs(args.User, ent, entity, Transform(entity).Coordinates)); + } + } + } + private void OnAoEMapInit(Entity ent, ref MapInitEvent args) { var entitiesAround = _lookup.GetEntitiesInRange(ent, ent.Comp.Range, LookupFlags.Uncontained); diff --git a/Content.Server/_CP14/MagicSpell/CP14SpellEffectOnHitComponent.cs b/Content.Server/_CP14/MagicSpell/CP14SpellEffectOnHitComponent.cs new file mode 100644 index 0000000000..9b281dec58 --- /dev/null +++ b/Content.Server/_CP14/MagicSpell/CP14SpellEffectOnHitComponent.cs @@ -0,0 +1,20 @@ +using Content.Shared._CP14.MagicSpell.Spells; +using Content.Shared.Whitelist; + +namespace Content.Server._CP14.MagicSpell; + +/// +/// Component that allows an meleeWeapon to apply effects to other entities on melee attacks. +/// +[RegisterComponent] +public sealed partial class CP14SpellEffectOnHitComponent : Component +{ + [DataField(required: true, serverOnly: true)] + public List Effects = new(); + + [DataField] + public EntityWhitelist? Whitelist; + + [DataField] + public float Prob = 1f; +} diff --git a/Content.Server/_CP14/ModularCraft/CP14ModularCraftSystem.cs b/Content.Server/_CP14/ModularCraft/CP14ModularCraftSystem.cs index 3bd0c7fa95..eeae4b4adc 100644 --- a/Content.Server/_CP14/ModularCraft/CP14ModularCraftSystem.cs +++ b/Content.Server/_CP14/ModularCraft/CP14ModularCraftSystem.cs @@ -119,16 +119,19 @@ public sealed class CP14ModularCraftSystem : CP14SharedModularCraftSystem if (!_proto.TryIndex(partProto, out var partIndexed)) continue; - if (partIndexed.TargetSlot is null) + if (partIndexed.Slots.Count == 0) continue; - if (!start.Comp.FreeSlots.Contains(partIndexed.TargetSlot.Value)) - continue; - - if (TryAddPartToSlot(start, part, partProto, partIndexed.TargetSlot.Value)) + foreach (var slot in partIndexed.Slots) { - QueueDel(part); - return true; + if (!start.Comp.FreeSlots.Contains(slot)) + continue; + + if (TryAddPartToSlot(start, part, partProto, slot)) + { + QueueDel(part); + return true; + } } } @@ -141,13 +144,18 @@ public sealed class CP14ModularCraftSystem : CP14SharedModularCraftSystem if (!_proto.TryIndex(partProto, out var partIndexed)) return false; - if (partIndexed.TargetSlot is null) + if (partIndexed.Slots.Count == 0) return false; - if (!start.Comp.FreeSlots.Contains(partIndexed.TargetSlot.Value)) - return false; + foreach (var slot in partIndexed.Slots) + { + if (!start.Comp.FreeSlots.Contains(slot)) + continue; - return TryAddPartToSlot(start, null, partProto, partIndexed.TargetSlot.Value); + return TryAddPartToSlot(start, null, partProto, slot); + } + + return false; } private bool TryAddPartToSlot(Entity start, diff --git a/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftPartPrototype.cs b/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftPartPrototype.cs index 8d91214999..38fad3dfa7 100644 --- a/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftPartPrototype.cs +++ b/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftPartPrototype.cs @@ -10,7 +10,7 @@ public sealed partial class CP14ModularCraftPartPrototype : IPrototype public string ID { get; private set; } = default!; [DataField] - public ProtoId? TargetSlot; + public List> Slots = new(); /// /// An entity that can drop out of the final modular item when destroyed. @@ -20,7 +20,7 @@ public sealed partial class CP14ModularCraftPartPrototype : IPrototype public EntProtoId? SourcePart; [DataField] - public float DestroyProb = 0.0f; + public float DestroyProb; [DataField(serverOnly: true)] public List Modifiers = new(); diff --git a/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftSlotPrototype.cs b/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftSlotPrototype.cs index 5777819360..11be3592e8 100644 --- a/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftSlotPrototype.cs +++ b/Content.Shared/_CP14/ModularCraft/Prototypes/CP14ModularCraftSlotPrototype.cs @@ -1,4 +1,5 @@ using Robust.Shared.Prototypes; +using Robust.Shared.Utility; namespace Content.Shared._CP14.ModularCraft.Prototypes; @@ -10,4 +11,7 @@ public sealed partial class CP14ModularCraftSlotPrototype : IPrototype [DataField(required: true)] public LocId Name = string.Empty; + + [DataField] + public SpriteSpecifier? IconDisplacement { get; private set; } } diff --git a/Resources/Locale/en-US/_CP14/modularCraft/slots.ftl b/Resources/Locale/en-US/_CP14/modularCraft/slots.ftl index abd18efdc1..3deaaed820 100644 --- a/Resources/Locale/en-US/_CP14/modularCraft/slots.ftl +++ b/Resources/Locale/en-US/_CP14/modularCraft/slots.ftl @@ -1,2 +1,3 @@ cp14-modular-slot-blade = blade -cp14-modular-slot-garde = garde \ No newline at end of file +cp14-modular-slot-garde = garde +cp14-modular-slot-blade-inlay = blade inlay \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/modularCraft/slots.ftl b/Resources/Locale/ru-RU/_CP14/modularCraft/slots.ftl index 29b1d69413..8fe7a523ce 100644 --- a/Resources/Locale/ru-RU/_CP14/modularCraft/slots.ftl +++ b/Resources/Locale/ru-RU/_CP14/modularCraft/slots.ftl @@ -1,2 +1,3 @@ cp14-modular-slot-blade = лезвие -cp14-modular-slot-garde = гарда \ No newline at end of file +cp14-modular-slot-garde = гарда +cp14-modular-slot-blade-inlay = инкрустация лезвия \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Garde/base.yml b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Garde/base.yml new file mode 100644 index 0000000000..8f78b4f5ca --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Garde/base.yml @@ -0,0 +1,12 @@ +- type: entity + parent: BaseItem + id: CP14ModularGardeBase + categories: [ ForkFiltered ] + abstract: true + description: Garde? Garde! + components: + - type: Item + storedRotation: 45 + shape: + - 0,0,0,0 + storedOffset: 0, 5 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Garde/sharp.yml b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Garde/sharp.yml index 0d27805f3f..40a15e9902 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Garde/sharp.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Garde/sharp.yml @@ -1,16 +1,3 @@ -- type: entity - parent: BaseItem - id: CP14ModularGardeBase - categories: [ ForkFiltered ] - abstract: true - description: Garde? Garde! - components: - - type: Item - storedRotation: 45 - shape: - - 0,0,0,0 - storedOffset: 0, 5 - - type: entity parent: CP14ModularGardeBase id: CP14ModularGardeSharpIron diff --git a/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Inlay/base.yml b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Inlay/base.yml new file mode 100644 index 0000000000..6327ef60bc --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Inlay/base.yml @@ -0,0 +1,12 @@ +- type: entity + parent: BaseItem + id: CP14ModularInlayBase + categories: [ ForkFiltered ] + description: A small piece that can be inlaid into your weapon or tool. + abstract: true + components: + - type: Item + storedRotation: 45 + shape: + - 0,0,0,0 + storedOffset: 0, 5 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Inlay/quartz.yml b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Inlay/quartz.yml new file mode 100644 index 0000000000..2b5ec803ba --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/ModularTools/Inlay/quartz.yml @@ -0,0 +1,102 @@ +- type: entity + parent: CP14ModularInlayBase + id: CP14ModularInlayQuartzBase + abstract: true + components: + - type: Sprite + sprite: _CP14/Objects/ModularTools/Inlay/quartz.rsi + +- type: entity + parent: CP14ModularInlayQuartzBase + id: CP14ModularInlayQuartzWater + name: water quartz inlay + components: + - type: Sprite + sprite: _CP14/Objects/ModularTools/Inlay/quartz.rsi + layers: + - state: item + color: "#5eabeb" + - state: frame + - type: CP14ModularCraftPart + possibleParts: + - InlayQuartzWater + +- type: entity + parent: CP14ModularInlayQuartzBase + id: CP14ModularInlayQuartzHealing + name: healing quartz inlay + components: + - type: Sprite + sprite: _CP14/Objects/ModularTools/Inlay/quartz.rsi + layers: + - state: item + color: "#79b330" + - state: frame + - type: CP14ModularCraftPart + possibleParts: + - InlayQuartzHealing + +- type: entity + parent: CP14ModularInlayQuartzBase + id: CP14ModularInlayQuartzFire + name: fire quartz inlay + components: + - type: Sprite + sprite: _CP14/Objects/ModularTools/Inlay/quartz.rsi + layers: + - state: item + color: "#ed731c" + - state: frame + - type: CP14ModularCraftPart + possibleParts: + - InlayQuartzFire + +- type: entity + parent: CP14ModularInlayQuartzBase + id: CP14ModularInlayQuartzLight + name: light quartz inlay + components: + - type: Sprite + sprite: _CP14/Objects/ModularTools/Inlay/quartz.rsi + layers: + - state: item + color: "#f1c7ff" + shader: unshaded + - state: frame + - type: CP14ModularCraftPart + possibleParts: + - InlayQuartzLight + - type: PointLight + radius: 2 + color: "#f1c7ff" + netsync: false + +- type: entity + parent: CP14ModularInlayQuartzBase + id: CP14ModularInlayQuartzElectric + name: electric quartz inlay + components: + - type: Sprite + sprite: _CP14/Objects/ModularTools/Inlay/quartz.rsi + layers: + - state: item + color: "#e6ff6b" + - state: frame + - type: CP14ModularCraftPart + possibleParts: + - InlayQuartzElectric + +- type: entity + parent: CP14ModularInlayQuartzBase + id: CP14ModularInlayQuartzDarkness + name: darkness quartz inlay + components: + - type: Sprite + sprite: _CP14/Objects/ModularTools/Inlay/quartz.rsi + layers: + - state: item + color: "#391c57" + - state: frame + - type: CP14ModularCraftPart + possibleParts: + - InlayQuartzDarkness \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/axe.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/axe.yml index 35f58fcd5d..c3c30cda4e 100644 --- a/Resources/Prototypes/_CP14/ModularCraft/Blade/axe.yml +++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/axe.yml @@ -26,10 +26,14 @@ newSize: Normal adjustShape: 0, 1 storedOffsetBonus: 0, 5 + - !type:EditModularSlots + addSlots: + - BladeInlay - type: modularPart id: BladeIronAxe - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapIron rsiPath: _CP14/Objects/ModularTools/Blade/Axe/metall_axe.rsi modifiers: @@ -40,7 +44,8 @@ - type: modularPart id: BladeGoldAxe - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapGold rsiPath: _CP14/Objects/ModularTools/Blade/Axe/metall_axe.rsi color: "#ffaf47" @@ -52,7 +57,8 @@ - type: modularPart id: BladeCopperAxe - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapCopper rsiPath: _CP14/Objects/ModularTools/Blade/Axe/metall_axe.rsi color: "#bd712f" @@ -64,7 +70,8 @@ - type: modularPart id: BladeMithrilAxe - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapMithril rsiPath: _CP14/Objects/ModularTools/Blade/Axe/metall_axe.rsi color: "#45d2a4" diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/dagger.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/dagger.yml index 6c13ad20b2..2c3c78f206 100644 --- a/Resources/Prototypes/_CP14/ModularCraft/Blade/dagger.yml +++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/dagger.yml @@ -31,10 +31,12 @@ - !type:EditModularSlots addSlots: - Garde + - BladeInlay - type: modularPart id: BladeIronDagger - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapIron rsiPath: _CP14/Objects/ModularTools/Blade/Dagger/metall_dagger.rsi modifiers: @@ -45,7 +47,8 @@ - type: modularPart id: BladeGoldDagger - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapGold rsiPath: _CP14/Objects/ModularTools/Blade/Dagger/metall_dagger.rsi color: "#ffaf47" @@ -57,7 +60,8 @@ - type: modularPart id: BladeCopperDagger - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapCopper rsiPath: _CP14/Objects/ModularTools/Blade/Dagger/metall_dagger.rsi color: "#bd712f" @@ -69,7 +73,8 @@ - type: modularPart id: BladeMithrilDagger - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapMithril rsiPath: _CP14/Objects/ModularTools/Blade/Dagger/metall_dagger.rsi color: "#45d2a4" diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/hammer.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/hammer.yml index 79f27976f2..f97623d60c 100644 --- a/Resources/Prototypes/_CP14/ModularCraft/Blade/hammer.yml +++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/hammer.yml @@ -43,10 +43,14 @@ storedOffsetBonus: 0, 5 - !type:EditDamageableModifier # How you can break a hammer? multiplier: 0.8 + - !type:EditModularSlots + addSlots: + - BladeInlay - type: modularPart id: BladeIronHammer - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapIron rsiPath: _CP14/Objects/ModularTools/Blade/Hammer/metall_hammer.rsi modifiers: @@ -57,7 +61,8 @@ - type: modularPart id: BladeGoldHammer - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapGold rsiPath: _CP14/Objects/ModularTools/Blade/Hammer/metall_hammer.rsi color: "#ffaf47" @@ -69,7 +74,8 @@ - type: modularPart id: BladeCopperHammer - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapCopper rsiPath: _CP14/Objects/ModularTools/Blade/Hammer/metall_hammer.rsi color: "#bd712f" @@ -81,7 +87,8 @@ - type: modularPart id: BladeMithrilHammer - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapMithril rsiPath: _CP14/Objects/ModularTools/Blade/Hammer/metall_hammer.rsi color: "#45d2a4" diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/mace.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/mace.yml index 2df624ec27..a9c7c12c55 100644 --- a/Resources/Prototypes/_CP14/ModularCraft/Blade/mace.yml +++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/mace.yml @@ -27,7 +27,8 @@ - type: modularPart id: BladeIronMace - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapIron rsiPath: _CP14/Objects/ModularTools/Blade/Mace/metall_mace.rsi modifiers: @@ -38,7 +39,8 @@ - type: modularPart id: BladeGoldMace - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapGold rsiPath: _CP14/Objects/ModularTools/Blade/Mace/metall_mace.rsi color: "#ffaf47" @@ -50,7 +52,8 @@ - type: modularPart id: BladeCopperMace - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapCopper rsiPath: _CP14/Objects/ModularTools/Blade/Mace/metall_mace.rsi color: "#bd712f" @@ -62,7 +65,8 @@ - type: modularPart id: BladeMithrilMace - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapMithril rsiPath: _CP14/Objects/ModularTools/Blade/Mace/metall_mace.rsi color: "#45d2a4" diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/pickaxe.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/pickaxe.yml index 5414461d47..859644d222 100644 --- a/Resources/Prototypes/_CP14/ModularCraft/Blade/pickaxe.yml +++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/pickaxe.yml @@ -19,10 +19,12 @@ - !type:EditModularSlots addSlots: - Garde + - BladeInlay - type: modularPart id: BladeIronPickaxe - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapIron rsiPath: _CP14/Objects/ModularTools/Blade/Pickaxe/metall_pickaxe.rsi modifiers: @@ -33,7 +35,8 @@ - type: modularPart id: BladeGoldPickaxe - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapGold rsiPath: _CP14/Objects/ModularTools/Blade/Pickaxe/metall_pickaxe.rsi color: "#ffaf47" @@ -45,7 +48,8 @@ - type: modularPart id: BladeCopperPickaxe - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapCopper rsiPath: _CP14/Objects/ModularTools/Blade/Pickaxe/metall_pickaxe.rsi color: "#bd712f" @@ -57,7 +61,8 @@ - type: modularPart id: BladeMithrilPickaxe - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapMithril rsiPath: _CP14/Objects/ModularTools/Blade/Pickaxe/metall_pickaxe.rsi color: "#45d2a4" diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/rapier.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/rapier.yml index 258e0dfd43..bff74ce823 100644 --- a/Resources/Prototypes/_CP14/ModularCraft/Blade/rapier.yml +++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/rapier.yml @@ -28,12 +28,14 @@ - !type:EditModularSlots addSlots: - Garde + - BladeInlay - !type:EditDamageableModifier # Only 1 ingot t craft, so less health multiplier: 2 - type: modularPart id: BladeIronRapier - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapIron rsiPath: _CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi modifiers: @@ -44,7 +46,8 @@ - type: modularPart id: BladeGoldRapier - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapGold rsiPath: _CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi color: "#ffaf47" @@ -56,7 +59,8 @@ - type: modularPart id: BladeCopperRapier - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapCopper rsiPath: _CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi color: "#bd712f" @@ -68,7 +72,8 @@ - type: modularPart id: BladeMithrilRapier - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapMithril rsiPath: _CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi color: "#45d2a4" diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/shovel.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/shovel.yml index a29c3368a9..96e7d1ce35 100644 --- a/Resources/Prototypes/_CP14/ModularCraft/Blade/shovel.yml +++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/shovel.yml @@ -28,10 +28,14 @@ newSize: Normal adjustShape: 0, 1 storedOffsetBonus: 0, 5 + - !type:EditModularSlots + addSlots: + - BladeInlay - type: modularPart id: BladeIronShovel - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapIron rsiPath: _CP14/Objects/ModularTools/Blade/Shovel/metall_shovel.rsi modifiers: @@ -42,7 +46,8 @@ - type: modularPart id: BladeGoldShovel - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapGold rsiPath: _CP14/Objects/ModularTools/Blade/Shovel/metall_shovel.rsi color: "#ffaf47" @@ -54,7 +59,8 @@ - type: modularPart id: BladeCopperShovel - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapCopper rsiPath: _CP14/Objects/ModularTools/Blade/Shovel/metall_shovel.rsi color: "#bd712f" @@ -66,7 +72,8 @@ - type: modularPart id: BladeMithrilShovel - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapMithril rsiPath: _CP14/Objects/ModularTools/Blade/Shovel/metall_shovel.rsi color: "#45d2a4" diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/sickle.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/sickle.yml index 36027bfab8..69331a9230 100644 --- a/Resources/Prototypes/_CP14/ModularCraft/Blade/sickle.yml +++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/sickle.yml @@ -21,10 +21,12 @@ - !type:EditModularSlots addSlots: - Garde + - BladeInlay - type: modularPart id: BladeIronSickle - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapIron rsiPath: _CP14/Objects/ModularTools/Blade/Sickle/metall_sickle.rsi modifiers: @@ -35,7 +37,8 @@ - type: modularPart id: BladeGoldSickle - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapGold rsiPath: _CP14/Objects/ModularTools/Blade/Sickle/metall_sickle.rsi color: "#ffaf47" @@ -47,7 +50,8 @@ - type: modularPart id: BladeCopperSickle - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapCopper rsiPath: _CP14/Objects/ModularTools/Blade/Sickle/metall_sickle.rsi color: "#bd712f" @@ -59,7 +63,8 @@ - type: modularPart id: BladeMithrilSickle - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapMithril rsiPath: _CP14/Objects/ModularTools/Blade/Sickle/metall_sickle.rsi color: "#45d2a4" diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/spear.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/spear.yml index 415bb39b84..c4c68fab2a 100644 --- a/Resources/Prototypes/_CP14/ModularCraft/Blade/spear.yml +++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/spear.yml @@ -36,10 +36,12 @@ - !type:EditModularSlots addSlots: - Garde + - BladeInlay - type: modularPart id: BladeIronSpear - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapIron rsiPath: _CP14/Objects/ModularTools/Blade/Spear/metall_spear.rsi modifiers: @@ -50,7 +52,8 @@ - type: modularPart id: BladeGoldSpear - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapGold rsiPath: _CP14/Objects/ModularTools/Blade/Spear/metall_spear.rsi color: "#ffaf47" @@ -62,7 +65,8 @@ - type: modularPart id: BladeCopperSpear - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapCopper rsiPath: _CP14/Objects/ModularTools/Blade/Spear/metall_spear.rsi color: "#bd712f" @@ -74,7 +78,8 @@ - type: modularPart id: BladeMithrilSpear - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapMithril rsiPath: _CP14/Objects/ModularTools/Blade/Spear/metall_spear.rsi color: "#45d2a4" diff --git a/Resources/Prototypes/_CP14/ModularCraft/Blade/sword.yml b/Resources/Prototypes/_CP14/ModularCraft/Blade/sword.yml index 91e6717e3f..a38aec7397 100644 --- a/Resources/Prototypes/_CP14/ModularCraft/Blade/sword.yml +++ b/Resources/Prototypes/_CP14/ModularCraft/Blade/sword.yml @@ -32,10 +32,12 @@ - !type:EditModularSlots addSlots: - Garde + - BladeInlay - type: modularPart id: BladeIronSword - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapIron rsiPath: _CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi modifiers: @@ -46,7 +48,8 @@ - type: modularPart id: BladeGoldSword - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapGold rsiPath: _CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi color: "#ffaf47" @@ -58,7 +61,8 @@ - type: modularPart id: BladeCopperSword - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapCopper rsiPath: _CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi color: "#bd712f" @@ -70,7 +74,8 @@ - type: modularPart id: BladeMithrilSword - targetSlot: Blade + slots: + - Blade sourcePart: CP14ScrapMithril rsiPath: _CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi color: "#45d2a4" @@ -82,7 +87,8 @@ - type: modularPart id: BladeBoneSword - targetSlot: Blade + slots: + - Blade sourcePart: CP14ModularBladeBoneSword rsiPath: _CP14/Objects/ModularTools/Blade/Sword/bone_sword.rsi modifiers: diff --git a/Resources/Prototypes/_CP14/ModularCraft/Garde/sharp.yml b/Resources/Prototypes/_CP14/ModularCraft/Garde/sharp.yml index 4fdc31dbd9..9984bfaaa6 100644 --- a/Resources/Prototypes/_CP14/ModularCraft/Garde/sharp.yml +++ b/Resources/Prototypes/_CP14/ModularCraft/Garde/sharp.yml @@ -11,7 +11,8 @@ - type: modularPart id: GardeSharpIron - targetSlot: Garde + slots: + - Garde sourcePart: CP14ScrapIron rsiPath: _CP14/Objects/ModularTools/Garde/metall_sharp.rsi modifiers: @@ -21,7 +22,8 @@ - type: modularPart id: GardeSharpGold - targetSlot: Garde + slots: + - Garde sourcePart: CP14ScrapGold rsiPath: _CP14/Objects/ModularTools/Garde/metall_sharp.rsi color: "#ffaf47" @@ -32,7 +34,8 @@ - type: modularPart id: GardeSharpCopper - targetSlot: Garde + slots: + - Garde sourcePart: CP14ScrapCopper rsiPath: _CP14/Objects/ModularTools/Garde/metall_sharp.rsi color: "#bd712f" @@ -43,7 +46,8 @@ - type: modularPart id: GardeSharpMithril - targetSlot: Garde + slots: + - Garde sourcePart: CP14ScrapMithril rsiPath: _CP14/Objects/ModularTools/Garde/metall_sharp.rsi color: "#45d2a4" diff --git a/Resources/Prototypes/_CP14/ModularCraft/Garde/sturdy.yml b/Resources/Prototypes/_CP14/ModularCraft/Garde/sturdy.yml index 2f9dbf2489..1694f90aff 100644 --- a/Resources/Prototypes/_CP14/ModularCraft/Garde/sturdy.yml +++ b/Resources/Prototypes/_CP14/ModularCraft/Garde/sturdy.yml @@ -11,7 +11,8 @@ - type: modularPart id: GardeSturdyIron - targetSlot: Garde + slots: + - Garde sourcePart: CP14ScrapIron rsiPath: _CP14/Objects/ModularTools/Garde/metall_sturdy.rsi modifiers: @@ -21,7 +22,8 @@ - type: modularPart id: GardeSturdyGold - targetSlot: Garde + slots: + - Garde sourcePart: CP14ScrapGold rsiPath: _CP14/Objects/ModularTools/Garde/metall_sturdy.rsi color: "#ffaf47" @@ -32,7 +34,8 @@ - type: modularPart id: GardeSturdyCopper - targetSlot: Garde + slots: + - Garde sourcePart: CP14ScrapCopper rsiPath: _CP14/Objects/ModularTools/Garde/metall_sturdy.rsi color: "#bd712f" @@ -43,7 +46,8 @@ - type: modularPart id: GardeSturdyMithril - targetSlot: Garde + slots: + - Garde sourcePart: CP14ScrapMithril rsiPath: _CP14/Objects/ModularTools/Garde/metall_sturdy.rsi color: "#45d2a4" diff --git a/Resources/Prototypes/_CP14/ModularCraft/Inlay/quartz.yml b/Resources/Prototypes/_CP14/ModularCraft/Inlay/quartz.yml new file mode 100644 index 0000000000..3f115467ae --- /dev/null +++ b/Resources/Prototypes/_CP14/ModularCraft/Inlay/quartz.yml @@ -0,0 +1,129 @@ +- type: modularPart + id: InlayQuartzWater + slots: + - BladeInlay + rsiPath: _CP14/Objects/ModularTools/Inlay/quartz.rsi + color: "#5eabeb" + modifiers: + - !type:AddComponents + components: + - type: CP14SpellEffectOnHit + effects: + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14ImpactEffectFreeze + - !type:CP14SpellApplyEntityEffect + effects: + - !type:MovespeedModifier + walkSpeedModifier: 0.75 + sprintSpeedModifier: 0.75 + statusLifetime: 2 + - !type:AdjustTemperature + amount: -6000 + - !type:ExtinguishReaction + +- type: modularPart + id: InlayQuartzHealing + slots: + - BladeInlay + rsiPath: _CP14/Objects/ModularTools/Inlay/quartz.rsi + color: "#79b330" + modifiers: + - !type:AddComponents + components: + - type: CP14SpellEffectOnHit + effects: + - !type:CP14SpellApplyEntityEffect + effects: + - !type:HealthChange + damage: + types: + Slash: -0.5 + Blunt: -0.5 + Piercing: -0.5 + Poison: -0.5 + Bloodloss: -0.5 + Caustic: -0.5 + Cold: -0.5 + Heat: -0.5 + Shock: -0.5 + - !type:Jitter + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14ImpactEffectCureWounds + +- type: modularPart + id: InlayQuartzFire + slots: + - BladeInlay + rsiPath: _CP14/Objects/ModularTools/Inlay/quartz.rsi + color: "#ed731c" + modifiers: + - !type:AddComponents + components: + - type: CP14SpellEffectOnHit + whitelist: + components: + - MobState #Please dont burn all map + effects: + - !type:CP14SpellApplyEntityEffect + effects: + - !type:FlammableReaction + multiplier: 0.5 + - !type:AdjustTemperature + amount: 6000 + - !type:Ignite + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14ImpactEffectFlameCreation + +- type: modularPart + id: InlayQuartzLight + slots: + - BladeInlay + rsiPath: _CP14/Objects/ModularTools/Inlay/quartz.rsi + color: "#f1c7ff" + modifiers: + - !type:AddComponents + components: + - type: PointLight + color: "#f1c7ff" + radius: 3 + +- type: modularPart + id: InlayQuartzElectric + slots: + - BladeInlay + rsiPath: _CP14/Objects/ModularTools/Inlay/quartz.rsi + color: "#e6ff6b" + modifiers: + - !type:AddComponents + components: + - type: CP14SpellEffectOnHit + prob: 0.15 + effects: + - !type:CP14SpellApplyEntityEffect + effects: + - !type:Electrocute + electrocuteTime: 0.5 + electrocuteDamageScale: 1 + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14ElectrifiedEffect + +- type: modularPart + id: InlayQuartzDarkness + slots: + - BladeInlay + rsiPath: _CP14/Objects/ModularTools/Inlay/quartz.rsi + color: "#391c57" + modifiers: + - !type:AddComponents + components: + - type: CP14SpellEffectOnHit + effects: + - !type:CP14SpellThrowFromUser + throwPower: 9 + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14ImpactEffectShadowGrab \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/ModularCraft/slots.yml b/Resources/Prototypes/_CP14/ModularCraft/slots.yml index 2ea6e01026..3a258ccc0d 100644 --- a/Resources/Prototypes/_CP14/ModularCraft/slots.yml +++ b/Resources/Prototypes/_CP14/ModularCraft/slots.yml @@ -4,4 +4,8 @@ - type: modularSlot id: Garde - name: cp14-modular-slot-garde \ No newline at end of file + name: cp14-modular-slot-garde + +- type: modularSlot + id: BladeInlay + name: cp14-modular-slot-blade-inlay \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_garde.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_garde.yml index 009386a52d..7798d089f4 100644 --- a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_garde.yml +++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_garde.yml @@ -8,6 +8,8 @@ - !type:StackResource stack: CP14CopperBar count: 1 + - !type:KnowledgeRequired + knowledge: MetallForging result: CP14ModularGardeSharpCopper - type: CP14Recipe @@ -18,6 +20,8 @@ - !type:StackResource stack: CP14IronBar count: 1 + - !type:KnowledgeRequired + knowledge: MetallForging result: CP14ModularGardeSharpIron - type: CP14Recipe @@ -28,6 +32,8 @@ - !type:StackResource stack: CP14GoldBar count: 1 + - !type:KnowledgeRequired + knowledge: MetallForging result: CP14ModularGardeSharpGold - type: CP14Recipe @@ -38,6 +44,8 @@ - !type:StackResource stack: CP14MithrilBar count: 1 + - !type:KnowledgeRequired + knowledge: MetallForging result: CP14ModularGardeSharpMithril # Sturdy garde diff --git a/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_inlay.yml b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_inlay.yml new file mode 100644 index 0000000000..a7ede74b9a --- /dev/null +++ b/Resources/Prototypes/_CP14/Recipes/Workbench/Anvil/modular_inlay.yml @@ -0,0 +1,89 @@ +- type: CP14Recipe + id: CP14ModularInlayQuartzWater + tag: CP14RecipeAnvil + craftTime: 4 + requirements: + - !type:StackResource + stack: CP14MithrilBar + count: 2 + - !type:ProtoIdResource + protoId: CP14CrystalShardWater + count: 4 + - !type:KnowledgeRequired + knowledge: MetallForging + result: CP14ModularInlayQuartzWater + +- type: CP14Recipe + id: CP14ModularInlayQuartzHealing + tag: CP14RecipeAnvil + craftTime: 4 + requirements: + - !type:StackResource + stack: CP14MithrilBar + count: 2 + - !type:ProtoIdResource + protoId: CP14CrystalShardHealing + count: 4 + - !type:KnowledgeRequired + knowledge: MetallForging + result: CP14ModularInlayQuartzHealing + +- type: CP14Recipe + id: CP14ModularInlayQuartzFire + tag: CP14RecipeAnvil + craftTime: 4 + requirements: + - !type:StackResource + stack: CP14MithrilBar + count: 2 + - !type:ProtoIdResource + protoId: CP14CrystalShardFire + count: 4 + - !type:KnowledgeRequired + knowledge: MetallForging + result: CP14ModularInlayQuartzFire + +- type: CP14Recipe + id: CP14ModularInlayQuartzLight + tag: CP14RecipeAnvil + craftTime: 4 + requirements: + - !type:StackResource + stack: CP14MithrilBar + count: 2 + - !type:ProtoIdResource + protoId: CP14CrystalShardLight + count: 4 + - !type:KnowledgeRequired + knowledge: MetallForging + result: CP14ModularInlayQuartzLight + +- type: CP14Recipe + id: CP14ModularInlayQuartzElectric + tag: CP14RecipeAnvil + craftTime: 4 + requirements: + - !type:StackResource + stack: CP14MithrilBar + count: 2 + - !type:ProtoIdResource + protoId: CP14CrystalShardElectric + count: 4 + - !type:KnowledgeRequired + knowledge: MetallForging + result: CP14ModularInlayQuartzElectric + +- type: CP14Recipe + id: CP14ModularInlayQuartzDarkness + tag: CP14RecipeAnvil + craftTime: 4 + requirements: + - !type:StackResource + stack: CP14MithrilBar + count: 2 + - !type:ProtoIdResource + protoId: CP14CrystalShardDarkness + count: 4 + - !type:KnowledgeRequired + knowledge: MetallForging + result: CP14ModularInlayQuartzDarkness \ No newline at end of file diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Inlay/quartz.rsi/frame.png b/Resources/Textures/_CP14/Objects/ModularTools/Inlay/quartz.rsi/frame.png new file mode 100644 index 0000000000000000000000000000000000000000..81e0703252fdfac47ef784e749356359f7f080d6 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}J3L(+Ln2z= zUNGc3WFW%!;J$~uxW0nZLE(yqb!U}!x*30GDm=+p)!P?o+b|(kpo*EZM5I>lmg9>F zQi2a_*(=`vuWv9sCgJTUEwpLbejdf3zuT)je^)im*Gp_(enWMV?t&O+h6SfmS4~#l zBAL59#`!|qraeFIF)ez{n0tcF|M2DI+t#FQ{H`XrX<0ajv<*vLk_qoaQjgLt%H?X$|da|!BdT0vt1B0ilpUXO@geCyr Cwq?Ko literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Inlay/quartz.rsi/icon.png b/Resources/Textures/_CP14/Objects/ModularTools/Inlay/quartz.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0c18ae8acf5944ec73758ac88388e57595702714 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}v7RoDArY-_ zFK*;KV8G*YasC8VlLni9_YZONjxkrVE%kcobWnil`zvcd1p&c{{jxJZNGLO$=?U^$ zwYzAa=1%Lq-)|Hin94a@@*UrSImO58;<9zK)_&aM?Be3`Qz4012?imcMGT&< KelF{r5}E)$`Z@Ce literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/ModularTools/Inlay/quartz.rsi/item.png b/Resources/Textures/_CP14/Objects/ModularTools/Inlay/quartz.rsi/item.png new file mode 100644 index 0000000000000000000000000000000000000000..b656e813b097de85b6d93182428daa5fe6b50461 GIT binary patch literal 280 zcmV+z0q6dSP)Px#(n&-?R9J=W(y^_BFc8M^f6~!ef`$R0qeY^DRak)mn879U;0B2eK!}zOv4K;8 z@?Li@dQqg@ud<7~`{XkyrIh-1H)%oN_x?P`am==DR8=MJbGrYv5Fkks=6U`R>a77z zuY?dko%jA4Z6$y7mCaaRAUX%}XJ~D+q!B0Amcs7_7AvMFGGx zO|)$*>L(7+b=_@USE4Aof>>+GvW#&YrS0S^IF)7T^E?M&Sr+zv2f#V^zklF&i08X> exKc`~kMICq#YIs13@b?h0000