Re-Adds Virosec clothing and armor, resprites the bluesec winter coat (#5521)

<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

Due to how we reverted the virosec standard, it was removed. This
re-adds virosec gear as an additional outfit people can wear and equip.

(Due to my limitations I was unable to get the seclite helmet sprites
working, if you know how feel free to review and let me know how)

This PR also removes duplicate bags that did not have a texture, and
equals out the stock of the secvend to 6 for every item.

accidentally also fixes a missing civHUD in the HOP's garment bag 

## Why It's Good For The Game

more drip is very godo, and a lot of the stuff that existed was good.
The main issue we had was that it was the only option. The revert and
addition allows more options for players.

## Proof Of Testing
<img width="588" height="213" alt="image"
src="https://github.com/user-attachments/assets/22781dc2-59bc-4a1a-b795-5c62cb2a7857"
/>

<img width="587" height="215" alt="image"
src="https://github.com/user-attachments/assets/d1f07c73-bace-4a29-9e1a-46cb06299307"
/>

<img width="435" height="330" alt="image"
src="https://github.com/user-attachments/assets/a0611f34-34c6-4532-8fdd-e89d9dc47bb5"
/>

<img width="259" height="204" alt="image"
src="https://github.com/user-attachments/assets/669bc6a8-2948-4cc4-ac13-922c88c27e20"
/>


## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and its effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
add: Re-adds viroredsec outfits
add: New Old New Old sec sprites from Viro, new sprite by niim. 
fix: duplicate remnant bluesec default bags that errored out upon
wearing have been removed from the multisec vendor.
fix: fixes missing CivHUD in a HOP garment bag on complete accident
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

<!-- By opening a pull request. You have read and understood the
repository rules located on the main README.md on this project. -->
This commit is contained in:
KateAnbolho
2026-05-05 21:08:56 +02:00
committed by GitHub
parent 7ed9398e73
commit e2fd89d5cc
14 changed files with 357 additions and 12 deletions
@@ -5,4 +5,31 @@
/obj/item/storage/bag/garment/hop/PopulateContents()
. = ..()
new /obj/item/clothing/glasses/hud/civilian/sunglasses
new /obj/item/clothing/glasses/hud/civilian/sunglasses(src)
/obj/item/storage/bag/garment/hos/PopulateContents()
. = ..()
new /obj/item/clothing/under/rank/security/viro/head_of_security/viro(src)
new /obj/item/clothing/under/rank/security/viro/head_of_security/skirt(src)
new /obj/item/clothing/under/rank/security/viro/head_of_security/alt(src)
new /obj/item/clothing/under/rank/security/head_of_security/alt/skirt(src)
new /obj/item/clothing/under/rank/security/viro/head_of_security/formal(src)
new /obj/item/clothing/under/rank/security/viro/head_of_security/formal/skirt(src)
new /obj/item/clothing/suit/armor/hos/viro/trenchcoat/winter(src)
new /obj/item/clothing/suit/armor/hos/viro/trenchcoat(src)
new /obj/item/clothing/suit/armor/hos/viro(src)
new /obj/item/clothing/head/helmet/viro/hos(src)
/obj/item/storage/bag/garment/warden/PopulateContents()
. = ..()
new /obj/item/clothing/under/rank/security/viro/warden/skirt/(src)
new /obj/item/clothing/under/rank/security/viro/warden/(src)
new /obj/item/clothing/under/rank/security/viro/warden/formal/(src)
new /obj/item/clothing/under/rank/security/viro/warden/formal/skirt(src)
new /obj/item/clothing/suit/armor/vest/viro/warden/wintercoat(src)
new /obj/item/clothing/suit/armor/vest/viro/warden/alt(src)
new /obj/item/clothing/suit/armor/vest/viro/warden(src)
@@ -36,3 +36,18 @@
name = "armored bandana"
desc = "For ten years, we lived and died together. You couldn't possibly understand."
armor_type = /datum/armor/cosmetic_sec
//virosec hats
/obj/item/clothing/head/sec/viro
name = "security softcap"
desc = "A soft hat to give security operators less strain on their necks after wearing helmets all day."
icon = 'modular_zubbers/icons/obj/clothing/head/hats.dmi'
worn_icon = 'modular_zubbers/icons/mob/clothing/head/hats.dmi'
icon_state = "secsoft_v"
armor_type = /datum/armor/cosmetic_sec
/obj/item/clothing/head/sec/viro/beanie
name = "security beanie"
desc = "A beanie for security purposes"
icon_state = "security_beanie"
armor_type = /datum/armor/cosmetic_sec
@@ -717,3 +717,20 @@
icon_state = "plasmax_black"
light_color = "#f399ff"
visor_icon = "plasmax_black-envisor"
// virosec helmets, sprites by axietheaxolotl
/obj/item/clothing/head/helmet/viro
name = "helmet"
desc = "Standard Security gear. Protects the head from impacts."
icon = 'modular_zubbers/icons/obj/clothing/head/hats.dmi'
worn_icon = 'modular_zubbers/icons/mob/clothing/head/hats.dmi'
icon_state = "security_helmet"
/obj/item/clothing/head/helmet/viro/hos
name = "helmet"
desc = "Standard Security gear. Protects the head from impacts. This one has a golden stripe."
icon = 'modular_zubbers/icons/obj/clothing/head/hats.dmi'
worn_icon = 'modular_zubbers/icons/mob/clothing/head/hats.dmi'
icon_state = "hos_helmet"
@@ -152,3 +152,103 @@
/datum/atom_skin/metrocop_armor/overwatch_red
preview_name = "Red Overwatch"
new_icon_state = "overwatch_red"
/obj/item/clothing/suit/armor/vest/secwintercoat
name = "security winter coat"
desc = "A winter coat with an armored vest resting atop it, perfect for those cold Freyja nights."
icon = 'modular_zubbers/icons/obj/clothing/suits/armor.dmi'
worn_icon = 'modular_zubbers/icons/mob/clothing/suits/armor.dmi'
icon_state = "sec_wintercoat"
inhand_icon_state = "armor"
blood_overlay_type = "armor"
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
// Virosec armor, sprites by axietheaxolotl
/obj/item/clothing/suit/armor/vest/viro
name = "armor vest"
desc = "A plate carrier meant to protect against all forms of threats."
icon = 'modular_zubbers/icons/obj/clothing/suits/armor.dmi'
worn_icon = 'modular_zubbers/icons/mob/clothing/suits/armor.dmi'
icon_state = "sec_platecarrier"
inhand_icon_state = "armor"
blood_overlay_type = "armor"
/obj/item/clothing/suit/armor/vest/viro/heavy
name = "heavy armor vest"
desc = "A heavier plate carrier meant to protect against all forms of threats."
icon_state = "sec_heavyvest"
inhand_icon_state = "armor"
blood_overlay_type = "armor"
/obj/item/clothing/suit/armor/vest/viro/leatherjacket
name = "security leather jacket"
desc = "A leather jacket for security officers, with a badass red collar."
icon_state = "sec_leatherjacket"
/obj/item/clothing/suit/armor/vest/viro/softshell
name = "Security softshell jacket"
desc = "A softshell weather-resistant jacket perfect for those plants with stormy weather."
icon_state = "sec_softshell"
/obj/item/clothing/suit/armor/hos/viro
name = "armored greatcoat"
desc = "A greatcoat enhanced with a special alloy for some extra protection and style for those with a commanding presence."
icon = 'modular_zubbers/icons/obj/clothing/suits/armor.dmi'
worn_icon = 'modular_zubbers/icons/mob/clothing/suits/armor.dmi'
icon_state = "hos_greatcoat"
inhand_icon_state = "greatcoat"
body_parts_covered = CHEST|GROIN|ARMS|LEGS
armor_type = /datum/armor/armor_hos
cold_protection = CHEST|GROIN|LEGS|ARMS
heat_protection = CHEST|GROIN|LEGS|ARMS
strip_delay = 8 SECONDS
/datum/armor/armor_hos
melee = 30
bullet = 30
laser = 30
energy = 40
bomb = 25
fire = 70
acid = 90
wound = 10
/obj/item/clothing/suit/armor/hos/viro/trenchcoat
name = "armored trenchcoat"
desc = "A trenchcoat enhanced with a special lightweight kevlar. The epitome of tactical plainclothes."
icon_state = "hos_overcoat"
inhand_icon_state = "hostrench"
flags_inv = 0
strip_delay = 8 SECONDS
/obj/item/clothing/suit/armor/hos/viro/trenchcoat/winter
name = "head of security's winter trenchcoat"
desc = "A trenchcoat enhanced with a special lightweight kevlar, padded with wool on the collar and inside. You feel strangely lonely wearing this coat."
icon_state = "hos_wintercoat"
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
/obj/item/clothing/suit/armor/vest/viro/warden
name = "warden's jacket"
desc = "A navy-blue armored jacket with blue shoulder designations and '/Warden/' stitched into one of the chest pockets."
icon = 'modular_zubbers/icons/obj/clothing/suits/armor.dmi'
worn_icon = 'modular_zubbers/icons/mob/clothing/suits/armor.dmi'
icon_state = "warden_jacket_v"
inhand_icon_state = "armor"
body_parts_covered = CHEST|GROIN|ARMS
cold_protection = CHEST|GROIN|ARMS|HANDS
heat_protection = CHEST|GROIN|ARMS|HANDS
strip_delay = 7 SECONDS
resistance_flags = FLAMMABLE
dog_fashion = null
/obj/item/clothing/suit/armor/vest/viro/warden/alt
name = "warden's armored jacket"
desc = "A red jacket with silver rank pips and body armor strapped on top."
icon_state = "warden_alt"
/obj/item/clothing/suit/armor/vest/viro/warden/wintercoat
name = "the warden's winter coat"
desc = "A winter coat with an armored vest resting atop it, with some padded with wool on the collar and inside."
icon_state = "warden_winterjacket"
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
@@ -81,3 +81,168 @@
greyscale_colors = "#A53228#333333#292929"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
can_adjust = FALSE
/obj/item/clothing/under/rank/security/officer/turtleneck
name = "security turtleneck"
desc = "A tactical turtleneck meant for those long nights out on the night shift."
icon = 'modular_skyrat/master_files/icons/obj/clothing/under/security.dmi'
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/security.dmi'
icon_state = "jumpsuit_red"
inhand_icon_state = "r_suit"
can_adjust = TRUE
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
// Virosec, sprites by axietheaxolotl
/obj/item/clothing/under/rank/security/viro/officer/
name = "security uniform"
desc = "A tactical security jumpsuit for officers complete with Nanotrasen belt buckle."
worn_icon = 'modular_zubbers/icons/mob/clothing/under/security.dmi'
icon = 'modular_zubbers/icons/mob/clothing/under/security.dmi'
worn_icon_digi = 'modular_zubbers/icons/mob/clothing/under/security_digi.dmi'
icon_state = "security_uniform_v"
inhand_icon_state = "r_suit"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
/obj/item/clothing/under/rank/security/viro/officer/lowcut
name = "low-cut security uniform"
desc = "A tactical security uniform for officers, complete lower-cut top."
icon_state = "security_lowcut"
inhand_icon_state = "r_suit"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
/obj/item/clothing/under/rank/security/viro/officer/skirt/
name = "security skirt"
desc = "A \"tactical\" security uniform with the legs replaced by a skirt."
icon_state = "security_skirt"
inhand_icon_state = "r_suit"
body_parts_covered = CHEST|GROIN|ARMS
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
/obj/item/clothing/under/rank/security/viro/officer/formal/
name = "security officer's formal uniform"
desc = "The latest in fashionable security outfits."
icon_state = "security_formals"
inhand_icon_state = "r_suit"
alt_covers_chest = TRUE
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
/obj/item/clothing/under/rank/security/viro/officer/bodysuit
name = "seucrity officer's bodysuit"
desc = "The latest in form-fitting, high speed, and low drag security equipment."
icon_state = "security_bodysuit"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
/obj/item/clothing/under/rank/security/viro/officer/bodysuit/equipped(mob/living/affected_mob, slot)
. = ..()
var/mob/living/carbon/human/affected_human = affected_mob
if(src == affected_human.w_uniform)
if(affected_mob.gender == FEMALE)
icon_state = "security_bodysuit_female"
else
icon_state = "security_bodysuit_male"
affected_mob.update_worn_undersuit()
/obj/item/clothing/under/rank/security/viro/warden/
name = "security suit"
desc = "A formal security suit for officers complete with Nanotrasen belt buckle."
worn_icon = 'modular_zubbers/icons/mob/clothing/under/security.dmi'
icon = 'modular_zubbers/icons/mob/clothing/under/security.dmi'
icon_state = "warden_uniform"
inhand_icon_state = "r_suit"
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
/obj/item/clothing/under/rank/security/viro/warden/skirt/
name = "warden's suitskirt"
desc = "A formal security suitskirt for officers complete with Nanotrasen belt buckle."
icon_state = "warden_skirt"
inhand_icon_state = "r_suit"
body_parts_covered = CHEST|GROIN|ARMS
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
/obj/item/clothing/under/rank/security/viro/warden/formal/
desc = "The insignia on this uniform tells you that this uniform belongs to the Warden."
name = "warden's formal uniform"
icon_state = "wardenblueclothes"
inhand_icon_state = null
alt_covers_chest = TRUE
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
/obj/item/clothing/under/rank/security/viro/warden/formal/skirt
desc = "The insignia on this uniform tells you that this uniform belongs to the Warden. This one has a skirt."
name = "warden's formal uniform"
icon_state = "wardenblueclothes_skirt"
inhand_icon_state = null
body_parts_covered = CHEST|GROIN|ARMS
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
/obj/item/clothing/under/rank/security/viro/head_of_security/viro
name = "head of security's uniform"
desc = "A security jumpsuit decorated for those few with the dedication to achieve the position of Head of Security."
worn_icon = 'modular_zubbers/icons/mob/clothing/under/security.dmi'
icon = 'modular_zubbers/icons/mob/clothing/under/security.dmi'
icon_state = "hos_uniform"
inhand_icon_state = "r_suit"
armor_type = /datum/armor/clothing_under/security_head_of_security
strip_delay = 6 SECONDS
/datum/armor/clothing_under/security_head_of_security
melee = 10
fire = 50
acid = 50
wound = 10
/obj/item/clothing/under/rank/security/viro/head_of_security/skirt
name = "head of security's skirt"
desc = "A security jumpskirt decorated for those few with the dedication to achieve the position of Head of Security."
worn_icon = 'modular_zubbers/icons/mob/clothing/under/security.dmi'
icon = 'modular_zubbers/icons/mob/clothing/under/security.dmi'
worn_icon_digi = 'modular_zubbers/icons/mob/clothing/under/security_digi.dmi'
icon_state = "hos_skirt"
inhand_icon_state = "r_suit"
body_parts_covered = CHEST|GROIN|ARMS
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
/obj/item/clothing/under/rank/security/viro/head_of_security/alt
name = "head of security's turtleneck"
desc = "A stylish alternative to the normal head of security jumpsuit, complete with tactical pants."
icon_state = "hosalt"
inhand_icon_state = "bl_suit"
alt_covers_chest = TRUE
/obj/item/clothing/under/rank/security/head_of_security/alt/skirt
name = "head of security's turtleneck skirt"
desc = "A stylish alternative to the normal head of security jumpsuit, complete with a tactical skirt."
icon_state = "hosalt_skirt"
inhand_icon_state = "bl_suit"
body_parts_covered = CHEST|GROIN|ARMS
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
alt_covers_chest = TRUE
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
/obj/item/clothing/under/rank/security/viro/head_of_security/formal
desc = "The insignia on this uniform tells you that this uniform belongs to the Head of Security."
name = "head of security's formal uniform"
icon_state = "hosblueclothes"
inhand_icon_state = null
alt_covers_chest = TRUE
/obj/item/clothing/under/rank/security/viro/head_of_security/formal/skirt
desc = "The insignia on this uniform tells you that this uniform belongs to the Head of Security."
name = "head of security's formal uniform skirt"
icon_state = "hosblueclothes"
inhand_icon_state = null
body_parts_covered = CHEST|GROIN|ARMS
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
@@ -206,6 +206,16 @@
/obj/item/clothing/head/playbunnyears/hos = 1,
/obj/item/clothing/under/rank/security/head_of_security/bunnysuit = 1,
/obj/item/clothing/suit/armor/hos_tailcoat = 1,
/obj/item/clothing/under/rank/security/viro/head_of_security/viro = 1,
/obj/item/clothing/under/rank/security/viro/head_of_security/skirt = 1,
/obj/item/clothing/under/rank/security/viro/head_of_security/alt = 1,
/obj/item/clothing/under/rank/security/head_of_security/alt/skirt = 1,
/obj/item/clothing/under/rank/security/viro/head_of_security/formal = 1,
/obj/item/clothing/under/rank/security/viro/head_of_security/formal/skirt = 1,
/obj/item/clothing/suit/armor/hos/viro/trenchcoat/winter = 1,
/obj/item/clothing/suit/armor/hos/viro/trenchcoat = 1,
/obj/item/clothing/suit/armor/hos/viro = 1,
/obj/item/clothing/head/helmet/viro/hos = 1,
)
access_lists["[ACCESS_QM]"] = list(
@@ -54,20 +54,31 @@
/obj/item/clothing/suit/toggle/jacket/sec = 6,
/obj/item/clothing/neck/security_cape = 6,
/obj/item/clothing/neck/security_cape/armplate = 6,
/obj/item/storage/backpack/security = 6,
/obj/item/storage/backpack/satchel/sec = 6,
/obj/item/storage/backpack/duffelbag/sec = 6,
/obj/item/clothing/under/rank/security/officer = 10,
/obj/item/clothing/under/rank/security/peacekeeper/skirt = 10,
/obj/item/clothing/under/rank/security/peacekeeper/miniskirt = 10,
/obj/item/clothing/under/rank/security/officer/blueshirt = 10,
/obj/item/clothing/under/rank/security/peacekeeper/trousers = 5,
/obj/item/clothing/under/rank/security/peacekeeper/trousers/shorts = 5,
/obj/item/clothing/under/rank/security/officer = 6,
/obj/item/clothing/under/rank/security/peacekeeper/skirt = 6,
/obj/item/clothing/under/rank/security/peacekeeper/miniskirt = 6,
/obj/item/clothing/under/rank/security/officer/blueshirt = 6,
/obj/item/clothing/under/rank/security/peacekeeper/trousers = 6,
/obj/item/clothing/under/rank/security/peacekeeper/trousers/shorts = 6,
/obj/item/clothing/under/rank/security/skyrat/utility = 6,
/obj/item/clothing/shoes/jackboots/sec = 10,
/obj/item/clothing/gloves/color/black/security = 10,
/obj/item/clothing/under/rank/security/officer/turtleneck = 6,
/obj/item/clothing/shoes/jackboots/sec = 6,
/obj/item/clothing/gloves/color/black/security = 6,
/obj/item/clothing/head/helmet/sec/futuristic = 6,
/obj/item/clothing/suit/armor/vest/collared_vest = 6, //added by Bangle
/obj/item/clothing/under/rank/security/viro/officer = 6,
/obj/item/clothing/under/rank/security/viro/officer/lowcut = 6,
/obj/item/clothing/under/rank/security/viro/officer/skirt = 6,
/obj/item/clothing/under/rank/security/viro/officer/formal = 6,
/obj/item/clothing/under/rank/security/viro/officer/bodysuit = 6,
/obj/item/clothing/suit/armor/vest/secwintercoat = 6,
/obj/item/clothing/suit/armor/vest/viro = 6,
/obj/item/clothing/suit/armor/vest/viro/heavy = 6,
/obj/item/clothing/suit/armor/vest/viro/leatherjacket = 6,
/obj/item/clothing/suit/armor/vest/viro/softshell = 6,
/obj/item/clothing/head/sec/viro = 6,
/obj/item/clothing/head/sec/viro/beanie = 6,
),
),
list(
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 10 KiB