Ver código fonte

Bridges (#126)

* gun bolt sprites

* added weight classes to items, enables bridges

* buffs slowdown

* bridging
Taislin 7 meses atrás
pai
commit
0e5e7bd045
100 arquivos alterados com 15629 adições e 15241 exclusões
  1. 15 1
      Content.Server/Engineering/EntitySystems/SpawnAfterInteractSystem.cs
  2. 1 1
      Content.Shared/_Stalker/Stamina/StaminaActiveComponent.cs
  3. 131 119
      Resources/Prototypes/Body/Organs/Animal/animal.yml
  4. 127 117
      Resources/Prototypes/Body/Organs/arachnid.yml
  5. 182 168
      Resources/Prototypes/Body/Organs/human.yml
  6. 41 38
      Resources/Prototypes/Body/Organs/slime.yml
  7. 11 9
      Resources/Prototypes/Body/Organs/vox.yml
  8. 260 257
      Resources/Prototypes/Catalog/Fills/Boxes/general.yml
  9. 110 108
      Resources/Prototypes/Catalog/Fills/Items/belt.yml
  10. 40 38
      Resources/Prototypes/Catalog/Fills/Items/briefcases.yml
  11. 2 0
      Resources/Prototypes/Civ14/Entities/Mobs/animals.yml
  12. 5 5
      Resources/Prototypes/Civ14/Entities/Objects/Specific/Farming/plants.yml
  13. 2 0
      Resources/Prototypes/Civ14/Entities/Objects/Specific/Farming/seeds.yml
  14. 14 0
      Resources/Prototypes/Civ14/Entities/Objects/Tools/tools.yml
  15. 2 0
      Resources/Prototypes/Civ14/Entities/Objects/Weapons/stone_age.yml
  16. 2 0
      Resources/Prototypes/Civ14/Entities/Structures/Furniture/beds.yml
  17. 29 0
      Resources/Prototypes/Civ14/Recipes/Construction/floors.yml
  18. 67 0
      Resources/Prototypes/Civ14/Tiles/floors.yml
  19. 152 148
      Resources/Prototypes/Entities/Clothing/Back/backpacks.yml
  20. 89 87
      Resources/Prototypes/Entities/Clothing/Back/duffel.yml
  21. 53 51
      Resources/Prototypes/Entities/Clothing/Back/satchel.yml
  22. 52 50
      Resources/Prototypes/Entities/Clothing/Back/specific.yml
  23. 42 37
      Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml
  24. 455 451
      Resources/Prototypes/Entities/Clothing/Belt/belts.yml
  25. 153 151
      Resources/Prototypes/Entities/Clothing/Ears/headsets.yml
  26. 35 33
      Resources/Prototypes/Entities/Clothing/Eyes/base_clothingeyes.yml
  27. 46 42
      Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml
  28. 215 211
      Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml
  29. 336 337
      Resources/Prototypes/Entities/Clothing/Head/hats.yml
  30. 32 30
      Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml
  31. 392 380
      Resources/Prototypes/Entities/Clothing/Masks/masks.yml
  32. 625 624
      Resources/Prototypes/Entities/Clothing/Multiple/towel.yml
  33. 33 31
      Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml
  34. 61 59
      Resources/Prototypes/Entities/Clothing/Neck/misc.yml
  35. 72 70
      Resources/Prototypes/Entities/Clothing/Neck/pins.yml
  36. 138 130
      Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml
  37. 464 458
      Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml
  38. 216 212
      Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml
  39. 538 539
      Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml
  40. 44 42
      Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml
  41. 148 146
      Resources/Prototypes/Entities/Clothing/Shoes/specific.yml
  42. 2 0
      Resources/Prototypes/Entities/Clothing/base_clothing.yml
  43. 85 83
      Resources/Prototypes/Entities/Debugging/debug_sweps.yml
  44. 16 14
      Resources/Prototypes/Entities/Debugging/item.yml
  45. 18 0
      Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
  46. 263 267
      Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml
  47. 2 0
      Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml
  48. 418 420
      Resources/Prototypes/Entities/Mobs/NPCs/space.yml
  49. 2 0
      Resources/Prototypes/Entities/Mobs/Species/human.yml
  50. 135 132
      Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml
  51. 418 414
      Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml
  52. 420 419
      Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml
  53. 146 145
      Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml
  54. 178 195
      Resources/Prototypes/Entities/Objects/Consumable/Drinks/trash_drinks.yml
  55. 423 421
      Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml
  56. 386 382
      Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml
  57. 247 245
      Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml
  58. 418 414
      Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml
  59. 357 355
      Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml
  60. 446 443
      Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml
  61. 456 458
      Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml
  62. 430 427
      Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/condiments.yml
  63. 137 135
      Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml
  64. 432 430
      Resources/Prototypes/Entities/Objects/Consumable/Food/burger.yml
  65. 100 99
      Resources/Prototypes/Entities/Objects/Consumable/Food/egg.yml
  66. 391 394
      Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml
  67. 2 0
      Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml
  68. 20 0
      Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml
  69. 413 410
      Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml
  70. 258 254
      Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml
  71. 96 92
      Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml
  72. 218 215
      Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/packs.yml
  73. 49 45
      Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/cigar.yml
  74. 60 58
      Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml
  75. 28 26
      Resources/Prototypes/Entities/Objects/Decoration/ashtray.yml
  76. 10 8
      Resources/Prototypes/Entities/Objects/Decoration/jackolantern.yml
  77. 10 8
      Resources/Prototypes/Entities/Objects/Decoration/lidsalami.yml
  78. 400 398
      Resources/Prototypes/Entities/Objects/Decoration/present.yml
  79. 47 45
      Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml
  80. 10 8
      Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/chimp_upgrade_kit.yml
  81. 33 33
      Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml
  82. 2 0
      Resources/Prototypes/Entities/Objects/Devices/flatpack.yml
  83. 2 0
      Resources/Prototypes/Entities/Objects/Devices/forensic_scanner.yml
  84. 399 435
      Resources/Prototypes/Entities/Objects/Devices/pda.yml
  85. 248 246
      Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml
  86. 23 21
      Resources/Prototypes/Entities/Objects/Devices/swapper.yml
  87. 60 60
      Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml
  88. 57 49
      Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_brass.yml
  89. 131 119
      Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_misc.yml
  90. 96 88
      Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml
  91. 200 187
      Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml
  92. 143 125
      Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_wind.yml
  93. 163 166
      Resources/Prototypes/Entities/Objects/Fun/darts.yml
  94. 79 79
      Resources/Prototypes/Entities/Objects/Fun/dice.yml
  95. 28 26
      Resources/Prototypes/Entities/Objects/Fun/dice_bag.yml
  96. 32 30
      Resources/Prototypes/Entities/Objects/Fun/puppet.yml
  97. 47 45
      Resources/Prototypes/Entities/Objects/Fun/snap_pops.yml
  98. 418 410
      Resources/Prototypes/Entities/Objects/Fun/toys.yml
  99. 85 83
      Resources/Prototypes/Entities/Objects/Magic/books.yml
  100. 4 0
      Resources/Prototypes/Entities/Objects/Materials/materials.yml

+ 15 - 1
Content.Server/Engineering/EntitySystems/SpawnAfterInteractSystem.cs

@@ -8,6 +8,7 @@
 using Content.Shared.Stacks;
 using JetBrains.Annotations;
 using Robust.Shared.Map.Components;
+using Content.Shared.Tag;
 
 namespace Content.Server.Engineering.EntitySystems
 {
@@ -17,7 +18,8 @@ public sealed class SpawnAfterInteractSystem : EntitySystem
         [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!;
         [Dependency] private readonly StackSystem _stackSystem = default!;
         [Dependency] private readonly TurfSystem _turfSystem = default!;
-
+        [Dependency] private readonly TagSystem _tagSystem = default!;
+        [Dependency] private readonly EntityLookupSystem _lookup = default!;
         public override void Initialize()
         {
             base.Initialize();
@@ -67,6 +69,18 @@ bool IsTileClear()
 
             EntityManager.SpawnEntity(component.Prototype, args.ClickLocation.SnapToGrid(grid));
 
+            if (_tagSystem.HasTag(uid, "Bridging"))
+            {
+                var loc_entities = _lookup.GetEntitiesInRange(uid, 1);
+                foreach (var ent in loc_entities)
+                {
+                    if (_tagSystem.HasTag(ent, "Water") && _tagSystem.HasTag(ent, "Bridgeable"))
+                    {
+                        var coordinates = Transform(ent).Coordinates;
+                        QueueDel(ent);
+                    }
+                }
+            }
             if (component.RemoveOnInteract && stackComp == null)
                 TryQueueDel(uid);
         }

+ 1 - 1
Content.Shared/_Stalker/Stamina/StaminaActiveComponent.cs

@@ -22,7 +22,7 @@ public sealed partial class StaminaActiveComponent : Component
     /// Stamina damage to apply when entity is running
     /// </summary>
     [DataField("runStaminaDamage"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
-    public float RunStaminaDamage = 0.2f;
+    public float RunStaminaDamage = 0.4f;
 
     /// <summary>
     /// Modifier to set entity sprint speed to a walking speed. Counts himself.

+ 131 - 119
Resources/Prototypes/Body/Organs/Animal/animal.yml

@@ -3,164 +3,176 @@
   parent: BaseItem
   abstract: true
   components:
-  - type: Organ
-  - type: Food
-  - type: Sprite
-    sprite: Mobs/Species/Human/organs.rsi
-  - type: StaticPrice
-    price: 50
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 5
-        reagents:
-        - ReagentId: UncookedAnimalProteins
-          Quantity: 5
-  - type: FlavorProfile
-    flavors:
-      - chicken # everything kinda tastes like chicken
-  - type: Tag
-    tags:
-      - Meat
+    - type: Organ
+    - type: Food
+    - type: Sprite
+      sprite: Mobs/Species/Human/organs.rsi
+    - type: StaticPrice
+      price: 50
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 5
+          reagents:
+            - ReagentId: UncookedAnimalProteins
+              Quantity: 5
+    - type: FlavorProfile
+      flavors:
+        - chicken # everything kinda tastes like chicken
+    - type: Tag
+      tags:
+        - Meat
 
 - type: entity
   id: BaseAnimalOrgan
   parent: BaseAnimalOrganUnGibbable
   abstract: true
   components:
-  - type: Gibbable
+    - type: Gibbable
 
 - type: entity
   id: OrganAnimalLungs
   parent: BaseAnimalOrgan
   name: lungs
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   components:
-  - type: Sprite
-    layers:
-    - state: lung-l
-    - state: lung-r
-  - type: Organ
-  - type: Lung
-  - type: Metabolizer
-    removeEmpty: true
-    solutionOnBody: false
-    solution: "Lung"
-    metabolizerTypes: [ Animal ]
-    groups:
-    - id: Gas
-      rateModifier: 100.0
-  - type: SolutionContainerManager
-    solutions:
-      Lung:
-        maxVol: 100.0
-        canReact: false
-      food:
-        maxVol: 5
-        reagents:
-        - ReagentId: UncookedAnimalProteins
-          Quantity: 5
-  - type: Item
-    size: Small
-    heldPrefix: lungs
+    - type: Sprite
+      layers:
+        - state: lung-l
+        - state: lung-r
+    - type: Organ
+    - type: Lung
+    - type: Metabolizer
+      removeEmpty: true
+      solutionOnBody: false
+      solution: "Lung"
+      metabolizerTypes: [Animal]
+      groups:
+        - id: Gas
+          rateModifier: 100.0
+    - type: SolutionContainerManager
+      solutions:
+        Lung:
+          maxVol: 100.0
+          canReact: false
+        food:
+          maxVol: 5
+          reagents:
+            - ReagentId: UncookedAnimalProteins
+              Quantity: 5
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: lungs
 
 - type: entity
   id: OrganAnimalStomach
   parent: BaseAnimalOrgan
   name: stomach
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   components:
-  - type: Sprite
-    state: stomach
-  - type: Organ
-  - type: SolutionContainerManager
-    solutions:
-      stomach:
-        maxVol: 40
-      food:
-        maxVol: 5
-        reagents:
-        - ReagentId: UncookedAnimalProteins
-          Quantity: 5
-  - type: Stomach
-  - type: Metabolizer
-    maxReagents: 3
-    metabolizerTypes: [ Animal ]
-    groups:
-    - id: Food
-    - id: Drink
-  - type: Item
-    size: Small
-    heldPrefix: stomach
+    - type: Sprite
+      state: stomach
+    - type: Organ
+    - type: SolutionContainerManager
+      solutions:
+        stomach:
+          maxVol: 40
+        food:
+          maxVol: 5
+          reagents:
+            - ReagentId: UncookedAnimalProteins
+              Quantity: 5
+    - type: Stomach
+    - type: Metabolizer
+      maxReagents: 3
+      metabolizerTypes: [Animal]
+      groups:
+        - id: Food
+        - id: Drink
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: stomach
 
 - type: entity
   id: OrganMouseStomach
   parent: OrganAnimalStomach
   name: stomach
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   components:
-  - type: SolutionContainerManager
-    solutions:
-      stomach:
-        maxVol: 30
-  - type: Item
-    size: Small
-    heldPrefix: stomach
+    - type: SolutionContainerManager
+      solutions:
+        stomach:
+          maxVol: 30
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: stomach
 
 - type: entity
   id: OrganAnimalLiver
   parent: BaseAnimalOrgan
   name: liver
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   components:
-  - type: Sprite
-    state: liver
-  - type: Organ
-  - type: Metabolizer
-    maxReagents: 1
-    metabolizerTypes: [ Animal ]
-    groups:
-    - id: Alcohol
-      rateModifier: 0.1
-  - type: Item
-    size: Small
-    heldPrefix: liver
+    - type: Sprite
+      state: liver
+    - type: Organ
+    - type: Metabolizer
+      maxReagents: 1
+      metabolizerTypes: [Animal]
+      groups:
+        - id: Alcohol
+          rateModifier: 0.1
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: liver
 
 - type: entity
   id: OrganAnimalHeart
   parent: BaseAnimalOrgan
   name: heart
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   components:
-  - type: Sprite
-    state: heart-on
-  - type: Organ
-  - type: Metabolizer
-    maxReagents: 2
-    metabolizerTypes: [ Animal ]
-    groups:
-    - id: Medicine
-    - id: Poison
-    - id: Narcotic
-  - type: Item
-    size: Small
-    heldPrefix: heart
+    - type: Sprite
+      state: heart-on
+    - type: Organ
+    - type: Metabolizer
+      maxReagents: 2
+      metabolizerTypes: [Animal]
+      groups:
+        - id: Medicine
+        - id: Poison
+        - id: Narcotic
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: heart
 
 - type: entity
   id: OrganAnimalKidneys
   parent: BaseAnimalOrgan
   name: kidneys
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   components:
-  - type: Sprite
-    layers:
-    - state: kidney-l
-    - state: kidney-r
-  - type: Organ
-  - type: Metabolizer
-    maxReagents: 5
-    metabolizerTypes: [ Animal ]
-    removeEmpty: true
-  - type: Item
-    size: Small
-    heldPrefix: kidneys
+    - type: Sprite
+      layers:
+        - state: kidney-l
+        - state: kidney-r
+    - type: Organ
+    - type: Metabolizer
+      maxReagents: 5
+      metabolizerTypes: [Animal]
+      removeEmpty: true
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: kidneys

+ 127 - 117
Resources/Prototypes/Body/Organs/arachnid.yml

@@ -3,27 +3,27 @@
   parent: BaseItem
   abstract: true
   components:
-  - type: Sprite
-    sprite: Mobs/Species/Arachnid/organs.rsi
-  - type: Organ
-  - type: Food
-  - type: Extractable
-    grindableSolutionName: organ
-  - type: SolutionContainerManager
-    solutions:
-      organ:
-        maxVol: 10
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-      food:
-        maxVol: 5
-        reagents:
-        - ReagentId: UncookedAnimalProteins
-          Quantity: 5
-  - type: Tag
-    tags:
-      - Meat
+    - type: Sprite
+      sprite: Mobs/Species/Arachnid/organs.rsi
+    - type: Organ
+    - type: Food
+    - type: Extractable
+      grindableSolutionName: organ
+    - type: SolutionContainerManager
+      solutions:
+        organ:
+          maxVol: 10
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+        food:
+          maxVol: 5
+          reagents:
+            - ReagentId: UncookedAnimalProteins
+              Quantity: 5
+    - type: Tag
+      tags:
+        - Meat
 
 - type: entity
   id: OrganArachnidStomach
@@ -31,25 +31,27 @@
   name: stomach
   description: "Gross. This is hard to stomach."
   components:
-  - type: Sprite
-    sprite: Mobs/Species/Arachnid/organs.rsi
-    state: stomach
-  - type: Item
-    size: Small
-    heldPrefix: stomach
-  - type: Stomach
-    digestionDelay: 30
-  - type: SolutionContainerManager
-    solutions:
-      stomach:
-        maxVol: 50
-      food:
-        maxVol: 5
-        reagents:
-        - ReagentId: UncookedAnimalProteins
-          Quantity: 5
-  - type: Metabolizer
-    updateInterval: 1.5
+    - type: Sprite
+      sprite: Mobs/Species/Arachnid/organs.rsi
+      state: stomach
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: stomach
+    - type: Stomach
+      digestionDelay: 30
+    - type: SolutionContainerManager
+      solutions:
+        stomach:
+          maxVol: 50
+        food:
+          maxVol: 5
+          reagents:
+            - ReagentId: UncookedAnimalProteins
+              Quantity: 5
+    - type: Metabolizer
+      updateInterval: 1.5
 
 - type: entity
   id: OrganArachnidLungs
@@ -57,34 +59,34 @@
   name: lungs
   description: "Filters oxygen from an atmosphere... just more greedily."
   components:
-  - type: Sprite
-    layers:
-      - state: lung-l
-      - state: lung-r
-  - type: Lung
-  - type: Metabolizer
-    updateInterval: 1.5
-    removeEmpty: true
-    solutionOnBody: false
-    solution: "Lung"
-    metabolizerTypes: [ Human ]
-    groups:
-    - id: Gas
-      rateModifier: 100.0
-  - type: SolutionContainerManager
-    solutions:
-      organ:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-      Lung:
-        maxVol: 100.0
-        canReact: false
-      food:
-        maxVol: 5
-        reagents:
-        - ReagentId: UncookedAnimalProteins
-          Quantity: 5
+    - type: Sprite
+      layers:
+        - state: lung-l
+        - state: lung-r
+    - type: Lung
+    - type: Metabolizer
+      updateInterval: 1.5
+      removeEmpty: true
+      solutionOnBody: false
+      solution: "Lung"
+      metabolizerTypes: [Human]
+      groups:
+        - id: Gas
+          rateModifier: 100.0
+    - type: SolutionContainerManager
+      solutions:
+        organ:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+        Lung:
+          maxVol: 100.0
+          canReact: false
+        food:
+          maxVol: 5
+          reagents:
+            - ReagentId: UncookedAnimalProteins
+              Quantity: 5
 
 - type: entity
   id: OrganArachnidHeart
@@ -92,60 +94,66 @@
   name: heart
   description: "A disgustingly persistent little biological pump made for spiders."
   components:
-  - type: Sprite
-    state: heart-on
-  - type: Item
-    size: Small
-    heldPrefix: heart
-  - type: Metabolizer
-    updateInterval: 1.5
-    maxReagents: 2
-    metabolizerTypes: [Arachnid]
-    groups:
-    - id: Medicine
-    - id: Poison
-    - id: Narcotic
+    - type: Sprite
+      state: heart-on
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: heart
+    - type: Metabolizer
+      updateInterval: 1.5
+      maxReagents: 2
+      metabolizerTypes: [Arachnid]
+      groups:
+        - id: Medicine
+        - id: Poison
+        - id: Narcotic
 
 - type: entity
   id: OrganArachnidLiver
   parent: BaseHumanOrgan
   name: liver
   description: "Pairing suggestion: chianti and fava beans."
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   components:
-  - type: Item
-    size: Small
-    heldPrefix: liver
-  - type: Sprite
-    state: liver
-  - type: Metabolizer # The liver metabolizes certain chemicals only, like alcohol.
-    updateInterval: 1.5
-    maxReagents: 1
-    metabolizerTypes: [Animal]
-    groups:
-    - id: Alcohol
-      rateModifier: 0.1 # removes alcohol very slowly along with the stomach removing it as a drink
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: liver
+    - type: Sprite
+      state: liver
+    - type: Metabolizer # The liver metabolizes certain chemicals only, like alcohol.
+      updateInterval: 1.5
+      maxReagents: 1
+      metabolizerTypes: [Animal]
+      groups:
+        - id: Alcohol
+          rateModifier: 0.1 # removes alcohol very slowly along with the stomach removing it as a drink
 
 - type: entity
   id: OrganArachnidKidneys
   parent: BaseHumanOrgan
   name: kidneys
   description: "Filters toxins from the bloodstream."
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   components:
-  - type: Sprite
-    layers:
-      - state: kidney-l
-      - state: kidney-r
-  # The kidneys just remove anything that doesn't currently have any metabolisms, as a stopgap.
-  - type: Item
-    size: Small
-    heldPrefix: kidneys
-  - type: Metabolizer
-    updateInterval: 1.5
-    maxReagents: 5
-    metabolizerTypes: [Animal]
-    removeEmpty: true
+    - type: Sprite
+      layers:
+        - state: kidney-l
+        - state: kidney-r
+    # The kidneys just remove anything that doesn't currently have any metabolisms, as a stopgap.
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: kidneys
+    - type: Metabolizer
+      updateInterval: 1.5
+      maxReagents: 5
+      metabolizerTypes: [Animal]
+      removeEmpty: true
 
 - type: entity
   id: OrganArachnidEyes
@@ -153,13 +161,15 @@
   name: eyes
   description: "Two was already too many."
   components:
-  - type: Sprite
-    layers:
-      - state: eyeball-l
-      - state: eyeball-r
-  - type: Item
-    size: Small
-    heldPrefix: eyeballs
+    - type: Sprite
+      layers:
+        - state: eyeball-l
+        - state: eyeball-r
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: eyeballs
 
 - type: entity
   id: OrganArachnidTongue
@@ -167,5 +177,5 @@
   name: tongue
   description: "A fleshy muscle mostly used for lying."
   components:
-  - type: Sprite
-    state: tongue
+    - type: Sprite
+      state: tongue

+ 182 - 168
Resources/Prototypes/Body/Organs/human.yml

@@ -3,36 +3,36 @@
   parent: BaseItem
   abstract: true
   components:
-  - type: Sprite
-    sprite: Mobs/Species/Human/organs.rsi
-  - type: Organ
-  - type: Food
-  - type: Extractable
-    grindableSolutionName: organ
-  - type: SolutionContainerManager
-    solutions:
-      organ:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-      food:
-        maxVol: 5
-        reagents:
-        - ReagentId: UncookedAnimalProteins
-          Quantity: 5
-  - type: FlavorProfile
-    flavors:
-      - people
-  - type: Tag
-    tags:
-      - Meat
+    - type: Sprite
+      sprite: Mobs/Species/Human/organs.rsi
+    - type: Organ
+    - type: Food
+    - type: Extractable
+      grindableSolutionName: organ
+    - type: SolutionContainerManager
+      solutions:
+        organ:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+        food:
+          maxVol: 5
+          reagents:
+            - ReagentId: UncookedAnimalProteins
+              Quantity: 5
+    - type: FlavorProfile
+      flavors:
+        - people
+    - type: Tag
+      tags:
+        - Meat
 
 - type: entity
   id: BaseHumanOrgan
   parent: BaseHumanOrganUnGibbable
   abstract: true
   components:
-  - type: Gibbable
+    - type: Gibbable
 
 - type: entity
   id: OrganHumanBrain
@@ -40,54 +40,58 @@
   name: brain
   description: "The source of incredible, unending intelligence. Honk."
   components:
-  - type: Sprite
-    state: brain
-  - type: Organ
-  - type: Input
-    context: "ghost"
-  - type: Brain
-  - type: InputMover
-  - type: Examiner
-  - type: BlockMovement
-  - type: BadFood
-  - type: Tag
-    tags:
-      - Meat
-  - type: SolutionContainerManager
-    solutions:
-      organ:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-      food:
-        maxVol: 5
-        reagents:
-        - ReagentId: GreyMatter
-          Quantity: 5
-  - type: FlavorProfile
-    flavors:
-      - people
-  - type: FoodSequenceElement
-    entries:
-      Burger: Brain
-      Taco: Brain
-  - type: Item
-    size: Small
-    heldPrefix: brain
-  
+    - type: Sprite
+      state: brain
+    - type: Organ
+    - type: Input
+      context: "ghost"
+    - type: Brain
+    - type: InputMover
+    - type: Examiner
+    - type: BlockMovement
+    - type: BadFood
+    - type: Tag
+      tags:
+        - Meat
+    - type: SolutionContainerManager
+      solutions:
+        organ:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+        food:
+          maxVol: 5
+          reagents:
+            - ReagentId: GreyMatter
+              Quantity: 5
+    - type: FlavorProfile
+      flavors:
+        - people
+    - type: FoodSequenceElement
+      entries:
+        Burger: Brain
+        Taco: Brain
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: brain
+
 - type: entity
   id: OrganHumanEyes
   parent: BaseHumanOrgan
   name: eyes
   description: "I see you!"
   components:
-  - type: Sprite
-    layers:
-      - state: eyeball-l
-      - state: eyeball-r
-  - type: Item
-    size: Small
-    heldPrefix: eyeballs
+    - type: Sprite
+      layers:
+        - state: eyeball-l
+        - state: eyeball-r
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: eyeballs
 
 - type: entity
   id: OrganHumanTongue
@@ -95,19 +99,19 @@
   name: tongue
   description: "A fleshy muscle mostly used for lying."
   components:
-  - type: Sprite
-    state: tongue
+    - type: Sprite
+      state: tongue
 
 - type: entity
   id: OrganHumanAppendix
   parent: BaseHumanOrgan
   name: appendix
   components:
-  - type: Sprite
-    layers:
-    - state: appendix
-    - state: appendix-inflamed
-      visible: false
+    - type: Sprite
+      layers:
+        - state: appendix
+        - state: appendix-inflamed
+          visible: false
 
 - type: entity
   id: OrganHumanEars
@@ -115,8 +119,8 @@
   name: ears
   description: "There are three parts to the ear. Inner, middle and outer. Only one of these parts should normally be visible."
   components:
-  - type: Sprite
-    state: ears
+    - type: Sprite
+      state: ears
 
 - type: entity
   id: OrganHumanLungs
@@ -124,36 +128,38 @@
   name: lungs
   description: "Filters oxygen from an atmosphere, which is then sent into the bloodstream to be used as an electron carrier."
   components:
-  - type: Sprite
-    layers:
-      - state: lung-l
-      - state: lung-r
-  - type: Item
-    size: Small
-    heldPrefix: lungs
-  - type: Lung
-  - type: Metabolizer
-    removeEmpty: true
-    solutionOnBody: false
-    solution: "Lung"
-    metabolizerTypes: [ Human ]
-    groups:
-    - id: Gas
-      rateModifier: 100.0
-  - type: SolutionContainerManager
-    solutions:
-      organ:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-      Lung:
-        maxVol: 100.0
-        canReact: false
-      food:
-        maxVol: 5
-        reagents:
-        - ReagentId: UncookedAnimalProteins
-          Quantity: 5
+    - type: Sprite
+      layers:
+        - state: lung-l
+        - state: lung-r
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: lungs
+    - type: Lung
+    - type: Metabolizer
+      removeEmpty: true
+      solutionOnBody: false
+      solution: "Lung"
+      metabolizerTypes: [Human]
+      groups:
+        - id: Gas
+          rateModifier: 100.0
+    - type: SolutionContainerManager
+      solutions:
+        organ:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+        Lung:
+          maxVol: 100.0
+          canReact: false
+        food:
+          maxVol: 5
+          reagents:
+            - ReagentId: UncookedAnimalProteins
+              Quantity: 5
 
 - type: entity
   id: OrganHumanHeart
@@ -161,21 +167,23 @@
   name: heart
   description: "I feel bad for the heartless bastard who lost this."
   components:
-  - type: Sprite
-    state: heart-on
-  # 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.
-  - type: Metabolizer
-    maxReagents: 2
-    metabolizerTypes: [Human]
-    groups:
-    - id: Medicine
-    - id: Poison
-    - id: Narcotic
-  - type: Item
-    size: Small
-    heldPrefix: heart
+    - type: Sprite
+      state: heart-on
+    # 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.
+    - type: Metabolizer
+      maxReagents: 2
+      metabolizerTypes: [Human]
+      groups:
+        - id: Medicine
+        - id: Poison
+        - id: Narcotic
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: heart
 
 - type: entity
   id: OrganHumanStomach
@@ -183,31 +191,33 @@
   name: stomach
   description: "Gross. This is hard to stomach."
   components:
-  - type: Sprite
-    state: stomach
-  - type: Item
-    size: Small
-    heldPrefix: stomach
-  - type: SolutionContainerManager
-    solutions:
-      stomach:
-        maxVol: 50
-      food:
-        maxVol: 5
-        reagents:
-        - ReagentId: UncookedAnimalProteins
-          Quantity: 5
-  - type: Stomach
-  # The stomach metabolizes stuff like foods and drinks.
-  # TODO: Have it work off of the ent's solution container, and move this
-  # to intestines instead.
-  - type: Metabolizer
-    # mm yummy
-    maxReagents: 3
-    metabolizerTypes: [Human]
-    groups:
-    - id: Food
-    - id: Drink
+    - type: Sprite
+      state: stomach
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: stomach
+    - type: SolutionContainerManager
+      solutions:
+        stomach:
+          maxVol: 50
+        food:
+          maxVol: 5
+          reagents:
+            - ReagentId: UncookedAnimalProteins
+              Quantity: 5
+    - type: Stomach
+    # The stomach metabolizes stuff like foods and drinks.
+    # TODO: Have it work off of the ent's solution container, and move this
+    # to intestines instead.
+    - type: Metabolizer
+      # mm yummy
+      maxReagents: 3
+      metabolizerTypes: [Human]
+      groups:
+        - id: Food
+        - id: Drink
 
 - type: entity
   id: OrganHumanLiver
@@ -215,17 +225,19 @@
   name: liver
   description: "Pairing suggestion: chianti and fava beans."
   components:
-  - type: Sprite
-    state: liver
-  - type: Item
-    size: Small
-    heldPrefix: liver
-  - type: Metabolizer # The liver metabolizes certain chemicals only, like alcohol.
-    maxReagents: 1
-    metabolizerTypes: [Human]
-    groups:
-    - id: Alcohol
-      rateModifier: 0.1 # removes alcohol very slowly along with the stomach removing it as a drink
+    - type: Sprite
+      state: liver
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: liver
+    - type: Metabolizer # The liver metabolizes certain chemicals only, like alcohol.
+      maxReagents: 1
+      metabolizerTypes: [Human]
+      groups:
+        - id: Alcohol
+          rateModifier: 0.1 # removes alcohol very slowly along with the stomach removing it as a drink
 
 - type: entity
   id: OrganHumanKidneys
@@ -233,15 +245,17 @@
   name: kidneys
   description: "Filters toxins from the bloodstream."
   components:
-  - type: Sprite
-    layers:
-      - state: kidney-l
-      - state: kidney-r
-  - type: Item
-    size: Small
-    heldPrefix: kidneys
-  # The kidneys just remove anything that doesn't currently have any metabolisms, as a stopgap.
-  - type: Metabolizer
-    maxReagents: 5
-    metabolizerTypes: [Human]
-    removeEmpty: true
+    - type: Sprite
+      layers:
+        - state: kidney-l
+        - state: kidney-r
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: kidneys
+    # The kidneys just remove anything that doesn't currently have any metabolisms, as a stopgap.
+    - type: Metabolizer
+      maxReagents: 5
+      metabolizerTypes: [Human]
+      removeEmpty: true

+ 41 - 38
Resources/Prototypes/Body/Organs/slime.yml

@@ -10,7 +10,7 @@
     - type: Stomach
     - type: Metabolizer
       maxReagents: 6
-      metabolizerTypes: [ Slime ]
+      metabolizerTypes: [Slime]
       removeEmpty: true
       groups:
         - id: Food
@@ -27,52 +27,55 @@
         food:
           maxVol: 5
           reagents:
-          - ReagentId: GreyMatter
-            Quantity: 5
+            - ReagentId: GreyMatter
+              Quantity: 5
         organ:
           reagents:
-          - ReagentId: Slime
-            Quantity: 10
+            - ReagentId: Slime
+              Quantity: 10
+    - type: STWeight
+      self: 1
     - type: Item
       size: Small
       heldPrefix: brain
 
-      
 - type: entity
   id: OrganSlimeLungs
   parent: BaseHumanOrgan
   name: slime gas sacs
   description: "Collects nitrogen, which slime cells use for maintenance."
   components:
-  - type: Sprite
-    sprite: Mobs/Species/Slime/organs.rsi
-    layers:
-      - state: lung-l-slime
-      - state: lung-r-slime
-  - type: Lung
-    alert: LowNitrogen
-  - type: Metabolizer
-    removeEmpty: true
-    solutionOnBody: false
-    solution: "Lung"
-    metabolizerTypes: [ Slime ]
-    groups:
-    - id: Gas
-      rateModifier: 100.0
-  - type: SolutionContainerManager
-    solutions:
-      organ:
-        reagents:
-        - ReagentId: Slime
-          Quantity: 10
-      Lung:
-        maxVol: 100.0
-        canReact: false
-      food:
-        maxVol: 5
-        reagents:
-        - ReagentId: UncookedAnimalProteins
-          Quantity: 5
-  - type: Item
-    size: Small
-    heldPrefix: lungs
+    - type: Sprite
+      sprite: Mobs/Species/Slime/organs.rsi
+      layers:
+        - state: lung-l-slime
+        - state: lung-r-slime
+    - type: Lung
+      alert: LowNitrogen
+    - type: Metabolizer
+      removeEmpty: true
+      solutionOnBody: false
+      solution: "Lung"
+      metabolizerTypes: [Slime]
+      groups:
+        - id: Gas
+          rateModifier: 100.0
+    - type: SolutionContainerManager
+      solutions:
+        organ:
+          reagents:
+            - ReagentId: Slime
+              Quantity: 10
+        Lung:
+          maxVol: 100.0
+          canReact: false
+        food:
+          maxVol: 5
+          reagents:
+            - ReagentId: UncookedAnimalProteins
+              Quantity: 5
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: lungs

+ 11 - 9
Resources/Prototypes/Body/Organs/vox.yml

@@ -4,12 +4,14 @@
   description: "The blue, anaerobic lungs of a vox, they intake nitrogen to breathe. Any form of gaseous oxygen is lethally toxic if breathed in."
   suffix: "vox"
   components:
-  - type: Sprite
-    sprite: Mobs/Species/Vox/organs.rsi
-  - type: Metabolizer
-    metabolizerTypes: [ Vox ]
-  - type: Lung
-    alert: LowNitrogen
-  - type: Item
-    size: Small
-    heldPrefix: lungs
+    - type: Sprite
+      sprite: Mobs/Species/Vox/organs.rsi
+    - type: Metabolizer
+      metabolizerTypes: [Vox]
+    - type: Lung
+      alert: LowNitrogen
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      heldPrefix: lungs

+ 260 - 257
Resources/Prototypes/Catalog/Fills/Boxes/general.yml

@@ -4,19 +4,21 @@
   id: BoxCardboard
   description: A cardboard box for storing things.
   components:
-  - type: Item
-    size: Large
-    shape:
-    - 0,0,2,2
-  - type: Storage
-    maxItemSize: Small
-    grid:
-    - 0,0,2,2
-  - type: Sprite
-    state: box
-  - type: Tag
-    tags:
-    - BoxCardboard
+    - type: STWeight
+      self: 5
+    - type: Item
+      size: Large
+      shape:
+        - 0,0,2,2
+    - type: Storage
+      maxItemSize: Small
+      grid:
+        - 0,0,2,2
+    - type: Sprite
+      state: box
+    - type: Tag
+      tags:
+        - BoxCardboard
 
 - type: entity
   name: mousetrap box
@@ -39,80 +41,80 @@
   id: BoxLightbulb
   description: This box is shaped on the inside so that only light tubes and bulbs fit.
   components:
-  - type: Sprite
-    layers:
-      - state: box
-      - state: light
-  - type: Storage
-    grid:
-    - 0,0,5,3
-    whitelist:
-      components:
-      - LightBulb
-  - type: StorageFill
-    contents:
-      - id: LightBulb
-        amount: 12
+    - type: Sprite
+      layers:
+        - state: box
+        - state: light
+    - type: Storage
+      grid:
+        - 0,0,5,3
+      whitelist:
+        components:
+          - LightBulb
+    - type: StorageFill
+      contents:
+        - id: LightBulb
+          amount: 12
 
 - type: entity
   name: lightbulb box warm
   parent: BoxLightbulb
   id: BoxWarmLightbulb
   components:
-  - type: StorageFill
-    contents:
-      - id: WarmLightBulb
-        amount: 12
+    - type: StorageFill
+      contents:
+        - id: WarmLightBulb
+          amount: 12
 
 - type: entity
   name: lighttube box
   parent: BoxLightbulb
   id: BoxLighttube
   components:
-  - type: Sprite
-    layers:
-      - state: box
-      - state: lighttube
-  - type: StorageFill
-    contents:
-      - id: LightTube
-        amount: 12
+    - type: Sprite
+      layers:
+        - state: box
+        - state: lighttube
+    - type: StorageFill
+      contents:
+        - id: LightTube
+          amount: 12
 
 - type: entity
   name: mixed lights box
   parent: BoxLightbulb
   id: BoxLightMixed
   components:
-  - type: Sprite
-    layers:
-      - state: box
-      - state: lightmixed
-  - type: StorageFill
-    contents:
-      - id: LightTube
-        amount: 6
-      - id: LightBulb
-        amount: 6
+    - type: Sprite
+      layers:
+        - state: box
+        - state: lightmixed
+    - type: StorageFill
+      contents:
+        - id: LightTube
+          amount: 6
+        - id: LightBulb
+          amount: 6
 
 - type: entity
   name: holiday lighttube box
   parent: BoxLightbulb
   id: BoxLighttubeHoliday
   components:
-  - type: StorageFill
-    contents:
-      - id: LightTubeCrystalRed # Its alternating on purpose for the light replacer.
-      - id: LightTubeCrystalGreen
-      - id: LightTubeCrystalRed
-      - id: LightTubeCrystalGreen
-      - id: LightTubeCrystalRed
-      - id: LightTubeCrystalGreen
-      - id: LightTubeCrystalRed
-      - id: LightTubeCrystalGreen
-      - id: LightTubeCrystalRed
-      - id: LightTubeCrystalGreen
-      - id: LightTubeCrystalRed
-      - id: LightTubeCrystalGreen
+    - type: StorageFill
+      contents:
+        - id: LightTubeCrystalRed # Its alternating on purpose for the light replacer.
+        - id: LightTubeCrystalGreen
+        - id: LightTubeCrystalRed
+        - id: LightTubeCrystalGreen
+        - id: LightTubeCrystalRed
+        - id: LightTubeCrystalGreen
+        - id: LightTubeCrystalRed
+        - id: LightTubeCrystalGreen
+        - id: LightTubeCrystalRed
+        - id: LightTubeCrystalGreen
+        - id: LightTubeCrystalRed
+        - id: LightTubeCrystalGreen
 
 - type: entity
   name: PDA box
@@ -120,14 +122,14 @@
   id: BoxPDA
   description: A box of spare PDA microcomputers.
   components:
-  - type: StorageFill
-    contents:
-      - id: PassengerPDA
-        amount: 4
-  - type: Sprite
-    layers:
-      - state: box
-      - state: pda
+    - type: StorageFill
+      contents:
+        - id: PassengerPDA
+          amount: 4
+    - type: Sprite
+      layers:
+        - state: box
+        - state: pda
 
 - type: entity
   name: ID card box
@@ -135,14 +137,14 @@
   id: BoxID
   description: A box of spare blank ID cards.
   components:
-  - type: StorageFill
-    contents:
-      - id: PassengerIDCard
-        amount: 4
-  - type: Sprite
-    layers:
-      - state: box
-      - state: pda
+    - type: StorageFill
+      contents:
+        - id: PassengerIDCard
+          amount: 4
+    - type: Sprite
+      layers:
+        - state: box
+        - state: pda
 
 - type: entity
   name: headset box
@@ -150,14 +152,14 @@
   id: BoxHeadset
   description: A box of spare passenger headsets.
   components:
-  - type: StorageFill
-    contents:
-      - id: ClothingHeadsetGrey
-        amount: 4
-  - type: Sprite
-    layers:
-      - state: box
-      - state: headset
+    - type: StorageFill
+      contents:
+        - id: ClothingHeadsetGrey
+          amount: 4
+    - type: Sprite
+      layers:
+        - state: box
+        - state: headset
 
 - type: entity
   name: meson box
@@ -165,14 +167,14 @@
   id: BoxMesonScanners
   description: A box of spare meson goggles.
   components:
-  - type: StorageFill
-    contents:
-      - id: ClothingEyesGlassesMeson
-        amount: 4
-  - type: Sprite
-    layers:
-      - state: box
-      - state: meson
+    - type: StorageFill
+      contents:
+        - id: ClothingEyesGlassesMeson
+          amount: 4
+    - type: Sprite
+      layers:
+        - state: box
+        - state: meson
 
 - type: entity
   name: M.R.E.
@@ -180,26 +182,26 @@
   id: BoxMRE
   description: A box of decades old military surplus rations. It is surprisingly not rotten.
   components:
-  - type: StorageFill
-    contents:
-      - id: DrinkMREFlask
-      - id: FoodSnackNutribrick
-      - id: FoodSnackMREBrownie
-      - id: FoodCondimentPacketKetchup
-  - type: Sprite
-    layers:
-      - state: box
-      - state: writing
+    - type: StorageFill
+      contents:
+        - id: DrinkMREFlask
+        - id: FoodSnackNutribrick
+        - id: FoodSnackMREBrownie
+        - id: FoodCondimentPacketKetchup
+    - type: Sprite
+      layers:
+        - state: box
+        - state: writing
 
 - type: entity
   parent: BoxHug
   id: BoxHugHealing
   suffix: Medical
   components:
-  - type: StorageFill
-    contents:
-      - id: Brutepack
-        amount: 3
+    - type: StorageFill
+      contents:
+        - id: Brutepack
+          amount: 3
 
 - type: entity
   name: inflatable wall box
@@ -207,17 +209,16 @@
   id: BoxInflatable
   description: Inflatable walls are not to be used as floatation devices.
   components:
-  - type: StorageFill
-    contents:
+    - type: StorageFill
+      contents:
         - id: InflatableWallStack
           amount: 2
         - id: InflatableDoorStack
           amount: 2
-  - type: Sprite
-    layers:
-      - state: box
-      - state: inflatable
-
+    - type: Sprite
+      layers:
+        - state: box
+        - state: inflatable
 
 - type: entity
   name: hatsune miku day bag
@@ -225,13 +226,13 @@
   id: BoxPerformer
   description: Happy Hatsune Miku Day!
   components:
-  - type: StorageFill
-    contents:
-      - id: ClothingShoesBootsPerformer
-      - id: ClothingUniformJumpskirtPerformer
-      - id: ClothingHeadPerformerWig
-      - id: FoodMealMemoryleek
-        amount: 2
+    - type: StorageFill
+      contents:
+        - id: ClothingShoesBootsPerformer
+        - id: ClothingUniformJumpskirtPerformer
+        - id: ClothingHeadPerformerWig
+        - id: FoodMealMemoryleek
+          amount: 2
 
 - type: entity
   name: flare box
@@ -239,14 +240,14 @@
   id: BoxFlare
   description: A box of flares. Party time.
   components:
-  - type: StorageFill
-    contents:
-      - id: Flare
-        amount: 6
-  - type: Sprite
-    layers:
-      - state: box
-      - state: flare
+    - type: StorageFill
+      contents:
+        - id: Flare
+          amount: 6
+    - type: Sprite
+      layers:
+        - state: box
+        - state: flare
 
 - type: entity
   name: trashbag box
@@ -254,21 +255,21 @@
   id: BoxTrashbag
   description: A box of trashbags. Happy janitor noises.
   components:
-  - type: StorageFill
-    contents:
-      - id: TrashBag
-        amount: 6
-  - type: Storage
-    grid:
-    - 0,0,5,3
-    maxItemSize: Large
-    whitelist:
-      tags:
-        - TrashBag
-  - type: Sprite
-    layers:
-      - state: box
-      - state: trashbag
+    - type: StorageFill
+      contents:
+        - id: TrashBag
+          amount: 6
+    - type: Storage
+      grid:
+        - 0,0,5,3
+      maxItemSize: Large
+      whitelist:
+        tags:
+          - TrashBag
+    - type: Sprite
+      layers:
+        - state: box
+        - state: trashbag
 
 - type: entity
   name: passenger encryption key box
@@ -276,98 +277,98 @@
   id: BoxEncryptionKeyPassenger
   description: A box of spare encryption keys.
   components:
-  - type: StorageFill
-    contents:
-      - id: EncryptionKeyCommon
-        amount: 4
-  - type: Sprite
-    layers:
-      - state: box
-      - state: encryptokey
-  - type: Storage
-    whitelist:
-      components:
-      - EncryptionKey
+    - type: StorageFill
+      contents:
+        - id: EncryptionKeyCommon
+          amount: 4
+    - type: Sprite
+      layers:
+        - state: box
+        - state: encryptokey
+    - type: Storage
+      whitelist:
+        components:
+          - EncryptionKey
 
 - type: entity
   name: cargo encryption key box
   parent: BoxEncryptionKeyPassenger
   id: BoxEncryptionKeyCargo
   components:
-  - type: StorageFill
-    contents:
-      - id: EncryptionKeyCargo
-        amount: 4
+    - type: StorageFill
+      contents:
+        - id: EncryptionKeyCargo
+          amount: 4
 
 - type: entity
   name: engineering encryption key box
   parent: BoxEncryptionKeyPassenger
   id: BoxEncryptionKeyEngineering
   components:
-  - type: StorageFill
-    contents:
-      - id: EncryptionKeyEngineering
-        amount: 4
+    - type: StorageFill
+      contents:
+        - id: EncryptionKeyEngineering
+          amount: 4
 
 - type: entity
   name: med-sci encryption key box
   parent: BoxEncryptionKeyPassenger
   id: BoxEncryptionKeyMedicalScience
   components:
-  - type: StorageFill
-    contents:
-      - id: EncryptionKeyMedicalScience
-        amount: 4
+    - type: StorageFill
+      contents:
+        - id: EncryptionKeyMedicalScience
+          amount: 4
 
 - type: entity
   name: medical encryption key box
   parent: BoxEncryptionKeyPassenger
   id: BoxEncryptionKeyMedical
   components:
-  - type: StorageFill
-    contents:
-      - id: EncryptionKeyMedical
-        amount: 4
+    - type: StorageFill
+      contents:
+        - id: EncryptionKeyMedical
+          amount: 4
 
 - type: entity
   name: robotech encryption key box
   parent: BoxEncryptionKeyPassenger
   id: BoxEncryptionKeyRobo
   components:
-  - type: StorageFill
-    contents:
-      - id: EncryptionKeyRobo
-        amount: 4
+    - type: StorageFill
+      contents:
+        - id: EncryptionKeyRobo
+          amount: 4
 
 - type: entity
   name: science encryption key box
   parent: BoxEncryptionKeyPassenger
   id: BoxEncryptionKeyScience
   components:
-  - type: StorageFill
-    contents:
-      - id: EncryptionKeyScience
-        amount: 4
+    - type: StorageFill
+      contents:
+        - id: EncryptionKeyScience
+          amount: 4
 
 - type: entity
   name: security encryption key box
   parent: BoxEncryptionKeyPassenger
   id: BoxEncryptionKeySecurity
   components:
-  - type: StorageFill
-    contents:
-      - id: EncryptionKeySecurity
-        amount: 4
+    - type: StorageFill
+      contents:
+        - id: EncryptionKeySecurity
+          amount: 4
 
 - type: entity
   name: service encryption key box
   parent: BoxEncryptionKeyPassenger
   id: BoxEncryptionKeyService
   components:
-  - type: StorageFill
-    contents:
-      - id: EncryptionKeyService
-        amount: 4
+    - type: StorageFill
+      contents:
+        - id: EncryptionKeyService
+          amount: 4
 
 - type: entity
   name: syndicate encryption key box
@@ -375,13 +376,15 @@
   id: BoxEncryptionKeySyndie
   description: Two syndicate encryption keys for the price of one. Miniaturized for ease of use.
   components:
-  - type: Item
-    size: Normal
-  - type: StorageFill
-    contents:
-      - id: EncryptionKeySyndie
-        amount: 2
-  - type: Storage
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: StorageFill
+      contents:
+        - id: EncryptionKeySyndie
+          amount: 2
+    - type: Storage
 
 - type: entity
   name: lead-lined box
@@ -390,10 +393,10 @@
   id: BoxLeadLined
   description: This box stymies the transmission of harmful radiation.
   components:
-  - type: Sprite
-    state: box
-  - type: RadiationBlockingContainer
-    resistance: 2
+    - type: Sprite
+      state: box
+    - type: RadiationBlockingContainer
+      resistance: 2
 
 - type: entity
   name: candle box
@@ -401,46 +404,46 @@
   id: BoxCandle
   description: This box is specifically moulded to only carry candles.
   components:
-  - type: Sprite
-    layers:
-      - state: box
-      - state: candle
-  - type: Storage
-    grid:
-    - 0,0,5,3
-    whitelist:
-      tags:
-      - Candle
-  - type: StorageFill
-    contents:
-      - id: Candle
-        amount: 4
-      - id: CandleBlue
-        amount: 2
-      - id: CandleRed
-        amount: 2
-      - id: CandleGreen
-        amount: 2
-      - id: CandlePurple
-        amount: 2
+    - type: Sprite
+      layers:
+        - state: box
+        - state: candle
+    - type: Storage
+      grid:
+        - 0,0,5,3
+      whitelist:
+        tags:
+          - Candle
+    - type: StorageFill
+      contents:
+        - id: Candle
+          amount: 4
+        - id: CandleBlue
+          amount: 2
+        - id: CandleRed
+          amount: 2
+        - id: CandleGreen
+          amount: 2
+        - id: CandlePurple
+          amount: 2
 
 - type: entity
   name: small candle box
   parent: BoxCandle
   id: BoxCandleSmall
   components:
-  - type: StorageFill
-    contents:
-      - id: CandleSmall
-        amount: 8
-      - id: CandleBlueSmall
-        amount: 4
-      - id: CandleRedSmall
-        amount: 4
-      - id: CandleGreenSmall
-        amount: 4
-      - id: CandlePurpleSmall
-        amount: 4
+    - type: StorageFill
+      contents:
+        - id: CandleSmall
+          amount: 8
+        - id: CandleBlueSmall
+          amount: 4
+        - id: CandleRedSmall
+          amount: 4
+        - id: CandleGreenSmall
+          amount: 4
+        - id: CandlePurpleSmall
+          amount: 4
 
 - type: entity
   name: darts box
@@ -448,20 +451,20 @@
   id: BoxDarts
   description: A box filled with colorful darts.
   components:
-  - type: Sprite
-    layers:
-      - state: box
-      - state: darts
-  - type: StorageFill
-    contents:
-      - id: Dart
-        amount: 2
-      - id: DartBlue
-        amount: 2
-      - id: DartPurple
-        amount: 2
-      - id: DartYellow
-        amount: 2
+    - type: Sprite
+      layers:
+        - state: box
+        - state: darts
+    - type: StorageFill
+      contents:
+        - id: Dart
+          amount: 2
+        - id: DartBlue
+          amount: 2
+        - id: DartPurple
+          amount: 2
+        - id: DartYellow
+          amount: 2
 
 - type: entity
   name: envelope box
@@ -469,11 +472,11 @@
   id: BoxEnvelope
   description: A box filled with envelopes.
   components:
-  - type: Sprite
-    layers:
-      - state: box
-      - state: envelope
-  - type: StorageFill
-    contents:
-      - id: Envelope
-        amount: 9
+    - type: Sprite
+      layers:
+        - state: box
+        - state: envelope
+    - type: StorageFill
+      contents:
+        - id: Envelope
+          amount: 9

+ 110 - 108
Resources/Prototypes/Catalog/Fills/Items/belt.yml

@@ -3,139 +3,139 @@
   parent: ClothingBeltUtility
   suffix: Filled
   components:
-  - type: StorageFill
-    contents:
-      - id: Crowbar
-      - id: Wrench
-      - id: Screwdriver
-      - id: Wirecutter
-      - id: Welder
-      - id: NetworkConfigurator
+    - type: StorageFill
+      contents:
+        - id: Crowbar
+        - id: Wrench
+        - id: Screwdriver
+        - id: Wirecutter
+        - id: Welder
+        - id: NetworkConfigurator
 
 - type: entity
   id: ClothingBeltUtilityEngineering
   parent: ClothingBeltUtility
   suffix: Engineering
   components:
-  - type: StorageFill
-    contents:
-      - id: CrowbarYellow
-      - id: Wrench
-      - id: Screwdriver
-      - id: Wirecutter
-      - id: Welder
-      - id: Multitool
+    - type: StorageFill
+      contents:
+        - id: CrowbarYellow
+        - id: Wrench
+        - id: Screwdriver
+        - id: Wirecutter
+        - id: Welder
+        - id: Multitool
 
 - type: entity
   id: ClothingBeltChiefEngineerFilled
   parent: ClothingBeltChiefEngineer
   suffix: Filled
   components:
-  - type: StorageFill
-    contents:
-      - id: PowerDrill
-      - id: JawsOfLife
-      - id: WelderExperimental
-      - id: Multitool
-      - id: HolofanProjector
-      - id: GasAnalyzer
-      - id: trayScanner
+    - type: StorageFill
+      contents:
+        - id: PowerDrill
+        - id: JawsOfLife
+        - id: WelderExperimental
+        - id: Multitool
+        - id: HolofanProjector
+        - id: GasAnalyzer
+        - id: trayScanner
 
 - type: entityTable
   id: BeltSecurityEntityTable
   table: !type:AllSelector
     children:
-    - id: Stunbaton
-    - id: Handcuffs
-    - id: Handcuffs
-    - id: HoloprojectorSecurity
-    - id: RadioHandheldSecurity
+      - id: Stunbaton
+      - id: Handcuffs
+      - id: Handcuffs
+      - id: HoloprojectorSecurity
+      - id: RadioHandheldSecurity
 
 - type: entity
   id: ClothingBeltSecurityFilled
   parent: ClothingBeltSecurity
   suffix: Filled
   components:
-  - type: EntityTableContainerFill
-    containers:
-      storagebase: !type:NestedSelector
-        tableId: BeltSecurityEntityTable
+    - type: EntityTableContainerFill
+      containers:
+        storagebase: !type:NestedSelector
+          tableId: BeltSecurityEntityTable
 
 - type: entity
   id: ClothingBeltSecurityWebbingFilled
   parent: ClothingBeltSecurityWebbing
   suffix: Filled
   components:
-  - type: EntityTableContainerFill
-    containers:
-      storagebase: !type:NestedSelector
-        tableId: BeltSecurityEntityTable
+    - type: EntityTableContainerFill
+      containers:
+        storagebase: !type:NestedSelector
+          tableId: BeltSecurityEntityTable
 
 - type: entity
   id: ClothingBeltJanitorFilled
   parent: ClothingBeltJanitor
   suffix: Filled
   components:
-  - type: StorageFill
-    contents:
-      - id: Soap #Make a soap group and pick between when i'm not lazy
-      - id: SprayBottleSpaceCleaner
-      - id: CleanerGrenade
-        amount: 2
-      - id: FlashlightLantern
-      - id: LightReplacer
+    - type: StorageFill
+      contents:
+        - id: Soap #Make a soap group and pick between when i'm not lazy
+        - id: SprayBottleSpaceCleaner
+        - id: CleanerGrenade
+          amount: 2
+        - id: FlashlightLantern
+        - id: LightReplacer
 
 - type: entity
   id: ClothingBeltMedicalFilled
   parent: ClothingBeltMedical
   suffix: Filled
   components:
-  - type: StorageFill
-    contents:
-      - id: Brutepack
-        amount: 2
-      - id: Ointment
-        amount: 1
-      - id: Bloodpack
-        amount: 1
-      - id: Gauze
-      - id: EmergencyMedipen #You never know what people are going to latejoin into
+    - type: StorageFill
+      contents:
+        - id: Brutepack
+          amount: 2
+        - id: Ointment
+          amount: 1
+        - id: Bloodpack
+          amount: 1
+        - id: Gauze
+        - id: EmergencyMedipen #You never know what people are going to latejoin into
 
 - type: entity
   id: ClothingBeltMedicalEMTFilled
   parent: ClothingBeltMedicalEMT
   suffix: Paramedic,Filled
   components:
-  - type: StorageFill
-    contents:
-      - id: Brutepack
-      - id: Ointment
-      - id: Bloodpack
-      - id: Gauze
-      - id: EmergencyMedipen #You never know what people are going to latejoin into
-        amount: 3
+    - type: StorageFill
+      contents:
+        - id: Brutepack
+        - id: Ointment
+        - id: Bloodpack
+        - id: Gauze
+        - id: EmergencyMedipen #You never know what people are going to latejoin into
+          amount: 3
 
 - type: entity
   id: ClothingBeltPlantFilled
   parent: ClothingBeltPlant
   suffix: Filled
   components:
-  - type: StorageFill
-    contents:
-    - id: HydroponicsToolMiniHoe
-    - id: HydroponicsToolSpade
-    - id: HydroponicsToolClippers
-    - id: RobustHarvestChemistryBottle
+    - type: StorageFill
+      contents:
+        - id: HydroponicsToolMiniHoe
+        - id: HydroponicsToolSpade
+        - id: HydroponicsToolClippers
+        - id: RobustHarvestChemistryBottle
 
 - type: entity
   id: ClothingBeltSheathFilled
   parent: ClothingBeltSheath
   suffix: Filled
   components:
-  - type: ContainerFill
-    containers:
-      item:
-      - CaptainSabre
+    - type: ContainerFill
+      containers:
+        item:
+          - CaptainSabre
 
 - type: entity
   id: ClothingBeltMilitaryWebbingGrenadeFilled
@@ -143,54 +143,56 @@
   name: grenadier chest rig
   suffix: Filled
   components:
-  - type: Item
-    size: Ginormous
-  - type: Storage
-    maxItemSize: Normal
-    grid:
-    - 0,0,7,1
-  - type: StorageFill
-    contents:
-      - id: ExGrenade
-        amount: 4
-      - id: SyndieMiniBomb
-        amount: 2
-      - id: EmpGrenade
-        amount: 2
+    - type: STWeight
+      self: 10
+    - type: Item
+      size: Ginormous
+    - type: Storage
+      maxItemSize: Normal
+      grid:
+        - 0,0,7,1
+    - type: StorageFill
+      contents:
+        - id: ExGrenade
+          amount: 4
+        - id: SyndieMiniBomb
+          amount: 2
+        - id: EmpGrenade
+          amount: 2
 
 - type: entity
   id: ClothingBeltMilitaryWebbingMedFilled
   parent: ClothingBeltMilitaryWebbingMed
   suffix: Filled
   components:
-  - type: StorageFill
-    contents:
-      - id: EpinephrineChemistryBottle
-        amount: 2
-      - id: EphedrineChemistryBottle
-        amount: 2
-      - id: OmnizineChemistryBottle
-      - id: MedkitCombatFilled
+    - type: StorageFill
+      contents:
+        - id: EpinephrineChemistryBottle
+          amount: 2
+        - id: EphedrineChemistryBottle
+          amount: 2
+        - id: OmnizineChemistryBottle
+        - id: MedkitCombatFilled
 
 - type: entity
   parent: ClothingBeltWand
   id: ClothingBeltWandFilled
   suffix: Filled
   components:
-  - type: StorageFill
-    contents:
-    - id: WeaponWandPolymorphCarp
-    - id: WeaponWandFireball
-    - id: WeaponWandDeath
-    - id: WeaponWandPolymorphDoor
+    - type: StorageFill
+      contents:
+        - id: WeaponWandPolymorphCarp
+        - id: WeaponWandFireball
+        - id: WeaponWandDeath
+        - id: WeaponWandPolymorphDoor
 
 - type: entity
   id: ClothingBeltHolsterFilled
   parent: ClothingBeltHolster
   suffix: Filled
   components:
-  - type: StorageFill
-    contents:
+    - type: StorageFill
+      contents:
         - id: WeaponRevolverInspector
         - id: SpeedLoaderMagnum
 
@@ -199,7 +201,7 @@
   parent: ClothingBeltChef
   suffix: Filled
   components:
-  - type: StorageFill
-    contents:
-    - id: FoodShakerSalt
-    - id: FoodShakerPepper
+    - type: StorageFill
+      contents:
+        - id: FoodShakerSalt
+        - id: FoodShakerPepper

+ 40 - 38
Resources/Prototypes/Catalog/Fills/Items/briefcases.yml

@@ -3,59 +3,61 @@
   parent: BriefcaseBrown
   suffix: Filled, Paper
   components:
-  - type: StorageFill
-    contents:
-      - id: Paper
-        amount: 3
+    - type: StorageFill
+      contents:
+        - id: Paper
+          amount: 3
 
 - type: entity
   id: BriefcaseSyndieSniperBundleFilled
   parent: BriefcaseSyndie
   suffix: Syndicate, Sniper Bundle
   components:
-  - type: Item
-    size: Ginormous
-  - type: Storage
-    maxItemSize: Huge
-    grid:
-    - 0,0,6,3
-  - type: StorageFill
-    contents:
-      - id: WeaponSniperHristov
-      - id: MagazineBoxAntiMateriel
-      - id: ClothingNeckTieRed
-      - id: ClothingHandsGlovesLatex
-      - id: ClothingUniformJumpsuitLawyerBlack
-      - id: BarberScissors
+    - type: STWeight
+      self: 10
+    - type: Item
+      size: Ginormous
+    - type: Storage
+      maxItemSize: Huge
+      grid:
+        - 0,0,6,3
+    - type: StorageFill
+      contents:
+        - id: WeaponSniperHristov
+        - id: MagazineBoxAntiMateriel
+        - id: ClothingNeckTieRed
+        - id: ClothingHandsGlovesLatex
+        - id: ClothingUniformJumpsuitLawyerBlack
+        - id: BarberScissors
 
 - type: entity
   id: BriefcaseSyndieLobbyingBundleFilled
   parent: BriefcaseSyndie
   suffix: Syndicate, Spesos
   components:
-  - type: StorageFill
-    contents:
-      - id: ClothingEyesGlassesSunglasses
-      - id: SpaceCash30000
-        amount: 1
-      - id: EncryptionKeySyndie
-      - id: RubberStampTrader
-      - id: PhoneInstrumentSyndicate
-      - id: ClothingUniformJumpsuitTacticool
-      - id: ClothingOuterCoatJensen
-      - id: ClothingHandsGlovesCombat
-      - id: ClothingMaskNeckGaiter
-      - id: SyndieHandyFlag
+    - type: StorageFill
+      contents:
+        - id: ClothingEyesGlassesSunglasses
+        - id: SpaceCash30000
+          amount: 1
+        - id: EncryptionKeySyndie
+        - id: RubberStampTrader
+        - id: PhoneInstrumentSyndicate
+        - id: ClothingUniformJumpsuitTacticool
+        - id: ClothingOuterCoatJensen
+        - id: ClothingHandsGlovesCombat
+        - id: ClothingMaskNeckGaiter
+        - id: SyndieHandyFlag
 
 - type: entity
   id: BriefcaseThiefBribingBundleFilled
   parent: BriefcaseSyndie
   suffix: Thief, Spesos
   components:
-  - type: StorageFill
-    contents:
-      - id: ClothingEyesGlassesSunglasses
-      - id: SpaceCash20000
-        amount: 1
-      - id: ClothingOuterCoatJensen
-      - id: ClothingHandsGlovesColorBlack
+    - type: StorageFill
+      contents:
+        - id: ClothingEyesGlassesSunglasses
+        - id: SpaceCash20000
+          amount: 1
+        - id: ClothingOuterCoatJensen
+        - id: ClothingHandsGlovesColorBlack

+ 2 - 0
Resources/Prototypes/Civ14/Entities/Mobs/animals.yml

@@ -103,6 +103,8 @@
       noMovementLayers:
         movement:
           state: rabbitgrey
+    - type: STWeight
+      self: 0.75
     - type: Item
       size: Tiny
       heldPrefix: 0

+ 5 - 5
Resources/Prototypes/Civ14/Entities/Objects/Specific/Farming/plants.yml

@@ -11,7 +11,7 @@
   lifespan: 25
   maturation: 10
   production: 3
-  yield: 3
+  yield: 2
   potency: 10
   growthStages: 5
   waterConsumption: 0.60
@@ -38,7 +38,7 @@
   lifespan: 20
   maturation: 8
   production: 3
-  yield: 3
+  yield: 2
   potency: 10
   growthStages: 4
   waterConsumption: 0.60
@@ -61,7 +61,7 @@
   lifespan: 20
   maturation: 8
   production: 3
-  yield: 3
+  yield: 2
   potency: 10
   growthStages: 5
   waterConsumption: 0.60
@@ -84,7 +84,7 @@
   lifespan: 22
   maturation: 10
   production: 3
-  yield: 3
+  yield: 2
   potency: 10
   growthStages: 5
   waterConsumption: 0.60
@@ -107,7 +107,7 @@
   lifespan: 15
   maturation: 6
   production: 3
-  yield: 3
+  yield: 2
   potency: 10
   growthStages: 3
   waterConsumption: 0.60

+ 2 - 0
Resources/Prototypes/Civ14/Entities/Objects/Specific/Farming/seeds.yml

@@ -8,6 +8,8 @@
     - type: Sprite
       sprite: Civ14/Objects/farming.rsi
       state: seeds
+    - type: STWeight
+      self: 1
     - type: Item
       size: Small
 

+ 14 - 0
Resources/Prototypes/Civ14/Entities/Objects/Tools/tools.yml

@@ -10,6 +10,8 @@
     - type: Sprite
       sprite: Civ14/Objects/StoneAge/bone_shovel.rsi
       state: icon
+    - type: STWeight
+      self: 5
     - type: Item
       size: Large
     - type: Construction
@@ -32,6 +34,8 @@
         types:
           Piercing: 8
           Blunt: 3
+    - type: STWeight
+      self: 5
     - type: Item
       size: Large
     - type: Construction
@@ -62,6 +66,8 @@
       sprite: Civ14/Objects/StoneAge/bone_knife.rsi
       size: 2
       state: icon
+    - type: STWeight
+      self: 1
     - type: Item
       size: Small
       sprite: Civ14/Objects/StoneAge/bone_knife.rsi
@@ -82,6 +88,8 @@
           Blunt: 4
           Slash: 8
           Structural: 4
+    - type: STWeight
+      self: 3
     - type: Item
       size: Normal
     - type: Clothing
@@ -112,6 +120,8 @@
           Blunt: 5
           Slash: 8
           Structural: 4
+    - type: STWeight
+      self: 3
     - type: Item
       size: Normal
     - type: Clothing
@@ -141,6 +151,8 @@
           Blunt: 6
       soundHit:
         collection: MetalThud
+    - type: STWeight
+      self: 5
     - type: Item
       size: Large
       shape:
@@ -170,6 +182,8 @@
     - type: Sprite
       sprite: Civ14/Objects/items.rsi
       state: hammer
+    - type: STWeight
+      self: 3
     - type: Item
       size: Normal
     - type: MeleeWeapon

+ 2 - 0
Resources/Prototypes/Civ14/Entities/Objects/Weapons/stone_age.yml

@@ -15,6 +15,8 @@
       soundHit:
         collection: MetalThud
       bluntStaminaDamageFactor: 1.5
+    - type: STWeight
+      self: 3
     - type: Item
       size: Normal
     - type: Clothing

+ 2 - 0
Resources/Prototypes/Civ14/Entities/Structures/Furniture/beds.yml

@@ -49,6 +49,8 @@
           Blunt: -0.1
     - type: Clickable
     - type: InteractionOutline
+    - type: STWeight
+      self: 5
     - type: Item
       size: Large
     - type: Construction

+ 29 - 0
Resources/Prototypes/Civ14/Recipes/Construction/floors.yml

@@ -57,3 +57,32 @@
               amount: 1
     - node: end
       entity: FloorTileItemRoad
+
+- type: construction
+  name: bridging tile
+  id: TileBridge
+  graph: TileBridge
+  startNode: start
+  targetNode: end
+  category: construction-category-tiles
+  description: A tile used to make a makeshift bridge.
+  icon: { sprite: Civ14/Structures/Floors/wood.rsi, state: woodalt7 }
+  objectType: Item
+  agemin: 0
+  agemax: 8
+
+- type: constructionGraph
+  id: TileBridge
+  start: start
+  graph:
+    - node: start
+      edges:
+        - to: end
+          completed:
+            - !type:SetStackCount
+              amount: 1
+          steps:
+            - material: WoodPlank
+              amount: 1
+    - node: end
+      entity: FloorTileItemBridge

+ 67 - 0
Resources/Prototypes/Civ14/Tiles/floors.yml

@@ -233,3 +233,70 @@
           behaviors:
             - !type:DoActsBehavior
               acts: ["Destruction"]
+
+- type: tile
+  id: FloorBridge
+  name: bridge
+  sprite: /Textures/Civ14/Structures/Floors/wood.rsi/woodalt7.png
+  variants: 1
+  baseTurf: Plating
+  isSubfloor: false
+  deconstructTools: [Prying]
+  footstepSounds:
+    collection: FootstepWood
+  barestepSounds:
+    collection: BarestepWood
+  itemDrop: FloorTileItemBridge
+  heatCapacity: 10000
+  weather: false
+
+- type: stack
+  id: FloorTileBridge
+  name: bridging tile
+  spawn: FloorTileItemBridge
+  maxCount: 10
+
+- type: entity
+  name: bridging tile
+  parent: FloorTileItemBase
+  id: FloorTileItemBridge
+  components:
+    - type: Sprite
+      sprite: Civ14/Structures/Floors/wood.rsi
+      state: bridge_hand
+    - type: Item
+      heldPrefix: wood
+    - type: FloorTile
+      outputs:
+        - Plating
+        - FloorBridge
+    - type: Stack
+      stackType: FloorTileBridge
+    - type: SpawnAfterInteract #Nuke after convert to FloorTile
+      prototype: FloorBridge
+      doAfter: 0.5
+      removeOnInteract: true
+    - type: Construction
+      graph: TileBridge
+      node: end
+    - type: Tag
+      tags:
+        - Bridging
+
+- type: entity
+  id: FloorBridge
+  parent: FloorWoodClassic
+  name: bridge
+  description: "A makeshift wooden bridge."
+  components:
+    - type: Sprite
+      sprite: Civ14/Structures/Floors/wood.rsi
+      state: woodalt7
+      drawdepth: FloorTiles
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 180
+          behaviors:
+            - !type:DoActsBehavior
+              acts: ["Destruction"]

+ 152 - 148
Resources/Prototypes/Entities/Clothing/Back/backpacks.yml

@@ -4,32 +4,34 @@
   name: backpack
   description: You wear this on your back and put items into it.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/backpack.rsi
-    state: icon
-  - type: Item
-    size: Huge
-  - type: Clothing
-    quickEquip: false
-    slots:
-    - back
-  - type: Storage
-    grid:
-    - 0,0,6,3
-    maxItemSize: Huge
-  - type: ContainerContainer
-    containers:
-      storagebase: !type:Container
-        ents: []
-  - type: UserInterface
-    interfaces:
-      enum.StorageUiKey.Key:
-        type: StorageBoundUserInterface
-  # to prevent bag open/honk spam
-  - type: UseDelay
-    delay: 0.5
-  - type: ExplosionResistance
-    damageCoefficient: 0.9
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/backpack.rsi
+      state: icon
+    - type: STWeight
+      self: 8
+    - type: Item
+      size: Huge
+    - type: Clothing
+      quickEquip: false
+      slots:
+        - back
+    - type: Storage
+      grid:
+        - 0,0,6,3
+      maxItemSize: Huge
+    - type: ContainerContainer
+      containers:
+        storagebase: !type:Container
+          ents: []
+    - type: UserInterface
+      interfaces:
+        enum.StorageUiKey.Key:
+          type: StorageBoundUserInterface
+    # to prevent bag open/honk spam
+    - type: UseDelay
+      delay: 0.5
+    - type: ExplosionResistance
+      damageCoefficient: 0.9
 
 - type: entity
   parent: ClothingBackpack
@@ -37,11 +39,11 @@
   name: giggles von honkerton
   description: It's a backpack made by Honk! Co.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/clown.rsi
-  - type: Storage
-    storageOpenSound:
-      collection: BikeHorn
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/clown.rsi
+    - type: Storage
+      storageOpenSound:
+        collection: BikeHorn
 
 - type: entity
   parent: ClothingBackpack
@@ -49,11 +51,11 @@
   name: Ian's backpack
   description: Sometimes he wears it.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/ian.rsi
-  - type: Storage
-    storageOpenSound:
-      collection: IanBark
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/ian.rsi
+    - type: Storage
+      storageOpenSound:
+        collection: IanBark
 
 - type: entity
   parent: [ClothingBackpack, BaseSecurityContraband]
@@ -61,8 +63,8 @@
   name: security backpack
   description: It's a very robust backpack.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/security.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/security.rsi
 
 - type: entity
   parent: [ClothingBackpack, BaseSecurityContraband]
@@ -70,8 +72,8 @@
   name: brigmedic backpack
   description: It's a very sterile backpack.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/brigmedic.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/brigmedic.rsi
 
 - type: entity
   parent: ClothingBackpack
@@ -79,8 +81,8 @@
   name: engineering backpack
   description: It's a tough backpack for the daily grind of station life.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/engineering.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/engineering.rsi
 
 - type: entity
   parent: ClothingBackpack
@@ -88,8 +90,8 @@
   name: atmospherics backpack
   description: It's a backpack made of fire resistant fibers. Smells like plasma.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/atmospherics.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/atmospherics.rsi
 
 - type: entity
   parent: ClothingBackpack
@@ -97,8 +99,8 @@
   name: medical backpack
   description: It's a backpack especially designed for use in a sterile environment.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/medical.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/medical.rsi
 
 - type: entity
   parent: [ClothingBackpack, BaseCommandContraband]
@@ -106,8 +108,8 @@
   name: captain's backpack
   description: It's a special backpack made exclusively for Nanotrasen officers.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/captain.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/captain.rsi
 
 - type: entity
   parent: ClothingBackpack
@@ -115,8 +117,8 @@
   name: mime backpack
   description: A silent backpack made for those silent workers. Silence Co.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/mime.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/mime.rsi
 
 - type: entity
   parent: ClothingBackpack
@@ -124,8 +126,8 @@
   name: chemistry backpack
   description: A backpack specially designed to repel stains and hazardous liquids.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/chemistry.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/chemistry.rsi
 
 - type: entity
   parent: ClothingBackpack
@@ -133,8 +135,8 @@
   name: hydroponics backpack
   description: It's a backpack made of all-natural fibers.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/hydroponics.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/hydroponics.rsi
 
 - type: entity
   parent: ClothingBackpack
@@ -142,8 +144,8 @@
   name: science backpack
   description: A backpack specially designed to repel stains and hazardous liquids.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/science.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/science.rsi
 
 - type: entity
   parent: ClothingBackpack
@@ -151,8 +153,8 @@
   name: virology backpack
   description: A backpack made of hypo-allergenic fibers. It's designed to help prevent the spread of disease. Smells like monkey.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/virology.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/virology.rsi
 
 - type: entity
   parent: ClothingBackpack
@@ -160,8 +162,8 @@
   name: genetics backpack
   description: A backpack designed to be super tough, just in case someone hulks out on you.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/genetics.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/genetics.rsi
 
 - type: entity
   parent: ClothingBackpack
@@ -192,16 +194,16 @@
 
 #ERT
 - type: entity
-  parent: [ ClothingBackpack, BaseCentcommContraband ]
+  parent: [ClothingBackpack, BaseCentcommContraband]
   id: ClothingBackpackERTLeader
   name: ERT leader backpack
   description: A spacious backpack with lots of pockets, worn by the Commander of an Emergency Response Team.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/ertleader.rsi
-  - type: Storage
-    grid:
-    - 0,0,10,3
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/ertleader.rsi
+    - type: Storage
+      grid:
+        - 0,0,10,3
 
 - type: entity
   parent: ClothingBackpackERTLeader
@@ -209,8 +211,8 @@
   name: ERT security backpack
   description: A spacious backpack with lots of pockets, worn by Security Officers of an Emergency Response Team.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/ertsec.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/ertsec.rsi
 
 - type: entity
   parent: ClothingBackpackERTLeader
@@ -218,8 +220,8 @@
   name: ERT medical backpack
   description: A spacious backpack with lots of pockets, worn by Medical Officers of an Emergency Response Team.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/ertmed.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/ertmed.rsi
 
 - type: entity
   parent: ClothingBackpackERTLeader
@@ -227,8 +229,8 @@
   name: ERT engineer backpack
   description: A spacious backpack with lots of pockets, worn by Engineers of an Emergency Response Team.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/erteng.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/erteng.rsi
 
 - type: entity
   parent: ClothingBackpackERTLeader
@@ -236,8 +238,8 @@
   name: ERT janitor backpack
   description: A spacious backpack with lots of pockets, worn by Janitors of an Emergency Response Team.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/ertjanitor.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/ertjanitor.rsi
 
 - type: entity
   parent: ClothingBackpackERTLeader
@@ -245,8 +247,8 @@
   name: ERT clown backpack
   description: A spacious backpack with lots of pockets, worn by Clowns of an Emergency Response Team.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/ertclown.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/ertclown.rsi
 
 - type: entity
   parent: ClothingBackpackERTLeader
@@ -254,8 +256,8 @@
   name: ERT chaplain backpack
   description: A spacious backpack with lots of pockets, worn by Chaplains of an Emergency Response Team.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/ertchaplain.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/ertchaplain.rsi
 
 - type: entity
   parent: ClothingBackpackERTSecurity
@@ -265,7 +267,7 @@
   components:
     - type: Storage
       grid:
-      - 0,0,7,6
+        - 0,0,7,6
 
 #Syndicate
 - type: entity
@@ -274,14 +276,14 @@
   name: syndicate backpack
   description:
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/syndicate.rsi
-  - type: ExplosionResistance
-    damageCoefficient: 0.1
-  - type: Storage
-    grid:
-    - 0,0,7,3
-    - 8,1,8,3
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/syndicate.rsi
+    - type: ExplosionResistance
+      damageCoefficient: 0.1
+    - type: Storage
+      grid:
+        - 0,0,7,3
+        - 8,1,8,3
 
 #Special
 - type: entity
@@ -290,21 +292,23 @@
   name: bag of holding
   description: A backpack that opens into a localized pocket of bluespace.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/holding.rsi
-    state: holding
-    layers:
-    - state: holding
-    - state: holding-unlit
-      shader: unshaded
-  - type: Clothing
-    equippedPrefix: holding
-  - type: Item
-    size: Ginormous
-  - type: Storage
-    maxItemSize: Huge
-    grid:
-    - 0,0,19,9
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/holding.rsi
+      state: holding
+      layers:
+        - state: holding
+        - state: holding-unlit
+          shader: unshaded
+    - type: Clothing
+      equippedPrefix: holding
+    - type: STWeight
+      self: 10
+    - type: Item
+      size: Ginormous
+    - type: Storage
+      maxItemSize: Huge
+      grid:
+        - 0,0,19,9
 
 - type: entity
   parent: ClothingBackpackClown
@@ -313,10 +317,10 @@
   suffix: Unremoveable
   description: It's a backpack made by Jonk! Co.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/cluwne.rsi
-  - type: Unremoveable
-    deleteOnDrop: false
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/cluwne.rsi
+    - type: Unremoveable
+      deleteOnDrop: false
 
 - type: entity
   parent: ClothingBackpack
@@ -325,21 +329,21 @@
   suffix: SelfUnremovable
   description: Shocks on the signal. It is used to keep a particularly dangerous criminal under control.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/electropack.rsi
-    state: icon
-  - type: Clothing
-    stripDelay: 10
-    equipDelay: 5 # to avoid accidentally falling into the trap associated with SelfUnremovableClothing
-  - type: SelfUnremovableClothing
-  - type: ShockOnTrigger
-    damage: 5
-    duration: 3
-    cooldown: 4
-  - type: TriggerOnSignal
-  - type: DeviceLinkSink
-    ports:
-      - Trigger
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/electropack.rsi
+      state: icon
+    - type: Clothing
+      stripDelay: 10
+      equipDelay: 5 # to avoid accidentally falling into the trap associated with SelfUnremovableClothing
+    - type: SelfUnremovableClothing
+    - type: ShockOnTrigger
+      damage: 5
+      duration: 3
+      cooldown: 4
+    - type: TriggerOnSignal
+    - type: DeviceLinkSink
+      ports:
+        - Trigger
 
 # Debug
 - type: entity
@@ -349,14 +353,14 @@
   description: What the fuck is this?
   suffix: Debug
   components:
-  - type: Storage
-    grid:
-    - 0,0,3,3
-    - 5,0,7,2
-    - 0,5,7,5
-    - 6,4,7,5
-    - 9,2,10,3
-    - 9,5,9,5
+    - type: Storage
+      grid:
+        - 0,0,3,3
+        - 5,0,7,2
+        - 0,5,7,5
+        - 6,4,7,5
+        - 9,2,10,3
+        - 9,5,9,5
 
 - type: entity
   parent: ClothingBackpack
@@ -365,9 +369,9 @@
   description: What the fuck is this?
   suffix: Debug
   components:
-  - type: Storage
-    grid:
-    - 0,0,39,24
+    - type: Storage
+      grid:
+        - 0,0,39,24
 
 - type: entity
   parent: ClothingBackpack
@@ -376,19 +380,19 @@
   description: What the fuck is this?
   suffix: Debug
   components:
-  - type: Storage
-    grid:
-    - 0,0,0,3
-    - 0,0,2,0
-    - 0,3,2,3
-    - 2,1,2,1
-    - 4,0,4,2
-    - 6,0,6,2
-    - 5,1,5,1
-    - 5,3,5,3
-    - 9,0,9,1
-    - 8,2,8,3
-    - 10,2,10,3
+    - type: Storage
+      grid:
+        - 0,0,0,3
+        - 0,0,2,0
+        - 0,3,2,3
+        - 2,1,2,1
+        - 4,0,4,2
+        - 6,0,6,2
+        - 5,1,5,1
+        - 5,3,5,3
+        - 9,0,9,1
+        - 8,2,8,3
+        - 10,2,10,3
 
 - type: entity
   parent: ClothingBackpack
@@ -397,6 +401,6 @@
   description: What the fuck is this?
   suffix: Debug
   components:
-  - type: Storage
-    grid:
-    - 5,5,11,8
+    - type: Storage
+      grid:
+        - 5,5,11,8

+ 89 - 87
Resources/Prototypes/Entities/Clothing/Back/duffel.yml

@@ -4,16 +4,16 @@
   name: duffel bag
   description: A large duffel bag for holding extra things.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/duffel.rsi
-  - type: Storage
-    maxItemSize: Huge
-    grid:
-    - 0,0,7,4
-  - type: ClothingSpeedModifier
-    walkModifier: 1
-    sprintModifier: 0.9
-  - type: HeldSpeedModifier
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/duffel.rsi
+    - type: Storage
+      maxItemSize: Huge
+      grid:
+        - 0,0,7,4
+    - type: ClothingSpeedModifier
+      walkModifier: 1
+      sprintModifier: 0.9
+    - type: HeldSpeedModifier
 
 - type: entity
   parent: ClothingBackpackDuffel
@@ -21,8 +21,8 @@
   name: engineering duffel bag
   description: A large duffel bag for holding extra tools and supplies.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/engineering.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/engineering.rsi
 
 - type: entity
   parent: ClothingBackpackDuffel
@@ -30,8 +30,8 @@
   name: atmospherics duffel bag
   description: A large duffel bag made of fire resistant fibers. Smells like plasma.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/atmospherics.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/atmospherics.rsi
 
 - type: entity
   parent: ClothingBackpackDuffel
@@ -39,8 +39,8 @@
   name: medical duffel bag
   description: A large duffel bag for holding extra medical supplies.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/medical.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/medical.rsi
 
 - type: entity
   parent: [ClothingBackpackDuffel, BaseCommandContraband]
@@ -48,8 +48,8 @@
   name: captain's duffel bag
   description: A large duffel bag for holding extra captainly goods.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/captain.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/captain.rsi
 
 - type: entity
   parent: ClothingBackpackDuffel
@@ -57,11 +57,11 @@
   name: clown duffel bag
   description: A large duffel bag for holding extra honk goods.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/clown.rsi
-  - type: Storage
-    storageOpenSound:
-      collection: BikeHorn
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/clown.rsi
+    - type: Storage
+      storageOpenSound:
+        collection: BikeHorn
 
 - type: entity
   parent: [ClothingBackpackDuffel, BaseSecurityContraband]
@@ -69,8 +69,8 @@
   name: security duffel bag
   description: A large duffel bag for holding extra security related goods.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/security.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/security.rsi
 
 - type: entity
   parent: [ClothingBackpackDuffel, BaseSecurityContraband]
@@ -78,8 +78,8 @@
   name: brigmedic duffel bag
   description: A large duffel bag for holding extra medical related goods.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/brigmedic.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/brigmedic.rsi
 
 - type: entity
   parent: ClothingBackpackDuffel
@@ -87,8 +87,8 @@
   name: chemistry duffel bag
   description: A large duffel bag for holding extra beakers and test tubes.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/chemistry.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/chemistry.rsi
 
 - type: entity
   parent: ClothingBackpackDuffel
@@ -96,8 +96,8 @@
   name: virology duffel bag
   description: A large duffel bag made of hypo-allergenic fibers. It's designed to help prevent the spread of disease. Smells like monkey.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/virology.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/virology.rsi
 
 - type: entity
   parent: ClothingBackpackDuffel
@@ -105,8 +105,8 @@
   name: genetics duffel bag
   description: A large duffel bag for holding extra genetic mutations.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/genetics.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/genetics.rsi
 
 - type: entity
   parent: ClothingBackpackDuffel
@@ -114,12 +114,12 @@
   name: mime duffel bag
   description: A large duffel bag for holding... mime... stuff.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/mime.rsi
-    storageOpenSound:
-      collection: null
-    storageInsertSound:
-      collection: null
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/mime.rsi
+      storageOpenSound:
+        collection: null
+      storageInsertSound:
+        collection: null
 
 - type: entity
   parent: ClothingBackpackDuffel
@@ -127,8 +127,8 @@
   name: science duffel bag
   description: A large duffel bag for holding extra science related goods.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/science.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/science.rsi
 
 - type: entity
   parent: ClothingBackpackDuffel
@@ -163,34 +163,34 @@
   name: syndicate duffel bag
   description: A large duffel bag for holding various traitor goods.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/syndicate.rsi
-  - type: ExplosionResistance
-    damageCoefficient: 0.1
-  - type: Storage
-    grid:
-    - 0,0,8,4
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/syndicate.rsi
+    - type: ExplosionResistance
+      damageCoefficient: 0.1
+    - type: Storage
+      grid:
+        - 0,0,8,4
 
 - type: entity
   parent: ClothingBackpackDuffelSyndicate
   id: ClothingBackpackDuffelSyndicateBundle
   abstract: true
   components:
-  - type: Tag
-    tags: [] # ignore "WhitelistChameleon" tag
+    - type: Tag
+      tags: [] # ignore "WhitelistChameleon" tag
 
 - type: entity
   parent: ClothingBackpackDuffelSyndicate
   id: ClothingBackpackDuffelSyndicateAmmo
   name: syndicate duffel bag
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/syndicate.rsi
-    state: icon-ammo
-  - type: Item
-    heldPrefix: ammo
-  - type: Clothing
-    equippedPrefix: ammo
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/syndicate.rsi
+      state: icon-ammo
+    - type: Item
+      heldPrefix: ammo
+    - type: Clothing
+      equippedPrefix: ammo
 
 - type: entity
   parent: ClothingBackpackDuffelSyndicateAmmo
@@ -205,13 +205,13 @@
   id: ClothingBackpackDuffelSyndicateMedical
   name: syndicate duffel bag
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/syndicate.rsi
-    state: icon-med
-  - type: Item
-    heldPrefix: med
-  - type: Clothing
-    equippedPrefix: med
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/syndicate.rsi
+      state: icon-med
+    - type: Item
+      heldPrefix: med
+    - type: Clothing
+      equippedPrefix: med
 
 - type: entity
   parent: ClothingBackpackDuffelSyndicateMedical
@@ -227,32 +227,34 @@
   name: duffelbag of holding
   description: A duffelbag that opens into a localized pocket of bluespace.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Duffels/holding.rsi
-    state: icon
-    layers:
-    - state: icon
-    - state: icon-unlit
-      shader: unshaded
-  - type: Item
-    size: Ginormous
-  - type: Storage
-    maxItemSize: Huge
-    grid:
-    - 0,0,19,9
-  - type: ClothingSpeedModifier
-    sprintModifier: 1 # makes its stats identical to other variants of bag of holding
-  - type: HeldSpeedModifier
+    - type: Sprite
+      sprite: Clothing/Back/Duffels/holding.rsi
+      state: icon
+      layers:
+        - state: icon
+        - state: icon-unlit
+          shader: unshaded
+    - type: STWeight
+      self: 10
+    - type: Item
+      size: Ginormous
+    - type: Storage
+      maxItemSize: Huge
+      grid:
+        - 0,0,19,9
+    - type: ClothingSpeedModifier
+      sprintModifier: 1 # makes its stats identical to other variants of bag of holding
+    - type: HeldSpeedModifier
 
 - type: entity
-  parent: [ ClothingBackpackDuffel, BaseCentcommContraband ]
+  parent: [ClothingBackpackDuffel, BaseCentcommContraband]
   id: ClothingBackpackDuffelCBURN
   name: CBURN duffel bag
   description: A duffel bag containing a variety of biological containment equipment.
   components:
-  - type: Storage
-    maxItemSize: Huge
-  - type: ClothingSpeedModifier
-    walkModifier: 1
-    sprintModifier: 1
-  - type: HeldSpeedModifier
+    - type: Storage
+      maxItemSize: Huge
+    - type: ClothingSpeedModifier
+      walkModifier: 1
+      sprintModifier: 1
+    - type: HeldSpeedModifier

+ 53 - 51
Resources/Prototypes/Entities/Clothing/Back/satchel.yml

@@ -4,13 +4,13 @@
   name: satchel
   description: A trendy looking satchel.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/satchel.rsi
-  - type: Storage
-    grid:
-    - 0,0,1,3
-    - 3,0,6,3
-    - 8,0,9,3
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/satchel.rsi
+    - type: Storage
+      grid:
+        - 0,0,1,3
+        - 3,0,6,3
+        - 8,0,9,3
 
 - type: entity
   parent: ClothingBackpackSatchel
@@ -18,8 +18,8 @@
   name: leather satchel
   description: A trend-setting satchel from a bygone era.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/leather.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/leather.rsi
 
 - type: entity
   parent: ClothingBackpackSatchel
@@ -27,8 +27,8 @@
   name: engineering satchel
   description: A tough satchel with extra pockets.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/engineering.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/engineering.rsi
 
 - type: entity
   parent: ClothingBackpackSatchel
@@ -36,8 +36,8 @@
   name: atmospherics satchel
   description: A tough satchel made of fire resistant fibers. Smells like plasma.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/atmospherics.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/atmospherics.rsi
 
 - type: entity
   parent: ClothingBackpackSatchel
@@ -45,11 +45,11 @@
   name: clown satchel
   description: For fast running from security.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/clown.rsi
-  - type: Storage
-    storageOpenSound:
-      collection: BikeHorn
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/clown.rsi
+    - type: Storage
+      storageOpenSound:
+        collection: BikeHorn
 
 - type: entity
   parent: ClothingBackpackSatchel
@@ -57,8 +57,8 @@
   name: mime satchel
   description: A satchel designed for the silent and expressive art of miming.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/mime.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/mime.rsi
 
 - type: entity
   parent: ClothingBackpackSatchel
@@ -66,8 +66,8 @@
   name: medical satchel
   description: A sterile satchel used in medical departments.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/medical.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/medical.rsi
 
 - type: entity
   parent: ClothingBackpackSatchel
@@ -75,8 +75,8 @@
   name: chemistry satchel
   description: A sterile satchel with chemist colours.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/chemistry.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/chemistry.rsi
 
 - type: entity
   parent: ClothingBackpackSatchel
@@ -84,8 +84,8 @@
   name: virology satchel
   description: A satchel made of hypo-allergenic fibers. It's designed to help prevent the spread of disease. Smells like monkey.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/virology.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/virology.rsi
 
 - type: entity
   parent: ClothingBackpackSatchel
@@ -93,8 +93,8 @@
   name: genetics satchel
   description: A sterile satchel with geneticist colours.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/genetics.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/genetics.rsi
 
 - type: entity
   parent: ClothingBackpackSatchel
@@ -102,8 +102,8 @@
   name: science satchel
   description: Useful for holding research materials.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/science.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/science.rsi
 
 - type: entity
   parent: [ClothingBackpackSatchel, BaseSecurityContraband]
@@ -111,8 +111,8 @@
   name: security satchel
   description: A robust satchel for security related needs.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/security.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/security.rsi
 
 - type: entity
   parent: [ClothingBackpackSatchel, BaseSecurityContraband]
@@ -120,8 +120,8 @@
   name: brigmedic satchel
   description: A sterile satchel for medical related needs.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/brigmedic.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/brigmedic.rsi
 
 - type: entity
   parent: [ClothingBackpackSatchel, BaseCommandContraband]
@@ -129,8 +129,8 @@
   name: captain's satchel
   description: An exclusive satchel for Nanotrasen officers.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/captain.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/captain.rsi
 
 - type: entity
   parent: ClothingBackpackSatchel
@@ -138,8 +138,8 @@
   name: hydroponics satchel
   description: A satchel made of all natural fibers.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/hydroponics.rsi
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/hydroponics.rsi
 
 - type: entity
   parent: ClothingBackpackSatchel
@@ -165,16 +165,18 @@
   name: satchel of holding
   description: A satchel that opens into a localized pocket of bluespace.
   components:
-  - type: Sprite
-    sprite: Clothing/Back/Satchels/holding.rsi
-    state: icon
-    layers:
-    - state: icon
-    - state: icon-unlit
-      shader: unshaded
-  - type: Item
-    size: Ginormous
-  - type: Storage
-    maxItemSize: Huge
-    grid:
-    - 0,0,19,9
+    - type: Sprite
+      sprite: Clothing/Back/Satchels/holding.rsi
+      state: icon
+      layers:
+        - state: icon
+        - state: icon-unlit
+          shader: unshaded
+    - type: STWeight
+      self: 10
+    - type: Item
+      size: Ginormous
+    - type: Storage
+      maxItemSize: Huge
+      grid:
+        - 0,0,19,9

+ 52 - 50
Resources/Prototypes/Entities/Clothing/Back/specific.yml

@@ -25,53 +25,55 @@
   name: backpack water tank
   description: Holds a large amount of fluids. Supplies to spray nozzles in your hands, and has a slot on the side for said spray nozzles.
   components:
-  - type: Tag
-    tags:
-    - NozzleBackTank
-    - WhitelistChameleon
-  - type: Sprite
-    sprite: Clothing/Back/Backpacks/waterbackpack.rsi
-    state: icon
-  - type: Item
-    size: Ginormous
-  - type: Clothing
-    slots: BACK
-    sprite: Clothing/Back/Backpacks/waterbackpack.rsi
-  - type: ItemSlots
-    slots:
-      item:
-        priority: 2
-        whitelist:
-          tags:
-          - SprayNozzle
-  - type: ItemMapper
-    mapLayers:
-      icon-filled:
-        whitelist:
-          tags:
-            - SprayNozzle
-  - type: Appearance
-  - type: SolutionAmmoProvider
-    solutionId: tank
-    proto: BulletWaterShot
-  - type: SolutionContainerManager
-    solutions:
-      tank:
-        maxVol: 1000 #much water
-  - type: SolutionTransfer
-    transferAmount: 50
-    maxTransferAmount: 100
-    minTransferAmount: 10
-    canChangeTransferAmount: true
-  - type: UserInterface
-    interfaces:
-      enum.TransferAmountUiKey.Key:
-        type: TransferAmountBoundUserInterface
-  - type: DrawableSolution
-    solution: tank
-  - type: RefillableSolution
-    solution: tank
-  - type: DrainableSolution
-    solution: tank
-  - type: ExaminableSolution
-    solution: tank
+    - type: Tag
+      tags:
+        - NozzleBackTank
+        - WhitelistChameleon
+    - type: Sprite
+      sprite: Clothing/Back/Backpacks/waterbackpack.rsi
+      state: icon
+    - type: STWeight
+      self: 10
+    - type: Item
+      size: Ginormous
+    - type: Clothing
+      slots: BACK
+      sprite: Clothing/Back/Backpacks/waterbackpack.rsi
+    - type: ItemSlots
+      slots:
+        item:
+          priority: 2
+          whitelist:
+            tags:
+              - SprayNozzle
+    - type: ItemMapper
+      mapLayers:
+        icon-filled:
+          whitelist:
+            tags:
+              - SprayNozzle
+    - type: Appearance
+    - type: SolutionAmmoProvider
+      solutionId: tank
+      proto: BulletWaterShot
+    - type: SolutionContainerManager
+      solutions:
+        tank:
+          maxVol: 1000 #much water
+    - type: SolutionTransfer
+      transferAmount: 50
+      maxTransferAmount: 100
+      minTransferAmount: 10
+      canChangeTransferAmount: true
+    - type: UserInterface
+      interfaces:
+        enum.TransferAmountUiKey.Key:
+          type: TransferAmountBoundUserInterface
+    - type: DrawableSolution
+      solution: tank
+    - type: RefillableSolution
+      solution: tank
+    - type: DrainableSolution
+      solution: tank
+    - type: ExaminableSolution
+      solution: tank

+ 42 - 37
Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml

@@ -3,52 +3,57 @@
   parent: Clothing
   id: ClothingBeltBase
   components:
-  - type: Sprite
-    state: icon
-  - type: Item
-    size: Normal
-  - type: Clothing
-    slots: [belt]
-    equipSound:
-      path: /Audio/Items/belt_equip.ogg
-    quickEquip: false
-  - type: PhysicalComposition
-    materialComposition:
-      Cloth: 50
-  - type: StaticPrice
-    price: 20
+    - type: Sprite
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: Clothing
+      slots: [belt]
+      equipSound:
+        path: /Audio/Items/belt_equip.ogg
+      quickEquip: false
+    - type: PhysicalComposition
+      materialComposition:
+        Cloth: 50
+    - type: StaticPrice
+      price: 20
 
 - type: entity
   abstract: true
   parent: ClothingBeltBase
   id: ClothingBeltStorageBase
   components:
-  - type: Storage
-    maxItemSize: Normal
-    defaultStorageOrientation: Vertical
-    grid:
-    - 0,0,7,1
-  - type: Item
-    size: Ginormous
-  - type: ContainerContainer
-    containers:
-      storagebase: !type:Container
-        ents: []
-  - type: UserInterface
-    interfaces:
-      enum.StorageUiKey.Key:
-        type: StorageBoundUserInterface
+    - type: Storage
+      maxItemSize: Normal
+      defaultStorageOrientation: Vertical
+      grid:
+        - 0,0,7,1
+    - type: STWeight
+      self: 10
+    - type: Item
+      size: Ginormous
+    - type: ContainerContainer
+      containers:
+        storagebase: !type:Container
+          ents: []
+    - type: UserInterface
+      interfaces:
+        enum.StorageUiKey.Key:
+          type: StorageBoundUserInterface
 
 - type: entity
   abstract: true
   parent: ClothingBeltBase
   id: ClothingBeltAmmoProviderBase
   components:
-  - type: BallisticAmmoProvider
-    mayTransfer: true
-  - type: Item
-    size: Ginormous
-  - type: ContainerContainer
-    containers:
-      ballistic-ammo: !type:Container
-
+    - type: BallisticAmmoProvider
+      mayTransfer: true
+    - type: STWeight
+      self: 10
+    - type: Item
+      size: Ginormous
+    - type: ContainerContainer
+      containers:
+        ballistic-ammo: !type:Container

Diferenças do arquivo suprimidas por serem muito extensas
+ 455 - 451
Resources/Prototypes/Entities/Clothing/Belt/belts.yml


+ 153 - 151
Resources/Prototypes/Entities/Clothing/Ears/headsets.yml

@@ -5,35 +5,37 @@
   name: headset
   description: An updated, modular intercom that fits over the head. Takes encryption keys.
   components:
-  - type: ContainerContainer
-    containers:
-      key_slots: !type:Container
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyCommon
-  - type: Headset
-  - type: EncryptionKeyHolder
-    keySlots: 4
-  - type: Sprite
-    state: icon
-  - type: Item
-    size: Small
-  - type: Clothing
-    slots:
-    - ears
-    sprite: Clothing/Ears/Headsets/base.rsi
-  - type: GuideHelp
-    guides:
-    - Radio
+    - type: ContainerContainer
+      containers:
+        key_slots: !type:Container
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyCommon
+    - type: Headset
+    - type: EncryptionKeyHolder
+      keySlots: 4
+    - type: Sprite
+      state: icon
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: Clothing
+      slots:
+        - ears
+      sprite: Clothing/Ears/Headsets/base.rsi
+    - type: GuideHelp
+      guides:
+        - Radio
 
 - type: entity
   parent: ClothingHeadset
   id: ClothingHeadsetGrey
   name: passenger headset
   components:
-  - type: Sprite
-    sprite: Clothing/Ears/Headsets/base.rsi
+    - type: Sprite
+      sprite: Clothing/Ears/Headsets/base.rsi
 
 - type: entity
   parent: ClothingHeadset
@@ -41,15 +43,15 @@
   name: cargo headset
   description: A headset used by supply employees.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyCargo
-      - EncryptionKeyCommon
-  - type: Sprite
-    sprite: Clothing/Ears/Headsets/cargo.rsi
-  - type: Clothing
-    sprite: Clothing/Ears/Headsets/cargo.rsi
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyCargo
+          - EncryptionKeyCommon
+    - type: Sprite
+      sprite: Clothing/Ears/Headsets/cargo.rsi
+    - type: Clothing
+      sprite: Clothing/Ears/Headsets/cargo.rsi
 
 - type: entity
   parent: ClothingHeadsetCargo
@@ -57,10 +59,10 @@
   name: mining headset
   description: Headset used by shaft miners.
   components:
-  - type: Sprite
-    sprite: Clothing/Ears/Headsets/mining.rsi
-  - type: Clothing
-    sprite: Clothing/Ears/Headsets/mining.rsi
+    - type: Sprite
+      sprite: Clothing/Ears/Headsets/mining.rsi
+    - type: Clothing
+      sprite: Clothing/Ears/Headsets/mining.rsi
 
 - type: entity
   parent: [ClothingHeadsetCargo, BaseCommandContraband]
@@ -68,28 +70,28 @@
   name: qm headset
   description: A headset used by the quartermaster.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyCargo
-      - EncryptionKeyCommand
-      - EncryptionKeyCommon
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyCargo
+          - EncryptionKeyCommand
+          - EncryptionKeyCommon
 
 - type: entity
-  parent: [ ClothingHeadset, BaseCentcommContraband ]
+  parent: [ClothingHeadset, BaseCentcommContraband]
   id: ClothingHeadsetCentCom
   name: CentComm headset
   description: A headset used by the upper echelons of Nanotrasen.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyCentCom
-      - EncryptionKeyStationMaster
-  - type: Sprite
-    sprite: Clothing/Ears/Headsets/centcom.rsi
-  - type: Clothing
-    sprite: Clothing/Ears/Headsets/centcom.rsi
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyCentCom
+          - EncryptionKeyStationMaster
+    - type: Sprite
+      sprite: Clothing/Ears/Headsets/centcom.rsi
+    - type: Clothing
+      sprite: Clothing/Ears/Headsets/centcom.rsi
 
 - type: entity
   parent: [ClothingHeadset, BaseCommandContraband]
@@ -97,14 +99,14 @@
   name: command headset
   description: A headset with a commanding channel.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyStationMaster
-  - type: Sprite
-    sprite: Clothing/Ears/Headsets/command.rsi
-  - type: Clothing
-    sprite: Clothing/Ears/Headsets/command.rsi
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyStationMaster
+    - type: Sprite
+      sprite: Clothing/Ears/Headsets/command.rsi
+    - type: Clothing
+      sprite: Clothing/Ears/Headsets/command.rsi
 
 - type: entity
   parent: ClothingHeadset
@@ -112,15 +114,15 @@
   name: engineering headset
   description: A headset for engineers to chat while the station burns around them.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyEngineering
-      - EncryptionKeyCommon
-  - type: Sprite
-    sprite: Clothing/Ears/Headsets/engineering.rsi
-  - type: Clothing
-    sprite: Clothing/Ears/Headsets/engineering.rsi
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyEngineering
+          - EncryptionKeyCommon
+    - type: Sprite
+      sprite: Clothing/Ears/Headsets/engineering.rsi
+    - type: Clothing
+      sprite: Clothing/Ears/Headsets/engineering.rsi
 
 - type: entity
   parent: [ClothingHeadsetEngineering, BaseCommandContraband]
@@ -128,12 +130,12 @@
   name: ce headset
   description: A headset for the chief engineer to ignore all emergency calls on.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyEngineering
-      - EncryptionKeyCommand
-      - EncryptionKeyCommon
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyEngineering
+          - EncryptionKeyCommand
+          - EncryptionKeyCommon
 
 - type: entity
   parent: ClothingHeadset
@@ -141,15 +143,15 @@
   name: medical headset
   description: A headset for the trained staff of the medbay.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyMedical
-      - EncryptionKeyCommon
-  - type: Sprite
-    sprite: Clothing/Ears/Headsets/medical.rsi
-  - type: Clothing
-    sprite: Clothing/Ears/Headsets/medical.rsi
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyMedical
+          - EncryptionKeyCommon
+    - type: Sprite
+      sprite: Clothing/Ears/Headsets/medical.rsi
+    - type: Clothing
+      sprite: Clothing/Ears/Headsets/medical.rsi
 
 - type: entity
   parent: [ClothingHeadsetMedical, BaseCommandContraband]
@@ -157,12 +159,12 @@
   name: cmo headset
   description: A headset used by the CMO.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyMedical
-      - EncryptionKeyCommand
-      - EncryptionKeyCommon
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyMedical
+          - EncryptionKeyCommand
+          - EncryptionKeyCommon
 
 - type: entity
   parent: ClothingHeadset
@@ -170,15 +172,15 @@
   name: science headset
   description: A sciency headset. Like usual.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyScience
-      - EncryptionKeyCommon
-  - type: Sprite
-    sprite: Clothing/Ears/Headsets/science.rsi
-  - type: Clothing
-    sprite: Clothing/Ears/Headsets/science.rsi
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyScience
+          - EncryptionKeyCommon
+    - type: Sprite
+      sprite: Clothing/Ears/Headsets/science.rsi
+    - type: Clothing
+      sprite: Clothing/Ears/Headsets/science.rsi
 
 - type: entity
   parent: ClothingHeadsetScience
@@ -186,15 +188,15 @@
   name: medical research headset
   description: A headset that is a result of the mating between medical and science.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyMedicalScience
-      - EncryptionKeyCommon
-  - type: Sprite
-    sprite: Clothing/Ears/Headsets/medicalscience.rsi
-  - type: Clothing
-    sprite: Clothing/Ears/Headsets/medicalscience.rsi
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyMedicalScience
+          - EncryptionKeyCommon
+    - type: Sprite
+      sprite: Clothing/Ears/Headsets/medicalscience.rsi
+    - type: Clothing
+      sprite: Clothing/Ears/Headsets/medicalscience.rsi
 
 - type: entity
   parent: ClothingHeadsetScience
@@ -202,15 +204,15 @@
   name: robotics headset
   description: Made specifically for the roboticists, who cannot decide between departments.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyRobo
-      - EncryptionKeyCommon
-  - type: Sprite
-    sprite: Clothing/Ears/Headsets/robotics.rsi
-  - type: Clothing
-    sprite: Clothing/Ears/Headsets/robotics.rsi
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyRobo
+          - EncryptionKeyCommon
+    - type: Sprite
+      sprite: Clothing/Ears/Headsets/robotics.rsi
+    - type: Clothing
+      sprite: Clothing/Ears/Headsets/robotics.rsi
 
 - type: entity
   parent: [ClothingHeadsetScience, BaseCommandContraband]
@@ -218,12 +220,12 @@
   name: rd headset
   description: Lamarr used to love chewing on this...
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyScience
-      - EncryptionKeyCommand
-      - EncryptionKeyCommon
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyScience
+          - EncryptionKeyCommand
+          - EncryptionKeyCommon
 
 - type: entity
   parent: [ClothingHeadset, BaseSecurityLawyerContraband]
@@ -231,15 +233,15 @@
   name: security headset
   description: This is used by your elite security force.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeySecurity
-      - EncryptionKeyCommon
-  - type: Sprite
-    sprite: Clothing/Ears/Headsets/security.rsi
-  - type: Clothing
-    sprite: Clothing/Ears/Headsets/security.rsi
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeySecurity
+          - EncryptionKeyCommon
+    - type: Sprite
+      sprite: Clothing/Ears/Headsets/security.rsi
+    - type: Clothing
+      sprite: Clothing/Ears/Headsets/security.rsi
 
 - type: entity
   parent: [ClothingHeadset, BaseSecurityContraband]
@@ -247,16 +249,16 @@
   name: brigmedic headset
   description: A headset that helps to hear the death cries.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyMedical
-      - EncryptionKeySecurity
-      - EncryptionKeyCommon
-  - type: Sprite
-    sprite: Clothing/Ears/Headsets/brigmedic.rsi
-  - type: Clothing
-    sprite: Clothing/Ears/Headsets/brigmedic.rsi
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyMedical
+          - EncryptionKeySecurity
+          - EncryptionKeyCommon
+    - type: Sprite
+      sprite: Clothing/Ears/Headsets/brigmedic.rsi
+    - type: Clothing
+      sprite: Clothing/Ears/Headsets/brigmedic.rsi
 
 - type: entity
   parent: ClothingHeadset
@@ -264,15 +266,15 @@
   name: service headset
   description: Headset used by the service staff, tasked with keeping the station full, happy and clean.
   components:
-  - type: ContainerFill
-    containers:
-      key_slots:
-      - EncryptionKeyService
-      - EncryptionKeyCommon
-  - type: Sprite
-    sprite: Clothing/Ears/Headsets/service.rsi
-  - type: Clothing
-    sprite: Clothing/Ears/Headsets/service.rsi
+    - type: ContainerFill
+      containers:
+        key_slots:
+          - EncryptionKeyService
+          - EncryptionKeyCommon
+    - type: Sprite
+      sprite: Clothing/Ears/Headsets/service.rsi
+    - type: Clothing
+      sprite: Clothing/Ears/Headsets/service.rsi
 
 - type: entity
   parent: ClothingHeadset

+ 35 - 33
Resources/Prototypes/Entities/Clothing/Eyes/base_clothingeyes.yml

@@ -3,34 +3,36 @@
   parent: Clothing
   id: ClothingEyesBase
   components:
-  - type: Sprite
-    state: icon
-  - type: Clothing
-    slots: [eyes]
-  - type: Item
-    size: Small
-    storedRotation: -90
+    - type: Sprite
+      state: icon
+    - type: Clothing
+      slots: [eyes]
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      storedRotation: -90
 
 - type: entity
   parent: [ClothingEyesBase, BaseFoldable]
   id: ClothingHeadEyeBaseFlippable
   abstract: true
   components:
-  - type: Appearance
-  - type: FlippableClothingVisuals
-  - type: Foldable
-    canFoldInsideContainer: true
-    unfoldVerbText: fold-flip-verb
-    foldVerbText: fold-flip-verb
-  - type: FoldableClothing
-  - type: Sprite
-    layers:
-    - map: [ "unfoldedLayer" ]
-      state: icon
-    - map: ["foldedLayer"]
-      state: icon
-      visible: false
-      scale: -1,1
+    - type: Appearance
+    - type: FlippableClothingVisuals
+    - type: Foldable
+      canFoldInsideContainer: true
+      unfoldVerbText: fold-flip-verb
+      foldVerbText: fold-flip-verb
+    - type: FoldableClothing
+    - type: Sprite
+      layers:
+        - map: ["unfoldedLayer"]
+          state: icon
+        - map: ["foldedLayer"]
+          state: icon
+          visible: false
+          scale: -1,1
 
 - type: entity
   parent: ClothingHeadEyeBaseFlippable
@@ -38,14 +40,14 @@
   suffix: flipped
   abstract: true
   components:
-  - type: Foldable
-    folded: true
-  - type: Sprite
-    layers:
-    - map: [ "unfoldedLayer" ]
-      state: icon
-      visible: false
-    - map: ["foldedLayer"]
-      state: icon
-      visible: true
-      scale: -1,1
+    - type: Foldable
+      folded: true
+    - type: Sprite
+      layers:
+        - map: ["unfoldedLayer"]
+          state: icon
+          visible: false
+        - map: ["foldedLayer"]
+          state: icon
+          visible: true
+          scale: -1,1

+ 46 - 42
Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml

@@ -3,41 +3,43 @@
   parent: Clothing
   id: ClothingHandsBase
   components:
-  - type: Sprite
-    state: icon
-  - type: Clothing
-    slots: [gloves]
-  - type: Food
-    requiresSpecialDigestion: true
-  - type: Item
-    size: Small
-    storedRotation: -90
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-        reagents:
-        - ReagentId: Fiber
-          Quantity: 10
-  - type: Tag
-    tags:
-    - ClothMade
-    - WhitelistChameleon
-  - type: DamageOnInteractProtection
-    damageProtection:
-      flatReductions:
-        Heat: 5 # the average lightbulb only does around four damage!
+    - type: Sprite
+      state: icon
+    - type: Clothing
+      slots: [gloves]
+    - type: Food
+      requiresSpecialDigestion: true
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      storedRotation: -90
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+          reagents:
+            - ReagentId: Fiber
+              Quantity: 10
+    - type: Tag
+      tags:
+        - ClothMade
+        - WhitelistChameleon
+    - type: DamageOnInteractProtection
+      damageProtection:
+        flatReductions:
+          Heat: 5 # the average lightbulb only does around four damage!
 
 - type: entity
   abstract: true
   parent: ClothingHandsBase
   id: ClothingHandsButcherable
   components:
-  - type: Butcherable
-    butcheringType: Knife
-    spawned:
-    - id: MaterialCloth1
-      amount: 1
+    - type: Butcherable
+      butcheringType: Knife
+      spawned:
+        - id: MaterialCloth1
+          amount: 1
 
 # gloves that cover the fingertips and have synthetic fibers
 - type: entity
@@ -45,25 +47,27 @@
   parent: ClothingHandsButcherable
   id: ClothingHandsGlovesSyntheticBase
   components:
-  - type: Fiber
-    fiberMaterial: fibers-synthetic
-  - type: FingerprintMask
+    - type: Fiber
+      fiberMaterial: fibers-synthetic
+    - type: FingerprintMask
 
 - type: entity
   abstract: true
   parent: BaseItem
   id: RingBase
   components:
-  - type: Clothing
-    slots: [ gloves, neck ]
-  - type: Sprite
-    sprite: Clothing/Hands/Rings/basic.rsi
-  - type: Appearance
-  - type: Item
-    size: Tiny
-  - type: Tag
-    tags:
-    - Ring
+    - type: Clothing
+      slots: [gloves, neck]
+    - type: Sprite
+      sprite: Clothing/Hands/Rings/basic.rsi
+    - type: Appearance
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+    - type: Tag
+      tags:
+        - Ring
 
 - type: entity
   abstract: true

+ 215 - 211
Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml

@@ -3,101 +3,103 @@
   parent: Clothing
   id: ClothingHeadBase
   components:
-  - type: Clothing
-    slots:
-    - HEAD
-  - type: Sprite
-    state: icon
-  - type: Item
-    size: Small
-    storedRotation: -90
-  - type: Food
-    requiresSpecialDigestion: true
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-        reagents:
-        - ReagentId: Fiber
-          Quantity: 10
-  - type: Tag
-    tags:
-      - ClothMade
-      - WhitelistChameleon
+    - type: Clothing
+      slots:
+        - HEAD
+    - type: Sprite
+      state: icon
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      storedRotation: -90
+    - type: Food
+      requiresSpecialDigestion: true
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+          reagents:
+            - ReagentId: Fiber
+              Quantity: 10
+    - type: Tag
+      tags:
+        - ClothMade
+        - WhitelistChameleon
 
 - type: entity
   abstract: true
   parent: ClothingHeadBase
   id: ClothingHeadBaseButcherable
   components:
-  - type: Butcherable
-    butcheringType: Knife
-    spawned:
-    - id: MaterialCloth1
-      amount: 1
-  - type: Tag
-    tags:
-      - ClothMade
-      - WhitelistChameleon
+    - type: Butcherable
+      butcheringType: Knife
+      spawned:
+        - id: MaterialCloth1
+          amount: 1
+    - type: Tag
+      tags:
+        - ClothMade
+        - WhitelistChameleon
 
 - type: entity
   abstract: true
   parent: ClothingHeadBase
   id: ClothingHeadLightBase
   name: base helmet with light
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-    - state: icon-flash
-      visible: false
-      map: [ "light" ]
-  - type: Clothing
-    equippedPrefix: off
-  - type: Item
-    heldPrefix: off
-    size: Normal
-  - type: ToggleableLightVisuals
-  - type: PointLight
-    enabled: false
-    radius: 3
-    energy: 1
-    mask: /Textures/Effects/LightMasks/cone.png
-    autoRot: true
-    netsync: false
-  - type: Appearance
-  - type: HandheldLight
-    addPrefix: true
-    blinkingBehaviourId: blinking
-    radiatingBehaviourId: radiating
-  - type: LightBehaviour
-    behaviours:
-      - !type:FadeBehaviour
-        id: radiating
-        interpolate: Linear
-        maxDuration: 2.0
-        startValue: 3.0
-        endValue: 2.0
-        isLooped: true
-        reverseWhenFinished: true
-      - !type:PulseBehaviour
-        id: blinking
-        interpolate: Nearest
-        maxDuration: 1.0
-        minValue: 0.1
-        maxValue: 2.0
-        isLooped: true
-  - type: PowerCellSlot
-    cellSlotId: cell_slot
-  - type: ItemSlots
-    slots:
-      cell_slot:
-        name: power-cell-slot-component-slot-name-default
-        startingItem: PowerCellMedium
-  - type: ContainerContainer
-    containers:
-      cell_slot: !type:ContainerSlot {}
+    - type: Sprite
+      layers:
+        - state: icon
+        - state: icon-flash
+          visible: false
+          map: ["light"]
+    - type: Clothing
+      equippedPrefix: off
+    - type: Item
+      heldPrefix: off
+      size: Normal
+    - type: ToggleableLightVisuals
+    - type: PointLight
+      enabled: false
+      radius: 3
+      energy: 1
+      mask: /Textures/Effects/LightMasks/cone.png
+      autoRot: true
+      netsync: false
+    - type: Appearance
+    - type: HandheldLight
+      addPrefix: true
+      blinkingBehaviourId: blinking
+      radiatingBehaviourId: radiating
+    - type: LightBehaviour
+      behaviours:
+        - !type:FadeBehaviour
+          id: radiating
+          interpolate: Linear
+          maxDuration: 2.0
+          startValue: 3.0
+          endValue: 2.0
+          isLooped: true
+          reverseWhenFinished: true
+        - !type:PulseBehaviour
+          id: blinking
+          interpolate: Nearest
+          maxDuration: 1.0
+          minValue: 0.1
+          maxValue: 2.0
+          isLooped: true
+    - type: PowerCellSlot
+      cellSlotId: cell_slot
+    - type: ItemSlots
+      slots:
+        cell_slot:
+          name: power-cell-slot-component-slot-name-default
+          startingItem: PowerCellMedium
+    - type: ContainerContainer
+      containers:
+        cell_slot: !type:ContainerSlot {}
 
 - type: entity
   abstract: true
@@ -105,153 +107,155 @@
   id: ClothingHeadEVAHelmetBase
   name: base space helmet
   components:
-  - type: BreathMask
-  - type: Item
-    size: Normal
-  - type: PressureProtection
-    highPressureMultiplier: 0.6
-    lowPressureMultiplier: 1000
-  - type: TemperatureProtection
-    heatingCoefficient: 0.2
-    coolingCoefficient: 0.2
-  - type: IngestionBlocker
-  - type: Clothing
-    #Copies ClothingHeadHardsuitBase behavior
-    equipSound: /Audio/Mecha/mechmove03.ogg
-    unequipSound: /Audio/Mecha/mechmove03.ogg
-    equipDelay: 2
-    unequipDelay: 2
-  - type: Tag
-    tags:
-    - WhitelistChameleon
-    - HelmetEVA
-  - type: IdentityBlocker
-  - type: HideLayerClothing
-    slots:
-    - Hair
-    - Snout
-    - HeadTop
-    - HeadSide
+    - type: BreathMask
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: PressureProtection
+      highPressureMultiplier: 0.6
+      lowPressureMultiplier: 1000
+    - type: TemperatureProtection
+      heatingCoefficient: 0.2
+      coolingCoefficient: 0.2
+    - type: IngestionBlocker
+    - type: Clothing
+      #Copies ClothingHeadHardsuitBase behavior
+      equipSound: /Audio/Mecha/mechmove03.ogg
+      unequipSound: /Audio/Mecha/mechmove03.ogg
+      equipDelay: 2
+      unequipDelay: 2
+    - type: Tag
+      tags:
+        - WhitelistChameleon
+        - HelmetEVA
+    - type: IdentityBlocker
+    - type: HideLayerClothing
+      slots:
+        - Hair
+        - Snout
+        - HeadTop
+        - HeadSide
 
 - type: entity
   abstract: true
   # No parent since we aren't actually an item.
   id: ClothingHeadHardsuitBase
   name: base hardsuit helmet
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   components:
-  - type: BreathMask
-  - type: Sprite
-    state: icon # default state used by most inheritors
-  - type: Clickable
-  - type: InteractionOutline
-  - type: Clothing
-    #Apparently the hardsuit helmet equip sound is from a walking mech?
-    equipSound: /Audio/Mecha/mechmove03.ogg
-    unequipSound: /Audio/Mecha/mechmove03.ogg
-    quickEquip: false
-    slots: [ HEAD ]
-  - type: PressureProtection
-    highPressureMultiplier: 0.3
-    lowPressureMultiplier: 1000
-  - type: TemperatureProtection
-    heatingCoefficient: 0.1
-    coolingCoefficient: 0.1
-  - type: Armor
-    modifiers:
-      coefficients:
-        Blunt: 0.90
-        Slash: 0.90
-        Piercing: 0.95
-        Heat: 0.90
-        Radiation: 0.25
-  - type: GroupExamine
-  - type: IngestionBlocker
-  - type: Tag
-    tags:
-    - WhitelistChameleon
-  - type: IdentityBlocker
-  - type: HideLayerClothing
-    slots:
-    - Hair
-    - Snout
-    - HeadTop
-    - HeadSide
+    - type: BreathMask
+    - type: Sprite
+      state: icon # default state used by most inheritors
+    - type: Clickable
+    - type: InteractionOutline
+    - type: Clothing
+      #Apparently the hardsuit helmet equip sound is from a walking mech?
+      equipSound: /Audio/Mecha/mechmove03.ogg
+      unequipSound: /Audio/Mecha/mechmove03.ogg
+      quickEquip: false
+      slots: [HEAD]
+    - type: PressureProtection
+      highPressureMultiplier: 0.3
+      lowPressureMultiplier: 1000
+    - type: TemperatureProtection
+      heatingCoefficient: 0.1
+      coolingCoefficient: 0.1
+    - type: Armor
+      modifiers:
+        coefficients:
+          Blunt: 0.90
+          Slash: 0.90
+          Piercing: 0.95
+          Heat: 0.90
+          Radiation: 0.25
+    - type: GroupExamine
+    - type: IngestionBlocker
+    - type: Tag
+      tags:
+        - WhitelistChameleon
+    - type: IdentityBlocker
+    - type: HideLayerClothing
+      slots:
+        - Hair
+        - Snout
+        - HeadTop
+        - HeadSide
 
 - type: entity
   abstract: true
   # No parent since it isn't an item
-  # must parent both this and the desired helmet base when using 
+  # must parent both this and the desired helmet base when using
   id: ClothingHeadSuitWithLightBase
   name: base hardsuit helmet with light
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-    - state: icon-flash
-      visible: false
-      map: [ "light" ]
-  - type: Clothing
-    equippedPrefix: off
-  - type: ToggleableLightVisuals
-  - type: PointLight
-    enabled: false
-    radius: 3
-    energy: 2
-    mask: /Textures/Effects/LightMasks/cone.png
-    autoRot: true
-    netsync: false
-  - type: Appearance
-  - type: HandheldLight
-    addPrefix: true
-    blinkingBehaviourId: blinking
-    radiatingBehaviourId: radiating
-  - type: LightBehaviour
-    behaviours:
-      - !type:FadeBehaviour
-        id: radiating
-        interpolate: Linear
-        maxDuration: 2.0
-        startValue: 3.0
-        endValue: 2.0
-        isLooped: true
-        reverseWhenFinished: true
-      - !type:PulseBehaviour
-        id: blinking
-        interpolate: Nearest
-        maxDuration: 1.0
-        minValue: 0.1
-        maxValue: 2.0
-        isLooped: true
-  - type: Battery
-    maxCharge: 600 #lights drain 3/s but recharge of 2 makes this 1/s. Therefore 600 is 10 minutes of light.
-    startingCharge: 600
-  - type: BatterySelfRecharger
-    autoRecharge: true
-    autoRechargeRate: 2 #recharge of 2 makes total drain 1w / s so max charge is 1:1 with time. Time to fully charge should be 5 minutes. Having recharge gives light an extended flicker period which gives you some warning to return to light area.
+    - type: Sprite
+      layers:
+        - state: icon
+        - state: icon-flash
+          visible: false
+          map: ["light"]
+    - type: Clothing
+      equippedPrefix: off
+    - type: ToggleableLightVisuals
+    - type: PointLight
+      enabled: false
+      radius: 3
+      energy: 2
+      mask: /Textures/Effects/LightMasks/cone.png
+      autoRot: true
+      netsync: false
+    - type: Appearance
+    - type: HandheldLight
+      addPrefix: true
+      blinkingBehaviourId: blinking
+      radiatingBehaviourId: radiating
+    - type: LightBehaviour
+      behaviours:
+        - !type:FadeBehaviour
+          id: radiating
+          interpolate: Linear
+          maxDuration: 2.0
+          startValue: 3.0
+          endValue: 2.0
+          isLooped: true
+          reverseWhenFinished: true
+        - !type:PulseBehaviour
+          id: blinking
+          interpolate: Nearest
+          maxDuration: 1.0
+          minValue: 0.1
+          maxValue: 2.0
+          isLooped: true
+    - type: Battery
+      maxCharge: 600 #lights drain 3/s but recharge of 2 makes this 1/s. Therefore 600 is 10 minutes of light.
+      startingCharge: 600
+    - type: BatterySelfRecharger
+      autoRecharge: true
+      autoRechargeRate: 2 #recharge of 2 makes total drain 1w / s so max charge is 1:1 with time. Time to fully charge should be 5 minutes. Having recharge gives light an extended flicker period which gives you some warning to return to light area.
 
 - type: entity
   abstract: true
   id: ClothingHeadHatHoodWinterBase
   name: base winter coat hood
   description: A hood, made to keep your head warm.
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   components:
-  - type: Sprite
-    state: icon
-  - type: Clickable
-  - type: Clothing
-    equipSound: /Audio/Effects/rustle1.ogg
-    unequipSound: /Audio/Effects/rustle2.ogg
-    quickEquip: false
-    slots: [ HEAD ]
-  - type: TemperatureProtection
-    heatingCoefficient: 1.05
-    coolingCoefficient: 0.7
-  - type: GroupExamine
-  - type: HideLayerClothing
-    slots:
-    - Hair
-    - HeadTop
-    - HeadSide
+    - type: Sprite
+      state: icon
+    - type: Clickable
+    - type: Clothing
+      equipSound: /Audio/Effects/rustle1.ogg
+      unequipSound: /Audio/Effects/rustle2.ogg
+      quickEquip: false
+      slots: [HEAD]
+    - type: TemperatureProtection
+      heatingCoefficient: 1.05
+      coolingCoefficient: 0.7
+    - type: GroupExamine
+    - type: HideLayerClothing
+      slots:
+        - Hair
+        - HeadTop
+        - HeadSide

Diferenças do arquivo suprimidas por serem muito extensas
+ 336 - 337
Resources/Prototypes/Entities/Clothing/Head/hats.yml


+ 32 - 30
Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml

@@ -3,51 +3,53 @@
   parent: Clothing
   id: ClothingMaskBase
   components:
-  - type: Sprite
-    state: icon
-  - type: Item
-    size: Small
-  - type: Clothing
-    slots: [mask]
-  - type: StaticPrice
-    price: 25
+    - type: Sprite
+      state: icon
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: Clothing
+      slots: [mask]
+    - type: StaticPrice
+      price: 25
 
 - type: entity
   abstract: true
   parent: ClothingMaskBase
   id: ClothingMaskPullableBase
   components:
-  - type: Mask
+    - type: Mask
 
 - type: entity
   id: ActionToggleMask
   name: Toggle Mask
   description: Handy, but prevents insertion of pie into your pie hole.
   components:
-  - type: InstantAction
-    icon: { sprite: Clothing/Mask/gas.rsi, state: icon }
-    iconOn: Interface/Default/blocked.png
-    event: !type:ToggleMaskEvent
+    - type: InstantAction
+      icon: { sprite: Clothing/Mask/gas.rsi, state: icon }
+      iconOn: Interface/Default/blocked.png
+      event: !type:ToggleMaskEvent
 
 - type: entity
   id: ClothingMaskBaseButcherable
   parent: ClothingMaskBase
   abstract: true
   components:
-  - type: Butcherable
-    butcheringType: Knife
-    spawned:
-    - id: MaterialCloth1
-      amount: 1
-  - type: Food
-    requiresSpecialDigestion: true
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-        reagents:
-        - ReagentId: Fiber
-          Quantity: 10
-  - type: Tag
-    tags:
-      - ClothMade
+    - type: Butcherable
+      butcheringType: Knife
+      spawned:
+        - id: MaterialCloth1
+          amount: 1
+    - type: Food
+      requiresSpecialDigestion: true
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+          reagents:
+            - ReagentId: Fiber
+              Quantity: 10
+    - type: Tag
+      tags:
+        - ClothMade

Diferenças do arquivo suprimidas por serem muito extensas
+ 392 - 380
Resources/Prototypes/Entities/Clothing/Masks/masks.yml


+ 625 - 624
Resources/Prototypes/Entities/Clothing/Multiple/towel.yml

@@ -3,764 +3,765 @@
   name: base towel
   abstract: true
   description: If you want to survive out here, you gotta know where your towel is.
-  parent: [ UnsensoredClothingUniformBase, ClothingHeadBase, ClothingBeltBase ]
+  parent: [UnsensoredClothingUniformBase, ClothingHeadBase, ClothingBeltBase]
   components:
-  - type: Sprite
-    sprite: Clothing/Multiple/towel.rsi
-  - type: Clothing
-    sprite: Clothing/Multiple/towel.rsi
-    slots: 
-    - BELT
-    - INNERCLOTHING
-    - HEAD
-    femaleMask: UniformTop
-    equipSound: 
-    unequipSound: 
-  - type: Spillable
-    solution: absorbed
-  - type: Absorbent
-    pickupAmount: 15
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 30
-        reagents:
-        - ReagentId: Fiber
-          Quantity: 30
-      absorbed:
-        maxVol: 30
-  - type: UseDelay
-    delay: 1
-  - type: Fiber
-    fiberColor: fibers-white
-  - type: DnaSubstanceTrace
-  - type: Item
-    size: Small
+    - type: Sprite
+      sprite: Clothing/Multiple/towel.rsi
+    - type: Clothing
+      sprite: Clothing/Multiple/towel.rsi
+      slots:
+        - BELT
+        - INNERCLOTHING
+        - HEAD
+      femaleMask: UniformTop
+      equipSound:
+      unequipSound:
+    - type: Spillable
+      solution: absorbed
+    - type: Absorbent
+      pickupAmount: 15
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 30
+          reagents:
+            - ReagentId: Fiber
+              Quantity: 30
+        absorbed:
+          maxVol: 30
+    - type: UseDelay
+      delay: 1
+    - type: Fiber
+      fiberColor: fibers-white
+    - type: DnaSubstanceTrace
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
 
 - type: entity
   id: TowelColorWhite
   name: white towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#EAE8E8"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#EAE8E8"
-      right:
-      - state: inhand-right
-        color: "#EAE8E8"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#EAE8E8"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#EAE8E8"
-      belt:
-      - state: equipped-BELT
-        color: "#EAE8E8"
-  - type: Fiber
-    fiberColor: fibers-white
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#EAE8E8"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#EAE8E8"
+        right:
+          - state: inhand-right
+            color: "#EAE8E8"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#EAE8E8"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#EAE8E8"
+        belt:
+          - state: equipped-BELT
+            color: "#EAE8E8"
+    - type: Fiber
+      fiberColor: fibers-white
 
 - type: entity
   id: TowelColorPurple
   name: purple towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#9C0DE1"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#9C0DE1"
-      right:
-      - state: inhand-right
-        color: "#9C0DE1"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#9C0DE1"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#9C0DE1"
-      belt:
-      - state: equipped-BELT
-        color: "#9C0DE1"
-  - type: Fiber
-    fiberColor: fibers-purple
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#9C0DE1"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#9C0DE1"
+        right:
+          - state: inhand-right
+            color: "#9C0DE1"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#9C0DE1"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#9C0DE1"
+        belt:
+          - state: equipped-BELT
+            color: "#9C0DE1"
+    - type: Fiber
+      fiberColor: fibers-purple
 
 - type: entity
   id: TowelColorRed
   name: red towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#940000"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#940000"
-      right:
-      - state: inhand-right
-        color: "#940000"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#940000"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#940000"
-      belt:
-      - state: equipped-BELT
-        color: "#940000"
-  - type: Fiber
-    fiberColor: fibers-red
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#940000"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#940000"
+        right:
+          - state: inhand-right
+            color: "#940000"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#940000"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#940000"
+        belt:
+          - state: equipped-BELT
+            color: "#940000"
+    - type: Fiber
+      fiberColor: fibers-red
 
 - type: entity
   id: TowelColorBlue
   name: blue towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#0089EF"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#0089EF"
-      right:
-      - state: inhand-right
-        color: "#0089EF"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#0089EF"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#0089EF"
-      belt:
-      - state: equipped-BELT
-        color: "#0089EF"
-  - type: Fiber
-    fiberColor: fibers-blue
-    
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#0089EF"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#0089EF"
+        right:
+          - state: inhand-right
+            color: "#0089EF"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#0089EF"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#0089EF"
+        belt:
+          - state: equipped-BELT
+            color: "#0089EF"
+    - type: Fiber
+      fiberColor: fibers-blue
+
 - type: entity
   id: TowelColorDarkBlue
   name: dark blue towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#3285ba"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#3285ba"
-      right:
-      - state: inhand-right
-        color: "#3285ba"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#3285ba"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#3285ba"
-      belt:
-      - state: equipped-BELT
-        color: "#3285ba"
-  - type: Fiber
-    fiberColor: fibers-blue
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#3285ba"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#3285ba"
+        right:
+          - state: inhand-right
+            color: "#3285ba"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#3285ba"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#3285ba"
+        belt:
+          - state: equipped-BELT
+            color: "#3285ba"
+    - type: Fiber
+      fiberColor: fibers-blue
 
 - type: entity
   id: TowelColorLightBlue
   name: light blue towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#58abcc"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#58abcc"
-      right:
-      - state: inhand-right
-        color: "#58abcc"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#58abcc"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#58abcc"
-      belt:
-      - state: equipped-BELT
-        color: "#58abcc"
-  - type: Fiber
-    fiberColor: fibers-blue
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#58abcc"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#58abcc"
+        right:
+          - state: inhand-right
+            color: "#58abcc"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#58abcc"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#58abcc"
+        belt:
+          - state: equipped-BELT
+            color: "#58abcc"
+    - type: Fiber
+      fiberColor: fibers-blue
 
 - type: entity
   id: TowelColorTeal
   name: teal towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#3CB57C"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#3CB57C"
-      right:
-      - state: inhand-right
-        color: "#3CB57C"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#3CB57C"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#3CB57C"
-      belt:
-      - state: equipped-BELT
-        color: "#3CB57C"
-  - type: Fiber
-    fiberColor: fibers-teal
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#3CB57C"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#3CB57C"
+        right:
+          - state: inhand-right
+            color: "#3CB57C"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#3CB57C"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#3CB57C"
+        belt:
+          - state: equipped-BELT
+            color: "#3CB57C"
+    - type: Fiber
+      fiberColor: fibers-teal
 
 - type: entity
   id: TowelColorBrown
   name: brown towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#723A02"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#723A02"
-      right:
-      - state: inhand-right
-        color: "#723A02"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#723A02"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#723A02"
-      belt:
-      - state: equipped-BELT
-        color: "#723A02"
-  - type: Fiber
-    fiberColor: fibers-light-brown
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#723A02"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#723A02"
+        right:
+          - state: inhand-right
+            color: "#723A02"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#723A02"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#723A02"
+        belt:
+          - state: equipped-BELT
+            color: "#723A02"
+    - type: Fiber
+      fiberColor: fibers-light-brown
 
 - type: entity
   id: TowelColorLightBrown
   name: light brown towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#c59431"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#c59431"
-      right:
-      - state: inhand-right
-        color: "#c59431"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#c59431"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#c59431"
-      belt:
-      - state: equipped-BELT
-        color: "#c59431"
-  - type: Fiber
-    fiberColor: fibers-brown
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#c59431"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#c59431"
+        right:
+          - state: inhand-right
+            color: "#c59431"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#c59431"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#c59431"
+        belt:
+          - state: equipped-BELT
+            color: "#c59431"
+    - type: Fiber
+      fiberColor: fibers-brown
 
 - type: entity
   id: TowelColorGray
   name: gray towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#999999"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#999999"
-      right:
-      - state: inhand-right
-        color: "#999999"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#999999"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#999999"
-      belt:
-      - state: equipped-BELT
-        color: "#999999"
-  - type: Fiber
-    fiberColor: fibers-grey
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#999999"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#999999"
+        right:
+          - state: inhand-right
+            color: "#999999"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#999999"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#999999"
+        belt:
+          - state: equipped-BELT
+            color: "#999999"
+    - type: Fiber
+      fiberColor: fibers-grey
 
 - type: entity
   id: TowelColorGreen
   name: green towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#5ABF2F"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#5ABF2F"
-      right:
-      - state: inhand-right
-        color: "#5ABF2F"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#5ABF2F"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#5ABF2F"
-      belt:
-      - state: equipped-BELT
-        color: "#5ABF2F"
-  - type: Fiber
-    fiberColor: fibers-green
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#5ABF2F"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#5ABF2F"
+        right:
+          - state: inhand-right
+            color: "#5ABF2F"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#5ABF2F"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#5ABF2F"
+        belt:
+          - state: equipped-BELT
+            color: "#5ABF2F"
+    - type: Fiber
+      fiberColor: fibers-green
 
 - type: entity
   id: TowelColorDarkGreen
   name: dark green towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#79CC26"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#79CC26"
-      right:
-      - state: inhand-right
-        color: "#79CC26"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#79CC26"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#79CC26"
-      belt:
-      - state: equipped-BELT
-        color: "#79CC26"
-  - type: Fiber
-    fiberColor: fibers-green
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#79CC26"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#79CC26"
+        right:
+          - state: inhand-right
+            color: "#79CC26"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#79CC26"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#79CC26"
+        belt:
+          - state: equipped-BELT
+            color: "#79CC26"
+    - type: Fiber
+      fiberColor: fibers-green
 
 - type: entity
   id: TowelColorGold
   name: gold towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#F7C430"
-    - state: iconstripe
-      color: "#535353"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#F7C430"
-      right:
-      - state: inhand-right
-        color: "#F7C430"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#F7C430"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#F7C430"
-      belt:
-      - state: equipped-BELT
-        color: "#F7C430"
-  - type: Fiber
-    fiberColor: fibers-gold
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#F7C430"
+        - state: iconstripe
+          color: "#535353"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#F7C430"
+        right:
+          - state: inhand-right
+            color: "#F7C430"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#F7C430"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#F7C430"
+        belt:
+          - state: equipped-BELT
+            color: "#F7C430"
+    - type: Fiber
+      fiberColor: fibers-gold
 
 - type: entity
   id: TowelColorOrange
   name: orange towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#EF8100"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#EF8100"
-      right:
-      - state: inhand-right
-        color: "#EF8100"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#EF8100"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#EF8100"
-      belt:
-      - state: equipped-BELT
-        color: "#EF8100"
-  - type: Fiber
-    fiberColor: fibers-orange
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#EF8100"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#EF8100"
+        right:
+          - state: inhand-right
+            color: "#EF8100"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#EF8100"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#EF8100"
+        belt:
+          - state: equipped-BELT
+            color: "#EF8100"
+    - type: Fiber
+      fiberColor: fibers-orange
 
 - type: entity
   id: TowelColorBlack
   name: black towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#535353"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#535353"
-      right:
-      - state: inhand-right
-        color: "#535353"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#535353"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#535353"
-      belt:
-      - state: equipped-BELT
-        color: "#535353"
-  - type: Fiber
-    fiberColor: fibers-black
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#535353"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#535353"
+        right:
+          - state: inhand-right
+            color: "#535353"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#535353"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#535353"
+        belt:
+          - state: equipped-BELT
+            color: "#535353"
+    - type: Fiber
+      fiberColor: fibers-black
 
 - type: entity
   id: TowelColorPink
   name: pink towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#ffa69b"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#ffa69b"
-      right:
-      - state: inhand-right
-        color: "#ffa69b"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#ffa69b"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#ffa69b"
-      belt:
-      - state: equipped-BELT
-        color: "#ffa69b"
-  - type: Fiber
-    fiberColor: fibers-pink
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#ffa69b"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#ffa69b"
+        right:
+          - state: inhand-right
+            color: "#ffa69b"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#ffa69b"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#ffa69b"
+        belt:
+          - state: equipped-BELT
+            color: "#ffa69b"
+    - type: Fiber
+      fiberColor: fibers-pink
 
 - type: entity
   id: TowelColorYellow
   name: yellow towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#ffe14d"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#ffe14d"
-      right:
-      - state: inhand-right
-        color: "#ffe14d"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#ffe14d"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#ffe14d"
-      belt:
-      - state: equipped-BELT
-        color: "#ffe14d"
-  - type: Fiber
-    fiberColor: fibers-yellow
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#ffe14d"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#ffe14d"
+        right:
+          - state: inhand-right
+            color: "#ffe14d"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#ffe14d"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#ffe14d"
+        belt:
+          - state: equipped-BELT
+            color: "#ffe14d"
+    - type: Fiber
+      fiberColor: fibers-yellow
 
 - type: entity
   id: TowelColorMaroon
   name: maroon towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#cc295f"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#cc295f"
-      right:
-      - state: inhand-right
-        color: "#cc295f"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#cc295f"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#cc295f"
-      belt:
-      - state: equipped-BELT
-        color: "#cc295f"
-  - type: Fiber
-    fiberColor: fibers-maroon
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#cc295f"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#cc295f"
+        right:
+          - state: inhand-right
+            color: "#cc295f"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#cc295f"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#cc295f"
+        belt:
+          - state: equipped-BELT
+            color: "#cc295f"
+    - type: Fiber
+      fiberColor: fibers-maroon
 
 - type: entity
   id: TowelColorSilver
   name: silver towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#d0d0d0"
-    - state: iconstripe
-      color: "#F7C430"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#d0d0d0"
-      right:
-      - state: inhand-right
-        color: "#d0d0d0"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#d0d0d0"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#d0d0d0"
-      belt:
-      - state: equipped-BELT
-        color: "#d0d0d0"
-  - type: Fiber
-    fiberColor: fibers-silver
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#d0d0d0"
+        - state: iconstripe
+          color: "#F7C430"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#d0d0d0"
+        right:
+          - state: inhand-right
+            color: "#d0d0d0"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#d0d0d0"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#d0d0d0"
+        belt:
+          - state: equipped-BELT
+            color: "#d0d0d0"
+    - type: Fiber
+      fiberColor: fibers-silver
 
 - type: entity
   id: TowelColorMime
   name: silent towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#EAE8E8"
-    - state: iconstripe
-      color: "#535353"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#EAE8E8"
-      right:
-      - state: inhand-right
-        color: "#EAE8E8"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#EAE8E8"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#EAE8E8"
-      belt:
-      - state: equipped-BELT
-        color: "#EAE8E8"
-  - type: Fiber
-    fiberColor: fibers-white
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#EAE8E8"
+        - state: iconstripe
+          color: "#535353"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#EAE8E8"
+        right:
+          - state: inhand-right
+            color: "#EAE8E8"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#EAE8E8"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#EAE8E8"
+        belt:
+          - state: equipped-BELT
+            color: "#EAE8E8"
+    - type: Fiber
+      fiberColor: fibers-white
 
 - type: entity
   id: TowelColorNT
   name: NanoTrasen brand towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#004787"
-    - state: iconstripe
-      color: "#EAE8E8"
-    - state: NTmono
-      color: "#EAE8E8"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#004787"
-      right:
-      - state: inhand-right
-        color: "#004787"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#004787"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#004787"
-      belt:
-      - state: equipped-BELT
-        color: "#004787"
-  - type: Fiber
-    fiberColor: fibers-regal-blue
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#004787"
+        - state: iconstripe
+          color: "#EAE8E8"
+        - state: NTmono
+          color: "#EAE8E8"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#004787"
+        right:
+          - state: inhand-right
+            color: "#004787"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#004787"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#004787"
+        belt:
+          - state: equipped-BELT
+            color: "#004787"
+    - type: Fiber
+      fiberColor: fibers-regal-blue
 
 - type: entity
   id: TowelColorCentcom
   name: centcom towel
   parent: BaseTowel
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#29722e"
-    - state: iconstripe
-      color: "#F7C430"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#29722e"
-      right:
-      - state: inhand-right
-        color: "#29722e"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#29722e"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#29722e"
-      belt:
-      - state: equipped-BELT
-        color: "#29722e"
-  - type: Fiber
-    fiberColor: fibers-green
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#29722e"
+        - state: iconstripe
+          color: "#F7C430"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#29722e"
+        right:
+          - state: inhand-right
+            color: "#29722e"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#29722e"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#29722e"
+        belt:
+          - state: equipped-BELT
+            color: "#29722e"
+    - type: Fiber
+      fiberColor: fibers-green
 
 - type: entity
   id: TowelColorSyndicate
   name: syndicate towel
-  parent: [ BaseTowel, BaseSyndicateContraband ]
+  parent: [BaseTowel, BaseSyndicateContraband]
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      color: "#535353"
-    - state: iconstripe
-      color: "#940000"
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left
-        color: "#535353"
-      right:
-      - state: inhand-right
-        color: "#535353"
-  - type: Clothing
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        color: "#535353"
-      jumpsuit:
-      - state: equipped-INNERCLOTHING
-        color: "#535353"
-      belt:
-      - state: equipped-BELT
-        color: "#535353"
-  - type: Fiber
-    fiberColor: fibers-black
-    
+    - type: Sprite
+      layers:
+        - state: icon
+          color: "#535353"
+        - state: iconstripe
+          color: "#940000"
+    - type: Item
+      inhandVisuals:
+        left:
+          - state: inhand-left
+            color: "#535353"
+        right:
+          - state: inhand-right
+            color: "#535353"
+    - type: Clothing
+      clothingVisuals:
+        head:
+          - state: equipped-HELMET
+            color: "#535353"
+        jumpsuit:
+          - state: equipped-INNERCLOTHING
+            color: "#535353"
+        belt:
+          - state: equipped-BELT
+            color: "#535353"
+    - type: Fiber
+      fiberColor: fibers-black

+ 33 - 31
Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml

@@ -3,40 +3,42 @@
   parent: Clothing
   id: ClothingNeckBase
   components:
-  - type: Item
-    size: Small
-  - type: Clothing
-    quickEquip: true
-    slots:
-    - neck
-  - type: Sprite
-    state: icon
-  - type: Butcherable
-    butcheringType: Knife
-    spawned:
-    - id: MaterialCloth1
-      amount: 2
-  - type: Food
-    requiresSpecialDigestion: true
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-        reagents:
-        - ReagentId: Fiber
-          Quantity: 10
-  - type: Tag
-    tags:
-    - ClothMade
-    - WhitelistChameleon
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: Clothing
+      quickEquip: true
+      slots:
+        - neck
+    - type: Sprite
+      state: icon
+    - type: Butcherable
+      butcheringType: Knife
+      spawned:
+        - id: MaterialCloth1
+          amount: 2
+    - type: Food
+      requiresSpecialDigestion: true
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+          reagents:
+            - ReagentId: Fiber
+              Quantity: 10
+    - type: Tag
+      tags:
+        - ClothMade
+        - WhitelistChameleon
 
 - type: entity
   abstract: true
   parent: ClothingNeckBase
   id: ClothingScarfBase
   components:
-  - type: Tag
-    tags:
-    - Scarf
-    - ClothMade
-    - WhitelistChameleon
+    - type: Tag
+      tags:
+        - Scarf
+        - ClothMade
+        - WhitelistChameleon

+ 61 - 59
Resources/Prototypes/Entities/Clothing/Neck/misc.yml

@@ -4,32 +4,32 @@
   name: headphones
   description: Quality headphones from Drunk Masters, with good sound insulation.
   components:
-  - type: Sprite
-    sprite: Clothing/Neck/Misc/headphones.rsi
-    layers:
-    - state: icon
-      map: [ "enum.ToggleVisuals.Layer" ]
-  - type: Clothing
-    equippedPrefix: off
-    sprite: Clothing/Neck/Misc/headphones.rsi
-  - type: ToggleableLightVisuals
-    spriteLayer: enum.ToggleVisuals.Layer
-    clothingVisuals:
-      neck:
-      - state: on-equipped-NECK
-  - type: Appearance
-  - type: GenericVisualizer
-    visuals:
-      enum.ToggleVisuals.Toggled:
-        enum.ToggleVisuals.Layer:
-          True: {state: icon-on}
-          False: {state: icon}
-  - type: ItemToggle
-    predictable: false
-    soundActivate:
-      path: /Audio/Items/flashlight_on.ogg
-    soundDeactivate:
-      path: /Audio/Items/flashlight_off.ogg
+    - type: Sprite
+      sprite: Clothing/Neck/Misc/headphones.rsi
+      layers:
+        - state: icon
+          map: ["enum.ToggleVisuals.Layer"]
+    - type: Clothing
+      equippedPrefix: off
+      sprite: Clothing/Neck/Misc/headphones.rsi
+    - type: ToggleableLightVisuals
+      spriteLayer: enum.ToggleVisuals.Layer
+      clothingVisuals:
+        neck:
+          - state: on-equipped-NECK
+    - type: Appearance
+    - type: GenericVisualizer
+      visuals:
+        enum.ToggleVisuals.Toggled:
+          enum.ToggleVisuals.Layer:
+            True: { state: icon-on }
+            False: { state: icon }
+    - type: ItemToggle
+      predictable: false
+      soundActivate:
+        path: /Audio/Items/flashlight_on.ogg
+      soundDeactivate:
+        path: /Audio/Items/flashlight_off.ogg
 
 - type: entity
   parent: ClothingNeckBase
@@ -37,11 +37,11 @@
   name: stethoscope
   description: An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing.
   components:
-  - type: Sprite
-    sprite: Clothing/Neck/Misc/stethoscope.rsi
-  - type: Clothing
-    sprite: Clothing/Neck/Misc/stethoscope.rsi
-  - type: Stethoscope
+    - type: Sprite
+      sprite: Clothing/Neck/Misc/stethoscope.rsi
+    - type: Clothing
+      sprite: Clothing/Neck/Misc/stethoscope.rsi
+    - type: Stethoscope
 
 - type: entity
   parent: ClothingNeckBase
@@ -49,12 +49,12 @@
   name: bling
   description: Damn, it feels good to be a gangster.
   components:
-  - type: Sprite
-    sprite: Clothing/Neck/Misc/bling.rsi
-  - type: Clothing
-    sprite: Clothing/Neck/Misc/bling.rsi
-  - type: Item
-    sprite: Clothing/Neck/Misc/bling.rsi
+    - type: Sprite
+      sprite: Clothing/Neck/Misc/bling.rsi
+    - type: Clothing
+      sprite: Clothing/Neck/Misc/bling.rsi
+    - type: Item
+      sprite: Clothing/Neck/Misc/bling.rsi
 
 - type: entity
   parent: ClothingNeckBase
@@ -62,24 +62,24 @@
   name: lawyer badge
   description: A badge to show that the owner is a 'legitimate' lawyer who passed the NT bar exam required to practice law.
   components:
-  - type: Sprite
-    sprite: Clothing/Neck/Misc/lawyerbadge.rsi
-  - type: Clothing
-    sprite: Clothing/Neck/Misc/lawyerbadge.rsi
-  - type: TypingIndicatorClothing
-    proto: lawyer
+    - type: Sprite
+      sprite: Clothing/Neck/Misc/lawyerbadge.rsi
+    - type: Clothing
+      sprite: Clothing/Neck/Misc/lawyerbadge.rsi
+    - type: TypingIndicatorClothing
+      proto: lawyer
 
 - type: entity
   id: ActionStethoscope
   name: Listen with stethoscope
   components:
-  - type: EntityTargetAction
-    icon:
-      sprite: Clothing/Neck/Misc/stethoscope.rsi
-      state: icon
-    event: !type:StethoscopeActionEvent
-    checkCanInteract: false
-    priority: -1
+    - type: EntityTargetAction
+      icon:
+        sprite: Clothing/Neck/Misc/stethoscope.rsi
+        state: icon
+      event: !type:StethoscopeActionEvent
+      checkCanInteract: false
+      priority: -1
 
 - type: entity
   parent: ClothingNeckBase
@@ -87,12 +87,14 @@
   name: star sticker
   description: A dinky lil star for only the hardest working security officers! It's not even sticky anymore.
   components:
-  - type: Sprite
-    sprite: Clothing/Neck/Misc/dinkystar.rsi
-    state: icon
-  - type: Item
-    size: Tiny
-  - type: Tag
-    tags:
-    - Trash
-    - WhitelistChameleon
+    - type: Sprite
+      sprite: Clothing/Neck/Misc/dinkystar.rsi
+      state: icon
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+    - type: Tag
+      tags:
+        - Trash
+        - WhitelistChameleon

+ 72 - 70
Resources/Prototypes/Entities/Clothing/Neck/pins.yml

@@ -5,12 +5,14 @@
   name: pin
   description: Be nothing do crime.
   components:
-  - type: Item
-    size: Tiny
-  - type: Sprite
-    sprite: Clothing/Neck/Misc/pins.rsi
-  - type: Clothing
-    sprite: Clothing/Neck/Misc/pins.rsi
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+    - type: Sprite
+      sprite: Clothing/Neck/Misc/pins.rsi
+    - type: Clothing
+      sprite: Clothing/Neck/Misc/pins.rsi
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -18,10 +20,10 @@
   name: LGBT pin
   description: Be gay do crime.
   components:
-  - type: Sprite
-    state: lgbt
-  - type: Clothing
-    equippedPrefix: lgbt
+    - type: Sprite
+      state: lgbt
+    - type: Clothing
+      equippedPrefix: lgbt
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -29,10 +31,10 @@
   name: straight ally pin
   description: Be ally do crime.
   components:
-  - type: Sprite
-    state: ally
-  - type: Clothing
-    equippedPrefix: ally
+    - type: Sprite
+      state: ally
+    - type: Clothing
+      equippedPrefix: ally
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -40,10 +42,10 @@
   name: aromantic pin
   description: Be aro do crime.
   components:
-  - type: Sprite
-    state: aro
-  - type: Clothing
-    equippedPrefix: aro
+    - type: Sprite
+      state: aro
+    - type: Clothing
+      equippedPrefix: aro
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -51,10 +53,10 @@
   name: aroace pin
   description: Be aroace do crime.
   components:
-  - type: Sprite
-    state: aroace
-  - type: Clothing
-    equippedPrefix: aroace
+    - type: Sprite
+      state: aroace
+    - type: Clothing
+      equippedPrefix: aroace
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -62,10 +64,10 @@
   name: asexual pin
   description: Be ace do crime.
   components:
-  - type: Sprite
-    state: asex
-  - type: Clothing
-    equippedPrefix: asex
+    - type: Sprite
+      state: asex
+    - type: Clothing
+      equippedPrefix: asex
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -73,10 +75,10 @@
   name: bisexual pin
   description: Be bi do crime.
   components:
-  - type: Sprite
-    state: bi
-  - type: Clothing
-    equippedPrefix: bi
+    - type: Sprite
+      state: bi
+    - type: Clothing
+      equippedPrefix: bi
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -84,10 +86,10 @@
   name: gay pin
   description: Be gay~ do crime.
   components:
-  - type: Sprite
-    state: gay
-  - type: Clothing
-    equippedPrefix: gay
+    - type: Sprite
+      state: gay
+    - type: Clothing
+      equippedPrefix: gay
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -95,10 +97,10 @@
   name: intersex pin
   description: Be intersex do crime.
   components:
-  - type: Sprite
-    state: inter
-  - type: Clothing
-    equippedPrefix: inter
+    - type: Sprite
+      state: inter
+    - type: Clothing
+      equippedPrefix: inter
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -106,10 +108,10 @@
   name: lesbian pin
   description: Be lesbian do crime.
   components:
-  - type: Sprite
-    state: les
-  - type: Clothing
-    equippedPrefix: les
+    - type: Sprite
+      state: les
+    - type: Clothing
+      equippedPrefix: les
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -117,10 +119,10 @@
   name: non-binary pin
   description: "01100010 01100101 00100000 01100101 01101110 01100010 01111001 00100000 01100100 01101111 00100000 01100011 01110010 01101001 01101101 01100101"
   components:
-  - type: Sprite
-    state: non
-  - type: Clothing
-    equippedPrefix: non
+    - type: Sprite
+      state: non
+    - type: Clothing
+      equippedPrefix: non
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -128,10 +130,10 @@
   name: pansexual pin
   description: Be pan do crime.
   components:
-  - type: Sprite
-    state: pan
-  - type: Clothing
-    equippedPrefix: pan
+    - type: Sprite
+      state: pan
+    - type: Clothing
+      equippedPrefix: pan
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -139,10 +141,10 @@
   name: omnisexual pin
   description: Be omni do crime.
   components:
-  - type: Sprite
-    state: omni
-  - type: Clothing
-    equippedPrefix: omni
+    - type: Sprite
+      state: omni
+    - type: Clothing
+      equippedPrefix: omni
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -150,10 +152,10 @@
   name: genderqueer pin
   description: be crime, do gender
   components:
-  - type: Sprite
-    state: gender
-  - type: Clothing
-    equippedPrefix: gender
+    - type: Sprite
+      state: gender
+    - type: Clothing
+      equippedPrefix: gender
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -161,10 +163,10 @@
   name: transgender pin
   description: Be trans do crime.
   components:
-  - type: Sprite
-    state: trans
-  - type: Clothing
-    equippedPrefix: trans
+    - type: Sprite
+      state: trans
+    - type: Clothing
+      equippedPrefix: trans
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -172,10 +174,10 @@
   name: autism pin
   description: Be autism do crime.
   components:
-  - type: Sprite
-    state: autism
-  - type: Clothing
-    equippedPrefix: autism
+    - type: Sprite
+      state: autism
+    - type: Clothing
+      equippedPrefix: autism
 
 - type: entity
   parent: ClothingNeckPinBase
@@ -183,7 +185,7 @@
   name: golden autism pin
   description: Be autism do warcrime.
   components:
-  - type: Sprite
-    state: goldautism
-  - type: Clothing
-    equippedPrefix: goldautism
+    - type: Sprite
+      state: goldautism
+    - type: Clothing
+      equippedPrefix: goldautism

+ 138 - 130
Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml

@@ -3,66 +3,68 @@
   parent: Clothing
   id: ClothingOuterBase
   components:
-  - type: Clothing
-    slots:
-    - outerClothing
-  - type: Sprite
-    state: icon
+    - type: Clothing
+      slots:
+        - outerClothing
+    - type: Sprite
+      state: icon
 
 - type: entity
   abstract: true
   parent: ClothingOuterBase
   id: ClothingOuterBaseLarge
   components:
-  - type: Item
-    size: Huge
-  - type: Clothing
-    slots:
-    - outerClothing
-  - type: ClothingSpeedModifier
-    walkModifier: 0.9
-    sprintModifier: 0.9
-  - type: HeldSpeedModifier
+    - type: STWeight
+      self: 8
+    - type: Item
+      size: Huge
+    - type: Clothing
+      slots:
+        - outerClothing
+    - type: ClothingSpeedModifier
+      walkModifier: 0.9
+      sprintModifier: 0.9
+    - type: HeldSpeedModifier
 
 - type: entity
   abstract: true
   parent: ClothingOuterBase
   id: ClothingOuterStorageBase
   components:
-  - type: Storage
-    grid:
-    - 0,0,2,1
-  - type: ContainerContainer
-    containers:
-      storagebase: !type:Container
-        ents: []
-  - type: UserInterface
-    interfaces:
-      enum.StorageUiKey.Key:
-        type: StorageBoundUserInterface
-  - type: StaticPrice
-    price: 70
+    - type: Storage
+      grid:
+        - 0,0,2,1
+    - type: ContainerContainer
+      containers:
+        storagebase: !type:Container
+          ents: []
+    - type: UserInterface
+      interfaces:
+        enum.StorageUiKey.Key:
+          type: StorageBoundUserInterface
+    - type: StaticPrice
+      price: 70
 
 - type: entity
   abstract: true
   parent: [ClothingOuterStorageBase, BaseFoldable]
   id: ClothingOuterStorageFoldableBase
   components:
-  - type: Appearance
-  - type: Foldable
-    canFoldInsideContainer: true
-    unfoldVerbText: fold-zip-verb
-    foldVerbText: fold-unzip-verb
-  - type: FoldableClothing
-    foldedEquippedPrefix: open
-    foldedHeldPrefix: open
-  - type: Sprite
-    layers:
-    - state: icon
-      map: [ "unfoldedLayer" ]
-    - state: icon-open
-      map: ["foldedLayer"]
-      visible: false
+    - type: Appearance
+    - type: Foldable
+      canFoldInsideContainer: true
+      unfoldVerbText: fold-zip-verb
+      foldVerbText: fold-unzip-verb
+    - type: FoldableClothing
+      foldedEquippedPrefix: open
+      foldedHeldPrefix: open
+    - type: Sprite
+      layers:
+        - state: icon
+          map: ["unfoldedLayer"]
+        - state: icon-open
+          map: ["foldedLayer"]
+          visible: false
 
 - type: entity
   abstract: true
@@ -70,34 +72,34 @@
   id: ClothingOuterStorageFoldableBaseOpened
   suffix: opened
   components:
-  - type: Foldable
-    folded: true
-  - type: Clothing
-    equippedPrefix: open
-  - type: Item
-    heldPrefix: open
-  - type: Sprite
-    layers:
-    - state: icon
-      map: [ "unfoldedLayer" ]
-      visible: false
-    - state: icon-open
-      map: ["foldedLayer"]
-      visible: true
+    - type: Foldable
+      folded: true
+    - type: Clothing
+      equippedPrefix: open
+    - type: Item
+      heldPrefix: open
+    - type: Sprite
+      layers:
+        - state: icon
+          map: ["unfoldedLayer"]
+          visible: false
+        - state: icon-open
+          map: ["foldedLayer"]
+          visible: true
 
 - type: entity
   abstract: true
   parent: ClothingOuterStorageBase
   id: ClothingOuterStorageToggleableBase
   components:
-  - type: ToggleableClothing
-    clothingPrototype: ClothingHeadHatHoodWinterDefault
-    slot: head
-  - type: ContainerContainer
-    containers:
-      toggleable-clothing: !type:ContainerSlot {}
-      storagebase: !type:Container
-        ents: []
+    - type: ToggleableClothing
+      clothingPrototype: ClothingHeadHatHoodWinterDefault
+      slot: head
+    - type: ContainerContainer
+      containers:
+        toggleable-clothing: !type:ContainerSlot {}
+        storagebase: !type:Container
+          ents: []
 
 - type: entity
   abstract: true
@@ -105,43 +107,45 @@
   id: ClothingOuterHardsuitBase
   name: base hardsuit
   components:
-  - type: PressureProtection
-    highPressureMultiplier: 0.3
-    lowPressureMultiplier: 1000
-  - type: TemperatureProtection
-    heatingCoefficient: 0.01
-    coolingCoefficient: 0.01
-  - type: ClothingSpeedModifier
-    walkModifier: 0.4
-    sprintModifier: 0.6
-  - type: HeldSpeedModifier
-  - type: Item
-    size: Ginormous
-  - type: Armor
-    modifiers:
-      coefficients:
-        Blunt: 0.90
-        Slash: 0.90
-        Piercing: 0.95
-        Heat: 0.90
-        Radiation: 0.25
-  - type: ToggleableClothing
-    slot: head
-  - type: ContainerContainer
-    containers:
-      toggleable-clothing: !type:ContainerSlot {}
-  - type: GroupExamine
-  - type: Tag
-    tags:
-    - Hardsuit
-    - WhitelistChameleon
-  - type: ProtectedFromStepTriggers
-    slots: WITHOUT_POCKET
-  - type: DamageOnInteractProtection
-    damageProtection:
-      flatReductions:
-        Heat: 10 # the average lightbulb only does around four damage!
-    slots: OUTERCLOTHING
+    - type: PressureProtection
+      highPressureMultiplier: 0.3
+      lowPressureMultiplier: 1000
+    - type: TemperatureProtection
+      heatingCoefficient: 0.01
+      coolingCoefficient: 0.01
+    - type: ClothingSpeedModifier
+      walkModifier: 0.4
+      sprintModifier: 0.6
+    - type: HeldSpeedModifier
+    - type: STWeight
+      self: 10
+    - type: Item
+      size: Ginormous
+    - type: Armor
+      modifiers:
+        coefficients:
+          Blunt: 0.90
+          Slash: 0.90
+          Piercing: 0.95
+          Heat: 0.90
+          Radiation: 0.25
+    - type: ToggleableClothing
+      slot: head
+    - type: ContainerContainer
+      containers:
+        toggleable-clothing: !type:ContainerSlot {}
+    - type: GroupExamine
+    - type: Tag
+      tags:
+        - Hardsuit
+        - WhitelistChameleon
+    - type: ProtectedFromStepTriggers
+      slots: WITHOUT_POCKET
+    - type: DamageOnInteractProtection
+      damageProtection:
+        flatReductions:
+          Heat: 10 # the average lightbulb only does around four damage!
+      slots: OUTERCLOTHING
 
 - type: entity
   abstract: true
@@ -149,25 +153,27 @@
   id: ClothingOuterEVASuitBase
   name: base EVA Suit
   components:
-  - type: PressureProtection
-    highPressureMultiplier: 0.6
-    lowPressureMultiplier: 1000
-  - type: TemperatureProtection
-    heatingCoefficient: 0.01 # Not complete protection from fire
-    coolingCoefficient: 0.01
-  - type: ClothingSpeedModifier
-    walkModifier: 0.8
-    sprintModifier: 0.8
-  - type: HeldSpeedModifier
-  - type: Item
-    size: Huge
-  - type: ProtectedFromStepTriggers
-    slots: WITHOUT_POCKET
-  - type: DamageOnInteractProtection
-    damageProtection:
-      flatReductions:
-        Heat: 10 # the average lightbulb only does around four damage!
-    slots: OUTERCLOTHING
+    - type: PressureProtection
+      highPressureMultiplier: 0.6
+      lowPressureMultiplier: 1000
+    - type: TemperatureProtection
+      heatingCoefficient: 0.01 # Not complete protection from fire
+      coolingCoefficient: 0.01
+    - type: ClothingSpeedModifier
+      walkModifier: 0.8
+      sprintModifier: 0.8
+    - type: HeldSpeedModifier
+    - type: STWeight
+      self: 8
+    - type: Item
+      size: Huge
+    - type: ProtectedFromStepTriggers
+      slots: WITHOUT_POCKET
+    - type: DamageOnInteractProtection
+      damageProtection:
+        flatReductions:
+          Heat: 10 # the average lightbulb only does around four damage!
+      slots: OUTERCLOTHING
 
 - type: entity
   parent: ClothingOuterBase
@@ -175,19 +181,21 @@
   name: hoodie with hood
   abstract: True
   components:
-  - type: ToggleableClothing
-    clothingPrototype: ClothingHeadHatHoodWinterDefault
-    slot: head
-  - type: ContainerContainer
-    containers:
-      toggleable-clothing: !type:ContainerSlot {}
-      storagebase: !type:Container
-        ents: []
+    - type: ToggleableClothing
+      clothingPrototype: ClothingHeadHatHoodWinterDefault
+      slot: head
+    - type: ContainerContainer
+      containers:
+        toggleable-clothing: !type:ContainerSlot {}
+        storagebase: !type:Container
+          ents: []
 
 - type: entity
   abstract: true
   parent: ClothingOuterBase
   id: ClothingOuterBaseMedium
   components:
-  - type: Item
-    size: Huge
+    - type: STWeight
+      self: 8
+    - type: Item
+      size: Huge

Diferenças do arquivo suprimidas por serem muito extensas
+ 464 - 458
Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml


+ 216 - 212
Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml

@@ -4,41 +4,41 @@
   name: bomb suit
   description: A heavy suit designed to withstand the pressure generated by a bomb and any fragments the bomb may produce.
   components:
-  - type: Sprite
-    sprite: Clothing/OuterClothing/Suits/bombsuit.rsi
-  - type: Clothing
-    sprite: Clothing/OuterClothing/Suits/bombsuit.rsi
-  - type: ClothingSpeedModifier
-    walkModifier: 0.8
-    sprintModifier: 0.8
-  - type: Armor
-    modifiers:
-      coefficients:
-        Blunt: 0.9
-        Slash: 0.9
-        Piercing: 0.9
-        Heat: 0.75
-  - type: ExplosionResistance
-    damageCoefficient: 0.15
-  - type: GroupExamine
-  - type: Tag
-    tags:
-    - Hardsuit
-    - WhitelistChameleon
-  - type: ProtectedFromStepTriggers
-    slots: WITHOUT_POCKET
+    - type: Sprite
+      sprite: Clothing/OuterClothing/Suits/bombsuit.rsi
+    - type: Clothing
+      sprite: Clothing/OuterClothing/Suits/bombsuit.rsi
+    - type: ClothingSpeedModifier
+      walkModifier: 0.8
+      sprintModifier: 0.8
+    - type: Armor
+      modifiers:
+        coefficients:
+          Blunt: 0.9
+          Slash: 0.9
+          Piercing: 0.9
+          Heat: 0.75
+    - type: ExplosionResistance
+      damageCoefficient: 0.15
+    - type: GroupExamine
+    - type: Tag
+      tags:
+        - Hardsuit
+        - WhitelistChameleon
+    - type: ProtectedFromStepTriggers
+      slots: WITHOUT_POCKET
 
 - type: entity
   parent: ClothingOuterSuitBomb
   id: ClothingOuterSuitJanitorBomb
   name: janitorial bomb suit
   description: A heavy helmet designed to withstand explosions formed from reactions between chemicals.
-  categories: [ DoNotMap ]
+  categories: [DoNotMap]
   components:
-  - type: Sprite
-    sprite: Clothing/OuterClothing/Suits/janitor_bombsuit.rsi
-  - type: Clothing
-    sprite: Clothing/OuterClothing/Suits/janitor_bombsuit.rsi
+    - type: Sprite
+      sprite: Clothing/OuterClothing/Suits/janitor_bombsuit.rsi
+    - type: Clothing
+      sprite: Clothing/OuterClothing/Suits/janitor_bombsuit.rsi
 
 - type: entity
   parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing]
@@ -46,30 +46,30 @@
   name: fire suit
   description: A suit that helps protect against hazardous temperatures.
   components:
-  - type: Sprite
-    sprite: Clothing/OuterClothing/Suits/fire.rsi
-  - type: Clothing
-    sprite: Clothing/OuterClothing/Suits/fire.rsi
-  - type: PressureProtection
-    highPressureMultiplier: 0.04
-  - type: TemperatureProtection
-    heatingCoefficient: 0.005
-    coolingCoefficient: 0.05
-  - type: FireProtection
-    reduction: 0.65 # doesnt have a full seal so not as good
-  - type: Armor
-    modifiers:
-      coefficients:
-        Slash: 0.9
-        Heat: 0.8
-        Cold: 0.8
-  - type: ClothingSpeedModifier
-    walkModifier: 0.8
-    sprintModifier: 0.7
-  - type: HeldSpeedModifier
-  - type: GroupExamine
-  - type: ProtectedFromStepTriggers
-    slots: WITHOUT_POCKET
+    - type: Sprite
+      sprite: Clothing/OuterClothing/Suits/fire.rsi
+    - type: Clothing
+      sprite: Clothing/OuterClothing/Suits/fire.rsi
+    - type: PressureProtection
+      highPressureMultiplier: 0.04
+    - type: TemperatureProtection
+      heatingCoefficient: 0.005
+      coolingCoefficient: 0.05
+    - type: FireProtection
+      reduction: 0.65 # doesnt have a full seal so not as good
+    - type: Armor
+      modifiers:
+        coefficients:
+          Slash: 0.9
+          Heat: 0.8
+          Cold: 0.8
+    - type: ClothingSpeedModifier
+      walkModifier: 0.8
+      sprintModifier: 0.7
+    - type: HeldSpeedModifier
+    - type: GroupExamine
+    - type: ProtectedFromStepTriggers
+      slots: WITHOUT_POCKET
 
 - type: entity
   parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing]
@@ -77,31 +77,31 @@
   name: atmos fire suit
   description: An expensive firesuit that protects against even the most deadly of station fires. Designed to protect even if the wearer is set aflame.
   components:
-  - type: Sprite
-    sprite: Clothing/OuterClothing/Suits/atmos_firesuit.rsi
-  - type: Clothing
-    sprite: Clothing/OuterClothing/Suits/atmos_firesuit.rsi
-  - type: PressureProtection
-    highPressureMultiplier: 0.02
-    lowPressureMultiplier: 1000
-  - type: TemperatureProtection
-    heatingCoefficient: 0.001
-    coolingCoefficient: 0.05
-  - type: FireProtection
-    reduction: 0.8 # atmos firesuit offers best protection, hardsuits are a little vulnerable
-  - type: Armor
-    modifiers:
-      coefficients:
-        Slash: 0.9
-        Heat: 0.8
-        Cold: 0.8
-  - type: ClothingSpeedModifier
-    walkModifier: 0.8
-    sprintModifier: 0.8
-  - type: HeldSpeedModifier
-  - type: GroupExamine
-  - type: ProtectedFromStepTriggers
-    slots: WITHOUT_POCKET
+    - type: Sprite
+      sprite: Clothing/OuterClothing/Suits/atmos_firesuit.rsi
+    - type: Clothing
+      sprite: Clothing/OuterClothing/Suits/atmos_firesuit.rsi
+    - type: PressureProtection
+      highPressureMultiplier: 0.02
+      lowPressureMultiplier: 1000
+    - type: TemperatureProtection
+      heatingCoefficient: 0.001
+      coolingCoefficient: 0.05
+    - type: FireProtection
+      reduction: 0.8 # atmos firesuit offers best protection, hardsuits are a little vulnerable
+    - type: Armor
+      modifiers:
+        coefficients:
+          Slash: 0.9
+          Heat: 0.8
+          Cold: 0.8
+    - type: ClothingSpeedModifier
+      walkModifier: 0.8
+      sprintModifier: 0.8
+    - type: HeldSpeedModifier
+    - type: GroupExamine
+    - type: ProtectedFromStepTriggers
+      slots: WITHOUT_POCKET
 
 - type: entity
   parent: [ClothingOuterBaseLarge, GeigerCounterClothing, AllowSuitStorageClothing]
@@ -109,24 +109,24 @@
   name: radiation suit
   description: "A suit that protects against radiation. The label reads, 'Made with lead. Please do not consume insulation.'"
   components:
-  - type: Sprite
-    sprite: Clothing/OuterClothing/Suits/rad.rsi
-  - type: Armor
-    modifiers:
-      coefficients:
-        Heat: 0.90
-        Radiation: 0.01
-  - type: Clothing
-    sprite: Clothing/OuterClothing/Suits/rad.rsi
-  - type: GroupExamine
-  - type: ToggleableClothing
-    clothingPrototype: ClothingHeadHatHoodRad
-    slot: head
-  - type: ContainerContainer
-    containers:
-      toggleable-clothing: !type:ContainerSlot {}
-  - type: ProtectedFromStepTriggers
-    slots: WITHOUT_POCKET
+    - type: Sprite
+      sprite: Clothing/OuterClothing/Suits/rad.rsi
+    - type: Armor
+      modifiers:
+        coefficients:
+          Heat: 0.90
+          Radiation: 0.01
+    - type: Clothing
+      sprite: Clothing/OuterClothing/Suits/rad.rsi
+    - type: GroupExamine
+    - type: ToggleableClothing
+      clothingPrototype: ClothingHeadHatHoodRad
+      slot: head
+    - type: ContainerContainer
+      containers:
+        toggleable-clothing: !type:ContainerSlot {}
+    - type: ProtectedFromStepTriggers
+      slots: WITHOUT_POCKET
 
 - type: entity
   parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing, BaseToggleClothing, BaseMajorContraband]
@@ -134,63 +134,63 @@
   name: space ninja suit
   description: This black technologically advanced, cybernetically-enhanced suit provides many abilities like invisibility or teleportation.
   components:
-  - type: Sprite
-    sprite: Clothing/OuterClothing/Suits/spaceninja.rsi
-  - type: Clothing
-    sprite: Clothing/OuterClothing/Suits/spaceninja.rsi
-  # hardsuit stuff
-  - type: PressureProtection
-    highPressureMultiplier: 0.6
-    lowPressureMultiplier: 1000
-  - type: TemperatureProtection
-    heatingCoefficient: 0.01
-    coolingCoefficient: 0.01
-  - type: Armor
-    modifiers:
-      coefficients:
-        Blunt: 0.8
-        Slash: 0.8
-        Piercing: 0.8
-        Heat: 0.8
-  # phase cloak
-  - type: ToggleClothing
-    action: ActionTogglePhaseCloak
-    disableOnUnequip: true
-  - type: ComponentToggler
-    parent: true
-    components:
-    - type: Stealth
-      minVisibility: 0.1
-      lastVisibility: 0.1
-  - type: PowerCellDraw
-    drawRate: 1.8 # 200 seconds on the default cell
-  - type: ToggleCellDraw
-  # throwing star ability
-  - type: ItemCreator
-    action: ActionCreateThrowingStar
-    charge: 14.4
-    spawnedPrototype: ThrowingStarNinja
-    noPowerPopup: ninja-no-power
-  # core ninja suit stuff
-  - type: NinjaSuit
-  - type: UseDelay
-    delay: 5 # disable time
-  - type: PowerCellSlot
-    cellSlotId: cell_slot
-    # throwing in a recharger would bypass glove charging mechanic
-    fitsInCharger: false
-  - type: ContainerContainer
-    containers:
-      cell_slot: !type:ContainerSlot
-  - type: ItemSlots
-    slots:
-      cell_slot:
-        name: power-cell-slot-component-slot-name-default
-        startingItem: PowerCellSmall
-        disableEject: true
-        whitelist:
-          tags:
-            - PowerCell
+    - type: Sprite
+      sprite: Clothing/OuterClothing/Suits/spaceninja.rsi
+    - type: Clothing
+      sprite: Clothing/OuterClothing/Suits/spaceninja.rsi
+    # hardsuit stuff
+    - type: PressureProtection
+      highPressureMultiplier: 0.6
+      lowPressureMultiplier: 1000
+    - type: TemperatureProtection
+      heatingCoefficient: 0.01
+      coolingCoefficient: 0.01
+    - type: Armor
+      modifiers:
+        coefficients:
+          Blunt: 0.8
+          Slash: 0.8
+          Piercing: 0.8
+          Heat: 0.8
+    # phase cloak
+    - type: ToggleClothing
+      action: ActionTogglePhaseCloak
+      disableOnUnequip: true
+    - type: ComponentToggler
+      parent: true
+      components:
+        - type: Stealth
+          minVisibility: 0.1
+          lastVisibility: 0.1
+    - type: PowerCellDraw
+      drawRate: 1.8 # 200 seconds on the default cell
+    - type: ToggleCellDraw
+    # throwing star ability
+    - type: ItemCreator
+      action: ActionCreateThrowingStar
+      charge: 14.4
+      spawnedPrototype: ThrowingStarNinja
+      noPowerPopup: ninja-no-power
+    # core ninja suit stuff
+    - type: NinjaSuit
+    - type: UseDelay
+      delay: 5 # disable time
+    - type: PowerCellSlot
+      cellSlotId: cell_slot
+      # throwing in a recharger would bypass glove charging mechanic
+      fitsInCharger: false
+    - type: ContainerContainer
+      containers:
+        cell_slot: !type:ContainerSlot
+    - type: ItemSlots
+      slots:
+        cell_slot:
+          name: power-cell-slot-component-slot-name-default
+          startingItem: PowerCellSmall
+          disableEject: true
+          whitelist:
+            tags:
+              - PowerCell
 
 - type: entity
   parent: ClothingOuterBase
@@ -198,12 +198,12 @@
   name: chicken suit
   description: Bok bok bok!
   components:
-  - type: Sprite
-    sprite: Clothing/OuterClothing/Suits/chicken.rsi
-  - type: Clothing
-    sprite: Clothing/OuterClothing/Suits/chicken.rsi
-  - type: ProtectedFromStepTriggers
-    slots: WITHOUT_POCKET
+    - type: Sprite
+      sprite: Clothing/OuterClothing/Suits/chicken.rsi
+    - type: Clothing
+      sprite: Clothing/OuterClothing/Suits/chicken.rsi
+    - type: ProtectedFromStepTriggers
+      slots: WITHOUT_POCKET
 
 - type: entity
   parent: ClothingOuterBase
@@ -211,10 +211,10 @@
   name: shrine maiden outfit
   description: Makes you want to go deal with some troublesome youkai.
   components:
-  - type: Sprite
-    sprite: Clothing/OuterClothing/Suits/shrine-maiden.rsi
-  - type: Clothing
-    sprite: Clothing/OuterClothing/Suits/shrine-maiden.rsi
+    - type: Sprite
+      sprite: Clothing/OuterClothing/Suits/shrine-maiden.rsi
+    - type: Clothing
+      sprite: Clothing/OuterClothing/Suits/shrine-maiden.rsi
 
 - type: entity
   parent: ClothingOuterBase
@@ -222,10 +222,10 @@
   name: witch robes
   description: Magic is all about the spell power, ZE!
   components:
-  - type: Sprite
-    sprite: Clothing/OuterClothing/Suits/witchrobe.rsi
-  - type: Clothing
-    sprite: Clothing/OuterClothing/Suits/witchrobe.rsi
+    - type: Sprite
+      sprite: Clothing/OuterClothing/Suits/witchrobe.rsi
+    - type: Clothing
+      sprite: Clothing/OuterClothing/Suits/witchrobe.rsi
 
 - type: entity
   parent: ClothingOuterBase
@@ -233,15 +233,15 @@
   name: monkey suit
   description: A suit that looks like a primate.
   components:
-  - type: Sprite
-    sprite: Clothing/OuterClothing/Suits/monkey.rsi
-  - type: Clothing
-    sprite: Clothing/OuterClothing/Suits/monkey.rsi
-  - type: ContainerContainer
-    containers:
-      toggleable-clothing: !type:ContainerSlot {}
-  - type: ProtectedFromStepTriggers
-    slots: WITHOUT_POCKET
+    - type: Sprite
+      sprite: Clothing/OuterClothing/Suits/monkey.rsi
+    - type: Clothing
+      sprite: Clothing/OuterClothing/Suits/monkey.rsi
+    - type: ContainerContainer
+      containers:
+        toggleable-clothing: !type:ContainerSlot {}
+    - type: ProtectedFromStepTriggers
+      slots: WITHOUT_POCKET
 
 - type: entity
   parent: ClothingOuterBase
@@ -249,22 +249,24 @@
   name: ian suit
   description: Who's a good boy?
   components:
-  - type: Sprite
-    sprite: Clothing/OuterClothing/Suits/iansuit.rsi
-  - type: Item
-    size: Normal
-  - type: Clothing
-    sprite: Clothing/OuterClothing/Suits/iansuit.rsi
-  - type: ToggleableClothing
-    clothingPrototype: ClothingHeadHatHoodIan
-  - type: ContainerContainer
-    containers:
-      toggleable-clothing: !type:ContainerSlot {}
-  - type: Construction
-    graph: ClothingOuterSuitIan
-    node: suit
-  - type: ProtectedFromStepTriggers
-    slots: WITHOUT_POCKET
+    - type: Sprite
+      sprite: Clothing/OuterClothing/Suits/iansuit.rsi
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: Clothing
+      sprite: Clothing/OuterClothing/Suits/iansuit.rsi
+    - type: ToggleableClothing
+      clothingPrototype: ClothingHeadHatHoodIan
+    - type: ContainerContainer
+      containers:
+        toggleable-clothing: !type:ContainerSlot {}
+    - type: Construction
+      graph: ClothingOuterSuitIan
+      node: suit
+    - type: ProtectedFromStepTriggers
+      slots: WITHOUT_POCKET
 
 - type: entity
   parent: ClothingOuterBase
@@ -272,30 +274,32 @@
   name: carp suit
   description: A special suit that makes you look just like a space carp, if your eyesight is bad.
   components:
-  - type: AllowSuitStorage
-  - type: Sprite
-    sprite: Clothing/OuterClothing/Suits/carpsuit.rsi
-  - type: Item
-    size: Normal
-  - type: Clothing
-    sprite: Clothing/OuterClothing/Suits/carpsuit.rsi
-  - type: ToggleableClothing
-    clothingPrototype: ClothingHeadHatHoodCarp
-  - type: ContainerContainer
-    containers:
-      toggleable-clothing: !type:ContainerSlot {}
+    - type: AllowSuitStorage
+    - type: Sprite
+      sprite: Clothing/OuterClothing/Suits/carpsuit.rsi
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: Clothing
+      sprite: Clothing/OuterClothing/Suits/carpsuit.rsi
+    - type: ToggleableClothing
+      clothingPrototype: ClothingHeadHatHoodCarp
+    - type: ContainerContainer
+      containers:
+        toggleable-clothing: !type:ContainerSlot {}
 
 - type: entity
   parent: ClothingOuterSuitCarp
   id: ClothingOuterHardsuitCarp
   suffix: Hardsuit, DO NOT MAP
-  categories: [ DoNotMap ]
+  categories: [DoNotMap]
   components:
-  - type: PressureProtection
-    highPressureMultiplier: 0.6
-    lowPressureMultiplier: 1000
-  - type: TemperatureProtection
-    heatingCoefficient: 0.01
-    coolingCoefficient: 0.01
-  - type: ToggleableClothing
-    clothingPrototype: ClothingHeadHelmetHardsuitCarp
+    - type: PressureProtection
+      highPressureMultiplier: 0.6
+      lowPressureMultiplier: 1000
+    - type: TemperatureProtection
+      heatingCoefficient: 0.01
+      coolingCoefficient: 0.01
+    - type: ToggleableClothing
+      clothingPrototype: ClothingHeadHelmetHardsuitCarp

Diferenças do arquivo suprimidas por serem muito extensas
+ 538 - 539
Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml


+ 44 - 42
Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml

@@ -3,38 +3,40 @@
   parent: Clothing
   id: ClothingShoesBase
   components:
-  - type: Clothing
-    slots:
-    - FEET
-  - type: Sprite
-    state: icon
-  - type: Item
-    size: Normal
-  - type: Food
-    requiresSpecialDigestion: true
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-        reagents:
-        - ReagentId: Fiber
-          Quantity: 10
-  - type: Tag
-    tags:
-    - ClothMade
-    - WhitelistChameleon
-  - type: ProtectedFromStepTriggers
+    - type: Clothing
+      slots:
+        - FEET
+    - type: Sprite
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: Food
+      requiresSpecialDigestion: true
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+          reagents:
+            - ReagentId: Fiber
+              Quantity: 10
+    - type: Tag
+      tags:
+        - ClothMade
+        - WhitelistChameleon
+    - type: ProtectedFromStepTriggers
 
 - type: entity
   abstract: true
   parent: ClothingShoesBase
   id: ClothingShoesBaseButcherable
   components:
-  - type: Butcherable
-    butcheringType: Knife
-    spawned:
-    - id: MaterialCloth1
-      amount: 1
+    - type: Butcherable
+      butcheringType: Knife
+      spawned:
+        - id: MaterialCloth1
+          amount: 1
 
 # stuff common to all military boots
 - type: entity
@@ -42,25 +44,25 @@
   parent: [ClothingShoesBase, ClothingSlotBase]
   id: ClothingShoesMilitaryBase
   components:
-  - type: Matchbox
-  - type: ItemSlots
-    slots:
-      item:
-        name: clothing-boots-sidearm
-        whitelist:
-          tags:
-          - Knife
-          - Sidearm
+    - type: Matchbox
+    - type: ItemSlots
+      slots:
+        item:
+          name: clothing-boots-sidearm
+          whitelist:
+            tags:
+              - Knife
+              - Sidearm
 
 - type: entity
   abstract: true
   id: ClothingShoesBootsSecFilled
   suffix: Filled
   components:
-  - type: ContainerFill
-    containers:
-      item:
-      - CombatKnife
+    - type: ContainerFill
+      containers:
+        item:
+          - CombatKnife
 
 - type: entity
   abstract: true
@@ -68,6 +70,6 @@
   id: ClothingShoesBaseWinterBoots
   description: Fluffy boots to help survive even the coldest of winters.
   components:
-  - type: TemperatureProtection
-    heatingCoefficient: 1.025
-    coolingCoefficient: 0.5
+    - type: TemperatureProtection
+      heatingCoefficient: 1.025
+      coolingCoefficient: 0.5

+ 148 - 146
Resources/Prototypes/Entities/Clothing/Shoes/specific.yml

@@ -4,10 +4,10 @@
   name: chef shoes
   description: Sturdy shoes that minimize injury from falling objects or knives.
   components:
-  - type: Sprite
-    sprite: Clothing/Shoes/Specific/chef.rsi
-  - type: Clothing
-    sprite: Clothing/Shoes/Specific/chef.rsi
+    - type: Sprite
+      sprite: Clothing/Shoes/Specific/chef.rsi
+    - type: Clothing
+      sprite: Clothing/Shoes/Specific/chef.rsi
 
 # stuff common to all clown & jester shoes
 - type: entity
@@ -15,17 +15,17 @@
   parent: [ClothingShoesBaseButcherable, ClothingSlotBase]
   id: ClothingShoesClownBase
   components:
-  - type: ItemSlots
-    slots:
-      item:
-        name: clothing-boots-sidearm
-        whitelist:
-          tags:
-          - Knife
-          - ToySidearm
-        blacklist:
-          components:
-          - Sharp
+    - type: ItemSlots
+      slots:
+        item:
+          name: clothing-boots-sidearm
+          whitelist:
+            tags:
+              - Knife
+              - ToySidearm
+          blacklist:
+            components:
+              - Sharp
 
 - type: entity
   parent: ClothingShoesClownBase
@@ -33,20 +33,20 @@
   name: clown shoes
   description: "The prankster's standard-issue clowning shoes. Damn they're huge!"
   components:
-  - type: Sprite
-    sprite: Clothing/Shoes/Specific/clown.rsi
-  - type: Clothing
-    sprite: Clothing/Shoes/Specific/clown.rsi
-  - type: FootstepModifier
-    footstepSoundCollection:
-      collection: FootstepClown
-      params:
-        variation: 0.17
-  # for H.O.N.K. construction
-  - type: Tag
-    tags:
-    - ClownShoes
-    - WhitelistChameleon
+    - type: Sprite
+      sprite: Clothing/Shoes/Specific/clown.rsi
+    - type: Clothing
+      sprite: Clothing/Shoes/Specific/clown.rsi
+    - type: FootstepModifier
+      footstepSoundCollection:
+        collection: FootstepClown
+        params:
+          variation: 0.17
+    # for H.O.N.K. construction
+    - type: Tag
+      tags:
+        - ClownShoes
+        - WhitelistChameleon
 
 - type: entity
   parent: ClothingShoesClown
@@ -54,21 +54,21 @@
   name: banana clown shoes
   description: "When humor and footwear combine into new levels of absurdity."
   components:
-  - type: Sprite
-    sprite: Clothing/Shoes/Specific/clown_banana.rsi
-  - type: Clothing
-    sprite: Clothing/Shoes/Specific/clown_banana.rsi
-  - type: FootstepModifier
-    footstepSoundCollection:
-      collection: FootstepSlip
-      params:
-        variation: 0.10
-  - type: Construction
-    graph: BananaClownShoes
-    node: shoes
-  - type: Skates
-    minimumSpeed: 20
-    acceleration: 5
+    - type: Sprite
+      sprite: Clothing/Shoes/Specific/clown_banana.rsi
+    - type: Clothing
+      sprite: Clothing/Shoes/Specific/clown_banana.rsi
+    - type: FootstepModifier
+      footstepSoundCollection:
+        collection: FootstepSlip
+        params:
+          variation: 0.10
+    - type: Construction
+      graph: BananaClownShoes
+      node: shoes
+    - type: Skates
+      minimumSpeed: 20
+      acceleration: 5
 
 - type: entity
   parent: ClothingShoesClownBase
@@ -76,21 +76,21 @@
   name: bling clown shoes
   description: Made of refined bananium and shined with the pulp of a fresh banana peel. These make a flashy statement.
   components:
-  - type: Sprite
-    sprite: Clothing/Shoes/Specific/bling.rsi
-  - type: Clothing
-    sprite: Clothing/Shoes/Specific/bling.rsi
-  - type: FootstepModifier
-    footstepSoundCollection:
-      collection: FootstepClown
-      params:
-        variation: 0.17
-  - type: PointLight
-    enabled: true
-    radius: 3
-    energy: 2
-    color: "#FFD800"
-    netsync: false
+    - type: Sprite
+      sprite: Clothing/Shoes/Specific/bling.rsi
+    - type: Clothing
+      sprite: Clothing/Shoes/Specific/bling.rsi
+    - type: FootstepModifier
+      footstepSoundCollection:
+        collection: FootstepClown
+        params:
+          variation: 0.17
+    - type: PointLight
+      enabled: true
+      radius: 3
+      energy: 2
+      color: "#FFD800"
+      netsync: false
 
 - type: entity
   parent: ClothingShoesBaseButcherable
@@ -98,27 +98,27 @@
   name: cult shoes
   description: A pair of boots worn by the followers of Nar'Sie.
   components:
-  - type: Sprite
-    sprite: Clothing/Shoes/Specific/cult.rsi
-  - type: Clothing
-    sprite: Clothing/Shoes/Specific/cult.rsi
+    - type: Sprite
+      sprite: Clothing/Shoes/Specific/cult.rsi
+    - type: Clothing
+      sprite: Clothing/Shoes/Specific/cult.rsi
 
 - type: entity
-  parent: [ ClothingShoesBase, BaseJanitorContraband ]
+  parent: [ClothingShoesBase, BaseJanitorContraband]
   id: ClothingShoesGaloshes
   name: galoshes
   description: Rubber boots.
   components:
-  - type: Sprite
-    sprite: Clothing/Shoes/Specific/galoshes.rsi
-  - type: Clothing
-    sprite: Clothing/Shoes/Specific/galoshes.rsi
-  - type: NoSlip
-  - type: SlowedOverSlippery
-    slowdownModifier: 0.7
-  - type: SpeedModifierContactCapClothing
-    maxContactSprintSlowdown: 0.7
-    maxContactWalkSlowdown: 0.7
+    - type: Sprite
+      sprite: Clothing/Shoes/Specific/galoshes.rsi
+    - type: Clothing
+      sprite: Clothing/Shoes/Specific/galoshes.rsi
+    - type: NoSlip
+    - type: SlowedOverSlippery
+      slowdownModifier: 0.7
+    - type: SpeedModifierContactCapClothing
+      maxContactSprintSlowdown: 0.7
+      maxContactWalkSlowdown: 0.7
 
 - type: entity
   parent: [ClothingShoesBaseButcherable, BaseMajorContraband]
@@ -126,18 +126,18 @@
   name: space ninja shoes
   description: A pair of nano-enhanced boots with built-in magnetic suction cups.
   components:
-  - type: Sprite
-    sprite: Clothing/Shoes/Specific/spaceninja.rsi
-  - type: Clothing
-    sprite: Clothing/Shoes/Specific/spaceninja.rsi
-  - type: NoSlip
-  - type: Magboots # always have gravity because le suction cups
-  - type: ClothingSpeedModifier
-    # ninja are masters of sneaking around relatively quickly, won't break cloak
-    walkModifier: 1.1
-    sprintModifier: 1.3
-  - type: FootstepModifier
-    footstepSoundCollection: null
+    - type: Sprite
+      sprite: Clothing/Shoes/Specific/spaceninja.rsi
+    - type: Clothing
+      sprite: Clothing/Shoes/Specific/spaceninja.rsi
+    - type: NoSlip
+    - type: Magboots # always have gravity because le suction cups
+    - type: ClothingSpeedModifier
+      # ninja are masters of sneaking around relatively quickly, won't break cloak
+      walkModifier: 1.1
+      sprintModifier: 1.3
+    - type: FootstepModifier
+      footstepSoundCollection: null
 
 - type: entity
   parent: ClothingShoesBaseButcherable
@@ -145,10 +145,10 @@
   name: swat shoes
   description: When you want to turn up the heat.
   components:
-  - type: Sprite
-    sprite: Clothing/Shoes/Specific/swat.rsi
-  - type: Clothing
-    sprite: Clothing/Shoes/Specific/swat.rsi
+    - type: Sprite
+      sprite: Clothing/Shoes/Specific/swat.rsi
+    - type: Clothing
+      sprite: Clothing/Shoes/Specific/swat.rsi
 
 - type: entity
   parent: ClothingShoesBaseButcherable
@@ -156,10 +156,10 @@
   name: wizard shoes
   description: A pair of magic shoes.
   components:
-  - type: Sprite
-    sprite: Clothing/Shoes/Specific/wizard.rsi
-  - type: Clothing
-    sprite: Clothing/Shoes/Specific/wizard.rsi
+    - type: Sprite
+      sprite: Clothing/Shoes/Specific/wizard.rsi
+    - type: Clothing
+      sprite: Clothing/Shoes/Specific/wizard.rsi
 
 - type: entity
   parent: ClothingShoesBase
@@ -173,26 +173,26 @@
     - type: Sprite
       sprite: Clothing/Shoes/color.rsi
       layers:
-      - state: icon
-        color: "#3f3f3f"
-      - state: soles-icon
+        - state: icon
+          color: "#3f3f3f"
+        - state: soles-icon
     - type: Clothing
       sprite: Clothing/Shoes/color.rsi
       clothingVisuals:
         shoes:
-        - state: equipped-FEET
-          color: "#1d1d1d"
-        - state: soles-equipped-FEET
+          - state: equipped-FEET
+            color: "#1d1d1d"
+          - state: soles-equipped-FEET
     - type: Item
       inhandVisuals:
         left:
-        - state: inhand-left
-          color: "#3f3f3f"
-        - state: soles-inhand-left
+          - state: inhand-left
+            color: "#3f3f3f"
+          - state: soles-inhand-left
         right:
-        - state: inhand-right
-          color: "#3f3f3f"
-        - state: soles-inhand-right
+          - state: inhand-right
+            color: "#3f3f3f"
+          - state: soles-inhand-right
     - type: ChameleonClothing
       slot: [FEET]
       default: ClothingShoesColorBlack
@@ -208,7 +208,7 @@
   suffix: No-slip, Chameleon
   description: Stylish black shoes.
   components:
-  - type: NoSlip
+    - type: NoSlip
 
 - type: entity
   parent: ClothingShoesClown
@@ -233,11 +233,11 @@
   suffix: Unremoveable
   description: "Cursed pair of cluwne shoes."
   components:
-  - type: Sprite
-    sprite: Clothing/Shoes/Specific/cluwne.rsi
-  - type: Clothing
-    sprite: Clothing/Shoes/Specific/cluwne.rsi
-  - type: Unremoveable
+    - type: Sprite
+      sprite: Clothing/Shoes/Specific/cluwne.rsi
+    - type: Clothing
+      sprite: Clothing/Shoes/Specific/cluwne.rsi
+    - type: Unremoveable
 
 - type: entity
   parent: ClothingShoesClown
@@ -245,21 +245,23 @@
   name: large clown shoes
   description: "When you need to stand out in a room full of clowns!"
   components:
-  - type: Sprite
-    state: "icon"
-    sprite: Clothing/Shoes/Specific/large_clown.rsi
-  - type: Clothing
-    sprite: Clothing/Shoes/Specific/large_clown.rsi
-    clothingVisuals:
-      shoes:
-      - state: equipped-FEET
-        offset: "0, -0.02"
-  - type: Item
-    size: Small
-    sprite: Clothing/Shoes/Specific/large_clown.rsi
-  - type: ClothingSpeedModifier
-    walkModifier: 0.85
-    sprintModifier: 0.8
+    - type: Sprite
+      state: "icon"
+      sprite: Clothing/Shoes/Specific/large_clown.rsi
+    - type: Clothing
+      sprite: Clothing/Shoes/Specific/large_clown.rsi
+      clothingVisuals:
+        shoes:
+          - state: equipped-FEET
+            offset: "0, -0.02"
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      sprite: Clothing/Shoes/Specific/large_clown.rsi
+    - type: ClothingSpeedModifier
+      walkModifier: 0.85
+      sprintModifier: 0.8
 
 - type: entity
   parent: ClothingShoesBaseButcherable
@@ -267,22 +269,22 @@
   name: roller skates
   description: "Get your skates on!"
   components:
-  - type: Sprite
-    sprite: Clothing/Shoes/Specific/skates.rsi
-  - type: Clothing
-    sprite: Clothing/Shoes/Specific/skates.rsi
-    clothingVisuals:
-      shoes:
-      - state: equipped-FEET
-        offset: "0, -0.04"
-  - type: Item
-    sprite: Clothing/Shoes/Specific/skates.rsi
-  - type: ClothingSpeedModifier
-    walkModifier: 1.1
-    sprintModifier: 1.1
-  - type: Skates
-  - type: FootstepModifier
-    footstepSoundCollection:
-      collection: FootstepSkates
-      params:
-        variation: 0.08
+    - type: Sprite
+      sprite: Clothing/Shoes/Specific/skates.rsi
+    - type: Clothing
+      sprite: Clothing/Shoes/Specific/skates.rsi
+      clothingVisuals:
+        shoes:
+          - state: equipped-FEET
+            offset: "0, -0.04"
+    - type: Item
+      sprite: Clothing/Shoes/Specific/skates.rsi
+    - type: ClothingSpeedModifier
+      walkModifier: 1.1
+      sprintModifier: 1.1
+    - type: Skates
+    - type: FootstepModifier
+      footstepSoundCollection:
+        collection: FootstepSkates
+        params:
+          variation: 0.08

+ 2 - 0
Resources/Prototypes/Entities/Clothing/base_clothing.yml

@@ -3,6 +3,8 @@
   parent: BaseItem
   id: Clothing
   components:
+    - type: STWeight
+      self: 3
     - type: Item
       size: Normal
     - type: Sprite

+ 85 - 83
Resources/Prototypes/Entities/Debugging/debug_sweps.yml

@@ -5,41 +5,41 @@
   description: ded
   suffix: DEBUG
   components:
-  - type: Tag
-    tags:
-      - Debug
-  - type: Sprite
-    sprite: Objects/Weapons/Guns/Pistols/debug.rsi
-    state: icon
-  - type: Clothing
-    sprite: Objects/Weapons/Guns/Pistols/debug.rsi
-  - type: Gun
-    fireRate: 100
-    selectedMode: FullAuto
-    availableModes:
-      - SemiAuto
-      - FullAuto
-  - type: AmmoCounter
-  - type: ChamberMagazineAmmoProvider
-    boltClosed: null
-  - type: ItemSlots
-    slots:
-      gun_magazine:
-        name: Magazine
-        startingItem: MagazinePistolDebug
-        insertSound: /Audio/Weapons/Guns/MagIn/smg_magin.ogg
-        ejectSound: /Audio/Weapons/Guns/MagOut/smg_magout.ogg
-        priority: 2
-        whitelist:
-          tags:
-            - Debug
-      gun_chamber:
-        name: Chamber
-        startingItem: CartridgeDebug
-        priority: 1
-        whitelist:
-          tags:
-            - CartridgePistol
+    - type: Tag
+      tags:
+        - Debug
+    - type: Sprite
+      sprite: Objects/Weapons/Guns/Pistols/debug.rsi
+      state: icon
+    - type: Clothing
+      sprite: Objects/Weapons/Guns/Pistols/debug.rsi
+    - type: Gun
+      fireRate: 100
+      selectedMode: FullAuto
+      availableModes:
+        - SemiAuto
+        - FullAuto
+    - type: AmmoCounter
+    - type: ChamberMagazineAmmoProvider
+      boltClosed: null
+    - type: ItemSlots
+      slots:
+        gun_magazine:
+          name: Magazine
+          startingItem: MagazinePistolDebug
+          insertSound: /Audio/Weapons/Guns/MagIn/smg_magin.ogg
+          ejectSound: /Audio/Weapons/Guns/MagOut/smg_magout.ogg
+          priority: 2
+          whitelist:
+            tags:
+              - Debug
+        gun_chamber:
+          name: Chamber
+          startingItem: CartridgeDebug
+          priority: 1
+          whitelist:
+            tags:
+              - CartridgePistol
 
 - type: entity
   id: MagazinePistolDebug
@@ -47,29 +47,29 @@
   parent: BaseMagazinePistol
   suffix: DEBUG
   components:
-  - type: Tag
-    tags:
-      - Debug
-  - type: BallisticAmmoProvider
-    proto: CartridgeDebug
-    capacity: 1000
-  - type: Sprite
-    sprite: Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi
+    - type: Tag
+      tags:
+        - Debug
+    - type: BallisticAmmoProvider
+      proto: CartridgeDebug
+      capacity: 1000
+    - type: Sprite
+      sprite: Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi
 
 - type: entity
   id: BulletDebug
   name: bang, ded bullet
   parent: BaseBullet
-  categories: [ Debug, HideSpawnMenu ]
+  categories: [Debug, HideSpawnMenu]
   suffix: DEBUG
   components:
-  - type: Tag
-    tags:
-      - Debug
-  - type: Projectile
-    damage:
-      types:
-        Blunt: 20000
+    - type: Tag
+      tags:
+        - Debug
+    - type: Projectile
+      damage:
+        types:
+          Blunt: 20000
 
 - type: entity
   id: CartridgeDebug
@@ -77,11 +77,11 @@
   parent: BaseCartridgePistol
   suffix: DEBUG
   components:
-  - type: Tag
-    tags:
-      - Debug
-  - type: CartridgeAmmo
-    proto: BulletDebug
+    - type: Tag
+      tags:
+        - Debug
+    - type: CartridgeAmmo
+      proto: BulletDebug
 
 - type: entity
   name: bang stick gibber
@@ -90,42 +90,44 @@
   description: hit hard ye
   suffix: DEBUG
   components:
-  - type: Tag
-    tags:
-      - Debug
-  - type: Sprite
-    sprite: Objects/Weapons/Melee/debug.rsi
-    state: icon
-  - type: MeleeWeapon
-    damage:
-      types:
-        Blunt: 20000
-  - type: Item
-    size: Tiny
-    sprite: Objects/Weapons/Melee/debug.rsi
+    - type: Tag
+      tags:
+        - Debug
+    - type: Sprite
+      sprite: Objects/Weapons/Melee/debug.rsi
+      state: icon
+    - type: MeleeWeapon
+      damage:
+        types:
+          Blunt: 20000
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+      sprite: Objects/Weapons/Melee/debug.rsi
 
 - type: entity
   name: bang stick 100dmg
   parent: MeleeDebugGib
   id: MeleeDebug100
   components:
-  - type: Tag
-    tags:
-      - Debug
-  - type: MeleeWeapon
-    damage:
-      types:
-        Blunt: 100
+    - type: Tag
+      tags:
+        - Debug
+    - type: MeleeWeapon
+      damage:
+        types:
+          Blunt: 100
 
 - type: entity
   name: bang stick 200dmg
   parent: MeleeDebugGib
   id: MeleeDebug200
   components:
-  - type: Tag
-    tags:
-      - Debug
-  - type: MeleeWeapon
-    damage:
-      types:
-        Blunt: 200
+    - type: Tag
+      tags:
+        - Debug
+    - type: MeleeWeapon
+      damage:
+        types:
+          Blunt: 200

+ 16 - 14
Resources/Prototypes/Entities/Debugging/item.yml

@@ -5,17 +5,19 @@
   description: What is it...?
   suffix: DEBUG
   components:
-  - type: Tag
-    tags:
-      - Debug
-  - type: Sprite
-    sprite: Objects/Misc/skub.rsi
-    state: icon
-  - type: Item
-    size: Tiny
-    shape:
-    - 0, 0, 2, 2
-    - 1, 1, 1, 4
-    - 1, 4, 6, 4
-    - 6, 2, 6, 2
-    - 5, 3, 5, 5
+    - type: Tag
+      tags:
+        - Debug
+    - type: Sprite
+      sprite: Objects/Misc/skub.rsi
+      state: icon
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+      shape:
+        - 0, 0, 2, 2
+        - 1, 1, 1, 4
+        - 1, 4, 6, 4
+        - 6, 2, 6, 2
+        - 5, 3, 5, 5

+ 18 - 0
Resources/Prototypes/Entities/Mobs/NPCs/animals.yml

@@ -116,6 +116,8 @@
     - type: Butcherable
       spawned:
         - id: null # Should give nothing when you butcher it so we set the item id it needs to spawn to null
+    - type: STWeight
+      self: 0.75
     - type: Item
       size: Tiny
     - type: Tag
@@ -325,6 +327,8 @@
       layers:
         - map: ["enum.DamageStateVisualLayers.Base"]
           state: cockroach
+    - type: STWeight
+      self: 0.75
     - type: Item
       size: Tiny
     - type: HTN
@@ -482,6 +486,8 @@
       noMovementLayers:
         movement:
           state: mothroach
+    - type: STWeight
+      self: 3
     - type: Item
       size: Normal
     - type: Clothing
@@ -783,6 +789,8 @@
     - type: Butcherable
       spawned:
         - id: null # Should give nothing when you butcher it so we set the item id it needs to spawn to null
+    - type: STWeight
+      self: 0.75
     - type: Item
       size: Tiny
     - type: Tag
@@ -1581,6 +1589,8 @@
       noMovementLayers:
         movement:
           state: mouse-0
+    - type: STWeight
+      self: 0.75
     - type: Item
       size: Tiny
       heldPrefix: 0
@@ -1775,6 +1785,8 @@
           Base: dead-1
         Dead:
           Base: splat-1
+    - type: STWeight
+      self: 0.75
     - type: Item
       size: Tiny
       heldPrefix: 1
@@ -1804,6 +1816,8 @@
           Base: dead-2
         Dead:
           Base: splat-2
+    - type: STWeight
+      self: 0.75
     - type: Item
       size: Tiny
       heldPrefix: 2
@@ -2163,6 +2177,8 @@
       damage:
         groups:
           Brute: 5
+    - type: STWeight
+      self: 3
     - type: Item
       size: Normal
     - type: OnUseTimerTrigger
@@ -3187,6 +3203,8 @@
       noMovementLayers:
         movement:
           state: hamster-0
+    - type: STWeight
+      self: 0.75
     - type: Item
       size: Tiny
     - type: Physics

+ 263 - 267
Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml

@@ -1,36 +1,36 @@
 - type: entity
   id: BaseMobAsteroid
   parent:
-  - BaseMob
-  - MobDamageable
-  - MobAtmosExposed
-  - MobCombat
+    - BaseMob
+    - MobDamageable
+    - MobAtmosExposed
+    - MobCombat
   abstract: true
   components:
-  - type: Reactive
-    groups:
-      Flammable: [Touch]
-      Extinguish: [Touch]
-      Acidic: [Touch, Ingestion]
-  - type: Body
-    prototype: Animal
-  - type: Climbing
-  - type: NameIdentifier
-    group: GenericNumber
-  - type: StatusEffects
-    allowed:
-    - SlowedDown
-    - Stutter
-    - Stun
-    - Electrocution
-    - TemporaryBlindness
-    - RadiationProtection
-    - Drowsiness
-    - Adrenaline
-  - type: StandingState
-  - type: Tag
-    tags:
-    - DoorBumpOpener
+    - type: Reactive
+      groups:
+        Flammable: [Touch]
+        Extinguish: [Touch]
+        Acidic: [Touch, Ingestion]
+    - type: Body
+      prototype: Animal
+    - type: Climbing
+    - type: NameIdentifier
+      group: GenericNumber
+    - type: StatusEffects
+      allowed:
+        - SlowedDown
+        - Stutter
+        - Stun
+        - Electrocution
+        - TemporaryBlindness
+        - RadiationProtection
+        - Drowsiness
+        - Adrenaline
+    - type: StandingState
+    - type: Tag
+      tags:
+        - DoorBumpOpener
 
 - type: entity
   id: MobGoliath
@@ -38,134 +38,131 @@
   name: goliath
   description: A massive beast that uses long tentacles to ensnare its prey, threatening them is not advised under any conditions.
   components:
-  - type: Sprite
-    sprite: Mobs/Aliens/Asteroid/goliath.rsi
-    layers:
-    - map: ["enum.DamageStateVisualLayers.Base"]
-      state: goliath
-  - type: DamageStateVisuals
-    states:
-      Alive:
-        Base: goliath
-      Dead:
-        Base: goliath_dead
-  - type: MovementSpeedModifier
-    baseWalkSpeed : 2.00
-    baseSprintSpeed : 2.00
-  - type: MobThresholds
-    thresholds:
-      0: Alive
-      250: Dead
-  - type: MeleeWeapon
-    soundHit:
-      path: "/Audio/Weapons/smash.ogg"
-    angle: 0
-    attackRate: 0.75
-    animation: WeaponArcPunch
-    damage:
-      types:
-        Slash: 10
-        Piercing: 10
-  - type: NpcFactionMember
-    factions:
-    - SimpleHostile
-  - type: HTN
-    rootTask:
-      task: GoliathCompound
-    blackboard:
-      VisionRadius: !type:Single
-        6
-      AggroVisionRadius: !type:Single
-        10
-  - type: NPCUseActionOnTarget
-    actionId: ActionGoliathTentacle
-  - type: Tag
-    tags:
-    - CannotSuicide
-    - Goliath
-    - FootstepSound
-  - type: NoSlip
-  - type: Butcherable
-    spawned:
-    - id: FoodMeatGoliath
-      amount: 3
-    - id: MaterialGoliathHide1
-      amount: 3
+    - type: Sprite
+      sprite: Mobs/Aliens/Asteroid/goliath.rsi
+      layers:
+        - map: ["enum.DamageStateVisualLayers.Base"]
+          state: goliath
+    - type: DamageStateVisuals
+      states:
+        Alive:
+          Base: goliath
+        Dead:
+          Base: goliath_dead
+    - type: MovementSpeedModifier
+      baseWalkSpeed: 2.00
+      baseSprintSpeed: 2.00
+    - type: MobThresholds
+      thresholds:
+        0: Alive
+        250: Dead
+    - type: MeleeWeapon
+      soundHit:
+        path: "/Audio/Weapons/smash.ogg"
+      angle: 0
+      attackRate: 0.75
+      animation: WeaponArcPunch
+      damage:
+        types:
+          Slash: 10
+          Piercing: 10
+    - type: NpcFactionMember
+      factions:
+        - SimpleHostile
+    - type: HTN
+      rootTask:
+        task: GoliathCompound
+      blackboard:
+        VisionRadius: !type:Single 6
+        AggroVisionRadius: !type:Single 10
+    - type: NPCUseActionOnTarget
+      actionId: ActionGoliathTentacle
+    - type: Tag
+      tags:
+        - CannotSuicide
+        - Goliath
+        - FootstepSound
+    - type: NoSlip
+    - type: Butcherable
+      spawned:
+        - id: FoodMeatGoliath
+          amount: 3
+        - id: MaterialGoliathHide1
+          amount: 3
 
 - type: entity
   id: ActionGoliathTentacle
   name: "[color=red]Tentacle Slam[/color]"
   description: Use your tentacles to grab and stun a target player!
   components:
-  - type: EntityWorldTargetAction
-    raiseOnUser: true
-    icon:
-      sprite: Mobs/Aliens/Asteroid/goliath.rsi
-      state: goliath_tentacle_spawn
-    iconOn:
-      sprite: Mobs/Aliens/Asteroid/goliath.rsi
-      state: goliath_tentacle_wiggle
-    sound:
-      path: "/Audio/Weapons/slash.ogg"
-    event: !type:GoliathSummonTentacleAction
-    useDelay: 8
-    range: 10
+    - type: EntityWorldTargetAction
+      raiseOnUser: true
+      icon:
+        sprite: Mobs/Aliens/Asteroid/goliath.rsi
+        state: goliath_tentacle_spawn
+      iconOn:
+        sprite: Mobs/Aliens/Asteroid/goliath.rsi
+        state: goliath_tentacle_wiggle
+      sound:
+        path: "/Audio/Weapons/slash.ogg"
+      event: !type:GoliathSummonTentacleAction
+      useDelay: 8
+      range: 10
 
 - type: entity
   id: GoliathTentacle
   name: tentacle
   components:
-  - type: Transform
-    anchored: True
-  - type: Physics
-    bodyType: Static
-    canCollide: true
-  - type: InteractionOutline
-  - type: Sprite
-    sprite: Mobs/Aliens/Asteroid/goliath.rsi
-    layers:
-    - state: goliath_tentacle_wiggle
-  - type: StunOnContact
-    blacklist:
-      tags:
-      - Goliath
-  - type: Fixtures
-    fixtures:
-      fix:
-        shape:
-          !type:PhysShapeAabb
-          bounds: "-0.45,-0.45,0.45,0.45"
-        mask:
-        - Impassable
-        layer:
-        - Impassable
-        hard: false
-  - type: TimedDespawn #do this shit by hand because of fucking course.
-    lifetime: 0.4
-  - type: SpawnOnDespawn
-    prototype: EffectGoliathTentacleRetract
+    - type: Transform
+      anchored: True
+    - type: Physics
+      bodyType: Static
+      canCollide: true
+    - type: InteractionOutline
+    - type: Sprite
+      sprite: Mobs/Aliens/Asteroid/goliath.rsi
+      layers:
+        - state: goliath_tentacle_wiggle
+    - type: StunOnContact
+      blacklist:
+        tags:
+          - Goliath
+    - type: Fixtures
+      fixtures:
+        fix:
+          shape: !type:PhysShapeAabb
+            bounds: "-0.45,-0.45,0.45,0.45"
+          mask:
+            - Impassable
+          layer:
+            - Impassable
+          hard: false
+    - type: TimedDespawn #do this shit by hand because of fucking course.
+      lifetime: 0.4
+    - type: SpawnOnDespawn
+      prototype: EffectGoliathTentacleRetract
 
 - type: entity
   id: BaseEffectGoliathTentacleSpawn
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   name: tentacle
   abstract: true
   components:
-  - type: Transform
-    anchored: True
-  - type: Physics
-    bodyType: Static
-    canCollide: false
-  - type: Sprite
-    sprite: Mobs/Aliens/Asteroid/goliath.rsi
-  - type: InteractionOutline
-  - type: TimedDespawn
-    lifetime: 0.7
+    - type: Transform
+      anchored: True
+    - type: Physics
+      bodyType: Static
+      canCollide: false
+    - type: Sprite
+      sprite: Mobs/Aliens/Asteroid/goliath.rsi
+    - type: InteractionOutline
+    - type: TimedDespawn
+      lifetime: 0.7
 
 - type: entity
   id: EffectGoliathTentacleSpawn
   parent: BaseEffectGoliathTentacleSpawn
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   name: tentacle
   components:
     - type: Sprite
@@ -176,121 +173,116 @@
 - type: entity
   id: EffectGoliathTentacleRetract
   parent: BaseEffectGoliathTentacleSpawn
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   components:
-  - type: Sprite
-    state: goliath_tentacle_retract
-  - type: EffectVisuals
-  - type: AnimationPlayer
+    - type: Sprite
+      state: goliath_tentacle_retract
+    - type: EffectVisuals
+    - type: AnimationPlayer
 
 - type: entity
   id: MobHivelord
-  parent: [ BaseMobAsteroid, FlyingMobBase ]
+  parent: [BaseMobAsteroid, FlyingMobBase]
   name: hivelord
   description: A truly alien creature, it is a mass of unknown organic material, constantly fluctuating. When attacking, pieces of it split off and attack in tandem with the original.
   components:
-  - type: Sprite
-    sprite: Mobs/Aliens/Asteroid/hivelord.rsi
-    layers:
-    - map: ["enum.DamageStateVisualLayers.Base"]
-      state: hivelord
-  - type: DamageStateVisuals
-    states:
-      Alive:
-        Base: hivelord
-      Dead:
-        Base: hivelord_dead
-  - type: MovementSpeedModifier
-    baseWalkSpeed : 3.5
-    baseSprintSpeed : 4.0
-  - type: MobThresholds
-    thresholds:
-      0: Alive
-      75: Dead
-  - type: MeleeWeapon
-    damage:
-      types:
-        Blunt: 0
-  - type: Gun
-    fireRate: 0.66
-    selectedMode: SemiAuto
-    showExamineText: false
-    availableModes:
-    - SemiAuto
-    soundGunshot: null
-  - type: RechargeBasicEntityAmmo
-    showExamineText: false
-    rechargeCooldown: 0
-    rechargeSound: null
-  - type: BasicEntityAmmoProvider
-    proto: MobHivelordBrood
-    capacity: 1
-    count: 1
-  - type: NpcFactionMember
-    factions:
-    - SimpleHostile
-  - type: HTN
-    rootTask:
-      task: SimpleRangedHostileCompound
-    blackboard:
-      VisionRadius: !type:Single
-        4
-      AggroVisionRadius: !type:Single
-        9
-  - type: Butcherable
-    spawned:
-    - id: FoodHivelordRemains
+    - type: Sprite
+      sprite: Mobs/Aliens/Asteroid/hivelord.rsi
+      layers:
+        - map: ["enum.DamageStateVisualLayers.Base"]
+          state: hivelord
+    - type: DamageStateVisuals
+      states:
+        Alive:
+          Base: hivelord
+        Dead:
+          Base: hivelord_dead
+    - type: MovementSpeedModifier
+      baseWalkSpeed: 3.5
+      baseSprintSpeed: 4.0
+    - type: MobThresholds
+      thresholds:
+        0: Alive
+        75: Dead
+    - type: MeleeWeapon
+      damage:
+        types:
+          Blunt: 0
+    - type: Gun
+      fireRate: 0.66
+      selectedMode: SemiAuto
+      showExamineText: false
+      availableModes:
+        - SemiAuto
+      soundGunshot: null
+    - type: RechargeBasicEntityAmmo
+      showExamineText: false
+      rechargeCooldown: 0
+      rechargeSound: null
+    - type: BasicEntityAmmoProvider
+      proto: MobHivelordBrood
+      capacity: 1
+      count: 1
+    - type: NpcFactionMember
+      factions:
+        - SimpleHostile
+    - type: HTN
+      rootTask:
+        task: SimpleRangedHostileCompound
+      blackboard:
+        VisionRadius: !type:Single 4
+        AggroVisionRadius: !type:Single 9
+    - type: Butcherable
+      spawned:
+        - id: FoodHivelordRemains
 
 - type: entity
   id: MobHivelordBrood
-  parent: [ BaseMobAsteroid, FlyingMobBase ]
+  parent: [BaseMobAsteroid, FlyingMobBase]
   name: hivelord brood
   description: A fragment of the original hivelord, rallying behind its original. One isn't much of a threat, but...
   components:
-  - type: Sprite
-    sprite: Mobs/Aliens/Asteroid/hivelord.rsi
-    layers:
-    - state: hivelordbrood
-  - type: MovementSpeedModifier
-    baseWalkSpeed : 3.5
-    baseSprintSpeed : 4.0
-  - type: MobThresholds
-    thresholds:
-      0: Alive
-      5: Dead
-  - type: MeleeWeapon
-    soundHit:
-      path: /Audio/Weapons/bladeslice.ogg
-    angle: 0
-    attackRate: 1.0
-    range: 0.75
-    animation: WeaponArcPunch
-    damage:
-      types:
-        Slash: 7
-  - type: Ammo
-    muzzleFlash: null
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 5
-      behaviors:
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]
-  - type: NpcFactionMember
-    factions:
-    - SimpleHostile
-  - type: HTN
-    rootTask:
-      task: SimpleHostileCompound
-    blackboard: # highly aggressive
-      VisionRadius: !type:Single
-        15
-      AggroVisionRadius: !type:Single
-        15
-  - type: TimedDespawn
-    lifetime: 100
+    - type: Sprite
+      sprite: Mobs/Aliens/Asteroid/hivelord.rsi
+      layers:
+        - state: hivelordbrood
+    - type: MovementSpeedModifier
+      baseWalkSpeed: 3.5
+      baseSprintSpeed: 4.0
+    - type: MobThresholds
+      thresholds:
+        0: Alive
+        5: Dead
+    - type: MeleeWeapon
+      soundHit:
+        path: /Audio/Weapons/bladeslice.ogg
+      angle: 0
+      attackRate: 1.0
+      range: 0.75
+      animation: WeaponArcPunch
+      damage:
+        types:
+          Slash: 7
+    - type: Ammo
+      muzzleFlash: null
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 5
+          behaviors:
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+    - type: NpcFactionMember
+      factions:
+        - SimpleHostile
+    - type: HTN
+      rootTask:
+        task: SimpleHostileCompound
+      blackboard: # highly aggressive
+        VisionRadius: !type:Single 15
+        AggroVisionRadius: !type:Single 15
+    - type: TimedDespawn
+      lifetime: 100
 
 - type: entity
   id: FoodHivelordRemains
@@ -298,27 +290,29 @@
   name: hivelord remains
   description: All that remains of a hivelord, it seems to be what allows it to break pieces of itself off without being hurt... its healing properties will soon become inert if not used quickly. Try not to think about what you're eating.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 5
-        reagents:
-        - ReagentId: Rororium
-          Quantity: 5
-  - type: Sprite
-    sprite: Objects/Consumable/Food/rorocore.rsi
-    state: boiled
-  - type: Item
-    size: Normal
-  - type: Perishable
-    rotAfter: 120 # rot after 2 minutes
-    molsPerSecondPerUnitMass: 0
-    forceRotProgression: true
-  - type: RotInto
-    entity: FoodHivelordRemainsInert
-    stage: 1
-  - type: StaticPrice
-    price: 5000
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 5
+          reagents:
+            - ReagentId: Rororium
+              Quantity: 5
+    - type: Sprite
+      sprite: Objects/Consumable/Food/rorocore.rsi
+      state: boiled
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: Perishable
+      rotAfter: 120 # rot after 2 minutes
+      molsPerSecondPerUnitMass: 0
+      forceRotProgression: true
+    - type: RotInto
+      entity: FoodHivelordRemainsInert
+      stage: 1
+    - type: StaticPrice
+      price: 5000
 
 - type: entity
   id: FoodHivelordRemainsInert
@@ -326,12 +320,14 @@
   name: inert hivelord remains
   description: All that remains of a hivelord... Now all is truly lost.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Food/rorocore.rsi
-    state: boiled
-    color: "#664444"
-  - type: SpaceGarbage
-  - type: Item
-    size: Normal
-  - type: StaticPrice
-    price: 500
+    - type: Sprite
+      sprite: Objects/Consumable/Food/rorocore.rsi
+      state: boiled
+      color: "#664444"
+    - type: SpaceGarbage
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: StaticPrice
+      price: 500

+ 2 - 0
Resources/Prototypes/Entities/Mobs/NPCs/simplemob.yml

@@ -135,6 +135,8 @@
             animal_remains1: ""
             animal_remains2: ""
             animal_remains3: ""
+    - type: STWeight
+      self: 8
     - type: Item
       size: Huge
     - type: Tag

+ 418 - 420
Resources/Prototypes/Entities/Mobs/NPCs/space.yml

@@ -5,68 +5,67 @@
   abstract: true
   description: It looks friendly. Why don't you give it a hug?
   components:
-  - type: HTN
-    rootTask:
-      task: SimpleHostileCompound
-  - type: NpcFactionMember
-    factions:
-    - SimpleHostile
-  - type: Sprite
-    drawdepth: Mobs
-    sprite: Mobs/Animals/bear.rsi
-    layers:
-    - map: [ "enum.DamageStateVisualLayers.Base" ]
-      state: bear
-    - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ]
-      state: glow
-      shader: unshaded
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape:
-          !type:PhysShapeCircle
-          radius: 0.40
-        density: 100
-        mask:
-        - MobMask
-        layer:
-        - MobLayer
-  - type: MobThresholds
-    thresholds:
-      0: Alive
-      100: Dead
-  - type: Stamina
-    critThreshold: 150
-  - type: MovementAlwaysTouching
-  - type: Bloodstream
-    bloodMaxVolume: 300
-    bloodReagent: Cryoxadone
-  - type: CombatMode
-  - type: Temperature
-    heatDamageThreshold: 500
-    coldDamageThreshold: 0
-  - type: MeleeWeapon
-    soundHit:
+    - type: HTN
+      rootTask:
+        task: SimpleHostileCompound
+    - type: NpcFactionMember
+      factions:
+        - SimpleHostile
+    - type: Sprite
+      drawdepth: Mobs
+      sprite: Mobs/Animals/bear.rsi
+      layers:
+        - map: ["enum.DamageStateVisualLayers.Base"]
+          state: bear
+        - map: ["enum.DamageStateVisualLayers.BaseUnshaded"]
+          state: glow
+          shader: unshaded
+    - type: Fixtures
+      fixtures:
+        fix1:
+          shape: !type:PhysShapeCircle
+            radius: 0.40
+          density: 100
+          mask:
+            - MobMask
+          layer:
+            - MobLayer
+    - type: MobThresholds
+      thresholds:
+        0: Alive
+        100: Dead
+    - type: Stamina
+      critThreshold: 150
+    - type: MovementAlwaysTouching
+    - type: Bloodstream
+      bloodMaxVolume: 300
+      bloodReagent: Cryoxadone
+    - type: CombatMode
+    - type: Temperature
+      heatDamageThreshold: 500
+      coldDamageThreshold: 0
+    - type: MeleeWeapon
+      soundHit:
         path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
-    angle: 0
-    animation: WeaponArcClaw
-    damage:
-      types:
-        Blunt: 5
-        Slash: 10
-  - type: Tag
-    tags:
-    - DoorBumpOpener
-    - FootstepSound
-  - type: Puller
-    needsHands: false
-  - type: PointLight
-    radius: 1.2
-    energy: 2
-    color: "#4faffb"
-  - type: GhostTakeoverAvailable
-  - type: Speech
-    speechVerb: LargeMob
+      angle: 0
+      animation: WeaponArcClaw
+      damage:
+        types:
+          Blunt: 5
+          Slash: 10
+    - type: Tag
+      tags:
+        - DoorBumpOpener
+        - FootstepSound
+    - type: Puller
+      needsHands: false
+    - type: PointLight
+      radius: 1.2
+      energy: 2
+      color: "#4faffb"
+    - type: GhostTakeoverAvailable
+    - type: Speech
+      speechVerb: LargeMob
 
 - type: entity
   name: space bear
@@ -74,49 +73,49 @@
   parent: MobSpaceBasic
   description: It looks friendly. Why don't you give it a hug?
   components:
-  - type: Sprite
-    drawdepth: Mobs
-    sprite: Mobs/Animals/bear.rsi
-    layers:
-    - map: [ "enum.DamageStateVisualLayers.Base" ]
-      state: bear
-    - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ]
-      state: glow
-      shader: unshaded
-  - type: DamageStateVisuals
-    states:
-      Alive:
-        Base: bear
-        BaseUnshaded: glow
-      Critical:
-        Base: bear_dead
-      Dead:
-        Base: bear_dead
-  - type: Butcherable
-    spawned:
-    - id: FoodMeatBear
-      amount: 3
-    - id: MaterialHideBear
-      amount: 1
-      prob: 0.3
-  - type: ReplacementAccent
-    accent: genericAggressive
-  - type: Vocal
-    sounds:
-      Unsexed: Bear
-  - type: InteractionPopup
-    successChance: 0.25
-    interactSuccessString: petting-success-bear
-    interactFailureString: petting-failure-bear
-    interactSuccessSound:
-      path: /Audio/Animals/sloth_squeak.ogg
+    - type: Sprite
+      drawdepth: Mobs
+      sprite: Mobs/Animals/bear.rsi
+      layers:
+        - map: ["enum.DamageStateVisualLayers.Base"]
+          state: bear
+        - map: ["enum.DamageStateVisualLayers.BaseUnshaded"]
+          state: glow
+          shader: unshaded
+    - type: DamageStateVisuals
+      states:
+        Alive:
+          Base: bear
+          BaseUnshaded: glow
+        Critical:
+          Base: bear_dead
+        Dead:
+          Base: bear_dead
+    - type: Butcherable
+      spawned:
+        - id: FoodMeatBear
+          amount: 3
+        - id: MaterialHideBear
+          amount: 1
+          prob: 0.3
+    - type: ReplacementAccent
+      accent: genericAggressive
+    - type: Vocal
+      sounds:
+        Unsexed: Bear
+    - type: InteractionPopup
+      successChance: 0.25
+      interactSuccessString: petting-success-bear
+      interactFailureString: petting-failure-bear
+      interactSuccessSound:
+        path: /Audio/Animals/sloth_squeak.ogg
 
 - type: entity
   id: MobBearSpaceSalvage
   parent: MobBearSpace
   suffix: "Salvage Ruleset"
   components:
-  - type: SalvageMobRestrictions
+    - type: SalvageMobRestrictions
 
 - type: entity
   name: space kangaroo
@@ -124,60 +123,60 @@
   parent: [MobSpaceBasic, StripableInventoryBase]
   description: It looks friendly. Why don't you give it a hug?
   components:
-  - type: Sprite
-    drawdepth: Mobs
-    sprite: Mobs/Animals/kangaroo.rsi
-    layers:
-    - map: [ "enum.DamageStateVisualLayers.Base" ]
-      state: kangaroo-space
-    - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ]
-      state: glow
-      shader: unshaded
-  - type: MeleeWeapon
-    soundHit:
+    - type: Sprite
+      drawdepth: Mobs
+      sprite: Mobs/Animals/kangaroo.rsi
+      layers:
+        - map: ["enum.DamageStateVisualLayers.Base"]
+          state: kangaroo-space
+        - map: ["enum.DamageStateVisualLayers.BaseUnshaded"]
+          state: glow
+          shader: unshaded
+    - type: MeleeWeapon
+      soundHit:
         path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
-    angle: 0
-    animation: WeaponArcClaw
-    damage:
-      types:
-        Blunt: 9
-        Slash: 2
-  - type: MovementSpeedModifier
-    baseWalkSpeed: 3.5
-    baseSprintSpeed: 4.5
-  - type: DamageStateVisuals
-    states:
-      Alive:
-        Base: kangaroo-space
-        BaseUnshaded: glow
-      Critical:
-        Base: kangaroo-space-crit
-      Dead:
-        Base: kangaroo-space-dead
-  - type: Stamina
-    critThreshold: 180
-  - type: Inventory
-    speciesId: kangaroo
-    templateId: spacekangaroo
-  - type: Vocal
-    sounds:
-      Unsexed: Kangaroo
-  - type: FootstepModifier
-    footstepSoundCollection:
-      collection: FootstepBounce
-  - type: ReplacementAccent
-    accent: kangaroo
-  - type: Butcherable
-    spawned:
-    - id: FoodMeat
-      amount: 1
+      angle: 0
+      animation: WeaponArcClaw
+      damage:
+        types:
+          Blunt: 9
+          Slash: 2
+    - type: MovementSpeedModifier
+      baseWalkSpeed: 3.5
+      baseSprintSpeed: 4.5
+    - type: DamageStateVisuals
+      states:
+        Alive:
+          Base: kangaroo-space
+          BaseUnshaded: glow
+        Critical:
+          Base: kangaroo-space-crit
+        Dead:
+          Base: kangaroo-space-dead
+    - type: Stamina
+      critThreshold: 180
+    - type: Inventory
+      speciesId: kangaroo
+      templateId: spacekangaroo
+    - type: Vocal
+      sounds:
+        Unsexed: Kangaroo
+    - type: FootstepModifier
+      footstepSoundCollection:
+        collection: FootstepBounce
+    - type: ReplacementAccent
+      accent: kangaroo
+    - type: Butcherable
+      spawned:
+        - id: FoodMeat
+          amount: 1
 
 - type: entity
   id: MobKangarooSpaceSalvage
   parent: MobKangarooSpace
   suffix: "Salvage Ruleset"
   components:
-  - type: SalvageMobRestrictions
+    - type: SalvageMobRestrictions
 
 - type: entity
   name: space spider
@@ -185,97 +184,96 @@
   parent: MobSpaceBasic
   description: It's so glowing, it looks dangerous.
   components:
-  - type: Sprite
-    drawdepth: Mobs
-    sprite: Mobs/Animals/spacespider.rsi
-    layers:
-    - map: [ "enum.DamageStateVisualLayers.Base" ]
-      state: spacespider
-    - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ]
-      state: glow
-      shader: unshaded
-  - type: MobThresholds
-    thresholds:
-      0: Alive
-      90: Dead
-  - type: Stamina
-    critThreshold: 150
-  - type: DamageStateVisuals
-    states:
-      Alive:
-        Base: spacespider
-        BaseUnshaded: glow
-      Dead:
-        Base: spacespider_dead
-  - type: Butcherable
-    spawned:
-    - id: FoodMeatSpider
-      amount: 2
-    - id: EggSpider
-      amount: 1
-      prob: 0.5
-  - type: Bloodstream
-    bloodMaxVolume: 250
-    bloodReagent: Cryoxadone
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape:
-          !type:PhysShapeCircle
-          radius: 0.35
-        density: 120
-        mask:
-        - MobMask
-        layer:
-        - MobLayer
-  - type: MeleeWeapon
-    soundHit:
-      path: /Audio/Effects/bite.ogg
-    angle: 0
-    animation: WeaponArcBite
-    damage:
-      types:
-        Piercing: 6
-        Poison: 4
-  - type: SolutionContainerManager
-    solutions:
-      melee:
-        reagents:
-        - ReagentId: ChloralHydrate
-          Quantity: 80
-  - type: MeleeChemicalInjector
-    solution: melee
-    transferAmount: 4
-  - type: ReplacementAccent
-    accent: xeno
-  - type: InteractionPopup
-    successChance: 0.20
-    interactSuccessString: petting-success-tarantula
-    interactFailureString: petting-failure-generic
-  - type: PointLight
-    radius: 1.2
-    energy: 2
-    color: "#4faffb"
-  - type: NoSlip
-  - type: IgnoreSpiderWeb
-  - type: Speech
-    speechVerb: Arachnid
-    speechSounds: Arachnid
-    allowedEmotes: ['Click', 'Chitter']
-  - type: Vocal
-    sounds:
-      Male: UnisexArachnid
-      Female: UnisexArachnid
-      Unsexed: UnisexArachnid
-  - type: TypingIndicator
-    proto: spider
+    - type: Sprite
+      drawdepth: Mobs
+      sprite: Mobs/Animals/spacespider.rsi
+      layers:
+        - map: ["enum.DamageStateVisualLayers.Base"]
+          state: spacespider
+        - map: ["enum.DamageStateVisualLayers.BaseUnshaded"]
+          state: glow
+          shader: unshaded
+    - type: MobThresholds
+      thresholds:
+        0: Alive
+        90: Dead
+    - type: Stamina
+      critThreshold: 150
+    - type: DamageStateVisuals
+      states:
+        Alive:
+          Base: spacespider
+          BaseUnshaded: glow
+        Dead:
+          Base: spacespider_dead
+    - type: Butcherable
+      spawned:
+        - id: FoodMeatSpider
+          amount: 2
+        - id: EggSpider
+          amount: 1
+          prob: 0.5
+    - type: Bloodstream
+      bloodMaxVolume: 250
+      bloodReagent: Cryoxadone
+    - type: Fixtures
+      fixtures:
+        fix1:
+          shape: !type:PhysShapeCircle
+            radius: 0.35
+          density: 120
+          mask:
+            - MobMask
+          layer:
+            - MobLayer
+    - type: MeleeWeapon
+      soundHit:
+        path: /Audio/Effects/bite.ogg
+      angle: 0
+      animation: WeaponArcBite
+      damage:
+        types:
+          Piercing: 6
+          Poison: 4
+    - type: SolutionContainerManager
+      solutions:
+        melee:
+          reagents:
+            - ReagentId: ChloralHydrate
+              Quantity: 80
+    - type: MeleeChemicalInjector
+      solution: melee
+      transferAmount: 4
+    - type: ReplacementAccent
+      accent: xeno
+    - type: InteractionPopup
+      successChance: 0.20
+      interactSuccessString: petting-success-tarantula
+      interactFailureString: petting-failure-generic
+    - type: PointLight
+      radius: 1.2
+      energy: 2
+      color: "#4faffb"
+    - type: NoSlip
+    - type: IgnoreSpiderWeb
+    - type: Speech
+      speechVerb: Arachnid
+      speechSounds: Arachnid
+      allowedEmotes: ["Click", "Chitter"]
+    - type: Vocal
+      sounds:
+        Male: UnisexArachnid
+        Female: UnisexArachnid
+        Unsexed: UnisexArachnid
+    - type: TypingIndicator
+      proto: spider
 
 - type: entity
   id: MobSpiderSpaceSalvage
   parent: MobSpiderSpace
   suffix: "Salvage Ruleset"
   components:
-  - type: SalvageMobRestrictions
+    - type: SalvageMobRestrictions
 
 - type: entity
   name: space cobra
@@ -287,9 +285,9 @@
       drawdepth: Mobs
       sprite: Mobs/Animals/spacecobra.rsi
       layers:
-        - map: [ "enum.DamageStateVisualLayers.Base" ]
+        - map: ["enum.DamageStateVisualLayers.Base"]
           state: spacecobra
-        - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ]
+        - map: ["enum.DamageStateVisualLayers.BaseUnshaded"]
           state: glow
           shader: unshaded
     - type: FootstepModifier
@@ -323,14 +321,13 @@
     - type: Fixtures
       fixtures:
         fix1:
-          shape:
-            !type:PhysShapeCircle
+          shape: !type:PhysShapeCircle
             radius: 0.40
           density: 120
           mask:
-          - MobMask
+            - MobMask
           layer:
-          - MobLayer
+            - MobLayer
     - type: MeleeWeapon
       hidden: true
       soundHit:
@@ -345,8 +342,8 @@
       solutions:
         melee:
           reagents:
-          - ReagentId: NorepinephricAcid
-            Quantity: 90
+            - ReagentId: NorepinephricAcid
+              Quantity: 90
     - type: MeleeChemicalInjector
       solution: melee
       transferAmount: 6
@@ -380,203 +377,204 @@
   name: snail
   description: Revolting unless you're french.
   components:
-  - type: Body
-    prototype: Mouse
-  - type: GhostRole
-    makeSentient: true
-    allowSpeech: false
-    allowMovement: true
-    name: ghost-role-information-snail-name
-    description: ghost-role-information-snail-description
-    rules: ghost-role-information-freeagent-rules
-    mindRoles:
-    - MindRoleGhostRoleFreeAgentHarmless
-  - type: GhostTakeoverAvailable
-  - type: Emoting
-  - type: Sprite
-    drawdepth: SmallMobs
-    sprite: Mobs/Animals/snail.rsi
-    layers:
-    - map: ["enum.DamageStateVisualLayers.Base"]
-      state: snail
-  - type: Item
-    size: Tiny
-  - type: NpcFactionMember
-    factions:
-      - Mouse
-  - type: HTN
-    rootTask:
-      task: MouseCompound
-  - type: Physics
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape:
-          !type:PhysShapeCircle
-          radius: 0.2
-        density: 100
-        mask:
-        - SmallMobMask
-        layer:
-        - SmallMobLayer
-  - type: MobState
-  - type: Deathgasp
-  - type: MobStateActions
-    actions:
-      Critical:
-      - ActionCritSuccumb
-      - ActionCritFakeDeath
-      - ActionCritLastWords
-  - type: MobThresholds
-    thresholds:
-      0: Alive
-      10: Critical
-      20: Dead
-  - type: MovementSpeedModifier
-    baseWalkSpeed : 2
-    baseSprintSpeed : 3
-  - type: DamageStateVisuals
-    states:
-      Alive:
-        Base: snail
-      Critical:
-        Base: dead
-      Dead:
-        Base: dead
-  - type: Food
-  - type: Thirst
-    startingThirst: 25  # spawn with Okay thirst state
-    thresholds:
-      OverHydrated: 35
-      Okay: 25
-      Thirsty: 15
-      Parched: 10
-      Dead: 0
-    baseDecayRate: 0.04
-  - type: Hunger
-    thresholds:
-      Overfed: 35
-      Okay: 25
-      Peckish: 15
-      Starving: 10
-      Dead: 0
-    baseDecayRate: 0.1
-  - type: Extractable
-    grindableSolutionName: food
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: UncookedAnimalProteins
-          Quantity: 3
-  - type: Butcherable
-    spawned:
-    - id: FoodMeatSnail
-      amount: 1
-  - type: Tag
-    tags:
-    - Trash
-    - VimPilot
-    - ChefPilot
-    - Meat
-  - type: CombatMode
-    combatToggleAction: ActionCombatModeToggleOff
-  - type: Bloodstream
-    bloodMaxVolume: 30
-    bloodReagent: Cryoxadone
-  - type: CanEscapeInventory
-  - type: MobPrice
-    price: 50
-  - type: BadFood
-  - type: NonSpreaderZombie
-  - type: FireVisuals
-    sprite: Mobs/Effects/onfire.rsi
-    normalState: Mouse_burning
-  - type: Temperature
-    heatDamageThreshold: 500
-    coldDamageThreshold: 0
-  - type: Reactive
-    reactions:
-    - reagents: [TableSalt, Saline]
-      methods: [Touch, Ingestion, Injection]
-      effects:
-      - !type:HealthChange
-        scaleByQuantity: true
-        damage:
-          types:
-            Caustic: 1
-      - !type:PopupMessage
-        type: Local
-        visualType: Large
-        messages: [ "snail-hurt-by-salt-popup" ]
-        probability: 0.66
+    - type: Body
+      prototype: Mouse
+    - type: GhostRole
+      makeSentient: true
+      allowSpeech: false
+      allowMovement: true
+      name: ghost-role-information-snail-name
+      description: ghost-role-information-snail-description
+      rules: ghost-role-information-freeagent-rules
+      mindRoles:
+        - MindRoleGhostRoleFreeAgentHarmless
+    - type: GhostTakeoverAvailable
+    - type: Emoting
+    - type: Sprite
+      drawdepth: SmallMobs
+      sprite: Mobs/Animals/snail.rsi
+      layers:
+        - map: ["enum.DamageStateVisualLayers.Base"]
+          state: snail
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+    - type: NpcFactionMember
+      factions:
+        - Mouse
+    - type: HTN
+      rootTask:
+        task: MouseCompound
+    - type: Physics
+    - type: Fixtures
+      fixtures:
+        fix1:
+          shape: !type:PhysShapeCircle
+            radius: 0.2
+          density: 100
+          mask:
+            - SmallMobMask
+          layer:
+            - SmallMobLayer
+    - type: MobState
+    - type: Deathgasp
+    - type: MobStateActions
+      actions:
+        Critical:
+          - ActionCritSuccumb
+          - ActionCritFakeDeath
+          - ActionCritLastWords
+    - type: MobThresholds
+      thresholds:
+        0: Alive
+        10: Critical
+        20: Dead
+    - type: MovementSpeedModifier
+      baseWalkSpeed: 2
+      baseSprintSpeed: 3
+    - type: DamageStateVisuals
+      states:
+        Alive:
+          Base: snail
+        Critical:
+          Base: dead
+        Dead:
+          Base: dead
+    - type: Food
+    - type: Thirst
+      startingThirst: 25 # spawn with Okay thirst state
+      thresholds:
+        OverHydrated: 35
+        Okay: 25
+        Thirsty: 15
+        Parched: 10
+        Dead: 0
+      baseDecayRate: 0.04
+    - type: Hunger
+      thresholds:
+        Overfed: 35
+        Okay: 25
+        Peckish: 15
+        Starving: 10
+        Dead: 0
+      baseDecayRate: 0.1
+    - type: Extractable
+      grindableSolutionName: food
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: UncookedAnimalProteins
+              Quantity: 3
+    - type: Butcherable
+      spawned:
+        - id: FoodMeatSnail
+          amount: 1
+    - type: Tag
+      tags:
+        - Trash
+        - VimPilot
+        - ChefPilot
+        - Meat
+    - type: CombatMode
+      combatToggleAction: ActionCombatModeToggleOff
+    - type: Bloodstream
+      bloodMaxVolume: 30
+      bloodReagent: Cryoxadone
+    - type: CanEscapeInventory
+    - type: MobPrice
+      price: 50
+    - type: BadFood
+    - type: NonSpreaderZombie
+    - type: FireVisuals
+      sprite: Mobs/Effects/onfire.rsi
+      normalState: Mouse_burning
+    - type: Temperature
+      heatDamageThreshold: 500
+      coldDamageThreshold: 0
+    - type: Reactive
+      reactions:
+        - reagents: [TableSalt, Saline]
+          methods: [Touch, Ingestion, Injection]
+          effects:
+            - !type:HealthChange
+              scaleByQuantity: true
+              damage:
+                types:
+                  Caustic: 1
+            - !type:PopupMessage
+              type: Local
+              visualType: Large
+              messages: ["snail-hurt-by-salt-popup"]
+              probability: 0.66
 
 - type: entity
   parent: MobSnail
   id: MobSnailInstantDeath
   suffix: Smite
   components:
-  - type: GhostRole
-    mindRoles:
-    - MindRoleGhostRoleFreeAgent
-  - type: MobStateActions
-    actions:
-      Alive:
-      - ActionSmiteNoReq
-      Critical:
-      - ActionCritSuccumb
-      - ActionCritFakeDeath
-      - ActionCritLastWords
-  - type: Godmode
-  - type: MovementAlwaysTouching
+    - type: GhostRole
+      mindRoles:
+        - MindRoleGhostRoleFreeAgent
+    - type: MobStateActions
+      actions:
+        Alive:
+          - ActionSmiteNoReq
+        Critical:
+          - ActionCritSuccumb
+          - ActionCritFakeDeath
+          - ActionCritLastWords
+    - type: Godmode
+    - type: MovementAlwaysTouching
 
 - type: entity
   parent: MobSnail
   id: MobSnailSpeed
   suffix: Speed
   components:
-  - type: GhostRole
-    name: ghost-role-information-snailspeed-name
-    description: ghost-role-information-snailspeed-description
-    rules: ghost-role-information-freeagent-rules
-  - type: Sprite
-    layers:
-    - map: ["enum.DamageStateVisualLayers.Base"]
-      state: spacesnail
-  - type: DamageStateVisuals
-    states:
-      Alive:
-        Base: spacesnail
-      Critical:
-        Base: spacedead
-      Dead:
-        Base: spacedead
-  - type: MovementSpeedModifier
-    baseWalkSpeed : 5 #he go fast, also they cant slip so its probably fine.
-    baseSprintSpeed : 7
-#  - type: ActiveJetpack # I think this will need a custom component to not make tests angry.
-  - type: MovementAlwaysTouching
+    - type: GhostRole
+      name: ghost-role-information-snailspeed-name
+      description: ghost-role-information-snailspeed-description
+      rules: ghost-role-information-freeagent-rules
+    - type: Sprite
+      layers:
+        - map: ["enum.DamageStateVisualLayers.Base"]
+          state: spacesnail
+    - type: DamageStateVisuals
+      states:
+        Alive:
+          Base: spacesnail
+        Critical:
+          Base: spacedead
+        Dead:
+          Base: spacedead
+    - type: MovementSpeedModifier
+      baseWalkSpeed: 5 #he go fast, also they cant slip so its probably fine.
+      baseSprintSpeed: 7
+    #  - type: ActiveJetpack # I think this will need a custom component to not make tests angry.
+    - type: MovementAlwaysTouching
 
 - type: entity
   parent: MobSnail
   id: MobSnailMoth
   name: Snoth
   components:
-  - type: Body
-    prototype: Mothroach
-  - type: GhostRole
-    name: ghost-role-information-snoth-name
-    description: ghost-role-information-snoth-description
-    rules: ghost-role-information-freeagent-rules
-  - type: Sprite
-    layers:
-    - map: ["enum.DamageStateVisualLayers.Base"]
-      state: snoth
-  - type: DamageStateVisuals
-    states:
-      Alive:
-        Base: snoth
-      Critical:
-        Base: snothdead
-      Dead:
-        Base: snothdead
+    - type: Body
+      prototype: Mothroach
+    - type: GhostRole
+      name: ghost-role-information-snoth-name
+      description: ghost-role-information-snoth-description
+      rules: ghost-role-information-freeagent-rules
+    - type: Sprite
+      layers:
+        - map: ["enum.DamageStateVisualLayers.Base"]
+          state: snoth
+    - type: DamageStateVisuals
+      states:
+        Alive:
+          Base: snoth
+        Critical:
+          Base: snothdead
+        Dead:
+          Base: snothdead

+ 2 - 0
Resources/Prototypes/Entities/Mobs/Species/human.yml

@@ -66,6 +66,8 @@
             remains4: ""
             remains5: ""
             remains6: ""
+    - type: STWeight
+      self: 8
     - type: Item
       size: Huge
     - type: Tag

+ 135 - 132
Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml

@@ -4,73 +4,76 @@
   abstract: true
   suffix: Full
   components:
-  - type: Openable
-    sound:
-      collection: bottleOpenSounds #Could use a new sound someday ¯\_(ツ)_/¯
-    closeable: true
-    closeSound:
-      collection: bottleCloseSounds
-  - type: Sealable
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 50
-  - type: PressurizedSolution
-    solution: drink
-  - type: Shakeable
-  - type: Sprite
-    state: icon
-  - type: Item
-    size: Small
-  - type: MeleeWeapon
-    soundNoDamage:
-      path: "/Audio/Effects/Fluids/splat.ogg"
-    damage:
-      types:
-        Blunt: 0
-  - type: Damageable
-    damageContainer: Inorganic
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 20
-      behaviors:
-      - !type:SpillBehavior { }
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]
-        #In future maybe add generic plastic scrap trash/debris
-  - type: TrashOnSolutionEmpty
-    solution: drink
-  - type: DnaSubstanceTrace
+    - type: Openable
+      sound:
+        collection: bottleOpenSounds #Could use a new sound someday ¯\_(ツ)_/¯
+      closeable: true
+      closeSound:
+        collection: bottleCloseSounds
+    - type: Sealable
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 50
+    - type: PressurizedSolution
+      solution: drink
+    - type: Shakeable
+    - type: Sprite
+      state: icon
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: MeleeWeapon
+      soundNoDamage:
+        path: "/Audio/Effects/Fluids/splat.ogg"
+      damage:
+        types:
+          Blunt: 0
+    - type: Damageable
+      damageContainer: Inorganic
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 20
+          behaviors:
+            - !type:SpillBehavior {}
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+              #In future maybe add generic plastic scrap trash/debris
+    - type: TrashOnSolutionEmpty
+      solution: drink
+    - type: DnaSubstanceTrace
 
 - type: entity
   parent: DrinkCartonBaseFull
   id: DrinkCartonBaseLargeFull
   abstract: true
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 100
-  - type: Item
-    size: Normal
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 100
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
 
 - type: entity
   id: DrinkCartonVisualsOpenable
   abstract: true
   components:
-  - type: Appearance
-  - type: GenericVisualizer
-    visuals:
-      enum.OpenableVisuals.Opened:
-        enum.OpenableVisuals.Layer:
-          True: {state: "icon_open"}
-          False: {state: "icon"}
-  - type: Sprite
-    layers:
-      - state: icon
-        map: ["enum.OpenableVisuals.Layer"]
+    - type: Appearance
+    - type: GenericVisualizer
+      visuals:
+        enum.OpenableVisuals.Opened:
+          enum.OpenableVisuals.Layer:
+            True: { state: "icon_open" }
+            False: { state: "icon" }
+    - type: Sprite
+      layers:
+        - state: icon
+          map: ["enum.OpenableVisuals.Layer"]
 
 - type: entity
   parent: [DrinkCartonVisualsOpenable, DrinkCartonBaseFull]
@@ -78,14 +81,14 @@
   name: lime juice
   description: Sweet-sour goodness.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        reagents:
-        - ReagentId: JuiceLime
-          Quantity: 50
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/limejuice.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          reagents:
+            - ReagentId: JuiceLime
+              Quantity: 50
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/limejuice.rsi
 
 - type: entity
   parent: [DrinkCartonVisualsOpenable, DrinkCartonBaseFull]
@@ -93,14 +96,14 @@
   name: orange juice
   description: Full of vitamins and deliciousness!
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        reagents:
-        - ReagentId: JuiceOrange
-          Quantity: 50
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/orangejuice.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          reagents:
+            - ReagentId: JuiceOrange
+              Quantity: 50
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/orangejuice.rsi
 
 - type: entity
   parent: [DrinkCartonVisualsOpenable, DrinkCartonBaseFull]
@@ -108,14 +111,14 @@
   name: tomato juice
   description: Well, at least it LOOKS like tomato juice. You can't tell with all that redness.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        reagents:
-        - ReagentId: JuiceTomato
-          Quantity: 50
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/tomatojuice.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          reagents:
+            - ReagentId: JuiceTomato
+              Quantity: 50
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/tomatojuice.rsi
 
 - type: entity
   parent: [DrinkBottleVisualsOpenable, DrinkBottlePlasticBaseFull]
@@ -123,17 +126,17 @@
   name: coconut water
   description: It's the inside of the coconut that counts.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        reagents:
-        - ReagentId: CoconutWater
-          Quantity: 50
-  - type: Drink
-  - type: Label
-    currentLabel: reagent-name-coconut-water
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/coconutwater.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          reagents:
+            - ReagentId: CoconutWater
+              Quantity: 50
+    - type: Drink
+    - type: Label
+      currentLabel: reagent-name-coconut-water
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/coconutwater.rsi
 
 - type: entity
   parent: [DrinkCartonVisualsOpenable, DrinkCartonBaseFull]
@@ -141,14 +144,14 @@
   name: milk cream
   description: It's cream. Made from milk. What else did you think you'd find in there?
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        reagents:
-        - ReagentId: Cream
-          Quantity: 50
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/cream.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          reagents:
+            - ReagentId: Cream
+              Quantity: 50
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/cream.rsi
 
 - type: entity
   parent: [DrinkCartonVisualsOpenable, DrinkCartonBaseLargeFull]
@@ -156,14 +159,14 @@
   name: milk
   description: An opaque white liquid produced by the mammary glands of mammals.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        reagents:
-        - ReagentId: Milk
-          Quantity: 100
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/milk.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          reagents:
+            - ReagentId: Milk
+              Quantity: 100
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/milk.rsi
 
 - type: entity
   parent: [DrinkCartonVisualsOpenable, DrinkCartonBaseLargeFull]
@@ -171,14 +174,14 @@
   name: soy milk
   description: White and nutritious soy goodness!
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        reagents:
-        - ReagentId: MilkSoy
-          Quantity: 100
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/soymilk.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          reagents:
+            - ReagentId: MilkSoy
+              Quantity: 100
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/soymilk.rsi
 
 - type: entity
   parent: [DrinkCartonVisualsOpenable, DrinkCartonBaseLargeFull]
@@ -186,26 +189,26 @@
   name: oat milk
   description: It's oat milk. Tan and nutritious goodness!
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        reagents:
-        - ReagentId: MilkOat
-          Quantity: 100
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/oatmilk.rsi
-    
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          reagents:
+            - ReagentId: MilkOat
+              Quantity: 100
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/oatmilk.rsi
+
 - type: entity
   parent: [DrinkCartonVisualsOpenable, DrinkCartonBaseFull]
   id: DrinkJuiceLemonCarton
   name: lemon juice
   description: First it's sour, then it's still sour.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        reagents:
-        - ReagentId: JuiceLemon
-          Quantity: 50
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/lemonjuice.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          reagents:
+            - ReagentId: JuiceLemon
+              Quantity: 50
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/lemonjuice.rsi

Diferenças do arquivo suprimidas por serem muito extensas
+ 418 - 414
Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml


+ 420 - 419
Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml

@@ -4,69 +4,69 @@
   id: DrinkCanBaseFull
   abstract: true
   components:
-  - type: Drink
-  - type: Openable
-  - type: Shakeable
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        reagents:
-        - ReagentId: Cola
-          Quantity: 30
-        maxVol: 30
-  - type: MixableSolution
-    solution: drink
-  - type: SolutionTransfer
-    canChangeTransferAmount: true
-    maxTransferAmount: 15
-  - type: UserInterface
-    interfaces:
-      enum.TransferAmountUiKey.Key:
-        type: TransferAmountBoundUserInterface
-  - type: Sprite
-    state: icon
-    layers:
-      - state: icon
-        map: ["enum.OpenableVisuals.Layer"]
-  - type: FitsInDispenser
-    solution: drink
-  - type: DrawableSolution
-    solution: drink
-  - type: RefillableSolution
-    solution: drink
-  - type: DrainableSolution
-    solution: drink
-  - type: PressurizedSolution
-    solution: drink
-  - type: Appearance
-  - type: GenericVisualizer
-    visuals:
-      enum.OpenableVisuals.Opened:
-        enum.OpenableVisuals.Layer:
-          True: {state: "icon_open"}
-          False: {state: "icon"}
-  - type: Spillable
-    solution: drink
-  - type: MeleeWeapon
-    soundNoDamage:
-      path: "/Audio/Effects/Fluids/splat.ogg"
-    damage:
-      types:
-        Blunt: 0
-  - type: Tool
-    qualities:
-    - Rolling
-    speedModifier: 0.25 # its small so takes longer to roll the entire dough flat
-  - type: SpaceGarbage
-  - type: TrashOnSolutionEmpty
-    solution: drink
-  - type: PhysicalComposition
-    materialComposition:
-      Steel: 50 #reduce, reuse, recycle
-  - type: Tag
-    tags:
-    - DrinkCan
-  - type: DnaSubstanceTrace
+    - type: Drink
+    - type: Openable
+    - type: Shakeable
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          reagents:
+            - ReagentId: Cola
+              Quantity: 30
+          maxVol: 30
+    - type: MixableSolution
+      solution: drink
+    - type: SolutionTransfer
+      canChangeTransferAmount: true
+      maxTransferAmount: 15
+    - type: UserInterface
+      interfaces:
+        enum.TransferAmountUiKey.Key:
+          type: TransferAmountBoundUserInterface
+    - type: Sprite
+      state: icon
+      layers:
+        - state: icon
+          map: ["enum.OpenableVisuals.Layer"]
+    - type: FitsInDispenser
+      solution: drink
+    - type: DrawableSolution
+      solution: drink
+    - type: RefillableSolution
+      solution: drink
+    - type: DrainableSolution
+      solution: drink
+    - type: PressurizedSolution
+      solution: drink
+    - type: Appearance
+    - type: GenericVisualizer
+      visuals:
+        enum.OpenableVisuals.Opened:
+          enum.OpenableVisuals.Layer:
+            True: { state: "icon_open" }
+            False: { state: "icon" }
+    - type: Spillable
+      solution: drink
+    - type: MeleeWeapon
+      soundNoDamage:
+        path: "/Audio/Effects/Fluids/splat.ogg"
+      damage:
+        types:
+          Blunt: 0
+    - type: Tool
+      qualities:
+        - Rolling
+      speedModifier: 0.25 # its small so takes longer to roll the entire dough flat
+    - type: SpaceGarbage
+    - type: TrashOnSolutionEmpty
+      solution: drink
+    - type: PhysicalComposition
+      materialComposition:
+        Steel: 50 #reduce, reuse, recycle
+    - type: Tag
+      tags:
+        - DrinkCan
+    - type: DnaSubstanceTrace
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -74,22 +74,22 @@
   name: Space Cola can
   description: A sweet, carbonated soft drink.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: Cola
-          Quantity: 30
-  - type: Tag
-    tags:
-    - Cola
-    - DrinkCan
-    - Recyclable
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/cola.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/cola.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: Cola
+              Quantity: 30
+    - type: Tag
+      tags:
+        - Cola
+        - DrinkCan
+        - Recyclable
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/cola.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/cola.rsi
 
 # created when taking apart an ied
 - type: entity
@@ -97,24 +97,24 @@
   id: DrinkColaCanEmpty
   suffix: empty
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-  - type: Openable
-    opened: true
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/cola.rsi
-    layers:
-    - state: icon_open
-  - type: Item
-    sprite: Objects/Consumable/Drinks/cola.rsi
-  - type: Tag
-    tags:
-    - Cola
-    - DrinkCan
-    - Recyclable
-    - Trash
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+    - type: Openable
+      opened: true
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/cola.rsi
+      layers:
+        - state: icon_open
+    - type: Item
+      sprite: Objects/Consumable/Drinks/cola.rsi
+    - type: Tag
+      tags:
+        - Cola
+        - DrinkCan
+        - Recyclable
+        - Trash
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -122,17 +122,17 @@
   name: iced tea can
   description: A refreshing can of iced tea.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: IcedTea
-          Quantity: 30
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/ice_tea_can.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/ice_tea_can.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: IcedTea
+              Quantity: 30
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/ice_tea_can.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/ice_tea_can.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -140,17 +140,17 @@
   name: Smite can
   description: You wanted ORANGE. It gave you Lemon-Lime.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: LemonLime
-          Quantity: 30
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/lemon-lime.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/lemon-lime.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: LemonLime
+              Quantity: 30
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/lemon-lime.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/lemon-lime.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -158,50 +158,49 @@
   name: Smite Cranberry can
   description: Y'all want a Smite Cranberry? Beloved by administrators everywhere. Drink in moderation. A limited run for the holidays!
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: LemonLimeCranberry
-          Quantity: 30
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/lemon-lime-cranberry.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/lemon-lime-cranberry.rsi
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape: !type:PhysShapeCircle
-          radius: 0.2
-        density: 5
-        mask:
-        - ItemMask
-        restitution: 0.3
-        friction: 0.2
-      projectile:
-        shape:
-          !type:PhysShapeAabb
-          bounds: "-0.1,-0.1,0.1,0.1"
-        hard: false
-        mask:
-        - Impassable
-        - BulletImpassable
-  - type: EmbeddableProjectile
-    sound: /Audio/Weapons/punch1.ogg
-    embedOnThrow: True
-  - type: ThrowingAngle
-    angle: 0
-  - type: LandAtCursor
-  - type: Ammo
-    muzzleFlash: null
-  - type: Projectile
-    deleteOnCollide: false
-    onlyCollideWhenShot: true
-    damage:
-      types:
-        Blunt: 1
-        Cold: 2 # Refreshing
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: LemonLimeCranberry
+              Quantity: 30
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/lemon-lime-cranberry.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/lemon-lime-cranberry.rsi
+    - type: Fixtures
+      fixtures:
+        fix1:
+          shape: !type:PhysShapeCircle
+            radius: 0.2
+          density: 5
+          mask:
+            - ItemMask
+          restitution: 0.3
+          friction: 0.2
+        projectile:
+          shape: !type:PhysShapeAabb
+            bounds: "-0.1,-0.1,0.1,0.1"
+          hard: false
+          mask:
+            - Impassable
+            - BulletImpassable
+    - type: EmbeddableProjectile
+      sound: /Audio/Weapons/punch1.ogg
+      embedOnThrow: True
+    - type: ThrowingAngle
+      angle: 0
+    - type: LandAtCursor
+    - type: Ammo
+      muzzleFlash: null
+    - type: Projectile
+      deleteOnCollide: false
+      onlyCollideWhenShot: true
+      damage:
+        types:
+          Blunt: 1
+          Cold: 2 # Refreshing
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -209,17 +208,17 @@
   name: grape soda can
   description: Sweetened drink with a grape flavor and a deep purple color.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: GrapeSoda
-          Quantity: 30
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/purple_can.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/purple_can.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: GrapeSoda
+              Quantity: 30
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/purple_can.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/purple_can.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -227,20 +226,20 @@
   name: root beer can
   description: Some of that tasty root beer goodness, now in a portable can!
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: RootBeer
-          Quantity: 30
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/rootbeer.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/rootbeer.rsi
-  - type: Tag
-    tags:
-    - Beer
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: RootBeer
+              Quantity: 30
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/rootbeer.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/rootbeer.rsi
+    - type: Tag
+      tags:
+        - Beer
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -248,16 +247,16 @@
   name: soda water can
   description: Soda water. Why not make a scotch and soda?
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: SodaWater
-          Quantity: 30
-  - type: Drink
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/sodawater.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: SodaWater
+              Quantity: 30
+    - type: Drink
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/sodawater.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -265,17 +264,17 @@
   name: Space Solar Wind can
   description: Blows right through you like a solar wind.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: SpaceMountainWind
-          Quantity: 30
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/space_mountain_wind.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/space_mountain_wind.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: SpaceMountainWind
+              Quantity: 30
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/space_mountain_wind.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/space_mountain_wind.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -283,17 +282,17 @@
   name: Space-Up can
   description: Tastes like a hull breach in your mouth.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: SpaceUp
-          Quantity: 30
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/space-up.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/space-up.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: SpaceUp
+              Quantity: 30
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/space-up.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/space-up.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -301,17 +300,17 @@
   name: Sol Dry can
   description: Sweet ginger soda from outer space!
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: SolDry
-          Quantity: 30
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/sol_dry.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/sol_dry.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: SolDry
+              Quantity: 30
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/sol_dry.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/sol_dry.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -319,17 +318,17 @@
   name: Starkist can
   description: The taste of a star in liquid form. And, a bit of tuna...?
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: Starkist
-          Quantity: 30
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/starkist.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/starkist.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: Starkist
+              Quantity: 30
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/starkist.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/starkist.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -337,16 +336,16 @@
   name: tonic water can
   description: Quinine tastes funny, but at least it'll keep that Space Malaria away.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: TonicWater
-          Quantity: 30
-  - type: Drink
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/tonic.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: TonicWater
+              Quantity: 30
+    - type: Drink
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/tonic.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -354,17 +353,17 @@
   name: Fourteen Loko can
   description: The MBO has advised crew members that consumption of Fourteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsibly.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: FourteenLoko
-          Quantity: 30
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/fourteen_loko.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/fourteen_loko.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: FourteenLoko
+              Quantity: 30
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/fourteen_loko.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/fourteen_loko.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -372,18 +371,18 @@
   name: Changeling Sting can
   description: You take a tiny sip and feel a burning sensation...
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: ChangelingSting
-          Quantity: 30
-  - type: Drink
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/changelingsting.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/changelingsting.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: ChangelingSting
+              Quantity: 30
+    - type: Drink
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/changelingsting.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/changelingsting.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -391,18 +390,18 @@
   name: Dr. Gibb can
   description: A delicious blend of 42 different flavours.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: DrGibb
-          Quantity: 30
-  - type: Drink
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/dr_gibb.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/dr_gibb.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: DrGibb
+              Quantity: 30
+    - type: Drink
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/dr_gibb.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/dr_gibb.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -410,25 +409,25 @@
   name: Blood-red Brew can
   description: A home-brewed drink made from the crazed minds at the Syndicate. Not recommended by doctors.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: Stimulants
-          Quantity: 5
-        - ReagentId: NuclearCola
-          Quantity: 20
-        - ReagentId: Ice
-          Quantity: 5
-  - type: Tag
-    tags:
-    - DrinkCan
-    - Recyclable
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/robustnukie.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/robustnukie.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: Stimulants
+              Quantity: 5
+            - ReagentId: NuclearCola
+              Quantity: 20
+            - ReagentId: Ice
+              Quantity: 5
+    - type: Tag
+      tags:
+        - DrinkCan
+        - Recyclable
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/robustnukie.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/robustnukie.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -436,71 +435,73 @@
   name: Red Bool can
   description: A can of Red Bool, with enough caffeine to kill a horse.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: EnergyDrink
-          Quantity: 30
-  - type: Drink
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/energy_drink.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/energy_drink.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: EnergyDrink
+              Quantity: 30
+    - type: Drink
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/energy_drink.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/energy_drink.rsi
 
 - type: entity
   id: DrinkCanPack
   parent: BaseStorageItem
   name: 6pack
   components:
-  - type: Sprite
-    sprite: Objects/Misc/6pack.rsi
-    layers:
-      - state: plastic-thingy
-      - state: 6pack1
-        map: ["6pack1"]
-        visible: false
-      - state: 6pack2
-        map: ["6pack2"]
-        visible: false
-      - state: 6pack3
-        map: ["6pack3"]
-        visible: false
-      - state: 6pack4
-        map: ["6pack4"]
-        visible: false
-      - state: 6pack5
-        map: ["6pack5"]
-        visible: false
-      - state: 6pack6
-        map: ["6pack6"]
-        visible: false
-  - type: Item
-    size: Normal
-  - type: Storage
-    grid:
-    - 0,0,2,3
-    whitelist:
-      tags:
-        - Cola
-    hideStackVisualsWhenClosed: false
-  - type: StorageFill
-    contents:
-      - id: DrinkColaCan
-        amount: 6
-  - type: ItemCounter
-    count:
-      tags: [Cola]
-    composite: true
-    layerStates:
-    - 6pack1
-    - 6pack2
-    - 6pack3
-    - 6pack4
-    - 6pack5
-    - 6pack6
-  - type: Appearance
+    - type: Sprite
+      sprite: Objects/Misc/6pack.rsi
+      layers:
+        - state: plastic-thingy
+        - state: 6pack1
+          map: ["6pack1"]
+          visible: false
+        - state: 6pack2
+          map: ["6pack2"]
+          visible: false
+        - state: 6pack3
+          map: ["6pack3"]
+          visible: false
+        - state: 6pack4
+          map: ["6pack4"]
+          visible: false
+        - state: 6pack5
+          map: ["6pack5"]
+          visible: false
+        - state: 6pack6
+          map: ["6pack6"]
+          visible: false
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: Storage
+      grid:
+        - 0,0,2,3
+      whitelist:
+        tags:
+          - Cola
+      hideStackVisualsWhenClosed: false
+    - type: StorageFill
+      contents:
+        - id: DrinkColaCan
+          amount: 6
+    - type: ItemCounter
+      count:
+        tags: [Cola]
+      composite: true
+      layerStates:
+        - 6pack1
+        - 6pack2
+        - 6pack3
+        - 6pack4
+        - 6pack5
+        - 6pack6
+    - type: Appearance
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -508,18 +509,18 @@
   name: Shambler's Juice can
   description: ~Shake me up some of that Shambler's Juice!~
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: ShamblersJuice
-          Quantity: 30
-  - type: Drink
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/shamblersjuice.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/shamblersjuice.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: ShamblersJuice
+              Quantity: 30
+    - type: Drink
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/shamblersjuice.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/shamblersjuice.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -527,18 +528,18 @@
   name: PWR Game can
   description: The only drink with the PWR that true gamers crave. When a gamer talks about gamerfuel, this is what they're literally referring to.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: PwrGame
-          Quantity: 30
-  - type: Drink
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/pwrgame.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/pwrgame.rsi
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: PwrGame
+              Quantity: 30
+    - type: Drink
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/pwrgame.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/pwrgame.rsi
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -546,21 +547,21 @@
   name: beer can
   description: Small joy, big taste, no worries!
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: Beer
-          Quantity: 30
-  - type: Drink
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/beer_can.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/beer_can.rsi
-  - type: Tag
-    tags:
-    - Beer
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: Beer
+              Quantity: 30
+    - type: Drink
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/beer_can.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/beer_can.rsi
+    - type: Tag
+      tags:
+        - Beer
 
 - type: entity
   parent: DrinkCanBaseFull
@@ -568,18 +569,18 @@
   name: wine can
   description: Your way to forgetting all worries and having fun!
   components:
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: Wine
-          Quantity: 30
-  - type: Drink
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/wine_can.rsi
-  - type: Item
-    sprite: Objects/Consumable/Drinks/wine_can.rsi
-  - type: Tag
-    tags:
-    - Wine
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: Wine
+              Quantity: 30
+    - type: Drink
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/wine_can.rsi
+    - type: Item
+      sprite: Objects/Consumable/Drinks/wine_can.rsi
+    - type: Tag
+      tags:
+        - Wine

+ 146 - 145
Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_fun.yml

@@ -4,42 +4,42 @@
   name: space glue tube
   description: High performance glue intended for maintenance of extremely complex mechanical equipment. DON'T DRINK!
   components:
-  - type: Openable
-    sound:
-      collection: packetOpenSounds
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/glue-tube.rsi
-    layers:
-      - state: icon
-        map: ["enum.OpenableVisuals.Layer"]
-      - state: fill1
-        map: [ "enum.SolutionContainerLayers.Fill" ]
-        visible: false
-      - state: icon-front
-        map: [ "enum.SolutionContainerLayers.Overlay" ]
-  - type: Appearance
-  - type: Glue
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: SpaceGlue
-          Quantity: 30
-  - type: SolutionContainerVisuals
-    maxFillLevels: 6
-    fillBaseName: fill
-  - type: GenericVisualizer
-    visuals:
-      enum.OpenableVisuals.Opened:
-        enum.OpenableVisuals.Layer:
-          True: {state: "icon_open"}
-          False: {state: "icon"}
-  - type: Tag
-    tags:
-      - DrinkSpaceGlue
-  - type: TrashOnSolutionEmpty
-    solution: drink
+    - type: Openable
+      sound:
+        collection: packetOpenSounds
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/glue-tube.rsi
+      layers:
+        - state: icon
+          map: ["enum.OpenableVisuals.Layer"]
+        - state: fill1
+          map: ["enum.SolutionContainerLayers.Fill"]
+          visible: false
+        - state: icon-front
+          map: ["enum.SolutionContainerLayers.Overlay"]
+    - type: Appearance
+    - type: Glue
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: SpaceGlue
+              Quantity: 30
+    - type: SolutionContainerVisuals
+      maxFillLevels: 6
+      fillBaseName: fill
+    - type: GenericVisualizer
+      visuals:
+        enum.OpenableVisuals.Opened:
+          enum.OpenableVisuals.Layer:
+            True: { state: "icon_open" }
+            False: { state: "icon" }
+    - type: Tag
+      tags:
+        - DrinkSpaceGlue
+    - type: TrashOnSolutionEmpty
+      solution: drink
 
 - type: entity
   parent: DrinkBase
@@ -47,87 +47,86 @@
   name: space lube tube
   description: High performance lubricant intended for maintenance of extremely complex mechanical equipment.
   components:
-  - type: Openable
-    sound:
-      collection: packetOpenSounds
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/lube-tube.rsi
-    layers:
-      - state: icon
-        map: ["enum.OpenableVisuals.Layer"]
-      - state: fill1
-        map: [ "enum.SolutionContainerLayers.Fill" ]
-        visible: false
-      - state: icon-front
-        map: [ "enum.SolutionContainerLayers.Overlay" ]
-  - type: Appearance
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 30
-        reagents:
-        - ReagentId: SpaceLube
-          Quantity: 30
-  - type: SolutionContainerVisuals
-    maxFillLevels: 6
-    fillBaseName: fill
-  - type: GenericVisualizer
-    visuals:
-      enum.OpenableVisuals.Opened:
-        enum.OpenableVisuals.Layer:
-          True: {state: "icon_open"}
-          False: {state: "icon"}
-  - type: Lube
-  - type: TrashOnSolutionEmpty
-    solution: drink
-
+    - type: Openable
+      sound:
+        collection: packetOpenSounds
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/lube-tube.rsi
+      layers:
+        - state: icon
+          map: ["enum.OpenableVisuals.Layer"]
+        - state: fill1
+          map: ["enum.SolutionContainerLayers.Fill"]
+          visible: false
+        - state: icon-front
+          map: ["enum.SolutionContainerLayers.Overlay"]
+    - type: Appearance
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 30
+          reagents:
+            - ReagentId: SpaceLube
+              Quantity: 30
+    - type: SolutionContainerVisuals
+      maxFillLevels: 6
+      fillBaseName: fill
+    - type: GenericVisualizer
+      visuals:
+        enum.OpenableVisuals.Opened:
+          enum.OpenableVisuals.Layer:
+            True: { state: "icon_open" }
+            False: { state: "icon" }
+    - type: Lube
+    - type: TrashOnSolutionEmpty
+      solution: drink
 
 # Mopwata
 - type: weightedRandomFillSolution
   id: RandomFillMopwata
   fills:
-  - quantity: 10
-    weight: 5
-    reagents:
-    - Blood
-    - CopperBlood
-    - Slime
-    - Vomit
-  - quantity: 10
-    weight: 4
-    reagents:
-    - Coffee
-    - Tea
-    - Cola
-    - RootBeer
-    - DrGibb
-    - GrapeSoda
-    - Starkist
-    - SpaceUp
-    - SpaceMountainWind
-    - LemonLime
-    - LemonLimeCranberry
-    - PwrGame
-  - quantity: 10
-    weight: 3
-    reagents:
-    - Whiskey
-    - Vodka
-    - Beer
-    - Ale
-    - Rum
-    - Tequila
-    - Absinthe
-  - quantity: 10
-    weight: 1
-    reagents:
-    - SpaceDrugs
-    - Mold
-    - SpaceLube
-    - SpaceGlue
-    - SpaceCleaner
-    - MilkSpoiled
-    - FourteenLoko
+    - quantity: 10
+      weight: 5
+      reagents:
+        - Blood
+        - CopperBlood
+        - Slime
+        - Vomit
+    - quantity: 10
+      weight: 4
+      reagents:
+        - Coffee
+        - Tea
+        - Cola
+        - RootBeer
+        - DrGibb
+        - GrapeSoda
+        - Starkist
+        - SpaceUp
+        - SpaceMountainWind
+        - LemonLime
+        - LemonLimeCranberry
+        - PwrGame
+    - quantity: 10
+      weight: 3
+      reagents:
+        - Whiskey
+        - Vodka
+        - Beer
+        - Ale
+        - Rum
+        - Tequila
+        - Absinthe
+    - quantity: 10
+      weight: 1
+      reagents:
+        - SpaceDrugs
+        - Mold
+        - SpaceLube
+        - SpaceGlue
+        - SpaceCleaner
+        - MilkSpoiled
+        - FourteenLoko
 
 - type: entity
   parent: DrinkBottleGlassBaseFull
@@ -135,36 +134,38 @@
   name: delicious mopwata
   description: A foggy brown bottle with a faded label depicting a mop. It comes full of murky... vintage.
   components:
-  - type: Item
-    size: Small
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 50
-        reagents:
-        - ReagentId: Mopwata
-          Quantity: 40
-  - type: RandomFillSolution
-    solution: drink
-    weightedRandomId: RandomFillMopwata
-  - type: PressurizedSolution
-    solution: drink
-  - type: Shakeable
-  - type: Appearance
-  - type: GenericVisualizer
-    visuals:
-      enum.OpenableVisuals.Opened:
-        enum.OpenableVisuals.Layer:
-          True: {state: "icon_open"}
-          False: {state: "icon_empty"}
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/mopwata.rsi
-    layers:
-      - state: icon
-        map: ["enum.OpenableVisuals.Layer"]
-      - state: fill-1
-        map: ["enum.SolutionContainerLayers.Fill"]
-        visible: false
-  - type: SolutionContainerVisuals
-    maxFillLevels: 5
-    fillBaseName: fill-
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 50
+          reagents:
+            - ReagentId: Mopwata
+              Quantity: 40
+    - type: RandomFillSolution
+      solution: drink
+      weightedRandomId: RandomFillMopwata
+    - type: PressurizedSolution
+      solution: drink
+    - type: Shakeable
+    - type: Appearance
+    - type: GenericVisualizer
+      visuals:
+        enum.OpenableVisuals.Opened:
+          enum.OpenableVisuals.Layer:
+            True: { state: "icon_open" }
+            False: { state: "icon_empty" }
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/mopwata.rsi
+      layers:
+        - state: icon
+          map: ["enum.OpenableVisuals.Layer"]
+        - state: fill-1
+          map: ["enum.SolutionContainerLayers.Fill"]
+          visible: false
+    - type: SolutionContainerVisuals
+      maxFillLevels: 5
+      fillBaseName: fill-

+ 178 - 195
Resources/Prototypes/Entities/Objects/Consumable/Drinks/trash_drinks.yml

@@ -7,76 +7,77 @@
   description: An empty bottle.
   suffix: Empty
   components:
-  - type: Sprite
-    state: icon
-  - type: Item
-    size: Normal
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 100
-  - type: SolutionTransfer
-    canChangeTransferAmount: true
-    maxTransferAmount: 5
-  - type: Drink
-  - type: MeleeWeapon
-    soundNoDamage:
-      path: "/Audio/Effects/Fluids/splat.ogg"
-    damage:
-      types:
-        Blunt: 0
-  - type: MixableSolution
-    solution: drink
-  - type: Spillable
-    solution: drink
-  - type: FitsInDispenser
-    solution: drink
-  - type: DrawableSolution
-    solution: drink
-  - type: RefillableSolution
-    solution: drink
-  - type: DrainableSolution
-    solution: drink
-  - type: UserInterface
-    interfaces:
-      enum.TransferAmountUiKey.Key:
-        type: TransferAmountBoundUserInterface
-  - type: DamageOnLand
-    damage:
-      types:
-        Blunt: 5
-  - type: DamageOtherOnHit
-    damage:
-      types:
-        Blunt: 4
-  - type: Damageable
-    damageContainer: Inorganic
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 5
-      behaviors:
-      - !type:PlaySoundBehavior
-        sound:
-          collection: GlassBreak
-      - !type:SpillBehavior { }
-      - !type:SpawnEntitiesBehavior
-        spawn:
-          BrokenBottle:
-            min: 1
-            max: 1
-        transferForensics: true
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]
-  - type: Tag
-    tags:
-    - Trash
-  - type: PhysicalComposition
-    materialComposition:
-      Glass: 100
-  - type: SpaceGarbage
-  - type: DnaSubstanceTrace
+    - type: Sprite
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 100
+    - type: SolutionTransfer
+      canChangeTransferAmount: true
+      maxTransferAmount: 5
+    - type: Drink
+    - type: MeleeWeapon
+      soundNoDamage:
+        path: "/Audio/Effects/Fluids/splat.ogg"
+      damage:
+        types:
+          Blunt: 0
+    - type: MixableSolution
+      solution: drink
+    - type: Spillable
+      solution: drink
+    - type: FitsInDispenser
+      solution: drink
+    - type: DrawableSolution
+      solution: drink
+    - type: RefillableSolution
+      solution: drink
+    - type: DrainableSolution
+      solution: drink
+    - type: UserInterface
+      interfaces:
+        enum.TransferAmountUiKey.Key:
+          type: TransferAmountBoundUserInterface
+    - type: DamageOnLand
+      damage:
+        types:
+          Blunt: 5
+    - type: DamageOtherOnHit
+      damage:
+        types:
+          Blunt: 4
+    - type: Damageable
+      damageContainer: Inorganic
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 5
+          behaviors:
+            - !type:PlaySoundBehavior
+              sound:
+                collection: GlassBreak
+            - !type:SpillBehavior {}
+            - !type:SpawnEntitiesBehavior
+              spawn:
+                BrokenBottle:
+                  min: 1
+                  max: 1
+              transferForensics: true
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+    - type: Tag
+      tags:
+        - Trash
+    - type: PhysicalComposition
+      materialComposition:
+        Glass: 100
+    - type: SpaceGarbage
+    - type: DnaSubstanceTrace
 
 - type: entity
   name: base empty bottle
@@ -84,12 +85,14 @@
   parent: DrinkBottleBaseEmpty
   abstract: true
   components:
-  - type: Item
-    size: Small
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 50
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 50
 
 - type: entity
   name: base empty carton
@@ -99,50 +102,49 @@
   description: An empty carton.
   suffix: Empty
   components:
-  - type: Sprite
-    state: icon
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 50
-  - type: MixableSolution
-    solution: drink
-  - type: SolutionTransfer
-    canChangeTransferAmount: true
-    maxTransferAmount: 5
-  - type: Drink
-  - type: Spillable
-    solution: drink
-  - type: FitsInDispenser
-    solution: drink
-  - type: DrawableSolution
-    solution: drink
-  - type: RefillableSolution
-    solution: drink
-  - type: DrainableSolution
-    solution: drink
-  - type: UserInterface
-    interfaces:
-      enum.TransferAmountUiKey.Key:
-        type: TransferAmountBoundUserInterface
-  - type: Damageable
-    damageContainer: Inorganic
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 20
-      behaviors:
-      - !type:SpillBehavior { }
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]
-  - type: Tag
-    tags:
-    - Trash
-  - type: PhysicalComposition
-    materialComposition:
-      Cardboard: 20
-  - type: SpaceGarbage
+    - type: Sprite
+      state: icon
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 50
+    - type: MixableSolution
+      solution: drink
+    - type: SolutionTransfer
+      canChangeTransferAmount: true
+      maxTransferAmount: 5
+    - type: Drink
+    - type: Spillable
+      solution: drink
+    - type: FitsInDispenser
+      solution: drink
+    - type: DrawableSolution
+      solution: drink
+    - type: RefillableSolution
+      solution: drink
+    - type: DrainableSolution
+      solution: drink
+    - type: UserInterface
+      interfaces:
+        enum.TransferAmountUiKey.Key:
+          type: TransferAmountBoundUserInterface
+    - type: Damageable
+      damageContainer: Inorganic
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 20
+          behaviors:
+            - !type:SpillBehavior {}
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+    - type: Tag
+      tags:
+        - Trash
+    - type: PhysicalComposition
+      materialComposition:
+        Cardboard: 20
+    - type: SpaceGarbage
 
 - type: entity
   name: base empty bottle
@@ -150,12 +152,14 @@
   parent: DrinkCartonBaseEmpty
   abstract: true
   components:
-  - type: Item
-    size: Normal
-  - type: SolutionContainerManager
-    solutions:
-      drink:
-        maxVol: 100
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: SolutionContainerManager
+      solutions:
+        drink:
+          maxVol: 100
 
 # Containers
 - type: entity
@@ -163,210 +167,189 @@
   parent: DrinkBottleBaseEmpty
   id: DrinkBottleAbsinthe
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/absinthebottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/absinthebottle_empty.rsi
 
 - type: entity
   name: alcohol bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottleAlcoClear
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/alco-clear.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/alco-clear.rsi
 
 - type: entity
   name: ale bottle
   parent: DrinkBottleBaseSmallEmpty
   id: DrinkBottleAle
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/alebottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/alebottle_empty.rsi
 
 - type: entity
   name: beer bottle
   parent: DrinkBottleBaseSmallEmpty
   id: DrinkBottleBeer
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/beer_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/beer_empty.rsi
 
 - type: entity
   name: cognac bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottleCognac
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/cognacbottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/cognacbottle_empty.rsi
 
 - type: entity
   name: Griffeater gin bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottleGin
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/ginbottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/ginbottle_empty.rsi
 
 - type: entity
   name: gildlager bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottleGildlager
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/gildlagerbottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/gildlagerbottle_empty.rsi
 
 - type: entity
   name: coffee liqueur bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottleCoffeeLiqueur
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/coffeeliqueurbottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/coffeeliqueurbottle_empty.rsi
 
 - type: entity
   name: nt cahors bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottleNTCahors
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/ntcahors_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/ntcahors_empty.rsi
 
 - type: entity
   name: patron bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottlePatron
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/patronbottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/patronbottle_empty.rsi
 
 - type: entity
   name: poison wine bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottlePoisonWine
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/pwinebottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/pwinebottle_empty.rsi
 
 - type: entity
   name: rum bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottleRum
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/rumbottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/rumbottle_empty.rsi
 
 - type: entity
   name: tequila bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottleTequila
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/tequillabottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/tequillabottle_empty.rsi
 
 - type: entity
   name: vermouth bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottleVermouth
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/vermouthbottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/vermouthbottle_empty.rsi
 
 - type: entity
   name: vodka bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottleVodka
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/vodkabottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/vodkabottle_empty.rsi
 
 - type: entity
   name: whiskey bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottleWhiskey
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/whiskeybottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/whiskeybottle_empty.rsi
 
 - type: entity
   name: wine bottle
   parent: DrinkBottleBaseEmpty
   id: DrinkBottleWine
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/TrashDrinks/winebottle_empty.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/TrashDrinks/winebottle_empty.rsi
 
 - type: entity
   name: lime juice carton
   parent: DrinkCartonBaseEmpty
   id: DrinkCartonLime
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/limejuice.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/limejuice.rsi
 
 - type: entity
   name: orange juice carton
   parent: DrinkCartonBaseEmpty
   id: DrinkCartonOrange
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/orangejuice.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/orangejuice.rsi
 
 - type: entity
   name: tomato juice carton
   parent: DrinkCartonBaseEmpty
   id: DrinkCartonTomato
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/tomatojuice.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/tomatojuice.rsi
 
 - type: entity
   name: milk cream carton
   parent: DrinkCartonBaseEmpty
   id: DrinkCartonCream
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/cream.rsi
-
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/cream.rsi
 
 - type: entity
   name: milk carton
   parent: DrinkCartonBaseLargeEmpty
   id: DrinkCartonMilk
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/milk.rsi
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/milk.rsi
 
 - type: entity
   name: soy milk carton
   parent: DrinkCartonBaseLargeEmpty
   id: DrinkCartonSoyMilk
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/soymilk.rsi
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/soymilk.rsi
 
 - type: entity
   name: oat milk carton
   parent: DrinkCartonBaseLargeEmpty
   id: DrinkCartonOatMilk
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Drinks/oatmilk.rsi
+    - type: Sprite
+      sprite: Objects/Consumable/Drinks/oatmilk.rsi

Diferenças do arquivo suprimidas por serem muito extensas
+ 423 - 421
Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml


Diferenças do arquivo suprimidas por serem muito extensas
+ 386 - 382
Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml


+ 247 - 245
Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml

@@ -5,22 +5,24 @@
   id: FoodDonkpocketBase
   abstract: true
   components:
-  - type: Food
-  - type: Sprite
-    sprite: Objects/Consumable/Food/Baked/donkpocket.rsi
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 3
-  - type: Item
-    size: Tiny
-  - type: Tag
-    tags:
-    - DonkPocket
-    - Meat
+    - type: Food
+    - type: Sprite
+      sprite: Objects/Consumable/Food/Baked/donkpocket.rsi
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 3
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+    - type: Tag
+      tags:
+        - DonkPocket
+        - Meat
 
 # Donkpocket
 
@@ -33,13 +35,13 @@
   id: FoodDonkpocket
   description: The food of choice for the seasoned traitor.
   components:
-  - type: FlavorProfile
-    flavors:
-      - bread
-      - meaty
-      - cheap
-  - type: Sprite
-    state: plain
+    - type: FlavorProfile
+      flavors:
+        - bread
+        - meaty
+        - cheap
+    - type: Sprite
+      state: plain
 
 - type: entity
   name: warm donk-pocket
@@ -47,20 +49,20 @@
   id: FoodDonkpocketWarm
   description: The heated food of choice for the seasoned traitor.
   components:
-  - type: FlavorProfile
-    flavors:
-      - bread
-      - meaty
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 8
-        - ReagentId: Omnizine
-          Quantity: 2
+    - type: FlavorProfile
+      flavors:
+        - bread
+        - meaty
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 8
+            - ReagentId: Omnizine
+              Quantity: 2
 
 - type: entity
   name: dank-pocket
@@ -68,18 +70,18 @@
   id: FoodDonkpocketDank
   description: The food of choice for the seasoned botanist.
   components:
-  - type: FlavorProfile
-    flavors:
-      - leafy
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 5
-  - type: Sprite
-    state: dank
+    - type: FlavorProfile
+      flavors:
+        - leafy
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 5
+    - type: Sprite
+      state: dank
 
 - type: entity
   name: warm dank-pocket
@@ -87,18 +89,18 @@
   id: FoodDonkpocketDankWarm
   description: The heated food of choice for the seasoned botanist.
   components:
-  - type: FlavorProfile
-    flavors:
-      - leafy
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-        - ReagentId: Omnizine
-          Quantity: 4
+    - type: FlavorProfile
+      flavors:
+        - leafy
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+            - ReagentId: Omnizine
+              Quantity: 4
 
 - type: entity
   name: spicy-pocket
@@ -106,13 +108,13 @@
   id: FoodDonkpocketSpicy
   description: The classic snack food, now with a heat-activated spicy flair.
   components:
-  - type: FlavorProfile
-    flavors:
-      - spicy
-      - meaty
-      - cheap
-  - type: Sprite
-    state: plain
+    - type: FlavorProfile
+      flavors:
+        - spicy
+        - meaty
+        - cheap
+    - type: Sprite
+      state: plain
 
 - type: entity
   name: warm spicy-pocket
@@ -120,21 +122,21 @@
   id: FoodDonkpocketSpicyWarm
   description: The classic snack food, now maybe a bit too spicy.
   components:
-  - type: FlavorProfile
-    flavors:
-      - spicy
-      - meaty
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-        - ReagentId: Omnizine
-          Quantity: 2
-  - type: Sprite
-    state: spicy
+    - type: FlavorProfile
+      flavors:
+        - spicy
+        - meaty
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+            - ReagentId: Omnizine
+              Quantity: 2
+    - type: Sprite
+      state: spicy
 
 - type: entity
   name: teriyaki-pocket
@@ -142,13 +144,13 @@
   id: FoodDonkpocketTeriyaki
   description: An East Asian take on the classic stationside snack.
   components:
-  - type: FlavorProfile
-    flavors:
-      - meaty
-      - sweet
-      - cheap
-  - type: Sprite
-    state: teriyaki
+    - type: FlavorProfile
+      flavors:
+        - meaty
+        - sweet
+        - cheap
+    - type: Sprite
+      state: teriyaki
 
 - type: entity
   name: warm teriyaki-pocket
@@ -156,19 +158,19 @@
   id: FoodDonkpocketTeriyakiWarm
   description: An East Asian take on the classic stationside snack, now steamy and warm.
   components:
-  - type: FlavorProfile
-    flavors:
-      - meaty
-      - sweet
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-        - ReagentId: Omnizine
-          Quantity: 2
+    - type: FlavorProfile
+      flavors:
+        - meaty
+        - sweet
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+            - ReagentId: Omnizine
+              Quantity: 2
 
 - type: entity
   name: pizza-pocket
@@ -176,20 +178,20 @@
   id: FoodDonkpocketPizza
   description: Delicious, cheesy and surprisingly filling.
   components:
-  - type: FlavorProfile
-    flavors:
-      - bread
-      - cheesy
-      - tomato
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-  - type: Sprite
-    state: pizza
+    - type: FlavorProfile
+      flavors:
+        - bread
+        - cheesy
+        - tomato
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+    - type: Sprite
+      state: pizza
 
 - type: entity
   name: warm pizza-pocket
@@ -197,20 +199,20 @@
   id: FoodDonkpocketPizzaWarm
   description: Cheese filling really hits the spot when warm.
   components:
-  - type: FlavorProfile
-    flavors:
-      - bread
-      - cheesy
-      - tomato
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 15
-        - ReagentId: Omnizine
-          Quantity: 2
+    - type: FlavorProfile
+      flavors:
+        - bread
+        - cheesy
+        - tomato
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 15
+            - ReagentId: Omnizine
+              Quantity: 2
 
 - type: entity
   name: honk-pocket
@@ -218,20 +220,20 @@
   id: FoodDonkpocketHonk
   description: The award-winning donk-pocket that won the hearts of clowns and humans alike.
   components:
-  - type: FlavorProfile
-    flavors:
-      - funny
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 5
-        - ReagentId: Omnizine
-          Quantity: 2
-  - type: Sprite
-    state: banana
+    - type: FlavorProfile
+      flavors:
+        - funny
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 5
+            - ReagentId: Omnizine
+              Quantity: 2
+    - type: Sprite
+      state: banana
 
 - type: entity
   name: warm honk-pocket
@@ -239,18 +241,18 @@
   id: FoodDonkpocketHonkWarm
   description: The award-winning donk-pocket, now warm and toasty.
   components:
-  - type: FlavorProfile
-    flavors:
-      - funny
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-        - ReagentId: Omnizine
-          Quantity: 2
+    - type: FlavorProfile
+      flavors:
+        - funny
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+            - ReagentId: Omnizine
+              Quantity: 2
 
 - type: entity
   name: berry-pocket
@@ -258,18 +260,18 @@
   id: FoodDonkpocketBerry
   description: A relentlessly sweet donk-pocket. Made with 100% artificial flavoring.
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 5
-  - type: Sprite
-    state: berry
+    - type: FlavorProfile
+      flavors:
+        - sweet
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 5
+    - type: Sprite
+      state: berry
 
 - type: entity
   name: warm berry-pocket
@@ -277,20 +279,20 @@
   id: FoodDonkpocketBerryWarm
   description: A relentlessly sweet donk-pocket, now warm and delicious.
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-        - ReagentId: Omnizine
-          Quantity: 2
-        - ReagentId: Sugar
-          Quantity: 2
+    - type: FlavorProfile
+      flavors:
+        - sweet
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+            - ReagentId: Omnizine
+              Quantity: 2
+            - ReagentId: Sugar
+              Quantity: 2
 
 - type: entity
   name: stonk-pocket
@@ -298,36 +300,36 @@
   id: FoodDonkpocketStonk
   description: Tasty, but a sad reminder of the great crash of '24.
   components:
-  - type: FlavorProfile
-    flavors:
-      - profits
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 5
-  - type: Sprite
-    state: stonk
+    - type: FlavorProfile
+      flavors:
+        - profits
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 5
+    - type: Sprite
+      state: stonk
 
 - type: entity
   name: warm stonk-pocket
   parent: FoodDonkpocketStonk
   id: FoodDonkpocketStonkWarm
   components:
-  - type: FlavorProfile
-    flavors:
-      - profits
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-        - ReagentId: Omnizine
-          Quantity: 2
+    - type: FlavorProfile
+      flavors:
+        - profits
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+            - ReagentId: Omnizine
+              Quantity: 2
 
 - type: entity
   name: carp-pocket
@@ -335,36 +337,36 @@
   id: FoodDonkpocketCarp
   description: A long-lost edition of donk pocket, made specifically for hard-working salvagers.
   components:
-  - type: FlavorProfile
-    flavors:
-    - cheap
-    - fishops
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 5
-  - type: Sprite
-    state: carp
+    - type: FlavorProfile
+      flavors:
+        - cheap
+        - fishops
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 5
+    - type: Sprite
+      state: carp
 
 - type: entity
   name: warm carp-pocket
   parent: FoodDonkpocketCarp
   id: FoodDonkpocketCarpWarm
   components:
-  - type: FlavorProfile
-    flavors:
-    - cheap
-    - fishops
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-        - ReagentId: Omnizine
-          Quantity: 2
+    - type: FlavorProfile
+      flavors:
+        - cheap
+        - fishops
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+            - ReagentId: Omnizine
+              Quantity: 2
 
 - type: entity
   name: dink-pocket
@@ -372,17 +374,17 @@
   id: FoodDonkpocketDink
   description: An off-brand lizard donk-pocket, filled with pickled carrot and wrapped with seaweed. Best eaten cold, or even better, not eaten at all.
   components:
-  - type: FlavorProfile
-    flavors:
-      - cold
-      - cheap
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 2
-        - ReagentId: JuiceCarrot
-          Quantity: 1
-  - type: Sprite
-    state: dink
+    - type: FlavorProfile
+      flavors:
+        - cold
+        - cheap
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 2
+            - ReagentId: JuiceCarrot
+              Quantity: 1
+    - type: Sprite
+      state: dink

Diferenças do arquivo suprimidas por serem muito extensas
+ 418 - 414
Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml


+ 357 - 355
Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml

@@ -6,30 +6,30 @@
   id: FoodPieBase
   abstract: true
   components:
-  - type: Item
-    storedRotation: -90
-  - type: FlavorProfile
-    flavors:
-      - sweet
-  - type: Sprite
-    sprite: Objects/Consumable/Food/Baked/pie.rsi
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 20
-        reagents: #Most of these are this with slight variations, not worth changing until we have the rest of the reagents
-        - ReagentId: Nutriment
-          Quantity: 11
-        - ReagentId: Vitamin
-          Quantity: 5
-  - type: Food #All pies here made with a pie tin; unless you're some kind of savage, you're probably not destroying this when you eat or slice the pie!
-    trash:
-    - FoodPlateTin
-  - type: SliceableFood
-    count: 4
-  - type: Tag
-    tags:
-    - Pie
+    - type: Item
+      storedRotation: -90
+    - type: FlavorProfile
+      flavors:
+        - sweet
+    - type: Sprite
+      sprite: Objects/Consumable/Food/Baked/pie.rsi
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 20
+          reagents: #Most of these are this with slight variations, not worth changing until we have the rest of the reagents
+            - ReagentId: Nutriment
+              Quantity: 11
+            - ReagentId: Vitamin
+              Quantity: 5
+    - type: Food #All pies here made with a pie tin; unless you're some kind of savage, you're probably not destroying this when you eat or slice the pie!
+      trash:
+        - FoodPlateTin
+    - type: SliceableFood
+      count: 4
+    - type: Tag
+      tags:
+        - Pie
 
 - type: entity
   parent: FoodInjectableBase # Not sliceable
@@ -37,26 +37,28 @@
   abstract: true
   description: A slice of pie. Tasty!
   components:
-  - type: Item
-    size: Tiny
-  - type: FlavorProfile
-    flavors:
-      - sweet
-  - type: Sprite
-    sprite: Objects/Consumable/Food/Baked/pie.rsi
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 6
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 1.2
-        - ReagentId: Vitamin
-          Quantity: 1
-  - type: Tag
-    tags:
-    - Pie
-    - Slice
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+    - type: FlavorProfile
+      flavors:
+        - sweet
+    - type: Sprite
+      sprite: Objects/Consumable/Food/Baked/pie.rsi
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 6
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 1.2
+            - ReagentId: Vitamin
+              Quantity: 1
+    - type: Tag
+      tags:
+        - Pie
+        - Slice
 
 # Pie
 
@@ -66,40 +68,40 @@
   id: FoodPieApple
   description: A pie containing sweet, sweet love... or apple.
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-      - apple
-  - type: Sprite
-    layers:
-    - state: tin
-    - state: apple
-  - type: SliceableFood
-    slice: FoodPieAppleSlice
-  - type: Tag
-    tags:
-    - Fruit
-    - Pie
+    - type: FlavorProfile
+      flavors:
+        - sweet
+        - apple
+    - type: Sprite
+      layers:
+        - state: tin
+        - state: apple
+    - type: SliceableFood
+      slice: FoodPieAppleSlice
+    - type: Tag
+      tags:
+        - Fruit
+        - Pie
 
 - type: entity
   name: slice of apple pie
   parent: FoodPieSliceBase
   id: FoodPieAppleSlice
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-      - apple
-  - type: Sprite
-    layers:
-    - state: plain-slice
-    - state: alpha-slice-filling
-      color: orange
-  - type: Tag
-    tags:
-    - Fruit
-    - Pie
-    - Slice
+    - type: FlavorProfile
+      flavors:
+        - sweet
+        - apple
+    - type: Sprite
+      layers:
+        - state: plain-slice
+        - state: alpha-slice-filling
+          color: orange
+    - type: Tag
+      tags:
+        - Fruit
+        - Pie
+        - Slice
 # Tastes like pie, apple.
 
 - type: entity
@@ -108,16 +110,16 @@
   id: FoodPieBaklava
   description: A delightful healthy snack made of nut layers with thin bread.
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-      - nutty
-  - type: Sprite
-    layers:
-    - state: tin
-    - state: baklava
-  - type: SliceableFood
-    slice: FoodPieBaklavaSlice
+    - type: FlavorProfile
+      flavors:
+        - sweet
+        - nutty
+    - type: Sprite
+      layers:
+        - state: tin
+        - state: baklava
+    - type: SliceableFood
+      slice: FoodPieBaklavaSlice
 
 - type: entity
   name: slice of baklava
@@ -125,12 +127,12 @@
   id: FoodPieBaklavaSlice
   description: A portion of a delightful healthy snack made of nut layers with thin bread.
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-      - nutty
-  - type: Sprite
-    state: baklava-slice
+    - type: FlavorProfile
+      flavors:
+        - sweet
+        - nutty
+    - type: Sprite
+      state: baklava-slice
 # Tastes like pie, nuts.
 
 - type: entity
@@ -139,40 +141,40 @@
   id: FoodPieBananaCream
   description: Just like back home, on clown planet! HONK!
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-      - banana
-      - creamy
-  - type: Sprite
-    layers:
-    - state: tin
-    - state: plain
-  - type: CreamPie
-  - type: ThrowingAngle
-    angle: 180
-  - type: LandAtCursor
-  - type: ContainerContainer
-    containers:
-      payloadSlot: !type:ContainerSlot
-  - type: ItemSlots
-    slots:
-      payloadSlot:
-        whitelist:
-          components:
-          - OnUseTimerTrigger
-        insertSound:
-          path: /Audio/Weapons/Guns/Empty/empty.ogg
-        ejectSound:
-          path: /Audio/Weapons/Guns/Empty/empty.ogg
-        swap: false
-        disableEject: true
-  - type: Tag
-    tags:
-    - Fruit
-    - Pie
-  - type: SliceableFood
-    slice: FoodPieBananaCreamSlice
+    - type: FlavorProfile
+      flavors:
+        - sweet
+        - banana
+        - creamy
+    - type: Sprite
+      layers:
+        - state: tin
+        - state: plain
+    - type: CreamPie
+    - type: ThrowingAngle
+      angle: 180
+    - type: LandAtCursor
+    - type: ContainerContainer
+      containers:
+        payloadSlot: !type:ContainerSlot
+    - type: ItemSlots
+      slots:
+        payloadSlot:
+          whitelist:
+            components:
+              - OnUseTimerTrigger
+          insertSound:
+            path: /Audio/Weapons/Guns/Empty/empty.ogg
+          ejectSound:
+            path: /Audio/Weapons/Guns/Empty/empty.ogg
+          swap: false
+          disableEject: true
+    - type: Tag
+      tags:
+        - Fruit
+        - Pie
+    - type: SliceableFood
+      slice: FoodPieBananaCreamSlice
 
 - type: entity
   name: slice of banana cream pie
@@ -180,18 +182,18 @@
   id: FoodPieBananaCreamSlice
   description: Just like back home, on clown planet! HONK!
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-      - banana
-      - creamy
-  - type: Sprite
-    state: bananapie-slice
-  - type: Tag
-    tags:
-    - Fruit
-    - Pie
-    - Slice
+    - type: FlavorProfile
+      flavors:
+        - sweet
+        - banana
+        - creamy
+    - type: Sprite
+      state: bananapie-slice
+    - type: Tag
+      tags:
+        - Fruit
+        - Pie
+        - Slice
 # Tastes like pie, cream, banana.
 
 - type: entity
@@ -200,41 +202,41 @@
   id: FoodPieClafoutis
   description: No black birds, this is a good sign.
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-      - berry
-  - type: Sprite
-    layers:
-    - state: tin
-      color: pink
-    - state: berryclafoutis
-  - type: SliceableFood
-    slice: FoodPieClafoutisSlice
-  - type: Tag
-    tags:
-    - Fruit
-    - Pie
+    - type: FlavorProfile
+      flavors:
+        - sweet
+        - berry
+    - type: Sprite
+      layers:
+        - state: tin
+          color: pink
+        - state: berryclafoutis
+    - type: SliceableFood
+      slice: FoodPieClafoutisSlice
+    - type: Tag
+      tags:
+        - Fruit
+        - Pie
 
 - type: entity
   name: slice of berry clafoutis
   parent: FoodPieSliceBase
   id: FoodPieClafoutisSlice
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-      - berry
-  - type: Sprite
-    layers:
-    - state: plain-slice
-    - state: alpha-slice-filling
-      color: pink
-  - type: Tag
-    tags:
-    - Fruit
-    - Pie
-    - Slice
+    - type: FlavorProfile
+      flavors:
+        - sweet
+        - berry
+    - type: Sprite
+      layers:
+        - state: plain-slice
+        - state: alpha-slice-filling
+          color: pink
+    - type: Tag
+      tags:
+        - Fruit
+        - Pie
+        - Slice
 # Tastes like pie, blackberries.
 
 - type: entity
@@ -243,38 +245,38 @@
   id: FoodPieCherry
   description: Tastes good enough to make a grown man cry.
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-  - type: Sprite
-    layers:
-    - state: tin
-    - state: cherry
-  - type: SliceableFood
-    slice: FoodPieCherrySlice
-  - type: Tag
-    tags:
-    - Fruit
-    - Pie
+    - type: FlavorProfile
+      flavors:
+        - sweet
+    - type: Sprite
+      layers:
+        - state: tin
+        - state: cherry
+    - type: SliceableFood
+      slice: FoodPieCherrySlice
+    - type: Tag
+      tags:
+        - Fruit
+        - Pie
 
 - type: entity
   name: slice of cherry pie
   parent: FoodPieSliceBase
   id: FoodPieCherrySlice
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-  - type: Sprite
-    layers:
-    - state: plain-slice
-    - state: alpha-slice-filling
-      color: red
-  - type: Tag
-    tags:
-    - Fruit
-    - Pie
-    - Slice
+    - type: FlavorProfile
+      flavors:
+        - sweet
+    - type: Sprite
+      layers:
+        - state: plain-slice
+        - state: alpha-slice-filling
+          color: red
+    - type: Tag
+      tags:
+        - Fruit
+        - Pie
+        - Slice
 # Tastes like pie, cherries.
 
 - type: entity
@@ -283,38 +285,38 @@
   id: FoodPieMeat
   description: An old barber recipe, very delicious!
   components:
-  - type: FlavorProfile
-    flavors:
-      - meaty
-  - type: Sprite
-    layers:
-    - state: tin
-    - state: meat
-  - type: SliceableFood
-    slice: FoodPieMeatSlice
-  - type: Tag
-    tags:
-    - Meat
-    - Pie
+    - type: FlavorProfile
+      flavors:
+        - meaty
+    - type: Sprite
+      layers:
+        - state: tin
+        - state: meat
+    - type: SliceableFood
+      slice: FoodPieMeatSlice
+    - type: Tag
+      tags:
+        - Meat
+        - Pie
 
 - type: entity
   name: slice of meat pie
   parent: FoodPieSliceBase
   id: FoodPieMeatSlice
   components:
-  - type: FlavorProfile
-    flavors:
-      - meaty
-  - type: Sprite
-    layers:
-    - state: plain-slice
-    - state: alpha-slice-filling
-      color: brown
-  - type: Tag
-    tags:
-    - Meat
-    - Pie
-    - Slice
+    - type: FlavorProfile
+      flavors:
+        - meaty
+    - type: Sprite
+      layers:
+        - state: plain-slice
+        - state: alpha-slice-filling
+          color: brown
+    - type: Tag
+      tags:
+        - Meat
+        - Pie
+        - Slice
 # Tastes like pie, meat.
 
 - type: entity
@@ -323,76 +325,76 @@
   id: FoodPiePumpkin
   description: Someone should turn this into a latte!
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-      - pumpkin
-  - type: Sprite
-    layers:
-    - state: tin
-    - state: pumpkin
-  - type: SliceableFood
-    slice: FoodPiePumpkinSlice
-  - type: Tag
-    tags:
-    - Pie
+    - type: FlavorProfile
+      flavors:
+        - sweet
+        - pumpkin
+    - type: Sprite
+      layers:
+        - state: tin
+        - state: pumpkin
+    - type: SliceableFood
+      slice: FoodPiePumpkinSlice
+    - type: Tag
+      tags:
+        - Pie
 
 - type: entity
   name: slice of pumpkin pie
   parent: FoodPieSliceBase
   id: FoodPiePumpkinSlice
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-      - pumpkin
-  - type: Sprite
-    layers:
-    - state: pumpkin-slice
-  - type: Tag
-    tags:
-    - Pie
-    - Slice
+    - type: FlavorProfile
+      flavors:
+        - sweet
+        - pumpkin
+    - type: Sprite
+      layers:
+        - state: pumpkin-slice
+    - type: Tag
+      tags:
+        - Pie
+        - Slice
 
 - type: entity
   name: xeno pie
   parent: FoodPieBase
   id: FoodPieXeno
   components:
-  - type: FlavorProfile
-    flavors:
-      - meaty
-      - acid
-  - type: Sprite
-    layers:
-    - state: tin
-    - state: xeno
-  - type: SliceableFood
-    slice: FoodPieXenoSlice
-  - type: Tag
-    tags:
-    - Meat
-    - Pie
+    - type: FlavorProfile
+      flavors:
+        - meaty
+        - acid
+    - type: Sprite
+      layers:
+        - state: tin
+        - state: xeno
+    - type: SliceableFood
+      slice: FoodPieXenoSlice
+    - type: Tag
+      tags:
+        - Meat
+        - Pie
 
 - type: entity
   name: slice of xeno pie
   parent: FoodPieSliceBase
   id: FoodPieXenoSlice
   components:
-  - type: FlavorProfile
-    flavors:
-      - meaty
-      - acid
-  - type: Sprite
-    layers:
-    - state: plain-slice
-    - state: alpha-slice-filling
-      color: green
-  - type: Tag
-    tags:
-    - Meat
-    - Pie
-    - Slice
+    - type: FlavorProfile
+      flavors:
+        - meaty
+        - acid
+    - type: Sprite
+      layers:
+        - state: plain-slice
+        - state: alpha-slice-filling
+          color: green
+    - type: Tag
+      tags:
+        - Meat
+        - Pie
+        - Slice
 # Tastes like pie, meat, acid.
 
 - type: entity
@@ -401,60 +403,60 @@
   id: FoodPieFrosty
   description: Tastes like blue and cold.
   components:
-  - type: FlavorProfile
-    flavors:
-      - cold
-  - type: Sprite
-    layers:
-    - state: tin
-    - state: frosty
-  - type: SliceableFood
-    slice: FoodPieFrostySlice
+    - type: FlavorProfile
+      flavors:
+        - cold
+    - type: Sprite
+      layers:
+        - state: tin
+        - state: frosty
+    - type: SliceableFood
+      slice: FoodPieFrostySlice
 
 - type: entity
   name: slice of frosty pie
   parent: FoodPieSliceBase
   id: FoodPieFrostySlice
   components:
-  - type: FlavorProfile
-    flavors:
-      - cold
-  - type: Sprite
-    layers:
-    - state: plain-slice
-    - state: alpha-slice-filling
-      color: blue
+    - type: FlavorProfile
+      flavors:
+        - cold
+    - type: Sprite
+      layers:
+        - state: plain-slice
+        - state: alpha-slice-filling
+          color: blue
 # Tastes like pie, mint.
 
 - type: entity
   name: mime tart
   parent: FoodPieBase
   id: FoodTartMime
-  description: "\"      \""
+  description: '"      "'
   components:
-  - type: FlavorProfile
-    flavors:
-      - nothing
-  - type: Sprite
-    state: mime
-  - type: Item
-    heldPrefix: mime
-  - type: SliceableFood
-    slice: FoodTartMimeSlice
+    - type: FlavorProfile
+      flavors:
+        - nothing
+    - type: Sprite
+      state: mime
+    - type: Item
+      heldPrefix: mime
+    - type: SliceableFood
+      slice: FoodTartMimeSlice
 
 - type: entity
   name: slice of mime tart
   parent: FoodPieSliceBase
   id: FoodTartMimeSlice
   components:
-  - type: FlavorProfile
-    flavors:
-      - nothing
-  - type: Sprite
-    layers:
-    - state: mimetart-slice
-  - type: Item
-    heldPrefix: mime
+    - type: FlavorProfile
+      flavors:
+        - nothing
+    - type: Sprite
+      layers:
+        - state: mimetart-slice
+    - type: Item
+      heldPrefix: mime
 # Tastes like nothing.
 
 # No Slice
@@ -465,22 +467,22 @@
   id: FoodPieAmanita
   description: Sweet and tasty poison pie.
   components:
-  - type: FlavorProfile
-    flavors:
-      - mushroom
-  - type: Sprite
-    state: amanita
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 17
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 6
-        - ReagentId: Amatoxin
-          Quantity: 3
-        - ReagentId: Vitamin
-          Quantity: 4
+    - type: FlavorProfile
+      flavors:
+        - mushroom
+    - type: Sprite
+      state: amanita
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 17
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 6
+            - ReagentId: Amatoxin
+              Quantity: 3
+            - ReagentId: Vitamin
+              Quantity: 4
 # Tastes like pie, mushrooms.
 
 - type: entity
@@ -489,11 +491,11 @@
   id: FoodPiePlump
   description: I bet you love stuff made out of plump helmets!
   components:
-  - type: FlavorProfile
-    flavors:
-      - mushroom
-  - type: Sprite
-    state: plump
+    - type: FlavorProfile
+      flavors:
+        - mushroom
+    - type: Sprite
+      state: plump
 # Tastes like pie, mushrooms.
 
 # Tart
@@ -504,15 +506,15 @@
   id: FoodTartGrape
   description: A tasty dessert that reminds you of the wine you didn't make.
   components:
-  - type: FlavorProfile
-    flavors:
-      - sweet
-  - type: Sprite
-    state: grape
-  - type: Tag
-    tags:
-    - Fruit
-    - Pie
+    - type: FlavorProfile
+      flavors:
+        - sweet
+    - type: Sprite
+      state: grape
+    - type: Tag
+      tags:
+        - Fruit
+        - Pie
 # Tastes like tart, grape.
 
 - type: entity
@@ -521,15 +523,15 @@
   id: FoodTartGapple
   description: A tasty dessert that won't make it through a metal detector.
   components:
-  - type: FlavorProfile
-    flavors:
-      - apple
-  - type: Sprite
-    state: gapple
-  - type: Tag
-    tags:
-    - Fruit
-    - Pie
+    - type: FlavorProfile
+      flavors:
+        - apple
+    - type: Sprite
+      state: gapple
+    - type: Tag
+      tags:
+        - Fruit
+        - Pie
 # Tastes like tart, apple, expensive metal.
 
 - type: entity
@@ -538,18 +540,18 @@
   id: FoodTartCoco
   description: A tasty dessert made of chocolate, with a liquid core.
   components:
-  - type: FlavorProfile
-    flavors:
-      - chocolate
-  - type: Sprite
-    state: cocolava
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 26
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 15
-        - ReagentId: Theobromine
-          Quantity: 2
+    - type: FlavorProfile
+      flavors:
+        - chocolate
+    - type: Sprite
+      state: cocolava
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 26
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 15
+            - ReagentId: Theobromine
+              Quantity: 2
 # Tastes like tart, dark chocolate.

Diferenças do arquivo suprimidas por serem muito extensas
+ 446 - 443
Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml


Diferenças do arquivo suprimidas por serem muito extensas
+ 456 - 458
Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml


+ 430 - 427
Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/condiments.yml

@@ -5,19 +5,19 @@
   id: BaseFoodCondiment
   abstract: true
   components:
-  - type: DrawableSolution
-    solution: food
-  - type: DrainableSolution
-    solution: food
-  - type: Sprite
-    sprite: Objects/Consumable/Food/condiments.rsi
-  - type: Icon
-    sprite: Objects/Consumable/Food/condiments.rsi
-  - type: TrashOnSolutionEmpty
-    solution: food
-  - type: SpaceGarbage
-  - type: StaticPrice
-    price: 0
+    - type: DrawableSolution
+      solution: food
+    - type: DrainableSolution
+      solution: food
+    - type: Sprite
+      sprite: Objects/Consumable/Food/condiments.rsi
+    - type: Icon
+      sprite: Objects/Consumable/Food/condiments.rsi
+    - type: TrashOnSolutionEmpty
+      solution: food
+    - type: SpaceGarbage
+    - type: StaticPrice
+      price: 0
 
 # Packets
 
@@ -28,47 +28,49 @@
   abstract: true
   description: A small plastic pack with condiments to put on your food.
   components:
-  - type: Item
-    size: Tiny
-  - type: Drink
-    solution: food
-  - type: Openable
-    sound:
-      collection: packetOpenSounds
-  # Since this one is closed, the only way to insert liquid is with a syringe.
-  - type: InjectableSolution
-    solution: food
-  # Note NOT refillable.
-  # It be a shame if it turned out ALL drinks were ALWAYS refillable.... ffs.
-  # Well its fixed now, but I want to share my pain.
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-  - type: SolutionTransfer
-    maxTransferAmount: 10
-  - type: Sprite
-    layers:
-      - state: packet-trans-2
-        map: ["enum.SolutionContainerLayers.Fill"]
-        visible: true
-      - state: packet-layer
-        map: ["enum.OpenableVisuals.Layer"]
-      - state: packet-label
-  - type: GenericVisualizer
-    visuals:
-      enum.OpenableVisuals.Opened:
-        enum.OpenableVisuals.Layer:
-          True: {state: "packet-layer-open"}
-          False: {state: "packet-layer"}
-  - type: Icon
-    state: packet-empty
-  - type: PhysicalComposition
-    materialComposition:
-      Plastic: 50
-  - type: Tag
-    tags:
-      - Packet
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+    - type: Drink
+      solution: food
+    - type: Openable
+      sound:
+        collection: packetOpenSounds
+    # Since this one is closed, the only way to insert liquid is with a syringe.
+    - type: InjectableSolution
+      solution: food
+    # Note NOT refillable.
+    # It be a shame if it turned out ALL drinks were ALWAYS refillable.... ffs.
+    # Well its fixed now, but I want to share my pain.
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+    - type: SolutionTransfer
+      maxTransferAmount: 10
+    - type: Sprite
+      layers:
+        - state: packet-trans-2
+          map: ["enum.SolutionContainerLayers.Fill"]
+          visible: true
+        - state: packet-layer
+          map: ["enum.OpenableVisuals.Layer"]
+        - state: packet-label
+    - type: GenericVisualizer
+      visuals:
+        enum.OpenableVisuals.Opened:
+          enum.OpenableVisuals.Layer:
+            True: { state: "packet-layer-open" }
+            False: { state: "packet-layer" }
+    - type: Icon
+      state: packet-empty
+    - type: PhysicalComposition
+      materialComposition:
+        Plastic: 50
+    - type: Tag
+      tags:
+        - Packet
 
 - type: entity
   parent: BaseFoodCondimentPacket
@@ -76,27 +78,27 @@
   name: Astrotame
   description: The sweetness of a thousand sugars but none of the calories.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-        reagents:
-        - ReagentId: Astrotame
-          Quantity: 10
-  - type: Sprite
-    layers:
-      - state: packet-trans-2
-        map: ["enum.SolutionContainerLayers.Fill"]
-        visible: true
-      - state: packet-layer
-        map: ["enum.OpenableVisuals.Layer"]
-      - state: packet-label-a
-  - type: Icon
-    state: packet-astrotame
-  - type: Appearance
-  - type: SolutionContainerVisuals
-    maxFillLevels: 2
-    fillBaseName: packet-trans-
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+          reagents:
+            - ReagentId: Astrotame
+              Quantity: 10
+    - type: Sprite
+      layers:
+        - state: packet-trans-2
+          map: ["enum.SolutionContainerLayers.Fill"]
+          visible: true
+        - state: packet-layer
+          map: ["enum.OpenableVisuals.Layer"]
+        - state: packet-label-a
+    - type: Icon
+      state: packet-astrotame
+    - type: Appearance
+    - type: SolutionContainerVisuals
+      maxFillLevels: 2
+      fillBaseName: packet-trans-
 
 - type: entity
   parent: BaseFoodCondimentPacket
@@ -104,19 +106,19 @@
   name: BBQ sauce
   description: Hand wipes not included.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-        reagents:
-        - ReagentId: BbqSauce
-          Quantity: 10
-  - type: Icon
-    state: packet-bbq
-  - type: Appearance
-  - type: SolutionContainerVisuals
-    maxFillLevels: 2
-    fillBaseName: packet-trans-
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+          reagents:
+            - ReagentId: BbqSauce
+              Quantity: 10
+    - type: Icon
+      state: packet-bbq
+    - type: Appearance
+    - type: SolutionContainerVisuals
+      maxFillLevels: 2
+      fillBaseName: packet-trans-
 
 - type: entity
   parent: BaseFoodCondimentPacket
@@ -124,19 +126,19 @@
   name: corn oil
   description: Corn oil. A delicious oil used in cooking. Made from corn.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-        reagents:
-        - ReagentId: Cornoil
-          Quantity: 10
-  - type: Icon
-    state: packet-cornoil
-  - type: Appearance
-  - type: SolutionContainerVisuals
-    maxFillLevels: 2
-    fillBaseName: packet-trans-
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+          reagents:
+            - ReagentId: Cornoil
+              Quantity: 10
+    - type: Icon
+      state: packet-cornoil
+    - type: Appearance
+    - type: SolutionContainerVisuals
+      maxFillLevels: 2
+      fillBaseName: packet-trans-
 
 - type: entity
   parent: BaseFoodCondimentPacket
@@ -144,19 +146,19 @@
   name: coldsauce
   description: Coldsauce. Leaves the tongue numb in its passage.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-        reagents:
-        - ReagentId: Coldsauce
-          Quantity: 10
-  - type: Icon
-    state: packet-frostoil
-  - type: Appearance
-  - type: SolutionContainerVisuals
-    maxFillLevels: 2
-    fillBaseName: packet-trans-
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+          reagents:
+            - ReagentId: Coldsauce
+              Quantity: 10
+    - type: Icon
+      state: packet-frostoil
+    - type: Appearance
+    - type: SolutionContainerVisuals
+      maxFillLevels: 2
+      fillBaseName: packet-trans-
 
 - type: entity
   parent: BaseFoodCondimentPacket
@@ -164,19 +166,19 @@
   name: horseradish sauce
   description: A packet of smelly horseradish sauce.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-        reagents:
-        - ReagentId: HorseradishSauce
-          Quantity: 10
-  - type: Icon
-    state: packet-greygoo
-  - type: Appearance
-  - type: SolutionContainerVisuals
-    maxFillLevels: 2
-    fillBaseName: packet-solid-
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+          reagents:
+            - ReagentId: HorseradishSauce
+              Quantity: 10
+    - type: Icon
+      state: packet-greygoo
+    - type: Appearance
+    - type: SolutionContainerVisuals
+      maxFillLevels: 2
+      fillBaseName: packet-solid-
 
 - type: entity
   parent: BaseFoodCondimentPacket
@@ -184,19 +186,19 @@
   name: hotsauce
   description: You can almost TASTE the stomach ulcers now!
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 10
-        reagents:
-        - ReagentId: Hotsauce
-          Quantity: 10
-  - type: Icon
-    state: packet-hotsauce
-  - type: Appearance
-  - type: SolutionContainerVisuals
-    maxFillLevels: 2
-    fillBaseName: packet-trans-
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 10
+          reagents:
+            - ReagentId: Hotsauce
+              Quantity: 10
+    - type: Icon
+      state: packet-hotsauce
+    - type: Appearance
+    - type: SolutionContainerVisuals
+      maxFillLevels: 2
+      fillBaseName: packet-trans-
 
 - type: entity
   parent: BaseFoodCondimentPacket
@@ -204,19 +206,19 @@
   name: ketchup
   description: You feel more American already.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Ketchup
-          Quantity: 10
-  - type: Sprite
-  - type: Icon
-    state: packet-ketchup
-  - type: Appearance
-  - type: SolutionContainerVisuals
-    maxFillLevels: 2
-    fillBaseName: packet-solid-
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Ketchup
+              Quantity: 10
+    - type: Sprite
+    - type: Icon
+      state: packet-ketchup
+    - type: Appearance
+    - type: SolutionContainerVisuals
+      maxFillLevels: 2
+      fillBaseName: packet-solid-
 
 - type: entity
   parent: BaseFoodCondimentPacket
@@ -224,18 +226,18 @@
   name: mustard
   description: A condiment made from the ground-up seeds of the Mustard plant.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Mustard
-          Quantity: 10
-  - type: Icon
-    state: packet-mustard
-  - type: Appearance
-  - type: SolutionContainerVisuals
-    maxFillLevels: 2
-    fillBaseName: packet-solid-
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Mustard
+              Quantity: 10
+    - type: Icon
+      state: packet-mustard
+    - type: Appearance
+    - type: SolutionContainerVisuals
+      maxFillLevels: 2
+      fillBaseName: packet-solid-
 
 - type: entity
   parent: BaseFoodCondimentPacket
@@ -243,18 +245,18 @@
   name: black pepper
   description: Often used to flavor food or make people sneeze.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Blackpepper
-          Quantity: 10
-  - type: Icon
-    state: packet-pepper
-  - type: Appearance
-  - type: SolutionContainerVisuals
-    maxFillLevels: 2
-    fillBaseName: packet-solid-
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Blackpepper
+              Quantity: 10
+    - type: Icon
+      state: packet-pepper
+    - type: Appearance
+    - type: SolutionContainerVisuals
+      maxFillLevels: 2
+      fillBaseName: packet-solid-
 
 - type: entity
   parent: BaseFoodCondimentPacket
@@ -262,27 +264,27 @@
   name: salt
   description: Salt. From space oceans, presumably.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: TableSalt
-          Quantity: 10
-  - type: Sprite
-    layers:
-      - state: packet-solid-2
-        map: ["enum.SolutionContainerLayers.Fill"]
-        visible: true
-      - state: packet-layer
-        map: ["enum.OpenableVisuals.Layer"]
-      - state: packet-label
-        color: black
-  - type: Icon
-    state: packet-salt
-  - type: Appearance
-  - type: SolutionContainerVisuals
-    maxFillLevels: 2
-    fillBaseName: packet-solid-
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: TableSalt
+              Quantity: 10
+    - type: Sprite
+      layers:
+        - state: packet-solid-2
+          map: ["enum.SolutionContainerLayers.Fill"]
+          visible: true
+        - state: packet-layer
+          map: ["enum.OpenableVisuals.Layer"]
+        - state: packet-label
+          color: black
+    - type: Icon
+      state: packet-salt
+    - type: Appearance
+    - type: SolutionContainerVisuals
+      maxFillLevels: 2
+      fillBaseName: packet-solid-
 
 - type: entity
   parent: BaseFoodCondimentPacket
@@ -290,18 +292,18 @@
   name: soy sauce
   description: A salty soy-based flavoring.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Soysauce
-          Quantity: 10
-  - type: Icon
-    state: packet-soysauce
-  - type: Appearance
-  - type: SolutionContainerVisuals
-    maxFillLevels: 2
-    fillBaseName: packet-solid-
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Soysauce
+              Quantity: 10
+    - type: Icon
+      state: packet-soysauce
+    - type: Appearance
+    - type: SolutionContainerVisuals
+      maxFillLevels: 2
+      fillBaseName: packet-solid-
 
 - type: entity
   parent: BaseFoodCondimentPacket
@@ -309,18 +311,18 @@
   name: sugar
   description: Tasty spacey sugar!
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Sugar
-          Quantity: 10
-  - type: Icon
-    state: packet-sugar
-  - type: Appearance
-  - type: SolutionContainerVisuals
-    maxFillLevels: 2
-    fillBaseName: packet-solid-
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Sugar
+              Quantity: 10
+    - type: Icon
+      state: packet-sugar
+    - type: Appearance
+    - type: SolutionContainerVisuals
+      maxFillLevels: 2
+      fillBaseName: packet-solid-
 
 # Bottles
 
@@ -331,39 +333,39 @@
   name: condiment bottle
   description: A thin glass bottle used to store condiments.
   components:
-  - type: Drink
-    solution: food
-  - type: Openable
-    sound:
-      collection: pop
-    closeable: true
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 30
-  - type: RefillableSolution
-    solution: food
-  - type: Spillable
-    solution: food
-  - type: SolutionTransfer
-    canChangeTransferAmount: true
-    minTransferAmount: 5
-    maxTransferAmount: 30
-  - type: Sprite
-    state: bottle-empty
-  - type: Appearance
-  - type: SolutionContainerVisuals
-    maxFillLevels: 6
-    fillBaseName: bottle-alpha-
-  - type: GenericVisualizer
-    visuals:
-      enum.OpenableVisuals.Opened:
-        enum.OpenableVisuals.Layer:
-          True: {state: "bottle-open"}
-          False: {state: "bottle-empty"}
-  - type: PhysicalComposition
-    materialComposition:
-      Glass: 50
+    - type: Drink
+      solution: food
+    - type: Openable
+      sound:
+        collection: pop
+      closeable: true
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 30
+    - type: RefillableSolution
+      solution: food
+    - type: Spillable
+      solution: food
+    - type: SolutionTransfer
+      canChangeTransferAmount: true
+      minTransferAmount: 5
+      maxTransferAmount: 30
+    - type: Sprite
+      state: bottle-empty
+    - type: Appearance
+    - type: SolutionContainerVisuals
+      maxFillLevels: 6
+      fillBaseName: bottle-alpha-
+    - type: GenericVisualizer
+      visuals:
+        enum.OpenableVisuals.Opened:
+          enum.OpenableVisuals.Layer:
+            True: { state: "bottle-open" }
+            False: { state: "bottle-empty" }
+    - type: PhysicalComposition
+      materialComposition:
+        Glass: 50
 
 - type: entity
   parent: BaseFoodCondimentBottle
@@ -371,25 +373,25 @@
   name: coldsauce bottle
   description: Leaves the tongue numb in its passage.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Coldsauce
-          Quantity: 30
-  - type: Sprite
-    layers:
-    - state: bottle-empty
-      map: ["enum.OpenableVisuals.Layer"]
-    - state: label-c
-    - state: bottle-alpha-6
-      map: ["enum.SolutionContainerLayers.Fill"]
-      visible: true
-  - type: Icon
-    state: bottle-coldsauce
-  - type: Tag
-    tags:
-      - Coldsauce
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Coldsauce
+              Quantity: 30
+    - type: Sprite
+      layers:
+        - state: bottle-empty
+          map: ["enum.OpenableVisuals.Layer"]
+        - state: label-c
+        - state: bottle-alpha-6
+          map: ["enum.SolutionContainerLayers.Fill"]
+          visible: true
+    - type: Icon
+      state: bottle-coldsauce
+    - type: Tag
+      tags:
+        - Coldsauce
 
 - type: entity
   parent: BaseFoodCondimentBottle
@@ -397,25 +399,25 @@
   name: universal enzyme
   description: Used in cooking various dishes.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Enzyme
-          Quantity: 30
-  - type: Sprite
-    layers:
-    - state: bottle-empty
-      map: ["enum.OpenableVisuals.Layer"]
-    - state: label-e
-    - state: bottle-alpha-6
-      map: ["enum.SolutionContainerLayers.Fill"]
-      visible: true
-  - type: Icon
-    state: bottle-enzyme
-  - type: Tag
-    tags:
-      - Enzyme
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Enzyme
+              Quantity: 30
+    - type: Sprite
+      layers:
+        - state: bottle-empty
+          map: ["enum.OpenableVisuals.Layer"]
+        - state: label-e
+        - state: bottle-alpha-6
+          map: ["enum.SolutionContainerLayers.Fill"]
+          visible: true
+    - type: Icon
+      state: bottle-enzyme
+    - type: Tag
+      tags:
+        - Enzyme
 
 - type: entity
   parent: BaseFoodCondimentBottle
@@ -423,22 +425,22 @@
   name: vinegar bottle
   description: Used in cooking to enhance flavor.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Vinegar
-          Quantity: 30
-  - type: Sprite
-    layers:
-    - state: bottle-empty
-      map: ["enum.OpenableVisuals.Layer"]
-    - state: label-v
-    - state: bottle-alpha-6
-      map: ["enum.SolutionContainerLayers.Fill"]
-      visible: true
-  - type: Icon
-    state: bottle-vinegar
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Vinegar
+              Quantity: 30
+    - type: Sprite
+      layers:
+        - state: bottle-empty
+          map: ["enum.OpenableVisuals.Layer"]
+        - state: label-v
+        - state: bottle-alpha-6
+          map: ["enum.SolutionContainerLayers.Fill"]
+          visible: true
+    - type: Icon
+      state: bottle-vinegar
 
 - type: entity
   parent: BaseFoodCondimentBottle
@@ -446,25 +448,25 @@
   name: hotsauce bottle
   description: You can almost TASTE the stomach ulcers now!
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Hotsauce
-          Quantity: 30
-  - type: Sprite
-    layers:
-    - state: bottle-empty
-      map: ["enum.OpenableVisuals.Layer"]
-    - state: label-h
-    - state: bottle-alpha-6
-      map: ["enum.SolutionContainerLayers.Fill"]
-      visible: true
-  - type: Icon
-    state: bottle-hotsauce
-  - type: Tag
-    tags:
-      - Hotsauce
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Hotsauce
+              Quantity: 30
+    - type: Sprite
+      layers:
+        - state: bottle-empty
+          map: ["enum.OpenableVisuals.Layer"]
+        - state: label-h
+        - state: bottle-alpha-6
+          map: ["enum.SolutionContainerLayers.Fill"]
+          visible: true
+    - type: Icon
+      state: bottle-hotsauce
+    - type: Tag
+      tags:
+        - Hotsauce
 
 - type: entity
   parent: BaseFoodCondimentBottle
@@ -472,25 +474,25 @@
   name: ketchup bottle
   description: You feel more American already.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Ketchup
-          Quantity: 30
-  - type: Sprite
-    layers:
-    - state: bottle-empty
-      map: ["enum.OpenableVisuals.Layer"]
-    - state: label-k
-    - state: bottle-alpha-6
-      map: ["enum.SolutionContainerLayers.Fill"]
-      visible: true
-  - type: Icon
-    state: bottle-ketchup
-  - type: Tag
-    tags:
-      - Ketchup
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Ketchup
+              Quantity: 30
+    - type: Sprite
+      layers:
+        - state: bottle-empty
+          map: ["enum.OpenableVisuals.Layer"]
+        - state: label-k
+        - state: bottle-alpha-6
+          map: ["enum.SolutionContainerLayers.Fill"]
+          visible: true
+    - type: Icon
+      state: bottle-ketchup
+    - type: Tag
+      tags:
+        - Ketchup
 
 - type: entity
   parent: BaseFoodCondimentBottle
@@ -498,26 +500,26 @@
   name: BBQ sauce bottle
   description: Hand wipes not included.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: BbqSauce
-          Quantity: 30
-  - type: Sprite
-    layers:
-    - state: bottle-empty
-      map: ["enum.OpenableVisuals.Layer"]
-    - state: label-b
-    - state: bottle-alpha-6
-      map: ["enum.SolutionContainerLayers.Fill"]
-      visible: true
-  # So there's no error.
-  - type: Icon
-    state: bottle-ketchup
-  - type: Tag
-    tags:
-      - BBQsauce
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: BbqSauce
+              Quantity: 30
+    - type: Sprite
+      layers:
+        - state: bottle-empty
+          map: ["enum.OpenableVisuals.Layer"]
+        - state: label-b
+        - state: bottle-alpha-6
+          map: ["enum.SolutionContainerLayers.Fill"]
+          visible: true
+    # So there's no error.
+    - type: Icon
+      state: bottle-ketchup
+    - type: Tag
+      tags:
+        - BBQsauce
 
 # Shakers
 
@@ -528,40 +530,41 @@
   name: empty shaker
   description: A shaker used to store and dispense spices.
   components:
-  - type: Item
-    size: Tiny
-  - type: Drink
-    solution: food
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 20
-  - type: SolutionTransfer
-    canChangeTransferAmount: true
-    minTransferAmount: 5
-    maxTransferAmount: 20
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 5
-      behaviors:
-      - !type:PlaySoundBehavior
-        sound:
-          collection: GlassBreak
-      - !type:SpillBehavior { }
-      - !type:SpawnEntitiesBehavior
-        spawn:
-          ShardGlass:
-            min: 1
-            max: 1
-        transferForensics: true
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]
-  - type: Sprite
-    state: shaker-empty
-  - type: RefillableSolution
-    solution: food
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+    - type: Drink
+      solution: food
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 20
+    - type: SolutionTransfer
+      canChangeTransferAmount: true
+      minTransferAmount: 5
+      maxTransferAmount: 20
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 5
+          behaviors:
+            - !type:PlaySoundBehavior
+              sound:
+                collection: GlassBreak
+            - !type:SpillBehavior {}
+            - !type:SpawnEntitiesBehavior
+              spawn:
+                ShardGlass:
+                  min: 1
+                  max: 1
+              transferForensics: true
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+    - type: Sprite
+      state: shaker-empty
+    - type: RefillableSolution
+      solution: food
 
 - type: entity
   parent: BaseFoodShaker
@@ -569,19 +572,19 @@
   name: salt shaker
   description: Salt. From space oceans, presumably.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: TableSalt
-          Quantity: 20
-  - type: Sprite
-    state: shaker-salt
-  - type: Icon
-    state: shaker-salt
-  - type: Tag
-    tags:
-      - SaltShaker
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: TableSalt
+              Quantity: 20
+    - type: Sprite
+      state: shaker-salt
+    - type: Icon
+      state: shaker-salt
+    - type: Tag
+      tags:
+        - SaltShaker
 
 - type: entity
   parent: BaseFoodShaker
@@ -589,16 +592,16 @@
   name: pepper shaker
   description: Often used to flavor food or make people sneeze.
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        reagents:
-        - ReagentId: Blackpepper
-          Quantity: 20
-  - type: Sprite
-    state: shaker-pepper
-  - type: Icon
-    state: shaker-pepper
-  - type: Tag
-    tags:
-      - PepperShaker
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          reagents:
+            - ReagentId: Blackpepper
+              Quantity: 20
+    - type: Sprite
+      state: shaker-pepper
+    - type: Icon
+      state: shaker-pepper
+    - type: Tag
+      tags:
+        - PepperShaker

+ 137 - 135
Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml

@@ -12,48 +12,47 @@
   id: FoodPlate
   description: A large plate, excellent for bread.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Food/plates.rsi
-    state: plate
-  - type: Item
-    shape:
-    - 0,0,1,0
-    storedOffset: 0,-6
-  - type: DamageOnLand
-    damage:
-      types:
-        Blunt: 5
-  - type: DamageOtherOnHit
-    damage:
-      types:
-        Blunt: 5
-  - type: Damageable
-    damageContainer: Inorganic
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 5
-      behaviors:
-      - !type:PlaySoundBehavior
-        sound:
-          collection: GlassBreak
-          params:
-            volume: -8
-      - !type:SpawnEntitiesBehavior
-        spawn:
-          FoodPlateTrash:
-            min: 1
-            max: 1
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]
-  - type: Tag
-    tags:
-    - Trash
-  - type: PhysicalComposition
-    materialComposition:
-      Glass: 60
-  - type: SpaceGarbage
+    - type: Sprite
+      sprite: Objects/Consumable/Food/plates.rsi
+      state: plate
+    - type: Item
+      shape:
+        - 0,0,1,0
+      storedOffset: 0,-6
+    - type: DamageOnLand
+      damage:
+        types:
+          Blunt: 5
+    - type: DamageOtherOnHit
+      damage:
+        types:
+          Blunt: 5
+    - type: Damageable
+      damageContainer: Inorganic
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 5
+          behaviors:
+            - !type:PlaySoundBehavior
+              sound:
+                collection: GlassBreak
+                params:
+                  volume: -8
+            - !type:SpawnEntitiesBehavior
+              spawn:
+                FoodPlateTrash:
+                  min: 1
+                  max: 1
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+    - type: Tag
+      tags:
+        - Trash
+    - type: PhysicalComposition
+      materialComposition:
+        Glass: 60
+    - type: SpaceGarbage
 
 - type: entity
   name: broken plate
@@ -61,17 +60,17 @@
   id: FoodPlateTrash
   description: A broken plate. Useless.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Food/plates.rsi
-    state: plate-trash
-  - type: Item
-    shape:
-    - 0,0,1,0
-    storedOffset: 0,-6
-  - type: Tag
-    tags:
-    - Trash
-  - type: SpaceGarbage
+    - type: Sprite
+      sprite: Objects/Consumable/Food/plates.rsi
+      state: plate-trash
+    - type: Item
+      shape:
+        - 0,0,1,0
+      storedOffset: 0,-6
+    - type: Tag
+      tags:
+        - Trash
+    - type: SpaceGarbage
 
 # Small Plate
 
@@ -81,43 +80,42 @@
   id: FoodPlateSmall
   description: A small plate. Delicate.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Food/plates.rsi
-    state: plate-small
-  - type: Item
-    storedOffset: 0,-3
-# Needs the full thing because inherting is dumb sometimes.
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 5
-      behaviors:
-      - !type:PlaySoundBehavior
-        sound:
-          collection: GlassBreak
-          params:
-            volume: -8
-      - !type:SpawnEntitiesBehavior
-        spawn:
-          FoodPlateSmallTrash:
-            min: 1
-            max: 1
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]
-  - type: PhysicalComposition
-    materialComposition:
-      Glass: 30
+    - type: Sprite
+      sprite: Objects/Consumable/Food/plates.rsi
+      state: plate-small
+    - type: Item
+      storedOffset: 0,-3
+    # Needs the full thing because inherting is dumb sometimes.
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 5
+          behaviors:
+            - !type:PlaySoundBehavior
+              sound:
+                collection: GlassBreak
+                params:
+                  volume: -8
+            - !type:SpawnEntitiesBehavior
+              spawn:
+                FoodPlateSmallTrash:
+                  min: 1
+                  max: 1
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+    - type: PhysicalComposition
+      materialComposition:
+        Glass: 30
 
 - type: entity
   parent: FoodPlateTrash
   id: FoodPlateSmallTrash
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Food/plates.rsi
-    state: plate-small-trash
-  - type: Item
-    storedOffset: 0,-3
+    - type: Sprite
+      sprite: Objects/Consumable/Food/plates.rsi
+      state: plate-small-trash
+    - type: Item
+      storedOffset: 0,-3
 
 # Plastic Plate
 
@@ -127,16 +125,16 @@
   id: FoodPlatePlastic
   description: A large blue plastic plate, excellent for a birthday cake.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Food/plates.rsi
-    state: plate-plastic
-  - type: Item
-    shape:
-    - 0,0,1,0
-    storedOffset: 0,-6
-  - type: Tag
-    tags:
-    - Trash
+    - type: Sprite
+      sprite: Objects/Consumable/Food/plates.rsi
+      state: plate-plastic
+    - type: Item
+      shape:
+        - 0,0,1,0
+      storedOffset: 0,-6
+    - type: Tag
+      tags:
+        - Trash
 
 - type: entity
   name: plastic plate
@@ -144,16 +142,16 @@
   id: FoodPlateSmallPlastic
   description: A blue plastic plate, excellent for slices of birthday cake.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Food/plates.rsi
-    state: plate-small-plastic
-  - type: Item
-    shape:
-    - 0,0,1,0
-    storedOffset: 0,-3
-  - type: Tag
-    tags:
-    - Trash
+    - type: Sprite
+      sprite: Objects/Consumable/Food/plates.rsi
+      state: plate-small-plastic
+    - type: Item
+      shape:
+        - 0,0,1,0
+      storedOffset: 0,-3
+    - type: Tag
+      tags:
+        - Trash
 
 # Pie Tin
 
@@ -163,21 +161,23 @@
   id: FoodPlateTin
   description: A cheap foil tin for pies.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Food/plates.rsi
-    state: tin
-  - type: Item
-    size: Small
-    shape:
-    - 0,0,1,0
-    storedOffset: 0,-3
-  - type: Tag
-    tags:
-    - Trash
-  - type: PhysicalComposition
-    materialComposition:
-      Steel: 60
-  - type: SpaceGarbage
+    - type: Sprite
+      sprite: Objects/Consumable/Food/plates.rsi
+      state: tin
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      shape:
+        - 0,0,1,0
+      storedOffset: 0,-3
+    - type: Tag
+      tags:
+        - Trash
+    - type: PhysicalComposition
+      materialComposition:
+        Steel: 60
+    - type: SpaceGarbage
 
 # Muffin Tin
 
@@ -187,18 +187,20 @@
   id: FoodPlateMuffinTin
   description: A cheap foil tin for muffins.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Food/plates.rsi
-    state: muffin-tin
-  - type: Item
-    size: Small
-    shape:
-    - 0,0,1,0
-    storedOffset: 0,-3
-  - type: Tag
-    tags:
-    - Trash
-  - type: PhysicalComposition
-    materialComposition:
-      Steel: 30
-  - type: SpaceGarbage
+    - type: Sprite
+      sprite: Objects/Consumable/Food/plates.rsi
+      state: muffin-tin
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      shape:
+        - 0,0,1,0
+      storedOffset: 0,-3
+    - type: Tag
+      tags:
+        - Trash
+    - type: PhysicalComposition
+      materialComposition:
+        Steel: 30
+    - type: SpaceGarbage

Diferenças do arquivo suprimidas por serem muito extensas
+ 432 - 430
Resources/Prototypes/Entities/Objects/Consumable/Food/burger.yml


+ 100 - 99
Resources/Prototypes/Entities/Objects/Consumable/Food/egg.yml

@@ -6,61 +6,60 @@
   description: An egg!
   abstract: true
   components:
-  - type: Tag
-    tags:
-      - Egg
-      - Meat
-  - type: Food
-    trash:
-    - Eggshells
-  - type: Sprite
-    sprite: Objects/Consumable/Food/egg.rsi
-  - type: Item
-    sprite: Objects/Consumable/Food/egg.rsi
-    size: Tiny
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 6
-        reagents:
-        - ReagentId: Egg
-          Quantity: 6
-  - type: DrawableSolution
-    solution: food
-  - type: SolutionSpiker
-    sourceSolution: food
-    ignoreEmpty: true
-    popup: spike-solution-egg
-  # egg fragile
-  - type: DamageOnHighSpeedImpact
-    minimumSpeed: 0.1
-    damage:
-      types:
-        Blunt: 1
-  - type: Damageable
-    damageContainer: Biological
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 1
-      behaviors:
-      - !type:PlaySoundBehavior
-        sound:
-          collection: desecration
-      - !type:SpillBehavior
-        solution: food
-      - !type:SpawnEntitiesBehavior
-        spawn:
-          Eggshells:
-            min: 1
-            max: 1
-          # Wow double-yolk you're so lucky!
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]
-  # all below are for egg cooking/exploding
-  - type: AtmosExposed
-  - type: Temperature
+    - type: Tag
+      tags:
+        - Egg
+        - Meat
+    - type: Food
+      trash:
+        - Eggshells
+    - type: Sprite
+      sprite: Objects/Consumable/Food/egg.rsi
+    - type: Item
+      sprite: Objects/Consumable/Food/egg.rsi
+      size: Tiny
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 6
+          reagents:
+            - ReagentId: Egg
+              Quantity: 6
+    - type: DrawableSolution
+      solution: food
+    - type: SolutionSpiker
+      sourceSolution: food
+      ignoreEmpty: true
+      popup: spike-solution-egg
+    # egg fragile
+    - type: DamageOnHighSpeedImpact
+      minimumSpeed: 0.1
+      damage:
+        types:
+          Blunt: 1
+    - type: Damageable
+      damageContainer: Biological
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 1
+          behaviors:
+            - !type:PlaySoundBehavior
+              sound:
+                collection: desecration
+            - !type:SpillBehavior
+              solution: food
+            - !type:SpawnEntitiesBehavior
+              spawn:
+                Eggshells:
+                  min: 1
+                  max: 1
+                # Wow double-yolk you're so lucky!
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+    # all below are for egg cooking/exploding
+    - type: AtmosExposed
+    - type: Temperature
 
 # Splat
 - type: entity
@@ -69,24 +68,26 @@
   id: Eggshells
   description: You're walkin' on 'em bud.
   components:
-  - type: Food
-  - type: Sprite
-    sprite: Objects/Consumable/Food/egg.rsi
-    state: eggshells
-  - type: Item
-    size: Tiny
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 2
-        reagents:
-        - ReagentId: Egg
-          Quantity: 1
-  - type: Tag
-    tags:
-    - Egg
-    - Trash
-  - type: SpaceGarbage
+    - type: Food
+    - type: Sprite
+      sprite: Objects/Consumable/Food/egg.rsi
+      state: eggshells
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 2
+          reagents:
+            - ReagentId: Egg
+              Quantity: 1
+    - type: Tag
+      tags:
+        - Egg
+        - Trash
+    - type: SpaceGarbage
 
 # Egg
 
@@ -95,18 +96,18 @@
   id: FoodEgg
   name: egg
   components:
-  - type: Sprite
-    layers:
-      - state: icon
-        map: [ "enum.DamageStateVisualLayers.Base" ]
-  - type: RandomSprite
-    available:
-      - enum.DamageStateVisualLayers.Base:
-          icon: ""
-          white: ""
-  - type: Construction
-    graph: Egg
-    node: start
+    - type: Sprite
+      layers:
+        - state: icon
+          map: ["enum.DamageStateVisualLayers.Base"]
+    - type: RandomSprite
+      available:
+        - enum.DamageStateVisualLayers.Base:
+            icon: ""
+            white: ""
+    - type: Construction
+      graph: Egg
+      node: start
 
 - type: entity
   parent: FoodEggBase
@@ -114,17 +115,17 @@
   name: boiled egg
   description: A delicious hardboiled egg.
   components:
-  - type: Sprite
-    layers:
-    - state: icon
-      map: [ "enum.DamageStateVisualLayers.Base" ]
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 6
-        reagents:
-        - ReagentId: EggCooked
-          Quantity: 6
-  - type: Temperature
-    # preserve temperature from the boiling step
-    currentTemperature: 344
+    - type: Sprite
+      layers:
+        - state: icon
+          map: ["enum.DamageStateVisualLayers.Base"]
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 6
+          reagents:
+            - ReagentId: EggCooked
+              Quantity: 6
+    - type: Temperature
+      # preserve temperature from the boiling step
+      currentTemperature: 344

Diferenças do arquivo suprimidas por serem muito extensas
+ 391 - 394
Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml


+ 2 - 0
Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml

@@ -23,6 +23,8 @@
               Quantity: 1
             - ReagentId: Fat
               Quantity: 5
+    - type: STWeight
+      self: 0.75
     - type: Item
       size: Tiny
     - type: Fixtures

+ 20 - 0
Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml

@@ -223,6 +223,8 @@
   components:
     - type: Sprite
       sprite: Objects/Specific/Hydroponics/nettle.rsi
+    - type: STWeight
+      self: 1
     - type: Item
       size: Small
       sprite: Objects/Specific/Hydroponics/nettle.rsi
@@ -254,6 +256,8 @@
   components:
     - type: Sprite
       sprite: Objects/Specific/Hydroponics/death_nettle.rsi
+    - type: STWeight
+      self: 1
     - type: Item
       size: Small
       sprite: Objects/Specific/Hydroponics/death_nettle.rsi
@@ -1172,6 +1176,8 @@
     - type: Sprite
       sprite: Objects/Specific/Hydroponics/corn.rsi
       state: cob
+    - type: STWeight
+      self: 0.75
     - type: Item
       size: Tiny
     - type: Tag
@@ -1717,6 +1723,8 @@
   id: FoodGlasstle
   description: A fragile crystal plant with lot of spiky thorns.
   components:
+    - type: STWeight
+      self: 1
     - type: Item
       size: Small
       sprite: Objects/Specific/Hydroponics/glasstle.rsi
@@ -2011,6 +2019,8 @@
   id: FoodWatermelon
   description: Round green object that you can slice and eat.
   components:
+    - type: STWeight
+      self: 1
     - type: Item
       size: Small
       heldPrefix: produce
@@ -2073,6 +2083,8 @@
   id: FoodWatermelonSlice
   description: Juicy green and red slice.
   components:
+    - type: STWeight
+      self: 0.75
     - type: Item
       size: Tiny
     - type: FlavorProfile
@@ -2112,6 +2124,8 @@
   id: FoodHolymelon
   description: The water within this melon has been blessed by some deity that's particularly fond of watermelon.
   components:
+    - type: STWeight
+      self: 1
     - type: Item
       size: Small
       heldPrefix: produce
@@ -2175,6 +2189,8 @@
   id: FoodHolymelonSlice
   description: Juicy golden and red slice.
   components:
+    - type: STWeight
+      self: 0.75
     - type: Item
       size: Tiny
     - type: FlavorProfile
@@ -2417,6 +2433,8 @@
   id: FoodPumpkin
   description: A large, orange... berry. Seriously.
   components:
+    - type: STWeight
+      self: 1
     - type: Item
       size: Small
       heldPrefix: produce
@@ -2466,6 +2484,8 @@
   id: FoodBluePumpkin
   description: A large, blue... berry. Seriously.
   components:
+    - type: STWeight
+      self: 1
     - type: Item
       size: Small
       heldPrefix: produce

+ 413 - 410
Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml

@@ -6,23 +6,23 @@
   id: FoodSnackBase
   abstract: true
   components:
-  - type: Food
-  - type: Tag
-    tags:
-      - FoodSnack
-  - type: Sprite
-    sprite: Objects/Consumable/Food/snacks.rsi
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 30 # Room for extra condiments
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-  - type: Item
-    sprite: Objects/Consumable/Food/snacks.rsi
-    heldPrefix: packet
-    size: Tiny
+    - type: Food
+    - type: Tag
+      tags:
+        - FoodSnack
+    - type: Sprite
+      sprite: Objects/Consumable/Food/snacks.rsi
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 30 # Room for extra condiments
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+    - type: Item
+      sprite: Objects/Consumable/Food/snacks.rsi
+      heldPrefix: packet
+      size: Tiny
 # Snacks
 
 # "Snacks" means food in a packet. Down the line this stuff can have multiple
@@ -34,15 +34,15 @@
   id: FoodSnackBoritos
   description: Crunchy, salty tortilla chips. You could probably make nachos with these.
   components:
-  - type: FlavorProfile
-    flavors:
-      - boritos
-  - type: Sprite
-    state: boritos
-  - type: Item
-  - type: Food
-    trash: 
-    - FoodPacketBoritosTrash
+    - type: FlavorProfile
+      flavors:
+        - boritos
+    - type: Sprite
+      state: boritos
+    - type: Item
+    - type: Food
+      trash:
+        - FoodPacketBoritosTrash
 
 - type: entity
   name: C&Ds
@@ -50,15 +50,15 @@
   id: FoodSnackCnDs
   description: Legally, we cannot say that these won't melt in your hands.
   components:
-  - type: FlavorProfile
-    flavors:
-      - chocolate
-  - type: Sprite
-    state: cnds
-  - type: Item
-  - type: Food
-    trash: 
-    - FoodPacketCnDsTrash
+    - type: FlavorProfile
+      flavors:
+        - chocolate
+    - type: Sprite
+      state: cnds
+    - type: Item
+    - type: Food
+      trash:
+        - FoodPacketCnDsTrash
 
 - type: entity
   name: cheesie honkers
@@ -66,16 +66,16 @@
   id: FoodSnackCheesie
   description: Bite sized cheesie snacks that will honk all over your mouth.
   components:
-  - type: FlavorProfile
-    flavors:
-      - cheesy
-      - funny
-  - type: Sprite
-    state: cheesiehonkers
-  - type: Item
-  - type: Food
-    trash: 
-    - FoodPacketCheesieTrash
+    - type: FlavorProfile
+      flavors:
+        - cheesy
+        - funny
+    - type: Sprite
+      state: cheesiehonkers
+    - type: Item
+    - type: Food
+      trash:
+        - FoodPacketCheesieTrash
 
 - type: entity
   name: chips
@@ -83,17 +83,17 @@
   id: FoodSnackChips
   description: Commander Riker's What-The-Crisps.
   components:
-  - type: FlavorProfile
-    flavors:
-      - oily
-      - salty
-      - potatoes
-  - type: Sprite
-    state: chips
-  - type: Item
-  - type: Food
-    trash: 
-    - FoodPacketChipsTrash
+    - type: FlavorProfile
+      flavors:
+        - oily
+        - salty
+        - potatoes
+    - type: Sprite
+      state: chips
+    - type: Item
+    - type: Food
+      trash:
+        - FoodPacketChipsTrash
 
 - type: entity
   name: chocolate bar
@@ -101,21 +101,21 @@
   id: FoodSnackChocolate
   description: Tastes like cardboard.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Food/snacks.rsi
-    state: chocolatebar
-  - type: Item
-    heldPrefix: chocolatebar
-    size: Tiny
-  - type: Tag
-    tags:
-      - FoodSnack
-  - type: SpawnItemsOnUse
-    items:
-      - id: FoodPacketChocolateTrash
-      - id: FoodSnackChocolateBar
-    sound:
-      path: /Audio/Effects/unwrap.ogg
+    - type: Sprite
+      sprite: Objects/Consumable/Food/snacks.rsi
+      state: chocolatebar
+    - type: Item
+      heldPrefix: chocolatebar
+      size: Tiny
+    - type: Tag
+      tags:
+        - FoodSnack
+    - type: SpawnItemsOnUse
+      items:
+        - id: FoodPacketChocolateTrash
+        - id: FoodSnackChocolateBar
+      sound:
+        path: /Audio/Effects/unwrap.ogg
 
 - type: entity
   name: chocolate bar
@@ -123,27 +123,27 @@
   id: FoodSnackChocolateBar
   description: Tastes like cardboard.
   components:
-  - type: FlavorProfile
-    flavors:
-      - chocolate
-  - type: Sprite
-    state: chocolatebar-open
-  - type: Item
-  - type: Tag
-    tags:
-      - FoodSnack
-      - ReptilianFood
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 30
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-        - ReagentId: Theobromine
-          Quantity: 3
-        - ReagentId: CocoaPowder
-          Quantity: 1
+    - type: FlavorProfile
+      flavors:
+        - chocolate
+    - type: Sprite
+      state: chocolatebar-open
+    - type: Item
+    - type: Tag
+      tags:
+        - FoodSnack
+        - ReptilianFood
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 30
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+            - ReagentId: Theobromine
+              Quantity: 3
+            - ReagentId: CocoaPowder
+              Quantity: 1
 
 - type: entity
   name: energy bar
@@ -151,15 +151,15 @@
   id: FoodSnackEnergy
   description: An energy bar with a lot of punch.
   components:
-  - type: Sprite
-    state: energybar
-  - type: Item
-  - type: SpawnItemsOnUse
-    items:
-      - id: FoodPacketEnergyTrash
-      - id: FoodSnackEnergyBar
-    sound:
-      path: /Audio/Effects/unwrap.ogg
+    - type: Sprite
+      state: energybar
+    - type: Item
+    - type: SpawnItemsOnUse
+      items:
+        - id: FoodPacketEnergyTrash
+        - id: FoodSnackEnergyBar
+      sound:
+        path: /Audio/Effects/unwrap.ogg
 
 - type: entity
   name: energy bar
@@ -167,15 +167,15 @@
   id: FoodSnackEnergyBar
   description: An energy bar with a lot of punch.
   components:
-  - type: FlavorProfile
-    flavors:
-      - nutty
-      - oats
-      - fiber
-      - sweet
-  - type: Sprite
-    state: energybar-open
-  - type: Item
+    - type: FlavorProfile
+      flavors:
+        - nutty
+        - oats
+        - fiber
+        - sweet
+    - type: Sprite
+      state: energybar-open
+    - type: Item
 
 - type: entity
   name: sweetie's pistachios
@@ -183,19 +183,19 @@
   id: FoodSnackPistachios
   description: Sweeties's name-brand pistachios. probably won't give you diseases. Probably.
   components:
-  - type: FlavorProfile
-    flavors:
-      - salty
-      - nutty
-  - type: Sprite
-    state: pistachio
-  - type: Item
-  - type: Food
-    trash: 
-    - FoodPacketPistachioTrash
-  - type: Tag
-    tags:
-    - Fruit # Seed of a fruit, you can yell at me
+    - type: FlavorProfile
+      flavors:
+        - salty
+        - nutty
+    - type: Sprite
+      state: pistachio
+    - type: Item
+    - type: Food
+      trash:
+        - FoodPacketPistachioTrash
+    - type: Tag
+      tags:
+        - Fruit # Seed of a fruit, you can yell at me
 
 - type: entity
   name: popcorn
@@ -203,18 +203,18 @@
   id: FoodSnackPopcorn
   description: Grown on an unknown planet, by an unknown farmer, popped by some jerk on a space station.
   components:
-  - type: FlavorProfile
-    flavors:
-      - corn
-      - salt
-      - butter
-  - type: Sprite
-    state: popcorn
-  - type: Item
-    heldPrefix: popcorn
-  - type: Food
-    trash: 
-    - FoodPacketPopcornTrash
+    - type: FlavorProfile
+      flavors:
+        - corn
+        - salt
+        - butter
+    - type: Sprite
+      state: popcorn
+    - type: Item
+      heldPrefix: popcorn
+    - type: Food
+      trash:
+        - FoodPacketPopcornTrash
 
 - type: entity
   name: 4no raisins
@@ -222,18 +222,18 @@
   id: FoodSnackRaisins
   description: Best raisins in the universe. Not sure why.
   components:
-  - type: FlavorProfile
-    flavors:
-      - raisins
-  - type: Sprite
-    state: raisins
-  - type: Item
-  - type: Food
-    trash: 
-    - FoodPacketRaisinsTrash
-  - type: Tag
-    tags:
-    - Fruit
+    - type: FlavorProfile
+      flavors:
+        - raisins
+    - type: Sprite
+      state: raisins
+    - type: Item
+    - type: Food
+      trash:
+        - FoodPacketRaisinsTrash
+    - type: Tag
+      tags:
+        - Fruit
 
 - type: entity
   name: bob's semki sunflower seeds
@@ -241,15 +241,15 @@
   id: FoodSnackSemki
   description: Proudly produced by the Bob Bobson nutritional corporation. Perfect for spitting at people.
   components:
-  - type: FlavorProfile
-    flavors:
-      - nutty
-  - type: Sprite
-    state: semki
-  - type: Item
-  - type: Food
-    trash: 
-    - FoodPacketSemkiTrash
+    - type: FlavorProfile
+      flavors:
+        - nutty
+    - type: Sprite
+      state: semki
+    - type: Item
+    - type: Food
+      trash:
+        - FoodPacketSemkiTrash
 
 - type: entity
   name: sus jerky
@@ -257,18 +257,18 @@
   id: FoodSnackSus
   description: Something about this packet makes you feel incredibly uneasy. Jerky's good though.
   components:
-  - type: FlavorProfile
-    flavors:
-      - susjerky
-  - type: Sprite
-    state: susjerky
-  - type: Item
-  - type: Food
-    trash: 
-    - FoodPacketSusTrash
-  - type: Tag
-    tags:
-    - Meat
+    - type: FlavorProfile
+      flavors:
+        - susjerky
+    - type: Sprite
+      state: susjerky
+    - type: Item
+    - type: Food
+      trash:
+        - FoodPacketSusTrash
+    - type: Tag
+      tags:
+        - Meat
 
 - type: entity
   name: syndi-cakes
@@ -276,15 +276,15 @@
   id: FoodSnackSyndi
   description: An extremely moist snack cake that tastes just as good after being nuked.
   components:
-  - type: FlavorProfile
-    flavors:
-      - syndicakes
-  - type: Sprite
-    state: syndicakes
-  - type: Item
-  - type: Food
-    trash: 
-    - FoodPacketSyndiTrash
+    - type: FlavorProfile
+      flavors:
+        - syndicakes
+    - type: Sprite
+      state: syndicakes
+    - type: Item
+    - type: Food
+      trash:
+        - FoodPacketSyndiTrash
 
 - type: entity
   parent: FoodSnackBase
@@ -292,24 +292,24 @@
   name: cup ramen
   description: A cheap food with a taste that reminds you of your school years.
   components:
-  - type: RefillableSolution
-    solution: food
-  - type: InjectableSolution
-    solution: food
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 50 #big cup
-        reagents:
-        - ReagentId: DryRamen
-          Quantity: 30
-        - ReagentId: Soysauce
-          Quantity: 5
-  - type: Sprite
-    state: ramen
-  - type: Food
-    trash: 
-    - FoodPacketCupRamenTrash
+    - type: RefillableSolution
+      solution: food
+    - type: InjectableSolution
+      solution: food
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 50 #big cup
+          reagents:
+            - ReagentId: DryRamen
+              Quantity: 30
+            - ReagentId: Soysauce
+              Quantity: 5
+    - type: Sprite
+      state: ramen
+    - type: Food
+      trash:
+        - FoodPacketCupRamenTrash
 
 - type: entity
   parent: DrinkRamen
@@ -317,15 +317,15 @@
   name: hell ramen
   description: Super spicy flavor!
   components:
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 50
-        reagents:
-        - ReagentId: DryRamen
-          Quantity: 30
-        - ReagentId: CapsaicinOil
-          Quantity: 5
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 50
+          reagents:
+            - ReagentId: DryRamen
+              Quantity: 30
+            - ReagentId: CapsaicinOil
+              Quantity: 5
 
 - type: entity
   name: chow mein
@@ -333,26 +333,26 @@
   id: FoodSnackChowMein
   description: A salty fried noodle snack. Looks like they forgot the vegetables.
   components:
-  - type: FlavorProfile
-    flavors:
-      - cheapnoodles
-      - salty
-      - oily
-  - type: Sprite
-    state: chinese1
-  - type: Item
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 30 # Room for extra condiments
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-        - ReagentId: Soysauce
-          Quantity: 2
-  - type: Food
-    trash: 
-    - FoodPacketChowMeinTrash
+    - type: FlavorProfile
+      flavors:
+        - cheapnoodles
+        - salty
+        - oily
+    - type: Sprite
+      state: chinese1
+    - type: Item
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 30 # Room for extra condiments
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+            - ReagentId: Soysauce
+              Quantity: 2
+    - type: Food
+      trash:
+        - FoodPacketChowMeinTrash
 
 - type: entity
   name: dan dan noodles
@@ -360,28 +360,28 @@
   id: FoodSnackDanDanNoodles
   description: A spicy Sichuan noodle snack. The chili oil slick pools on top.
   components:
-  - type: FlavorProfile
-    flavors:
-      - cheapnoodles
-      - oily
-      - spicy
-  - type: Sprite
-    state: chinese2
-  - type: Item
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 30 # Room for extra condiments
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-        - ReagentId: CapsaicinOil
-          Quantity: 2
-        - ReagentId: Soysauce
-          Quantity: 2
-  - type: Food
-    trash: 
-    - FoodPacketDanDanTrash
+    - type: FlavorProfile
+      flavors:
+        - cheapnoodles
+        - oily
+        - spicy
+    - type: Sprite
+      state: chinese2
+    - type: Item
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 30 # Room for extra condiments
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+            - ReagentId: CapsaicinOil
+              Quantity: 2
+            - ReagentId: Soysauce
+              Quantity: 2
+    - type: Food
+      trash:
+        - FoodPacketDanDanTrash
 
 - type: entity
   name: fortune cookie
@@ -389,25 +389,25 @@
   id: FoodSnackCookieFortune
   description: A boring cardboard tasting snack with a fortune inside. Surprise! You're boring too.
   components:
-  - type: FlavorProfile
-    flavors:
-      - fortunecookie
-  - type: Sprite
-    state: cookie_fortune
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 1
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 1
-  - type: Item
-    sprite: Objects/Consumable/Food/snacks.rsi
-    heldPrefix: packet
-    size: Tiny
-  - type: Food
-    trash: 
-    - FoodCookieFortune
+    - type: FlavorProfile
+      flavors:
+        - fortunecookie
+    - type: Sprite
+      state: cookie_fortune
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 1
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 1
+    - type: Item
+      sprite: Objects/Consumable/Food/snacks.rsi
+      heldPrefix: packet
+      size: Tiny
+    - type: Food
+      trash:
+        - FoodCookieFortune
 
 - type: entity
   id: FoodSnackNutribrick
@@ -415,20 +415,22 @@
   name: nutribrick
   description: A carefully synthesized brick designed to contain the highest ratio of nutriment to volume. Tastes like shit.
   components:
-  - type: Item
-    size: Small
-  - type: Tag
-    tags:
-      - FoodSnack
-  - type: Sprite
-    sprite: Objects/Consumable/Food/snacks.rsi
-    state: nutribrick
-  - type: SpawnItemsOnUse
-    items:
-      - id: FoodPacketMRETrash
-      - id: FoodSnackNutribrickOpen
-    sound:
-      path: /Audio/Effects/unwrap.ogg
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: Tag
+      tags:
+        - FoodSnack
+    - type: Sprite
+      sprite: Objects/Consumable/Food/snacks.rsi
+      state: nutribrick
+    - type: SpawnItemsOnUse
+      items:
+        - id: FoodPacketMRETrash
+        - id: FoodSnackNutribrickOpen
+      sound:
+        path: /Audio/Effects/unwrap.ogg
 
 - type: entity
   id: FoodSnackNutribrickOpen
@@ -436,24 +438,26 @@
   name: nutribrick
   description: A carefully synthesized brick designed to contain the highest ratio of nutriment to volume. Tastes like shit.
   components:
-  - type: FlavorProfile
-    flavors:
-      - nutribrick
-  - type: Item
-    size: Small
-  - type: Tag
-    tags:
-      - ReptilianFood
-  - type: Sprite
-    state: nutribrick-open
-  - type: Food
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 25
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 20
+    - type: FlavorProfile
+      flavors:
+        - nutribrick
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: Tag
+      tags:
+        - ReptilianFood
+    - type: Sprite
+      state: nutribrick-open
+    - type: Food
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 25
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 20
 
 - type: entity
   id: FoodSnackMREBrownie
@@ -461,19 +465,18 @@
   name: brownie
   description: A precisely mixed brownie, made to withstand blunt trauma and harsh conditions. Tastes like shit.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Food/snacks.rsi
-    state: mre-brownie
-  - type: Tag
-    tags:
-      - FoodSnack
-  - type: SpawnItemsOnUse
-    items:
-      - id: FoodPacketMRETrash
-      - id: FoodSnackMREBrownieOpen
-    sound:
-      path: /Audio/Effects/unwrap.ogg
-
+    - type: Sprite
+      sprite: Objects/Consumable/Food/snacks.rsi
+      state: mre-brownie
+    - type: Tag
+      tags:
+        - FoodSnack
+    - type: SpawnItemsOnUse
+      items:
+        - id: FoodPacketMRETrash
+        - id: FoodSnackMREBrownieOpen
+      sound:
+        path: /Audio/Effects/unwrap.ogg
 
 - type: entity
   id: FoodSnackMREBrownieOpen
@@ -482,214 +485,214 @@
   suffix: MRE
   description: A precisely mixed brownie, made to withstand blunt trauma and harsh conditions. Tastes like shit.
   components:
-  - type: FlavorProfile
-    flavors:
-      - mrebrownie
-  - type: Sprite
-    state: mre-brownie-open
-  - type: Food
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 15
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 10
-        - ReagentId: Theobromine
-          Quantity: 3
+    - type: FlavorProfile
+      flavors:
+        - mrebrownie
+    - type: Sprite
+      state: mre-brownie-open
+    - type: Food
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 15
+          reagents:
+            - ReagentId: Nutriment
+              Quantity: 10
+            - ReagentId: Theobromine
+              Quantity: 3
 
 # Trash
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: BaseItem
   id: FoodPacketTrash
   description: This is rubbish.
   abstract: true
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Food/snacks.rsi
-  - type: Item
-    sprite: Objects/Consumable/Food/snacks.rsi
-    heldPrefix: packet
-    size: Tiny
-  - type: Tag
-    tags:
-    - Trash
-  - type: PhysicalComposition
-    materialComposition:
-      Steel: 100
-  - type: SpaceGarbage
-  - type: StaticPrice
-    price: 0
-
-- type: entity
-  categories: [ HideSpawnMenu ]
+    - type: Sprite
+      sprite: Objects/Consumable/Food/snacks.rsi
+    - type: Item
+      sprite: Objects/Consumable/Food/snacks.rsi
+      heldPrefix: packet
+      size: Tiny
+    - type: Tag
+      tags:
+        - Trash
+    - type: PhysicalComposition
+      materialComposition:
+        Steel: 100
+    - type: SpaceGarbage
+    - type: StaticPrice
+      price: 0
+
+- type: entity
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketBoritosTrash
   name: boritos bag
   components:
-  - type: Sprite
-    state: boritos-trash
+    - type: Sprite
+      state: boritos-trash
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketCnDsTrash
   name: C&Ds bag
   components:
-  - type: Sprite
-    state: cnds-trash
+    - type: Sprite
+      state: cnds-trash
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketCheesieTrash
   name: cheesie honkers
   components:
-  - type: Sprite
-    state: cheesiehonkers-trash
+    - type: Sprite
+      state: cheesiehonkers-trash
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketChipsTrash
   name: chips
   components:
-  - type: Sprite
-    state: chips-trash
+    - type: Sprite
+      state: chips-trash
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketChocolateTrash
   name: chocolate wrapper
   components:
-  - type: Sprite
-    state: chocolatebar-trash
+    - type: Sprite
+      state: chocolatebar-trash
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketEnergyTrash
   name: energybar wrapper
   components:
-  - type: Sprite
-    state: energybar-trash
+    - type: Sprite
+      state: energybar-trash
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketPistachioTrash
   name: pistachios packet
   components:
-  - type: Sprite
-    state: pistachio-trash
+    - type: Sprite
+      state: pistachio-trash
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketPopcornTrash
   name: popcorn box
   components:
-  - type: Sprite
-    state: popcorn-trash
+    - type: Sprite
+      state: popcorn-trash
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketRaisinsTrash
   name: 4no raisins
   components:
-  - type: Sprite
-    state: raisins-trash
+    - type: Sprite
+      state: raisins-trash
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketSemkiTrash
   name: semki packet
   components:
-  - type: Sprite
-    state: semki-trash
+    - type: Sprite
+      state: semki-trash
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketSusTrash
   name: sus jerky
   components:
-  - type: Sprite
-    state: susjerky-trash
+    - type: Sprite
+      state: susjerky-trash
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketSyndiTrash
   name: syndi-cakes box
   components:
-  - type: Sprite
-    state: syndicakes-trash
+    - type: Sprite
+      state: syndicakes-trash
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketCupRamenTrash
   name: empty cup ramen
   components:
-  - type: Sprite
-    state: ramen
+    - type: Sprite
+      state: ramen
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketChowMeinTrash
   name: empty chow mein box
   components:
-  - type: Sprite
-    state: chinese1
+    - type: Sprite
+      state: chinese1
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketDanDanTrash
   name: empty dan dan box
   components:
-  - type: Sprite
-    state: chinese2
+    - type: Sprite
+      state: chinese2
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodCookieFortune
   name: cookie fortune
   description: "The fortune reads: The end is near...and it's all your fault."
   components:
-  - type: Sprite
-    state: fortune
-  - type: Item
-  - type: RandomMetadata
-    descriptionSegments: [DescriptionsCookieFortune]
+    - type: Sprite
+      state: fortune
+    - type: Item
+    - type: RandomMetadata
+      descriptionSegments: [DescriptionsCookieFortune]
 
 - type: entity
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: FoodPacketTrash
   id: FoodPacketMRETrash
   name: MRE wrapper
   description: A general purpose wrapper for a variety of military food goods.
   components:
-  - type: Food
-    requiresSpecialDigestion: true
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 45
-        reagents:
-        - ReagentId: Fiber
-          Quantity: 40
-  - type: Tag
-    tags:
-    - ClothMade
-    - Trash
-  - type: Sprite
-    state: mre-wrapper
+    - type: Food
+      requiresSpecialDigestion: true
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 45
+          reagents:
+            - ReagentId: Fiber
+              Quantity: 40
+    - type: Tag
+      tags:
+        - ClothMade
+        - Trash
+    - type: Sprite
+      state: mre-wrapper

+ 258 - 254
Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml

@@ -4,25 +4,27 @@
   name: cigarette
   description: A roll of tobacco and nicotine.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi
-    state: unlit-icon
-  - type: Tag
-    tags:
-      - Cigarette
-      - Trash
-  - type: SpaceGarbage
-  - type: Clothing
-    sprite: Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi
-    slots: [ mask ]
-    equippedPrefix: unlit
-  - type: Item
-    size: Tiny
-    sprite: Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi
-    heldPrefix: unlit
-  - type: Construction
-    graph: smokeableCigarette
-    node: cigarette
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi
+      state: unlit-icon
+    - type: Tag
+      tags:
+        - Cigarette
+        - Trash
+    - type: SpaceGarbage
+    - type: Clothing
+      sprite: Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi
+      slots: [mask]
+      equippedPrefix: unlit
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+      sprite: Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi
+      heldPrefix: unlit
+    - type: Construction
+      graph: smokeableCigarette
+      node: cigarette
 
 - type: entity
   id: SoakedCigarette
@@ -31,42 +33,44 @@
   suffix: Soaked
   description: A roll of tobacco and nicotine soaked in some chemical.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi
-    state: unlit-icon
-  - type: Tag
-    tags:
-      - Cigarette
-      - Trash
-  - type: SpaceGarbage
-  - type: Clothing
-    sprite: Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi
-    slots: [ mask ]
-    equippedPrefix: unlit
-  - type: Item
-    size: Tiny
-  - type: Construction
-    graph: smokeableCigarette
-    node: cigarette
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi
+      state: unlit-icon
+    - type: Tag
+      tags:
+        - Cigarette
+        - Trash
+    - type: SpaceGarbage
+    - type: Clothing
+      sprite: Objects/Consumable/Smokeables/Cigarettes/cigarette.rsi
+      slots: [mask]
+      equippedPrefix: unlit
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+    - type: Construction
+      graph: smokeableCigarette
+      node: cigarette
 
 - type: entity
   id: CigaretteSpent
   parent: Cigarette
   suffix: spent
   components:
-  - type: Sprite
-    state: burnt-icon
-  - type: Smokable
-    state: Burnt
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 20
-  - type: Tag
-    tags:
-      - Cigarette
-      - Trash
-      - Burnt
+    - type: Sprite
+      state: burnt-icon
+    - type: Smokable
+      state: Burnt
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 20
+    - type: Tag
+      tags:
+        - Cigarette
+        - Trash
+        - Burnt
 
 - type: entity
   id: CigaretteSyndicate
@@ -74,340 +78,340 @@
   parent: Cigarette
   name: cigarette
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Omnizine
-            Quantity: 30
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Omnizine
+              Quantity: 30
 
 - type: entity
   id: CigaretteOmnizine
   parent: SoakedCigarette
   name: Hot Dog Water Flavor Explosion
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Omnizine
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Omnizine
+              Quantity: 10
 
 - type: entity
   id: CigaretteIron
   parent: SoakedCigarette
   name: Rusty Orange Baja Blast
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Iron
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Iron
+              Quantity: 10
 
 - type: entity
   id: CigaretteTricordrazine
   parent: SoakedCigarette
   name: Licorice Allsorts
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Tricordrazine
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Tricordrazine
+              Quantity: 10
 
 - type: entity
   id: CigaretteDylovene
   parent: SoakedCigarette
   name: Urinal Cake Dissolver
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Dylovene
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Dylovene
+              Quantity: 10
 
 - type: entity
   id: CigaretteDermaline
   parent: SoakedCigarette
   name: Aloe Peanut Butter Medley
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Dermaline
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Dermaline
+              Quantity: 10
 
 - type: entity
   id: CigaretteArithrazine
   parent: SoakedCigarette
   name: Roman Pipe Works
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Arithrazine
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Arithrazine
+              Quantity: 10
 
 - type: entity
   id: CigaretteIpecac
   parent: SoakedCigarette
   name: Grandma's Christmas Fruitcake
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Ipecac
-            Quantity: 2
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Ipecac
+              Quantity: 2
 
 - type: entity
   id: CigaretteBicaridine
   parent: SoakedCigarette
   name: Wet Dog Enhanced Cigarette
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Bicaridine
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Bicaridine
+              Quantity: 10
 
 - type: entity
   id: CigaretteDexalin
   parent: SoakedCigarette
   name: Rocky Mountain Musk
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Dexalin
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Dexalin
+              Quantity: 10
 
 - type: entity
   id: CigarettePax
   parent: SoakedCigarette
   name: Switzerland Express
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Pax
-            Quantity: 2
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Pax
+              Quantity: 2
 
 - type: entity
   id: CigaretteBbqSauce
   parent: SoakedCigarette
   name: Spicy Wood Aroma
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: BbqSauce
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: BbqSauce
+              Quantity: 10
 
 - type: entity
   id: CigaretteBlackPepper
   parent: SoakedCigarette
   name: English Spice
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Blackpepper
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Blackpepper
+              Quantity: 10
 
 - type: entity
   id: CigaretteCapsaicinOil
   parent: SoakedCigarette
   name: Chilly P
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: CapsaicinOil
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: CapsaicinOil
+              Quantity: 10
 
 - type: entity
   id: CigaretteBread
   parent: SoakedCigarette
   name: Double Toasted
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
 
 - type: entity
   id: CigaretteMilk
   parent: SoakedCigarette
   name: Bovine Extract
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Milk
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Milk
+              Quantity: 10
 
 - type: entity
   id: CigaretteBanana
   parent: SoakedCigarette
   name: Clown Adjancency Bonus
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: BananaHonk
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: BananaHonk
+              Quantity: 10
 
 - type: entity
   id: CigaretteSpaceDrugs
   parent: SoakedCigarette
   name: 80's Power Hour
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: SpaceDrugs
-            Quantity: 10
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: SpaceDrugs
+              Quantity: 10
 
 - type: entity
   id: CigaretteMuteToxin
   parent: SoakedCigarette
   name: Mixed Lozenges
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: MuteToxin
-            Quantity: 2
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: MuteToxin
+              Quantity: 2
 
 - type: entity
   id: CigaretteMold
   parent: SoakedCigarette
   name: Beneath The Sink Experience
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Mold
-            Quantity: 2
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Mold
+              Quantity: 2
 
 - type: entity
   id: CigaretteLicoxide
   parent: SoakedCigarette
   name: Wake Up Call
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: Licoxide
-            Quantity: 5
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: Licoxide
+              Quantity: 5
 
 - type: entity
   id: CigaretteWeldingFuel
   parent: SoakedCigarette
   name: Plasma Sauce
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: WeldingFuel
-            Quantity: 5
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: WeldingFuel
+              Quantity: 5
 
 - type: entity
   id: CigaretteTHC
   parent: SoakedCigarette
   name: Hippy Romance Novel
   components:
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 40
-        reagents:
-          - ReagentId: Nicotine
-            Quantity: 10
-          - ReagentId: THC
-            Quantity: 5
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 40
+          reagents:
+            - ReagentId: Nicotine
+              Quantity: 10
+            - ReagentId: THC
+              Quantity: 5

+ 96 - 92
Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml

@@ -4,32 +4,34 @@
   name: joint
   description: A roll of dried plant matter wrapped in thin paper.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cannabis/joint.rsi
-    state: unlit-icon
-  - type: Tag
-    tags:
-      - Cigarette
-      - Trash
-  - type: SpaceGarbage
-  - type: Clothing
-    sprite: Objects/Consumable/Smokeables/Cannabis/joint.rsi
-    slots: [ mask ]
-    equippedPrefix: unlit
-  - type: Item
-    size: Tiny
-  - type: Construction
-    graph: smokeableJoint
-    node: joint
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 30
-        reagents:
-          - ReagentId: THC
-            Quantity: 20
-  - type: RandomMetadata
-    nameSegments: [NamesRollie]
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cannabis/joint.rsi
+      state: unlit-icon
+    - type: Tag
+      tags:
+        - Cigarette
+        - Trash
+    - type: SpaceGarbage
+    - type: Clothing
+      sprite: Objects/Consumable/Smokeables/Cannabis/joint.rsi
+      slots: [mask]
+      equippedPrefix: unlit
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+    - type: Construction
+      graph: smokeableJoint
+      node: joint
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 30
+          reagents:
+            - ReagentId: THC
+              Quantity: 20
+    - type: RandomMetadata
+      nameSegments: [NamesRollie]
 
 - type: entity
   id: JointRainbow
@@ -38,26 +40,26 @@
   suffix: Rainbow
   description: A roll of dried plant matter wrapped in thin paper. Seems to be colorful inside.
   components:
-  - type: Construction
-    graph: smokeableJointRainbow
-    node: jointRainbow
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 20
-        reagents:
-        - ReagentId: SpaceDrugs
-          Quantity: 4
-        - ReagentId: Lipolicide
-          Quantity: 4
-        - ReagentId: MindbreakerToxin
-          Quantity: 2.66
-        - ReagentId: Happiness
-          Quantity: 2.66
-#       - ReagentId: ColorfulReagent
-#         Quantity: 1.33
-        - ReagentId: Psicodine
-          Quantity: 0.8
+    - type: Construction
+      graph: smokeableJointRainbow
+      node: jointRainbow
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 20
+          reagents:
+            - ReagentId: SpaceDrugs
+              Quantity: 4
+            - ReagentId: Lipolicide
+              Quantity: 4
+            - ReagentId: MindbreakerToxin
+              Quantity: 2.66
+            - ReagentId: Happiness
+              Quantity: 2.66
+            #       - ReagentId: ColorfulReagent
+            #         Quantity: 1.33
+            - ReagentId: Psicodine
+              Quantity: 0.8
 
 - type: entity
   id: Blunt
@@ -65,32 +67,34 @@
   name: blunt
   description: A roll of dried plant matter wrapped in a dried tobacco leaf.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cannabis/blunt.rsi
-    state: unlit-icon
-  - type: Tag
-    tags:
-      - Cigarette
-      - Trash
-  - type: SpaceGarbage
-  - type: Clothing
-    sprite: Objects/Consumable/Smokeables/Cannabis/blunt.rsi
-    slots: [ mask ]
-    equippedPrefix: unlit
-  - type: Item
-    size: Tiny
-  - type: Construction
-    graph: smokeableBlunt
-    node: blunt
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 30
-        reagents:
-          - ReagentId: THC
-            Quantity: 20
-  - type: RandomMetadata
-    nameSegments: [NamesRollie]
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cannabis/blunt.rsi
+      state: unlit-icon
+    - type: Tag
+      tags:
+        - Cigarette
+        - Trash
+    - type: SpaceGarbage
+    - type: Clothing
+      sprite: Objects/Consumable/Smokeables/Cannabis/blunt.rsi
+      slots: [mask]
+      equippedPrefix: unlit
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+    - type: Construction
+      graph: smokeableBlunt
+      node: blunt
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 30
+          reagents:
+            - ReagentId: THC
+              Quantity: 20
+    - type: RandomMetadata
+      nameSegments: [NamesRollie]
 
 - type: entity
   id: BluntRainbow
@@ -99,23 +103,23 @@
   suffix: Rainbow
   description: A roll of dried plant matter wrapped in a dried tobacco leaf. Seems to be colorful inside.
   components:
-  - type: Construction
-    graph: smokeableBluntRainbow
-    node: bluntRainbow
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 20
-        reagents:
-        - ReagentId: SpaceDrugs
-          Quantity: 4
-        - ReagentId: Lipolicide
-          Quantity: 4
-        - ReagentId: MindbreakerToxin
-          Quantity: 2.66
-        - ReagentId: Happiness
-          Quantity: 2.66
-#       - ReagentId: ColorfulReagent
-#         Quantity: 1.33
-        - ReagentId: Psicodine
-          Quantity: 0.8
+    - type: Construction
+      graph: smokeableBluntRainbow
+      node: bluntRainbow
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 20
+          reagents:
+            - ReagentId: SpaceDrugs
+              Quantity: 4
+            - ReagentId: Lipolicide
+              Quantity: 4
+            - ReagentId: MindbreakerToxin
+              Quantity: 2.66
+            - ReagentId: Happiness
+              Quantity: 2.66
+            #       - ReagentId: ColorfulReagent
+            #         Quantity: 1.33
+            - ReagentId: Psicodine
+              Quantity: 0.8

+ 218 - 215
Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/packs.yml

@@ -1,140 +1,144 @@
 - type: entity
   id: CigPackBase
-  parent: [ BaseStorageItem, BaseBagOpenClose ]
+  parent: [BaseStorageItem, BaseBagOpenClose]
   name: cigarette pack
   abstract: true
   components:
-  - type: Sprite
-    layers:
-    - state: closed
-      map: ["closeLayer"]
-    - state: open
-      map: ["openLayer"]
-      visible: false
-    - state: cig1
-      map: ["cig1"]
-      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
-      visible: false
-    - state: cig2
-      map: ["cig2"]
-      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
-      visible: false
-    - state: cig3
-      map: ["cig3"]
-      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
-      visible: false
-    - state: cig4
-      map: ["cig4"]
-      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
-      visible: false
-    - state: cig5
-      map: ["cig5"]
-      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
-      visible: false
-    - state: cig6
-      map: ["cig6"]
-      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
-      visible: false
-  - type: Tag
-    tags:
-    - CigPack
-    - Trash
-  - type: PhysicalComposition
-    materialComposition:
-      Steel: 50
-  - type: SpaceGarbage
-  - type: Item
-    size: Tiny
-    shape: # Yes, this is cursed, but it breaks otherwise, dont question it.
-    - 0,0,0,1
-  - type: Storage
-    grid:
-    - 0,0,4,1
-  - type: StorageFill
-    contents:
-    - id: Cigarette
-      amount: 10
-  - type: ItemCounter
-    count:
-      tags: [Cigarette]
-    composite: true
-    layerStates:
-    - cig1
-    - cig2
-    - cig3
-    - cig4
-    - cig5
-    - cig6
-  - type: Appearance
+    - type: Sprite
+      layers:
+        - state: closed
+          map: ["closeLayer"]
+        - state: open
+          map: ["openLayer"]
+          visible: false
+        - state: cig1
+          map: ["cig1"]
+          sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
+          visible: false
+        - state: cig2
+          map: ["cig2"]
+          sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
+          visible: false
+        - state: cig3
+          map: ["cig3"]
+          sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
+          visible: false
+        - state: cig4
+          map: ["cig4"]
+          sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
+          visible: false
+        - state: cig5
+          map: ["cig5"]
+          sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
+          visible: false
+        - state: cig6
+          map: ["cig6"]
+          sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
+          visible: false
+    - type: Tag
+      tags:
+        - CigPack
+        - Trash
+    - type: PhysicalComposition
+      materialComposition:
+        Steel: 50
+    - type: SpaceGarbage
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+      shape: # Yes, this is cursed, but it breaks otherwise, dont question it.
+        - 0,0,0,1
+    - type: Storage
+      grid:
+        - 0,0,4,1
+    - type: StorageFill
+      contents:
+        - id: Cigarette
+          amount: 10
+    - type: ItemCounter
+      count:
+        tags: [Cigarette]
+      composite: true
+      layerStates:
+        - cig1
+        - cig2
+        - cig3
+        - cig4
+        - cig5
+        - cig6
+    - type: Appearance
 
 - type: entity
   id: CigPackMixedBase
-  parent: [ BaseStorageItem, BaseBagOpenClose ]
+  parent: [BaseStorageItem, BaseBagOpenClose]
   name: soaked cigarette pack
   abstract: true
   components:
-  - type: Sprite
-    layers:
-    - state: closed
-      map: ["closeLayer"]
-    - state: open
-      map: ["openLayer"]
-      visible: false
-    - state: cig1
-      map: ["cig1"]
-      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
-      visible: false
-    - state: cig2
-      map: ["cig2"]
-      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
-      visible: false
-    - state: cig3
-      map: ["cig3"]
-      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
-      visible: false
-    - state: cig4
-      map: ["cig4"]
-      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
-      visible: false
-    - state: cig5
-      map: ["cig5"]
-      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
-      visible: false
-    - state: cig6
-      map: ["cig6"]
-      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
-      visible: false
-  - type: Tag
-    tags:
-    - CigPack
-    - Trash
-  - type: PhysicalComposition
-    materialComposition:
-      Steel: 50
-  - type: SpaceGarbage
-  - type: Item
-    size: Tiny
-    shape: # Yes, this is cursed, but it breaks otherwise, dont question it.
-    - 0,0,0,1
-  - type: Storage
-    grid:
-    - 0,0,4,1
-  - type: StorageFill
-    contents:
-    - id: CigaretteRandom
-      amount: 10
-  - type: ItemCounter
-    count:
-      tags: [Cigarette]
-    composite: true
-    layerStates:
-    - cig1
-    - cig2
-    - cig3
-    - cig4
-    - cig5
-    - cig6
-  - type: Appearance
+    - type: Sprite
+      layers:
+        - state: closed
+          map: ["closeLayer"]
+        - state: open
+          map: ["openLayer"]
+          visible: false
+        - state: cig1
+          map: ["cig1"]
+          sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
+          visible: false
+        - state: cig2
+          map: ["cig2"]
+          sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
+          visible: false
+        - state: cig3
+          map: ["cig3"]
+          sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
+          visible: false
+        - state: cig4
+          map: ["cig4"]
+          sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
+          visible: false
+        - state: cig5
+          map: ["cig5"]
+          sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
+          visible: false
+        - state: cig6
+          map: ["cig6"]
+          sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/visualizer.rsi
+          visible: false
+    - type: Tag
+      tags:
+        - CigPack
+        - Trash
+    - type: PhysicalComposition
+      materialComposition:
+        Steel: 50
+    - type: SpaceGarbage
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+      shape: # Yes, this is cursed, but it breaks otherwise, dont question it.
+        - 0,0,0,1
+    - type: Storage
+      grid:
+        - 0,0,4,1
+    - type: StorageFill
+      contents:
+        - id: CigaretteRandom
+          amount: 10
+    - type: ItemCounter
+      count:
+        tags: [Cigarette]
+      composite: true
+      layerStates:
+        - cig1
+        - cig2
+        - cig3
+        - cig4
+        - cig5
+        - cig6
+    - type: Appearance
 
 - type: entity
   id: CigPackGreen
@@ -142,10 +146,10 @@
   name: Spessman's Smokes packet
   description: A label on the packaging reads, Wouldn't a slow death make a change?
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/green.rsi
-  - type: Item
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/green.rsi
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/green.rsi
+    - type: Item
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/green.rsi
 
 - type: entity
   id: CigPackRed
@@ -153,10 +157,10 @@
   name: DromedaryCo packet
   description: The most popular brand of Space Cigarettes, sponsors of the Space Olympics.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/red.rsi
-  - type: Item
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/red.rsi
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/red.rsi
+    - type: Item
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/red.rsi
 
 - type: entity
   id: CigPackBlue
@@ -164,10 +168,10 @@
   name: AcmeCo packet
   description: For those who somehow want to obtain the record for the most amount of cancerous tumors.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/blue.rsi
-  - type: Item
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/blue.rsi
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/blue.rsi
+    - type: Item
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/blue.rsi
 
 - type: entity
   id: CigPackBlack
@@ -175,10 +179,10 @@
   name: Nomads packet
   description: Nomads's extra strong, for when your life is more extra hard.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/black.rsi
-  - type: Item
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/black.rsi
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/black.rsi
+    - type: Item
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/black.rsi
 
 - type: entity
   id: CigPackSyndicate
@@ -186,14 +190,14 @@
   name: Interdyne herbals packet
   description: Elite cigarettes for elite syndicate agents. Infused with medicine for when you need to do more than calm your nerves.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/syndicate.rsi
-  - type: Item
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/syndicate.rsi
-  - type: StorageFill
-    contents:
-    - id: CigaretteSyndicate
-      amount: 10
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/syndicate.rsi
+    - type: Item
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/syndicate.rsi
+    - type: StorageFill
+      contents:
+        - id: CigaretteSyndicate
+          amount: 10
 
 - type: entity
   id: CigPackMixedMedical
@@ -202,26 +206,25 @@
   suffix: Medical
   description: Dan worked with NT chemistry to dispose of excess chemicals, ENJOY.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi
-  - type: Item
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi
-  - type: StorageFill
-    contents:
-    - id: CigaretteIron
-    - id: CigaretteTricordrazine
-    - id: CigaretteDylovene
-    - id: CigaretteDermaline
-    - id: CigaretteArithrazine
-    - id: CigaretteBicaridine
-    - id: CigaretteIpecac
-    - id: CigaretteOmnizine
-      prob: 0.25
-    - id: CigaretteDexalin
-      prob: 0.25
-    - id: CigarettePax
-      prob: 0.10
-
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi
+    - type: Item
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi
+    - type: StorageFill
+      contents:
+        - id: CigaretteIron
+        - id: CigaretteTricordrazine
+        - id: CigaretteDylovene
+        - id: CigaretteDermaline
+        - id: CigaretteArithrazine
+        - id: CigaretteBicaridine
+        - id: CigaretteIpecac
+        - id: CigaretteOmnizine
+          prob: 0.25
+        - id: CigaretteDexalin
+          prob: 0.25
+        - id: CigarettePax
+          prob: 0.10
 
 - type: entity
   id: CigPackMixed
@@ -230,32 +233,32 @@
   suffix: Mixed
   description: Dan worked with NT chemistry to dispose of excess chemicals, ENJOY.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi
-  - type: Item
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi
-  - type: StorageFill
-    contents:
-    - id: CigaretteBbqSauce
-      prob: 0.70
-    - id: CigaretteBlackPepper
-      prob: 0.70
-    - id: CigaretteCapsaicinOil
-      prob: 0.70
-    - id: CigaretteBread
-      prob: 0.70
-    - id: CigaretteMilk
-      prob: 0.70
-    - id: CigaretteBanana
-      prob: 0.10
-    - id: CigaretteTHC
-      prob: 0.70
-    - id: CigaretteTricordrazine
-      prob: 0.25
-    - id: CigaretteSpaceDrugs
-      prob: 0.50
-    - id: CigaretteLicoxide
-      prob: 0.10
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi
+    - type: Item
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi
+    - type: StorageFill
+      contents:
+        - id: CigaretteBbqSauce
+          prob: 0.70
+        - id: CigaretteBlackPepper
+          prob: 0.70
+        - id: CigaretteCapsaicinOil
+          prob: 0.70
+        - id: CigaretteBread
+          prob: 0.70
+        - id: CigaretteMilk
+          prob: 0.70
+        - id: CigaretteBanana
+          prob: 0.10
+        - id: CigaretteTHC
+          prob: 0.70
+        - id: CigaretteTricordrazine
+          prob: 0.25
+        - id: CigaretteSpaceDrugs
+          prob: 0.50
+        - id: CigaretteLicoxide
+          prob: 0.10
 
 - type: entity
   id: CigPackMixedNasty
@@ -264,22 +267,22 @@
   suffix: Nasty
   description: Dan worked with NT chemistry to dispose of excess chemicals, ENJOY.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi
-  - type: Item
-    sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi
-  - type: StorageFill
-    contents:
-    - id: CigaretteSpaceDrugs
-      amount: 2
-    - id: CigaretteWeldingFuel
-      amount: 2
-    - id: CigaretteMold
-      amount: 2
-    - id: CigaretteTHC
-    - id: CigaretteLicoxide
-      prob: 0.50
-    - id: CigarettePax
-      prob: 0.10
-    - id: CigaretteMuteToxin
-      prob: 0.05
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi
+    - type: Item
+      sprite: Objects/Consumable/Smokeables/Cigarettes/Packs/mixed.rsi
+    - type: StorageFill
+      contents:
+        - id: CigaretteSpaceDrugs
+          amount: 2
+        - id: CigaretteWeldingFuel
+          amount: 2
+        - id: CigaretteMold
+          amount: 2
+        - id: CigaretteTHC
+        - id: CigaretteLicoxide
+          prob: 0.50
+        - id: CigarettePax
+          prob: 0.10
+        - id: CigaretteMuteToxin
+          prob: 0.05

+ 49 - 45
Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/cigar.yml

@@ -7,40 +7,42 @@
   name: cigar
   description: "A brown roll of tobacco and... well, you're not quite sure."
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cigars/cigar.rsi
-    state: unlit-icon
-  - type: Tag
-    tags:
-      - Cigar
-      - Trash
-  - type: Clothing
-    sprite: Objects/Consumable/Smokeables/Cigars/cigar.rsi
-    slots: [ mask ]
-    equippedPrefix: unlit
-  - type: Item
-    size: Tiny
-    sprite: Objects/Consumable/Smokeables/Cigars/cigar.rsi
-    heldPrefix: unlit
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cigars/cigar.rsi
+      state: unlit-icon
+    - type: Tag
+      tags:
+        - Cigar
+        - Trash
+    - type: Clothing
+      sprite: Objects/Consumable/Smokeables/Cigars/cigar.rsi
+      slots: [mask]
+      equippedPrefix: unlit
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+      sprite: Objects/Consumable/Smokeables/Cigars/cigar.rsi
+      heldPrefix: unlit
 
 - type: entity
   id: CigarSpent
   parent: Cigar
   suffix: spent
   components:
-  - type: Sprite
-    state: burnt-icon
-  - type: Smokable
-    state: Burnt
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 20
-  - type: Tag
-    tags:
-      - Cigar
-      - Trash
-      - Burnt
+    - type: Sprite
+      state: burnt-icon
+    - type: Smokable
+      state: Burnt
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 20
+    - type: Tag
+      tags:
+        - Cigar
+        - Trash
+        - Burnt
 
 - type: entity
   id: CigarGold
@@ -48,26 +50,28 @@
   name: premium Havanian cigar
   description: A cigar fit for only the best of the best.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi
-    state: unlit-icon
-  - type: Clothing
-    sprite: Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi
-    slots: [ mask ]
-    equippedPrefix: unlit
-  - type: Item
-    size: Tiny
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi
+      state: unlit-icon
+    - type: Clothing
+      sprite: Objects/Consumable/Smokeables/Cigars/cigar-gold.rsi
+      slots: [mask]
+      equippedPrefix: unlit
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
 
 - type: entity
   id: CigarGoldSpent
   parent: CigarGold
   suffix: spent
   components:
-  - type: Sprite
-    state: burnt-icon
-  - type: Smokable
-    state: Burnt
-  - type: SolutionContainerManager
-    solutions:
-      smokable:
-        maxVol: 20
+    - type: Sprite
+      state: burnt-icon
+    - type: Smokable
+      state: Burnt
+    - type: SolutionContainerManager
+      solutions:
+        smokable:
+          maxVol: 20

+ 60 - 58
Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml

@@ -4,19 +4,21 @@
   name: pipe
   description: Just like grandpappy used to smoke.
   components:
-  - type: Sprite
-    sprite: Objects/Consumable/Smokeables/Pipes/pipe.rsi
-    state: unlit-icon
-  - type: Clothing
-    sprite: Objects/Consumable/Smokeables/Pipes/pipe.rsi
-    slots: [ mask ]
-    equippedPrefix: unlit
-  - type: Item
-    size: Tiny
-    sprite: Objects/Consumable/Smokeables/Pipes/pipe.rsi
-  - type: Appearance
-  - type: BurnStateVisuals
-    unlitIcon: unlit-icon
+    - type: Sprite
+      sprite: Objects/Consumable/Smokeables/Pipes/pipe.rsi
+      state: unlit-icon
+    - type: Clothing
+      sprite: Objects/Consumable/Smokeables/Pipes/pipe.rsi
+      slots: [mask]
+      equippedPrefix: unlit
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+      sprite: Objects/Consumable/Smokeables/Pipes/pipe.rsi
+    - type: Appearance
+    - type: BurnStateVisuals
+      unlitIcon: unlit-icon
 
 - type: entity
   id: SmokingPipeFilledTobacco
@@ -25,21 +27,21 @@
   suffix: Tobacco
   description: Just like grandpappy used to smoke.
   components:
-  - type: ContainerContainer
-    containers:
-      bowl_slot: !type:ContainerSlot
-  - type: ItemSlots
-  - type: SmokingPipe
-    bowl_slot:
-      name: smoking-pipe-slot-component-slot-name-bowl
-      startingItem: GroundTobacco
-      whitelist:
-        tags:
-          - Smokable
-      insertSound:
-        path: /Audio/Weapons/Guns/Empty/empty.ogg
-      ejectSound:
-        path: /Audio/Weapons/Guns/Empty/empty.ogg
+    - type: ContainerContainer
+      containers:
+        bowl_slot: !type:ContainerSlot
+    - type: ItemSlots
+    - type: SmokingPipe
+      bowl_slot:
+        name: smoking-pipe-slot-component-slot-name-bowl
+        startingItem: GroundTobacco
+        whitelist:
+          tags:
+            - Smokable
+        insertSound:
+          path: /Audio/Weapons/Guns/Empty/empty.ogg
+        ejectSound:
+          path: /Audio/Weapons/Guns/Empty/empty.ogg
 
 - type: entity
   id: SmokingPipeFilledCannabis
@@ -48,21 +50,21 @@
   suffix: Cannabis
   description: Just like grandpappy used to smoke.
   components:
-  - type: ContainerContainer
-    containers:
-      bowl_slot: !type:ContainerSlot
-  - type: ItemSlots
-  - type: SmokingPipe
-    bowl_slot:
-      name: smoking-pipe-slot-component-slot-name-bowl
-      startingItem: GroundCannabis
-      whitelist:
-        tags:
-          - Smokable
-      insertSound:
-        path: /Audio/Weapons/Guns/Empty/empty.ogg
-      ejectSound:
-        path: /Audio/Weapons/Guns/Empty/empty.ogg
+    - type: ContainerContainer
+      containers:
+        bowl_slot: !type:ContainerSlot
+    - type: ItemSlots
+    - type: SmokingPipe
+      bowl_slot:
+        name: smoking-pipe-slot-component-slot-name-bowl
+        startingItem: GroundCannabis
+        whitelist:
+          tags:
+            - Smokable
+        insertSound:
+          path: /Audio/Weapons/Guns/Empty/empty.ogg
+        ejectSound:
+          path: /Audio/Weapons/Guns/Empty/empty.ogg
 
 - type: entity
   id: SmokingPipeFilledCannabisRainbow
@@ -71,18 +73,18 @@
   suffix: Rainbow Cannabis
   description: Just like grandpappy used to smoke.
   components:
-  - type: ContainerContainer
-    containers:
-      bowl_slot: !type:ContainerSlot
-  - type: ItemSlots
-  - type: SmokingPipe
-    bowl_slot:
-      name: smoking-pipe-slot-component-slot-name-bowl
-      startingItem: GroundCannabisRainbow
-      whitelist:
-        tags:
-          - Smokable
-      insertSound:
-        path: /Audio/Weapons/Guns/Empty/empty.ogg
-      ejectSound:
-        path: /Audio/Weapons/Guns/Empty/empty.ogg
+    - type: ContainerContainer
+      containers:
+        bowl_slot: !type:ContainerSlot
+    - type: ItemSlots
+    - type: SmokingPipe
+      bowl_slot:
+        name: smoking-pipe-slot-component-slot-name-bowl
+        startingItem: GroundCannabisRainbow
+        whitelist:
+          tags:
+            - Smokable
+        insertSound:
+          path: /Audio/Weapons/Guns/Empty/empty.ogg
+        ejectSound:
+          path: /Audio/Weapons/Guns/Empty/empty.ogg

+ 28 - 26
Resources/Prototypes/Entities/Objects/Decoration/ashtray.yml

@@ -4,29 +4,31 @@
   name: ashtray
   description: Proven by scientists to improve the smoking experience by 37%!
   components:
-  - type: Sprite
-    sprite: Objects/Decoration/ashtray.rsi
-    layers:
-      - state: icon-0
-        map: ["enum.StorageFillLayers.Fill"]
-  - type: Item
-    size: Small
-  - type: StaticPrice
-    price: 1
-  - type: Storage
-    whitelist:
-      tags:
-      - Burnt
-      - Cigarette
-      - Cigar
-    maxItemSize: Tiny
-    grid:
-    - 0,0,9,0
-  - type: ContainerContainer
-    containers:
-      storagebase: !type:Container
-  - type: StorageFillVisualizer
-    fillBaseName: icon
-    maxFillLevels: 10
-  - type: Appearance
-  - type: Dumpable
+    - type: Sprite
+      sprite: Objects/Decoration/ashtray.rsi
+      layers:
+        - state: icon-0
+          map: ["enum.StorageFillLayers.Fill"]
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: StaticPrice
+      price: 1
+    - type: Storage
+      whitelist:
+        tags:
+          - Burnt
+          - Cigarette
+          - Cigar
+      maxItemSize: Tiny
+      grid:
+        - 0,0,9,0
+    - type: ContainerContainer
+      containers:
+        storagebase: !type:Container
+    - type: StorageFillVisualizer
+      fillBaseName: icon
+      maxFillLevels: 10
+    - type: Appearance
+    - type: Dumpable

+ 10 - 8
Resources/Prototypes/Entities/Objects/Decoration/jackolantern.yml

@@ -4,14 +4,16 @@
   name: carved pumpkin
   description: A traditional spooky decoration.
   components:
-  - type: Sprite
-    sprite: Objects/Specific/Hydroponics/pumpkin.rsi
-    state: carved
-  - type: Item
-    size: Normal
-  - type: Construction
-    graph: PumpkinAddLight
-    node: start
+    - type: Sprite
+      sprite: Objects/Specific/Hydroponics/pumpkin.rsi
+      state: carved
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: Construction
+      graph: PumpkinAddLight
+      node: start
 
 - type: entity
   parent: CarvedPumpkin

+ 10 - 8
Resources/Prototypes/Entities/Objects/Decoration/lidsalami.yml

@@ -4,11 +4,13 @@
   name: salami lid
   description: Ain't gon' fit, won't fit.
   components:
-  - type: Sprite
-    sprite: Objects/Decoration/lidsalami.rsi
-    layers:
-      - state: icon
-  - type: Item
-    size: Ginormous
-  - type: StaticPrice
-    price: 0
+    - type: Sprite
+      sprite: Objects/Decoration/lidsalami.rsi
+      layers:
+        - state: icon
+    - type: STWeight
+      self: 10
+    - type: Item
+      size: Ginormous
+    - type: StaticPrice
+      price: 0

+ 400 - 398
Resources/Prototypes/Entities/Objects/Decoration/present.yml

@@ -4,33 +4,35 @@
   description: A little box with incredible surprises inside.
   abstract: true
   components:
-  - type: Sprite
-    sprite: Objects/Decoration/present.rsi
-    layers:
-      - state: present
+    - type: Sprite
+      sprite: Objects/Decoration/present.rsi
+      layers:
+        - state: present
 
 - type: entity
   id: Present
   parent: [PresentBase, BaseStorageItem]
   suffix: Empty
   components:
-  - type: Item
-    size: Normal
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
 
 - type: entity
   id: PresentRandomUnsafe
   parent: [PresentBase, BaseItem]
   suffix: Filled, any item
   components:
-  - type: RandomGift
-    wrapper: PresentTrash
-    sound:
-      path: /Audio/Effects/unwrap.ogg
-    insaneMode: false
-    contentsViewers:
-      components:
-      - Ghost
-      - Santa
+    - type: RandomGift
+      wrapper: PresentTrash
+      sound:
+        path: /Audio/Effects/unwrap.ogg
+      insaneMode: false
+      contentsViewers:
+        components:
+          - Ghost
+          - Santa
 
 - type: entity
   id: PresentRandomInsane
@@ -45,405 +47,405 @@
   parent: [PresentBase, BaseItem]
   suffix: Filled Safe
   components:
-  - type: SpawnItemsOnUse
-    items:
-      - id: PresentTrash
-      - id: Bucket
-        orGroup: GiftPool
-      - id: JetpackMiniFilled
-        orGroup: GiftPool
-      - id: PlushieGhost
-        orGroup: GiftPool
-      - id: PlushieBee
-        orGroup: GiftPool
-      - id: PlushieRGBee
-        orGroup: GiftPool
-      - id: PlushieNuke
-        orGroup: GiftPool
-      - id: PlushieRouny
-        orGroup: GiftPool
-      - id: PlushieLizard #Weh!
-        orGroup: GiftPool
-      - id: PlushieRainbowLizard
-        orGroup: GiftPool
-      - id: PlushieNar
-        orGroup: GiftPool
-      - id: PlushieCarp
-        orGroup: GiftPool
-      - id: PlushieMagicarp
-        orGroup: GiftPool
-      - id: PlushieHolocarp
-        orGroup: GiftPool
-      - id: PlushieRainbowCarp
-        orGroup: GiftPool
-      - id: PlushieSlime
-        orGroup: GiftPool
-      - id: PlushieSnake
-        orGroup: GiftPool
-      - id: PlushieVox
-        orGroup: GiftPool
-      - id: PlushieRatvar
-        orGroup: GiftPool
-      - id: PlushieSpaceLizard
-        orGroup: GiftPool
-      - id: PlushieSharkBlue
-        orGroup: GiftPool
-      - id: PlushieSharkPink
-        orGroup: GiftPool
-      - id: PlushieSharkGrey
-        orGroup: GiftPool
-      - id: ToyAmongPequeno
-        orGroup: GiftPool
-      - id: PlushieDiona
-        orGroup: GiftPool
-      - id: PlushieArachind
-        orGroup: GiftPool
-      - id: ClothingNeckCloakMoth
-        orGroup: GiftPool
-      - id: ToyMouse
-        orGroup: GiftPool
-      - id: ToyAi
-        orGroup: GiftPool
-      - id: ToyNuke
-        orGroup: GiftPool
-      - id: ToyFigurinePassenger
-        orGroup: GiftPool
-      - id: ToyGriffin
-        orGroup: GiftPool
-      - id: ToyHonk
-        orGroup: GiftPool
-      - id: ToyIan
-        orGroup: GiftPool
-      - id: ToyMarauder
-        orGroup: GiftPool
-      - id: ToyMauler
-        orGroup: GiftPool
-      - id: ToyGygax
-        orGroup: GiftPool
-      - id: ToyOdysseus
-        orGroup: GiftPool
-      - id: ToyOwlman
-        orGroup: GiftPool
-      - id: ToyDeathRipley
-        orGroup: GiftPool
-      - id: ToyPhazon
-        orGroup: GiftPool
-      - id: ToyFireRipley
-        orGroup: GiftPool
-      - id: ToyReticence
-        orGroup: GiftPool
-      - id: ToyRipley
-        orGroup: GiftPool
-      - id: ToySeraph
-        orGroup: GiftPool
-      - id: ToyDurand
-        orGroup: GiftPool
-      - id: ToySkeleton
-        orGroup: GiftPool
-      - id: FoamBlade
-        orGroup: GiftPool
-      - id: AcousticGuitarInstrument
-        orGroup: GiftPool
-      - id: ViolinInstrument
-        orGroup: GiftPool
-      - id: TrumpetInstrument
-        orGroup: GiftPool
-      - id: ElectricGuitarInstrument
-        orGroup: GiftPool
-      - id: AccordionInstrument
-        orGroup: GiftPool
-      - id: HarmonicaInstrument
-        orGroup: GiftPool
-      - id: TromboneInstrument
-        orGroup: GiftPool
-      - id: FrenchHornInstrument
-        orGroup: GiftPool
-      - id: BanjoInstrument
-        orGroup: GiftPool
-      - id: SaxophoneInstrument
-        orGroup: GiftPool
-      - id: GlockenspielInstrument
-        orGroup: GiftPool
-      - id: RecorderInstrument
-        orGroup: GiftPool
-      - id: FluteInstrument
-        orGroup: GiftPool
-      - id: ClarinetInstrument
-        orGroup: GiftPool
-      - id: CelloInstrument
-        orGroup: GiftPool
-      - id: KalimbaInstrument
-        orGroup: GiftPool
-      - id: MicrophoneInstrument
-        orGroup: GiftPool
-      - id: BassGuitarInstrument
-        orGroup: GiftPool
-      - id: OcarinaInstrument
-        orGroup: GiftPool
-      - id: PanFluteInstrument
-        orGroup: GiftPool
-      - id: SynthesizerInstrument
-        orGroup: GiftPool
-      - id: BagpipeInstrument
-        orGroup: GiftPool
-      - id: GunpetInstrument
-        orGroup: GiftPool
-      - id: RockGuitarInstrument
-        orGroup: GiftPool
-      - id: MusicBoxInstrument
-        orGroup: GiftPool
-      - id: ViolaInstrument
-        orGroup: GiftPool
-      - id: ClothingNeckCloakTrans
-        orGroup: GiftPool
-      - id: ClothingNeckCloakAdmin
-        orGroup: GiftPool
-      - id: ToySkeleton
-        orGroup: GiftPool
-      - id: Basketball
-        orGroup: GiftPool
-      - id: Football
-        orGroup: GiftPool
-      - id: BalloonCorgi
-        orGroup: GiftPool
-      - id: PonderingOrb
-        orGroup: GiftPool
-      - id: Skub
-        orGroup: GiftPool
-      - id: ClothingEyesGlassesGarGiga
-        orGroup: GiftPool
-      - id: ClothingEyesGlassesGarOrange
-        orGroup: GiftPool
-      - id: ClothingEyesGlassesGar
-        orGroup: GiftPool
-      - id: ClothingNeckBling
-        orGroup: GiftPool
-      - id: ClothingHeadHelmetCosmonaut
-        orGroup: GiftPool
-      - id: ClothingShoeSlippersDuck
-        orGroup: GiftPool
-      - id: ClothingUnderSocksBee
-        orGroup: GiftPool
-      - id: ClothingUnderSocksCoder
-        orGroup: GiftPool
-      - id: ClothingBeltUtilityFilled
-        orGroup: GiftPool
-      - id: WeaponFlareGun
-        orGroup: GiftPool
-      - id: ResearchDisk
-        orGroup: GiftPool
-      - id: Machete
-        orGroup: GiftPool
-      - id: BaseBallBat
-        orGroup: GiftPool
-      - id: CombatKnife
-        orGroup: GiftPool
-      - id: FlashlightLantern
-        orGroup: GiftPool
-      - id: Spear
-        orGroup: GiftPool
-      - id: LidSalami
-        orGroup: GiftPool
-      - id: Soap
-        orGroup: GiftPool
-      - id: SoapHomemade
-        orGroup: GiftPool
-      - id: SoapNT
-        orGroup: GiftPool
-      - id: SoapDeluxe
-        orGroup: GiftPool
-      - id: SoapSyndie
-        orGroup: GiftPool
-      - id: SoapOmega
-        orGroup: GiftPool
-      - id: BedsheetCosmos
-        orGroup: GiftPool
-      - id: BedsheetIan
-        orGroup: GiftPool
-      - id: FoodBoxDonkpocket
-        orGroup: GiftPool
-      - id: FoodBoxDonkpocketSpicy
-        orGroup: GiftPool
-      - id: FoodBoxDonkpocketTeriyaki
-        orGroup: GiftPool
-      - id: FoodBoxDonkpocketPizza
-        orGroup: GiftPool
-      - id: FoodBoxDonkpocketStonk
-        orGroup: GiftPool
-      - id: FoodBoxDonkpocketCarp
-        orGroup: GiftPool
-      - id: FoodBoxDonkpocketBerry
-        orGroup: GiftPool
-      - id: FoodBoxDonkpocketHonk
-        orGroup: GiftPool
-      - id: ClothingHandsGlovesColorPurple
-        orGroup: GiftPool
-      - id: ClothingHandsGlovesColorYellow
-        orGroup: GiftPool
-      - id: ClothingHandsGlovesColorYellowBudget
-        orGroup: GiftPool
-      - id: ClothingEyesGlassesSunglasses
-        orGroup: GiftPool
-      - id: ClothingHeadHatOutlawHat
-        orGroup: GiftPool
-      - id: ClothingHeadHatSantahat
-        orGroup: GiftPool
-      - id: ClothingHeadHatUshanka
-        orGroup: GiftPool
-      - id: ClothingHeadHatXmasCrown
-        orGroup: GiftPool
-      - id: ClothingHeadHatBunny
-        orGroup: GiftPool
-      - id: ClothingHeadHatFlowerWreath
-        orGroup: GiftPool
-      - id: FoodPoppy
-        orGroup: GiftPool
-      - id: ClothingMaskClown
-        orGroup: GiftPool
-      - id: ClothingOuterCoatGentle
-        orGroup: GiftPool
-      - id: ClothingOuterCoatJensen
-        orGroup: GiftPool
-      - id: ClothingOuterHoodieBlack
-        orGroup: GiftPool
-      - id: ClothingOuterHoodieGrey
-        orGroup: GiftPool
-      - id: ClothingOuterVestWebMerc
-        orGroup: GiftPool
-      - id: ClothingShoesFlippers
-        orGroup: GiftPool
-      - id: ClothingUniformJumpsuitAncient
-        orGroup: GiftPool
-      - id: ClothingUniformJumpsuitDetectiveGrey
-        orGroup: GiftPool
-      - id: ClothingUniformJumpsuitColorMaroon
-        orGroup: GiftPool
-      - id: ClothingUniformColorRainbow
-        orGroup: GiftPool
-      - id: ClothingUniformOveralls
-        orGroup: GiftPool
-      - id: ClothingUniformJumpskirtDetectiveGrey
-        orGroup: GiftPool
-      - id: ClothingUniformJumpskirtColorMaroon
-        orGroup: GiftPool
-      - id: ClothingUniformJumpskirtJanimaid
-        orGroup: GiftPool
-      - id: PersonalAI
-        orGroup: GiftPool
-      - id: DiceBag
-        orGroup: GiftPool
-      - id: CrayonBox
-        orGroup: GiftPool
-      - id: ClothingHeadHatCatEars
-        orGroup: GiftPool
-      - id: ClothingHeadHatDogEars
-        orGroup: GiftPool
-      - id: ToySword
-        orGroup: GiftPool
-      - id: RevolverCapGun
-        orGroup: GiftPool
-      - id: Ash
-        orGroup: GiftPool
-      - id: Coal1
-        orGroup: GiftPool
-      - id: MiningDrill
-        orGroup: GiftPool
-      - id: CowToolboxFilled
-        orGroup: GiftPool
-      - id: ClothingUniformJumpsuitEngineeringHazard
-        orGroup: GiftPool
-      - id: Bola
-        orGroup: GiftPool
-      - id: GlowstickBase
-        orGroup: GiftPool
-      - id: GlowstickBlue
-        orGroup: GiftPool
-      - id: GlowstickPurple
-        orGroup: GiftPool
-      - id: GlowstickRed
-        orGroup: GiftPool
-      - id: GlowstickYellow
-        orGroup: GiftPool
-      - id: ToyRubberDuck
-        orGroup: GiftPool
-      - id: BalloonSyn
-        orGroup: GiftPool
-      - id: RGBStaff
-        orGroup: GiftPool
-    sound:
-      path: /Audio/Effects/unwrap.ogg
+    - type: SpawnItemsOnUse
+      items:
+        - id: PresentTrash
+        - id: Bucket
+          orGroup: GiftPool
+        - id: JetpackMiniFilled
+          orGroup: GiftPool
+        - id: PlushieGhost
+          orGroup: GiftPool
+        - id: PlushieBee
+          orGroup: GiftPool
+        - id: PlushieRGBee
+          orGroup: GiftPool
+        - id: PlushieNuke
+          orGroup: GiftPool
+        - id: PlushieRouny
+          orGroup: GiftPool
+        - id: PlushieLizard #Weh!
+          orGroup: GiftPool
+        - id: PlushieRainbowLizard
+          orGroup: GiftPool
+        - id: PlushieNar
+          orGroup: GiftPool
+        - id: PlushieCarp
+          orGroup: GiftPool
+        - id: PlushieMagicarp
+          orGroup: GiftPool
+        - id: PlushieHolocarp
+          orGroup: GiftPool
+        - id: PlushieRainbowCarp
+          orGroup: GiftPool
+        - id: PlushieSlime
+          orGroup: GiftPool
+        - id: PlushieSnake
+          orGroup: GiftPool
+        - id: PlushieVox
+          orGroup: GiftPool
+        - id: PlushieRatvar
+          orGroup: GiftPool
+        - id: PlushieSpaceLizard
+          orGroup: GiftPool
+        - id: PlushieSharkBlue
+          orGroup: GiftPool
+        - id: PlushieSharkPink
+          orGroup: GiftPool
+        - id: PlushieSharkGrey
+          orGroup: GiftPool
+        - id: ToyAmongPequeno
+          orGroup: GiftPool
+        - id: PlushieDiona
+          orGroup: GiftPool
+        - id: PlushieArachind
+          orGroup: GiftPool
+        - id: ClothingNeckCloakMoth
+          orGroup: GiftPool
+        - id: ToyMouse
+          orGroup: GiftPool
+        - id: ToyAi
+          orGroup: GiftPool
+        - id: ToyNuke
+          orGroup: GiftPool
+        - id: ToyFigurinePassenger
+          orGroup: GiftPool
+        - id: ToyGriffin
+          orGroup: GiftPool
+        - id: ToyHonk
+          orGroup: GiftPool
+        - id: ToyIan
+          orGroup: GiftPool
+        - id: ToyMarauder
+          orGroup: GiftPool
+        - id: ToyMauler
+          orGroup: GiftPool
+        - id: ToyGygax
+          orGroup: GiftPool
+        - id: ToyOdysseus
+          orGroup: GiftPool
+        - id: ToyOwlman
+          orGroup: GiftPool
+        - id: ToyDeathRipley
+          orGroup: GiftPool
+        - id: ToyPhazon
+          orGroup: GiftPool
+        - id: ToyFireRipley
+          orGroup: GiftPool
+        - id: ToyReticence
+          orGroup: GiftPool
+        - id: ToyRipley
+          orGroup: GiftPool
+        - id: ToySeraph
+          orGroup: GiftPool
+        - id: ToyDurand
+          orGroup: GiftPool
+        - id: ToySkeleton
+          orGroup: GiftPool
+        - id: FoamBlade
+          orGroup: GiftPool
+        - id: AcousticGuitarInstrument
+          orGroup: GiftPool
+        - id: ViolinInstrument
+          orGroup: GiftPool
+        - id: TrumpetInstrument
+          orGroup: GiftPool
+        - id: ElectricGuitarInstrument
+          orGroup: GiftPool
+        - id: AccordionInstrument
+          orGroup: GiftPool
+        - id: HarmonicaInstrument
+          orGroup: GiftPool
+        - id: TromboneInstrument
+          orGroup: GiftPool
+        - id: FrenchHornInstrument
+          orGroup: GiftPool
+        - id: BanjoInstrument
+          orGroup: GiftPool
+        - id: SaxophoneInstrument
+          orGroup: GiftPool
+        - id: GlockenspielInstrument
+          orGroup: GiftPool
+        - id: RecorderInstrument
+          orGroup: GiftPool
+        - id: FluteInstrument
+          orGroup: GiftPool
+        - id: ClarinetInstrument
+          orGroup: GiftPool
+        - id: CelloInstrument
+          orGroup: GiftPool
+        - id: KalimbaInstrument
+          orGroup: GiftPool
+        - id: MicrophoneInstrument
+          orGroup: GiftPool
+        - id: BassGuitarInstrument
+          orGroup: GiftPool
+        - id: OcarinaInstrument
+          orGroup: GiftPool
+        - id: PanFluteInstrument
+          orGroup: GiftPool
+        - id: SynthesizerInstrument
+          orGroup: GiftPool
+        - id: BagpipeInstrument
+          orGroup: GiftPool
+        - id: GunpetInstrument
+          orGroup: GiftPool
+        - id: RockGuitarInstrument
+          orGroup: GiftPool
+        - id: MusicBoxInstrument
+          orGroup: GiftPool
+        - id: ViolaInstrument
+          orGroup: GiftPool
+        - id: ClothingNeckCloakTrans
+          orGroup: GiftPool
+        - id: ClothingNeckCloakAdmin
+          orGroup: GiftPool
+        - id: ToySkeleton
+          orGroup: GiftPool
+        - id: Basketball
+          orGroup: GiftPool
+        - id: Football
+          orGroup: GiftPool
+        - id: BalloonCorgi
+          orGroup: GiftPool
+        - id: PonderingOrb
+          orGroup: GiftPool
+        - id: Skub
+          orGroup: GiftPool
+        - id: ClothingEyesGlassesGarGiga
+          orGroup: GiftPool
+        - id: ClothingEyesGlassesGarOrange
+          orGroup: GiftPool
+        - id: ClothingEyesGlassesGar
+          orGroup: GiftPool
+        - id: ClothingNeckBling
+          orGroup: GiftPool
+        - id: ClothingHeadHelmetCosmonaut
+          orGroup: GiftPool
+        - id: ClothingShoeSlippersDuck
+          orGroup: GiftPool
+        - id: ClothingUnderSocksBee
+          orGroup: GiftPool
+        - id: ClothingUnderSocksCoder
+          orGroup: GiftPool
+        - id: ClothingBeltUtilityFilled
+          orGroup: GiftPool
+        - id: WeaponFlareGun
+          orGroup: GiftPool
+        - id: ResearchDisk
+          orGroup: GiftPool
+        - id: Machete
+          orGroup: GiftPool
+        - id: BaseBallBat
+          orGroup: GiftPool
+        - id: CombatKnife
+          orGroup: GiftPool
+        - id: FlashlightLantern
+          orGroup: GiftPool
+        - id: Spear
+          orGroup: GiftPool
+        - id: LidSalami
+          orGroup: GiftPool
+        - id: Soap
+          orGroup: GiftPool
+        - id: SoapHomemade
+          orGroup: GiftPool
+        - id: SoapNT
+          orGroup: GiftPool
+        - id: SoapDeluxe
+          orGroup: GiftPool
+        - id: SoapSyndie
+          orGroup: GiftPool
+        - id: SoapOmega
+          orGroup: GiftPool
+        - id: BedsheetCosmos
+          orGroup: GiftPool
+        - id: BedsheetIan
+          orGroup: GiftPool
+        - id: FoodBoxDonkpocket
+          orGroup: GiftPool
+        - id: FoodBoxDonkpocketSpicy
+          orGroup: GiftPool
+        - id: FoodBoxDonkpocketTeriyaki
+          orGroup: GiftPool
+        - id: FoodBoxDonkpocketPizza
+          orGroup: GiftPool
+        - id: FoodBoxDonkpocketStonk
+          orGroup: GiftPool
+        - id: FoodBoxDonkpocketCarp
+          orGroup: GiftPool
+        - id: FoodBoxDonkpocketBerry
+          orGroup: GiftPool
+        - id: FoodBoxDonkpocketHonk
+          orGroup: GiftPool
+        - id: ClothingHandsGlovesColorPurple
+          orGroup: GiftPool
+        - id: ClothingHandsGlovesColorYellow
+          orGroup: GiftPool
+        - id: ClothingHandsGlovesColorYellowBudget
+          orGroup: GiftPool
+        - id: ClothingEyesGlassesSunglasses
+          orGroup: GiftPool
+        - id: ClothingHeadHatOutlawHat
+          orGroup: GiftPool
+        - id: ClothingHeadHatSantahat
+          orGroup: GiftPool
+        - id: ClothingHeadHatUshanka
+          orGroup: GiftPool
+        - id: ClothingHeadHatXmasCrown
+          orGroup: GiftPool
+        - id: ClothingHeadHatBunny
+          orGroup: GiftPool
+        - id: ClothingHeadHatFlowerWreath
+          orGroup: GiftPool
+        - id: FoodPoppy
+          orGroup: GiftPool
+        - id: ClothingMaskClown
+          orGroup: GiftPool
+        - id: ClothingOuterCoatGentle
+          orGroup: GiftPool
+        - id: ClothingOuterCoatJensen
+          orGroup: GiftPool
+        - id: ClothingOuterHoodieBlack
+          orGroup: GiftPool
+        - id: ClothingOuterHoodieGrey
+          orGroup: GiftPool
+        - id: ClothingOuterVestWebMerc
+          orGroup: GiftPool
+        - id: ClothingShoesFlippers
+          orGroup: GiftPool
+        - id: ClothingUniformJumpsuitAncient
+          orGroup: GiftPool
+        - id: ClothingUniformJumpsuitDetectiveGrey
+          orGroup: GiftPool
+        - id: ClothingUniformJumpsuitColorMaroon
+          orGroup: GiftPool
+        - id: ClothingUniformColorRainbow
+          orGroup: GiftPool
+        - id: ClothingUniformOveralls
+          orGroup: GiftPool
+        - id: ClothingUniformJumpskirtDetectiveGrey
+          orGroup: GiftPool
+        - id: ClothingUniformJumpskirtColorMaroon
+          orGroup: GiftPool
+        - id: ClothingUniformJumpskirtJanimaid
+          orGroup: GiftPool
+        - id: PersonalAI
+          orGroup: GiftPool
+        - id: DiceBag
+          orGroup: GiftPool
+        - id: CrayonBox
+          orGroup: GiftPool
+        - id: ClothingHeadHatCatEars
+          orGroup: GiftPool
+        - id: ClothingHeadHatDogEars
+          orGroup: GiftPool
+        - id: ToySword
+          orGroup: GiftPool
+        - id: RevolverCapGun
+          orGroup: GiftPool
+        - id: Ash
+          orGroup: GiftPool
+        - id: Coal1
+          orGroup: GiftPool
+        - id: MiningDrill
+          orGroup: GiftPool
+        - id: CowToolboxFilled
+          orGroup: GiftPool
+        - id: ClothingUniformJumpsuitEngineeringHazard
+          orGroup: GiftPool
+        - id: Bola
+          orGroup: GiftPool
+        - id: GlowstickBase
+          orGroup: GiftPool
+        - id: GlowstickBlue
+          orGroup: GiftPool
+        - id: GlowstickPurple
+          orGroup: GiftPool
+        - id: GlowstickRed
+          orGroup: GiftPool
+        - id: GlowstickYellow
+          orGroup: GiftPool
+        - id: ToyRubberDuck
+          orGroup: GiftPool
+        - id: BalloonSyn
+          orGroup: GiftPool
+        - id: RGBStaff
+          orGroup: GiftPool
+      sound:
+        path: /Audio/Effects/unwrap.ogg
 
 - type: entity
   id: PresentRandomCoal
   parent: [PresentBase, BaseItem]
   suffix: Filled Coal
   components:
-  - type: SpawnItemsOnUse
-    items:
-      - id: PresentTrash
-      - id: Coal1
-        orGroup: GiftPool
-      - id: Coal5
-        prob: .4
-        orGroup: GiftPool
-      - id: Coal10
-        prob: .2
-        orGroup: GiftPool
-      - id: Coal15
-        prob: .1
-        orGroup: GiftPool
-    sound:
-      path: /Audio/Effects/unwrap.ogg
+    - type: SpawnItemsOnUse
+      items:
+        - id: PresentTrash
+        - id: Coal1
+          orGroup: GiftPool
+        - id: Coal5
+          prob: .4
+          orGroup: GiftPool
+        - id: Coal10
+          prob: .2
+          orGroup: GiftPool
+        - id: Coal15
+          prob: .1
+          orGroup: GiftPool
+      sound:
+        path: /Audio/Effects/unwrap.ogg
 
 - type: entity
   id: PresentRandomCash
   parent: [PresentBase, BaseItem]
   suffix: Filled Cash
   components:
-  - type: SpawnItemsOnUse
-    items:
-      - id: PresentTrash
-      - id: SpaceCash
-        prob: .01
-        orGroup: GiftPool
-      - id: SpaceCash10
-        prob: .1
-        orGroup: GiftPool
-      - id: SpaceCash100
-        prob: .5
-        orGroup: GiftPool
-      - id: SpaceCash500
-        orGroup: GiftPool
-      - id: SpaceCash1000
-        prob: .01
-        orGroup: GiftPool
-      - id: SpaceCash2500
-        prob: .004
-        orGroup: GiftPool
-      - id: SpaceCash5000
-        prob: .002
-        orGroup: GiftPool
-      - id: SpaceCash10000
-        prob: .001
-        orGroup: GiftPool
-      - id: SpaceCash1000000
-        prob: .000001
-        orGroup: GiftPool
-    sound:
-      path: /Audio/Effects/unwrap.ogg
+    - type: SpawnItemsOnUse
+      items:
+        - id: PresentTrash
+        - id: SpaceCash
+          prob: .01
+          orGroup: GiftPool
+        - id: SpaceCash10
+          prob: .1
+          orGroup: GiftPool
+        - id: SpaceCash100
+          prob: .5
+          orGroup: GiftPool
+        - id: SpaceCash500
+          orGroup: GiftPool
+        - id: SpaceCash1000
+          prob: .01
+          orGroup: GiftPool
+        - id: SpaceCash2500
+          prob: .004
+          orGroup: GiftPool
+        - id: SpaceCash5000
+          prob: .002
+          orGroup: GiftPool
+        - id: SpaceCash10000
+          prob: .001
+          orGroup: GiftPool
+        - id: SpaceCash1000000
+          prob: .000001
+          orGroup: GiftPool
+      sound:
+        path: /Audio/Effects/unwrap.ogg
 
 - type: entity
   id: PresentTrash
-  categories: [ HideSpawnMenu ]
+  categories: [HideSpawnMenu]
   parent: BaseItem
   name: wrapping paper
   description: Carefully folded, taped, and tied with a bow. Then ceremoniously ripped apart and tossed on the floor.
   components:
-  - type: Sprite
-    sprite: Objects/Decoration/present.rsi
-    layers:
-      - state: unwrapped
-  - type: Tag
-    tags:
-    - Trash
-  - type: SpaceGarbage
+    - type: Sprite
+      sprite: Objects/Decoration/present.rsi
+      layers:
+        - state: unwrapped
+    - type: Tag
+      tags:
+        - Trash
+    - type: SpaceGarbage

+ 47 - 45
Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml

@@ -13,23 +13,25 @@
   name: timer trigger
   description: A configurable timer.
   components:
-  - type: Sprite
-    sprite: Objects/Devices/timer.rsi
-    state: timer
-  - type: Item
-    size: Small
-  - type: StaticPrice
-    price: 40
-  - type: PayloadTrigger
-    components:
-    - type: OnUseTimerTrigger
-      delay: 5
-      delayOptions: [3, 5, 10, 15, 30]
-      initialBeepDelay: 0
-      beepSound:
-        path: /Audio/Machines/Nuke/general_beep.ogg
-        params:
-          volume: -2
+    - type: Sprite
+      sprite: Objects/Devices/timer.rsi
+      state: timer
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: StaticPrice
+      price: 40
+    - type: PayloadTrigger
+      components:
+        - type: OnUseTimerTrigger
+          delay: 5
+          delayOptions: [3, 5, 10, 15, 30]
+          initialBeepDelay: 0
+          beepSound:
+            path: /Audio/Machines/Nuke/general_beep.ogg
+            params:
+              volume: -2
 
 - type: entity
   parent: TimerTrigger
@@ -37,23 +39,23 @@
   name: signal trigger
   description: Adds a machine link that is triggered by signals.
   components:
-  - type: Sprite
-    sprite: Objects/Devices/signaltrigger.rsi
-    state: signaltrigger
-  - type: StaticPrice
-    price: 40
-  - type: Tag
-    tags:
-    - SignalTrigger
-  - type: PayloadTrigger
-    components:
-    - type: TriggerOnSignal
-    - type: DeviceNetwork
-      deviceNetId: Wireless
-      receiveFrequencyId: BasicDevice
-    - type: WirelessNetworkConnection
-      range: 200
-    - type: DeviceLinkSink
+    - type: Sprite
+      sprite: Objects/Devices/signaltrigger.rsi
+      state: signaltrigger
+    - type: StaticPrice
+      price: 40
+    - type: Tag
+      tags:
+        - SignalTrigger
+    - type: PayloadTrigger
+      components:
+        - type: TriggerOnSignal
+        - type: DeviceNetwork
+          deviceNetId: Wireless
+          receiveFrequencyId: BasicDevice
+        - type: WirelessNetworkConnection
+          range: 200
+        - type: DeviceLinkSink
 
 - type: entity
   parent: BaseItem
@@ -61,14 +63,14 @@
   name: voice trigger
   description: Adds a machine link that is triggered by vocal keywords.
   components:
-  - type: Sprite
-    sprite: Objects/Devices/voice.rsi
-    state: voice
-  - type: StaticPrice
-    price: 40
-  - type: Tag
-    tags:
-    - VoiceTrigger
-  - type: PayloadTrigger
-    components:
-    - type: TriggerOnVoice
+    - type: Sprite
+      sprite: Objects/Devices/voice.rsi
+      state: voice
+    - type: StaticPrice
+      price: 40
+    - type: Tag
+      tags:
+        - VoiceTrigger
+    - type: PayloadTrigger
+      components:
+        - type: TriggerOnVoice

+ 10 - 8
Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/chimp_upgrade_kit.yml

@@ -4,11 +4,13 @@
   id: WeaponPistolCHIMPUpgradeKit
   description: An experimental upgrade kit for the C.H.I.M.P.
   components:
-  - type: Sprite
-    sprite: Objects/Misc/module.rsi
-    state: abductor_mod
-  - type: Item
-    size: Small
-  - type: Tag
-    tags:
-    - WeaponPistolCHIMPUpgradeKit
+    - type: Sprite
+      sprite: Objects/Misc/module.rsi
+      state: abductor_mod
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: Tag
+      tags:
+        - WeaponPistolCHIMPUpgradeKit

+ 33 - 33
Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml

@@ -4,36 +4,36 @@
   name: singularity beacon
   description: A syndicate device that attracts the singularity. If it's loose and you're seeing this, run.
   components:
-  - type: Sprite
-    sprite: Objects/Devices/singularity_beacon.rsi
-    layers:
-    - state: icon
-  - type: Item
-    size: Huge
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape:
-          !type:PhysShapeAabb
-          bounds: "-0.40,-0.40,0.40,0.40"
-        density: 80
-        mask:
-        - MachineMask
-        layer:
-        - MachineLayer
-  - type: SingularityAttractor
-    baseRange: 80
-  - type: SinguloFood
-    energy: 120
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 50
-      behaviors:
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]
-  - type: ApcPowerReceiver
-    powerLoad: 15000
-  - type: StaticPrice
-    price: 1500
+    - type: Sprite
+      sprite: Objects/Devices/singularity_beacon.rsi
+      layers:
+        - state: icon
+    - type: STWeight
+      self: 8
+    - type: Item
+      size: Huge
+    - type: Fixtures
+      fixtures:
+        fix1:
+          shape: !type:PhysShapeAabb
+            bounds: "-0.40,-0.40,0.40,0.40"
+          density: 80
+          mask:
+            - MachineMask
+          layer:
+            - MachineLayer
+    - type: SingularityAttractor
+      baseRange: 80
+    - type: SinguloFood
+      energy: 120
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 50
+          behaviors:
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+    - type: ApcPowerReceiver
+      powerLoad: 15000
+    - type: StaticPrice
+      price: 1500

+ 2 - 0
Resources/Prototypes/Entities/Objects/Devices/flatpack.yml

@@ -6,6 +6,8 @@
   categories:
     - HideSpawnMenu
   components:
+    - type: STWeight
+      self: 5
     - type: Item
       size: Large
     - type: Sprite

+ 2 - 0
Resources/Prototypes/Entities/Objects/Devices/forensic_scanner.yml

@@ -7,6 +7,8 @@
     - type: Sprite
       sprite: Objects/Devices/forensic_scanner.rsi
       state: forensicnew
+    - type: STWeight
+      self: 1
     - type: Item
       size: Small
       storedRotation: 90

Diferenças do arquivo suprimidas por serem muito extensas
+ 399 - 435
Resources/Prototypes/Entities/Objects/Devices/pda.yml


+ 248 - 246
Resources/Prototypes/Entities/Objects/Devices/station_beacon.yml

@@ -7,76 +7,76 @@
     mode: SnapgridCenter
   suffix: General
   components:
-  - type: Sprite
-    sprite: Objects/Devices/station_beacon.rsi
-    drawdepth: BelowFloor
-    layers:
-    - state: blink
-      map: ["base"]
-  - type: Appearance
-  - type: GenericVisualizer
-    visuals:
-      enum.NavMapBeaconVisuals.Enabled:
-        base:
-          True: {state: blink}
-          False: {state: icon}
-  - type: ConfigurableNavMapBeacon
-  - type: NavMapBeacon
-    defaultText: station-beacon-general
-    color: "#D4D4D496"
-  - type: WarpPoint
-  - type: ActivatableUI
-    key: enum.NavMapBeaconUiKey.Key
-    singleUser: true
-  - type: UserInterface
-    interfaces:
-      enum.NavMapBeaconUiKey.Key:
-        type: NavMapBeaconBoundUserInterface
-  - type: Item
-    size: Small
-  - type: Visibility
-    layer: 1
-  - type: SubFloorHide
-  - type: Anchorable
-  - type: Construction
-    graph: StationBeaconPart
-    node: complete
-  - type: CollideOnAnchor
-  - type: Physics
-    canCollide: false
-    bodyType: static
-  - type: Transform
-    anchored: true
-  - type: Damageable
-    damageContainer: Inorganic
-    damageModifierSet: Metallic
-  - type: Destructible
-    thresholds:
-    - trigger: # for nukes
-        !type:DamageTrigger
-        damage: 200
-      behaviors:
-        - !type:DoActsBehavior
-          acts: ["Destruction"]
-    - trigger:
-        !type:DamageTrigger
-        damage: 100
-      behaviors:
-        - !type:PlaySoundBehavior
-          sound:
-            collection: MetalBreak
-            params:
-              volume: -8
-        - !type:SpawnEntitiesBehavior
-          spawn:
-            SheetSteel1:
-              min: 1
-              max: 1
-          offset: 0
-        - !type:DoActsBehavior
-          acts: ["Breakage"]
-  - type: StaticPrice
-    price: 25
+    - type: Sprite
+      sprite: Objects/Devices/station_beacon.rsi
+      drawdepth: BelowFloor
+      layers:
+        - state: blink
+          map: ["base"]
+    - type: Appearance
+    - type: GenericVisualizer
+      visuals:
+        enum.NavMapBeaconVisuals.Enabled:
+          base:
+            True: { state: blink }
+            False: { state: icon }
+    - type: ConfigurableNavMapBeacon
+    - type: NavMapBeacon
+      defaultText: station-beacon-general
+      color: "#D4D4D496"
+    - type: WarpPoint
+    - type: ActivatableUI
+      key: enum.NavMapBeaconUiKey.Key
+      singleUser: true
+    - type: UserInterface
+      interfaces:
+        enum.NavMapBeaconUiKey.Key:
+          type: NavMapBeaconBoundUserInterface
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: Visibility
+      layer: 1
+    - type: SubFloorHide
+    - type: Anchorable
+    - type: Construction
+      graph: StationBeaconPart
+      node: complete
+    - type: CollideOnAnchor
+    - type: Physics
+      canCollide: false
+      bodyType: static
+    - type: Transform
+      anchored: true
+    - type: Damageable
+      damageContainer: Inorganic
+      damageModifierSet: Metallic
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger # for nukes
+            damage: 200
+          behaviors:
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+        - trigger: !type:DamageTrigger
+            damage: 100
+          behaviors:
+            - !type:PlaySoundBehavior
+              sound:
+                collection: MetalBreak
+                params:
+                  volume: -8
+            - !type:SpawnEntitiesBehavior
+              spawn:
+                SheetSteel1:
+                  min: 1
+                  max: 1
+              offset: 0
+            - !type:DoActsBehavior
+              acts: ["Breakage"]
+    - type: StaticPrice
+      price: 25
 
 - type: entity
   parent: DefaultStationBeacon
@@ -85,16 +85,16 @@
   placement:
     mode: PlaceFree
   components:
-  - type: Sprite
-    sprite: Objects/Devices/station_beacon.rsi
-    layers:
-    - state: icon
-      map: ["base"]
-  - type: Physics
-    canCollide: true
-    bodyType: dynamic
-  - type: Transform
-    anchored: false
+    - type: Sprite
+      sprite: Objects/Devices/station_beacon.rsi
+      layers:
+        - state: icon
+          map: ["base"]
+    - type: Physics
+      canCollide: true
+      bodyType: dynamic
+    - type: Transform
+      anchored: false
 
 - type: entity
   parent: BaseItem
@@ -102,16 +102,18 @@
   name: station beacon flatpack
   description: A flatpack used for constructing a station beacon.
   components:
-  - type: Item
-    size: Small
-    sprite: Objects/Devices/station_beacon.rsi
-  - type: Sprite
-    sprite: Objects/Devices/station_beacon.rsi
-    state: assembly
-  - type: Construction
-    graph: StationBeaconPart
-    node: start
-    defaultTarget: complete
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      sprite: Objects/Devices/station_beacon.rsi
+    - type: Sprite
+      sprite: Objects/Devices/station_beacon.rsi
+      state: assembly
+    - type: Construction
+      graph: StationBeaconPart
+      node: start
+      defaultTarget: complete
 
 # Prototypes for various default beacon configurations.
 - type: entity
@@ -119,597 +121,597 @@
   id: DefaultStationBeaconCommand
   suffix: Command
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-command
-    color: "#FFFF00"
+    - type: NavMapBeacon
+      defaultText: station-beacon-command
+      color: "#FFFF00"
 
 - type: entity
   parent: DefaultStationBeaconCommand
   id: DefaultStationBeaconBridge
   suffix: Bridge
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-bridge
+    - type: NavMapBeacon
+      defaultText: station-beacon-bridge
 
 - type: entity
   parent: DefaultStationBeaconCommand
   id: DefaultStationBeaconVault
   suffix: Vault
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-vault
+    - type: NavMapBeacon
+      defaultText: station-beacon-vault
 
 - type: entity
   parent: DefaultStationBeaconCommand
   id: DefaultStationBeaconGateway
   suffix: Gateway
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-gateway
+    - type: NavMapBeacon
+      defaultText: station-beacon-gateway
 
 - type: entity
   parent: DefaultStationBeaconCommand
   id: DefaultStationBeaconCaptainsQuarters
   suffix: Captain's Quarters
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-captain
+    - type: NavMapBeacon
+      defaultText: station-beacon-captain
 
 - type: entity
   parent: DefaultStationBeaconCommand
   id: DefaultStationBeaconHOPOffice
   suffix: HOP's Office
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-hop
+    - type: NavMapBeacon
+      defaultText: station-beacon-hop
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconSecurity
   suffix: Security
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-security
-    color: "#DE3A3A"
+    - type: NavMapBeacon
+      defaultText: station-beacon-security
+      color: "#DE3A3A"
 
 - type: entity
   parent: DefaultStationBeaconSecurity
   id: DefaultStationBeaconBrig
   suffix: Brig
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-brig
+    - type: NavMapBeacon
+      defaultText: station-beacon-brig
 
 - type: entity
   parent: DefaultStationBeaconSecurity
   id: DefaultStationBeaconBrigMed
   suffix: Brig Med
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-brig-med
+    - type: NavMapBeacon
+      defaultText: station-beacon-brig-med
 
 - type: entity
   parent: DefaultStationBeaconSecurity
   id: DefaultStationBeaconWardensOffice
   suffix: Warden's Office
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-warden
+    - type: NavMapBeacon
+      defaultText: station-beacon-warden
 
 - type: entity
   parent: DefaultStationBeaconSecurity
   id: DefaultStationBeaconHOSRoom
   suffix: HOS’s Room
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-hos
+    - type: NavMapBeacon
+      defaultText: station-beacon-hos
 
 - type: entity
   parent: DefaultStationBeaconSecurity
   id: DefaultStationBeaconArmory
   suffix: Armory
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-armory
+    - type: NavMapBeacon
+      defaultText: station-beacon-armory
 
 - type: entity
   parent: DefaultStationBeaconSecurity
   id: DefaultStationBeaconPermaBrig
   suffix: Perma Brig
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-perma-brig
+    - type: NavMapBeacon
+      defaultText: station-beacon-perma-brig
 
 - type: entity
   parent: DefaultStationBeaconSecurity
   id: DefaultStationBeaconDetectiveRoom
   suffix: Detective's Room
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-detective
+    - type: NavMapBeacon
+      defaultText: station-beacon-detective
 
 - type: entity
   parent: DefaultStationBeaconSecurity
   id: DefaultStationBeaconCourtroom
   suffix: Courtroom
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-courtroom
+    - type: NavMapBeacon
+      defaultText: station-beacon-courtroom
 
 - type: entity
   parent: DefaultStationBeaconSecurity
   id: DefaultStationBeaconLawOffice
   suffix: Law Office
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-law
+    - type: NavMapBeacon
+      defaultText: station-beacon-law
 
 - type: entity
   parent: DefaultStationBeaconSecurity
   id: DefaultStationBeaconSecurityCheckpoint
   suffix: Sec Checkpoint
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-security-checkpoint
+    - type: NavMapBeacon
+      defaultText: station-beacon-security-checkpoint
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconMedical
   suffix: Medical
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-medical
-    color: "#52B4E9"
+    - type: NavMapBeacon
+      defaultText: station-beacon-medical
+      color: "#52B4E9"
 
 - type: entity
   parent: DefaultStationBeaconMedical
   id: DefaultStationBeaconMedbay
   suffix: Medbay
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-medbay
+    - type: NavMapBeacon
+      defaultText: station-beacon-medbay
 
 - type: entity
   parent: DefaultStationBeaconMedical
   id: DefaultStationBeaconChemistry
   suffix: Chemistry
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-chemistry
+    - type: NavMapBeacon
+      defaultText: station-beacon-chemistry
 
 - type: entity
   parent: DefaultStationBeaconMedical
   id: DefaultStationBeaconCryonics
   suffix: Cryonics
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-cryonics
+    - type: NavMapBeacon
+      defaultText: station-beacon-cryonics
 
 - type: entity
   parent: DefaultStationBeaconMedical
   id: DefaultStationBeaconCMORoom
   suffix: CMO's room
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-cmo
+    - type: NavMapBeacon
+      defaultText: station-beacon-cmo
 
 - type: entity
   parent: DefaultStationBeaconMedical
   id: DefaultStationBeaconMorgue
   suffix: Morgue
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-morgue
+    - type: NavMapBeacon
+      defaultText: station-beacon-morgue
 
 - type: entity
   parent: DefaultStationBeaconMedical
   id: DefaultStationBeaconSurgery
   suffix: Surgery
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-surgery
+    - type: NavMapBeacon
+      defaultText: station-beacon-surgery
 
 - type: entity
   parent: DefaultStationBeaconMedical
   id: DefaultStationBeaconPsychology
   suffix: Psychology
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-psychology
+    - type: NavMapBeacon
+      defaultText: station-beacon-psychology
 
 - type: entity
   parent: DefaultStationBeaconMedical
   id: DefaultStationBeaconClinic
   suffix: Clinic
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-clinic
+    - type: NavMapBeacon
+      defaultText: station-beacon-clinic
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconScience
   suffix: Science
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-science
-    color: "#D381C9"
+    - type: NavMapBeacon
+      defaultText: station-beacon-science
+      color: "#D381C9"
 
 - type: entity
   parent: DefaultStationBeaconScience
   id: DefaultStationBeaconRND
   suffix: Research and Development
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-research-and-development
+    - type: NavMapBeacon
+      defaultText: station-beacon-research-and-development
 
 - type: entity
   parent: DefaultStationBeaconScience
   id: DefaultStationBeaconServerRoom
   suffix: Research Server Room
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-research-server
+    - type: NavMapBeacon
+      defaultText: station-beacon-research-server
 
 - type: entity
   parent: DefaultStationBeaconScience
   id: DefaultStationBeaconRDRoom
   suffix: RD's Room
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-research-director
+    - type: NavMapBeacon
+      defaultText: station-beacon-research-director
 
 - type: entity
   parent: DefaultStationBeaconScience
   id: DefaultStationBeaconRobotics
   suffix: Robotics
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-robotics
+    - type: NavMapBeacon
+      defaultText: station-beacon-robotics
 
 - type: entity
   parent: DefaultStationBeaconScience
   id: DefaultStationBeaconArtifactLab
   suffix: Artifact Lab
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-artifact-lab
+    - type: NavMapBeacon
+      defaultText: station-beacon-artifact-lab
 
 - type: entity
   parent: DefaultStationBeaconScience
   id: DefaultStationBeaconAnomalyGenerator
   suffix: Anomaly Generator
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-anomaly-gen
+    - type: NavMapBeacon
+      defaultText: station-beacon-anomaly-gen
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconSupply
   suffix: Supply
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-supply
-    color: "#A46106"
+    - type: NavMapBeacon
+      defaultText: station-beacon-supply
+      color: "#A46106"
 
 - type: entity
   parent: DefaultStationBeaconSupply
   id: DefaultStationBeaconCargoReception
   suffix: Cargo Reception
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-cargo
+    - type: NavMapBeacon
+      defaultText: station-beacon-cargo
 
 - type: entity
   parent: DefaultStationBeaconSupply
   id: DefaultStationBeaconCargoBay
   suffix: Cargo Bay
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-cargo-bay
+    - type: NavMapBeacon
+      defaultText: station-beacon-cargo-bay
 
 - type: entity
   parent: DefaultStationBeaconSupply
   id: DefaultStationBeaconQMRoom
   suffix: QM's Room
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-qm
+    - type: NavMapBeacon
+      defaultText: station-beacon-qm
 
 - type: entity
   parent: DefaultStationBeaconSupply
   id: DefaultStationBeaconSalvage
   suffix: Salvage
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-salvage
+    - type: NavMapBeacon
+      defaultText: station-beacon-salvage
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconEngineering
   suffix: Engineering
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-engineering
-    color: "#EFB341"
+    - type: NavMapBeacon
+      defaultText: station-beacon-engineering
+      color: "#EFB341"
 
 - type: entity
   parent: DefaultStationBeaconEngineering
   id: DefaultStationBeaconCERoom
   suffix: CE's Room
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-ce
+    - type: NavMapBeacon
+      defaultText: station-beacon-ce
 
 - type: entity
   parent: DefaultStationBeaconEngineering
   id: DefaultStationBeaconAME
   suffix: AME
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-ame
+    - type: NavMapBeacon
+      defaultText: station-beacon-ame
 
 - type: entity
   parent: DefaultStationBeaconEngineering
   id: DefaultStationBeaconSolars
   suffix: Solars
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-solars
+    - type: NavMapBeacon
+      defaultText: station-beacon-solars
 
 - type: entity
   parent: DefaultStationBeaconEngineering
   id: DefaultStationBeaconGravGen
   suffix: Grav Gen
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-gravgen
+    - type: NavMapBeacon
+      defaultText: station-beacon-gravgen
 
 - type: entity
   parent: DefaultStationBeaconEngineering
   id: DefaultStationBeaconAnchor
   suffix: Anchor
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-anchor
+    - type: NavMapBeacon
+      defaultText: station-beacon-anchor
 
 - type: entity
   parent: DefaultStationBeaconEngineering
   id: DefaultStationBeaconSingularity
   suffix: PA Control
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-pa
+    - type: NavMapBeacon
+      defaultText: station-beacon-pa
 
 - type: entity
   parent: DefaultStationBeaconEngineering
   id: DefaultStationBeaconPowerBank
   suffix: SMES Power Bank
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-smes
+    - type: NavMapBeacon
+      defaultText: station-beacon-smes
 
 - type: entity
   parent: DefaultStationBeaconEngineering
   id: DefaultStationBeaconTelecoms
   suffix: Telecoms
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-telecoms
+    - type: NavMapBeacon
+      defaultText: station-beacon-telecoms
 
 - type: entity
   parent: DefaultStationBeaconEngineering
   id: DefaultStationBeaconAtmospherics
   suffix: Atmospherics
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-atmos
+    - type: NavMapBeacon
+      defaultText: station-beacon-atmos
 
 - type: entity
   parent: DefaultStationBeaconEngineering
   id: DefaultStationBeaconTEG
   suffix: TEG
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-teg
+    - type: NavMapBeacon
+      defaultText: station-beacon-teg
 
 - type: entity
   parent: DefaultStationBeaconEngineering
   id: DefaultStationBeaconTechVault
   suffix: Tech Vault
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-tech-vault
+    - type: NavMapBeacon
+      defaultText: station-beacon-tech-vault
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconService
   suffix: Service
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-service
-    color: "#9FED58"
+    - type: NavMapBeacon
+      defaultText: station-beacon-service
+      color: "#9FED58"
 
 - type: entity
   parent: DefaultStationBeaconService
   id: DefaultStationBeaconKitchen
   suffix: Kitchen
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-kitchen
+    - type: NavMapBeacon
+      defaultText: station-beacon-kitchen
 
 - type: entity
   parent: DefaultStationBeaconService
   id: DefaultStationBeaconBar
   suffix: Bar
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-bar
+    - type: NavMapBeacon
+      defaultText: station-beacon-bar
 
 - type: entity
   parent: DefaultStationBeaconService
   id: DefaultStationBeaconBotany
   suffix: Botany
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-botany
+    - type: NavMapBeacon
+      defaultText: station-beacon-botany
 
 - type: entity
   parent: DefaultStationBeaconService
   id: DefaultStationBeaconJanitorsCloset
   suffix: Janitor's Closet
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-janitor
+    - type: NavMapBeacon
+      defaultText: station-beacon-janitor
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconAI
   suffix: AI
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-ai
-    color: "#5ed7aa"
+    - type: NavMapBeacon
+      defaultText: station-beacon-ai
+      color: "#5ed7aa"
 
 - type: entity
   parent: DefaultStationBeaconAI
   id: DefaultStationBeaconAISatellite
   suffix: AI Satellite
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-ai-sat
+    - type: NavMapBeacon
+      defaultText: station-beacon-ai-sat
 
 - type: entity
   parent: DefaultStationBeaconAI
   id: DefaultStationBeaconAICore
   suffix: AI Core
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-ai-core
+    - type: NavMapBeacon
+      defaultText: station-beacon-ai-core
 
 - type: entity
   parent: DefaultStationBeaconAI
   id: DefaultStationBeaconAIUpload
   suffix: AI Upload
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-ai-upload
+    - type: NavMapBeacon
+      defaultText: station-beacon-ai-upload
 
 - type: entity
   parent: DefaultStationBeaconAI
   id: DefaultStationBeaconAIPower
   suffix: AI Power
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-ai-power
+    - type: NavMapBeacon
+      defaultText: station-beacon-ai-power
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconArrivals
   suffix: Arrivals
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-arrivals
+    - type: NavMapBeacon
+      defaultText: station-beacon-arrivals
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconEvac
   suffix: Evac
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-evac
+    - type: NavMapBeacon
+      defaultText: station-beacon-evac
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconDockingArm
   suffix: Docking Arm
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-docking-arm
+    - type: NavMapBeacon
+      defaultText: station-beacon-docking-arm
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconEVAStorage
   suffix: EVA Storage
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-eva-storage
+    - type: NavMapBeacon
+      defaultText: station-beacon-eva-storage
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconChapel
   suffix: Chapel
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-chapel
+    - type: NavMapBeacon
+      defaultText: station-beacon-chapel
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconLibrary
   suffix: Library
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-library
+    - type: NavMapBeacon
+      defaultText: station-beacon-library
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconReporter
   suffix: Reporter
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-reporter
+    - type: NavMapBeacon
+      defaultText: station-beacon-reporter
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconTheater
   suffix: Theater
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-theater
+    - type: NavMapBeacon
+      defaultText: station-beacon-theater
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconDorms
   suffix: Dorms
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-dorms
+    - type: NavMapBeacon
+      defaultText: station-beacon-dorms
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconToolRoom
   suffix: Tool Room
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-tools
+    - type: NavMapBeacon
+      defaultText: station-beacon-tools
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconDisposals
   suffix: Disposals
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-disposals
+    - type: NavMapBeacon
+      defaultText: station-beacon-disposals
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconCryosleep
   suffix: Cryosleep
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-cryosleep
+    - type: NavMapBeacon
+      defaultText: station-beacon-cryosleep
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconEscapePod
   suffix: Escape Pod
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-escape-pod
+    - type: NavMapBeacon
+      defaultText: station-beacon-escape-pod
 
 - type: entity
   parent: DefaultStationBeacon
   id: DefaultStationBeaconVox
   suffix: Vox
   components:
-  - type: NavMapBeacon
-    defaultText: station-beacon-vox
+    - type: NavMapBeacon
+      defaultText: station-beacon-vox

+ 23 - 21
Resources/Prototypes/Entities/Objects/Devices/swapper.yml

@@ -4,25 +4,27 @@
   name: quantum spin inverter
   description: An experimental device that is able to swap the locations of two entities by switching their particles' spin values. Must be linked to another device to function.
   components:
-  - type: Sprite
-    sprite: Objects/Devices/swapper.rsi
-    layers:
-    - state: icon
-      map: ["base"]
-  - type: Item
-    size: Small
-  - type: Appearance
-  - type: ArrivalsBlacklist
-  - type: SwapTeleporter
-    teleporterWhitelist:
+    - type: Sprite
+      sprite: Objects/Devices/swapper.rsi
+      layers:
+        - state: icon
+          map: ["base"]
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: Appearance
+    - type: ArrivalsBlacklist
+    - type: SwapTeleporter
+      teleporterWhitelist:
+        tags:
+          - QuantumSpinInverter
+    - type: GenericVisualizer
+      visuals:
+        enum.SwapTeleporterVisuals.Linked:
+          base:
+            True: { state: linked }
+            False: { state: icon }
+    - type: Tag
       tags:
-      - QuantumSpinInverter
-  - type: GenericVisualizer
-    visuals:
-      enum.SwapTeleporterVisuals.Linked:
-        base:
-          True: { state: linked }
-          False: { state: icon }
-  - type: Tag
-    tags:
-    - QuantumSpinInverter
+        - QuantumSpinInverter

+ 60 - 60
Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml

@@ -4,21 +4,23 @@
   id: BaseHandheldInstrument
   description: That's an instrument.
   components:
-  - type: Sprite
-  - type: Instrument
-  - type: ActivatableUI
-    inHandsOnly: true
-    singleUser: true
-    verbText: verb-instrument-openui
-    key: enum.InstrumentUiKey.Key
-  - type: UserInterface
-    interfaces:
-      enum.InstrumentUiKey.Key:
-        type: InstrumentBoundUserInterface
-  - type: Item
-    size: Normal
-  - type: StaticPrice
-    price: 200
+    - type: Sprite
+    - type: Instrument
+    - type: ActivatableUI
+      inHandsOnly: true
+      singleUser: true
+      verbText: verb-instrument-openui
+      key: enum.InstrumentUiKey.Key
+    - type: UserInterface
+      interfaces:
+        enum.InstrumentUiKey.Key:
+          type: InstrumentBoundUserInterface
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: StaticPrice
+      price: 200
 
 #These are for instruments that are larger, can't be picked up, or have collision
 - type: entity
@@ -27,49 +29,47 @@
   parent: BaseStructureDynamic
   abstract: true
   components:
-  - type: Instrument
-  - type: ActivatableUI
-    blockSpectators: true # otherwise they can play client-side music
-    inHandsOnly: false
-    singleUser: true
-    requiresComplex: true
-    verbText: verb-instrument-openui
-    key: enum.InstrumentUiKey.Key
-  - type: InteractionOutline
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/structureinstruments.rsi
-  - type: Damageable
-    damageContainer: Inorganic
-    damageModifierSet: Metallic
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 50
-      behaviors:
-      - !type:DoActsBehavior
-        acts: ["Destruction"]
-  - type: UserInterface
-    interfaces:
-      enum.InstrumentUiKey.Key:
-        type: InstrumentBoundUserInterface
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape:
-          !type:PhysShapeCircle
-          radius: 0.45
-        density: 80
-        mask:
-        - Impassable
-        - MidImpassable
-        layer:
-        - Opaque
-        - MidImpassable
-        - BulletImpassable
-  - type: StaticPrice
-    price: 300
-  - type: RequireProjectileTarget
+    - type: Instrument
+    - type: ActivatableUI
+      blockSpectators: true # otherwise they can play client-side music
+      inHandsOnly: false
+      singleUser: true
+      requiresComplex: true
+      verbText: verb-instrument-openui
+      key: enum.InstrumentUiKey.Key
+    - type: InteractionOutline
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/structureinstruments.rsi
+    - type: Damageable
+      damageContainer: Inorganic
+      damageModifierSet: Metallic
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 50
+          behaviors:
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+    - type: UserInterface
+      interfaces:
+        enum.InstrumentUiKey.Key:
+          type: InstrumentBoundUserInterface
+    - type: Fixtures
+      fixtures:
+        fix1:
+          shape: !type:PhysShapeCircle
+            radius: 0.45
+          density: 80
+          mask:
+            - Impassable
+            - MidImpassable
+          layer:
+            - Opaque
+            - MidImpassable
+            - BulletImpassable
+    - type: StaticPrice
+      price: 300
+    - type: RequireProjectileTarget
 
 - type: entity
   parent: BasePlaceableInstrument
@@ -77,5 +77,5 @@
   name: baseinstrumentrotatable
   abstract: true
   components:
-  - type: Rotatable
-    rotateWhileAnchored: true
+    - type: Rotatable
+      rotateWhileAnchored: true

+ 57 - 49
Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_brass.yml

@@ -4,21 +4,23 @@
   name: trumpet
   description: The favorite instrument of jazz musicians and egotistical middle schoolers.
   components:
-  - type: Instrument
-    program: 56
-  - type: SwappableInstrument
-    instrumentList:
-      "Standard": {56: 0}
-      "Muted": {59: 0}
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/trumpet.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/trumpet.rsi
-  - type: Tag
-    tags:
-    - BrassInstrument
+    - type: Instrument
+      program: 56
+    - type: SwappableInstrument
+      instrumentList:
+        "Standard": { 56: 0 }
+        "Muted": { 59: 0 }
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/trumpet.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/trumpet.rsi
+    - type: Tag
+      tags:
+        - BrassInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -26,17 +28,19 @@
   name: trombone
   description: Everyone's favorite sliding brass instrument.
   components:
-  - type: Instrument
-    program: 57
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/trombone.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/trombone.rsi
-  - type: Tag
-    tags:
-    - BrassInstrument
+    - type: Instrument
+      program: 57
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/trombone.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/trombone.rsi
+    - type: Tag
+      tags:
+        - BrassInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -44,17 +48,19 @@
   name: french horn
   description: The fact that holding it involves using your hand to muffle it may suggest something about its sound.
   components:
-  - type: Instrument
-    program: 60
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/frenchhorn.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/frenchhorn.rsi
-  - type: Tag
-    tags:
-    - BrassInstrument
+    - type: Instrument
+      program: 60
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/frenchhorn.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/frenchhorn.rsi
+    - type: Tag
+      tags:
+        - BrassInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -62,15 +68,17 @@
   name: euphonium
   description: A baby tuba? A Baritone? Whatever it is, it's a pretty cool mess of pipes.
   components:
-  - type: Instrument
-    program: 3
-    bank: 1
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/euphonium.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/euphonium.rsi
-  - type: Tag
-    tags:
-    - BrassInstrument
+    - type: Instrument
+      program: 3
+      bank: 1
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/euphonium.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/euphonium.rsi
+    - type: Tag
+      tags:
+        - BrassInstrument

+ 131 - 119
Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_misc.yml

@@ -4,13 +4,15 @@
   name: musical lung
   description: The spiritual and magical lung of a former opera singer. Though, to be honest, the vocal chords make the performance.
   components:
-  - type: Sprite
-    sprite: Mobs/Species/Human/organs.rsi
-    state: lung-l
-  - type: Instrument
-    program: 121
-  - type: Item
-    size: Small
+    - type: Sprite
+      sprite: Mobs/Species/Human/organs.rsi
+      state: lung-l
+    - type: Instrument
+      program: 121
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -18,13 +20,15 @@
   name: seashell
   description: For laying down the shoreline beat.
   components:
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/otherinstruments.rsi
-    state: seashell
-  - type: Instrument
-    program: 122
-  - type: Item
-    size: Normal
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/otherinstruments.rsi
+      state: seashell
+    - type: Instrument
+      program: 122
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -32,14 +36,16 @@
   name: bird whistle
   description: A delightful little whistle in the shape of a bird. It sings beautifully.
   components:
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/otherinstruments.rsi
-    state: birdtoy
-  - type: Instrument
-    program: 123
-  - type: Item
-    size: Small
-    storedRotation: 90
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/otherinstruments.rsi
+      state: birdtoy
+    - type: Instrument
+      program: 123
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      storedRotation: 90
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -47,21 +53,23 @@
   name: red phone
   description: Should anything ever go wrong...
   components:
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/otherinstruments.rsi
-    state: red_phone
-  - type: EmitSoundOnLand
-    sound:
-       path: /Audio/Items/ring.ogg
-  - type: Instrument
-    program: 124
-  - type: Item
-    size: Small
-  - type: Prayable
-    sentMessage: prayer-popup-notify-centcom-sent
-    notificationPrefix: prayer-chat-notify-centcom
-    verb: prayer-verbs-call
-    verbImage: null
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/otherinstruments.rsi
+      state: red_phone
+    - type: EmitSoundOnLand
+      sound:
+        path: /Audio/Items/ring.ogg
+    - type: Instrument
+      program: 124
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: Prayable
+      sentMessage: prayer-popup-notify-centcom-sent
+      notificationPrefix: prayer-chat-notify-centcom
+      verb: prayer-verbs-call
+      verbImage: null
 
 - type: entity
   parent: PhoneInstrument
@@ -69,12 +77,12 @@
   name: blood-red phone
   description: For evil people to call their friends.
   components:
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/blood_red_phone.rsi
-    state: icon
-  - type: Prayable
-    sentMessage: prayer-popup-notify-syndicate-sent
-    notificationPrefix: prayer-chat-notify-syndicate
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/blood_red_phone.rsi
+      state: icon
+    - type: Prayable
+      sentMessage: prayer-popup-notify-syndicate-sent
+      notificationPrefix: prayer-chat-notify-syndicate
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -82,14 +90,16 @@
   name: toy helicopter
   description: Ch-ka-ch-ka-ch-ka-ch-ka-ch-ka-ch-ka...
   components:
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/otherinstruments.rsi
-    state: helicopter
-  - type: Instrument
-    program: 125
-  - type: Item
-    size: Small
-    storedRotation: -90
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/otherinstruments.rsi
+      state: helicopter
+    - type: Instrument
+      program: 125
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      storedRotation: -90
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -97,13 +107,15 @@
   name: canned applause
   description: Seems like someone already used it all up...
   components:
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/otherinstruments.rsi
-    state: cannedapplause
-  - type: Instrument
-    program: 126
-  - type: Item
-    size: Tiny
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/otherinstruments.rsi
+      state: cannedapplause
+    - type: Instrument
+      program: 126
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -111,19 +123,21 @@
   name: gunpet
   description: Why do you need to examine this? Is it not self-explanatory?
   components:
-  - type: Instrument
-    program: 127
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/gunpet.rsi
-    state: icon
-  - type: Item
-    size: Small
-    sprite: Objects/Fun/Instruments/gunpet.rsi
-    storedRotation: -90
-  - type: Tag
-    tags:
-    - Sidearm
-    - BrassInstrument
+    - type: Instrument
+      program: 127
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/gunpet.rsi
+      state: icon
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      sprite: Objects/Fun/Instruments/gunpet.rsi
+      storedRotation: -90
+    - type: Tag
+      tags:
+        - Sidearm
+        - BrassInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -131,23 +145,23 @@
   name: gilded bike horn
   description: An exquisitely decorated bike horn, capable of honking in a variety of notes.
   components:
-  - type: Instrument
-    program: 1
-    bank: 1
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/bike_horn.rsi
-    state: icon
-  - type: Tag
-    tags:
-    - BrassInstrument #Go figure.
-  - type: Item
-    sprite: Objects/Fun/Instruments/bike_horn.rsi
-    size: Small
-    storedRotation: -90
-  - type: Clothing
-    sprite: Objects/Fun/Instruments/bike_horn.rsi
-    slots: [Belt]
-    quickEquip: false
+    - type: Instrument
+      program: 1
+      bank: 1
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/bike_horn.rsi
+      state: icon
+    - type: Tag
+      tags:
+        - BrassInstrument #Go figure.
+    - type: Item
+      sprite: Objects/Fun/Instruments/bike_horn.rsi
+      size: Small
+      storedRotation: -90
+    - type: Clothing
+      sprite: Objects/Fun/Instruments/bike_horn.rsi
+      slots: [Belt]
+      quickEquip: false
 
 - type: entity
   parent: PhoneInstrument
@@ -155,34 +169,32 @@
   name: banana phone
   description: A direct line to the Honkmother. Seems to always go to voicemail.
   components:
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/otherinstruments.rsi
-    state: banana_phone
-  - type: EmitSoundOnLand
-    sound:
-       path: /Audio/Items/bikehorn.ogg
-  - type: Slippery
-  - type: StepTrigger
-  - type: CollisionWake
-    enabled: false
-  - type: Fixtures
-    fixtures:
-      slips:
-        shape:
-          !type:PhysShapeAabb
-          bounds: "-0.4,-0.3,0.4,0.3"
-        hard: false
-        layer:
-        - SlipLayer
-      fix1:
-        shape:
-          !type:PhysShapeAabb
-          bounds: "-0.4,-0.3,0.4,0.3"
-        density: 5
-        mask:
-        - ItemMask
-  - type: Prayable
-    sentMessage: prayer-popup-notify-honkmother-sent
-    notificationPrefix: prayer-chat-notify-honkmother
-    verb: prayer-verbs-call
-    verbImage: null
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/otherinstruments.rsi
+      state: banana_phone
+    - type: EmitSoundOnLand
+      sound:
+        path: /Audio/Items/bikehorn.ogg
+    - type: Slippery
+    - type: StepTrigger
+    - type: CollisionWake
+      enabled: false
+    - type: Fixtures
+      fixtures:
+        slips:
+          shape: !type:PhysShapeAabb
+            bounds: "-0.4,-0.3,0.4,0.3"
+          hard: false
+          layer:
+            - SlipLayer
+        fix1:
+          shape: !type:PhysShapeAabb
+            bounds: "-0.4,-0.3,0.4,0.3"
+          density: 5
+          mask:
+            - ItemMask
+    - type: Prayable
+      sentMessage: prayer-popup-notify-honkmother-sent
+      notificationPrefix: prayer-chat-notify-honkmother
+      verb: prayer-verbs-call
+      verbImage: null

+ 96 - 88
Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml

@@ -3,17 +3,19 @@
   id: GlockenspielInstrument
   name: glockenspiel
   components:
-  - type: Instrument
-    program: 9
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/glockenspiel.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/glockenspiel.rsi
-  - type: Tag
-    tags:
-    - PercussionInstrument
+    - type: Instrument
+      program: 9
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/glockenspiel.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/glockenspiel.rsi
+    - type: Tag
+      tags:
+        - PercussionInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -21,11 +23,11 @@
   name: music box
   description: Playing this makes you feel safe from scary animatronics.
   components:
-  - type: Instrument
-    program: 10
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/musicbox.rsi
-    state: icon
+    - type: Instrument
+      program: 10
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/musicbox.rsi
+      state: icon
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -33,14 +35,14 @@
   name: xylophone
   description: Rainbow colored glockenspiel.
   components:
-  - type: Instrument
-    program: 13
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/structureinstruments.rsi
-    state: xylophone
-  - type: Tag
-    tags:
-    - PercussionInstrument
+    - type: Instrument
+      program: 13
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/structureinstruments.rsi
+      state: xylophone
+    - type: Tag
+      tags:
+        - PercussionInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -48,42 +50,46 @@
   name: microphone
   description: Perfect for singing your heart out.
   components:
-  - type: Instrument
-    program: 52
-  - type: SwappableInstrument
-    instrumentList:
-      "Aah": {52: 0}
-      "Ooh": {53: 0}
-      "Kweh": {4: 1}
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/microphone.rsi
-    state: icon
-  - type: Item
-    size: Small
-    sprite: Objects/Fun/Instruments/microphone.rsi
+    - type: Instrument
+      program: 52
+    - type: SwappableInstrument
+      instrumentList:
+        "Aah": { 52: 0 }
+        "Ooh": { 53: 0 }
+        "Kweh": { 4: 1 }
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/microphone.rsi
+      state: icon
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      sprite: Objects/Fun/Instruments/microphone.rsi
 
 - type: entity
   parent: BaseHandheldInstrument
   id: SynthesizerInstrument
   name: synthesizer
   components:
-  - type: Instrument
-    program: 62
-  - type: SwappableInstrument
-    instrumentList:
-      "Electro": {62: 0} #i needed generic sounding synth presets, sue me
-      "Bubbles": {63: 0}
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/h_synthesizer.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/h_synthesizer.rsi
-  - type: Tag
-    tags:
-    - KeyedInstrument
-  - type: StaticPrice
-    price: 90
+    - type: Instrument
+      program: 62
+    - type: SwappableInstrument
+      instrumentList:
+        "Electro": { 62: 0 } #i needed generic sounding synth presets, sue me
+        "Bubbles": { 63: 0 }
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/h_synthesizer.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/h_synthesizer.rsi
+    - type: Tag
+      tags:
+        - KeyedInstrument
+    - type: StaticPrice
+      price: 90
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -91,16 +97,18 @@
   name: kalimba
   description: The power of a piano right at your thumbs.
   components:
-  - type: Instrument
-    program: 108
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/kalimba.rsi
-    state: icon
-  - type: Tag
-    tags:
-    - KeyedInstrument
-  - type: Item
-    size: Small
+    - type: Instrument
+      program: 108
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/kalimba.rsi
+      state: icon
+    - type: Tag
+      tags:
+        - KeyedInstrument
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -108,14 +116,14 @@
   name: woodblock
   description: If you listen to this enough it'll start driving itself into your mind.
   components:
-  - type: Instrument
-    program: 115
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/woodblock.rsi
-    state: icon
-  - type: Tag
-    tags:
-    - PercussionInstrument
+    - type: Instrument
+      program: 115
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/woodblock.rsi
+      state: icon
+    - type: Tag
+      tags:
+        - PercussionInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -123,11 +131,11 @@
   name: reverse cymbals
   description: I think you have it the wrong way around?
   components:
-  - type: Instrument
-    program: 119
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/reversecymbal.rsi
-    state: icon
+    - type: Instrument
+      program: 119
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/reversecymbal.rsi
+      state: icon
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -135,14 +143,14 @@
   name: super synthesizer
   description: Blasting the ghetto with Touhou MIDIs since 2020.
   components:
-  - type: Instrument
-    allowPercussion: true
-    allowProgramChange: true
-    respectMidiLimits: false
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/h_synthesizer.rsi
-    state: supersynth
-  - type: Item
-    heldPrefix: super
-    size: Normal
-    sprite: Objects/Fun/Instruments/h_synthesizer.rsi
+    - type: Instrument
+      allowPercussion: true
+      allowProgramChange: true
+      respectMidiLimits: false
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/h_synthesizer.rsi
+      state: supersynth
+    - type: Item
+      heldPrefix: super
+      size: Normal
+      sprite: Objects/Fun/Instruments/h_synthesizer.rsi

+ 200 - 187
Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml

@@ -4,28 +4,30 @@
   name: electric guitar
   description: Now this makes you feel like a rock star!
   components:
-  - type: Instrument
-    program: 27
-  - type: SwappableInstrument
-    instrumentList:
-      "Clean": {27: 0}
-      "Jazz": {26: 0}
-      "Muted": {28: 0}
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/eguitar.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/eguitar.rsi
-  - type: Clothing
-    quickEquip: false
-    slots:
-    - back
-    - suitStorage
-    sprite: Objects/Fun/Instruments/eguitar.rsi
-  - type: Tag
-    tags:
-    - StringInstrument
+    - type: Instrument
+      program: 27
+    - type: SwappableInstrument
+      instrumentList:
+        "Clean": { 27: 0 }
+        "Jazz": { 26: 0 }
+        "Muted": { 28: 0 }
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/eguitar.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/eguitar.rsi
+    - type: Clothing
+      quickEquip: false
+      slots:
+        - back
+        - suitStorage
+      sprite: Objects/Fun/Instruments/eguitar.rsi
+    - type: Tag
+      tags:
+        - StringInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -33,29 +35,31 @@
   name: bass guitar
   description: You feel really cool holding this. Shame you're the only one that thinks that.
   components:
-  - type: Instrument
-    program: 33
-  - type: SwappableInstrument
-    instrumentList:
-      "Fingered": {33: 0}
-      "Pick": {34: 0}
-      "Slap": {36: 0}
-      "Slap (XTra Funky)": {37: 0}
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/bassguitar.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/bassguitar.rsi
-  - type: Clothing
-    quickEquip: false
-    slots:
-    - back
-    - suitStorage
-    sprite: Objects/Fun/Instruments/bassguitar.rsi
-  - type: Tag
-    tags:
-    - StringInstrument
+    - type: Instrument
+      program: 33
+    - type: SwappableInstrument
+      instrumentList:
+        "Fingered": { 33: 0 }
+        "Pick": { 34: 0 }
+        "Slap": { 36: 0 }
+        "Slap (XTra Funky)": { 37: 0 }
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/bassguitar.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/bassguitar.rsi
+    - type: Clothing
+      quickEquip: false
+      slots:
+        - back
+        - suitStorage
+      sprite: Objects/Fun/Instruments/bassguitar.rsi
+    - type: Tag
+      tags:
+        - StringInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -63,40 +67,42 @@
   name: rock guitar
   description: What an axe!
   components:
-  - type: Instrument
-    program: 29
-  - type: SwappableInstrument
-    instrumentList:
-      "Overdrive": {29: 0}
-      "Distortion": {30: 0}
-      "Harmonics": {31: 0}
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/rockguitar.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/rockguitar.rsi
-  - type: Clothing
-    quickEquip: false
-    slots:
-    - back
-    - suitStorage
-    sprite: Objects/Fun/Instruments/rockguitar.rsi
-  - type: Tag
-    tags:
-    - StringInstrument
-  - type: MeleeWeapon
-    wideAnimationRotation: 45
-    damage:
-      types:
-        Blunt: 6
-        Slash: 2
-  - type: Wieldable
-  - type: IncreaseDamageOnWield #they don't call it an axe for nothing
-    damage:
-      types:
-        Blunt: 4
-        Slash: 2
+    - type: Instrument
+      program: 29
+    - type: SwappableInstrument
+      instrumentList:
+        "Overdrive": { 29: 0 }
+        "Distortion": { 30: 0 }
+        "Harmonics": { 31: 0 }
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/rockguitar.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/rockguitar.rsi
+    - type: Clothing
+      quickEquip: false
+      slots:
+        - back
+        - suitStorage
+      sprite: Objects/Fun/Instruments/rockguitar.rsi
+    - type: Tag
+      tags:
+        - StringInstrument
+    - type: MeleeWeapon
+      wideAnimationRotation: 45
+      damage:
+        types:
+          Blunt: 6
+          Slash: 2
+    - type: Wieldable
+    - type: IncreaseDamageOnWield #they don't call it an axe for nothing
+      damage:
+        types:
+          Blunt: 4
+          Slash: 2
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -104,59 +110,58 @@
   name: acoustic guitar
   description: Anyway, here's Wonderwall.
   components:
-  - type: Instrument
-    program: 24
-  - type: SwappableInstrument
-    instrumentList:
-      "Nylon": {24: 0}
-      "Steel": {25: 0}
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/guitar.rsi
-    state: icon
-  - type: Tag
-    tags:
-    - StringInstrument
-  - type: Item
-    sprite: Objects/Fun/Instruments/guitar.rsi
-    size: Normal
-  - type: Clothing
-    quickEquip: false
-    slots:
-    - back
-    - suitStorage
-    sprite: Objects/Fun/Instruments/guitar.rsi
-  - type: Wieldable
-  - type: Damageable # Smash it! Does 20 damage a hit, but breaks after 1 hit.
-    damageContainer: Inorganic
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 20
-      behaviors:
-      - !type:PlaySoundBehavior
-        sound:
-          path: /Audio/Weapons/guitarsmash.ogg
-      - !type:SpawnEntitiesBehavior
-        spawn:
-          MaterialWoodPlank:
-            min: 2
-            max: 4
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]
-  - type: DamageOnHit # This makes it destroy after one hit.
-    damage:
-      types:
-        Blunt: 20
-  - type: MeleeWeapon
-    wideAnimationRotation: 45
-    damage:
-      types:
-        Blunt: 5
-  - type: IncreaseDamageOnWield
-    damage:
-      types:
-        Blunt: 15
+    - type: Instrument
+      program: 24
+    - type: SwappableInstrument
+      instrumentList:
+        "Nylon": { 24: 0 }
+        "Steel": { 25: 0 }
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/guitar.rsi
+      state: icon
+    - type: Tag
+      tags:
+        - StringInstrument
+    - type: Item
+      sprite: Objects/Fun/Instruments/guitar.rsi
+      size: Normal
+    - type: Clothing
+      quickEquip: false
+      slots:
+        - back
+        - suitStorage
+      sprite: Objects/Fun/Instruments/guitar.rsi
+    - type: Wieldable
+    - type: Damageable # Smash it! Does 20 damage a hit, but breaks after 1 hit.
+      damageContainer: Inorganic
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 20
+          behaviors:
+            - !type:PlaySoundBehavior
+              sound:
+                path: /Audio/Weapons/guitarsmash.ogg
+            - !type:SpawnEntitiesBehavior
+              spawn:
+                MaterialWoodPlank:
+                  min: 2
+                  max: 4
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+    - type: DamageOnHit # This makes it destroy after one hit.
+      damage:
+        types:
+          Blunt: 20
+    - type: MeleeWeapon
+      wideAnimationRotation: 45
+      damage:
+        types:
+          Blunt: 5
+    - type: IncreaseDamageOnWield
+      damage:
+        types:
+          Blunt: 15
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -165,28 +170,30 @@
   description: Who even needs a body?
   suffix: Admeme #the sound is awful
   components:
-  - type: Instrument
-    program: 120
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/guitarlessfrets.rsi
-    state: icon
+    - type: Instrument
+      program: 120
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/guitarlessfrets.rsi
+      state: icon
 
 - type: entity
   parent: BaseHandheldInstrument
   id: BanjoInstrument
   name: banjo
   components:
-  - type: Instrument
-    program: 105
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/banjo.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/banjo.rsi
-  - type: Tag
-    tags:
-    - StringInstrument
+    - type: Instrument
+      program: 105
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/banjo.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/banjo.rsi
+    - type: Tag
+      tags:
+        - StringInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -194,21 +201,23 @@
   name: violin
   description: The favorite of musical virtuosos and bluegrass bands.
   components:
-  - type: Instrument
-    program: 40
-  - type: SwappableInstrument
-    instrumentList:
-      "Classical": {40: 0}
-      "Bluegrass": {110: 0}
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/violin.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/violin.rsi
-  - type: Tag
-    tags:
-    - StringInstrument
+    - type: Instrument
+      program: 40
+    - type: SwappableInstrument
+      instrumentList:
+        "Classical": { 40: 0 }
+        "Bluegrass": { 110: 0 }
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/violin.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/violin.rsi
+    - type: Tag
+      tags:
+        - StringInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -216,17 +225,19 @@
   name: viola
   description: Like a violin, but worse.
   components:
-  - type: Instrument
-    program: 41
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/viola.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/viola.rsi
-  - type: Tag
-    tags:
-    - StringInstrument
+    - type: Instrument
+      program: 41
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/viola.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/viola.rsi
+    - type: Tag
+      tags:
+        - StringInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -234,16 +245,18 @@
   name: cello
   description: The nerds call these violoncellos.
   components:
-  - type: Instrument
-    program: 42
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/cello.rsi
-    state: icon
-  - type: Item
-    size: Large
-    shape:
-    - 0,0,1,3
-    sprite: Objects/Fun/Instruments/cello.rsi
-  - type: Tag
-    tags:
-    - StringInstrument
+    - type: Instrument
+      program: 42
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/cello.rsi
+      state: icon
+    - type: STWeight
+      self: 5
+    - type: Item
+      size: Large
+      shape:
+        - 0,0,1,3
+      sprite: Objects/Fun/Instruments/cello.rsi
+    - type: Tag
+      tags:
+        - StringInstrument

+ 143 - 125
Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_wind.yml

@@ -4,76 +4,82 @@
   name: saxophone
   description: An instrument. You could probably grind this into raw jazz.
   components:
-  - type: Instrument
-    program: 66
-  - type: SwappableInstrument
-    instrumentList:
-      "Soprano": {64: 0}
-      "Alto": {65: 0}
-      "Tenor": {66: 0}
-      "Baritone": {67: 0}
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/saxophone.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/saxophone.rsi
-  - type: Tag
-    tags:
-    - WoodwindInstrument
-  - type: Extractable
-    grindableSolutionName: sax
-  - type: SolutionContainerManager
-    solutions:
-      sax:
-        reagents:
-          - ReagentId: Saxoite
-            Quantity: 10
+    - type: Instrument
+      program: 66
+    - type: SwappableInstrument
+      instrumentList:
+        "Soprano": { 64: 0 }
+        "Alto": { 65: 0 }
+        "Tenor": { 66: 0 }
+        "Baritone": { 67: 0 }
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/saxophone.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/saxophone.rsi
+    - type: Tag
+      tags:
+        - WoodwindInstrument
+    - type: Extractable
+      grindableSolutionName: sax
+    - type: SolutionContainerManager
+      solutions:
+        sax:
+          reagents:
+            - ReagentId: Saxoite
+              Quantity: 10
 
 - type: entity
   parent: BaseHandheldInstrument
   id: AccordionInstrument
   name: accordion
   components:
-  - type: Instrument
-    program: 21
-  - type: SwappableInstrument
-    instrumentList:
-      "Standard": {21: 0}
-      "Tango": {23: 0}
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/accordion.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/accordion.rsi
-  - type: Tag
-    tags:
-    - KeyedInstrument
+    - type: Instrument
+      program: 21
+    - type: SwappableInstrument
+      instrumentList:
+        "Standard": { 21: 0 }
+        "Tango": { 23: 0 }
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/accordion.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/accordion.rsi
+    - type: Tag
+      tags:
+        - KeyedInstrument
 
 - type: entity
   parent: [BaseHandheldInstrument, Clothing]
   id: HarmonicaInstrument
   name: harmonica
   components:
-  - type: Instrument
-    program: 22
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/harmonica.rsi
-    state: icon
-  - type: Item
-    size: Small
-    sprite: Objects/Fun/Instruments/harmonica.rsi
-    storedRotation: -90
-  - type: Clothing
-    quickEquip: false
-    slots:
-    - neck
-  - type: ActivatableUI
-    inHandsOnly: false  
-  - type: Tag
-    tags:
-    - WoodwindInstrument
+    - type: Instrument
+      program: 22
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/harmonica.rsi
+      state: icon
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      sprite: Objects/Fun/Instruments/harmonica.rsi
+      storedRotation: -90
+    - type: Clothing
+      quickEquip: false
+      slots:
+        - neck
+    - type: ActivatableUI
+      inHandsOnly: false
+    - type: Tag
+      tags:
+        - WoodwindInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -81,17 +87,19 @@
   name: clarinet
   description: Skweedward tintacklays.
   components:
-  - type: Instrument
-    program: 71
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/clarinet.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/clarinet.rsi
-  - type: Tag
-    tags:
-    - WoodwindInstrument
+    - type: Instrument
+      program: 71
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/clarinet.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/clarinet.rsi
+    - type: Tag
+      tags:
+        - WoodwindInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -99,17 +107,19 @@
   name: flute
   description: Reaching new heights of being horrifyingly shrill.
   components:
-  - type: Instrument
-    program: 73
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/flute.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/flute.rsi
-  - type: Tag
-    tags:
-    - WoodwindInstrument
+    - type: Instrument
+      program: 73
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/flute.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/flute.rsi
+    - type: Tag
+      tags:
+        - WoodwindInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -117,17 +127,19 @@
   name: recorder
   description: Comes in various colors of fashionable plastic!
   components:
-  - type: Instrument
-    program: 74
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/recorder.rsi
-    state: icon
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Instruments/recorder.rsi
-  - type: Tag
-    tags:
-    - WoodwindInstrument
+    - type: Instrument
+      program: 74
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/recorder.rsi
+      state: icon
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+      sprite: Objects/Fun/Instruments/recorder.rsi
+    - type: Tag
+      tags:
+        - WoodwindInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -135,17 +147,19 @@
   name: pan flute
   description: Perfect for luring ancient mythical beings to dance with you.
   components:
-  - type: Instrument
-    program: 75
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/panflute.rsi
-    state: icon
-  - type: Item
-    size: Small
-    sprite: Objects/Fun/Instruments/panflute.rsi
-  - type: Tag
-    tags:
-    - WoodwindInstrument
+    - type: Instrument
+      program: 75
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/panflute.rsi
+      state: icon
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      sprite: Objects/Fun/Instruments/panflute.rsi
+    - type: Tag
+      tags:
+        - WoodwindInstrument
 
 #if you change this to some cringe-ass zelda reference so help me god i will shoot you dead.
 - type: entity
@@ -154,18 +168,20 @@
   name: ocarina
   description: Good for playing lullabies.
   components:
-  - type: Instrument
-    program: 79
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/ocarina.rsi
-    state: icon
-  - type: Item
-    size: Small
-    sprite: Objects/Fun/Instruments/ocarina.rsi
-    storedRotation: -90
-  - type: Tag
-    tags:
-    - WoodwindInstrument
+    - type: Instrument
+      program: 79
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/ocarina.rsi
+      state: icon
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+      sprite: Objects/Fun/Instruments/ocarina.rsi
+      storedRotation: -90
+    - type: Tag
+      tags:
+        - WoodwindInstrument
 
 - type: entity
   parent: BaseHandheldInstrument
@@ -173,14 +189,16 @@
   name: bagpipe
   description: Pairs nicely with a kilt.
   components:
-  - type: Instrument
-    program: 109
-  - type: Sprite
-    sprite: Objects/Fun/Instruments/bagpipes.rsi
-    state: icon
-  - type: Item
-    size: Large
-    sprite: Objects/Fun/Instruments/bagpipes.rsi
-  - type: Tag
-    tags:
-    - WoodwindInstrument
+    - type: Instrument
+      program: 109
+    - type: Sprite
+      sprite: Objects/Fun/Instruments/bagpipes.rsi
+      state: icon
+    - type: STWeight
+      self: 5
+    - type: Item
+      size: Large
+      sprite: Objects/Fun/Instruments/bagpipes.rsi
+    - type: Tag
+      tags:
+        - WoodwindInstrument

+ 163 - 166
Resources/Prototypes/Entities/Objects/Fun/darts.yml

@@ -4,130 +4,130 @@
   parent: BaseItem
   id: Dart
   components:
-  - type: EmbeddableProjectile
-    minimumSpeed: 3
-    removalTime: 0.5
-    offset: 0.0,0.0
-  - type: ThrowingAngle
-    angle: 315
-  - type: LandAtCursor
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape: !type:PolygonShape
-          vertices:
-            - -0.20,0.10
-            - -0.10,0.20
-            - 0.20,-0.10
-            - 0.10,-0.20
-        density: 20
-        mask:
-        - ItemMask
-        restitution: 0.3
-        friction: 0.2
-  - type: Sprite
-    sprite: Objects/Fun/Darts/dart_red.rsi
-    state: icon
-  - type: MeleeWeapon
-    wideAnimationRotation: -45
-    damage:
-      types:
-        Piercing: 2
-    angle: 0
-    animation: WeaponArcThrust
-    soundHit:
-      path: /Audio/Weapons/pierce.ogg
-  - type: DamageOtherOnHit
-    damage:
-      types:
-        Piercing: 4
-  - type: Item
-    size: Tiny
-    sprite: Objects/Fun/Darts/dart_red.rsi
-  - type: SolutionContainerManager
-    solutions:
-      melee:
-        maxVol: 2
-  - type: MeleeChemicalInjector
-    solution: melee
-  - type: RefillableSolution
-    solution: melee
-  - type: InjectableSolution
-    solution: melee
-  - type: SolutionInjectOnEmbed
-    transferAmount: 2
-    solution: melee
-    blockSlots: OUTERCLOTHING
-  - type: SolutionTransfer
-    maxTransferAmount: 2
-  - type: Damageable
-    damageContainer: Inorganic
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 30 #excess damage avoids cost of spawning entities.
-      behaviors:
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]
-    - trigger:
-        !type:DamageTrigger
-        damage: 20
-      behaviors:
-      - !type:PlaySoundBehavior
-        sound:
-          collection: GlassBreak
-      - !type:SpawnEntitiesBehavior
-        spawn:
-          PartRodMetal1:
-            min: 1
-            max: 1
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]
-  - type: BalloonPopper
+    - type: EmbeddableProjectile
+      minimumSpeed: 3
+      removalTime: 0.5
+      offset: 0.0,0.0
+    - type: ThrowingAngle
+      angle: 315
+    - type: LandAtCursor
+    - type: Fixtures
+      fixtures:
+        fix1:
+          shape: !type:PolygonShape
+            vertices:
+              - -0.20,0.10
+              - -0.10,0.20
+              - 0.20,-0.10
+              - 0.10,-0.20
+          density: 20
+          mask:
+            - ItemMask
+          restitution: 0.3
+          friction: 0.2
+    - type: Sprite
+      sprite: Objects/Fun/Darts/dart_red.rsi
+      state: icon
+    - type: MeleeWeapon
+      wideAnimationRotation: -45
+      damage:
+        types:
+          Piercing: 2
+      angle: 0
+      animation: WeaponArcThrust
+      soundHit:
+        path: /Audio/Weapons/pierce.ogg
+    - type: DamageOtherOnHit
+      damage:
+        types:
+          Piercing: 4
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+      sprite: Objects/Fun/Darts/dart_red.rsi
+    - type: SolutionContainerManager
+      solutions:
+        melee:
+          maxVol: 2
+    - type: MeleeChemicalInjector
+      solution: melee
+    - type: RefillableSolution
+      solution: melee
+    - type: InjectableSolution
+      solution: melee
+    - type: SolutionInjectOnEmbed
+      transferAmount: 2
+      solution: melee
+      blockSlots: OUTERCLOTHING
+    - type: SolutionTransfer
+      maxTransferAmount: 2
+    - type: Damageable
+      damageContainer: Inorganic
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 30 #excess damage avoids cost of spawning entities.
+          behaviors:
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+        - trigger: !type:DamageTrigger
+            damage: 20
+          behaviors:
+            - !type:PlaySoundBehavior
+              sound:
+                collection: GlassBreak
+            - !type:SpawnEntitiesBehavior
+              spawn:
+                PartRodMetal1:
+                  min: 1
+                  max: 1
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+    - type: BalloonPopper
 
 - type: entity
   parent: Dart
   id: DartBlue
   components:
-  - type: Sprite
-    sprite: Objects/Fun/Darts/dart_blue.rsi
-  - type: Item
-    sprite: Objects/Fun/Darts/dart_blue.rsi
+    - type: Sprite
+      sprite: Objects/Fun/Darts/dart_blue.rsi
+    - type: Item
+      sprite: Objects/Fun/Darts/dart_blue.rsi
 
 - type: entity
   parent: Dart
   id: DartPurple
   components:
-  - type: Sprite
-    sprite: Objects/Fun/Darts/dart_purple.rsi
-  - type: Item
-    sprite: Objects/Fun/Darts/dart_purple.rsi
+    - type: Sprite
+      sprite: Objects/Fun/Darts/dart_purple.rsi
+    - type: Item
+      sprite: Objects/Fun/Darts/dart_purple.rsi
 
 - type: entity
   parent: Dart
   id: DartYellow
   components:
-  - type: Sprite
-    sprite: Objects/Fun/Darts/dart_yellow.rsi
-  - type: Item
-    sprite: Objects/Fun/Darts/dart_yellow.rsi
+    - type: Sprite
+      sprite: Objects/Fun/Darts/dart_yellow.rsi
+    - type: Item
+      sprite: Objects/Fun/Darts/dart_yellow.rsi
 
 - type: entity
   parent: Dart
   id: HypoDart
   suffix: HypoDart
   components:
-  - type: SolutionContainerManager
-    solutions:
-      melee:
-        maxVol: 7
-  - type: SolutionInjectOnEmbed
-    transferAmount: 7
-    blockSlots: NONE
-    solution: melee
-  - type: SolutionTransfer
-    maxTransferAmount: 7
+    - type: SolutionContainerManager
+      solutions:
+        melee:
+          maxVol: 7
+    - type: SolutionInjectOnEmbed
+      transferAmount: 7
+      blockSlots: NONE
+      solution: melee
+    - type: SolutionTransfer
+      maxTransferAmount: 7
 
 - type: entity
   name: dartboard
@@ -135,73 +135,70 @@
   parent: BaseStructureDynamic
   description: A target for playing darts.
   components:
-  - type: Sprite
-    sprite: Objects/Fun/Darts/target.rsi
-    state: target_dart
-    noRot: true
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape:
-          !type:PhysShapeCircle
-          radius: 0.35
-        density: 50
-        mask:
-        - FullTileMask
-        layer:
-        - WallLayer
-  - type: InteractionOutline
-  - type: Physics
-  - type: Damageable
-  - type: DamageRandomPopup
-    popups:
-      - darts-popup-bullseye
-      - darts-popup-25
-      - darts-popup-10
-      - darts-popup-10
-      - darts-popup-5
-      - darts-popup-5
-      - darts-popup-5
-      - darts-popup-1
-      - darts-popup-1
-      - darts-popup-1
-      - darts-popup-miss
-      - darts-popup-miss
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 500
-      behaviors:
-        - !type:DoActsBehavior
-          acts: [ "Destruction" ]
-    - trigger:
-        !type:DamageTrigger
-        damage: 300
-      behaviors:
-      - !type:SpawnEntitiesBehavior
-        spawn:
-          MaterialWoodPlank:
-            min: 5
-            max: 5
-      - !type:PlaySoundBehavior
-        sound:
-          path: /Audio/Effects/tree_fell.ogg
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]
+    - type: Sprite
+      sprite: Objects/Fun/Darts/target.rsi
+      state: target_dart
+      noRot: true
+    - type: Fixtures
+      fixtures:
+        fix1:
+          shape: !type:PhysShapeCircle
+            radius: 0.35
+          density: 50
+          mask:
+            - FullTileMask
+          layer:
+            - WallLayer
+    - type: InteractionOutline
+    - type: Physics
+    - type: Damageable
+    - type: DamageRandomPopup
+      popups:
+        - darts-popup-bullseye
+        - darts-popup-25
+        - darts-popup-10
+        - darts-popup-10
+        - darts-popup-5
+        - darts-popup-5
+        - darts-popup-5
+        - darts-popup-1
+        - darts-popup-1
+        - darts-popup-1
+        - darts-popup-miss
+        - darts-popup-miss
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 500
+          behaviors:
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+        - trigger: !type:DamageTrigger
+            damage: 300
+          behaviors:
+            - !type:SpawnEntitiesBehavior
+              spawn:
+                MaterialWoodPlank:
+                  min: 5
+                  max: 5
+            - !type:PlaySoundBehavior
+              sound:
+                path: /Audio/Effects/tree_fell.ogg
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
 
 - type: entity
-  parent: [ BaseItem, BaseSyndicateContraband ]
+  parent: [BaseItem, BaseSyndicateContraband]
   id: HypoDartBox
   name: hypodart box
   suffix: HypoDart
   description: A small box containing a hypodart. Packaging disintegrates when opened, leaving no evidence behind.
   components:
-  - type: Sprite
-    sprite: Objects/Fun/Darts/dartbox.rsi
-    state: icon
-  - type: SpawnItemsOnUse
-    items:
-    - id: HypoDart
-    sound:
-      path: /Audio/Effects/unwrap.ogg
+    - type: Sprite
+      sprite: Objects/Fun/Darts/dartbox.rsi
+      state: icon
+    - type: SpawnItemsOnUse
+      items:
+        - id: HypoDart
+      sound:
+        path: /Audio/Effects/unwrap.ogg

+ 79 - 79
Resources/Prototypes/Entities/Objects/Fun/dice.yml

@@ -3,16 +3,18 @@
   parent: BaseItem
   id: BaseDice
   components:
-  - type: Dice
-  - type: UseDelay
-  - type: Sprite
-    sprite: Objects/Fun/dice.rsi
-    noRot: true # If their sprites rotate, the number becomes even more illegible than usual.
-  - type: Tag
-    tags:
-    - Dice
-  - type: Item
-    size: Tiny
+    - type: Dice
+    - type: UseDelay
+    - type: Sprite
+      sprite: Objects/Fun/dice.rsi
+      noRot: true # If their sprites rotate, the number becomes even more illegible than usual.
+    - type: Tag
+      tags:
+        - Dice
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
 
 - type: entity
   parent: BaseDice
@@ -20,13 +22,13 @@
   name: percentile die
   description: A die with ten sides. Works better for d100 rolls than a golf ball.
   components:
-  - type: Dice
-    sides: 10
-    multiplier: 10
-    offset: 1 # first side is a 0
-    currentValue: 0
-  - type: Sprite
-    state: percentile_0
+    - type: Dice
+      sides: 10
+      multiplier: 10
+      offset: 1 # first side is a 0
+      currentValue: 0
+    - type: Sprite
+      state: percentile_0
 
 - type: entity
   parent: BaseDice
@@ -34,11 +36,11 @@
   name: d20
   description: A die with twenty sides. The preferred die to throw at the GM.
   components:
-  - type: Dice
-    sides: 20
-    currentValue: 20
-  - type: Sprite
-    state: d20_20
+    - type: Dice
+      sides: 20
+      currentValue: 20
+    - type: Sprite
+      state: d20_20
 
 - type: entity
   parent: BaseDice
@@ -46,11 +48,11 @@
   name: d12
   description: A die with twelve sides. There's an air of neglect about it.
   components:
-  - type: Dice
-    sides: 12
-    currentValue: 12
-  - type: Sprite
-    state: d12_12
+    - type: Dice
+      sides: 12
+      currentValue: 12
+    - type: Sprite
+      state: d12_12
 
 - type: entity
   parent: BaseDice
@@ -58,12 +60,12 @@
   name: d10
   description: A die with ten sides. Useful for percentages.
   components:
-  - type: Dice
-    sides: 10
-    offset: 1
-    currentValue: 0
-  - type: Sprite
-    state: d10_0
+    - type: Dice
+      sides: 10
+      offset: 1
+      currentValue: 0
+    - type: Sprite
+      state: d10_0
 
 - type: entity
   parent: BaseDice
@@ -71,11 +73,11 @@
   name: d8
   description: A die with eight sides. It feels... lucky.
   components:
-  - type: Dice
-    sides: 8
-    currentValue: 8
-  - type: Sprite
-    state: d8_8
+    - type: Dice
+      sides: 8
+      currentValue: 8
+    - type: Sprite
+      state: d8_8
 
 - type: entity
   parent: BaseDice
@@ -83,11 +85,11 @@
   name: d6
   description: A die with six sides. Basic and serviceable.
   components:
-  - type: Dice
-    sides: 6
-    currentValue: 6
-  - type: Sprite
-    state: d6_6
+    - type: Dice
+      sides: 6
+      currentValue: 6
+    - type: Sprite
+      state: d6_6
 
 - type: entity
   parent: BaseDice
@@ -95,39 +97,37 @@
   name: d4
   description: A die with four sides. The nerd's caltrop.
   components:
-  - type: Dice
-    sides: 4
-    currentValue: 4
-  - type: Sprite
-    state: d4_4
-  - type: CollisionWake
-    enabled: false
-  - type: Fixtures
-    fixtures:
-      slips:
-        shape:
-          !type:PhysShapeAabb
-          bounds: "-0.2,-0.2,0.2,0.2"
-        hard: false
-        layer:
-        - LowImpassable
-      fix1:
-        shape:
-          !type:PhysShapeAabb
-          bounds: "-0.2,-0.2,0.2,0.2"
-        density: 30
-        mask:
-        - ItemMask
-  - type: StepTrigger
-    intersectRatio: 0.2
-  - type: TriggerOnStepTrigger
-  - type: PreventableStepTrigger
-  - type: Slippery
-    slipSound:
-      path: /Audio/Effects/glass_step.ogg
-    launchForwardsMultiplier: 0
-  - type: DamageUserOnTrigger
-    damage:
-      types:
-        Piercing: 5
-    # I love this
+    - type: Dice
+      sides: 4
+      currentValue: 4
+    - type: Sprite
+      state: d4_4
+    - type: CollisionWake
+      enabled: false
+    - type: Fixtures
+      fixtures:
+        slips:
+          shape: !type:PhysShapeAabb
+            bounds: "-0.2,-0.2,0.2,0.2"
+          hard: false
+          layer:
+            - LowImpassable
+        fix1:
+          shape: !type:PhysShapeAabb
+            bounds: "-0.2,-0.2,0.2,0.2"
+          density: 30
+          mask:
+            - ItemMask
+    - type: StepTrigger
+      intersectRatio: 0.2
+    - type: TriggerOnStepTrigger
+    - type: PreventableStepTrigger
+    - type: Slippery
+      slipSound:
+        path: /Audio/Effects/glass_step.ogg
+      launchForwardsMultiplier: 0
+    - type: DamageUserOnTrigger
+      damage:
+        types:
+          Piercing: 5
+      # I love this

+ 28 - 26
Resources/Prototypes/Entities/Objects/Fun/dice_bag.yml

@@ -4,35 +4,37 @@
   name: bag of dice
   description: Contains all the luck you'll ever need.
   components:
-  - type: StorageFill
-    contents:
-      - id: d4Dice
-      - id: d6Dice
-      - id: d8Dice
-      - id: d10Dice
-      - id: d12Dice
-      - id: d20Dice
-      - id: PercentileDie
-  - type: Sprite
-    sprite: Objects/Fun/dice.rsi
-    state: dicebag
-  - type: Item
-    size: Small
-  - type: Storage
-    grid:
-    - 0,0,3,1
-    whitelist:
-      tags:
-      - Dice
+    - type: StorageFill
+      contents:
+        - id: d4Dice
+        - id: d6Dice
+        - id: d8Dice
+        - id: d10Dice
+        - id: d12Dice
+        - id: d20Dice
+        - id: PercentileDie
+    - type: Sprite
+      sprite: Objects/Fun/dice.rsi
+      state: dicebag
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Small
+    - type: Storage
+      grid:
+        - 0,0,3,1
+      whitelist:
+        tags:
+          - Dice
 
 - type: entity
   parent: DiceBag
   id: MagicDiceBag
   name: bag of dice
   components:
-  - type: Sprite
-    sprite: Objects/Fun/dice.rsi
-    state: magicdicebag
-  - type: Storage
-    grid:
-    - 0,0,4,3
+    - type: Sprite
+      sprite: Objects/Fun/dice.rsi
+      state: magicdicebag
+    - type: Storage
+      grid:
+        - 0,0,4,3

+ 32 - 30
Resources/Prototypes/Entities/Objects/Fun/puppet.yml

@@ -1,42 +1,44 @@
 - type: entity
-  parent: [ BaseItem, MobCombat ]
+  parent: [BaseItem, MobCombat]
   id: MrChips
   name: mr chips
   suffix: Dummy
   description: It's a dummy, dummy!
   components:
-  - type: Sprite
-    sprite: Objects/Fun/mrchips.rsi
-    layers:
-    - state: icon
-  - type: Input
-    context: "human"
-  - type: DoAfter
-  - type: VentriloquistPuppet
-  - type: Item
-    size: Normal
-  - type: Muted
-  - type: TypingIndicator
-    proto: robot
-  - type: Actions
-  - type: MobState
-    allowedStates:
-      - Alive
-  - type: MeleeWeapon
-    soundHit:
-      path: /Audio/Weapons/boxingpunch1.ogg
-    angle: 30
-    animation: WeaponArcPunch
-    damage:
-      types:
-        Blunt: 2
+    - type: Sprite
+      sprite: Objects/Fun/mrchips.rsi
+      layers:
+        - state: icon
+    - type: Input
+      context: "human"
+    - type: DoAfter
+    - type: VentriloquistPuppet
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: Muted
+    - type: TypingIndicator
+      proto: robot
+    - type: Actions
+    - type: MobState
+      allowedStates:
+        - Alive
+    - type: MeleeWeapon
+      soundHit:
+        path: /Audio/Weapons/boxingpunch1.ogg
+      angle: 30
+      animation: WeaponArcPunch
+      damage:
+        types:
+          Blunt: 2
 
 - type: entity
   parent: MrChips
   id: MrDips
   name: mr dips
   components:
-  - type: Sprite
-    sprite: Objects/Fun/mrdips.rsi
-    layers:
-    - state: icon
+    - type: Sprite
+      sprite: Objects/Fun/mrdips.rsi
+      layers:
+        - state: icon

+ 47 - 45
Resources/Prototypes/Entities/Objects/Fun/snap_pops.yml

@@ -4,35 +4,36 @@
   name: snap pop
   description: Throw it at the floor and listen to it POP!
   components:
-  - type: Sprite
-    sprite: Objects/Fun/toys.rsi
-    state: snappop
-  - type: Item
-    size: Tiny
-  - type: Damageable
-    damageContainer: Inorganic
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 1
-      behaviors:
-      - !type:DoActsBehavior
-        acts: ["Destruction"]
-      - !type:PlaySoundBehavior
-        sound:
-          path: /Audio/Effects/snap.ogg
-      - !type:ExplodeBehavior
-  - type: DamageOnLand
-    damage:
-      types:
-        Blunt: 3
-  - type: Explosive
-    explosionType: Default
-    # Cosmetic explosion :tf:
-    maxIntensity: 0.01
-    intensitySlope: 1
-    totalIntensity: 0.01
+    - type: Sprite
+      sprite: Objects/Fun/toys.rsi
+      state: snappop
+    - type: STWeight
+      self: 0.75
+    - type: Item
+      size: Tiny
+    - type: Damageable
+      damageContainer: Inorganic
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTrigger
+            damage: 1
+          behaviors:
+            - !type:DoActsBehavior
+              acts: ["Destruction"]
+            - !type:PlaySoundBehavior
+              sound:
+                path: /Audio/Effects/snap.ogg
+            - !type:ExplodeBehavior
+    - type: DamageOnLand
+      damage:
+        types:
+          Blunt: 3
+    - type: Explosive
+      explosionType: Default
+      # Cosmetic explosion :tf:
+      maxIntensity: 0.01
+      intensitySlope: 1
+      totalIntensity: 0.01
 
 - type: entity
   parent: BaseStorageItem
@@ -40,19 +41,20 @@
   name: snap pop box
   description: Contains snap pops for a few minutes of popping fun!
   components:
-  - type: Item
-    size: Normal
-  - type: Sprite
-    sprite: Objects/Fun/toys.rsi
-    state: spbox
-  - type: Storage
-    grid:
-    - 0,0,4,3
-    areaInsert: true
-    maxItemSize: Tiny
-  - type: StorageFill
-    contents:
-      - id: SnapPop
-        amount: 5
-  - type: Dumpable
-
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: Sprite
+      sprite: Objects/Fun/toys.rsi
+      state: spbox
+    - type: Storage
+      grid:
+        - 0,0,4,3
+      areaInsert: true
+      maxItemSize: Tiny
+    - type: StorageFill
+      contents:
+        - id: SnapPop
+          amount: 5
+    - type: Dumpable

Diferenças do arquivo suprimidas por serem muito extensas
+ 418 - 410
Resources/Prototypes/Entities/Objects/Fun/toys.yml


+ 85 - 83
Resources/Prototypes/Entities/Objects/Magic/books.yml

@@ -1,23 +1,23 @@
 - type: entity
   id: BaseSpellbook
   name: spellbook
-  parent: [ BaseItem, BaseMagicalContraband ]
+  parent: [BaseItem, BaseMagicalContraband]
   abstract: true
   components:
     - type: Sprite
       sprite: Objects/Misc/books.rsi
       layers:
-      - state: paper_blood
-      - state: cover_strong
-        color: "#645a5a"
-      - state: decor_wingette_flat
-        color: "#4d0303"
-      - state: icon_pentagramm
-        color: "#f7e19f"
+        - state: paper_blood
+        - state: cover_strong
+          color: "#645a5a"
+        - state: decor_wingette_flat
+          color: "#4d0303"
+        - state: icon_pentagramm
+          color: "#f7e19f"
     - type: Spellbook
     - type: Tag
       tags:
-      - Spellbook
+        - Spellbook
 
 # For the Wizard Antag
 # Do not add discounts or price inflation
@@ -25,18 +25,18 @@
   id: WizardsGrimoire
   name: wizards grimoire
   suffix: Wizard
-  parent: [ BaseItem, StorePresetSpellbook, BaseMagicalContraband ]
+  parent: [BaseItem, StorePresetSpellbook, BaseMagicalContraband]
   components:
     - type: Sprite
       sprite: Objects/Misc/books.rsi
       layers:
-      - state: paper_blood
-      - state: cover_strong
-        color: "#645a5a"
-      - state: decor_wingette_flat
-        color: "#4d0303"
-      - state: icon_pentagramm
-        color: "#f7e19f"
+        - state: paper_blood
+        - state: cover_strong
+          color: "#645a5a"
+        - state: decor_wingette_flat
+          color: "#4d0303"
+        - state: icon_pentagramm
+          color: "#f7e19f"
     - type: UserInterface
       interfaces:
         enum.StoreUiKey.Key:
@@ -54,7 +54,7 @@
   id: WizardsGrimoireNoRefund
   name: wizards grimoire
   suffix: Wizard, No Refund
-  parent: [ WizardsGrimoire, StorePresetSpellbook ]
+  parent: [WizardsGrimoire, StorePresetSpellbook]
   components:
     - type: Store
       refundAllowed: false
@@ -79,17 +79,17 @@
     - type: Sprite
       sprite: Objects/Misc/books.rsi
       layers:
-      - state: paper
-      - state: cover_strong
-        color: "#366ed6"
-      - state: decor_vertical_middle
-        color: "#95ffff"
-      - state: decor_wingette_circle
-        color: "#95ffff"
-      - state: icon_magic_forcewall
-        shader: unshaded
-      - state: detail_rivets
-        color: gold
+        - state: paper
+        - state: cover_strong
+          color: "#366ed6"
+        - state: decor_vertical_middle
+          color: "#95ffff"
+        - state: decor_wingette_circle
+          color: "#95ffff"
+        - state: icon_magic_forcewall
+          shader: unshaded
+        - state: detail_rivets
+          color: gold
     - type: Spellbook
       spellActions:
         ActionForceWall: -1
@@ -102,15 +102,15 @@
     - type: Sprite
       sprite: Objects/Misc/books.rsi
       layers:
-      - state: paper
-      - state: cover_old
-        color: "#657e9c"
-      - state: icon_text3
-      - state: decor_wingette_circle
-        color: gold
-      - state: icon_magic
-      - state: detail_rivets
-        color: gold
+        - state: paper
+        - state: cover_old
+          color: "#657e9c"
+        - state: icon_text3
+        - state: decor_wingette_circle
+          color: gold
+        - state: icon_magic
+        - state: detail_rivets
+          color: gold
     - type: Spellbook
       spellActions:
         ActionBlink: -1
@@ -123,17 +123,17 @@
     - type: Sprite
       sprite: Objects/Misc/books.rsi
       layers:
-      - state: paper
-      - state: cover_old
-        color: "#c42b40"
-      - state: decor_wingette_circle
-        color: gold
-      - state: icon_magic
-      - state: detail_rivets
-        color: gold
-      - state: detail_bookmark
-        color: red
-      - state: overlay_blood
+        - state: paper
+        - state: cover_old
+          color: "#c42b40"
+        - state: decor_wingette_circle
+          color: gold
+        - state: icon_magic
+        - state: detail_rivets
+          color: gold
+        - state: detail_bookmark
+          color: red
+        - state: overlay_blood
     - type: Spellbook
       spellActions:
         ActionSmiteNoReq: -1
@@ -146,16 +146,16 @@
     - type: Sprite
       sprite: Objects/Misc/books.rsi
       layers:
-      - state: paper
-      - state: cover_strong
-        color: "#117045"
-      - state: decor_wingette_circle
-        color: gold
-      - state: icon_magic_knock
-      - state: detail_rivets
-        color: gold
-      - state: detail_bookmark
-        color: "#98c495"
+        - state: paper
+        - state: cover_strong
+          color: "#117045"
+        - state: decor_wingette_circle
+          color: gold
+        - state: icon_magic_knock
+        - state: detail_rivets
+          color: gold
+        - state: detail_bookmark
+          color: "#98c495"
     - type: Spellbook
       spellActions:
         ActionKnock: -1
@@ -168,18 +168,18 @@
     - type: Sprite
       sprite: Objects/Misc/books.rsi
       layers:
-      - state: paper
-      - state: cover_old
-        color: "#ba5a14"
-      - state: decor_wingette_circle
-        color: gold
-      - state: detail_rivets
-        color: gold
-      - state: detail_bookmark
-        color: "#e89b3c"
-      - state: overlay_blood
-      - state: icon_magic_fireball
-        shader: unshaded
+        - state: paper
+        - state: cover_old
+          color: "#ba5a14"
+        - state: decor_wingette_circle
+          color: gold
+        - state: detail_rivets
+          color: gold
+        - state: detail_bookmark
+          color: "#e89b3c"
+        - state: overlay_blood
+        - state: icon_magic_fireball
+          shader: unshaded
     - type: Spellbook
       spellActions:
         ActionFireball: -1
@@ -189,15 +189,17 @@
   name: scroll of runes
   parent: BaseSpellbook
   components:
-  - type: Item
-    size: Normal
-  - type: Sprite
-    sprite: Objects/Magic/magicactions.rsi
-    layers:
-    - state: spell_default
-  - type: Spellbook
-    spellActions:
-      ActionFlashRune: -1
-      ActionExplosionRune: -1
-      ActionIgniteRune: -1
-      ActionStunRune: -1
+    - type: STWeight
+      self: 3
+    - type: Item
+      size: Normal
+    - type: Sprite
+      sprite: Objects/Magic/magicactions.rsi
+      layers:
+        - state: spell_default
+    - type: Spellbook
+      spellActions:
+        ActionFlashRune: -1
+        ActionExplosionRune: -1
+        ActionIgniteRune: -1
+        ActionStunRune: -1

+ 4 - 0
Resources/Prototypes/Entities/Objects/Materials/materials.yml

@@ -747,6 +747,8 @@
     - type: PhysicalComposition
       materialComposition:
         Gunpowder: 100
+    - type: STWeight
+      self: 0.75
     - type: Item
       size: Tiny
 
@@ -774,6 +776,8 @@
         - goliath_hide
         - goliath_hide_2
         - goliath_hide_3
+    - type: STWeight
+      self: 5
     - type: Item
       size: Large
       heldPrefix: goliathhide

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff