## About The Pull Request

Adds 2 hoodie variants, the pullover and the zip-up.
Both recolorable via GAGs.
Both available in the clothesmate and in loadout.

(90% "vibe-coded" ((SORRY!!)) but thoroughly tested with no issues*)
*ok one little issue being recoloring a hoodie with a spraycan does not
recolor the hood and you need to also spray the hood itself to color it.
a problem that has already existed in the codebase and i was unable to
find a fix for.


###### Pullover hood-down / Pullover hood-up with random recolors
underneath.
<img width="192" height="192" alt="dreamseeker_3DwQU9FPb2"
src="https://github.com/user-attachments/assets/fce54ba7-138f-4961-ad87-de072fa1ab55"
/>

###### Zipup unzipped hood-down / Zipup unzipped hood-up / Zipup zipped
hood-down / Zipup zipped hood-up with random colors underneath.
<img width="320" height="192" alt="dreamseeker_COJPWnFa84"
src="https://github.com/user-attachments/assets/b91ba86f-36cc-4c89-99aa-c6848554ea1c"
/>

## Why It's Good For The Game

Hoodies are a staple to many and have been requested frequently over the
years.
## Changelog
🆑
image: Hoodies! Both pullover and zip-up hoodies are available in the
clothesmate and in loadouts!
/🆑
This commit is contained in:
Twaticus
2026-04-11 13:49:02 -04:00
committed by GitHub
parent 1f8d331dab
commit 16d7023da4
19 changed files with 295 additions and 2 deletions
@@ -743,6 +743,46 @@
name = "H.E.C.K. Helmet (Worn)"
icon_file = 'icons/mob/clothing/head/helmet.dmi'
/datum/greyscale_config/hoodie_pullover
name = "Pullover Hoodie"
icon_file = 'icons/obj/clothing/suits/wintercoat.dmi'
json_config = 'code/datums/greyscale/json_configs/pullover.json'
/datum/greyscale_config/hoodie_pullover/worn
name = "Pullover Hoodie (Worn)"
icon_file = 'icons/mob/clothing/suits/wintercoat.dmi'
json_config = 'code/datums/greyscale/json_configs/pullover_worn.json'
/datum/greyscale_config/hoodie_pullover_hood
name = "Pullover Hood"
icon_file = 'icons/obj/clothing/head/winterhood.dmi'
json_config = 'code/datums/greyscale/json_configs/pullover_hood.json'
/datum/greyscale_config/hoodie_pullover_hood/worn
name = "Pullover Hood (Worn)"
icon_file = 'icons/mob/clothing/head/winterhood.dmi'
json_config = 'code/datums/greyscale/json_configs/pullover_hood_worn.json'
/datum/greyscale_config/hoodie_zipup
name = "Zipup Hoodie"
icon_file = 'icons/obj/clothing/suits/wintercoat.dmi'
json_config = 'code/datums/greyscale/json_configs/zipup.json'
/datum/greyscale_config/hoodie_zipup/worn
name = "Zipup Hoodie (Worn)"
icon_file = 'icons/mob/clothing/suits/wintercoat.dmi'
json_config = 'code/datums/greyscale/json_configs/zipup_worn.json'
/datum/greyscale_config/hoodie_zipup_hood
name = "Zipup Hood"
icon_file = 'icons/obj/clothing/head/winterhood.dmi'
json_config = 'code/datums/greyscale/json_configs/zipup_hood.json'
/datum/greyscale_config/hoodie_zipup_hood/worn
name = "Zipup Hood (Worn)"
icon_file = 'icons/mob/clothing/head/winterhood.dmi'
json_config = 'code/datums/greyscale/json_configs/zipup_hood_worn.json'
//
// COSTUMES
// (It's better these stay paired together)
@@ -0,0 +1,18 @@
{
"pullover": [
{
"type": "icon_state",
"icon_state": "pullover",
"blend_mode": "overlay",
"color_ids": [1]
}
],
"pullover_t": [
{
"type": "icon_state",
"icon_state": "pullover_t",
"blend_mode": "overlay",
"color_ids": [1]
}
]
}
@@ -0,0 +1,10 @@
{
"hood_pullover": [
{
"type": "icon_state",
"icon_state": "hood_pullover",
"blend_mode": "overlay",
"color_ids": [1]
}
]
}
@@ -0,0 +1,10 @@
{
"hood_pullover": [
{
"type": "icon_state",
"icon_state": "hood_pullover",
"blend_mode": "overlay",
"color_ids": [1]
}
]
}
@@ -0,0 +1,24 @@
{
"pullover": [
{
"type": "icon_state",
"icon_state": "pullover",
"blend_mode": "overlay",
"color_ids": [1]
},
{
"type": "icon_state",
"icon_state": "pullover_hood",
"blend_mode": "overlay",
"color_ids": [1]
}
],
"pullover_t": [
{
"type": "icon_state",
"icon_state": "pullover_t",
"blend_mode": "overlay",
"color_ids": [1]
}
]
}
@@ -0,0 +1,18 @@
{
"zipup": [
{
"type": "icon_state",
"icon_state": "zipup",
"blend_mode": "overlay",
"color_ids": [1]
}
],
"zipup_t": [
{
"type": "icon_state",
"icon_state": "zipup_t",
"blend_mode": "overlay",
"color_ids": [1]
}
]
}
@@ -0,0 +1,10 @@
{
"hood_zipup": [
{
"type": "icon_state",
"icon_state": "hood_zipup",
"blend_mode": "overlay",
"color_ids": [1]
}
]
}
@@ -0,0 +1,18 @@
{
"hood_zipup": [
{
"type": "icon_state",
"icon_state": "hood_zipup",
"blend_mode": "overlay",
"color_ids": [1]
}
],
"hood_zipup_t": [
{
"type": "icon_state",
"icon_state": "hood_zipup_t",
"blend_mode": "overlay",
"color_ids": [1]
}
]
}
@@ -0,0 +1,34 @@
{
"zipup": [
{
"type": "icon_state",
"icon_state": "zipup",
"blend_mode": "overlay",
"color_ids": [1]
}
],
"zipup_t": [
{
"type": "icon_state",
"icon_state": "zipup_t",
"blend_mode": "overlay",
"color_ids": [1]
}
],
"zipup_hood": [
{
"type": "icon_state",
"icon_state": "zipup_hood",
"blend_mode": "overlay",
"color_ids": [1]
}
],
"zipup_hood_t": [
{
"type": "icon_state",
"icon_state": "zipup_hood_t",
"blend_mode": "overlay",
"color_ids": [1]
}
]
}
+4
View File
@@ -75,6 +75,10 @@
icon_state = "hide_winterhood"
strict_coverage_zones = HAIR_APPENDAGE_TOP | HAIR_APPENDAGE_LEFT | HAIR_APPENDAGE_RIGHT | HAIR_APPENDAGE_REAR | HAIR_APPENDAGE_HANGING_REAR
/datum/hair_mask/hoodie
icon_state = "hide_hoodie"
strict_coverage_zones = HAIR_APPENDAGE_TOP | HAIR_APPENDAGE_LEFT | HAIR_APPENDAGE_RIGHT | HAIR_APPENDAGE_REAR | HAIR_APPENDAGE_HANGING_REAR
//////////////////////
// Hair Definitions //
//////////////////////