From e21fb8ff398158aafb1e368a85d6376f34f30e7f Mon Sep 17 00:00:00 2001 From: Orsoniks Date: Thu, 5 Jun 2025 23:06:38 +0200 Subject: [PATCH 01/63] In-hand sprites for some food items (#38024) * so meow changes * qwawa * fixed sprites * Update meta.json * Update meta.json * Update meta.json * Update meta.json * Update meta.json * more inhand variations using coloring not perfect but better than nothing * more meats * pizza inhands, ported from starlight and edited * add link * snack inhands * worldpeas * chips * packets * all snacks and trashes finished * correction --- .../Objects/Consumable/Food/Baked/pizza.yml | 26 ++ .../Consumable/Food/Containers/plate.yml | 20 + .../Objects/Consumable/Food/ingredients.yml | 6 + .../Entities/Objects/Consumable/Food/meat.yml | 396 ++++++++++++++++++ .../Objects/Consumable/Food/snacks.yml | 135 +++++- .../pizza.rsi/arnold-slice-inhand-left.png | Bin 0 -> 783 bytes .../pizza.rsi/arnold-slice-inhand-right.png | Bin 0 -> 781 bytes .../pizza.rsi/cotton-slice-inhand-left.png | Bin 0 -> 872 bytes .../pizza.rsi/cotton-slice-inhand-right.png | Bin 0 -> 861 bytes .../pizza.rsi/dank-slice-inhand-left.png | Bin 0 -> 1360 bytes .../pizza.rsi/dank-slice-inhand-right.png | Bin 0 -> 1306 bytes .../donkpocket-slice-inhand-left.png | Bin 0 -> 1395 bytes .../donkpocket-slice-inhand-right.png | Bin 0 -> 1345 bytes .../margherita-slice-inhand-left.png | Bin 0 -> 1395 bytes .../margherita-slice-inhand-right.png | Bin 0 -> 1345 bytes .../pizza.rsi/meat-slice-inhand-left.png | Bin 0 -> 892 bytes .../pizza.rsi/meat-slice-inhand-right.png | Bin 0 -> 937 bytes .../Consumable/Food/Baked/pizza.rsi/meta.json | 106 ++++- .../pizza.rsi/moldy-slice-inhand-left.png | Bin 0 -> 1374 bytes .../pizza.rsi/moldy-slice-inhand-right.png | Bin 0 -> 1334 bytes .../pizza.rsi/mushroom-slice-inhand-left.png | Bin 0 -> 1383 bytes .../pizza.rsi/mushroom-slice-inhand-right.png | Bin 0 -> 1341 bytes .../pizza.rsi/pineapple-slice-inhand-left.png | Bin 0 -> 1395 bytes .../pineapple-slice-inhand-right.png | Bin 0 -> 1345 bytes .../pizza.rsi/sassysage-slice-inhand-left.png | Bin 0 -> 892 bytes .../sassysage-slice-inhand-right.png | Bin 0 -> 937 bytes .../pizza.rsi/uranium-slice-inhand-left.png | Bin 0 -> 1350 bytes .../pizza.rsi/uranium-slice-inhand-right.png | Bin 0 -> 1379 bytes .../pizza.rsi/vegetable-slice-inhand-left.png | Bin 0 -> 724 bytes .../vegetable-slice-inhand-right.png | Bin 0 -> 715 bytes .../pizza.rsi/worldpeas-slice-inhand-left.png | Bin 0 -> 1216 bytes .../worldpeas-slice-inhand-right.png | Bin 0 -> 1240 bytes .../cheesewedge-inhand-left.png | Bin 0 -> 319 bytes .../cheesewedge-inhand-right.png | Bin 0 -> 327 bytes .../Consumable/Food/ingredients.rsi/meta.json | 10 +- .../Food/meat.rsi/corgi-inhand-left.png | Bin 0 -> 344 bytes .../Food/meat.rsi/corgi-inhand-right.png | Bin 0 -> 350 bytes .../meat.rsi/dragon-cooked-inhand-left.png | Bin 0 -> 336 bytes .../meat.rsi/dragon-cooked-inhand-right.png | Bin 0 -> 342 bytes .../Food/meat.rsi/dragon-inhand-left.png | Bin 0 -> 336 bytes .../Food/meat.rsi/dragon-inhand-right.png | Bin 0 -> 343 bytes .../meat.rsi/generic-pink-inhand-left.png | Bin 0 -> 346 bytes .../meat.rsi/generic-pink-inhand-right.png | Bin 0 -> 350 bytes .../Consumable/Food/meat.rsi/meta.json | 98 ++++- .../meat.rsi/plain-cooked-inhand-left.png | Bin 0 -> 336 bytes .../meat.rsi/plain-cooked-inhand-right.png | Bin 0 -> 342 bytes .../Food/meat.rsi/plain-inhand-left.png | Bin 0 -> 346 bytes .../Food/meat.rsi/plain-inhand-right.png | Bin 0 -> 352 bytes .../Food/meat.rsi/rotten-inhand-left.png | Bin 0 -> 337 bytes .../Food/meat.rsi/rotten-inhand-right.png | Bin 0 -> 343 bytes .../Food/meat.rsi/sausage-inhand-left.png | Bin 0 -> 348 bytes .../Food/meat.rsi/sausage-inhand-right.png | Bin 0 -> 353 bytes .../Food/meat.rsi/slime-inhand-left.png | Bin 0 -> 297 bytes .../Food/meat.rsi/slime-inhand-right.png | Bin 0 -> 294 bytes .../Food/meat.rsi/snake-inhand-left.png | Bin 0 -> 391 bytes .../Food/meat.rsi/snake-inhand-right.png | Bin 0 -> 404 bytes .../Food/meat.rsi/spider-inhand-left.png | Bin 0 -> 349 bytes .../Food/meat.rsi/spider-inhand-right.png | Bin 0 -> 358 bytes .../Food/meat.rsi/tomato-inhand-left.png | Bin 0 -> 352 bytes .../Food/meat.rsi/tomato-inhand-right.png | Bin 0 -> 355 bytes .../Consumable/Food/plates.rsi/meta.json | 18 +- .../Food/plates.rsi/plate-inhand-left.png | Bin 0 -> 319 bytes .../Food/plates.rsi/plate-inhand-right.png | Bin 0 -> 315 bytes .../plates.rsi/plate-plastic-inhand-left.png | Bin 0 -> 319 bytes .../plates.rsi/plate-plastic-inhand-right.png | Bin 0 -> 315 bytes .../Food/snacks.rsi/boritos-inhand-left.png | Bin 0 -> 376 bytes .../Food/snacks.rsi/boritos-inhand-right.png | Bin 0 -> 375 bytes .../snacks.rsi/cheesiehonkers-inhand-left.png | Bin 0 -> 312 bytes .../cheesiehonkers-inhand-right.png | Bin 0 -> 311 bytes .../Food/snacks.rsi/chinese1-inhand-left.png | Bin 0 -> 383 bytes .../Food/snacks.rsi/chinese1-inhand-right.png | Bin 0 -> 380 bytes .../Food/snacks.rsi/chinese2-inhand-left.png | Bin 0 -> 368 bytes .../Food/snacks.rsi/chinese2-inhand-right.png | Bin 0 -> 366 bytes .../Food/snacks.rsi/chips-inhand-left.png | Bin 0 -> 379 bytes .../Food/snacks.rsi/chips-inhand-right.png | Bin 0 -> 381 bytes .../chocolatebar-open-inhand-left.png | Bin 0 -> 298 bytes .../chocolatebar-open-inhand-right.png | Bin 0 -> 306 bytes .../Food/snacks.rsi/cnds-inhand-left.png | Bin 0 -> 372 bytes .../Food/snacks.rsi/cnds-inhand-right.png | Bin 0 -> 369 bytes .../snacks.rsi/cookie_fortune-inhand-left.png | Bin 0 -> 269 bytes .../cookie_fortune-inhand-right.png | Bin 0 -> 263 bytes .../Food/snacks.rsi/energybar-inhand-left.png | Bin 0 -> 324 bytes .../snacks.rsi/energybar-inhand-right.png | Bin 0 -> 323 bytes .../snacks.rsi/energybar-open-inhand-left.png | Bin 0 -> 314 bytes .../energybar-open-inhand-right.png | Bin 0 -> 303 bytes .../Consumable/Food/snacks.rsi/meta.json | 170 +++++++- .../snacks.rsi/mre-brownie-inhand-left.png | Bin 0 -> 362 bytes .../snacks.rsi/mre-brownie-inhand-right.png | Bin 0 -> 356 bytes .../mre-brownie-open-inhand-left.png | Bin 0 -> 286 bytes .../mre-brownie-open-inhand-right.png | Bin 0 -> 286 bytes .../snacks.rsi/nutribrick-inhand-left.png | Bin 0 -> 481 bytes .../snacks.rsi/nutribrick-inhand-right.png | Bin 0 -> 478 bytes .../nutribrick-open-inhand-left.png | Bin 0 -> 316 bytes .../nutribrick-open-inhand-right.png | Bin 0 -> 318 bytes .../Food/snacks.rsi/pistachio-inhand-left.png | Bin 0 -> 576 bytes .../snacks.rsi/pistachio-inhand-right.png | Bin 0 -> 571 bytes .../Food/snacks.rsi/raisins-inhand-left.png | Bin 0 -> 342 bytes .../Food/snacks.rsi/raisins-inhand-right.png | Bin 0 -> 337 bytes .../Food/snacks.rsi/ramen-inhand-left.png | Bin 0 -> 363 bytes .../Food/snacks.rsi/ramen-inhand-right.png | Bin 0 -> 364 bytes .../Food/snacks.rsi/semki-inhand-left.png | Bin 0 -> 359 bytes .../Food/snacks.rsi/semki-inhand-right.png | Bin 0 -> 364 bytes .../Food/snacks.rsi/susjerky-inhand-left.png | Bin 0 -> 377 bytes .../Food/snacks.rsi/susjerky-inhand-right.png | Bin 0 -> 387 bytes .../snacks.rsi/syndicakes-inhand-left.png | Bin 0 -> 375 bytes .../snacks.rsi/syndicakes-inhand-right.png | Bin 0 -> 366 bytes .../Food/snacks.rsi/trash-inhand-left.png | Bin 0 -> 9393 bytes .../Food/snacks.rsi/trash-inhand-right.png | Bin 0 -> 9387 bytes 108 files changed, 978 insertions(+), 7 deletions(-) create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/arnold-slice-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/arnold-slice-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/dank-slice-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/dank-slice-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/donkpocket-slice-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/donkpocket-slice-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/margherita-slice-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/margherita-slice-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meat-slice-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/meat-slice-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/moldy-slice-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/moldy-slice-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/mushroom-slice-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/mushroom-slice-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/pineapple-slice-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/pineapple-slice-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/sassysage-slice-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/sassysage-slice-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/uranium-slice-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/uranium-slice-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/vegetable-slice-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/vegetable-slice-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/worldpeas-slice-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/worldpeas-slice-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cheesewedge-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cheesewedge-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/corgi-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/corgi-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-cooked-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-cooked-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/generic-pink-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/generic-pink-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-cooked-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-cooked-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/rotten-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/rotten-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/sausage-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/sausage-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/slime-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/slime-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/snake-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/snake-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/spider-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/spider-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/tomato-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/meat.rsi/tomato-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-plastic-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-plastic-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/boritos-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/boritos-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/cheesiehonkers-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/cheesiehonkers-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese1-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese1-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese2-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese2-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/chips-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/chips-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/chocolatebar-open-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/chocolatebar-open-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/cnds-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/cnds-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/cookie_fortune-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/cookie_fortune-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-open-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-open-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-open-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-open-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-open-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-open-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/pistachio-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/pistachio-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/raisins-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/raisins-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/ramen-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/ramen-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/semki-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/semki-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/susjerky-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/susjerky-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/syndicakes-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/syndicakes-inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/trash-inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Food/snacks.rsi/trash-inhand-right.png diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml index 9fe96a18a1..5d6b9f9316 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml @@ -96,6 +96,8 @@ - type: Sprite layers: - state: margherita-slice + - type: Item + heldPrefix: margherita-slice - type: entity name: meat pizza @@ -134,6 +136,8 @@ - type: Sprite layers: - state: meat-slice + - type: Item + heldPrefix: meat-slice - type: Tag tags: - Meat @@ -172,6 +176,8 @@ - type: Sprite layers: - state: mushroom-slice + - type: Item + heldPrefix: mushroom-slice # Tastes like crust, tomato, cheese, mushroom. - type: entity @@ -223,6 +229,8 @@ - type: Sprite layers: - state: vegetable-slice + - type: Item + heldPrefix: vegetable-slice - type: SolutionContainerManager solutions: food: @@ -280,6 +288,8 @@ - type: Sprite layers: - state: donkpocket-slice + - type: Item + heldPrefix: donkpocket-slice - type: SolutionContainerManager solutions: food: @@ -340,6 +350,8 @@ - type: Sprite layers: - state: dank-slice + - type: Item + heldPrefix: dank-slice - type: SolutionContainerManager solutions: food: @@ -388,6 +400,8 @@ - type: Sprite layers: - state: sassysage-slice + - type: Item + heldPrefix: sassysage-slice - type: Tag tags: - Meat @@ -434,6 +448,8 @@ - type: Sprite layers: - state: pineapple-slice + - type: Item + heldPrefix: pineapple-slice - type: Tag tags: - Meat @@ -494,6 +510,8 @@ - type: Sprite layers: - state: arnold-slice + - type: Item + heldPrefix: arnold-slice - type: SolutionContainerManager solutions: food: @@ -529,6 +547,8 @@ - type: Sprite layers: - state: moldy-slice + - type: Item + heldPrefix: moldy-slice - type: Tag tags: - Trash @@ -597,6 +617,8 @@ - type: Sprite layers: - state: uranium-slice + - type: Item + heldPrefix: uranium-slice - type: Tag tags: - Meat @@ -665,6 +687,8 @@ - type: Sprite layers: - state: cotton-slice + - type: Item + heldPrefix: cotton-slice - type: Tag tags: - ClothMade @@ -722,6 +746,8 @@ - type: Sprite layers: - state: worldpeas-slice + - type: Item + heldPrefix: worldpeas-slice - type: SolutionContainerManager solutions: food: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml index 2e2f2979bc..ac2cf22c59 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/plate.yml @@ -19,6 +19,11 @@ shape: - 0,0,1,0 storedOffset: 0,-6 + inhandVisuals: + left: + - state: plate-inhand-left + right: + - state: plate-inhand-right - type: DamageOnLand damage: types: @@ -86,6 +91,11 @@ state: plate-small - type: Item storedOffset: 0,-3 + inhandVisuals: + left: + - state: plate-inhand-left + right: + - state: plate-inhand-right # Needs the full thing because inherting is dumb sometimes. - type: Destructible thresholds: @@ -134,6 +144,11 @@ shape: - 0,0,1,0 storedOffset: 0,-6 + inhandVisuals: + left: + - state: plate-plastic-inhand-left + right: + - state: plate-plastic-inhand-right - type: Tag tags: - Trash @@ -151,6 +166,11 @@ shape: - 0,0,1,0 storedOffset: 0,-3 + inhandVisuals: + left: + - state: plate-plastic-inhand-left + right: + - state: plate-plastic-inhand-right - type: Tag tags: - Trash diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml index f29d919b0f..344827534b 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml @@ -720,6 +720,12 @@ entries: Taco: CheeseTaco Burger: CheeseBurger + - type: Item + inhandVisuals: + left: + - state: cheesewedge-inhand-left + right: + - state: cheesewedge-inhand-right - type: entity name: chèvre log diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml index 6784538f61..b603ffe011 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml @@ -109,6 +109,12 @@ - type: Tag tags: - Meat + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + right: + - state: plain-inhand-right - type: entity name: raw human meat @@ -127,6 +133,12 @@ - type: SliceableFood count: 3 slice: FoodMeatCutlet + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + right: + - state: plain-inhand-right - type: entity name: raw carp fillet @@ -155,6 +167,12 @@ reagents: - ReagentId: CarpoToxin Quantity: 5 + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw bacon @@ -185,6 +203,12 @@ graph: Bacon node: start defaultTarget: bacon + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw bear meat @@ -209,6 +233,14 @@ graph: BearSteak node: start defaultTarget: filet migrawr + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#934C64" + right: + - state: generic-pink-inhand-right + color: "#934C64" - type: entity name: raw penguin meat @@ -233,6 +265,12 @@ graph: PenguinSteak node: start defaultTarget: cooked penguin + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw chicken meat @@ -259,6 +297,12 @@ graph: ChickenSteak node: start defaultTarget: cooked chicken + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw duck meat @@ -283,6 +327,12 @@ graph: DuckSteak node: start defaultTarget: cooked duck + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: prime-cut corgi meat @@ -308,6 +358,12 @@ price: 750 - type: StealTarget stealGroup: FoodMeatCorgi + - type: Item + inhandVisuals: + left: + - state: corgi-inhand-left + right: + - state: corgi-inhand-right - type: entity name: raw crab meat @@ -355,6 +411,12 @@ graph: GoliathSteak node: start defaultTarget: goliath steak + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + right: + - state: plain-inhand-right - type: entity name: dragon flesh @@ -389,6 +451,12 @@ graph: DragonSteak node: start defaultTarget: dragon steak + - type: Item + inhandVisuals: + left: + - state: dragon-inhand-left + right: + - state: dragon-inhand-right - type: entity name: raw rat meat @@ -409,6 +477,12 @@ - type: SliceableFood count: 3 slice: FoodMeatCutlet + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + right: + - state: plain-inhand-right - type: entity name: raw lizard meat @@ -433,6 +507,14 @@ graph: LizardSteak node: start defaultTarget: lizard steak + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + color: "#6EFF41" + right: + - state: plain-inhand-right + color: "#6EFF41" - type: entity name: raw plant meat @@ -467,6 +549,12 @@ Quantity: 4 - ReagentId: Fat Quantity: 4 + - type: Item + inhandVisuals: + left: + - state: rotten-inhand-left + right: + - state: rotten-inhand-right - type: entity name: raw spider meat @@ -487,6 +575,8 @@ - type: SliceableFood count: 3 slice: FoodMeatSpiderCutlet + - type: Item + heldPrefix: spider - type: entity name: raw spider leg @@ -504,6 +594,14 @@ Quantity: 10 - ReagentId: Fat Quantity: 3 + - type: Item + inhandVisuals: + left: + - state: snake-inhand-left + color: "#333333" + right: + - state: snake-inhand-right + color: "#333333" - type: entity name: meatwheat clump @@ -522,6 +620,14 @@ reagents: - ReagentId: UncookedAnimalProteins Quantity: 1 + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#934C64" + right: + - state: generic-pink-inhand-right + color: "#934C64" - type: entity name: raw snake meat @@ -543,6 +649,12 @@ Quantity: 10 - ReagentId: Toxin Quantity: 2 + - type: Item + inhandVisuals: + left: + - state: snake-inhand-left + right: + - state: snake-inhand-right - type: entity name: raw xeno meat @@ -570,6 +682,14 @@ - type: SliceableFood count: 3 slice: FoodMeatXenoCutlet + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + color: "#6EFF41" + right: + - state: plain-inhand-right + color: "#6EFF41" - type: entity name: raw rouny meat @@ -599,6 +719,12 @@ graph: RounySteak node: start defaultTarget: rouny steak + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + right: + - state: plain-inhand-right - type: entity name: killer tomato meat @@ -613,6 +739,12 @@ slice: FoodMeatTomatoCutlet - type: StaticPrice price: 100 + - type: Item + inhandVisuals: + left: + - state: tomato-inhand-left + right: + - state: tomato-inhand-right - type: entity name: salami @@ -695,6 +827,8 @@ graph: CookedPatty node: start defaultTarget: cooked meat patty + - type: Item + heldPrefix: generic-pink - type: entity name: slimeball @@ -716,6 +850,12 @@ Quantity: 10 - type: Sprite state: slime + - type: Item + inhandVisuals: + left: + - state: slime-inhand-left + right: + - state: slime-inhand-right - type: entity name: raw snail meat @@ -736,6 +876,14 @@ Quantity: 3 - ReagentId: Water Quantity: 4 #It makes saline if you add salt! + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#E2AE7C" + right: + - state: generic-pink-inhand-right + color: "#E2AE7C" - type: entity name: anomalous meat mass @@ -766,6 +914,12 @@ - type: Tag tags: - Meat + - type: Item + inhandVisuals: + left: + - state: plain-inhand-left + right: + - state: plain-inhand-right # Cooked @@ -833,6 +987,12 @@ entries: Burger: MeatSteak Taco: MeatSteak + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + right: + - state: plain-cooked-inhand-right - type: entity name: bacon @@ -868,6 +1028,14 @@ entries: Burger: MeatBacon Taco: MeatBacon + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3E2A" + right: + - state: generic-pink-inhand-right + color: "#5B3E2A" - type: entity name: cooked bear @@ -901,6 +1069,8 @@ entries: Burger: MeatBearBurger Taco: MeatBear + - type: Item + heldPrefix: meatball - type: entity name: penguin filet @@ -933,6 +1103,14 @@ entries: Burger: MeatPenguinBurger Taco: MeatPenguin + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + color: "#F7E3A3" + right: + - state: plain-cooked-inhand-right + color: "#F7E3A3" - type: entity name: cooked chicken @@ -965,6 +1143,14 @@ entries: Burger: MeatChicken Taco: MeatChicken + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + color: "#F7E3A3" + right: + - state: plain-cooked-inhand-right + color: "#F7E3A3" - type: entity name: fried chicken @@ -997,6 +1183,14 @@ entries: Burger: MeatChicken Taco: MeatChicken + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + color: "#F7E3A3" + right: + - state: plain-cooked-inhand-right + color: "#F7E3A3" - type: entity name: cooked duck @@ -1029,6 +1223,14 @@ entries: Burger: MeatDuck Taco: MeatDuck + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + color: "#F7E3A3" + right: + - state: plain-cooked-inhand-right + color: "#F7E3A3" - type: entity name: cooked crab @@ -1061,6 +1263,12 @@ entries: Burger: MeatCrabBurger Taco: MeatCrab + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + right: + - state: plain-cooked-inhand-right - type: entity name: goliath steak @@ -1091,6 +1299,12 @@ entries: Burger: MeatGoliathBurger Taco: MeatGoliath + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + right: + - state: plain-cooked-inhand-right - type: entity name: rouny steak @@ -1125,6 +1339,12 @@ entries: Burger: MeatXeno Taco: MeatXeno + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + right: + - state: plain-cooked-inhand-right - type: entity name: lizard steak @@ -1158,6 +1378,12 @@ entries: Burger: MeatLizardBurger Taco: MeatLizard + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + right: + - state: plain-cooked-inhand-right - type: entity name: boiled spider leg @@ -1184,6 +1410,14 @@ entries: Burger: MeatSpiderBurger Taco: MeatSpider + - type: Item + inhandVisuals: + left: + - state: snake-inhand-left + color: "#44201A" + right: + - state: snake-inhand-right + color: "#44201A" - type: entity name: meatball @@ -1212,6 +1446,8 @@ - type: Construction graph: MeatMeatballCooked node: meatball cooked + - type: Item + heldPrefix: meatball - type: entity name: cooked meat patty @@ -1241,6 +1477,8 @@ entries: Burger: MeatPatty Taco: MeatPatty + - type: Item + heldPrefix: meatball - type: entity name: boiled snail @@ -1270,6 +1508,14 @@ entries: Burger: MeatSnail Taco: MeatSnail + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3E2A" + right: + - state: generic-pink-inhand-right + color: "#5B3E2A" - type: entity name: anomalous steak @@ -1299,6 +1545,12 @@ - type: Construction graph: AnomalyMeatSteak node: anomaly steak + - type: Item + inhandVisuals: + left: + - state: plain-cooked-inhand-left + right: + - state: plain-cooked-inhand-right - type: entity name: dragon steak @@ -1334,6 +1586,12 @@ entries: Burger: DragonSteak Taco: DragonSteak + - type: Item + inhandVisuals: + left: + - state: dragon-cooked-inhand-left + right: + - state: dragon-cooked-inhand-right # Cutlets @@ -1364,6 +1622,12 @@ graph: Cutlet node: start defaultTarget: cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw bear cutlet @@ -1393,6 +1657,14 @@ graph: BearCutlet node: start defaultTarget: bear cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: brown + right: + - state: generic-pink-inhand-right + color: brown - type: entity name: raw penguin cutlet @@ -1420,6 +1692,14 @@ graph: PenguinCutlet node: start defaultTarget: penguin cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: white + right: + - state: generic-pink-inhand-right + color: white - type: entity name: raw chicken cutlet @@ -1447,6 +1727,12 @@ graph: ChickenCutlet node: start defaultTarget: chicken cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw duck cutlet @@ -1474,6 +1760,12 @@ graph: DuckCutlet node: start defaultTarget: duck cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + right: + - state: generic-pink-inhand-right - type: entity name: raw lizard cutlet @@ -1504,6 +1796,14 @@ graph: LizardCutlet node: start defaultTarget: lizard cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: green + right: + - state: generic-pink-inhand-right + color: green - type: entity name: raw spider cutlet @@ -1530,6 +1830,14 @@ graph: SpiderCutlet node: start defaultTarget: spider cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: green + right: + - state: generic-pink-inhand-right + color: green - type: entity name: raw xeno cutlet @@ -1558,6 +1866,14 @@ graph: XenoCutlet node: start defaultTarget: xeno cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: green + right: + - state: generic-pink-inhand-right + color: green - type: entity name: raw killer tomato cutlet @@ -1623,6 +1939,14 @@ graph: DragonCutlet node: start defaultTarget: dragon cutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#D127A7" + right: + - state: generic-pink-inhand-right + color: "#D127A7" # Cooked @@ -1654,6 +1978,14 @@ entries: Burger: MeatCutlet Taco: MeatCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3614" + right: + - state: generic-pink-inhand-right + color: "#5B3614" - type: entity name: bear cutlet @@ -1686,6 +2018,14 @@ entries: Burger: BearCutletBurger Taco: BearCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3614" + right: + - state: generic-pink-inhand-right + color: "#5B3614" - type: entity name: penguin cutlet @@ -1716,6 +2056,14 @@ entries: Burger: PenguinCutletBurger Taco: PenguinCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3614" + right: + - state: generic-pink-inhand-right + color: "#5B3614" - type: entity name: chicken cutlet @@ -1746,6 +2094,14 @@ entries: Burger: ChickenCutlet Taco: ChickenCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3614" + right: + - state: generic-pink-inhand-right + color: "#5B3614" - type: entity name: duck cutlet @@ -1776,6 +2132,14 @@ entries: Burger: DuckCutlet Taco: DuckCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#5B3614" + right: + - state: generic-pink-inhand-right + color: "#5B3614" - type: entity name: lizard cutlet @@ -1807,6 +2171,14 @@ entries: Burger: LizardCutletBurger Taco: LizardCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#153F06" + right: + - state: generic-pink-inhand-right + color: "#153F06" - type: entity name: spider cutlet @@ -1836,6 +2208,14 @@ entries: Burger: SpiderCutletBurger Taco: SpiderCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#153F06" + right: + - state: generic-pink-inhand-right + color: "#153F06" - type: entity name: xeno cutlet @@ -1865,6 +2245,14 @@ entries: Burger: XenoCutlet Taco: XenoCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#153F06" + right: + - state: generic-pink-inhand-right + color: "#153F06" - type: entity name: dragon cutlet @@ -1896,3 +2284,11 @@ entries: Burger: DragonCutlet Taco: DragonCutlet + - type: Item + inhandVisuals: + left: + - state: generic-pink-inhand-left + color: "#7A1763" + right: + - state: generic-pink-inhand-right + color: "#7A1763" diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml index 9147a79158..3668e173b7 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml @@ -40,6 +40,7 @@ - type: Sprite state: boritos - type: Item + heldPrefix: boritos - type: Food trash: - FoodPacketBoritosTrash @@ -56,6 +57,7 @@ - type: Sprite state: cnds - type: Item + heldPrefix: cnds - type: Food trash: - FoodPacketCnDsTrash @@ -73,6 +75,7 @@ - type: Sprite state: cheesiehonkers - type: Item + heldPrefix: cheesiehonkers - type: Food trash: - FoodPacketCheesieTrash @@ -91,6 +94,7 @@ - type: Sprite state: chips - type: Item + heldPrefix: chips - type: Food trash: - FoodPacketChipsTrash @@ -129,6 +133,7 @@ - type: Sprite state: chocolatebar-open - type: Item + heldPrefix: chocolatebar-open - type: Tag tags: - FoodSnack @@ -154,6 +159,7 @@ - type: Sprite state: energybar - type: Item + heldPrefix: energybar - type: SpawnItemsOnUse items: - id: FoodPacketEnergyTrash @@ -176,6 +182,7 @@ - type: Sprite state: energybar-open - type: Item + heldPrefix: energybar-open - type: entity name: Sweetie's pistachios @@ -190,6 +197,7 @@ - type: Sprite state: pistachio - type: Item + heldPrefix: pistachio - type: Food trash: - FoodPacketPistachioTrash @@ -229,6 +237,7 @@ - type: Sprite state: raisins - type: Item + heldPrefix: raisins - type: Food trash: - FoodPacketRaisinsTrash @@ -248,6 +257,7 @@ - type: Sprite state: semki - type: Item + heldPrefix: semki - type: Food trash: - FoodPacketSemkiTrash @@ -264,6 +274,7 @@ - type: Sprite state: susjerky - type: Item + heldPrefix: susjerky - type: Food trash: - FoodPacketSusTrash @@ -283,6 +294,7 @@ - type: Sprite state: syndicakes - type: Item + heldPrefix: syndicakes - type: Food trash: - FoodPacketSyndiTrash @@ -311,6 +323,8 @@ - type: Food trash: - FoodPacketCupRamenTrash + - type: Item + heldPrefix: ramen - type: entity parent: DrinkRamen @@ -342,6 +356,7 @@ - type: Sprite state: chinese1 - type: Item + heldPrefix: chinese1 - type: SolutionContainerManager solutions: food: @@ -369,6 +384,7 @@ - type: Sprite state: chinese2 - type: Item + heldPrefix: chinese2 - type: SolutionContainerManager solutions: food: @@ -404,7 +420,7 @@ Quantity: 1 - type: Item sprite: Objects/Consumable/Food/snacks.rsi - heldPrefix: packet + heldPrefix: cookie_fortune size: Tiny - type: Food trash: @@ -418,6 +434,7 @@ components: - type: Item size: Small + heldPrefix: nutribrick - type: Tag tags: - FoodSnack @@ -442,6 +459,7 @@ - nutribrick - type: Item size: Small + heldPrefix: nutribrick-open - type: Tag tags: - ReptilianFood @@ -465,6 +483,8 @@ - type: Sprite sprite: Objects/Consumable/Food/snacks.rsi state: mre-brownie + - type: Item + heldPrefix: mre-brownie - type: Tag tags: - FoodSnack @@ -487,6 +507,8 @@ - mrebrownie - type: Sprite state: mre-brownie-open + - type: Item + heldPrefix: mre-brownie-open - type: Food - type: SolutionContainerManager solutions: @@ -511,7 +533,6 @@ sprite: Objects/Consumable/Food/snacks.rsi - type: Item sprite: Objects/Consumable/Food/snacks.rsi - heldPrefix: packet size: Tiny - type: Tag tags: @@ -540,6 +561,14 @@ components: - type: Sprite state: boritos-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#4F54BE" + right: + - state: trash-inhand-right + color: "#4F54BE" - type: entity categories: [ HideSpawnMenu ] @@ -549,6 +578,14 @@ components: - type: Sprite state: cnds-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#915145" + right: + - state: trash-inhand-right + color: "#915145" - type: entity categories: [ HideSpawnMenu ] @@ -558,6 +595,14 @@ components: - type: Sprite state: cheesiehonkers-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#FFCC33" + right: + - state: trash-inhand-right + color: "#FFCC33" - type: entity categories: [ HideSpawnMenu ] @@ -567,6 +612,14 @@ components: - type: Sprite state: chips-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#008000" + right: + - state: trash-inhand-right + color: "#008000" - type: entity categories: [ HideSpawnMenu ] @@ -576,6 +629,14 @@ components: - type: Sprite state: chocolatebar-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#A20000" + right: + - state: trash-inhand-right + color: "#A20000" - type: entity categories: [ HideSpawnMenu ] @@ -585,6 +646,14 @@ components: - type: Sprite state: energybar-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#9AFF1F" + right: + - state: trash-inhand-right + color: "#9AFF1F" - type: entity categories: [ HideSpawnMenu ] @@ -594,6 +663,14 @@ components: - type: Sprite state: pistachio-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#99B334" + right: + - state: trash-inhand-right + color: "#99B334" - type: entity categories: [ HideSpawnMenu ] @@ -603,6 +680,14 @@ components: - type: Sprite state: popcorn-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#5193FF" + right: + - state: trash-inhand-right + color: "#5193FF" - type: entity categories: [ HideSpawnMenu ] @@ -612,6 +697,14 @@ components: - type: Sprite state: raisins-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#FF0033" + right: + - state: trash-inhand-right + color: "#FF0033" - type: entity categories: [ HideSpawnMenu ] @@ -621,6 +714,14 @@ components: - type: Sprite state: semki-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#C2821E" + right: + - state: trash-inhand-right + color: "#C2821E" - type: entity categories: [ HideSpawnMenu ] @@ -630,6 +731,14 @@ components: - type: Sprite state: susjerky-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#990033" + right: + - state: trash-inhand-right + color: "#990033" - type: entity categories: [ HideSpawnMenu ] @@ -639,6 +748,14 @@ components: - type: Sprite state: syndicakes-trash + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#FFFFFF" + right: + - state: trash-inhand-right + color: "#FFFFFF" - type: entity categories: [ HideSpawnMenu ] @@ -648,6 +765,8 @@ components: - type: Sprite state: ramen + - type: Item + heldPrefix: ramen - type: entity categories: [ HideSpawnMenu ] @@ -657,6 +776,8 @@ components: - type: Sprite state: chinese1 + - type: Item + heldPrefix: chinese1 - type: entity categories: [ HideSpawnMenu ] @@ -666,6 +787,8 @@ components: - type: Sprite state: chinese2 + - type: Item + heldPrefix: chinese2 - type: entity categories: [ HideSpawnMenu ] @@ -702,3 +825,11 @@ - Trash - type: Sprite state: mre-wrapper + - type: Item + inhandVisuals: + left: + - state: trash-inhand-left + color: "#8B7356" + right: + - state: trash-inhand-right + color: "#8B7356" diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/arnold-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/arnold-slice-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..2a24461a11a13138f81910e1189d9f8ddb8345db GIT binary patch literal 783 zcmV+q1MvKbP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0;EYqK~#8N?V3+= z(=ZgqpTmw7@(dSHxB#OJCvZ6d?Gcg#uyB}R$3Wd9q{9gsZjhXSiPmh855U4=!?K9) z*;dwm;{c_nxp(iJ!?u*;_vc@z^QFsR|f38Lf#$z$luEw%~lej<4r- zxV@&LdpZ|@JFC&_Q=Kji#H!c~$73mOT47SM#HTA8VmzMkUIIC+#1jwshWLwJH$)n7tAm$Hq?p zVH_nA>e5naJ&nrs`>r$vZ4~*jAzeTG5P^j>XhTCtG?I>{$1lJps+kFd!LuUigrgFRQ|^8G|`GxIh{{Bz|krSryGPtR;Zrk;CJOSa#!LjmZr^SwG>rC9*B z!;^_kDqf(Lm?i6JXm|Ji!l%~*8vMRarvLsfpmvlw7*z8yM%u&o1A9?h;(SC$Z#%+W zf`uXQcL_0jd{n$}75aEPcnCNezI}fAAa3+g5YDrYF)0XwAP7eR(I3_61>ZU}1t9WdP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0-{MoK~#8N?U_w( z6EPIW-=sTMcqA_1Z~^3q6AU+?Jwkc_7E=&AggQM!Do)UF0+JJ;%$g1M0a%RLu%zby z92c6V(>5W2e7s-g!*&wqec6%bPl6x_f*=TjAP9mW2*M3UgMLWOt>U3}XX!qNy(ohB zo^X)E<@n6CesY$w~xcC-EL2m6ygGRItLOe!7Jn6pphHJ1=Bb&XjI zav1BrXfLP#jU5$1bHayXlz_qVMF8Bi2z;TacQU_>X9gykf;NhL-;j=rA7A7N4FaJt zA!*8cCmS1pW>TU2QMC>U!@(;6CL?j!56)|HwWpq&^?9b#lqN)v5rq7>-dIN$r5V64 zIL{Hu&szMll?hFMJ2tvyVgK0A)Q$Yv1W_*ex!;+r-$wM0m&G-H2SEE9@9Zf1;-?@8 zf*=TjAP9mW2!bGNGj>?)?}I%1`Q_$4sU8jb@Az&nOkfo`4z3YYz@yY$IqmB39e7{A z9bE|w&XZkGH2r#N9;fELpaKpk(2vwzIZFn>Md_J^b5>t9#;l=WOBE&x=HA28*Y)?* zyqE6tk3UuIs44YYDs8C%u=32pBkQKq4vx~0Voko#QDa1wzs0xzl7=X#sPRvKZPhFs z0Qeacj8V>!8sp^r8%_DqRCLUTE>pgyEb~w7z`TlIS`u5Lno301pwjRPEZ(k|rFPh6 zR3Hcl1C|2I&~1uqsIWm^b`G*PpDxqTgRw>h1;+{hfE?Vw3NL;xYg2dsC9K0^!LMaa zGEu2c*^biozF{kk0PMC@-^!N{&pLaV_3MPw;(clgf*=UO+93J`&4>iwpQUkF00000 LNkvXXu0mjf*5zX3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/cotton-slice-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..4c60a5d3b57c7aacf3cf5f943b28de06165e8afa GIT binary patch literal 872 zcmV-u1DE`XP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0{uxuK~#8N?b<&` z8&Mnw@NX0Y2_ZBkr6A%Egchq}xgZp}nbgsxkxE>;=;GGF4$TzWXof;Zq0kzX6bq8f z=^7$2q8LdBlN+Qsl;UAkgebn=@4N^`tcl*KwZ9J`_uk#TzxOVI`yCi#j4{R-V~jDz zn1NE0!$MD9$Ysmd!lG{tH#z1J9+wO12i7N_(ACvdb6YDbE25lv2}J>9^=o88Hm#ox z`qoh60hdt64awty?P(0MEFT@H5uH!vs65p}^&K5Cp5YTfo%N`_4oDvSco@Rc(h_!d zb`Xt5YZ?TdN9R*HDo^!LeP&I9;S&%TmJsksNLoj+y}gaY!$a6?HtpE-^z>f`Q8`ZM zQ#mS6^-z6OuNe%#w>ER*;a5x-r{`!Ku-q(ir*R&s(YPnoa6bc12H8o*yaPU;S@pxS9 z@9(3%y&Yb!_saTpzWOMt^?xg6pWoi+`{z+tfL%|TrZnplrCCXPq@J1_4r@E>WZGl# z-3RY?)fG_l^X_6qx}zs+l1wH=-a4wKQ{$3Ql*Kn%rcS0T(MphWXlTgL`h&rs@caGP z+S)=(OAGe)_7JpwhO7YJ&u1lGloBK(z!-0VTbaZr}x3~8= z@?3cIL3;@U>Lgr*;S)e{KD*rxx7&@rzCKJ%OZglh}29is_YUS8HZvbwq|VzHQrL?RdJn0WWBVSax8%(Ap9 zsExI?HL;oUUH{;#QAnJ&)Y0mQu#q-4HUzzwpl9o1YH+j?=cl;;!NGyH&kW7Y%@#9W yo-h=xhVLIAUrRLlM#y9`Z}lW&j4^g20Dl1BC^JZh>9=YC0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0`f^jK~#8N?bhV;u?|1BGHRSS*N{ zZw`@|q8LdBlME6ZN-7MZX{7-6hZX|K7bj!SBErV~jDz7-Nhv z#?H{f)56$oDVNP{GqyFhwzfnm@dCvnkk`Mxe4np7)@s7Dics8c=wIk~^cjPLgLSjF z8QU89d>)R+5vYm+{c|wqcelh!pq!MKa#Mb)<09uy!2JBYI6OSW#>NH;_XF^&3KacQ ztv(5qk8)C8%1!yH4ywl(Qln-978e)gV28tjlamu192_9lF$2F(g@0O=W2}nuQBKNB zxhX%@K`M2fRdsCy0s%2RJdEDnUI-!d>%WNI-CYa}44|{K6Rw|MaNGOZviE}h)SUR` zc_z<#I-N#OPmg{daKmP^A)C!2nM@)W3|8f@I#^m-66JCkeSLlKdcBq{^r}*+l*nW< zXm4-F#Kgq;b*-+hifA<25;wX=QGHaWaab)Lk6-KJE6&z=dK0wU?Z)2qc2nwPj4{R- zV~jDz7-OuJ<-Yo;+jTSLl25JIpU}e7LE7e)Rgqivnf~u|eFZp;-KMMC9ll7h`0b50 zr^>?99W#iJNNt^aFZ^NF3E9kIQ=E$D0;FV|RGTNC2llZIAVC=?QrNJRb)I^Nve ztl!xD*QgJ_x3_0n7%H?fvDDg@FPfyGvqKL_ba!`~_V@Yt_!#t@0=Z7lDO}3;PY>J7 nKI@j3NF?4GyNof$m}!9DQZX+`VWvx-00000NkvXXu0mjfH`|pz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/dank-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/dank-slice-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..d22c1529a7c43f936e8c4a5f488fca95854e5e52 GIT binary patch literal 1360 zcmV-W1+V&vP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1m#IYK~#8N?V4|B z8)Y2Fze)e3UD~EM+R?R6+Z497NE~Dg8B|fD178$h*v(gCdy}w&Q-?0TaH9C4>0}*D z5K}~*Ak_}p-iTs57@{(yfh<~(t&Oe97^NnJ*)=gsAMd$7*Im*}(!1QHDR&?E@jQ2V zo_n6(_xb(quJ_bJ2!WBYveK}a0_kK~>cO(g4F$j94Z{_H41qx*&abd836-Gb?X zZYdD-J4q%sg(GjYlHSjH3x>>i00;y*L_;CK?ZMG2Ka!>U8G?8Sqi;Hi-xFmmwMWww z5LY%Zz!9gD!}3EdI9@%4m0K&oNcLFbHKft7#wn1#1AQ1HE%-Tn1JP(4xD>bei;SxT zT~dHTo$qWWc%+-dyY@xYMe1O?XTzQ6AUpdhCvP5pLVSIKulK*wPwxE2XTlF5^rz=> zptlXYmH>ZUp@YU~9s$$eJw+xWbMP~HKlsyGR)UKQy74;O@ zYLsPjRLu%e$}u;?M}V0Em7D_Qz)S&F8WvLkRvH#l09G0n;W3!|n3@W@Sq<3l3$a@H zQS*qVz68B)(9ftIw-cOD%kPJ*0F}Z<1t?|ynx;U&>twa9gJuG#aXxo}>55CO9B3E; zaYXr?Q^c@*dm7TkOf$-*v>Y)n{owxqC3Dd#Qa1H5$SI8&30g&gZUW3+@?4rId1 zE08UKQl~T#LC+MJ{pH2HGbG~!thUMMCBUb_eNC*Y8@IlChRlw;1qUXA-uHx)3K3F3 zdPB)IwH!}}6Jy^$Ss~3)nBKv+tq}FjR$ejxrBf3*)SOm!8aVw8c*t5K0kE1 z310r=GUlTxVZ!W`YG&Sdqw)2|4BaL04&Fsaqads>`Tw!@9G474auU| z!is1wz$plOe{Fq0sxO5zADk&kgm-rKe17-8yVgBU2XKyUXlZ)RRsXzf3juQ@ollloDMa~Cmd68=@HO=6o z;rvi%&c5*a@k=51T2jl4Tw|$e#p$n4f5EC*$c;%&4RY5JEg!nP2PmQ79z4Z!~#{&|kh Stb#580000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1g}X%K~#8N?V4Xq z97P<*zgK!a&{kOgfbvJ-Y?@wLr15+;N`sjA(D)#vzV!)Oja9S>HL;1&2acN3q^1~n zGW9_VCXI>KMo5TnmGlyN(f|eyM2*m-EQGXo^f-RbEOW5jEq8m%-f^<~Nq+a6-JQ(L z?>oP_+1ot_5y8sr65g`d0tjzeYypI~EVcl`TNYaY;Vp|Tfbf>Z7C?B*VhbR=Ww8a| z9}b6O&ERil*2vCw!{7Z9`n#Kn)j)gm^NQsv>KM53amSyFnVPi>=T>+x zIE;yrKM)McK(Fj*HSh?{XfWwKu8Z~IYmlhCvJi8n5;~sN(5w?qUp7v*7ka88;t4kAue(SP8&&)Rmy)Qc zY)S`c<_7RI-^9LJjXB2ZL8Ak%=l0OvrM7HqU$JllO1k!sF$xaz`K{dH+owV^H zDaU4;QMB6H%ybhM=lY#sp71-JxHvbghfI+xOCW~2-SrHxC_5$tjAHo=u$MqCFM(`e zF9G2#i!Ffgmc$*8L;W>>OfLvboZOpX5JK*qsyqMa3b_-2zScvV77i1 zI0f2wW?yvti}l|WMkzjAOiQjMT${Wm&X`NuyFjZKl)o&ac`=0hH}7L=GK^?V6nF=# zDRKdhnF(O=;o`1OpYdE#&Kcy~m**%@dKY*SSa2>Vf7%e2%p-oCC$ku%KfX+*-;@$M z*?`z=i_?jm2mRdgf}xjgRmZES>~z^`ADm0f=ZXM-|MnTxUavKOFfmx5{8hbD?#MvU zYP14PW?A7hsPI%_b~@7vGL>zGRBc^stIW&ztgDG1kRCIFRy*9ZIC=Ht_oA3_48Ivl z_8Wk=slJ}9k7Vs+15*Vs($;nhVEETye6U7^+-|b+ax@wL+YHz#SX=<$KkuR`m%9cR Qwg3PC07*qoM6N<$g5W}ZtpET3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/donkpocket-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/donkpocket-slice-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..7409f2f8268d19517f9863a090bbbb73c6fa7d54 GIT binary patch literal 1395 zcmV-(1&sQMP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1qew*K~#8N?V4Xq z97P<*zjwd^Vp|W7G)=Ky4rpymX>^GXjRp}452c2vV70{u6OSh!d?{*-4^{)!hbF!# z7-Qe8T%v7qBvJ^b4NcT=lz&&Tz=?<@ir#XRe?np0-Oe6+mpzW%+dYo#ev)72w{tT) z^ZU+kc5nC2LI{D8vC`78m;%t!u$ThS(y*8U(9*D&0?^X1m;%t!u$ThS(y*8U(9*D2 zXsL))dxv1LC=Wx7LDLN2CnB}3)&>$?Cz?n^ov(qjI_w|HKpWQTN+M0pp7CQnyAHY;#cxsi{^B*N(eQ15#MH(vtw59fFx&_3Q zZLYPGq9O+>Uw#p5yKZ59bRD@>-iWcpb4as6B-l|+a!QV2!9R_z_I3mUEZ|`+jd8|R zf-YNthY!B+VJl9&R)Yr}iwHd1kIcnP+&lN2?Cg78oKFLMB znJYMc@)@}7+=twGg$^2{c?OJhR}n|%K1{ySEz}iVV6dFEf}G#8k$w0vSjs*W#+1td z()})38o7;S=Q1*uGBEm<55*Tt!CDDIE7K@A-X%NVL^42g0si>&BeE~UkGZ>Zunt+V z=g=d-t~uO1c1>s#I(-mjO9wv_C>^c$Sli@5=SiPAwhKjr)*!0!BV zuoDl!anPOm0>one)(a&2$~;1cZOEg)UKQyiChEBhaoLjA{J^^h$k6yGkgY^TOgIUKr%4504)uRDF7`E zizxst4U2FajJ{3vwlLHKN*a9BOFn9D(R?f|ZU+2o)C$H0yWqu+Lso!PVXFcpGJj3C zK(pILy`6(*0;mZ-dV%>Bms&E=FauZwxIL$c^YZQal#XYbku0U<2)g+f{u?Nni&mMk zt+zqD(u|RyRTk(bz__O(a(Sa5oo-HnNCA`vrHKf7Zh`TiUy3KJsU43Bp z`{Ded7)$IDZq|K_wDdbjKeU(s8WO=~t1d-z0r)>Rgfc=1mD`YaZ3v70o`gi0se0AF zusV-{&qna%d{p=zbMB1jelUtabPz>Xk>)H87L!quSAAx(+WNtJfAb^^e~K;<3*oKYB7;(EH$mT zK76r{x)I2Y$(tJF&LdhZ;{GzE)k8-tHl3VgY`)!Qb5R?IZVy9Rzy~Fo^jJ$$T7XzY zi;##YJ5m51F&h%ih@|{Fycv35W8$%6Ge8@F{{ixCuy%}`3&8*Y002ovPDHLkV1naJ Bf&Tyi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/donkpocket-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/donkpocket-slice-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..ef39ab4dfc8eee2414ac48d024df4fcb0d11e242 GIT binary patch literal 1345 zcmV-H1-|-;P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1lCDJK~#8N?V4X~ zQ&k+tzqf9*A(L6rp{Nr(|0I|=M#V{jBN;UqB#{T%i%=A^wO0l zmgDL#m+(6iB@_w+9bu_S#}=C2&SbM)7q7#&-ANCxDn&(24W3*7By7WHA#FO4)Bt6< zvIh*fn0eR@7Vly4KRfqRY%qedleaPTZa>zoSp}Dq-DHLH{Dlhd{EB5Zl&@Qj>Ze)f z`Y#|hI4So>WSPY*4~YHrG2xHXIMMtAsy_8#sL_w*pL?+6)@9r(iNNLQ$$B{RkUGr1latEzTrwk zzC0ik^!?j}V&>MhiicvnlIZXb7EM;wDAS8tS#z0I=wz~YC*A|5rI?5$j6mx=R%5PFO-E|p>-BuwcHuC@1LhoE4LIcyT{z|~K(?KqmEY+C z_0)@mI-?z)+_}korhrjU`*snV&FJx0bGwG>5um5FelHJ4+ud~L>rFXV@X$9~%0$#~ zq2%+z`=>Y^XdiB?TRrIPqOhJWZ1T z%F&l$%kZ5?oNzu?jNx5}V5=xW)sc>)!^+EA9U5p&> zn^FEgX2t)=f7+1KMv^+u(^;HzM_!?+zjqUjc@rnDYEaNi{d-?563MKX{NjD0?mcoH zJWZosiurdGh5(lae021$4~=h(;Ew+_`8b=$`O&s~F-K&*Ek2*OKCMtU>-2Ofq^+Oj zp|X@w)?)J^Q&}CY)kV1;^(0aoq{Z~0Rt`5cdVkx0NPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1qew*K~#8N?V4Xq z97P<*zjwd^Vp|W7G)=Ky4rpymX>^GXjRp}452c2vV70{u6OSh!d?{*-4^{)!hbF!# z7-Qe8T%v7qBvJ^b4NcT=lz&&Tz=?<@ir#XRe?np0-Oe6+mpzW%+dYo#ev)72w{tT) z^ZU+kc5nC2LI{D8vC`78m;%t!u$ThS(y*8U(9*D&0?^X1m;%t!u$ThS(y*8U(9*D2 zXsL))dxv1LC=Wx7LDLN2CnB}3)&>$?Cz?n^ov(qjI_w|HKpWQTN+M0pp7CQnyAHY;#cxsi{^B*N(eQ15#MH(vtw59fFx&_3Q zZLYPGq9O+>Uw#p5yKZ59bRD@>-iWcpb4as6B-l|+a!QV2!9R_z_I3mUEZ|`+jd8|R zf-YNthY!B+VJl9&R)Yr}iwHd1kIcnP+&lN2?Cg78oKFLMB znJYMc@)@}7+=twGg$^2{c?OJhR}n|%K1{ySEz}iVV6dFEf}G#8k$w0vSjs*W#+1td z()})38o7;S=Q1*uGBEm<55*Tt!CDDIE7K@A-X%NVL^42g0si>&BeE~UkGZ>Zunt+V z=g=d-t~uO1c1>s#I(-mjO9wv_C>^c$Sli@5=SiPAwhKjr)*!0!BV zuoDl!anPOm0>one)(a&2$~;1cZOEg)UKQyiChEBhaoLjA{J^^h$k6yGkgY^TOgIUKr%4504)uRDF7`E zizxst4U2FajJ{3vwlLHKN*a9BOFn9D(R?f|ZU+2o)C$H0yWqu+Lso!PVXFcpGJj3C zK(pILy`6(*0;mZ-dV%>Bms&E=FauZwxIL$c^YZQal#XYbku0U<2)g+f{u?Nni&mMk zt+zqD(u|RyRTk(bz__O(a(Sa5oo-HnNCA`vrHKf7Zh`TiUy3KJsU43Bp z`{Ded7)$IDZq|K_wDdbjKeU(s8WO=~t1d-z0r)>Rgfc=1mD`YaZ3v70o`gi0se0AF zusV-{&qna%d{p=zbMB1jelUtabPz>Xk>)H87L!quSAAx(+WNtJfAb^^e~K;<3*oKYB7;(EH$mT zK76r{x)I2Y$(tJF&LdhZ;{GzE)k8-tHl3VgY`)!Qb5R?IZVy9Rzy~Fo^jJ$$T7XzY zi;##YJ5m51F&h%ih@|{Fycv35W8$%6Ge8@F{{ixCuy%}`3&8*Y002ovPDHLkV1naJ Bf&Tyi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/margherita-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/margherita-slice-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..ef39ab4dfc8eee2414ac48d024df4fcb0d11e242 GIT binary patch literal 1345 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 Bf&Tyi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/pineapple-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/pineapple-slice-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..ef39ab4dfc8eee2414ac48d024df4fcb0d11e242 GIT binary patch literal 1345 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 IM6N<$f*4|Z`2YX_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/uranium-slice-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/uranium-slice-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..6d83d341c3fa7545802c16f3d8fd48452fe4779b GIT binary patch literal 1379 zcmV-p1)TbcP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!Txz~~IY<3%_WLTkW<*?r@O{@foTJwe4hz_OLXaxyg`kn>Scw!k$ogtTjLo#y5%p-IA<_<-}7*8xEGGvkCqO`I+Hu>e%DLbBRVP| z9vazsKp3o+Q=x!RLa$h0rLLfrO1$vBAq^BksKNJ zN%r)Wl~G=89`%atBMtNYFcw7sYgBZ88qWM4Oz)c3y)<$gHK~pOJsd|I6uVxB=>4lv z^30Em23&AJ?(SSFnkj;Cbbg_WN2WPIrsRzhiryAQY-G;iIKdCH&X`2{#862Pxs6(k zV5W_Xa!jK#)!(pa&>MGwT&{0%VmUEhnn(9JARclXHR+xLO5|~~FGE~wVuhzuNg~l@ z`v}OUKr+JI%tDtevMIo|ZOJ--Yul1_0N1ufx(%vtQ@sHXF992yL%ft;=-s}VErBKv z!eZI$al<8*;@FX?kGpK%vMdKnQ=qj;@wG8Su*?Bwj8|VgE3T+fEQ|mFVKL{7kQPtK z$@X|WjLb!jmgUYrV{e0L@q%Sl^iZ&gmy!#c|FR;$va28nypSOT15FTRqYN=cX^=|H8jwPWa|j%_@8*?Q5Ds%MMu>38erFb!E5< zLKtqB3kBD2$ID;8f|l|Tu)Vjc-BncjK&hq9c(LxxY~DZ~8b5Aa5ho|)0NGm$h$%a| zDvHwD4d@x`!IUtCitcI*-ZO}w|IJ72KphpnQyBZ>(2aKrvz*+yl_tw;&@tS>k64T0 zMbPg770d~EYho6w-*3m*vtAUAcc5h5{HEi>mo7PeJ$3Kf0f` z6`Vuv>?sWUo{;`&gP&S?)cK-}f?qlxqsh?*Y1^FbDD%Th_`82A{j{sv)TZ0o7uHH! z+H9+v{f=A|_1nhR0xdg~qD#EWUv+J#;%|!$PbN{A;Vg}$ABW8^fDA1=l%k7PWhTiW z(&eL~SBoqeOv?tP7+wQdqvfEUfSMx*DsoW)M2|&N`>d;;s8YR53;USF0yPU~<}JGfqg83){~jTWhPfZ;VjM%}R)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TTsUl3G&Ps;Ht0^rcH0(qZ32Rz-4s!Y<1Rw_ zvh#44L~r$oym;kaDa`iN4e?I5NPRRaI*yL#UJ5^*Y`Ra78QBPV;_trr*MnU^Yhgij z#yU-3jJ4Qj?^fc?DM8sR0$y)L{PsFKdA;s8;(A99Fw|u3uG^9@(QEo)x&d-t>~k~i zK&k^euIm)P*1mUnQE zD-jV95fKp)5fKp)<%5THz~c(@m3rFi9yE>16x`S1Nx{V1ZR=gF9{LRO7t1ZtR1H3v+UJg_Cc+j6#R z8u*+`o{lz}3^H&4U*elFIS`fw7A<2tqU?*i5g{pU4$QzEXq_T>H?h=_>7LgW{s&{;4ewY`l10000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TdEM5vK8 z8cJC$8X9R=L_}1(Xj}{>|Lzx2n$Hon-kbUV;BoJB#yjVnduIkb3K02MT5$EoA3ibln|*eEs05%+5(K>nI=EPOOde`<@yn@oPO$zZ^Tf$;edw(R z=_(*rW{To|v>Fy_A^o|P_)3^+R&NiL=ilIqPjzw#J~jN2=dZ6pukEOtp5K{q2J zA|fIpA|fIpqU@x+_Fg^WQ33FvBGi9QU%NZ(Ba@lC{C=>=B>u7fsdSHaZ(9*&-c;_C zM8Fz0vjYNn6~NLN+l!lTGJQBbFF8`O<-zK8P0KDQW_tvm<9h%cvmMy+I@^R?at+B? z8RVucyQgo8E~r_rHz22A=#XIXlHF~S_%qi~)m&3m7hx-Q4arGc&=2l41_M%ruP=(# zjyITpp78Cs-V?m-*%fhj8&Z0{6p_A&Ia&H1-__|-#WoNAZ}DVw)4S_OEo_gyvYoFJ xSeX0mZIy4vZ%IUdn7Z5il()N2L`46T$WI8ESuj4Ba+3f6002ovPDHLkV1nDJL;C;# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/worldpeas-slice-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/Baked/pizza.rsi/worldpeas-slice-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..909f1d4536e915bdcda5cf341b6e5fafadd956d1 GIT binary patch literal 1216 zcmV;x1V8(UP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!Txf(TU*(-zSl1S>7-wS``KlA4PLK^pPo$)?~%glY?V zv7#h+@}e{cwFk8}hzNp0Vk%Zhm2uxN6KB`W$L`K1DZ4*-%*W2|&il`s-6StQLI}8- zHLP?ko&cid z$s01$VSsSN4~cjjKncSBi4Zw;?J$8<940RZ$XGDJM#@L(7T_xz?)Q_nwkEhnR%ko< za1cJe9oO88Uqg%r4hpvY{9}ln?1R|sEF=;sfSHtUtiXNE;K&w0(D~NQYhdJVH+39s z<7k9B#fE5@3#b-UC#2S+Y8}U|->?Z*b}qr*3xA-y?Ou9o^aROBkASz&dP!65 zHrO|~0k($j(f%Jd)xFK&kzf=79k&_@jzz&ZU&jYv{>~DlGhbkLcg%3U6%_$>?Z=>@ zEdvJ%C}$+{`Yel-Hr5?5Xns`^tsbsn$dKcc{V6$1)^j%LqOBLJPo{%oH~vx1#-H8&TnSj1IEaP@iH zidli5Tb7T);`0H){a!AlzXgiL>dF~WQE!3OMoE&RR#pfp#oSyU0p1p<=#Z*_Rsge3NfE)xEwK3VY|a^y>3&u#GfoK* zebCdys*bU6{{&f_R%|&yw}ALS(VJD2j+$@JUk%i-W-t!?2sux9C-%(oSP!G^R>`*;9iDx6{Iy3|IVs8L8mdRgozZ)AR{{t_CV{FEs#q6 z`wxMcSEVBYto!^30;A2q^MH2va6_TjK@+phm}tdzYi|as+MDrXh=zQtE+Sokkvjd+X3V=eeZt0-duisy(JOMcT z;l-McV&nr_PK*YNCJT&!nF*zeHM7XPpZ;2+<-};PXtKa4U{wu9_e8UT(RH}xqF`o7 z)|ZZ4`_;?8}f0&?#1RwK eR&4~x0pKr+@tV31kJonq0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TGC6xOa?{{~Cd4 zXYil<$*5CJKwp=3-KjXVoZCXy_l5~5DkS1@h(rT05Md29=oB!IY+YlREZ*Nw{nNfu z7#SIZuE7*-WR-d%*^!GW(1U%o1xPR$0JWtB)VsIf-POJD;myTaC&4~uWdM%;!jn-* z-aJgL)O9qU_R8r|*25XO3z|!zFRtxa;LWsun>_l?< zWHT~g-KE8J-f?#uszR2ka29LhJoubvMy*n{lFb|f$JDMHJS)Aj&*7nCyGI| z48U#rffcM@Ta29o^?04CRwd1<2<5rA~oJJNu>aA3~Y{BEg#n7)RV_`9NX@q#&Wq zIY;#H+ha=GnKbgHG>>F^fO%6mxfWTOQqad>z-h)9keUUe$jBZt&;}&d&bIiB4yrR# zMG`WuUkWIK6{C+2(6cW>HuHO$$ zry3lsD8Y{Uwi zPuEwjUutaQVC5`C1h6}X zN1+7}ejPSk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xem-aQ=|=wlClwDio9)WdeO;rmIZgXTtHqQMWuOv=`zhK$imN2Z zFZe$UFl;)ba~>$lS>O>_%)r2R5QG_bOw4`@6rAGe;usR){`Q(9UxNaV%f%qqH-Gil z_(~}oN%RyZKg-XVu!mJzpjwiVNsf`}9(#jIqgEViLs^;M;f8aDv8O(+b#^!w?ap|+ zQT15yX@i8+-i3VYA5E?l0ILUSF?V>iX;P9!Q?zSx#-%iSmM#1y^#T*#H~gKneqAQd v5r!-|eufBdo(-=bGtN6Wnd1+G!EFYHuYDVC3ayj}x{txr)z4*}Q$iB}EZ=k? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cheesewedge-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/ingredients.rsi/cheesewedge-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..52f32793af5966b001faba6e16023f9e242f0de7 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xem-aQ=|=wlClwDio9)WdeO;rmIZb;?i1Le83!sv1-U}xJDXx+r zzu^Bcz_96z&Uv6HXMsm#F#`kNArNL1)$nQn3eNF#aSVxYe>=^auR(#wC0lgj@A!yW zJ)WHkKO$#V&h`_D8 z%9~8N1*%&_6(9Qvn78N&Uj9)2frCrK0IIRtakuh`mVkn&d+#`+Lg(9UoB!k2e5VQV zcf0!*ysAFvSlRTt&p_ctNy}Mr=77C3tOGtUJ9=5a*X~; 2024", + "copyright": "Taken from tgstation and baystation and modified by potato1234x at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24 and https://github.com/Baystation12/Baystation12/commit/a6067826de7fd8f698793f6d84e6c2f1f9b1f188. Tofu and tofu-slice were created by Discord user rosysyntax#6514. Chevrelog and chevredisk created by Github user deathride58, tortilladough tortillaflat and tortillaslice added by Phunny, butter-slice and croissant-raw taken from tgstation at commit https://github.com/tgstation/tgstation/commit/7ffd61b6fa6a6183daa8900f9a490f46f7a81955, cotton made by mlexf (discord 1143460554963427380). Croissant-raw-cotton, cotton-dough-slice and cotton-dough-rope by JuneSzalkowska, cloth-box by Janet Blackquill 2024. Cheese wedge inhand by Orsoniks.", "size": { "x": 32, "y": 32 @@ -19,6 +19,14 @@ { "name": "cheesewedge" }, + { + "name": "cheesewedge-inhand-right", + "directions": 4 + }, + { + "name": "cheesewedge-inhand-left", + "directions": 4 + }, { "name": "cheesewheel" }, diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/corgi-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/corgi-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..646d4493c25617ba6dea7fed5bddd75ff933c27b GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=yZjNMq+;8yu>BX(>1;=%C76_}|+p_3lg?xWn$Od5rpsIktMKVB& zyCldj_&*#lc=3NZkO=p;(;WF)6?j;?7ifI9 z->`ofw|4WzKXYHMiCZ8mWv1}f-${T;l|?aN9=A&5hXn~<8|G|c<>&Hx=Resb^3w(e zw+SZEpEe|@9ZWiTxQSJ7;W{xJjT_gpUh+))l=Up?iL0h?lYoXIN25^Fd#)df_7k$1 zxwb8I+-1(snyT}{j!)yk`~wFUb9!xLc)_u*o#nB1fa6!^28X;~^}DC@&3YiJ_@iOL aR@oDB^Q7236>5NvX7F_Nb6Mw<&;$URPJTTA literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/corgi-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/corgi-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..fe3598f3638f2d5ca1f41098d0f020b0b87f0d17 GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=yKJGWz9Lf6n>BX(>1;=%C76_}|+p?%XE#zW_{03nKpsMJ;#A+bL zT@vIM{2vY&y!;tI0fjjWJR*x382Ao@Fyrz36)8Z$^`0({ArbCxr#bSqD)6{Cy8PVx zzfsrIUTkI4F5}N;K1rV>PBY2uWntnl5^$JMsZtQf6wGqZchWDGt+}0gXD0pfS#>D> z0P8WOl#8wAD^`6_#o@TDBb4kCA1P?pc49 g=N;2Qb`}@u8`tKk#_~x;0-es_>FVdQ&MBb@0L}7&yZ`_I literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-cooked-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-cooked-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..f109234494047435187129e223519d47af710436 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xMv13cvIjScR8Em?nWNYcFB}5TBA@NP{}d5>aReGt0c%T z_&*FVY&xTJ9w^FL;1OBOz`%D1gc(IOyc&RlOFdm2Ln7SYPIKfttiZ$acFKeg|M|tE z(X&KLt5eGCV%)Z?XBDa(8q9tqd%)hnow3YvXJrWU z4cCM7`gi8HzYqMj;lO8`GsU~~EHqEWiUn-i_E^^8psdP-1&WO^X_^rEJ>T6@*|JDQ-CQdKSr<{60eI}9r SJvIX!%;4$j=d#Wzp$P!|8-P^+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-cooked-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-cooked-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9442165b1e3ea82b475b1ed1ecf36d315b5a95 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xMv132id0&%2hUM#m?GPf#+LR>Z*{zAOrua9P>JEIU2B09S4ogx z@P8O!*mOqcJW!Ogz$3Dlfr0N32s4Umcr^e8S9`iRhD5l(o#x2bqQK+oExB^<|JJRN zN~%p}XYxMXcRH}8|2&sRJqr^D563^h4JyUHQ+AxYC-L6vr*Q9t*BKU!!3K`u*I8uj z7?)ca>M`cJzWT!Z@GR^4#YGP{C`=dIwlamEyCzk5g$wH|?zsuP90~>s4F?(+m>#QD z?0DQhd*}T7t9vi&i2N)++A99$+u6(iKK?#9-P`i|=6}YwKa|AUp5MJ(XUi7{hQ?K| Z7_DaYg(aMP`w8f522WQ%mvv4FO#mL~gUk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xHgPv6vghySn|D!t`J)Be%#h(9Q-eah=-+uPG#!LyIIoSW4k9MQ~lqcz!c zYNgi!J+Uv3>t@Q<#xGFNj{VN6FLE?i$Km9~d8Ul4{tFtK8ko44fTk>9(EBdD^XWo| z@Zzbr7R7|i_iQ^VpMKU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/dragon-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..47a115bb850b65c74a976ac506e146265690c131 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xHgPxa=9`zuo`0=k+oJ{hE~+nI#XsZi#S6Rh`+!Q8pYHzxq_|3g z{DS|(0K=v;I_H6+oCO|{#S9F5hd`K7RKu$QD7ePc#W5tp{p~bIp~DIsuA-)GzvFi- zE&YN$v?gj+Rvs7y6By1U%L!I=04bI3y{S@Jwih3u{-W!VY#;5ebk%4vilbJ^s~3 ziHkBE{JmxC8{VlOVhtS+X5N2wExjh(#~}7s@tL=C^iy`k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`031o(uw{!dH$KXKy!O`HBNT=@URi~mhc|F2yGN-p_FJIfc25__kO=p;(+=_-QQ&Z4EdBZ4KF-7DhLwrg z>^GVBT$9!OH?%ALQx*xB5bzfDhM=tUQa9D&cu>+VnLSd)ZOztd6>gr z9#7c4g0)eX$5!;fW`{mjIng^^7c#i2H(vdvCJ`E2yjSV%zl*&49aL|8{=wMv>W>7M zhKI%ig@p}GEL>iz-zD>%nfBlDwmZMX(ajz$r9Cm%tpY^)lRH`7?bTHkE4Q66Y3ao8 hP0}I(58nM_<+IIwdT*lf9H18%JYD@<);T3K0RZKwi$VYZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/generic-pink-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/generic-pink-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..d03ffcf3d9094e21b01ade44e85a99fe9693b64e GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`031o(uw{!dH$KXKy!O`HBNT=@URi~mhc|F2yGN-pub3^g% zBI$cdhb8_Wp5V&#M_JROaZ-~#=dv^AOh@80+!{nS2YzJrNXdWG==F@p+2M*p8Owrp z^#q=0k{iByZJ3!bZ@HVhZhDum!^8`g>w^QD-#=j8vYKJzofD@;R)n`7SkoeryyNn9 zRaVV_pb1PMN{rFZ-at5SbLzy5?^9W?=a}t}-ri>2`1_~KY)0>?t1pO)-Dx-8{W7@X i^xq?`B1;-({^a~`ko(lmggq4K4F*qFKbLh*2~7Znxr}=N literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/meat.rsi/meta.json index 1c3f950180..1707edb5d9 100644 --- a/Resources/Textures/Objects/Consumable/Food/meat.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/meat.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and modified by Swept, potato1234x and deltanedas at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa, snail by IproduceWidgets (github) and Kezu (discord), anomalymeat/cooked by august-sun, dragoncutlet, dragoncutlet_veins, dragoncutlet-cooked and dragon-cooked by JuneSzalkowska (discord), raw and cooked patty taken from tgstation at https://github.com/tgstation/tgstation/commit/b83c7deee4c91df4de130db242facce20308aa8a", + "copyright": "Taken from tgstation and modified by Swept, potato1234x and deltanedas at https://github.com/tgstation/tgstation/commit/40d75cc340c63582fb66ce15bf75a36115f6bdaa, snail by IproduceWidgets (github) and Kezu (discord), anomalymeat/cooked by august-sun, dragoncutlet, dragoncutlet_veins, dragoncutlet-cooked and dragon-cooked by JuneSzalkowska (discord), raw and cooked patty taken from tgstation at https://github.com/tgstation/tgstation/commit/b83c7deee4c91df4de130db242facce20308aa8a. A lot of inhands by Orsoniks.", "size": { "x": 32, "y": 32 @@ -46,6 +46,14 @@ { "name": "corgi" }, + { + "name": "corgi-inhand-right", + "directions": 4 + }, + { + "name": "corgi-inhand-left", + "directions": 4 + }, { "name": "crab" }, @@ -105,9 +113,33 @@ { "name": "plain" }, + { + "name": "plain-inhand-right", + "directions": 4 + }, + { + "name": "plain-inhand-left", + "directions": 4 + }, { "name": "plain-cooked" }, + { + "name": "plain-cooked-inhand-right", + "directions": 4 + }, + { + "name": "plain-cooked-inhand-left", + "directions": 4 + }, + { + "name": "generic-pink-inhand-right", + "directions": 4 + }, + { + "name": "generic-pink-inhand-left", + "directions": 4 + }, { "name": "plant" }, @@ -144,14 +176,38 @@ ] ] }, + { + "name": "rotten-inhand-right", + "directions": 4 + }, + { + "name": "rotten-inhand-left", + "directions": 4 + }, { "name": "salami-slice" }, { "name": "sausage" }, + { + "name": "sausage-inhand-right", + "directions": 4 + }, + { + "name": "sausage-inhand-left", + "directions": 4 + }, { "name": "slime" + }, + { + "name": "slime-inhand-right", + "directions": 4 + }, + { + "name": "slime-inhand-left", + "directions": 4 }, { "name": "snail" @@ -162,9 +218,25 @@ { "name": "snake" }, + { + "name": "snake-inhand-right", + "directions": 4 + }, + { + "name": "snake-inhand-left", + "directions": 4 + }, { "name": "spider" }, + { + "name": "spider-inhand-right", + "directions": 4 + }, + { + "name": "spider-inhand-left", + "directions": 4 + }, { "name": "spidercutlet" }, @@ -180,6 +252,14 @@ { "name": "tomato" }, + { + "name": "tomato-inhand-right", + "directions": 4 + }, + { + "name": "tomato-inhand-left", + "directions": 4 + }, { "name": "xeno" }, @@ -191,6 +271,14 @@ }, { "name": "dragon" + }, + { + "name": "dragon-inhand-right", + "directions": 4 + }, + { + "name": "dragon-inhand-left", + "directions": 4 }, { "name": "dragon_veins" @@ -210,6 +298,14 @@ { "name": "dragon-cooked" }, + { + "name": "dragon-cooked-inhand-right", + "directions": 4 + }, + { + "name": "dragon-cooked-inhand-left", + "directions": 4 + }, { "name": "dragoncutlet" }, diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-cooked-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-cooked-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..606c4735e322a2a4cf9e4a7b9d054272ed6c1537 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xricm#F!D6$@lAFRpB*S2qa^UWTO&n;p~0L7sDyKe8Viu(Dhcun z{tp8To6hK*2T2xqL>4nJ@ErzW#^d=bQhJzX3_BHZ6jbL2a$z{B!(%7hR9`NgB; z9e6@7-CH%6d)ijX=V{SD1vynRJU;AivJN}->sZ_A!*3=U%zh+$z}~=}vCML3WeD>P z*Msx=cjmXh5B#>_z-OB?#k=$@G*88f1#H^(Sk~d7tjdH1ij6G1Kw}mpN&C5P z#f|F2-&gZ5UM;=+SbVtG{#4CK{V6Nb*3?b-t-D+5Yh&R5)&v(OPA|=;oO(fhCXxR= RHUk~Z;OXk;vd$@?2>?}DebfK| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-cooked-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-cooked-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..fc5e859b62424ea9e71388999e6b8db1bc18f7ca GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xricnQ=kJFVU<1eS>nt*M zjLWSI^%!$qUwz?yc$Rhj;-ZHe6sC)9TbaVoU6U%j!iDt}_uK?t4g~{+h64=@Opnzn zc06vMy>tHk)xDQ>M1GbZZ54m>?d;`$AAcX5?rnK}^FQO;A4+0v&+lHYv*n8eL*uGf Zj8?Py!V*rt{RDJ2gQu&X%Q~loCIHBafwcet literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..327166f65f6be3d7a045769669d4a70e2c54f5e1 GIT binary patch literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=yR`F`4ap-IiRyeMsb8pL{3r$u1X(6wlUR)rowza(gsH#=_>O~;M zT@vIM{2vY&y!;tI0fjjWJR*x382Ao@Fyrz36)8Z$)t)YnArbCxry24cQQ%=QoH60? ze||nUkqDjTD%aw9iHjjq)Z4U^W|__2%FG%|7VaA_E5EI81> z^kZjv%1P(Och9&CZyMIu8q6}Y_UrzxoBA&`Fo@}nzSU0K^KUtKhsB@p`|tE%VM9|? b_Fjeu{qx)-#nxT}I-9}M)z4*}Q$iB}9Mpf; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/plain-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..a936c47a32d9b6af4b790c4b82f1792600eb525c GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=yR`F_X5LQUz(7Di5b#Kd}<2pJEgwl0L z52j7Kcz>nOjFRgQb%n$}{8?x4vA;!u#fjseUx7E9v*zTm@HhUtTPu}A{&Fj19G$tq zM7Kp%;XAKJwxW-t<*y5$x-RxFQsr0?zJ0+r(X!aYIeCm_dW`(*8#W5EeCKfFXc1^} z08#pmo65i3TEW0^Z}r+#?T|y|M_E{x*Q~aj|1s9^;J1tO4YymyU-(ug|9qltZW3#m faFc+6u{}fgta-5wH$%1q9nawD>gTe~DWM4f4#9-H literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/rotten-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/rotten-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..d8464b2b0bd6f50fdb10b2ba0ad919315d7e4d17 GIT binary patch literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xdWmTlsu^@@8y6Q?rbSuy7lb^%w=GUdck7%2pb}q}MI1nit0c%T z_&*FVY&xTJ9w^FL;1OBOz`%D1gc(IOyc&Rl%RF5iLn7SYPCLkVM1jL)Wx(z~|M|nE zHczxr%l*D>X8FMhA3N1W{|jQo!=cK*qWu1)8BYs$zPwt%7RW5f@> z4cwEfZJ!-}v!Xh_FQM_;PW{mL+;$pWyCWJVt-YJg#5K=>k(H5EgheDkz=5&mj(*B1 z=f-ug@}B TZ1B1k=wb#>S3j3^P6k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xdWmTlsu`q3Sr!*qc4`~PDd|4Gx2?Y*Wb2#)ppvrw%2FW3RTAVE z{2vAwHl5Kq4;1Ar@Q5sCVBk9h!i=ICUJXFOHJ&bxArbCxr(NVbtia(KxMte_{|~43 z-ni{!bZxKhoOUmsIfsNN{qf)mTCn87dzS4f0WPXp5&yRqb#vYDV`W*(#=13f!5q_g zp8%bJw7|Q+Hhd6XoPX6xAmI6i25XbN=Y@OQS!Zw-_pfj;5M=r8;m9>bWQl_(kTPfd zd8&9Z(}aIfxo7WwYI)zq$yN4uQ*``?Si^%~F7}&EueDqFv}C&Vr`550+72&KU{zA$ YpUT{q=yTOd8R%{XPgg&ebxsLQ0E)|m0RR91 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/sausage-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/sausage-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..9dad23a62060b17cb1787ec37af966269802a3ae GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x&Ndd^;i!|Y$nm%`_f%{cP*{Fx@D3owRubeF{2v4uHt%1uA1K0E z;1OBOz`%DHgc*^YkZhEGlV=Gm>JhhI}kA==y`W1^OjPpa;4|anRja@#yz_&#l9km<)!Zfwm(ZH z8?XGX-p#S*9(&nB`6j!&RZK6W_!`dmHwLEP{n?UuV71DG2DL^OlX})Cd%4};^)~$N zpXJbC)}$)1pf@4&a|L(Jzx0MH_m4RrIRAH^0JFn!7;ZLQ@ jIfi?}PVF6&4oFDzv-wqt*eFf_dWON%)z4*}Q$iB}b@zlN literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/sausage-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/sausage-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..9033e06b04b6688356dafa57bfad57e554952ab5 GIT binary patch literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x&Ndd^;i!|Y$nm%`_f%{cP*{Fx@D3owRubeF{2v4uHt%1uA1K0E z;1OBOz`%DHgc*z5d{v{k6-`qw^?BE)ln^c_pFx98_agf zY?1bQs;XDe_<%{AqnV*R@B(jfY10mFjV0R}U(UTfxkzdWhvN5Zr6)U+YF#_0Tv2#k z`8VOg(`Ek*1+G8ut}-l06ut9B{0C2Hz@yl`Vy8^w9sPfC{KHl(7Ev?ZmSE;O3zTD_<_CM?Ifzy5%e-FI&Wn&^YbKA@4H<5FHYq)JW nTPvbn_2qEEh117am)0<_i~ChQTXSeV&_@iOu6{1-oD!M<_>zs1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/slime-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/slime-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..8e11d16f619a87255bdcbf9ed2526973da07dfbf GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=y8qLxVS)I~6BRXe#VsM*c_M~v2OwL?~UqFhzB*-uLKNv7bc{95K zg*Xd5B8wRq_zr_Gzopr0G(NEzW@LL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/slime-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/slime-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..75d18f03e07db6e5e9fd5067a3b65f4a51028ae9 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=yHqVF-S)F1uOFw6NVsM*c_M~v2%rlSI(|{CvNswRge=uN>@@94e z3UL;AL>4nJ@ErzW#^d=bQh(wbmuDOsLjw?fQ*>B*Ys=alx$7r(Y<5U3`h6={O8EAU*D*J9zBoM9QHWu7h}xbQ zzkh%E0iYchAm|@!OZM{V+=e!Lmw$ctK$cryLHU8-znw3b3>f}BIluMC(-;PZjt-gi X?D5$gYgTLnI*Gy4)z4*}Q$iB}MOJSs literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/snake-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/snake-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..40b036e5f56629254def3b522f51ee5dea0b0dc7 GIT binary patch literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=yrdp-fJ2cG?wcA`4@nGlt-?w)FWsb)79S2hEB|(0{|G|Jk%A45@ zD8yOd5n0T@z;_6Q8AUa`8i0Z?JY5_^BHZ6jJI%+e$l)p~|Ns9<*Q1&|I~Mp}-tsU{ zr6Ik*?9P?@Aq-3gA`Smpm-sM-Z`+@m#%Q9*9H5fQ+?BVj$k}YcDnX-X8dEkgzV$os z`|Q`2Weh+f$Wcrvgnz*c`?i@*3$LUzn7%Aj4DDL-hI36$kxznJY-Br=K*K@?mIMuk zc!o1`Pm8Y?p78wCqt&-rZd6xf=z8q4)NS~t9({VbgRReoo#o|)oi$t^*!WIl|JMSu z`#$C*tc{rW{A7RP=TDl88W}g(oHtIGUNM({x9y3K`;LmOx4nPok}T7Qt~$93znQB; WV`u5PMo9tv%;4$j=d#Wzp$PyI=$EYk literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/snake-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/snake-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..f55721691fe7a5b879b6e43450c7462652832a38 GIT binary patch literal 404 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=y);lz%TBXkqwcA`4@nGlt-?w)FWpYKPY5*zrk|4j}|6sr%<<0B{ z6yhxKh%9Dc;5!V$jK}j=qyPoKdb&7%ae#r*B|r3roFOc2gui zi}O9}H7|=P{7)I!J7hkjHwavPBbu1Az0u=toQpyD{8m0@hE2Qz8j=i|IgY&l?W7qh z1*{Zi_e}_QSdzk|lJ$N~kWCMnMalaz$!nTGP^g2Yuw!Pc1O4nD}@Ah8CEt~y2 og&+J%^_?Y@-VkWdukn=8Lm_tJKgY+GzyM(IboFyt=akR{07_Vxj{pDw literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/spider-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/spider-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..64765a98879adbb5685691c0107bba0e23195044 GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=y{{Ol6|0f2ejXuGBVRO&&tav61l$p2f*##iQUJ~RN{2vS$q`aBk zfI^%F9+AZi415Pcm~qF%?6*L{eV#6kArbCxr=8|Is=&co8T3|XcA%xaJbXVxkvoeqz5_tX%3pJzhy9`PgJfp`<_B7jB2O~|^ zN?5Vn6rZ4#F@4+l1sfL>R{qvbIli^FBYnyO7DrAmfhiAmH?hC|#C7eT5%cAu!-s;r zS$ux&S2%usMaX8h6D@z+wrq3`>Hfb_X1>FjKb2xBr)7n{ehqG4(JWKeyk360g>cJ5 lvj+k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=y{{O`A|L0z%jXuGBVRO&&tav61lu?y!>jhHmB|(0{|G|Jk%A45@ zD8yOd5n0T@z;_6Q8AUa`8i0bwJzX3_BHZ6j^X6+d;Bon@{N282t`^tiNdlMOY4x{k zNO+dGxpU>86)Y+Xv=}*8STP=1dxLwfdV{KugL=;bsk!c3MfJ|KL>~~il6H}A&E3^i zZAX_(jb6B!*~9dY@Wsk9U!l1R78J+jwVbQSS_n17>p(qI-ns2BS92ezxGEyQR-)zI zcX5|+mSe$txzE(>X!gi4Wj&m9sg*(4c>gqGpX(bESxTGk=~@Y!*eR)3)LlIgvv_vR o_3CN+O}-lZbA1rZsqvKcLQ`DIvD4c=0KLTE>FVdQ&MBb@0D(b>vH$=8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/meat.rsi/tomato-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/meat.rsi/tomato-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..45af53e06e1c656f3d7e98ec54db2f621a954c7a GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xMzX72kM)=)V^_(gwN_T=|Bk84c$Hpv75$#-4OFsQ?3W-(dv~*QEh#|NlQc zd77Sb%;p)X`n=Bu{~xe)zeOkbv`Ar(b@S`#7KdKK{GCL+iHB%k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xPLr{_9_tawuC`WIr;a)(xWm)MF(ktM?KE$`!wNjCg=f_7{6BPb zqN^Mi$LhDMzUFM0G+j`QTjo{!jsvVs+%XC@fdUF*@~-e zOI9;9O<9?-b0KHdChiX5*{l=ZG)?%ab4<*ja{GmUO&@=EdD-fEbl%Vto2wK7v-23MXz9j{!^KiZV0ZcT<68ZN@qHqmv!d?-{lMVq>gTe~DWM4fmk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=yK7aoF&Ye3KE?hWt=+OK3?@ydK0hG!8c)k)yv6lq-1^)*F1}Sf5 zH=qz_fk$L90|Vb75M~tB@M-`GF7R}542f`mJI#}e*^q}tRsYxj$;n6G^2lj23Nu-j z#2$;%uu zD~k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=yK7aoF&Ye3KE?hWt=+OK3?@ydK0hG!8c)k)yv6lq-1^)*F1}Sf5 zH=qz_fk$L90|Vb-5N14{zaj-FILFh)F(ktM?X=TkhZQ(j53>LNf0DK7`HWSanY&*+ zI;W)6Xc)Fi>bX@WZ(=?xXfg6MGfy^Uqn%`o6!nu*gvT2Z!Lt y&V>c0AV%T&-4BxdE`$qy?XmwYz@Z=@SjqVBLtHj*yq+h}oeZ9?elF{r5}E)rc6&Mi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-plastic-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-plastic-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..90f74656305d510146295f0f270a0981943e6b9d GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=ys_fduIe$JwQxii%g2lOW40(A#nK>?}l7JL@NswRge=uN>@@94e z3UL;AL>4nJ@ErtU#vK#0-vR{}c)B=-M7Y15=E=ou$it$l|Lgzc3rDQI}TQo9pojD`N`8Y0n!LRzoK({h@y85}Sb4q9e E01C=-L;wH) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-plastic-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/plates.rsi/plate-plastic-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..dfb6e2ffae2705f029ca99e12646ac7b7dc517bc GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=ys_fduIe$JwQxii%g2lOW40(A#nK>?}l7JL@NswRge=uN>@@94e z3UL;AL>4nJ@ErnSMo|r~29R=37srqY_qWqdiyc9(EAB$BirW{w`qTA7M6_;hFBf^6z4Yyo zS=nBuX60X&-k!gQiHU=UL%~3y;lK~)#<-8#FHP)Kw9h|hIqUoW-ohe7^&cF9A3GNo wn1UFE=XXCy^1Bc&__fFWw*ZHNfM6x#zYlTQyzzRTKzA~Dy85}Sb4q9e0FTLWk^lez literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/boritos-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/boritos-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ae2864ae3e24420129c11d876c023edd469ff7 GIT binary patch literal 376 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1E1o(uw)=zkoTmNj%nolpL>P6>0yppeEZQQFbo9AdZ_gtKuf5<+d!i!w* z!+;b|NswRge*|CCBeIx*f$uN~Gak=hkpdJv>gnPb65;;#>RF*?1s;}! zpbHE3{QoVMb4xR&@I=MgxE|w&pPz49Xw$>Yx5eUt12>b8Mg$)}zp_97 z4Yy}n_B`+_^MhwLE9w~Tlz)!+TjsFt{(}01F6REmpnH62YugL9tAztS#Ng@b=d#Wz Gp$PyabCn1H literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/boritos-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/boritos-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..d6e105e6cb3d62ca460622548b6c8e4808544e8b GIT binary patch literal 375 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1E1o(uw)=zjdXU(VF`e!eu>RriKiq3neFPmp=+@0V|J>Xj({llxM1;)SI-_Z(-ha9|Y_U7?`F>b=QlL(&9e`Q#n59Jn4t7;rEi z$UM&D(9)MJX0b&~@BRGsas|poKX)@e;$8gt$>o|Vrbi!YeoXInxYcO$R^h*hw~V+) zO9C&@tVK+sE+GMeXQaFxZwI^;X@A?Z-ki(P_;Ih~Zb$9My&Ki1O9nk~+VS^f#e4mA zDmQtpB;#|R`oBo2S^M*rqxxg*yWfSjvtC}25bf}VRsPZ1NxQdZcme&x;OXk;vd$@? F2>=2lmIeR- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cheesiehonkers-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cheesiehonkers-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..601a6b5998929e8c1c477d36e16b719a6c8be8a1 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z{-0_5Kh6068RP%|{{zJqt+jCgQmiFGe!)PI{|vvk@dX0~I14-? ziy0XB4ude`@%$AjK*5EcE{-7)?r*0Zk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`212l#}z{!cUhKhyaC8RP%|{{zL^<=l4zDb|u8zhI!qe}>=N_=14~oCO|{ z#S9F5he4R}c>anMpx^>e7srqY_qWr$`3@*>unO+^KQmhBQb*Im%*lGc(v%G?>dfq3 z@i#Isu`+Q?31_{sX2)TT1ig93-)1dV>dj7#4R&Q}MQ4cDtEE zukUWx)<4w%)+WMHr_ND-&vimOOOm!sx58h=$@}YH`Z+UgjCeYOb@l{@g*VOLJ3Ia0 u2>x!T;=-6PZ&f?X=~ke+sj_F4xJ2iD}$%2pUXO@geCyuJ#3u- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese1-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese1-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..b9e2014ecbd96df35effed0afe8aafcd808a4e67 GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1E2l#}zYHDb-x3{~yyK8G{H83#zXE6T%-}rxF;fD_vw-^}iGBEu3p9EB! zF~?sVNb!~g`33(+0t~hanMpx_Bl7srqY_qWp=`I-%Q zSTbizWPJYrT}*np)7K{rRa&29CTxzFEK{CkKdDJXL(`+NDDa?&vv1z-AFLeTUgX8I zFY*(y@md@7yegvo1@oSSl}bkXbw&!W8XUIWP7$-06ex8F*mm0`49vPPZTXey=lNXt zIK3jTzuL?^(YYyji2|z^SI~kb4|Xx-F}dA%E}kG9@a^m4d?B7$2iQbd1$t&R2z4`Y zxcNGCx-!Ne08x!B&1wlPix`>$g$k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1E2l#}zYHDb-x3{~yyZ>h}{$E)5|G#kq1B14f)`t%kw-^|H{7FE6Q_zi>Int8T{#&7pJ?%2R(QMkD%UqEk7)1^6QcA9gDhdJ7I%%2?p;IOm9 z(kCayKRi_2;ltsi(4xTN#PLq^N79t75141OdppVRPkxl(Ibq{8vEMcuR8B;AH;Xo? zIv$IXTEn2jX>{$oF`&q^A-Aq^32mn3A;OXk; Jvd$@?2>=Xilr#VU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese2-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese2-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..aa44de696e873466abc0b619a4514c68b9454f1a GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xYHDb-x3{~yyK8G{ef|3NKZEiA|Nko)B(`kX0#uS}bNw%n;wlO9 z3kHfq0K=v;I_H6+oCO|{#S9F5he4R}c>anMpx{wY7srqY_qWp=`I-%QSUj_xKmF$y zXJ77AQRHANTFIvox2Us!_ZE3iN3I@`B?l^2By=uReQFWMa8PjXuj`E&0<7(?!qm0jl$l*d23h-fF5G-boFyt=akR{00Eten*aa+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese2-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chinese2-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..d8f490c2228228ed17e052192707d6ac9ea4bd71 GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1k1^9%xYHDb-x3{~yyMO)q^*<0W7;9^3RWe9y*|G(w#K=(;WDHkHkY6xJ z77Q3RozXcD6y+@Nh%9Dc;5!V$jK}j=qyPmEd%8G=M7Y15c9E||frsU2P~-pq4;Keb zTDvo*^ZSyQDqf!Ei$5i8|E8|U(J0U)!0}!v=k%s4>m{$1+Q08+6P7#eH*r5+>;b?`^|M^uA<|uD5W1Z=^hidO=IAi1L87i6tuBqW^>L^E^ceN rca6({Dc$2m?pg-r9fu#YuB~PG(blV!{zfYw=p6=6S3j3^P6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chips-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chips-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..227a4bc3e7394fcb2e3518c8a144e7cba9ac2ad2 GIT binary patch literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`032l#}znwpvdwPj{zGGs9@G%)=C&#+&Ip`igN&G4{nKZxcm3Gxg64+RXt z{uM$X!2*xSVg?4j!ywFfJby(BQ1FVUi(^QH``c;Od`A>`Sbs|H_}`gamU*CgiiR(j ze`;iZpwnUQzp8o#2M@67Ni--NvCR2!iz`U4II44xS<{5>Glhy_G188cx=u!9&wYGK zPr~uyi+_g~-WBk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`032l#}z0`-`hnldynFk~@gW@i5X&#+&Ip#jKcU^uc=R1`>YmIV0)|AzvG zVE+mskYIsFWHAE+-(e7DJf6QI1t@sU)5S3)!u{??gV}0P>((^|uW|{vHxwPW| zE3f#D1rMA4i>!%0^!Atv$LVPkCiAp;GOV5^AbcWa2Fs2N&Y9O!O?sI8?r(27a9U&Y zF}b^2TN)x#uJAO)dUNbiU7TdGCzq3P9_#OE1>d`K`sP1uy51CJFJD_5mdKI;Vst05i&zB>(^b literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chocolatebar-open-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chocolatebar-open-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..0c0cb66e649d4ed27871fad02d1c5dcfce36cd72 GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uwmT7Z3%CYsB^8y9ls7Ho?)RhGJ1^@s5pTR+E?Y)%^otCpaI(YgV=k>Q7>ONnUg**~G z6dE0yJi07fc78ePbF%j1F>ax6Juwf8MOv*F7$;ogDZV$aP>!{N>rQ>L{nIp&_sWed zZ7f0(K%H~AV&qvjUj1*KVE)IsAzGaEqHj*yzKR8DHuchN+e2c{%ucjnEt&o~kLlFw jpEEa`DIEOY6s5mkRlmh+W7P+s6B#^R{an^LB{Ts5nf_>T literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chocolatebar-open-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/chocolatebar-open-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..fb18c78ea59313af92cba56a3e144c59fd26cc94 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uwmT7bLnDaWyu>l3Xn}=TlsVfQc3;zHAKZAqT$}d1ZXMsm#F#`kN zVGw3Kp1&dmC^+BK#W5tp{p~bQp#usWEV2LoKktZknQ-Wo;`Eo^21iRycsl*#U=a`y zaBx_|w7%!-+V&Y$iIbD`wN@**p66+-Z})w0a`Hm)sS`E*)AvcHz1OMvY<_KjMeskH z*LyoxIxsLYGP1A$^*a@0i~Kz{X~C|er$4Kn7VmDH^I*z-v2Mm}efGzbuJi7>A1Cx9 t>(Wi8usHJ@ow7@R`z>HN_`hk6eESpqnl+aeuLL@k!PC{xWt~$(69A33aFzf7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cnds-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cnds-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..e608b13df1ffca404192dbb7a083a9149acdd684 GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=y?#WBsmJo2Lx$4Hp{~LlF_FsLNVkYUK&QffrJkiGlsH#d#C>Ka^ zmjw9*|AzwxFMq~QKw-`TkH}&M2EIce%qXhi)c_Pc>gnPb65;;#syE+Z1s;|QI~;s= z{BPv$jTW_WiO8{?Z853xXU;Q?*@Xuh#n@#s92+=UPajuv_%bO|lS{#>smEKAanXz> zF+V-l-M@s3{1n~no`xN&S<4j4A%0!`TjDvRuZ#|&Uw*2cxWLXhIhI@D`c#JlLO_GS z=DlgS)qWu6>Q(;o&J+peRr31}x;R|rZxmVhVP)OSdPj#-J38LKT7UL?{9le4^W3lU zH?)6V@Qd-oowLbbZ!_+!YyQ`$$(O^tbPr>Y#@ze-@>0iv9%Arx^>bP0l+XkKGmDPa literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cnds-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cnds-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..294dd9a6e99404bf309f918965009711e7603501 GIT binary patch literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=y?#W9$)LgYKA>hWx|NE~#+z{m8q0W+GCRuE!JkiGls47(BXcmy- zE(!7r{tpKXUjB@qfWn*w9+AZi419+`m{C;2s{tr@$kW9!B*Oje)zdWn(6*$!?sne1q|zW8yOj{o#hlz zu3E+U;f2f%fx7s`2YNl87Bd}@PWyg5;M;U<1;6+H|AQt5-D_CScj$jgzXksXg9Lpp zjR}hzm@K(C4y?MtRO|T0r2DU=zPZ!_>&Lw_tsV1^Nk7(^8fx+2a=~xo$IcU4Ua>Sw z>Ti3c&6Bq0O3mJb3CFnaepi-bJ{|Z#qT?es!|%D*HPgTe~DWM4fzdDgE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cookie_fortune-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cookie_fortune-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..104e306be281a91baa6d0720510b6dc37520217d GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xZp{_>v@vmFxWLnCrau>10)?aJW;O#Uwvr&f;Qt`NuzCNI{Xh}U z0*}aI1_r*vAk26?e?d>p9KS3pelMJtL@)kamqR-ogLy{(B``fVMMuy85}Sb4q9e0R4Mq A3IG5A literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cookie_fortune-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/cookie_fortune-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..6ec077df0da2159d510d0ed1fef8f64903bcdd6d GIT binary patch literal 263 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xP7D|Lv@vmOuE@_tmQSad0)^k0b}#}dwvr&f;Qt`NuzCNI{Xh}U z0*}aI1_r*vAk26?e?+@{p6=&OQ_WxY!zDJUwfsJ7SBSXe|ribsI zK7QoEQGeffgO$)B<^(3QK9=m~yoVSVTwMHSulGOw;aWr!&|U^lS3j3^P6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..717b7f98f40410b1522873c44d25206a172d6c53 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`032l#}z{{R2~@#Dv{{>#sqGpBZiv%9--{2Y=0zx;smV%4ovffQ#+kY6xR z85l4G`&S5o1PeSOiy0XB4ude`@%$AjK*715E{-7)?r*OhmdKI;Vst E0P7lh!vFvP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..d7581beb6147161e19ca8e6495ba3e69d0de22b1 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`032l#}zK7Rc8|NsB9{>!_&8`rLIo-=1o{2Y=0zx;smYA5)8ffQ#+kY6xR z4Hz&4`&S5o1PeSOiy0XB4ude`@%$AjK*2elE{-7)?r*Q17HUx7U=7eU{r|svveDrM z>|3+n#abrIw)XD$W5~b|z`(Ge;K0va8(Nr~>lF(Ucs8!%dFbF#ns}0J%4z%m_B!|1 zXEqqmnSbcs`>>|%SLDCveU{q;^rr{|g9cDHOMDF!W0j2AwVdV7O-dbVQOpn69nKja4zGK+k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`032l#}zetFUN@#V53o1Bh(j9c3;`0z^Ex&=Dt561xId$ibr${9FIg8YL2 zLjgmue}xc8u)rg-n1O-sFbFdq&tH)O6rAko;usR){&w0yt_B4G)~lQT{MTRC%6n?A zLZ{xxXP1&E2k!n7RNcuUBq8LHP^0K^^RV)w1wPKpn~oNL{lIZ+?S{tX6?asR7oO@~ zu3dBg>iqPKZHJo}RVEym;K1a}#MzV2@*%qbtnjC;oEin2d~?N2kcGP%tUPJ^)r~REe1M|!PC{xWt~$(69B^@dm#V- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-open-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/energybar-open-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..864a9e04a1ad2e759e8c4cf846cd1d112175eeac GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!6Tk7jv*CsZ*MK+J>($5_JCVMrP_eC*nmCx z0GEagM;L=YEBAvgm4nmwEV1zL%JAafcYaIyuXW{nXMI-(YG|7g2c8G*Vs?@(m$IJsG6!Ugr>mdKI;Vst0GiQvSO5S3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/meta.json index 4ff3230cae..da7c3e965e 100644 --- a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24, chinese from paradise, ticket by peptide, cnds-trash based on boritos-trash and syndicakes modified by potato1234x, ramen from https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24, chinese from paradise, ticket by peptide, cnds-trash based on boritos-trash and syndicakes modified by potato1234x, ramen from https://github.com/discordia-space/CEV-Eris/raw/f7aa28fd4b4d0386c3393d829681ebca526f1d2d/icons/obj/drinks.dmi. Some inhands by Orsoniks.", "size": { "x": 32, "y": 32 @@ -10,24 +10,72 @@ { "name": "ramen" }, + { + "name": "ramen-inhand-right", + "directions": 4 + }, + { + "name": "ramen-inhand-left", + "directions": 4 + }, + { + "name": "trash-inhand-right", + "directions": 4 + }, + { + "name": "trash-inhand-left", + "directions": 4 + }, { "name": "boritos" }, + { + "name": "boritos-inhand-right", + "directions": 4 + }, + { + "name": "boritos-inhand-left", + "directions": 4 + }, { "name": "boritos-trash" }, { "name": "cheesiehonkers" }, + { + "name": "cheesiehonkers-inhand-right", + "directions": 4 + }, + { + "name": "cheesiehonkers-inhand-left", + "directions": 4 + }, { "name": "cheesiehonkers-trash" }, { "name": "chinese1" }, + { + "name": "chinese1-inhand-right", + "directions": 4 + }, + { + "name": "chinese1-inhand-left", + "directions": 4 + }, { "name": "chinese2" }, + { + "name": "chinese2-inhand-right", + "directions": 4 + }, + { + "name": "chinese2-inhand-left", + "directions": 4 + }, { "name": "chinese3" }, @@ -37,6 +85,14 @@ { "name": "chips" }, + { + "name": "chips-inhand-right", + "directions": 4 + }, + { + "name": "chips-inhand-left", + "directions": 4 + }, { "name": "chips-trash" }, @@ -57,39 +113,111 @@ "name": "chocolatebar-inhand-left", "directions": 4 }, + { + "name": "chocolatebar-open-inhand-right", + "directions": 4 + }, + { + "name": "chocolatebar-open-inhand-left", + "directions": 4 + }, { "name": "cnds" }, + { + "name": "cnds-inhand-right", + "directions": 4 + }, + { + "name": "cnds-inhand-left", + "directions": 4 + }, { "name": "cnds-trash" }, { "name": "cookie_fortune" }, + { + "name": "cookie_fortune-inhand-right", + "directions": 4 + }, + { + "name": "cookie_fortune-inhand-left", + "directions": 4 + }, { "name": "energybar" }, + { + "name": "energybar-inhand-right", + "directions": 4 + }, + { + "name": "energybar-inhand-left", + "directions": 4 + }, { "name": "energybar-open" }, + { + "name": "energybar-open-inhand-right", + "directions": 4 + }, + { + "name": "energybar-open-inhand-left", + "directions": 4 + }, { "name": "energybar-trash" }, { "name": "mre-brownie" }, + { + "name": "mre-brownie-inhand-right", + "directions": 4 + }, + { + "name": "mre-brownie-inhand-left", + "directions": 4 + }, { "name": "mre-brownie-open" }, + { + "name": "mre-brownie-open-inhand-right", + "directions": 4 + }, + { + "name": "mre-brownie-open-inhand-left", + "directions": 4 + }, { "name": "mre-wrapper" }, { "name": "nutribrick" }, + { + "name": "nutribrick-inhand-right", + "directions": 4 + }, + { + "name": "nutribrick-inhand-left", + "directions": 4 + }, { "name": "nutribrick-open" }, + { + "name": "nutribrick-open-inhand-right", + "directions": 4 + }, + { + "name": "nutribrick-open-inhand-left", + "directions": 4 + }, { "name": "packet-inhand-right", "directions": 4 @@ -101,6 +229,14 @@ { "name": "pistachio" }, + { + "name": "pistachio-inhand-right", + "directions": 4 + }, + { + "name": "pistachio-inhand-left", + "directions": 4 + }, { "name": "pistachio-trash" }, @@ -121,24 +257,56 @@ { "name": "raisins" }, + { + "name": "raisins-inhand-right", + "directions": 4 + }, + { + "name": "raisins-inhand-left", + "directions": 4 + }, { "name": "raisins-trash" }, { "name": "semki" }, + { + "name": "semki-inhand-right", + "directions": 4 + }, + { + "name": "semki-inhand-left", + "directions": 4 + }, { "name": "semki-trash" }, { "name": "susjerky" }, + { + "name": "susjerky-inhand-right", + "directions": 4 + }, + { + "name": "susjerky-inhand-left", + "directions": 4 + }, { "name": "susjerky-trash" }, { "name": "syndicakes" }, + { + "name": "syndicakes-inhand-right", + "directions": 4 + }, + { + "name": "syndicakes-inhand-left", + "directions": 4 + }, { "name": "syndicakes-trash" }, diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..acdae87b0ed2474cc95251f4a7674c80579a8bdd GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!T+8vjv*CsZ*SRhI|fP|_;`55l<89rYHW`D z$)J|HA#%z|m6hJ?o?OV{;`W5^w)f>+V0gc$>J4mh=S;@jl0xJpnfxF6IcvuQgZitbY6Iv#|vK ztbKNz-z&}6FPo4XdcyNWshTIOciZKUZ@SH2Y})pUt>*FB{YA%Xp4&Bj``hrFg_BGjJcO&x&RV>^^ZO>o&z}E3ZaaQ>n{@uRZ<*V+ ze0q0S{>k0oAMfQ=mR@%#I&tpa?vLxm_4lw%(N?`G>EryG`!CBL=Scy3CRCr2T3P|I z0z_UsX>iGYqUq6)c{l#E+Y}d_vobm!(szTm;@kNH=CxMoZv=~0$L$s4mfXABT1G!> qW0bV4`|r=^rim@iXJBafu2IT-`g@SyvtVCFkZGQ-elF{r5}E)u*o@@> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-open-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-open-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..171afe264ca300b2a1b9dbce5bce5ad740f4e597 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xrWtZpnDDeZ3&m)&JIb*Eg|7ti90pQsB|(0{|3QFZ^Zq6Kfg+p* z9+AZi417RYzQc^i^H-z*1)Dux977`9-(GX%Yf#{E35J=BIJl#j@Cn{qGN@B!Ae`bZym>gq+vS z3poTjAgGQjCV1PqgavWuBBPl~iUg~_-e+V~vUOjoch7*ke}gb1Q(Bt2X1afJ?!pg8 QfzDy@boFyt=akR{0OQPHjQ{`u literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-open-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/mre-brownie-open-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2d714c1c0fd22cbe9037ac817af5ba4164082e GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%xrWtZpnDDeZ3&m)&JIb*Eg|7ti90pQsB|(0{|3QFZ^Zq6Kfg+p* z9+AZi417RYzQc^i^H-z*1)Dux977`9-(EW?=Aa2sJAe&oUgj~?*3|Pj=tx{*S|g!mHEAVOY5Y+Y{85S z3n1vPK!o1Ok3Re|?C)28;JNc(MPRn`&T9-4gAC(Kmfp14#Jl||Cj*1vL{ZfP{>h0B SJGTIx!{F)a=d#Wzp$P!KuwxGZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..d9a52b4814121eb88c44cf6f97aec8849fdadb40 GIT binary patch literal 481 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4P~A#jv*CsZ*LiTA9fHq@NqSV*U1a3nt`BX zT9fxe*^;6OPVDv#0ahs?%l*!2ojZEbu|VJm{{w{`J2>uov9q&_W?yxb<@E7p+bS z)I3o8{HN!!sjZp8T2tBj4<4L%zw~lI+j{xF)t*ZkeyfY$4EvoH&{AWU|2kT!w=>`9C_Q_|#4GYSF^kvuD4|x0-r-R&SJY(Vw|)XK!75-n(IE^^#xpt+%`b zcbv zZL)V8KU^v1Q1#>J()~XJoIX{|`~G$}<4cv@FZ;p5Gp7emu9PlLf28{$c&p-eG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..514f594f104a9f31d033cb5c1c661ef6ab44a7f7 GIT binary patch literal 478 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qu64W2HJAr*0NZ|(O!>>zUB<7y7ClM}Mo-PO}M zEzFwz`1EA|FvnP>ge>1 zVh?_tc>Q8!QS9~m5s@6v_}@OyGw@VA8SG#GR6aF<@!e+I-Fw2n$R7V`RkOMD_S$Q& zc0N#RRq;O={%P8uuSH9G7^JaC0%~OJ{m!7)tnYWg`W%i%; z!`vr>j|KAaLtMka(BS#$`M1Cu-NL)ummj+om^f!i@{xab3+|tE^`0AlcjfHw?t7Ek z-sl%j65GviN%z|21>*UU)3nw+{n`~N^gR8)J?BPlg|$VMGEXPP?TPtzddsH!X*?&{5_TQ`k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x#@cA5IUCf)*n4Xz#aLM1MG8=Gp{I*uNQC>_s|UFn40xC?l)e7K-qW2e=l>^Dv7I~1ZAV)yX;-LUTIZvma< zmK+6&?ZsQ38?ZC^JArj_FfvWdZwOmm=)c-pfZ^^g_bqeW8?IOTUGH#n_qVaiIxSss y+}g0zoZ$?Q`OfeA-p7`OPv0xcWY2Ky21CLge^uMZd-8#fW$<+Mb6Mw<&;$T$>2X*9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-open-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/nutribrick-open-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..6ffaa9b1721d89863ef56f217ca23e0a4d404704 GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~O1^9%x#@cA5IUCf)*vD9Ed21*Eh5fgER|isTB|(0{|3QFZ^Zq6Kfg+p* z9+AZi419+{nDKc2iWH#WVow*xkO=p;(;S5kD{#27KKU1}w?*aA5}&naSAD*p;^ICm;-5JLXI6IVoH903NRk`x`J@c0{^@Ut3bgxIRf4nB0+voIG zt(Dgc*AxPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0o6%FK~#8N?b^9Z z13?r9@L5671i?yBuobcOARvKYVdqf^3RXevEUav7wDB(pilkJ*%A*f9LhvY3Xd`H$ zcwr&NsFf?eCNA5%DQT9IHnG-8r9SNjdE7I z)na@v^cd(n)#7^nLU!lWINl(U4iRW<`%|BlGvT1u4^P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0nkZAK~#8N?bJfA94lz*V{4E`>0@vxf}kZR zYKlw?f-e5o9hs1Kp6`2}^8bN&H+b*!{(V&NIUynRRv%}2(hPEy`MKloNBBXKEBK&&V&QGdDuE0F$;Yj@0Hcakz6IZc?o$)OvmRsJ=#YLbH7H6A@9P%cbIh{V66QA|fIpBBCbO=zo`c8jjkqc}$A^ z8k7byXw2d;j>3HdItxU=I&OZbsRK&s9GN3nbQ;!Bt>yr9kIWG$g4MBks5*esHqWKv zhCMaL$b36na5a&wMtPw2^j8&6#o}G@b7YS7R$f{p+y8E^nLfBwwvOiup%eTZnInX@ z{V(fGl!Z{!MNkx4RCU|`$L>5>oVf61&A>tDAqeY~h=|BDk#7>S)-(B?f{6eC002ov JPDHLkV1hUX|3&}+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/raisins-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/raisins-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf75a08344d0bc001029eeb6542e2c033f70d1e GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`032l#}zo?$Tl4@75-zkdD7aOQv7%>V!Y8%s$^0p(A9`tlb@ah3%61p`IF zfFanwLI@;S;1OBOz`%DHgc*~gO6Ztu0d%p|yRW4egN`4@Y1Ij?aza!e6uao{{y%&HxBW>>v-O_apfSB+)- z($e1M7v3c%H!sSwh0q^%&#&3tepXyyX;p#KRmMee!ZXDFBz%($=Q#MEb!iQQ#N}G2 UX%Ee30-es_>FVdQ&MBb@03^zXdH?_b literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/raisins-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/raisins-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc8d5d7cc1beb219bb0fcf8291d52c9f73f1070 GIT binary patch literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`032l#}zo?$Tl4@75-zkdCiHuFEjng9R)8%s$^0p*WNR7?U=oFzei!9YXT&GR}=UY*hqr76Qb}g!n{J+k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1E2l#}zE)FUQ4-e1F%bQZ6djICl%coConjUgWNBfMO&5|WcX4dJS&d3I; zof`Ow4M_2p1o;L3M*x$R*A^@JegrV rJNveujt}l0m#}HJZh64ibkCkQc5gaC4h literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/ramen-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/ramen-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a87b9bd44e856e888c6d1ad2bb1c0a84047471 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1E2l#}zE)FWm%gYN751&$@djICl%coConjUgWNBfMO&5|WcX4dJS&d3I; zUG`GE3P|ym1o;L3M*b-CndXB}Q?{_oUVh-eu$I|JzI{q8iWw~mEWHAM z7AyR8|F>YZuV8-A-WsciEWAJuFnGH9xvXk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=y{y&|$rbxoei2KnjjYCax|Gx|Qx>}WHM{27pE}l{YRP`xwYB7-F zE(!7r{tpKXUjB@qfWn*w9+5z4zQZ8Qcszea3Q%x|r;B4qg!|iRr}FHQ890P)CNbq#Gp295D&{w#Xyvv$hd4W4 zTQ>$ge8#_~xLtRBMPq=y-#2&ZC-@5iZ7;l@#?FYuG$^oF^UY#Q90fPP@`boFyt=akR{0FB&+N&o-= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/semki-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/semki-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..7524a473ee2385606c919330b48708e7480623c5 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=yt|^lEe>&64i2KnjjsM?;4mHX7x>}WHM=qXHqphw8R3*Nn>;jPD zE(!7r{tpKXUjB@qfWn*w9+AZi419+{nDKc2iWH#WUQZXtkO=p;(>(bOEAY7XN(Sxt z-zcr3euK05ww{)2opjHKddAdb4f`Y};SisMCNA-Y#YwFk7o!~eLuwhsTV8A}&){%$ z*mt#1<(p|@$g}N1=T^%Jwy)RC-amhX?bkCFKDYM#h}C^^rSf38W*etZfMFx2mRiNK z1S6Fa|GcJ;6B_1m9rQJj5t`Ezopr00S|FEC2ui literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/susjerky-inhand-left.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/susjerky-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..977064f4f2089871f16531e9bc55b9940bd5f0f5 GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=yW@csrwV9fl&SWtD4+O@>X~xEG49XoY49Ur$%*H^9yCldj z7^DCK7`*%$KLLd~3p^r=85sBugD~Uq{1quc!Bd_tjv*25Z>MeKJFLLN%528@;lF%L zM&yC^DH`7F_fuTIaaNzSe&rqWps9~L<^tnELAQ+u=C4)g>UkyRR?zWEBYz{;qKqn4 zj!7nS%N|C&Ha#V|+3CWR^_#ae&WxBPw!xi8^>B@OPtq~2TVf{v?=mqs^4>W$;enuD zf#Y#jy%#$kk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=y0`+8OX3k_VHZ?W<4+O@>X~xEG49dyLsU0prMGQvM53dAL+$BMN z!5{??z~JT2_z5V?S>O>_%)r2R7=#&*=dVZs3SRMaaSVxYe>=@ls6~N?C7FZc=l^E$ zRg2WLbk{IwdKnpvIzsyrr#-ppz%xm10jrBebsMvC$Cp1m zvlrL}FX@Q7k(zq1ev59)oNGdvS@VPK_;%%oIG-&3z2@6h*%q7fe_i`DwhE_x=e5_( zjCs)1#vOB^;9xu#o9e@Fr(G}Tb26$*=r!eeModtVT-W61$>9;W=pe@{@9ioK*Yqcu zrjk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0(2Ka=yo;h>o)vH(k|NlS3z@Va{_TShTD0BA8;p;$(y(Gvl7$^k<3{u|A zZa^W<0*}aI1_r)EAj~ML;ne^Xyy5BM7!u+BcA7Qc5d#jFkKg~f$9>o|k;i#U*ensB zX5PcylSSH|Ijbr#E@IguR^a3sw}@HiM9|6$(WdV{g=H;$Q51fC$7#lnQxS!4>!Per zu&OWky5g;Mjrj*zn})k@bgCT}s4aE!v~%8EskK9%X~u)g2lpRksL|_nbNp2gHdV!8 zO2c)gycO$M_8!zd_UXGY+m6+NM>n^x({p_O;)jyUW_FWn3+AWyFMI8MLeeIlW3N%7 zwsQ6r{i#-G7BK87+<)cGn??qyg?H-rlq%nBOKu2dl4E}MhatTvcJrKnTSS3=WbkzL Kb6Mw<&;$UmBbG4$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/syndicakes-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/syndicakes-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..1de32666eaa3e7a0bfbf863e560f59855d5ee79a GIT binary patch literal 366 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/snacks.rsi/trash-inhand-right.png b/Resources/Textures/Objects/Consumable/Food/snacks.rsi/trash-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..507d25f031b8c35feaafeaa16f1a9e3411e465f2 GIT binary patch literal 9387 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 literal 0 HcmV?d00001 From ff4861b7b4b073e1db3fe95d77f1eeb11daefaef Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 5 Jun 2025 21:07:47 +0000 Subject: [PATCH 02/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 8d379607ae..7a3e63dece 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Vortebo - changes: - - message: Relic station revamped - type: Tweak - id: 8105 - time: '2025-03-24T16:36:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35507 - author: slarticodefast changes: - message: Adjusted thermal regulation again so you no longer overheat in hardsuits. @@ -3928,3 +3921,10 @@ id: 8616 time: '2025-06-05T12:52:39.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/38080 +- author: Orsoniks + changes: + - message: Added more in-hand sprites for food items + type: Add + id: 8617 + time: '2025-06-05T21:06:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38024 From ea1ecad3ffae48a36068439186b7c07c6fec09e9 Mon Sep 17 00:00:00 2001 From: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Date: Thu, 5 Jun 2025 18:15:55 -0500 Subject: [PATCH 03/63] Tweak for the visual coverage granted to station AIs by holopads (#38059) * Initial commit * Added option to require anchoring --- .../StationAi/StationAiVisionComponent.cs | 23 ++++++++++++++++++- .../StationAi/StationAiVisionSystem.cs | 15 +++++++++++- .../Entities/Structures/Machines/holopad.yml | 2 ++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Silicons/StationAi/StationAiVisionComponent.cs b/Content.Shared/Silicons/StationAi/StationAiVisionComponent.cs index f047fe41e4..3c5f3896b0 100644 --- a/Content.Shared/Silicons/StationAi/StationAiVisionComponent.cs +++ b/Content.Shared/Silicons/StationAi/StationAiVisionComponent.cs @@ -3,17 +3,38 @@ using Robust.Shared.GameStates; namespace Content.Shared.StationAi; +/// +/// Attached to entities that grant vision to the station AI, such as cameras. +/// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(SharedStationAiSystem))] public sealed partial class StationAiVisionComponent : Component { + /// + /// Determines whether the entity is actively providing vision to the station AI. + /// [DataField, AutoNetworkedField] public bool Enabled = true; + /// + /// Determines whether the entity's vision is blocked by walls. + /// [DataField, AutoNetworkedField] public bool Occluded = true; /// - /// Range in tiles + /// Determines whether the entity needs to be receiving power to provide vision to the station AI. + /// + [DataField, AutoNetworkedField] + public bool NeedsPower = false; + + /// + /// Determines whether the entity needs to be anchored to provide vision to the station AI. + /// + [DataField, AutoNetworkedField] + public bool NeedsAnchoring = false; + + /// + /// Vision range in tiles. /// [DataField, AutoNetworkedField] public float Range = 7.5f; diff --git a/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs b/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs index d3416949d5..7ae27da497 100644 --- a/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs +++ b/Content.Shared/Silicons/StationAi/StationAiVisionSystem.cs @@ -1,8 +1,8 @@ +using Content.Shared.Power.EntitySystems; using Content.Shared.StationAi; using Robust.Shared.Map.Components; using Robust.Shared.Physics; using Robust.Shared.Threading; -using Robust.Shared.Utility; namespace Content.Shared.Silicons.StationAi; @@ -18,6 +18,7 @@ public sealed class StationAiVisionSystem : EntitySystem [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly SharedMapSystem _maps = default!; [Dependency] private readonly SharedTransformSystem _xforms = default!; + [Dependency] private readonly SharedPowerReceiverSystem _power = default!; private SeedJob _seedJob; private ViewJob _job; @@ -83,6 +84,12 @@ public sealed class StationAiVisionSystem : EntitySystem if (!seed.Comp.Enabled) continue; + if (seed.Comp.NeedsPower && !_power.IsPowered(seed.Owner)) + continue; + + if (seed.Comp.NeedsAnchoring && !Transform(seed.Owner).Anchored) + continue; + _job.Data.Add(seed); } @@ -164,6 +171,12 @@ public sealed class StationAiVisionSystem : EntitySystem if (!seed.Comp.Enabled) continue; + if (seed.Comp.NeedsPower && !_power.IsPowered(seed.Owner)) + continue; + + if (seed.Comp.NeedsAnchoring && !Transform(seed.Owner).Anchored) + continue; + _job.Data.Add(seed); } diff --git a/Resources/Prototypes/Entities/Structures/Machines/holopad.yml b/Resources/Prototypes/Entities/Structures/Machines/holopad.yml index 1a1712991a..95a1fba489 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/holopad.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/holopad.yml @@ -17,6 +17,8 @@ - type: ApcPowerReceiver powerLoad: 300 - type: StationAiVision + range: 1 + needsAnchoring: true - type: Sprite sprite: Structures/Machines/holopad.rsi drawdepth: HighFloorObjects From 1c27a2a38312859bf5488210317c7b09ce07334c Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 5 Jun 2025 23:17:03 +0000 Subject: [PATCH 04/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 7a3e63dece..9b737d3fa8 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: Adjusted thermal regulation again so you no longer overheat in hardsuits. - type: Fix - id: 8106 - time: '2025-03-24T23:55:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36062 - author: Velcroboy, ErhardSteinhauer, whatston3, MilonPL, Beck, ArtisticRoomba, ScarKy0 changes: - message: Smuggler stashes! Will get spawned as a round start event and can also @@ -3928,3 +3921,11 @@ id: 8617 time: '2025-06-05T21:06:38.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/38024 +- author: chromiumboy + changes: + - message: Holopads now provide less visual coverage to station AIs (1 tile radius, + down from 7.5). Holopads must also be anchored to the floor to provide vision. + type: Tweak + id: 8618 + time: '2025-06-05T23:15:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38059 From db38a9c945c0ff9810df9061d71a63176914f8e5 Mon Sep 17 00:00:00 2001 From: Kyle Tyo <36606155+VerinSenpai@users.noreply.github.com> Date: Thu, 5 Jun 2025 19:17:31 -0400 Subject: [PATCH 05/63] Revise ShowAccessReadersCommand as LocalizedEntityCommands (#37991) * revise ShowAccessReadersCommand * don't believe this is needed anymore? hopefully servers world wide don't explode. --- .../Commands/ShowAccessReadersCommand.cs | 41 +++++-------------- .../commands/show-access-readers-command.ftl | 9 ++++ 2 files changed, 20 insertions(+), 30 deletions(-) create mode 100644 Resources/Locale/en-US/commands/show-access-readers-command.ftl diff --git a/Content.Client/Access/Commands/ShowAccessReadersCommand.cs b/Content.Client/Access/Commands/ShowAccessReadersCommand.cs index cb6cb6cf6b..e26cca0fc2 100644 --- a/Content.Client/Access/Commands/ShowAccessReadersCommand.cs +++ b/Content.Client/Access/Commands/ShowAccessReadersCommand.cs @@ -4,39 +4,20 @@ using Robust.Shared.Console; namespace Content.Client.Access.Commands; -public sealed class ShowAccessReadersCommand : IConsoleCommand +public sealed class ShowAccessReadersCommand : LocalizedEntityCommands { - public string Command => "showaccessreaders"; + [Dependency] private readonly IOverlayManager _overlay = default!; + [Dependency] private readonly IResourceCache _cache = default!; + [Dependency] private readonly SharedTransformSystem _xform = default!; - public string Description => "Toggles showing access reader permissions on the map"; - public string Help => """ - Overlay Info: - -Disabled | The access reader is disabled - +Unrestricted | The access reader has no restrictions - +Set [Index]: [Tag Name]| A tag in an access set (accessor needs all tags in the set to be allowed by the set) - +Key [StationUid]: [StationRecordKeyId] | A StationRecordKey that is allowed - -Tag [Tag Name] | A tag that is not allowed (takes priority over other allows) - """; - public void Execute(IConsoleShell shell, string argStr, string[] args) + public override string Command => "showaccessreaders"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) { - var collection = IoCManager.Instance; + var existing = _overlay.RemoveOverlay(); + if (!existing) + _overlay.AddOverlay(new AccessOverlay(EntityManager, _cache, _xform)); - if (collection == null) - return; - - var overlay = collection.Resolve(); - - if (overlay.RemoveOverlay()) - { - shell.WriteLine($"Set access reader debug overlay to false"); - return; - } - - var entManager = collection.Resolve(); - var cache = collection.Resolve(); - var xform = entManager.System(); - - overlay.AddOverlay(new AccessOverlay(entManager, cache, xform)); - shell.WriteLine($"Set access reader debug overlay to true"); + shell.WriteLine(Loc.GetString($"cmd-showaccessreaders-status", ("status", !existing))); } } diff --git a/Resources/Locale/en-US/commands/show-access-readers-command.ftl b/Resources/Locale/en-US/commands/show-access-readers-command.ftl new file mode 100644 index 0000000000..f74553a066 --- /dev/null +++ b/Resources/Locale/en-US/commands/show-access-readers-command.ftl @@ -0,0 +1,9 @@ +cmd-showaccessreaders-desc = Toggles showing access reader permissions on the map +cmd-showaccessreaders-help = + Overlay Info: + -Disabled | The access reader is disabled + +Unrestricted | The access reader has no restrictions + +Set [Index]: [Tag Name]| A tag in an access set (accessor needs all tags in the set to be allowed by the set) + +Key [StationUid]: [StationRecordKeyId] | A StationRecordKey that is allowed + -Tag [Tag Name] | A tag that is not allowed (takes priority over other allows) +cmd-showaccessreaders-status = Set access reader debug overlay to {$status}. From d7d7a6c80eb19e5a58f4183f8af8066dd2cbeb78 Mon Sep 17 00:00:00 2001 From: Simon <63975668+Simyon264@users.noreply.github.com> Date: Fri, 6 Jun 2025 01:19:41 +0200 Subject: [PATCH 06/63] Split codewords into its own system (#37928) * Split codewords into its own system * Fix admin log * Nuke unused code * Fix formatting errors * Fix tests * Make the codeword system add itself if called when not active * Put comment in right place. * Review: Rename prototypes * Review: Make codewords serializable * Fix build * Reviews: Change the system to not be a gamerule. * Fix YAML Linter * Fix test fail * Remove unused import --- Content.Client/Entry/EntryPoint.cs | 2 + Content.Server/Codewords/CodewordComponent.cs | 14 +++ .../Codewords/CodewordFactionPrototype.cs | 20 +++++ .../Codewords/CodewordGeneratorPrototype.cs | 32 +++++++ .../Codewords/CodewordManagerComponent.cs | 17 ++++ Content.Server/Codewords/CodewordSystem.cs | 90 +++++++++++++++++++ .../Rules/Components/TraitorRuleComponent.cs | 19 ++-- .../GameTicking/Rules/TraitorRuleSystem.cs | 37 ++------ .../Components/TraitorCodePaperComponent.cs | 15 ++++ .../Traitor/Systems/TraitorCodePaperSystem.cs | 19 ++-- .../Codewords/codeword_factions.yml | 3 + .../Codewords/codeword_generators.yml | 6 ++ 12 files changed, 216 insertions(+), 58 deletions(-) create mode 100644 Content.Server/Codewords/CodewordComponent.cs create mode 100644 Content.Server/Codewords/CodewordFactionPrototype.cs create mode 100644 Content.Server/Codewords/CodewordGeneratorPrototype.cs create mode 100644 Content.Server/Codewords/CodewordManagerComponent.cs create mode 100644 Content.Server/Codewords/CodewordSystem.cs create mode 100644 Resources/Prototypes/Codewords/codeword_factions.yml create mode 100644 Resources/Prototypes/Codewords/codeword_generators.yml diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index ebed5269f8..322b6e113c 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -123,6 +123,8 @@ namespace Content.Client.Entry _prototypeManager.RegisterIgnore("alertLevels"); _prototypeManager.RegisterIgnore("nukeopsRole"); _prototypeManager.RegisterIgnore("ghostRoleRaffleDecider"); + _prototypeManager.RegisterIgnore("codewordGenerator"); + _prototypeManager.RegisterIgnore("codewordFaction"); _componentFactory.GenerateNetIds(); _adminManager.Initialize(); diff --git a/Content.Server/Codewords/CodewordComponent.cs b/Content.Server/Codewords/CodewordComponent.cs new file mode 100644 index 0000000000..6ceb3a513a --- /dev/null +++ b/Content.Server/Codewords/CodewordComponent.cs @@ -0,0 +1,14 @@ +namespace Content.Server.Codewords; + +/// +/// Container for generated codewords. +/// +[RegisterComponent, Access(typeof(CodewordSystem))] +public sealed partial class CodewordComponent : Component +{ + /// + /// The codewords that were generated. + /// + [DataField] + public string[] Codewords = []; +} diff --git a/Content.Server/Codewords/CodewordFactionPrototype.cs b/Content.Server/Codewords/CodewordFactionPrototype.cs new file mode 100644 index 0000000000..72d24b1dcd --- /dev/null +++ b/Content.Server/Codewords/CodewordFactionPrototype.cs @@ -0,0 +1,20 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server.Codewords; + +/// +/// This is a prototype for easy access to codewords using identifiers instead of magic strings. +/// +[Prototype] +public sealed partial class CodewordFactionPrototype : IPrototype +{ + /// + [IdDataField] + public string ID { get; } = default!; + + /// + /// The generator to use for this faction. + /// + [DataField(required:true)] + public ProtoId Generator { get; } = default!; +} diff --git a/Content.Server/Codewords/CodewordGeneratorPrototype.cs b/Content.Server/Codewords/CodewordGeneratorPrototype.cs new file mode 100644 index 0000000000..15e50ebf73 --- /dev/null +++ b/Content.Server/Codewords/CodewordGeneratorPrototype.cs @@ -0,0 +1,32 @@ +using Content.Shared.Dataset; +using Robust.Shared.Prototypes; + +namespace Content.Server.Codewords; + +/// +/// This is a prototype for specifying codeword generation +/// +[Prototype] +public sealed partial class CodewordGeneratorPrototype : IPrototype +{ + /// + [IdDataField] + public string ID { get; } = default!; + + /// + /// List of datasets to use for word generation. All values will be concatenated into one list and then randomly chosen from + /// + [DataField] + public List> Words { get; } = + [ + "Adjectives", + "Verbs", + ]; + + + /// + /// How many codewords should be generated? + /// + [DataField] + public int Amount = 3; +} diff --git a/Content.Server/Codewords/CodewordManagerComponent.cs b/Content.Server/Codewords/CodewordManagerComponent.cs new file mode 100644 index 0000000000..46ddc357a1 --- /dev/null +++ b/Content.Server/Codewords/CodewordManagerComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server.Codewords; + +/// +/// Component that defines to use and keeps track of generated codewords. +/// +[RegisterComponent, Access(typeof(CodewordSystem))] +public sealed partial class CodewordManagerComponent : Component +{ + /// + /// The generated codewords. The value contains the entity that has the + /// + [DataField] + [ViewVariables(VVAccess.ReadOnly)] + public Dictionary, EntityUid> Codewords = new(); +} diff --git a/Content.Server/Codewords/CodewordSystem.cs b/Content.Server/Codewords/CodewordSystem.cs new file mode 100644 index 0000000000..54f0e936b4 --- /dev/null +++ b/Content.Server/Codewords/CodewordSystem.cs @@ -0,0 +1,90 @@ +using System.Linq; +using Content.Server.Administration.Logs; +using Content.Server.GameTicking.Events; +using Content.Shared.Database; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Server.Codewords; + +/// +/// Gamerule that provides codewords for other gamerules that rely on them. +/// +public sealed class CodewordSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnRoundStart); + } + + private void OnRoundStart(RoundStartingEvent ev) + { + var manager = Spawn(); + AddComp(manager); + } + + /// + /// Retrieves codewords for the faction specified. + /// + public string[] GetCodewords(ProtoId faction) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out _, out var manager)) + { + if (!manager.Codewords.TryGetValue(faction, out var codewordEntity)) + return GenerateForFaction(faction, ref manager); + + return Comp(codewordEntity).Codewords; + } + + Log.Warning("Codeword system not initialized. Returning empty array."); + // While throwing in this situation would be cool, that causes a test fail (in SpawnAndDeleteEntityCountTest) + // as the traitor codewords paper gets spawned in and calls this method, + // but the "start round" event never gets called in this test case. + return []; + } + + private string[] GenerateForFaction(ProtoId faction, ref CodewordManagerComponent manager) + { + var factionProto = _prototypeManager.Index(faction.Id); + + var codewords = GenerateCodewords(factionProto.Generator); + var codewordsContainer = EntityManager.Spawn(protoName:null, MapCoordinates.Nullspace); + EnsureComp(codewordsContainer) + .Codewords = codewords; + manager.Codewords[faction] = codewordsContainer; + _adminLogger.Add(LogType.EventStarted, LogImpact.Low, $"Codewords generated for faction {faction}: {string.Join(", ", codewords)}"); + + return codewords; + } + + /// + /// Generates codewords as specified by the codeword generator. + /// + public string[] GenerateCodewords(ProtoId generatorId) + { + var generator = _prototypeManager.Index(generatorId); + + var codewordPool = new List(); + foreach (var dataset in generator.Words + .Select(datasetPrototype => _prototypeManager.Index(datasetPrototype))) + { + codewordPool.AddRange(dataset.Values); + } + + var finalCodewordCount = Math.Min(generator.Amount, codewordPool.Count); + var codewords = new string[finalCodewordCount]; + for (var i = 0; i < finalCodewordCount; i++) + { + codewords[i] = Loc.GetString(_random.PickAndTake(codewordPool)); + } + return codewords; + } +} diff --git a/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs b/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs index bfaf87e97c..092f4b71c2 100644 --- a/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs +++ b/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs @@ -1,6 +1,7 @@ +using Content.Server.Codewords; using Content.Shared.Dataset; using Content.Shared.FixedPoint; -using Content.Shared.NPC.Prototypes; +using Content.Shared.NPC.Prototypes; using Content.Shared.Random; using Content.Shared.Roles; using Robust.Shared.Audio; @@ -17,18 +18,15 @@ public sealed partial class TraitorRuleComponent : Component [DataField] public ProtoId TraitorPrototypeId = "Traitor"; + [DataField] + public ProtoId CodewordFactionPrototypeId = "Traitor"; + [DataField] public ProtoId NanoTrasenFaction = "NanoTrasen"; [DataField] public ProtoId SyndicateFaction = "Syndicate"; - [DataField] - public ProtoId CodewordAdjectives = "Adjectives"; - - [DataField] - public ProtoId CodewordVerbs = "Verbs"; - [DataField] public ProtoId ObjectiveIssuers = "TraitorCorporations"; @@ -51,7 +49,6 @@ public sealed partial class TraitorRuleComponent : Component public bool GiveBriefing = true; public int TotalTraitors => TraitorMinds.Count; - public string[] Codewords = new string[3]; public enum SelectionState { @@ -77,12 +74,6 @@ public sealed partial class TraitorRuleComponent : Component [DataField] public SoundSpecifier GreetSoundNotification = new SoundPathSpecifier("/Audio/Ambience/Antag/traitor_start.ogg"); - /// - /// The amount of codewords that are selected. - /// - [DataField] - public int CodewordCount = 4; - /// /// The amount of TC traitors start with. /// diff --git a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs index 790b14579e..7940eebef1 100644 --- a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs @@ -20,6 +20,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using System.Linq; using System.Text; +using Content.Server.Codewords; namespace Content.Server.GameTicking.Rules; @@ -37,6 +38,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem [Dependency] private readonly SharedRoleCodewordSystem _roleCodewordSystem = default!; [Dependency] private readonly SharedRoleSystem _roleSystem = default!; [Dependency] private readonly UplinkSystem _uplink = default!; + [Dependency] private readonly CodewordSystem _codewordSystem = default!; public override void Initialize() { @@ -48,41 +50,16 @@ public sealed class TraitorRuleSystem : GameRuleSystem SubscribeLocalEvent(OnObjectivesTextPrepend); } - protected override void Added(EntityUid uid, TraitorRuleComponent component, GameRuleComponent gameRule, GameRuleAddedEvent args) - { - base.Added(uid, component, gameRule, args); - SetCodewords(component, args.RuleEntity); - } - private void AfterEntitySelected(Entity ent, ref AfterAntagEntitySelectedEvent args) { Log.Debug($"AfterAntagEntitySelected {ToPrettyString(ent)}"); MakeTraitor(args.EntityUid, ent); } - private void SetCodewords(TraitorRuleComponent component, EntityUid ruleEntity) - { - component.Codewords = GenerateTraitorCodewords(component); - _adminLogger.Add(LogType.EventStarted, LogImpact.Low, $"Codewords generated for game rule {ToPrettyString(ruleEntity)}: {string.Join(", ", component.Codewords)}"); - } - - public string[] GenerateTraitorCodewords(TraitorRuleComponent component) - { - var adjectives = _prototypeManager.Index(component.CodewordAdjectives).Values; - var verbs = _prototypeManager.Index(component.CodewordVerbs).Values; - var codewordPool = adjectives.Concat(verbs).ToList(); - var finalCodewordCount = Math.Min(component.CodewordCount, codewordPool.Count); - string[] codewords = new string[finalCodewordCount]; - for (var i = 0; i < finalCodewordCount; i++) - { - codewords[i] = Loc.GetString(_random.PickAndTake(codewordPool)); - } - return codewords; - } - public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component) { Log.Debug($"MakeTraitor {ToPrettyString(traitor)} - start"); + var factionCodewords = _codewordSystem.GetCodewords(component.CodewordFactionPrototypeId); //Grab the mind if it wasn't provided if (!_mindSystem.TryGetMind(traitor, out var mindId, out var mind)) @@ -96,7 +73,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem if (component.GiveCodewords) { Log.Debug($"MakeTraitor {ToPrettyString(traitor)} - added codewords flufftext to briefing"); - briefing = Loc.GetString("traitor-role-codewords-short", ("codewords", string.Join(", ", component.Codewords))); + briefing = Loc.GetString("traitor-role-codewords-short", ("codewords", string.Join(", ", factionCodewords))); } var issuer = _random.Pick(_prototypeManager.Index(component.ObjectiveIssuers)); @@ -129,7 +106,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem if (component.GiveCodewords) { Log.Debug($"MakeTraitor {ToPrettyString(traitor)} - set codewords from component"); - codewords = component.Codewords; + codewords = factionCodewords; } if (component.GiveBriefing) @@ -161,7 +138,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem var color = TraitorCodewordColor; // Fall back to a dark red Syndicate color if a prototype is not found RoleCodewordComponent codewordComp = EnsureComp(mindId); - _roleCodewordSystem.SetRoleCodewords(codewordComp, "traitor", component.Codewords.ToList(), color); + _roleCodewordSystem.SetRoleCodewords(codewordComp, "traitor", factionCodewords.ToList(), color); // Change the faction Log.Debug($"MakeTraitor {ToPrettyString(traitor)} - Change faction"); @@ -211,7 +188,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem private void OnObjectivesTextPrepend(EntityUid uid, TraitorRuleComponent comp, ref ObjectivesTextPrependEvent args) { if(comp.GiveCodewords) - args.Text += "\n" + Loc.GetString("traitor-round-end-codewords", ("codewords", string.Join(", ", comp.Codewords))); + args.Text += "\n" + Loc.GetString("traitor-round-end-codewords", ("codewords", string.Join(", ", _codewordSystem.GetCodewords(comp.CodewordFactionPrototypeId)))); } // TODO: figure out how to handle this? add priority to briefing event? diff --git a/Content.Server/Traitor/Components/TraitorCodePaperComponent.cs b/Content.Server/Traitor/Components/TraitorCodePaperComponent.cs index 7887248f21..d4ce40c066 100644 --- a/Content.Server/Traitor/Components/TraitorCodePaperComponent.cs +++ b/Content.Server/Traitor/Components/TraitorCodePaperComponent.cs @@ -1,3 +1,6 @@ +using Content.Server.Codewords; +using Robust.Shared.Prototypes; + namespace Content.Server.Traitor.Components; /// @@ -6,6 +9,18 @@ namespace Content.Server.Traitor.Components; [RegisterComponent] public sealed partial class TraitorCodePaperComponent : Component { + /// + /// The faction to get codewords for. + /// + [DataField] + public ProtoId CodewordFaction = "Traitor"; + + /// + /// The generator to use for the fake words. + /// + [DataField] + public ProtoId CodewordGenerator = "TraitorCodewordGenerator"; + /// /// The number of codewords that should be generated on this paper. /// Will not extend past the max number of available codewords. diff --git a/Content.Server/Traitor/Systems/TraitorCodePaperSystem.cs b/Content.Server/Traitor/Systems/TraitorCodePaperSystem.cs index bccbd80bf5..f1a0f97f54 100644 --- a/Content.Server/Traitor/Systems/TraitorCodePaperSystem.cs +++ b/Content.Server/Traitor/Systems/TraitorCodePaperSystem.cs @@ -7,6 +7,7 @@ using Content.Server.Traitor.Components; using Robust.Shared.Random; using Robust.Shared.Utility; using System.Linq; +using Content.Server.Codewords; using Content.Shared.Paper; namespace Content.Server.Traitor.Systems; @@ -17,6 +18,7 @@ public sealed class TraitorCodePaperSystem : EntitySystem [Dependency] private readonly TraitorRuleSystem _traitorRuleSystem = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly PaperSystem _paper = default!; + [Dependency] private readonly CodewordSystem _codewordSystem = default!; public override void Initialize() { @@ -48,23 +50,12 @@ public sealed class TraitorCodePaperSystem : EntitySystem traitorCode = null; var codesMessage = new FormattedMessage(); - List codeList = new(); - // Find the first nuke that matches the passed location. - if (_gameTicker.IsGameRuleAdded()) - { - var ruleEnts = _gameTicker.GetAddedGameRules(); - foreach (var ruleEnt in ruleEnts) - { - if (TryComp(ruleEnt, out TraitorRuleComponent? traitorComp)) - { - codeList.AddRange(traitorComp.Codewords.ToList()); - } - } - } + var codeList = _codewordSystem.GetCodewords(component.CodewordFaction).ToList(); + if (codeList.Count == 0) { if (component.FakeCodewords) - codeList = _traitorRuleSystem.GenerateTraitorCodewords(new TraitorRuleComponent()).ToList(); + codeList = _codewordSystem.GenerateCodewords(component.CodewordGenerator).ToList(); else codeList = [Loc.GetString("traitor-codes-none")]; } diff --git a/Resources/Prototypes/Codewords/codeword_factions.yml b/Resources/Prototypes/Codewords/codeword_factions.yml new file mode 100644 index 0000000000..9dc7e31eac --- /dev/null +++ b/Resources/Prototypes/Codewords/codeword_factions.yml @@ -0,0 +1,3 @@ +- type: codewordFaction + id: Traitor + generator: TraitorCodewordGenerator diff --git a/Resources/Prototypes/Codewords/codeword_generators.yml b/Resources/Prototypes/Codewords/codeword_generators.yml new file mode 100644 index 0000000000..c66fd37083 --- /dev/null +++ b/Resources/Prototypes/Codewords/codeword_generators.yml @@ -0,0 +1,6 @@ +- type: codewordGenerator + id: TraitorCodewordGenerator + words: + - Adjectives + - Verbs + amount: 4 From 076310bd5892265c808bcb7c47acd485852888aa Mon Sep 17 00:00:00 2001 From: Gentleman-Bird Date: Thu, 5 Jun 2025 19:20:44 -0400 Subject: [PATCH 07/63] Fix soap recipe so it actually works (#37923) Change soap recipe --- Resources/Prototypes/Recipes/Reactions/fun.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/Recipes/Reactions/fun.yml b/Resources/Prototypes/Recipes/Reactions/fun.yml index 3b5d104b98..e49f4631cd 100644 --- a/Resources/Prototypes/Recipes/Reactions/fun.yml +++ b/Resources/Prototypes/Recipes/Reactions/fun.yml @@ -31,10 +31,8 @@ reactants: Fat: amount: 15 - TableSalt: - amount: 10 - Water: - amount: 10 + Saline: + amount: 25 effects: - !type:CreateEntityReactionEffect entity: Soap From 6141b448eb0f13a0c0023b457aed7cb43df6ea38 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 5 Jun 2025 23:20:48 +0000 Subject: [PATCH 08/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 9b737d3fa8..a447b7f0c0 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,14 +1,4 @@ Entries: -- author: Velcroboy, ErhardSteinhauer, whatston3, MilonPL, Beck, ArtisticRoomba, ScarKy0 - changes: - - message: Smuggler stashes! Will get spawned as a round start event and can also - be found in a hacked ClothesMate. Will have loot from a large random pool. - type: Add - - message: Smuggler stashes can now be bought from the syndicate uplink for 2TC. - type: Add - id: 8107 - time: '2025-03-26T15:20:15.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/19460 - author: slarticodefast changes: - message: Ghosts of paradox clones now have a name modifier so they can be distinguished @@ -3929,3 +3919,10 @@ id: 8618 time: '2025-06-05T23:15:55.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/38059 +- author: Simyon + changes: + - message: Sleeper agents no longer have different codewords than round-start traitors. + type: Fix + id: 8619 + time: '2025-06-05T23:19:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37928 From 326dfa659baf2a5b8595307f8947c0b35d7a7649 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 5 Jun 2025 23:21:54 +0000 Subject: [PATCH 09/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a447b7f0c0..37da5a1675 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: Ghosts of paradox clones now have a name modifier so they can be distinguished - by other ghosts. - type: Tweak - id: 8108 - time: '2025-03-26T15:30:14.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35940 - author: slarticodefast changes: - message: Paradox clones of nuclear operatives and head revolutionaries now have @@ -3926,3 +3918,10 @@ id: 8619 time: '2025-06-05T23:19:41.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37928 +- author: Gentleman-Bird + changes: + - message: Fixed the "create soap" recipe so it can actually be made + type: Fix + id: 8620 + time: '2025-06-05T23:20:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37923 From 3d942e1cadc4c32c91e5af21995d584d2a0d8b92 Mon Sep 17 00:00:00 2001 From: Hitlinemoss <209321380+Hitlinemoss@users.noreply.github.com> Date: Thu, 5 Jun 2025 19:23:13 -0400 Subject: [PATCH 10/63] Added security mime mask (#37890) * Added security mime mask * Improved security mime mask equipped sprites * Improved security mime mask icon sprite * meta.json spacing fix --- .../VendingMachines/Inventories/secdrobe.yml | 1 + .../Entities/Clothing/Masks/masks.yml | 18 +++++++++++ .../equipped-MASK-hamster.png | Bin 0 -> 784 bytes .../equipped-MASK-reptilian.png | Bin 0 -> 703 bytes .../mime_security.rsi/equipped-MASK-vox.png | Bin 0 -> 818 bytes .../Mask/mime_security.rsi/equipped-MASK.png | Bin 0 -> 818 bytes .../Clothing/Mask/mime_security.rsi/icon.png | Bin 0 -> 555 bytes .../Clothing/Mask/mime_security.rsi/meta.json | 30 ++++++++++++++++++ 8 files changed, 49 insertions(+) create mode 100644 Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-hamster.png create mode 100644 Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-reptilian.png create mode 100644 Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-vox.png create mode 100644 Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK.png create mode 100644 Resources/Textures/Clothing/Mask/mime_security.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Mask/mime_security.rsi/meta.json diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml index b4526732a9..c9b9e3ffda 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml @@ -27,6 +27,7 @@ ClothingHeadHelmetJustice: 1 contrabandInventory: ClothingMaskClownSecurity: 1 + ClothingMaskMimeSecurity: 1 ToyFigurineSecurity: 1 ToyFigurineWarden: 1 ToyFigurineHeadOfSecurity: 1 diff --git a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml index 9f3db58e02..e45618b513 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/masks.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/masks.yml @@ -644,6 +644,24 @@ - type: Clothing sprite: Clothing/Mask/scaredmime.rsi +- type: entity + parent: [ClothingMaskMime, BaseSecurityContraband] + id: ClothingMaskMimeSecurity + name: security mime mask + description: You have the right to remain silent. + components: + - type: Sprite + sprite: Clothing/Mask/mime_security.rsi + - type: Clothing + sprite: Clothing/Mask/mime_security.rsi + - type: Armor + modifiers: + coefficients: + Blunt: 0.95 + Slash: 0.95 + Piercing: 0.95 + Heat: 0.95 + - type: entity parent: ClothingMaskBase id: ClothingMaskItalianMoustache diff --git a/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-hamster.png b/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-hamster.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd728e8d7b6761761482c6ccbd7806b0bd2e1a6 GIT binary patch literal 784 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QL70(Y)*K0-phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zo`rPgs}(>s+fpMu(>y)37&w3&Rt70XRt82O%L|C5p=^+AG#Ht|;!HrcAtMum0FaIX z;>>myuy_`b4FaB$j0`WB5j2{m3_z&~>vp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYkZf-Ij=K%}R?P+m%YIK6$B>G+x3d@eA9j#9x?f2>Ao_&X2^N(z zNuEblX5P4OwOOJ4fRY1`>#|?$3RZ@Ncf#Y`jn^$%nl1SLx2pd8ce|IA*JjQ(z3zI> zGVvLYUpFhm@}o=*my;L|WNu`5uqA?_Anr@-f^}2AR;}f||JUvJit)Q2m@e zkCx{xbvxgn@#^chb*_`Ywr{x4SP-SdV4*9bfrn(i~+KTqu&IK+gel1mFyyKn~m)L5NMKTVIZGL=w^$f-TBhrOgyF*tk vl40_i+nC9Bp7DN;>hHrWINf=IS>Pv&-EPaSH_ANiplJ1U^>bP0l+XkK=}-w` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-reptilian.png b/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-reptilian.png new file mode 100644 index 0000000000000000000000000000000000000000..764412f6f0f148e02fa0d307dd250519ebee471c GIT binary patch literal 703 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sDEfH31!Z9ZwBphSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zo`rPgs}(>s+fpMu(>y)37&w3&Rt70XRt82O%L|C5p=^+AG#Ht|;!HrcAtMum0FaIX z;>>myuy_`b4FWvnj0`WB5j2{m3_z&~>vp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknEcMzl`HMLIQxnlIQ8-7*Y}U_SQzfLk@$dZ1It24~udBp#$7oW-IIQ@wB~AU=~u}B_(u}WzwzpdyHjOyrMlf{J&pxKX!86 z_t^EZ>zG1jr{7-twQBE?HmT?P&c|JP)P6W|(U!A%$M!$(@^{|MaO>S?rJSv$TTfif zP&xfHC@uecQDu>;Isf%bYhq7iZJiXh`s?%c&H^l-E&BR%zMo$9alXurZ`XI-UAN|X zc4h6S6a$G9zwb;wnv{5~JTZ7;W!HJv^2W(!xl=;kTTcjG`3MvmV9>yI`LkngS)p4- z@eJdW=O-p{&3(%5_#tBbb$`>kx|trIf5ceL?dv)I_|kvj3x}k8+rIp+-8uWN*V_wA zroJq(>U{j;Oi7t%_w{QwT~prwHuIWfz~gnQaNvD?#=qH zn(1D}qNjpSsg$M#ip*TQ{?xsHeZP;rSbZUHJGVGL)Ilr6Ch~78c;vU8*WwdM$kWx& JWt~$(69Af{^rQd) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK-vox.png new file mode 100644 index 0000000000000000000000000000000000000000..c46f7d0b4d08cf1b6a56a45a45d68a50b2a96c25 GIT binary patch literal 818 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sDEfH31!Z9ZwBphSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zo`rPgs}(>s+fpMu(>y)37&w3&Rt70XRt82O%L|C5p=^+AG#Ht|;!HrcAtMum0FaIX z;>>myuy_`b4FWvnj0`WB5j2{m3_z&~>vp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknEcMzl`HMLIQxn^3c=8F{C2y?XC6sha5!MKU}|gQ)w5=;TZ=6 zJseCEp8qI6utmbd<41hK?39^@1SWNME#-)4W7vK3-MzQBO1Ql<%2hT0)}7fM{-Ew_ zRfjgC$n1qlO6y*;t&$MD9&~l8wat&8HF8G^>vDqh&TTx{{>h3nTx;H%%P%J+{)u@z z=kr$^uP=AD-F|!Ed+n}$yeIbU4iE2~7bo}fv+jbdtzO+nl`ii+uxZWryLsh{FP(_L zzV(sny&N;<%O;g8PcJ>cF+_`XZP;pw{sSdeOAkLhuz0%V@xOKclTW%l6W8A-*cEc@ z&>!xWL!JUhAMx5PVT(O;5EyJRVWTi5;i$u8$RYTMWDn>TA4uWHP+zQ-qOcHg~JwRhUnyzQqIGox)PB3FcHh3HLB zt+e>F@8u#}-P-GBj0=B!j$D5|Rpj(!=SQ3Zs~yC`R!{Bmxqjfh?%8Eaa~C7L`NQoC Y>#?b^jFZ}P*MWTQ>FVdQ&MBb@0N3&`4FCWD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK.png b/Resources/Textures/Clothing/Mask/mime_security.rsi/equipped-MASK.png new file mode 100644 index 0000000000000000000000000000000000000000..e099f659f65a60b3e0846057b165f5a9218e905f GIT binary patch literal 818 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DXP@=>&q9iy!t)x7$D3u`~F*C13&(AeP!Bo#s z&q6x$)e4}RZK)BSX`Y^13>-iXD}xjxD+42tvp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYknAJR(uwCCralG+%R^5W$B>G+x3e~89SRU>JFi>Y;566E+uCBw z{^`D;vKGBJh+ul%t}P_)7G7oHMsZ^&LJHxPoay&7>_~s%%y26Wp$z$aR=z z!#AOKb(WJJ^MofgcGK(j>wiCg{Ziicr|SYIA52h~Vc*W_D6q!T=E03WnnmFb+iy?R z=z8+|>d69&DSvOB%-in${Jf(?o4Jf!LC!ysoje|1wzZk((u{BBZGSXp^4T=y#~&s3 z*Zs28U(2&oo5AyuAVcAw=#LiblRh2z#~E}ri7kLsyf?#a_6=i!`HOA)BsyAW%=vU^ zwYdb#LGQhB^+$fZ&DPv{I{J;M##YZ;FH0Vse-SIU?$U-$QER6qO4uz`XVr*d^pI=3 zsC9hfe}PCHv88#F4(t_V-neN;1oO2+-bIh^%KnS*x}iVe&iX4{4nNa#D-GuQ?R`|a zpLr8&kK5w?f0@05M2Ej7GDR0T?b5*cn)WDh!N_4Hy?dOavp@ z3Xlx~Oh9v(z$$|*Er2YjE<*zYknHLPMd9Fi78*e2Bu^K|5DWjO6L0gi7;v~Oe6{G? z|NrIfWs4T1{eI`i)B5nn>MM=^gakxuban-)-kM_Dr}xcRuy~uI)H;R?OOXzSDVcG0 ztK_(KU$C6vvRWl~Hp7j Date: Thu, 5 Jun 2025 19:24:02 -0400 Subject: [PATCH 11/63] Reorganized Turret Prototypes (#37863) * Reorganized turret prototypes * Added circuit board to migrations * Fixed frequencies * Fixed typos and set the base control panel to abstract since it's technically not constructable yet * Fixed the typo in the migrations * Addressed changes * Whitespace fixes * Whitespace check fix --------- Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> --- .../Devices/Circuitboards/Machine/turrets.yml | 28 +++++++--- .../Weapons/Guns/Turrets/turrets_energy.yml | 54 ++++++++++++++----- .../Structures/Wallmounts/turret_controls.yml | 53 +++++++++++++----- Resources/migration.yml | 5 ++ 4 files changed, 105 insertions(+), 35 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/turrets.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/turrets.yml index 5bbf2bb596..d9d8a848c3 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/turrets.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/turrets.yml @@ -1,6 +1,7 @@ - type: entity - id: WeaponEnergyTurretStationMachineCircuitboard + abstract: true parent: BaseMachineCircuitboard + id: WeaponEnergyTurretStationMachineCircuitboardBase name: sentry turret machine board description: A machine printed circuit board for a sentry turret. components: @@ -13,7 +14,7 @@ TurretCompatibleWeapon: amount: 1 defaultPrototype: WeaponLaserCannon - examineName: construction-insert-info-examine-name-laser-cannon + examineName: construction-insert-info-examine-name-laser-cannon ProximitySensor: amount: 1 defaultPrototype: ProximitySensor @@ -21,16 +22,27 @@ PowerCell: amount: 1 defaultPrototype: PowerCellMedium - examineName: construction-insert-info-examine-name-power-cell - + examineName: construction-insert-info-examine-name-power-cell + - type: entity + parent: WeaponEnergyTurretStationMachineCircuitboardBase id: WeaponEnergyTurretAIMachineCircuitboard - parent: WeaponEnergyTurretStationMachineCircuitboard - name: AI sentry turret machine board - description: A machine printed circuit board for an AI sentry turret. + suffix: AI, Silicon components: - type: Sprite sprite: Objects/Misc/module.rsi state: command - type: MachineBoard - prototype: WeaponEnergyTurretAI \ No newline at end of file + prototype: WeaponEnergyTurretAI + +- type: entity + parent: WeaponEnergyTurretStationMachineCircuitboardBase + id: WeaponEnergyTurretSecurityMachineCircuitboard + suffix: Security + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: security + - type: MachineBoard + prototype: WeaponEnergyTurretSecurity + diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_energy.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_energy.yml index a8b3c9a88c..077d5dc5fd 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_energy.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_energy.yml @@ -1,7 +1,8 @@ - type: entity + abstract: true parent: [BaseWeaponEnergyTurret, ConstructibleMachine] - id: WeaponEnergyTurretStation - name: security turret + id: WeaponEnergyTurretStationBase + name: sentry turret description: A high-tech autonomous weapons system designed to keep unauthorized personnel out of sensitive areas. components: - type: Fixtures @@ -72,8 +73,6 @@ - type: NpcFactionMember factions: - AllHostile - - type: AccessReader - access: [["Security"]] - type: ProjectileBatteryAmmoProvider proto: BulletEnergyTurretDisabler fireCost: 100 @@ -83,11 +82,6 @@ fireCost: 100 - proto: BulletEnergyTurretLaser fireCost: 100 - - type: TurretTargetSettings - exemptAccessLevels: - - Security - - Borg - - BasicSilicon - type: DeployableTurret retractedDamageModifierSetId: Metallic deployedDamageModifierSetId: FlimsyMetallic @@ -140,16 +134,13 @@ locked: true unlockOnClick: false - type: LockedWiresPanel - - type: Machine - board: WeaponEnergyTurretStationMachineCircuitboard - type: UseDelay delay: 1.2 - type: entity - parent: WeaponEnergyTurretStation + parent: WeaponEnergyTurretStationBase id: WeaponEnergyTurretAI - name: AI sentry turret - description: A high-tech autonomous weapons system under the direct control of a local artifical intelligence. + suffix: AI, Silicon components: - type: AccessReader access: [["StationAi"], ["ResearchDirector"]] @@ -163,3 +154,38 @@ receiveFrequencyId: TurretControlAI transmitFrequencyId: TurretAI +- type: entity + parent: WeaponEnergyTurretStationBase + id: WeaponEnergyTurretSecurity + suffix: Security + components: + - type: AccessReader + access: [["StationAi"], ["Security"]] + - type: TurretTargetSettings + exemptAccessLevels: + - Security + - Borg + - BasicSilicon + - type: Machine + board: WeaponEnergyTurretSecurityMachineCircuitboard + - type: DeviceNetwork + receiveFrequencyId: TurretControl + transmitFrequencyId: Turret + +- type: entity + parent: WeaponEnergyTurretStationBase + id: WeaponEnergyTurretCommand + suffix: Command + components: + - type: AccessReader + access: [["StationAi"], ["Command"]] + - type: TurretTargetSettings + exemptAccessLevels: + - Command + - Borg + - BasicSilicon + - type: Machine + board: WeaponEnergyTurretSecurityMachineCircuitboard + - type: DeviceNetwork + receiveFrequencyId: TurretControl + transmitFrequencyId: Turret diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/turret_controls.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/turret_controls.yml index 95a3e74b1f..e65530509b 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/turret_controls.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/turret_controls.yml @@ -45,10 +45,11 @@ - Wallmount - type: entity + abstract: true parent: WeaponEnergyTurretControlPanelFrame - id: WeaponEnergyTurretStationControlPanel - name: security turret control panel - description: A wall-mounted interface for remotely configuring the operational parameters of linked security turrets. + id: WeaponEnergyTurretStationControlPanelBase + name: sentry turret control panel + description: A wall-mounted interface for remotely configuring the operational parameters of linked sentry turrets. components: - type: Appearance - type: Sprite @@ -79,13 +80,6 @@ 0: { state: stun } 1: { state: lethal } - type: StationAiWhitelist - - type: AccessReader - access: [["Security"]] - - type: TurretTargetSettings - exemptAccessLevels: - - Security - - Borg - - BasicSilicon - type: DeployableTurretController accessGroups: - Cargo @@ -172,10 +166,9 @@ # node: finish - type: entity - parent: WeaponEnergyTurretStationControlPanel + parent: WeaponEnergyTurretStationControlPanelBase id: WeaponEnergyTurretAIControlPanel - name: AI sentry turret control panel - description: A wall-mounted interface that allows a local artifical intelligence to adjust the operational parameters of linked sentry turrets. + suffix: AI, Silicon components: - type: AccessReader access: [["StationAi"], ["ResearchDirector"]] @@ -196,3 +189,37 @@ accessLevels: - BasicSilicon - Borg + +- type: entity + parent: WeaponEnergyTurretStationControlPanelBase + id: WeaponEnergyTurretSecurityControlPanel + suffix: Security + components: + - type: AccessReader + access: [["StationAi"], ["Security"]] + #- type: ContainerFill - Will be added in a later PR + # containers: + # board: + # - WeaponEnergyTurretSecurityControlPanelElectronics + - type: TurretTargetSettings + exemptAccessLevels: + - Security + - BasicSilicon + - Borg + +- type: entity + parent: WeaponEnergyTurretStationControlPanelBase + id: WeaponEnergyTurretCommandControlPanel + suffix: Command + components: + - type: AccessReader + access: [["StationAi"], ["Command"]] + #- type: ContainerFill - Will be added in a later PR + # containers: + # board: + # - WeaponEnergyTurretCommandControlPanelElectronics + - type: TurretTargetSettings + exemptAccessLevels: + - Command + - BasicSilicon + - Borg diff --git a/Resources/migration.yml b/Resources/migration.yml index 73f52a3423..d560bf8d6b 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -642,6 +642,11 @@ ClothingNeckCloakMiner: null MatterBinStockPart: MicroManipulatorStockPart CapacitorStockPart: MicroManipulatorStockPart +# 2025-05-26 Turrets +WeaponEnergyTurretStation: WeaponEnergyTurretSecurity +WeaponEnergyTurretStationControlPanel: WeaponEnergyTurretSecurityControlPanel +WeaponEnergyTurretStationMachineCircuitboard: WeaponEnergyTurretSecurityMachineCircuitboard + # 2025-05-30 SpawnHonkBot: SpawnMobHonkBot From c843bb8867716147327dff92740de77dc48876b0 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 5 Jun 2025 23:24:21 +0000 Subject: [PATCH 12/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 37da5a1675..fe6f16ce9a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: Paradox clones of nuclear operatives and head revolutionaries now have - the corresponding faction icon and need to be killed for a crew major victory. - type: Fix - id: 8109 - time: '2025-03-26T15:34:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35910 - author: slarticodefast changes: - message: Further improved item copying for paradox clones. @@ -3925,3 +3917,10 @@ id: 8620 time: '2025-06-05T23:20:44.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37923 +- author: Hitlinemoss + changes: + - message: The security mime mask has been added to the SecDrobe's manager inventory. + type: Add + id: 8621 + time: '2025-06-05T23:23:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37890 From daeeae3ac05069d0d1e002b839de1e40498286b0 Mon Sep 17 00:00:00 2001 From: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com> Date: Thu, 5 Jun 2025 16:26:31 -0700 Subject: [PATCH 13/63] Sellable syndicate contraband (#37835) * Sellable syndicate contraband * 1984 tests, laughible * Balancing --- .../Prototypes/Catalog/Fills/Items/toolboxes.yml | 2 ++ .../Prototypes/Entities/Clothing/Back/backpacks.yml | 2 ++ .../Prototypes/Entities/Clothing/Belt/belts.yml | 4 ++++ .../Prototypes/Entities/Clothing/Eyes/glasses.yml | 2 ++ .../Prototypes/Entities/Clothing/Hands/gloves.yml | 4 +++- .../Entities/Clothing/Head/eva-helmets.yml | 2 ++ Resources/Prototypes/Entities/Clothing/Head/hats.yml | 8 +++++--- Resources/Prototypes/Entities/Clothing/Head/misc.yml | 2 ++ .../Prototypes/Entities/Clothing/Neck/scarfs.yml | 4 ++++ .../Entities/Clothing/OuterClothing/armor.yml | 4 ++++ .../Entities/Clothing/OuterClothing/hardsuits.yml | 2 ++ .../Entities/Clothing/OuterClothing/softsuits.yml | 2 ++ .../Entities/Clothing/OuterClothing/suits.yml | 3 +++ .../Prototypes/Entities/Clothing/Shoes/magboots.yml | 2 ++ .../Entities/Clothing/Uniforms/jumpskirts.yml | 2 ++ .../Entities/Clothing/Uniforms/jumpsuits.yml | 2 ++ .../Objects/Devices/Circuitboards/law_boards.yml | 2 ++ .../Objects/Devices/Syndicate_Gadgets/camera_bug.yml | 4 +++- .../Devices/Syndicate_Gadgets/singularity_beacon.yml | 2 +- .../Entities/Objects/Devices/chameleon_projector.yml | 2 ++ .../Entities/Objects/Devices/encryption_keys.yml | 4 ++++ Resources/Prototypes/Entities/Objects/Fun/pai.yml | 2 ++ Resources/Prototypes/Entities/Objects/Fun/toys.yml | 2 ++ Resources/Prototypes/Entities/Objects/Misc/pen.yml | 2 ++ .../Entities/Objects/Misc/rubber_stamp.yml | 2 ++ .../Prototypes/Entities/Objects/Power/powersink.yml | 2 ++ .../Entities/Objects/Specific/Janitorial/soap.yml | 2 ++ .../Entities/Objects/Specific/Medical/hypospray.yml | 6 +++--- .../Objects/Specific/Robotics/borg_modules.yml | 4 ++++ .../Entities/Objects/Tools/access_breaker.yml | 2 ++ Resources/Prototypes/Entities/Objects/Tools/emag.yml | 2 ++ .../Prototypes/Entities/Objects/Tools/jammer.yml | 2 ++ .../Entities/Objects/Tools/jaws_of_life.yml | 2 ++ .../Prototypes/Entities/Objects/Tools/jetpacks.yml | 2 ++ .../Entities/Objects/Weapons/Bombs/plastic.yml | 2 ++ .../Entities/Objects/Weapons/Guns/LMGs/lmgs.yml | 2 ++ .../Objects/Weapons/Guns/Launchers/launchers.yml | 2 ++ .../Objects/Weapons/Guns/Pistols/pistols.yml | 4 ++++ .../Objects/Weapons/Guns/Revolvers/revolvers.yml | 4 +++- .../Entities/Objects/Weapons/Guns/SMGs/smgs.yml | 2 ++ .../Objects/Weapons/Guns/Shotguns/shotguns.yml | 2 +- .../Objects/Weapons/Guns/Snipers/snipers.yml | 4 ++++ .../Entities/Objects/Weapons/Melee/e_sword.yml | 2 ++ .../Entities/Objects/Weapons/Melee/knife.yml | 2 ++ .../Entities/Objects/Weapons/Throwable/grenades.yml | 12 ++++++++++++ .../Weapons/Throwable/projectile_grenades.yml | 4 ++++ .../Weapons/Throwable/scattering_grenades.yml | 4 ++++ .../Entities/Structures/Machines/bombs.yml | 2 ++ 48 files changed, 130 insertions(+), 11 deletions(-) diff --git a/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml b/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml index a4813fe41a..356fe98233 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml @@ -135,6 +135,8 @@ - id: Multitool - id: ClothingHandsGlovesCombat - id: ClothingMaskGasSyndicate + - type: StaticPrice + price: 1000 - type: entity id: ToolboxGoldFilled diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index 9053afacde..e2d3c209ea 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -282,6 +282,8 @@ grid: - 0,0,7,3 - 8,1,8,3 + - type: StaticPrice + price: 1000 #Special - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml index 27cd2921b8..fa6b256c46 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml @@ -612,6 +612,8 @@ - Gun - BallisticAmmoProvider - CartridgeAmmo + - type: StaticPrice + price: 500 - type: entity parent: ClothingBeltSecurity @@ -658,6 +660,8 @@ sprite: Clothing/Belt/militarywebbing.rsi - type: ExplosionResistance damageCoefficient: 0.1 + - type: StaticPrice + price: 500 - type: entity parent: ClothingBeltMilitaryWebbing diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml index c8fd728bf6..c451c7280a 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml @@ -124,6 +124,8 @@ sprite: Clothing/Eyes/Glasses/outlawglasses.rsi - type: VisionCorrection - type: IdentityBlocker + - type: StaticPrice + price: 500 - type: entity parent: ClothingEyesBase diff --git a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml index 9fd20a9791..e17e2ba59d 100644 --- a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml +++ b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml @@ -417,7 +417,7 @@ enum.MeleeSpeechUiKey.Key: type: MeleeSpeechBoundUserInterface - type: StaticPrice - price: 0 + price: 2500 - type: Tag tags: - Kangaroo @@ -555,6 +555,8 @@ tags: - WhitelistChameleon - Kangaroo + - type: StaticPrice + price: 2000 - type: entity name: stun knuckle dusters diff --git a/Resources/Prototypes/Entities/Clothing/Head/eva-helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/eva-helmets.yml index 3920a8a7af..945471fc79 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/eva-helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/eva-helmets.yml @@ -37,6 +37,8 @@ sprite: Clothing/Head/Helmets/eva_syndicate.rsi - type: Clothing sprite: Clothing/Head/Helmets/eva_syndicate.rsi + - type: StaticPrice + price: 500 # Suit is 1000 #Cosmonaut Helmet - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/Entities/Clothing/Head/hats.yml index a97941b389..addf952555 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hats.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hats.yml @@ -41,7 +41,7 @@ - type: Tag tags: - ClothMade - - Recyclable + - Recyclable - WhitelistChameleon - type: entity @@ -383,6 +383,8 @@ sprite: Clothing/Head/Hats/outlawhat.rsi - type: Clothing sprite: Clothing/Head/Hats/outlawhat.rsi + - type: StaticPrice + price: 500 - type: entity parent: ClothingHeadBase @@ -477,8 +479,8 @@ - state: icon-nobeard map: [ "foldedLayer" ] visible: true - - + + - type: entity parent: ClothingHeadBase diff --git a/Resources/Prototypes/Entities/Clothing/Head/misc.yml b/Resources/Prototypes/Entities/Clothing/Head/misc.yml index 711a9b0513..be8727008a 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/misc.yml @@ -218,6 +218,8 @@ sprite: Clothing/Head/Hats/catears.rsi - type: AddAccentClothing accent: OwOAccent + - type: StaticPrice + price: 15000 - type: entity parent: [ClothingHeadHatCatEars, BaseToggleClothing] diff --git a/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml b/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml index 22f92c4f21..fe037a888f 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml @@ -96,6 +96,8 @@ sprite: Clothing/Neck/Scarfs/syndiegreen.rsi - type: Clothing sprite: Clothing/Neck/Scarfs/syndiegreen.rsi + - type: StaticPrice + price: 500 - type: entity parent: [ ClothingScarfBase, BaseSyndicateContraband ] @@ -107,6 +109,8 @@ sprite: Clothing/Neck/Scarfs/syndiered.rsi - type: Clothing sprite: Clothing/Neck/Scarfs/syndiered.rsi + - type: StaticPrice + price: 500 - type: entity parent: [ ClothingScarfBase, BaseCentcommContraband ] diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml index c029c62afc..51605cb3f0 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml @@ -160,6 +160,8 @@ Heat: 0.9 - type: ExplosionResistance damageCoefficient: 0.9 + - type: StaticPrice + price: 1500 #Elite web vest - type: entity @@ -188,6 +190,8 @@ damageCoefficient: 0.5 - type: FireProtection reduction: 0.85 + - type: StaticPrice + price: 2500 #Mercenary web vest - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index 9668893b5f..fe0884fe54 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -535,6 +535,8 @@ - MonkeyWearable - Hardsuit - WhitelistChameleon + - type: StaticPrice + price: 5000 # Syndicate Medic Hardsuit - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml index f8de438402..caa341ea58 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml @@ -31,6 +31,8 @@ - SuitEVA - MonkeyWearable - WhitelistChameleon + - type: StaticPrice + price: 1000 # Helmet is 500 #Emergency EVA - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index acc5fd1886..1d32f2d52e 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -299,3 +299,6 @@ coolingCoefficient: 0.01 - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitCarp + - type: StaticPrice + price: 1500 + diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml index 1a8d7fcf40..cd5cd0181e 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml @@ -113,6 +113,8 @@ - type: Item sprite: null size: Normal + - type: StaticPrice + price: 1500 - type: entity parent: BaseAction diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml index 6396799cda..64cd197c69 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpskirts.yml @@ -521,6 +521,8 @@ sprite: Clothing/Uniforms/Jumpskirt/operative_s.rsi - type: Clothing sprite: Clothing/Uniforms/Jumpskirt/operative_s.rsi + - type: StaticPrice + price: 500 - type: entity parent: ClothingUniformSkirtBase diff --git a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml index b250b3fbd7..0f1a079320 100644 --- a/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/Uniforms/jumpsuits.yml @@ -855,6 +855,8 @@ sprite: Clothing/Uniforms/Jumpsuit/operative.rsi - type: Clothing sprite: Clothing/Uniforms/Jumpsuit/operative.rsi + - type: StaticPrice + price: 500 - type: entity parent: ClothingUniformBase diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/law_boards.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/law_boards.yml index 3a0b885a8c..45fa107108 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/law_boards.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/law_boards.yml @@ -142,6 +142,8 @@ - type: SiliconLawProvider laws: AntimovLawset lawUploadSound: /Audio/Ambience/Antag/silicon_lawboard_antimov.ogg + - type: StaticPrice + price: 10000 - type: entity id: NutimovCircuitBoard diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/camera_bug.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/camera_bug.yml index 4d6cc784af..3396ec6934 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/camera_bug.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/camera_bug.yml @@ -23,4 +23,6 @@ receiveFrequencyId: SurveillanceCamera transmitFrequencyId: SurveillanceCamera - type: WiredNetworkConnection - - type: SurveillanceCameraMonitor \ No newline at end of file + - type: SurveillanceCameraMonitor + - type: StaticPrice + price: 2000 diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml index fd24a1dc1a..28da7331d2 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/singularity_beacon.yml @@ -40,4 +40,4 @@ - type: ApcPowerReceiver powerLoad: 15000 - type: StaticPrice - price: 1500 + price: 7500 diff --git a/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml b/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml index 925bb3e86c..0aaf48020e 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml @@ -20,6 +20,8 @@ - MindContainer # no - Pda # PDAs currently make you invisible /!\ disguiseProto: ChameleonDisguise + - type: StaticPrice + price: 5000 - type: entity categories: [ HideSpawnMenu ] diff --git a/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml b/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml index 1dd77a7a78..0ad2417470 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml @@ -237,6 +237,8 @@ layers: - state: crypt_red - state: synd_label + - type: StaticPrice + price: 500 # 1000 for 2 - type: entity parent: [ EncryptionKey, BaseSiliconScienceContraband ] @@ -267,6 +269,8 @@ layers: - state: crypt_red - state: ai_label + - type: StaticPrice + price: 1000 - type: entity parent: EncryptionKey diff --git a/Resources/Prototypes/Entities/Objects/Fun/pai.yml b/Resources/Prototypes/Entities/Objects/Fun/pai.yml index 699d1eec2d..23227a65ee 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/pai.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/pai.yml @@ -127,6 +127,8 @@ Off: { state: syndicate-pai-off-overlay } Searching: { state: syndicate-pai-searching-overlay } On: { state: syndicate-pai-on-overlay } + - type: StaticPrice + price: 500 - type: entity parent: PersonalAI diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 1d92b2de94..06f46671c9 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -1576,6 +1576,8 @@ - type: Tag tags: - Balloon + - type: StaticPrice + price: 5000 # Entertainment. - type: entity parent: BaseItem diff --git a/Resources/Prototypes/Entities/Objects/Misc/pen.yml b/Resources/Prototypes/Entities/Objects/Misc/pen.yml index d62a10a663..bead4786b1 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/pen.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/pen.yml @@ -90,6 +90,8 @@ state: overpriced_pen - type: Item heldPrefix: overpriced_pen + - type: StaticPrice + price: 500 - type: entity name: CentComm pen diff --git a/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml b/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml index 0437d40baf..07a332afb1 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/rubber_stamp.yml @@ -221,6 +221,8 @@ stampState: "paper_stamp-syndicate" - type: Sprite state: stamp-syndicate + - type: StaticPrice + price: 1000 - type: entity name: warden's rubber stamp diff --git a/Resources/Prototypes/Entities/Objects/Power/powersink.yml b/Resources/Prototypes/Entities/Objects/Power/powersink.yml index 883483b645..342a1e8459 100644 --- a/Resources/Prototypes/Entities/Objects/Power/powersink.yml +++ b/Resources/Prototypes/Entities/Objects/Power/powersink.yml @@ -57,3 +57,5 @@ blacklist: tags: - GhostOnlyWarp + - type: StaticPrice + price: 3000 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml index 70ed762ca1..dc88de3ed6 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml @@ -141,6 +141,8 @@ - type: Residue residueAdjective: residue-slippery residueColor: residue-red + - type: StaticPrice + price: 500 - type: entity name: soaplet diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml index 20c3af9a51..bd8e78dd9a 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml @@ -560,7 +560,7 @@ onlyAffectsMobs: false injectOnly: true - type: StaticPrice - price: 500 + price: 1500 - type: entity name: hyperzine microinjector @@ -599,7 +599,7 @@ changeColor: false emptySpriteName: microstimpen_empty - type: StaticPrice - price: 100 + price: 583 # 3500 for 6 as a freaky fraction - type: entity name: combat medipen @@ -643,7 +643,7 @@ onlyAffectsMobs: false injectOnly: true - type: StaticPrice - price: 500 + price: 1500 - type: entity name: pen diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml index f80ba1a0e3..06c89e7833 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -932,6 +932,8 @@ - state: base-part-inhand-right - state: base-stripes-inhand-right color: "#7B0F12" + - type: StaticPrice + price: 2500 - type: entity id: BorgModuleOperative @@ -1019,6 +1021,8 @@ - state: base-part-inhand-right - state: base-stripes-inhand-right color: "#7B0F12" + - type: StaticPrice + price: 2000 # xenoborg modules - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Tools/access_breaker.yml b/Resources/Prototypes/Entities/Objects/Tools/access_breaker.yml index 15c1beba8e..55c7498578 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/access_breaker.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/access_breaker.yml @@ -20,3 +20,5 @@ components: - type: LimitedCharges - type: AutoRecharge + - type: StaticPrice + price: 2000 diff --git a/Resources/Prototypes/Entities/Objects/Tools/emag.yml b/Resources/Prototypes/Entities/Objects/Tools/emag.yml index 616772a4fc..f669abe68a 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/emag.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/emag.yml @@ -20,3 +20,5 @@ components: - type: LimitedCharges - type: AutoRecharge + - type: StaticPrice + price: 2500 diff --git a/Resources/Prototypes/Entities/Objects/Tools/jammer.yml b/Resources/Prototypes/Entities/Objects/Tools/jammer.yml index 0066c5826c..1fc42ad41f 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jammer.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jammer.yml @@ -48,6 +48,8 @@ Low: {state: jammer_low_charge} Medium: {state: jammer_medium_charge} High: {state: jammer_high_charge} + - type: StaticPrice + price: 1500 - type: entity parent: [RadioJammer, BaseXenoborgContraband] diff --git a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml index 202b7948e6..8c925b77ad 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml @@ -86,3 +86,5 @@ damage: types: Blunt: 14 + - type: StaticPrice + price: 1000 diff --git a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml index f70d2944c4..f579890ad4 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml @@ -126,6 +126,8 @@ sprite: Objects/Tanks/Jetpacks/black.rsi slots: - Back + - type: StaticPrice + price: 1000 # Filled black - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml index 8edc3ec9a7..7566c00de8 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml @@ -79,6 +79,8 @@ - type: HolidayRsiSwap sprite: festive: Objects/Weapons/Bombs/c4gift.rsi + - type: StaticPrice + price: 625 # 5000 for a bundle of 8 - type: entity name: seismic charge diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index 93f8177deb..80d71669a7 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -83,6 +83,8 @@ steps: 4 zeroVisible: true - type: Appearance + - type: StaticPrice + price: 10000 - type: entity name: L6C ROW diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index 96afa6f219..3ce821bc1c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -52,6 +52,8 @@ proto: GrenadeFrag soundInsert: path: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg + - type: StaticPrice + price: 10000 - type: entity parent: [ BaseWeaponLauncher, BaseGunWieldable, BaseMajorContraband ] diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml index 6f18cbe963..ed87a4edcb 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml @@ -100,6 +100,8 @@ containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot + - type: StaticPrice + price: 1000 - type: entity name: echis @@ -184,6 +186,8 @@ containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot + - type: StaticPrice + price: 1500 - type: entity name: mk 58 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml index f2693d5e2e..1cc54cc548 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml @@ -135,6 +135,8 @@ path: /Audio/Weapons/Guns/Gunshots/revolver.ogg params: volume: 2.25 + - type: StaticPrice + price: 1500 # Botany can shit these out like candy, but let's see how it goes - type: entity parent: WeaponRevolverPython @@ -179,4 +181,4 @@ capacity: 5 chambers: [ null, null, null, null, null ] ammoSlots: [ null, null, null, null, null ] - + diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index e2f1e4d38c..2710ee4818 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -118,6 +118,8 @@ steps: 6 zeroVisible: true - type: Appearance + - type: StaticPrice + price: 5000 - type: entity name: Drozd diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml index b2e8d0a14b..8998d23514 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml @@ -99,7 +99,7 @@ zeroVisible: true - type: Appearance - type: StaticPrice - price: 500 + price: 5000 - type: entity name: double-barreled shotgun diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml index a16ce82df3..420650afc1 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml @@ -47,6 +47,8 @@ - type: Sprite sprite: Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi - type: GunRequiresWield + - type: StaticPrice + price: 500 - type: entity name: Hristov @@ -79,6 +81,8 @@ - type: EyeCursorOffset maxOffset: 3 pvsIncrease: 0.3 + - type: StaticPrice + price: 3500 - type: entity name: musket diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index 0a51497696..f879e2891e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -90,6 +90,8 @@ map: [ "blade" ] - type: Item sprite: Objects/Weapons/Melee/e_sword-inhands.rsi + - type: StaticPrice + price: 2500 - type: entity name: energy dagger diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml index 84a66d1836..993c7eb6ce 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml @@ -302,3 +302,5 @@ sprite: Objects/Weapons/Melee/throwing_knife.rsi - type: ThrowingAngle angle: 225 + - type: StaticPrice + price: 500 # 2000 for a set of 4 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml index 6cc8eb82c7..eab8838d4e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml @@ -143,6 +143,8 @@ path: /Audio/Effects/minibombcountdown.ogg params: volume: 12 + - type: StaticPrice + price: 2000 - type: entity name: self destruct @@ -225,6 +227,8 @@ params: volume: 5 - type: DeleteOnTrigger + - type: StaticPrice + price: 1000 - type: entity name: whitehole grenade @@ -272,6 +276,8 @@ params: volume: 15 - type: DeleteOnTrigger + - type: StaticPrice + price: 1000 - type: entity name: the nuclear option @@ -367,6 +373,8 @@ - type: TimerTriggerVisuals primingSound: path: /Audio/Effects/countdown.ogg + - type: StaticPrice + price: 666 # 2000 for 3, I love fractions - type: entity name: holy hand grenade @@ -392,6 +400,8 @@ - type: TimerTriggerVisuals primingSound: path: /Audio/Effects/hallelujah.ogg + - type: StaticPrice + price: 10000 - type: entity parent: [ GrenadeBase, BaseSecurityContraband ] @@ -533,3 +543,5 @@ path: /Audio/Effects/minibombcountdown.ogg params: volume: 12 + - type: StaticPrice + price: 1000 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/projectile_grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/projectile_grenades.yml index 41fad224c4..b6e235292c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/projectile_grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/projectile_grenades.yml @@ -81,6 +81,8 @@ - type: EmitSoundOnTrigger sound: path: "/Audio/Weapons/Guns/Gunshots/batrifle.ogg" + - type: StaticPrice + price: 1500 - type: entity parent: [ProjectileGrenadeBase, BaseSyndicateContraband] @@ -107,3 +109,5 @@ - type: EmitSoundOnTrigger sound: path: "/Audio/Weapons/Guns/Gunshots/batrifle.ogg" + - type: StaticPrice + price: 1500 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/scattering_grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/scattering_grenades.yml index 0b5f694964..8e3cb12717 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/scattering_grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/scattering_grenades.yml @@ -98,6 +98,8 @@ - type: EmitSoundOnTrigger sound: path: "/Audio/Machines/door_lock_off.ogg" + - type: StaticPrice + price: 2500 - type: entity parent: [ScatteringGrenadeBase, BaseSyndicateContraband] @@ -145,6 +147,8 @@ - type: EmitSoundOnTrigger sound: path: "/Audio/Effects/flash_bang.ogg" + - type: StaticPrice + price: 1000 - type: entity parent: ScatteringGrenadeBase diff --git a/Resources/Prototypes/Entities/Structures/Machines/bombs.yml b/Resources/Prototypes/Entities/Structures/Machines/bombs.yml index 3679127e3d..65eb07f064 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/bombs.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/bombs.yml @@ -126,6 +126,8 @@ totalIntensity: 4000.0 intensitySlope: 3 maxIntensity: 400 + - type: StaticPrice + price: 10000 # Good luck! - type: entity parent: SyndicateBomb From 6fb613e87e060f5bab4ab70d7e931f5480d833c9 Mon Sep 17 00:00:00 2001 From: RedBookcase Date: Thu, 5 Jun 2025 16:27:01 -0700 Subject: [PATCH 14/63] Standardized running and walking speed debuffs for equipped gear. (#37828) Co-authored-by: RedBookcase --- .../Entities/Clothing/OuterClothing/armor.yml | 3 ++- .../Clothing/OuterClothing/base_clothingouter.yml | 2 +- .../Entities/Clothing/OuterClothing/bio.yml | 2 +- .../Entities/Clothing/OuterClothing/hardsuits.yml | 12 ++++++------ .../Entities/Clothing/OuterClothing/suits.yml | 2 +- .../Prototypes/Entities/Clothing/Shoes/magboots.yml | 8 ++++---- .../Prototypes/Entities/Clothing/Shoes/specific.yml | 4 ++-- .../Prototypes/Entities/Objects/Power/powersink.yml | 4 ++-- 8 files changed, 19 insertions(+), 18 deletions(-) diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml index 51605cb3f0..59a3603355 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml @@ -423,7 +423,7 @@ Heat: 0.9 Radiation: 0.8 - type: ClothingSpeedModifier - walkModifier: 0.7 + walkModifier: 0.65 sprintModifier: 0.65 - type: HeldSpeedModifier - type: ExplosionResistance @@ -450,6 +450,7 @@ Piercing: 0.4 - type: ClothingSpeedModifier walkModifier: 0.8 + sprintModifier: 0.8 - type: HeldSpeedModifier - type: ExplosionResistance damageCoefficient: 0.4 diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml index 4362b241ad..4f647b8680 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml @@ -115,7 +115,7 @@ heatingCoefficient: 0.01 coolingCoefficient: 0.01 - type: ClothingSpeedModifier - walkModifier: 0.4 + walkModifier: 0.6 sprintModifier: 0.6 - type: HeldSpeedModifier - type: Item diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/bio.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/bio.yml index fa550a83d6..f4a1828010 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/bio.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/bio.yml @@ -17,7 +17,7 @@ zombificationResistanceCoefficient: 0.35 - type: GroupExamine - type: ClothingSpeedModifier - walkModifier: 1 + walkModifier: 0.95 sprintModifier: 0.95 - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index fe0884fe54..876d309b54 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -92,7 +92,7 @@ Radiation: 0.3 #salv is supposed to have radiation hazards in the future Caustic: 0.8 - type: ClothingSpeedModifier - walkModifier: 0.9 + walkModifier: 0.8 sprintModifier: 0.8 - type: HeldSpeedModifier - type: ToggleableClothing @@ -352,7 +352,7 @@ Radiation: 0.0 Caustic: 0.7 - type: ClothingSpeedModifier - walkModifier: 0.75 + walkModifier: 0.8 sprintModifier: 0.8 - type: HeldSpeedModifier - type: ToggleableClothing @@ -379,7 +379,7 @@ - type: ZombificationResistance zombificationResistanceCoefficient: 0.4 - type: ClothingSpeedModifier - walkModifier: 0.9 + walkModifier: 0.95 sprintModifier: 0.95 - type: HeldSpeedModifier - type: ToggleableClothing @@ -488,7 +488,7 @@ Radiation: 0.5 Caustic: 0.8 - type: ClothingSpeedModifier - walkModifier: 0.85 + walkModifier: 0.9 sprintModifier: 0.9 - type: HeldSpeedModifier - type: ToggleableClothing @@ -591,7 +591,7 @@ - type: Item size: Huge - type: ClothingSpeedModifier - walkModifier: 1.0 + walkModifier: 0.9 sprintModifier: 0.9 - type: HeldSpeedModifier - type: ToggleableClothing @@ -659,7 +659,7 @@ Radiation: 0.2 Caustic: 0.2 - type: ClothingSpeedModifier - walkModifier: 0.9 + walkModifier: 0.65 sprintModifier: 0.65 - type: HeldSpeedModifier - type: ToggleableClothing diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index 1d32f2d52e..e053801d33 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -64,7 +64,7 @@ Heat: 0.8 Cold: 0.8 - type: ClothingSpeedModifier - walkModifier: 0.8 + walkModifier: 0.7 sprintModifier: 0.7 - type: HeldSpeedModifier - type: GroupExamine diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml index cd5cd0181e..0e9873780f 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml @@ -24,7 +24,7 @@ prefixOn: on - type: Magboots - type: ClothingSpeedModifier - walkModifier: 0.85 + walkModifier: 0.8 sprintModifier: 0.8 - type: Appearance - type: GenericVisualizer @@ -82,8 +82,8 @@ description: These would look fetching on a fetcher like you. components: - type: ClothingSpeedModifier - walkModifier: 1.10 #PVS isn't too much of an issue when you are blind... - sprintModifier: 1.10 + walkModifier: 1.1 #PVS isn't too much of an issue when you are blind... + sprintModifier: 1.1 - type: StaticPrice price: 3000 @@ -99,7 +99,7 @@ - type: Clothing sprite: Clothing/Shoes/Boots/magboots-syndicate.rsi - type: ClothingSpeedModifier - walkModifier: 0.95 + walkModifier: 0.9 sprintModifier: 0.9 - type: GasTank outputPressure: 42.6 diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml index 812bc07fb0..ebf304557e 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml @@ -135,7 +135,7 @@ - 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 + walkModifier: 1.3 sprintModifier: 1.3 - type: FootstepModifier footstepSoundCollection: null @@ -259,7 +259,7 @@ size: Small sprite: Clothing/Shoes/Specific/large_clown.rsi - type: ClothingSpeedModifier - walkModifier: 0.85 + walkModifier: 0.8 sprintModifier: 0.8 - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Power/powersink.yml b/Resources/Prototypes/Entities/Objects/Power/powersink.yml index 342a1e8459..7385b9a825 100644 --- a/Resources/Prototypes/Entities/Objects/Power/powersink.yml +++ b/Resources/Prototypes/Entities/Objects/Power/powersink.yml @@ -8,8 +8,8 @@ size: Huge - type: MultiHandedItem - type: HeldSpeedModifier #verrryy heavy - walkModifier: 0.60 - sprintModifier: 0.60 + walkModifier: 0.6 + sprintModifier: 0.6 - type: NodeContainer examinable: true nodes: From 4cbfd1931285a80b5f390e62dc8ace1e409ae8a0 Mon Sep 17 00:00:00 2001 From: vmzd <33641966+vmzd@users.noreply.github.com> Date: Thu, 5 Jun 2025 20:27:33 -0300 Subject: [PATCH 15/63] Add hair back to hardhats (#38086) adds hair back to hardhats --- Resources/Prototypes/Entities/Clothing/Head/hardhats.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Resources/Prototypes/Entities/Clothing/Head/hardhats.yml b/Resources/Prototypes/Entities/Clothing/Head/hardhats.yml index 8809ad4c46..e0c6557c97 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hardhats.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hardhats.yml @@ -66,11 +66,6 @@ - type: Tag tags: - WhitelistChameleon - - type: HideLayerClothing - layers: - Hair: HEAD - HeadTop: HEAD - HeadSide: HEAD - type: entity parent: ClothingHeadHatHardhatBase From 110bcbe595d93008c115deed782ade5ce9df3d6a Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 5 Jun 2025 23:28:09 +0000 Subject: [PATCH 16/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index fe6f16ce9a..72af07f782 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,19 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: Further improved item copying for paradox clones. - type: Tweak - id: 8110 - time: '2025-03-26T16:13:03.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35993 -- author: Centronias - changes: - - message: Raw meatballs, like steaks, can now be cooked in the microwave or on - a grill. - type: Add - id: 8111 - time: '2025-03-27T06:26:13.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36003 - author: SlamBamActionman changes: - message: Liltenhead! Thank you for over 2 years of update videos, and congrats @@ -3924,3 +3909,19 @@ id: 8621 time: '2025-06-05T23:23:14.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37890 +- author: ArtisticRoomba + changes: + - message: Most syndicate contraband have been given sell prices (depending on the + "power" of the item) to discourage powergaming and encourage Security's interaction + with Departmental Economy. + type: Add + id: 8622 + time: '2025-06-05T23:26:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37835 +- author: RedBookcase + changes: + - message: The running and walking speed debuffs on equipped gear have been standardized. + type: Tweak + id: 8623 + time: '2025-06-05T23:27:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37828 From db4d419f7bcef1dfe8809f4f7ae53bfae5faafea Mon Sep 17 00:00:00 2001 From: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Date: Thu, 5 Jun 2025 18:28:55 -0500 Subject: [PATCH 17/63] Access Reader Refactor (#37772) * Initial commit * Integration test fix * Removed redundant dirtying of accessreader --- .../Tests/Access/AccessReaderTest.cs | 43 ++- Content.Server/Access/AccessWireAction.cs | 14 +- Content.Server/Access/AddAccessLogCommand.cs | 4 +- Content.Server/Access/LogWireAction.cs | 10 +- .../Access/Systems/AccessOverriderSystem.cs | 19 +- .../Systems/DoorElectronicsSystem.cs | 2 +- .../Components/AccessReaderComponent.cs | 27 +- .../Access/Systems/AccessReaderSystem.cs | 362 ++++++++++++++++-- 8 files changed, 374 insertions(+), 107 deletions(-) diff --git a/Content.IntegrationTests/Tests/Access/AccessReaderTest.cs b/Content.IntegrationTests/Tests/Access/AccessReaderTest.cs index 3f703ce774..b98f030b06 100644 --- a/Content.IntegrationTests/Tests/Access/AccessReaderTest.cs +++ b/Content.IntegrationTests/Tests/Access/AccessReaderTest.cs @@ -1,9 +1,9 @@ using System.Collections.Generic; -using System.Linq; using Content.Shared.Access; using Content.Shared.Access.Components; using Content.Shared.Access.Systems; using Robust.Shared.GameObjects; +using Robust.Shared.Map; using Robust.Shared.Prototypes; namespace Content.IntegrationTests.Tests.Access @@ -12,6 +12,15 @@ namespace Content.IntegrationTests.Tests.Access [TestOf(typeof(AccessReaderComponent))] public sealed class AccessReaderTest { + [TestPrototypes] + private const string Prototypes = @" +- type: entity + id: TestAccessReader + name: access reader + components: + - type: AccessReader +"; + [Test] public async Task TestTags() { @@ -19,13 +28,13 @@ namespace Content.IntegrationTests.Tests.Access var server = pair.Server; var entityManager = server.ResolveDependency(); - await server.WaitAssertion(() => { var system = entityManager.System(); + var ent = entityManager.SpawnEntity("TestAccessReader", MapCoordinates.Nullspace); + var reader = new Entity(ent, entityManager.GetComponent(ent)); // test empty - var reader = new AccessReaderComponent(); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "Foo" }, reader), Is.True); @@ -34,8 +43,7 @@ namespace Content.IntegrationTests.Tests.Access }); // test deny - reader = new AccessReaderComponent(); - reader.DenyTags.Add("A"); + system.AddDenyTag(reader, "A"); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "Foo" }, reader), Is.True); @@ -43,10 +51,10 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "A", "Foo" }, reader), Is.False); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.True); }); + system.ClearDenyTags(reader); // test one list - reader = new AccessReaderComponent(); - reader.AccessLists.Add(new HashSet> { "A" }); + system.AddAccess(reader, "A"); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.True); @@ -54,10 +62,10 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "A", "B" }, reader), Is.True); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); + system.ClearAccesses(reader); // test one list - two items - reader = new AccessReaderComponent(); - reader.AccessLists.Add(new HashSet> { "A", "B" }); + system.AddAccess(reader, new HashSet> { "A", "B" }); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.False); @@ -65,11 +73,14 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "A", "B" }, reader), Is.True); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); + system.ClearAccesses(reader); // test two list - reader = new AccessReaderComponent(); - reader.AccessLists.Add(new HashSet> { "A" }); - reader.AccessLists.Add(new HashSet> { "B", "C" }); + var accesses = new List>>() { + new HashSet> () { "A" }, + new HashSet> () { "B", "C" } + }; + system.AddAccesses(reader, accesses); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.True); @@ -79,11 +90,11 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "C", "B", "A" }, reader), Is.True); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); + system.ClearAccesses(reader); // test deny list - reader = new AccessReaderComponent(); - reader.AccessLists.Add(new HashSet> { "A" }); - reader.DenyTags.Add("B"); + system.AddAccess(reader, new HashSet> { "A" }); + system.AddDenyTag(reader, "B"); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.True); @@ -91,6 +102,8 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "A", "B" }, reader), Is.False); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); + system.ClearAccesses(reader); + system.ClearDenyTags(reader); }); await pair.CleanReturnAsync(); } diff --git a/Content.Server/Access/AccessWireAction.cs b/Content.Server/Access/AccessWireAction.cs index b3beb3967b..2682fff286 100644 --- a/Content.Server/Access/AccessWireAction.cs +++ b/Content.Server/Access/AccessWireAction.cs @@ -1,6 +1,7 @@ using Content.Server.Wires; using Content.Shared.Access; using Content.Shared.Access.Components; +using Content.Shared.Access.Systems; using Content.Shared.Wires; namespace Content.Server.Access; @@ -23,23 +24,21 @@ public sealed partial class AccessWireAction : ComponentWireAction().SetActive((wire.Owner, comp), false); + return true; } public override bool Mend(EntityUid user, Wire wire, AccessReaderComponent comp) { - comp.Enabled = true; - EntityManager.Dirty(wire.Owner, comp); + EntityManager.System().SetActive((wire.Owner, comp), true); return true; } public override void Pulse(EntityUid user, Wire wire, AccessReaderComponent comp) { - comp.Enabled = false; - EntityManager.Dirty(wire.Owner, comp); + EntityManager.System().SetActive((wire.Owner, comp), false); WiresSystem.StartWireAction(wire.Owner, _pulseTimeout, PulseTimeoutKey.Key, new TimedWireEvent(AwaitPulseCancel, wire)); } @@ -57,8 +56,7 @@ public sealed partial class AccessWireAction : ComponentWireAction(wire.Owner, out var access)) { - access.Enabled = true; - EntityManager.Dirty(wire.Owner, access); + EntityManager.System().SetActive((wire.Owner, access), true); } } } diff --git a/Content.Server/Access/AddAccessLogCommand.cs b/Content.Server/Access/AddAccessLogCommand.cs index f55a9b8f1e..e68a58d165 100644 --- a/Content.Server/Access/AddAccessLogCommand.cs +++ b/Content.Server/Access/AddAccessLogCommand.cs @@ -1,8 +1,8 @@ using Content.Server.Administration; using Content.Shared.Access.Components; +using Content.Shared.Access.Systems; using Content.Shared.Administration; using Robust.Shared.Toolshed; -using Robust.Shared.Toolshed.Syntax; namespace Content.Server.Access; @@ -19,7 +19,7 @@ public sealed class AddAccessLogCommand : ToolshedCommand ctx.WriteLine($"WARNING: Surpassing the limit of the log by {accessLogCount - accessReader.AccessLogLimit+1} entries!"); var accessTime = TimeSpan.FromSeconds(seconds); - accessReader.AccessLog.Enqueue(new AccessRecord(accessTime, accessor)); + EntityManager.System().LogAccess((input, accessReader), accessor, accessTime, true); ctx.WriteLine($"Successfully added access log to {input} with this information inside:\n " + $"Time of access: {accessTime}\n " + $"Accessed by: {accessor}"); diff --git a/Content.Server/Access/LogWireAction.cs b/Content.Server/Access/LogWireAction.cs index 837cf420d5..d6ba3dbfcd 100644 --- a/Content.Server/Access/LogWireAction.cs +++ b/Content.Server/Access/LogWireAction.cs @@ -37,21 +37,21 @@ public sealed partial class LogWireAction : ComponentWireAction().SetLoggingActive((wire.Owner, comp), false); + return true; } public override bool Mend(EntityUid user, Wire wire, AccessReaderComponent comp) { - comp.LoggingDisabled = false; + EntityManager.System().SetLoggingActive((wire.Owner, comp), true); return true; } public override void Pulse(EntityUid user, Wire wire, AccessReaderComponent comp) { _access.LogAccess((wire.Owner, comp), Loc.GetString(PulseLog)); - comp.LoggingDisabled = true; + EntityManager.System().SetLoggingActive((wire.Owner, comp), false); WiresSystem.StartWireAction(wire.Owner, PulseTimeout, PulseTimeoutKey.Key, new TimedWireEvent(AwaitPulseCancel, wire)); } @@ -64,7 +64,7 @@ public sealed partial class LogWireAction : ComponentWireAction(wire.Owner, out var comp)) - comp.LoggingDisabled = false; + EntityManager.System().SetLoggingActive((wire.Owner, comp), true); } private enum PulseTimeoutKey : byte diff --git a/Content.Server/Access/Systems/AccessOverriderSystem.cs b/Content.Server/Access/Systems/AccessOverriderSystem.cs index 4062909d75..51d35c50a4 100644 --- a/Content.Server/Access/Systems/AccessOverriderSystem.cs +++ b/Content.Server/Access/Systems/AccessOverriderSystem.cs @@ -168,21 +168,6 @@ public sealed class AccessOverriderSystem : SharedAccessOverriderSystem return accessList; } - private List>> ConvertAccessListToHashSet(List> accessList) - { - List>> accessHashsets = new List>>(); - - if (accessList != null && accessList.Any()) - { - foreach (ProtoId access in accessList) - { - accessHashsets.Add(new HashSet>() { access }); - } - } - - return accessHashsets; - } - /// /// Called whenever an access button is pressed, adding or removing that access requirement from the target access reader. /// @@ -244,12 +229,10 @@ public sealed class AccessOverriderSystem : SharedAccessOverriderSystem _adminLogger.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(player):player} has modified {ToPrettyString(accessReaderEnt.Value):entity} with the following allowed access level holders: [{string.Join(", ", addedTags.Union(removedTags))}] [{string.Join(", ", newAccessList)}]"); - accessReaderEnt.Value.Comp.AccessLists = ConvertAccessListToHashSet(newAccessList); + _accessReader.SetAccesses(accessReaderEnt.Value, newAccessList); var ev = new OnAccessOverriderAccessUpdatedEvent(player); RaiseLocalEvent(component.TargetAccessReaderId, ref ev); - - Dirty(accessReaderEnt.Value); } /// diff --git a/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs b/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs index af9ccadd91..af2738d105 100644 --- a/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs +++ b/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs @@ -48,7 +48,7 @@ public sealed class DoorElectronicsSystem : EntitySystem DoorElectronicsUpdateConfigurationMessage args) { var accessReader = EnsureComp(uid); - _accessReader.SetAccesses(uid, accessReader, args.AccessList); + _accessReader.SetAccesses((uid, accessReader), args.AccessList); } private void OnAccessReaderChanged( diff --git a/Content.Shared/Access/Components/AccessReaderComponent.cs b/Content.Shared/Access/Components/AccessReaderComponent.cs index 0219fd2b1a..6c2416fdf4 100644 --- a/Content.Shared/Access/Components/AccessReaderComponent.cs +++ b/Content.Shared/Access/Components/AccessReaderComponent.cs @@ -1,8 +1,8 @@ +using Content.Shared.Access.Systems; using Content.Shared.StationRecords; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set; namespace Content.Shared.Access.Components; @@ -11,10 +11,11 @@ namespace Content.Shared.Access.Components; /// and allows checking if something or somebody is authorized with these access levels. /// [RegisterComponent, NetworkedComponent] +[Access(typeof(AccessReaderSystem))] public sealed partial class AccessReaderComponent : Component { /// - /// Whether or not the accessreader is enabled. + /// Whether or not the access reader is enabled. /// If not, it will always let people through. /// [DataField] @@ -23,7 +24,6 @@ public sealed partial class AccessReaderComponent : Component /// /// The set of tags that will automatically deny an allowed check, if any of them are present. /// - [ViewVariables(VVAccess.ReadWrite)] [DataField] public HashSet> DenyTags = new(); @@ -31,12 +31,11 @@ public sealed partial class AccessReaderComponent : Component /// List of access groups that grant access to this reader. Only a single matching group is required to gain access. /// A group matches if it is a subset of the set being checked against. /// - [DataField("access")] [ViewVariables(VVAccess.ReadWrite)] + [DataField("access")] public List>> AccessLists = new(); /// - /// A list of s that grant access. Only a single matching key is required to gain - /// access. + /// A list of s that grant access. Only a single matching key is required to gain access. /// [DataField] public HashSet AccessKeys = new(); @@ -54,7 +53,7 @@ public sealed partial class AccessReaderComponent : Component public string? ContainerAccessProvider; /// - /// A list of past authentications + /// A list of past authentications. /// [DataField] public Queue AccessLog = new(); @@ -62,7 +61,7 @@ public sealed partial class AccessReaderComponent : Component /// /// A limit on the max size of /// - [DataField, ViewVariables(VVAccess.ReadWrite)] + [DataField] public int AccessLogLimit = 20; /// @@ -95,15 +94,10 @@ public readonly partial record struct AccessRecord( public sealed class AccessReaderComponentState : ComponentState { public bool Enabled; - public HashSet> DenyTags; - public List>> AccessLists; - public List<(NetEntity, uint)> AccessKeys; - public Queue AccessLog; - public int AccessLogLimit; public AccessReaderComponentState(bool enabled, HashSet> denyTags, List>> accessLists, List<(NetEntity, uint)> accessKeys, Queue accessLog, int accessLogLimit) @@ -117,9 +111,4 @@ public sealed class AccessReaderComponentState : ComponentState } } -public sealed class AccessReaderConfigurationChangedEvent : EntityEventArgs -{ - public AccessReaderConfigurationChangedEvent() - { - } -} +public sealed class AccessReaderConfigurationChangedEvent : EntityEventArgs; diff --git a/Content.Shared/Access/Systems/AccessReaderSystem.cs b/Content.Shared/Access/Systems/AccessReaderSystem.cs index 74cf74274d..186aef5305 100644 --- a/Content.Shared/Access/Systems/AccessReaderSystem.cs +++ b/Content.Shared/Access/Systems/AccessReaderSystem.cs @@ -3,17 +3,17 @@ using System.Linq; using Content.Shared.Access.Components; using Content.Shared.DeviceLinking.Events; using Content.Shared.Emag.Systems; +using Content.Shared.GameTicking; using Content.Shared.Hands.EntitySystems; +using Content.Shared.IdentityManagement; using Content.Shared.Inventory; using Content.Shared.NameIdentifier; using Content.Shared.PDA; using Content.Shared.StationRecords; -using Robust.Shared.Containers; -using Robust.Shared.GameStates; -using Content.Shared.GameTicking; -using Content.Shared.IdentityManagement; using Content.Shared.Tag; +using Robust.Shared.Containers; using Robust.Shared.Collections; +using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Timing; @@ -128,6 +128,11 @@ public sealed class AccessReaderSystem : EntitySystem return true; } + /// + /// Searches an entity for an access reader. This is either the entity itself or an entity in its . + /// + /// The entity being searched for an access reader. + /// The returned access reader entity. public bool GetMainAccessReader(EntityUid uid, [NotNullWhen(true)] out Entity? ent) { ent = null; @@ -157,6 +162,10 @@ public sealed class AccessReaderSystem : EntitySystem /// /// Check whether the given access permissions satisfy an access reader's requirements. /// + /// A collection of access permissions being used on the access reader. + /// A collection of station record keys being used on the access reader. + /// The entity being checked. + /// The access reader being checked. public bool IsAllowed( ICollection> access, ICollection stationKeys, @@ -199,8 +208,8 @@ public sealed class AccessReaderSystem : EntitySystem /// /// Compares the given tags with the readers access list to see if it is allowed. /// - /// A list of access tags - /// An access reader to check against + /// A list of access tags. + /// The access reader to check against. public bool AreAccessTagsAllowed(ICollection> accessTags, AccessReaderComponent reader) { if (reader.DenyTags.Overlaps(accessTags)) @@ -228,6 +237,8 @@ public sealed class AccessReaderSystem : EntitySystem /// /// Compares the given stationrecordkeys with the accessreader to see if it is allowed. /// + /// The collection of station record keys being used against the access reader. + /// The access reader that is being checked. public bool AreStationRecordKeysAllowed(ICollection keys, AccessReaderComponent reader) { foreach (var key in reader.AccessKeys) @@ -240,8 +251,9 @@ public sealed class AccessReaderSystem : EntitySystem } /// - /// Finds all the items that could potentially give access to a given entity + /// Finds all the items that could potentially give access to an entity. /// + /// The entity that is being searched. public HashSet FindPotentialAccessItems(EntityUid uid) { FindAccessItemsInventory(uid, out var items); @@ -261,7 +273,7 @@ public sealed class AccessReaderSystem : EntitySystem } /// - /// Finds the access tags on the given entity + /// Finds the access tags on an entity. /// /// The entity that is being searched. /// All of the items to search for access. If none are passed in, will be used. @@ -277,14 +289,14 @@ public sealed class AccessReaderSystem : EntitySystem FindAccessTagsItem(ent, ref tags, ref owned); } - return (ICollection>?) tags ?? Array.Empty>(); + return (ICollection>?)tags ?? Array.Empty>(); } /// - /// Finds the access tags on the given entity + /// Finds any station record keys on an entity. /// /// The entity that is being searched. - /// + /// A collection of the station record keys that were found. /// All of the items to search for access. If none are passed in, will be used. public bool FindStationRecordKeys(EntityUid uid, out ICollection recordKeys, HashSet? items = null) { @@ -302,11 +314,12 @@ public sealed class AccessReaderSystem : EntitySystem } /// - /// Try to find on this item - /// or inside this item (if it's pda) - /// This version merges into a set or replaces the set. - /// If owned is false, the existing tag-set "isn't ours" and can't be merged with (is read-only). + /// Try to find on this item or inside this item (if it's a PDA). + /// This version merges into a set or replaces the set. /// + /// The entity that is being searched. + /// The access tags being merged or replaced. + /// If true, the tags will be merged. Otherwise they are replaced. private void FindAccessTagsItem(EntityUid uid, ref HashSet>? tags, ref bool owned) { if (!FindAccessTagsItem(uid, out var targetTags)) @@ -333,25 +346,287 @@ public sealed class AccessReaderSystem : EntitySystem } } - public void SetAccesses(EntityUid uid, AccessReaderComponent component, List> accesses) + #region: AccessLists API + + /// + /// Clears the entity's . + /// + /// The access reader entity which is having its access permissions cleared. + public void ClearAccesses(Entity ent) { - component.AccessLists.Clear(); - foreach (var access in accesses) - { - component.AccessLists.Add(new HashSet>(){access}); - } - Dirty(uid, component); - RaiseLocalEvent(uid, new AccessReaderConfigurationChangedEvent()); + ent.Comp.AccessLists.Clear(); + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); } + /// + /// Replaces the access permissions in an entity's with a supplied list. + /// + /// The access reader entity which is having its list of access permissions replaced. + /// The list of access permissions replacing the original one. + public void SetAccesses(Entity ent, List>> accesses) + { + ent.Comp.AccessLists.Clear(); + + AddAccesses(ent, accesses); + } + + /// + public void SetAccesses(Entity ent, List> accesses) + { + ent.Comp.AccessLists.Clear(); + + AddAccesses(ent, accesses); + } + + /// + /// Adds a collection of access permissions to an access reader entity's + /// + /// The access reader entity to which the new access permissions are being added. + /// The list of access permissions being added. + public void AddAccesses(Entity ent, List>> accesses) + { + foreach (var access in accesses) + { + AddAccess(ent, access, false); + } + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); + } + + /// + public void AddAccesses(Entity ent, List> accesses) + { + foreach (var access in accesses) + { + AddAccess(ent, access, false); + } + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); + } + + /// + /// Adds an access permission to an access reader entity's + /// + /// The access reader entity to which the access permission is being added. + /// The access permission being added. + /// If true, the component will be marked as changed afterward. + public void AddAccess(Entity ent, HashSet> access, bool dirty = true) + { + ent.Comp.AccessLists.Add(access); + + if (!dirty) + return; + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); + } + + /// + public void AddAccess(Entity ent, ProtoId access, bool dirty = true) + { + AddAccess(ent, new HashSet>() { access }, dirty); + } + + /// + /// Removes a collection of access permissions from an access reader entity's + /// + /// The access reader entity from which the access permissions are being removed. + /// The list of access permissions being removed. + public void RemoveAccesses(Entity ent, List>> accesses) + { + foreach (var access in accesses) + { + RemoveAccess(ent, access, false); + } + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); + } + + /// + public void RemoveAccesses(Entity ent, List> accesses) + { + foreach (var access in accesses) + { + RemoveAccess(ent, access, false); + } + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); + } + + /// + /// Removes an access permission from an access reader entity's + /// + /// The access reader entity from which the access permission is being removed. + /// The access permission being removed. + /// If true, the component will be marked as changed afterward. + public void RemoveAccess(Entity ent, HashSet> access, bool dirty = true) + { + for (int i = ent.Comp.AccessLists.Count - 1; i >= 0; i--) + { + if (ent.Comp.AccessLists[i].SetEquals(access)) + { + ent.Comp.AccessLists.RemoveAt(i); + } + } + + if (!dirty) + return; + + Dirty(ent); + RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); + } + + /// + public void RemoveAccess(Entity ent, ProtoId access, bool dirty = true) + { + RemoveAccess(ent, new HashSet>() { access }, dirty); + } + + #endregion + + #region: AccessKeys API + + /// + /// Clears all access keys from an access reader. + /// + /// The access reader entity. + public void ClearAccessKeys(Entity ent) + { + ent.Comp.AccessKeys.Clear(); + Dirty(ent); + } + + /// + /// Replaces all access keys on an access reader with those from a supplied list. + /// + /// The access reader entity. + /// The new access keys that are replacing the old ones. + public void SetAccessKeys(Entity ent, HashSet keys) + { + ent.Comp.AccessKeys.Clear(); + + foreach (var key in keys) + { + ent.Comp.AccessKeys.Add(key); + } + + Dirty(ent); + } + + /// + /// Adds an access key to an access reader. + /// + /// The access reader entity. + /// The access key being added. + public void AddAccessKey(Entity ent, StationRecordKey key) + { + ent.Comp.AccessKeys.Add(key); + Dirty(ent); + } + + /// + /// Removes an access key from an access reader. + /// + /// The access reader entity. + /// The access key being removed. + public void RemoveAccessKey(Entity ent, StationRecordKey key) + { + ent.Comp.AccessKeys.Remove(key); + Dirty(ent); + } + + #endregion + + #region: DenyTags API + + /// + /// Clears all deny tags from an access reader. + /// + /// The access reader entity. + public void ClearDenyTags(Entity ent) + { + ent.Comp.DenyTags.Clear(); + Dirty(ent); + } + + /// + /// Replaces all deny tags on an access reader with those from a supplied list. + /// + /// The access reader entity. + /// The new tags that are replacing the old. + public void SetDenyTags(Entity ent, HashSet> tags) + { + ent.Comp.DenyTags.Clear(); + + foreach (var tag in tags) + { + ent.Comp.DenyTags.Add(tag); + } + + Dirty(ent); + } + + /// + /// Adds a tag to an access reader that will be used to deny access. + /// + /// The access reader entity. + /// The tag being added. + public void AddDenyTag(Entity ent, ProtoId tag) + { + ent.Comp.DenyTags.Add(tag); + Dirty(ent); + } + + /// + /// Removes a tag from an access reader that denied a user access. + /// + /// The access reader entity. + /// The tag being removed. + public void RemoveDenyTag(Entity ent, ProtoId tag) + { + ent.Comp.DenyTags.Remove(tag); + Dirty(ent); + } + + #endregion + + /// + /// Enables/disables the access reader on an entity. + /// + /// The access reader entity. + /// Enable/disable the access reader. + public void SetActive(Entity ent, bool enabled) + { + ent.Comp.Enabled = enabled; + Dirty(ent); + } + + /// + /// Enables/disables the logging of access attempts on an access reader entity. + /// + /// The access reader entity. + /// Enable/disable logging. + public void SetLoggingActive(Entity ent, bool enabled) + { + ent.Comp.LoggingDisabled = !enabled; + Dirty(ent); + } + + /// + /// Searches an entity's hand and ID slot for any contained items. + /// + /// The entity being searched. + /// The collection of found items. + /// True if one or more items were found. public bool FindAccessItemsInventory(EntityUid uid, out HashSet items) { - items = new(); - - foreach (var item in _handsSystem.EnumerateHeld(uid)) - { - items.Add(item); - } + items = new(_handsSystem.EnumerateHeld(uid)); // maybe its inside an inventory slot? if (_inventorySystem.TryGetSlotEntity(uid, "id", out var idUid)) @@ -363,9 +638,11 @@ public sealed class AccessReaderSystem : EntitySystem } /// - /// Try to find on this item - /// or inside this item (if it's pda) + /// Try to find on this entity or inside it (if it's a PDA). /// + /// The entity being searched. + /// The access tags that were found. + /// True if one or more access tags were found. private bool FindAccessTagsItem(EntityUid uid, out HashSet> tags) { tags = new(); @@ -376,9 +653,11 @@ public sealed class AccessReaderSystem : EntitySystem } /// - /// Try to find on this item - /// or inside this item (if it's pda) + /// Try to find on this entity or inside it (if it's a PDA). /// + /// The entity being searched. + /// The station record key that was found. + /// True if a station record key was found. private bool FindStationRecordKeyItem(EntityUid uid, [NotNullWhen(true)] out StationRecordKey? key) { if (TryComp(uid, out StationRecordKeyStorageComponent? storage) && storage.Key != null) @@ -432,15 +711,20 @@ public sealed class AccessReaderSystem : EntitySystem /// /// The reader to log the access on /// The name to log as - public void LogAccess(Entity ent, string name) + public void LogAccess(Entity ent, string name, TimeSpan? accessTime = null, bool force = false) { - if (IsPaused(ent) || ent.Comp.LoggingDisabled) - return; + if (!force) + { + if (IsPaused(ent) || ent.Comp.LoggingDisabled) + return; - if (ent.Comp.AccessLog.Count >= ent.Comp.AccessLogLimit) - ent.Comp.AccessLog.Dequeue(); + if (ent.Comp.AccessLog.Count >= ent.Comp.AccessLogLimit) + ent.Comp.AccessLog.Dequeue(); + } - var stationTime = _gameTiming.CurTime.Subtract(_gameTicker.RoundStartTimeSpan); + var stationTime = accessTime ?? _gameTiming.CurTime.Subtract(_gameTicker.RoundStartTimeSpan); ent.Comp.AccessLog.Enqueue(new AccessRecord(stationTime, name)); + + Dirty(ent); } } From f9784206e0faae590458bf9b3799413c217fc911 Mon Sep 17 00:00:00 2001 From: August Sun <45527070+august-sun@users.noreply.github.com> Date: Thu, 5 Jun 2025 17:35:15 -0600 Subject: [PATCH 18/63] Adds individual Bulldog magazines to the syndicate uplink (#37917) * Brief commit to update branch * added more magazines to uplink, corrected spelling in ftl file for uplink, corrected sprite state for incendiary bulldog mag * removed incendiary drum, increased cost of slug drum * Emogarbage swoop --------- Co-authored-by: august-sun <45527070+august.sun@users.noreply.github.com> Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> --- .../Locale/en-US/store/uplink-catalog.ftl | 14 +++++++---- .../Prototypes/Catalog/uplink_catalog.yml | 23 +++++++++++++++++++ .../Guns/Ammunition/Magazines/shotgun.yml | 2 +- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 529de80f84..6cdcb30edb 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -85,16 +85,22 @@ uplink-shrapnel-grenade-desc = Launches a spray of sharp fragments dealing great # Ammo uplink-pistol-magazine-name = Pistol Magazine (.35 auto) -uplink-pistol-magazine-desc = Pistol magazine with 10 catridges. Compatible with the Viper. +uplink-pistol-magazine-desc = Pistol magazine with 10 cartridges. Compatible with the Viper. uplink-pistol-magazine-c20r-name = SMG magazine (.35 auto) -uplink-pistol-magazine-c20r-desc = Rifle magazine with 30 catridges. Compatible with C-20r. +uplink-pistol-magazine-c20r-desc = Rifle magazine with 30 cartridges. Compatible with C-20r. + +uplink-magazine-bulldog-pellet-name = Drum magazine (.50 pellet) +uplink-magazine-bulldog-pellet-desc = Shotgun magazine with 8 shells filled with buckshot. Compatible with the Bulldog. + +uplink-magazine-bulldog-slug-name = Drum magazine (.50 slug) +uplink-magazine-bulldog-slug-desc = Shotgun magazine with 8 shells filled with slugs. Compatible with the Bulldog. uplink-pistol-magazine-caseless-name = Pistol Magazine (.25 caseless) -uplink-pistol-magazine-caseless-desc = Pistol magazine with 10 catridges. Compatible with the Cobra. +uplink-pistol-magazine-caseless-desc = Pistol magazine with 10 cartridges. Compatible with the Cobra. uplink-speedloader-magnum-name = Speedloader (.45 magnum AP) -uplink-speedloader-magnu-desc = Revolver speedloader with 6 armor-piercing catridges, capable of ignoring armor entirely. Compatible with the Python. +uplink-speedloader-magnu-desc = Revolver speedloader with 6 armor-piercing cartridges, capable of ignoring armor entirely. Compatible with the Python. uplink-mosin-ammo-name = Ammunition box (.30 rifle) uplink-mosin-ammo-desc = A box of 60 cartridges for the surplus rifle. diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 4a73d4e70c..2371ee2c25 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -499,6 +499,29 @@ categories: - UplinkAmmo +# For the Bulldog +- type: listing + id: UplinkMagazineShotgunPellet + name: uplink-magazine-bulldog-pellet-name + description: uplink-magazine-bulldog-pellet-desc + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Shotgun/m12.rsi, state: pellets } + productEntity: MagazineShotgun + cost: + Telecrystal: 2 + categories: + - UplinkAmmo + +- type: listing + id: UplinkMagazineShotgunSlug + name: uplink-magazine-bulldog-slug-name + description: uplink-magazine-bulldog-slug-desc + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Shotgun/m12.rsi, state: slug } + productEntity: MagazineShotgunSlug + cost: + Telecrystal: 3 + categories: + - UplinkAmmo + # For the Cobra - type: listing id: UplinkMagazinePistolCaselessRifle diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml index d7defb78b8..241ac1327d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml @@ -132,7 +132,7 @@ proto: ShellShotgunIncendiary - type: Sprite layers: - - state: slug + - state: base map: ["enum.GunVisualLayers.Base"] - state: mag-1 map: ["enum.GunVisualLayers.Mag"] From d1e1c8bb5d4a896d472e7af7c1dd6124819d0348 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 5 Jun 2025 23:36:22 +0000 Subject: [PATCH 19/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 72af07f782..383e2efbba 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: SlamBamActionman - changes: - - message: Liltenhead! Thank you for over 2 years of update videos, and congrats - on the 100th video! - type: Add - id: 8112 - time: '2025-03-27T17:19:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36104 - author: metalgearsloth changes: - message: Rewrote how mob movement works to make movement more flexible in code. @@ -3925,3 +3917,11 @@ id: 8623 time: '2025-06-05T23:27:02.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37828 +- author: august-sun + changes: + - message: Added individual Bulldog drum magazines for sale in the syndicate uplink. + Ammo types available are pellets and slugs. + type: Add + id: 8624 + time: '2025-06-05T23:35:15.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37917 From 18fa45addd6867c17f9a3c69955e1ccbb59c13c6 Mon Sep 17 00:00:00 2001 From: Xeri Marai <8867601+Xeri7@users.noreply.github.com> Date: Thu, 5 Jun 2025 18:36:31 -0500 Subject: [PATCH 20/63] Improve Potted Plant Movability and Availability (#37591) * Added Purchasable Potted Plant Crate * Removing some whitespace that made it in elsewhere * Making Potted Plants Items and pickupable * Revert Making potted plants not fade This reverts part of commit a50a7def80c06e5be68a37263306007739952a28. * Adding self to credits * Fixing sus spacing --- .../Prototypes/Catalog/Cargo/cargo_fun.yml | 12 ++++- .../Prototypes/Catalog/Fills/Crates/fun.yml | 43 ++++++++++++++++++ .../Structures/Furniture/potted_plants.yml | 4 ++ .../potted_plants.rsi/inhand-left.png | Bin 0 -> 395 bytes .../potted_plants.rsi/inhand-right.png | Bin 0 -> 395 bytes .../Furniture/potted_plants.rsi/meta.json | 14 ++++-- 6 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 Resources/Textures/Structures/Furniture/potted_plants.rsi/inhand-left.png create mode 100644 Resources/Textures/Structures/Furniture/potted_plants.rsi/inhand-right.png diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml index f4d29705d4..db84ce3b2c 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml @@ -117,7 +117,7 @@ cost: 500 category: cargoproduct-category-name-fun group: market - + - type: cargoProduct id: FunSharkPlushies icon: @@ -347,3 +347,13 @@ cost: 1500 category: cargoproduct-category-name-fun group: market + +- type: cargoProduct + id: FunPlants + icon: + sprite: Structures/Furniture/potted_plants.rsi + state: random + product: CratePlants + cost: 1000 + category: cargoproduct-category-name-fun + group: market diff --git a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml index af57a565a6..18b0dc26d8 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml @@ -43,6 +43,49 @@ - id: PlushieArachind - id: PlushiePenguin +- type: entityTable + id: AllPottedPlantsTable + table: !type:GroupSelector + children: + - id: PottedPlant0 + - id: PottedPlant1 + - id: PottedPlant2 + - id: PottedPlant3 + - id: PottedPlant4 + - id: PottedPlant5 + - id: PottedPlant6 + - id: PottedPlant7 + - id: PottedPlant8 + - id: PottedPlant10 + - id: PottedPlant11 + - id: PottedPlant12 + - id: PottedPlant13 + - id: PottedPlant14 + - id: PottedPlant15 + - id: PottedPlant16 + - id: PottedPlant17 + - id: PottedPlant18 + - id: PottedPlant19 + - id: PottedPlant20 + - id: PottedPlant21 + - id: PottedPlant22 + - id: PottedPlant23 + - id: PottedPlant24 + - id: PottedPlant26 + +- type: entity + id: CratePlants + parent: CrateGenericSteel + name: plant crate + description: A variety pack of potted plants to spruce up your station! + components: + - type: EntityTableContainerFill + containers: + entity_storage: !type:NestedSelector + tableId: AllPottedPlantsTable + rolls: !type:ConstantNumberSelector + value: 5 + - type: entity id: CrateFunPlushie parent: CrateGenericSteel diff --git a/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml b/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml index e47e8df41c..23d8c7b174 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml @@ -35,6 +35,10 @@ containers: stash: !type:ContainerSlot {} - type: Pullable + - type: MultiHandedItem + - type: Item + sprite: Structures/Furniture/potted_plants.rsi + size: Huge - type: Damageable damageContainer: StructuralInorganic # The pot. Not the plant. Or is it plastic? - type: Destructible diff --git a/Resources/Textures/Structures/Furniture/potted_plants.rsi/inhand-left.png b/Resources/Textures/Structures/Furniture/potted_plants.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3b20778c411346ded1326df5d947693da99637 GIT binary patch literal 395 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!Bm#UwT!FN*hn9V%XVj`p3nRT5 zoptdc-UZ1~GufUo0p&PKg8YIR{zJgkQz1q`v5%fEjv*Cu-iA5y9aiAU_K^7h|6_yL zF)NQp;UO5e?rjujg)` zFFTV*M2hi-^8A?9?1E(~f?@lsj84*1FE&4DIKR1m)r3CB-ELdAH7;az<-X~XetYMd zoo+=wXTFE_buyiL;ln-p3d&bL z7|h;lpd8cs^G%ziqpaM6Qp;UO5e?rjujg)` zFFTV*M2hi-^8A?9?1E(~f?@lsj84*1FE&4DIKR1m)r3CB-ELdAH7;az<-X~XetYMd zoo+=wXTFE_buyiL;ln-p3d&bL z7|h;lpd8cs^G%ziqpaM6 Date: Thu, 5 Jun 2025 23:37:38 +0000 Subject: [PATCH 21/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 383e2efbba..dfc44df8e6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Rewrote how mob movement works to make movement more flexible in code. - While this should largely function the same (apart from conveyors now being - able to launch items) please report any bugs found. - type: Tweak - id: 8113 - time: '2025-03-27T22:29:03.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35931 - author: ViceEmargo changes: - message: Botanist's leather gloves must now be equipped in order to pick up Death @@ -3925,3 +3916,13 @@ id: 8624 time: '2025-06-05T23:35:15.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37917 +- author: Xeri7 + changes: + - message: Added ability to pick up potted plants in two hands, as well as store + them in crates! + type: Add + - message: Added purchasable potted plant crate! + type: Add + id: 8625 + time: '2025-06-05T23:36:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37591 From 2a4540fffa9da439e0b3051949ae30309d5cdc60 Mon Sep 17 00:00:00 2001 From: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> Date: Fri, 6 Jun 2025 11:40:51 +1200 Subject: [PATCH 22/63] Rifle crate order (#35535) * lecter crate and gift * revert cargo gift security armor change * rifle cost down to 8000 spesos --- .../Prototypes/Catalog/Cargo/cargo_armory.yml | 10 ++++++++++ .../Prototypes/Catalog/Fills/Crates/armory.yml | 15 ++++++++++++++- Resources/Prototypes/GameRules/cargo_gifts.yml | 1 + 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_armory.yml b/Resources/Prototypes/Catalog/Cargo/cargo_armory.yml index 26748e8226..bb4130e571 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_armory.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_armory.yml @@ -67,3 +67,13 @@ cost: 5200 category: cargoproduct-category-name-armory group: market + +- type: cargoProduct + id: ArmoryRifle + icon: + sprite: Objects/Weapons/Guns/Rifles/lecter.rsi + state: icon + product: CrateArmoryRifle + cost: 8000 + category: cargoproduct-category-name-armory + group: market diff --git a/Resources/Prototypes/Catalog/Fills/Crates/armory.yml b/Resources/Prototypes/Catalog/Fills/Crates/armory.yml index b1187ecd6c..c8df852411 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/armory.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/armory.yml @@ -2,7 +2,7 @@ id: CrateArmorySMG parent: [ CrateWeaponSecure, BaseSecurityContraband ] name: SMG crate - description: Contains two high-powered, semiautomatic rifles with four mags. Requires Armory access to open. + description: Contains two SMGs with four mags. Requires Armory access to open. components: - type: StorageFill contents: @@ -88,3 +88,16 @@ amount: 2 - id: RiotShield amount: 2 + +- type: entity + id: CrateArmoryRifle + parent: [ CrateWeaponSecure, BaseSecurityContraband ] + name: rifle crate + description: Contains two high-powered assault rifles with four mags. Requires Armory access to open. + components: + - type: StorageFill + contents: + - id: WeaponRifleLecter + amount: 2 + - id: MagazineRifle + amount: 4 diff --git a/Resources/Prototypes/GameRules/cargo_gifts.yml b/Resources/Prototypes/GameRules/cargo_gifts.yml index be18c7f14b..cda428745e 100644 --- a/Resources/Prototypes/GameRules/cargo_gifts.yml +++ b/Resources/Prototypes/GameRules/cargo_gifts.yml @@ -196,6 +196,7 @@ ArmorySmg: 1 ArmoryShotgun: 1 ArmoryLaser: 1 + ArmoryRifle: 1 - type: entity id: GiftsSecurityRiot From 7943dad60303fc9bc41b3a8b4855f77741978082 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 5 Jun 2025 23:41:57 +0000 Subject: [PATCH 23/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index dfc44df8e6..c76dbc7342 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,18 +1,4 @@ Entries: -- author: ViceEmargo - changes: - - message: Botanist's leather gloves must now be equipped in order to pick up Death - Nettles. - type: Add - - message: Death Nettles will now pierce hardsuits, injecting 5 units of reagent. - type: Tweak - - message: Death Nettles will now "wilt" after 5 hits. - type: Add - - message: Fly Amanita has been changed to contain less Amatoxin. - type: Tweak - id: 8114 - time: '2025-03-29T09:35:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/25253 - author: chromiumboy changes: - message: Sentry turrets can potentially be found guarding sensitive areas of the @@ -3926,3 +3912,16 @@ id: 8625 time: '2025-06-05T23:36:31.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37591 +- author: K-Dynamic + changes: + - message: Rifle crates with two Lecters and four magazines can be ordered from + Cargo for 8000 spesos. + type: Add + - message: Lethal Weapons gift event now includes a Rifle crate. + type: Tweak + - message: SMG crates are properly described and no longer reference 'semiautomatic + rifles.' + type: Tweak + id: 8626 + time: '2025-06-05T23:40:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/35535 From eb85a8a1b078225778fa09add92ebcd6353d36e3 Mon Sep 17 00:00:00 2001 From: themias <89101928+themias@users.noreply.github.com> Date: Thu, 5 Jun 2025 19:45:55 -0400 Subject: [PATCH 24/63] Muzzles reduce emote sound (#34444) * Muzzles reduce emote sound * update based on review comments * review comments --- .../Chat/Systems/ChatSystem.Emote.cs | 11 +++++----- .../Components/MumbleAccentComponent.cs | 9 +++++++- .../EntitySystems/MumbleAccentSystem.cs | 21 +++++++++++++++++-- Content.Server/Speech/Muting/MutingSystem.cs | 2 +- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/Content.Server/Chat/Systems/ChatSystem.Emote.cs b/Content.Server/Chat/Systems/ChatSystem.Emote.cs index 707a0e0dc5..75acd2493b 100644 --- a/Content.Server/Chat/Systems/ChatSystem.Emote.cs +++ b/Content.Server/Chat/Systems/ChatSystem.Emote.cs @@ -1,6 +1,7 @@ using System.Collections.Frozen; using Content.Shared.Chat.Prototypes; using Content.Shared.Speech; +using Robust.Shared.Audio; using Robust.Shared.Prototypes; using Robust.Shared.Random; @@ -126,16 +127,16 @@ public partial class ChatSystem /// Tries to find and play relevant emote sound in emote sounds collection. /// /// True if emote sound was played. - public bool TryPlayEmoteSound(EntityUid uid, EmoteSoundsPrototype? proto, EmotePrototype emote) + public bool TryPlayEmoteSound(EntityUid uid, EmoteSoundsPrototype? proto, EmotePrototype emote, AudioParams? audioParams = null) { - return TryPlayEmoteSound(uid, proto, emote.ID); + return TryPlayEmoteSound(uid, proto, emote.ID, audioParams); } /// /// Tries to find and play relevant emote sound in emote sounds collection. /// /// True if emote sound was played. - public bool TryPlayEmoteSound(EntityUid uid, EmoteSoundsPrototype? proto, string emoteId) + public bool TryPlayEmoteSound(EntityUid uid, EmoteSoundsPrototype? proto, string emoteId, AudioParams? audioParams = null) { if (proto == null) return false; @@ -149,8 +150,8 @@ public partial class ChatSystem return false; } - // if general params for all sounds set - use them - var param = proto.GeneralParams ?? sound.Params; + // optional override params > general params for all sounds in set > individual sound params + var param = audioParams ?? proto.GeneralParams ?? sound.Params; _audio.PlayPvs(sound, uid, param); return true; } diff --git a/Content.Server/Speech/Components/MumbleAccentComponent.cs b/Content.Server/Speech/Components/MumbleAccentComponent.cs index 0681ebab2f..2577859b15 100644 --- a/Content.Server/Speech/Components/MumbleAccentComponent.cs +++ b/Content.Server/Speech/Components/MumbleAccentComponent.cs @@ -1,7 +1,14 @@ +using Robust.Shared.Audio; + namespace Content.Server.Speech.Components; [RegisterComponent] public sealed partial class MumbleAccentComponent : Component { - + /// + /// This modifies the audio parameters of emote sounds, screaming, laughing, etc. + /// By default, it reduces the volume and distance of emote sounds. + /// + [DataField] + public AudioParams EmoteAudioParams = AudioParams.Default.WithVolume(-8f).WithMaxDistance(5); } diff --git a/Content.Server/Speech/EntitySystems/MumbleAccentSystem.cs b/Content.Server/Speech/EntitySystems/MumbleAccentSystem.cs index 757f31ad9e..6b1af5c227 100644 --- a/Content.Server/Speech/EntitySystems/MumbleAccentSystem.cs +++ b/Content.Server/Speech/EntitySystems/MumbleAccentSystem.cs @@ -1,9 +1,13 @@ +using Content.Server.Chat.Systems; using Content.Server.Speech.Components; +using Content.Shared.Chat.Prototypes; +using Content.Shared.Speech.Components; namespace Content.Server.Speech.EntitySystems; public sealed class MumbleAccentSystem : EntitySystem { + [Dependency] private readonly ChatSystem _chat = default!; [Dependency] private readonly ReplacementAccentSystem _replacement = default!; public override void Initialize() @@ -11,6 +15,19 @@ public sealed class MumbleAccentSystem : EntitySystem base.Initialize(); SubscribeLocalEvent(OnAccentGet); + SubscribeLocalEvent(OnEmote, before: [typeof(VocalSystem)]); + } + + private void OnEmote(Entity ent, ref EmoteEvent args) + { + if (args.Handled || !args.Emote.Category.HasFlag(EmoteCategory.Vocal)) + return; + + if (TryComp(ent.Owner, out var vocalComp)) + { + // play a muffled version of the vocal emote + args.Handled = _chat.TryPlayEmoteSound(ent.Owner, vocalComp.EmoteSounds, args.Emote, ent.Comp.EmoteAudioParams); + } } public string Accentuate(string message, MumbleAccentComponent component) @@ -18,8 +35,8 @@ public sealed class MumbleAccentSystem : EntitySystem return _replacement.ApplyReplacements(message, "mumble"); } - private void OnAccentGet(EntityUid uid, MumbleAccentComponent component, AccentGetEvent args) + private void OnAccentGet(Entity ent, ref AccentGetEvent args) { - args.Message = Accentuate(args.Message, component); + args.Message = Accentuate(args.Message, ent.Comp); } } diff --git a/Content.Server/Speech/Muting/MutingSystem.cs b/Content.Server/Speech/Muting/MutingSystem.cs index 238d501e24..edf82bbfb2 100644 --- a/Content.Server/Speech/Muting/MutingSystem.cs +++ b/Content.Server/Speech/Muting/MutingSystem.cs @@ -17,7 +17,7 @@ namespace Content.Server.Speech.Muting { base.Initialize(); SubscribeLocalEvent(OnSpeakAttempt); - SubscribeLocalEvent(OnEmote, before: new[] { typeof(VocalSystem) }); + SubscribeLocalEvent(OnEmote, before: new[] { typeof(VocalSystem), typeof(MumbleAccentSystem) }); SubscribeLocalEvent(OnScreamAction, before: new[] { typeof(VocalSystem) }); } From c300f5dd74dc1483f53ff98dd8c6ddeb554d5195 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 5 Jun 2025 23:47:02 +0000 Subject: [PATCH 25/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c76dbc7342..d7eef4eefa 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,14 +1,4 @@ Entries: -- author: chromiumboy - changes: - - message: Sentry turrets can potentially be found guarding sensitive areas of the - station. When deployed, they will shoot unauthorized personnel on sight with - either stunning or lethal laser bolts. Note that only cyborgs and robots can - safely pass sentry turrets that protect the station AI core - type: Add - id: 8115 - time: '2025-03-29T17:55:59.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35123 - author: Killerqu00 changes: - message: Uncuffing someone with combat mode on will shove them down. @@ -3925,3 +3915,10 @@ id: 8626 time: '2025-06-05T23:40:51.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/35535 +- author: themias + changes: + - message: Wearing a muzzle now reduces the sound of vocal emotes + type: Tweak + id: 8627 + time: '2025-06-05T23:45:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/34444 From 219015dcd882c0b06be768a991e0346c14a19d39 Mon Sep 17 00:00:00 2001 From: RedBookcase Date: Thu, 5 Jun 2025 17:13:36 -0700 Subject: [PATCH 26/63] Added Scrap Armor [Reupload]. (#37601) * Added Scrap Armor v2. * Added a note to scrap helmet about vision reduction. * Removed protection from step triggers. * The patient needs broken kneecaps to live. * Add in missing tag * Missing tags pt 2 --------- Co-authored-by: RedBookcase Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> --- Resources/Locale/en-US/recipes/tags.ftl | 2 + .../Entities/Clothing/Belt/belts.yml | 4 + .../Entities/Clothing/Head/scraphelmet.yml | 85 ++++++++++++++++++ .../Entities/Clothing/OuterClothing/misc.yml | 16 ++++ .../Clothing/OuterClothing/scraparmor.yml | 85 ++++++++++++++++++ .../Crafting/Graphs/improvised/scraparmor.yml | 50 +++++++++++ .../Graphs/improvised/scraphelmet.yml | 46 ++++++++++ .../Recipes/Crafting/improvised.yml | 16 ++++ Resources/Prototypes/tags.yml | 6 ++ .../scrap_helmet.rsi/construction-1.png | Bin 0 -> 625 bytes .../scrap_helmet.rsi/construction-2.png | Bin 0 -> 664 bytes .../scrap_helmet.rsi/construction-3.png | Bin 0 -> 696 bytes .../scrap_helmet.rsi/equipped-HELMET-vox.png | Bin 0 -> 854 bytes .../scrap_helmet.rsi/equipped-HELMET.png | Bin 0 -> 819 bytes .../Head/Helmets/scrap_helmet.rsi/icon.png | Bin 0 -> 685 bytes .../Helmets/scrap_helmet.rsi/inhand-left.png | Bin 0 -> 759 bytes .../Helmets/scrap_helmet.rsi/inhand-right.png | Bin 0 -> 662 bytes .../Head/Helmets/scrap_helmet.rsi/meta.json | 39 ++++++++ .../Armor/scrap_armor.rsi/construction-1.png | Bin 0 -> 608 bytes .../Armor/scrap_armor.rsi/construction-2.png | Bin 0 -> 681 bytes .../Armor/scrap_armor.rsi/construction-3.png | Bin 0 -> 728 bytes .../equipped-OUTERCLOTHING-vox.png | Bin 0 -> 1886 bytes .../equipped-OUTERCLOTHING.png | Bin 0 -> 1872 bytes .../Armor/scrap_armor.rsi/icon.png | Bin 0 -> 773 bytes .../Armor/scrap_armor.rsi/inhand-left.png | Bin 0 -> 855 bytes .../Armor/scrap_armor.rsi/inhand-right.png | Bin 0 -> 819 bytes .../Armor/scrap_armor.rsi/meta.json | 39 ++++++++ 27 files changed, 388 insertions(+) create mode 100644 Resources/Prototypes/Entities/Clothing/Head/scraphelmet.yml create mode 100644 Resources/Prototypes/Entities/Clothing/OuterClothing/scraparmor.yml create mode 100644 Resources/Prototypes/Recipes/Crafting/Graphs/improvised/scraparmor.yml create mode 100644 Resources/Prototypes/Recipes/Crafting/Graphs/improvised/scraphelmet.yml create mode 100644 Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/construction-1.png create mode 100644 Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/construction-2.png create mode 100644 Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/construction-3.png create mode 100644 Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/equipped-HELMET-vox.png create mode 100644 Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/meta.json create mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/construction-1.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/construction-2.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/construction-3.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/equipped-OUTERCLOTHING-vox.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/equipped-OUTERCLOTHING.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/icon.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/meta.json diff --git a/Resources/Locale/en-US/recipes/tags.ftl b/Resources/Locale/en-US/recipes/tags.ftl index 819b1eb60b..74b58d9278 100644 --- a/Resources/Locale/en-US/recipes/tags.ftl +++ b/Resources/Locale/en-US/recipes/tags.ftl @@ -68,6 +68,8 @@ construction-graph-tag-match-stick = match stick construction-graph-tag-potato = a potato construction-graph-tag-wheat-bushel = wheat bushel construction-graph-tag-corgi-hide = corgi hide +construction-graph-tag-apron = an apron +construction-graph-tag-utility-belt = a utility belt soil-construction-graph-any-mushroom = any mushroom # toys diff --git a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml index fa6b256c46..674ee2db4b 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml @@ -80,6 +80,10 @@ - Multitool sprite: Clothing/Belt/belt_overlay.rsi - type: Appearance + - type: Tag + tags: + - UtilityBelt + - WhitelistChameleon - type: entity parent: ClothingBeltStorageBase diff --git a/Resources/Prototypes/Entities/Clothing/Head/scraphelmet.yml b/Resources/Prototypes/Entities/Clothing/Head/scraphelmet.yml new file mode 100644 index 0000000000..25669d5d00 --- /dev/null +++ b/Resources/Prototypes/Entities/Clothing/Head/scraphelmet.yml @@ -0,0 +1,85 @@ +# Separate yml file for scrap helmet since it has so many construction steps. +# Listed from first step of crafting to the final helmet + +- type: entity + name: wired bucket + parent: BaseItem + id: WiredBucketBase + description: A bucket with attached wiring to better serve as a chinstrap. + components: + - type: Sprite + sprite: Clothing/Head/Helmets/scrap_helmet.rsi + state: construction-1 + - type: Item + size: Normal + sprite: Clothing/Head/Helmets/scrap_helmet.rsi + - type: Construction + graph: scraphelmet + node: wiredbucket + +- type: entity + name: sliced bucket + parent: BaseItem + id: SlicedBucketBase + description: A bucket with a vision slit cut into the side. + components: + - type: Sprite + sprite: Clothing/Head/Helmets/scrap_helmet.rsi + state: construction-2 + - type: Item + size: Normal + sprite: Clothing/Head/Helmets/scrap_helmet.rsi + - type: Construction + graph: scraphelmet + node: slicedbucket + +- type: entity + name: steel bucket + parent: BaseItem + id: SteelBucketBase + description: A bucket that's had steel welded onto it's exterior. It requires better shaping before it can be worn comfortably. + components: + - type: Sprite + sprite: Clothing/Head/Helmets/scrap_helmet.rsi + state: construction-3 + - type: Item + size: Normal + sprite: Clothing/Head/Helmets/scrap_helmet.rsi + - type: Construction + graph: scraphelmet + node: steelbucket + +# The helmet itself +- type: entity + parent: [ClothingHeadHelmetBase, BaseMajorContraband] + id: ClothingHeadHelmetScrap #When we get the tech for it this bad boy needs to be given a vision reduction when equipped. 1-2 tiles less than normal should be good. + name: scrap helmet + description: A cobbled-together helmet made from cabling, steel, and a bucket. + components: + - type: Sprite + sprite: Clothing/Head/Helmets/scrap_helmet.rsi + - type: Item + size: Normal + - type: Clothing + sprite: Clothing/Head/Helmets/scrap_helmet.rsi + equipSound: /Audio/Effects/metal_scrape2.ogg + unequipSound: /Audio/Effects/metal_scrape1.ogg + equipDelay: 3 + unequipDelay: 3 #shorter on the helmet. + - type: IngestionBlocker + - type: Armor + modifiers: + coefficients: + Blunt: 0.9 + Slash: 0.9 + Piercing: 0.9 + Heat: 0.9 + - type: HideLayerClothing + slots: + - Hair + - Snout + - HeadTop + - HeadSide + - type: Construction + graph: scraphelmet + node: scraphelmet diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml index 5376e2a99f..a3aa984415 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml @@ -8,6 +8,10 @@ sprite: Clothing/OuterClothing/Misc/apron.rsi - type: Clothing sprite: Clothing/OuterClothing/Misc/apron.rsi + - type: Tag + tags: + - Apron + - WhitelistChameleon - type: entity parent: ClothingOuterStorageBase @@ -20,6 +24,10 @@ sprite: Clothing/OuterClothing/Misc/apronbar.rsi - type: Clothing sprite: Clothing/OuterClothing/Misc/apronbar.rsi + - type: Tag + tags: + - Apron + - WhitelistChameleon - type: entity parent: ClothingOuterStorageBase @@ -32,6 +40,10 @@ sprite: Clothing/OuterClothing/Misc/apronbotanist.rsi - type: Clothing sprite: Clothing/OuterClothing/Misc/apronbotanist.rsi + - type: Tag + tags: + - Apron + - WhitelistChameleon - type: entity parent: ClothingOuterStorageBase @@ -44,6 +56,10 @@ sprite: Clothing/OuterClothing/Misc/apronchef.rsi - type: Clothing sprite: Clothing/OuterClothing/Misc/apronchef.rsi + - type: Tag + tags: + - Apron + - WhitelistChameleon - type: entity parent: ClothingOuterStorageBase diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/scraparmor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/scraparmor.yml new file mode 100644 index 0000000000..adf4227595 --- /dev/null +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/scraparmor.yml @@ -0,0 +1,85 @@ +# Separate yml file for scrap armor since it has so many construction steps. +# Listed from first step of crafting to the final armor + +- type: entity + name: wired apron + parent: BaseItem + id: WiredApronBase + description: An apron threaded with cabling. It looks incomplete. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Armor/scrap_armor.rsi + state: construction-1 + - type: Item + size: Ginormous + sprite: Clothing/OuterClothing/Armor/scrap_armor.rsi + - type: Construction + graph: scraparmor + node: wiredapron + +- type: entity + name: steel-covered apron + parent: BaseItem + id: SteelApronBase + description: An apron with steel plating haphazardly affixed by spare cabling. In it's current state, it would fall apart immediately if worn. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Armor/scrap_armor.rsi + state: construction-2 + - type: Item + size: Ginormous + sprite: Clothing/OuterClothing/Armor/scrap_armor.rsi + - type: Construction + graph: scraparmor + node: steelapron + +- type: entity + name: welded steel apron + parent: BaseItem + id: WeldedSteelApronBase + description: An apron affixed with welded steel plating attached to spare cabling. The armor is no longer in danger of falling apart, but requires additional work to be worn securely. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Armor/scrap_armor.rsi + state: construction-3 + - type: Item + size: Ginormous + sprite: Clothing/OuterClothing/Armor/scrap_armor.rsi + - type: Construction + graph: scraparmor + node: weldedsteelapron + +# The armor itself +- type: entity + parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing, BaseMajorContraband] + id: ClothingOuterArmorScrap + name: scrap armor + description: A tider's gleaming plate mail. Bail up, or you're a dead man. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Armor/scrap_armor.rsi + - type: Item + size: Ginormous + - type: Clothing + sprite: Clothing/OuterClothing/Armor/scrap_armor.rsi + equipSound: /Audio/Effects/metal_scrape2.ogg + unequipSound: /Audio/Effects/metal_scrape1.ogg + equipDelay: 5 + unequipDelay: 5 #Its insane more armor/hardsuits don't have equip times tbh? + - type: Armor + modifiers: + coefficients: + Blunt: 0.5 + Slash: 0.5 + Piercing: 0.5 #Some nukie tier physical protection... + Heat: 0.8 + Radiation: 0.8 #Hey, it's a bunch of solid steel. + - type: ExplosionResistance + damageCoefficient: 0.80 + - type: ClothingSpeedModifier #But that protection comes at a price. + walkModifier: 0.6 + sprintModifier: 0.6 + - type: GroupExamine + - type: Construction + graph: scraparmor + node: scraparmorfinished diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/scraparmor.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/scraparmor.yml new file mode 100644 index 0000000000..d935b751c3 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/scraparmor.yml @@ -0,0 +1,50 @@ +- type: constructionGraph + id: scraparmor + start: start + graph: + - node: start + edges: + - to: wiredapron + steps: + - tag: Apron + icon: + sprite: Clothing/OuterClothing/Misc/apronbotanist.rsi + state: icon + name: construction-graph-tag-apron + - material: Cable + amount: 15 + doAfter: 10 + + - node: wiredapron + entity: WiredApronBase + edges: + - to: steelapron + steps: + - material: Steel + amount: 30 + doAfter: 15 + + - node: steelapron + entity: SteelApronBase + edges: + - to: weldedsteelapron + steps: + - tool: Welding + doAfter: 20 + + - node: weldedsteelapron + entity: WeldedSteelApronBase + edges: + - to: scraparmorfinished + steps: + - tag: UtilityBelt + icon: + sprite: Clothing/Belt/utility.rsi + state: icon + name: construction-graph-tag-utility-belt + - material: Cable + amount: 15 + doAfter: 15 + + - node: scraparmorfinished + entity: ClothingOuterArmorScrap diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/scraphelmet.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/scraphelmet.yml new file mode 100644 index 0000000000..7752d15165 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/scraphelmet.yml @@ -0,0 +1,46 @@ +- type: constructionGraph + id: scraphelmet + start: start + graph: + - node: start + edges: + - to: wiredbucket + steps: + - tag: Bucket + icon: + sprite: Objects/Tools/bucket.rsi + state: icon + name: construction-graph-tag-bucket + - material: Cable + amount: 15 + doAfter: 3 + + - node: wiredbucket + entity: WiredBucketBase + edges: + - to: slicedbucket + steps: + - tool: Slicing + doAfter: 5 + + - node: slicedbucket + entity: SlicedBucketBase + edges: + - to: steelbucket + steps: + - material: Steel + amount: 10 + doAfter: 3 + - tool: Welding + doAfter: 10 + + - node: steelbucket + entity: SteelBucketBase + edges: + - to: scraphelmet + steps: + - tool: Anchoring + doAfter: 5 + + - node: scraphelmet + entity: ClothingHeadHelmetScrap diff --git a/Resources/Prototypes/Recipes/Crafting/improvised.yml b/Resources/Prototypes/Recipes/Crafting/improvised.yml index 4c94fcb6ff..dd4393b77c 100644 --- a/Resources/Prototypes/Recipes/Crafting/improvised.yml +++ b/Resources/Prototypes/Recipes/Crafting/improvised.yml @@ -157,3 +157,19 @@ targetNode: hardsuitGoliath category: construction-category-clothing objectType: Item + +- type: construction + id: scraparmor + graph: scraparmor + startNode: start + targetNode: scraparmorfinished + category: construction-category-clothing + objectType: Item + +- type: construction + id: scraphelmet + graph: scraphelmet + startNode: start + targetNode: scraphelmet + category: construction-category-clothing + objectType: Item diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 69a4544486..ab2aebc490 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -30,6 +30,9 @@ - type: Tag id: AppraisalTool +- type: Tag + id: Apron + - type: Tag id: Arrow @@ -1404,6 +1407,9 @@ - type: Tag id: UraniumGlassShard +- type: Tag + id: UtilityBelt + - type: Tag id: Vegetable diff --git a/Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/construction-1.png b/Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/construction-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b411f6edf0d6d7737f840a52802424913d52b46c GIT binary patch literal 625 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/icon.png b/Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5e36ebacd8478d9af1fdfbe75dabf0599d9f658f GIT binary patch literal 685 zcmV;e0#f~nP)EdxFJ$xrKT&ZE?R^{3OIhy#FmyRGrs%mG?0GGd&Y%{bCVmA$9?yl zd)~PK1Q96kzbl~pi2%7=&ZT>*szOl|42MIwu8T^gBHd5wLO!48z;~{n!@IV|!3mhs zVfne$;`5ZtW#PWUg#?~Sr=hT^Lo8JW&LjXshwC_;z^%(Vnj1Ylf87=)p~*afrfCR; zLeRruysFj4uHMLIQTaH)%}a51-WF~vO(1L-SguyFx^-q8gb|vXon<6;gu$s$ih!=` zFxd1I(-U700nzskGo(xi6NpBmNJT7cYH2LY&qHHRp|YfK8K}*2Fc@IZwn4R`!CWLB zUxt&oa`p!_GUC1;$dDm6IsYVck})Mhu9`Xj{dW`LpC9-N(h7N>WKP4$5yWCKG#ZT~XPi#ju$&aO`+cm}>nN2)!|{wA`5WFo=)bh=%DS%!e= z$&PgB-#9E5i=eGIt`~t*jZ8=>K#fTOBGIW@hj3_P@IVGWs0|bd6bKaf2Nd`PpZLJ` Tqr;|I00000NkvXXu0mjf%sx3P literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Helmets/scrap_helmet.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..dcea8bb5c6398d2930c2d4872b7ea801646e06f2 GIT binary patch literal 759 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F3${@^GvDChdfq`kI zr;B4qMcmt2`?I7S1&)1hnd~I6+LKGv@1cm&jf5!+;#hVIKFi`1uVk}rJSqG_GDhNS z7O&f01vOU=tw~OrAu~k099nsIzS+Ldw(qdT=K6re`Hn&!#+!}p&z|LcyIe$^a{>c) z`igfx2H0AHRCC`Ekl$`DB&9`|kQBT+1-&`Fj8M`Cpc2)h2gV#%~f>UcF&; z*7|#zZ`BJwZd+Md9VRoeWdHr}*I#edY>HZYM!V}r#iuAwYsRt-?f2EfuJHXRDqh@o z>urvS)Xn_cTmIinSTJAwQB~c&_p48Tl=v38{IcQ3w!?|b9;@Gf_IX9Dps2&%xbR&S zrnArHZ0yuKkjt3`hF+C{~0biY7laNya-+jCFnGwk+XV{vIuraP0018%f|mu1m^-F=xEKYrKjj1em}neDrL@s9_K zH~K$+zU_RN7a~ilS|0En zVASYa_xb5k_7ANSUUO_nU+BJpebuEI2N{xHF)r~8e|xHmWv>6TMamp(4JljX81$dr z{(h19hnSqRy8w^EG`R!fPAmEpDmac^U~UnK7fbx{f}_cr;bgKzrmKTuSHV^09}EWW z?{>0X)C!RM6!7X%7Ng?S7v_B@UaVyCPCDjvUit2wD~oJ$XVwkf=t^)N&+zUARuZut+%EDYVtFRv_!4Nth;{O8;CZjJEOJKr^| za{K?fTlwS8(igAo*Iu9gt5>e^#ZmR$^8dUG>pz=@Gg$pyC|p%|x!^McW8IeW0|gd3 zXYZT*yEgs&oSM!%_WL;h*Z8?#u;2XKY5n$=4>mJZUiq0U{&nlb<(g%$6C49eU;lb+ zC8WTJ8#Qhf?D+RI=E#nk)Chy>>u-;3I#lZTW3AoFmm8L}KAXWC;Odik^Y^JO%HpSH zvPOSBRJw)X0n^OQt&_uR{7&D?<#Ln%!u@@FV7xR#kyFb1hcg+anS8Quyjwqq-$OWc z(%#v#yrbpkMs8qrl4jUcdHKy5AU|6m$Lx$KHwj*`yYqHZ6cn(ghyru~BQKP)e_4nWY TPMo6$OlSF6XAut*Oqai>b1U~k^U_iz`9>V``oHqLp69Z`n z@j>FqMoBq}GpK~g6AWJ#f-2Ay$jGpxh=3gOoWYL)Bo1Pu1O8PKV24Q9iGro>t$ob! zZ2wERGLjuYs)Ir5zrFqewipDEEeG)_b^w2&1Skr?hHGxp{|~f)5#5pKmLkhDk>jIx zAAh50gYiL@1LGbgEf6xFUI){gj!(Tx4-%OF)j$$x-`%Wy&p#kig~`f)0Rb zf*E@2ufTsHepZJ6pX}j2y?OIH!>wE22zeH(JW){qv)su};QzEAwCwkBS35r0Lg>Y5gYs~3(Jnk u@qnKFU~+^)fYd}gs(v&CMniz=ApiiOCg{eIb=H;u0000F6XAut*OLnQ?K{QUldFh2JZqXu0+BQXI0GT1?z zkKyGXNrvk;Z!&b%zF^QWJq6c$PLA6DAFqBg zO4x~l{d#ZhV}@t@U&8&(LQDvtTMh~V1_nfQfcO(;GJqWw5fSnKHZTN`!ME2xz!rl5 zvgIH?Q4T=%ImoAF%@Ci0LIY%3S@U@YDX}LEQjX&PqoSf1k<*HR1|P$fDYtO?lVB8p zbefu){+E=L1p5$VII`vZ{QO|U_Z>I@mIpaP`imUH>C>kfZKjy~Kaz8XvNV9~bX=By z{P+>KnTfc9F+rxR1pTWt&0n9%tzn_6n zydyi1Xa~TefspTz%LhVgLGlFCz{h@2o`-<)t40jd`&1d;efq;7#K(d`XBORNKvoaZ z!(S+Y*BwNq0b~cK7R2N>W^| zkONmgks1KRWkYmRk+UDjavhPk3{0X%BwJ2YB1AV;mh~Qkn7S3XJOI@ZpuGS1H$S)> zAP10?4PjXkR6SpLBaBiYodr6G)GP=xk7NhnDi6r9oSYCF)iW9b!!HB?-&PdtLuYys P00000NkvXXu0mjf@R1^~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/construction-3.png b/Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/construction-3.png new file mode 100644 index 0000000000000000000000000000000000000000..01e564171fbdf726894cd5670a4cb4f448d44fce GIT binary patch literal 728 zcmV;}0w?{6P)O&S#mm1+Hean5UQ7+-W|-fRS! z3qvw9_uX^edH38QiXu`VQou)nV^bscq4Njre{uH(pU>O4yodzJk=O6>DmZw2 zK)gm_V|;)%f2MF_o2D6)*CFRrHcOUeiJZ#T3TcTry;*qIk?UUTN#OBpC5FN`E~e?} zdLL<;MukEF>pPUF)oL{Ayn9`((uquls7homm@%lh)A$xko=XVawR;=%VQI6?!IJ=I zG5Dxc`1$H80qpAZG&P$|!ZU#OI|`LbB`Ow+;@%zB#~lHTaD(H%D@b!;=M4U6dAS2z z*LCVjoTS?`X9Nl4a^M&N%9o7S?blS0e6Cz3Egq-8fujc0(1)`k@9z9OUC!mGr?>ac z!_tyx5BMqo$sy}2M^;&O?3}?_A><)HX!sI<{2<{5!Wqlpje1=)DFXRJ$z&i7zD>wL zsMi1etyA2hRLZeqOLpElz}>k_+K+`NftKHereASCgj;5ax!KDEcoR}gRYEBiKYZ_xiUwGzovyUK|tMgeUHGM3~&G< z7#zRXjhXf{Kgs3yN(8V&03txdO#;ujH&jR{5kTSh`_}1Z?v}u~G&$KGI%vXYEw`u; z@U@{_jKO&f*Iz6O`@tb$LYV+S7#vpH>N!di2R@5Y943^HV0iBu4Q0-XVZ+|v_@N6@ zVM57<0N~H_%TN1%n}#@lRSTk?G65zb?=}p07{#JBkplmp0>1#8`73*aCpiZI0000< KMNUMnLSTZpR!?mJ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 0000000000000000000000000000000000000000..b6c255e3e979ce6c1da293da4b3dbfb7463950a1 GIT binary patch literal 1886 zcmV-k2ch_hP)QALPA??3{7B*)Yw8>3X8Ut zvQTlH?{?2{Gwkl%yR+SdWNy;1?4G&b&;6U3bBMg=Ip8_qIp8_qIp8_qIp8^v*ntQ4 zY&JGLv);Iu`~hF^cFlQf%R^Qtjg5^4{!(?S5|b_|mA>sUGXG?_t5OkK_i%yu86DSc zDWJ>$mf}A~Z*Q;9ejQ?-sII1kg#{5aG=GZni~aQb;Xm(+RW$*lxNs##HEXxgo6nWg z$kiY&O^R=iVg9M`QW|igWyl9%=y+f}kMi^Lsi~<+kcf8*apLpT)D%^jznzan=#fx} zC_>bGxYvhKh|S#el{{T6E*a~YpvhyG9X-HxBcF~6e3%dMfk42HZ}qdIuFi~^rM0&% z5C%dR)pGYh*@0I$GBE>Ke3dEex8Y$S7JvYOApmTCHbm|1?SvQ@B{z&BgsY0TbDCdW zDa7AbQexpVE_i^??Ch+FLG0F|sERBRqhtUCvG`y5`{}jjW&sEi7;ylvD1MyY-@DB+ zff-;LV#N7Rm6<$!W$}y;TyQGO853RNGn)`!DoRi*Q$=C=LFA#14$AlYNfr-47LPsz zcv-cG>+0^N7aAI9b#CtdqwUAi+5^V>Cd0tT2m|-_;-dJse%CJYn;7_;|Km92-M@p1 z3JV3t=j-cf^3o+bZO&56%7Q>(ev!N^+c`;ppPQpsg3a{#@q_e6&0bo+YKp$wc#aB>Y|zG6HlVh)mZ~?A;h&qM zSU~}m8!=17xX;{`5|bAI>QEt7^=LFFtAvU%YOG+wm=4WkJ$0L76Du>touz z+wh(sf=!5zKWvm(pI8=d*S@MLnTT^d1?(Vp@zZDe#3_LjBHOLAv(xn>ua*Icjz2zf za8ts^Qnrl9#8Iof1R#o^3~vUvi~9kd_PiW$7q*IrX#I3JIEK{jRs=O!Q?*x&#z-~?`HDuoejj@BC?21gvvTO6VN~e4MeafRE4(da!`(kcwhtq6&Ch4T}!z^%*uK3 zX(^Mf+O%f?NI)#|fLM2&2LJEMuQah(p`4ahB`C*XmH`7;Xut*sZ~-UPngF>^Z39pT zz@oW!fQuD)CZr=yaQAO`_Vel^c#fSYd9UIOpz+b3^uqJ#z2SyiDDN{4_hVHP_Q znKeiLPAZPy3hSOk+B3jT7{?z*=Cf-bTLnw$h*G@QUrJ4i3z zdX?HDN38YfmRO?evG#!hEMR7$9zpB8-d$5+1a0Z(x1OppDvSIUU!<^mhQ_q|RW%Fv zNWXKta5Y9>oj7k{aSC4tUuy;c95n(akVPV=cpafY0%Wq)fCWro%MILQgH-sq9w|94BR-o4%wlS;=yF3U*|oBG zdpT~pco{K3q^aZLGm*1TCWc2|PRpk&oUhZ`1CoJpEg!_AjBdG_T$8{x!fvrLVgQc} z%GIzOmaFl|^KEw~a9l5e(a}*~cXzjVOg$?Y^=E=t!ah)ea;M!}#aPQ`ir2B{fIA2N Y2at-nO0^(=?f?J)07*qoM6N<$f>&F4PXGV_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 0000000000000000000000000000000000000000..13450c0faa0ad7a36fe44d8eaa0e1694df49ae99 GIT binary patch literal 1872 zcmV-W2e0^vP)bPn9mY{sC#5*`dLjt2yc zSzI9MOpGx;@F06o-?~1UCGwy#)A%%ESZ2`JC=WAnWHCzyY{W=1I$alGql~T7f-n%> z_5Qy0l*@(oez&)bkbEC$xNXmOe!uhk{@vblh*VPwCu3@dC@f` zzS)NPr^8Dtz|S2+E(8Y017rDAP*6Z^ZEb>t*=Zyap?&&yzlB2dR8 zPc67gpDz(z!oA}(ap8`o2Ix2P>2-k*@e#bo<4K8sxS>I}iBaJ{HwXhEgz8v1P-ft? z0OkR`24G$9>E3Iu~;P?+!m!PmJ-Jea%Ai<@*Mn6{rxL~2XIcwv-IKdLqY`Da>F!4 z(EO6YgNC<5J_LAqwXo|s zdzM~qX`wB7c_)ADx{%QxFxEE_06wNRaQ|Ce6#tu>n#iqV;5BpeBIQ4Rn6?!c3yv=} zH`B!J+jK>rrC0_<9?!{8C=^H+qvZ_1l*e?trYmlq_81uso@WT`V4ux~VAwAha0LFjcZ!bgIVLtG1l~P#hIak!qq4FxDNs8i z7;S-nzj1>88l9$Bz3ue*#nbdg&2ieXDMH`u8l~d%J8k1j3s75IOVztcb5Bpxd{Ghk zwD}~rF_*q8Cq5s(MXtfYLGc~>@O7p^8~eTUO06aS7vBy_#{}P&H$n&k4T1Qy3Mz8v z()75#zP4_r=|`(7V!HW|K_*c z1I$6;4s3f>y|^F1$m3WVU&N1)_?f)Xnk@n1>l;6hNe@2$^OR@AdaQrOcOtqi0RY4z z5REOvU60KV_aUk&1(X6x0i}RaKq;UUPzopolmbctr9cJ>NIw$eY%MU1bpq@0E6^C{ zYFvz5tu&GPIm`}Gd4XI#@`ZWPOKJ10Z#o@)}21X=Lb!=-p;iL|<`2vP!YrWU~? z4-ij9)l=a_UoscJ^sFEop{4i1qmG;*o<%Nrn*=9tBmEIUQ2&!DjsS|(GeIttKvINL zU;r$Ax{1E;>k~5qWU}#$&PqOD01KGF1_#bnf*UwOAaJ(wB`p9uYJagxfU*e4#v)_P z$w?W&Y}jy72C%^)UKkM*+`!RJlUf4o5Kn-cn<@nm8VI0)0QLkdi?wbD9#|evMUn$5 zM9`2TpAlE_Y_?33S_13{f%*dh7Xrt6d+)>vG0h&{y{bPMu8>Yi%MeRtgV_cwV4{Ho zxPTM5*?mxIO8@}!282iAxaL9yo(WEZlj+L=A`byb)#cn2Xv4Q=sdp$W?Ng58ax3tt-n~_PIPh@qiflA$ z2#`jXPsHv?AU6Nrwg;6iOjM%k@K6{Zf4|y$7Unz-RJ+UP#T=T$z%Q>1Pa{k3X4yYbJoG z<4Xjetore z+i$0Mj`jd!A>}o}q~9qY%l;_DSZe(nt|-egKxLp5PzpR!1^x#bEw>scrBloR0000< KMNUMnLSTZNU}D<< literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/icon.png b/Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4b99650ab30fbf27dc1f01853742593c00753bce GIT binary patch literal 773 zcmV+g1N!`lP)q; zVaR;kd(L@h?tK%W7d;1h4p=yFVrEhuzjR3bCr0__PBw`nk%&r%nGicU#`=9`fCo-F z`7r^9rkz;-?V$@bnM_K?I?6d42%uK0aZY+;6%Ln-4@;j~a`m;Q0-n#MB?7*E#fz6~ z!*Dnph(@DS-{M4}P{5S-?0q(i(>@=N1(HiiiCnCgeoF3(F6PZW$m7fMdQ*d`0Ffog zr!?T#nGA^R#_TLAl?vz{k&b8%#p7|rVllqfN9}8!i7E8tblqpCxoG8r{MpJ%3%Q~w z=yRRH-CO5b1m%jL*GQz|F!J?VH5FODkVwEG%h-#YFvtyMBEWg~7Z-6g9LC_#(7mVe zWz!z8bbu@;TiK*~-Ysn;3wX5ka0mMZFubbZ zawx=m0M|4&takf_QIKha7?WvFpb`9jw1n%EGu)I!oJcR=@DDFLV~13aYg<4t7)0O* zRJmG3-RXo^tv7MjBpKp<<};*JD#g#JMx5{UDlB_|Kqv^vs~&?>?ngCW2KEo2yt$20 z{@vWcuauEW=a^X3{8bMaLAJ;Jc%tp`^VjaQZNgVPEji0o>qS|Pp>YNC;oaoLH;;Mz zXhOP)js>vOjc)*r+Q#5<_z#wOEAA#Nd%y@fF_6QU?*eZ&V)paf3XAF{Y)^pz7oX?1 z-$r-shV=eB9YMnESO68Z`)AY*c{h&rYI+X*e-8Wsjgv_9G?8e700000NkvXXu0mjf D1N&s! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/inhand-left.png b/Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..ded723481ea2731a756bcf66caf147d1740125e7 GIT binary patch literal 855 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F3${@^GvDChdfq|LR z)5S5QBJS-h!;Hy}BFFD97jso^+?FAf)5+MIAk!o$-mdXNLPT)WPRrB@=lc5eg4nO; zF$$hC*UI8}q#)X!rs>47QYElQWnovqmp%X4#V@&3->==<=63&}J7?wl|M!01eH!#h zPEcR%0Lu&p;RGh122KM;R8GQNhc}-J73J^m+VDMhkMrSL>o4~o%{%?n!!CN#@z-ZA zcAxulbAyMdU-n^7>5CO#PfA|9XvJny!1SwkhvG+C)n!8Fga8R_E@vvPNtE3p~!nprXtDxoqvtoIaK=x5Xh^Q|H93 zf4+K#qU_Yg6Ri4P?^1a@k#EU*hf6OS;t#)l6Y?>9Q)E@7mf*j#-LY0veS$VdEUB^M zFISv=oyq;OxdZF=~_&s59A z*xdQ;SF@%5G7EPVcSPAQe)9as>WB-SZ}Kng`QiB9zV7ww++#uaWD|-bSsRYLi?@GX z%e$yRr=en3kZE7B@nivpPF8`4@6*D2OG`GaiD_zfy!X$_bNl*p!5PL6Ytss63Wk*R9_t*yC}9vj^Rf9 zwSJKxnLqmHo@};{nWroJ`$oh>jOav*=x=O{C9A%>sU@FcvY)G-s{iTXf%6~Lgw=Lm zl8_938~6WVja6^Kqt=#&zA10Keqq_d__mfZa+WQ%k9J) zq%iHJ&LNli3?e;@JUqz>Qm(uqGaTms5N=2cmEIepXFb>N_>#J9sZ9T^8}F#9`a}z-6to7Jt6Bi*2r~TunjI z!xo|W=bu0Q_i0n9&de$EZ{JSJ%Ukt4?cH3Hu>0z6C%N|h-|oo%>EFH!U*x5Py_R0O zFn?KPYN_EQ<)q``N^gFwOPa9#UqJSUTYH_Y8Jc+yPsrM;Rq=PjM#YsOUh}TLE?OJY zmcM#ih;%0Vk9el%6L)_++V}pI*6g#Z=H7l;^5oB-8vpiFyUpf&S5)_RzomaQxuad! zqIvGQltWn@ruXw}bme{?-XgdBK_A0A+p5LKlAfBf?1``3Amrt6<7D0A4eD%Ip_e=5R%`IE(x22{pQ}Da3vBqHk=R)=yA8p(3$IRJWvhV2T z(%8>TLdx>(U zL9fdN4M*ww6Y`grS62W0aOcwB`||_m{aqmNXjXZ^Tp52R6$hMXvZ_F6XvL;gHC5MR z#s2;;l5@Y@a{hy`^s`8bm;JYD{;4t^T(RrMU*%PQN>)Z3=}x{`nIzeNb7MY(mEJ17 zw!)p^Mz60;e4O3)^ke-=$Grlj+w(ZJ?ukh-RIw?@32-gH^)W0zUH%2fn``X4TUId~ zirOldx&MI03wEZ4hRbK$_Eg*uFp*DLw#)Q~MRWqgi+v7Fm)D$T2#<%}|XnvqE h#->ZHaWBh1Ch3UpUQ?oUbbz^l!PC{xWt~$(69DZDc}oBQ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/meta.json b/Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/meta.json new file mode 100644 index 0000000000..dd06ab1e7f --- /dev/null +++ b/Resources/Textures/Clothing/OuterClothing/Armor/scrap_armor.rsi/meta.json @@ -0,0 +1,39 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by RedBookcase on Github.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "construction-1" + }, + { + "name": "construction-2" + }, + { + "name": "construction-3" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} From 54d7f3f80828b4a68c34dc1b98c7e978b20c028d Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 6 Jun 2025 00:14:43 +0000 Subject: [PATCH 27/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d7eef4eefa..f3d872d1d8 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Killerqu00 - changes: - - message: Uncuffing someone with combat mode on will shove them down. - type: Add - id: 8116 - time: '2025-03-29T20:09:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35193 - author: metalgearsloth changes: - message: Jetpacks emit particles more frequently. @@ -3922,3 +3915,10 @@ id: 8627 time: '2025-06-05T23:45:55.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/34444 +- author: RedBookcase + changes: + - message: Added Scrap Armor and Scrap Helmets. + type: Add + id: 8628 + time: '2025-06-06T00:13:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37601 From bc4a45d6e5772756f2fca0e780f2aa8369ff018a Mon Sep 17 00:00:00 2001 From: Samuka-C <47865393+Samuka-C@users.noreply.github.com> Date: Thu, 5 Jun 2025 23:28:04 -0300 Subject: [PATCH 28/63] Make improvised explosive devices minor contra (#38088) pipe bomb and fire bombs are minor contra --- .../Prototypes/Entities/Objects/Weapons/Bombs/firebomb.yml | 2 +- .../Prototypes/Entities/Objects/Weapons/Bombs/pipebomb.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/firebomb.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/firebomb.yml index f3ab27fb60..564f136c0b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/firebomb.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/firebomb.yml @@ -2,7 +2,7 @@ # ideally it would be dynamic and work by actually sparking the solution but that doesnt exist yet :( # with that you could make napalm ied instead of welding fuel with no additional complexity - type: entity - parent: BaseItem + parent: [ BaseItem, BaseMinorContraband ] id: FireBomb name: fire bomb description: A weak, improvised incendiary device. diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pipebomb.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pipebomb.yml index 5fb6829ac2..70661667cc 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pipebomb.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pipebomb.yml @@ -1,5 +1,5 @@ - type: entity - parent: GrenadeBase + parent: [ GrenadeBase, BaseMinorContraband ] id: PipeBomb name: pipe bomb description: An improvised explosive made from pipes and wire. @@ -59,4 +59,4 @@ - type: Construction graph: PipeBomb node: cable - defaultTarget: pipebomb \ No newline at end of file + defaultTarget: pipebomb From 60060526a145bcaea2942a841a7c0ce72feafaf4 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 6 Jun 2025 02:29:11 +0000 Subject: [PATCH 29/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f3d872d1d8..54ffc2ab9d 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Jetpacks emit particles more frequently. - type: Tweak - id: 8117 - time: '2025-03-30T04:06:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36093 - author: beck-thompson changes: - message: Stethoscopes now automatically start doafters and also can tell if a @@ -3922,3 +3915,12 @@ id: 8628 time: '2025-06-06T00:13:36.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37601 +- author: Samuka + changes: + - message: Fire bombs are now minor contra + type: Tweak + - message: Pipe bombs are now minor contra + type: Tweak + id: 8629 + time: '2025-06-06T02:28:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38088 From a332817803779d6c0dc23fb3e114678586d8e6a6 Mon Sep 17 00:00:00 2001 From: Errant <35878406+Errant-4@users.noreply.github.com> Date: Fri, 6 Jun 2025 12:12:33 +0200 Subject: [PATCH 30/63] emergency shuttle emergency lockers (#38095) --- .../Entities/Structures/Storage/Closets/Lockers/lockers.yml | 3 ++- .../Entities/Structures/Storage/Closets/wall_lockers.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml index 4fb07fc3f6..47075f07e5 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml @@ -159,7 +159,8 @@ - type: entity parent: LockerBase id: LockerEvacRepair - name: evac repair locker + name: emergency shuttle emergency locker + description: It's emergencies all the way down. components: - type: Appearance - type: EntityStorageVisuals diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml index 7c1d3ce3ff..311cccd429 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml @@ -180,7 +180,8 @@ - type: entity parent: BaseWallLocker id: LockerWallEvacRepair - name: evac repair wall locker + name: emergency shuttle emergency wall locker + description: It's emergencies all the way down. components: - type: Appearance - type: EntityStorageVisuals From 95632859b76dc011df2c50e733f60ed77ae4ffcb Mon Sep 17 00:00:00 2001 From: Tayrtahn Date: Fri, 6 Jun 2025 12:11:52 -0400 Subject: [PATCH 31/63] Cleanup unused/redundant dependencies (#38099) --- Content.Client/Actions/ActionsSystem.cs | 1 - Content.Client/Clothing/Systems/ChameleonClothingSystem.cs | 2 -- Content.Client/Movement/Systems/JetpackSystem.cs | 1 - Content.Server/Actions/ActionOnInteractSystem.cs | 1 - Content.Server/Clothing/Systems/ChameleonClothingSystem.cs | 1 - Content.Server/GameTicking/Rules/TraitorRuleSystem.cs | 1 - Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs | 1 - Content.Server/NPC/Systems/NPCUseActionOnTargetSystem.cs | 1 - Content.Server/Procedural/DungeonSystem.cs | 1 - Content.Server/Shuttles/Systems/ShuttleSystem.cs | 1 - Content.Server/Traitor/Systems/TraitorCodePaperSystem.cs | 2 -- Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs | 3 +-- 12 files changed, 1 insertion(+), 15 deletions(-) diff --git a/Content.Client/Actions/ActionsSystem.cs b/Content.Client/Actions/ActionsSystem.cs index 91baa3b1a9..23ff23997f 100644 --- a/Content.Client/Actions/ActionsSystem.cs +++ b/Content.Client/Actions/ActionsSystem.cs @@ -32,7 +32,6 @@ namespace Content.Client.Actions [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly IResourceManager _resources = default!; - [Dependency] private readonly ISerializationManager _serialization = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; public event Action? OnActionAdded; diff --git a/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs b/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs index 74fcf48849..08153c3b3f 100644 --- a/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs +++ b/Content.Client/Clothing/Systems/ChameleonClothingSystem.cs @@ -11,8 +11,6 @@ namespace Content.Client.Clothing.Systems; // All valid items for chameleon are calculated on client startup and stored in dictionary. public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem { - [Dependency] private readonly IPrototypeManager _proto = default!; - public override void Initialize() { base.Initialize(); diff --git a/Content.Client/Movement/Systems/JetpackSystem.cs b/Content.Client/Movement/Systems/JetpackSystem.cs index bf80ed4252..c9e759e129 100644 --- a/Content.Client/Movement/Systems/JetpackSystem.cs +++ b/Content.Client/Movement/Systems/JetpackSystem.cs @@ -16,7 +16,6 @@ public sealed class JetpackSystem : SharedJetpackSystem [Dependency] private readonly ClothingSystem _clothing = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedMapSystem _mapSystem = default!; - [Dependency] private readonly SpriteSystem _sprite = default!; public override void Initialize() { diff --git a/Content.Server/Actions/ActionOnInteractSystem.cs b/Content.Server/Actions/ActionOnInteractSystem.cs index 973e1afbcd..a8bb4e5cf7 100644 --- a/Content.Server/Actions/ActionOnInteractSystem.cs +++ b/Content.Server/Actions/ActionOnInteractSystem.cs @@ -15,7 +15,6 @@ namespace Content.Server.Actions; public sealed class ActionOnInteractSystem : EntitySystem { [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly SharedActionsSystem _actions = default!; [Dependency] private readonly ActionContainerSystem _actionContainer = default!; [Dependency] private readonly SharedChargesSystem _charges = default!; diff --git a/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs b/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs index 75850e6d74..0d281d7075 100644 --- a/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs +++ b/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs @@ -17,7 +17,6 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly IdentitySystem _identity = default!; [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly IEntityManager _entityManager = default!; public override void Initialize() { diff --git a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs index 7940eebef1..bfe98de862 100644 --- a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs @@ -28,7 +28,6 @@ public sealed class TraitorRuleSystem : GameRuleSystem { private static readonly Color TraitorCodewordColor = Color.FromHex("#cc3b3b"); - [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly AntagSelectionSystem _antag = default!; [Dependency] private readonly SharedJobSystem _jobs = default!; [Dependency] private readonly MindSystem _mindSystem = default!; diff --git a/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs b/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs index 4123122111..83471cdbc1 100644 --- a/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs +++ b/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs @@ -25,7 +25,6 @@ public sealed class GatewayGeneratorSystem : EntitySystem { [Dependency] private readonly IConfigurationManager _cfgManager = default!; [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IPrototypeManager _protoManager = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; diff --git a/Content.Server/NPC/Systems/NPCUseActionOnTargetSystem.cs b/Content.Server/NPC/Systems/NPCUseActionOnTargetSystem.cs index 9822050f95..2ec97bbb5f 100644 --- a/Content.Server/NPC/Systems/NPCUseActionOnTargetSystem.cs +++ b/Content.Server/NPC/Systems/NPCUseActionOnTargetSystem.cs @@ -7,7 +7,6 @@ namespace Content.Server.NPC.Systems; public sealed class NPCUseActionOnTargetSystem : EntitySystem { - [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly SharedActionsSystem _actions = default!; /// diff --git a/Content.Server/Procedural/DungeonSystem.cs b/Content.Server/Procedural/DungeonSystem.cs index 521ebed7ec..9cc3fbb158 100644 --- a/Content.Server/Procedural/DungeonSystem.cs +++ b/Content.Server/Procedural/DungeonSystem.cs @@ -29,7 +29,6 @@ public sealed partial class DungeonSystem : SharedDungeonSystem { [Dependency] private readonly IConfigurationManager _configManager = default!; [Dependency] private readonly IConsoleHost _console = default!; - [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.cs index 721fda82f8..71d51e3187 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.cs @@ -48,7 +48,6 @@ public sealed partial class ShuttleSystem : SharedShuttleSystem [Dependency] private readonly DockingSystem _dockSystem = default!; [Dependency] private readonly DungeonSystem _dungeon = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; - [Dependency] private readonly FixtureSystem _fixtures = default!; [Dependency] private readonly MapLoaderSystem _loader = default!; [Dependency] private readonly MapSystem _mapSystem = default!; [Dependency] private readonly MetaDataSystem _metadata = default!; diff --git a/Content.Server/Traitor/Systems/TraitorCodePaperSystem.cs b/Content.Server/Traitor/Systems/TraitorCodePaperSystem.cs index f1a0f97f54..db67a13045 100644 --- a/Content.Server/Traitor/Systems/TraitorCodePaperSystem.cs +++ b/Content.Server/Traitor/Systems/TraitorCodePaperSystem.cs @@ -14,8 +14,6 @@ namespace Content.Server.Traitor.Systems; public sealed class TraitorCodePaperSystem : EntitySystem { - [Dependency] private readonly GameTicker _gameTicker = default!; - [Dependency] private readonly TraitorRuleSystem _traitorRuleSystem = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly PaperSystem _paper = default!; [Dependency] private readonly CodewordSystem _codewordSystem = default!; diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs index fa515f48bb..24560cad38 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs @@ -33,7 +33,6 @@ public abstract partial class SharedBuckleSystem public static ProtoId BuckledAlertCategory = "Buckled"; [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; - [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; private void InitializeBuckle() { @@ -523,7 +522,7 @@ public abstract partial class SharedBuckleSystem if (!_interaction.InRangeUnobstructed(user.Value, strap.Owner, buckle.Comp.Range, popup: popup)) return false; - if (user.Value != buckle.Owner && !_actionBlocker.CanComplexInteract(user.Value)) + if (user.Value != buckle.Owner && !ActionBlocker.CanComplexInteract(user.Value)) return false; } From cddc9926b0d3e14dd3d20bb3334a76acf079f69c Mon Sep 17 00:00:00 2001 From: Minemoder5000 Date: Fri, 6 Jun 2025 15:07:09 -0600 Subject: [PATCH 32/63] Shark toys use the bite animation. (#38113) --- Resources/Prototypes/Entities/Objects/Fun/toys.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 06f46671c9..fd3fa27e68 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -721,6 +721,7 @@ wideAnimationRotation: 90 soundHit: path: /Audio/Items/Toys/rawr.ogg + animation: WeaponArcBite - type: Item heldPrefix: blue storedRotation: -90 From bb14492464e3513e002b379f49d446cde8a2b6c3 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 6 Jun 2025 21:08:20 +0000 Subject: [PATCH 33/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 54ffc2ab9d..50731843bf 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,16 +1,4 @@ Entries: -- author: beck-thompson - changes: - - message: Stethoscopes now automatically start doafters and also can tell if a - patient is losing oxygen damage or gaining it. - type: Add - - message: Moths can no longer eat stethoscopes. - type: Fix - - message: Stethoscopes action button now works properly. - type: Fix - id: 8118 - time: '2025-03-31T02:27:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36210 - author: Tayrtahn changes: - message: Items thrown when someone slips now tend to scatter in the direction @@ -3924,3 +3912,10 @@ id: 8629 time: '2025-06-06T02:28:04.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/38088 +- author: Minemoder + changes: + - message: Shark plushies now bite. + type: Tweak + id: 8630 + time: '2025-06-06T21:07:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38113 From 136208dbc3bc45b58e3d780e2ec5947d9495ede9 Mon Sep 17 00:00:00 2001 From: Tayrtahn Date: Fri, 6 Jun 2025 17:40:08 -0400 Subject: [PATCH 34/63] Fix throwing items into disposal units (#38106) --- .../Prototypes/Entities/Structures/Piping/Disposal/units.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml index 7388a814f7..e4c4f54433 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml @@ -39,9 +39,9 @@ bounds: "-0.45,-0.45,0.45,0.45" density: 55 mask: - - TableMask + - MachineMask layer: - - TableLayer + - MachineLayer - type: Destructible thresholds: - trigger: From afa62b5e69145a6d3f2ff05641f3670fb41429f4 Mon Sep 17 00:00:00 2001 From: themias <89101928+themias@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:13:20 -0400 Subject: [PATCH 35/63] Increase throwing into disposal chance (#38116) --- .../Prototypes/Entities/Structures/Piping/Disposal/units.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml index e4c4f54433..dda7d51b69 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml @@ -92,6 +92,7 @@ - type: DisposalUnit - type: ThrowInsertContainer containerId: disposals + probability: 0.67 - type: UserInterface interfaces: enum.DisposalUnitUiKey.Key: From a60d5d4002771c319cfb54c88b68183d34575b92 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 6 Jun 2025 22:14:28 +0000 Subject: [PATCH 36/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 50731843bf..53b7c836b1 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Tayrtahn - changes: - - message: Items thrown when someone slips now tend to scatter in the direction - they are moving, and respect the item's mass. - type: Tweak - id: 8119 - time: '2025-03-31T22:00:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36232 - author: ScarKy0 changes: - message: Thieves now start with the thieving satchel instead of their toolbox. @@ -3919,3 +3911,10 @@ id: 8630 time: '2025-06-06T21:07:10.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/38113 +- author: themias + changes: + - message: Increased the chance of throwing trash into a disposal unit + type: Tweak + id: 8631 + time: '2025-06-06T22:13:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38116 From 7c382cc6cebe3b4291c893d52bb0a36d085ec79f Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Sat, 7 Jun 2025 00:25:17 +0200 Subject: [PATCH 37/63] Don't show climb verb for objects that cannot be climbed (#38115) fix climb verb --- Content.Shared/Climbing/Systems/ClimbSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/Climbing/Systems/ClimbSystem.cs b/Content.Shared/Climbing/Systems/ClimbSystem.cs index d7d9df7fdd..0067eb87b2 100644 --- a/Content.Shared/Climbing/Systems/ClimbSystem.cs +++ b/Content.Shared/Climbing/Systems/ClimbSystem.cs @@ -170,7 +170,7 @@ public sealed partial class ClimbSystem : VirtualController private void AddClimbableVerb(EntityUid uid, ClimbableComponent component, GetVerbsEvent args) { - if (!args.CanAccess || !args.CanInteract || !_actionBlockerSystem.CanMove(args.User)) + if (!args.CanAccess || !args.CanInteract || !_actionBlockerSystem.CanMove(args.User) || !component.Vaultable) return; if (!TryComp(args.User, out ClimbingComponent? climbingComponent) || climbingComponent.IsClimbing || !climbingComponent.CanClimb) From 57567a92c6858ba7a156a770541777d3d4af8312 Mon Sep 17 00:00:00 2001 From: jkwookee <157201244+jkwookee@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:41:21 -0400 Subject: [PATCH 38/63] Reduce Liquid Frezon Duration (#38100) testing --- Resources/Prototypes/Reagents/gases.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Reagents/gases.yml b/Resources/Prototypes/Reagents/gases.yml index ac39f2d725..2677fc0ed0 100644 --- a/Resources/Prototypes/Reagents/gases.yml +++ b/Resources/Prototypes/Reagents/gases.yml @@ -407,10 +407,10 @@ key: SeeingRainbows component: SeeingRainbows type: Add - time: 100 + time: 15 refresh: false - !type:Drunk - boozePower: 100 + boozePower: 15 - !type:PopupMessage type: Local messages: [ "frezon-lungs-cold" ] From a31376c925a6216fffb2f6f161d9a6ee529d4549 Mon Sep 17 00:00:00 2001 From: Kyle Tyo <36606155+VerinSenpai@users.noreply.github.com> Date: Fri, 6 Jun 2025 18:52:48 -0400 Subject: [PATCH 39/63] Add player autofill to rename command. (#38074) * simple enough * switch to CompletionResult.FromOptions and CompletionHelper.SessionNames * cleanup --- Content.Server/Mind/Commands/RenameCommand.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Content.Server/Mind/Commands/RenameCommand.cs b/Content.Server/Mind/Commands/RenameCommand.cs index b0059ab425..b2d0df7484 100644 --- a/Content.Server/Mind/Commands/RenameCommand.cs +++ b/Content.Server/Mind/Commands/RenameCommand.cs @@ -1,6 +1,5 @@ using System.Diagnostics.CodeAnalysis; using Content.Server.Administration; -using Content.Shared.Access.Components; using Content.Shared.Administration; using Content.Shared.CCVar; using Robust.Server.Player; @@ -60,4 +59,12 @@ public sealed class RenameCommand : LocalizedEntityCommands entityUid = EntityUid.Invalid; return false; } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length == 1) + return CompletionResult.FromOptions(CompletionHelper.SessionNames()); + + return CompletionResult.Empty; + } } From 668a0f086333ce00e796692e2f9fbc4cca9e5549 Mon Sep 17 00:00:00 2001 From: Spanky <180730777+spanky-spanky@users.noreply.github.com> Date: Fri, 6 Jun 2025 19:01:14 -0400 Subject: [PATCH 40/63] Light Up Landmines (#38092) * Adjust landmines to have unshaded lights. * Someday I will give myself credit for the work I do. * Adjust animation speed. --- .../Entities/Objects/Misc/land_mine.yml | 17 +++++------------ .../Misc/landmine.rsi/landmine-inactive.png | Bin 305 -> 0 bytes .../Misc/landmine.rsi/landmine-unshaded.png | Bin 0 -> 186 bytes .../Objects/Misc/landmine.rsi/landmine.png | Bin 555 -> 323 bytes .../Objects/Misc/landmine.rsi/meta.json | 12 ++++++------ 5 files changed, 11 insertions(+), 18 deletions(-) delete mode 100644 Resources/Textures/Objects/Misc/landmine.rsi/landmine-inactive.png create mode 100644 Resources/Textures/Objects/Misc/landmine.rsi/landmine-unshaded.png diff --git a/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml b/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml index 1252453019..7ed1b657ea 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml @@ -27,15 +27,17 @@ drawdepth: Items sprite: Objects/Misc/landmine.rsi layers: - - state: landmine-inactive + - state: landmine + - state: landmine-unshaded + shader: unshaded map: [ "enum.ToggleableVisuals.Layer" ] - type: Appearance - type: GenericVisualizer visuals: enum.ToggleableVisuals.Enabled: enum.ToggleableVisuals.Layer: - True: {state: landmine} - False: {state: landmine-inactive} + True: {visible: true} + False: {visible: false} - type: Damageable damageContainer: Inorganic - type: Destructible @@ -74,9 +76,6 @@ activated: true onActivate: false - type: Armable - - type: Sprite - layers: - - state: landmine - type: entity name: modular mine @@ -98,9 +97,6 @@ activated: true onActivate: false - type: Armable - - type: Sprite - layers: - - state: landmine - type: entity name: explosive mine @@ -124,6 +120,3 @@ activated: true onActivate: false - type: Armable - - type: Sprite - layers: - - state: landmine diff --git a/Resources/Textures/Objects/Misc/landmine.rsi/landmine-inactive.png b/Resources/Textures/Objects/Misc/landmine.rsi/landmine-inactive.png deleted file mode 100644 index dcc68ec28b01e53c0e687bc445f9334f3b14138d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQdZ z#WAE}PI96|g2AhXK=vN1ge#1T`6OoXUAS)ir{DL_qotpFOiCRxCS3m?T|Up4gPXhg z=Ogp^jW4Ia3Myz{xzfXEP2Be0jCO&y3=^K#FxeE?o%j?|>e%-D{XN4R#!ZQR3@aH| zs$LUJS3Tix@(quAla_WX%YLNXsWh@X#d%(S;xZ}Xk~ zEisgN((f-1xnp!gWj{z|81Pu!mJ+ sIc@SAh9aE>yO>w-y2-*kb3m4X;rRNHmFilOpfF(YboFyt=akR{0NSZ{=>Px# diff --git a/Resources/Textures/Objects/Misc/landmine.rsi/landmine-unshaded.png b/Resources/Textures/Objects/Misc/landmine.rsi/landmine-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..25aa1bb1d87cb96237f49dcd1e5d2c3189c2f205 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|N<3X0Ln`LH zy|j_{kbwZ}1!2?3133@c3@I{cSXUCd7<_BK>U*8SXlAx#hG%P5u zI`2*&*XMlIr{DJMzkdAr)_1arQSLQBc`(?2r6W%H*G)^mK;>UIrWtNajj3umJ&heG bx9lrx+a<}J9Lt&tK`K36{an^LB{Ts5lVC)0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/landmine.rsi/landmine.png b/Resources/Textures/Objects/Misc/landmine.rsi/landmine.png index 1a95e1c37381f93e669632760d0511bb87ead813..1889629c510517c5998b5ecc635e7ab44c773a94 100644 GIT binary patch literal 323 zcmV-J0lfZ+P)Px#{YgYYR9J=WlfP;LK@f*O6AKFwMO1MJs5%M5DPr$;$(pLzv zQA0ZM{Kvu(uD=wL%OOj0D++qc+yYb?tGptA4**g7@uG%pnMaa>vWJUJyE%Ta6upis=y?{&2= zq$8VFc+A$Z8BA9ITsQ1f%a|MR{pEL1%^g;y5_h+kF|b+h0PwsHqtQgG@w^TnK^SY# zYG5CP@&2LR(rUh%C$+y}^b6d&8R4;v+j)btvz}AP<@Ai1JDhnK%gu|G5ATgP-h6ZRoW1g=Cp`MrXsN_-MvyU~kAtDu zg<*y=(*YSlfv4WwCqwpLer~=!T&}9&?4JOpGNajFf43Vw`nY4Coc6RYzvj#^;5W0j z?OXgtv$NydpYx})_wwoJyPf0LacJe|<)4*(^-o?B%hN1T_1?Yuj#pPi-4?p_IrQ`G zV8cCEvvy>>spU-ktURA_)kEjMY!%CX#x0VvyO!UOKC9m;gK_Dl#W%y?a;rtlenZ3cWBk9@tkWr7^YL(W zcCO=8`3Q%H>mDT5t@{@~m+Si0X$w#Bm$I=`a&$e@{Ol~>G==w{`@TP-Y;X@VJnLXE zaA#@23=8$=%sH2?)*QH38MmH2Te@oLJpKg=pK2Pi>a>Nk<5E7mF Date: Fri, 6 Jun 2025 23:02:21 +0000 Subject: [PATCH 41/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 53b7c836b1..d70c66ec3b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,20 +1,4 @@ Entries: -- author: ScarKy0 - changes: - - message: Thieves now start with the thieving satchel instead of their toolbox. - The satchel will get all the selected kits spawned inside of it. - type: Add - - message: Thief Chameleon kit now comes with a backpack and a bonus pair of chameleon - gloves. Be careful, they aren't thieving gloves and can be tough to tell apart! - type: Tweak - - message: Updated smuggler stachel's description to reflect what it's used for. - type: Tweak - - message: Thieving satchel and toolbox now correctly play a sound when their kits - are selected. - type: Fix - id: 8120 - time: '2025-03-31T22:32:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36201 - author: Tayrtahn changes: - message: Electric grills no longer appear powered when cycled while disconnected @@ -3918,3 +3902,10 @@ id: 8631 time: '2025-06-06T22:13:21.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/38116 +- author: spanky-spanky + changes: + - message: Landmines now light up in the dark! + type: Tweak + id: 8632 + time: '2025-06-06T23:01:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38092 From f274dc6526cc9c570784e698382df4686918d2f2 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Sat, 7 Jun 2025 01:08:16 +0200 Subject: [PATCH 42/63] fix wallmount vending machine dispense direction (#38112) fix wallmount vending machine direction --- Content.Server/VendingMachines/VendingMachineSystem.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs index 954c5d6ca1..fda8f06820 100644 --- a/Content.Server/VendingMachines/VendingMachineSystem.cs +++ b/Content.Server/VendingMachines/VendingMachineSystem.cs @@ -227,14 +227,13 @@ namespace Content.Server.VendingMachines } // Default spawn coordinates - var spawnCoordinates = Transform(uid).Coordinates; + var xform = Transform(uid); + var spawnCoordinates = xform.Coordinates; //Make sure the wallvends spawn outside of the wall. - if (TryComp(uid, out var wallMountComponent)) { - - var offset = wallMountComponent.Direction.ToWorldVec() * WallVendEjectDistanceFromWall; + var offset = (wallMountComponent.Direction + xform.LocalRotation - Math.PI / 2).ToVec() * WallVendEjectDistanceFromWall; spawnCoordinates = spawnCoordinates.Offset(offset); } From a6fabb9e94578099484063f80fd4bd987fd2b474 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 6 Jun 2025 23:09:22 +0000 Subject: [PATCH 43/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d70c66ec3b..be4513f99a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,14 +1,4 @@ Entries: -- author: Tayrtahn - changes: - - message: Electric grills no longer appear powered when cycled while disconnected - from power. - type: Fix - - message: Interactions with electric grills are now predicted. - type: Tweak - id: 8121 - time: '2025-04-01T16:43:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36241 - author: MisterImp changes: - message: A new recipe has been added for pizza made with world peas, world peazza. @@ -3909,3 +3899,10 @@ id: 8632 time: '2025-06-06T23:01:14.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/38092 +- author: slarticodefast + changes: + - message: Fixed wallmount vending machines dispensing in the wrong direction. + type: Fix + id: 8633 + time: '2025-06-06T23:08:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38112 From 8324aa9bea52ec9c9dd7107d05ba2f1175ae7936 Mon Sep 17 00:00:00 2001 From: Quantum-cross <7065792+Quantum-cross@users.noreply.github.com> Date: Fri, 6 Jun 2025 20:14:11 -0400 Subject: [PATCH 44/63] Fix serialization of `SunShadowCycleComponent` (#38002) * Use a struct to hold the items for `Directions` in `SunShadowComponent`, fix serialization. * actually make them datafields... * Add NetSerializable to datadef * this is why we can't have nice things --- .../Components/SunShadowCycleComponent.cs | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/Content.Shared/Light/Components/SunShadowCycleComponent.cs b/Content.Shared/Light/Components/SunShadowCycleComponent.cs index 0948091ecf..f8d39da850 100644 --- a/Content.Shared/Light/Components/SunShadowCycleComponent.cs +++ b/Content.Shared/Light/Components/SunShadowCycleComponent.cs @@ -1,6 +1,7 @@ using System.Linq; using System.Numerics; using Robust.Shared.GameStates; +using Robust.Shared.Serialization; namespace Content.Shared.Light.Components; @@ -25,11 +26,32 @@ public sealed partial class SunShadowCycleComponent : Component /// Time to have each direction applied. Will lerp from the current value to the next one. /// [DataField, AutoNetworkedField] - public List<(float Ratio, Vector2 Direction, float Alpha)> Directions = new() + public List Directions = new() { - (0f, new Vector2(0f, 3f), 0f), - (0.25f, new Vector2(-3f, -0.1f), 0.5f), - (0.5f, new Vector2(0f, -3f), 0.8f), - (0.75f, new Vector2(3f, -0.1f), 0.5f), + new SunShadowCycleDirection(0f, new Vector2(0f, 3f), 0f), + new SunShadowCycleDirection(0.25f, new Vector2(-3f, -0.1f), 0.5f), + new SunShadowCycleDirection(0.5f, new Vector2(0f, -3f), 0.8f), + new SunShadowCycleDirection(0.75f, new Vector2(3f, -0.1f), 0.5f), }; -} +}; + +[DataDefinition] +[Serializable, NetSerializable] +public partial record struct SunShadowCycleDirection +{ + [DataField] + public float Ratio; + + [DataField] + public Vector2 Direction; + + [DataField] + public float Alpha; + + public SunShadowCycleDirection(float ratio, Vector2 direction, float alpha) + { + Ratio = ratio; + Direction = direction; + Alpha = alpha; + } +}; From 5707a31cac59473bd263db90fe2566174c37c9f9 Mon Sep 17 00:00:00 2001 From: Kyle Tyo <36606155+VerinSenpai@users.noreply.github.com> Date: Fri, 6 Jun 2025 20:28:00 -0400 Subject: [PATCH 45/63] ShowEmergencyShuttleCommand and MeleeSpreadCommand LEC conversion. (#37993) progress --- .../Commands/ShowEmergencyShuttleCommand.cs | 16 +++---- .../Weapons/Melee/MeleeSpreadCommand.cs | 48 ++++++++----------- .../en-US/commands/melee-spread-command.ftl | 1 + .../show-emergency-shuttle-command.ftl | 2 + 4 files changed, 32 insertions(+), 35 deletions(-) create mode 100644 Resources/Locale/en-US/commands/melee-spread-command.ftl create mode 100644 Resources/Locale/en-US/commands/show-emergency-shuttle-command.ftl diff --git a/Content.Client/Shuttles/Commands/ShowEmergencyShuttleCommand.cs b/Content.Client/Shuttles/Commands/ShowEmergencyShuttleCommand.cs index 51430ca315..d14136957f 100644 --- a/Content.Client/Shuttles/Commands/ShowEmergencyShuttleCommand.cs +++ b/Content.Client/Shuttles/Commands/ShowEmergencyShuttleCommand.cs @@ -3,15 +3,15 @@ using Robust.Shared.Console; namespace Content.Client.Shuttles.Commands; -public sealed class ShowEmergencyShuttleCommand : IConsoleCommand +public sealed class ShowEmergencyShuttleCommand : LocalizedEntityCommands { - public string Command => "showemergencyshuttle"; - public string Description => "Shows the expected position of the emergency shuttle"; - public string Help => $"{Command}"; - public void Execute(IConsoleShell shell, string argStr, string[] args) + [Dependency] private readonly ShuttleSystem _shuttle = default!; + + public override string Command => "showemergencyshuttle"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) { - var tstalker = IoCManager.Resolve().GetEntitySystem(); - tstalker.EnableShuttlePosition ^= true; - shell.WriteLine($"Set emergency shuttle debug to {tstalker.EnableShuttlePosition}"); + _shuttle.EnableShuttlePosition ^= true; + shell.WriteLine(Loc.GetString($"cmd-showemergencyshuttle-status", ("status", _shuttle.EnableShuttlePosition))); } } diff --git a/Content.Client/Weapons/Melee/MeleeSpreadCommand.cs b/Content.Client/Weapons/Melee/MeleeSpreadCommand.cs index eda469deaf..1eb82bde1c 100644 --- a/Content.Client/Weapons/Melee/MeleeSpreadCommand.cs +++ b/Content.Client/Weapons/Melee/MeleeSpreadCommand.cs @@ -3,39 +3,33 @@ using Robust.Client.Graphics; using Robust.Client.Input; using Robust.Client.Player; using Robust.Shared.Console; -using Robust.Shared.Map; namespace Content.Client.Weapons.Melee; - -public sealed class MeleeSpreadCommand : IConsoleCommand +public sealed class MeleeSpreadCommand : LocalizedEntityCommands { - public string Command => "showmeleespread"; - public string Description => "Shows the current weapon's range and arc for debugging"; - public string Help => $"{Command}"; - public void Execute(IConsoleShell shell, string argStr, string[] args) + [Dependency] private readonly IEyeManager _eyeManager = default!; + [Dependency] private readonly IInputManager _inputManager = default!; + [Dependency] private readonly IOverlayManager _overlay = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly MeleeWeaponSystem _meleeSystem = default!; + [Dependency] private readonly SharedCombatModeSystem _combatSystem = default!; + [Dependency] private readonly SharedTransformSystem _transformSystem = default!; + + public override string Command => "showmeleespread"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) { - var collection = IoCManager.Instance; - - if (collection == null) + if (_overlay.RemoveOverlay()) return; - var overlayManager = collection.Resolve(); - - if (overlayManager.RemoveOverlay()) - { - return; - } - - var sysManager = collection.Resolve(); - - overlayManager.AddOverlay(new MeleeArcOverlay( - collection.Resolve(), - collection.Resolve(), - collection.Resolve(), - collection.Resolve(), - sysManager.GetEntitySystem(), - sysManager.GetEntitySystem(), - sysManager.GetEntitySystem())); + _overlay.AddOverlay(new MeleeArcOverlay( + EntityManager, + _eyeManager, + _inputManager, + _playerManager, + _meleeSystem, + _combatSystem, + _transformSystem)); } } diff --git a/Resources/Locale/en-US/commands/melee-spread-command.ftl b/Resources/Locale/en-US/commands/melee-spread-command.ftl new file mode 100644 index 0000000000..7e62fb53b9 --- /dev/null +++ b/Resources/Locale/en-US/commands/melee-spread-command.ftl @@ -0,0 +1 @@ +cmd-showmeleespread-desc = Shows the current weapon's range and arc for debugging. diff --git a/Resources/Locale/en-US/commands/show-emergency-shuttle-command.ftl b/Resources/Locale/en-US/commands/show-emergency-shuttle-command.ftl new file mode 100644 index 0000000000..e51494685c --- /dev/null +++ b/Resources/Locale/en-US/commands/show-emergency-shuttle-command.ftl @@ -0,0 +1,2 @@ +cmd-showemergencyshuttle-desc = Shows the expected position of the emergency shuttle. +cmd-showemergencyshuttle-status = Set emergency shuttle debug to {$status}. From 373ab740bb9711cc5a8e6f97971b754086aa1742 Mon Sep 17 00:00:00 2001 From: hoshizora Date: Fri, 6 Jun 2025 19:29:13 -0700 Subject: [PATCH 46/63] Add name to chameleon controller implanter (#38117) Update implanters.yml --- Resources/Prototypes/Entities/Objects/Misc/implanters.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Misc/implanters.yml b/Resources/Prototypes/Entities/Objects/Misc/implanters.yml index 9e89f1c8a7..e83649499b 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/implanters.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/implanters.yml @@ -248,6 +248,7 @@ - type: entity id: ChameleonControllerImplanter + name: chameleon controller implant suffix: chameleon controller parent: BaseImplantOnlyImplanterSyndi components: From b61824d287533a0b4c30c0463432692e24899bfb Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 7 Jun 2025 02:30:20 +0000 Subject: [PATCH 47/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index be4513f99a..d982bc0930 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: MisterImp - changes: - - message: A new recipe has been added for pizza made with world peas, world peazza. - type: Add - id: 8122 - time: '2025-04-01T23:26:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35191 - author: Fildrance changes: - message: fixed missing deconstruct on RCD @@ -3906,3 +3899,10 @@ id: 8633 time: '2025-06-06T23:08:16.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/38112 +- author: hoshizora-sayo + changes: + - message: Added proper name to the chameleon controller implanter + type: Add + id: 8634 + time: '2025-06-07T02:29:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38117 From 32301a6dcbe537294ef61dc73aca75f60f780b59 Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Sat, 7 Jun 2025 13:38:36 +0200 Subject: [PATCH 48/63] chem.yml cleanup (#38129) Update chem.yml --- Resources/Prototypes/Entities/Structures/Dispensers/chem.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml b/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml index 36d9a41195..5aebde564c 100644 --- a/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml +++ b/Resources/Prototypes/Entities/Structures/Dispensers/chem.yml @@ -51,7 +51,6 @@ - type: entity id: ChemDispenser - name: chemical dispenser suffix: Filled parent: ChemDispenserEmpty components: From a84d718a096a7b235f2d54f70fcdc449b688f512 Mon Sep 17 00:00:00 2001 From: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> Date: Sun, 8 Jun 2025 01:05:25 +1200 Subject: [PATCH 49/63] Reduce disabler capacity to 16 shots (#36019) * 14 shots * 14 to 16 --- .../Entities/Objects/Weapons/Guns/Battery/battery_guns.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 427af659f3..560b7bbc2a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -471,7 +471,7 @@ path: /Audio/Weapons/Guns/Gunshots/taser2.ogg - type: ProjectileBatteryAmmoProvider proto: BulletDisablerPractice - fireCost: 50 + fireCost: 62.5 - type: Tag tags: - Taser @@ -499,7 +499,7 @@ - Belt - type: ProjectileBatteryAmmoProvider proto: BulletDisabler - fireCost: 50 + fireCost: 62.5 - type: GuideHelp guides: - Security From 3ecb0b40a390b88ca68dfe31988276af96d67748 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 7 Jun 2025 13:06:32 +0000 Subject: [PATCH 50/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d982bc0930..83efd1fb19 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Fildrance - changes: - - message: fixed missing deconstruct on RCD - type: Fix - id: 8123 - time: '2025-04-02T16:11:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36255 - author: qwerltaz changes: - message: Dragon rifts now shine a different color depending on charge progress. @@ -3906,3 +3899,10 @@ id: 8634 time: '2025-06-07T02:29:13.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/38117 +- author: K-Dynamic + changes: + - message: Disablers now hold 16 shots instead of 20 + type: Tweak + id: 8635 + time: '2025-06-07T13:05:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/36019 From eb208a2ae8b893b3938a50081f596426004d7365 Mon Sep 17 00:00:00 2001 From: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> Date: Sun, 8 Jun 2025 03:51:38 +1200 Subject: [PATCH 51/63] Genpop wall lockers (#38102) * sprites * genpop wall lockers * number 5 alive * slight boilerplate code, thank you slarti --- Content.Server/Security/GenpopSystem.cs | 12 +- .../Storage/Closets/Lockers/lockers.yml | 39 ++-- .../Storage/Closets/base_structureclosets.yml | 5 + .../Storage/Closets/wall_lockers.yml | 79 ++++++-- .../Storage/wall_locker.rsi/genpop.png | Bin 0 -> 481 bytes .../Storage/wall_locker.rsi/genpop_door_1.png | Bin 0 -> 557 bytes .../Storage/wall_locker.rsi/genpop_door_2.png | Bin 0 -> 563 bytes .../Storage/wall_locker.rsi/genpop_door_3.png | Bin 0 -> 558 bytes .../Storage/wall_locker.rsi/genpop_door_4.png | Bin 0 -> 554 bytes .../Storage/wall_locker.rsi/genpop_door_5.png | Bin 0 -> 559 bytes .../Storage/wall_locker.rsi/genpop_door_6.png | Bin 0 -> 563 bytes .../Storage/wall_locker.rsi/genpop_door_7.png | Bin 0 -> 557 bytes .../Storage/wall_locker.rsi/genpop_door_8.png | Bin 0 -> 561 bytes .../Storage/wall_locker.rsi/genpop_open.png | Bin 0 -> 536 bytes .../Storage/wall_locker.rsi/meta.json | 180 ++++++++++++++---- 15 files changed, 239 insertions(+), 76 deletions(-) create mode 100644 Resources/Textures/Structures/Storage/wall_locker.rsi/genpop.png create mode 100644 Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_1.png create mode 100644 Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_2.png create mode 100644 Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_3.png create mode 100644 Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_4.png create mode 100644 Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_5.png create mode 100644 Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_6.png create mode 100644 Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_7.png create mode 100644 Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_8.png create mode 100644 Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_open.png diff --git a/Content.Server/Security/GenpopSystem.cs b/Content.Server/Security/GenpopSystem.cs index 0a4233308e..5bff46ad38 100644 --- a/Content.Server/Security/GenpopSystem.cs +++ b/Content.Server/Security/GenpopSystem.cs @@ -1,14 +1,24 @@ using Content.Shared.Security.Components; using Content.Shared.Security.Systems; +using Content.Shared.Wall; namespace Content.Server.Security; public sealed class GenpopSystem : SharedGenpopSystem { + private const float GenpopIDEjectDistanceFromWall = 1f; protected override void CreateId(Entity ent, string name, float sentence, string crime) { + // Default to prisoner locker coordinates for ID spawn var xform = Transform(ent); - var uid = Spawn(ent.Comp.IdCardProto, xform.Coordinates); + var spawnCoordinates = xform.Coordinates; + // Offset prisoner wall locker coordinates in wallmount direction for ID spawn; avoids spawning ID inside wall + if (TryComp(ent, out var wallMountComponent)) + { + var offset = (wallMountComponent.Direction + xform.LocalRotation - Math.PI / 2).ToVec() * GenpopIDEjectDistanceFromWall; + spawnCoordinates = spawnCoordinates.Offset(offset); + } + var uid = Spawn(ent.Comp.IdCardProto, spawnCoordinates); ent.Comp.LinkedId = uid; IdCard.TryChangeFullName(uid, name); diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml index 47075f07e5..6713a8303d 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml @@ -398,11 +398,8 @@ # Genpop Storage - type: entity - id: LockerPrisoner - parent: LockerBaseSecure - name: prisoner closet - description: It's a secure locker for an inmate's personal belongings during their time in prison. - suffix: 1 + id: GenpopBase + abstract: true components: - type: GenpopLocker - type: EntityStorageVisuals @@ -418,6 +415,19 @@ - type: Lock locked: false useAccess: false + - type: EntityStorage + open: True + removedMasks: 20 + - type: PlaceableSurface + isPlaceable: True + +- type: entity + parent: [ GenpopBase , LockerBaseSecure ] + id: LockerPrisoner + name: prisoner closet + description: It's a secure locker for an inmate's personal belongings during their time in prison. + suffix: 1 + components: - type: Fixtures fixtures: fix1: @@ -439,63 +449,58 @@ hard: True restitution: 0 friction: 0.4 - - type: EntityStorage - open: True - removedMasks: 20 - - type: PlaceableSurface - isPlaceable: True - type: entity - id: LockerPrisoner2 parent: LockerPrisoner + id: LockerPrisoner2 suffix: 2 components: - type: EntityStorageVisuals stateDoorClosed: genpop_door_2 - type: entity - id: LockerPrisoner3 parent: LockerPrisoner + id: LockerPrisoner3 suffix: 3 components: - type: EntityStorageVisuals stateDoorClosed: genpop_door_3 - type: entity - id: LockerPrisoner4 parent: LockerPrisoner + id: LockerPrisoner4 suffix: 4 components: - type: EntityStorageVisuals stateDoorClosed: genpop_door_4 - type: entity - id: LockerPrisoner5 parent: LockerPrisoner + id: LockerPrisoner5 suffix: 5 components: - type: EntityStorageVisuals stateDoorClosed: genpop_door_5 - type: entity - id: LockerPrisoner6 parent: LockerPrisoner + id: LockerPrisoner6 suffix: 6 components: - type: EntityStorageVisuals stateDoorClosed: genpop_door_6 - type: entity - id: LockerPrisoner7 parent: LockerPrisoner + id: LockerPrisoner7 suffix: 7 components: - type: EntityStorageVisuals stateDoorClosed: genpop_door_7 - type: entity - id: LockerPrisoner8 parent: LockerPrisoner + id: LockerPrisoner8 suffix: 8 components: - type: EntityStorageVisuals diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml index 84b25d1351..211eee609a 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/base_structureclosets.yml @@ -195,6 +195,11 @@ SheetSteel1: min: 1 max: 1 + - type: Appearance + - type: EntityStorageVisuals + stateBaseClosed: generic + stateDoorOpen: generic_open + stateDoorClosed: generic_door - type: Construction graph: ClosetWall node: done diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml index 311cccd429..7943e74e94 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/wall_lockers.yml @@ -4,7 +4,6 @@ name: maintenance wall closet description: It's a storage unit. components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -16,7 +15,6 @@ parent: BaseWallCloset description: It's a storage unit for emergency breath masks and O2 tanks. components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: emergency stateDoorOpen: emergency_open @@ -28,7 +26,6 @@ name: emergency nitrogen wall closet description: It's full of life-saving equipment. Assuming, that is, that you breathe nitrogen. components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: n2 stateDoorOpen: n2_open @@ -40,7 +37,6 @@ parent: BaseWallCloset description: It's a storage unit for fire-fighting supplies. components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: fire stateDoorOpen: fire_open @@ -52,7 +48,6 @@ name: blue wall closet description: "A wardrobe packed with stylish blue clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -64,7 +59,6 @@ name: pink wall closet description: "A wardrobe packed with fabulous pink clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -76,7 +70,6 @@ name: black wall closet description: "A wardrobe packed with stylish black clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -88,7 +81,6 @@ name: green wall closet description: "A wardrobe packed with stylish green clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -99,7 +91,6 @@ parent: BaseWallCloset name: prison wall closet components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -111,7 +102,6 @@ name: yellow wall closet description: "A wardrobe packed with stylish yellow clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -123,7 +113,6 @@ name: white wall closet description: "A wardrobe packed with stylish white clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -135,7 +124,6 @@ name: grey wall closet description: "A wardrobe packed with a tide of grey clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -147,7 +135,6 @@ name: mixed wall closet description: "A wardrobe packed with a mix of colorful clothing." components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -158,7 +145,6 @@ parent: BaseWallCloset name: atmospherics wall closet components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: generic stateDoorOpen: generic_open @@ -169,7 +155,6 @@ parent: BaseWallLocker name: medical wall locker components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: med stateDoorOpen: med_open @@ -183,10 +168,72 @@ name: emergency shuttle emergency wall locker description: It's emergencies all the way down. components: - - type: Appearance - type: EntityStorageVisuals stateBaseClosed: eng stateDoorOpen: eng_open stateDoorClosed: eng_evac_door - type: AccessReader access: [["Engineering"]] + +- type: entity + parent: [ GenpopBase , BaseWallLocker ] + id: LockerWallBasePrisoner + name: prisoner wall closet + description: It's a secure locker for an inmate's personal belongings during their time in prison. + suffix: 1 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner2 + suffix: 2 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_2 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner3 + suffix: 3 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_3 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner4 + suffix: 4 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_4 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner5 + suffix: 5 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_5 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner6 + suffix: 6 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_6 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner7 + suffix: 7 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_7 + +- type: entity + parent: LockerWallBasePrisoner + id: LockerWallPrisoner8 + suffix: 8 + components: + - type: EntityStorageVisuals + stateDoorClosed: genpop_door_8 diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop.png new file mode 100644 index 0000000000000000000000000000000000000000..530eb5f14935ccd50806d8d80778ea1e3e42ccaf GIT binary patch literal 481 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil&0(?ST6J=y<1O+uTG_0(w`1ttr_4I6PY#bdOU0hs%N}Td*%YhVENswRg ze;8ocbVlbqP?WR4BeIx*f$uN~Gak=hkpdKyC~=J_3C>R|DNig)We7;j%q!9Ja}7~2 z)iczykj{Ly0;pzNYJ_K+r>7PJ2avM7EfkicmY%dqtPs707^|@XJ7%UG%zwYU|aw(6=Wmp0*FadfNT(8 z0-DPNRvBbz0c1gS85$UXWOvD1IREU?>jW|bJY5_^Ec~yYy2#aFz~g-J>e{lu|K-1_ zUSJV)oUrk?5XbVT-qnq1L4R*-aW=ZcW3^RVf{X1P)4BtN#uh8*I|ST6uq2G}CEuZ? f2Vx(r{HpMoNiAJ=v*i}qevmz$u6{1-oD!M<5N~z3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_1.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2de76478ceda3d280aef1888bf2c810ab6e7406e GIT binary patch literal 557 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCik#1AIbUXX@yzH!?b*tE;K0`Tzg__fMbPcW}76e@{k6MnXaY5IZ?_U#$SD*_ImNnda%K#lQjNurf$7vNA9N zSzbUa4P}FTs=>$%7H0yo4H=mj1b}oD5NEctfW@nsj7$7hj%~A%S)C6`0 z7NAN4BVz-`1rSp~HnJ{&m^1~*1_36ZxlCY{L6#Ok7F3s^fdNSNX>Dd}QsC5mKxTud zi(`m||J^=Mz6J#WmQ)te!kPc~hh4a~MR59&$=75&vbdZUn*Y(&;Bk~%zG~v7X<$hXq!Q9lOl_Gkv^Y2y&OFtDnm{r-UW|^F5mU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_2.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e82b1f42dc6ef739340d4f9ad414d29204d148 GIT binary patch literal 563 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCik#1AIbUXX@yzH!?b*tE;K0`Tzg__fMbPcW}76e@{k6MnXaY5IZPD}ZXYrABzBd3tIwZ~!^13{s4&42(dQ z7Z6KB*&v^4FfxP1nSg9VMkWRUARPt7ne8lK@hl)41U{89GQ0o=2#iLvlmRF;ft`T` zsM5g5*nn{X#8i-ttP3C}O#!k&fC*?W6If-Cr3H`$)n#a40FphECsyMX{6YrEZ1Z$+ z46*RP+jo$!SwVm`)p6pY(*OUnW8bWYIm+5i7WwR=FW^K|udS?83{ F1OSraqiO&E literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_3.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b8adf01ffc602ef97a4dbbe6fcc52805bdfc26 GIT binary patch literal 558 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCik#1AIbUXX@yzH!?b*tE;K0`Tzg__fMbPcW}76e@{k6MnXaY5IZPD}ZXYrABzBd3tIwZ~!^13{s4&42(dQ z7Z6KB*&v^4FfxP1nSg9VMkWRUARPt7ne8lK@hl)41U{89GQ0o=2#iLvlmRF;ft`T` zsM5g5*nn{X#8i-ttP3C}O#!k&fC*?W6If-Cr3H`$)n#a40FphECsyMX{6YrEZ1i+- z46*RP+vm;Kpuoerw5jXI%fJ5GkBlqbM1;ewVkh{h^G+4}5gj1eWD*yuymjr`j$)-G z1Jnb-Ja!SPe=ihL^U%HQ~#0yvh5 zo(MKr{;{sbhE?&b?}vYf{LCyEP99{H=LivRG%@?L!}C2bt{E6SUHx3vIVCg!08F}? AL;wH) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_4.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_4.png new file mode 100644 index 0000000000000000000000000000000000000000..a553c10ccd207632cebe0bcbeba665c62f28c94a GIT binary patch literal 554 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCik#1AIbUXX@yzH!?b*tE;K0`Tzg__fMbPcW}76e@{k6MnXaY5IZPD}ZXYrABzBd3tIwZ~!^13{s4&42(dQ z7Z6KB*&v^4FfxP1nSg9VMkWRUARPt7ne8lK@hl)41U{89GQ0o=2#iLvlmRF;ft`T` zsM5g5*nn{X#8i-ttP3C}O#!k&fC*?W6If-Cr3H`$)n#a40FphECsyMX{6YrEto3wp z46*RP+k2C*L4k*5>7tH`FaP(4nXHa{)Ob;SuH6J5^`#eh>bbd`CmdUywPedu(Up%n z8lNl>lXeVnUdE^wGBaV{M-zoUCUN`w1ruaU<^ko7o@&?QQ(?FLX5KV`vrY0utbyL+ uTK=8fhm6Dz{^r(hcVtpwSFceBn9DHfr8!gN5w}8+qdZ;xT-G@yGywqfvY6oj literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_5.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_5.png new file mode 100644 index 0000000000000000000000000000000000000000..589f524ef077b19fbbc5405e578ad9a442810543 GIT binary patch literal 559 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCik#1AIbUXX@yzH!?b*tE;K0`Tzg__fMbPcW}76e@{k6MnXaY5IZPD}ZXYrABzBd3tIwZ~!^13{s4&42(dQ z7Z6KB*&v^4FfxP1nSg9VMkWRUARPt7ne8lK@hl)41U{89GQ0o=2#iLvlmRF;ft`T` zsM5g5*nn{X#8i-ttP3C}O#!k&fC*?W6If-Cr3H`$)n#a40FphECsyMX{6YrEZ1Qw* z46*RP+k26(S%JrOY11i*&Hw*z4J(RWCwTG5^0!|apA=jwt2(%!b*{3<8zgw&ZH)tnb58;#!PADA0oG0nPR&dM+2x((zqPgg&ebxsLQ0If=( A82|tP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_6.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_6.png new file mode 100644 index 0000000000000000000000000000000000000000..2a0949de4a96ccfe17a6917a55df7e6323b5b4f8 GIT binary patch literal 563 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCik#1AIbUXX@yzH!?b*tE;K0`Tzg__fMbPcW}76e@{k6MnXaY5IZPD}ZXYrABzBd3tIwZ~!^13{s4&42(dQ z7Z6KB*&v^4FfxP1nSg9VMkWRUARPt7ne8lK@hl)41U{89GQ0o=2#iLvlmRF;ft`T` zsM5g5*nn{X#8i-ttP3C}O#!k&fC*?W6If-Cr3H`$)n#a40FphECsyMX{6YrEZ1Z$+ z46*RP+k26(S%JrOVbiG@oB#jcDps~VX7Qqv^PatAKKatKu`EaX-a zTHMk8WWn@=8~3DMDqcVM+et@!mgCNg`wD)rZWQPF_H#Ppq-I0I2{JYtynbdfpFG&| zw^d<2%X+3KYBOFhF>%amidioBr|#k5ybVl~nwkG81jI7TTyM_mJUiwl$aS8selF{r G5}E+aK&Nv6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_7.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_7.png new file mode 100644 index 0000000000000000000000000000000000000000..5d865d58a8a7de28f010b25ea74a8157990384d1 GIT binary patch literal 557 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCik#1AIbUXX@yzH!?b*tE;K0`Tzg__fMbPcW}76e@{k6MnXaY5IZPD}ZXYrABzBd3tIwZ~!^13{s4&42(dQ z7Z6KB*&v^4FfxP1nSg9VMkWRUARPt7ne8lK@hl)41U{89GQ0o=2#iLvlmRF;ft`T` zsM5g5*nn{X#8i-ttP3C}O#!k&fC*?W6If-Cr3H`$)n#a40FphECsyMX{6YrEZ18k( z46*RP+vm;KY{0|X>B*7F_2b|2qZh8fa;*vCEOk8I?eTcxR5$HE(HAV5OyWY-*XHl_ z;BY+RSahM&{K$p{%{tB3TT}mUZn(j{sP?~e%aaBEJSyz`Yl7--ITRTr{CAz8eQ*cE yPR?beK~f6lj&aXbcGNvQn-{=v@*tx*M@V|pUb8;}7Z)A`xy#el&t;ucLK6UUhMzD1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_8.png b/Resources/Textures/Structures/Storage/wall_locker.rsi/genpop_door_8.png new file mode 100644 index 0000000000000000000000000000000000000000..da6e8b06a7aa2cafdac56c17a85f3b3240865d44 GIT binary patch literal 561 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCik#1AIbUXX@yzH!?b*tE;K0`Tzg__fMbPcW}76e@{k6MnXaY5IZPD}ZXYrABzBd3tIwZ~!^13{s4&42(dQ z7Z6KB*&v^4FfxP1nSg9VMkWRUARPt7ne8lK@hl)41U{89GQ0o=2#iLvlmRF;ft`T` zsM5g5*nn{X#8i-ttP3C}O#!k&fC*?W6If-Cr3H`$)n#a40FphECsyMX{6YrEZ1Hq) z46*RP+jo(#S%JrOX;askoB#huaqrf|6|__)3EOg8w4}2G;|3P5@;%3p^r=feH?TFyrz36)8YLi4xa{lHmNblJdl& zREB`W%)AmkKi3ciQ$0gH3+c>PD}ZXYrABzBd3tIwZ~!^13{s4&42(dQ7Z6KB*&yF( zFfxP1LH;vjWMU8i(osO1+0FtM&jPYRVDV%Ih8I9ZFdEHL2B6dgb_N!pN&_Qf1I7gq zQ$aSeE`XRc1;_>gCZM@YV3k3Z7C;tMm!W|HNOqUJh4arIy-pyr+|$J|#KQmTWJ|sV z10EK0l{sqv|LbkrIyKOPtK~?^y_wfm$kvH22>r#Uplbhqh4JiVWeH)G96t3zDSUzo zyY-FRJJ^>_Nqs7CaNFw8SqC@Hmg5lPo7mW}Pnx6sgo8r!!IO%Q8YN_uq&j5S+BxLr ge7+ZN@{(n1-0CZOp+RpwUW1(D>FVdQ&MBb@0HRor_y7O^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/wall_locker.rsi/meta.json b/Resources/Textures/Structures/Storage/wall_locker.rsi/meta.json index 18a7b2065c..f5b67de849 100644 --- a/Resources/Textures/Structures/Storage/wall_locker.rsi/meta.json +++ b/Resources/Textures/Structures/Storage/wall_locker.rsi/meta.json @@ -1,44 +1,140 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from shiptest at commmit https://github.com/shiptest-ss13/Shiptest/commit/440a15fb476a20d77ba28c1fe315c1b659032ce8, edited by Alekshhh, N2 lockers edited by Lamrr, Evac lockers by EmoGarbage404 (GitHub)", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { "name": "atmos_door" }, - { "name": "black_door" }, - { "name": "blue_door" }, - { "name": "emergency" }, - { "name": "emergency_door" }, - { "name": "emergency_open" }, - { "name": "fire" }, - { "name": "fire_door" }, - { "name": "fire_open" }, - { "name": "generic" }, - { "name": "generic_door" }, - { "name": "generic_icon" }, - { "name": "generic_open" }, - { "name": "gray_door" }, - { "name": "green_door" }, - { "name": "locked" }, - { "name": "med" }, - { "name": "med_door" }, - { "name": "med_open" }, - { "name": "mixed_door" }, - { "name": "n2" }, - { "name": "n2_door" }, - { "name": "n2_open" }, - { "name": "orange_door" }, - { "name": "pink_door" }, - { "name": "red_door" }, - { "name": "unlocked" }, - { "name": "welded" }, - { "name": "white_door" }, - { "name": "yellow_door" }, - { "name": "eng" }, - { "name": "eng_open" }, - { "name": "eng_evac_door" } - ] + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from shiptest at commmit https://github.com/shiptest-ss13/Shiptest/commit/440a15fb476a20d77ba28c1fe315c1b659032ce8, edited by Alekshhh, N2 lockers edited by Lamrr, Evac lockers by EmoGarbage404 (GitHub), genpop* derived from Wizards Den SS14 by K-Dynamic (github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "atmos_door" + }, + { + "name": "black_door" + }, + { + "name": "blue_door" + }, + { + "name": "emergency" + }, + { + "name": "emergency_door" + }, + { + "name": "emergency_open" + }, + { + "name": "fire" + }, + { + "name": "fire_door" + }, + { + "name": "fire_open" + }, + { + "name": "generic" + }, + { + "name": "generic_door" + }, + { + "name": "generic_icon" + }, + { + "name": "generic_open" + }, + { + "name": "gray_door" + }, + { + "name": "green_door" + }, + { + "name": "locked" + }, + { + "name": "med" + }, + { + "name": "med_door" + }, + { + "name": "med_open" + }, + { + "name": "mixed_door" + }, + { + "name": "n2" + }, + { + "name": "n2_door" + }, + { + "name": "n2_open" + }, + { + "name": "orange_door" + }, + { + "name": "pink_door" + }, + { + "name": "red_door" + }, + { + "name": "unlocked" + }, + { + "name": "welded" + }, + { + "name": "white_door" + }, + { + "name": "yellow_door" + }, + { + "name": "eng" + }, + { + "name": "eng_open" + }, + { + "name": "eng_evac_door" + }, + { + "name": "genpop" + }, + { + "name": "genpop_open" + }, + { + "name": "genpop_door_1" + }, + { + "name": "genpop_door_2" + }, + { + "name": "genpop_door_3" + }, + { + "name": "genpop_door_4" + }, + { + "name": "genpop_door_5" + }, + { + "name": "genpop_door_6" + }, + { + "name": "genpop_door_7" + }, + { + "name": "genpop_door_8" + } + ] } From 7ce2d241dd3800368d65d1b2328f90eec286e6ec Mon Sep 17 00:00:00 2001 From: Perry Fraser Date: Sat, 7 Jun 2025 13:36:58 -0400 Subject: [PATCH 52/63] fix: allow ejecting diamonds from lathes/silos (#38132) --- Resources/Prototypes/Reagents/Materials/materials.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Reagents/Materials/materials.yml b/Resources/Prototypes/Reagents/Materials/materials.yml index 9d8484e9f0..42ae9ba4b7 100644 --- a/Resources/Prototypes/Reagents/Materials/materials.yml +++ b/Resources/Prototypes/Reagents/Materials/materials.yml @@ -105,7 +105,7 @@ name: materials-cotton unit: materials-unit-boll icon: { sprite: Objects/Materials/materials.rsi, state: cotton } - color: "#cccccc" + color: "#cccccc" price: 0.01 #Who knew cotton was infinitely more valuable than silk - type: material @@ -135,6 +135,7 @@ - type: material id: Diamond + stackEntity: MaterialDiamond1 name: materials-diamond unit: materials-unit-piece icon: { sprite: Objects/Materials/materials.rsi, state: diamond } From 5f4e55e583a9e2b03c965c0a66dcf3de3e418241 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 7 Jun 2025 17:38:04 +0000 Subject: [PATCH 53/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 83efd1fb19..c233e63d35 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: qwerltaz - changes: - - message: Dragon rifts now shine a different color depending on charge progress. - type: Add - id: 8124 - time: '2025-04-02T18:37:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36216 - author: aada changes: - message: Diphenhydramine now causes light drowsiness. @@ -3906,3 +3899,10 @@ id: 8635 time: '2025-06-07T13:05:25.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/36019 +- author: perryprog + changes: + - message: Diamonds can now be ejected from lathes and material silos. + type: Fix + id: 8636 + time: '2025-06-07T17:36:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38132 From 9cb1a669d6d24a8352e878215a2083a9ad705418 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Sat, 7 Jun 2025 23:37:13 +0200 Subject: [PATCH 54/63] make PacifiedComponent session specific (#38137) --- .../Pacification/PacifiedComponent.cs | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/Content.Shared/CombatMode/Pacification/PacifiedComponent.cs b/Content.Shared/CombatMode/Pacification/PacifiedComponent.cs index 96081e5dc6..1ec48dc213 100644 --- a/Content.Shared/CombatMode/Pacification/PacifiedComponent.cs +++ b/Content.Shared/CombatMode/Pacification/PacifiedComponent.cs @@ -17,33 +17,46 @@ namespace Content.Shared.CombatMode.Pacification; [Access(typeof(PacificationSystem))] public sealed partial class PacifiedComponent : Component { + /// + /// If true, this will prevent you from disarming opponents in combat. + /// [DataField] public bool DisallowDisarm = false; /// - /// If true, this will disable combat entirely instead of only disallowing attacking living creatures and harmful things. + /// If true, this will disable combat entirely instead of only disallowing attacking living creatures and harmful things. /// [DataField] public bool DisallowAllCombat = false; /// - /// When attempting attack against the same entity multiple times, - /// don't spam popups every frame and instead have a cooldown. + /// When attempting attack against the same entity multiple times, + /// don't spam popups every frame and instead have a cooldown. /// [DataField] public TimeSpan PopupCooldown = TimeSpan.FromSeconds(3.0); + /// + /// Time at which the next popup can be shown. + /// [DataField] [AutoPausedField] public TimeSpan? NextPopupTime = null; /// - /// The last entity attacked, used for popup purposes (avoid spam) + /// The last entity attacked, used for popup purposes (avoid spam) /// [DataField] public EntityUid? LastAttackedEntity = null; + /// + /// The alert to show to owners of this component. + /// [DataField] public ProtoId PacifiedAlert = "Pacified"; + + // Prevent cheat clients from using this to identify thieves and players that cannot fight back. + // This should not matter for prediction reasons since it only blocks user input. + public override bool SendOnlyToOwner => true; } From a1173e3c279742d6a681d70104e63583aa8f558c Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Sun, 8 Jun 2025 00:23:46 +0200 Subject: [PATCH 55/63] Fix stripping window for more than 2 hands (#37577) --- .../Inventory/StrippableBoundUserInterface.cs | 32 +++++++++++++++++-- Content.Client/Strip/StrippingMenu.cs | 2 +- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/Content.Client/Inventory/StrippableBoundUserInterface.cs b/Content.Client/Inventory/StrippableBoundUserInterface.cs index 295d4848e5..a9a937d5d8 100644 --- a/Content.Client/Inventory/StrippableBoundUserInterface.cs +++ b/Content.Client/Inventory/StrippableBoundUserInterface.cs @@ -50,6 +50,18 @@ namespace Content.Client.Inventory [ViewVariables] private readonly EntityUid _virtualHiddenEntity; + /// + /// The current amount of added hand buttons. + /// + [ViewVariables] + private int _handCount; + + /// + /// The current shape of the inventory, needed to calculate the window size. + /// + [ViewVariables] + private Vector2i _inventoryDimensions; + public StrippableBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { _examine = EntMan.System(); @@ -93,6 +105,8 @@ namespace Content.Client.Inventory return; _strippingMenu.ClearButtons(); + _handCount = 0; + _inventoryDimensions = Vector2i.Zero; if (EntMan.TryGetComponent(Owner, out var inv)) { @@ -152,9 +166,15 @@ namespace Content.Client.Inventory // TODO allow windows to resize based on content's desired size // for now: shit-code - // this breaks for drones (too many hands, lots of empty vertical space), and looks shit for monkeys and the like. - // but the window is realizable, so eh. - _strippingMenu.SetSize = new Vector2(220, snare?.IsEnsnared == true ? 550 : 530); + // calculate the window size manually + // +20 horizontally and vertically from the ContentsContainer margin + // +16 vertically from the BoxContainer margin + // +27 vertically from the window header + var horizontalMenuSize = Math.Max(200, Math.Max(_handCount, _inventoryDimensions.X + 1) * (SlotControl.DefaultButtonSize + ButtonSeparation) + 20); + var verticalMenuSize = Math.Max(200, (_inventoryDimensions.Y + (_handCount > 0 ? 2 : 1)) * (SlotControl.DefaultButtonSize + ButtonSeparation) + 53); + if (snare?.IsEnsnared == true) + verticalMenuSize += 20; + _strippingMenu.SetSize = new Vector2(horizontalMenuSize, verticalMenuSize); } private void AddHandButton(Hand hand) @@ -172,6 +192,8 @@ namespace Content.Client.Inventory UpdateEntityIcon(button, hand.HeldEntity); _strippingMenu!.HandsContainer.AddChild(button); + LayoutContainer.SetPosition(button, new Vector2i(_handCount, 0) * (SlotControl.DefaultButtonSize + ButtonSeparation)); + _handCount++; } private void SlotPressed(GUIBoundKeyEventArgs ev, SlotControl slot) @@ -220,6 +242,10 @@ namespace Content.Client.Inventory UpdateEntityIcon(button, entity); LayoutContainer.SetPosition(button, slotDef.StrippingWindowPos * (SlotControl.DefaultButtonSize + ButtonSeparation)); + if (slotDef.StrippingWindowPos.X > _inventoryDimensions.X) + _inventoryDimensions = new Vector2i(slotDef.StrippingWindowPos.X, _inventoryDimensions.Y); + if (slotDef.StrippingWindowPos.Y > _inventoryDimensions.Y) + _inventoryDimensions = new Vector2i(_inventoryDimensions.X, slotDef.StrippingWindowPos.Y); } private void UpdateEntityIcon(SlotControl button, EntityUid? entity) diff --git a/Content.Client/Strip/StrippingMenu.cs b/Content.Client/Strip/StrippingMenu.cs index 1c46b4be35..531e5fb44d 100644 --- a/Content.Client/Strip/StrippingMenu.cs +++ b/Content.Client/Strip/StrippingMenu.cs @@ -8,7 +8,7 @@ namespace Content.Client.Strip public sealed class StrippingMenu : DefaultWindow { public LayoutContainer InventoryContainer = new(); - public BoxContainer HandsContainer = new() { Orientation = LayoutOrientation.Horizontal }; + public LayoutContainer HandsContainer = new(); public BoxContainer SnareContainer = new(); public bool Dirty = true; From c5bdbdfea9d80ca1dfed62b94e723070f01bd79b Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 7 Jun 2025 22:24:55 +0000 Subject: [PATCH 56/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c233e63d35..ecde01ff33 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: aada - changes: - - message: Diphenhydramine now causes light drowsiness. - type: Tweak - id: 8125 - time: '2025-04-03T06:29:52.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36212 - author: sowelipililimute changes: - message: You can now more easily interact with objects behind faded ones, and @@ -3906,3 +3899,10 @@ id: 8636 time: '2025-06-07T17:36:58.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/38132 +- author: slarticodefast + changes: + - message: Fixed the stripping UI layout when having more than 2 hands. + type: Fix + id: 8637 + time: '2025-06-07T22:23:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37577 From e909ffa933321293a88c08fede5fbbba1ff96ef7 Mon Sep 17 00:00:00 2001 From: Tayrtahn Date: Sat, 7 Jun 2025 18:39:18 -0400 Subject: [PATCH 57/63] Forbid string literals for `NpcFactionSystem` methods (#38140) * Add ForbidLiteral attribute to NpcFactionSystem methods * Cleanup resulting warnings --- .../Tests/GameRules/NukeOpsTest.cs | 17 +++++++----- .../Tests/GameRules/TraitorRuleTest.cs | 7 +++-- .../Zombies/ZombieSystem.Transform.cs | 5 +++- .../NPC/Systems/NpcFactionSystem.cs | 26 +++++++++---------- 4 files changed, 33 insertions(+), 22 deletions(-) diff --git a/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs b/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs index 21a36e7ad5..cf16617479 100644 --- a/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs +++ b/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs @@ -16,6 +16,7 @@ using Content.Shared.FixedPoint; using Content.Shared.GameTicking; using Content.Shared.Hands.Components; using Content.Shared.Inventory; +using Content.Shared.NPC.Prototypes; using Content.Shared.NPC.Systems; using Content.Shared.NukeOps; using Content.Shared.Pinpointer; @@ -23,12 +24,16 @@ using Content.Shared.Station.Components; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Map.Components; +using Robust.Shared.Prototypes; namespace Content.IntegrationTests.Tests.GameRules; [TestFixture] public sealed class NukeOpsTest { + private static readonly ProtoId SyndicateFaction = "Syndicate"; + private static readonly ProtoId NanotrasenFaction = "NanoTrasen"; + /// /// Check that a nuke ops game mode can start without issue. I.e., that the nuke station and such all get loaded. /// @@ -119,8 +124,8 @@ public sealed class NukeOpsTest Assert.That(entMan.HasComponent(player)); Assert.That(roleSys.MindIsAntagonist(mind)); Assert.That(roleSys.MindHasRole(mind)); - Assert.That(factionSys.IsMember(player, "Syndicate"), Is.True); - Assert.That(factionSys.IsMember(player, "NanoTrasen"), Is.False); + Assert.That(factionSys.IsMember(player, SyndicateFaction), Is.True); + Assert.That(factionSys.IsMember(player, NanotrasenFaction), Is.False); var roles = roleSys.MindGetAllRoleInfo(mind); var cmdRoles = roles.Where(x => x.Prototype == "NukeopsCommander"); Assert.That(cmdRoles.Count(), Is.EqualTo(1)); @@ -130,8 +135,8 @@ public sealed class NukeOpsTest Assert.That(entMan.HasComponent(dummyEnts[1])); Assert.That(roleSys.MindIsAntagonist(dummyMind)); Assert.That(roleSys.MindHasRole(dummyMind)); - Assert.That(factionSys.IsMember(dummyEnts[1], "Syndicate"), Is.True); - Assert.That(factionSys.IsMember(dummyEnts[1], "NanoTrasen"), Is.False); + Assert.That(factionSys.IsMember(dummyEnts[1], SyndicateFaction), Is.True); + Assert.That(factionSys.IsMember(dummyEnts[1], NanotrasenFaction), Is.False); roles = roleSys.MindGetAllRoleInfo(dummyMind); cmdRoles = roles.Where(x => x.Prototype == "NukeopsMedic"); Assert.That(cmdRoles.Count(), Is.EqualTo(1)); @@ -146,8 +151,8 @@ public sealed class NukeOpsTest Assert.That(entMan.HasComponent(ent), Is.False); Assert.That(roleSys.MindIsAntagonist(mindCrew), Is.False); Assert.That(roleSys.MindHasRole(mindCrew), Is.False); - Assert.That(factionSys.IsMember(ent, "Syndicate"), Is.False); - Assert.That(factionSys.IsMember(ent, "NanoTrasen"), Is.True); + Assert.That(factionSys.IsMember(ent, SyndicateFaction), Is.False); + Assert.That(factionSys.IsMember(ent, NanotrasenFaction), Is.True); var nukeroles = new List() { "Nukeops", "NukeopsMedic", "NukeopsCommander" }; Assert.That(roleSys.MindGetAllRoleInfo(mindCrew).Any(x => nukeroles.Contains(x.Prototype)), Is.False); } diff --git a/Content.IntegrationTests/Tests/GameRules/TraitorRuleTest.cs b/Content.IntegrationTests/Tests/GameRules/TraitorRuleTest.cs index d2717521b2..97fe1c8762 100644 --- a/Content.IntegrationTests/Tests/GameRules/TraitorRuleTest.cs +++ b/Content.IntegrationTests/Tests/GameRules/TraitorRuleTest.cs @@ -8,6 +8,7 @@ using Content.Server.Roles; using Content.Shared.GameTicking; using Content.Shared.GameTicking.Components; using Content.Shared.Mind; +using Content.Shared.NPC.Prototypes; using Content.Shared.NPC.Systems; using Content.Shared.Objectives.Components; using Robust.Shared.GameObjects; @@ -20,6 +21,8 @@ public sealed class TraitorRuleTest { private const string TraitorGameRuleProtoId = "Traitor"; private const string TraitorAntagRoleName = "Traitor"; + private static readonly ProtoId SyndicateFaction = "Syndicate"; + private static readonly ProtoId NanotrasenFaction = "NanoTrasen"; [Test] public async Task TestTraitorObjectives() @@ -108,8 +111,8 @@ public sealed class TraitorRuleTest // Make sure the player is a traitor. var mind = mindSys.GetMind(player)!.Value; Assert.That(roleSys.MindIsAntagonist(mind)); - Assert.That(factionSys.IsMember(player, "Syndicate"), Is.True); - Assert.That(factionSys.IsMember(player, "NanoTrasen"), Is.False); + Assert.That(factionSys.IsMember(player, SyndicateFaction), Is.True); + Assert.That(factionSys.IsMember(player, NanotrasenFaction), Is.False); Assert.That(traitorRule.TotalTraitors, Is.EqualTo(1)); Assert.That(traitorRule.TraitorMinds[0], Is.EqualTo(mind)); diff --git a/Content.Server/Zombies/ZombieSystem.Transform.cs b/Content.Server/Zombies/ZombieSystem.Transform.cs index 479c56cd5e..03be40aad2 100644 --- a/Content.Server/Zombies/ZombieSystem.Transform.cs +++ b/Content.Server/Zombies/ZombieSystem.Transform.cs @@ -38,6 +38,7 @@ using Content.Shared.Ghost.Roles.Components; using Content.Shared.Tag; using Robust.Shared.Player; using Robust.Shared.Prototypes; +using Content.Shared.NPC.Prototypes; namespace Content.Server.Zombies; @@ -66,6 +67,8 @@ public sealed partial class ZombieSystem private static readonly ProtoId InvalidForGlobalSpawnSpellTag = "InvalidForGlobalSpawnSpell"; private static readonly ProtoId CannotSuicideTag = "CannotSuicide"; + private static readonly ProtoId ZombieFaction = "Zombie"; + /// /// Handles an entity turning into a zombie when they die or go into crit /// @@ -223,7 +226,7 @@ public sealed partial class ZombieSystem _mobState.ChangeMobState(target, MobState.Alive); _faction.ClearFactions(target, dirty: false); - _faction.AddFaction(target, "Zombie"); + _faction.AddFaction(target, ZombieFaction); //gives it the funny "Zombie ___" name. _nameMod.RefreshNameModifiers(target); diff --git a/Content.Shared/NPC/Systems/NpcFactionSystem.cs b/Content.Shared/NPC/Systems/NpcFactionSystem.cs index 0d684de80b..734cb1d0ff 100644 --- a/Content.Shared/NPC/Systems/NpcFactionSystem.cs +++ b/Content.Shared/NPC/Systems/NpcFactionSystem.cs @@ -73,7 +73,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// /// Returns whether an entity is a member of a faction. /// - public bool IsMember(Entity ent, string faction) + public bool IsMember(Entity ent, [ForbidLiteral] string faction) { if (!Resolve(ent, ref ent.Comp, false)) return false; @@ -85,7 +85,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// Returns whether an entity is a member of any listed faction. /// If the list is empty this returns false. /// - public bool IsMemberOfAny(Entity ent, IEnumerable> factions) + public bool IsMemberOfAny(Entity ent, [ForbidLiteral] IEnumerable> factions) { if (!Resolve(ent, ref ent.Comp, false)) return false; @@ -102,7 +102,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// /// Adds this entity to the particular faction. /// - public void AddFaction(Entity ent, string faction, bool dirty = true) + public void AddFaction(Entity ent, [ForbidLiteral] string faction, bool dirty = true) { if (!_proto.HasIndex(faction)) { @@ -121,7 +121,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// /// Adds this entity to the particular faction. /// - public void AddFactions(Entity ent, HashSet> factions, bool dirty = true) + public void AddFactions(Entity ent, [ForbidLiteral] HashSet> factions, bool dirty = true) { ent.Comp ??= EnsureComp(ent); @@ -143,7 +143,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// /// Removes this entity from the particular faction. /// - public void RemoveFaction(Entity ent, string faction, bool dirty = true) + public void RemoveFaction(Entity ent, [ForbidLiteral] string faction, bool dirty = true) { if (!_proto.HasIndex(faction)) { @@ -202,7 +202,7 @@ public sealed partial class NpcFactionSystem : EntitySystem return GetNearbyFactions(ent, range, ent.Comp.FriendlyFactions); } - private IEnumerable GetNearbyFactions(EntityUid entity, float range, HashSet> factions) + private IEnumerable GetNearbyFactions(EntityUid entity, float range, [ForbidLiteral] HashSet> factions) { var xform = Transform(entity); foreach (var ent in _lookup.GetEntitiesInRange(_xform.GetMapCoordinates((entity, xform)), range)) @@ -228,12 +228,12 @@ public sealed partial class NpcFactionSystem : EntitySystem return ent.Comp.Factions.Overlaps(other.Comp.Factions) || ent.Comp.FriendlyFactions.Overlaps(other.Comp.Factions); } - public bool IsFactionFriendly(string target, string with) + public bool IsFactionFriendly([ForbidLiteral] string target, [ForbidLiteral] string with) { return _factions[target].Friendly.Contains(with) && _factions[with].Friendly.Contains(target); } - public bool IsFactionFriendly(string target, Entity with) + public bool IsFactionFriendly([ForbidLiteral] string target, Entity with) { if (!Resolve(with, ref with.Comp, false)) return false; @@ -242,12 +242,12 @@ public sealed partial class NpcFactionSystem : EntitySystem with.Comp.FriendlyFactions.Contains(target); } - public bool IsFactionHostile(string target, string with) + public bool IsFactionHostile([ForbidLiteral] string target, [ForbidLiteral] string with) { return _factions[target].Hostile.Contains(with) && _factions[with].Hostile.Contains(target); } - public bool IsFactionHostile(string target, Entity with) + public bool IsFactionHostile([ForbidLiteral] string target, Entity with) { if (!Resolve(with, ref with.Comp, false)) return false; @@ -256,7 +256,7 @@ public sealed partial class NpcFactionSystem : EntitySystem with.Comp.HostileFactions.Contains(target); } - public bool IsFactionNeutral(string target, string with) + public bool IsFactionNeutral([ForbidLiteral] string target, [ForbidLiteral] string with) { return !IsFactionFriendly(target, with) && !IsFactionHostile(target, with); } @@ -264,7 +264,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// /// Makes the source faction friendly to the target faction, 1-way. /// - public void MakeFriendly(string source, string target) + public void MakeFriendly([ForbidLiteral] string source, [ForbidLiteral] string target) { if (!_factions.TryGetValue(source, out var sourceFaction)) { @@ -286,7 +286,7 @@ public sealed partial class NpcFactionSystem : EntitySystem /// /// Makes the source faction hostile to the target faction, 1-way. /// - public void MakeHostile(string source, string target) + public void MakeHostile([ForbidLiteral] string source, [ForbidLiteral] string target) { if (!_factions.TryGetValue(source, out var sourceFaction)) { From 499055b9c9f255a048d9917fdca2c879392c8888 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 7 Jun 2025 21:05:23 -0400 Subject: [PATCH 58/63] Update Credits (#38143) Co-authored-by: PJBot --- Resources/Credits/GitHub.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index c97d76e26b..29420548f6 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0leshe, 0tito, 0x6273, 12rabbits, 1337dakota, 13spacemen, 154942, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 3nderall, 4310v343k, 4dplanner, 612git, 778b, aaron, abadaba695, Ablankmann, abregado, Absolute-Potato, Absotively, achookh, Acruid, ActiveMammmoth, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, afrokada, AftrLite, AgentSmithRadio, Agoichi, Ahion, aiden, Aisu9, ajcm, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexum418, alexumandxgabriel08x, Alice4267, Alithsko, alliephante, ALMv1, Alpaccalypse, Alpha-Two, AlphaQwerty, Altoids1, amatwiedle, amylizzle, Andre19926, AndrewEyeke, AndreyCamper, Anzarot121, ApolloVector, Appiah, ar4ill, archee, archee1, ArchPigeon, ArchRBX, areitpog, Arendian, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, ArZarLordOfMango, as334, AsikKEsel, AsnDen, asperger-sind, aspiringLich, astriloqua, august-sun, AutoOtter, AverageNotDoingAnythingEnjoyer, avghdev, Awlod, azzyisnothere, AzzyIsNotHere, B-Kirill, baa14453, BackeTako, Bakke, BananaFlambe, Baptr0b0t, BarryNorfolk, BasedUser, beck-thompson, bellwetherlogic, ben, benbryant0, benev0, benjamin-burges, BGare, bhespiritu, bibbly, bigfootbravo, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlitzTheSquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, Bokser815, bolantej, Booblesnoot42, Boolean-Buckeye, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, BriBrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, BWTCK, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Calecute, Callmore, Camdot, capnsockless, CaptainMaru, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, catdotjs, catlord, Catofquestionableethics, CatTheSystem, Centronias, Chaboricks, chairbender, Chaoticaa, Charlese2, charlie, chartman, ChaseFlorom, chavonadelal, Cheackraze, CheddaCheez, cheesePizza2, CheesePlated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbicous, Chubbygummibear, Ciac32, ciaran, civilCornball, claustro305, Clement-O, clyf, Clyybber, CMDR-Piboy314, coco, cohanna, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, Compilatron144, CookieMasterT, coolboy911, coolmankid12345, Coolsurf6, cooperwallace, corentt, CormosLemming, CrafterKolyan, crazybrain23, Crazydave91920, creadth, CrigCrag, croilbird, Crotalus, CrudeWax, cryals, CrzyPotato, cubixthree, cutemoongod, Cyberboss, d34d10cc, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, dan, dangerrevolution, daniel-cr, DanSAussieITS, Daracke, Darkenson, DawBla, Daxxi3, dch-GH, de0rix, Deahaka, dean, DEATHB4DEFEAT, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, DeepwaterCreations, Deerstop, degradka, Delete69, deltanedas, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, dexlerxd, dffdff2423, DieselMohawk, digitalic, Dimastra, DinnerCalzone, DinoWattz, DisposableCrewmember42, dissidentbullet, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, DR-DOCTOR-EVIL-EVIL, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, DuckManZach, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, dylanstrategie, dylanwhittingham, Dynexust, Easypoller, echo, eclips_e, eden077, EEASAS, Efruit, efzapa, Ekkosangen, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, Entvari, eoineoineoin, eris, erohrs2, ERORR404V1, Errant-4, ertanic, esguard, estacaoespacialpirata, eugene, ewokswagger, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, farrellka-dev, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, firenamefn, Firewars763, FirinMaLazors, Fishfish458, fl-oz, Flareguy, flashgnash, FluffiestFloof, FluffMe, FluidRock, flymo5678, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, freeman2651, freeze2222, frobnic8, Froffy025, Fromoriss, froozigiusz, FrostMando, FrostRibbon, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, gamer3107, Gamewar360, gansulalan, GaussiArson, Gaxeer, gbasood, gcoremans, Geekyhobo, genderGeometries, GeneralGaws, Genkail, Gentleman-Bird, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GnarpGnarp, GNF54, godisdeadLOL, goet, GoldenCan, Goldminermac, Golinth, golubgik, GoodWheatley, Gorox221, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, GreyMario, GrownSamoyedDog, GTRsound, gusxyz, Gyrandola, h3half, hamurlik, Hanzdegloker, HappyRoach, Hardly3D, harikattar, he1acdvv, Hebi, Helm4142, Henry, HerCoyote23, HighTechPuddle, Hitlinemoss, hiucko, hivehum, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hreno, Hrosts, htmlsystem, hubismal, Hugal31, Huxellberger, Hyenh, hyperb1, hyperDelegate, hyphenationc, i-justuser-i, iaada, iacore, IamVelcroboy, Ian321, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imatsoup, IMCB, impubbi, imrenq, imweax, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, Intoxicating-Innocence, IProduceWidgets, itsmethom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jacktastic09, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jarmer123, Jaskanbe, JasperJRoth, jbox144, JCGWE30, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jmcb, JohnGinnane, johnku1, Jophire, joshepvodka, jproads, JrInventor05, Jrpl, jukereise, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, JustinWinningham, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, kaiserbirch, KaiShibaa, kalane15, kalanosh, KamTheSythe, Kanashi-Panda, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, KieueCaprie, Killerqu00, Kimpes, KingFroozy, kira-er, kiri-yoshikage, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, Kittygyat, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, kosticia, koteq, KrasnoshchekovPavel, Krunklehorn, Kupie, kxvvv, kyupolaris, kzhanik, LaCumbiaDelCoronavirus, lajolico, Lamrr, lanedon, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leander-0, leonardo-dabepis, leonidussaks, leonsfriedrich, LeoSantich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, LevitatingTree, Lgibb18, lgruthes, LightVillet, liltenhead, linkbro1, LinkUyx, Litraxx, LittleBuilderJane, LittleNorthStar, LittleNyanCat, lizelive, ljm862, lmsnoise, localcc, lokachop, Lomcastar, LordCarve, LordEclipse, lucas, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luizwritescode, Lukasz825700516, luminight, lunarcomets, Lusatia, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, Magicalus, magmodius, MagnusCrowe, malchanceux, MaloTV, manelnavola, ManelNavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, memeproof, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, mifia, MilenVolf, MilonPL, Minemoder5000, Minty642, minus1over12, Mirino97, mirrorcult, misandrie, MishaUnity, MissKay1994, MisterImp, MisterMecky, Mith-randalf, mjarduk, MjrLandWhale, mkanke-real, MLGTASTICa, moderatelyaware, modern-nm, mokiros, momo, Moneyl, monotheonist, Moomoobeef, moony, Morb0, MossyGreySlope, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, muburu, MureixloI, murolem, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikitosych, nikthechampiongr, Nimfar11, ninruB, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, noelkathegod, noirogen, nok-ko, NonchalantNoob, NoobyLegion, Nopey, not-gavnaed, notafet, notquitehadouken, NotSoDana, noudoit, noverd, Nox38, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, Nyxilath, och-och, OctoRocket, OldDanceJacket, OliverOtter, onesch, OneZerooo0, OnyxTheBrave, Orange-Winds, OrangeMoronage9622, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paige404, paigemaeforrest, pali6, Palladinium, Pangogie, panzer-iv1, partyaddict, patrikturi, PaulRitter, peccneck, Peptide90, peptron1, perryprog, PeterFuto, PetMudstone, pewter-wiz, Pgriha, Phantom-Lily, pheenty, philingham, Phill101, Phooooooooooooooooooooooooooooooosphate, phunnyguy, PicklOH, PilgrimViis, Pill-U, pinkbat5, Piras314, Pireax, Pissachu, pissdemon, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, poeMota, pofitlo, pointer-to-null, pok27, poklj, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, PotRoastPiggy, ProfanedBane, PROG-MohamedDwidar, Prole0, Pronana, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykana, psykzz, PuceTint, pumkin69, PuroSlavKing, PursuitInAshes, Putnam3145, py01, qrtDaniil, qrwas, Quantum-cross, quatre, QueerNB, QuietlyWhisper, qwerltaz, Radezolid, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, RamZ, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, RedBookcase, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, ReeZer2, RemberBM, RemieRichards, RemTim, rene-descartes2021, Renlou, retequizzle, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, RobbyTheFish, robinthedragon, Rockdtben, Rohesie, rok-povsic, rokudara-sen, rolfero, RomanNovo, rosieposieeee, Roudenn, router, ruddygreat, RumiTiger, Ruzihm, S1rFl0, S1ss3l, Saakra, Sadie-silly, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, Samuka-C, SaphireLattice, SapphicOverload, sarahon, sativaleanne, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, schrodinger71, scrato, Scribbles0, scrivoy, scruq445, scuffedjays, ScumbagDog, SeamLesss, Segonist, semensponge, sephtasm, Serkket, sewerpig, SG6732, sh18rw, Shaddap1, ShadeAware, ShadowCommander, shadowtheprotogen546, shaeone, shampunj, shariathotpatrol, SharkSnake98, shibechef, SignalWalker, siigiil, silicon14wastaken, Simyon264, sirdragooon, Sirionaut, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, sleepyyapril, slimmslamm, Slyfox333, snebl, snicket, sniperchance, Snowni, snowsignal, SolidusSnek, solstar2, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, soupkilove, southbridge-fur, sowelipililimute, Soydium, spacelizard, SpaceLizardSky, SpaceManiac, SpaceRox1244, SpaceyLady, Spangs04, spanky-spanky, Sparlight, spartak, SpartanKadence, spderman3333, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, sporkyz, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, starbuckss14, Stealthbomber16, stellar-novas, stewie523, stomf, Stop-Signs, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, supergdpwyl, superjj18, Supernorn, SweptWasTaken, SyaoranFox, Sybil, SYNCHRONIC, Szunti, t, Tainakov, takemysoult, tap, TaralGit, Taran, taurie, Tayrtahn, tday93, teamaki, TeenSarlacc, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, Tezzaide, TGODiamond, TGRCdev, tgrkzus, ThatGuyUSA, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, TheBlueYowie, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, theomund, TheProNoob678, TherapyGoth, TheShuEd, thetolbean, thevinter, TheWaffleJesus, thinbug0, ThunderBear2006, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, TiniestShark, Titian3, tk-a369, tkdrg, tmtmtl30, ToastEnjoyer, Toby222, TokenStyle, Tollhouse, Toly65, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, TornadoTechnology, tosatur, TotallyLemon, ToxicSonicFan04, Tr1bute, trixxedbit, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, tyashley, Tyler-IN, TytosB, Tyzemol, UbaserB, ubis1, UBlueberry, uhbg, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, Unkn0wnGh0st333, unusualcrow, Uriende, UristMcDorf, user424242420, Utmanarn, Vaaankas, valentfingerov, valquaint, Varen, Vasilis, VasilisThePikachu, veliebm, Velken, VelonacepsCalyxEggs, veprolet, VerinSenpai, veritable-calamity, Veritius, Vermidia, vero5123, Verslebas, vexerot, viceemargo, VigersRay, violet754, Visne, vlad, vlados1408, VMSolidus, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, Vortebo, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, weaversam8, wertanchik, whateverusername0, whatston3, widgetbeck, Will-Oliver-Br, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, Wolfkey-SomeoneElseTookMyUsername, wrexbe, wtcwr68, xkreksx, xprospero, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, YoungThugSS14, Yousifb26, youtissoum, yunii, YuriyKiss, yuriykiss, zach-hill, Zadeon, Zalycon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, ZeWaka, zHonys, zionnBE, ZNixian, Zokkie, ZoldorfTheWizard, zonespace27, Zylofan, Zymem, zzylex +0leshe, 0tito, 0x6273, 12rabbits, 1337dakota, 13spacemen, 154942, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 3nderall, 4310v343k, 4dplanner, 612git, 778b, aaron, abadaba695, Ablankmann, abregado, Absolute-Potato, Absotively, achookh, Acruid, ActiveMammmoth, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, afrokada, AftrLite, AgentSmithRadio, Agoichi, Ahion, aiden, Aisu9, ajcm, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexum418, alexumandxgabriel08x, Alice4267, Alithsko, alliephante, ALMv1, Alpaccalypse, Alpha-Two, AlphaQwerty, Altoids1, amatwiedle, amylizzle, Andre19926, AndrewEyeke, AndreyCamper, Anzarot121, ApolloVector, Appiah, ar4ill, archee, archee1, ArchPigeon, ArchRBX, areitpog, Arendian, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, ArZarLordOfMango, as334, AsikKEsel, AsnDen, asperger-sind, aspiringLich, astriloqua, august-sun, AutoOtter, AverageNotDoingAnythingEnjoyer, avghdev, Awlod, AzzyIsNotHere, azzyisnothere, B-Kirill, baa14453, BackeTako, Bakke, BananaFlambe, Baptr0b0t, BarryNorfolk, BasedUser, beck-thompson, bellwetherlogic, ben, benbryant0, benev0, benjamin-burges, BGare, bhespiritu, bibbly, bigfootbravo, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlitzTheSquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, Bokser815, bolantej, Booblesnoot42, Boolean-Buckeye, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, BriBrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, BWTCK, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Calecute, Callmore, Camdot, capnsockless, CaptainMaru, captainsqrbeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, catdotjs, catlord, Catofquestionableethics, CatTheSystem, Centronias, Chaboricks, chairbender, Chaoticaa, Charlese2, charlie, chartman, ChaseFlorom, chavonadelal, Cheackraze, CheddaCheez, cheesePizza2, CheesePlated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbicous, Chubbygummibear, Ciac32, ciaran, civilCornball, claustro305, Clement-O, clyf, Clyybber, CMDR-Piboy314, coco, cohanna, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, Compilatron144, CookieMasterT, coolboy911, coolmankid12345, Coolsurf6, cooperwallace, corentt, CormosLemming, CrafterKolyan, crazybrain23, Crazydave91920, creadth, CrigCrag, croilbird, Crotalus, CrudeWax, cryals, CrzyPotato, cubixthree, cutemoongod, Cyberboss, d34d10cc, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, dan, dangerrevolution, daniel-cr, DanSAussieITS, Daracke, Darkenson, DawBla, Daxxi3, dch-GH, de0rix, Deahaka, dean, DEATHB4DEFEAT, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, DeepwaterCreations, Deerstop, degradka, Delete69, deltanedas, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, dexlerxd, dffdff2423, DieselMohawk, digitalic, Dimastra, DinnerCalzone, DinoWattz, DisposableCrewmember42, dissidentbullet, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, DR-DOCTOR-EVIL-EVIL, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, DuckManZach, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, dylanstrategie, dylanwhittingham, Dynexust, Easypoller, echo, eclips_e, eden077, EEASAS, Efruit, efzapa, Ekkosangen, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, Entvari, eoineoineoin, ephememory, eris, erohrs2, ERORR404V1, Errant-4, ertanic, esguard, estacaoespacialpirata, eugene, ewokswagger, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, farrellka-dev, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, firenamefn, Firewars763, FirinMaLazors, Fishfish458, fl-oz, Flareguy, flashgnash, FluffiestFloof, FluffMe, FluidRock, flymo5678, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, freeman2651, freeze2222, frobnic8, Froffy025, Fromoriss, froozigiusz, FrostMando, FrostRibbon, Funce, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, gamer3107, Gamewar360, gansulalan, GaussiArson, Gaxeer, gbasood, gcoremans, Geekyhobo, genderGeometries, GeneralGaws, Genkail, Gentleman-Bird, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GnarpGnarp, GNF54, godisdeadLOL, goet, GoldenCan, Goldminermac, Golinth, golubgik, GoodWheatley, Gorox221, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, GreyMario, GrownSamoyedDog, GTRsound, gusxyz, Gyrandola, h3half, hamurlik, Hanzdegloker, HappyRoach, Hardly3D, harikattar, he1acdvv, Hebi, helm4142, Henry, HerCoyote23, HighTechPuddle, Hitlinemoss, hiucko, hivehum, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hoshizora, Hreno, Hrosts, htmlsystem, hubismal, Hugal31, Huxellberger, Hyenh, hyperb1, hyperDelegate, hyphenationc, i-justuser-i, iaada, iacore, IamVelcroboy, Ian321, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imatsoup, IMCB, impubbi, imrenq, imweax, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, Intoxicating-Innocence, IProduceWidgets, itsmethom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jacktastic09, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jarmer123, Jaskanbe, JasperJRoth, jbox144, JCGWE30, jerryimmouse, JerryImMouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jkwookee, jmcb, JohnGinnane, johnku1, Jophire, joshepvodka, JpegOfAFrog, jproads, JrInventor05, Jrpl, jukereise, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, JustinWinningham, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, kaiserbirch, KaiShibaa, kalane15, kalanosh, KamTheSythe, Kanashi-Panda, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, KieueCaprie, Killerqu00, Kimpes, KingFroozy, kira-er, kiri-yoshikage, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, Kittygyat, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, kosticia, koteq, KrasnoshchekovPavel, Krunklehorn, Kupie, kxvvv, kyupolaris, kzhanik, LaCumbiaDelCoronavirus, lajolico, Lamrr, lanedon, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leander-0, leonardo-dabepis, leonidussaks, leonsfriedrich, LeoSantich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, LevitatingTree, Lgibb18, lgruthes, LightVillet, liltenhead, linkbro1, linkuyx, Litraxx, LittleBuilderJane, LittleNorthStar, LittleNyanCat, lizelive, ljm862, lmsnoise, localcc, lokachop, Lomcastar, LordCarve, LordEclipse, lucas, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luizwritescode, Lukasz825700516, luminight, lunarcomets, Lusatia, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, Magicalus, magmodius, MagnusCrowe, malchanceux, MaloTV, ManelNavola, manelnavola, Mangohydra, marboww, Markek1, matt, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, memeproof, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, mifia, MilenVolf, MilonPL, Minemoder5000, Minty642, minus1over12, Mirino97, mirrorcult, misandrie, MishaUnity, MissKay1994, MisterImp, MisterMecky, Mith-randalf, Mixelz, mjarduk, MjrLandWhale, mkanke-real, MLGTASTICa, moderatelyaware, modern-nm, mokiros, momo, Moneyl, monotheonist, Moomoobeef, moony, Morb0, MossyGreySlope, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, muburu, MureixloI, murolem, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikitosych, nikthechampiongr, Nimfar11, ninruB, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, noelkathegod, noirogen, nok-ko, NonchalantNoob, NoobyLegion, Nopey, not-gavnaed, notafet, notquitehadouken, NotSoDana, noudoit, noverd, Nox38, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, Nyxilath, och-och, OctoRocket, OldDanceJacket, OliverOtter, onesch, OneZerooo0, OnyxTheBrave, Orange-Winds, OrangeMoronage9622, Orsoniks, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paige404, paigemaeforrest, pali6, Palladinium, Pangogie, panzer-iv1, partyaddict, patrikturi, PaulRitter, peccneck, Peptide90, peptron1, perryprog, PeterFuto, PetMudstone, pewter-wiz, Pgriha, Phantom-Lily, pheenty, philingham, Phill101, Phooooooooooooooooooooooooooooooosphate, phunnyguy, PicklOH, PilgrimViis, Pill-U, pinkbat5, Piras314, Pireax, Pissachu, pissdemon, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, poeMota, pofitlo, pointer-to-null, pok27, poklj, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, PotRoastPiggy, Princess-Cheeseballs, ProfanedBane, PROG-MohamedDwidar, Prole0, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykana, psykzz, PuceTint, pumkin69, PuroSlavKing, PursuitInAshes, Putnam3145, py01, qrtDaniil, qrwas, Quantum-cross, quatre, QueerNB, QuietlyWhisper, qwerltaz, Radezolid, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, RamZ, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, RedBookcase, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, ReeZer2, RemberBM, RemieRichards, RemTim, rene-descartes2021, Renlou, retequizzle, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, RobbyTheFish, robinthedragon, Rockdtben, Rohesie, rok-povsic, rokudara-sen, rolfero, RomanNovo, rosieposieeee, Roudenn, router, ruddygreat, RumiTiger, Ruzihm, S1rFl0, S1ss3l, Saakra, Sadie-silly, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, Samuka-C, SaphireLattice, SapphicOverload, sarahon, sativaleanne, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, schrodinger71, scrato, Scribbles0, scrivoy, scruq445, scuffedjays, ScumbagDog, SeamLesss, Segonist, semensponge, sephtasm, Serkket, sewerpig, SG6732, sh18rw, Shaddap1, ShadeAware, ShadowCommander, shadowtheprotogen546, shaeone, shampunj, shariathotpatrol, SharkSnake98, shibechef, SignalWalker, siigiil, silicon14wastaken, Simyon264, sirdragooon, Sirionaut, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, sleepyyapril, slimmslamm, Slyfox333, snebl, snicket, sniperchance, Snowni, snowsignal, SolidusSnek, solstar2, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, soupkilove, southbridge-fur, sowelipililimute, Soydium, spacelizard, SpaceLizardSky, SpaceManiac, SpaceRox1244, SpaceyLady, Spangs04, spanky-spanky, Sparlight, spartak, SpartanKadence, spderman3333, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, sporkyz, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, starbuckss14, Stealthbomber16, stellar-novas, stewie523, stomf, Stop-Signs, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, supergdpwyl, superjj18, Supernorn, SweptWasTaken, SyaoranFox, Sybil, SYNCHRONIC, Szunti, t, Tainakov, takemysoult, tap, TaralGit, Taran, taurie, Tayrtahn, tday93, teamaki, TeenSarlacc, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, Tezzaide, TGODiamond, TGRCdev, tgrkzus, ThatGuyUSA, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, TheBlueYowie, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheFlyingSentry, TheIntoxicatedCat, thekilk, themias, theomund, TheProNoob678, TherapyGoth, TheShuEd, thetolbean, thevinter, TheWaffleJesus, thinbug0, ThunderBear2006, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, TiniestShark, Titian3, tk-a369, tkdrg, tmtmtl30, ToastEnjoyer, Toby222, TokenStyle, Tollhouse, Toly65, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, TornadoTechnology, tosatur, TotallyLemon, ToxicSonicFan04, Tr1bute, trixxedbit, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, tyashley, Tyler-IN, TytosB, Tyzemol, UbaserB, ubis1, UBlueberry, uhbg, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, Unkn0wnGh0st333, unusualcrow, Uriende, UristMcDorf, user424242420, Utmanarn, Vaaankas, valentfingerov, valquaint, Varen, Vasilis, VasilisThePikachu, veliebm, Velken, VelonacepsCalyxEggs, veprolet, VerinSenpai, veritable-calamity, Veritius, Vermidia, vero5123, Verslebas, vexerot, viceemargo, VigersRay, violet754, Visne, vitusveit, vlad, vlados1408, VMSolidus, vmzd, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, Vortebo, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, weaversam8, wertanchik, whateverusername0, whatston3, widgetbeck, Will-Oliver-Br, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, Wolfkey-SomeoneElseTookMyUsername, wrexbe, wtcwr68, xeri7, xkreksx, xprospero, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, YoungThugSS14, Yousifb26, youtissoum, yunii, YuriyKiss, yuriykiss, zach-hill, Zadeon, Zalycon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, ZeWaka, zHonys, zionnBE, ZNixian, Zokkie, ZoldorfTheWizard, zonespace27, Zylofan, Zymem, zzylex From 35411b50900eaa01de5c9e99d5961425a7df86f4 Mon Sep 17 00:00:00 2001 From: Nox Date: Sat, 7 Jun 2025 19:49:44 -0700 Subject: [PATCH 59/63] No raffle for space carp (#38101) No raffle for carp Signed-off-by: Nox38 --- Resources/Prototypes/Entities/Mobs/NPCs/carp.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml index e068b2e9b0..8db27e19c5 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml @@ -172,8 +172,6 @@ rules: ghost-role-information-space-dragon-summoned-carp-rules mindRoles: - MindRoleGhostRoleTeamAntagonistFlock - raffle: - settings: short - type: GhostTakeoverAvailable - type: HTN rootTask: From 3871aec5fdedb99daba6ea18e69729357a17b0ae Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 8 Jun 2025 02:50:51 +0000 Subject: [PATCH 60/63] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index ecde01ff33..09a916bf14 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: sowelipililimute - changes: - - message: You can now more easily interact with objects behind faded ones, and - you can look behind fadeable objects in your FOV by hovering them with your - mouse pointer - type: Add - id: 8126 - time: '2025-04-03T06:58:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/35863 - author: whatston3 changes: - message: Fancy tables and curtains now respect carpet stacks. @@ -3906,3 +3897,10 @@ id: 8637 time: '2025-06-07T22:23:46.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37577 +- author: Nox38 + changes: + - message: Space Carp ghost roles no longer have a raffle! + type: Tweak + id: 8638 + time: '2025-06-08T02:49:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38101 From 33ae484b2df3f927c90433cd15ee0dd7ae50082d Mon Sep 17 00:00:00 2001 From: Samuka-C <47865393+Samuka-C@users.noreply.github.com> Date: Sun, 8 Jun 2025 00:47:37 -0300 Subject: [PATCH 61/63] adjreagent now accepts float (#38134) * adjreagent now accepts float * var --- .../Administration/Toolshed/SolutionCommand.cs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Content.Server/Administration/Toolshed/SolutionCommand.cs b/Content.Server/Administration/Toolshed/SolutionCommand.cs index c529bcd16d..d184afcb4d 100644 --- a/Content.Server/Administration/Toolshed/SolutionCommand.cs +++ b/Content.Server/Administration/Toolshed/SolutionCommand.cs @@ -38,18 +38,21 @@ public sealed class SolutionCommand : ToolshedCommand public SolutionRef AdjReagent( [PipedArgument] SolutionRef input, ProtoId proto, - FixedPoint2 amount + float amount ) { _solutionContainer ??= GetSys(); - if (amount > 0) + // Convert float to FixedPoint2 + var amountFixed = FixedPoint2.New(amount); + + if (amountFixed > 0) { - _solutionContainer.TryAddReagent(input.Solution, proto, amount, out _); + _solutionContainer.TryAddReagent(input.Solution, proto, amountFixed, out _); } - else if (amount < 0) + else if (amountFixed < 0) { - _solutionContainer.RemoveReagent(input.Solution, proto, -amount); + _solutionContainer.RemoveReagent(input.Solution, proto, -amountFixed); } return input; @@ -59,7 +62,7 @@ public sealed class SolutionCommand : ToolshedCommand public IEnumerable AdjReagent( [PipedArgument] IEnumerable input, ProtoId name, - FixedPoint2 amount + float amount ) => input.Select(x => AdjReagent(x, name, amount)); } From 766bade68f53d1dbd156e9dc47af75cb261f1348 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 8 Jun 2025 03:48:44 +0000 Subject: [PATCH 62/63] Automatic changelog update --- Resources/Changelog/Admin.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index c0e36e369f..4609c0e893 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -1163,5 +1163,13 @@ Entries: id: 140 time: '2025-05-27T23:44:15.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37849 +- author: Samuka + changes: + - message: the command solution:adjreagent now actually works and no longer needs + a "FixedPoint2" for the amount + type: Fix + id: 141 + time: '2025-06-08T03:47:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/38134 Name: Admin Order: 2 From 546bfd0a3059aeb1ead3c212f0c37b360c1dff7e Mon Sep 17 00:00:00 2001 From: Kyle Tyo <36606155+VerinSenpai@users.noreply.github.com> Date: Sun, 8 Jun 2025 20:09:42 -0400 Subject: [PATCH 63/63] MapManager warnings cleanup Server Edition 2003 (#36781) * now you see me * unused depen * test fail fix attempt 1 * test fail fix attempt 2 * fix test fail attempt 3 * shot in the dark. * Does this work? * import cleanup * taking a shot at this. * Convert PersistenceSaveCommand to LocalizedEntityCommands. * requested changes * requested changes. also dealt with improperly named private const * Update Content.Server/GameTicking/GameTicker.Spawning.cs Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Update Content.Server/GameTicking/GameTicker.Spawning.cs Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Convert PlanetCommand to LocalizedEntityCommand * Update BiomeSystem.cs * Update Content.Server/Salvage/SalvageSystem.Runner.cs Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Update Content.Server/Procedural/DungeonSystem.Rooms.cs Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Update Content.Server/Salvage/SpawnSalvageMissionJob.cs Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Update Content.Server/Station/Systems/StationBiomeSystem.cs Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * revert to latest master. * slartis suggestion. * Update SetMapAtmosCommand.cs * cleanup * Update PersistenceSaveCommand.cs * finish localizing persistencesavecommand * this is icky, I change. * :sigh: * revert whatever I did here? * oh I see, some inconsistencies. * revert this * Update PlanetCommand.cs * move this ftl to the commands folder --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Administration/Commands/PersistenceSaveCommand.cs | 7 ++----- Content.Server/Polymorph/Systems/PolymorphSystem.cs | 1 - Content.Shared/Weather/SharedWeatherSystem.cs | 1 - .../Locale/en-US/commands/persistence-save-command.ftl | 3 +++ Resources/Locale/en-US/persistence/command.ftl | 1 - 5 files changed, 5 insertions(+), 8 deletions(-) create mode 100644 Resources/Locale/en-US/commands/persistence-save-command.ftl delete mode 100644 Resources/Locale/en-US/persistence/command.ftl diff --git a/Content.Server/Administration/Commands/PersistenceSaveCommand.cs b/Content.Server/Administration/Commands/PersistenceSaveCommand.cs index 56ad2be260..269e651e81 100644 --- a/Content.Server/Administration/Commands/PersistenceSaveCommand.cs +++ b/Content.Server/Administration/Commands/PersistenceSaveCommand.cs @@ -12,12 +12,10 @@ namespace Content.Server.Administration.Commands; public sealed class PersistenceSave : LocalizedEntityCommands { [Dependency] private readonly IConfigurationManager _config = default!; - [Dependency] private readonly IEntitySystemManager _system = default!; [Dependency] private readonly SharedMapSystem _map = default!; + [Dependency] private readonly MapLoaderSystem _mapLoader = default!; public override string Command => "persistencesave"; - public override string Description => "Saves server data to a persistence file to be loaded later."; - public override string Help => "persistencesave [mapId] [filePath - default: game.map (CCVar) ]"; public override void Execute(IConsoleShell shell, string argStr, string[] args) { @@ -47,8 +45,7 @@ public sealed class PersistenceSave : LocalizedEntityCommands return; } - var mapLoader = _system.GetEntitySystem(); - mapLoader.TrySaveMap(mapId, new ResPath(saveFilePath)); + _mapLoader.TrySaveMap(mapId, new ResPath(saveFilePath)); shell.WriteLine(Loc.GetString("cmd-savemap-success")); } } diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.cs index 5976594a57..c134eca114 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.cs @@ -20,7 +20,6 @@ using Content.Shared.Popups; using Robust.Server.Audio; using Robust.Server.Containers; using Robust.Server.GameObjects; -using Robust.Shared.Map; using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Robust.Shared.Utility; diff --git a/Content.Shared/Weather/SharedWeatherSystem.cs b/Content.Shared/Weather/SharedWeatherSystem.cs index 382af64565..b537884950 100644 --- a/Content.Shared/Weather/SharedWeatherSystem.cs +++ b/Content.Shared/Weather/SharedWeatherSystem.cs @@ -13,7 +13,6 @@ namespace Content.Shared.Weather; public abstract class SharedWeatherSystem : EntitySystem { [Dependency] protected readonly IGameTiming Timing = default!; - [Dependency] protected readonly IMapManager MapManager = default!; [Dependency] protected readonly IPrototypeManager ProtoMan = default!; [Dependency] private readonly ITileDefinitionManager _tileDefManager = default!; [Dependency] private readonly MetaDataSystem _metadata = default!; diff --git a/Resources/Locale/en-US/commands/persistence-save-command.ftl b/Resources/Locale/en-US/commands/persistence-save-command.ftl new file mode 100644 index 0000000000..d12ff8cbee --- /dev/null +++ b/Resources/Locale/en-US/commands/persistence-save-command.ftl @@ -0,0 +1,3 @@ +cmd-persistencesave-desc = Saves server data to a persistence file to be loaded later. +cmd-persistencesave-usage = persistencesave [mapId] [filePath - default: game.map (CCVar) ] +cmd-persistencesave-no-path = filePath was not specified and CCVar {$cvar} is not set. Manually set the filePath param in order to save the map. diff --git a/Resources/Locale/en-US/persistence/command.ftl b/Resources/Locale/en-US/persistence/command.ftl deleted file mode 100644 index b070aee115..0000000000 --- a/Resources/Locale/en-US/persistence/command.ftl +++ /dev/null @@ -1 +0,0 @@ -cmd-persistencesave-no-path = filePath was not specified and CCVar {$cvar} is not set. Manually set the filePath param in order to save the map.