]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Try and fix mob prototypes (#19859)
authorNemanja <98561806+EmoGarbage404@users.noreply.github.com>
Fri, 15 Sep 2023 03:10:30 +0000 (23:10 -0400)
committerGitHub <noreply@github.com>
Fri, 15 Sep 2023 03:10:30 +0000 (20:10 -0700)
Co-authored-by: DrSmugleaf <drsmugleaf@gmail.com>
29 files changed:
Content.Server/Light/EntitySystems/PoweredLightSystem.cs
Content.Server/Temperature/Components/HeatResistanceComponent.cs [deleted file]
Resources/Prototypes/Entities/Mobs/NPCs/flesh.yml
Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml
Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml
Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml
Resources/Prototypes/Entities/Mobs/Player/arachnid.yml
Resources/Prototypes/Entities/Mobs/Player/base.yml [deleted file]
Resources/Prototypes/Entities/Mobs/Player/diona.yml
Resources/Prototypes/Entities/Mobs/Player/dwarf.yml
Resources/Prototypes/Entities/Mobs/Player/guardian.yml
Resources/Prototypes/Entities/Mobs/Player/human.yml
Resources/Prototypes/Entities/Mobs/Player/moth.yml
Resources/Prototypes/Entities/Mobs/Player/observer.yml
Resources/Prototypes/Entities/Mobs/Player/reptilian.yml
Resources/Prototypes/Entities/Mobs/Player/skeleton.yml
Resources/Prototypes/Entities/Mobs/Player/slime.yml
Resources/Prototypes/Entities/Mobs/Player/vox.yml
Resources/Prototypes/Entities/Mobs/Species/arachnid.yml
Resources/Prototypes/Entities/Mobs/Species/base.yml
Resources/Prototypes/Entities/Mobs/Species/diona.yml
Resources/Prototypes/Entities/Mobs/Species/dwarf.yml
Resources/Prototypes/Entities/Mobs/Species/human.yml
Resources/Prototypes/Entities/Mobs/Species/moth.yml
Resources/Prototypes/Entities/Mobs/Species/reptilian.yml
Resources/Prototypes/Entities/Mobs/Species/skeleton.yml
Resources/Prototypes/Entities/Mobs/Species/slime.yml
Resources/Prototypes/Entities/Mobs/Species/vox.yml
Resources/Prototypes/Entities/Mobs/base.yml [new file with mode: 0644]

index eb079ebbb657b2ac5bb7a26cb034fd77775815a1..69d9b669557bf2da58b994516f037e5b7fefe382 100644 (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;
diff --git a/Content.Server/Temperature/Components/HeatResistanceComponent.cs b/Content.Server/Temperature/Components/HeatResistanceComponent.cs
deleted file mode 100644 (file)
index 3847d8a..0000000
+++ /dev/null
@@ -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;
-        }
-    }
-}
index decbe3020dfd0e2ca05857170a24fa9b5231c62a..43c78c639eb189f219c9d55e79cae1d1d28cc82b 100644 (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:
index 7ce409325c6eb86171d0b6f111dbbd41b52e9ab0..866e15735fe843bb6216ada22463571d7334f5bc 100644 (file)
@@ -34,7 +34,6 @@
         density: 80
         mask:
         - GhostImpassable
-  - type: HeatResistance
   - type: MovementIgnoreGravity
   - type: Damageable
     damageContainer: Biological
index 1cf56769c61177dd9d48ca90646d81d2950a37d1..fb9cedbe1104dcb130881acff61b3734fb6543c7 100644 (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
     - 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:
   - 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
   - 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
       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
       - 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
index 47baef63d011542ac280dbf79231fc1884b4de82..851ddacdda28a5cb90ba27f392721e34970ebdea 100644 (file)
@@ -1,6 +1,5 @@
 - type: entity
   parent: MobObserver
-  save: false
   id: AdminObserver
   name: admin observer
   noSpawn: true
     canInteract: true
   - type: Hands
   - type: Puller
-  - type: DoAfter
   - type: CombatMode
-  - type: Actions
-  - type: InputMover
   - type: Physics
     ignorePaused: true
     bodyType: Kinematic
index e303b4c4c7bf9577ae6ff1bffc7edee34de135d2..d9dea3c18d9880a3fbdc83b847d9edf4b2a34ba3 100644 (file)
@@ -1,7 +1,7 @@
 - type: entity
   save: false
   name: Urist McWeb
-  parent: [BaseMobArachnid, BaseMob]
+  parent: BaseMobArachnid
   id: MobArachnid
   components:
   - type: Respirator
diff --git a/Resources/Prototypes/Entities/Mobs/Player/base.yml b/Resources/Prototypes/Entities/Mobs/Player/base.yml
deleted file mode 100644 (file)
index d39458b..0000000
+++ /dev/null
@@ -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
index 1066f4422819cd222e3dcde6c097e6fdc55aa149..4e7bd7e0c98875f85e88e4a148c796c9cb7ff7c0 100644 (file)
@@ -1,7 +1,7 @@
 - type: entity
   save: false
   name: Urist McPlants
-  parent: [BaseMobDiona, BaseMob]
+  parent: BaseMobDiona
   id: MobDiona
   components:
     - type: Respirator
index 94b240e501116923e4d76ed567682d75c7b5a389..d1de65df012cfc277a7324b7add78c59ee930018 100644 (file)
@@ -1,5 +1,5 @@
 - type: entity
   save: false
   name: Urist McHands The Dwarf
-  parent: [BaseMobDwarf, BaseMob]
-  id: MobDwarf
\ No newline at end of file
+  parent: BaseMobDwarf
+  id: MobDwarf
index a6c65c8f05806a88e6141ae107271e527decb65d..49c3175fc6bed7d1bf25b182004afa6b4b694b16 100644 (file)
@@ -72,7 +72,6 @@
     - type: MobState
       allowedStates:
         - Alive
-    - type: HeatResistance
     - type: CombatMode
     - type: Internals
     - type: Examiner
index 5d26e155e95a37656bafa1d322919b07610abba1..f04e4bce04faed4b6f5d7f787034b8a6f561c3c8 100644 (file)
@@ -1,7 +1,7 @@
 - type: entity
   save: false
   name: Urist McHands
-  parent: [BaseMobHuman, BaseMob]
+  parent: BaseMobHuman
   id: MobHuman
 
 #Syndie
index 0a64385419d7975cdeeab7a5e32fd9826522d052..ea01677626de4f63bdf753dd021ccc4b496f3973 100644 (file)
@@ -1,5 +1,5 @@
 - type: entity
   save: false
   name: Urist McFluff
-  parent: [BaseMobMoth, BaseMob]
-  id: MobMoth 
\ No newline at end of file
+  parent: BaseMobMoth
+  id: MobMoth
index cca1f0ae5633e252d910291a92216b2207945715..6e4839c5d9cddd4823ef54c849cecc0d86122a8a 100644 (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
   - type: Examiner
     skipChecks: true
   - type: Ghost
+  - type: MovementSpeedModifier
+    baseSprintSpeed: 12
+    baseWalkSpeed: 8
+  - type: MovementIgnoreGravity
   - type: IntrinsicRadioReceiver
   - type: ActiveRadio
     channels:
     - 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
index d3cbe11b49431c96a3aadd97437943b0ac9dda48..b9f265e0bcfd316ffdf849bee21e74211d159e82 100644 (file)
@@ -1,7 +1,7 @@
 - type: entity
   save: false
   name: Urisst' Mzhand
-  parent: [BaseMobReptilian, BaseMob]
+  parent: BaseMobReptilian
   id: MobReptilian
 
 #Weh
index 82fff045d917ecc0963c1735490f10827fade375..d49ea2fd3f14a923835d435d9631aa504f66583f 100644 (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
index 6763a7dbb2f1fa5cba03cf788247f420763eefef..4e5974b3084ff442a6427c6b4d72f368392a895c 100644 (file)
@@ -1,4 +1,4 @@
 - type: entity
   save: false
-  parent: [BaseMobSlimePerson, BaseMob]
-  id: MobSlimePerson
\ No newline at end of file
+  parent: BaseMobSlimePerson
+  id: MobSlimePerson
index 1e1883b8f768ed3eb910975f4871c97f5eac8acf..de1e3da2be77778a8c362dc1a88e237ec58adad8 100644 (file)
@@ -1,5 +1,5 @@
 - type: entity
   save: false
   name: Vox
-  parent: [BaseMobVox, BaseMob]
+  parent: BaseMobVox
   id: MobVox
index a835c289cc032d9503998cc502424393146a73a9..4d07970947bec9fa3825c021f5cd643d43562856 100644 (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
     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
         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
index 464e8b510bfb3e398273940e7eb0e641ec121dcb..551897396fb98f0438beb3bd519d004dc233d257 100644 (file)
-# 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:
       Heat:
         collection:
           MeatLaserImpact
-  - type: Tag
-    tags:
-    - CanPilot
-    - FootstepSound
-    - DoorBumpOpener
   - type: Reactive
     groups:
       Flammable: [ Touch ]
       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
     state: icon
   - type: AnimationPlayer
   - type: Buckle
+  - type: CombatMode
+    canDisarm: true
   - type: MeleeWeapon
     hidden: true
     soundHit:
     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
       - 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
   - 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
index fa5a5b5e18a1e4d6a096797e8dc1f8114e922e60..d7366ae3b0871d563a72f006ae314c19264253b1 100644 (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
   - 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
index 48e8dc62350a5a48ddf4f75489e69a830788ef5d..47f9f8be9d796b2b1a5d70e5e911aab336e1e5ec 100644 (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:
   - 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
index 3e7a43520efb731d283d9cf9f1dfb135dbf1d83b..990097c396a5ff0aa2e14cb39a4c764d3da05364 100644 (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
index 9efbc932e4892d7e1f103a954efb9e7af11d1ee6..ce757b0fb4b5515b3db3134694926f698bddb116 100644 (file)
@@ -1,7 +1,7 @@
 - type: entity
   save: false
   name: Urist McFluff
-  parent: BaseMobOrganic
+  parent: BaseMobSpeciesOrganic
   id: BaseMobMoth
   abstract: true
   components:
         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
index caa71fe1354bd3b16de7bcb12cfae4597faece8f..58824629cb37297c99b9049adf4593aa358261b5 100644 (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.
index e2a4257bef3d10a8315e363adf28e46bf3cd9092..5bdc6f1d5896854b5f85876e12a3d73fc36462b3 100644 (file)
@@ -1,7 +1,7 @@
 - type: entity
   save: false
   name: Urist McSkelly
-  parent: BaseMobOrganic
+  parent: BaseMobSpeciesOrganic
   id: BaseMobSkeletonPerson
   abstract: true
   components:
           - 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
index bdd5adf3bf6ba517344f7231c050e3824e986a57..7b33d51208bc994130aef1b49c1af7ce103c19f4 100644 (file)
@@ -1,6 +1,6 @@
 - type: entity
   name: Urist McSlime
-  parent: BaseMobOrganic
+  parent: BaseMobSpeciesOrganic
   id: BaseMobSlimePerson
   abstract: true
   components:
     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
index be6e170c41375192339112a7ff3a0bb0f4f927b5..17dd70ada6b02ff072d3d23f2ee82cad82066e12 100644 (file)
@@ -1,5 +1,5 @@
 - type: entity
-  parent: BaseMobOrganic
+  parent: BaseMobSpeciesOrganic
   id: BaseMobVox
   abstract: true
   components:
       Unsexed: UnisexVox
 
 - type: entity
+  parent: BaseSpeciesDummy
   id: MobVoxDummy
-  parent: MobHumanDummy
   noSpawn: true
   components:
   - type: HumanoidAppearance
     species: Vox
   - type: Body
     prototype: Vox
-    requiredLegs: 2
 
diff --git a/Resources/Prototypes/Entities/Mobs/base.yml b/Resources/Prototypes/Entities/Mobs/base.yml
new file mode 100644 (file)
index 0000000..5d1b6ad
--- /dev/null
@@ -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