Try and fix mob prototypes (#19859)

Co-authored-by: DrSmugleaf <drsmugleaf@gmail.com>
This commit is contained in:
Nemanja
2023-09-14 23:10:30 -04:00
committed by GitHub
parent 372c67e160
commit c34913b227
29 changed files with 561 additions and 630 deletions

View File

@@ -1,4 +1,5 @@
using Content.Server.Administration.Logs; using Content.Server.Administration.Logs;
using Content.Server.Clothing.Components;
using Content.Server.DeviceNetwork; using Content.Server.DeviceNetwork;
using Content.Server.DeviceNetwork.Systems; using Content.Server.DeviceNetwork.Systems;
using Content.Server.Ghost; using Content.Server.Ghost;
@@ -22,6 +23,7 @@ using Content.Shared.DoAfter;
using Content.Server.Emp; using Content.Server.Emp;
using Content.Server.DeviceLinking.Events; using Content.Server.DeviceLinking.Events;
using Content.Server.DeviceLinking.Systems; using Content.Server.DeviceLinking.Systems;
using Content.Shared.Inventory;
namespace Content.Server.Light.EntitySystems namespace Content.Server.Light.EntitySystems
{ {
@@ -43,6 +45,7 @@ namespace Content.Server.Light.EntitySystems
[Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly PointLightSystem _pointLight = default!; [Dependency] private readonly PointLightSystem _pointLight = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly InventorySystem _inventory = default!;
private static readonly TimeSpan ThunkDelay = TimeSpan.FromSeconds(2); private static readonly TimeSpan ThunkDelay = TimeSpan.FromSeconds(2);
public const string LightBulbContainer = "light_bulb"; public const string LightBulbContainer = "light_bulb";
@@ -105,11 +108,15 @@ namespace Content.Server.Light.EntitySystems
// check if it's possible to apply burn damage to user // check if it's possible to apply burn damage to user
var userUid = args.User; var userUid = args.User;
if (EntityManager.TryGetComponent(userUid, out HeatResistanceComponent? heatResist) && if (EntityManager.TryGetComponent(bulbUid.Value, out LightBulbComponent? lightBulb))
EntityManager.TryGetComponent(bulbUid.Value, out LightBulbComponent? lightBulb))
{ {
// get users heat resistance // get users heat resistance
var res = heatResist.GetHeatResistance(); var res = int.MinValue;
if (_inventory.TryGetSlotEntity(userUid, "gloves", out var slotEntity) &&
TryComp<GloveHeatResistanceComponent>(slotEntity, out var gloves))
{
res = gloves.HeatResistance;
}
// check heat resistance against user // check heat resistance against user
var burnedHand = light.CurrentLit && res < lightBulb.BurningTemperature; var burnedHand = light.CurrentLit && res < lightBulb.BurningTemperature;

View File

@@ -1,21 +0,0 @@
using Content.Server.Clothing.Components;
using Content.Shared.Inventory;
namespace Content.Server.Temperature.Components
{
[RegisterComponent]
public sealed partial class HeatResistanceComponent : Component
{
public int GetHeatResistance()
{
// TODO: When making into system: Any animal that touches bulb that has no
// InventoryComponent but still would have default heat resistance in the future (maybe)
if (EntitySystem.Get<InventorySystem>().TryGetSlotEntity(Owner, "gloves", out var slotEntity) &&
IoCManager.Resolve<IEntityManager>().TryGetComponent<GloveHeatResistanceComponent>(slotEntity, out var gloves))
{
return gloves.HeatResistance;
}
return int.MinValue;
}
}
}

View File

@@ -34,7 +34,6 @@
density: 80 density: 80
mask: mask:
- GhostImpassable - GhostImpassable
- type: HeatResistance
- type: MovementIgnoreGravity - type: MovementIgnoreGravity
- type: Damageable - type: Damageable
damageContainer: Biological damageContainer: Biological

View File

@@ -1,98 +1,22 @@
- type: entity - type: entity
save: false save: false
parent:
- BaseMob
- MobDamageable
- MobAtmosExposed
id: BaseSimpleMob id: BaseSimpleMob
suffix: AI suffix: AI
abstract: true abstract: true
components: components:
- type: LagCompensation
- type: Tag
tags:
- DoorBumpOpener
- type: Reactive - type: Reactive
groups: groups:
Flammable: [Touch] Flammable: [Touch]
Extinguish: [Touch] Extinguish: [Touch]
Acidic: [Touch, Ingestion] Acidic: [Touch, Ingestion]
- type: InputMover - type: Internals
- type: MobMover
- type: Input
context: "human"
- type: MovementSpeedModifier - type: MovementSpeedModifier
baseWalkSpeed : 4 baseWalkSpeed : 4
baseSprintSpeed : 4 baseSprintSpeed : 4
- type: HealthExaminable
examinableTypes:
- Blunt
- Slash
- Piercing
- Heat
- Shock
- type: MovedByPressure
- type: DamageOnHighSpeedImpact
damage:
types:
Blunt: 5
soundHit:
path: /Audio/Effects/hit_kick.ogg
- type: Sprite
noRot: true
drawdepth: Mobs
- type: Clickable
- type: InteractionOutline
- type: Physics
bodyType: KinematicController # Same for all inheritors
- type: Fixtures
fixtures:
fix1:
shape:
# Circles, cuz rotation of rectangles looks very bad
!type:PhysShapeCircle
radius: 0.35
density: 50
mask:
- MobMask
layer:
- MobLayer
- type: Damageable
damageContainer: Biological
- type: RadiationReceiver
- type: AtmosExposed
- type: Temperature
heatDamageThreshold: 360
coldDamageThreshold: 0
currentTemperature: 310.15
coldDamage:
types:
Cold : 0.1 #per second, scales with temperature & other constants
specificHeat: 42
heatDamage:
types:
Heat : 0.1 #per second, scales with temperature & other constants
- type: MobState
- type: Deathgasp
- type: MobStateActions
actions:
Critical:
- ActionCritSuccumb
- ActionCritFakeDeath
- ActionCritLastWords
- type: MobThresholds
thresholds:
0: Alive
50: Critical
100: Dead
- type: Stamina
- type: Destructible
thresholds:
- trigger:
!type:DamageTypeTrigger
damageType: Blunt
damage: 400
behaviors:
- !type:GibBehavior { }
- type: HeatResistance
- type: Internals
- type: StatusIcon
- type: StatusEffects - type: StatusEffects
allowed: allowed:
- SlowedDown - SlowedDown
@@ -101,25 +25,19 @@
- ForcedSleep - ForcedSleep
- TemporaryBlindness - TemporaryBlindness
- Pacified - Pacified
- type: InjectableSolution
solution: chemicals
- type: Examiner
- type: Appearance
- type: RotationVisuals
defaultRotation: 0
horizontalRotation: 0
- type: Actions
- type: DoAfter
- type: Polymorphable
- type: Pullable
- type: Buckle - type: Buckle
- type: StandingState - type: StandingState
- type: Alerts - type: Tag
tags:
- DoorBumpOpener
- type: entity - type: entity
save: false
abstract: true abstract: true
parent: BaseSimpleMob parent:
- BaseSimpleMob
- MobCombat
- MobBloodstream
- MobFlammable
id: SimpleSpaceMobBase # Mob without barotrauma, freezing and asphyxiation (for space carps!?) id: SimpleSpaceMobBase # Mob without barotrauma, freezing and asphyxiation (for space carps!?)
suffix: AI suffix: AI
components: components:
@@ -129,35 +47,11 @@
- type: HTN - type: HTN
rootTask: rootTask:
task: IdleCompound task: IdleCompound
- type: SolutionContainerManager
- type: Bloodstream
bloodlossDamage:
types:
Bloodloss:
1
bloodlossHealDamage:
types:
Bloodloss:
-1
- type: CombatMode
- type: MeleeWeapon - type: MeleeWeapon
hidden: true
angle: 0 angle: 0
animation: WeaponArcBite animation: WeaponArcBite
damage:
groups:
Brute: 5
- type: Body - type: Body
prototype: Animal prototype: Animal
- type: Flammable
fireSpread: true
canResistFire: true
damage:
types:
Heat: 1 #per second, scales with number of fire 'stacks'
- type: FireVisuals
sprite: Mobs/Effects/onfire.rsi
normalState: Generic_mob_burning
- type: Climbing - type: Climbing
- type: Flashable - type: Flashable
- type: NameIdentifier - type: NameIdentifier
@@ -171,14 +65,14 @@
- type: Perishable - type: Perishable
- type: entity - type: entity
save: false parent:
abstract: true - MobRespirator
- MobAtmosStandard
- SimpleSpaceMobBase
id: SimpleMobBase # for air breathers id: SimpleMobBase # for air breathers
parent: SimpleSpaceMobBase
suffix: AI suffix: AI
abstract: true
components: components:
- type: InputMover
- type: MobMover
- type: Hunger - type: Hunger
thresholds: # only animals and rats are derived from this prototype so let's override it here and in rats' proto thresholds: # only animals and rats are derived from this prototype so let's override it here and in rats' proto
Overfed: 100 Overfed: 100
@@ -195,10 +89,6 @@
Parched: 50 Parched: 50
Dead: 0 Dead: 0
baseDecayRate: 0.04 baseDecayRate: 0.04
- type: Barotrauma
damage:
types:
Blunt: 0.15 #per second, scales with pressure and other constants.
- type: StatusEffects - type: StatusEffects
allowed: allowed:
- Stun - Stun
@@ -210,32 +100,6 @@
- TemporaryBlindness - TemporaryBlindness
- Pacified - Pacified
- StaminaModifier - StaminaModifier
- type: ThermalRegulator
metabolismHeat: 800
radiatedHeat: 100
implicitHeatRegulation: 250
sweatHeatRegulation: 500
shiveringHeatRegulation: 500
normalBodyTemperature: 310.15
thermalRegulationTemperatureThreshold: 25
- type: Respirator
damage:
types:
Asphyxiation: 2
damageRecovery:
types:
Asphyxiation: -1.0
- type: Temperature
heatDamageThreshold: 360
coldDamageThreshold: 260
currentTemperature: 310.15
specificHeat: 42
coldDamage:
types:
Cold : 1 #per second, scales with temperature & other constants
heatDamage:
types:
Heat : 1 #per second, scales with temperature & other constants
- type: Bloodstream - type: Bloodstream
bloodMaxVolume: 150 bloodMaxVolume: 150
- type: MobPrice - type: MobPrice

View File

@@ -1,6 +1,5 @@
- type: entity - type: entity
parent: MobObserver parent: MobObserver
save: false
id: AdminObserver id: AdminObserver
name: admin observer name: admin observer
noSpawn: true noSpawn: true
@@ -18,10 +17,7 @@
canInteract: true canInteract: true
- type: Hands - type: Hands
- type: Puller - type: Puller
- type: DoAfter
- type: CombatMode - type: CombatMode
- type: Actions
- type: InputMover
- type: Physics - type: Physics
ignorePaused: true ignorePaused: true
bodyType: Kinematic bodyType: Kinematic

View File

@@ -1,7 +1,7 @@
- type: entity - type: entity
save: false save: false
name: Urist McWeb name: Urist McWeb
parent: [BaseMobArachnid, BaseMob] parent: BaseMobArachnid
id: MobArachnid id: MobArachnid
components: components:
- type: Respirator - type: Respirator

View File

@@ -1,35 +0,0 @@
- type: entity
save: false
name: BaseMob
id: BaseMob
abstract: true
components:
- type: CombatMode
canDisarm: true
- type: InteractionPopup
successChance: 1
interactSuccessString: hugging-success-generic
interactSuccessSound: /Audio/Effects/thudswoosh.ogg
messagePerceivedByOthers: hugging-success-generic-others
- type: MindContainer
showExamineInfo: true
- type: Input
context: "human"
- type: MobMover
- type: InputMover
- type: Respirator
damage:
types:
Asphyxiation: 1.0
damageRecovery:
types:
Asphyxiation: -1.0
- type: Alerts
- type: Actions
- type: Eye
- type: CameraRecoil
- type: Examiner
- type: CanHostGuardian
- type: NpcFactionMember
factions:
- NanoTrasen

View File

@@ -1,7 +1,7 @@
- type: entity - type: entity
save: false save: false
name: Urist McPlants name: Urist McPlants
parent: [BaseMobDiona, BaseMob] parent: BaseMobDiona
id: MobDiona id: MobDiona
components: components:
- type: Respirator - type: Respirator

View File

@@ -1,5 +1,5 @@
- type: entity - type: entity
save: false save: false
name: Urist McHands The Dwarf name: Urist McHands The Dwarf
parent: [BaseMobDwarf, BaseMob] parent: BaseMobDwarf
id: MobDwarf id: MobDwarf

View File

@@ -72,7 +72,6 @@
- type: MobState - type: MobState
allowedStates: allowedStates:
- Alive - Alive
- type: HeatResistance
- type: CombatMode - type: CombatMode
- type: Internals - type: Internals
- type: Examiner - type: Examiner

View File

@@ -1,7 +1,7 @@
- type: entity - type: entity
save: false save: false
name: Urist McHands name: Urist McHands
parent: [BaseMobHuman, BaseMob] parent: BaseMobHuman
id: MobHuman id: MobHuman
#Syndie #Syndie

View File

@@ -1,5 +1,5 @@
- type: entity - type: entity
save: false save: false
name: Urist McFluff name: Urist McFluff
parent: [BaseMobMoth, BaseMob] parent: BaseMobMoth
id: MobMoth id: MobMoth

View File

@@ -1,15 +1,20 @@
- type: entity - type: entity
parent: BaseMob
id: MobObserver id: MobObserver
name: observer name: observer
noSpawn: true
save: false
description: Boo! description: Boo!
noSpawn: true
components: components:
- type: Sprite
overrideContainerOcclusion: true # Ghosts always show up regardless of where they're contained.
drawdepth: Ghosts
sprite: Mobs/Ghosts/ghost_human.rsi
color: "#fff8"
layers:
- state: animated
shader: unshaded
- type: ContentEye - type: ContentEye
maxZoom: 1.44,1.44 maxZoom: 1.44,1.44
- type: MindContainer
- type: Clickable
- type: InteractionOutline
- type: Fixtures - type: Fixtures
fixtures: fixtures:
fix1: fix1:
@@ -19,8 +24,6 @@
density: 15 density: 15
mask: mask:
- GhostImpassable - GhostImpassable
- type: InputMover
- type: Appearance
- type: Eye - type: Eye
drawFov: false drawFov: false
- type: Input - type: Input
@@ -28,6 +31,10 @@
- type: Examiner - type: Examiner
skipChecks: true skipChecks: true
- type: Ghost - type: Ghost
- type: MovementSpeedModifier
baseSprintSpeed: 12
baseWalkSpeed: 8
- type: MovementIgnoreGravity
- type: IntrinsicRadioReceiver - type: IntrinsicRadioReceiver
- type: ActiveRadio - type: ActiveRadio
channels: channels:
@@ -43,20 +50,6 @@
- Supply - Supply
- Syndicate - Syndicate
globalReceive: true globalReceive: true
- type: Sprite
overrideContainerOcclusion: true # Ghosts always show up regardless of where they're contained.
noRot: true
drawdepth: Ghosts
sprite: Mobs/Ghosts/ghost_human.rsi
state: animated
color: "#fff8"
layers:
- state: animated
shader: unshaded
- type: MovementSpeedModifier
baseSprintSpeed: 12
baseWalkSpeed: 8
- type: MovementIgnoreGravity
- type: Physics - type: Physics
bodyType: KinematicController bodyType: KinematicController
bodyStatus: InAir bodyStatus: InAir

View File

@@ -1,7 +1,7 @@
- type: entity - type: entity
save: false save: false
name: Urisst' Mzhand name: Urisst' Mzhand
parent: [BaseMobReptilian, BaseMob] parent: BaseMobReptilian
id: MobReptilian id: MobReptilian
#Weh #Weh

View File

@@ -8,8 +8,6 @@
interactSuccessString: hugging-success-generic interactSuccessString: hugging-success-generic
interactSuccessSound: /Audio/Effects/thudswoosh.ogg interactSuccessSound: /Audio/Effects/thudswoosh.ogg
messagePerceivedByOthers: hugging-success-generic-others messagePerceivedByOthers: hugging-success-generic-others
- type: MindContainer
showExamineInfo: true
- type: Input - type: Input
context: "human" context: "human"
- type: MobMover - type: MobMover

View File

@@ -1,4 +1,4 @@
- type: entity - type: entity
save: false save: false
parent: [BaseMobSlimePerson, BaseMob] parent: BaseMobSlimePerson
id: MobSlimePerson id: MobSlimePerson

View File

@@ -1,5 +1,5 @@
- type: entity - type: entity
save: false save: false
name: Vox name: Vox
parent: [BaseMobVox, BaseMob] parent: BaseMobVox
id: MobVox id: MobVox

View File

@@ -1,7 +1,7 @@
- type: entity - type: entity
save: false save: false
name: Urist McWebs name: Urist McWebs
parent: BaseMobOrganic parent: BaseMobSpeciesOrganic
id: BaseMobArachnid id: BaseMobArachnid
abstract: true abstract: true
components: components:
@@ -28,7 +28,7 @@
soundHit: soundHit:
collection: AlienClaw collection: AlienClaw
damage: damage:
types: # Realisically this is more like 5 slash. You can figure out the logistics if slash is better than blunt/pierce yourself. types: # Realisically this is more like 5 slash
Slash: 4 Slash: 4
# Fun # Fun
- type: Sericulture - type: Sericulture
@@ -46,10 +46,10 @@
damageOverlayGroups: damageOverlayGroups:
Brute: Brute:
sprite: Mobs/Effects/brute_damage.rsi sprite: Mobs/Effects/brute_damage.rsi
color: "#162581" # Why so blue? color: "#162581"
- type: Speech - type: Speech
speechVerb: Arachnid speechVerb: Arachnid
speechSounds: Arachnid # TODO: Abuse my mic more. Do that in a later PR. speechSounds: Arachnid
- type: Vocal - type: Vocal
sounds: sounds:
Male: UnisexArachnid Male: UnisexArachnid
@@ -111,12 +111,9 @@
visible: false visible: false
- type: entity - type: entity
save: false parent: BaseSpeciesDummy
name: Urist McFluff
parent: MobHumanDummy
id: MobArachnidDummy id: MobArachnidDummy
noSpawn: true noSpawn: true
description: A dummy arachnid meant to be used in character setup. # Hey! It's not dumb :(
components: components:
- type: HumanoidAppearance - type: HumanoidAppearance
species: Arachnid species: Arachnid

View File

@@ -1,100 +1,13 @@
# Anything human specific (e.g. UI, input) goes under MobHuman
- type: entity - type: entity
save: false save: false
name: Urist McHands parent:
id: BaseMobOrganic - BaseMob
noSpawn: true - MobDamageable
- MobCombat
id: BaseMobSpecies
abstract: true
components: components:
- type: FloorOcclusion
- type: LagCompensation
- type: RangedDamageSound
soundGroups:
Brute:
collection:
MeatBulletImpact
soundTypes:
Heat:
collection:
MeatLaserImpact
- type: Tag
tags:
- CanPilot
- FootstepSound
- DoorBumpOpener
- type: Reactive
groups:
Flammable: [ Touch ]
Extinguish: [ Touch ]
Acidic: [Touch, Ingestion]
reactions:
- reagents: [Water, SpaceCleaner]
methods: [Touch]
effects:
- !type:WashCreamPieReaction
- type: Flashable
- type: Polymorphable
- type: Identity
- type: Hands
- type: MovementSpeedModifier
- type: MovedByPressure
- type: Barotrauma
damage:
types:
Blunt: 0.35 #per second, scales with pressure and other constants.
- type: DamageOnHighSpeedImpact
damage:
types:
Blunt: 5
soundHit:
path: /Audio/Effects/hit_kick.ogg
# Organs
- type: InjectableSolution
solution: chemicals
- type: IdExaminable
- type: HealthExaminable
examinableTypes:
- Blunt
- Slash
- Piercing
- Heat
- Shock
- type: Bloodstream
bloodlossDamage:
types:
Bloodloss:
1
bloodlossHealDamage:
types:
Bloodloss:
-1
- type: Stamina
- type: StatusIcon
- type: StatusEffects
allowed:
- Stun
- KnockedDown
- SlowedDown
- Stutter
- SeeingRainbows
- Electrocution
- Drunk
- SlurredSpeech
- RatvarianLanguage
- PressureImmunity
- Muted
- ForcedSleep
- TemporaryBlindness
- Pacified
- StaminaModifier
- type: Blindable
# Other
- type: Inventory
- type: InventorySlots
- type: Clickable
- type: InteractionOutline
- type: Sprite - type: Sprite
noRot: true
drawdepth: Mobs
layers: layers:
- map: [ "enum.HumanoidVisualLayers.Chest" ] - map: [ "enum.HumanoidVisualLayers.Chest" ]
- map: [ "enum.HumanoidVisualLayers.Head" ] - map: [ "enum.HumanoidVisualLayers.Head" ]
@@ -146,84 +59,6 @@
sprite: "Effects/creampie.rsi" sprite: "Effects/creampie.rsi"
state: "creampie_human" state: "creampie_human"
visible: false visible: false
- type: Physics
bodyType: KinematicController
- type: Reflect
enabled: false
reflectProb: 0
- type: Fixtures
fixtures: # TODO: This needs a second fixture just for mob collisions.
fix1:
shape:
!type:PhysShapeCircle
radius: 0.35
density: 185
restitution: 0.0
mask:
- MobMask
layer:
- MobLayer
- type: AtmosExposed
- type: Flammable
fireSpread: true
canResistFire: true
damage:
types:
Heat: 1 #per second, scales with number of fire 'stacks'
- type: Temperature
heatDamageThreshold: 360
coldDamageThreshold: 260
currentTemperature: 310.15
specificHeat: 42
coldDamage:
types:
Cold: 0.1 #per second, scales with temperature & other constants
heatDamage:
types:
Heat: 0.1 #per second, scales with temperature & other constants
- type: HumanoidAppearance
species: Human
- type: Body
prototype: Human
requiredLegs: 2
- type: Damageable
damageContainer: Biological
- type: RadiationReceiver
- type: ThermalRegulator
metabolismHeat: 800
radiatedHeat: 100
implicitHeatRegulation: 500
sweatHeatRegulation: 2000
shiveringHeatRegulation: 2000
normalBodyTemperature: 310.15
thermalRegulationTemperatureThreshold: 25
- type: Internals
- type: MobState
- type: Deathgasp
- type: MobStateActions
actions:
Critical:
- ActionCritSuccumb
- ActionCritFakeDeath
- ActionCritLastWords
- type: MobThresholds
thresholds:
0: Alive
100: Critical
200: Dead
- type: Destructible
thresholds:
- trigger:
!type:DamageTypeTrigger
damageType: Blunt
damage: 400
behaviors:
- !type:GibBehavior { }
- type: SlowOnDamage
speedModifierThresholds:
60: 0.7
80: 0.5
- type: HeatResistance
- type: DamageVisuals - type: DamageVisuals
thresholds: [ 20, 40, 100 ] thresholds: [ 20, 40, 100 ]
targetLayers: targetLayers:
@@ -239,7 +74,6 @@
color: "#FF0000" color: "#FF0000"
Burn: Burn:
sprite: Mobs/Effects/burn_damage.rsi sprite: Mobs/Effects/burn_damage.rsi
- type: Appearance
- type: GenericVisualizer - type: GenericVisualizer
visuals: visuals:
enum.CreamPiedVisuals.Creamed: enum.CreamPiedVisuals.Creamed:
@@ -247,14 +81,76 @@
True: {visible: true} True: {visible: true}
False: {visible: false} False: {visible: false}
- type: RotationVisuals - type: RotationVisuals
defaultRotation: 90
horizontalRotation: 90
- type: HumanoidAppearance
species: Human
- type: SlowOnDamage
speedModifierThresholds:
60: 0.7
80: 0.5
- type: Fixtures
fixtures: # TODO: This needs a second fixture just for mob collisions.
fix1:
shape:
!type:PhysShapeCircle
radius: 0.35
density: 185
restitution: 0.0
mask:
- MobMask
layer:
- MobLayer
- type: FloorOcclusion
- type: RangedDamageSound
soundGroups:
Brute:
collection:
MeatBulletImpact
soundTypes:
Heat:
collection:
MeatLaserImpact
- type: Reactive
groups:
Flammable: [ Touch ]
Extinguish: [ Touch ]
Acidic: [Touch, Ingestion]
reactions:
- reagents: [Water, SpaceCleaner]
methods: [Touch]
effects:
- !type:WashCreamPieReaction
- type: StatusEffects
allowed:
- Stun
- KnockedDown
- SlowedDown
- Stutter
- SeeingRainbows
- Electrocution
- Drunk
- SlurredSpeech
- RatvarianLanguage
- PressureImmunity
- Muted
- ForcedSleep
- TemporaryBlindness
- Pacified
- StaminaModifier
- type: Reflect
enabled: false
reflectProb: 0
- type: Body
prototype: Human
requiredLegs: 2
- type: Identity
- type: IdExaminable
- type: Hands
- type: Internals
- type: Inventory
- type: InventorySlots
- type: FloatingVisuals - type: FloatingVisuals
- type: FireVisuals
sprite: Mobs/Effects/onfire.rsi
normalState: Generic_mob_burning
alternateState: Standing
fireStackAlternateState: 3
- type: CombatMode
canDisarm: true
- type: Climbing - type: Climbing
- type: Cuffable - type: Cuffable
- type: Ensnareable - type: Ensnareable
@@ -262,6 +158,8 @@
state: icon state: icon
- type: AnimationPlayer - type: AnimationPlayer
- type: Buckle - type: Buckle
- type: CombatMode
canDisarm: true
- type: MeleeWeapon - type: MeleeWeapon
hidden: true hidden: true
soundHit: soundHit:
@@ -272,8 +170,22 @@
damage: damage:
types: types:
Blunt: 5 Blunt: 5
- type: Pullable - type: SleepEmitSound
- type: DoAfter - type: SSDIndicator
- type: StandingState
- type: Fingerprint
- type: Dna
- type: MindContainer
showExamineInfo: true
- type: InteractionPopup
successChance: 1
interactSuccessString: hugging-success-generic
interactSuccessSound: /Audio/Effects/thudswoosh.ogg
messagePerceivedByOthers: hugging-success-generic-others
- type: CanHostGuardian
- type: NpcFactionMember
factions:
- NanoTrasen
- type: CreamPied - type: CreamPied
- type: Stripping - type: Stripping
- type: Strippable - type: Strippable
@@ -286,11 +198,6 @@
- key: enum.StrippingUiKey.Key - key: enum.StrippingUiKey.Key
type: StrippableBoundUserInterface type: StrippableBoundUserInterface
- type: Puller - type: Puller
- type: Butcherable
butcheringType: Spike # TODO human.
spawned:
- id: FoodMeat
amount: 5
- type: Speech - type: Speech
speechSounds: Alto speechSounds: Alto
- type: Vocal - type: Vocal
@@ -304,22 +211,83 @@
- type: Grammar - type: Grammar
attributes: attributes:
proper: true proper: true
- type: StandingState
- type: Fingerprint
- type: Dna
- type: MobPrice - type: MobPrice
price: 1500 # Kidnapping a living person and selling them for cred is a good move. price: 1500 # Kidnapping a living person and selling them for cred is a good move.
deathPenalty: 0.01 # However they really ought to be living and intact, otherwise they're worth 100x less. deathPenalty: 0.01 # However they really ought to be living and intact, otherwise they're worth 100x less.
- type: ContentEye
- type: SleepEmitSound
- type: SSDIndicator
- type: entity - type: entity
save: false save: false
name: Urist McHands parent:
id: BaseMobOrganicDummy - MobBloodstream
- MobRespirator
- MobAtmosStandard
- MobFlammable
- BaseMobSpecies
id: BaseMobSpeciesOrganic
abstract: true
components:
- type: Flashable
- type: Barotrauma
damage:
types:
Blunt: 0.35 #per second, scales with pressure and other constants.
# Organs
- type: StatusEffects
allowed:
- Stun
- KnockedDown
- SlowedDown
- Stutter
- SeeingRainbows
- Electrocution
- Drunk
- SlurredSpeech
- RatvarianLanguage
- PressureImmunity
- Muted
- ForcedSleep
- TemporaryBlindness
- Pacified
- StaminaModifier
- type: Blindable
# Other
- type: Temperature
heatDamageThreshold: 360
coldDamageThreshold: 260
currentTemperature: 310.15
specificHeat: 42
coldDamage:
types:
Cold: 0.1 #per second, scales with temperature & other constants
heatDamage:
types:
Heat: 0.1 #per second, scales with temperature & other constants
- type: ThermalRegulator
metabolismHeat: 800
radiatedHeat: 100
implicitHeatRegulation: 500
sweatHeatRegulation: 2000
shiveringHeatRegulation: 2000
normalBodyTemperature: 310.15
thermalRegulationTemperatureThreshold: 25
- type: Perishable
- type: Butcherable
butcheringType: Spike # TODO human.
spawned:
- id: FoodMeat
amount: 5
- type: Respirator
damage:
types:
Asphyxiation: 1.0
damageRecovery:
types:
Asphyxiation: -1.0
- type: entity
save: false
id: BaseSpeciesDummy
abstract: true abstract: true
description: A dummy human meant to be used in character setup.
components: components:
- type: Hands - type: Hands
- type: Inventory - type: Inventory
@@ -377,33 +345,12 @@
- map: [ "head" ] - map: [ "head" ]
- map: [ "pocket1" ] - map: [ "pocket1" ]
- map: [ "pocket2" ] - map: [ "pocket2" ]
- type: Physics - type: Appearance
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeAabb
bounds: "-0.35,-0.35,0.35,0.35"
density: 185
restitution: 0.0
mask:
- MobMask
layer:
- MobLayer
- type: HumanoidAppearance - type: HumanoidAppearance
species: Human species: Human
- type: Body - type: Body
prototype: Human prototype: Human
requiredLegs: 2 requiredLegs: 2
- type: Appearance
- type: Damageable
damageContainer: Biological
- type: MobState
- type: MobThresholds
thresholds:
0: Alive
100: Critical
200: Dead
- type: UserInterface - type: UserInterface
interfaces: interfaces:
- key: enum.HumanoidMarkingModifierKey.Key # sure, this can go here too - key: enum.HumanoidMarkingModifierKey.Key # sure, this can go here too

View File

@@ -1,7 +1,7 @@
- type: entity - type: entity
save: false save: false
name: Urist McPlants name: Urist McPlants
parent: BaseMobOrganic parent: BaseMobSpeciesOrganic
id: BaseMobDiona id: BaseMobDiona
abstract: true abstract: true
components: components:
@@ -87,7 +87,6 @@
- MobLayer - MobLayer
- type: Inventory - type: Inventory
templateId: diona templateId: diona
- type: InventorySlots
- type: MovementSpeedModifier - type: MovementSpeedModifier
baseWalkSpeed : 1.5 baseWalkSpeed : 1.5
baseSprintSpeed : 3.5 baseSprintSpeed : 3.5
@@ -103,15 +102,11 @@
- type: IgnoreKudzu - type: IgnoreKudzu
- type: entity - type: entity
save: false parent: BaseSpeciesDummy
name: Urist McHands
parent: MobHumanDummy
id: MobDionaDummy id: MobDionaDummy
noSpawn: true noSpawn: true
description: A dummy diona meant to be used in character setup.
components: components:
- type: Inventory - type: Inventory
templateId: diona templateId: diona
- type: InventorySlots
- type: HumanoidAppearance - type: HumanoidAppearance
species: Diona species: Diona

View File

@@ -1,7 +1,7 @@
- type: entity - type: entity
save: false save: false
name: Urist McHands The Dwarf name: Urist McHands The Dwarf
parent: BaseMobOrganic parent: BaseMobSpeciesOrganic
id: BaseMobDwarf id: BaseMobDwarf
abstract: true abstract: true
components: components:
@@ -58,14 +58,9 @@
- type: Perishable - type: Perishable
- type: entity - type: entity
save: false parent: BaseSpeciesDummy
name: Urist McHands
parent: MobHumanDummy
id: MobDwarfDummy id: MobDwarfDummy
noSpawn: true noSpawn: true
description: A dummy human meant to be used in character setup.
components: components:
- type: Sprite - type: Sprite
noRot: true
drawdepth: Mobs
scale: 1, 0.8 scale: 1, 0.8

View File

@@ -1,8 +1,8 @@
# Anything human specific (e.g. UI, input) goes under MobHuman # Anything human specific (e.g. UI, input) goes under MobHuman
- type: entity - type: entity
name: Urist McHands parent: BaseMobSpeciesOrganic
parent: BaseMobOrganic
id: BaseMobHuman id: BaseMobHuman
name: Urist McHands
abstract: true abstract: true
components: components:
- type: Hunger - type: Hunger
@@ -22,7 +22,6 @@
amount: 5 amount: 5
- type: entity - type: entity
name: Urist McHands parent: BaseSpeciesDummy
id: MobHumanDummy id: MobHumanDummy
parent: BaseMobOrganicDummy
noSpawn: true noSpawn: true

View File

@@ -1,7 +1,7 @@
- type: entity - type: entity
save: false save: false
name: Urist McFluff name: Urist McFluff
parent: BaseMobOrganic parent: BaseMobSpeciesOrganic
id: BaseMobMoth id: BaseMobMoth
abstract: true abstract: true
components: components:
@@ -113,12 +113,9 @@
visible: false visible: false
- type: entity - type: entity
save: false parent: BaseSpeciesDummy
name: Urist McFluff
parent: MobHumanDummy
id: MobMothDummy id: MobMothDummy
noSpawn: true noSpawn: true
description: A dummy moth meant to be used in character setup.
components: components:
- type: HumanoidAppearance - type: HumanoidAppearance
species: Moth species: Moth

View File

@@ -1,7 +1,7 @@
- type: entity - type: entity
save: false save: false
name: Urisst' Mzhand name: Urisst' Mzhand
parent: BaseMobOrganic parent: BaseMobSpeciesOrganic
id: BaseMobReptilian id: BaseMobReptilian
abstract: true abstract: true
components: components:
@@ -61,9 +61,7 @@
- type: Perishable - type: Perishable
- type: entity - type: entity
save: false parent: BaseSpeciesDummy
name: Urist McHands
parent: MobHumanDummy
id: MobReptilianDummy id: MobReptilianDummy
noSpawn: true noSpawn: true
description: A dummy reptilian meant to be used in character setup. description: A dummy reptilian meant to be used in character setup.

View File

@@ -1,7 +1,7 @@
- type: entity - type: entity
save: false save: false
name: Urist McSkelly name: Urist McSkelly
parent: BaseMobOrganic parent: BaseMobSpeciesOrganic
id: BaseMobSkeletonPerson id: BaseMobSkeletonPerson
abstract: true abstract: true
components: components:
@@ -70,12 +70,9 @@
- MobLayer - MobLayer
- type: entity - type: entity
save: false parent: BaseSpeciesDummy
name: Urist McSkelly
parent: BaseMobOrganicDummy
id: MobSkeletonPersonDummy id: MobSkeletonPersonDummy
noSpawn: true noSpawn: true
description: A dummy skeleton meant to be used in character setup.
components: components:
- type: HumanoidAppearance - type: HumanoidAppearance
species: Skeleton species: Skeleton

View File

@@ -1,6 +1,6 @@
- type: entity - type: entity
name: Urist McSlime name: Urist McSlime
parent: BaseMobOrganic parent: BaseMobSpeciesOrganic
id: BaseMobSlimePerson id: BaseMobSlimePerson
abstract: true abstract: true
components: components:
@@ -76,12 +76,9 @@
maxSaturation: 15 maxSaturation: 15
- type: entity - type: entity
save: false
name: Urist McHands
parent: MobHumanDummy parent: MobHumanDummy
id: MobSlimePersonDummy id: MobSlimePersonDummy
noSpawn: true noSpawn: true
description: A dummy slime meant to be used in character setup.
components: components:
- type: HumanoidAppearance - type: HumanoidAppearance
species: SlimePerson species: SlimePerson

View File

@@ -1,5 +1,5 @@
- type: entity - type: entity
parent: BaseMobOrganic parent: BaseMobSpeciesOrganic
id: BaseMobVox id: BaseMobVox
abstract: true abstract: true
components: components:
@@ -109,13 +109,12 @@
Unsexed: UnisexVox Unsexed: UnisexVox
- type: entity - type: entity
parent: BaseSpeciesDummy
id: MobVoxDummy id: MobVoxDummy
parent: MobHumanDummy
noSpawn: true noSpawn: true
components: components:
- type: HumanoidAppearance - type: HumanoidAppearance
species: Vox species: Vox
- type: Body - type: Body
prototype: Vox prototype: Vox
requiredLegs: 2

View File

@@ -0,0 +1,210 @@
# The progenitor. This should only container the most basic components possible.
# Only put things on here if every mob *must* have it. This includes ghosts.
- type: entity
save: false
id: BaseMob
abstract: true
components:
- type: Sprite
noRot: true
drawdepth: Mobs
- type: Physics
bodyType: KinematicController
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeCircle
radius: 0.35
density: 50
mask:
- MobMask
layer:
- MobLayer
- type: Clickable
- type: InteractionOutline
- type: InputMover
- type: Input
context: "human"
- type: LagCompensation
- type: MobMover
- type: Actions
- type: Alerts
- type: Appearance
- type: RotationVisuals
defaultRotation: 0
horizontalRotation: 0
- type: DoAfter
- type: Examiner
- type: Eye
- type: ContentEye
- type: CameraRecoil
- type: MindContainer
- type: MovementSpeedModifier
- type: Polymorphable
- type: StatusIcon
# Used for mobs that have health and can take damage.
- type: entity
save: false
id: MobDamageable
abstract: true
components:
- type: Damageable
damageContainer: Biological
- type: Destructible
thresholds:
- trigger:
!type:DamageTypeTrigger
damageType: Blunt
damage: 400
behaviors:
- !type:GibBehavior { }
- type: RadiationReceiver
- type: Stamina
- type: MobState
- type: MobThresholds
thresholds:
0: Alive
100: Critical
200: Dead
- type: MobStateActions
actions:
Critical:
- CritSuccumb
- CritFakeDeath
- CritLastWords
- type: Deathgasp
- type: HealthExaminable
examinableTypes:
- Blunt
- Slash
- Piercing
- Heat
- Shock
- type: DamageOnHighSpeedImpact
damage:
types:
Blunt: 5
soundHit:
path: /Audio/Effects/hit_kick.ogg
- type: Pullable
# Used for mobs that can enter combat mode and can attack.
- type: entity
save: false
id: MobCombat
abstract: true
components:
- type: CombatMode
- type: MeleeWeapon
hidden: true
damage:
groups:
Brute: 5
# Used for mobs that are affected by atmospherics, pressure, and heat
- type: entity
save: false
id: MobAtmosExposed
abstract: true
components:
- type: AtmosExposed
- type: Temperature
heatDamageThreshold: 360
coldDamageThreshold: 0
currentTemperature: 310.15
coldDamage: #per second, scales with temperature & other constants
types:
Cold : 0.1
specificHeat: 42
heatDamage: #per second, scales with temperature & other constants
types:
Heat : 0.1
- type: ThermalRegulator
metabolismHeat: 800
radiatedHeat: 100
implicitHeatRegulation: 500
sweatHeatRegulation: 2000
shiveringHeatRegulation: 2000
normalBodyTemperature: 310.15
thermalRegulationTemperatureThreshold: 25
- type: MovedByPressure
# Used for mobs that require regular atmospheric conditions.
- type: entity
parent: MobAtmosExposed
id: MobAtmosStandard
abstract: true
components:
- type: ThermalRegulator
metabolismHeat: 800
radiatedHeat: 100
implicitHeatRegulation: 250
sweatHeatRegulation: 500
shiveringHeatRegulation: 500
normalBodyTemperature: 310.15
thermalRegulationTemperatureThreshold: 25
- type: Temperature
heatDamageThreshold: 360
coldDamageThreshold: 260
currentTemperature: 310.15
specificHeat: 42
coldDamage:
types:
Cold: 1 #per second, scales with temperature & other constants
heatDamage:
types:
Heat: 1 #per second, scales with temperature & other constants
- type: Barotrauma
damage:
types:
Blunt: 0.15 #per second, scales with pressure and other constants.
# Used for mobs that can be set on fire
- type: entity
save: false
id: MobFlammable
abstract: true
components:
- type: Flammable
fireSpread: true
canResistFire: true
damage: #per second, scales with number of fire 'stacks'
types:
Heat: 1
- type: FireVisuals
sprite: Mobs/Effects/onfire.rsi
normalState: Generic_mob_burning
# Used for mobs that need to breathe
- type: entity
save: false
id: MobRespirator
abstract: true
components:
- type: Internals
- type: Respirator
damage:
types:
Asphyxiation: 2
damageRecovery:
types:
Asphyxiation: -1.0
# Used for mobs that have a bloodstream
- type: entity
save: false
id: MobBloodstream
abstract: true
components:
- type: SolutionContainerManager
- type: InjectableSolution
solution: chemicals
- type: Bloodstream
bloodlossDamage:
types:
Bloodloss: 1
bloodlossHealDamage:
types:
Bloodloss: -1