diff --git a/Content.Server/Projectiles/ProjectileSystem.cs b/Content.Server/Projectiles/ProjectileSystem.cs
index 21fde338c3..87b9c167ea 100644
--- a/Content.Server/Projectiles/ProjectileSystem.cs
+++ b/Content.Server/Projectiles/ProjectileSystem.cs
@@ -46,7 +46,9 @@ public sealed partial class ProjectileSystem : SharedProjectileSystem
return;
}
- var ev = new ProjectileHitEvent(component.Damage * _damageableSystem.UniversalProjectileDamageModifier, target, component.Shooter);
+ var damageEv = new BeforeProjectileHitEvent(component.Damage, target, component.Shooter);
+ RaiseLocalEvent(uid, ref damageEv);
+ var ev = new ProjectileHitEvent(damageEv.Damage * _damageableSystem.UniversalProjectileDamageModifier, target, component.Shooter);
RaiseLocalEvent(uid, ref ev);
var otherName = ToPrettyString(target);
diff --git a/Content.Shared/Projectiles/ComplexProjectileDamageComponent.cs b/Content.Shared/Projectiles/ComplexProjectileDamageComponent.cs
new file mode 100644
index 0000000000..6e9cd4b99c
--- /dev/null
+++ b/Content.Shared/Projectiles/ComplexProjectileDamageComponent.cs
@@ -0,0 +1,52 @@
+using Content.Shared.Damage;
+using Content.Shared.Whitelist;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Projectiles;
+
+///
+/// A projectile with this component will not deal .
+/// Instead, it will do damage based on the target if
+/// said target passes the whitelist and blacklist of the options
+///
+///
+/// If the target doesn't match any option, the projectile will deal .
+///
+[RegisterComponent, NetworkedComponent]
+public sealed partial class ComplexProjectileDamageComponent : Component
+{
+ ///
+ /// Array of options of damage for specific entities.
+ ///
+ ///
+ /// Only one option will choosen, if a target fits 2 options,
+ /// it will receive damage only from the first option that matches.
+ ///
+ [DataField]
+ public DamageOption[] DamageOptions = [];
+}
+
+///
+/// Specifies a amount of damage to deal to entities that fit the whitelist and are not blacklisted.
+///
+[DataDefinition]
+public partial struct DamageOption
+{
+ ///
+ /// The damage to deal to certain entities.
+ ///
+ [DataField]
+ public DamageSpecifier Damage;
+
+ ///
+ /// The whitelist of entities to deal the damage to.
+ ///
+ [DataField]
+ public EntityWhitelist? Whitelist;
+
+ ///
+ /// The blacklist of entities to not deal the damage to.
+ ///
+ [DataField]
+ public EntityWhitelist? Blacklist;
+}
diff --git a/Content.Shared/Projectiles/SharedProjectileSystem.cs b/Content.Shared/Projectiles/SharedProjectileSystem.cs
index 32972c0f3d..a1be671fda 100644
--- a/Content.Shared/Projectiles/SharedProjectileSystem.cs
+++ b/Content.Shared/Projectiles/SharedProjectileSystem.cs
@@ -5,6 +5,7 @@ using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction;
using Content.Shared.Inventory;
using Content.Shared.Throwing;
+using Content.Shared.Whitelist;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Map;
using Robust.Shared.Network;
@@ -26,6 +27,7 @@ public abstract partial class SharedProjectileSystem : EntitySystem
[Dependency] private SharedHandsSystem _hands = default!;
[Dependency] private SharedPhysicsSystem _physics = default!;
[Dependency] private SharedTransformSystem _transform = default!;
+ [Dependency] private EntityWhitelistSystem _whitelist = null!;
public override void Initialize()
{
@@ -39,6 +41,7 @@ public abstract partial class SharedProjectileSystem : EntitySystem
SubscribeLocalEvent(OnEmbeddableCompShutdown);
SubscribeLocalEvent(OnEmbeddableTermination);
+ SubscribeLocalEvent(OnBeforeComplexProjectileHit);
}
private void OnEmbedActivate(Entity embeddable, ref ActivateInWorldEvent args)
@@ -188,6 +191,17 @@ public abstract partial class SharedProjectileSystem : EntitySystem
DetachAllEmbedded(container);
}
+ private void OnBeforeComplexProjectileHit(Entity ent, ref BeforeProjectileHitEvent args)
+ {
+ foreach (var option in ent.Comp.DamageOptions)
+ {
+ if (!_whitelist.CheckBoth(args.Target, option.Blacklist, option.Whitelist))
+ continue;
+ args.Damage = option.Damage;
+ return;
+ }
+ }
+
public void DetachAllEmbedded(Entity container)
{
foreach (var embedded in container.Comp.EmbeddedObjects)
@@ -250,3 +264,9 @@ public record struct ProjectileReflectAttemptEvent(EntityUid ProjUid, Projectile
///
[ByRefEvent]
public record struct ProjectileHitEvent(DamageSpecifier Damage, EntityUid Target, EntityUid? Shooter = null);
+
+///
+/// Raised before a projectile hits an entity
+///
+[ByRefEvent]
+public record struct BeforeProjectileHitEvent(DamageSpecifier Damage, EntityUid Target, EntityUid? Shooter = null);
diff --git a/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml b/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml
index 3ec7ac25bf..fff3b615e2 100644
--- a/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml
+++ b/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml
@@ -52,3 +52,8 @@
license: "CC-BY-4.0"
copyright: "Created by simeonradivoev"
source: "https://freesound.org/people/simeonradivoev/sounds/740218"
+
+- files: ["nanite_gun.ogg"]
+ license: "CC-BY-SA-3.0"
+ copyright: "Created by sadiefei"
+ source: "https://freesound.org/people/torn.rugged.audio.35/sounds/45934/"
diff --git a/Resources/Audio/Weapons/Guns/Gunshots/nanite_gun.ogg b/Resources/Audio/Weapons/Guns/Gunshots/nanite_gun.ogg
new file mode 100644
index 0000000000..e3102d1536
Binary files /dev/null and b/Resources/Audio/Weapons/Guns/Gunshots/nanite_gun.ogg differ
diff --git a/Resources/Audio/Weapons/Guns/Hits/attributions.yml b/Resources/Audio/Weapons/Guns/Hits/attributions.yml
index 297fc9dcf2..aeebb22f3b 100644
--- a/Resources/Audio/Weapons/Guns/Hits/attributions.yml
+++ b/Resources/Audio/Weapons/Guns/Hits/attributions.yml
@@ -6,4 +6,9 @@
- files: ["ric1.ogg", "ric2.ogg", "ric3.ogg", "ric3.ogg", "ric5.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Taken from tgstation"
- source: "https://github.com/tgstation/tgstation/tree/7501504b0ea029d2cf1c0336d09db5c0959aa412/sound/weapons/effects"
\ No newline at end of file
+ source: "https://github.com/tgstation/tgstation/tree/7501504b0ea029d2cf1c0336d09db5c0959aa412/sound/weapons/effects"
+
+- files: ["nanite_hit1.ogg", "nanite_hit2.ogg", "nanitehit_3.ogg"]
+ license: "CC-BY-SA-3.0"
+ copyright: "Created by sadiefei"
+ source: "https://github.com/tgstation/tgstation/tree/7501504b0ea029d2cf1c0336d09db5c0959aa412/sound/weapons/effects"
diff --git a/Resources/Audio/Weapons/Guns/Hits/nanite_hit1.ogg b/Resources/Audio/Weapons/Guns/Hits/nanite_hit1.ogg
new file mode 100644
index 0000000000..93fb5d8102
Binary files /dev/null and b/Resources/Audio/Weapons/Guns/Hits/nanite_hit1.ogg differ
diff --git a/Resources/Audio/Weapons/Guns/Hits/nanite_hit2.ogg b/Resources/Audio/Weapons/Guns/Hits/nanite_hit2.ogg
new file mode 100644
index 0000000000..92129acfba
Binary files /dev/null and b/Resources/Audio/Weapons/Guns/Hits/nanite_hit2.ogg differ
diff --git a/Resources/Audio/Weapons/Guns/Hits/nanite_hit3.ogg b/Resources/Audio/Weapons/Guns/Hits/nanite_hit3.ogg
new file mode 100644
index 0000000000..16227e37e9
Binary files /dev/null and b/Resources/Audio/Weapons/Guns/Hits/nanite_hit3.ogg differ
diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml
index 4bef8defa9..ccaeae9fd7 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml
@@ -1572,6 +1572,22 @@
- type: BorgModuleIcon
icon: { sprite: Interface/Actions/actions_borg.rsi, state: xenoborg-oil-gun-module }
+- type: entity
+ parent: [ BaseXenoborgModuleEngi, BaseProviderBorgModule, BaseXenoborgContraband ]
+ id: XenoborgModuleNaniteGun
+ name: nanite gun xenoborg module
+ description: Module that allows Xenoborgs to have a crystal firing nanite gun.
+ components:
+ - type: Sprite
+ layers:
+ - state: xenoborg_engi
+ - state: icon-xenoborg-nanite-gun
+ - type: ItemBorgModule
+ hands:
+ - item: WeaponNaniteGun
+ - type: BorgModuleIcon
+ icon: { sprite: Interface/Actions/actions_borg.rsi, state: xenoborg-nanite-module }
+
- type: entity
parent: [ BaseXenoborgModuleHeavy, BaseProviderBorgModule, BaseXenoborgContraband ]
id: XenoborgModuleJammer
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/nanite.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/nanite.yml
new file mode 100644
index 0000000000..5f5752f51d
--- /dev/null
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/nanite.yml
@@ -0,0 +1,22 @@
+- type: entity
+ parent: [ BaseCartridge, BaseXenoborgContraband ]
+ id: CartridgeNanite
+ name: nanite crystal
+ description: A high-power nanite crystal used by xenoborgs.
+ components:
+ - type: CartridgeAmmo
+ muzzleFlash: MuzzleFlashEffectNanite
+ proto: BulletNanite
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Ammunition/Casings/nanite_casing.rsi
+ layers:
+ - map: ["NaniteCasing"]
+ state: base
+ - type: RandomSprite
+ available:
+ - NaniteCasing:
+ base: ""
+ base1: ""
+ base2: ""
+ - type: StaticPrice
+ price: 20
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/nanite.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/nanite.yml
new file mode 100644
index 0000000000..e34d105baa
--- /dev/null
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/nanite.yml
@@ -0,0 +1,69 @@
+- type: entity
+ id: MuzzleFlashEffectNanite
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: TimedDespawn
+ lifetime: 0.4
+ - type: Sprite
+ drawdepth: BelowMobs
+ offset: -.25, 0
+ layers:
+ - shader: unshaded
+ map: ["enum.EffectLayers.Unshaded"]
+ sprite: Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi
+ state: muzzle_nanite
+ - type: EffectVisuals
+ - type: Tag
+ tags:
+ - HideContextMenu
+ - type: AnimationPlayer
+
+- type: entity
+ id: BulletImpactEffectNanite
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: TimedDespawn
+ lifetime: 0.25
+ - type: Sprite
+ drawdepth: Effects
+ layers:
+ - shader: unshaded
+ map: ["enum.EffectLayers.Unshaded"]
+ sprite: Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi
+ state: impact_nanite
+ - type: EffectVisuals
+ - type: Tag
+ tags:
+ - HideContextMenu
+
+- type: entity
+ parent: BaseBullet
+ id: BulletNanite
+ categories: [ HideSpawnMenu ]
+ name: nanite crystal
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi
+ layers:
+ - state: nanite
+ shader: unshaded
+ - type: Projectile
+ impactEffect: BulletImpactEffectNanite
+ damage:
+ types:
+ Piercing: 9
+ Poison: 3
+ soundHit:
+ collection: NaniteBulletImpact
+ - type: ComplexProjectileDamage
+ damageOptions:
+ - damage:
+ types:
+ Blunt: -10
+ Piercing: -10
+ Slash: -10
+ Heat: -10
+ Shock: -10
+ whitelist:
+ components:
+ - BorgChassis
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/nanite_gun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/nanite_gun.yml
new file mode 100644
index 0000000000..8950a40854
--- /dev/null
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/nanite_gun.yml
@@ -0,0 +1,47 @@
+- type: entity
+ parent: [BaseItem, BaseXenoborgContraband]
+ id: WeaponNaniteGun
+ name: nanite gun
+ description: A strange gun that shoots nanites encased in crystal shards that heals borgs but hurts fleshy inferior beings.
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Rifles/nanite.rsi
+ layers:
+ - state: base
+ map: ["enum.GunVisualLayers.Base"]
+ - state: mag-unshaded-5
+ map: ["enum.GunVisualLayers.Mag"]
+ - type: AmmoCounter
+ - type: Gun
+ fireRate: 0.9
+ selectedMode: SemiAuto
+ availableModes:
+ - SemiAuto
+ soundGunshot:
+ path: /Audio/Weapons/Guns/Gunshots/nanite_gun.ogg
+ soundEmpty:
+ path: /Audio/Weapons/Guns/Empty/empty.ogg
+ - type: BallisticAmmoProvider
+ capacity: 5
+ proto: CartridgeNanite
+ soundInsert:
+ path: /Audio/Weapons/Guns/MagIn/shotgun_insert.ogg
+ cycleable: false # No synthesizing ammo
+ - type: BallisticAmmoSelfRefiller
+ autoRefillRate: 9s
+ affectedByEmp: true
+ - type: StaticPrice
+ price: 5000
+ - type: MagazineVisuals
+ magState: mag-unshaded
+ steps: 6
+ zeroVisible: true
+ - type: CustomSpriteAmmoCounter
+ loadedAmmoSprite: Interface/ItemStatus/Crystals/not_spent.png
+ spentAmmoSprite: Interface/ItemStatus/Crystals/spent.png
+ numberOfRows: 1
+ - type: Appearance
+ - type: ContainerContainer
+ containers:
+ ballistic-ammo: !type:Container
+ ents: [ ]
diff --git a/Resources/Prototypes/SoundCollections/gun_impacts.yml b/Resources/Prototypes/SoundCollections/gun_impacts.yml
index beec871215..d7dadc47ef 100644
--- a/Resources/Prototypes/SoundCollections/gun_impacts.yml
+++ b/Resources/Prototypes/SoundCollections/gun_impacts.yml
@@ -27,3 +27,9 @@
- "/Audio/Weapons/Guns/Hits/energy_metal1.ogg"
- "/Audio/Weapons/Guns/Hits/energy_metal2.ogg"
+- type: soundCollection
+ id: NaniteBulletImpact
+ files:
+ - "/Audio/Weapons/Guns/Hits/nanite_hit1.ogg"
+ - "/Audio/Weapons/Guns/Hits/nanite_hit2.ogg"
+ - "/Audio/Weapons/Guns/Hits/nanite_hit3.ogg"
diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/meta.json b/Resources/Textures/Interface/Actions/actions_borg.rsi/meta.json
index f4468325f6..f0be086504 100644
--- a/Resources/Textures/Interface/Actions/actions_borg.rsi/meta.json
+++ b/Resources/Textures/Interface/Actions/actions_borg.rsi/meta.json
@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
- "copyright": "Taken from vgstation at commit https://github.com/vgstation-coders/vgstation13/commit/cdbcb1e858b11f083994a7a269ed67ef5b452ce9, inflatable module by FungiFellow (GitHub), Module actions by Scarky0. chem, adv-chem, and adv-mining by mubururu_, xenoborg actions by Samuka-C (github), advclown by ThatGuyUSA. c20r and esword by RedBookcase on Github, artistry-module by Kittygyat, with help from TiniestShark, xenoborg-laser3-module by august-sun(GitHub)",
+ "copyright": "Taken from vgstation at commit https://github.com/vgstation-coders/vgstation13/commit/cdbcb1e858b11f083994a7a269ed67ef5b452ce9, inflatable module by FungiFellow (GitHub), Module actions by Scarky0. chem, adv-chem, and adv-mining by mubururu_, xenoborg actions by Samuka-C (github), advclown by ThatGuyUSA. c20r and esword by RedBookcase on Github, artistry-module by Kittygyat, with help from TiniestShark, xenoborg-laser3-module by august-sun(GitHub), Xenoborg Nanite action by YoungThugSS14 (Gihutb)",
"size": {
"x": 32,
"y": 32
@@ -176,7 +176,10 @@
"name":"xenoborg-oil-gun-module"
},
{
- "name":"xenoborg-projector-module"
+ "name": "xenoborg-nanite-module"
+ },
+ {
+ "name": "xenoborg-projector-module"
},
{
"name":"xenoborg-space-movement-module"
diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/xenoborg-nanite-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/xenoborg-nanite-module.png
new file mode 100644
index 0000000000..e9249460c2
Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/xenoborg-nanite-module.png differ
diff --git a/Resources/Textures/Interface/ItemStatus/Crystals/not_spent.png b/Resources/Textures/Interface/ItemStatus/Crystals/not_spent.png
new file mode 100644
index 0000000000..9018edcf74
Binary files /dev/null and b/Resources/Textures/Interface/ItemStatus/Crystals/not_spent.png differ
diff --git a/Resources/Textures/Interface/ItemStatus/Crystals/spent.png b/Resources/Textures/Interface/ItemStatus/Crystals/spent.png
new file mode 100644
index 0000000000..9a23a89805
Binary files /dev/null and b/Resources/Textures/Interface/ItemStatus/Crystals/spent.png differ
diff --git a/Resources/Textures/Interface/ItemStatus/attributions.yml b/Resources/Textures/Interface/ItemStatus/attributions.yml
index a1e55fec54..7206a2fd60 100644
--- a/Resources/Textures/Interface/ItemStatus/attributions.yml
+++ b/Resources/Textures/Interface/ItemStatus/attributions.yml
@@ -22,3 +22,8 @@
license: "CC-BY-SA-3.0"
copyright: "Created by Samuka-C"
source: "https://github.com/space-wizards/space-station-14/pull/44389"
+
+- files: ["Crystals/*.png"]
+ license: "CC-BY-SA-3.0"
+ copyright: "Created by YoungThugSS14"
+ source: "https://github.com/space-wizards/space-station-14/pull/43120"
diff --git a/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-xenoborg-nanite-gun.png b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-xenoborg-nanite-gun.png
new file mode 100644
index 0000000000..79d5884fc0
Binary files /dev/null and b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/icon-xenoborg-nanite-gun.png differ
diff --git a/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/meta.json b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/meta.json
index fef79d58f9..a137206e79 100644
--- a/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/meta.json
+++ b/Resources/Textures/Objects/Specific/Robotics/borgmodule.rsi/meta.json
@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC0-1.0",
- "copyright": "Created by EmoGarbage404 (github) for Space Station 14. icon-construction.png created by deltanedas (github). syndicateborgbomb.png created by Mangohydra (github). icon-chem.png & icon-mining-adv.png created by mubururu_ (github) icon-inflatable.png made by FungiFellow (GitHub), Xenoborg modules sprites by Samuka-C (github), icon-xenoborg-laser3 by august-sun(github), icon-artistry by Kittygyat",
+ "copyright": "Created by EmoGarbage404 (github) for Space Station 14. icon-construction.png created by deltanedas (github). syndicateborgbomb.png created by Mangohydra (github). icon-chem.png & icon-mining-adv.png created by mubururu_ (github) icon-inflatable.png made by FungiFellow (GitHub), Xenoborg modules sprites by Samuka-C (github), icon-xenoborg-laser3 by august-sun(github), Nanite gun module sprite made by YoungThugSS14 (Github), icon-artistry by Kittygyat",
"size": {
"x": 32,
"y": 32
@@ -160,6 +160,9 @@
{
"name": "icon-xenoborg-sword"
},
+ {
+ "name": "icon-xenoborg-nanite-gun"
+ },
{
"name": "icon-xenoborg-sword2"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/nanite_casing.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/nanite_casing.rsi/base.png
new file mode 100644
index 0000000000..00d41e51ba
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/nanite_casing.rsi/base.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/nanite_casing.rsi/base1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/nanite_casing.rsi/base1.png
new file mode 100644
index 0000000000..a7531bd79b
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/nanite_casing.rsi/base1.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/nanite_casing.rsi/base2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/nanite_casing.rsi/base2.png
new file mode 100644
index 0000000000..36f72ce356
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/nanite_casing.rsi/base2.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/nanite_casing.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/nanite_casing.rsi/meta.json
new file mode 100644
index 0000000000..2df1169af1
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Casings/nanite_casing.rsi/meta.json
@@ -0,0 +1,20 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Sprites made by YoungThugSS14 (Github)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "base"
+ },
+ {
+ "name": "base1"
+ },
+ {
+ "name": "base2"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi/impact_nanite.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi/impact_nanite.png
new file mode 100644
index 0000000000..a1a558379d
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi/impact_nanite.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi/meta.json
new file mode 100644
index 0000000000..efdf75e257
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi/meta.json
@@ -0,0 +1,44 @@
+{
+ "version": 1,
+ "license": "CC-BY-NC-4.0",
+ "copyright": "Sprites by YoungThugSS14 (github)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "nanite",
+ "delays": [
+ [
+ 0.05,
+ 0.05
+ ]
+ ]
+ },
+ {
+ "name": "muzzle_nanite",
+ "delays": [
+ [
+ 0.05,
+ 0.05,
+ 0.05,
+ 0.05,
+ 0.05
+ ]
+ ]
+ },
+ {
+ "name": "impact_nanite",
+ "delays": [
+ [
+ 0.05,
+ 0.05,
+ 0.05,
+ 0.05,
+ 0.05
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi/muzzle_nanite.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi/muzzle_nanite.png
new file mode 100644
index 0000000000..37f16cd154
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi/muzzle_nanite.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi/nanite.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi/nanite.png
new file mode 100644
index 0000000000..b272ecf3ba
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/nanite_crystal.rsi/nanite.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/base.png
new file mode 100644
index 0000000000..e7b43c5c99
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/base.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/icon.png
new file mode 100644
index 0000000000..e1ebee46a4
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-0.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-0.png
new file mode 100644
index 0000000000..5e7eed9852
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-0.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-1.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-1.png
new file mode 100644
index 0000000000..3ef44b6838
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-1.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-2.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-2.png
new file mode 100644
index 0000000000..895a00e746
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-2.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-3.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-3.png
new file mode 100644
index 0000000000..574a45e173
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-3.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-4.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-4.png
new file mode 100644
index 0000000000..9524379057
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-4.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-5.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-5.png
new file mode 100644
index 0000000000..aa3fa178d5
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/mag-unshaded-5.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/meta.json
new file mode 100644
index 0000000000..f1b3904539
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Guns/Rifles/nanite.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-4.0",
+ "copyright": "YoungThugSS14, SAMUKA-C(github)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "base"
+ },
+ {
+ "name": "mag-unshaded-0"
+ },
+ {
+ "name": "mag-unshaded-1"
+ },
+ {
+ "name": "mag-unshaded-2"
+ },
+ {
+ "name": "mag-unshaded-3"
+ },
+ {
+ "name": "mag-unshaded-4"
+ },
+ {
+ "name": "mag-unshaded-5"
+ }
+ ]
+}