Loadout DB Storage Refactor (#16453)

* `display_name` -> Typepaths V1

* Loadout display name capitalisation

#15857

* Review 1, plus json fixes

* (Hopefully) final tweaks

* Styling nitpicks

* Extra tweaks because why not

It never caused a runtime, but the `?.` is just in case.

* Deconflicting

* Warning comment

* Whoops

Typing faster than my brain
This commit is contained in:
SabreML
2021-10-09 19:35:15 +01:00
committed by GitHub
parent ab4aeec128
commit bc739c353d
20 changed files with 926 additions and 360 deletions
+6 -5
View File
@@ -115,7 +115,7 @@
if(!isemptylist(player_alt_titles))
playertitlelist = list2params(player_alt_titles)
if(!isemptylist(loadout_gear))
gearlist = list2params(loadout_gear)
gearlist = json_encode(loadout_gear)
var/datum/db_query/firstquery = SSdbcore.NewQuery("SELECT slot FROM characters WHERE ckey=:ckey ORDER BY slot", list(
"ckey" = C.ckey
@@ -438,7 +438,7 @@
//socks
socks = query.item[49]
body_accessory = query.item[50]
loadout_gear = params2list(query.item[51])
loadout_gear = query.item[51]
autohiss_mode = text2num(query.item[52])
//Sanitize
@@ -507,6 +507,7 @@
socks = sanitize_text(socks, initial(socks))
body_accessory = sanitize_text(body_accessory, initial(body_accessory))
loadout_gear = sanitize_json(loadout_gear)
if(!player_alt_titles)
player_alt_titles = new()
@@ -1457,11 +1458,11 @@
/datum/character_save/proc/get_gear_metadata(datum/gear/G)
. = loadout_gear[G.display_name]
/datum/character_save/proc/get_gear_metadata(datum/gear/G) // NYI
. = loadout_gear[G.type]
if(!.)
. = list()
loadout_gear[G.display_name] = .
loadout_gear[G.type] = .
/datum/character_save/proc/get_tweak_metadata(datum/gear/G, datum/gear_tweak/tweak)
var/list/metadata = get_gear_metadata(G)
@@ -96,29 +96,17 @@
if(href_list["preference"] == "gear")
if(href_list["toggle_gear"])
var/datum/gear/TG = GLOB.gear_datums[href_list["toggle_gear"]]
if(TG.display_name in active_character.loadout_gear)
active_character.loadout_gear -= TG.display_name
var/datum/gear/TG = GLOB.gear_datums[text2path(href_list["toggle_gear"])]
if(TG && (TG.type in active_character.loadout_gear))
active_character.loadout_gear -= TG.type
else
if(TG.donator_tier && user.client.donator_level < TG.donator_tier)
to_chat(user, "<span class='warning'>That gear is only available at a higher donation tier than you are on.</span>")
return
var/total_cost = 0
var/list/type_blacklist = list()
for(var/gear_name in active_character.loadout_gear)
var/datum/gear/G = GLOB.gear_datums[gear_name]
if(istype(G))
if(!G.subtype_cost_overlap)
if(G.subtype_path in type_blacklist)
continue
type_blacklist += G.subtype_path
total_cost += G.cost
build_loadout(TG)
if((total_cost + TG.cost) <= max_gear_slots)
active_character.loadout_gear += TG.display_name
else if(href_list["gear"] && href_list["tweak"])
var/datum/gear/gear = GLOB.gear_datums[href_list["gear"]]
else if(href_list["gear"] && href_list["tweak"]) // NYI
var/datum/gear/gear = GLOB.gear_datums[text2path(href_list["gear"])]
var/datum/gear_tweak/tweak = locate(href_list["tweak"])
if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks))
return
@@ -10,17 +10,27 @@ GLOBAL_LIST_EMPTY(gear_datums)
..()
/datum/gear
var/display_name //Name/index. Must be unique.
var/description //Description of this gear. If left blank will default to the description of the pathed item.
var/path //Path to item.
var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points.
var/slot //Slot to equip to.
var/list/allowed_roles //Roles that can spawn with this item.
var/whitelisted //Term to check the whitelist for..
/// Displayed name of the item listing.
var/display_name
/// Description of the item listing. If left blank will default to the description of the pathed item.
var/description
/// Typepath of the item.
var/path
/// Loadout points cost to select the item listing.
var/cost = 1
/// Slot to equip the item to.
var/slot
/// List of job roles which can spawn with the item.
var/list/allowed_roles
/// Loadout category of the item listing.
var/sort_category = "General"
var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned.
var/subtype_path = /datum/gear //for skipping organizational subtypes (optional)
var/subtype_cost_overlap = TRUE //if subtypes can take points at the same time
/// List of datums which will alter the item after it has been spawned. (NYI)
var/list/gear_tweaks = list()
/// Set on empty category datums to skip them being added to the list. (/datum/gear/accessory, /datum/gear/suit/coat/job, etc.)
var/main_typepath = /datum/gear
/// Does selecting a second item with the same `main_typepath` cost loadout points.
var/subtype_selection_cost = TRUE
/// Patreon donator tier needed to select this item listing.
var/donator_tier = 0
/datum/gear/New()
@@ -1,203 +1,215 @@
/*
######################################################################################
## ##
## IMPORTANT README ##
## ##
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
## Please inform the server host if you wish to modify any of these. ##
## ##
######################################################################################
*/
/datum/gear/accessory
subtype_path = /datum/gear/accessory
main_typepath = /datum/gear/accessory
slot = slot_tie
sort_category = "Accessories"
/datum/gear/accessory/scarf
display_name = "scarf"
display_name = "Scarf"
path = /obj/item/clothing/accessory/scarf
/datum/gear/accessory/scarf/red
display_name = "scarf, red"
display_name = "Scarf, red"
path = /obj/item/clothing/accessory/scarf/red
/datum/gear/accessory/scarf/green
display_name = "scarf, green"
display_name = "Scarf, green"
path = /obj/item/clothing/accessory/scarf/green
/datum/gear/accessory/scarf/darkblue
display_name = "scarf, dark blue"
display_name = "Scarf, dark blue"
path = /obj/item/clothing/accessory/scarf/darkblue
/datum/gear/accessory/scarf/purple
display_name = "scarf, purple"
display_name = "Scarf, purple"
path = /obj/item/clothing/accessory/scarf/purple
/datum/gear/accessory/scarf/yellow
display_name = "scarf, yellow"
display_name = "Scarf, yellow"
path = /obj/item/clothing/accessory/scarf/yellow
/datum/gear/accessory/scarf/orange
display_name = "scarf, orange"
display_name = "Scarf, orange"
path = /obj/item/clothing/accessory/scarf/orange
/datum/gear/accessory/scarf/lightblue
display_name = "scarf, light blue"
display_name = "Scarf, light blue"
path = /obj/item/clothing/accessory/scarf/lightblue
/datum/gear/accessory/scarf/white
display_name = "scarf, white"
display_name = "Scarf, white"
path = /obj/item/clothing/accessory/scarf/white
/datum/gear/accessory/scarf/black
display_name = "scarf, black"
display_name = "Scarf, black"
path = /obj/item/clothing/accessory/scarf/black
/datum/gear/accessory/scarf/zebra
display_name = "scarf, zebra"
display_name = "Scarf, zebra"
path = /obj/item/clothing/accessory/scarf/zebra
/datum/gear/accessory/scarf/christmas
display_name = "scarf, christmas"
display_name = "Scarf, christmas"
path = /obj/item/clothing/accessory/scarf/christmas
/datum/gear/accessory/scarf/stripedred
display_name = "scarf, striped red"
display_name = "Scarf, striped red"
path = /obj/item/clothing/accessory/stripedredscarf
/datum/gear/accessory/scarf/stripedgreen
display_name = "scarf, striped green"
display_name = "Scarf, striped green"
path = /obj/item/clothing/accessory/stripedgreenscarf
/datum/gear/accessory/scarf/stripedblue
display_name = "scarf, striped blue"
display_name = "Scarf, striped blue"
path = /obj/item/clothing/accessory/stripedbluescarf
/datum/gear/accessory/holobadge
display_name = "holobadge, pin"
display_name = "Holobadge, pin"
path = /obj/item/clothing/accessory/holobadge
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
/datum/gear/accessory/holobadge_n
display_name = "holobadge, cord"
display_name = "Holobadge, cord"
path = /obj/item/clothing/accessory/holobadge/cord
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
/datum/gear/accessory/tieblue
display_name = "tie, blue"
display_name = "Tie, blue"
path = /obj/item/clothing/accessory/blue
/datum/gear/accessory/tiered
display_name = "tie, red"
display_name = "Tie, red"
path = /obj/item/clothing/accessory/red
/datum/gear/accessory/tieblack
display_name = "tie, black"
display_name = "Tie, black"
path = /obj/item/clothing/accessory/black
/datum/gear/accessory/tiehorrible
display_name = "tie, vomit green"
display_name = "Tie, vomit green"
path = /obj/item/clothing/accessory/horrible
/datum/gear/accessory/stethoscope
display_name = "stethoscope"
display_name = "Stethoscope"
path = /obj/item/clothing/accessory/stethoscope
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Paramedic", "Brig Physician")
/datum/gear/accessory/cowboyshirt
display_name = "cowboy shirt, black"
display_name = "Cowboy shirt, black"
path = /obj/item/clothing/accessory/cowboyshirt
/datum/gear/accessory/cowboyshirt/short_sleeved
display_name = "cowboy shirt, short sleeved black"
display_name = "Cowboy shirt, short sleeved black"
path = /obj/item/clothing/accessory/cowboyshirt/short_sleeved
/datum/gear/accessory/cowboyshirt/white
display_name = "cowboy shirt, white"
display_name = "Cowboy shirt, white"
path = /obj/item/clothing/accessory/cowboyshirt/white
/datum/gear/accessory/cowboyshirt/white/short_sleeved
display_name = "cowboy shirt, short sleeved white"
display_name = "Cowboy shirt, short sleeved white"
path = /obj/item/clothing/accessory/cowboyshirt/white/short_sleeved
/datum/gear/accessory/cowboyshirt/pink
display_name = "cowboy shirt, pink"
display_name = "Cowboy shirt, pink"
path = /obj/item/clothing/accessory/cowboyshirt/pink
/datum/gear/accessory/cowboyshirt/pink/short_sleeved
display_name = "cowboy shirt, short sleeved pink"
display_name = "Cowboy shirt, short sleeved pink"
path = /obj/item/clothing/accessory/cowboyshirt/pink/short_sleeved
/datum/gear/accessory/cowboyshirt/red
display_name = "cowboy shirt, red"
display_name = "Cowboy shirt, red"
path = /obj/item/clothing/accessory/cowboyshirt/red
/datum/gear/accessory/cowboyshirt/red/short_sleeved
display_name = "cowboy shirt, short sleeved red"
display_name = "Cowboy shirt, short sleeved red"
path = /obj/item/clothing/accessory/cowboyshirt/red/short_sleeved
/datum/gear/accessory/cowboyshirt/navy
display_name = "cowboy shirt, navy"
display_name = "Cowboy shirt, navy"
path = /obj/item/clothing/accessory/cowboyshirt/navy
/datum/gear/accessory/cowboyshirt/navy/short_sleeved
display_name = "cowboy shirt, short sleeved navy"
display_name = "Cowboy shirt, short sleeved navy"
path = /obj/item/clothing/accessory/cowboyshirt/navy/short_sleeved
/datum/gear/accessory/locket
display_name = "gold locket"
display_name = "Gold locket"
path = /obj/item/clothing/accessory/necklace/locket
/datum/gear/accessory/necklace
display_name = "simple necklace"
display_name = "Simple necklace"
path = /obj/item/clothing/accessory/necklace
/datum/gear/accessory/corset
display_name = "corset, black"
display_name = "Corset, black"
path = /obj/item/clothing/accessory/corset
/datum/gear/accessory/corsetred
display_name = "corset, red"
display_name = "Corset, red"
path = /obj/item/clothing/accessory/corset/red
/datum/gear/accessory/corsetblue
display_name = "corset, blue"
display_name = "Corset, blue"
path = /obj/item/clothing/accessory/corset/blue
/datum/gear/accessory/armband_red
display_name = "armband"
display_name = "Armband"
path = /obj/item/clothing/accessory/armband
/datum/gear/accessory/armband_civ
display_name = "armband, blue-yellow"
display_name = "Armband, blue-yellow"
path = /obj/item/clothing/accessory/armband/yb
/datum/gear/accessory/armband_job
subtype_path = /datum/gear/accessory/armband_job
subtype_cost_overlap = FALSE
main_typepath = /datum/gear/accessory/armband_job
subtype_selection_cost = FALSE
/datum/gear/accessory/armband_job/sec
display_name = " armband, security"
display_name = "Armband, security"
path = /obj/item/clothing/accessory/armband/sec
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Brig Physician")
/datum/gear/accessory/armband_job/cargo
display_name = "cargo armband"
display_name = "Armband, cargo"
path = /obj/item/clothing/accessory/armband/cargo
allowed_roles = list("Quartermaster","Cargo Technician", "Shaft Miner")
/datum/gear/accessory/armband_job/medical
display_name = "armband, medical"
display_name = "Armband, medical"
path = /obj/item/clothing/accessory/armband/med
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Coroner", "Paramedic", "Brig Physician")
/datum/gear/accessory/armband_job/emt
display_name = "armband, EMT"
display_name = "Armband, EMT"
path = /obj/item/clothing/accessory/armband/medgreen
allowed_roles = list("Paramedic", "Brig Physician")
/datum/gear/accessory/armband_job/engineering
display_name = "armband, engineering"
display_name = "Armband, engineering"
path = /obj/item/clothing/accessory/armband/engine
allowed_roles = list("Chief Engineer","Station Engineer", "Life Support Specialist")
/datum/gear/accessory/armband_job/hydro
display_name = "armband, hydroponics"
display_name = "Armband, hydroponics"
path = /obj/item/clothing/accessory/armband/hydro
allowed_roles = list("Botanist")
/datum/gear/accessory/armband_job/sci
display_name = "armband, science"
display_name = "Armband, science"
path = /obj/item/clothing/accessory/armband/science
allowed_roles = list("Research Director","Scientist", "Roboticist")
@@ -1,24 +1,37 @@
/*
######################################################################################
## ##
## IMPORTANT README ##
## ##
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
## Please inform the server host if you wish to modify any of these. ##
## ##
######################################################################################
*/
/datum/gear/lipstick
display_name = "lipstick, red"
display_name = "Lipstick, red"
path = /obj/item/lipstick
sort_category = "Cosmetics"
/datum/gear/lipstick/black
display_name = "lipstick, black"
display_name = "Lipstick, black"
path = /obj/item/lipstick/black
/datum/gear/lipstick/jade
display_name = "lipstick, jade"
display_name = "Lipstick, jade"
path = /obj/item/lipstick/jade
/datum/gear/lipstick/purple
display_name = "lipstick, purple"
display_name = "Lipstick, purple"
path = /obj/item/lipstick/purple
/datum/gear/lipstick/blue
display_name = "lipstick, blue"
display_name = "Lipstick, blue"
path = /obj/item/lipstick/blue
/datum/gear/lipstick/lime
display_name = "lipstick, lime"
display_name = "Lipstick, lime"
path = /obj/item/lipstick/lime
@@ -1,7 +1,20 @@
/*
######################################################################################
## ##
## IMPORTANT README ##
## ##
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
## Please inform the server host if you wish to modify any of these. ##
## ##
######################################################################################
*/
/datum/gear/donor
donator_tier = 2
sort_category = "Donor"
subtype_path = /datum/gear/donor
main_typepath = /datum/gear/donor
/datum/gear/donor/furgloves
display_name = "Fur Gloves"
@@ -1,136 +1,149 @@
/*
######################################################################################
## ##
## IMPORTANT README ##
## ##
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
## Please inform the server host if you wish to modify any of these. ##
## ##
######################################################################################
*/
/datum/gear/dice
display_name = "a d20"
display_name = "D20"
path = /obj/item/dice/d20
/datum/gear/uplift
display_name = "a pack of Uplifts"
display_name = "Pack of Uplifts"
path = /obj/item/storage/fancy/cigarettes/cigpack_uplift
/datum/gear/robust
display_name = "a pack of Robusts"
display_name = "Pack of Robusts"
path = /obj/item/storage/fancy/cigarettes/cigpack_robust
/datum/gear/carp
display_name = "a pack of Carps"
display_name = "Pack of Carps"
path = /obj/item/storage/fancy/cigarettes/cigpack_carp
/datum/gear/midori
display_name = "a pack of Midoris"
display_name = "Pack of Midoris"
path = /obj/item/storage/fancy/cigarettes/cigpack_midori
/datum/gear/smokingpipe
display_name = "smoking pipe"
display_name = "Smoking pipe"
path = /obj/item/clothing/mask/cigarette/pipe
cost = 2
/datum/gear/lighter
display_name = "a cheap lighter"
display_name = "Cheap lighter"
path = /obj/item/lighter
/datum/gear/matches
display_name = "a box of matches"
display_name = "Box of matches"
path = /obj/item/storage/box/matches
/datum/gear/candlebox
display_name = "a box candles"
display_name = "Box of candles"
description = "For setting the mood or for occult rituals."
path = /obj/item/storage/fancy/candle_box/full
/datum/gear/rock
display_name = "a pet rock"
display_name = "Pet rock"
path = /obj/item/toy/pet_rock
/datum/gear/camera
display_name = "a camera"
display_name = "Camera"
path = /obj/item/camera
/datum/gear/redfoxplushie
display_name = "a red fox plushie"
display_name = "Red fox plushie"
path = /obj/item/toy/plushie/red_fox
/datum/gear/blackcatplushie
display_name = "a black cat plushie"
display_name = "Black cat plushie"
path = /obj/item/toy/plushie/black_cat
/datum/gear/voxplushie
display_name = "a vox plushie"
display_name = "Vox plushie"
path = /obj/item/toy/plushie/voxplushie
/datum/gear/lizardplushie
display_name = "a lizard plushie"
display_name = "Lizard plushie"
path = /obj/item/toy/plushie/lizardplushie
/datum/gear/deerplushie
display_name = "a deer plushie"
display_name = "Deer plushie"
path = /obj/item/toy/plushie/deer
/datum/gear/carpplushie
display_name = "a carp plushie"
display_name = "Carp plushie"
path = /obj/item/toy/carpplushie
/datum/gear/sechud
display_name = "a classic security HUD"
display_name = "Classic security HUD"
path = /obj/item/clothing/glasses/hud/security
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Internal Affairs Agent","Magistrate")
/datum/gear/cryaonbox
display_name = "a box of crayons"
display_name = "Box of crayons"
path = /obj/item/storage/fancy/crayons
/datum/gear/cane
display_name = "a walking cane"
display_name = "Walking cane"
path = /obj/item/cane
/datum/gear/cards
display_name = "a deck of standard cards"
display_name = "Deck of standard cards"
path = /obj/item/deck/cards
/datum/gear/doublecards
display_name = "a double deck of standard cards"
display_name = "Double deck of standard cards"
path = /obj/item/deck/doublecards
/datum/gear/tarot
display_name = "a deck of tarot cards"
display_name = "Deck of tarot cards"
path = /obj/item/deck/tarot
/datum/gear/headphones
display_name = "a pair of headphones"
display_name = "Headphones"
path = /obj/item/clothing/ears/headphones
/datum/gear/fannypack
display_name = "a fannypack"
display_name = "Fannypack"
path = /obj/item/storage/belt/fannypack
/datum/gear/blackbandana
display_name = "bandana, black"
display_name = "Bandana, black"
path = /obj/item/clothing/mask/bandana/black
/datum/gear/purplebandana
display_name = "bandana, purple"
display_name = "Bandana, purple"
path = /obj/item/clothing/mask/bandana/purple
/datum/gear/orangebandana
display_name = "bandana, orange"
display_name = "Bandana, orange"
path = /obj/item/clothing/mask/bandana/orange
/datum/gear/greenbandana
display_name = "bandana, green"
display_name = "Bandana, green"
path = /obj/item/clothing/mask/bandana/green
/datum/gear/bluebandana
display_name = "bandana, blue"
display_name = "Bandana, blue"
path = /obj/item/clothing/mask/bandana/blue
/datum/gear/redbandana
display_name = "bandana, red"
display_name = "Bandana, red"
path = /obj/item/clothing/mask/bandana/red
/datum/gear/goldbandana
display_name = "bandana, gold"
display_name = "Bandana, gold"
path = /obj/item/clothing/mask/bandana/gold
/datum/gear/skullbandana
display_name = "bandana, skull"
display_name = "Bandana, skull"
path = /obj/item/clothing/mask/bandana/skull
/datum/gear/mob_hunt_game
@@ -143,54 +156,54 @@
//////////////////////
/datum/gear/mug
display_name = "random coffee mug"
display_name = "Coffee mug, random"
description = "A randomly colored coffee mug. You'll need to supply your own beverage though."
path = /obj/item/reagent_containers/food/drinks/mug
sort_category = "Mugs"
/datum/gear/novelty_mug
display_name = "novelty coffee mug"
display_name = "Coffee mug, novelty"
description = "A random novelty coffee mug. You'll need to supply your own beverage though."
path = /obj/item/reagent_containers/food/drinks/mug/novelty
cost = 2
sort_category = "Mugs"
/datum/gear/mug/flask
display_name = "flask"
display_name = "Flask"
description = "A flask for drink transportation. You'll need to supply your own beverage though."
path = /obj/item/reagent_containers/food/drinks/flask/barflask
/datum/gear/mug/department
subtype_path = /datum/gear/mug/department
main_typepath = /datum/gear/mug/department
sort_category = "Mugs"
subtype_cost_overlap = FALSE
subtype_selection_cost = FALSE
/datum/gear/mug/department/eng
display_name = "engineer coffee mug"
display_name = "Coffee mug, engineering"
description = "An engineer's coffee mug, emblazoned in the colors of the Engineering department."
allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist")
path = /obj/item/reagent_containers/food/drinks/mug/eng
/datum/gear/mug/department/med
display_name = "doctor coffee mug"
display_name = "Coffee mug, medical"
description = "A doctor's coffee mug, emblazoned in the colors of the Medical department."
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Coroner")
path = /obj/item/reagent_containers/food/drinks/mug/med
/datum/gear/mug/department/sci
display_name = "scientist coffee mug"
display_name = "Coffee mug, science"
description = "A scientist's coffee mug, emblazoned in the colors of the Science department."
allowed_roles = list("Research Director", "Scientist", "Roboticist")
path = /obj/item/reagent_containers/food/drinks/mug/sci
/datum/gear/mug/department/sec
display_name = "officer coffee mug"
display_name = "Coffee mug, security"
description = "An officer's coffee mug, emblazoned in the colors of the Security department."
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Brig Physician", "Internal Affairs Agent")
path = /obj/item/reagent_containers/food/drinks/mug/sec
/datum/gear/mug/department/serv
display_name = "crewmember coffee mug"
display_name = "Coffee mug, service"
description = "A crewmember's coffee mug, emblazoned in the colors of the Service department."
path = /obj/item/reagent_containers/food/drinks/mug/serv
@@ -1,10 +1,23 @@
/*
######################################################################################
## ##
## IMPORTANT README ##
## ##
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
## Please inform the server host if you wish to modify any of these. ##
## ##
######################################################################################
*/
/datum/gear/glasses
subtype_path = /datum/gear/glasses
main_typepath = /datum/gear/glasses
slot = slot_glasses
sort_category = "Glasses"
/datum/gear/glasses/sunglasses
display_name = "cheap sunglasses"
display_name = "Cheap sunglasses"
path = /obj/item/clothing/glasses/sunglasses_fake
/datum/gear/glasses/eyepatch
@@ -1,5 +1,18 @@
/*
######################################################################################
## ##
## IMPORTANT README ##
## ##
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
## Please inform the server host if you wish to modify any of these. ##
## ##
######################################################################################
*/
/datum/gear/gloves
subtype_path = /datum/gear/gloves
main_typepath = /datum/gear/gloves
slot = slot_gloves
sort_category = "Gloves"
@@ -1,184 +1,197 @@
/*
######################################################################################
## ##
## IMPORTANT README ##
## ##
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
## Please inform the server host if you wish to modify any of these. ##
## ##
######################################################################################
*/
/datum/gear/hat
subtype_path = /datum/gear/hat
main_typepath = /datum/gear/hat
slot = slot_head
sort_category = "Headwear"
/datum/gear/hat/hhat_yellow
display_name = "hardhat, yellow"
display_name = "Hardhat, yellow"
path = /obj/item/clothing/head/hardhat
allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist")
/datum/gear/hat/hhat_orange
display_name = "hardhat, orange"
display_name = "Hardhat, orange"
path = /obj/item/clothing/head/hardhat/orange
allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist")
/datum/gear/hat/hhat_blue
display_name = "hardhat, blue"
display_name = "Hardhat, blue"
path = /obj/item/clothing/head/hardhat/dblue
allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist")
/datum/gear/hat/that
display_name = "top hat"
display_name = "Top hat"
path = /obj/item/clothing/head/that
/datum/gear/hat/flatcap
display_name = "flat cap"
display_name = "Flat cap"
path = /obj/item/clothing/head/flatcap
/datum/gear/hat/witch
display_name = "witch hat"
display_name = "Witch hat"
path = /obj/item/clothing/head/wizard/marisa/fake
/datum/gear/hat/piratecaphat
display_name = "pirate captian hat"
display_name = "Pirate captian hat"
path = /obj/item/clothing/head/pirate
/datum/gear/hat/fez
display_name = "fez"
display_name = "Fez"
path = /obj/item/clothing/head/fez
/datum/gear/hat/rasta
display_name = "rasta hat"
display_name = "Rasta hat"
path = /obj/item/clothing/head/beanie/rasta
/datum/gear/hat/bfedora
display_name = "fedora, black"
display_name = "Fedora, black"
path = /obj/item/clothing/head/fedora
/datum/gear/hat/wfedora
display_name = "fedora, white"
display_name = "Fedora, white"
path = /obj/item/clothing/head/fedora/whitefedora
/datum/gear/hat/brfedora
display_name = "fedora, brown"
display_name = "Fedora, brown"
path = /obj/item/clothing/head/fedora/brownfedora
/datum/gear/hat/capcsec
display_name = "security corporate cap"
display_name = "Security cap, corporate"
path = /obj/item/clothing/head/soft/sec/corp
allowed_roles = list("Head of Security", "Warden", "Security Officer")
/datum/gear/hat/capsec
display_name = "security cap"
display_name = "Security cap"
path = /obj/item/clothing/head/soft/sec
allowed_roles = list("Head of Security", "Warden", "Security Officer")
/datum/gear/hat/capred
display_name = "cap, red"
display_name = "Cap, red"
path = /obj/item/clothing/head/soft/red
/datum/gear/hat/capblue
display_name = "cap, blue"
display_name = "Cap, blue"
path = /obj/item/clothing/head/soft/blue
/datum/gear/hat/capgreen
display_name = "cap, green"
display_name = "Cap, green"
path = /obj/item/clothing/head/soft/green
/datum/gear/hat/capblack
display_name = "cap, black"
display_name = "Cap, black"
path = /obj/item/clothing/head/soft/black
/datum/gear/hat/cappurple
display_name = "cap, purple"
display_name = "Cap, purple"
path = /obj/item/clothing/head/soft/purple
/datum/gear/hat/capwhite
display_name = "cap, white"
display_name = "Cap, white"
path = /obj/item/clothing/head/soft/mime
/datum/gear/hat/caporange
display_name = "cap, orange"
display_name = "Cap, orange"
path = /obj/item/clothing/head/soft/orange
/datum/gear/hat/capgrey
display_name = "cap, grey"
display_name = "Cap, grey"
path = /obj/item/clothing/head/soft/grey
/datum/gear/hat/capyellow
display_name = "cap, yellow"
display_name = "Cap, yellow"
path = /obj/item/clothing/head/soft/yellow
/datum/gear/hat/cowboyhat
display_name = "cowboy hat, brown"
display_name = "Cowboy hat, brown"
path = /obj/item/clothing/head/cowboyhat
/datum/gear/hat/cowboyhat/tan
display_name = "cowboy hat, tan"
display_name = "Cowboy hat, tan"
path = /obj/item/clothing/head/cowboyhat/tan
/datum/gear/hat/cowboyhat/black
display_name = "cowboy hat, black"
display_name = "Cowboy hat, black"
path = /obj/item/clothing/head/cowboyhat/black
/datum/gear/hat/cowboyhat/white
display_name = "cowboy hat, white"
display_name = "Cowboy hat, white"
path = /obj/item/clothing/head/cowboyhat/white
/datum/gear/hat/cowboyhat/pink
display_name = "cowboy hat, pink"
display_name = "Cowboy hat, pink"
path = /obj/item/clothing/head/cowboyhat/pink
/datum/gear/hat/beret_purple
display_name = "beret, purple"
display_name = "Beret, purple"
path = /obj/item/clothing/head/beret/purple_normal
/datum/gear/hat/beret_black
display_name = "beret, black"
display_name = "Beret, black"
path = /obj/item/clothing/head/beret/black
/datum/gear/hat/beret_blue
display_name = "beret, blue"
display_name = "Beret, blue"
path = /obj/item/clothing/head/beret/blue
/datum/gear/hat/beret_red
display_name = "beret, red"
display_name = "Beret, red"
path = /obj/item/clothing/head/beret
/datum/gear/hat/beret_job
subtype_path = /datum/gear/hat/beret_job
subtype_cost_overlap = FALSE
main_typepath = /datum/gear/hat/beret_job
subtype_selection_cost = FALSE
/datum/gear/hat/beret_job/sec
display_name = "security beret"
display_name = "Beret, security"
path = /obj/item/clothing/head/beret/sec
allowed_roles = list("Head of Security", "Warden", "Security Officer")
/datum/gear/hat/beret_job/sci
display_name = "science beret"
display_name = "Beret, science"
path = /obj/item/clothing/head/beret/sci
allowed_roles = list("Research Director", "Scientist")
/datum/gear/hat/beret_job/med
display_name = "medical beret"
display_name = "Beret, medical"
path = /obj/item/clothing/head/beret/med
allowed_roles = list("Chief Medical Officer", "Medical Doctor" , "Virologist", "Brig Physician" , "Coroner")
/datum/gear/hat/beret_job/eng
display_name = "engineering beret"
display_name = "Beret, engineering"
path = /obj/item/clothing/head/beret/eng
allowed_roles = list("Chief Engineer", "Station Engineer")
/datum/gear/hat/beret_job/atmos
display_name = "atmospherics beret"
display_name = "Beret, atmospherics"
path = /obj/item/clothing/head/beret/atmos
allowed_roles = list("Chief Engineer", "Life Support Specialist")
/datum/gear/hat/surgicalcap_purple
display_name = "surgical cap, purple"
display_name = "Surgical cap, purple"
path = /obj/item/clothing/head/surgery/purple
allowed_roles = list("Chief Medical Officer", "Medical Doctor")
/datum/gear/hat/surgicalcap_green
display_name = "surgical cap, green"
display_name = "Surgical cap, green"
path = /obj/item/clothing/head/surgery/green
allowed_roles = list("Chief Medical Officer", "Medical Doctor")
/datum/gear/hat/flowerpin
display_name = "hair flower"
display_name = "Hair flower"
path = /obj/item/clothing/head/hairflower
/datum/gear/hat/capsolgov
display_name = "cap, Sol Gov"
display_name = "Cap, Sol Gov"
path = /obj/item/clothing/head/soft/solgov
@@ -1,47 +1,60 @@
/*
######################################################################################
## ##
## IMPORTANT README ##
## ##
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
## Please inform the server host if you wish to modify any of these. ##
## ##
######################################################################################
*/
/datum/gear/racial
sort_category = "Racial"
subtype_path = /datum/gear/racial
main_typepath = /datum/gear/racial
cost = 1
/datum/gear/racial/taj
display_name = "embroidered veil"
display_name = "Embroidered veil"
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races."
path = /obj/item/clothing/glasses/tajblind
slot = slot_glasses
/datum/gear/racial/taj/sec
display_name = "sleek veil"
display_name = "Sleek veil"
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races. This one has an in-built security HUD."
path = /obj/item/clothing/glasses/hud/security/tajblind
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Internal Affairs Agent", "Magistrate")
cost = 2
/datum/gear/racial/taj/med
display_name = "lightweight veil"
display_name = "Lightweight veil"
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races. This one has an in-built medical HUD."
path = /obj/item/clothing/glasses/hud/health/tajblind
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Brig Physician" , "Coroner")
cost = 2
/datum/gear/racial/taj/sci
display_name = "hi-tech veil"
display_name = "Hi-tech veil"
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races."
path = /obj/item/clothing/glasses/tajblind/sci
cost = 2
/datum/gear/racial/taj/eng
display_name = "industrial veil"
display_name = "Industrial veil"
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races."
path = /obj/item/clothing/glasses/tajblind/eng
cost = 2
/datum/gear/racial/taj/cargo
display_name = "khaki veil"
display_name = "Khaki veil"
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races. It is light and comfy!"
path = /obj/item/clothing/glasses/tajblind/cargo
cost = 2
/datum/gear/racial/footwraps
display_name = "cloth footwraps"
display_name = "Cloth footwraps"
path = /obj/item/clothing/shoes/footwraps
slot = slot_shoes
@@ -1,54 +1,67 @@
/*
######################################################################################
## ##
## IMPORTANT README ##
## ##
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
## Please inform the server host if you wish to modify any of these. ##
## ##
######################################################################################
*/
/datum/gear/shoes
subtype_path = /datum/gear/shoes
main_typepath = /datum/gear/shoes
slot = slot_shoes
sort_category = "Shoes"
/datum/gear/shoes/sandals
display_name = "sandals, wooden"
display_name = "Sandals, wooden"
path = /obj/item/clothing/shoes/sandal
/datum/gear/shoes/winterboots
display_name = "winter boots"
display_name = "Winter boots"
path = /obj/item/clothing/shoes/winterboots
/datum/gear/shoes/workboots
display_name = "work boots"
display_name = "Work boots"
path = /obj/item/clothing/shoes/workboots
/datum/gear/shoes/fancysandals
display_name = "sandals, fancy"
display_name = "Sandals, fancy"
path = /obj/item/clothing/shoes/sandal/fancy
/datum/gear/shoes/dressshoes
display_name = "dress shoes"
display_name = "Dress shoes"
path = /obj/item/clothing/shoes/centcom
/datum/gear/shoes/cowboyboots
display_name = "cowboy boots, brown"
display_name = "Cowboy boots, brown"
path = /obj/item/clothing/shoes/cowboy
/datum/gear/shoes/cowboyboots_black
display_name = "cowboy boots, black"
display_name = "Cowboy boots, black"
path = /obj/item/clothing/shoes/cowboy/black
/datum/gear/shoes/cowboyboots/white
display_name = "cowboy boots, white"
display_name = "Cowboy boots, white"
path = /obj/item/clothing/shoes/cowboy/white
/datum/gear/shoes/cowboyboots/pink
display_name = "cowboy boots, pink"
display_name = "Cowboy boots, pink"
path = /obj/item/clothing/shoes/cowboy/pink
/datum/gear/shoes/jackboots
display_name = "jackboots"
display_name = "Jackboots"
path = /obj/item/clothing/shoes/jackboots
/datum/gear/shoes/jacksandals
display_name = "jacksandals"
display_name = "Jacksandals"
path = /obj/item/clothing/shoes/jackboots/jacksandals
/datum/gear/shoes/laceup
display_name = "laceup shoes"
display_name = "Laceup shoes"
path = /obj/item/clothing/shoes/laceup
/datum/gear/shoes/blackshoes
@@ -1,115 +1,128 @@
/*
######################################################################################
## ##
## IMPORTANT README ##
## ##
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
## Please inform the server host if you wish to modify any of these. ##
## ##
######################################################################################
*/
/datum/gear/suit
subtype_path = /datum/gear/suit
main_typepath = /datum/gear/suit
slot = slot_wear_suit
sort_category = "External Wear"
//WINTER COATS
/datum/gear/suit/coat
subtype_path = /datum/gear/suit/coat
main_typepath = /datum/gear/suit/coat
/datum/gear/suit/coat/grey
display_name = "winter coat"
display_name = "Winter coat"
path = /obj/item/clothing/suit/hooded/wintercoat
/datum/gear/suit/coat/job
subtype_path = /datum/gear/suit/coat/job
subtype_cost_overlap = FALSE
main_typepath = /datum/gear/suit/coat/job
subtype_selection_cost = FALSE
/datum/gear/suit/coat/job/sec
display_name = "winter coat, security"
display_name = "Winter coat, security"
path = /obj/item/clothing/suit/hooded/wintercoat/security
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
/datum/gear/suit/coat/job/captain
display_name = "winter coat, captain"
display_name = "Winter coat, captain"
path = /obj/item/clothing/suit/hooded/wintercoat/captain
allowed_roles = list("Captain")
/datum/gear/suit/coat/job/med
display_name = "winter coat, medical"
display_name = "Winter coat, medical"
path = /obj/item/clothing/suit/hooded/wintercoat/medical
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Brig Physician" , "Coroner")
/datum/gear/suit/coat/job/sci
display_name = "winter coat, science"
display_name = "Winter coat, science"
path = /obj/item/clothing/suit/hooded/wintercoat/science
allowed_roles = list("Scientist", "Research Director")
/datum/gear/suit/coat/job/engi
display_name = "winter coat, engineering"
display_name = "Winter coat, engineering"
path = /obj/item/clothing/suit/hooded/wintercoat/engineering
allowed_roles = list("Chief Engineer", "Station Engineer")
/datum/gear/suit/coat/job/atmos
display_name = "winter coat, atmospherics"
display_name = "Winter coat, atmospherics"
path = /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos
allowed_roles = list("Chief Engineer", "Life Support Specialist")
/datum/gear/suit/coat/job/hydro
display_name = "winter coat, hydroponics"
display_name = "Winter coat, hydroponics"
path = /obj/item/clothing/suit/hooded/wintercoat/hydro
allowed_roles = list("Botanist")
/datum/gear/suit/coat/job/cargo
display_name = "winter coat, cargo"
display_name = "Winter coat, cargo"
path = /obj/item/clothing/suit/hooded/wintercoat/cargo
allowed_roles = list("Quartermaster", "Cargo Technician")
/datum/gear/suit/coat/job/miner
display_name = "winter coat, miner"
display_name = "Winter coat, mining"
path = /obj/item/clothing/suit/hooded/wintercoat/miner
allowed_roles = list("Shaft Miner")
//LABCOATS
/datum/gear/suit/labcoat_emt
display_name = "labcoat, paramedic"
display_name = "Labcoat, paramedic"
path = /obj/item/clothing/suit/storage/labcoat/emt
allowed_roles = list("Chief Medical Officer", "Paramedic")
//JACKETS
/datum/gear/suit/leather_jacket
display_name = "leather jacket"
display_name = "Leather jacket"
path = /obj/item/clothing/suit/jacket/leather
/datum/gear/suit/motojacket
display_name = "leather motorcycle jacket"
display_name = "Leather motorcycle jacket"
path = /obj/item/clothing/suit/jacket/motojacket
/datum/gear/suit/br_tcoat
display_name = "trenchcoat, brown"
display_name = "Trenchcoat, brown"
path = /obj/item/clothing/suit/browntrenchcoat
/datum/gear/suit/bl_tcoat
display_name = "trenchcoat, black"
display_name = "Trenchcoat, black"
path = /obj/item/clothing/suit/blacktrenchcoat
/datum/gear/suit/bomber_jacket
display_name = "bomber jacket"
display_name = "Bomber jacket"
path = /obj/item/clothing/suit/jacket
/datum/gear/suit/ol_miljacket
display_name = "military jacket, olive"
display_name = "Military jacket, olive"
path = /obj/item/clothing/suit/jacket/miljacket
/datum/gear/suit/nv_miljacket
display_name = "military jacket, navy"
display_name = "Military jacket, navy"
path = /obj/item/clothing/suit/jacket/miljacket/navy
/datum/gear/suit/ds_miljacket
display_name = "military jacket, desert"
display_name = "Military jacket, desert"
path = /obj/item/clothing/suit/jacket/miljacket/desert
/datum/gear/suit/wh_miljacket
display_name = "military jacket, white"
display_name = "Military jacket, white"
path = /obj/item/clothing/suit/jacket/miljacket/white
/datum/gear/suit/secjacket
display_name = "security jacket"
display_name = "Security jacket"
path = /obj/item/clothing/suit/armor/secjacket
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
/datum/gear/suit/secbomberjacket
display_name = "security bomber jacket"
display_name = "Security bomber jacket"
path = /obj/item/clothing/suit/jacket/secbomber
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
@@ -118,110 +131,108 @@
path = /obj/item/clothing/suit/ianshirt
/datum/gear/suit/poncho
display_name = "poncho, classic"
display_name = "Poncho, classic"
path = /obj/item/clothing/suit/poncho
/datum/gear/suit/grponcho
display_name = "poncho, green"
display_name = "Poncho, green"
path = /obj/item/clothing/suit/poncho/green
/datum/gear/suit/rdponcho
display_name = "poncho, red"
display_name = "Poncho, red"
path = /obj/item/clothing/suit/poncho/red
/datum/gear/suit/tphoodie
display_name = "hoodie, Tharsis Polytech"
display_name = "Hoodie, Tharsis Polytech"
path = /obj/item/clothing/suit/hooded/hoodie/tp
/datum/gear/suit/nthoodie
display_name = "hoodie, Nanotrasen"
display_name = "Hoodie, Nanotrasen"
path = /obj/item/clothing/suit/hooded/hoodie/nt
/datum/gear/suit/lamhoodie
display_name = "hoodie, Lunar Academy of Medicine"
display_name = "Hoodie, Lunar Academy of Medicine"
path = /obj/item/clothing/suit/hooded/hoodie/lam
/datum/gear/suit/cuthoodie
display_name = "hoodie, Canaan University of Technology"
display_name = "Hoodie, Canaan University of Technology"
path = /obj/item/clothing/suit/hooded/hoodie/cut
/datum/gear/suit/mithoodie
display_name = "hoodie, Martian Institute of Technology"
display_name = "Hoodie, Martian Institute of Technology"
path = /obj/item/clothing/suit/hooded/hoodie/mit
/datum/gear/suit/bluehoodie
display_name = "hoodie, blue"
display_name = "Hoodie, blue"
path = /obj/item/clothing/suit/hooded/hoodie/blue
/datum/gear/suit/blackhoodie
display_name = "hoodie, black"
display_name = "Hoodie, black"
path = /obj/item/clothing/suit/hooded/hoodie
//SUITS!
/datum/gear/suit/blacksuit
display_name = "suit jacket, black"
display_name = "Suit jacket, black"
path = /obj/item/clothing/suit/storage/lawyer/blackjacket
/datum/gear/suit/bluesuit
display_name = "suit jacket, blue"
display_name = "Suit jacket, blue"
path = /obj/item/clothing/suit/storage/lawyer/bluejacket
/datum/gear/suit/purplesuit
display_name = "suit jacket, purple"
display_name = "Suit jacket, purple"
path = /obj/item/clothing/suit/storage/lawyer/purpjacket
//Mantles!
/datum/gear/suit/mantle
display_name = "mantle"
display_name = "Mantle"
path = /obj/item/clothing/suit/mantle
/datum/gear/suit/old_scarf
display_name = "old scarf"
display_name = "Old scarf"
path = /obj/item/clothing/suit/mantle/old
/datum/gear/suit/regal_shawl
display_name = "regal shawl"
display_name = "Regal shawl"
path = /obj/item/clothing/suit/mantle/regal
/datum/gear/suit/mantle/job
subtype_path = /datum/gear/suit/mantle/job
subtype_cost_overlap = FALSE
main_typepath = /datum/gear/suit/mantle/job
subtype_selection_cost = FALSE
/datum/gear/suit/mantle/job/captain
display_name = "mantle, captain"
display_name = "Mantle, captain"
path = /obj/item/clothing/suit/mantle/armor/captain
allowed_roles = list("Captain")
/datum/gear/suit/mantle/job/ce
display_name = "mantle, chief engineer"
display_name = "Mantle, chief engineer"
path = /obj/item/clothing/suit/mantle/chief_engineer
allowed_roles = list("Chief Engineer")
/datum/gear/suit/mantle/job/cmo
display_name = "mantle, chief medical officer"
display_name = "Mantle, chief medical officer"
path = /obj/item/clothing/suit/mantle/labcoat/chief_medical_officer
allowed_roles = list("Chief Medical Officer")
/datum/gear/suit/mantle/job/hos
display_name = "mantle, head of security"
display_name = "Mantle, head of security"
path = /obj/item/clothing/suit/mantle/armor
allowed_roles = list("Head of Security")
/datum/gear/suit/mantle/job/hop
display_name = "mantle, head of personnel"
display_name = "Mantle, head of personnel"
path = /obj/item/clothing/suit/mantle/armor/head_of_personnel
allowed_roles = list("Head of Personnel")
/datum/gear/suit/mantle/job/rd
display_name = "mantle, research director"
display_name = "Mantle, research director"
path = /obj/item/clothing/suit/mantle/labcoat
allowed_roles = list("Research Director")
//Robes!
/datum/gear/suit/witch
display_name = "witch robes"
display_name = "Witch robes"
path = /obj/item/clothing/suit/wizrobe/marisa/fake
@@ -1,96 +1,105 @@
/*
######################################################################################
## ##
## IMPORTANT README ##
## ##
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
## Please inform the server host if you wish to modify any of these. ##
## ##
######################################################################################
*/
// Uniform slot
/datum/gear/uniform
subtype_path = /datum/gear/uniform
main_typepath = /datum/gear/uniform
slot = slot_w_uniform
sort_category = "Uniforms and Casual Dress"
/datum/gear/uniform/suit
subtype_path = /datum/gear/uniform/suit
main_typepath = /datum/gear/uniform/suit
//there's a lot more colors than I thought there were @_@
/datum/gear/uniform/suit/jumpsuitblack
display_name = "jumpsuit, black"
display_name = "Jumpsuit, black"
path = /obj/item/clothing/under/color/black
/datum/gear/uniform/suit/jumpsuitblue
display_name = "jumpsuit, blue"
display_name = "Jumpsuit, blue"
path = /obj/item/clothing/under/color/blue
/datum/gear/uniform/suit/jumpsuitgreen
display_name = "jumpsuit, green"
display_name = "Jumpsuit, green"
path = /obj/item/clothing/under/color/green
/datum/gear/uniform/suit/jumpsuitgrey
display_name = "jumpsuit, grey"
display_name = "Jumpsuit, grey"
path = /obj/item/clothing/under/color/grey
/datum/gear/uniform/suit/jumpsuitorange
display_name = "jumpsuit, orange"
display_name = "Jumpsuit, orange"
path = /obj/item/clothing/under/color/orange
/datum/gear/uniform/suit/jumpsuitpink
display_name = "jumpsuit, pink"
display_name = "Jumpsuit, pink"
path = /obj/item/clothing/under/color/pink
/datum/gear/uniform/suit/jumpsuitred
display_name = "jumpsuit, red"
display_name = "Jumpsuit, red"
path = /obj/item/clothing/under/color/red
/datum/gear/uniform/suit/jumpsuitwhite
display_name = "jumpsuit, white"
display_name = "Jumpsuit, white"
path = /obj/item/clothing/under/color/white
/datum/gear/uniform/suit/jumpsuityellow
display_name = "jumpsuit, yellow"
display_name = "Jumpsuit, yellow"
path = /obj/item/clothing/under/color/yellow
/datum/gear/uniform/suit/jumpsuitlightblue
display_name = "jumpsuit, lightblue"
display_name = "Jumpsuit, lightblue"
path = /obj/item/clothing/under/color/lightblue
/datum/gear/uniform/suit/jumpsuitaqua
display_name = "jumpsuit, aqua"
display_name = "Jumpsuit, aqua"
path = /obj/item/clothing/under/color/aqua
/datum/gear/uniform/suit/jumpsuitpurple
display_name = "jumpsuit, purple"
display_name = "Jumpsuit, purple"
path = /obj/item/clothing/under/color/purple
/datum/gear/uniform/suit/jumpsuitlightpurple
display_name = "jumpsuit, lightpurple"
display_name = "Jumpsuit, lightpurple"
path = /obj/item/clothing/under/color/lightpurple
/datum/gear/uniform/suit/jumpsuitlightgreen
display_name = "jumpsuit, lightgreen"
display_name = "Jumpsuit, lightgreen"
path = /obj/item/clothing/under/color/lightgreen
/datum/gear/uniform/suit/jumpsuitlightblue
display_name = "jumpsuit, lightblue"
path = /obj/item/clothing/under/color/lightblue
/datum/gear/uniform/suit/jumpsuitlightbrown
display_name = "jumpsuit, lightbrown"
display_name = "Jumpsuit, lightbrown"
path = /obj/item/clothing/under/color/lightbrown
/datum/gear/uniform/suit/jumpsuitbrown
display_name = "jumpsuit, brown"
display_name = "Jumpsuit, brown"
path = /obj/item/clothing/under/color/brown
/datum/gear/uniform/suit/jumpsuityellowgreen
display_name = "jumpsuit, yellowgreen"
display_name = "Jumpsuit, yellowgreen"
path = /obj/item/clothing/under/color/yellowgreen
/datum/gear/uniform/suit/jumpsuitdarkblue
display_name = "jumpsuit, darkblue"
display_name = "Jumpsuit, darkblue"
path = /obj/item/clothing/under/color/darkblue
/datum/gear/uniform/suit/jumpsuitlightred
display_name = "jumpsuit, lightred"
display_name = "Jumpsuit, lightred"
path = /obj/item/clothing/under/color/lightred
/datum/gear/uniform/suit/jumpsuitdarkred
display_name = "jumpsuit, darkred"
display_name = "Jumpsuit, darkred"
path = /obj/item/clothing/under/color/darkred
/datum/gear/uniform/suit/soviet
@@ -98,229 +107,229 @@
path = /obj/item/clothing/under/soviet
/datum/gear/uniform/suit/kilt
display_name = "a kilt"
display_name = "Kilt"
path = /obj/item/clothing/under/kilt
/datum/gear/uniform/skirt
subtype_path = /datum/gear/uniform/skirt
main_typepath = /datum/gear/uniform/skirt
/datum/gear/uniform/skirt/blue
display_name = "plaid skirt, blue"
display_name = "Plaid skirt, blue"
path = /obj/item/clothing/under/dress/plaid_blue
/datum/gear/uniform/skirt/purple
display_name = "plaid skirt, purple"
display_name = "Plaid skirt, purple"
path = /obj/item/clothing/under/dress/plaid_purple
/datum/gear/uniform/skirt/red
display_name = "plaid skirt, red"
display_name = "Plaid skirt, red"
path = /obj/item/clothing/under/dress/plaid_red
/datum/gear/uniform/skirt/black
display_name = "skirt, black"
display_name = "Skirt, black"
path = /obj/item/clothing/under/blackskirt
/datum/gear/uniform/skirt/job
subtype_path = /datum/gear/uniform/skirt/job
subtype_cost_overlap = FALSE
main_typepath = /datum/gear/uniform/skirt/job
subtype_selection_cost = FALSE
/datum/gear/uniform/skirt/job/ce
display_name = "skirt, ce"
display_name = "Skirt, ce"
path = /obj/item/clothing/under/rank/chief_engineer/skirt
allowed_roles = list("Chief Engineer")
/datum/gear/uniform/skirt/job/atmos
display_name = "skirt, atmos"
display_name = "Skirt, atmos"
path = /obj/item/clothing/under/rank/atmospheric_technician/skirt
allowed_roles = list("Chief Engineer","Life Support Specialist")
/datum/gear/uniform/skirt/job/eng
display_name = "skirt, engineer"
display_name = "Skirt, engineer"
path = /obj/item/clothing/under/rank/engineer/skirt
allowed_roles = list("Chief Engineer","Station Engineer")
/datum/gear/uniform/skirt/job/roboticist
display_name = "skirt, roboticist"
display_name = "Skirt, roboticist"
path = /obj/item/clothing/under/rank/roboticist/skirt
allowed_roles = list("Research Director","Roboticist")
/datum/gear/uniform/skirt/job/cmo
display_name = "skirt, cmo"
display_name = "Skirt, cmo"
path = /obj/item/clothing/under/rank/chief_medical_officer/skirt
allowed_roles = list("Chief Medical Officer")
/datum/gear/uniform/skirt/job/chem
display_name = "skirt, chemist"
display_name = "Skirt, chemist"
path = /obj/item/clothing/under/rank/chemist/skirt
allowed_roles = list("Chief Medical Officer","Chemist")
/datum/gear/uniform/skirt/job/viro
display_name = "skirt, virologist"
display_name = "Skirt, virologist"
path = /obj/item/clothing/under/rank/virologist/skirt
allowed_roles = list("Virologist")
/datum/gear/uniform/skirt/job/med
display_name = "skirt, medical"
display_name = "Skirt, medical"
path = /obj/item/clothing/under/rank/medical/skirt
allowed_roles = list("Chief Medical Officer","Medical Doctor","Psychiatrist","Paramedic","Coroner")
/datum/gear/uniform/skirt/job/phys
display_name = "skirt, physician"
display_name = "Skirt, physician"
path = /obj/item/clothing/under/rank/security/brigphys/skirt
allowed_roles = list("Brig Physician")
/datum/gear/uniform/skirt/job/sci
display_name = "skirt, scientist"
display_name = "Skirt, scientist"
path = /obj/item/clothing/under/rank/scientist/skirt
allowed_roles = list("Research Director","Scientist")
/datum/gear/uniform/skirt/job/cargo
display_name = "skirt, cargo"
display_name = "Skirt, cargo"
path = /obj/item/clothing/under/rank/cargotech/skirt
allowed_roles = list("Quartermaster","Cargo Technician")
/datum/gear/uniform/skirt/job/qm
display_name = "skirt, QM"
display_name = "Skirt, QM"
path = /obj/item/clothing/under/rank/cargo/skirt
allowed_roles = list("Quartermaster")
/datum/gear/uniform/skirt/job/warden
display_name = "skirt, warden"
display_name = "Skirt, warden"
path = /obj/item/clothing/under/rank/warden/skirt
allowed_roles = list("Head of Security", "Warden")
/datum/gear/uniform/skirt/job/security
display_name = "skirt, security"
display_name = "Skirt, security"
path = /obj/item/clothing/under/rank/security/skirt
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
/datum/gear/uniform/skirt/job/head_of_security
display_name = "skirt, hos"
display_name = "Skirt, hos"
path = /obj/item/clothing/under/rank/head_of_security/skirt
allowed_roles = list("Head of Security")
/datum/gear/uniform/skirt/job/ntrep
display_name = "skirt, nt rep"
display_name = "Skirt, nt rep"
path = /obj/item/clothing/under/rank/ntrep/skirt
allowed_roles = list("Nanotrasen Representative")
/datum/gear/uniform/skirt/job/blueshield
display_name = "skirt, blueshield"
display_name = "Skirt, blueshield"
path = /obj/item/clothing/under/rank/blueshield/skirt
allowed_roles = list("Blueshield")
/datum/gear/uniform/medical
subtype_path = /datum/gear/uniform/medical
main_typepath = /datum/gear/uniform/medical
/datum/gear/uniform/medical/pscrubs
display_name = "medical scrubs, purple"
display_name = "Medical scrubs, purple"
path = /obj/item/clothing/under/rank/medical/purple
allowed_roles = list("Chief Medical Officer", "Medical Doctor")
/datum/gear/uniform/medical/gscrubs
display_name = "medical scrubs, green"
display_name = "Medical scrubs, green"
path = /obj/item/clothing/under/rank/medical/green
allowed_roles = list("Chief Medical Officer", "Medical Doctor")
/datum/gear/uniform/sec
subtype_path = /datum/gear/uniform/sec
main_typepath = /datum/gear/uniform/sec
/datum/gear/uniform/sec/formal
display_name = "security uniform, formal"
display_name = "Security uniform, formal"
path = /obj/item/clothing/under/rank/security/formal
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
/datum/gear/uniform/sec/secorporate
display_name = "security uniform, corporate"
display_name = "Security uniform, corporate"
path = /obj/item/clothing/under/rank/security/corp
allowed_roles = list("Head of Security", "Warden", "Security Officer")
/datum/gear/uniform/sec/dispatch
display_name = "security uniform, dispatch"
display_name = "Security uniform, dispatch"
path = /obj/item/clothing/under/rank/dispatch
allowed_roles = list("Head of Security", "Warden", "Security Officer")
/datum/gear/uniform/sec/casual
display_name = "security uniform, casual"
display_name = "Security uniform, casual"
path = /obj/item/clothing/under/rank/security2
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Detective")
/datum/gear/uniform/shorts
subtype_path = /datum/gear/uniform/shorts
main_typepath = /datum/gear/uniform/shorts
/datum/gear/uniform/shorts/red
display_name = "shorts, red"
display_name = "Shorts, red"
path = /obj/item/clothing/under/shorts/red
/datum/gear/uniform/shorts/green
display_name = "shorts, green"
display_name = "Shorts, green"
path = /obj/item/clothing/under/shorts/green
/datum/gear/uniform/shorts/blue
display_name = "shorts, blue"
display_name = "Shorts, blue"
path = /obj/item/clothing/under/shorts/blue
/datum/gear/uniform/shorts/black
display_name = "shorts, black"
display_name = "Shorts, black"
path = /obj/item/clothing/under/shorts/black
/datum/gear/uniform/shorts/grey
display_name = "shorts, grey"
display_name = "Shorts, grey"
path = /obj/item/clothing/under/shorts/grey
/datum/gear/uniform/pants
subtype_path = /datum/gear/uniform/pants
main_typepath = /datum/gear/uniform/pants
/datum/gear/uniform/pants/jeans
display_name = "jeans, classic"
display_name = "Jeans, classic"
path = /obj/item/clothing/under/pants/classicjeans
/datum/gear/uniform/pants/mjeans
display_name = "jeans, mustang"
display_name = "Jeans, mustang"
path = /obj/item/clothing/under/pants/mustangjeans
/datum/gear/uniform/pants/bljeans
display_name = "jeans, black"
display_name = "Jeans, black"
path = /obj/item/clothing/under/pants/blackjeans
/datum/gear/uniform/pants/yfjeans
display_name = "jeans, Young Folks"
display_name = "Jeans, Young Folks"
path = /obj/item/clothing/under/pants/youngfolksjeans
/datum/gear/uniform/pants/whitepants
display_name = "pants, white"
display_name = "Pants, white"
path = /obj/item/clothing/under/pants/white
/datum/gear/uniform/pants/redpants
display_name = "pants, red"
display_name = "Pants, red"
path = /obj/item/clothing/under/pants/red
/datum/gear/uniform/pants/blackpants
display_name = "pants, black"
display_name = "Pants, black"
path = /obj/item/clothing/under/pants/black
/datum/gear/uniform/pants/tanpants
display_name = "pants, tan"
display_name = "Pants, tan"
path = /obj/item/clothing/under/pants/tan
/datum/gear/uniform/pants/bluepants
display_name = "pants, blue"
display_name = "Pants, blue"
path = /obj/item/clothing/under/pants/blue
/datum/gear/uniform/pants/trackpants
display_name = "trackpants"
display_name = "Trackpants"
path = /obj/item/clothing/under/pants/track
/datum/gear/uniform/pants/khakipants
display_name = "pants, khaki"
display_name = "Pants, khaki"
path = /obj/item/clothing/under/pants/khaki
/datum/gear/uniform/pants/caopants
display_name = "pants, camo"
display_name = "Pants, camo"
path = /obj/item/clothing/under/pants/camo
/datum/gear/uniform/suit/tacticool
display_name = "tacticool turtleneck"
display_name = "Tacticool turtleneck"
description = "A sleek black turtleneck paired with some khakis (WARNING DOES NOT HAVE SUIT SENSORS)"
path = /obj/item/clothing/under/syndicate/tacticool
+41 -15
View File
@@ -413,19 +413,9 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
dat += "</td></tr></table>"
if(TAB_GEAR)
var/total_cost = 0
var/list/type_blacklist = list()
if(length(active_character.loadout_gear))
for(var/i in 1 to length(active_character.loadout_gear))
var/datum/gear/G = GLOB.gear_datums[active_character.loadout_gear[i]]
if(G)
if(!G.subtype_cost_overlap)
if(G.subtype_path in type_blacklist)
continue
type_blacklist += G.subtype_path
total_cost += G.cost
var/total_cost = build_loadout()
var/fcolor = "#3366CC"
var/fcolor = "#3366CC"
if(total_cost < max_gear_slots)
fcolor = "#E67300"
dat += "<table align='center' width='100%'>"
@@ -450,11 +440,11 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
dat += "<tr><td colspan=4><hr></td></tr>"
for(var/gear_name in LC.gear)
var/datum/gear/G = LC.gear[gear_name]
var/ticked = (G.display_name in active_character.loadout_gear)
var/ticked = (G.type in active_character.loadout_gear)
if(G.donator_tier > user.client.donator_level)
dat += "<tr style='vertical-align:top;'><td width=15%><B>[G.display_name]</B></td>"
else
dat += "<tr style='vertical-align:top;'><td width=15%><a style='white-space:normal;' [ticked ? "class='linkOn' " : ""]href='?_src_=prefs;preference=gear;toggle_gear=[G.display_name]'>[G.display_name]</a></td>"
dat += "<tr style='vertical-align:top;'><td width=15%><a style='white-space:normal;' [ticked ? "class='linkOn' " : ""]href='?_src_=prefs;preference=gear;toggle_gear=[G.type]'>[G.display_name]</a></td>"
dat += "<td width = 5% style='vertical-align:top'>[G.cost]</td><td>"
if(G.allowed_roles)
dat += "<font size=2>Restrictions: "
@@ -465,7 +455,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
if(ticked)
. += "<tr><td colspan=4>"
for(var/datum/gear_tweak/tweak in G.gear_tweaks)
. += " <a href='?_src_=prefs;preference=gear;gear=[G.display_name];tweak=\ref[tweak]'>[tweak.get_contents(active_character.get_tweak_metadata(G, tweak))]</a>"
. += " <a href='?_src_=prefs;preference=gear;gear=[G.type];tweak=\ref[tweak]'>[tweak.get_contents(active_character.get_tweak_metadata(G, tweak))]</a>"
. += "</td></tr>"
dat += "</table>"
@@ -562,3 +552,39 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
active_character.SetChoices(user)
return 1
/**
* Rebuilds the `loadout_gear` list of the [active_character], and returns the total end cost.
*
* Caches and cuts the existing [/datum/character_save/var/loadout_gear] list and remakes it, checking the `subtype_selection_cost` and overall cost validity of each item.
*
* If the item's [/datum/gear/var/subtype_selection_cost] is `FALSE`, any future items with the same [/datum/gear/var/main_typepath] will have their cost skipped.
* If adding the item will take the total cost over the maximum, it won't be added to the list.
*
* Arguments:
* * new_item - A new [/datum/gear] item to be added to the `loadout_gear` list.
*/
/datum/preferences/proc/build_loadout(datum/gear/new_item)
var/total_cost = 0
var/list/type_blacklist = list()
var/list/loadout_cache = active_character.loadout_gear.Copy()
active_character.loadout_gear.Cut()
if(new_item)
loadout_cache += new_item.type
for(var/I in loadout_cache)
var/datum/gear/G = GLOB.gear_datums[text2path(I) || I]
if(!G)
continue
var/added_cost = G.cost
if(!G.subtype_selection_cost) // If listings of the same subtype shouldn't have their cost added.
if(G.main_typepath in type_blacklist)
added_cost = 0
else
type_blacklist += G.main_typepath
if((total_cost + added_cost) > max_gear_slots)
continue // If the final cost is too high, don't add the item.
active_character.loadout_gear += G.type
total_cost += added_cost
return total_cost