Files
Col.RiceandGitHub 9aecebe231 [BOUNTY] Add frontier clothing from organic printer to the loadout menu [2.0 - Electric boogalo] (#4593)
## About The Pull Request
This add frontier equipment that is found in the frontier organic
printer.

The PR has been tested and functional codewise.
## Why It's Good For The Game
Created because of a bounty on Discord by user mrgloopy. This add no
advantage variant of the frontier clothing pieces such as jacket,
gloves, mask and hat. The original pieces are still kept if the
player(s) require armoured variant. These variants are solely for drip
purpose. Of which the user has stated in their bounty. This sentiment is
shared among other players. After all... Drip is good.

## Proof Of Testing

<img width="375" height="555" alt="image"
src="https://github.com/user-attachments/assets/2e48d1d5-577f-465f-af7b-7462af2c6376"
/>

<img width="299" height="575" alt="image"
src="https://github.com/user-attachments/assets/bf015a07-ec9d-4555-884b-5e199f0535f2"
/>

<img width="180" height="156" alt="image"
src="https://github.com/user-attachments/assets/25e1be7c-f6f7-4574-ab95-9a9d0e62b090"
/>

<img width="218" height="300" alt="image"
src="https://github.com/user-attachments/assets/63d74ddf-ba82-4989-bb13-536f09d2aec2"
/>

<img width="598" height="230" alt="image"
src="https://github.com/user-attachments/assets/1085230c-fe46-46b7-8a75-d2115cca6e2c"
/>

<img width="603" height="190" alt="image"
src="https://github.com/user-attachments/assets/6bb3616d-c610-4af1-9d63-ec173998e080"
/>

<img width="1100" height="837" alt="image"
src="https://github.com/user-attachments/assets/08580f6d-d34f-4669-89a9-b4945998fa66"
/>

## Changelog

🆑
add: frontier caps.
add: frontier jacket.
add: frontier gas mask.
add: frontier jackboots.
add: frontier jumpsuit.
add: frontier bags.
add: frontier gloves.
code: added new define for frontier bags in character creation menu.
code: added icon define for frontier bags.
code: added frontier bags to spawn roundstart from character creation.
🆑
2025-09-02 12:07:40 +03:00

227 lines
8.7 KiB
Plaintext

/proc/generate_underwear_icon(datum/sprite_accessory/accessory, datum/universal_icon/base_icon, color, icon_offset = 0) //SKYRAT EDIT CHANGE : adds icon_offset - Colorable Undershirt/Socks
var/datum/universal_icon/final_icon = base_icon.copy()
if (!isnull(accessory))
var/datum/universal_icon/accessory_icon = uni_icon(accessory.icon, accessory.icon_state) // SKYRAT EDIT CHANGE: ORIGINAL - var/icon/accessory_icon = uni_icon('icons/mob/clothing/underwear.dmi', accessory.icon_state)
if (color && !accessory.use_static)
accessory_icon.blend_color(color, ICON_MULTIPLY)
final_icon.blend_icon(accessory_icon, ICON_OVERLAY)
final_icon.crop(10, 1+icon_offset, 22, 13+icon_offset) //SKYRAT EDIT CHANGE : adds icon_offset - Colorable Undershirt/Socks
final_icon.scale(32, 32)
return final_icon
/// Backpack preference
/datum/preference/choiced/backpack
savefile_key = "backpack"
savefile_identifier = PREFERENCE_CHARACTER
main_feature_name = "Backpack"
category = PREFERENCE_CATEGORY_CLOTHING
should_generate_icons = TRUE
/datum/preference/choiced/backpack/init_possible_values()
return list(
GBACKPACK,
GSATCHEL,
LSATCHEL,
GDUFFELBAG,
GMESSENGER,
DBACKPACK,
DSATCHEL,
DDUFFELBAG,
DMESSENGER,
FBACKPACK,
FSATCHEL,
FMESSENGER,
)
/datum/preference/choiced/backpack/create_default_value()
return DBACKPACK
/datum/preference/choiced/backpack/icon_for(value)
switch (value)
if (GBACKPACK)
return /obj/item/storage/backpack
if (GSATCHEL)
return /obj/item/storage/backpack/satchel
if (LSATCHEL)
return /obj/item/storage/backpack/satchel/leather
if (GDUFFELBAG)
return /obj/item/storage/backpack/duffelbag
if (GMESSENGER)
return /obj/item/storage/backpack/messenger
if (FBACKPACK)
return /obj/item/storage/backpack/industrial/frontier_colonist
if (FSATCHEL)
return /obj/item/storage/backpack/industrial/frontier_colonist/satchel
if (FMESSENGER)
return /obj/item/storage/backpack/industrial/frontier_colonist/messenger
// In a perfect world, these would be your department's backpack.
// However, this doesn't factor in assistants, or no high slot, and would
// also increase the spritesheet size a lot.
// I play medical doctor, and so medical doctor you get.
if (DBACKPACK)
return /obj/item/storage/backpack/medic
if (DSATCHEL)
return /obj/item/storage/backpack/satchel/med
if (DDUFFELBAG)
return /obj/item/storage/backpack/duffelbag/med
if (DMESSENGER)
return /obj/item/storage/backpack/messenger/med
/datum/preference/choiced/backpack/apply_to_human(mob/living/carbon/human/target, value)
target.backpack = value
/// Jumpsuit preference
/datum/preference/choiced/jumpsuit
savefile_key = "jumpsuit_style"
savefile_identifier = PREFERENCE_CHARACTER
priority = PREFERENCE_PRIORITY_BODY_TYPE
main_feature_name = "Jumpsuit"
category = PREFERENCE_CATEGORY_CLOTHING
should_generate_icons = TRUE
/datum/preference/choiced/jumpsuit/init_possible_values()
return list(
PREF_SUIT,
PREF_SKIRT,
)
/datum/preference/choiced/jumpsuit/create_default_value()
return PREF_SUIT
/datum/preference/choiced/jumpsuit/icon_for(value)
switch (value)
if (PREF_SUIT)
return /obj/item/clothing/under/color/grey
if (PREF_SKIRT)
return /obj/item/clothing/under/color/jumpskirt/grey
/datum/preference/choiced/jumpsuit/apply_to_human(mob/living/carbon/human/target, value)
target.jumpsuit_style = value
/// Socks preference
/datum/preference/choiced/socks
savefile_key = "socks"
savefile_identifier = PREFERENCE_CHARACTER
main_feature_name = "Socks"
category = PREFERENCE_CATEGORY_CLOTHING
should_generate_icons = TRUE
can_randomize = FALSE
/datum/preference/choiced/socks/init_possible_values()
return assoc_to_keys_features(SSaccessories.socks_list)
/datum/preference/choiced/socks/create_default_value()
return /datum/sprite_accessory/socks/nude::name
/datum/preference/choiced/socks/icon_for(value)
var/static/datum/universal_icon/lower_half
if (isnull(lower_half))
lower_half = uni_icon('icons/blanks/32x32.dmi', "nothing")
lower_half.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_leg"), ICON_OVERLAY)
lower_half.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_leg"), ICON_OVERLAY)
return generate_underwear_icon(SSaccessories.socks_list[value], lower_half)
/datum/preference/choiced/socks/apply_to_human(mob/living/carbon/human/target, value)
target.socks = value
/// Undershirt preference
/datum/preference/choiced/undershirt
savefile_key = "undershirt"
savefile_identifier = PREFERENCE_CHARACTER
priority = PREFERENCE_PRIORITY_BODY_TYPE
main_feature_name = "Undershirt"
category = PREFERENCE_CATEGORY_CLOTHING
should_generate_icons = TRUE
can_randomize = FALSE
/datum/preference/choiced/undershirt/init_possible_values()
return assoc_to_keys_features(SSaccessories.undershirt_list)
/datum/preference/choiced/undershirt/create_default_value()
return /datum/sprite_accessory/undershirt/nude::name
/* // SKYRAT EDIT REMOVAL - sports bra doesn't exist as an undershirt. so just let this default to naked and we'll add underwear elsewhere
/datum/preference/choiced/undershirt/create_informed_default_value(datum/preferences/preferences)
switch(preferences.read_preference(/datum/preference/choiced/gender))
if(MALE)
return /datum/sprite_accessory/undershirt/nude::name
if(FEMALE)
return /datum/sprite_accessory/undershirt/sports_bra::name
return ..()
*/ // SKYRAT EDIT REMOVAL END
/datum/preference/choiced/undershirt/icon_for(value)
var/static/datum/universal_icon/body
if (isnull(body))
body = uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_leg")
body.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_leg"), ICON_OVERLAY)
body.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_arm"), ICON_OVERLAY)
body.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_arm"), ICON_OVERLAY)
body.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_hand"), ICON_OVERLAY)
body.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_hand"), ICON_OVERLAY)
body.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_chest_m"), ICON_OVERLAY)
var/datum/universal_icon/icon_with_undershirt = body.copy()
if (value != "Nude")
var/datum/sprite_accessory/accessory = SSaccessories.undershirt_list[value]
icon_with_undershirt.blend_icon(uni_icon(accessory.icon, accessory.icon_state), ICON_OVERLAY)// SKYRAT EDIT CHANGE: ORIGINAL - icon_with_undershirt.blend_icon(uni_icon('icons/mob/clothing/underwear.dmi', accessory.icon_state), ICON_OVERLAY)
icon_with_undershirt.crop(10, 11, 22, 23) // SKYRAT EDIT CHANGE : ORIGINAL - icon_with_undershirt.crop(9, 9, 23, 23)
icon_with_undershirt.scale(32, 32)
return icon_with_undershirt
/datum/preference/choiced/undershirt/apply_to_human(mob/living/carbon/human/target, value)
target.undershirt = value
/// Underwear preference
/datum/preference/choiced/underwear
savefile_key = "underwear"
savefile_identifier = PREFERENCE_CHARACTER
main_feature_name = "Underwear"
category = PREFERENCE_CATEGORY_CLOTHING
should_generate_icons = TRUE
can_randomize = FALSE
/datum/preference/choiced/underwear/init_possible_values()
return assoc_to_keys_features(SSaccessories.underwear_list)
/datum/preference/choiced/underwear/create_default_value()
return /datum/sprite_accessory/underwear/male_hearts::name
/datum/preference/choiced/underwear/icon_for(value)
var/static/datum/universal_icon/lower_half
if (isnull(lower_half))
lower_half = uni_icon('icons/blanks/32x32.dmi', "nothing")
lower_half.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_chest_m"), ICON_OVERLAY)
lower_half.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_r_leg"), ICON_OVERLAY)
lower_half.blend_icon(uni_icon('icons/mob/human/bodyparts_greyscale.dmi', "human_l_leg"), ICON_OVERLAY)
return generate_underwear_icon(SSaccessories.underwear_list[value], lower_half, COLOR_ALMOST_BLACK, icon_offset = 5) // SKYRAT EDIT CHANGE : ICON_OFFSET // SKYRAT EDIT CHANGE - ORIGINAL: return generate_underwear_icon(SSaccessories.underwear_list[value], lower_half, COLOR_ALMOST_BLACK)
/datum/preference/choiced/underwear/apply_to_human(mob/living/carbon/human/target, value)
target.underwear = value
/datum/preference/choiced/underwear/is_accessible(datum/preferences/preferences)
if (!..(preferences))
return FALSE
var/species_type = preferences.read_preference(/datum/preference/choiced/species)
var/datum/species/species = GLOB.species_prototypes[species_type]
return !(TRAIT_NO_UNDERWEAR in species.inherent_traits)
/datum/preference/choiced/underwear/compile_constant_data()
var/list/data = ..()
data[SUPPLEMENTAL_FEATURE_KEY] = "underwear_color"
return data