From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Fri, 15 Sep 2023 03:10:30 +0000 (-0400) Subject: Try and fix mob prototypes (#19859) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=c34913b227369145e7395a207ac282de922562e8;p=space-station-14.git Try and fix mob prototypes (#19859) Co-authored-by: DrSmugleaf --- diff --git a/Content.Server/Light/EntitySystems/PoweredLightSystem.cs b/Content.Server/Light/EntitySystems/PoweredLightSystem.cs index eb079ebbb6..69d9b66955 100644 --- a/Content.Server/Light/EntitySystems/PoweredLightSystem.cs +++ b/Content.Server/Light/EntitySystems/PoweredLightSystem.cs @@ -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(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 index 3847d8a859..0000000000 --- a/Content.Server/Temperature/Components/HeatResistanceComponent.cs +++ /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().TryGetSlotEntity(Owner, "gloves", out var slotEntity) && - IoCManager.Resolve().TryGetComponent(slotEntity, out var gloves)) - { - return gloves.HeatResistance; - } - return int.MinValue; - } - } -} diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/flesh.yml b/Resources/Prototypes/Entities/Mobs/NPCs/flesh.yml index decbe3020d..43c78c639e 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/flesh.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/flesh.yml @@ -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: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml index 7ce409325c..866e15735f 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml @@ -34,7 +34,6 @@ density: 80 mask: - GhostImpassable - - type: HeatResistance - type: MovementIgnoreGravity - type: Damageable damageContainer: Biological diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml b/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml index 1cf56769c6..fb9cedbe11 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 47baef63d0..851ddacdda 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml index e303b4c4c7..d9dea3c18d 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml @@ -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 index d39458bd79..0000000000 --- a/Resources/Prototypes/Entities/Mobs/Player/base.yml +++ /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 diff --git a/Resources/Prototypes/Entities/Mobs/Player/diona.yml b/Resources/Prototypes/Entities/Mobs/Player/diona.yml index 1066f44228..4e7bd7e0c9 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/diona.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/diona.yml @@ -1,7 +1,7 @@ - type: entity save: false name: Urist McPlants - parent: [BaseMobDiona, BaseMob] + parent: BaseMobDiona id: MobDiona components: - type: Respirator diff --git a/Resources/Prototypes/Entities/Mobs/Player/dwarf.yml b/Resources/Prototypes/Entities/Mobs/Player/dwarf.yml index 94b240e501..d1de65df01 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/dwarf.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/dwarf.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml index a6c65c8f05..49c3175fc6 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/guardian.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/guardian.yml @@ -72,7 +72,6 @@ - type: MobState allowedStates: - Alive - - type: HeatResistance - type: CombatMode - type: Internals - type: Examiner diff --git a/Resources/Prototypes/Entities/Mobs/Player/human.yml b/Resources/Prototypes/Entities/Mobs/Player/human.yml index 5d26e155e9..f04e4bce04 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/human.yml @@ -1,7 +1,7 @@ - type: entity save: false name: Urist McHands - parent: [BaseMobHuman, BaseMob] + parent: BaseMobHuman id: MobHuman #Syndie diff --git a/Resources/Prototypes/Entities/Mobs/Player/moth.yml b/Resources/Prototypes/Entities/Mobs/Player/moth.yml index 0a64385419..ea01677626 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/moth.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/moth.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index cca1f0ae56..6e4839c5d9 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Player/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Player/reptilian.yml index d3cbe11b49..b9f265e0bc 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/reptilian.yml @@ -1,7 +1,7 @@ - type: entity save: false name: Urisst' Mzhand - parent: [BaseMobReptilian, BaseMob] + parent: BaseMobReptilian id: MobReptilian #Weh diff --git a/Resources/Prototypes/Entities/Mobs/Player/skeleton.yml b/Resources/Prototypes/Entities/Mobs/Player/skeleton.yml index 82fff045d9..d49ea2fd3f 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/skeleton.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/skeleton.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Player/slime.yml b/Resources/Prototypes/Entities/Mobs/Player/slime.yml index 6763a7dbb2..4e5974b308 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/slime.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/slime.yml @@ -1,4 +1,4 @@ - type: entity save: false - parent: [BaseMobSlimePerson, BaseMob] - id: MobSlimePerson \ No newline at end of file + parent: BaseMobSlimePerson + id: MobSlimePerson diff --git a/Resources/Prototypes/Entities/Mobs/Player/vox.yml b/Resources/Prototypes/Entities/Mobs/Player/vox.yml index 1e1883b8f7..de1e3da2be 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/vox.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/vox.yml @@ -1,5 +1,5 @@ - type: entity save: false name: Vox - parent: [BaseMobVox, BaseMob] + parent: BaseMobVox id: MobVox diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml index a835c289cc..4d07970947 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index 464e8b510b..551897396f 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Species/diona.yml b/Resources/Prototypes/Entities/Mobs/Species/diona.yml index fa5a5b5e18..d7366ae3b0 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/diona.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/diona.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml index 48e8dc6235..47f9f8be9d 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index 3e7a43520e..990097c396 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Species/moth.yml b/Resources/Prototypes/Entities/Mobs/Species/moth.yml index 9efbc932e4..ce757b0fb4 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/moth.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/moth.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml index caa71fe135..58824629cb 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml @@ -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. diff --git a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml index e2a4257bef..5bdc6f1d58 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/skeleton.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Species/slime.yml b/Resources/Prototypes/Entities/Mobs/Species/slime.yml index bdd5adf3bf..7b33d51208 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/slime.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/slime.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/Species/vox.yml b/Resources/Prototypes/Entities/Mobs/Species/vox.yml index be6e170c41..17dd70ada6 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/vox.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/vox.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Mobs/base.yml b/Resources/Prototypes/Entities/Mobs/base.yml new file mode 100644 index 0000000000..5d1b6adbb1 --- /dev/null +++ b/Resources/Prototypes/Entities/Mobs/base.yml @@ -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