diff --git a/Content.Server/Nutrition/Components/FoodComponent.cs b/Content.Server/Nutrition/Components/FoodComponent.cs
index f6a74f109b..61709e616d 100644
--- a/Content.Server/Nutrition/Components/FoodComponent.cs
+++ b/Content.Server/Nutrition/Components/FoodComponent.cs
@@ -36,14 +36,11 @@ namespace Content.Server.Nutrition.Components
public bool UtensilRequired = false;
///
- /// If this is set to true, eating this food will require you to have a stomach with a
+ /// If this is set to true, food can only be eaten if you have a stomach with a
/// that includes this entity in its whitelist,
/// rather than just being digestible by anything that can eat food.
+ /// Whitelist the food component to allow eating of normal food.
///
- ///
- /// TODO think about making this a little more complex, right now you cant disallow mobs from eating stuff
- /// that everyone else can eat
- ///
[DataField("requiresSpecialDigestion")]
public bool RequiresSpecialDigestion = false;
diff --git a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs
index c875bfaf8b..a65f6cdd3d 100644
--- a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs
+++ b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs
@@ -27,6 +27,7 @@ using Content.Shared.Stacks;
using Robust.Shared.Audio;
using Robust.Shared.Player;
using Robust.Shared.Utility;
+using Content.Shared.Tag;
namespace Content.Server.Nutrition.EntitySystems
{
@@ -50,6 +51,7 @@ namespace Content.Server.Nutrition.EntitySystems
[Dependency] private readonly ReactiveSystem _reaction = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly StackSystem _stack = default!;
+ [Dependency] private readonly TagSystem _tags = default!;
public const float MaxFeedDistance = 1.0f;
@@ -107,6 +109,7 @@ namespace Content.Server.Nutrition.EntitySystems
var forceFeed = user != target;
+ // Check for special digestibles
if (!IsDigestibleBy(food, foodComp, stomachs))
{
_popupSystem.PopupEntity(
@@ -367,28 +370,33 @@ namespace Content.Server.Nutrition.EntitySystems
}
///
- /// Returns true if has a that is capable of
- /// digesting this (or if they even have enough stomachs in the first place).
+ /// Returns true if has a that whitelists
+ /// this (or if they even have enough stomachs in the first place).
///
private bool IsDigestibleBy(EntityUid food, FoodComponent component, List<(StomachComponent, OrganComponent)> stomachs)
{
var digestible = true;
+ // Does the mob have enough stomachs?
if (stomachs.Count < component.RequiredStomachs)
return false;
- if (!component.RequiresSpecialDigestion)
- return true;
-
+ // Run through the mobs' stomachs
foreach (var (comp, _) in stomachs)
{
+ // Find a stomach with a SpecialDigestible
if (comp.SpecialDigestible == null)
continue;
-
- if (!comp.SpecialDigestible.IsValid(food, EntityManager))
- return false;
+ // Check if the food is in the whitelist
+ if (comp.SpecialDigestible.IsValid(food, EntityManager))
+ return true;
+ // They can only eat whitelist food and the food isn't in the whitelist. It's not edible.
+ return false;
}
+ if (component.RequiresSpecialDigestion)
+ return false;
+
return digestible;
}
diff --git a/Resources/Audio/Voice/Moth/attributions.yml b/Resources/Audio/Voice/Moth/attributions.yml
new file mode 100644
index 0000000000..a705c4d00b
--- /dev/null
+++ b/Resources/Audio/Voice/Moth/attributions.yml
@@ -0,0 +1,9 @@
+- files: ["moth_scream.ogg"]
+ license: "CC-BY-SA-3.0"
+ copyright: "Taken from https://github.com/tgstation/tgstation/commit/31c19654e0f641166ecd80c672ea05362fd19488"
+ source: "https://github.com/tgstation/tgstation/commits/master/sound/voice/moth/scream_moth.ogg"
+
+- files: ["moth_laugh.ogg, moth_chitter.ogg"]
+ license: "CC-BY-SA-3.0"
+ copyright: "Taken from https://github.com/BeeStation/BeeStation-Hornet/commit/11ba3fa04105c93dd96a63ad4afaef4b20c02d0d"
+ source: "https://github.com/BeeStation/BeeStation-Hornet/blob/11ba3fa04105c93dd96a63ad4afaef4b20c02d0d/sound/emotes/"
\ No newline at end of file
diff --git a/Resources/Audio/Voice/Moth/moth_chitter.ogg b/Resources/Audio/Voice/Moth/moth_chitter.ogg
new file mode 100644
index 0000000000..b7240a5653
Binary files /dev/null and b/Resources/Audio/Voice/Moth/moth_chitter.ogg differ
diff --git a/Resources/Audio/Voice/Moth/moth_laugh.ogg b/Resources/Audio/Voice/Moth/moth_laugh.ogg
new file mode 100644
index 0000000000..d3c2865ab6
Binary files /dev/null and b/Resources/Audio/Voice/Moth/moth_laugh.ogg differ
diff --git a/Resources/Audio/Voice/Moth/moth_scream.ogg b/Resources/Audio/Voice/Moth/moth_scream.ogg
new file mode 100644
index 0000000000..482086fb63
Binary files /dev/null and b/Resources/Audio/Voice/Moth/moth_scream.ogg differ
diff --git a/Resources/Locale/en-US/markings/moth.ftl b/Resources/Locale/en-US/markings/moth.ftl
new file mode 100644
index 0000000000..99723c9e16
--- /dev/null
+++ b/Resources/Locale/en-US/markings/moth.ftl
@@ -0,0 +1,5 @@
+marking-MothAntennasDefault = Antennas (Default)
+marking-MothWingsDefault = Wings (Default)
+marking-MothWingsLook1 = Wings (Pointy)
+marking-MothWingsLook2 = Wings (Swirly)
+marking-MothWingsLook3 = Wings (Dotted)
\ No newline at end of file
diff --git a/Resources/Locale/en-US/nutrition/components/food-component.ftl b/Resources/Locale/en-US/nutrition/components/food-component.ftl
index bd5766cc0a..4b4f0d29d8 100644
--- a/Resources/Locale/en-US/nutrition/components/food-component.ftl
+++ b/Resources/Locale/en-US/nutrition/components/food-component.ftl
@@ -6,6 +6,7 @@ food-you-need-to-hold-utensil = You need to be holding a {$utensil} to eat that!
food-nom = Nom. {$flavors}
food-swallow = You swallow the {$food}. {$flavors}
+food-repulsing = This looks repulsing.
food-system-remove-mask = You need to take off the {$entity} first.
diff --git a/Resources/Locale/en-US/species/species.ftl b/Resources/Locale/en-US/species/species.ftl
index e8ef59599a..2f01ae54c0 100644
--- a/Resources/Locale/en-US/species/species.ftl
+++ b/Resources/Locale/en-US/species/species.ftl
@@ -6,3 +6,4 @@ species-name-reptilian = Reptilian
species-name-slime = Slime Person
species-name-diona = Diona
species-name-arachnid = Arachnid
+species-name-moth = Moth Person
\ No newline at end of file
diff --git a/Resources/Prototypes/Body/Organs/arachnid.yml b/Resources/Prototypes/Body/Organs/arachnid.yml
index ceb8242283..d21a2c1763 100644
--- a/Resources/Prototypes/Body/Organs/arachnid.yml
+++ b/Resources/Prototypes/Body/Organs/arachnid.yml
@@ -45,7 +45,6 @@
layers:
- state: lung-l
- state: lung-r
- - type: Organ
- type: Lung
- type: Metabolizer
updateFrequency: 1.5
@@ -74,7 +73,6 @@
components:
- type: Sprite
state: heart-on
- - type: Organ
- type: Metabolizer
updateFrequency: 1.5
maxReagents: 2
@@ -93,7 +91,6 @@
components:
- type: Sprite
state: liver
- - type: Organ
- type: Metabolizer # The liver metabolizes certain chemicals only, like alcohol.
updateFrequency: 1.5
maxReagents: 1
@@ -113,7 +110,6 @@
layers:
- state: kidney-l
- state: kidney-r
- - type: Organ
# The kidneys just remove anything that doesn't currently have any metabolisms, as a stopgap.
- type: Metabolizer
updateFrequency: 1.5
@@ -131,7 +127,6 @@
layers:
- state: eyeball-l
- state: eyeball-r
- - type: Organ
- type: entity
id: OrganArachnidTongue
@@ -141,4 +136,3 @@
components:
- type: Sprite
state: tongue
- - type: Organ
diff --git a/Resources/Prototypes/Body/Organs/diona.yml b/Resources/Prototypes/Body/Organs/diona.yml
index f8322d4024..3da64f3bbd 100644
--- a/Resources/Prototypes/Body/Organs/diona.yml
+++ b/Resources/Prototypes/Body/Organs/diona.yml
@@ -19,16 +19,12 @@
- type: entity
id: OrganDionaBrain
- parent: BaseDionaOrgan
+ parent: [BaseDionaOrgan, OrganHumanBrain]
name: brain
description: "The source of incredible, unending intelligence. Honk."
components:
- type: Sprite
state: brain
- - type: Organ
- - type: Input
- context: "ghost"
- - type: InputMover
- type: SolutionContainerManager
solutions:
organ:
@@ -60,7 +56,6 @@
layers:
- state: eyeball-l
- state: eyeball-r
- - type: Organ
- type: entity
id: OrganDionaStomach
@@ -70,7 +65,6 @@
components:
- type: Sprite
state: stomach
- - type: Organ
- type: SolutionContainerManager
solutions:
stomach:
diff --git a/Resources/Prototypes/Body/Organs/human.yml b/Resources/Prototypes/Body/Organs/human.yml
index 1a45865bf7..9c03768856 100644
--- a/Resources/Prototypes/Body/Organs/human.yml
+++ b/Resources/Prototypes/Body/Organs/human.yml
@@ -40,7 +40,6 @@
layers:
- state: eyeball-l
- state: eyeball-r
- - type: Organ
- type: entity
id: OrganHumanTongue
@@ -50,7 +49,6 @@
components:
- type: Sprite
state: tongue
- - type: Organ
- type: entity
id: OrganHumanAppendix
@@ -62,7 +60,6 @@
- state: appendix
- state: appendix-inflamed
visible: false
- - type: Organ
- type: entity
id: OrganHumanEars
@@ -72,7 +69,6 @@
components:
- type: Sprite
state: ears
- - type: Organ
- type: entity
id: OrganHumanLungs
@@ -84,7 +80,6 @@
layers:
- state: lung-l
- state: lung-r
- - type: Organ
- type: Lung
- type: Metabolizer
removeEmpty: true
@@ -112,7 +107,6 @@
components:
- type: Sprite
state: heart-on
- - type: Organ
# The heart 'metabolizes' medicines and poisons that aren't filtered out by other organs.
# This is done because these chemicals need to have some effect even if they aren't being filtered out of your body.
# You're technically 'immune to poison' without a heart, but.. uhh, you'll have bigger problems on your hands.
@@ -132,7 +126,6 @@
components:
- type: Sprite
state: stomach
- - type: Organ
- type: SolutionContainerManager
solutions:
stomach:
@@ -157,7 +150,6 @@
components:
- type: Sprite
state: liver
- - type: Organ
- type: Metabolizer # The liver metabolizes certain chemicals only, like alcohol.
maxReagents: 1
metabolizerTypes: [Human]
@@ -175,7 +167,6 @@
layers:
- state: kidney-l
- state: kidney-r
- - type: Organ
# The kidneys just remove anything that doesn't currently have any metabolisms, as a stopgap.
- type: Metabolizer
maxReagents: 5
diff --git a/Resources/Prototypes/Body/Organs/moth.yml b/Resources/Prototypes/Body/Organs/moth.yml
new file mode 100644
index 0000000000..ba40b38aad
--- /dev/null
+++ b/Resources/Prototypes/Body/Organs/moth.yml
@@ -0,0 +1,20 @@
+- type: entity
+ id: OrganMothStomach
+ parent: [OrganAnimalStomach, OrganHumanStomach]
+ noSpawn: true
+ components:
+ - type: Stomach
+ specialDigestible:
+ tags:
+ - ClothMade
+ - type: SolutionContainerManager
+ solutions:
+ stomach:
+ maxVol: 50
+ - type: Metabolizer
+ maxReagents: 6
+ metabolizerTypes: [ Plant ]
+ removeEmpty: true
+ groups:
+ - id: Food
+ - id: Drink
diff --git a/Resources/Prototypes/Body/Organs/slime.yml b/Resources/Prototypes/Body/Organs/slime.yml
index 7bb91b18b5..3b78b4f4e3 100644
--- a/Resources/Prototypes/Body/Organs/slime.yml
+++ b/Resources/Prototypes/Body/Organs/slime.yml
@@ -1,14 +1,9 @@
- type: entity
id: SentientSlimeCore
- parent: BaseItem
+ parent: [BaseItem, OrganHumanBrain]
name: sentient slime core
description: "The source of incredible, unending gooeyness."
components:
- - type: Sprite
- sprite: Mobs/Species/Human/organs.rsi
- state: brain
- - type: Organ
- - type: Brain
- type: Stomach
- type: Metabolizer
maxReagents: 6
@@ -38,7 +33,6 @@
layers:
- state: lung-l
- state: lung-r
- - type: Organ
- type: Lung
- type: Metabolizer
removeEmpty: true
diff --git a/Resources/Prototypes/Body/Parts/arachnid.yml b/Resources/Prototypes/Body/Parts/arachnid.yml
index 0917795624..dbb656cc18 100644
--- a/Resources/Prototypes/Body/Parts/arachnid.yml
+++ b/Resources/Prototypes/Body/Parts/arachnid.yml
@@ -2,17 +2,10 @@
# TODO BODY: Part damage
- type: entity
id: PartArachnid
- parent: BaseItem
+ parent: [BaseItem, BasePart]
name: "arachnid body part"
abstract: true
components:
- - type: Damageable
- damageContainer: Biological
- - type: BodyPart
- - type: ContainerContainer
- containers:
- bodypart: !type:Container
- ents: []
- type: Extractable
juiceSolution:
reagents:
@@ -24,16 +17,11 @@
- type: entity
id: TorsoArachnid
name: "arachnid torso"
- parent: PartArachnid
+ parent: [PartArachnid, BaseTorso]
components:
- type: Sprite
sprite: Mobs/Species/Arachnid/parts.rsi
state: "torso_m"
- - type: Icon
- sprite: Mobs/Species/Arachnid/parts.rsi
- state: "torso_m"
- - type: BodyPart
- partType: Torso
- type: Extractable
juiceSolution:
reagents:
@@ -45,27 +33,11 @@
- type: entity
id: HeadArachnid
name: "arachnid head"
- parent: PartArachnid
+ parent: [PartArachnid, BaseHead]
components:
- type: Sprite
sprite: Mobs/Species/Arachnid/parts.rsi
state: "head_m"
- - type: Icon
- sprite: Mobs/Species/Arachnid/parts.rsi
- state: "head_m"
- - type: BodyPart
- partType: Head
- vital: true
- - type: Input
- context: "ghost"
- - type: MovementSpeedModifier
- baseWalkSpeed: 0
- baseSprintSpeed: 0
- - type: InputMover
- - type: GhostOnMove
- - type: Tag
- tags:
- - Head
- type: Extractable
juiceSolution:
reagents:
@@ -77,77 +49,47 @@
- type: entity
id: LeftArmArachnid
name: "left arachnid arm"
- parent: PartArachnid
+ parent: [PartArachnid, BaseLeftArm]
components:
- type: Sprite
sprite: Mobs/Species/Arachnid/parts.rsi
state: "l_arm"
- - type: Icon
- sprite: Mobs/Species/Arachnid/parts.rsi
- state: "l_arm"
- - type: BodyPart
- partType: Arm
- symmetry: Left
- type: entity
id: RightArmArachnid
name: "right arachnid arm"
- parent: PartArachnid
+ parent: [PartArachnid, BaseRightArm]
components:
- type: Sprite
sprite: Mobs/Species/Arachnid/parts.rsi
state: "r_arm"
- - type: Icon
- sprite: Mobs/Species/Arachnid/parts.rsi
- state: "r_arm"
- - type: BodyPart
- partType: Arm
- symmetry: Right
- type: entity
id: LeftHandArachnid
name: "left arachnid hand"
- parent: PartArachnid
+ parent: [PartArachnid, BaseLeftHand]
components:
- type: Sprite
sprite: Mobs/Species/Arachnid/parts.rsi
state: "l_hand"
- - type: Icon
- sprite: Mobs/Species/Arachnid/parts.rsi
- state: "l_hand"
- - type: BodyPart
- partType: Hand
- symmetry: Left
- type: entity
id: RightHandArachnid
name: "right arachnid hand"
- parent: PartArachnid
+ parent: [PartArachnid, BaseRightHand]
components:
- type: Sprite
sprite: Mobs/Species/Arachnid/parts.rsi
state: "r_hand"
- - type: Icon
- sprite: Mobs/Species/Arachnid/parts.rsi
- state: "r_hand"
- - type: BodyPart
- partType: Hand
- symmetry: Right
- type: entity
id: LeftLegArachnid
name: "left arachnid leg"
- parent: PartArachnid
+ parent: [PartArachnid, BaseLeftLeg]
components:
- type: Sprite
sprite: Mobs/Species/Arachnid/parts.rsi
state: "l_leg"
- - type: Icon
- sprite: Mobs/Species/Arachnid/parts.rsi
- state: "l_leg"
- - type: BodyPart
- partType: Leg
- symmetry: Left
- type: MovementBodyPart
walkSpeed: 3.0
sprintSpeed: 5.0
@@ -155,17 +97,11 @@
- type: entity
id: RightLegArachnid
name: "right arachnid leg"
- parent: PartArachnid
+ parent: [PartArachnid, BaseRightLeg]
components:
- type: Sprite
sprite: Mobs/Species/Arachnid/parts.rsi
state: "r_leg"
- - type: Icon
- sprite: Mobs/Species/Arachnid/parts.rsi
- state: "r_leg"
- - type: BodyPart
- partType: Leg
- symmetry: Right
- type: MovementBodyPart
walkSpeed: 3.0
sprintSpeed: 5.0
@@ -173,29 +109,17 @@
- type: entity
id: LeftFootArachnid
name: "left arachnid foot"
- parent: PartArachnid
+ parent: [PartArachnid, BaseLeftFoot]
components:
- type: Sprite
sprite: Mobs/Species/Arachnid/parts.rsi
state: "l_foot"
- - type: Icon
- sprite: Mobs/Species/Arachnid/parts.rsi
- state: "l_foot"
- - type: BodyPart
- partType: Foot
- symmetry: Left
- type: entity
id: RightFootArachnid
name: "right arachnid foot"
- parent: PartArachnid
+ parent: [PartArachnid, BaseRightFoot]
components:
- type: Sprite
sprite: Mobs/Species/Arachnid/parts.rsi
state: "r_foot"
- - type: Icon
- sprite: Mobs/Species/Arachnid/parts.rsi
- state: "r_foot"
- - type: BodyPart
- partType: Foot
- symmetry: Right
diff --git a/Resources/Prototypes/Body/Parts/base.yml b/Resources/Prototypes/Body/Parts/base.yml
new file mode 100644
index 0000000000..e293d8845d
--- /dev/null
+++ b/Resources/Prototypes/Body/Parts/base.yml
@@ -0,0 +1,116 @@
+# TODO: Add descriptions (many)
+# TODO BODY: Part damage
+- type: entity
+ id: BasePart
+ parent: BaseItem
+ name: "body part"
+ abstract: true
+ components:
+ - type: Damageable
+ damageContainer: Biological
+ - type: BodyPart
+ - type: ContainerContainer
+ containers:
+ bodypart: !type:Container
+ ents: []
+ - type: StaticPrice
+ price: 100
+ - type: Tag
+ tags:
+ - Trash
+
+- type: entity
+ id: BaseTorso
+ name: "torso"
+ parent: BasePart
+ components:
+ - type: BodyPart
+ partType: Torso
+
+- type: entity
+ id: BaseHead
+ name: "head"
+ parent: BasePart
+ components:
+ - type: BodyPart
+ partType: Head
+ vital: true
+ - type: Input
+ context: "ghost"
+ - type: Tag
+ tags:
+ - Head
+
+- type: entity
+ id: BaseLeftArm
+ name: "left arm"
+ parent: BasePart
+ components:
+ - type: BodyPart
+ partType: Arm
+ symmetry: Left
+
+- type: entity
+ id: BaseRightArm
+ name: "right arm"
+ parent: BasePart
+ components:
+ - type: BodyPart
+ partType: Arm
+ symmetry: Right
+
+- type: entity
+ id: BaseLeftHand
+ name: "left hand"
+ parent: BasePart
+ components:
+ - type: BodyPart
+ partType: Hand
+ symmetry: Left
+
+- type: entity
+ id: BaseRightHand
+ name: "right hand"
+ parent: BasePart
+ components:
+ - type: BodyPart
+ partType: Hand
+ symmetry: Right
+
+- type: entity
+ id: BaseLeftLeg
+ name: "left leg"
+ parent: BasePart
+ components:
+ - type: BodyPart
+ partType: Leg
+ symmetry: Left
+ - type: MovementBodyPart
+
+- type: entity
+ id: BaseRightLeg
+ name: "right leg"
+ parent: BasePart
+ components:
+ - type: BodyPart
+ partType: Leg
+ symmetry: Right
+ - type: MovementBodyPart
+
+- type: entity
+ id: BaseLeftFoot
+ name: "left foot"
+ parent: BasePart
+ components:
+ - type: BodyPart
+ partType: Foot
+ symmetry: Left
+
+- type: entity
+ id: BaseRightFoot
+ name: "right foot"
+ parent: BasePart
+ components:
+ - type: BodyPart
+ partType: Foot
+ symmetry: Right
diff --git a/Resources/Prototypes/Body/Parts/diona.yml b/Resources/Prototypes/Body/Parts/diona.yml
index 07b4c144d9..357cf7947b 100644
--- a/Resources/Prototypes/Body/Parts/diona.yml
+++ b/Resources/Prototypes/Body/Parts/diona.yml
@@ -1,120 +1,67 @@
- type: entity
id: PartDiona
- parent: BaseItem
+ parent: [BaseItem, BasePart]
name: "diona body part"
abstract: true
components:
- - type: Damageable
- damageContainer: Biological
- - type: BodyPart
- - type: ContainerContainer
- containers:
- bodypart: !type:Container
- ents: []
- type: Sprite
sprite: Mobs/Species/Diona/parts.rsi
- - type: Icon
- sprite: Mobs/Species/Diona/parts.rsi
- - type: StaticPrice
- price: 100
- - type: Tag
- tags:
- - Trash
- type: entity
id: TorsoDiona
name: "diona torso"
- parent: PartDiona
+ parent: [PartDiona, BaseTorso]
components:
- type: Sprite
state: "torso_m"
- - type: Icon
- state: "torso_m"
- - type: BodyPart
- partType: Torso
- type: entity
id: HeadDiona
name: "diona head"
- parent: PartDiona
+ parent: [PartDiona, BaseHead]
components:
- type: Sprite
state: "head_m"
- - type: Icon
- state: "head_m"
- - type: BodyPart
- partType: Head
- vital: true
- - type: Input
- context: "ghost"
- - type: Tag
- tags:
- - Head
- type: entity
id: LeftArmDiona
name: "left diona arm"
- parent: PartDiona
+ parent: [PartDiona, BaseLeftArm]
components:
- type: Sprite
state: "l_arm"
- - type: Icon
- state: "l_arm"
- - type: BodyPart
- partType: Arm
- symmetry: Left
- type: entity
id: RightArmDiona
name: "right diona arm"
- parent: PartDiona
+ parent: [PartDiona, BaseRightArm]
components:
- type: Sprite
state: "r_arm"
- - type: Icon
- state: "r_arm"
- - type: BodyPart
- partType: Arm
- symmetry: Right
- type: entity
id: LeftHandDiona
name: "left diona hand"
- parent: PartDiona
+ parent: [PartDiona, BaseLeftHand]
components:
- type: Sprite
state: "l_hand"
- - type: Icon
- state: "l_hand"
- - type: BodyPart
- partType: Hand
- symmetry: Left
- type: entity
id: RightHandDiona
name: "right diona hand"
- parent: PartDiona
+ parent: [PartDiona, BaseRightHand]
components:
- type: Sprite
state: "r_hand"
- - type: Icon
- state: "r_hand"
- - type: BodyPart
- partType: Hand
- symmetry: Right
- type: entity
id: LeftLegDiona
name: "left diona leg"
- parent: PartDiona
+ parent: [PartDiona, BaseLeftLeg]
components:
- type: Sprite
state: "l_leg"
- - type: Icon
- state: "l_leg"
- - type: BodyPart
- partType: Leg
- symmetry: Left
- type: MovementBodyPart
walkSpeed : 1.5
sprintSpeed : 3.5
@@ -122,12 +69,10 @@
- type: entity
id: RightLegDiona
name: "right diona leg"
- parent: PartDiona
+ parent: [PartDiona, BaseRightLeg]
components:
- type: Sprite
state: "r_leg"
- - type: Icon
- state: "r_leg"
- type: BodyPart
partType: Leg
symmetry: Right
@@ -138,12 +83,10 @@
- type: entity
id: LeftFootDiona
name: "left diona foot"
- parent: PartDiona
+ parent: [PartDiona, BaseLeftFoot]
components:
- type: Sprite
state: "l_foot"
- - type: Icon
- state: "l_foot"
- type: BodyPart
partType: Foot
symmetry: Left
@@ -151,12 +94,10 @@
- type: entity
id: RightFootDiona
name: "right diona foot"
- parent: PartDiona
+ parent: [PartDiona, BaseRightFoot]
components:
- type: Sprite
state: "r_foot"
- - type: Icon
- state: "r_foot"
- type: BodyPart
partType: Foot
symmetry: Right
diff --git a/Resources/Prototypes/Body/Parts/human.yml b/Resources/Prototypes/Body/Parts/human.yml
index 1866011622..a1510fcdbb 100644
--- a/Resources/Prototypes/Body/Parts/human.yml
+++ b/Resources/Prototypes/Body/Parts/human.yml
@@ -2,22 +2,10 @@
# TODO BODY: Part damage
- type: entity
id: PartHuman
- parent: BaseItem
+ parent: [BaseItem, BasePart]
name: "human body part"
abstract: true
components:
- - type: Damageable
- damageContainer: Biological
- - type: BodyPart
- - type: ContainerContainer
- containers:
- bodypart: !type:Container
- ents: []
- - type: StaticPrice
- price: 100
- - type: Tag
- tags:
- - Trash
- type: Extractable
juiceSolution:
reagents:
@@ -29,16 +17,11 @@
- type: entity
id: TorsoHuman
name: "human torso"
- parent: PartHuman
+ parent: [PartHuman, BaseTorso]
components:
- type: Sprite
sprite: Mobs/Species/Human/parts.rsi
state: "torso_m"
- - type: Icon
- sprite: Mobs/Species/Human/parts.rsi
- state: "torso_m"
- - type: BodyPart
- partType: Torso
- type: Extractable
juiceSolution:
reagents:
@@ -50,22 +33,11 @@
- type: entity
id: HeadHuman
name: "human head"
- parent: PartHuman
+ parent: [PartHuman, BaseHead]
components:
- type: Sprite
sprite: Mobs/Species/Human/parts.rsi
state: "head_m"
- - type: Icon
- sprite: Mobs/Species/Human/parts.rsi
- state: "head_m"
- - type: BodyPart
- partType: Head
- vital: true
- - type: Input
- context: "ghost"
- - type: Tag
- tags:
- - Head
- type: Extractable
juiceSolution:
reagents:
@@ -77,121 +49,71 @@
- type: entity
id: LeftArmHuman
name: "left human arm"
- parent: PartHuman
+ parent: [PartHuman, BaseLeftArm]
components:
- type: Sprite
sprite: Mobs/Species/Human/parts.rsi
state: "l_arm"
- - type: Icon
- sprite: Mobs/Species/Human/parts.rsi
- state: "l_arm"
- - type: BodyPart
- partType: Arm
- symmetry: Left
- type: entity
id: RightArmHuman
name: "right human arm"
- parent: PartHuman
+ parent: [PartHuman, BaseRightArm]
components:
- type: Sprite
sprite: Mobs/Species/Human/parts.rsi
state: "r_arm"
- - type: Icon
- sprite: Mobs/Species/Human/parts.rsi
- state: "r_arm"
- - type: BodyPart
- partType: Arm
- symmetry: Right
- type: entity
id: LeftHandHuman
name: "left human hand"
- parent: PartHuman
+ parent: [PartHuman, BaseLeftHand]
components:
- type: Sprite
sprite: Mobs/Species/Human/parts.rsi
state: "l_hand"
- - type: Icon
- sprite: Mobs/Species/Human/parts.rsi
- state: "l_hand"
- - type: BodyPart
- partType: Hand
- symmetry: Left
- type: entity
id: RightHandHuman
name: "right human hand"
- parent: PartHuman
+ parent: [PartHuman, BaseRightHand]
components:
- type: Sprite
sprite: Mobs/Species/Human/parts.rsi
state: "r_hand"
- - type: Icon
- sprite: Mobs/Species/Human/parts.rsi
- state: "r_hand"
- - type: BodyPart
- partType: Hand
- symmetry: Right
- type: entity
id: LeftLegHuman
name: "left human leg"
- parent: PartHuman
+ parent: [PartHuman, BaseLeftLeg]
components:
- type: Sprite
sprite: Mobs/Species/Human/parts.rsi
state: "l_leg"
- - type: Icon
- sprite: Mobs/Species/Human/parts.rsi
- state: "l_leg"
- - type: BodyPart
- partType: Leg
- symmetry: Left
- - type: MovementBodyPart
- type: entity
id: RightLegHuman
name: "right human leg"
- parent: PartHuman
+ parent: [PartHuman, BaseRightLeg]
components:
- type: Sprite
sprite: Mobs/Species/Human/parts.rsi
state: "r_leg"
- - type: Icon
- sprite: Mobs/Species/Human/parts.rsi
- state: "r_leg"
- - type: BodyPart
- partType: Leg
- symmetry: Right
- - type: MovementBodyPart
- type: entity
id: LeftFootHuman
name: "left human foot"
- parent: PartHuman
+ parent: [PartHuman, BaseLeftFoot]
components:
- type: Sprite
sprite: Mobs/Species/Human/parts.rsi
state: "l_foot"
- - type: Icon
- sprite: Mobs/Species/Human/parts.rsi
- state: "l_foot"
- - type: BodyPart
- partType: Foot
- symmetry: Left
- type: entity
id: RightFootHuman
name: "right human foot"
- parent: PartHuman
+ parent: [PartHuman, BaseRightFoot]
components:
- type: Sprite
sprite: Mobs/Species/Human/parts.rsi
state: "r_foot"
- - type: Icon
- sprite: Mobs/Species/Human/parts.rsi
- state: "r_foot"
- - type: BodyPart
- partType: Foot
- symmetry: Right
diff --git a/Resources/Prototypes/Body/Parts/moth.yml b/Resources/Prototypes/Body/Parts/moth.yml
new file mode 100644
index 0000000000..bb96430383
--- /dev/null
+++ b/Resources/Prototypes/Body/Parts/moth.yml
@@ -0,0 +1,120 @@
+# TODO: Add descriptions (many)
+# TODO BODY: Part damage
+- type: entity
+ id: PartMoth
+ parent: [BaseItem, BasePart]
+ name: "moth body part"
+ abstract: true
+ components:
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: Fat
+ Quantity: 3
+ - ReagentId: Blood
+ Quantity: 10
+
+- type: entity
+ id: TorsoMoth
+ name: "moth torso"
+ parent: [PartMoth, BaseTorso]
+ components:
+ - type: Sprite
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: "torso_m"
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: Fat
+ Quantity: 10
+ - ReagentId: Blood
+ Quantity: 20
+
+
+- type: entity
+ id: HeadMoth
+ name: "moth head"
+ parent: [PartMoth, BaseHead]
+ components:
+ - type: Sprite
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: "head_m"
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: Fat
+ Quantity: 5
+ - ReagentId: Blood
+ Quantity: 10
+
+- type: entity
+ id: LeftArmMoth
+ name: "left moth arm"
+ parent: [PartMoth, BaseLeftArm]
+ components:
+ - type: Sprite
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: "l_arm"
+
+- type: entity
+ id: RightArmMoth
+ name: "right moth arm"
+ parent: [PartMoth, BaseRightArm]
+ components:
+ - type: Sprite
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: "r_arm"
+
+- type: entity
+ id: LeftHandMoth
+ name: "left moth hand"
+ parent: [PartMoth, BaseLeftHand]
+ components:
+ - type: Sprite
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: "l_hand"
+
+- type: entity
+ id: RightHandMoth
+ name: "right moth hand"
+ parent: [PartMoth, BaseRightHand]
+ components:
+ - type: Sprite
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: "r_hand"
+
+- type: entity
+ id: LeftLegMoth
+ name: "left moth leg"
+ parent: [PartMoth, BaseLeftLeg]
+ components:
+ - type: Sprite
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: "l_leg"
+
+- type: entity
+ id: RightLegMoth
+ name: "right moth leg"
+ parent: [PartMoth, BaseRightLeg]
+ components:
+ - type: Sprite
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: "r_leg"
+
+- type: entity
+ id: LeftFootMoth
+ name: "left moth foot"
+ parent: [PartMoth, BaseLeftFoot]
+ components:
+ - type: Sprite
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: "l_foot"
+
+- type: entity
+ id: RightFootMoth
+ name: "right moth foot"
+ parent: [PartMoth, BaseRightFoot]
+ components:
+ - type: Sprite
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: "r_foot"
diff --git a/Resources/Prototypes/Body/Parts/reptilian.yml b/Resources/Prototypes/Body/Parts/reptilian.yml
index 1af2d1db75..22ab7aeb52 100644
--- a/Resources/Prototypes/Body/Parts/reptilian.yml
+++ b/Resources/Prototypes/Body/Parts/reptilian.yml
@@ -2,20 +2,10 @@
# TODO BODY: Part damage
- type: entity
id: PartReptilian
- parent: BaseItem
+ parent: [BaseItem, BasePart]
name: "reptilian body part"
abstract: true
components:
- - type: Damageable
- damageContainer: Biological
- - type: BodyPart
- - type: ContainerContainer
- containers:
- bodypart: !type:Container
- ents: []
- - type: Tag
- tags:
- - Trash
- type: Extractable
juiceSolution:
reagents:
@@ -27,16 +17,11 @@
- type: entity
id: TorsoReptilian
name: "reptilian torso"
- parent: PartReptilian
+ parent: [PartReptilian, BaseTorso]
components:
- type: Sprite
sprite: Mobs/Species/Reptilian/parts.rsi
state: "torso_m"
- - type: Icon
- sprite: Mobs/Species/Reptilian/parts.rsi
- state: "torso_m"
- - type: BodyPart
- partType: Torso
- type: Extractable
juiceSolution:
reagents:
@@ -48,22 +33,11 @@
- type: entity
id: HeadReptilian
name: "reptilian head"
- parent: PartReptilian
+ parent: [PartReptilian, BaseHead]
components:
- type: Sprite
sprite: Mobs/Species/Reptilian/parts.rsi
state: "head_m"
- - type: Icon
- sprite: Mobs/Species/Reptilian/parts.rsi
- state: "head_m"
- - type: BodyPart
- partType: Head
- vital: true
- - type: Input
- context: "ghost"
- - type: Tag
- tags:
- - Head
- type: Extractable
juiceSolution:
reagents:
@@ -75,77 +49,47 @@
- type: entity
id: LeftArmReptilian
name: "left reptilian arm"
- parent: PartReptilian
+ parent: [PartReptilian, BaseLeftArm]
components:
- type: Sprite
sprite: Mobs/Species/Reptilian/parts.rsi
state: "l_arm"
- - type: Icon
- sprite: Mobs/Species/Reptilian/parts.rsi
- state: "l_arm"
- - type: BodyPart
- partType: Arm
- symmetry: Left
- type: entity
id: RightArmReptilian
name: "right reptilian arm"
- parent: PartReptilian
+ parent: [PartReptilian, BaseRightArm]
components:
- type: Sprite
sprite: Mobs/Species/Reptilian/parts.rsi
state: "r_arm"
- - type: Icon
- sprite: Mobs/Species/Reptilian/parts.rsi
- state: "r_arm"
- - type: BodyPart
- partType: Arm
- symmetry: Right
- type: entity
id: LeftHandReptilian
name: "left reptilian hand"
- parent: PartReptilian
+ parent: [PartReptilian, BaseLeftHand]
components:
- type: Sprite
sprite: Mobs/Species/Reptilian/parts.rsi
state: "l_hand"
- - type: Icon
- sprite: Mobs/Species/Reptilian/parts.rsi
- state: "l_hand"
- - type: BodyPart
- partType: Hand
- symmetry: Left
- type: entity
id: RightHandReptilian
name: "right reptilian hand"
- parent: PartReptilian
+ parent: [PartReptilian, BaseRightHand]
components:
- type: Sprite
sprite: Mobs/Species/Reptilian/parts.rsi
state: "r_hand"
- - type: Icon
- sprite: Mobs/Species/Reptilian/parts.rsi
- state: "r_hand"
- - type: BodyPart
- partType: Hand
- symmetry: Right
- type: entity
id: LeftLegReptilian
name: "left reptilian leg"
- parent: PartReptilian
+ parent: [PartReptilian, BaseLeftLeg]
components:
- type: Sprite
sprite: Mobs/Species/Reptilian/parts.rsi
state: "l_leg"
- - type: Icon
- sprite: Mobs/Species/Reptilian/parts.rsi
- state: "l_leg"
- - type: BodyPart
- partType: Leg
- symmetry: Left
- type: MovementBodyPart
walkSpeed : 2.7
sprintSpeed : 4.5
@@ -153,17 +97,11 @@
- type: entity
id: RightLegReptilian
name: "right reptilian leg"
- parent: PartReptilian
+ parent: [PartReptilian, BaseRightLeg]
components:
- type: Sprite
sprite: Mobs/Species/Reptilian/parts.rsi
state: "r_leg"
- - type: Icon
- sprite: Mobs/Species/Reptilian/parts.rsi
- state: "r_leg"
- - type: BodyPart
- partType: Leg
- symmetry: Right
- type: MovementBodyPart
walkSpeed : 2.7
sprintSpeed : 4.5
@@ -171,29 +109,17 @@
- type: entity
id: LeftFootReptilian
name: "left reptilian foot"
- parent: PartReptilian
+ parent: [PartReptilian, BaseLeftFoot]
components:
- type: Sprite
sprite: Mobs/Species/Reptilian/parts.rsi
state: "l_foot"
- - type: Icon
- sprite: Mobs/Species/Reptilian/parts.rsi
- state: "l_foot"
- - type: BodyPart
- partType: Foot
- symmetry: Left
- type: entity
id: RightFootReptilian
name: "right reptilian foot"
- parent: PartReptilian
+ parent: [PartReptilian, BaseRightFoot]
components:
- type: Sprite
sprite: Mobs/Species/Reptilian/parts.rsi
- state: "r_foot"
- - type: Icon
- sprite: Mobs/Species/Reptilian/parts.rsi
- state: "r_foot"
- - type: BodyPart
- partType: Foot
- symmetry: Right
+ state: "r_foot"
\ No newline at end of file
diff --git a/Resources/Prototypes/Body/Parts/slime.yml b/Resources/Prototypes/Body/Parts/slime.yml
index 011cf3462d..c11d723950 100644
--- a/Resources/Prototypes/Body/Parts/slime.yml
+++ b/Resources/Prototypes/Body/Parts/slime.yml
@@ -1,175 +1,96 @@
# TODO BODY: Part damage
- type: entity
id: PartSlime
- parent: BaseItem
+ parent: [BaseItem, PartBase]
name: "slime body part"
abstract: true
- components:
- - type: Damageable
- damageContainer: Biological
- - type: BodyPart
- - type: ContainerContainer
- containers:
- bodypart: !type:Container
- ents: []
- - type: StaticPrice
- price: 100
- - type: Tag
- tags:
- - Trash
- type: entity
id: TorsoSlime
name: "slime torso"
- parent: PartSlime
+ parent: [PartSlime, BaseTorso]
components:
- type: Sprite
sprite: Mobs/Species/Slime/parts.rsi
state: "torso_m"
- - type: Icon
- sprite: Mobs/Species/Slime/parts.rsi
- state: "torso_m"
- - type: BodyPart
- partType: Torso
- type: entity
id: HeadSlime
name: "slime head"
- parent: PartSlime
+ parent: [PartSlime, BaseHead]
components:
- type: Sprite
sprite: Mobs/Species/Slime/parts.rsi
state: "head_m"
- - type: Icon
- sprite: Mobs/Species/Slime/parts.rsi
- state: "head_m"
- - type: BodyPart
- partType: Head
- vital: true
- - type: Input
- context: "ghost"
- - type: Tag
- tags:
- - Head
-
+
- type: entity
id: LeftArmSlime
name: "left slime arm"
- parent: PartSlime
+ parent: [PartSlime, BaseLeftArm]
components:
- type: Sprite
sprite: Mobs/Species/Slime/parts.rsi
state: "l_arm"
- - type: Icon
- sprite: Mobs/Species/Slime/parts.rsi
- state: "l_arm"
- - type: BodyPart
- partType: Arm
- symmetry: Left
- type: entity
id: RightArmSlime
name: "right slime arm"
- parent: PartSlime
+ parent: [PartSlime, BaseRightArm]
components:
- type: Sprite
sprite: Mobs/Species/Slime/parts.rsi
state: "r_arm"
- - type: Icon
- sprite: Mobs/Species/Slime/parts.rsi
- state: "r_arm"
- - type: BodyPart
- partType: Arm
- symmetry: Right
- type: entity
id: LeftHandSlime
name: "left slime hand"
- parent: PartSlime
+ parent: [PartSlime, BaseLeftHand]
components:
- type: Sprite
sprite: Mobs/Species/Slime/parts.rsi
state: "l_hand"
- - type: Icon
- sprite: Mobs/Species/Slime/parts.rsi
- state: "l_hand"
- - type: BodyPart
- partType: Hand
- symmetry: Left
- type: entity
id: RightHandSlime
name: "right slime hand"
- parent: PartSlime
+ parent: [PartSlime, BaseRightHand]
components:
- type: Sprite
sprite: Mobs/Species/Slime/parts.rsi
state: "r_hand"
- - type: Icon
- sprite: Mobs/Species/Slime/parts.rsi
- state: "r_hand"
- - type: BodyPart
- partType: Hand
- symmetry: Right
- type: entity
id: LeftLegSlime
name: "left slime leg"
- parent: PartSlime
+ parent: [PartSlime, BaseLeftLeg]
components:
- type: Sprite
sprite: Mobs/Species/Slime/parts.rsi
state: "l_leg"
- - type: Icon
- sprite: Mobs/Species/Slime/parts.rsi
- state: "l_leg"
- - type: BodyPart
- partType: Leg
- symmetry: Left
- - type: MovementBodyPart
- type: entity
id: RightLegSlime
name: "right slime leg"
- parent: PartSlime
+ parent: [PartSlime, BaseRightLeg]
components:
- type: Sprite
sprite: Mobs/Species/Slime/parts.rsi
state: "r_leg"
- - type: Icon
- sprite: Mobs/Species/Slime/parts.rsi
- state: "r_leg"
- - type: BodyPart
- partType: Leg
- symmetry: Right
- - type: MovementBodyPart
- type: entity
id: LeftFootSlime
name: "left slime foot"
- parent: PartSlime
+ parent: [PartSlime, BaseLeftFoot]
components:
- type: Sprite
sprite: Mobs/Species/Slime/parts.rsi
state: "l_foot"
- - type: Icon
- sprite: Mobs/Species/Slime/parts.rsi
- state: "l_foot"
- - type: BodyPart
- partType: Foot
- symmetry: Left
- type: entity
id: RightFootSlime
name: "right slime foot"
- parent: PartSlime
+ parent: [PartSlime, BaseRightFoot]
components:
- type: Sprite
sprite: Mobs/Species/Slime/parts.rsi
state: "r_foot"
- - type: Icon
- sprite: Mobs/Species/Slime/parts.rsi
- state: "r_foot"
- - type: BodyPart
- partType: Foot
- symmetry: Right
diff --git a/Resources/Prototypes/Body/Prototypes/moth.yml b/Resources/Prototypes/Body/Prototypes/moth.yml
new file mode 100644
index 0000000000..0715f19a85
--- /dev/null
+++ b/Resources/Prototypes/Body/Prototypes/moth.yml
@@ -0,0 +1,49 @@
+- type: body
+ id: Moth
+ name: "Moth"
+ root: torso
+ slots:
+ head:
+ part: HeadMoth
+ connections:
+ - torso
+ organs:
+ brain: OrganHumanBrain
+ eyes: OrganHumanEyes
+ torso:
+ part: TorsoMoth
+ organs:
+ heart: OrganAnimalHeart
+ lungs: OrganHumanLungs
+ stomach: OrganMothStomach
+ liver: OrganAnimalLiver
+ kidneys: OrganHumanKidneys
+ connections:
+ - left arm
+ - right arm
+ - left leg
+ - right leg
+ right arm:
+ part: RightArmMoth
+ connections:
+ - right hand
+ left arm:
+ part: LeftArmMoth
+ connections:
+ - left hand
+ right hand:
+ part: RightHandMoth
+ left hand:
+ part: LeftHandMoth
+ right leg:
+ part: RightLegMoth
+ connections:
+ - right foot
+ left leg:
+ part: LeftLegMoth
+ connections:
+ - left foot
+ right foot:
+ part: RightFootMoth
+ left foot:
+ part: LeftFootMoth
diff --git a/Resources/Prototypes/Chemistry/metabolizer_types.yml b/Resources/Prototypes/Chemistry/metabolizer_types.yml
index 1aa19f6084..a3507977ad 100644
--- a/Resources/Prototypes/Chemistry/metabolizer_types.yml
+++ b/Resources/Prototypes/Chemistry/metabolizer_types.yml
@@ -32,3 +32,7 @@
- type: metabolizerType
id: Dwarf
name: dwarf
+
+- type: metabolizerType
+ id: Moth
+ name: moth
diff --git a/Resources/Prototypes/Damage/modifier_sets.yml b/Resources/Prototypes/Damage/modifier_sets.yml
index d58e8ba30b..1a425226a0 100644
--- a/Resources/Prototypes/Damage/modifier_sets.yml
+++ b/Resources/Prototypes/Damage/modifier_sets.yml
@@ -137,7 +137,17 @@
Piercing: 1.15
Slash: 0.85
Heat: 1.25
- Poison: 0.8
+ Poison: 0.8
+
+- type: damageModifierSet
+ id: Moth # Slightly worse at everything but cold
+ coefficients:
+ Blunt: 1
+ Piercing: 1.15
+ Slash: 1.15
+ Cold: 0.7
+ Heat: 1.3
+ Poison: 1.1
- type: damageModifierSet
id: Zombie #Blunt resistant and immune to biological threats, but can be hacked apart and burned
diff --git a/Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml b/Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml
index f3373fe572..eb9f7826df 100644
--- a/Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml
+++ b/Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml
@@ -7,3 +7,15 @@
state: icon
- type: Clothing
slots: [gloves]
+ - type: Food
+ requiresSpecialDigestion: true
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 10
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 10
+ - type: Tag
+ tags:
+ - ClothMade
diff --git a/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml b/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml
index bf02642cb7..b5e5a230d6 100644
--- a/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml
+++ b/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml
@@ -7,6 +7,18 @@
state: icon
- type: Clothing
slots: [mask]
+ - type: Food
+ requiresSpecialDigestion: true
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 10
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 10
+ - type: Tag
+ tags:
+ - ClothMade
- type: entity
abstract: true
diff --git a/Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml b/Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml
index c8b18fafa1..4d97a3e222 100644
--- a/Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml
+++ b/Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml
@@ -16,3 +16,15 @@
spawned:
- id: MaterialCloth1
amount: 2
+ - type: Food
+ requiresSpecialDigestion: true
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 10
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 10
+ - type: Tag
+ tags:
+ - ClothMade
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml
index 4c08fb431a..ce46f9b71e 100644
--- a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml
+++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml
@@ -17,6 +17,18 @@
coefficients:
Slash: 0.95
Heat: 0.90
+ - type: Food
+ requiresSpecialDigestion: true
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 30
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 30
+ - type: Tag
+ tags:
+ - ClothMade
- type: entity
parent: ClothingOuterWinterCoat
diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml b/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml
index 86f8cd7f77..d5889c43eb 100644
--- a/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml
+++ b/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml
@@ -8,6 +8,18 @@
- FEET
- type: Sprite
state: icon
+ - type: Food
+ requiresSpecialDigestion: true
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 10
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 10
+ - type: Tag
+ tags:
+ - ClothMade
- type: entity
abstract: true
diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/base_clothinguniforms.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/base_clothinguniforms.yml
index de52896e3b..af63c902d7 100644
--- a/Resources/Prototypes/Entities/Clothing/Uniforms/base_clothinguniforms.yml
+++ b/Resources/Prototypes/Entities/Clothing/Uniforms/base_clothinguniforms.yml
@@ -14,6 +14,18 @@
spawned:
- id: MaterialCloth1
amount: 3
+ - type: Food
+ requiresSpecialDigestion: true
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 30
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 30
+ - type: Tag
+ tags:
+ - ClothMade
- type: entity
abstract: true
diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/moth.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/moth.yml
new file mode 100644
index 0000000000..73cde76628
--- /dev/null
+++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/moth.yml
@@ -0,0 +1,49 @@
+# Antennas
+- type: marking
+ id: MothAntennasDefault
+ bodyPart: HeadTop
+ markingCategory: HeadTop
+ speciesRestriction: [Moth]
+ sprites:
+ - sprite: Mobs/Customization/moth_parts.rsi
+ state: antenna_default
+
+# Wings
+- type: marking
+ id: MothWingsDefault
+ bodyPart: Tail
+ markingCategory: Tail
+ speciesRestriction: [Moth]
+ sprites:
+ - sprite: Mobs/Customization/moth_parts.rsi
+ state: wings_default
+
+- type: marking
+ id: MothWingsLook1
+ bodyPart: Tail
+ markingCategory: Tail
+ speciesRestriction: [Moth]
+ sprites:
+ - sprite: Mobs/Customization/moth_parts.rsi
+ state: wings_look1
+
+- type: marking
+ id: MothWingsLook2
+ bodyPart: Tail
+ markingCategory: Tail
+ speciesRestriction: [Moth]
+ sprites:
+ - sprite: Mobs/Customization/moth_parts.rsi
+ state: wings_look2
+
+- type: marking
+ id: MothWingsLook3
+ bodyPart: Tail
+ markingCategory: Tail
+ speciesRestriction: [Moth]
+ sprites:
+ - sprite: Mobs/Customization/moth_parts.rsi
+ state: wings_look3
+
+
+# Other markings
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml
index 68ae37d885..5ab7e4b9c3 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml
@@ -1,35 +1,13 @@
- type: entity
save: false
name: Urist McWeb
- parent: BaseMobArachnid
+ parent: [BaseMobArachnid, BaseMob]
id: MobArachnid
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: 2 # Make sure you have O2 on you at all times
damageRecovery:
types:
- Asphyxiation: -0.5 # Recovery will suck without chems
- - type: Alerts
- - type: Actions
- - type: Eye
- - type: CameraRecoil
- - type: Examiner
- - type: CanHostGuardian
- - type: NpcFactionMember
- factions:
- - NanoTrasen
+ Asphyxiation: -0.5 # Recovery will suck without chems
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Mobs/Player/base.yml b/Resources/Prototypes/Entities/Mobs/Player/base.yml
new file mode 100644
index 0000000000..684174c513
--- /dev/null
+++ b/Resources/Prototypes/Entities/Mobs/Player/base.yml
@@ -0,0 +1,34 @@
+- type: entity
+ save: false
+ name: BaseMob
+ id: BaseMob
+ 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
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Mobs/Player/diona.yml b/Resources/Prototypes/Entities/Mobs/Player/diona.yml
index df5f5c0f9b..1066f44228 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/diona.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/diona.yml
@@ -1,20 +1,9 @@
- type: entity
save: false
name: Urist McPlants
- parent: BaseMobDiona
+ parent: [BaseMobDiona, BaseMob]
id: MobDiona
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: Respirator
damage:
types:
@@ -22,13 +11,3 @@
damageRecovery:
types:
Asphyxiation: -1.0
- - type: MobMover
- - type: InputMover
- - type: Alerts
- - type: Eye
- - type: CameraRecoil
- - type: Examiner
- - type: CanHostGuardian
- - type: NpcFactionMember
- factions:
- - NanoTrasen
diff --git a/Resources/Prototypes/Entities/Mobs/Player/dwarf.yml b/Resources/Prototypes/Entities/Mobs/Player/dwarf.yml
index 25eac35886..94b240e501 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/dwarf.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/dwarf.yml
@@ -1,27 +1,5 @@
- type: entity
save: false
name: Urist McHands The Dwarf
- parent: BaseMobDwarf
- id: MobDwarf
- components:
- - type: CombatMode
- - 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: Alerts
- - type: Actions
- - type: Eye
- - type: CameraRecoil
- - type: Examiner
- - type: CanHostGuardian
- - type: NpcFactionMember
- factions:
- - NanoTrasen
+ parent: [BaseMobDwarf, BaseMob]
+ id: MobDwarf
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Mobs/Player/human.yml b/Resources/Prototypes/Entities/Mobs/Player/human.yml
index fe61297fca..eb5ae34eb2 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/human.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/human.yml
@@ -1,37 +1,8 @@
- type: entity
save: false
name: Urist McHands
- parent: BaseMobHuman
+ parent: [BaseMobHuman, BaseMob]
id: MobHuman
- components:
- - type: CombatMode
- - 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
#Syndie
- type: entity
diff --git a/Resources/Prototypes/Entities/Mobs/Player/moth.yml b/Resources/Prototypes/Entities/Mobs/Player/moth.yml
new file mode 100644
index 0000000000..0a64385419
--- /dev/null
+++ b/Resources/Prototypes/Entities/Mobs/Player/moth.yml
@@ -0,0 +1,5 @@
+- type: entity
+ save: false
+ name: Urist McFluff
+ parent: [BaseMobMoth, BaseMob]
+ id: MobMoth
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Mobs/Player/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Player/reptilian.yml
index b6db4abfea..d3cbe11b49 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/reptilian.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/reptilian.yml
@@ -1,34 +1,7 @@
- type: entity
save: false
name: Urisst' Mzhand
- parent: BaseMobReptilian
+ parent: [BaseMobReptilian, BaseMob]
id: MobReptilian
- components:
- - type: CombatMode
- - 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: Alerts
- - type: Eye
- - type: CameraRecoil
- - type: Examiner
- - type: CanHostGuardian
- - type: NpcFactionMember
- factions:
- - NanoTrasen
- - type: Respirator
- damage:
- types:
- Asphyxiation: 1.0
- damageRecovery:
- types:
- Asphyxiation: -1.0
+
#Weh
diff --git a/Resources/Prototypes/Entities/Mobs/Player/slime.yml b/Resources/Prototypes/Entities/Mobs/Player/slime.yml
index c88011c49c..6763a7dbb2 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/slime.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/slime.yml
@@ -1,26 +1,4 @@
- type: entity
save: false
- parent: BaseMobSlimePerson
- id: MobSlimePerson
- components:
- - type: CombatMode
- - 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: Alerts
- - type: Actions
- - type: Eye
- - type: CameraRecoil
- - type: Examiner
- - type: CanHostGuardian
- - type: NpcFactionMember
- factions:
- - NanoTrasen
+ parent: [BaseMobSlimePerson, BaseMob]
+ id: MobSlimePerson
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Mobs/Player/vox.yml b/Resources/Prototypes/Entities/Mobs/Player/vox.yml
index 74556e079a..1e1883b8f7 100644
--- a/Resources/Prototypes/Entities/Mobs/Player/vox.yml
+++ b/Resources/Prototypes/Entities/Mobs/Player/vox.yml
@@ -1,33 +1,5 @@
- type: entity
save: false
name: Vox
- parent: BaseMobVox
+ parent: [BaseMobVox, BaseMob]
id: MobVox
- components:
- - type: CombatMode
- - 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: Alerts
- - type: Eye
- - type: CameraRecoil
- - type: Examiner
- - type: CanHostGuardian
- - type: NpcFactionMember
- factions:
- - NanoTrasen
- - type: Respirator
- damage:
- types:
- Asphyxiation: 1.0
- damageRecovery:
- types:
- Asphyxiation: -1.0
diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml
index 2fb8e72a63..422ac61f86 100644
--- a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml
+++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml
@@ -18,15 +18,15 @@
- type: Damageable
damageContainer: Biological
damageModifierSet: Arachnid # spooder
- - type: Icon
- sprite: Mobs/Species/Arachnid/parts.rsi
- state: full
- type: Hunger
starvationDamage:
types:
Cold: 0.5
Bloodloss: 0.5
- type: Thirst
+ - type: Icon
+ sprite: Mobs/Species/Arachnid/parts.rsi
+ state: full
# Damage and speed
- type: Bloodstream
bloodReagent: SpiderBlood
diff --git a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml
index 7e75eb86ae..48e8dc6235 100644
--- a/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml
+++ b/Resources/Prototypes/Entities/Mobs/Species/dwarf.yml
@@ -12,7 +12,7 @@
Bloodloss: 0.5
- type: Thirst
- type: Icon
- sprite: Mobs/Species/Slime/parts.rsi
+ sprite: Mobs/Species/Slime/parts.rsi # It was like this beforehand, no idea why.
state: full
- type: Respirator
damage:
diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml
index 51e6b8c3ab..3e7a43520e 100644
--- a/Resources/Prototypes/Entities/Mobs/Species/human.yml
+++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml
@@ -9,7 +9,10 @@
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
- type: Thirst
- type: Perishable
- type: Butcherable
diff --git a/Resources/Prototypes/Entities/Mobs/Species/moth.yml b/Resources/Prototypes/Entities/Mobs/Species/moth.yml
new file mode 100644
index 0000000000..3cd48c4d6b
--- /dev/null
+++ b/Resources/Prototypes/Entities/Mobs/Species/moth.yml
@@ -0,0 +1,66 @@
+- type: entity
+ save: false
+ name: Urist McFluff
+ parent: BaseMobOrganic
+ id: BaseMobMoth
+ abstract: true
+ components:
+ - type: HumanoidAppearance
+ species: Moth
+ - type: Hunger
+ starvationDamage:
+ types:
+ Cold: 0.5
+ Bloodloss: 0.5
+ - type: Thirst
+ - type: Icon
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: full
+ - type: Body
+ prototype: Moth
+ requiredLegs: 2
+ - type: Damageable
+ damageContainer: Biological
+ damageModifierSet: Moth
+ - type: Butcherable
+ butcheringType: Spike
+ spawned:
+ - id: FoodMeat
+ amount: 5
+ - type: Vocal
+ sounds:
+ Male: UnisexMoth
+ Female: UnisexMoth
+ Unsexed: UnisexMoth
+ - type: MovementSpeedModifier
+ baseWalkSpeed : 2.5
+ baseSprintSpeed : 4.5
+ weightlessAcceleration: 1.5 # Move around more easily in space.
+ weightlessFriction: 1
+ weightlessModifier: 1
+ - type: Flammable
+ damage:
+ types:
+ Heat: 1.5 # moths burn more easily
+ - type: Temperature # Moths hate the heat and thrive in the cold.
+ heatDamageThreshold: 335
+ coldDamageThreshold: 230
+ currentTemperature: 310.15
+ specificHeat: 46
+ coldDamage:
+ types:
+ Cold : 0.05 #per second, scales with temperature & other constants
+ heatDamage:
+ types:
+ Heat : 0.2 #per second, scales with temperature & other constants
+
+- type: entity
+ save: false
+ name: Urist McFluff
+ parent: MobHumanDummy
+ id: MobMothDummy
+ noSpawn: true
+ description: A dummy moth meant to be used in character setup.
+ components:
+ - type: HumanoidAppearance
+ species: Moth
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Objects/Materials/materials.yml b/Resources/Prototypes/Entities/Objects/Materials/materials.yml
index d021ab2e30..f777cffdd7 100644
--- a/Resources/Prototypes/Entities/Objects/Materials/materials.yml
+++ b/Resources/Prototypes/Entities/Objects/Materials/materials.yml
@@ -12,8 +12,8 @@
- type: ItemStatus
- type: Tag
tags:
- - RawMaterial
- DroneUsable
+ - RawMaterial
- type: Damageable
damageContainer: Inorganic
- type: Destructible
@@ -69,11 +69,6 @@
name: cloth
suffix: Full
components:
- - type: Tag
- tags:
- - RawMaterial
- - DroneUsable
- - Gauze
- type: Healing
damageContainers:
- Biological
@@ -110,6 +105,22 @@
- type: Appearance
- type: Item
size: 30
+ - type: Food
+ requiresSpecialDigestion: true
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 5
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 5
+ - type: Tag
+ tags:
+ - ClothMade
+ - DroneUsable
+ - Gauze
+ - RawMaterial
+
- type: entity
parent: MaterialCloth
@@ -149,6 +160,20 @@
- type: Construction
graph: Durathread
node: MaterialDurathread
+ - type: Food
+ requiresSpecialDigestion: true
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 5
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 5
+ - type: Tag
+ tags:
+ - ClothMade
+ - DroneUsable
+ - RawMaterial
- type: entity
parent: MaterialDurathread
@@ -304,6 +329,20 @@
- type: Appearance
- type: Item
size: 30
+ - type: Food
+ requiresSpecialDigestion: true
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 5
+ reagents:
+ - ReagentId: Fiber
+ Quantity: 5
+ - type: Tag
+ tags:
+ - ClothMade
+ - DroneUsable
+ - RawMaterial
- type: entity
diff --git a/Resources/Prototypes/Reagents/fun.yml b/Resources/Prototypes/Reagents/fun.yml
index 044f9206b5..b90b0e8032 100644
--- a/Resources/Prototypes/Reagents/fun.yml
+++ b/Resources/Prototypes/Reagents/fun.yml
@@ -34,6 +34,14 @@
physicalDesc: reagent-physical-desc-fibrous
flavor: fiber
color: "#808080"
+ metabolisms:
+ Food:
+ effects:
+ - !type:SatiateHunger
+ conditions:
+ - !type:OrganType
+ type: Moth
+
- type: reagent
id: BuzzochloricBees
diff --git a/Resources/Prototypes/Species/moth.yml b/Resources/Prototypes/Species/moth.yml
new file mode 100644
index 0000000000..c0c4d6ba06
--- /dev/null
+++ b/Resources/Prototypes/Species/moth.yml
@@ -0,0 +1,144 @@
+- type: species
+ id: Moth
+ name: species-name-moth
+ roundStart: true
+ prototype: MobMoth
+ sprites: MobMothSprites
+ defaultSkinTone: "#ffda93"
+ markingLimits: MobMothMarkingLimits
+ dollPrototype: MobMothDummy
+ skinColoration: Hues
+
+- type: speciesBaseSprites
+ id: MobMothSprites
+ sprites:
+ Head: MobMothHead
+ Snout: MobHumanoidAnyMarking
+ Chest: MobMothTorso
+ HeadTop: MobHumanoidAnyMarking
+ HeadSide: MobHumanoidAnyMarking
+ Tail: MobHumanoidAnyMarking
+ Eyes: MobMothEyes
+ LArm: MobMothLArm
+ RArm: MobMothRArm
+ LHand: MobMothLHand
+ RHand: MobMothRHand
+ LLeg: MobMothLLeg
+ RLeg: MobMothRLeg
+ LFoot: MobMothLFoot
+ RFoot: MobMothRFoot
+
+- type: humanoidBaseSprite
+ id: MobMothEyes
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: eyes
+
+- type: markingPoints
+ id: MobMothMarkingLimits
+ onlyWhitelisted: true
+ points:
+ Hair:
+ points: 0
+ required: false
+ FacialHair:
+ points: 0
+ required: false
+ Tail:
+ points: 1
+ required: true
+ defaultMarkings: [ MothWingsDefault ]
+ Snout:
+ points: 1
+ required: false
+ HeadTop:
+ points: 1
+ required: true
+ defaultMarkings: [ MothAntennasDefault ]
+ HeadSide:
+ points: 1
+ required: false
+
+- type: humanoidBaseSprite
+ id: MobMothHead
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: head_m
+
+- type: humanoidBaseSprite
+ id: MobMothHeadMale
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: head_m
+
+- type: humanoidBaseSprite
+ id: MobMothHeadFemale
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: head_f
+
+- type: humanoidBaseSprite
+ id: MobMothTorso
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: torso_m
+
+- type: humanoidBaseSprite
+ id: MobMothTorsoMale
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: torso_m
+
+- type: humanoidBaseSprite
+ id: MobMothTorsoFemale
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: torso_f
+
+- type: humanoidBaseSprite
+ id: MobMothLLeg
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: l_leg
+
+- type: humanoidBaseSprite
+ id: MobMothLHand
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: l_hand
+
+- type: humanoidBaseSprite
+ id: MobMothLArm
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: l_arm
+
+- type: humanoidBaseSprite
+ id: MobMothLFoot
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: l_foot
+
+- type: humanoidBaseSprite
+ id: MobMothRLeg
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: r_leg
+
+- type: humanoidBaseSprite
+ id: MobMothRHand
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: r_hand
+
+- type: humanoidBaseSprite
+ id: MobMothRArm
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: r_arm
+
+- type: humanoidBaseSprite
+ id: MobMothRFoot
+ baseSprite:
+ sprite: Mobs/Species/Moth/parts.rsi
+ state: r_foot
diff --git a/Resources/Prototypes/Voice/speech_emote_sounds.yml b/Resources/Prototypes/Voice/speech_emote_sounds.yml
index e9e80c3513..064f153bd1 100644
--- a/Resources/Prototypes/Voice/speech_emote_sounds.yml
+++ b/Resources/Prototypes/Voice/speech_emote_sounds.yml
@@ -255,6 +255,18 @@
variation: 0.125
pitchscale: 0.75
+- type: emoteSounds
+ id: UnisexMoth
+ params:
+ variation: 0.125
+ sounds:
+ Scream:
+ path: /Audio/Voice/Moth/moth_scream.ogg
+ Laugh:
+ path: /Audio/Voice/Moth/moth_laugh.ogg
+ Chitter:
+ path: /Audio/Voice/Moth/moth_chitter.ogg
+
# body emotes
- type: emoteSounds
id: GeneralBodyEmotes
diff --git a/Resources/Prototypes/Voice/speech_emotes.yml b/Resources/Prototypes/Voice/speech_emotes.yml
index f06163c6cc..8eef5d083a 100644
--- a/Resources/Prototypes/Voice/speech_emotes.yml
+++ b/Resources/Prototypes/Voice/speech_emotes.yml
@@ -110,6 +110,21 @@
- squishes.
- squishes!
+- type: emote
+ id: Chitter
+ category: Vocal
+ chatMessages: [chitters.]
+ chatTriggers:
+ - chitter
+ - chitter.
+ - chitter!
+ - chitters
+ - chitters.
+ - chitters!
+ - chittered
+ - chittered.
+ - chittered!
+
# hand emotes
- type: emote
id: Clap
diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml
index 5d22537db1..acbfa1fb2e 100644
--- a/Resources/Prototypes/tags.yml
+++ b/Resources/Prototypes/tags.yml
@@ -167,6 +167,9 @@
- type: Tag
id: CigPack
+- type: Tag
+ id: ClothMade
+
- type: Tag
id: ClownMask
diff --git a/Resources/Textures/Mobs/Customization/moth_parts.rsi/antenna_default.png b/Resources/Textures/Mobs/Customization/moth_parts.rsi/antenna_default.png
new file mode 100644
index 0000000000..915cf0e317
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/moth_parts.rsi/antenna_default.png differ
diff --git a/Resources/Textures/Mobs/Customization/moth_parts.rsi/meta.json b/Resources/Textures/Mobs/Customization/moth_parts.rsi/meta.json
new file mode 100644
index 0000000000..81d72f1ba7
--- /dev/null
+++ b/Resources/Textures/Mobs/Customization/moth_parts.rsi/meta.json
@@ -0,0 +1,31 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "https://github.com/tgstation/tgstation/commit/1d0eadcb126fc3581eed33490f4be2a88157af58#diff-69bd499bf0bc772862b15c2c9209e2eb5804a1bf72162b2ec4e75158cacb6109, modified by https://github.com/PixelTheKermit",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "wings_default",
+ "directions": 4
+ },
+ {
+ "name": "wings_look1",
+ "directions": 4
+ },
+ {
+ "name": "wings_look2",
+ "directions": 4
+ },
+ {
+ "name": "wings_look3",
+ "directions": 4
+ },
+ {
+ "name": "antenna_default",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/Mobs/Customization/moth_parts.rsi/wings_default.png b/Resources/Textures/Mobs/Customization/moth_parts.rsi/wings_default.png
new file mode 100644
index 0000000000..8124b7e689
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/moth_parts.rsi/wings_default.png differ
diff --git a/Resources/Textures/Mobs/Customization/moth_parts.rsi/wings_look1.png b/Resources/Textures/Mobs/Customization/moth_parts.rsi/wings_look1.png
new file mode 100644
index 0000000000..c56078f81d
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/moth_parts.rsi/wings_look1.png differ
diff --git a/Resources/Textures/Mobs/Customization/moth_parts.rsi/wings_look2.png b/Resources/Textures/Mobs/Customization/moth_parts.rsi/wings_look2.png
new file mode 100644
index 0000000000..8b28d21a68
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/moth_parts.rsi/wings_look2.png differ
diff --git a/Resources/Textures/Mobs/Customization/moth_parts.rsi/wings_look3.png b/Resources/Textures/Mobs/Customization/moth_parts.rsi/wings_look3.png
new file mode 100644
index 0000000000..f46115c604
Binary files /dev/null and b/Resources/Textures/Mobs/Customization/moth_parts.rsi/wings_look3.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/eyes.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/eyes.png
new file mode 100644
index 0000000000..4da4429f65
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/eyes.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/full.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/full.png
new file mode 100644
index 0000000000..a1f944ad02
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/full.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/head_f.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/head_f.png
new file mode 100644
index 0000000000..6788ca0c00
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/head_f.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/head_m.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/head_m.png
new file mode 100644
index 0000000000..6788ca0c00
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/head_m.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/l_arm.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/l_arm.png
new file mode 100644
index 0000000000..0dac6f22cf
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/l_arm.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/l_foot.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/l_foot.png
new file mode 100644
index 0000000000..1dfe4f9172
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/l_foot.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/l_hand.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/l_hand.png
new file mode 100644
index 0000000000..7b90385759
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/l_hand.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/l_leg.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/l_leg.png
new file mode 100644
index 0000000000..be5690b15f
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/l_leg.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/meta.json b/Resources/Textures/Mobs/Species/Moth/parts.rsi/meta.json
new file mode 100644
index 0000000000..016f008fc9
--- /dev/null
+++ b/Resources/Textures/Mobs/Species/Moth/parts.rsi/meta.json
@@ -0,0 +1,66 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "https://github.com/tgstation/tgstation/commit/1d0eadcb126fc3581eed33490f4be2a88157af58, modified by https://github.com/PixelTheKermit",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "full"
+ },
+ {
+ "name": "head_f",
+ "directions": 4
+ },
+ {
+ "name": "head_m",
+ "directions": 4
+ },
+ {
+ "name": "l_arm",
+ "directions": 4
+ },
+ {
+ "name": "l_foot",
+ "directions": 4
+ },
+ {
+ "name": "l_hand",
+ "directions": 4
+ },
+ {
+ "name": "l_leg",
+ "directions": 4
+ },
+ {
+ "name": "r_arm",
+ "directions": 4
+ },
+ {
+ "name": "r_foot",
+ "directions": 4
+ },
+ {
+ "name": "r_hand",
+ "directions": 4
+ },
+ {
+ "name": "r_leg",
+ "directions": 4
+ },
+ {
+ "name": "torso_f",
+ "directions": 4
+ },
+ {
+ "name": "torso_m",
+ "directions": 4
+ },
+ {
+ "name": "eyes",
+ "directions": 4
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/r_arm.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/r_arm.png
new file mode 100644
index 0000000000..7ece2c81c7
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/r_arm.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/r_foot.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/r_foot.png
new file mode 100644
index 0000000000..1071c6bf8b
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/r_foot.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/r_hand.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/r_hand.png
new file mode 100644
index 0000000000..1302b00b0e
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/r_hand.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/r_leg.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/r_leg.png
new file mode 100644
index 0000000000..9ab0c87284
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/r_leg.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/torso_f.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/torso_f.png
new file mode 100644
index 0000000000..233dd6d722
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/torso_f.png differ
diff --git a/Resources/Textures/Mobs/Species/Moth/parts.rsi/torso_m.png b/Resources/Textures/Mobs/Species/Moth/parts.rsi/torso_m.png
new file mode 100644
index 0000000000..a2722c2273
Binary files /dev/null and b/Resources/Textures/Mobs/Species/Moth/parts.rsi/torso_m.png differ