diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm
index 824f5b3e61..211f47d59b 100644
--- a/code/__DEFINES/colors.dm
+++ b/code/__DEFINES/colors.dm
@@ -2,27 +2,27 @@
#define COLOR_INPUT_DISABLED "#F0F0F0"
#define COLOR_INPUT_ENABLED "#D3B5B5"
-
-//#define COLOR_WHITE "#EEEEEE"
-//#define COLOR_SILVER "#C0C0C0"
-//#define COLOR_GRAY "#808080"
+//CITADEL EDIT - why the fuck are colors commented out???
+#define COLOR_WHITE "#EEEEEE"
+#define COLOR_SILVER "#C0C0C0"
+#define COLOR_GRAY "#808080"
#define COLOR_FLOORTILE_GRAY "#8D8B8B"
#define COLOR_ALMOST_BLACK "#333333"
-//#define COLOR_BLACK "#000000"
+#define COLOR_BLACK "#000000"
#define COLOR_RED "#FF0000"
-//#define COLOR_RED_LIGHT "#FF3333"
-//#define COLOR_MAROON "#800000"
+#define COLOR_RED_LIGHT "#FF3333"
+#define COLOR_MAROON "#800000"
#define COLOR_YELLOW "#FFFF00"
-//#define COLOR_OLIVE "#808000"
-//#define COLOR_LIME "#32CD32"
+#define COLOR_OLIVE "#808000"
+#define COLOR_LIME "#32CD32"
#define COLOR_GREEN "#008000"
#define COLOR_CYAN "#00FFFF"
-//#define COLOR_TEAL "#008080"
+#define COLOR_TEAL "#008080"
#define COLOR_BLUE "#0000FF"
-//#define COLOR_BLUE_LIGHT "#33CCFF"
-//#define COLOR_NAVY "#000080"
+#define COLOR_BLUE_LIGHT "#33CCFF"
+#define COLOR_NAVY "#000080"
#define COLOR_PINK "#FFC0CB"
-//#define COLOR_MAGENTA "#FF00FF"
+#define COLOR_MAGENTA "#FF00FF"
#define COLOR_PURPLE "#800080"
#define COLOR_ORANGE "#FF9900"
#define COLOR_BEIGE "#CEB689"
diff --git a/code/__HELPERS/text_vr.dm b/code/__HELPERS/text_vr.dm
index 846cb1b26a..52d43a6501 100644
--- a/code/__HELPERS/text_vr.dm
+++ b/code/__HELPERS/text_vr.dm
@@ -24,4 +24,26 @@ GLOBAL_LIST_EMPTY(whitelisted_species_list)
/proc/log_mentor(text)
GLOB.mentorlog.Add(text)
- GLOB.world_game_log << "\[[time_stamp()]]MENTOR: [text]"
\ No newline at end of file
+ GLOB.world_game_log << "\[[time_stamp()]]MENTOR: [text]"
+
+
+//Mergesort: any value in a list, preserves key=value structure
+/proc/sortAssoc(var/list/L)
+ if(L.len < 2)
+ return L
+ var/middle = L.len / 2 + 1 // Copy is first,second-1
+ return mergeAssoc(sortAssoc(L.Copy(0,middle)), sortAssoc(L.Copy(middle))) //second parameter null = to end of list
+
+/proc/mergeAssoc(var/list/L, var/list/R)
+ var/Li=1
+ var/Ri=1
+ var/list/result = new()
+ while(Li <= L.len && Ri <= R.len)
+ if(sorttext(L[Li], R[Ri]) < 1)
+ result += R&R[Ri++]
+ else
+ result += L&L[Li++]
+
+ if(Li <= L.len)
+ return (result + L.Copy(Li, 0))
+ return (result + R.Copy(Ri, 0))
\ No newline at end of file
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 0b21646a4b..5fe17f566f 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -127,6 +127,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/action_buttons_screen_locs = list()
+ //CITADEL GEAR SLOT DATA
+ //Gear stuff
+ var/list/gear = list()
+ var/gear_tab = "General"
+ var/max_gear_slots = 10
+ var/list/gear_categories
+ var/list/chosen_gear
+
/datum/preferences/New(client/C)
parent = C
custom_names["human"] = random_unique_name()
@@ -515,7 +523,66 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Be [capitalize(i)]: [(i in be_special) ? "Yes" : "No"]
"
dat += citadel_pref_replace(current_tab)
dat += ""
+ //CITDEL EDIT - GEAR THINGS, fuck trying to get this working modularlly ******************************
+ if(current_tab == 3)
+ var/total_cost = 0
+ var/list/type_blacklist = list()
+ if(gear && gear.len)
+ for(var/i = 1, i <= gear.len, i++)
+ var/datum/gear/G = GLOB.loadout_items[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/fcolor = "#3366CC"
+ if(total_cost < max_gear_slots)
+ fcolor = "#E67300"
+ dat += "
"
+ dat += "| [total_cost]/[max_gear_slots] loadout points spent. \[Clear Loadout\] |
"
+ dat += "| "
+
+ var/firstcat = 1
+ for(var/category in GLOB.loadout_items)
+ var/datum/loadout_catagories/LC = GLOB.loadout_items[category]
+ var/datum/gear/gear = GLOB.loadout_items
+ if(LC.donor_only)
+ if(gear.ckeywhitelist && gear.ckeywhitelist.len)
+ if(user && user.client && user.client.ckey && !(gear.ckeywhitelist.Find(user.client.ckey)))
+ continue
+ if(firstcat)
+ firstcat = 0
+ else
+ dat += " |"
+ if(category == gear_tab)
+ dat += " [category] "
+ else
+ dat += " [category] "
+ dat += " |
"
+
+ var/datum/loadout_catagories/LC = GLOB.loadout_catagories[gear_tab]
+ dat += "
|
"
+ dat += "| [LC.catagory] |
"
+ dat += "
|
"
+ for(var/gear_name in LC.gear)
+ var/datum/gear/G = LC.gear[gear_name]
+ var/ticked = (G.name in gear)
+ dat += "| [G.name] | "
+ dat += "[G.cost] | "
+ if(G.restricted_roles)
+ dat += "Restrictions: "
+ for(var/role in G.restricted_roles)
+ dat += role + " "
+ dat += ""
+ dat += " | [G.description] |
"
+ if(ticked)
+ . += "| "
+ for(var/datum/gear_tweak/tweak in G.gear_tweaks)
+ . += " [tweak.get_contents(get_tweak_metadata(G, tweak))]"
+ . += " |
"
+ dat += "
"
else
dat = citadel_dat_replace(current_tab)
@@ -533,6 +600,25 @@ GLOBAL_LIST_EMPTY(preferences_datums)
popup.set_content(dat)
popup.open(0)
+//CITADEL GEAR STUFF
+/datum/preferences/proc/get_gear_metadata(var/datum/gear/G)
+ . = gear[G.name]
+ if(!.)
+ . = list()
+ gear[G.name] = .
+
+/datum/preferences/proc/get_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak)
+ var/list/metadata = get_gear_metadata(G)
+ . = metadata["[tweak]"]
+ if(!.)
+ . = tweak.get_default()
+ metadata["[tweak]"] = .
+
+/datum/preferences/proc/set_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak, var/new_metadata)
+ var/list/metadata = get_gear_metadata(G)
+ metadata["[tweak]"] = new_metadata
+//END CITADEL GEAR STUFF
+
/datum/preferences/proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Chief Engineer"), widthPerColumn = 295, height = 620)
if(!SSjob)
return
@@ -1423,6 +1509,41 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("tab")
if (href_list["tab"])
current_tab = text2num(href_list["tab"])
+
+ if(href_list["toggle_gear"])
+ var/datum/gear/TG = GLOB.loadout_items[href_list["toggle_gear"]]
+ if(TG.name in TG)
+ TG -= TG.name
+ else
+ if(TG.donor_only)
+ if(TG.ckeywhitelist && TG.ckeywhitelist.len)
+ if(user && user.client && user.client.ckey && !(TG.ckeywhitelist.Find(user.client.ckey)))
+ return
+ var/total_cost = 0
+ var/list/type_blacklist = list()
+ for(var/gear_name in TG)
+ var/datum/gear/G = GLOB.loadout_items[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
+ if((total_cost + TG.cost) <= max_gear_slots)
+ gear += TG.name
+ else if(href_list["gear"] && href_list["tweak"])
+ var/datum/gear/gear = GLOB.loadout_items[href_list["gear"]]
+ var/datum/gear_tweak/tweak = locate(href_list["tweak"])
+ if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks))
+ return
+ var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak))
+ if(!metadata)
+ return
+ set_tweak_metadata(gear, tweak, metadata)
+ else if(href_list["select_category"])
+ gear_tab = href_list["select_category"]
+ else if(href_list["clear_loadout"])
+ gear.Cut()
process_citadel_prefs(user, href_list)
process_citadel_link(user, href_list)
ShowChoices(user)
diff --git a/modular_citadel/code/modules/client/loadout/_medical.dm b/modular_citadel/code/modules/client/loadout/_medical.dm
deleted file mode 100644
index e8c8ea453d..0000000000
--- a/modular_citadel/code/modules/client/loadout/_medical.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/datum/gear/stethoscope
- name = "Stethoscope"
- category = slot_neck
- path = /obj/item/clothing/neck/stethoscope
- restricted_roles = list("Medical Doctor", "Chief Medical Officer")
diff --git a/modular_citadel/code/modules/client/loadout/_security.dm b/modular_citadel/code/modules/client/loadout/_security.dm
deleted file mode 100644
index 304e99f311..0000000000
--- a/modular_citadel/code/modules/client/loadout/_security.dm
+++ /dev/null
@@ -1,71 +0,0 @@
-/datum/gear/navyblueuniformhos
- name = "Head of Security navyblue uniform"
- category = slot_w_uniform
- path = /obj/item/clothing/under/rank/head_of_security/navyblue
- restricted_roles = list("Head of Security")
-
-/datum/gear/navybluehosberet
- name = "Head of security's Naviblue beret"
- category = slot_head
- path = /obj/item/clothing/head/beret/sec/navyhos
- restricted_roles = list("Head of Security")
-
-/datum/gear/navybluejackethos
- name = "head of security's navyblue jacket"
- category = slot_wear_suit
- path = /obj/item/clothing/suit/security/hos
- restricted_roles = list("Head of Security")
-
-/datum/gear/navybluejacketofficer
- name = "security officer's navyblue jacket"
- category = slot_wear_suit
- path = /obj/item/clothing/suit/security/officer
- restricted_roles = list("Security Officer")
-
-/datum/gear/navyblueofficerberet
- name = "Security officer's Navyblue beret"
- category = slot_head
- path = /obj/item/clothing/head/beret/sec/navyofficer
- restricted_roles = list("Security Officer")
-
-/datum/gear/navyblueuniformofficer
- name = "security officer navyblue uniform"
- category = slot_w_uniform
- path = /obj/item/clothing/under/rank/security/navyblue
- restricted_roles = list("Security officer")
-
-/datum/gear/navybluejacketwarden
- name = "warden navyblue jacket"
- category = slot_wear_suit
- path = /obj/item/clothing/suit/security/warden
- restricted_roles = list("Warden")
-
-/datum/gear/navybluewardenberet
- name = "Warden's navyblue beret"
- category = slot_head
- path = /obj/item/clothing/head/beret/sec/navywarden
- restricted_roles = list("Warden")
-
-/datum/gear/navyblueuniformwarden
- name = "Warden navyblue uniform"
- category = slot_w_uniform
- path = /obj/item/clothing/under/rank/warden/navyblue
- restricted_roles = list("Warden")
-
-/datum/gear/secskirt
- name = "Security skirt"
- category = slot_w_uniform
- path = /obj/item/clothing/under/rank/security/skirt
- restricted_roles = list("Security Officer", "Warden", "Head of Security")
-
-/datum/gear/hosskirt
- name = "Head of security's skirt"
- category = slot_w_uniform
- path = /obj/item/clothing/under/rank/head_of_security/skirt
- restricted_roles = list("Head of Security")
-
-/datum/gear/sechud
- name = "Security Hud"
- category = slot_glasses
- path = /obj/item/clothing/glasses/hud/security
- restricted_roles = list("Security Officer", "Warden", "Head of Security")
\ No newline at end of file
diff --git a/modular_citadel/code/modules/client/loadout/_service.dm b/modular_citadel/code/modules/client/loadout/_service.dm
deleted file mode 100644
index 56345e9185..0000000000
--- a/modular_citadel/code/modules/client/loadout/_service.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/datum/gear/plushvar
- name = "Ratvar Plushie"
- category = slot_in_backpack
- path = /obj/item/toy/plush/plushvar
- cost = 5
- restricted_roles = list("Chaplain")
-
-/datum/gear/narplush
- name = "Narsie Plushie"
- category = slot_in_backpack
- path = /obj/item/toy/plush/narplush
- cost = 5
- restricted_roles = list("Chaplain")
\ No newline at end of file
diff --git a/modular_citadel/code/modules/client/loadout/backpack.dm b/modular_citadel/code/modules/client/loadout/backpack.dm
deleted file mode 100644
index 2779d6f124..0000000000
--- a/modular_citadel/code/modules/client/loadout/backpack.dm
+++ /dev/null
@@ -1,24 +0,0 @@
-/datum/gear/plushcarp
- name = "Space carp plushie"
- category = slot_in_backpack
- path = /obj/item/toy/plush/carpplushie
-
-/datum/gear/plushliz
- name = "Lizard plushie"
- category = slot_in_backpack
- path = /obj/item/toy/plush/lizardplushie
-
-/datum/gear/plushsnek
- name = "Snake plushie"
- category = slot_in_backpack
- path = /obj/item/toy/plush/snakeplushie
-
-/datum/gear/plushslime
- name = "Slime plushie"
- category = slot_in_backpack
- path = /obj/item/toy/plush/slimeplushie
-
-/datum/gear/dildo
- name = "Customizable dildo"
- category = slot_in_backpack
- path = /obj/item/dildo/custom
diff --git a/modular_citadel/code/modules/client/loadout/gear_tweaks.dm b/modular_citadel/code/modules/client/loadout/gear_tweaks.dm
new file mode 100644
index 0000000000..31ffcbf29c
--- /dev/null
+++ b/modular_citadel/code/modules/client/loadout/gear_tweaks.dm
@@ -0,0 +1,113 @@
+/datum/gear_tweak/proc/get_contents(var/metadata)
+ return
+
+/datum/gear_tweak/proc/get_metadata(var/user, var/metadata)
+ return
+
+/datum/gear_tweak/proc/get_default()
+ return
+
+/datum/gear_tweak/proc/tweak_gear_data(var/metadata, var/datum/gear_data)
+ return
+
+/datum/gear_tweak/proc/tweak_item(var/obj/item/I, var/metadata)
+ return
+
+/*
+* Color adjustment
+*/
+
+var/datum/gear_tweak/color/gear_tweak_free_color_choice = new()
+
+/datum/gear_tweak/color
+ var/list/valid_colors
+
+/datum/gear_tweak/color/New(var/list/colors)
+ valid_colors = colors
+ ..()
+
+/datum/gear_tweak/color/get_contents(var/metadata)
+ return "Color: ⚫"
+
+/datum/gear_tweak/color/get_default()
+ return valid_colors ? valid_colors[1] : COLOR_GRAY
+
+/datum/gear_tweak/color/get_metadata(var/user, var/metadata)
+ if(valid_colors)
+ return input(user, "Choose an item color.", "Character Preference", metadata) as null|anything in valid_colors
+ return input(user, "Choose an item color.", "Global Preference", metadata) as color|null
+
+/datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata)
+ if(valid_colors && !(metadata in valid_colors))
+ return
+ I.color = metadata
+
+/*
+* Path adjustment
+*/
+
+/datum/gear_tweak/path
+ var/list/valid_paths
+
+/datum/gear_tweak/path/New(var/list/paths)
+ valid_paths = paths
+ ..()
+
+/datum/gear_tweak/path/get_contents(var/metadata)
+ return "Type: [metadata]"
+
+/datum/gear_tweak/path/get_default()
+ return valid_paths[1]
+
+/datum/gear_tweak/path/get_metadata(var/user, var/metadata)
+ return input(user, "Choose a type.", "Character Preference", metadata) as null|anything in valid_paths
+
+/datum/gear_tweak/path/tweak_gear_data(var/metadata, var/datum/gear_data/gear_data)
+ if(!(metadata in valid_paths))
+ return
+ gear_data.path = valid_paths[metadata]
+
+/*
+* Content adjustment
+*/
+
+/datum/gear_tweak/contents
+ var/list/valid_contents
+
+/datum/gear_tweak/contents/New()
+ valid_contents = args.Copy()
+ ..()
+
+/datum/gear_tweak/contents/get_contents(var/metadata)
+ return "Contents: [english_list(metadata, and_text = ", ")]"
+
+/datum/gear_tweak/contents/get_default()
+ . = list()
+ for(var/i = 1 to valid_contents.len)
+ . += "Random"
+
+/datum/gear_tweak/contents/get_metadata(var/user, var/list/metadata)
+ . = list()
+ for(var/i = metadata.len to valid_contents.len)
+ metadata += "Random"
+ for(var/i = 1 to valid_contents.len)
+ var/entry = input(user, "Choose an entry.", "Character Preference", metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None"))
+ if(entry)
+ . += entry
+ else
+ return metadata
+
+/datum/gear_tweak/contents/tweak_item(var/obj/item/I, var/list/metadata)
+ if(metadata.len != valid_contents.len)
+ return
+ for(var/i = 1 to valid_contents.len)
+ var/path
+ var/list/contents = valid_contents[i]
+ if(metadata[i] == "Random")
+ path = pick(contents)
+ path = contents[path]
+ else if(metadata[i] == "None")
+ continue
+ else
+ path = contents[metadata[i]]
+ new path(I)
\ No newline at end of file
diff --git a/modular_citadel/code/modules/client/loadout/glasses.dm b/modular_citadel/code/modules/client/loadout/glasses.dm
deleted file mode 100644
index b1e6068a9e..0000000000
--- a/modular_citadel/code/modules/client/loadout/glasses.dm
+++ /dev/null
@@ -1,44 +0,0 @@
-/datum/gear/cold
- name = "Cold goggles"
- category = slot_glasses
- path = /obj/item/clothing/glasses/cold
-
-/datum/gear/eyepatch
- name = "Eyepatch"
- category = slot_glasses
- path = /obj/item/clothing/glasses/eyepatch
-
-/datum/gear/heat
- name = "Heat goggles"
- category = slot_glasses
- path = /obj/item/clothing/glasses/heat
-
-/datum/gear/hipster
- name = "Hipster glasses"
- category = slot_glasses
- path = /obj/item/clothing/glasses/regular/hipster
-
-/datum/gear/jamjar
- name = "Jamjar glasses"
- category = slot_glasses
- path = /obj/item/clothing/glasses/regular/jamjar
-
-/datum/gear/monocle
- name = "Monocle"
- category = slot_glasses
- path = /obj/item/clothing/glasses/monocle
-
-/datum/gear/orange
- name = "Orange glasses"
- category = slot_glasses
- path = /obj/item/clothing/glasses/orange
-
-/datum/gear/red
- name = "Red Glasses"
- category = slot_glasses
- path = /obj/item/clothing/glasses/red
-
-/datum/gear/prescription
- name = "Prescription glasses"
- category = slot_glasses
- path = /obj/item/clothing/glasses/regular
diff --git a/modular_citadel/code/modules/client/loadout/gloves.dm b/modular_citadel/code/modules/client/loadout/gloves.dm
deleted file mode 100644
index ec67fbc0ec..0000000000
--- a/modular_citadel/code/modules/client/loadout/gloves.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/datum/gear/fingerless
- name = "Fingerless Gloves"
- category = slot_gloves
- path = /obj/item/clothing/gloves/fingerless
\ No newline at end of file
diff --git a/modular_citadel/code/modules/client/loadout/hands.dm b/modular_citadel/code/modules/client/loadout/hands.dm
deleted file mode 100644
index 94815a7243..0000000000
--- a/modular_citadel/code/modules/client/loadout/hands.dm
+++ /dev/null
@@ -1,61 +0,0 @@
-/datum/gear/cane
- name = "Cane"
- category = slot_hands
- path = /obj/item/cane
-
-/datum/gear/cigarettes
- name = "Cigarette pack"
- category = slot_hands
- path = /obj/item/storage/fancy/cigarettes
-
-/datum/gear/dice
- name = "Dice bag"
- category = slot_hands
- path = /obj/item/storage/pill_bottle/dice
-
-/datum/gear/eightball
- name = "Magic eightball"
- category = slot_hands
- path = /obj/item/toy/eightball
-
-/datum/gear/matches
- name = "Matchbox"
- category = slot_hands
- path = /obj/item/storage/box/matches
-
-/datum/gear/cheaplighter
- name = "Cheap lighter"
- category = slot_hands
- path = /obj/item/lighter/greyscale
-
-/datum/gear/cards
- name = "Playing cards"
- category = slot_hands
- path = /obj/item/toy/cards/deck
-
-/datum/gear/skub
- name = "Skub"
- category = slot_hands
- path = /obj/item/skub
-
-/datum/gear/carpplushie
- name = "Space carp plushie"
- category = slot_hands
- path = /obj/item/toy/plush/carpplushie
-
-/datum/gear/wallet
- name = "Wallet"
- category = slot_hands
- path = /obj/item/storage/wallet
-
-/datum/gear/flask
- name = "Flask"
- category = slot_hands
- path = /obj/item/reagent_containers/food/drinks/flask
- cost = 2
-
-/datum/gear/zippolighter
- name = "Zippo Lighter"
- category = slot_hands
- path = /obj/item/lighter
- cost = 2
diff --git a/modular_citadel/code/modules/client/loadout/loadout.dm b/modular_citadel/code/modules/client/loadout/loadout.dm
index 86efc6dc5b..7db13f5a3e 100644
--- a/modular_citadel/code/modules/client/loadout/loadout.dm
+++ b/modular_citadel/code/modules/client/loadout/loadout.dm
@@ -3,9 +3,55 @@
// slot_to_string(slot) proc in hippiestation/code/_HELPERS/mobs.dm to show the category name in preferences menu) and path (the actual item path).
// description defaults to the path initial desc, cost defaults to 1 point but if you think your item requires more points, the framework allows that
// and lastly, restricted_roles list allows you to let someone spawn with certain items only if the job they spawned with is on the list.
-
+GLOBAL_LIST_EMPTY(loadout_catagories)
GLOBAL_LIST_EMPTY(loadout_items)
+/datum/loadout_category
+ var/category = ""
+ var/list/gear = list()
+ var/donor_only = FALSE
+
+/datum/loadout_category/New(cat)
+ category = cat
+ ..()
+
+/proc/initialize_global_loadout_items()
+ LAZYINITLIST(GLOB.loadout_items)
+ //create a list of gear datums to sort
+ for(var/geartype in subtypesof(/datum/gear))
+ var/datum/gear/G = geartype
+
+ var/use_name = initial(G.name)
+ var/use_category = initial(G.sort_category)
+
+ if(G == initial(G.subtype_path))
+ continue
+
+ if(!use_name)
+ error("Loadout - Missing display name: [G]")
+ continue
+ if(!initial(G.cost))
+ error("Loadout - Missing cost: [G]")
+ continue
+ if(!initial(G.path))
+ error("Loadout - Missing path definition: [G]")
+ continue
+
+ if(!GLOB.loadout_catagories[use_category])
+ GLOB.loadout_catagories[use_category] = new /datum/loadout_category(use_category)
+ var/datum/loadout_category/LC = GLOB.loadout_catagories[use_category]
+ if(initial(G.donor_only))
+ LC.donor_only = TRUE
+ GLOB.loadout_items[use_name] = new geartype
+ LC.gear[use_name] = GLOB.loadout_items[use_name]
+
+ GLOB.loadout_catagories = sortAssoc(loadout_catagories)
+ for(var/loadout_category in GLOB.loadout_catagories)
+ var/datum/loadout_category/LC = GLOB.loadout_catagories[loadout_category]
+ LC.gear = sortAssoc(LC.gear)
+ return 1
+
+/*
/proc/initialize_global_loadout_items()
LAZYINITLIST(GLOB.loadout_items)
for(var/item in subtypesof(/datum/gear))
@@ -13,19 +59,41 @@ GLOBAL_LIST_EMPTY(loadout_items)
if(!GLOB.loadout_items[slot_to_string(I.category)])
LAZYINITLIST(GLOB.loadout_items[slot_to_string(I.category)])
LAZYSET(GLOB.loadout_items[slot_to_string(I.category)], I.name, I)
-
+*/
/datum/gear
var/name
- var/category
+ var/slot
var/description
var/path //item-to-spawn path
var/cost = 1 //normally, each loadout costs a single point.
var/list/restricted_roles
var/list/ckeywhitelist
+ 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
+ var/donor_only = FALSE // if it's only available to donors
/datum/gear/New()
..()
if(!description && path)
var/obj/O = path
description = initial(O.desc)
+
+/datum/gear_data
+ var/path
+ var/location
+
+/datum/gear_data/New(npath, nlocation)
+ path = npath
+ location = nlocation
+
+/datum/gear/proc/spawn_item(location, metadata)
+ var/datum/gear_data/gd = new(path, location)
+ for(var/datum/gear_tweak/gt in gear_tweaks)
+ gt.tweak_gear_data(metadata["[gt]"], gd)
+ var/item = new gd.path(gd.location)
+ for(var/datum/gear_tweak/gt in gear_tweaks)
+ gt.tweak_item(item, metadata["[gt]"])
+ return item
\ No newline at end of file
diff --git a/modular_citadel/code/modules/client/loadout/loadout_accessories.dm b/modular_citadel/code/modules/client/loadout/loadout_accessories.dm
new file mode 100644
index 0000000000..458cc8ec85
--- /dev/null
+++ b/modular_citadel/code/modules/client/loadout/loadout_accessories.dm
@@ -0,0 +1,170 @@
+
+/datum/gear/accessory
+ subtype_path = /datum/gear/accessory
+ slot = slot_in_backpack
+ sort_category = "Accessories"
+
+/datum/gear/accessory/cane
+ name = "Cane"
+ path = /obj/item/cane
+
+/datum/gear/accessory/cigarettes
+ name = "Cigarette pack"
+ path = /obj/item/storage/fancy/cigarettes
+
+/datum/gear/accessory/dice
+ name = "Dice bag"
+ path = /obj/item/storage/pill_bottle/dice
+/datum/gear/accessory/eightball
+ name = "Magic eightball"
+ path = /obj/item/toy/eightball
+
+/datum/gear/accessory/matches
+ name = "Matchbox"
+ path = /obj/item/storage/box/matches
+
+/datum/gear/accessory/cheaplighter
+ name = "Cheap lighter"
+ path = /obj/item/lighter/greyscale
+
+/datum/gear/accessory/cards
+ name = "Playing cards"
+ path = /obj/item/toy/cards/deck
+
+/datum/gear/accessory/skub
+ name = "Skub"
+ path = /obj/item/skub
+
+/datum/gear/accessory/carpplushie
+ name = "Space carp plushie"
+ path = /obj/item/toy/plush/carpplushie
+
+/datum/gear/accessory/wallet
+ name = "Wallet"
+ path = /obj/item/storage/wallet
+
+/datum/gear/accessory/flask
+ name = "Flask"
+ path = /obj/item/reagent_containers/food/drinks/flask
+ cost = 2
+
+/datum/gear/accessory/zippolighter
+ name = "Zippo Lighter"
+ path = /obj/item/lighter
+ cost = 2
+
+/datum/gear/accessory/stethoscope
+ name = "Stethoscope"
+ slot = slot_neck
+ path = /obj/item/clothing/neck/stethoscope
+ restricted_roles = list("Medical Doctor", "Chief Medical Officer")
+
+/datum/gear/accessory/plush
+ subtype_path = /datum/gear/accessory/plush
+ sort_category = "Toys"
+
+/datum/gear/accessory/plush/plushvar
+ name = "Ratvar Plushie"
+ path = /obj/item/toy/plush/plushvar
+ cost = 5
+ restricted_roles = list("Chaplain")
+
+/datum/gear/accessory/plush/narplush
+ name = "Narsie Plushie"
+ path = /obj/item/toy/plush/narplush
+ cost = 5
+ restricted_roles = list("Chaplain")
+
+/datum/gear/accessory/plush/plushcarp
+ name = "Space carp plushie"
+ path = /obj/item/toy/plush/carpplushie
+
+/datum/gear/accessory/plush/plushliz
+ name = "Lizard plushie"
+ path = /obj/item/toy/plush/lizardplushie
+
+/datum/gear/accessory/plush/plushsnek
+ name = "Snake plushie"
+ path = /obj/item/toy/plush/snakeplushie
+
+/datum/gear/accessory/plush/plushslime
+ name = "Slime plushie"
+ path = /obj/item/toy/plush/slimeplushie
+
+/datum/gear/accessory/plush/dildo
+ name = "Customizable dildo"
+ path = /obj/item/dildo/custom
+
+/datum/gear/accessory/tie
+ subtype_path = /datum/gear/accessory/tie
+ slot = slot_neck
+ subtype_cost_overlap = FALSE
+ sort_category = "Neckwear"
+
+/datum/gear/accessory/tie/bluetie
+ name = "Blue tie"
+ path = /obj/item/clothing/neck/tie/blue
+
+/datum/gear/accessory/tie/redtie
+ name = "Red tie"
+ path = /obj/item/clothing/neck/tie/red
+
+/datum/gear/accessory/tie/blacktie
+ name = "Black tie"
+ path = /obj/item/clothing/neck/tie/black
+
+/datum/gear/accessory/tie/collar
+ name = "Collar"
+ path = /obj/item/clothing/neck/petcollar
+
+/datum/gear/accessory/tie/scarf
+ name = "White scarf"
+ path = /obj/item/clothing/neck/scarf
+
+/datum/gear/accessory/tie/blackscarf
+ name = "Black scarf"
+ path = /obj/item/clothing/neck/scarf/black
+
+/datum/gear/accessory/tie/redscarf
+ name = "Red scarf"
+ path = /obj/item/clothing/neck/scarf/red
+
+/datum/gear/accessory/tie/greenscarf
+ name = "Green scarf"
+ path = /obj/item/clothing/neck/scarf/green
+
+/datum/gear/accessory/tie/darkbluescarf
+ name = "Dark blue scarf"
+ path = /obj/item/clothing/neck/scarf/darkblue
+
+/datum/gear/accessory/tie/purplescarf
+ name = "Purple scarf"
+ path = /obj/item/clothing/neck/scarf/purple
+
+/datum/gear/accessory/tie/yellowscarf
+ name = "Yellow scarf"
+ path = /obj/item/clothing/neck/scarf/yellow
+
+/datum/gear/accessory/tie/orangescarf
+ name = "Orange scarf"
+ path = /obj/item/clothing/neck/scarf/orange
+
+/datum/gear/accessory/tie/cyanscarf
+ name = "Cyan scarf"
+ path = /obj/item/clothing/neck/scarf/cyan
+
+/datum/gear/accessory/tie/stripedredscarf
+ name = "Striped red scarf"
+ path = /obj/item/clothing/neck/stripedredscarf
+
+/datum/gear/accessory/tie/stripedbluescarf
+ name = "Striped blue scarf"
+ path = /obj/item/clothing/neck/stripedbluescarf
+
+/datum/gear/accessory/tie/stripedgreenscarf
+ name = "Striped green scarf"
+ path = /obj/item/clothing/neck/stripedgreenscarf
+
+/datum/gear/accessory/tie/headphones
+ name = "Headphones"
+ path = /obj/item/clothing/ears/headphones
diff --git a/modular_citadel/code/modules/client/loadout/loadout_cosmetics.dm b/modular_citadel/code/modules/client/loadout/loadout_cosmetics.dm
new file mode 100644
index 0000000000..889818e53e
--- /dev/null
+++ b/modular_citadel/code/modules/client/loadout/loadout_cosmetics.dm
@@ -0,0 +1,47 @@
+/datum/gear/cosmetics
+ sort_category = "Cosmetics"
+ subtype_path = /datum/gear/accessory
+
+/datum/gear/cosmetics/glasses
+ slot = slot_glasses
+
+/datum/gear/cosmetics/glasses/cold
+ name = "Cold goggles"
+ path = /obj/item/clothing/glasses/cold
+
+/datum/gear/cosmetics/glasses/eyepatch
+ name = "Eyepatch"
+ path = /obj/item/clothing/glasses/eyepatch
+
+/datum/gear/cosmetics/glasses/heat
+ name = "Heat goggles"
+ path = /obj/item/clothing/glasses/heat
+
+datum/gear/cosmetics/glasses/hipster
+ name = "Hipster glasses"
+ path = /obj/item/clothing/glasses/regular/hipster
+
+datum/gear/cosmetics/glasses/jamjar
+ name = "Jamjar glasses"
+ path = /obj/item/clothing/glasses/regular/jamjar
+
+datum/gear/cosmetics/glasses/monocle
+ name = "Monocle"
+ path = /obj/item/clothing/glasses/monocle
+
+datum/gear/cosmetics/glasses/orange
+ name = "Orange glasses"
+ path = /obj/item/clothing/glasses/orange
+
+datum/gear/cosmetics/glasses/red
+ name = "Red Glasses"
+ path = /obj/item/clothing/glasses/red
+
+datum/gear/cosmetics/glasses/prescription
+ name = "Prescription glasses"
+ path = /obj/item/clothing/glasses/regular
+
+datum/gear/cosmetics/glasses/sechud
+ name = "Security Hud"
+ path = /obj/item/clothing/glasses/hud/security
+ restricted_roles = list("Security Officer", "Warden", "Head of Security")
diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/loadout_donator.dm
similarity index 66%
rename from modular_citadel/code/modules/client/loadout/__donator.dm
rename to modular_citadel/code/modules/client/loadout/loadout_donator.dm
index 69015b064d..21dc9ccbb6 100644
--- a/modular_citadel/code/modules/client/loadout/__donator.dm
+++ b/modular_citadel/code/modules/client/loadout/loadout_donator.dm
@@ -1,224 +1,223 @@
//This is the file that handles donator loadout items.
-/datum/gear/pingcoderfailsafe
+/datum/gear/donor
+ donor_only = TRUE
+ sort_category = "Donor"
+ subtype_path = /datum/gear/donor
+
+/datum/gear/donor/pingcoderfailsafe
name = "IF YOU SEE THIS, PING A CODER RIGHT NOW!"
- category = slot_in_backpack
+ slot = slot_in_backpack
path = /obj/item/bikehorn/golden
ckeywhitelist = list("This entry should never appear with this variable set.") //If it does, then that means somebody fucked up the whitelist system pretty hard
-/datum/gear/donortestingbikehorn
+/datum/gear/donor/donortestingbikehorn
name = "Donor item testing bikehorn"
- category = slot_in_backpack
+ slot = slot_in_backpack
path = /obj/item/bikehorn
- ckeywhitelist = list("jayehh","deathride58")
+ ckeywhitelist = list("jayehh","deathride58","poojawa")
-/datum/gear/kevhorn
+/datum/gear/donor/kevhorn
name = "Airhorn"
- category = slot_in_backpack
+ slot = slot_in_backpack
path = /obj/item/bikehorn/airhorn
ckeywhitelist = list("kevinz000")
-/datum/gear/cebusoap
+/datum/gear/donor/cebusoap
name = "Cebutris' soap"
- category = slot_in_backpack
+ slot = slot_in_backpack
path = /obj/item/custom/ceb_soap
ckeywhitelist = list("cebutris")
-/datum/gear/kiaracloak
+/datum/gear/donor/kiaracloak
name = "Kiara's cloak"
- category = slot_neck
+ slot = slot_neck
path = /obj/item/clothing/neck/cloak/inferno
ckeywhitelist = list("inferno707")
-/datum/gear/kiaracollar
+/datum/gear/donor/kiaracollar
name = "Kiara's collar"
- category = slot_neck
+ slot = slot_neck
path = /obj/item/clothing/neck/petcollar/inferno
ckeywhitelist = list("inferno707")
-/datum/gear/kiaramedal
+/datum/gear/donor/kiaramedal
name = "Insignia of Steele"
- category = slot_in_backpack
+ slot = slot_in_backpack
path = /obj/item/clothing/accessory/medal/steele
ckeywhitelist = list("inferno707")
-/datum/gear/sexymimemask
+/datum/gear/donor/sexymimemask
name = "The hollow heart"
- category = slot_wear_mask
+ slot = slot_wear_mask
path = /obj/item/clothing/mask/sexymime
ckeywhitelist = list("inferno707")
-/datum/gear/engravedzippo
+/datum/gear/donor/engravedzippo
name = "Engraved zippo"
- category = slot_hands
+ slot = slot_hands
path = /obj/item/lighter/gold
ckeywhitelist = list("dirtyoldharry")
-/datum/gear/geisha
+/datum/gear/donor/geisha
name = "Geisha suit"
- category = slot_w_uniform
+ slot = slot_w_uniform
path = /obj/item/clothing/under/geisha
ckeywhitelist = list("atiefling")
-/datum/gear/specialscarf
+/datum/gear/donor/specialscarf
name = "Special scarf"
- category = slot_neck
+ slot = slot_neck
path = /obj/item/clothing/neck/scarf/zomb
ckeywhitelist = list("zombierobin")
-/datum/gear/redmadcoat
+/datum/gear/donor/redmadcoat
name = "The Mad's labcoat"
- category = slot_wear_suit
+ slot = slot_wear_suit
path = /obj/item/clothing/suit/toggle/labcoat/mad/red
ckeywhitelist = list("zombierobin")
-/datum/gear/santahat
+/datum/gear/donor/santahat
name = "Santa hat"
- category = slot_head
+ slot = slot_head
path = /obj/item/clothing/head/santa/fluff
ckeywhitelist = list("illotafv")
-/datum/gear/reindeerhat
+/datum/gear/donor/reindeerhat
name = "Reindeer hat"
- category = slot_head
+ slot = slot_head
path = /obj/item/clothing/head/hardhat/reindeer/fluff
ckeywhitelist = list("illotafv")
-/datum/gear/treeplushie
+/datum/gear/donor/treeplushie
name = "Christmas tree plushie"
- category = slot_in_backpack
+ slot = slot_in_backpack
path = /obj/item/toy/plush/tree
ckeywhitelist = list("illotafv")
-/datum/gear/santaoutfit
+/datum/gear/donor/santaoutfit
name = "Santa costume"
- category = slot_wear_suit
+ slot = slot_wear_suit
path = /obj/item/clothing/suit/space/santa/fluff
ckeywhitelist = list("illotafv")
-/datum/gear/treecloak
+/datum/gear/donor/treecloak
name = "Christmas tree cloak"
- category = slot_neck
+ slot = slot_neck
path = /obj/item/clothing/neck/cloak/festive
ckeywhitelist = list("illotafv")
-/datum/gear/carrotplush
+/datum/gear/donor/carrotplush
name = "Carrot plushie"
- category = slot_in_backpack
+ slot = slot_in_backpack
path = /obj/item/toy/plush/carrot
ckeywhitelist = list("improvedname")
-/datum/gear/carrotcloak
+/datum/gear/donor/carrotcloak
name = "Carrot cloak"
- category = slot_neck
+ slot = slot_neck
path = /obj/item/clothing/neck/cloak/carrot
ckeywhitelist = list("improvedname")
-/datum/gear/albortorosamask
+/datum/gear/donor/albortorosamask
name = "Alborto Rosa mask"
- category = slot_wear_mask
+ slot = slot_wear_mask
path = /obj/item/clothing/mask/luchador/zigfie
ckeywhitelist = list("zigfie")
-/datum/gear/mankini
+/datum/gear/donor/mankini
name = "Mankini"
- category = slot_w_uniform
+ slot = slot_w_uniform
path = /obj/item/clothing/under/mankini
ckeywhitelist = list("zigfie")
-/datum/gear/pinkshoes
+/datum/gear/donor/pinkshoes
name = "Pink shoes"
- category = slot_shoes
+ slot = slot_shoes
path = /obj/item/clothing/shoes/sneakers/pink
ckeywhitelist = list("zigfie")
-/datum/gear/reecesgreatcoat
+/datum/gear/donor/reecesgreatcoat
name = "Reece's Great Coat"
- category = slot_wear_suit
+ slot = slot_wear_suit
path = /obj/item/clothing/suit/trenchcoat/green
ckeywhitelist = list("geemiesif")
-/datum/gear/russianflask
+/datum/gear/donor/russianflask
name = "Russian flask"
- category = slot_in_backpack
+ slot = slot_in_backpack
path = /obj/item/reagent_containers/food/drinks/flask/russian
cost = 2
ckeywhitelist = list("slomka")
-/datum/gear/stalkermask
+/datum/gear/donor/stalkermask
name = "S.T.A.L.K.E.R. mask"
- category = slot_wear_mask
+ slot = slot_wear_mask
path = /obj/item/clothing/mask/gas/stalker
ckeywhitelist = list("slomka")
-/datum/gear/stripedcollar
+/datum/gear/donor/stripedcollar
name = "Striped collar"
- category = slot_neck
+ slot = slot_neck
path = /obj/item/clothing/neck/petcollar/stripe
ckeywhitelist = list("jademanique")
-/datum/gear/performersoutfit
+/datum/gear/donor/performersoutfit
name = "Bluish performer's outfit"
- category = slot_w_uniform
+ slot = slot_w_uniform
path = /obj/item/clothing/under/singery/custom
ckeywhitelist = list("killer402402")
-/datum/gear/vermillion
+/datum/gear/donor/vermillion
name = "Vermillion clothing"
- category = slot_w_uniform
+ slot = slot_w_uniform
path = /obj/item/clothing/suit/vermillion
ckeywhitelist = list("fractious")
-/datum/gear/AM4B
+/datum/gear/donor/AM4B
name = "Foam Force AM4-B"
- category = slot_in_backpack
+ slot = slot_in_backpack
path = /obj/item/gun/ballistic/automatic/AM4B
ckeywhitelist = list("zeronetalpha")
-/datum/gear/carrotsatchel
+/datum/gear/donor/carrotsatchel
name = "Carrot Satchel"
- category = slot_hands
+ slot = slot_hands
path = /obj/item/storage/backpack/satchel/carrot
ckeywhitelist = list("improvedname")
-/datum/gear/naomisweater
+/datum/gear/donor/naomisweater
name = "worn black sweater"
- category = slot_w_uniform
+ slot = slot_w_uniform
path = /obj/item/clothing/under/bb_sweater/black/naomi
ckeywhitelist = list("technicalmagi")
-/datum/gear/naomicollar
+/datum/gear/donor/naomicollar
name = "worn pet collar"
- category = slot_neck
+ slot = slot_neck
path = /obj/item/clothing/neck/petcollar/naomi
ckeywhitelist = list("technicalmagi")
-/datum/gear/gladiator
+/datum/gear/donor/gladiator
name = "Gladiator Armor"
- category = slot_wear_suit
+ slot = slot_wear_suit
path = /obj/item/clothing/under/gladiator
ckeywhitelist = list("aroche")
-/datum/gear/bloodredtie
+/datum/gear/donor/bloodredtie
name = "Blood Red Tie"
- category = slot_neck
+ slot = slot_neck
path = /obj/item/clothing/neck/tie/bloodred
ckeywhitelist = list("kyutness")
-/datum/gear/puffydress
+/datum/gear/donor/puffydress
name = "Puffy Dress"
- category = slot_wear_suit
+ slot = slot_wear_suit
path = /obj/item/clothing/suit/puffydress
//ckeywhitelist = //Don't know their ckey yet
-/datum/gear/labredblack
+/datum/gear/donor/labredblack
name = "Black and Red Coat"
- category = slot_wear_suit
+ slot = slot_wear_suit
path = /obj/item/clothing/suit/toggle/labcoat/labredblack
ckeywhitelist = list("blakeryan")
-
-
-
-
-
-
diff --git a/modular_citadel/code/modules/client/loadout/loadout_gloves.dm b/modular_citadel/code/modules/client/loadout/loadout_gloves.dm
new file mode 100644
index 0000000000..083e40ec90
--- /dev/null
+++ b/modular_citadel/code/modules/client/loadout/loadout_gloves.dm
@@ -0,0 +1,8 @@
+/datum/gear/gloves
+ subtype_path = /datum/gear/gloves
+ slot = slot_gloves
+ sort_category = "Gloves"
+
+/datum/gear/gloves/fingerless
+ name = "Fingerless Gloves"
+ path = /obj/item/clothing/gloves/fingerless
\ No newline at end of file
diff --git a/modular_citadel/code/modules/client/loadout/head.dm b/modular_citadel/code/modules/client/loadout/loadout_hat.dm
similarity index 56%
rename from modular_citadel/code/modules/client/loadout/head.dm
rename to modular_citadel/code/modules/client/loadout/loadout_hat.dm
index 168debf2cc..11ba3c6de4 100644
--- a/modular_citadel/code/modules/client/loadout/head.dm
+++ b/modular_citadel/code/modules/client/loadout/loadout_hat.dm
@@ -1,74 +1,91 @@
-/datum/gear/baseball
+/datum/gear/hat
+ subtype_path = /datum/gear/hat
+ slot = slot_head
+ sort_category = "Headwear"
+
+/datum/gear/hat/balaclava
+ name = "Balaclava"
+ slot = slot_in_backpack
+ cost = 3
+ path = /obj/item/clothing/mask/balaclava
+
+/datum/gear/hat/baseball
name = "Ballcap"
- category = slot_head
path = /obj/item/clothing/head/soft/mime
-/datum/gear/beanie
+/datum/gear/hat/beanie
name = "Beanie"
- category = slot_head
path = /obj/item/clothing/head/beanie
-/datum/gear/beret
+/datum/gear/hat/beret
name = "Black beret"
- category = slot_head
path = /obj/item/clothing/head/beret/black
-/datum/gear/flatcap
+/datum/gear/hat/flatcap
name = "Flat cap"
- category = slot_head
path = /obj/item/clothing/head/flatcap
-/datum/gear/pirate
+/datum/gear/hat/pirate
name = "Pirate hat"
- category = slot_head
path = /obj/item/clothing/head/pirate
-/datum/gear/rice_hat
+/datum/gear/hat/rice_hat
name = "Rice hat"
- category = slot_head
path = /obj/item/clothing/head/rice_hat
-/datum/gear/ushanka
+/datum/gear/hat/ushanka
name = "Ushanka"
- category = slot_head
path = /obj/item/clothing/head/ushanka
-/datum/gear/slime
+/datum/gear/hat/slime
name = "Slime hat"
- category = slot_head
path = /obj/item/clothing/head/collectable/slime
-/datum/gear/fedora
+/datum/gear/hat/fedora
name = "Fedora"
- category = slot_head
path = /obj/item/clothing/head/fedora
-/datum/gear/that
+/datum/gear/hat/that
name = "Top Hat"
- category = slot_head
path = /obj/item/clothing/head/that
+/datum/gear/hat/navy
+ subtype_path = datum/gear/hat/navy
+ subtype_cost_overlap = FALSE
+ sort_category = "Job Specific Headwear"
+
+/datum/gear/hat/navy/bluehosberet
+ name = "Head of security's Navy beret"
+ path = /obj/item/clothing/head/beret/sec/navyhos
+ restricted_roles = list("Head of Security")
+
+/datum/gear/hat/navy/blueofficerberet
+ name = "Security officer's Navyblue beret"
+ path = /obj/item/clothing/head/beret/sec/navyofficer
+ restricted_roles = list("Security Officer")
+
+/datum/gear/hat/navy/bluewardenberet
+ name = "Warden's navyblue beret"
+ path = /obj/item/clothing/head/beret/sec/navywarden
+ restricted_roles = list("Warden")
+
//trek fancy Hats!
-/datum/gear/trekcap
+/datum/gear/hat/navy/trekcap
name = "Federation Officer's Cap"
- category = slot_head
path = /obj/item/clothing/head/caphat/formal/fedcover
restricted_roles = list("Captain","Head of Personnel")
-/datum/gear/trekcapmedisci
+/datum/gear/hat/navy/trekcap/medisci
name = "Federation Officer's Cap"
- category = slot_head
path = /obj/item/clothing/head/caphat/formal/fedcover/medsci
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
-/datum/gear/trekcapeng
+/datum/gear/hat/navy/trekcap/eng
name = "Federation Officer's Cap"
- category = slot_head
path = /obj/item/clothing/head/caphat/formal/fedcover/eng
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
-/datum/gear/trekcapsec
+/datum/gear/hat/navy/trekcap/sec
name = "Federation Officer's Cap"
- category = slot_head
path = /obj/item/clothing/head/caphat/formal/fedcover/sec
- restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
\ No newline at end of file
+ restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
diff --git a/modular_citadel/code/modules/client/loadout/shoes.dm b/modular_citadel/code/modules/client/loadout/loadout_shoes.dm
similarity index 59%
rename from modular_citadel/code/modules/client/loadout/shoes.dm
rename to modular_citadel/code/modules/client/loadout/loadout_shoes.dm
index 0d233c3a5e..379b65ace0 100644
--- a/modular_citadel/code/modules/client/loadout/shoes.dm
+++ b/modular_citadel/code/modules/client/loadout/loadout_shoes.dm
@@ -1,39 +1,37 @@
-/datum/gear/laceup
+
+/datum/gear/shoes/shoes
+ subtype_path = /datum/gear/shoes/shoes
+ slot = slot_shoes
+ sort_category = "Shoes"
+
+/datum/gear/shoes/laceup
name = "Laceup shoes"
- category = slot_shoes
path = /obj/item/clothing/shoes/laceup
-/datum/gear/workboots
+/datum/gear/shoes/workboots
name = "Work boots"
- category = slot_shoes
path = /obj/item/clothing/shoes/workboots
-/datum/gear/jackboots
+/datum/gear/shoes/jackboots
name = "Jackboots"
- category = slot_shoes
path = /obj/item/clothing/shoes/jackboots
-/datum/gear/winterboots
+/datum/gear/shoes/winterboots
name = "Winter boots"
- category = slot_shoes
path = /obj/item/clothing/shoes/winterboots
-/datum/gear/sandals
+/datum/gear/shoes/sandals
name = "Sandals"
- category = slot_shoes
path = /obj/item/clothing/shoes/sandal
-/datum/gear/blackshoes
+/datum/gear/shoes/blackshoes
name = "Black shoes"
- category = slot_shoes
path = /obj/item/clothing/shoes/sneakers/black
-/datum/gear/brownshoes
+/datum/gear/shoes/brownshoes
name = "Brown shoes"
- category = slot_shoes
path = /obj/item/clothing/shoes/sneakers/brown
-/datum/gear/whiteshoes
+/datum/gear/shoes/whiteshoes
name = "White shoes"
- category = slot_shoes
path = /obj/item/clothing/shoes/sneakers/white
diff --git a/modular_citadel/code/modules/client/loadout/suit.dm b/modular_citadel/code/modules/client/loadout/loadout_suit.dm
similarity index 61%
rename from modular_citadel/code/modules/client/loadout/suit.dm
rename to modular_citadel/code/modules/client/loadout/loadout_suit.dm
index 941da5c29f..40bc6fcf4d 100644
--- a/modular_citadel/code/modules/client/loadout/suit.dm
+++ b/modular_citadel/code/modules/client/loadout/loadout_suit.dm
@@ -1,102 +1,115 @@
-/datum/gear/poncho
+/datum/gear/suit/suit
+ subtype_path = /datum/gear/suit/suit
+ slot = slot_wear_suit
+ cost = 2
+ sort_category = "External Wear"
+
+/datum/gear/suit/poncho
name = "Poncho"
- category = slot_wear_suit
path = /obj/item/clothing/suit/poncho
-/datum/gear/ponchogreen
+/datum/gear/suit/ponchogreen
name = "Green poncho"
- category = slot_wear_suit
path = /obj/item/clothing/suit/poncho/green
-/datum/gear/ponchored
+/datum/gear/suit/ponchored
name = "Red poncho"
- category = slot_wear_suit
path = /obj/item/clothing/suit/poncho/red
-/datum/gear/jacketbomber
+/datum/gear/suit/jacketbomber
name = "Bomber jacket"
- category = slot_wear_suit
path = /obj/item/clothing/suit/jacket
-/datum/gear/jacketleather
+/datum/gear/suit/jacketleather
name = "Leather jacket"
- category = slot_wear_suit
path = /obj/item/clothing/suit/jacket/leather
-/datum/gear/overcoatleather
+/datum/gear/suit/overcoatleather
name = "Leather overcoat"
- category = slot_wear_suit
path = /obj/item/clothing/suit/jacket/leather/overcoat
-/datum/gear/jacketpuffer
+/datum/gear/suit/jacketpuffer
name = "Puffer jacket"
- category = slot_wear_suit
path = /obj/item/clothing/suit/jacket/puffer
-/datum/gear/vestpuffer
+/datum/gear/suit/vestpuffer
name = "Puffer vest"
- category = slot_wear_suit
path = /obj/item/clothing/suit/jacket/puffer/vest
-/datum/gear/jacketlettermanbrown
+/datum/gear/suit/jacketlettermanbrown
name = "Brown letterman jacket"
- category = slot_wear_suit
path = /obj/item/clothing/suit/jacket/letterman
-/datum/gear/jacketlettermanred
+/datum/gear/suit/jacketlettermanred
name = "Red letterman jacket"
- category = slot_wear_suit
path = /obj/item/clothing/suit/jacket/letterman_red
-/datum/gear/jacketlettermanNT
+/datum/gear/suit/jacketlettermanNT
name = "Nanotrasen letterman jacket"
- category = slot_wear_suit
path = /obj/item/clothing/suit/jacket/letterman_nanotrasen
-/datum/gear/coat
+/datum/gear/suit/coat
name = "Winter coat"
- category = slot_wear_suit
path = /obj/item/clothing/suit/hooded/wintercoat
-/datum/gear/militaryjacket
+/datum/gear/suit/militaryjacket
name = "Military Jacket"
- category = slot_wear_suit
path = /obj/item/clothing/suit/jacket/miljacket
-/datum/gear/ianshirt
+/datum/gear/suit/ianshirt
name = "Ian Shirt"
- category = slot_wear_suit
path = /obj/item/clothing/suit/ianshirt
-/datum/gear/trekds9_coat
- name = "DS9 Overcoat (use uniform)"
- category = slot_wear_suit
+//Job Coats
+/datum/gear/suit/job
+ subtype_path = /datum/gear/suit/job
+ subtype_cost_overlap = FALSE
+ sort_category = "Job Specific Coats"
+
+/datum/gear/suit/job/sec/navybluejackethos
+ name = "head of security's navyblue jacket"
+ path = /obj/item/clothing/suit/security/hos
+ restricted_roles = list("Head of Security")
+
+/datum/gear/suit/job/sec/navybluejacketofficer
+ name = "security officer's navyblue jacket"
+ path = /obj/item/clothing/suit/security/officer
+ restricted_roles = list("Security Officer")
+
+/datum/gear/suit/job/sec/navybluejacketwarden
+ name = "warden navyblue jacket"
+ path = /obj/item/clothing/suit/security/warden
+ restricted_roles = list("Warden")
+
+//Trek Coats
+/datum/gear/suit/trek
+ subtype_path = /datum/gear/suit/trek
+ subtype_cost_overlap = FALSE
+ sort_category = "Trek Coats"
+
+/datum/gear/suit/trek/ds9_coat
+ name = "DS9 Overcoat"
path = /obj/item/clothing/suit/storage/trek/ds9
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster",
"Medical Doctor","Chemist","Virologist","Geneticist","Scientist", "Roboticist",
"Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer",
"Cargo Technician", "Shaft Miner") //everyone who actually deserves a job.
-//Federation jackets from movies
-/datum/gear/trekcmdcap
+/datum/gear/suit/trek/cap
name = "fed (movie) uniform, Captain"
- category = slot_wear_suit
path = /obj/item/clothing/suit/storage/fluff/fedcoat/capt
restricted_roles = list("Captain","Head of Personnel")
-/datum/gear/trekcmdmov
+/datum/gear/suit/trek/sec
name = "fed (movie) uniform, sec"
- category = slot_wear_suit
path = /obj/item/clothing/suit/storage/fluff/fedcoat
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster","Warden","Detective","Security Officer")
-/datum/gear/trekmedscimov
+/datum/gear/suit/trek/medsci
name = "fed (movie) uniform, med/sci"
- category = slot_wear_suit
path = /obj/item/clothing/suit/storage/fluff/fedcoat/medsci
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
-/datum/gear/trekengmov
+/datum/gear/suit/trek/eng
name = "fed (movie) uniform, ops/eng"
- category = slot_wear_suit
path = /obj/item/clothing/suit/storage/fluff/fedcoat/eng
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Cargo Technician", "Shaft Miner", "Quartermaster")
\ No newline at end of file
diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/loadout_uniform.dm
similarity index 63%
rename from modular_citadel/code/modules/client/loadout/uniform.dm
rename to modular_citadel/code/modules/client/loadout/loadout_uniform.dm
index acb2b4e13c..9aff13e707 100644
--- a/modular_citadel/code/modules/client/loadout/uniform.dm
+++ b/modular_citadel/code/modules/client/loadout/loadout_uniform.dm
@@ -1,220 +1,240 @@
-/datum/gear/suitblack
- name = "Black suit"
- category = slot_w_uniform
- path = /obj/item/clothing/under/suit_jacket
+// Uniform slot
+/datum/gear/uniform
+ subtype_path = /datum/gear/uniform
+ slot = slot_w_uniform
+ cost = 2
+ sort_category = "Uniforms and Casual Dress"
-/datum/gear/suitgreen
- name = "Green suit"
- category = slot_w_uniform
- path = /obj/item/clothing/under/suit_jacket/green
-
-/datum/gear/suitred
- name = "Red suit"
- category = slot_w_uniform
- path = /obj/item/clothing/under/suit_jacket/red
-
-/datum/gear/suitcharcoal
- name = "Charcoal suit"
- category = slot_w_uniform
- path = /obj/item/clothing/under/suit_jacket/charcoal
-
-/datum/gear/suitnavy
- name = "Navy suit"
- category = slot_w_uniform
- path = /obj/item/clothing/under/suit_jacket/navy
-
-/datum/gear/suitburgundy
- name = "Burgundy suit"
- category = slot_w_uniform
- path = /obj/item/clothing/under/suit_jacket/burgundy
-
-/datum/gear/suittan
- name = "Tan suit"
- category = slot_w_uniform
- path = /obj/item/clothing/under/suit_jacket/tan
-
-/datum/gear/suitwhite
- name = "White suit"
- category = slot_w_uniform
- path = /obj/item/clothing/under/suit_jacket/white
-
-/datum/gear/assistantformal
- name = "Assistant's formal uniform"
- category = slot_w_uniform
- path = /obj/item/clothing/under/assistantformal
-
-/datum/gear/maidcostume
- name = "Maid costume"
- category = slot_w_uniform
- path = /obj/item/clothing/under/maid
-
-/datum/gear/mailmanuniform
- name = "Mailman's jumpsuit"
- category = slot_w_uniform
- path = /obj/item/clothing/under/rank/mailman
-
-/datum/gear/skirtblack
- name = "Black skirt"
- category = slot_w_uniform
- path = /obj/item/clothing/under/skirt/black
-
-/datum/gear/skirtblue
- name = "Blue skirt"
- category = slot_w_uniform
- path = /obj/item/clothing/under/skirt/blue
-
-/datum/gear/skirtred
- name = "Red skirt"
- category = slot_w_uniform
- path = /obj/item/clothing/under/skirt/red
-
-/datum/gear/skirtpurple
- name = "Purple skirt"
- category = slot_w_uniform
- path = /obj/item/clothing/under/skirt/purple
-
-/datum/gear/kilt
- name = "Kilt"
- category = slot_w_uniform
- path = /obj/item/clothing/under/kilt
-
-/datum/gear/camoshorts
- name = "Camo Pants"
- category = slot_w_uniform
- path = /obj/item/clothing/under/pants/camo
-
-/datum/gear/bjeans
- name = "Black Jeans"
- category = slot_w_uniform
- path = /obj/item/clothing/under/pants/blackjeans
-
-/datum/gear/cjeans
- name = "Classic Jeans"
- category = slot_w_uniform
- path = /obj/item/clothing/under/pants/classicjeans
-
-/datum/gear/khaki
- name = "Khaki Pants"
- category = slot_w_uniform
- path = /obj/item/clothing/under/pants/khaki
-
-/datum/gear/wpants
- name = "White Pants"
- category = slot_w_uniform
- path = /obj/item/clothing/under/pants/white
-
-/datum/gear/rpants
- name = "Red Pants"
- category = slot_w_uniform
- path = /obj/item/clothing/under/pants/red
-
-/datum/gear/tpants
- name = "Tan Pants"
- category = slot_w_uniform
- path = /obj/item/clothing/under/pants/tan
-
-/datum/gear/trpants
- name = "Track Pants"
- category = slot_w_uniform
- path = /obj/item/clothing/under/pants/track
-
-/datum/gear/turtleneck
+/datum/gear/uniform/turtleneck
name = "Tactitool Turtleneck"
- category = slot_w_uniform
path = /obj/item/clothing/under/syndicate/cosmetic
+/datum/gear/uniform/suitblack
+ name = "Black suit"
+ path = /obj/item/clothing/under/suit_jacket
+
+/datum/gear/uniform/suitgreen
+ name = "Green suit"
+ path = /obj/item/clothing/under/suit_jacket/green
+
+/datum/gear/uniform/suitred
+ name = "Red suit"
+ path = /obj/item/clothing/under/suit_jacket/red
+
+/datum/gear/uniform/suitcharcoal
+ name = "Charcoal suit"
+ path = /obj/item/clothing/under/suit_jacket/charcoal
+
+/datum/gear/uniform/suitnavy
+ name = "Navy suit"
+ path = /obj/item/clothing/under/suit_jacket/navy
+
+/datum/gear/uniform/suitburgundy
+ name = "Burgundy suit"
+ path = /obj/item/clothing/under/suit_jacket/burgundy
+
+/datum/gear/uniform/suittan
+ name = "Tan suit"
+ path = /obj/item/clothing/under/suit_jacket/tan
+
+/datum/gear/uniform/suitwhite
+ name = "White suit"
+ path = /obj/item/clothing/under/suit_jacket/white
+
+/datum/gear/uniform/assistantformal
+ name = "Assistant's formal uniform"
+ path = /obj/item/clothing/under/assistantformal
+
+/datum/gear/uniform/maidcostume
+ name = "Maid costume"
+ path = /obj/item/clothing/under/maid
+
+/datum/gear/uniform/mailmanuniform
+ name = "Mailman's jumpsuit"
+ path = /obj/item/clothing/under/rank/mailman
+
+/datum/gear/uniform/skirt
+ subtype_path = /datum/gear/uniform/skirt
+ subtype_cost_overlap = FALSE
+
+/datum/gear/uniform/skirt/black
+ name = "Black skirt"
+ path = /obj/item/clothing/under/skirt/black
+
+/datum/gear/uniform/skirt/blue
+ name = "Blue skirt"
+ path = /obj/item/clothing/under/skirt/blue
+
+/datum/gear/uniform/skirt/red
+ name = "Red skirt"
+ path = /obj/item/clothing/under/skirt/red
+
+/datum/gear/uniform/skirt/purple
+ name = "Purple skirt"
+ path = /obj/item/clothing/under/skirt/purple
+
+/datum/gear/uniform/skirt/kilt
+ name = "Kilt"
+ path = /obj/item/clothing/under/kilt
+
+/datum/gear/uniform/pants
+ subtype_path = /datum/gear/uniform/pants
+ sort_category = "Pants"
+
+/datum/gear/uniform/pants/camoshorts
+ name = "Camo Pants"
+ path = /obj/item/clothing/under/pants/camo
+
+/datum/gear/uniform/pants/bjeans
+ name = "Black Jeans"
+ path = /obj/item/clothing/under/pants/blackjeans
+
+/datum/gear/uniform/pants/cjeans
+ name = "Classic Jeans"
+ path = /obj/item/clothing/under/pants/classicjeans
+
+/datum/gear/uniform/pants/khaki
+ name = "Khaki Pants"
+ path = /obj/item/clothing/under/pants/khaki
+
+/datum/gear/uniform/pants/wpants
+ name = "White Pants"
+ path = /obj/item/clothing/under/pants/white
+
+/datum/gear/uniform/pants/rpants
+ name = "Red Pants"
+ path = /obj/item/clothing/under/pants/red
+
+/datum/gear/uniform/pants/tpants
+ name = "Tan Pants"
+ path = /obj/item/clothing/under/pants/tan
+
+/datum/gear/uniform/pants/trpants
+ name = "Track Pants"
+ path = /obj/item/clothing/under/pants/track
+
+/datum/gear/uniform/job
+ subtype_path = /datum/gear/uniform/job
+ subtype_cost_overlap = FALSE
+ sort_category = "Job Specific Uniformss"
+
+/datum/gear/uniform/job/sec
+ subtype_path = /datum/gear/uniform/job/sec
+
+/datum/gear/uniform/job/sec/navyblueuniformhos
+ name = "Head of Security navyblue uniform"
+ path = /obj/item/clothing/under/rank/head_of_security/navyblue
+ restricted_roles = list("Head of Security")
+
+/datum/gear/uniform/job/sec/navyblueuniformofficer
+ name = "security officer navyblue uniform"
+ path = /obj/item/clothing/under/rank/security/navyblue
+ restricted_roles = list("Security officer")
+
+/datum/gear/uniform/job/sec/navyblueuniformwarden
+ name = "Warden navyblue uniform"
+ path = /obj/item/clothing/under/rank/warden/navyblue
+ restricted_roles = list("Warden")
+
+/datum/gear/uniform/job/sec/secskirt
+ name = "Security skirt"
+ path = /obj/item/clothing/under/rank/security/skirt
+ restricted_roles = list("Security Officer", "Warden", "Head of Security")
+
+/datum/gear/uniform/job/sec/hosskirt
+ name = "Head of security's skirt"
+ path = /obj/item/clothing/under/rank/head_of_security/skirt
+ restricted_roles = list("Head of Security")
+
// Trekie things
+/datum/gear/uniform/trek
+ sort_category = "Trek Uniforms"
+ subtype_path = /datum/gear/uniform/trek
+ subtype_cost_overlap = FALSE
+
+/datum/gear/uniform/trek/cmd
+ subtype_path = /datum/gear/uniform/trek/cmd
+/datum/gear/uniform/trek/medsci
+ subtype_path = /datum/gear/uniform/trek/medsci
+/datum/gear/uniform/trek/eng
+ subtype_path = /datum/gear/uniform/trek/eng
+
//TOS
-/datum/gear/trekcmdtos
+/datum/gear/uniform/trek/cmd/tos
name = "TOS uniform, cmd"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/command
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
-/datum/gear/trekmedscitos
+/datum/gear/uniform/trek/medsci/tos
name = "TOS uniform, med/sci"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/medsci
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
-/datum/gear/trekengtos
+/datum/gear/uniform/trek/eng/tos
name = "TOS uniform, ops/sec"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/engsec
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
//TNG
-/datum/gear/trekcmdtng
+/datum/gear/uniform/trek/cmd/tng
name = "TNG uniform, cmd"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/command/next
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
-/datum/gear/trekmedscitng
+/datum/gear/uniform/trek/medsci/tng
name = "TNG uniform, med/sci"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/medsci/next
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
-/datum/gear/trekengtng
+/datum/gear/uniform/trek/eng/tng
name = "TNG uniform, ops/sec"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/engsec/next
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
//VOY
-/datum/gear/trekcmdvoy
+/datum/gear/uniform/trek/cmd/voy
name = "VOY uniform, cmd"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/command/voy
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
-/datum/gear/trekmedscivoy
+/datum/gear/uniform/trek/medsci/voy
name = "VOY uniform, med/sci"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/medsci/voy
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
-/datum/gear/trekengvoy
+/datum/gear/uniform/trek/eng/voy
name = "VOY uniform, ops/sec"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/engsec/voy
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
//DS9
-/datum/gear/trekcmdds9
+/datum/gear/uniform/trek/cmd/ds9
name = "DS9 uniform, cmd"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/command/ds9
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
-/datum/gear/trekmedscids9
+/datum/gear/uniform/trek/medsci/ds9
name = "DS9 uniform, med/sci"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/medsci/ds9
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
-/datum/gear/trekengds9
+/datum/gear/uniform/trek/eng/ds9
name = "DS9 uniform, ops/sec"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/engsec/ds9
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
//ENT
-/datum/gear/trekcmdent
+/datum/gear/uniform/trek/cmd/ent
name = "ENT uniform, cmd"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/command/ent
restricted_roles = list("Head of Security","Captain","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer","Quartermaster")
-/datum/gear/trekmedscient
+/datum/gear/uniform/trek/medsci/ent
name = "ENT uniform, med/sci"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/medsci/ent
restricted_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist","Research Director","Scientist", "Roboticist")
-/datum/gear/trekengent
+/datum/gear/uniform/trek/eng/ent
name = "ENT uniform, ops/sec"
- category = slot_w_uniform
path = /obj/item/clothing/under/rank/trek/engsec/ent
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
diff --git a/modular_citadel/code/modules/client/loadout/mask.dm b/modular_citadel/code/modules/client/loadout/mask.dm
deleted file mode 100644
index 839502d99c..0000000000
--- a/modular_citadel/code/modules/client/loadout/mask.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/datum/gear/balaclava
- name = "Balaclava"
- category = slot_wear_mask
- path = /obj/item/clothing/mask/balaclava
diff --git a/modular_citadel/code/modules/client/loadout/neck.dm b/modular_citadel/code/modules/client/loadout/neck.dm
deleted file mode 100644
index 5e1e0017fe..0000000000
--- a/modular_citadel/code/modules/client/loadout/neck.dm
+++ /dev/null
@@ -1,84 +0,0 @@
-/datum/gear/bluetie
- name = "Blue tie"
- category = slot_neck
- path = /obj/item/clothing/neck/tie/blue
-
-/datum/gear/redtie
- name = "Red tie"
- category = slot_neck
- path = /obj/item/clothing/neck/tie/red
-
-/datum/gear/blacktie
- name = "Black tie"
- category = slot_neck
- path = /obj/item/clothing/neck/tie/black
-
-/datum/gear/collar
- name = "Collar"
- category = slot_neck
- path = /obj/item/clothing/neck/petcollar
-
-/datum/gear/scarf
- name = "White scarf"
- category = slot_neck
- path = /obj/item/clothing/neck/scarf
-
-/datum/gear/blackscarf
- name = "Black scarf"
- category = slot_neck
- path = /obj/item/clothing/neck/scarf/black
-
-/datum/gear/redscarf
- name = "Red scarf"
- category = slot_neck
- path = /obj/item/clothing/neck/scarf/red
-
-/datum/gear/greenscarf
- name = "Green scarf"
- category = slot_neck
- path = /obj/item/clothing/neck/scarf/green
-
-/datum/gear/darkbluescarf
- name = "Dark blue scarf"
- category = slot_neck
- path = /obj/item/clothing/neck/scarf/darkblue
-
-/datum/gear/purplescarf
- name = "Purple scarf"
- category = slot_neck
- path = /obj/item/clothing/neck/scarf/purple
-
-/datum/gear/yellowscarf
- name = "Yellow scarf"
- category = slot_neck
- path = /obj/item/clothing/neck/scarf/yellow
-
-/datum/gear/orangescarf
- name = "Orange scarf"
- category = slot_neck
- path = /obj/item/clothing/neck/scarf/orange
-
-/datum/gear/cyanscarf
- name = "Cyan scarf"
- category = slot_neck
- path = /obj/item/clothing/neck/scarf/cyan
-
-/datum/gear/stripedredscarf
- name = "Striped red scarf"
- category = slot_neck
- path = /obj/item/clothing/neck/stripedredscarf
-
-/datum/gear/stripedbluescarf
- name = "Striped blue scarf"
- category = slot_neck
- path = /obj/item/clothing/neck/stripedbluescarf
-
-/datum/gear/stripedgreenscarf
- name = "Striped green scarf"
- category = slot_neck
- path = /obj/item/clothing/neck/stripedgreenscarf
-
-/datum/gear/headphones
- name = "Headphones"
- category = slot_neck
- path = /obj/item/clothing/ears/headphones
diff --git a/modular_citadel/code/modules/client/preferences.dm b/modular_citadel/code/modules/client/preferences.dm
index b515264320..aba6f6b3dc 100644
--- a/modular_citadel/code/modules/client/preferences.dm
+++ b/modular_citadel/code/modules/client/preferences.dm
@@ -3,11 +3,7 @@
#define BACKPACK_SLOT_AMT 4
/datum/preferences
- //gear
- var/gear_points = 10
- var/list/gear_categories
- var/list/chosen_gear
- var/gear_tab
+
//pref vars
var/screenshake = 100
@@ -261,58 +257,7 @@
. += "Egg Size:[features["eggsack_egg_size"]]\" Diameter"
. += ""
*/
- . += ""
-
- if(current_tab == 3)
- if(!gear_tab)
- gear_tab = GLOB.loadout_items[1]
- . += ""
- . += "| [gear_points] loadout points remaining. \[Clear Loadout\] |
"
- . += "| You can only choose one item per category, unless it's an item that spawns in your backpack or hands. |
"
- . += "| "
- var/firstcat = TRUE
- for(var/i in GLOB.loadout_items)
- if(firstcat)
- firstcat = FALSE
- else
- . += " |"
- if(i == gear_tab)
- . += " [i] "
- else
- . += " [i] "
- . += " |
"
- . += "
|
"
- . += "| [gear_tab] |
"
- . += "
|
"
- . += "| Name | "
- . += "Cost | "
- . += "Restrictions | "
- . += "Description |
"
- for(var/j in GLOB.loadout_items[gear_tab])
- var/datum/gear/gear = GLOB.loadout_items[gear_tab][j]
- var/donoritem
- if(gear.ckeywhitelist && gear.ckeywhitelist.len)
- donoritem = TRUE
- if(user && user.client && user.client.ckey && !(gear.ckeywhitelist.Find(user.client.ckey)))
- continue
- var/class_link = ""
- if(gear.type in chosen_gear)
- class_link = "class='linkOn' href='?_src_=prefs;preference=gear;toggle_gear_path=[j];toggle_gear=0'"
- else if(donoritem)
- class_link = "class='linkOn' href='?_src_=prefs;preference=gear;toggle_gear_path=[j];toggle_gear=1'"
- else if(gear_points <= 0)
- class_link = "class='linkOff'"
- else
- class_link = "href='?_src_=prefs;preference=gear;toggle_gear_path=[j];toggle_gear=1'"
- . += "| [j] | "
- . += "[gear.cost] | "
- if(islist(gear.restricted_roles))
- if(gear.restricted_roles.len)
- . += ""
- . += gear.restricted_roles.Join(";")
- . += ""
- . += " | [gear.description] |
"
- . += "
"
+ . += ""
/datum/preferences/proc/process_citadel_prefs(mob/user, list/href_list)
if(href_list["task"] == "input")
@@ -726,35 +671,6 @@
else
user << "Invalid color. Your color is not bright enough."
- if(href_list["preference"] == "gear")
- if(href_list["clear_loadout"])
- LAZYCLEARLIST(chosen_gear)
- gear_points = initial(gear_points)
- save_preferences()
- if(href_list["select_category"])
- for(var/i in GLOB.loadout_items)
- if(i == href_list["select_category"])
- gear_tab = i
- if(href_list["toggle_gear_path"])
- var/datum/gear/G = GLOB.loadout_items[gear_tab][href_list["toggle_gear_path"]]
- if(!G)
- return
- var/toggle = text2num(href_list["toggle_gear"])
- if(!toggle && (G.type in chosen_gear))//toggling off and the item effectively is in chosen gear)
- LAZYREMOVE(chosen_gear, G.type)
- gear_points += initial(G.cost)
- else if(toggle && (!(is_type_in_ref_list(G, chosen_gear))))
- if(G.ckeywhitelist && G.ckeywhitelist.len && !(user.ckey in G.ckeywhitelist))
- to_chat(user, "This is an item intended for donator use only. You are not authorized to use this item.")
- return
- if(!is_loadout_slot_available(G.category))
- to_chat(user, "You cannot take this loadout, as you've already chosen too many of the same category!")
- return
- if(gear_points >= initial(G.cost))
- LAZYADD(chosen_gear, G.type)
- gear_points -= initial(G.cost)
-
-
/datum/preferences/proc/is_loadout_slot_available(slot)
var/list/L
LAZYINITLIST(L)
diff --git a/tgstation.dme b/tgstation.dme
index f79ca52b3c..16c163bde1 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2681,21 +2681,16 @@
#include "modular_citadel\code\modules\client\preferences.dm"
#include "modular_citadel\code\modules\client\preferences_savefile.dm"
#include "modular_citadel\code\modules\client\preferences_toggles.dm"
-#include "modular_citadel\code\modules\client\loadout\__donator.dm"
-#include "modular_citadel\code\modules\client\loadout\_medical.dm"
-#include "modular_citadel\code\modules\client\loadout\_security.dm"
-#include "modular_citadel\code\modules\client\loadout\_service.dm"
-#include "modular_citadel\code\modules\client\loadout\backpack.dm"
-#include "modular_citadel\code\modules\client\loadout\glasses.dm"
-#include "modular_citadel\code\modules\client\loadout\gloves.dm"
-#include "modular_citadel\code\modules\client\loadout\hands.dm"
-#include "modular_citadel\code\modules\client\loadout\head.dm"
+#include "modular_citadel\code\modules\client\loadout\gear_tweaks.dm"
#include "modular_citadel\code\modules\client\loadout\loadout.dm"
-#include "modular_citadel\code\modules\client\loadout\mask.dm"
-#include "modular_citadel\code\modules\client\loadout\neck.dm"
-#include "modular_citadel\code\modules\client\loadout\shoes.dm"
-#include "modular_citadel\code\modules\client\loadout\suit.dm"
-#include "modular_citadel\code\modules\client\loadout\uniform.dm"
+#include "modular_citadel\code\modules\client\loadout\loadout_accessories.dm"
+#include "modular_citadel\code\modules\client\loadout\loadout_cosmetics.dm"
+#include "modular_citadel\code\modules\client\loadout\loadout_donator.dm"
+#include "modular_citadel\code\modules\client\loadout\loadout_gloves.dm"
+#include "modular_citadel\code\modules\client\loadout\loadout_hat.dm"
+#include "modular_citadel\code\modules\client\loadout\loadout_shoes.dm"
+#include "modular_citadel\code\modules\client\loadout\loadout_suit.dm"
+#include "modular_citadel\code\modules\client\loadout\loadout_uniform.dm"
#include "modular_citadel\code\modules\client\verbs\who.dm"
#include "modular_citadel\code\modules\clothing\spacesuits\flightsuit.dm"
#include "modular_citadel\code\modules\clothing\suits\suits.dm"