Anomalous infections (#31876)

* inner anomaly

* anomaly pulse action

* test anom mine

* Update anomalies.yml

* fix action cooldown

* pyro_eyes

* clientsystem

* experiments

* blya

* some telegraphy

* shock eyes!

* shadow eyes

* separate files

* frosty eyes

* fix

* flora eyes

* bluespace eyes

* flesh eyes

* redoing injction

* auto add layers

* пипяу

* new injector component

* stupid me

* nice marker injectors

* anomaly spawn on shutdown

* gravity anom

* dead anomaly spawning

* add VOX states

* sprite specific layers support

* technology anom infection

* auto detach anomalies that have moved away

* Update anomaly_injections.yml

* anomalyspawner integration

* rock anomaly!

* Update anomaly_injections.yml

* fix crash bug

* tag filter

* fix anom dublication spawns

* Update anomaly.yml

* Update InnerBodyAnomalyComponent.cs

* Update anomaly_injections.yml

* dont spawn anomalies after decay

* fix morb sprite, add end message

* gravity resprite

* admin logging, double injection fix

* make flesh and living light mobs friendly to anomaly hosts

* popups

* severity feedback

* sloth review

* A

* keep organs after gib

* punpun host

* sloth synchronization

* Update arachnid.yml

* increase infections spawnrate
This commit is contained in:
Ed
2024-09-17 12:49:19 +03:00
committed by GitHub
parent 5eaac00432
commit 92be69a5ab
49 changed files with 1859 additions and 25 deletions

View File

@@ -0,0 +1,9 @@
- type: entity
id: ActionAnomalyPulse
name: Anomaly pulse
description: Release a pulse of energy of your abnormal nature
components:
- type: InstantAction
icon: Structures/Specific/anomaly.rsi/anom1.png
event: !type:ActionAnomalyPulseEvent
useDelay: 30

View File

@@ -9,6 +9,7 @@
- sprite: Structures/Specific/anomaly.rsi
state: anom1
- type: RandomSpawner
chance: 1
prototypes:
- AnomalyPyroclastic
- AnomalyGravity
@@ -21,7 +22,9 @@
- AnomalyFlora
- AnomalyShadow
- AnomalyTech
chance: 1
rareChance: 0.3
rarePrototypes:
- RandomAnomalyInjectorSpawner
offset: 0.15 # not to put it higher. The anomaly sychnronizer looks for anomalies within this radius, and if the radius is higher, the anomaly can be attracted from a neighboring tile.
- type: entity
@@ -40,4 +43,28 @@
- AnomalyRockQuartz
- AnomalyRockUranium
chance: 1
offset: 0.15
offset: 0.15
- type: entity
id: RandomAnomalyInjectorSpawner
parent: MarkerBase
components:
- type: Sprite
layers:
- state: red
- sprite: Structures/Specific/Anomalies/tech_anom.rsi
state: pulse
- type: RandomSpawner
prototypes:
- AnomalyTrapPyroclastic
- AnomalyTrapElectricity
- AnomalyTrapShadow
- AnomalyTrapIce
- AnomalyTrapFlora
- AnomalyTrapBluespace
- AnomalyTrapFlesh
- AnomalyTrapGravity
- AnomalyTrapTech
- AnomalyTrapRock
chance: 1

View File

@@ -1316,6 +1316,7 @@
tags:
- VimPilot
- DoorBumpOpener
- AnomalyHost
- type: Reactive
groups:
Flammable: [ Touch ]

View File

@@ -13,6 +13,11 @@
true
NavSmash: !type:Bool
true
- type: NPCImprintingOnSpawnBehaviour
spawnFriendsSearchRadius: 10
whitelist:
components:
- Anomaly # Friendly to inner anomaly host
- type: NpcFactionMember
factions:
- SimpleHostile
@@ -354,4 +359,4 @@
30: Dead
- type: MovementSpeedModifier
baseWalkSpeed: 2
baseSprintSpeed: 2.5
baseSprintSpeed: 2.5

View File

@@ -16,6 +16,11 @@
- type: NpcFactionMember
factions:
- SimpleHostile
- type: NPCImprintingOnSpawnBehaviour
spawnFriendsSearchRadius: 10
whitelist:
components:
- Anomaly # Friendly to inner anomaly host
- type: MovementIgnoreGravity
- type: MovementSpeedModifier
baseWalkSpeed: 3.5

View File

@@ -809,6 +809,7 @@
- CannotSuicide
- DoorBumpOpener
- VimPilot
- AnomalyHost
- type: Loadout
prototypes: [ MobMonkeyGear ]
- type: Grammar

View File

@@ -23,6 +23,7 @@
- FootstepSound
- DoorBumpOpener
- SpiderCraft
- AnomalyHost
- type: Butcherable
butcheringType: Spike
spawned:

View File

@@ -212,6 +212,7 @@
- CanPilot
- FootstepSound
- DoorBumpOpener
- AnomalyHost
- type: entity
save: false

View File

@@ -5,6 +5,7 @@
description: An impossible object. Should you be standing this close to it?
components:
- type: Anomaly
offset: 0, 0.15
pulseSound:
collection: RadiationPulse
params:
@@ -934,4 +935,4 @@
lifetime: 2.3
- type: Tag
tags:
- HideContextMenu
- HideContextMenu

View File

@@ -0,0 +1,353 @@
- type: entity
id: AnomalyInjectionBase
abstract: true
components:
- type: PointLight
radius: 1.3
energy: 2.5
castShadows: false
- type: ActionGrant
actions:
- ActionAnomalyPulse
- type: entity
parent: AnomalyInjectionBase
id: AnomalyInjectionPyroclastic
categories: [ HideSpawnMenu ]
components:
- type: PointLight
color: "#E25822"
- type: PyroclasticAnomaly
maximumIgnitionRadius: 3
- type: TempAffectingAnomaly
tempChangePerSecond: 10
hotspotExposeTemperature: 500
- type: GasProducerAnomaly
releasedGas: 3
releaseOnMaxSeverity: true
spawnRadius: 4
tileCount: 5
tempChange: 420
- type: ProjectileAnomaly
projectilePrototype: ProjectileAnomalyFireball
projectileSpeed: 0.5
minProjectiles: 1
maxProjectiles: 3
- type: entity
parent: AnomalyInjectionBase
id: AnomalyInjectionElectric
categories: [ HideSpawnMenu ]
components:
- type: PointLight
color: "#ffffaa"
- type: ElectricityAnomaly
minBoltCount: 1
maxBoltCount: 3
maxElectrocuteRange: 4
maxElectrocuteDamage: 10
maxElectrocuteDuration: 4
- type: entity
parent: AnomalyInjectionBase
id: AnomalyInjectionShadow
categories: [ HideSpawnMenu ]
components:
- type: PointLight
color: "#793a80"
- type: EntitySpawnAnomaly
entries:
- settings:
spawnOnPulse: true
spawnOnSuperCritical: true
minAmount: 5
maxAmount: 10
maxRange: 2
spawns:
- ShadowKudzuWeak
- settings:
spawnOnSuperCritical: true
minAmount: 15
maxAmount: 20
maxRange: 25
spawns:
- ShadowKudzu
- type: entity
parent: AnomalyInjectionBase
id: AnomalyInjectionIce
categories: [ HideSpawnMenu ]
components:
- type: PointLight
color: "#befaff"
- type: ExplosionAnomaly
supercriticalExplosion: Cryo
explosionTotalIntensity: 150
explosionDropoff: 2
explosionMaxTileIntensity: 20
- type: ProjectileAnomaly
projectilePrototype: ProjectileIcicle
minProjectiles: 1
maxProjectiles: 4
- type: EntitySpawnAnomaly
entries:
- settings:
spawnOnStabilityChanged: true
minAmount: 3
maxAmount: 8
maxRange: 2
spawns:
- IceCrust
- type: TempAffectingAnomaly
tempChangePerSecond: -10
hotspotExposeTemperature: -500
- type: GasProducerAnomaly
releasedGas: 8 # Frezon. Please replace if there is a better way to specify this
releaseOnMaxSeverity: true
spawnRadius: 0
- type: entity
parent: AnomalyInjectionBase
id: AnomalyInjectionFlora
categories: [ HideSpawnMenu ]
components:
- type: PointLight
color: "#6270bb"
- type: TileSpawnAnomaly
entries:
- settings:
spawnOnPulse: true
minAmount: 2
maxAmount: 5
maxRange: 2
floor: FloorAstroGrass
- settings:
spawnOnSuperCritical: true
minAmount: 5
maxAmount: 15
maxRange: 7
floor: FloorAstroGrass
- type: EntitySpawnAnomaly
entries:
- settings:
spawnOnPulse: true
minAmount: 1
maxAmount: 3
maxRange: 1
spawns:
- KudzuFlowerFriendly
- settings:
spawnOnSuperCritical: true
minAmount: 2
maxAmount: 6
maxRange: 3
spawns:
- KudzuFlowerAngry
- type: entity
parent: AnomalyInjectionBase
id: AnomalyInjectionBluespace
categories: [ HideSpawnMenu ]
components:
- type: PointLight
color: "#00ccff"
- type: BluespaceAnomaly
- type: entity
parent: AnomalyInjectionBase
id: AnomalyInjectionFlesh
categories: [ HideSpawnMenu ]
components:
- type: PointLight
color: "#cb5b7e"
- type: TileSpawnAnomaly
entries:
- settings:
spawnOnPulse: true
spawnOnStabilityChanged: true
minAmount: 1
maxAmount: 3
maxRange: 2
floor: FloorFlesh
- settings:
spawnOnSuperCritical: true
minAmount: 5
maxAmount: 15
maxRange: 5
floor: FloorFlesh
- type: EntitySpawnAnomaly
entries:
- settings:
spawnOnPulse: true
minAmount: 1
maxAmount: 2
minRange: 1.5
maxRange: 2.5
spawns:
- FleshBlocker
- settings:
spawnOnPulse: true
maxAmount: 1
minRange: 2.5
maxRange: 4.5
spawns:
- MobFleshJared
- MobFleshGolem
- MobFleshClamp
- MobFleshLover
- settings:
spawnOnSuperCritical: true
minAmount: 5
maxAmount: 8
minRange: 5
maxRange: 15
spawns:
- FleshBlocker
- settings:
spawnOnSuperCritical: true
minAmount: 2
maxAmount: 5
maxRange: 8
spawns:
- MobFleshJared
- MobFleshGolem
- MobFleshClamp
- MobFleshLover
- settings:
spawnOnSuperCritical: true
minAmount: 2
maxAmount: 4
maxRange: 10
spawns:
- FleshKudzu
- settings:
spawnOnShutdown: true
maxAmount: 2
maxRange: 1
spawns:
- MobFleshJared
- MobFleshGolem
- MobFleshClamp
- MobFleshLover
- FleshKudzu
- type: entity
parent: AnomalyInjectionBase
id: AnomalyInjectionGravity
categories: [ HideSpawnMenu ]
components:
- type: PointLight
color: "#1e070e"
- type: GravityAnomaly
maxGravityWellRange: 4
maxThrowRange: 3
maxThrowStrength: 5
spaceRange: 1
- type: GravityWell
maxRange: 0.7
- type: SingularityDistortion
intensity: 100
falloffPower: 2.7
- type: entity
parent: AnomalyInjectionBase
id: AnomalyInjectionTech
categories: [ HideSpawnMenu ]
components:
- type: PointLight
color: "#56c1e8"
- type: TechAnomaly
linkRadius:
min: 2
max: 5
linkCountPerPulse:
min: 1
max: 4
linkCountSupercritical: 15
- type: DeviceLinkSource
ports:
- Pulse
- Timer
- type: WirelessNetworkConnection
range: 10
- type: DeviceNetwork
deviceNetId: Wireless
receiveFrequencyId: BasicDevice
- type: entity
parent: AnomalyInjectionBase
id: AnomalyInjectionRock
categories: [ HideSpawnMenu ]
components:
- type: PointLight
color: "#5ca8cb"
- type: TileSpawnAnomaly
entries:
- settings:
spawnOnPulse: true
minAmount: 7
maxAmount: 10
maxRange: 4
floor: FloorAsteroidTile
- settings:
spawnOnSuperCritical: true
minAmount: 15
maxAmount: 25
maxRange: 6
floor: FloorAsteroidTile
- type: EntitySpawnAnomaly
entries:
- settings:
spawnOnPulse: true
minAmount: 4
maxAmount: 8
minRange: 1
maxRange: 3
spawns:
- WallSpawnAsteroid
- WallSpawnAsteroid
- WallSpawnAsteroid
- WallSpawnAsteroid
- WallSpawnAsteroid
- WallSpawnAsteroidSilver
- WallSpawnAsteroidSilverCrab
- WallSpawnAsteroidIron
- WallSpawnAsteroidIronCrab
- WallSpawnAsteroidQuartz
- WallSpawnAsteroidQuartzCrab
- settings:
spawnOnPulse: true
maxAmount: 3
minRange: 2.5
maxRange: 4.5
spawns:
- CrystalPink
- CrystalCyan
- settings:
spawnOnSuperCritical: true
minAmount: 15
maxAmount: 20
minRange: 2
maxRange: 7
spawns:
- CrystalPink
- CrystalCyan
- WallSpawnAsteroid
- WallSpawnAsteroid
- WallSpawnAsteroid
- WallSpawnAsteroid
- WallSpawnAsteroidSilver
- WallSpawnAsteroidSilverCrab
- WallSpawnAsteroidIron
- WallSpawnAsteroidIronCrab
- WallSpawnAsteroidQuartz
- WallSpawnAsteroidQuartzCrab
- settings:
spawnOnSuperCritical: true
minAmount: 3
maxAmount: 5
maxRange: 3
spawns:
- MobSpawnCrabSilver
- MobSpawnCrabIron
- MobSpawnCrabQuartz

View File

@@ -0,0 +1,320 @@
- type: entity
name: anomaly injector
parent: MarkerBase
id: BaseAnomalyInjector
abstract: true
components:
- type: Physics
bodyType: Static
fixedRotation: true
- type: AmbientSound
range: 5
volume: -5
sound:
path: /Audio/Ambience/anomaly_drone.ogg
- type: Fixtures
fixtures:
anom:
shape:
!type:PhysShapeCircle
radius: 2.27 # i love 27
hard: false
mask:
- MobMask
layer:
- MobLayer
- type: InnerBodyAnomalyInjector
whitelist:
tags:
- AnomalyHost
- type: entity
parent: BaseAnomalyInjector
id: AnomalyTrapPyroclastic
suffix: Pyroclastic
components:
- type: Sprite
layers:
- state: pink
- sprite: Structures/Specific/Anomalies/pyro_anom.rsi
state: pulse
- sprite: Mobs/Species/Human/parts.rsi
state: full
- type: InnerBodyAnomalyInjector
injectionComponents:
- type: Anomaly
deleteEntity: false
maxPointsPerSecond: 100
corePrototype: AnomalyCorePyroclastic
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionPyroclastic
startMessage: inner-anomaly-start-message-pyro
fallbackSprite:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: fire
speciesSprites:
Vox:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: fire_VOX
- type: entity
parent: BaseAnomalyInjector
id: AnomalyTrapElectricity
suffix: Electricity
components:
- type: Sprite
layers:
- state: pink
- sprite: Structures/Specific/anomaly.rsi
state: anom3-pulse
- sprite: Mobs/Species/Human/parts.rsi
state: full
- type: InnerBodyAnomalyInjector
injectionComponents:
- type: Anomaly
deleteEntity: false
maxPointsPerSecond: 100
corePrototype: AnomalyCoreElectricity
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionElectric
startMessage: inner-anomaly-start-message-shock
fallbackSprite:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: shock
speciesSprites:
Vox:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: shock_VOX
- type: entity
parent: BaseAnomalyInjector
id: AnomalyTrapShadow
suffix: Shadow
components:
- type: Sprite
layers:
- state: pink
- sprite: Structures/Specific/Anomalies/shadow_anom.rsi
state: pulse
- sprite: Mobs/Species/Human/parts.rsi
state: full
- type: InnerBodyAnomalyInjector
injectionComponents:
- type: Anomaly
deleteEntity: false
maxPointsPerSecond: 100
corePrototype: AnomalyCoreShadow
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionShadow
startMessage: inner-anomaly-start-message-shadow
fallbackSprite:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: shadow
speciesSprites:
Vox:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: shadow_VOX
- type: entity
parent: BaseAnomalyInjector
id: AnomalyTrapIce
suffix: Ice
components:
- type: Sprite
layers:
- state: pink
- sprite: Structures/Specific/Anomalies/ice_anom.rsi
state: pulse
- sprite: Mobs/Species/Human/parts.rsi
state: full
- type: InnerBodyAnomalyInjector
injectionComponents:
- type: Anomaly
deleteEntity: false
maxPointsPerSecond: 100
corePrototype: AnomalyCoreIce
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionIce
startMessage: inner-anomaly-start-message-frost
fallbackSprite:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: frost
speciesSprites:
Vox:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: frost_VOX
- type: entity
parent: BaseAnomalyInjector
id: AnomalyTrapFlora
suffix: Flora
components:
- type: Sprite
layers:
- state: pink
- sprite: Structures/Specific/Anomalies/flora_anom.rsi
state: pulse
- sprite: Mobs/Species/Human/parts.rsi
state: full
- type: InnerBodyAnomalyInjector
injectionComponents:
- type: Anomaly
deleteEntity: false
maxPointsPerSecond: 100
corePrototype: AnomalyCoreFlora
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionFlora
startMessage: inner-anomaly-start-message-flora
fallbackSprite:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: flora
speciesSprites:
Vox:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: flora_VOX
- type: entity
parent: BaseAnomalyInjector
id: AnomalyTrapBluespace
suffix: Bluespace
components:
- type: Sprite
layers:
- state: pink
- sprite: Structures/Specific/anomaly.rsi
state: anom4-pulse
- sprite: Mobs/Species/Human/parts.rsi
state: full
- type: InnerBodyAnomalyInjector
injectionComponents:
- type: Anomaly
deleteEntity: false
maxPointsPerSecond: 100
corePrototype: AnomalyCoreBluespace
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionBluespace
startMessage: inner-anomaly-start-message-bluespace
fallbackSprite:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: bluespace
speciesSprites:
Vox:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: bluespace_VOX
- type: entity
parent: BaseAnomalyInjector
id: AnomalyTrapFlesh
suffix: Flesh
components:
- type: Sprite
layers:
- state: pink
- sprite: Structures/Specific/anomaly.rsi
state: anom5-pulse
- sprite: Mobs/Species/Human/parts.rsi
state: full
- type: InnerBodyAnomalyInjector
injectionComponents:
- type: Anomaly
deleteEntity: false
maxPointsPerSecond: 100
corePrototype: AnomalyCoreFlesh
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionFlesh
startMessage: inner-anomaly-start-message-flesh
fallbackSprite:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: flesh
speciesSprites:
Vox:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: flesh_VOX
- type: entity
parent: BaseAnomalyInjector
id: AnomalyTrapGravity
suffix: Gravity
components:
- type: Sprite
layers:
- state: pink
- sprite: Structures/Specific/anomaly.rsi
state: anom2-pulse
- sprite: Mobs/Species/Human/parts.rsi
state: full
- type: InnerBodyAnomalyInjector
injectionComponents:
- type: Anomaly
deleteEntity: false
maxPointsPerSecond: 100
corePrototype: AnomalyCoreGravity
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionGravity
startMessage: inner-anomaly-start-message-grav
fallbackSprite:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: grav
speciesSprites:
Vox:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: grav_VOX
- type: entity
parent: BaseAnomalyInjector
id: AnomalyTrapTech
suffix: Tech
components:
- type: Sprite
layers:
- state: pink
- sprite: Structures/Specific/Anomalies/tech_anom.rsi
state: pulse
- sprite: Mobs/Species/Human/parts.rsi
state: full
- type: InnerBodyAnomalyInjector
injectionComponents:
- type: Anomaly
deleteEntity: false
maxPointsPerSecond: 100
corePrototype: AnomalyCoreTech
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionTech
startMessage: inner-anomaly-start-message-tech
fallbackSprite:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: tech
speciesSprites:
Vox:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: tech_VOX
- type: entity
parent: BaseAnomalyInjector
id: AnomalyTrapRock
suffix: Rock
components:
- type: Sprite
layers:
- state: pink
- sprite: Structures/Specific/anomaly.rsi
state: anom6-pulse
color: "#5ca8cb"
- sprite: Mobs/Species/Human/parts.rsi
state: full
- type: InnerBodyAnomalyInjector
injectionComponents:
- type: Anomaly
deleteEntity: false
maxPointsPerSecond: 100
corePrototype: AnomalyCoreRock
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionRock
startMessage: inner-anomaly-start-message-rock
fallbackSprite:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: rock
speciesSprites:
Vox:
sprite: Structures/Specific/Anomalies/inner_anom_layer.rsi
state: rock_VOX

View File

@@ -15,6 +15,9 @@
- type: Tag
id: Ambrosia
- type: Tag
id: AnomalyHost
- type: Tag
id: AppraisalTool