diff --git a/Content.Server/NPC/Queries/Considerations/TargetLowTempCon.cs b/Content.Server/NPC/Queries/Considerations/TargetLowTempCon.cs
new file mode 100644
index 0000000000..7e8553c63c
--- /dev/null
+++ b/Content.Server/NPC/Queries/Considerations/TargetLowTempCon.cs
@@ -0,0 +1,14 @@
+namespace Content.Server.NPC.Queries.Considerations;
+
+///
+/// Returns if the target is below a certain temperature.
+///
+public sealed partial class TargetLowTempCon : UtilityConsideration
+{
+ ///
+ /// The minimum temperature they must be.
+ ///
+ [DataField]
+ public float MinTemp;
+}
+
diff --git a/Content.Server/NPC/Systems/NPCUtilitySystem.cs b/Content.Server/NPC/Systems/NPCUtilitySystem.cs
index 7b485eeb96..c5b463d0d3 100644
--- a/Content.Server/NPC/Systems/NPCUtilitySystem.cs
+++ b/Content.Server/NPC/Systems/NPCUtilitySystem.cs
@@ -7,6 +7,7 @@ using Content.Server.NPC.Queries.Queries;
using Content.Server.Nutrition.Components;
using Content.Server.Nutrition.EntitySystems;
using Content.Server.Storage.Components;
+using Content.Server.Temperature.Components;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Damage;
using Content.Shared.Examine;
@@ -14,7 +15,6 @@ using Content.Shared.Fluids.Components;
using Content.Shared.Hands.Components;
using Content.Shared.Inventory;
using Content.Shared.Mobs;
-using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems;
using Content.Shared.NPC.Systems;
using Content.Shared.Nutrition.Components;
@@ -376,6 +376,13 @@ public sealed class NPCUtilitySystem : EntitySystem
return 0f;
}
+ case TargetLowTempCon con:
+ {
+ if (!TryComp(targetUid, out var temperature))
+ return 0f;
+
+ return temperature.CurrentTemperature <= con.MinTemp ? 1f : 0f;
+ }
default:
throw new NotImplementedException();
}
diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/spawners.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/spawners.yml
index f1d632c186..1de12a1511 100644
--- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/spawners.yml
+++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Salvage/spawners.yml
@@ -542,7 +542,8 @@
table: !type:GroupSelector
children:
- id: MobGoliath
- weight: 65
+ weight: 45
- id: MobHivelord
weight: 35
-
+ - id: MobBasilisk
+ weight: 20
diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml
index 8db0294981..c4c131a7ab 100644
--- a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml
+++ b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml
@@ -81,6 +81,8 @@
6
AggroVisionRadius: !type:Single
10
+ NavSmash: !type:Bool
+ true
- type: NPCUseActionOnTarget
actionId: ActionGoliathTentacle
- type: Tag
@@ -241,6 +243,8 @@
4
AggroVisionRadius: !type:Single
9
+ NavSmash: !type:Bool
+ true
- type: Butcherable
spawned:
- id: FoodHivelordRemains
@@ -293,6 +297,8 @@
15
AggroVisionRadius: !type:Single
15
+ NavSmash: !type:Bool
+ true
- type: TimedDespawn
lifetime: 100
@@ -345,3 +351,77 @@
- type: Tag
tags:
- HivelordRemains
+
+
+- type: entity
+ id: MobBasilisk
+ parent: [ BaseMobAsteroid, MobBloodstream ]
+ name: basilisk
+ description: A territorial beast, covered in a thick shell that absorbs energy. Its stare causes victims to freeze from the inside.
+ components:
+ - type: Sprite
+ sprite: Mobs/Aliens/Asteroid/basilisk.rsi
+ layers:
+ - map: ["enum.DamageStateVisualLayers.Base"]
+ state: basilisk
+ - type: DamageStateVisuals
+ states:
+ Alive:
+ Base: basilisk
+ Dead:
+ Base: basilisk_dead
+ - type: MovementSpeedModifier
+ baseWalkSpeed : 3
+ baseSprintSpeed : 3.5
+ - type: MobThresholds
+ thresholds:
+ 0: Alive
+ 80: Dead
+ - type: MeleeWeapon
+ angle: 0
+ animation: WeaponArcBite
+ soundHit:
+ path: /Audio/Effects/bite.ogg
+ damage:
+ types:
+ Slash: 7
+ Piercing: 5
+ - type: Gun
+ fireRate: 0.75
+ selectedMode: SemiAuto
+ showExamineText: false
+ availableModes: [ SemiAuto ]
+ soundGunshot: /Audio/Weapons/Guns/Gunshots/syringe_gun.ogg
+ - type: RechargeBasicEntityAmmo
+ showExamineText: false
+ rechargeCooldown: 0
+ rechargeSound: null
+ - type: BasicEntityAmmoProvider
+ proto: BasiliskRay
+ capacity: 1
+ count: 1
+ - type: Bloodstream
+ bloodMaxVolume: 200
+ chemicalMaxVolume: 0
+ - type: NpcFactionMember
+ factions:
+ - SimpleHostile
+ - type: HTN
+ rootTask:
+ task: BasiliskCompound
+ blackboard:
+ VisionRadius: !type:Single
+ 7
+ AggroVisionRadius: !type:Single
+ 12
+ NavSmash: !type:Bool
+ true
+ - type: Reflect
+ reflectProb: 1
+ reflects:
+ - Energy
+ - type: Butcherable
+ spawned:
+ - id: DiamondOre1
+ amount: 1
+ maxAmount: 3
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
index 63d9e62349..60b19626b0 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
@@ -437,6 +437,45 @@
- type: ChangeTemperatureOnCollide
heat: 100000 #This may be a bit underpowered, but in testing, 130000 was RIDICULOUS and killed in seconds.
+- type: entity
+ parent: BaseBullet
+ id: BasiliskRay
+ name: basilisk ray
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: FlyBySound
+ sound:
+ collection: EnergyMiss
+ params:
+ volume: 5
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi
+ layers:
+ - state: ice
+ shader: unshaded
+ - type: Ammo
+ muzzleFlash: null
+ - type: Physics
+ - type: Fixtures
+ fixtures:
+ projectile:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.2,-0.2,0.2,0.2"
+ hard: false
+ mask:
+ - Opaque
+ fly-by: *flybyfixture
+ - type: Projectile
+ impactEffect: BulletImpactEffectDisabler
+ damage:
+ types:
+ Cold: 5
+ - type: TimedDespawn
+ lifetime: 3
+ - type: ChangeTemperatureOnCollide
+ heat: -50000
+
- type: entity
id: BulletKinetic
name: kinetic bolt
diff --git a/Resources/Prototypes/NPCs/basilisk.yml b/Resources/Prototypes/NPCs/basilisk.yml
new file mode 100644
index 0000000000..601d048b79
--- /dev/null
+++ b/Resources/Prototypes/NPCs/basilisk.yml
@@ -0,0 +1,22 @@
+- type: htnCompound
+ id: BasiliskCompound
+ branches:
+ - tasks:
+ - !type:HTNCompoundTask
+ task: BasiliskMeleeCombatCompound
+ - tasks:
+ - !type:HTNCompoundTask
+ task: InnateRangedCombatCompound
+ - tasks:
+ - !type:HTNCompoundTask
+ task: IdleCompound
+
+- type: htnCompound
+ id: BasiliskMeleeCombatCompound
+ branches:
+ - tasks:
+ - !type:HTNPrimitiveTask
+ operator: !type:UtilityOperator
+ proto: NearbyColdMeleeTargets
+ - !type:HTNCompoundTask
+ task: BeforeMeleeAttackTargetCompound
diff --git a/Resources/Prototypes/NPCs/utility_queries.yml b/Resources/Prototypes/NPCs/utility_queries.yml
index 69ae4a337d..23ad7a59a1 100644
--- a/Resources/Prototypes/NPCs/utility_queries.yml
+++ b/Resources/Prototypes/NPCs/utility_queries.yml
@@ -99,6 +99,27 @@
- !type:TargetInLOSOrCurrentCon
curve: !type:BoolCurve
+- type: utilityQuery
+ id: NearbyColdMeleeTargets
+ query:
+ - !type:NearbyHostilesQuery
+ considerations:
+ - !type:TargetLowTempCon
+ curve: !type:BoolCurve
+ minTemp: 250
+ - !type:TargetIsAliveCon
+ curve: !type:BoolCurve
+ - !type:TargetDistanceCon
+ curve: !type:PresetCurve
+ preset: TargetDistance
+ - !type:TargetHealthCon
+ curve: !type:PresetCurve
+ preset: TargetHealth
+ - !type:TargetAccessibleCon
+ curve: !type:BoolCurve
+ - !type:TargetInLOSOrCurrentCon
+ curve: !type:BoolCurve
+
- type: utilityQuery
id: OrderedTargets
query:
@@ -191,7 +212,7 @@
- !type:TargetIsCritCon
curve: !type:InverseBoolCurve
- !type:TargetIsStunnedCon
- curve: !type:InverseBoolCurve
+ curve: !type:InverseBoolCurve
- !type:TurretTargetingCon
curve: !type:BoolCurve
- !type:TargetDistanceCon
diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/basilisk.rsi/basilisk.png b/Resources/Textures/Mobs/Aliens/Asteroid/basilisk.rsi/basilisk.png
new file mode 100644
index 0000000000..5177522f4b
Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/basilisk.rsi/basilisk.png differ
diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/basilisk.rsi/basilisk_alert.png b/Resources/Textures/Mobs/Aliens/Asteroid/basilisk.rsi/basilisk_alert.png
new file mode 100644
index 0000000000..3bd4e6e1a7
Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/basilisk.rsi/basilisk_alert.png differ
diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/basilisk.rsi/basilisk_dead.png b/Resources/Textures/Mobs/Aliens/Asteroid/basilisk.rsi/basilisk_dead.png
new file mode 100644
index 0000000000..fcd6472c37
Binary files /dev/null and b/Resources/Textures/Mobs/Aliens/Asteroid/basilisk.rsi/basilisk_dead.png differ
diff --git a/Resources/Textures/Mobs/Aliens/Asteroid/basilisk.rsi/meta.json b/Resources/Textures/Mobs/Aliens/Asteroid/basilisk.rsi/meta.json
new file mode 100644
index 0000000000..73710c98cb
--- /dev/null
+++ b/Resources/Textures/Mobs/Aliens/Asteroid/basilisk.rsi/meta.json
@@ -0,0 +1,48 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/9bd459b27c73575fd5e3bf2efea13b816d0ac7c8/icons/mob/animal.dmi",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "basilisk",
+ "directions": 4
+ },
+ {
+ "name": "basilisk_alert",
+ "directions": 4,
+ "delays": [
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ],
+ [
+ 0.1,
+ 0.1,
+ 0.1,
+ 0.1
+ ]
+ ]
+ },
+ {
+ "name": "basilisk_dead"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/ice.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/ice.png
new file mode 100644
index 0000000000..71633de682
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/ice.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/meta.json
index d7b6a34f54..872a5ab721 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi/meta.json
@@ -55,6 +55,9 @@
},
{
"name": "heavylaser_flash"
+ },
+ {
+ "name": "ice"
}
]
-}
\ No newline at end of file
+}