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": [