]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
PKA Modkits + Rebalance (#31247)
authorNemanja <98561806+EmoGarbage404@users.noreply.github.com>
Fri, 25 Apr 2025 18:18:23 +0000 (14:18 -0400)
committerGitHub <noreply@github.com>
Fri, 25 Apr 2025 18:18:23 +0000 (11:18 -0700)
24 files changed:
Content.Shared/Weapons/Ranged/Upgrades/Components/GunUpgradeComponent.cs [new file with mode: 0644]
Content.Shared/Weapons/Ranged/Upgrades/Components/GunUpgradeDamageComponent.cs [new file with mode: 0644]
Content.Shared/Weapons/Ranged/Upgrades/Components/GunUpgradeFireRateComponent.cs [new file with mode: 0644]
Content.Shared/Weapons/Ranged/Upgrades/Components/GunUpgradeSpeedComponent.cs [new file with mode: 0644]
Content.Shared/Weapons/Ranged/Upgrades/Components/UpgradeableGunComponent.cs [new file with mode: 0644]
Content.Shared/Weapons/Ranged/Upgrades/GunUpgradeSystem.cs [new file with mode: 0644]
Resources/Locale/en-US/research/technologies.ftl
Resources/Locale/en-US/weapons/ranged/upgrades.ftl [new file with mode: 0644]
Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/tables_loot.yml
Resources/Prototypes/Entities/Objects/Tools/pka_upgrade.yml [new file with mode: 0644]
Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml
Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/pka.yml
Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
Resources/Prototypes/Recipes/Lathes/Packs/science.yml
Resources/Prototypes/Recipes/Lathes/Packs/shared.yml
Resources/Prototypes/Recipes/Lathes/salvage.yml
Resources/Prototypes/Research/arsenal.yml
Resources/Prototypes/tags.yml
Resources/Textures/Objects/Tools/upgrade.rsi/base.png [new file with mode: 0644]
Resources/Textures/Objects/Tools/upgrade.rsi/display.png [new file with mode: 0644]
Resources/Textures/Objects/Tools/upgrade.rsi/meta.json [new file with mode: 0644]
Resources/Textures/Objects/Tools/upgrade.rsi/overlay-1.png [new file with mode: 0644]
Resources/Textures/Objects/Tools/upgrade.rsi/overlay-2.png [new file with mode: 0644]
Resources/Textures/Objects/Tools/upgrade.rsi/overlay-3.png [new file with mode: 0644]

diff --git a/Content.Shared/Weapons/Ranged/Upgrades/Components/GunUpgradeComponent.cs b/Content.Shared/Weapons/Ranged/Upgrades/Components/GunUpgradeComponent.cs
new file mode 100644 (file)
index 0000000..3fd4b93
--- /dev/null
@@ -0,0 +1,24 @@
+using Content.Shared.Tag;
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Weapons.Ranged.Upgrades.Components;
+
+/// <summary>
+/// Used to denote compatibility with <see cref="UpgradeableGunComponent"/>. Does not contain explicit behavior.
+/// </summary>
+[RegisterComponent, NetworkedComponent, Access(typeof(GunUpgradeSystem))]
+public sealed partial class GunUpgradeComponent : Component
+{
+    /// <summary>
+    /// Tags used to ensure mutually exclusive upgrades and duplicates are not stacked.
+    /// </summary>
+    [DataField]
+    public List<ProtoId<TagPrototype>> Tags = new();
+
+    /// <summary>
+    /// Markup added to the gun on examine to display the upgrades.
+    /// </summary>
+    [DataField]
+    public LocId ExamineText;
+}
diff --git a/Content.Shared/Weapons/Ranged/Upgrades/Components/GunUpgradeDamageComponent.cs b/Content.Shared/Weapons/Ranged/Upgrades/Components/GunUpgradeDamageComponent.cs
new file mode 100644 (file)
index 0000000..b69c797
--- /dev/null
@@ -0,0 +1,17 @@
+using Content.Shared.Damage;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Weapons.Ranged.Upgrades.Components;
+
+/// <summary>
+/// A <see cref="GunUpgradeComponent"/> for increasing the damage of a gun's projectile.
+/// </summary>
+[RegisterComponent, NetworkedComponent, Access(typeof(GunUpgradeSystem))]
+public sealed partial class GunUpgradeDamageComponent : Component
+{
+    /// <summary>
+    /// Additional damage added onto the projectile's base damage.
+    /// </summary>
+    [DataField]
+    public DamageSpecifier Damage = new();
+}
diff --git a/Content.Shared/Weapons/Ranged/Upgrades/Components/GunUpgradeFireRateComponent.cs b/Content.Shared/Weapons/Ranged/Upgrades/Components/GunUpgradeFireRateComponent.cs
new file mode 100644 (file)
index 0000000..9055692
--- /dev/null
@@ -0,0 +1,16 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Weapons.Ranged.Upgrades.Components;
+
+/// <summary>
+/// A <see cref="GunUpgradeComponent"/> for increasing the firerate of a gun.
+/// </summary>
+[RegisterComponent, NetworkedComponent, Access(typeof(GunUpgradeSystem))]
+public sealed partial class GunUpgradeFireRateComponent : Component
+{
+    /// <summary>
+    /// Multiplier for the speed of a gun's fire rate.
+    /// </summary>
+    [DataField]
+    public float Coefficient = 1;
+}
diff --git a/Content.Shared/Weapons/Ranged/Upgrades/Components/GunUpgradeSpeedComponent.cs b/Content.Shared/Weapons/Ranged/Upgrades/Components/GunUpgradeSpeedComponent.cs
new file mode 100644 (file)
index 0000000..82446d0
--- /dev/null
@@ -0,0 +1,16 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Weapons.Ranged.Upgrades.Components;
+
+/// <summary>
+/// A <see cref="GunUpgradeComponent"/> for increasing the speed of a gun's projectile.
+/// </summary>
+[RegisterComponent, NetworkedComponent, Access(typeof(GunUpgradeSystem))]
+public sealed partial class GunUpgradeSpeedComponent : Component
+{
+    /// <summary>
+    /// Multiplier for the speed of a gun's projectile.
+    /// </summary>
+    [DataField]
+    public float Coefficient = 1;
+}
diff --git a/Content.Shared/Weapons/Ranged/Upgrades/Components/UpgradeableGunComponent.cs b/Content.Shared/Weapons/Ranged/Upgrades/Components/UpgradeableGunComponent.cs
new file mode 100644 (file)
index 0000000..ef79c9c
--- /dev/null
@@ -0,0 +1,36 @@
+using Content.Shared.Whitelist;
+using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Weapons.Ranged.Upgrades.Components;
+
+/// <summary>
+/// Component that stores and manages <see cref="GunUpgradeComponent"/> that modify a given weapon.
+/// </summary>
+[RegisterComponent, NetworkedComponent, Access(typeof(GunUpgradeSystem))]
+public sealed partial class UpgradeableGunComponent : Component
+{
+    /// <summary>
+    /// ID of container that holds upgrades.
+    /// </summary>
+    [DataField]
+    public string UpgradesContainerId = "upgrades";
+
+    /// <summary>
+    /// Whitelist which denotes the types of upgrades that can be added.
+    /// </summary>
+    [DataField]
+    public EntityWhitelist Whitelist = new();
+
+    /// <summary>
+    /// Sound played when upgrade is inserted.
+    /// </summary>
+    [DataField]
+    public SoundSpecifier? InsertSound = new SoundPathSpecifier("/Audio/Effects/thunk.ogg");
+
+    /// <summary>
+    /// The maximum amount of upgrades this gun can hold.
+    /// </summary>
+    [DataField]
+    public int MaxUpgradeCount = 2;
+}
diff --git a/Content.Shared/Weapons/Ranged/Upgrades/GunUpgradeSystem.cs b/Content.Shared/Weapons/Ranged/Upgrades/GunUpgradeSystem.cs
new file mode 100644 (file)
index 0000000..b84446f
--- /dev/null
@@ -0,0 +1,145 @@
+using System.Linq;
+using Content.Shared.Administration.Logs;
+using Content.Shared.Database;
+using Content.Shared.Examine;
+using Content.Shared.Interaction;
+using Content.Shared.Popups;
+using Content.Shared.Projectiles;
+using Content.Shared.Tag;
+using Content.Shared.Weapons.Ranged.Events;
+using Content.Shared.Weapons.Ranged.Systems;
+using Content.Shared.Weapons.Ranged.Upgrades.Components;
+using Content.Shared.Whitelist;
+using Robust.Shared.Audio.Systems;
+using Robust.Shared.Containers;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Weapons.Ranged.Upgrades;
+
+public sealed class GunUpgradeSystem : EntitySystem
+{
+    [Dependency] private readonly ISharedAdminLogManager _adminLog = default!;
+    [Dependency] private readonly SharedAudioSystem _audio = default!;
+    [Dependency] private readonly SharedContainerSystem _container = default!;
+    [Dependency] private readonly SharedGunSystem _gun = default!;
+    [Dependency] private readonly EntityWhitelistSystem _entityWhitelist = default!;
+    [Dependency] private readonly SharedPopupSystem _popup = default!;
+
+    /// <inheritdoc/>
+    public override void Initialize()
+    {
+        SubscribeLocalEvent<UpgradeableGunComponent, ComponentInit>(OnInit);
+        SubscribeLocalEvent<UpgradeableGunComponent, AfterInteractUsingEvent>(OnAfterInteractUsing);
+        SubscribeLocalEvent<UpgradeableGunComponent, ExaminedEvent>(OnExamine);
+
+        SubscribeLocalEvent<UpgradeableGunComponent, GunRefreshModifiersEvent>(RelayEvent);
+        SubscribeLocalEvent<UpgradeableGunComponent, GunShotEvent>(RelayEvent);
+
+        SubscribeLocalEvent<GunUpgradeFireRateComponent, GunRefreshModifiersEvent>(OnFireRateRefresh);
+        SubscribeLocalEvent<GunUpgradeSpeedComponent, GunRefreshModifiersEvent>(OnSpeedRefresh);
+        SubscribeLocalEvent<GunUpgradeDamageComponent, GunShotEvent>(OnDamageGunShot);
+    }
+
+    private void RelayEvent<T>(Entity<UpgradeableGunComponent> ent, ref T args) where T : notnull
+    {
+        foreach (var upgrade in GetCurrentUpgrades(ent))
+        {
+            RaiseLocalEvent(upgrade, ref args);
+        }
+    }
+
+    private void OnExamine(Entity<UpgradeableGunComponent> ent, ref ExaminedEvent args)
+    {
+        using (args.PushGroup(nameof(UpgradeableGunComponent)))
+        {
+            foreach (var upgrade in GetCurrentUpgrades(ent))
+            {
+                args.PushMarkup(Loc.GetString(upgrade.Comp.ExamineText));
+            }
+        }
+    }
+
+    private void OnInit(Entity<UpgradeableGunComponent> ent, ref ComponentInit args)
+    {
+        _container.EnsureContainer<Container>(ent, ent.Comp.UpgradesContainerId);
+    }
+
+    private void OnAfterInteractUsing(Entity<UpgradeableGunComponent> ent, ref AfterInteractUsingEvent args)
+    {
+        if (args.Handled || !args.CanReach || !TryComp<GunUpgradeComponent>(args.Used, out var upgradeComponent))
+            return;
+
+        if (GetCurrentUpgrades(ent).Count >= ent.Comp.MaxUpgradeCount)
+        {
+            _popup.PopupPredicted(Loc.GetString("upgradeable-gun-popup-upgrade-limit"), ent, args.User);
+            return;
+        }
+
+        if (_entityWhitelist.IsWhitelistFail(ent.Comp.Whitelist, args.Used))
+            return;
+
+        if (GetCurrentUpgradeTags(ent).ToHashSet().IsSupersetOf(upgradeComponent.Tags))
+        {
+            _popup.PopupPredicted(Loc.GetString("upgradeable-gun-popup-already-present"), ent, args.User);
+            return;
+        }
+
+        _audio.PlayPredicted(ent.Comp.InsertSound, ent, args.User);
+        _popup.PopupClient(Loc.GetString("gun-upgrade-popup-insert", ("upgrade", args.Used),("gun", ent.Owner)), args.User);
+        _gun.RefreshModifiers(ent.Owner);
+        args.Handled = _container.Insert(args.Used, _container.GetContainer(ent, ent.Comp.UpgradesContainerId));
+
+        _adminLog.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(args.Used):player} inserted gun upgrade {ToPrettyString(args.Used)} into {ToPrettyString(ent.Owner)}.");
+    }
+
+    private void OnFireRateRefresh(Entity<GunUpgradeFireRateComponent> ent, ref GunRefreshModifiersEvent args)
+    {
+        args.FireRate *= ent.Comp.Coefficient;
+    }
+
+    private void OnSpeedRefresh(Entity<GunUpgradeSpeedComponent> ent, ref GunRefreshModifiersEvent args)
+    {
+        args.ProjectileSpeed *= ent.Comp.Coefficient;
+    }
+
+    private void OnDamageGunShot(Entity<GunUpgradeDamageComponent> ent, ref GunShotEvent args)
+    {
+        foreach (var (ammo, _) in args.Ammo)
+        {
+            if (TryComp<ProjectileComponent>(ammo, out var proj))
+                proj.Damage += ent.Comp.Damage;
+        }
+    }
+
+    /// <summary>
+    /// Gets the entities inside the gun's upgrade container.
+    /// </summary>
+    public HashSet<Entity<GunUpgradeComponent>> GetCurrentUpgrades(Entity<UpgradeableGunComponent> ent)
+    {
+        if (!_container.TryGetContainer(ent, ent.Comp.UpgradesContainerId, out var container))
+            return new HashSet<Entity<GunUpgradeComponent>>();
+
+        var upgrades = new HashSet<Entity<GunUpgradeComponent>>();
+        foreach (var contained in container.ContainedEntities)
+        {
+            if (TryComp<GunUpgradeComponent>(contained, out var upgradeComp))
+                upgrades.Add((contained, upgradeComp));
+        }
+
+        return upgrades;
+    }
+
+    /// <summary>
+    /// Gets the tags of the upgrades currently applied.
+    /// </summary>
+    public IEnumerable<ProtoId<TagPrototype>> GetCurrentUpgradeTags(Entity<UpgradeableGunComponent> ent)
+    {
+        foreach (var upgrade in GetCurrentUpgrades(ent))
+        {
+            foreach (var tag in upgrade.Comp.Tags)
+            {
+                yield return tag;
+            }
+        }
+    }
+}
index fc4f3e41e8793d61a39200eeec7acbce29d16ceb..c3c1f1dad7b05f68a48676502459b5f947e5d798 100644 (file)
@@ -35,6 +35,7 @@ research-technology-wave-particle-harnessing = Wave Particle Harnessing
 research-technology-advanced-riot-control = Advanced Riot Control
 research-technology-portable-microfusion-weaponry = Portable Microfusion Weaponry
 research-technology-experimental-battery-ammo = Experimental Battery Ammo
