diff --git a/Content.Server/Anomaly/AnomalySystem.cs b/Content.Server/Anomaly/AnomalySystem.cs
index 730592cc2f..7b1ed087d3 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;
@@ -75,15 +75,15 @@ public sealed partial class AnomalySystem : SharedAnomalySystem
// small function to randomize because it's easier to read like this
float VaryValue(float v) => v * Random.NextFloat(MinParticleVariation, MaxParticleVariation);
- if (particle.ParticleType == component.DestabilizingParticleType)
+ if (particle.ParticleType == component.DestabilizingParticleType || particle.DestabilzingOverride)
{
ChangeAnomalyStability(uid, VaryValue(particle.StabilityPerDestabilizingHit), component);
}
- else if (particle.ParticleType == component.SeverityParticleType)
+ if (particle.ParticleType == component.SeverityParticleType || particle.SeverityOverride)
{
ChangeAnomalySeverity(uid, VaryValue(particle.SeverityPerSeverityHit), component);
}
- else if (particle.ParticleType == component.WeakeningParticleType)
+ if (particle.ParticleType == component.WeakeningParticleType || particle.WeakeningOverride)
{
ChangeAnomalyHealth(uid, VaryValue(particle.HealthPerWeakeningeHit), component);
ChangeAnomalyStability(uid, VaryValue(particle.StabilityPerWeakeningeHit), component);
diff --git a/Content.Server/Anomaly/Components/AnomalousParticleComponent.cs b/Content.Server/Anomaly/Components/AnomalousParticleComponent.cs
index 4444d49e3d..6c018c4f31 100644
--- a/Content.Server/Anomaly/Components/AnomalousParticleComponent.cs
+++ b/Content.Server/Anomaly/Components/AnomalousParticleComponent.cs
@@ -1,4 +1,4 @@
-using Content.Shared.Anomaly;
+using Content.Shared.Anomaly;
using Content.Shared.Anomaly.Components;
namespace Content.Server.Anomaly.Components;
@@ -49,4 +49,22 @@ public sealed class AnomalousParticleComponent : Component
///
[DataField("stabilityPerWeakeningeHit")]
public float StabilityPerWeakeningeHit = -0.1f;
+
+ ///
+ /// If this is true then the particle will always affect the stability of the anomaly.
+ ///
+ [DataField("destabilzingOverride")]
+ public bool DestabilzingOverride = false;
+
+ ///
+ /// If this is true then the particle will always affect the weakeness of the anomaly.
+ ///
+ [DataField("weakeningOverride")]
+ public bool WeakeningOverride = false;
+
+ ///
+ /// If this is true then the particle will always affect the severity of the anomaly.
+ ///
+ [DataField("severityOverride")]
+ public bool SeverityOverride = false;
}
diff --git a/Content.Shared/Anomaly/Components/AnomalyComponent.cs b/Content.Shared/Anomaly/Components/AnomalyComponent.cs
index 8df708dda8..b5ac8e7714 100644
--- a/Content.Shared/Anomaly/Components/AnomalyComponent.cs
+++ b/Content.Shared/Anomaly/Components/AnomalyComponent.cs
@@ -1,4 +1,4 @@
-using Content.Shared.Damage;
+using Content.Shared.Damage;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Serialization;
diff --git a/Content.Shared/Anomaly/SharedAnomaly.cs b/Content.Shared/Anomaly/SharedAnomaly.cs
index cf94e2c6b1..60023b28e9 100644
--- a/Content.Shared/Anomaly/SharedAnomaly.cs
+++ b/Content.Shared/Anomaly/SharedAnomaly.cs
@@ -32,7 +32,8 @@ public enum AnomalousParticleType : byte
{
Delta,
Epsilon,
- Zeta
+ Zeta,
+ Default
}
[Serializable, NetSerializable]
diff --git a/Resources/Locale/en-US/anomaly/anomaly.ftl b/Resources/Locale/en-US/anomaly/anomaly.ftl
index 6631268ffa..f93b5bb97e 100644
--- a/Resources/Locale/en-US/anomaly/anomaly.ftl
+++ b/Resources/Locale/en-US/anomaly/anomaly.ftl
@@ -37,6 +37,7 @@ anomaly-generator-charges = {$charges ->
}
anomaly-generator-announcement = An anomaly has been generated!
+
# Flavor text on the footer
anomaly-generator-flavor-left = Anomaly may spawn inside the operator.
anomaly-generator-flavor-right = v1.1
diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl
index 5d3d736ea4..5a298f9eac 100644
--- a/Resources/Locale/en-US/store/uplink-catalog.ftl
+++ b/Resources/Locale/en-US/store/uplink-catalog.ftl
@@ -166,6 +166,9 @@ 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.
+
# Armor
uplink-chameleon-name = Chameleon Kit
uplink-chameleon-desc = A backpack full of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more!
diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml b/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml
index 571abe50e0..65323e1a3b 100644
--- a/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml
+++ b/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml
@@ -111,6 +111,21 @@
- 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 (high-velocity) magazines
parent: BoxMagazine
diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml
index a13b6a4fed..8f3e40ea6e 100644
--- a/Resources/Prototypes/Catalog/uplink_catalog.yml
+++ b/Resources/Prototypes/Catalog/uplink_catalog.yml
@@ -664,6 +664,20 @@
- Clown
- Mime
+- type: listing
+ id: UplinkChimpAmmo
+ name: uplink-chimp-ammo-name
+ description: uplink-chimp-ammo-desc
+ productEntity: BoxMagazineChimpOmega
+ cost:
+ Telecrystal: 4
+ categories:
+ - UplinkJob
+ conditions:
+ - !type:BuyerJobCondition
+ whitelist:
+ - Scientist
+
# Armor
- type: listing
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 7cec8c1eb5..443b8cc5f9 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml
@@ -111,3 +111,18 @@
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/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
index 2f13902101..84672c5409 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
@@ -397,6 +397,29 @@
healthPerWeakeningeHit: -0.1
stabilityPerWeakeningeHit: -0.2
+- type: entity
+ parent: AnomalousParticleDelta
+ id: AnomalousParticleOmegaStrong
+ noSpawn: true
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Projectiles/magic.rsi
+ layers:
+ - state: magicm_green
+ shader: unshaded
+ - type: AnomalousParticle
+ particleType: Default
+ severityOverride: true
+ severityPerSeverityHit: 0.1
+ stabilityPerDestabilizingHit: 0.05
+ healthPerWeakeningeHit: 1
+ stabilityPerWeakeningeHit: -0.05
+ - type: Projectile
+ impactEffect: BulletImpactEffectKinetic
+ damage:
+ types:
+ Heat: 20
+
# Launcher projectiles (grenade / rocket)
- type: entity
id: BulletRocket
diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/box_science.png b/Resources/Textures/Objects/Storage/boxes.rsi/box_science.png
new file mode 100644
index 0000000000..de33c9b97e
Binary files /dev/null and b/Resources/Textures/Objects/Storage/boxes.rsi/box_science.png differ
diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/meta.json b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json
index a20436fcf3..59f2cf9e44 100644
--- a/Resources/Textures/Objects/Storage/boxes.rsi/meta.json
+++ b/Resources/Textures/Objects/Storage/boxes.rsi/meta.json
@@ -61,6 +61,9 @@
{
"name": "box_security"
},
+ {
+ "name": "box_science"
+ },
{
"name": "box_olive"
},
@@ -106,6 +109,9 @@
{
"name": "lighttube"
},
+ {
+ "name": "omegacart"
+ },
{
"name": "magazine"
},
diff --git a/Resources/Textures/Objects/Storage/boxes.rsi/omegacart.png b/Resources/Textures/Objects/Storage/boxes.rsi/omegacart.png
new file mode 100644
index 0000000000..71381ae597
Binary files /dev/null and b/Resources/Textures/Objects/Storage/boxes.rsi/omegacart.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/magicm_green.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/magicm_green.png
new file mode 100644
index 0000000000..f09ae54f95
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/magicm_green.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 4158535ddc..0dbedf2922 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Projectiles/magic.rsi/meta.json
@@ -18,6 +18,17 @@
]
]
},
+ {
+ "name": "magicm_green",
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
{
"name": "spell",
"delays": [