diff --git a/Content.Server/Anomaly/AnomalySystem.cs b/Content.Server/Anomaly/AnomalySystem.cs
index b32119264b..bf103fb0ce 100644
--- a/Content.Server/Anomaly/AnomalySystem.cs
+++ b/Content.Server/Anomaly/AnomalySystem.cs
@@ -1,4 +1,4 @@
-using Content.Server.Anomaly.Components;
+using Content.Server.Anomaly.Components;
using Content.Server.Atmos.EntitySystems;
using Content.Server.Audio;
using Content.Server.Explosion.EntitySystems;
diff --git a/Content.Server/Weapons/Ranged/Components/BatteryWeaponFireModesComponent.cs b/Content.Server/Weapons/Ranged/Components/BatteryWeaponFireModesComponent.cs
new file mode 100644
index 0000000000..f8d2f7d9dc
--- /dev/null
+++ b/Content.Server/Weapons/Ranged/Components/BatteryWeaponFireModesComponent.cs
@@ -0,0 +1,44 @@
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+using Content.Server.Weapons.Ranged.Systems;
+
+namespace Content.Server.Weapons.Ranged.Components;
+
+///
+/// Allows battery weapons to fire different types of projectiles
+///
+[RegisterComponent]
+[Access(typeof(BatteryWeaponFireModesSystem))]
+[AutoGenerateComponentState]
+public sealed partial class BatteryWeaponFireModesComponent : Component
+{
+ ///
+ /// A list of the different firing modes the weapon can switch between
+ ///
+ [DataField("fireModes", required: true)]
+ [AutoNetworkedField]
+ public List FireModes = new();
+
+ ///
+ /// The currently selected firing mode
+ ///
+ [DataField("currentFireMode")]
+ [AutoNetworkedField]
+ public BatteryWeaponFireMode? CurrentFireMode = default!;
+}
+
+[DataDefinition]
+public sealed class BatteryWeaponFireMode
+{
+ ///
+ /// The projectile prototype associated with this firing mode
+ ///
+ [DataField("proto", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))]
+ public string Prototype = default!;
+
+ ///
+ /// The battery cost to fire the projectile associated with this firing mode
+ ///
+ [DataField("fireCost")]
+ public float FireCost = 100;
+}
diff --git a/Content.Server/Weapons/Ranged/Systems/BatteryWeaponFireModesSystem.cs b/Content.Server/Weapons/Ranged/Systems/BatteryWeaponFireModesSystem.cs
new file mode 100644
index 0000000000..90859d4068
--- /dev/null
+++ b/Content.Server/Weapons/Ranged/Systems/BatteryWeaponFireModesSystem.cs
@@ -0,0 +1,130 @@
+using Content.Server.Popups;
+using Content.Server.Weapons.Ranged.Components;
+using Content.Shared.Database;
+using Content.Shared.Examine;
+using Content.Shared.Interaction;
+using Content.Shared.Verbs;
+using Content.Shared.Weapons.Ranged.Components;
+using Robust.Shared.Prototypes;
+using System.Linq;
+
+namespace Content.Server.Weapons.Ranged.Systems;
+
+public sealed class BatteryWeaponFireModesSystem : EntitySystem
+{
+ [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly PopupSystem _popupSystem = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnInteractHandEvent);
+ SubscribeLocalEvent>(OnGetVerb);
+ SubscribeLocalEvent(OnExamined);
+ }
+
+ private void OnExamined(EntityUid uid, BatteryWeaponFireModesComponent component, ExaminedEvent args)
+ {
+ if (component.FireModes == null || component.FireModes.Count < 2)
+ return;
+
+ if (component.CurrentFireMode == null)
+ {
+ SetFireMode(uid, component, component.FireModes.First());
+ }
+
+ if (component.CurrentFireMode?.Prototype == null)
+ return;
+
+ if (!_prototypeManager.TryIndex(component.CurrentFireMode.Prototype, out var proto))
+ return;
+
+ args.PushMarkup(Loc.GetString("gun-set-fire-mode", ("mode", proto.Name)));
+ }
+
+ private void OnGetVerb(EntityUid uid, BatteryWeaponFireModesComponent component, GetVerbsEvent args)
+ {
+ if (!args.CanAccess || !args.CanInteract || args.Hands == null)
+ return;
+
+ if (component.FireModes == null || component.FireModes.Count < 2)
+ return;
+
+ if (component.CurrentFireMode == null)
+ {
+ SetFireMode(uid, component, component.FireModes.First());
+ }
+
+ foreach (var fireMode in component.FireModes)
+ {
+ var entProto = _prototypeManager.Index(fireMode.Prototype);
+
+ var v = new Verb
+ {
+ Priority = 1,
+ Category = VerbCategory.SelectType,
+ Text = entProto.Name,
+ Disabled = fireMode == component.CurrentFireMode,
+ Impact = LogImpact.Low,
+ DoContactInteraction = true,
+ Act = () =>
+ {
+ SetFireMode(uid, component, fireMode, args.User);
+ }
+ };
+
+ args.Verbs.Add(v);
+ }
+ }
+
+ private void OnInteractHandEvent(EntityUid uid, BatteryWeaponFireModesComponent component, ActivateInWorldEvent args)
+ {
+ if (component.FireModes == null || component.FireModes.Count < 2)
+ return;
+
+ CycleFireMode(uid, component, args.User);
+ }
+
+ private void CycleFireMode(EntityUid uid, BatteryWeaponFireModesComponent component, EntityUid user)
+ {
+ int index = (component.CurrentFireMode != null) ?
+ Math.Max(component.FireModes.IndexOf(component.CurrentFireMode), 0) + 1 : 1;
+
+ BatteryWeaponFireMode? fireMode;
+
+ if (index >= component.FireModes.Count)
+ {
+ fireMode = component.FireModes.FirstOrDefault();
+ }
+
+ else
+ {
+ fireMode = component.FireModes[index];
+ }
+
+ SetFireMode(uid, component, fireMode, user);
+ }
+
+ private void SetFireMode(EntityUid uid, BatteryWeaponFireModesComponent component, BatteryWeaponFireMode? fireMode, EntityUid? user = null)
+ {
+ if (fireMode?.Prototype == null)
+ return;
+
+ component.CurrentFireMode = fireMode;
+
+ if (TryComp(uid, out ProjectileBatteryAmmoProviderComponent? projectileBatteryAmmoProvider))
+ {
+ if (!_prototypeManager.TryIndex(fireMode.Prototype, out var prototype))
+ return;
+
+ projectileBatteryAmmoProvider.Prototype = fireMode.Prototype;
+ projectileBatteryAmmoProvider.FireCost = fireMode.FireCost;
+
+ if (user != null)
+ {
+ _popupSystem.PopupEntity(Loc.GetString("gun-set-fire-mode", ("mode", prototype.Name)), uid, user.Value);
+ }
+ }
+ }
+}
diff --git a/Content.Shared/Anomaly/SharedAnomaly.cs b/Content.Shared/Anomaly/SharedAnomaly.cs
index 60023b28e9..b7585cb5f1 100644
--- a/Content.Shared/Anomaly/SharedAnomaly.cs
+++ b/Content.Shared/Anomaly/SharedAnomaly.cs
@@ -1,4 +1,4 @@
-using Robust.Shared.Serialization;
+using Robust.Shared.Serialization;
using Robust.Shared.Utility;
namespace Content.Shared.Anomaly;
diff --git a/Resources/Locale/en-US/anomaly/anomaly.ftl b/Resources/Locale/en-US/anomaly/anomaly.ftl
index cff944ae22..29d5169694 100644
--- a/Resources/Locale/en-US/anomaly/anomaly.ftl
+++ b/Resources/Locale/en-US/anomaly/anomaly.ftl
@@ -8,6 +8,7 @@ anomaly-vessel-component-upgrade-output = point output
anomaly-particles-delta = Delta particles
anomaly-particles-epsilon = Epsilon particles
anomaly-particles-zeta = Zeta particles
+anomaly-particles-omega = Omega particles
anomaly-scanner-component-scan-complete = Scan complete!
diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl
index 1011d44fff..1d8ddf21ac 100644
--- a/Resources/Locale/en-US/store/uplink-catalog.ftl
+++ b/Resources/Locale/en-US/store/uplink-catalog.ftl
@@ -221,8 +221,8 @@ uplink-banana-peel-explosive-desc = They will burst into laughter when they slip
uplink-hot-potato-name = Hot Potato
uplink-hot-potato-desc = Once activated, this time bomb can't be dropped - only passed to someone else!
-uplink-chimp-ammo-name = Box of 10 Omega Cartridges.
-uplink-chimp-ammo-desc = A box of 10 omega particle cartridges for the CHIMP. Omega particles inflict severe burns and cause anomalies to go supercritical.
+uplink-chimp-upgrade-kit-name = C.H.I.M.P. Handcannon Upgrade Chip
+uplink-chimp-upgrade-kit-desc = Insert this chip into a standard C.H.I.M.P. handcannon to allow it to fire omega particles. Omega particles inflict severe burns and cause anomalies to go supercritical.
uplink-proximity-mine-name = Proximity Mine
uplink-proximity-mine-desc = A mine disguised as a wet floor sign.
diff --git a/Resources/Locale/en-US/weapons/ranged/gun.ftl b/Resources/Locale/en-US/weapons/ranged/gun.ftl
index 5982934215..8b99fba592 100644
--- a/Resources/Locale/en-US/weapons/ranged/gun.ftl
+++ b/Resources/Locale/en-US/weapons/ranged/gun.ftl
@@ -5,6 +5,7 @@ gun-selector-verb = Change to {$mode}
gun-selected-mode = Selected {$mode}
gun-disabled = You can't use guns!
gun-clumsy = The gun blows up in your face!
+gun-set-fire-mode = Set to {$mode}
# SelectiveFire
gun-SemiAuto = semi-auto
diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml b/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml
index cd3eb15581..20e291494f 100644
--- a/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml
+++ b/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml
@@ -89,21 +89,6 @@
- id: MagazineMagnumSubMachineGun
amount: 3
-- type: entity
- name: box of omega particle cartridges
- parent: BoxMagazine
- id: BoxMagazineChimpOmega
- description: A box full of omega particle cartridges for the CHIMP.
- components:
- - type: StorageFill
- contents:
- - id: CartridgeAnomalousParticleOmega
- amount: 10
- - type: Sprite
- layers:
- - state: box_science
- - state: omegacart
-
- type: entity
name: box of Vector (practice) magazines
parent: BoxMagazine
diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml
index ddf2e37a64..75e9cbfa72 100644
--- a/Resources/Prototypes/Catalog/uplink_catalog.yml
+++ b/Resources/Prototypes/Catalog/uplink_catalog.yml
@@ -955,10 +955,10 @@
- Mime
- type: listing
- id: UplinkChimpAmmo
- name: uplink-chimp-ammo-name
- description: uplink-chimp-ammo-desc
- productEntity: BoxMagazineChimpOmega
+ id: UplinkChimpUpgradeKit
+ name: uplink-chimp-upgrade-kit-name
+ description: uplink-chimp-upgrade-kit-desc
+ productEntity: WeaponPistolCHIMPUpgradeKit
cost:
Telecrystal: 4
categories:
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/chimp_upgrade_kit.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/chimp_upgrade_kit.yml
new file mode 100644
index 0000000000..aed09fe70b
--- /dev/null
+++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/chimp_upgrade_kit.yml
@@ -0,0 +1,14 @@
+- type: entity
+ name: C.H.I.M.P. handcannon upgrade chip
+ parent: BaseItem
+ id: WeaponPistolCHIMPUpgradeKit
+ description: An experimental upgrade kit for the C.H.I.M.P.
+ components:
+ - type: Sprite
+ sprite: Objects/Misc/module.rsi
+ state: abductor_mod
+ - type: Item
+ size: 10
+ - type: Tag
+ tags:
+ - WeaponPistolCHIMPUpgradeKit
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml
index 2368b81269..e0fb98f0ab 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml
@@ -59,76 +59,3 @@
components:
- type: CartridgeAmmo
proto: BulletMagnumAP
-
-- type: entity
- id: BaseAnomalousCartridge
- parent: BaseCartridgeMagnum
- description: Packs twice the punch of a standard A.P.E. particle.
- abstract: true
- components:
- - type: Sprite
- sprite: Objects/Weapons/Guns/Ammunition/Casings/anomalous_casing.rsi
- layers:
- - state: base
- map: ["enum.AmmoVisualLayers.Base"]
- - type: Tag
- tags:
- - Cartridge
- - CartridgeCHIMP
-
-- type: entity
- id: CartridgeAnomalousParticleDelta
- parent: BaseAnomalousCartridge
- name: cartridge (delta particle)
- components:
- - type: Sprite
- layers:
- - state: base
- map: ["enum.AmmoVisualLayers.Base"]
- - state: overlay
- color: crimson
- - type: CartridgeAmmo
- proto: AnomalousParticleDeltaStrong
-
-- type: entity
- id: CartridgeAnomalousParticleEpsilon
- parent: BaseAnomalousCartridge
- name: cartridge (epsilon particle)
- components:
- - type: Sprite
- layers:
- - state: base
- map: ["enum.AmmoVisualLayers.Base"]
- - state: overlay
- color: plum
- - type: CartridgeAmmo
- proto: AnomalousParticleEpsilonStrong
-
-- type: entity
- id: CartridgeAnomalousParticleZeta
- parent: BaseAnomalousCartridge
- name: cartridge (zeta particle)
- components:
- - type: Sprite
- layers:
- - state: base
- map: ["enum.AmmoVisualLayers.Base"]
- - state: overlay
- color: goldenrod
- - type: CartridgeAmmo
- proto: AnomalousParticleZetaStrong
-
-- type: entity
- id: CartridgeAnomalousParticleOmega
- parent: BaseAnomalousCartridge
- name: cartridge (omega particle)
- description: An experimental and often dangerous particle.
- components:
- - type: Sprite
- layers:
- - state: base
- map: ["enum.AmmoVisualLayers.Base"]
- - state: overlay
- color: green
- - type: CartridgeAmmo
- proto: AnomalousParticleOmegaStrong
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml
index 21d08fbd14..f970b06f8e 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml
@@ -430,6 +430,63 @@
- type: StaticPrice
price: 63
+- type: entity
+ name: C.H.I.M.P. handcannon
+ parent: BaseWeaponBatterySmall
+ id: WeaponPistolCHIMP
+ description: Just because it's a little C.H.I.M.P. doesn't mean it can't punch like an A.P.E.
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Revolvers/chimp.rsi
+ layers:
+ - state: base
+ map: ["enum.GunVisualLayers.Base"]
+ - state: mag-unshaded-1
+ visible: false
+ map: ["enum.GunVisualLayers.MagUnshaded"]
+ shader: unshaded
+ - type: Appearance
+ - type: MagazineVisuals
+ magState: mag
+ steps: 3
+ zeroVisible: false
+ - type: Clothing
+ sprite: Objects/Weapons/Guns/Revolvers/chimp.rsi
+ - type: Gun
+ fireRate: 1.5
+ soundGunshot:
+ path: /Audio/Weapons/Guns/Gunshots/taser2.ogg
+ - type: ProjectileBatteryAmmoProvider
+ proto: AnomalousParticleDeltaStrong
+ fireCost: 100
+ - type: BatteryWeaponFireModes
+ fireModes:
+ - proto: AnomalousParticleDeltaStrong
+ fireCost: 100
+ - proto: AnomalousParticleEpsilonStrong
+ fireCost: 100
+ - proto: AnomalousParticleZetaStrong
+ fireCost: 100
+ - type: Construction
+ graph: UpgradeWeaponPistolCHIMP
+ node: start
+
+- type: entity
+ name: experimental C.H.I.M.P. handcannon
+ parent: WeaponPistolCHIMP
+ id: WeaponPistolCHIMPUpgraded
+ description: This C.H.I.M.P. seems to have a greater punch than is usual...
+ components:
+ - type: BatteryWeaponFireModes
+ fireModes:
+ - proto: AnomalousParticleDeltaStrong
+ fireCost: 100
+ - proto: AnomalousParticleEpsilonStrong
+ fireCost: 100
+ - proto: AnomalousParticleOmegaStrong
+ fireCost: 100
+ - proto: AnomalousParticleZetaStrong
+ fireCost: 100
- type: entity
name: Eye of a behonker
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
index 10cc39d17a..0b86ff6752 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
@@ -378,7 +378,7 @@
- type: Sprite
sprite: Objects/Weapons/Guns/Projectiles/magic.rsi
layers:
- - state: magicm
+ - state: magicm_red
shader: unshaded
- type: Ammo
muzzleFlash: null
@@ -419,6 +419,10 @@
name: epsilon particles
noSpawn: true
components:
+ - type: Sprite
+ layers:
+ - state: magicm_cyan
+ shader: unshaded
- type: AnomalousParticle
particleType: Epsilon
@@ -440,9 +444,13 @@
name: zeta particles
noSpawn: true
components:
+ - type: Sprite
+ layers:
+ - state: magicm_yellow
+ shader: unshaded
- type: AnomalousParticle
particleType: Zeta
-
+
- type: entity
parent: AnomalousParticleZeta
id: AnomalousParticleZetaStrong
@@ -458,6 +466,7 @@
- type: entity
parent: AnomalousParticleDelta
id: AnomalousParticleOmegaStrong
+ name: omega particles
noSpawn: true
components:
- type: Sprite
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml
index 0d9fea2cb7..48c02f484e 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml
@@ -152,43 +152,4 @@
- type: RevolverAmmoProvider
capacity: 5
chambers: [ True, True, True, True, True ]
- ammoSlots: [ null, null, null, null, null ]
-
-- type: entity
- id: WeaponPistolCHIMP
- parent: BaseWeaponRevolver
- name: C.H.I.M.P. handcannon
- description: Just because it's a little C.H.I.M.P. doesn't mean it can't punch like an A.P.E.
- components:
- - type: Sprite
- sprite: Objects/Weapons/Guns/Revolvers/chimp.rsi
- layers:
- - state: base
- map: ["enum.GunVisualLayers.Base"]
- - state: mag-unshaded-1
- visible: false
- map: ["enum.GunVisualLayers.MagUnshaded"]
- shader: unshaded
- - type: Appearance
- - type: MagazineVisuals
- magState: mag
- steps: 3
- zeroVisible: false
- - type: Clothing
- sprite: Objects/Weapons/Guns/Revolvers/chimp.rsi
- - type: RevolverAmmoProvider
- whitelist:
- tags:
- - CartridgeCHIMP
- proto: CartridgeAnomalousParticleDelta #when revolvers stop sucking cock, make this spawn empty
- capacity: 10
- chambers: [ True, True, True, True, True, True, True, True, True, True ]
- ammoSlots: [ null, null, null, null, null, null, null, null, null, null ]
- soundEject:
- path: /Audio/Weapons/Guns/MagOut/revolver_magout.ogg
- soundInsert:
- path: /Audio/Weapons/Guns/MagIn/revolver_magin.ogg
- - type: Gun
- fireRate: 1.5
- soundGunshot:
- path: /Audio/Weapons/Guns/Gunshots/taser2.ogg
+ ammoSlots: [ null, null, null, null, null ]
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
index aa5c17e84c..985d11f74d 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
@@ -239,9 +239,6 @@
- PowerCellMedium
- PowerCellHigh
- WeaponPistolCHIMP
- - CartridgeAnomalousParticleDelta
- - CartridgeAnomalousParticleEpsilon
- - CartridgeAnomalousParticleZeta
- SynthesizerInstrument
- RPED
- ClothingShoesBootsMag
diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/weapons/upgraded_chimp.yml b/Resources/Prototypes/Recipes/Construction/Graphs/weapons/upgraded_chimp.yml
new file mode 100644
index 0000000000..eecd78cc13
--- /dev/null
+++ b/Resources/Prototypes/Recipes/Construction/Graphs/weapons/upgraded_chimp.yml
@@ -0,0 +1,13 @@
+- type: constructionGraph
+ id: UpgradeWeaponPistolCHIMP
+ start: start
+ graph:
+ - node: start
+ edges:
+ - to: upgraded
+ steps:
+ - tag: WeaponPistolCHIMPUpgradeKit
+ doAfter: 2
+
+ - node: upgraded
+ entity: WeaponPistolCHIMPUpgraded
\ No newline at end of file
diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml
index adfd9f25be..19b3ec03c9 100644
--- a/Resources/Prototypes/Recipes/Lathes/security.yml
+++ b/Resources/Prototypes/Recipes/Lathes/security.yml
@@ -207,27 +207,6 @@
Steel: 10
Glass: 5
-- type: latheRecipe
- id: CartridgeAnomalousParticleDelta
- result: CartridgeAnomalousParticleDelta
- completetime: 2
- materials:
- Plastic: 25
-
-- type: latheRecipe
- id: CartridgeAnomalousParticleEpsilon
- result: CartridgeAnomalousParticleEpsilon
- completetime: 2
- materials:
- Plastic: 25
-
-- type: latheRecipe
- id: CartridgeAnomalousParticleZeta
- result: CartridgeAnomalousParticleZeta
- completetime: 2
- materials:
- Plastic: 25
-
- type: latheRecipe
id: TargetHuman
result: TargetHuman
diff --git a/Resources/Prototypes/Research/experimental.yml b/Resources/Prototypes/Research/experimental.yml
index 3b80c4ccaf..c1730bb15e 100644
--- a/Resources/Prototypes/Research/experimental.yml
+++ b/Resources/Prototypes/Research/experimental.yml
@@ -108,9 +108,6 @@
cost: 10000
recipeUnlocks:
- WeaponPistolCHIMP
- - CartridgeAnomalousParticleDelta
- - CartridgeAnomalousParticleEpsilon
- - CartridgeAnomalousParticleZeta
technologyPrerequisites:
- BasicAnomalousResearch
diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml
index 6e03bd421e..92f2998ad4 100644
--- a/Resources/Prototypes/tags.yml
+++ b/Resources/Prototypes/tags.yml
@@ -998,6 +998,9 @@
- type: Tag
id: WallmountSubstationElectronics
+
+- type: Tag
+ id: WeaponPistolCHIMPUpgradeKit
- type: Tag
id: Window
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/magicm_cyan.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/magicm_cyan.png
new file mode 100644
index 0000000000..1c6a0094a4
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/magicm_cyan.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/magicm_red.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/magicm_red.png
new file mode 100644
index 0000000000..b9e0d8c653
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/magicm_red.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/magicm_yellow.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/magicm_yellow.png
new file mode 100644
index 0000000000..6fe8b5e727
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/magicm_yellow.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/meta.json
index 0dbedf2922..d42d64964d 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/meta.json
@@ -28,6 +28,39 @@
0.1
]
]
+ },
+ {
+ "name": "magicm_yellow",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "magicm_red",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "magicm_cyan",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
},
{
"name": "spell",