+research-technology-kinetic-modifications = Kinetic Modifications
 research-technology-basic-shuttle-armament = Shuttle Basic Armament
 research-technology-advanced-shuttle-weapon = Advanced Shuttle Weapons
 research-technology-thermal-weaponry = Thermal Weaponry
diff --git a/Resources/Locale/en-US/weapons/ranged/upgrades.ftl b/Resources/Locale/en-US/weapons/ranged/upgrades.ftl
new file mode 100644 (file)
index 0000000..c766b1e
--- /dev/null
@@ -0,0 +1,7 @@
+upgradeable-gun-popup-already-present = Upgrade already installed!
+upgradeable-gun-popup-upgrade-limit = Max upgrades reached!
+gun-upgrade-popup-insert = Inserted {THE($upgrade)} into {THE($gun)}!
+
+gun-upgrade-examine-text-damage = This has upgraded [color=#ec9b2d][bold]damage.[/bold][/color]
+gun-upgrade-examine-text-range = This has upgraded [color=#2decec][bold]range.[/bold][/color]
+gun-upgrade-examine-text-reload = This has upgraded [color=#bbf134][bold]fire rate.[/bold][/color]
index 4ce93028bfd18a61a1ec1c75f9f7247a7316d986..dba4ec6789a8ae2eed87599503808a1abd41609d 100644 (file)
       children:
       - id: JetpackBlueFilled
       - id: JetpackBlackFilled
+    - !type:GroupSelector
+      children:
+      - id: PKAUpgradeDamage
+      - id: PKAUpgradeRange
+      - id: PKAUpgradeFireRate
+
 
 - type: entityTable
   id: RandomGeneratorTable
diff --git a/Resources/Prototypes/Entities/Objects/Tools/pka_upgrade.yml b/Resources/Prototypes/Entities/Objects/Tools/pka_upgrade.yml
new file mode 100644 (file)
index 0000000..e06597c
--- /dev/null
@@ -0,0 +1,80 @@
+- type: entity
+  id: BasePKAUpgrade
+  parent: BaseItem
+  name: PKA modkit
+  description: A modkit for a proto-kinetic accelerator.
+  abstract: true
+  components:
+  - type: Sprite
+    sprite: Objects/Tools/upgrade.rsi
+  - type: Item
+    size: Small
+  - type: GunUpgrade
+  - type: StaticPrice
+    price: 750
+  - type: Tag
+    tags:
+    - PKAUpgrade
+
+- type: entity
+  id: PKAUpgradeDamage
+  parent: BasePKAUpgrade
+  name: PKA modkit (damage)
+  components:
+  - type: Sprite
+    layers:
+    - state: base
+    - state: overlay-1
+      color: "#ec9b2d"
+    - state: overlay-2
+      color: "#a71010"
+    - state: overlay-3
+      color: "#eb4c13"
+  - type: GunUpgrade
+    tags: [ GunUpgradeDamage ]
+    examineText: gun-upgrade-examine-text-damage
+  - type: GunUpgradeDamage
+    damage:
+      types:
+        Blunt: 10
+        Structural: 15
+
+- type: entity
+  id: PKAUpgradeRange
+  parent: BasePKAUpgrade
+  name: PKA modkit (range)
+  components:
+  - type: Sprite
+    layers:
+    - state: base
+    - state: overlay-1
+      color: "#2decec"
+    - state: overlay-2
+      color: "#1012a7"
+    - state: overlay-3
+      color: "#1373eb"
+  - type: GunUpgrade
+    tags: [ GunUpgradeRange ]
+    examineText: gun-upgrade-examine-text-range
+  - type: GunUpgradeSpeed
+    coefficient: 1.5
+
+- type: entity
+  id: PKAUpgradeFireRate
+  parent: BasePKAUpgrade
+  name: PKA modkit (fire rate)
+  components:
+  - type: Sprite
+    layers:
+    - state: base
+    - state: overlay-1
+      color: "#bbf134"
+    - state: overlay-2
+      color: "#07901b"
+    - state: overlay-3
+      color: "#9bf134"
+  - type: GunUpgrade
+    tags: [ GunUpgradeReloadSpeed ]
+    examineText: gun-upgrade-examine-text-reload
+  - type: GunUpgradeFireRate
+    coefficient: 1.5
index f85e93b893f07aba6cdcd347d2fa529e0260653c..3107a50cfcce6acb640d971bc0c1e8c508b34291 100644 (file)
@@ -7,7 +7,9 @@
     sprite: Objects/Weapons/Guns/Basic/kinetic_accelerator.rsi
   - type: Item
     sprite: Objects/Weapons/Guns/Basic/kinetic_accelerator.rsi
-    size: Normal
+    size: Large
+    shape:
+    - 0,0,2,1
   - type: GunWieldBonus
     minAngle: -43
     maxAngle: -43
index 409f622f89c11d63c4e12ab3fa41d2e5a33ceccb..9bf626814788d94235a357d893e16699f6547e79 100644 (file)
       map: [ "empty-icon" ]
   # todo: add itemcomponent with inhandVisuals states using unused texture and animation assets in kinetic_accelerator.rsi
   # todo: add clothingcomponent with clothingVisuals states using unused texture and animations assets in kinetic_accelerator.rsi
+  - type: UpgradeableGun
+    whitelist:
+      tags:
+      - PKAUpgrade
+  - type: ContainerContainer
+    containers:
+      upgrades: !type:Container
index 31767ba8b32ab972bd2dd95b30443f72cc53aee5..bea1df8bca766bcecc0de9f917293d56e137538d 100644 (file)
     impactEffect: BulletImpactEffectKinetic
     damage:
       types:
-        Blunt: 25
-        Structural: 30
+        Blunt: 15
+        Structural: 15
   # Short lifespan
   - type: TimedDespawn
-    lifetime: 0.4
+    lifetime: 0.170 # ~4 tiles of range.
   - type: GatheringProjectile
 
 - type: entity
index c68b408cacb9918f2a4a3d2d68a088b011cf4d23..ef11d54ba00bae2302a4b5a77f506ef1aca69112 100644 (file)
@@ -53,6 +53,9 @@
   - WeaponPistolCHIMP
   - WeaponForceGun
   - WeaponProtoKineticAccelerator
+  - PKAUpgradeDamage
+  - PKAUpgradeRange
+  - PKAUpgradeFireRate
   - WeaponTetherGun
   - WeaponGauntletGorilla
 
index 6fb00c0257ebb83623c9884962101e47c6a5a111..07bdc5f2ea7e0400df8dfbeb5f1d8d103a240a78 100644 (file)
@@ -59,3 +59,6 @@
   id: SalvageSecurityWeapons
   recipes:
   - WeaponProtoKineticAccelerator
+  - PKAUpgradeDamage
+  - PKAUpgradeRange
+  - PKAUpgradeFireRate
index 02eeb4bafb851ef77c7d86f2d2a37ab10cb2cb0e..517735a24fcedc6f39d7bf05e0aebd844ada6228 100644 (file)
     Plastic: 200
     Silver: 200
     Diamond: 100
+
+- type: latheRecipe
+  id: PKAUpgradeDamage
+  result: PKAUpgradeDamage
+  categories:
+  - Weapons
+  completetime: 5
+  materials:
+    Steel: 1500
+    Gold: 500
+    Silver: 500
+
+- type: latheRecipe
+  id: PKAUpgradeRange
+  result: PKAUpgradeRange
+  categories:
+  - Weapons
+  completetime: 5
+  materials:
+    Steel: 1500
+    Gold: 500
+    Silver: 500
+
+- type: latheRecipe
+  id: PKAUpgradeFireRate
+  result: PKAUpgradeFireRate
+  categories:
+  - Weapons
+  completetime: 5
+  materials:
+    Steel: 1500
+    Gold: 500
+    Silver: 500
+
index b848ae0998d6ccacf25298f4c50456cce0bb30b3..7ba7cea9da5ddf8045a2728a5bbd0f736b688ade 100644 (file)
   recipeUnlocks:
   - WeaponXrayCannon
 
+- type: technology
+  id: KineticModifications
+  name: research-technology-kinetic-modifications
+  icon:
+    sprite: Objects/Tools/upgrade.rsi
+    state: display
+  discipline: Arsenal
+  tier: 2
+  cost: 7500
+  recipeUnlocks:
+  - PKAUpgradeDamage
+  - PKAUpgradeRange
+  - PKAUpgradeFireRate
+
 - type: technology
   id: BasicShuttleArmament
   name: research-technology-basic-shuttle-armament
index c8e376d109bf1dfefc9e583e70c1bc1162c078ee..6eb882b9842fad35a7325dcc8036e7125f13a367 100644 (file)
 - type: Tag
   id: GuideEmbeded
 
+- type: Tag
+  id: GunUpgradeDamage
+
+- type: Tag
+  id: GunUpgradeRange
+
+- type: Tag
+  id: GunUpgradeReloadSpeed
+
 - type: Tag
   id: Hamster
 
 - type: Tag
   id: Pizza
 
+- type: Tag
+  id: PKAUpgrade
+
 - type: Tag
   id: PlantAnalyzer
 
diff --git a/Resources/Textures/Objects/Tools/upgrade.rsi/base.png b/Resources/Textures/Objects/Tools/upgrade.rsi/base.png
new file mode 100644 (file)
index 0000000..e18a16b
Binary files /dev/null and b/Resources/Textures/Objects/Tools/upgrade.rsi/base.png differ
diff --git a/Resources/Textures/Objects/Tools/upgrade.rsi/display.png b/Resources/Textures/Objects/Tools/upgrade.rsi/display.png
new file mode 100644 (file)
index 0000000..34f48eb
Binary files /dev/null and b/Resources/Textures/Objects/Tools/upgrade.rsi/display.png differ
diff --git a/Resources/Textures/Objects/Tools/upgrade.rsi/meta.json b/Resources/Textures/Objects/Tools/upgrade.rsi/meta.json
new file mode 100644 (file)
index 0000000..17fd84c
--- /dev/null
@@ -0,0 +1,28 @@
+{
+       "version": 1,
+       "license": "CC-BY-SA-3.0",
+       "copyright": "Taken from https://github.com/tgstation/tgstation at commit 6665eec76c98a4f3f89bebcd10b34b47dcc0b8ae.",
+       "size":
+    {
+        "x": 32,
+        "y": 32
+    },
+       "states":
+    [
+               {
+            "name": "base"
+        },
+               {
+            "name": "overlay-1"
+        },
+        {
+            "name": "overlay-2"
+        },
+        {
+            "name": "overlay-3"
+        },
+        {
+            "name": "display"
+        }
+    ]
+}
diff --git a/Resources/Textures/Objects/Tools/upgrade.rsi/overlay-1.png b/Resources/Textures/Objects/Tools/upgrade.rsi/overlay-1.png
new file mode 100644 (file)
index 0000000..89d0eea
Binary files /dev/null and b/Resources/Textures/Objects/Tools/upgrade.rsi/overlay-1.png differ
diff --git a/Resources/Textures/Objects/Tools/upgrade.rsi/overlay-2.png b/Resources/Textures/Objects/Tools/upgrade.rsi/overlay-2.png
new file mode 100644 (file)
index 0000000..cbcaa4c
Binary files /dev/null and b/Resources/Textures/Objects/Tools/upgrade.rsi/overlay-2.png differ
diff --git a/Resources/Textures/Objects/Tools/upgrade.rsi/overlay-3.png b/Resources/Textures/Objects/Tools/upgrade.rsi/overlay-3.png
new file mode 100644 (file)
index 0000000..7f554f4
Binary files /dev/null and b/Resources/Textures/Objects/Tools/upgrade.rsi/overlay-3.png differ