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 Debug
parent 19fd6b42f8
commit cd82d16121
29 changed files with 561 additions and 630 deletions

View File

@ -1,4 +1,5 @@
using Content.Server.Administration.Logs;
using Content.Server.Clothing.Components;
using Content.Server.DeviceNetwork;
using Content.Server.DeviceNetwork.Systems;
using Content.Server.Ghost;
@ -22,6 +23,7 @@ using Content.Shared.DoAfter;
using Content.Server.Emp;
using Content.Server.DeviceLinking.Events;
using Content.Server.DeviceLinking.Systems;
using Content.Shared.Inventory;
namespace Content.Server.Light.EntitySystems
{
@ -43,6 +45,7 @@ namespace Content.Server.Light.EntitySystems
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly PointLightSystem _pointLight = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly InventorySystem _inventory = default!;
private static readonly TimeSpan ThunkDelay = TimeSpan.FromSeconds(2);
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
var userUid = args.User;
if (EntityManager.TryGetComponent(userUid, out HeatResistanceComponent? heatResist) &&
EntityManager.TryGetComponent(bulbUid.Value, out LightBulbComponent? lightBulb))
if (EntityManager.TryGetComponent(bulbUid.Value, out LightBulbComponent? lightBulb))
{
// 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
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

@ -47,7 +47,7 @@
- type: MeleeWeapon
hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
angle: 0
animation: WeaponArcClaw
damage:

View File

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

View File

@ -1,98 +1,22 @@
- type: entity
save: false
parent:
- BaseMob
- MobDamageable
- MobAtmosExposed
id: BaseSimpleMob
suffix: AI
abstract: true
components:
- type: LagCompensation
- type: Tag
tags:
- DoorBumpOpener
- type: Reactive
groups:
Flammable: [Touch]
Extinguish: [Touch]
Acidic: [Touch, Ingestion]
- type: InputMover
- type: MobMover
- type: Input
context: "human"
- type: Internals
- type: MovementSpeedModifier
baseWalkSpeed : 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
allowed:
- SlowedDown
@ -101,25 +25,19 @@
- ForcedSleep
- TemporaryBlindness
- 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: StandingState
- type: Alerts
- type: Tag
tags:
- DoorBumpOpener
- type: entity
save: false
abstract: true
parent: BaseSimpleMob
parent:
- BaseSimpleMob
- MobCombat
- MobBloodstream
- MobFlammable
id: SimpleSpaceMobBase # Mob without barotrauma, freezing and asphyxiation (for space carps!?)
suffix: AI
components:
@ -129,35 +47,11 @@
- type: HTN
rootTask:
task: IdleCompound
- type: SolutionContainerManager
- type: Bloodstream
bloodlossDamage:
types:
Bloodloss:
1
bloodlossHealDamage:
types:
Bloodloss:
-1
- type: CombatMode
- type: MeleeWeapon
hidden: true
angle: 0
animation: WeaponArcBite
damage:
groups:
Brute: 5
- type: Body
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: Flashable
- type: NameIdentifier
@ -171,14 +65,14 @@
- type: Perishable
- type: entity
save: false
abstract: true
parent:
- MobRespirator
- MobAtmosStandard
- SimpleSpaceMobBase
id: SimpleMobBase # for air breathers
parent: SimpleSpaceMobBase
suffix: AI
abstract: true
components:
- type: InputMover
- type: MobMover
- type: Hunger
thresholds: # only animals and rats are derived from this prototype so let's override it here and in rats' proto
Overfed: 100
@ -195,10 +89,6 @@
Parched: 50
Dead: 0
baseDecayRate: 0.04
- type: Barotrauma
damage:
types:
Blunt: 0.15 #per second, scales with pressure and other constants.
- type: StatusEffects
allowed:
- Stun
@ -210,32 +100,6 @@
- TemporaryBlindness
- Pacified
- 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
bloodMaxVolume: 150
- type: MobPrice

View File

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

View File

@ -1,7 +1,7 @@
- type: entity
save: false
name: Urist McWeb
parent: [BaseMobArachnid, BaseMob]
parent: BaseMobArachnid
id: MobArachnid
components:
- 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
save: false
name: Urist McPlants
parent: [BaseMobDiona, BaseMob]
parent: BaseMobDiona
id: MobDiona
components:
- type: Respirator

View File

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

View File

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

View File

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

View File

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

View File

@ -1,15 +1,20 @@
- type: entity
parent: BaseMob
id: MobObserver
name: observer
noSpawn: true
save: false
description: Boo!
noSpawn: true
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
maxZoom: 1.44,1.44
- type: MindContainer
- type: Clickable
- type: InteractionOutline
- type: Fixtures
fixtures:
fix1:
@ -19,8 +24,6 @@
density: 15
mask:
- GhostImpassable
- type: InputMover
- type: Appearance
- type: Eye
drawFov: false
- type: Input
@ -28,6 +31,10 @@
- type: Examiner
skipChecks: true
- type: Ghost
- type: MovementSpeedModifier
baseSprintSpeed: 12
baseWalkSpeed: 8
- type: MovementIgnoreGravity
- type: IntrinsicRadioReceiver
- type: ActiveRadio
channels:
@ -43,27 +50,13 @@
- Supply
- Syndicate
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
bodyType: KinematicController
bodyStatus: InAir
- type: CanMoveInAir
- type: Tag
tags:
- BypassInteractionRangeChecks
- BypassInteractionRangeChecks
- type: entity
id: ActionGhostBoo

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
- type: entity
save: false
name: Urist McWebs
parent: BaseMobOrganic
parent: BaseMobSpeciesOrganic
id: BaseMobArachnid
abstract: true
components:
@ -28,7 +28,7 @@
soundHit:
collection: AlienClaw
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
# Fun
- type: Sericulture
@ -46,10 +46,10 @@
damageOverlayGroups:
Brute:
sprite: Mobs/Effects/brute_damage.rsi
color: "#162581" # Why so blue?
color: "#162581"
- type: Speech
speechVerb: Arachnid
speechSounds: Arachnid # TODO: Abuse my mic more. Do that in a later PR.
speechSounds: Arachnid
- type: Vocal
sounds:
Male: UnisexArachnid
@ -111,12 +111,9 @@
visible: false
- type: entity
save: false
name: Urist McFluff
parent: MobHumanDummy
parent: BaseSpeciesDummy
id: MobArachnidDummy
noSpawn: true
description: A dummy arachnid meant to be used in character setup. # Hey! It's not dumb :(
components:
- type: HumanoidAppearance
species: Arachnid

View File

@ -1,12 +1,107 @@
# Anything human specific (e.g. UI, input) goes under MobHuman
- type: entity
save: false
name: Urist McHands
id: BaseMobOrganic
noSpawn: true
parent:
- BaseMob
- MobDamageable
- MobCombat
id: BaseMobSpecies
abstract: true
components:
- type: Sprite
layers:
- map: [ "enum.HumanoidVisualLayers.Chest" ]
- map: [ "enum.HumanoidVisualLayers.Head" ]
- map: [ "enum.HumanoidVisualLayers.Snout" ]
- map: [ "enum.HumanoidVisualLayers.Eyes" ]
- map: [ "enum.HumanoidVisualLayers.RArm" ]
- map: [ "enum.HumanoidVisualLayers.LArm" ]
- map: [ "enum.HumanoidVisualLayers.RLeg" ]
- map: [ "enum.HumanoidVisualLayers.LLeg" ]
- shader: StencilClear
sprite: Mobs/Species/Human/parts.rsi #PJB on stencil clear being on the left leg: "...this is 'fine'" -https://github.com/space-wizards/space-station-14/pull/12217#issuecomment-1291677115
# its fine, but its still very stupid that it has to be done like this instead of allowing sprites to just directly insert a stencil clear.
# sprite refactor when
state: l_leg
- shader: StencilMask
map: ["enum.HumanoidVisualLayers.StencilMask"]
sprite: Mobs/Customization/masking_helpers.rsi
state: unisex_full
visible: false
- map: ["jumpsuit"]
- map: ["enum.HumanoidVisualLayers.LFoot"]
- map: ["enum.HumanoidVisualLayers.RFoot"]
- map: ["enum.HumanoidVisualLayers.LHand"]
- map: ["enum.HumanoidVisualLayers.RHand"]
- map: [ "id" ]
- map: [ "gloves" ]
- map: [ "shoes" ]
- map: [ "ears" ]
- map: [ "outerClothing" ]
- map: [ "eyes" ]
- map: [ "belt" ]
- map: [ "neck" ]
- map: [ "back" ]
- map: [ "enum.HumanoidVisualLayers.FacialHair" ]
- map: [ "enum.HumanoidVisualLayers.Hair" ]
- map: [ "enum.HumanoidVisualLayers.HeadSide" ]
- map: [ "enum.HumanoidVisualLayers.HeadTop" ]
- map: [ "enum.HumanoidVisualLayers.Tail" ]
- map: [ "mask" ]
- map: [ "head" ]
- map: [ "pocket1" ]
- map: [ "pocket2" ]
- map: ["enum.HumanoidVisualLayers.Handcuffs"]
color: "#ffffff"
sprite: Objects/Misc/handcuffs.rsi
state: body-overlay-2
visible: false
- map: [ "clownedon" ] # Dynamically generated
sprite: "Effects/creampie.rsi"
state: "creampie_human"
visible: false
- type: DamageVisuals
thresholds: [ 20, 40, 100 ]
targetLayers:
- "enum.HumanoidVisualLayers.Chest"
- "enum.HumanoidVisualLayers.Head"
- "enum.HumanoidVisualLayers.LArm"
- "enum.HumanoidVisualLayers.LLeg"
- "enum.HumanoidVisualLayers.RArm"
- "enum.HumanoidVisualLayers.RLeg"
damageOverlayGroups:
Brute:
sprite: Mobs/Effects/brute_damage.rsi
color: "#FF0000"
Burn:
sprite: Mobs/Effects/burn_damage.rsi
- type: GenericVisualizer
visuals:
enum.CreamPiedVisuals.Creamed:
clownedon: # Not 'creampied' bc I can already see Skyrat complaining about conflicts.
True: {visible: true}
False: {visible: false}
- 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: LagCompensation
- type: RangedDamageSound
soundGroups:
Brute:
@ -16,11 +111,6 @@
Heat:
collection:
MeatLaserImpact
- type: Tag
tags:
- CanPilot
- FootstepSound
- DoorBumpOpener
- type: Reactive
groups:
Flammable: [ Touch ]
@ -31,230 +121,36 @@
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
noRot: true
drawdepth: Mobs
layers:
- map: [ "enum.HumanoidVisualLayers.Chest" ]
- map: [ "enum.HumanoidVisualLayers.Head" ]
- map: [ "enum.HumanoidVisualLayers.Snout" ]
- map: [ "enum.HumanoidVisualLayers.Eyes" ]
- map: [ "enum.HumanoidVisualLayers.RArm" ]
- map: [ "enum.HumanoidVisualLayers.LArm" ]
- map: [ "enum.HumanoidVisualLayers.RLeg" ]
- map: [ "enum.HumanoidVisualLayers.LLeg" ]
- shader: StencilClear
sprite: Mobs/Species/Human/parts.rsi #PJB on stencil clear being on the left leg: "...this is 'fine'" -https://github.com/space-wizards/space-station-14/pull/12217#issuecomment-1291677115
# its fine, but its still very stupid that it has to be done like this instead of allowing sprites to just directly insert a stencil clear.
# sprite refactor when
state: l_leg
- shader: StencilMask
map: ["enum.HumanoidVisualLayers.StencilMask"]
sprite: Mobs/Customization/masking_helpers.rsi
state: unisex_full
visible: false
- map: ["jumpsuit"]
- map: ["enum.HumanoidVisualLayers.LFoot"]
- map: ["enum.HumanoidVisualLayers.RFoot"]
- map: ["enum.HumanoidVisualLayers.LHand"]
- map: ["enum.HumanoidVisualLayers.RHand"]
- map: [ "id" ]
- map: [ "gloves" ]
- map: [ "shoes" ]
- map: [ "ears" ]
- map: [ "outerClothing" ]
- map: [ "eyes" ]
- map: [ "belt" ]
- map: [ "neck" ]
- map: [ "back" ]
- map: [ "enum.HumanoidVisualLayers.FacialHair" ]
- map: [ "enum.HumanoidVisualLayers.Hair" ]
- map: [ "enum.HumanoidVisualLayers.HeadSide" ]
- map: [ "enum.HumanoidVisualLayers.HeadTop" ]
- map: [ "enum.HumanoidVisualLayers.Tail" ]
- map: [ "mask" ]
- map: [ "head" ]
- map: [ "pocket1" ]
- map: [ "pocket2" ]
- map: ["enum.HumanoidVisualLayers.Handcuffs"]
color: "#ffffff"
sprite: Objects/Misc/handcuffs.rsi
state: body-overlay-2
visible: false
- map: [ "clownedon" ] # Dynamically generated
sprite: "Effects/creampie.rsi"
state: "creampie_human"
visible: false
- type: Physics
bodyType: KinematicController
- Stun
- KnockedDown
- SlowedDown
- Stutter
- SeeingRainbows
- Electrocution
- Drunk
- SlurredSpeech
- RatvarianLanguage
- PressureImmunity
- Muted
- ForcedSleep
- TemporaryBlindness
- Pacified
- StaminaModifier
- 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: Identity
- type: IdExaminable
- type: Hands
- 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
thresholds: [ 20, 40, 100 ]
targetLayers:
- "enum.HumanoidVisualLayers.Chest"
- "enum.HumanoidVisualLayers.Head"
- "enum.HumanoidVisualLayers.LArm"
- "enum.HumanoidVisualLayers.LLeg"
- "enum.HumanoidVisualLayers.RArm"
- "enum.HumanoidVisualLayers.RLeg"
damageOverlayGroups:
Brute:
sprite: Mobs/Effects/brute_damage.rsi
color: "#FF0000"
Burn:
sprite: Mobs/Effects/burn_damage.rsi
- type: Appearance
- type: GenericVisualizer
visuals:
enum.CreamPiedVisuals.Creamed:
clownedon: # Not 'creampied' bc I can already see Skyrat complaining about conflicts.
True: {visible: true}
False: {visible: false}
- type: RotationVisuals
- type: Inventory
- type: InventorySlots
- type: FloatingVisuals
- type: FireVisuals
sprite: Mobs/Effects/onfire.rsi
normalState: Generic_mob_burning
alternateState: Standing
fireStackAlternateState: 3
- type: CombatMode
canDisarm: true
- type: Climbing
- type: Cuffable
- type: Ensnareable
@ -262,6 +158,8 @@
state: icon
- type: AnimationPlayer
- type: Buckle
- type: CombatMode
canDisarm: true
- type: MeleeWeapon
hidden: true
soundHit:
@ -272,8 +170,22 @@
damage:
types:
Blunt: 5
- type: Pullable
- type: DoAfter
- type: SleepEmitSound
- 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: Stripping
- type: Strippable
@ -286,11 +198,6 @@
- key: enum.StrippingUiKey.Key
type: StrippableBoundUserInterface
- type: Puller
- type: Butcherable
butcheringType: Spike # TODO human.
spawned:
- id: FoodMeat
amount: 5
- type: Speech
speechSounds: Alto
- type: Vocal
@ -304,107 +211,147 @@
- type: Grammar
attributes:
proper: true
- type: StandingState
- type: Fingerprint
- type: Dna
- type: MobPrice
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.
- type: ContentEye
- type: SleepEmitSound
- type: SSDIndicator
- type: entity
save: false
name: Urist McHands
id: BaseMobOrganicDummy
parent:
- MobBloodstream
- MobRespirator
- MobAtmosStandard
- MobFlammable
- BaseMobSpecies
id: BaseMobSpeciesOrganic
abstract: true
description: A dummy human meant to be used in character setup.
components:
- type: Hands
- type: Inventory
- type: InventorySlots
- type: ContainerContainer
- type: Icon
- 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
components:
- type: Hands
- type: Inventory
- type: InventorySlots
- type: ContainerContainer
- type: Icon
sprite: Mobs/Species/Human/parts.rsi
state: full
- type: Sprite
drawdepth: Mobs
noRot: true
# TODO BODY Turn these into individual body parts?
layers:
- map: [ "enum.HumanoidVisualLayers.Chest" ]
- map: [ "enum.HumanoidVisualLayers.Head" ]
- map: [ "enum.HumanoidVisualLayers.Snout" ]
- map: [ "enum.HumanoidVisualLayers.Eyes" ]
- map: [ "enum.HumanoidVisualLayers.RArm" ]
- map: [ "enum.HumanoidVisualLayers.LArm" ]
- map: [ "enum.HumanoidVisualLayers.RLeg" ]
- map: [ "enum.HumanoidVisualLayers.LLeg" ]
- shader: StencilClear
sprite: Mobs/Species/Human/parts.rsi
state: full
- type: Sprite
drawdepth: Mobs
noRot: true
# TODO BODY Turn these into individual body parts?
layers:
- map: [ "enum.HumanoidVisualLayers.Chest" ]
- map: [ "enum.HumanoidVisualLayers.Head" ]
- map: [ "enum.HumanoidVisualLayers.Snout" ]
- map: [ "enum.HumanoidVisualLayers.Eyes" ]
- map: [ "enum.HumanoidVisualLayers.RArm" ]
- map: [ "enum.HumanoidVisualLayers.LArm" ]
- map: [ "enum.HumanoidVisualLayers.RLeg" ]
- map: [ "enum.HumanoidVisualLayers.LLeg" ]
- shader: StencilClear
sprite: Mobs/Species/Human/parts.rsi
state: l_leg
- shader: StencilMask
map: ["enum.HumanoidVisualLayers.StencilMask"]
sprite: Mobs/Customization/masking_helpers.rsi
state: unisex_full
visible: false
- map: ["jumpsuit"]
- map: ["enum.HumanoidVisualLayers.LFoot"]
- map: ["enum.HumanoidVisualLayers.RFoot"]
- map: ["enum.HumanoidVisualLayers.LHand"]
- map: ["enum.HumanoidVisualLayers.RHand"]
- map: ["enum.HumanoidVisualLayers.Handcuffs"]
color: "#ffffff"
sprite: Objects/Misc/handcuffs.rsi
state: body-overlay-2
visible: false
- map: [ "id" ]
- map: [ "gloves" ]
- map: [ "shoes" ]
- map: [ "ears" ]
- map: [ "outerClothing" ]
- map: [ "eyes" ]
- map: [ "belt" ]
- map: [ "neck" ]
- map: [ "back" ]
- map: [ "enum.HumanoidVisualLayers.FacialHair" ]
- map: [ "enum.HumanoidVisualLayers.Hair" ]
- map: [ "enum.HumanoidVisualLayers.HeadSide" ]
- map: [ "enum.HumanoidVisualLayers.HeadTop" ]
- map: [ "enum.HumanoidVisualLayers.Tail" ]
- map: [ "mask" ]
- map: [ "head" ]
- map: [ "pocket1" ]
- map: [ "pocket2" ]
- type: Physics
- 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
species: Human
- type: Body
prototype: Human
requiredLegs: 2
- type: Appearance
- type: Damageable
damageContainer: Biological
- type: MobState
- type: MobThresholds
thresholds:
0: Alive
100: Critical
200: Dead
- type: UserInterface
interfaces:
- key: enum.HumanoidMarkingModifierKey.Key # sure, this can go here too
type: HumanoidMarkingModifierBoundUserInterface
state: l_leg
- shader: StencilMask
map: ["enum.HumanoidVisualLayers.StencilMask"]
sprite: Mobs/Customization/masking_helpers.rsi
state: unisex_full
visible: false
- map: ["jumpsuit"]
- map: ["enum.HumanoidVisualLayers.LFoot"]
- map: ["enum.HumanoidVisualLayers.RFoot"]
- map: ["enum.HumanoidVisualLayers.LHand"]
- map: ["enum.HumanoidVisualLayers.RHand"]
- map: ["enum.HumanoidVisualLayers.Handcuffs"]
color: "#ffffff"
sprite: Objects/Misc/handcuffs.rsi
state: body-overlay-2
visible: false
- map: [ "id" ]
- map: [ "gloves" ]
- map: [ "shoes" ]
- map: [ "ears" ]
- map: [ "outerClothing" ]
- map: [ "eyes" ]
- map: [ "belt" ]
- map: [ "neck" ]
- map: [ "back" ]
- map: [ "enum.HumanoidVisualLayers.FacialHair" ]
- map: [ "enum.HumanoidVisualLayers.Hair" ]
- map: [ "enum.HumanoidVisualLayers.HeadSide" ]
- map: [ "enum.HumanoidVisualLayers.HeadTop" ]
- map: [ "enum.HumanoidVisualLayers.Tail" ]
- map: [ "mask" ]
- map: [ "head" ]
- map: [ "pocket1" ]
- map: [ "pocket2" ]
- type: Appearance
- type: HumanoidAppearance
species: Human
- type: Body
prototype: Human
requiredLegs: 2
- type: UserInterface
interfaces:
- key: enum.HumanoidMarkingModifierKey.Key # sure, this can go here too
type: HumanoidMarkingModifierBoundUserInterface

View File

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

View File

@ -1,7 +1,7 @@
- type: entity
save: false
name: Urist McHands The Dwarf
parent: BaseMobOrganic
parent: BaseMobSpeciesOrganic
id: BaseMobDwarf
abstract: true
components:
@ -12,7 +12,7 @@
Bloodloss: 0.5
- type: Thirst
- type: Icon
sprite: Mobs/Species/Slime/parts.rsi # It was like this beforehand, no idea why.
sprite: Mobs/Species/Slime/parts.rsi # It was like this beforehand, no idea why.
state: full
- type: Respirator
damage:
@ -58,14 +58,9 @@
- type: Perishable
- type: entity
save: false
name: Urist McHands
parent: MobHumanDummy
parent: BaseSpeciesDummy
id: MobDwarfDummy
noSpawn: true
description: A dummy human meant to be used in character setup.
components:
- type: Sprite
noRot: true
drawdepth: Mobs
scale: 1, 0.8

View File

@ -1,15 +1,15 @@
# Anything human specific (e.g. UI, input) goes under MobHuman
- type: entity
name: Urist McHands
parent: BaseMobOrganic
parent: BaseMobSpeciesOrganic
id: BaseMobHuman
name: Urist McHands
abstract: true
components:
- type: Hunger
starvationDamage:
types:
Cold: 0.5
Bloodloss: 0.5
Bloodloss: 0.5
- type: Icon # It will not have an icon in the adminspawn menu without this. Body parts seem fine for whatever reason.
sprite: Mobs/Species/Human/parts.rsi
state: full
@ -22,7 +22,6 @@
amount: 5
- type: entity
name: Urist McHands
parent: BaseSpeciesDummy
id: MobHumanDummy
parent: BaseMobOrganicDummy
noSpawn: true

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +1,5 @@
- type: entity
parent: BaseMobOrganic
parent: BaseMobSpeciesOrganic
id: BaseMobVox
abstract: true
components:
@ -109,13 +109,12 @@
Unsexed: UnisexVox
- type: entity
parent: BaseSpeciesDummy
id: MobVoxDummy
parent: MobHumanDummy
noSpawn: true
components:
- type: HumanoidAppearance
species: Vox
- type: Body
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