Skip to content

Commit

Permalink
New Unpainted Hardsuits (#1692)
Browse files Browse the repository at this point in the history
# Description

This PR fixes an ANCIENT bug with the clothing system, whereby it wasn't
possible to have individual non-hardcoded clothing layers at the same
time as species-specific layers. Now we can have species-specific shaded
layers, such as the lights on hardsuits/tacsuits. To make use of this
new feature, I've started making new sprites for "Unpainted" suits,
which will largely replace the suits you get from either Cargo or the
Techfabs. Unpainted suits will generally be gunmetal grey, unless they
are made of a notably different material.

# TODO

<details><summary><h1>Media</h1></summary>
<p>


![image](https://github.com/user-attachments/assets/80bb19f8-58fa-4b2c-b250-4f587cee1283)


![image](https://github.com/user-attachments/assets/46f131e7-ce82-4398-b5ed-d1f08343ebdf)


![image](https://github.com/user-attachments/assets/1fb971d9-816c-4ea5-b085-fd9e58a25152)


![image](https://github.com/user-attachments/assets/fb22bcdd-f230-49fd-b14d-22e0994dc629)

New unpainted Elite Tacsuit

![image](https://github.com/user-attachments/assets/0dc14c82-3519-46a1-84bf-2f60063b27a8)

</p>
</details>

# Changelog

:cl:
- add: Clothing now supports having multiple species-specific layers,
and species-specific shaders.
- add: New "Unpainted" engineering hardsuit, and "Unpainted" Shanlin
Tacsuit. More to come soon.
- add: Unpainted variant of the "Shiwei" tacsuit(AKA: Elite suit). This
one is uniquely titanium white instead of the standard gunmetal grey. It
can either be ordered through cargo at an exhorbitant cost, or
manufactured with the Prototype Tacsuits research.
  • Loading branch information
VMSolidus authored Jan 31, 2025
1 parent fb87ff1 commit 031a6c8
Show file tree
Hide file tree
Showing 80 changed files with 514 additions and 24 deletions.
5 changes: 5 additions & 0 deletions Content.Client/Clothing/ClientClothingSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,11 @@ private void OnGetVisuals(EntityUid uid, ClothingComponent item, GetEquipmentVis
i++;
}

if (inventory.SpeciesId != null && item.Sprite != null
&& _cache.TryGetResource<RSIResource>(SpriteSpecifierSerializer.TextureRoot / item.Sprite, out var rsi)
&& rsi.RSI.TryGetState($"{layer.State}-{inventory.SpeciesId}", out _))
layer.State = $"{layer.State}-{inventory.SpeciesId}";

args.Layers.Add((key, layer));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ ent-ClothingHeadHelmetHardsuitAtmos = HpI-19t helmet
.desc = The Fotia's standard helmet, it features the same heat protection as the suit, along with some integrated protective gear for the wearer's head.
ent-ClothingHeadHelmetHardsuitEngineering = HpI-19r helmet
.desc = The Lampsi's standard helmet, it features the same radiation protection as the suit, along with some integrated protective gear for the wearer's head.
ent-ClothingHeadHelmetHardsuitEngineeringUnpainted = HpI-19r helmet
.desc = { ent-ClothingHeadHelmetHardsuitEngineering.desc }
ent-ClothingHeadHelmetHardsuitSpatio = HpI-20s helmet
.desc = A lightweight helmet designed for the Kriti hardsuit, it allows for better mobility, along with some protection against radiation.
ent-ClothingHeadHelmetHardsuitSalvage = HpI-20a helmet
Expand Down Expand Up @@ -55,13 +57,18 @@ ent-ClothingHeadHelmetHardsuitLuxury = HpI-20c helmet
.desc = A modified helmet for the Minos hardsuit, fashioned after the Logistics Officer's colors. It's been modified for greater mobility at the expense of physical trauma protection.
ent-ClothingHeadHelmetHardsuitSyndie = CSA-51a helmet
.desc = An armored helmet deployed over a Shanlin tacsuit. This one has been painted blood red.
ent-ClothingHeadHelmetHardsuitShanlinUnpainted = CSA-51a helmet
.desc = An armored helmet deployed over a Shanlin tacsuit. This one is unpainted bare metal.
ent-ClothingHeadHelmetHardsuitSyndieReverseEngineered = CSA-51a helmet
.desc = An armored helmet deployed over a Shanlin tacsuit. This one has been painted blue.
ent-ClothingHeadHelmetHardsuitSyndieMedic = CSA-51m helmet
.desc = An armored helmet deployed over a Zhongyao tacsuit. features optic integrations for nearly every medical hud on the market.
Designed to enable the survival of combat medics in the most dangerous of environments.
ent-ClothingHeadHelmetHardsuitSyndieElite = CSA-54UA helmet
.desc = An elite version of the Shanlin tacsuit's helmet, featuring improved armor and fireproofing.
ent-ClothingHeadHelmetHardsuitShiweiUnpainted = CSA-54UA helmet
.desc = An elite version of the Shanlin tacsuit's helmet, featuring improved armor and fireproofing.
It is unpainted bare spaceship alloy.
ent-ClothingHeadHelmetHardsuitSyndieCommander = CSA-54c helmet
.desc = A bulked up version of the Shanlin tacsuit's helmet, purpose-built for commanders of special operation squads. This one has been painted blood-red.
ent-ClothingHeadHelmetHardsuitCybersun = CSA-80UA helmet
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ ent-ClothingOuterHardsuitAtmos = HpI-19t "Fotia" hardsuit
ent-ClothingOuterHardsuitEngineering = HpI-19r "Lampsi" hardsuit
.desc = A standard-issue hardsuit produced by Hephaestus Industries, used by engineers in low & high pressure environments.
The label indicates that its rated for moderate amounts of radiation exposure. It feels a bit heavy.
ent-ClothingOuterHardsuitEngineeringUnpainted = HpI-19r "Lampsi" hardsuit
.desc = { ent-ClothingOuterHardsuitEngineering.desc }
ent-ClothingOuterHardsuitSpatio = HpI-20s "Kriti" hardsuit
.desc = A standard-issue hardsuit produced by Hephaestus Industries, designed for industrial work in low pressure environments.
The label indicates that its rated for moderate amounts of radiation exposure, and it feels somewhat light.
Expand Down Expand Up @@ -74,6 +76,9 @@ ent-ClothingOuterHardsuitLuxury = HpI-20c - "Minos" hardsuit
ent-ClothingOuterHardsuitSyndie = CSA-51a - "Shanlin" tacsuit
.desc = A tactical combat hardsuit produced by the Cybersun-Armaments Corporation, the suit's tags indicate it provides moderate protection against most forms of damage.
This one has been painted blood red. It feels incredibly light.
ent-ClothingOuterHardsuitShanlinUnpainted = CSA-51a - "Shanlin" tacsuit
.desc = A tactical combat hardsuit produced by the Cybersun-Armaments Corporation, the suit's tags indicate it provides moderate protection against most forms of damage.
This one is unpainted bare metal. It feels incredibly light.
ent-ClothingOuterHardsuitSyndieReverseEngineered = CSA-51a - "Shanlin" tacsuit
.desc = A tactical combat hardsuit produced by the Cybersun-Armaments Corporation, the suit's tags indicate it provides moderate protection against most forms of damage.
This one has been painted blue. It feels incredibly light.
Expand All @@ -84,6 +89,10 @@ ent-ClothingOuterHardsuitSyndieElite = CSA-54UA - "Shiwei" tacsuit
.desc = An "Up-Armored" tactical combat hardsuit produced by the Cybersun-Armaments Corporation.
The suit's tags indicate its rated for high exposure to radiation, heat and explosions, along with moderate physical trauma protection.
It feels incredibly light.
ent-ClothingOuterHardsuitShiweiUnpainted = CSA-54UA - "Shiwei" tacsuit
.desc = An "Up-Armored" tactical combat hardsuit produced by the Cybersun-Armaments Corporation.
The suit's tags indicate its rated for high exposure to radiation, heat and explosions, along with moderate physical trauma protection.
It is unpainted bare spaceship alloy. It feels incredibly light.
ent-ClothingOuterHardsuitSyndieCommander = CSA-54c - "Tianming" tacsuit
.desc = A "Commander" tactical combat hardsuit produced by the Cybersun-Armaments Corporation. The suit's tags indicate that it protects greatly against all forms of damage.
This one has been painted blood red. It doesn't seem to have any weight.
Expand Down
14 changes: 12 additions & 2 deletions Resources/Prototypes/Catalog/Cargo/cargo_hardsuits.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
- type: cargoProduct
id: EngineeringLampsiHardsuit
icon:
sprite: Clothing/OuterClothing/Hardsuits/engineering.rsi
sprite: Clothing/OuterClothing/Hardsuits/engineering-base.rsi
state: icon
product: CrateEngineeringLampsiHardsuit
cost: 2250
Expand Down Expand Up @@ -45,13 +45,23 @@
- type: cargoProduct
id: SecurityShanlinTacsuit
icon:
sprite: Nyanotrasen/Clothing/OuterClothing/ReverseEngineering/syndicate.rsi
sprite: Clothing/OuterClothing/Hardsuits/syndicate-base.rsi
state: icon
product: CrateSecurityShanlinTacsuit
cost: 75000
category: cargoproduct-category-name-hardsuits
group: market

- type: cargoProduct
id: SecurityShiweiTacsuit
icon:
sprite: Clothing/OuterClothing/Hardsuits/syndicate-elite-base.rsi
state: icon
product: CrateSecurityShiweiTacsuit
cost: 90000
category: cargoproduct-category-name-hardsuits
group: market

- type: cargoProduct
id: SecurityGuanYuTacsuit
icon:
Expand Down
16 changes: 13 additions & 3 deletions Resources/Prototypes/Catalog/Fills/Crates/hardsuits.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@
id: CrateEngineeringLampsiHardsuit
parent: CrateEngineering
name: lampsi hardsuit crate
description: Contains a single HpI-19r "Lampsi" hardsuit. Requires Engineering access to open.
description: Contains a single HpI-19r "Lampsi" hardsuit. The suit comes unpainted. Requires Engineering access to open.
components:
- type: StorageFill
contents:
- id: ClothingOuterHardsuitAtmos
- id: ClothingOuterHardsuitEngineeringUnpainted

# Logistics
- type: entity
Expand Down Expand Up @@ -49,7 +49,17 @@
components:
- type: StorageFill
contents:
- id: ClothingOuterHardsuitSyndieReverseEngineered
- id: ClothingOuterHardsuitShanlinUnpainted

- type: entity
id: CrateSecurityShiweiTacsuit
parent: CrateSecgear
name: shiwei tacsuit crate
description: Contains a single CSA-54UA "Shiwei" tacsuit. Requires Security access to open.
components:
- type: StorageFill
contents:
- id: ClothingOuterHardsuitShiweiUnpainted

- type: entity
id: CrateSecurityGuanYuTacsuit
Expand Down
88 changes: 88 additions & 0 deletions Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,36 @@
coefficient: 0.005

#Engineering Hardsuit
- type: entity
parent: ClothingHeadHelmetHardsuitEngineering
id: ClothingHeadHelmetHardsuitEngineeringUnpainted
name: engineering hardsuit helmet
description: An engineering hardsuit helmet designed for working in low-pressure, high radioactive environments.
components:
- type: Sprite
sprite: Clothing/Head/Hardsuits/engineering-base.rsi
layers:
- state: icon
- state: icon-unshaded
shader: unshaded
- state: light-overlay
visible: false
shader: unshaded
map: [ "light" ]
- type: Clothing
sprite: Clothing/Head/Hardsuits/engineering-base.rsi
clothingVisuals:
head:
- state: equipped-head
- state: equipped-head-unshaded
shader: unshaded
- type: ToggleableLightVisuals
spriteLayer: light
clothingVisuals:
head:
- state: equipped-head-light
shader: unshaded

- type: entity
parent: ClothingHeadHardsuitWithLightBase
id: ClothingHeadHelmetHardsuitEngineering
Expand Down Expand Up @@ -368,6 +398,35 @@

#ANTAG HARDSUITS
#Blood-red Hardsuit
- type: entity
parent: ClothingHeadHelmetHardsuitSyndie
id: ClothingHeadHelmetHardsuitShanlinUnpainted
name: Cybersun tacsuit helmet
components:
- type: Sprite
sprite: Clothing/Head/Hardsuits/syndicate-base.rsi
layers:
- state: icon
- state: icon-unshaded
shader: unshaded
- state: light-overlay
visible: false
shader: unshaded
map: [ "light" ]
- type: Clothing
sprite: Clothing/Head/Hardsuits/syndicate-base.rsi
clothingVisuals:
head:
- state: equipped-head
- state: equipped-head-unshaded
shader: unshaded
- type: ToggleableLightVisuals
spriteLayer: light
clothingVisuals:
head:
- state: equipped-head-light
shader: unshaded

- type: entity
parent: ClothingHeadHardsuitWithLightBase
id: ClothingHeadHelmetHardsuitSyndie
Expand Down Expand Up @@ -418,6 +477,35 @@
Heat: 0.9

#Syndicate Elite Hardsuit
- type: entity
parent: ClothingHeadHelmetHardsuitSyndieElite
id: ClothingHeadHelmetHardsuitShiweiUnpainted
name: Cybersun elite tacsuit helmet
components:
- type: Sprite
sprite: Clothing/Head/Hardsuits/syndicate-elite-base.rsi
layers:
- state: icon
- state: icon-unshaded
shader: unshaded
- state: light-overlay
visible: false
shader: unshaded
map: [ "light" ]
- type: Clothing
sprite: Clothing/Head/Hardsuits/syndicate-elite-base.rsi
clothingVisuals:
head:
- state: equipped-head
- state: equipped-head-unshaded
shader: unshaded
- type: ToggleableLightVisuals
spriteLayer: light
clothingVisuals:
head:
- state: equipped-head-light
shader: unshaded

- type: entity
parent: ClothingHeadHardsuitWithLightBase
id: ClothingHeadHelmetHardsuitSyndieElite
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,24 @@
guides: [ HephaestusIndustries ]

#Engineering Hardsuit
- type: entity
parent: ClothingOuterHardsuitEngineering
id: ClothingOuterHardsuitEngineeringUnpainted
name: engineering hardsuit
description: A special suit that protects against hazardous, low pressure environments. Has radiation shielding.
components:
- type: Sprite
sprite: Clothing/OuterClothing/Hardsuits/engineering-base.rsi
- type: Clothing
sprite: Clothing/OuterClothing/Hardsuits/engineering-base.rsi
clothingVisuals:
outerClothing:
- state: equipped-OUTERCLOTHING
- state: equipped-OUTERCLOTHING-unshaded
shader: unshaded
- type: ToggleableClothing
clothingPrototype: ClothingHeadHelmetHardsuitEngineeringUnpainted

- type: entity
parent: ClothingOuterHardsuitBase
id: ClothingOuterHardsuitEngineering
Expand Down Expand Up @@ -553,14 +571,32 @@

#ANTAG HARDSUITS
#Blood-red Hardsuit
- type: entity
parent: ClothingOuterHardsuitSyndie
id: ClothingOuterHardsuitShanlinUnpainted
name: Cybersun tacsuit
description: A special suit that protects against hazardous, low pressure environments. Has radiation shielding.
components:
- type: Sprite
sprite: Clothing/OuterClothing/Hardsuits/syndicate-base.rsi
- type: Clothing
sprite: Clothing/OuterClothing/Hardsuits/syndicate-base.rsi
clothingVisuals:
outerClothing:
- state: equipped-OUTERCLOTHING
- state: equipped-OUTERCLOTHING-unshaded
shader: unshaded
- type: ToggleableClothing
clothingPrototype: ClothingHeadHelmetHardsuitShanlinUnpainted

- type: entity
parent: ClothingOuterHardsuitBase
id: ClothingOuterHardsuitSyndie
name: blood-red hardsuit
description: A heavily armored hardsuit designed for work in special operations. Property of Gorlex Marauders.
components:
- type: Sprite
sprite: Clothing/OuterClothing/Hardsuits/syndicate.rsi
sprite: Clothing/OuterClothing/Hardsuits/syndicate-base.rsi
- type: Item
size: Huge
- type: Clothing
Expand Down Expand Up @@ -616,6 +652,24 @@
coefficient: 0.5 # 50%

#Syndicate Elite Hardsuit
- type: entity
parent: ClothingOuterHardsuitSyndie
id: ClothingOuterHardsuitShiweiUnpainted
name: Cybersun tacsuit
description: A special suit that protects against hazardous, low pressure environments. Has radiation shielding.
components:
- type: Sprite
sprite: Clothing/OuterClothing/Hardsuits/syndicate-elite-base.rsi
- type: Clothing
sprite: Clothing/OuterClothing/Hardsuits/syndicate-elite-base.rsi
clothingVisuals:
outerClothing:
- state: equipped-OUTERCLOTHING
- state: equipped-OUTERCLOTHING-unshaded
shader: unshaded
- type: ToggleableClothing
clothingPrototype: ClothingHeadHelmetHardsuitShiweiUnpainted

- type: entity
parent: ClothingOuterHardsuitBase
id: ClothingOuterHardsuitSyndieElite
Expand Down
3 changes: 2 additions & 1 deletion Resources/Prototypes/Entities/Structures/Machines/lathe.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1043,7 +1043,8 @@
- ClothingOuterHardsuitCombatMedical
- ClothingOuterHardsuitCombatRiot
- ClothingOuterHardsuitCombatAdvanced
- ClothingOuterHardsuitSyndieReverseEngineered
- ClothingOuterHardsuitShanlinUnpainted
- ClothingOuterHardsuitShiweiUnpainted
- ClothingOuterHardsuitJuggernautReverseEngineered
- WeaponMechCombatImmolationGun
- WeaponMechCombatSolarisLaser
Expand Down
31 changes: 15 additions & 16 deletions Resources/Prototypes/Recipes/Lathes/hardsuits.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@

# TODO: I still need to make these "Unpainted"
- type: latheRecipe
id: ClothingOuterHardsuitSyndieReverseEngineered
result: ClothingOuterHardsuitSyndieReverseEngineered
id: ClothingOuterHardsuitShanlinUnpainted
result: ClothingOuterHardsuitShanlinUnpainted
category: Tacsuits
completetime: 180
materials:
Expand All @@ -76,20 +76,19 @@
Plasma: 800
Gold: 600

# This one's an IOU.
# - type: latheRecipe
# id: ClothingOuterHardsuitCybersunEliteUnpainted
# result: ClothingOuterHardsuitCybersunEliteUnpainted
# category: Tacsuits
# completetime: 120
# materials:
# Plasteel: 8000
# WebSilk: 3000
# ReinforcedGlass: 1500
# Plastic: 1500
# Uranium: 800
# Plasma: 800
# Gold: 600
- type: latheRecipe
id: ClothingOuterHardsuitShiweiUnpainted
result: ClothingOuterHardsuitShiweiUnpainted
category: Tacsuits
completetime: 120
materials:
Plasteel: 10000
WebSilk: 3000
ReinforcedPlasmaGlass: 1500
Plastic: 1500
Uranium: 1000
Plasma: 1000
Gold: 800

# TODO: IOU one "Unpainted" juggsuit sprite.
- type: latheRecipe
Expand Down
3 changes: 2 additions & 1 deletion Resources/Prototypes/Research/arsenal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,8 @@
cost: 25000
recipeUnlocks:
- ClothingOuterHardsuitCombatAdvanced
- ClothingOuterHardsuitSyndieReverseEngineered
- ClothingOuterHardsuitShanlinUnpainted
- ClothingOuterHardsuitShiweiUnpainted
- ClothingOuterHardsuitJuggernautReverseEngineered
#- ClothingOuterHardsuitCybersunEliteUnpainted # IOU
technologyPrerequisites:
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 031a6c8

Please sign in to comment.