diff --git a/citadel.dme b/citadel.dme
index f1966682adc..b84c2efa998 100644
--- a/citadel.dme
+++ b/citadel.dme
@@ -373,6 +373,7 @@
#include "code\__HELPERS\rendering\positioning.dm"
#include "code\__HELPERS\rendering\screen_loc.dm"
#include "code\__HELPERS\rendering\view.dm"
+#include "code\__HELPERS\sanitize\color.dm"
#include "code\__HELPERS\sanitize\datatypes.dm"
#include "code\__HELPERS\sanitize\list.dm"
#include "code\__HELPERS\sorts\__main.dm"
@@ -2117,6 +2118,7 @@
#include "code\modules\asset_cache\assets\legacy_nanomaps.dm"
#include "code\modules\asset_cache\assets\legacy_nanoui.dm"
#include "code\modules\asset_cache\assets\legacy_vstation.dm"
+#include "code\modules\asset_cache\assets\loadout.dm"
#include "code\modules\asset_cache\assets\materials.dm"
#include "code\modules\asset_cache\assets\moods.dm"
#include "code\modules\asset_cache\assets\notes.dm"
@@ -2918,6 +2920,30 @@
#include "code\modules\lighting\lighting_source.dm"
#include "code\modules\lighting\lighting_turf.dm"
#include "code\modules\lighting\~lighting_defs.dm"
+#include "code\modules\loadout\loadout_accessories.dm"
+#include "code\modules\loadout\loadout_cosmetics.dm"
+#include "code\modules\loadout\loadout_ears.dm"
+#include "code\modules\loadout\loadout_entry.dm"
+#include "code\modules\loadout\loadout_event_rewards.dm"
+#include "code\modules\loadout\loadout_eyes.dm"
+#include "code\modules\loadout\loadout_general.dm"
+#include "code\modules\loadout\loadout_gloves.dm"
+#include "code\modules\loadout\loadout_head.dm"
+#include "code\modules\loadout\loadout_mask.dm"
+#include "code\modules\loadout\loadout_role_restricted.dm"
+#include "code\modules\loadout\loadout_seasonal.dm"
+#include "code\modules\loadout\loadout_shoes.dm"
+#include "code\modules\loadout\loadout_smoking.dm"
+#include "code\modules\loadout\loadout_suit.dm"
+#include "code\modules\loadout\loadout_tweak.dm"
+#include "code\modules\loadout\loadout_uniform.dm"
+#include "code\modules\loadout\loadout_utility.dm"
+#include "code\modules\loadout\loadout_xeno.dm"
+#include "code\modules\loadout\accessories\armband.dm"
+#include "code\modules\loadout\accessories\cloak.dm"
+#include "code\modules\loadout\accessories\collar.dm"
+#include "code\modules\loadout\accessories\insignia.dm"
+#include "code\modules\loadout\accessories\utility.dm"
#include "code\modules\loot\pack.dm"
#include "code\modules\loot\table.dm"
#include "code\modules\loot\packs\archeology.dm"
@@ -4005,6 +4031,7 @@
#include "code\modules\preferences\preferences_setup.dm"
#include "code\modules\preferences\preferences_spawnpoints.dm"
#include "code\modules\preferences\preferences_toggle_procs.dm"
+#include "code\modules\preferences\preview.dm"
#include "code\modules\preferences\shims.dm"
#include "code\modules\preferences\ui.dm"
#include "code\modules\preferences\preference_setup\preference_category_new.dm"
@@ -4035,26 +4062,7 @@
#include "code\modules\preferences\preference_setup\helpers\language_pick.dm"
#include "code\modules\preferences\preference_setup\helpers\species_pick.dm"
#include "code\modules\preferences\preference_setup\keybindings\keybindings.dm"
-#include "code\modules\preferences\preference_setup\loadout\gear_tweaks.dm"
#include "code\modules\preferences\preference_setup\loadout\loadout.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_accessories.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_cosmetics.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_donator.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_ears.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_event_rewards.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_eyes.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_general.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_gloves.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_head.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_mask.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_role_restricted.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_seasonal.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_shoes.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_smoking.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_suit.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_uniform.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_utility.dm"
-#include "code\modules\preferences\preference_setup\loadout\loadout_xeno.dm"
#include "code\modules\preferences\preference_setup\occupation\occupation.dm"
#include "code\modules\preferences\preference_setup\vore\01_ears.dm"
#include "code\modules\preferences\preference_setup\vore\02_size.dm"
@@ -4776,6 +4784,7 @@
#include "code\modules\xenobio\items\slimepotions.dm"
#include "code\modules\xenobio\items\weapons.dm"
#include "code\modules\xenobio\machinery\processor.dm"
+#include "donator\legacy.dm"
#include "donator\unclebourbon\pmc_mask.dm"
#include "interface\interface.dm"
#include "interface\stylesheet.dm"
diff --git a/code/__DEFINES/_lists.dm b/code/__DEFINES/_lists.dm
index c8585eabf4e..0496f1c3ef8 100644
--- a/code/__DEFINES/_lists.dm
+++ b/code/__DEFINES/_lists.dm
@@ -4,7 +4,9 @@
/// Picks from the list, with some safeties, and returns the "default" arg if it fails
#define DEFAULTPICK(L, default) ((istype(L, /list) && L:len) ? pick(L) : default)
/// Ensures L is initailized after this point
-#define LAZYINITLIST(L) if (!L) L = list()
+#define LAZYINITLIST(L) if (isnull(L)) L = list()
+/// Ensures L is initialized and uses it as a rvalue
+#define LAZYGETLIST(L) (isnull(L)? (L = list()) : L)
/// Sets a L back to null iff it is empty
#define UNSETEMPTY(L) if (L && !length(L)) L = null
/// Removes I from list L, and sets I to null if it is now empty
diff --git a/code/__DEFINES/loadout.dm b/code/__DEFINES/loadout.dm
index 067646d887d..97541ba9432 100644
--- a/code/__DEFINES/loadout.dm
+++ b/code/__DEFINES/loadout.dm
@@ -18,3 +18,33 @@
#define LOADOUT_CATEGORY_UNIFORMS "Uniforms and Casual Dress"
#define LOADOUT_CATEGORY_UTILITY "Utility"
#define LOADOUT_CATEGORY_XENOWEAR "Xenowear"
+
+/// allow customizing name
+#define LOADOUT_CUSTOMIZE_NAME (1<<0)
+/// allow customizing desc
+#define LOADOUT_CUSTOMIZE_DESC (1<<1)
+/// allow customizing color
+#define LOADOUT_CUSTOMIZE_COLOR (1<<2)
+
+DEFINE_BITFIELD(loadout_customize_flags, list(
+ BITFIELD(LOADOUT_CUSTOMIZE_NAME),
+ BITFIELD(LOADOUT_CUSTOMIZE_DESC),
+ BITFIELD(LOADOUT_CUSTOMIZE_COLOR),
+))
+
+// *DO NOT RAISE THIS. This is for performance reasons.* //
+#define LOADOUT_MAX_SLOTS 10
+#define LOADOUT_SLOT_NAME_LENGTH 32
+#define LOADOUT_MAX_ITEMS 30
+/// Used in chargen for accessory loadout limit.
+#define LOADOUT_MAX_COST 20
+/// Used in chargen for accessory loadout limit on holidays.
+#define LOADOUT_MAX_COST_HOLIDAY_SPAM 30
+
+#define LOADOUT_SLOTDATA_NAME "name"
+#define LOADOUT_SLOTDATA_ENTRIES "entries"
+
+#define LOADOUT_ENTRYDATA_RENAME "rename"
+#define LOADOUT_ENTRYDATA_REDESC "redesc"
+#define LOADOUT_ENTRYDATA_RECOLOR "recolor"
+#define LOADOUT_ENTRYDATA_TWEAKS "tweaks"
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 28f014d0e74..f2f291c5745 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -47,10 +47,6 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
// Some arbitrary defines to be used by self-pruning global lists. (see master_controller)
/// Used to trigger removal from a processing list.
#define PROCESS_KILL 26
-/// Used in chargen for accessory loadout limit.
-#define MAX_GEAR_COST 20
-/// Used in chargen for accessory loadout limit on holidays.
-#define MAX_GEAR_COST_HOLIDAY_SPAM 30
// Shuttles.
diff --git a/code/__DEFINES/preferences/data_keys_character.dm b/code/__DEFINES/preferences/data_keys_character.dm
index 5f0374676c7..56154868157 100644
--- a/code/__DEFINES/preferences/data_keys_character.dm
+++ b/code/__DEFINES/preferences/data_keys_character.dm
@@ -11,6 +11,10 @@
#define CHARACTER_DATA_CULTURE "lore_culture"
#define CHARACTER_DATA_LANGUAGES "languages"
+//? Loadouts
+#define CHARACTER_DATA_LOADOUT "loadout"
+#define CHARACTER_DATA_LOADOUT_SLOT "loadout_slot"
+
//? Species
#define CHARACTER_DATA_REAL_SPECIES "real_species"
#define CHARACTER_DATA_CHAR_SPECIES "char_species"
diff --git a/code/__DEFINES/preferences/procs.dm b/code/__DEFINES/preferences/procs.dm
index e837ea2d44b..2c277f6ff8b 100644
--- a/code/__DEFINES/preferences/procs.dm
+++ b/code/__DEFINES/preferences/procs.dm
@@ -9,12 +9,21 @@
#define PREF_COPY_TO_FOR_RENDER (1<<3)
/// ignore species checks; you should check the species yourself!
#define PREF_COPY_TO_NO_CHECK_SPECIES (1<<4)
-/// ignore most loadout restrictions, and spawn loadout. do not use in spawn procs, SSjob/SSticker will do it instead!
-#define PREF_COPY_TO_UNRESTRICTED_LOADOUT (1<<5)
+/// ignore loadout role checks
+#define PREF_COPY_TO_LOADOUT_IGNORE_ROLE (1<<5)
+/// ignore all other loadout checks but whitelists
+#define PREF_COPY_TO_LOADOUT_IGNORE_CHECKS (1<<6)
+/// ignore loadout whitelist checks
+#define PREF_COPY_TO_LOADOUT_IGNORE_WHITELIST (1<<7)
+/// avoid making messages like "equipping x to you in loadout"
+#define PREF_COPY_TO_SILENT (1<<8)
/// DO NOT update icons
#define PREF_COPY_TO_DO_NOT_RENDER (1<<23)
+/// ignore most loadout restrictions, and spawn loadout. do not use in spawn procs, SSjob/SSticker will do it instead!
+#define PREF_COPY_TO_UNRESTRICTED_LOADOUT (PREF_COPY_TO_LOADOUT_IGNORE_ROLE | PREF_COPY_TO_LOADOUT_IGNORE_CHECKS | PREF_COPY_TO_LOADOUT_IGNORE_WHITELIST)
+
/// helper
#define PREF_COPYING_TO_CHECK_IS_SPAWNING(flags) (flags & (PREF_COPY_TO_FOR_ROUNDSTART | PREF_COPY_TO_FOR_LATEJOIN | PREF_COPY_TO_FOR_GHOSTROLE))
diff --git a/code/__DEFINES/preferences/savefiles.dm b/code/__DEFINES/preferences/savefiles.dm
index 7af4232f0ea..aca8be7c1e3 100644
--- a/code/__DEFINES/preferences/savefiles.dm
+++ b/code/__DEFINES/preferences/savefiles.dm
@@ -11,6 +11,6 @@
//* no reason to need it for global loading, and global migrations
//* should be low level anyways
#define CHARACTER_VERSION_MIN -1
-#define CHARACTER_VERSION_MAX 4
+#define CHARACTER_VERSION_MAX 5
/// what nulled version fields are considered; this basically makes them go through all migrations
#define CHARACTER_VERSION_LEGACY 0
diff --git a/code/__HELPERS/_global_objects.dm b/code/__HELPERS/_global_objects.dm
index 7d684d648f0..2527b66e736 100644
--- a/code/__HELPERS/_global_objects.dm
+++ b/code/__HELPERS/_global_objects.dm
@@ -1,3 +1,3 @@
-var/datum/gear_tweak/color/gear_tweak_free_color_choice = new()
+var/datum/loadout_tweak/color/gear_tweak_free_color_choice = new()
-var/datum/gear_tweak/collar_tag/gear_tweak_collar_tag = new()
+var/datum/loadout_tweak/collar_tag/gear_tweak_collar_tag = new()
diff --git a/code/__HELPERS/sanitize/color.dm b/code/__HELPERS/sanitize/color.dm
new file mode 100644
index 00000000000..2508edd5bc8
--- /dev/null
+++ b/code/__HELPERS/sanitize/color.dm
@@ -0,0 +1,48 @@
+/**
+ * probably, because the matrix isn't sanitized for numbers, just that it's the right length of list.
+ */
+/proc/sanitize_probably_a_byond_color(what, default = "#ffffff")
+ if(istext(what))
+ return sanitize_hexcolor(what, 6, 1, default)
+ if(islist(what))
+ var/list/cmatrix = what
+ switch(length(cmatrix))
+ if(9, 12, 16, 20)
+ return cmatrix
+ return default
+ return default
+
+/proc/sanitize_hexcolor(color, desired_format=3, include_crunch=0, default)
+ var/crunch = include_crunch ? "#" : ""
+ if(!istext(color))
+ color = ""
+
+ var/start = 1 + (text2ascii(color, 1) == 35)
+ var/len = length(color)
+ var/char = ""
+ // RRGGBB -> RGB but awful
+ var/convert_to_shorthand = desired_format == 3 && length_char(color) > 3
+
+ . = ""
+ var/i = start
+ while(i <= len)
+ char = color[i]
+ switch(text2ascii(char))
+ if(48 to 57) //numbers 0 to 9
+ . += char
+ if(97 to 102) //letters a to f
+ . += char
+ if(65 to 70) //letters A to F
+ . += lowertext(char)
+ else
+ break
+ i += length(char)
+ if(convert_to_shorthand && i <= len) //skip next one
+ i += length(color[i])
+
+ if(length_char(.) != desired_format)
+ if(default)
+ return default
+ return crunch + repeat_string(desired_format, "0")
+
+ return crunch + .
diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm
index 1ec7f8e2295..eab5e5df541 100644
--- a/code/__HELPERS/sanitize_values.dm
+++ b/code/__HELPERS/sanitize_values.dm
@@ -23,39 +23,3 @@
else
return default
return default
-
-/proc/sanitize_hexcolor(color, desired_format=3, include_crunch=0, default)
- var/crunch = include_crunch ? "#" : ""
- if(!istext(color))
- color = ""
-
- var/start = 1 + (text2ascii(color, 1) == 35)
- var/len = length(color)
- var/char = ""
- // RRGGBB -> RGB but awful
- var/convert_to_shorthand = desired_format == 3 && length_char(color) > 3
-
- . = ""
- var/i = start
- while(i <= len)
- char = color[i]
- switch(text2ascii(char))
- if(48 to 57) //numbers 0 to 9
- . += char
- if(97 to 102) //letters a to f
- . += char
- if(65 to 70) //letters A to F
- . += lowertext(char)
- else
- break
- i += length(char)
- if(convert_to_shorthand && i <= len) //skip next one
- i += length(color[i])
-
- if(length_char(.) != desired_format)
- if(default)
- return default
- return crunch + repeat_string(desired_format, "0")
-
- return crunch + .
-
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index 4f1b3b35c77..0ccd1f94526 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -28,7 +28,8 @@
// todo: extra is a bad param, we should instead just have linebreaks = n for n linebreaks, and a way to disable it.
/proc/sanitize(input, max_length = MAX_MESSAGE_LEN, encode = TRUE, trim = TRUE, extra = TRUE)
if(!input)
- return
+ // don't toss out blank input by nulling it
+ return input
if(max_length)
input = copytext(input,1,max_length)
diff --git a/code/controllers/configuration_old/configuration.dm b/code/controllers/configuration_old/configuration.dm
index 19b43e4cca2..1af300a08d5 100644
--- a/code/controllers/configuration_old/configuration.dm
+++ b/code/controllers/configuration_old/configuration.dm
@@ -92,7 +92,6 @@
var/cult_ghostwriter_req_cultists = 10 //...so long as this many cultists are active.
var/character_slots = 10 // The number of available character slots
- var/loadout_slots = 3 // The number of loadout slots per character
var/max_maint_drones = 5 //This many drones can spawn,
var/allow_drone_spawn = 1 //assuming the admin allow them to.
@@ -674,9 +673,6 @@
if("character_slots")
config_legacy.character_slots = text2num(value)
- if("loadout_slots")
- config_legacy.loadout_slots = text2num(value)
-
if("allow_drone_spawn")
config_legacy.allow_drone_spawn = text2num(value)
diff --git a/code/controllers/subsystem/job/_legacy_job_stuff.dm b/code/controllers/subsystem/job/_legacy_job_stuff.dm
index 150e076ed3e..875433e085a 100644
--- a/code/controllers/subsystem/job/_legacy_job_stuff.dm
+++ b/code/controllers/subsystem/job/_legacy_job_stuff.dm
@@ -246,8 +246,6 @@
return null
var/datum/role/job/job = get_job(rank)
- var/list/spawn_in_storage = list()
- var/real_species_name = H.species.name
if(!joined_late)
var/obj/landmark/spawnpoint/S = SSjob.get_roundstart_spawnpoint(H, H.client, job.type, job.faction)
@@ -270,60 +268,15 @@
H.buckled.forceMove(H.loc)
H.buckled.setDir(H.dir)
+ var/list/obj/item/loadout_rejected = list()
+ H.client.prefs.equip_loadout(
+ H,
+ joined_late? PREF_COPY_TO_FOR_LATEJOIN : PREF_COPY_TO_FOR_ROUNDSTART,
+ job,
+ reject = loadout_rejected
+ )
+
if(job)
-
- //Equip custom gear loadout.
- var/list/custom_equip_slots = list()
- var/list/custom_equip_leftovers = list()
- if(H.client.prefs.gear && H.client.prefs.gear.len && !(job.mob_type & JOB_SILICON))
- for(var/thing in H.client.prefs.gear)
- var/datum/gear/G = gear_datums[thing]
- if(!G) //Not a real gear datum (maybe removed, as this is loaded from their savefile)
- continue
-
- var/permitted
- // Check if it is restricted to certain roles
- if(G.allowed_roles)
- for(var/job_name in G.allowed_roles)
- if(job.title == job_name)
- permitted = 1
- else
- permitted = 1
-
- // Check if they're whitelisted for this gear (in alien whitelist? seriously?)
- if(G.legacy_species_lock && (real_species_name != G.legacy_species_lock))
- permitted = 0
-
- // If they aren't, tell them
- if(!permitted)
- to_chat(H, SPAN_WARNING("Your current species, job or whitelist status does not permit you to spawn with [G.display_name]!"))
- continue
-
- // Implants get special treatment
- if(G.slot == "implant")
- var/obj/item/implant/I = G.spawn_item(H, H.client.prefs.gear[G.display_name])
- I.invisibility = 100
- I.implant_loadout(H)
- continue
-
- // Try desperately (and sorta poorly) to equip the item. Now with increased desperation!
- // why are we stuffing metadata in assoclists?
- // because client might not be valid later down, so
- // we're gonna just grab it once and call it a day
- // sigh.
- var/metadata = H.client.prefs.gear[G.name]
- if(G.slot && !(G.slot in custom_equip_slots))
- if(G.slot == SLOT_ID_MASK || G.slot == SLOT_ID_SUIT || G.slot == SLOT_ID_HEAD)
- custom_equip_leftovers[thing] = metadata
- else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot))
- to_chat(H, SPAN_NOTICE("Equipping you with \the [G.display_name]!"))
- if(G.slot != /datum/inventory_slot_meta/abstract/attach_as_accessory)
- custom_equip_slots.Add(G.slot)
- else
- custom_equip_leftovers[thing] = metadata
- else
- spawn_in_storage[thing] = metadata
-
// Set up their account
job.setup_account(H)
@@ -337,20 +290,11 @@
if(!(job.mob_type & JOB_SILICON))
H.equip_post_job()
- // If some custom items could not be equipped before, try again now.
- for(var/thing in custom_equip_leftovers)
- var/datum/gear/G = gear_datums[thing]
- if(G.slot in custom_equip_slots)
- spawn_in_storage[thing] = custom_equip_leftovers[thing]
- else
- if(H.equip_to_slot_or_del(G.spawn_item(H, custom_equip_leftovers[thing]), G.slot))
- to_chat(H, "Equipping you with \the [G.display_name]!")
- custom_equip_slots.Add(G.slot)
- else
- spawn_in_storage[thing] = custom_equip_leftovers[thing]
else
to_chat(H, "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator.")
+ H.client.prefs.overflow_loadout(H, joined_late? PREF_COPY_TO_FOR_LATEJOIN : PREF_COPY_TO_FOR_ROUNDSTART, loadout_rejected)
+
H.job = rank
log_game("JOINED [key_name(H)] as \"[rank]\"")
log_game("SPECIES [key_name(H)] is a: \"[H.species.name]\"")
@@ -383,21 +327,6 @@
var/sound/announce_sound = (SSticker.current_state <= GAME_STATE_SETTING_UP) ? null : sound('sound/misc/boatswain.ogg', volume=20)
captain_announcement.Announce("All hands, [alt_title ? alt_title : "Facility Director"] [H.real_name] on deck!", new_sound = announce_sound, zlevel = H.z)
- //Deferred item spawning.
- if(spawn_in_storage && spawn_in_storage.len)
- var/obj/item/storage/B
- for(var/obj/item/storage/S in H.contents)
- B = S
- break
-
- if(!isnull(B))
- for(var/thing in spawn_in_storage)
- var/datum/gear/G = gear_datums[thing]
- G.spawn_item(B, spawn_in_storage[thing])
- to_chat(H, SPAN_NOTICE("Placing \the [G.display_name] in your [B.name]!"))
- else
- to_chat(H, SPAN_DANGER("Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug."))
-
if(istype(H)) //give humans wheelchairs, if they need them.
var/obj/item/organ/external/l_foot = H.get_organ("l_foot")
var/obj/item/organ/external/r_foot = H.get_organ("r_foot")
diff --git a/code/datums/underwear/underwear.dm b/code/datums/underwear/underwear.dm
index 1007706ca59..cbcd59d1de4 100644
--- a/code/datums/underwear/underwear.dm
+++ b/code/datums/underwear/underwear.dm
@@ -76,6 +76,6 @@
return
var/image/I = image(icon = icon, icon_state = icon_state, layer = layer)
- for(var/datum/gear_tweak/gt in tweaks)
+ for(var/datum/loadout_tweak/gt in tweaks)
gt.tweak_item(I, metadata && metadata["[gt]"] ? metadata["[gt]"] : gt.get_default())
return I
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index ff3836f1305..84d141067ee 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -67,7 +67,6 @@
/obj/item/implant/proc/implant_loadout(var/mob/living/carbon/human/H)
if(H)
if(handle_implant(H, initialize_loc))
- invisibility = initial(invisibility)
post_implant(H)
/obj/item/implant/Destroy()
diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm
index dfd2a0dbd63..3436f3cda46 100644
--- a/code/game/objects/structures/under_wardrobe.dm
+++ b/code/game/objects/structures/under_wardrobe.dm
@@ -19,14 +19,14 @@
var/item_name = UWI ? UWI.name : "None"
dat += "[UWC.name]: [item_name]"
if(UWI)
- for(var/datum/gear_tweak/gt in UWI.tweaks)
+ for(var/datum/loadout_tweak/gt in UWI.tweaks)
dat += " [gt.get_contents(get_metadata(H, UWC.name, gt))]"
dat += " (Remove)
"
dat = jointext(dat,null)
H << browse(dat, "window=wardrobe;size=400x200")
-/obj/structure/undies_wardrobe/proc/get_metadata(var/mob/living/carbon/human/H, var/underwear_category, var/datum/gear_tweak/gt)
+/obj/structure/undies_wardrobe/proc/get_metadata(var/mob/living/carbon/human/H, var/underwear_category, var/datum/loadout_tweak/gt)
var/metadata = H.all_underwear_metadata[underwear_category]
if(!metadata)
metadata = list()
@@ -38,7 +38,7 @@
metadata["[gt]"] = tweak_data
return tweak_data
-/obj/structure/undies_wardrobe/proc/set_metadata(var/mob/living/carbon/human/H, var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata)
+/obj/structure/undies_wardrobe/proc/set_metadata(var/mob/living/carbon/human/H, var/underwear_category, var/datum/loadout_tweak/gt, var/new_metadata)
var/list/metadata = H.all_underwear_metadata[underwear_category]
metadata["[gt]"] = new_metadata
@@ -75,7 +75,7 @@
var/underwear = href_list["underwear"]
if(!(underwear in H.all_underwear))
return
- var/datum/gear_tweak/gt = locate(href_list["tweak"])
+ var/datum/loadout_tweak/gt = locate(href_list["tweak"])
if(!gt)
return
var/new_metadata = gt.get_metadata(usr, get_metadata(H, underwear, gt), "Wardrobe Underwear Selection")
diff --git a/code/game/rendering/screen.dm b/code/game/rendering/screen.dm
index e53de02168c..c3360069f9c 100644
--- a/code/game/rendering/screen.dm
+++ b/code/game/rendering/screen.dm
@@ -532,4 +532,4 @@
/atom/movable/screen/setup_preview/bg/Click(params)
pref?.bgstate = next_list_item(pref.bgstate, pref.bgstate_options)
- pref?.update_preview_icon()
+ pref?.update_character_previews()
diff --git a/code/modules/asset_cache/assets/loadout.dm b/code/modules/asset_cache/assets/loadout.dm
new file mode 100644
index 00000000000..c0fe2af6c17
--- /dev/null
+++ b/code/modules/asset_cache/assets/loadout.dm
@@ -0,0 +1,16 @@
+/datum/asset/spritesheet/loadout
+ name = "loadout"
+
+/datum/asset/spritesheet/loadout/create_spritesheets()
+ for(var/name in gear_datums)
+ var/datum/loadout_entry/entry = gear_datums[name]
+ var/item_id = entry.legacy_get_id()
+ if(!item_id)
+ continue
+ var/item_path = entry.path
+ if(!ispath(item_path, /obj/item))
+ continue
+ var/obj/item/item_casted = item_path
+ var/item_icon = initial(item_casted.icon)
+ var/item_icon_state = initial(item_casted.icon_state)
+ Insert(item_id, item_icon, item_icon_state)
diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm
index 9e58bda55f1..a90c9eaabb9 100644
--- a/code/modules/clothing/under/_under.dm
+++ b/code/modules/clothing/under/_under.dm
@@ -83,12 +83,13 @@
if(isnull(snowflake_worn_state))
snowflake_worn_state = item_state_slots?[SLOT_ID_UNIFORM] || item_state || icon_state
var/mob/living/carbon/human/H = loc
- init_sensors(istype(H)? H : null)
+ if(istype(H))
+ addtimer(CALLBACK(src, PROC_REF(init_sensors), H), 0)
/obj/item/clothing/under/proc/init_sensors(mob/living/carbon/human/H)
if(has_sensors == UNIFORM_HAS_LOCKED_SENSORS)
return
- if(H)
+ if(istype(H))
switch(H.sensorpref)
if(1) sensor_mode = SUIT_SENSOR_OFF //Sensors off
if(2) sensor_mode = SUIT_SENSOR_BINARY //Sensors on binary
diff --git a/code/modules/clothing/under/accessories/xeno/tajara.dm b/code/modules/clothing/under/accessories/xeno/tajara.dm
index 7766fa5c997..11dd7664e1c 100644
--- a/code/modules/clothing/under/accessories/xeno/tajara.dm
+++ b/code/modules/clothing/under/accessories/xeno/tajara.dm
@@ -1,6 +1,7 @@
//Do not question I am not fixing ALL THE ICONS it works just leave it!
/obj/item/clothing/accessory/tajaran
+ abstract_type = /obj/item/clothing/accessory/tajaran
icon = 'icons/mob/clothing/species/tajaran/ties.dmi'
icon_override = 'icons/obj/clothing/species/tajaran/ties.dmi'
diff --git a/code/modules/holidays/christmas_loadout.dm b/code/modules/holidays/christmas_loadout.dm
index 32b6f28cc35..3abdbace15d 100644
--- a/code/modules/holidays/christmas_loadout.dm
+++ b/code/modules/holidays/christmas_loadout.dm
@@ -1,104 +1,104 @@
-/datum/gear/seasonal/christmas
- abstract_type = /datum/gear/seasonal/christmas
- sort_category = LOADOUT_CATEGORY_SEASONAL_CHRISTMAS
+/datum/loadout_entry/seasonal/christmas
+ abstract_type = /datum/loadout_entry/seasonal/christmas
+ category = LOADOUT_CATEGORY_SEASONAL_CHRISTMAS
-/datum/gear/seasonal/christmas/costumes
+/datum/loadout_entry/seasonal/christmas/costumes
name = "Gentleman's Cane"
path = /obj/item/staff/gentcane
// Head
-/datum/gear/seasonal/christmas/costumes/head
+/datum/loadout_entry/seasonal/christmas/costumes/head
name = "Costume Head - Santa Hat"
path = /obj/item/clothing/head/santa
slot = SLOT_ID_HEAD
-/datum/gear/seasonal/christmas/costumes/head/alternate
+/datum/loadout_entry/seasonal/christmas/costumes/head/alternate
name = "Costume Head - Santa Hat (Alternate)"
path = /obj/item/clothing/head/holiday
-/datum/gear/seasonal/christmas/costumes/head/elf
+/datum/loadout_entry/seasonal/christmas/costumes/head/elf
name = "Costume Head - Elf Hat"
path = /obj/item/clothing/head/santa/green
-/datum/gear/seasonal/christmas/costumes/head/elf/alternate
+/datum/loadout_entry/seasonal/christmas/costumes/head/elf/alternate
name = "Costume Head - Elf Hat (Alternate)"
path = /obj/item/clothing/head/holiday/green
-/datum/gear/seasonal/christmas/costumes/head/reindeer
+/datum/loadout_entry/seasonal/christmas/costumes/head/reindeer
name = "Costume Head - Reindeer Antlers"
path = /obj/item/clothing/head/reindeer
-/datum/gear/seasonal/christmas/costumes/head/snowman
+/datum/loadout_entry/seasonal/christmas/costumes/head/snowman
name = "Costume Head - Snowman"
path = /obj/item/clothing/head/snowman
// Mask
-/datum/gear/seasonal/christmas/costumes/mask
+/datum/loadout_entry/seasonal/christmas/costumes/mask
name = "Costume Mask - Pipe"
path = /obj/item/clothing/mask/smokable/pipe
slot = SLOT_ID_MASK
-/datum/gear/seasonal/christmas/costumes/mask/corncob
+/datum/loadout_entry/seasonal/christmas/costumes/mask/corncob
name = "Costume Mask - Corncob Pipe"
path = /obj/item/clothing/mask/smokable/pipe/cobpipe
// Suit
-/datum/gear/seasonal/christmas/costumes/suit
+/datum/loadout_entry/seasonal/christmas/costumes/suit
name = "Costume Suit - Santa"
path = /obj/item/clothing/suit/storage/toggle/holiday
slot = SLOT_ID_SUIT
-/datum/gear/seasonal/christmas/costumes/suit/elf
+/datum/loadout_entry/seasonal/christmas/costumes/suit/elf
name = "Costume Suit - Elf"
path = /obj/item/clothing/suit/storage/toggle/holiday/green
-/datum/gear/seasonal/christmas/costumes/suit/snowman
+/datum/loadout_entry/seasonal/christmas/costumes/suit/snowman
name = "Costume Suit - Snowman"
path = /obj/item/clothing/suit/snowman
-/datum/gear/seasonal/christmas/costumes/suit/drfreeze
+/datum/loadout_entry/seasonal/christmas/costumes/suit/drfreeze
name = "Costume Suit - Ice Scientist"
path = /obj/item/clothing/suit/drfreeze
// Uniform
-/datum/gear/seasonal/christmas/costumes/under
+/datum/loadout_entry/seasonal/christmas/costumes/under
name = "Costume Uniform - Santa"
path = /obj/item/clothing/under/christmas
slot = SLOT_ID_UNIFORM
-/datum/gear/seasonal/christmas/costumes/under/elf
+/datum/loadout_entry/seasonal/christmas/costumes/under/elf
name = "Costume Uniform - Elf"
path = /obj/item/clothing/under/christmas/green
-/datum/gear/seasonal/christmas/costumes/under/sexy_santa
+/datum/loadout_entry/seasonal/christmas/costumes/under/sexy_santa
name = "Costume Uniform - Sexy Santa"
path = /obj/item/clothing/under/christmasfem
-/datum/gear/seasonal/christmas/costumes/under/sexy_elf
+/datum/loadout_entry/seasonal/christmas/costumes/under/sexy_elf
name = "Costume Uniform - Sexy Elf"
path = /obj/item/clothing/under/christmasfem/green
-/datum/gear/seasonal/christmas/costumes/under/drfreeze
+/datum/loadout_entry/seasonal/christmas/costumes/under/drfreeze
name = "Costume Uniform - Ice Scientist"
path = /obj/item/clothing/under/drfreeze
// Shoes
-/datum/gear/seasonal/christmas/costumes/shoes
+/datum/loadout_entry/seasonal/christmas/costumes/shoes
name = "Costume Shoes - Santa Boots"
path = /obj/item/clothing/shoes/santa
slot = SLOT_ID_SHOES
-/datum/gear/seasonal/christmas/costumes/shoes/red
+/datum/loadout_entry/seasonal/christmas/costumes/shoes/red
name = "Costume Shoes - Santa Boots (Red)"
path = /obj/item/clothing/shoes/holiday
-/datum/gear/seasonal/christmas/costumes/shoes/elf
+/datum/loadout_entry/seasonal/christmas/costumes/shoes/elf
name = "Costume Shoes - Elf Boots"
path = /obj/item/clothing/shoes/holiday/green
/*
// Accessories - We don't seem to have any relevant accessories at the moment, but I don't want to wipe it just in case.
-/datum/gear/seasonal/halloween/costumes/accessory
+/datum/loadout_entry/seasonal/halloween/costumes/accessory
name = "Costume Accessories - Cueball Man"
path = /obj/item/clothing/accessory/wcoat
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
diff --git a/code/modules/holidays/halloween_loadout.dm b/code/modules/holidays/halloween_loadout.dm
index 518106dc64d..e0747155e26 100644
--- a/code/modules/holidays/halloween_loadout.dm
+++ b/code/modules/holidays/halloween_loadout.dm
@@ -1,477 +1,477 @@
-/datum/gear/seasonal/halloween
- abstract_type = /datum/gear/seasonal/halloween
- sort_category = LOADOUT_CATEGORY_SEASONAL_HALLOWEEN
+/datum/loadout_entry/seasonal/halloween
+ abstract_type = /datum/loadout_entry/seasonal/halloween
+ category = LOADOUT_CATEGORY_SEASONAL_HALLOWEEN
-/datum/gear/seasonal/halloween/costumes
+/datum/loadout_entry/seasonal/halloween/costumes
name = "Gentleman's Cane"
path = /obj/item/staff/gentcane
// Head
-/datum/gear/seasonal/halloween/costumes/head
+/datum/loadout_entry/seasonal/halloween/costumes/head
name = "Costume Head - Cat Ears"
path = /obj/item/clothing/head/kitty
slot = SLOT_ID_HEAD
-/datum/gear/seasonal/halloween/costumes/head/chicken
+/datum/loadout_entry/seasonal/halloween/costumes/head/chicken
name = "Costume Head - Chicken"
path = /obj/item/clothing/head/chicken
-/datum/gear/seasonal/halloween/costumes/head/gladiator
+/datum/loadout_entry/seasonal/halloween/costumes/head/gladiator
name = "Costume Head - Gladiator"
path = /obj/item/clothing/head/helmet/gladiator
-/datum/gear/seasonal/halloween/costumes/head/plague
+/datum/loadout_entry/seasonal/halloween/costumes/head/plague
name = "Costume Head - Plague Doctor"
path = /obj/item/clothing/head/plaguedoctorhat
-/datum/gear/seasonal/halloween/costumes/head/pirate
+/datum/loadout_entry/seasonal/halloween/costumes/head/pirate
name = "Costume Head - Pirate"
path = /obj/item/clothing/head/pirate
-/datum/gear/seasonal/halloween/costumes/head/russian
+/datum/loadout_entry/seasonal/halloween/costumes/head/russian
name = "Costume Head - Russian"
path = /obj/item/clothing/head/ushanka
-/datum/gear/seasonal/halloween/costumes/head/witchwig
+/datum/loadout_entry/seasonal/halloween/costumes/head/witchwig
name = "Costume Head - Witch (Wig)"
path = /obj/item/clothing/head/witchwig
-/datum/gear/seasonal/halloween/costumes/head/marisa
+/datum/loadout_entry/seasonal/halloween/costumes/head/marisa
name = "Costume Head - Wizard (Marisa)"
path = /obj/item/clothing/head/wizard/marisa/fake
-/datum/gear/seasonal/halloween/costumes/head/wizard
+/datum/loadout_entry/seasonal/halloween/costumes/head/wizard
name = "Costume Head - Wizard"
path = /obj/item/clothing/head/wizard/fake
-/datum/gear/seasonal/halloween/costumes/head/rice
+/datum/loadout_entry/seasonal/halloween/costumes/head/rice
name = "Costume Head - Rice"
path = /obj/item/clothing/head/rice
-/datum/gear/seasonal/halloween/costumes/head/lobster
+/datum/loadout_entry/seasonal/halloween/costumes/head/lobster
name = "Costume Head - Lobster"
path = /obj/item/clothing/head/lobster
-/datum/gear/seasonal/halloween/costumes/head/nemes
+/datum/loadout_entry/seasonal/halloween/costumes/head/nemes
name = "Costume Head - Nemes"
path = /obj/item/clothing/head/nemes
-/datum/gear/seasonal/halloween/costumes/head/pharaoh
+/datum/loadout_entry/seasonal/halloween/costumes/head/pharaoh
name = "Costume Head - Pharaoh"
path = /obj/item/clothing/head/pharaoh
-/datum/gear/seasonal/halloween/costumes/head/scarecrow
+/datum/loadout_entry/seasonal/halloween/costumes/head/scarecrow
name = "Costume Head - Scarecrow"
path = /obj/item/clothing/head/scarecrow
-/datum/gear/seasonal/halloween/costumes/head/widehat_red
+/datum/loadout_entry/seasonal/halloween/costumes/head/widehat_red
name = "Costume Head - Pimp"
path = /obj/item/clothing/head/widehat_red
-/datum/gear/seasonal/halloween/costumes/head/telegram
+/datum/loadout_entry/seasonal/halloween/costumes/head/telegram
name = "Costume Head - Singing Telegram"
path = /obj/item/clothing/head/telegram
-/datum/gear/seasonal/halloween/costumes/head/bunny
+/datum/loadout_entry/seasonal/halloween/costumes/head/bunny
name = "Costume Head - Bunny"
path = /obj/item/clothing/head/bunny
-/datum/gear/seasonal/halloween/costumes/head/maid
+/datum/loadout_entry/seasonal/halloween/costumes/head/maid
name = "Costume Head - Maid"
path = /obj/item/clothing/head/headband/maid
-/datum/gear/seasonal/halloween/costumes/head/ankh
+/datum/loadout_entry/seasonal/halloween/costumes/head/ankh
name = "Costume Head - Ankh"
path = /obj/item/clothing/head/ankh
-/datum/gear/seasonal/halloween/costumes/head/roman
+/datum/loadout_entry/seasonal/halloween/costumes/head/roman
name = "Costume Head - Roman Galea"
path = /obj/item/clothing/head/roman_replica
-/datum/gear/seasonal/halloween/costumes/head/romancent
+/datum/loadout_entry/seasonal/halloween/costumes/head/romancent
name = "Costume Head - Roman Crested Galea"
path = /obj/item/clothing/head/romancent_replica
-/datum/gear/seasonal/halloween/costumes/head/imperial
+/datum/loadout_entry/seasonal/halloween/costumes/head/imperial
name = "Costume Head - Imperial Soldier Helmet"
path = /obj/item/clothing/head/imperial_replica
-/datum/gear/seasonal/halloween/costumes/head/imperialofficer
+/datum/loadout_entry/seasonal/halloween/costumes/head/imperialofficer
name = "Costume Head - Imperial Officer Helmet"
path = /obj/item/clothing/head/imperial_officer_replica
-/datum/gear/seasonal/halloween/costumes/head/knight
+/datum/loadout_entry/seasonal/halloween/costumes/head/knight
name = "Costume Head - Knight"
path = /obj/item/clothing/head/medievalfake
-/datum/gear/seasonal/halloween/costumes/head/knight/blue
+/datum/loadout_entry/seasonal/halloween/costumes/head/knight/blue
name = "Costume Head - Knight (Blue)"
path = /obj/item/clothing/head/medievalfake/blue
-/datum/gear/seasonal/halloween/costumes/head/knight/green
+/datum/loadout_entry/seasonal/halloween/costumes/head/knight/green
name = "Costume Head - Knight (Green)"
path = /obj/item/clothing/head/medievalfake/green
-/datum/gear/seasonal/halloween/costumes/head/knight/orange
+/datum/loadout_entry/seasonal/halloween/costumes/head/knight/orange
name = "Costume Head - Knight (Orange)"
path = /obj/item/clothing/head/medievalfake/orange
-/datum/gear/seasonal/halloween/costumes/head/knight/red
+/datum/loadout_entry/seasonal/halloween/costumes/head/knight/red
name = "Costume Head - Knight (Red)"
path = /obj/item/clothing/head/medievalfake/red
-/datum/gear/seasonal/halloween/costumes/head/knight/crusader
+/datum/loadout_entry/seasonal/halloween/costumes/head/knight/crusader
name = "Costume Head - Knight Crusader"
path = /obj/item/clothing/head/medievalfake/crusader
-/datum/gear/seasonal/halloween/costumes/head/knight/crusader/horned
+/datum/loadout_entry/seasonal/halloween/costumes/head/knight/crusader/horned
name = "Costume Head - Knight Crusader (Horned)"
path = /obj/item/clothing/head/medievalfake/crusader/horned
-/datum/gear/seasonal/halloween/costumes/head/knight/crusader/templar
+/datum/loadout_entry/seasonal/halloween/costumes/head/knight/crusader/templar
name = "Costume Head - Knight Crusader (Templar)"
path = /obj/item/clothing/head/medievalfake/crusader/templar
-/datum/gear/seasonal/halloween/costumes/head/knight/crusader/winged
+/datum/loadout_entry/seasonal/halloween/costumes/head/knight/crusader/winged
name = "Costume Head - Knight Crusader (Winged)"
path = /obj/item/clothing/head/medievalfake/crusader/winged
// Mask
-/datum/gear/seasonal/halloween/costumes/mask
+/datum/loadout_entry/seasonal/halloween/costumes/mask
name = "Costume Mask - Fake Moustache"
path = /obj/item/clothing/mask/fakemoustache
slot = SLOT_ID_MASK
-/datum/gear/seasonal/halloween/costumes/mask/plague
+/datum/loadout_entry/seasonal/halloween/costumes/mask/plague
name = "Costume Mask - Plague Doctor"
path = /obj/item/clothing/mask/gas/plaguedoctor
-/datum/gear/seasonal/halloween/costumes/mask/owl
+/datum/loadout_entry/seasonal/halloween/costumes/mask/owl
name = "Costume Mask - The Owl"
path = /obj/item/clothing/mask/gas/owl_mask
-/datum/gear/seasonal/halloween/costumes/mask/sexyclown
+/datum/loadout_entry/seasonal/halloween/costumes/mask/sexyclown
name = "Costume Mask - Sexy Clown"
path = /obj/item/clothing/mask/gas/sexyclown
-/datum/gear/seasonal/halloween/costumes/mask/sexymime
+/datum/loadout_entry/seasonal/halloween/costumes/mask/sexymime
name = "Costume Mask - Sexy Mime"
path = /obj/item/clothing/mask/gas/sexymime
-/datum/gear/seasonal/halloween/costumes/mask/mummy
+/datum/loadout_entry/seasonal/halloween/costumes/mask/mummy
name = "Costume Mask - Mummy"
path = /obj/item/clothing/mask/gas/mummy
-/datum/gear/seasonal/halloween/costumes/mask/scarecrow
+/datum/loadout_entry/seasonal/halloween/costumes/mask/scarecrow
name = "Costume Mask - Scarecrow"
path = /obj/item/clothing/mask/gas/scarecrow
-/datum/gear/seasonal/halloween/costumes/mask/skeleton
+/datum/loadout_entry/seasonal/halloween/costumes/mask/skeleton
name = "Costume Mask - Skeleton"
path = /obj/item/clothing/mask/gas/skeleton
// Glasses
-/datum/gear/seasonal/halloween/costumes/glasses
+/datum/loadout_entry/seasonal/halloween/costumes/glasses
name = "Costume Eyes - Blindfold"
path = /obj/item/clothing/glasses/sunglasses/blindfold
slot = SLOT_ID_GLASSES
-/datum/gear/seasonal/halloween/costumes/glasses/monocole
+/datum/loadout_entry/seasonal/halloween/costumes/glasses/monocole
name = "Costume Eyes - Monocle"
path = /obj/item/clothing/glasses/monocle
-/datum/gear/seasonal/halloween/costumes/glasses/eyepatch
+/datum/loadout_entry/seasonal/halloween/costumes/glasses/eyepatch
name = "Costume Eyes - Eyepatch"
path = /obj/item/clothing/glasses/eyepatch
// Suit
-/datum/gear/seasonal/halloween/costumes/suit
+/datum/loadout_entry/seasonal/halloween/costumes/suit
name = "Costume Suit - Chicken"
path = /obj/item/clothing/suit/chickensuit
slot = SLOT_ID_SUIT
-/datum/gear/seasonal/halloween/costumes/suit/madscientist
+/datum/loadout_entry/seasonal/halloween/costumes/suit/madscientist
name = "Costume Suit - Mad Scientist Coat"
path = /obj/item/clothing/suit/storage/toggle/labcoat/mad
-/datum/gear/seasonal/halloween/costumes/suit/madscientist
+/datum/loadout_entry/seasonal/halloween/costumes/suit/madscientist
name = "Costume Suit - Mad Scientist Coat"
path = /obj/item/clothing/suit/storage/toggle/labcoat/mad/classic
-/datum/gear/seasonal/halloween/costumes/suit/carp
+/datum/loadout_entry/seasonal/halloween/costumes/suit/carp
name = "Costume Suit - Carp"
path = /obj/item/clothing/suit/storage/hooded/carp_costume
-/datum/gear/seasonal/halloween/costumes/suit/plague
+/datum/loadout_entry/seasonal/halloween/costumes/suit/plague
name = "Costume Suit - Plague Doctor"
path = /obj/item/clothing/suit/bio_suit/plaguedoctorsuit
-/datum/gear/seasonal/halloween/costumes/suit/pirate
+/datum/loadout_entry/seasonal/halloween/costumes/suit/pirate
name = "Costume Suit - Pirate"
path = /obj/item/clothing/suit/pirate
-/datum/gear/seasonal/halloween/costumes/suit/imperium
+/datum/loadout_entry/seasonal/halloween/costumes/suit/imperium
name = "Costume Suit - Imperium Monk"
path = /obj/item/clothing/suit/imperium_monk
-/datum/gear/seasonal/halloween/costumes/suit/holiday
+/datum/loadout_entry/seasonal/halloween/costumes/suit/holiday
name = "Costume Suit - Holiday Priest"
path = /obj/item/clothing/suit/holidaypriest
-/datum/gear/seasonal/halloween/costumes/suit/wizard
+/datum/loadout_entry/seasonal/halloween/costumes/suit/wizard
name = "Costume Suit - Wizard"
path = /obj/item/clothing/suit/wizrobe/fake
-/datum/gear/seasonal/halloween/costumes/suit/wizard/marisa
+/datum/loadout_entry/seasonal/halloween/costumes/suit/wizard/marisa
name = "Costume Suit - Wizard (Marisa)"
path = /obj/item/clothing/suit/wizrobe/marisa/fake
-/datum/gear/seasonal/halloween/costumes/suit/bee
+/datum/loadout_entry/seasonal/halloween/costumes/suit/bee
name = "Costume Suit - Bee"
path = /obj/item/clothing/suit/storage/hooded/bee_costume
-/datum/gear/seasonal/halloween/costumes/suit/flash
+/datum/loadout_entry/seasonal/halloween/costumes/suit/flash
name = "Costume Suit - flash"
path = /obj/item/clothing/suit/storage/hooded/flash_costume
-/datum/gear/seasonal/halloween/costumes/suit/pharoah
+/datum/loadout_entry/seasonal/halloween/costumes/suit/pharoah
name = "Costume Suit - Pharaoh"
path = /obj/item/clothing/suit/pharaoh
-/datum/gear/seasonal/halloween/costumes/suit/drfreeze
+/datum/loadout_entry/seasonal/halloween/costumes/suit/drfreeze
name = "Costume Suit - Ice Scientist"
path = /obj/item/clothing/suit/drfreeze
-/datum/gear/seasonal/halloween/costumes/suit/bunny
+/datum/loadout_entry/seasonal/halloween/costumes/suit/bunny
name = "Costume Suit - Bunny"
path = /obj/item/clothing/suit/bunny
-/datum/gear/seasonal/halloween/costumes/suit/imperial
+/datum/loadout_entry/seasonal/halloween/costumes/suit/imperial
name = "Costume Suit - Replica Imperial Soldier Armor"
path = /obj/item/clothing/suit/imperial_replica
-/datum/gear/seasonal/halloween/costumes/suit/imperial_officer
+/datum/loadout_entry/seasonal/halloween/costumes/suit/imperial_officer
name = "Costume Suit - Replica Imperial Officer Armor"
path = /obj/item/clothing/suit/imperial/officer_replica
-/datum/gear/seasonal/halloween/costumes/suit/knight
+/datum/loadout_entry/seasonal/halloween/costumes/suit/knight
name = "Costume Suit - Knight's Plate Armor"
path = /obj/item/clothing/suit/medievalfake
-/datum/gear/seasonal/halloween/costumes/suit/knight/blue
+/datum/loadout_entry/seasonal/halloween/costumes/suit/knight/blue
name = "Costume Suit - Knight's Plate Armor (Blue)"
path = /obj/item/clothing/suit/medievalfake/blue
-/datum/gear/seasonal/halloween/costumes/suit/knight/green
+/datum/loadout_entry/seasonal/halloween/costumes/suit/knight/green
name = "Costume Suit - Knight's Plate Armor (Green)"
path = /obj/item/clothing/suit/medievalfake/green
-/datum/gear/seasonal/halloween/costumes/suit/knight/orange
+/datum/loadout_entry/seasonal/halloween/costumes/suit/knight/orange
name = "Costume Suit - Knight's Plate Armor (Orange)"
path = /obj/item/clothing/suit/medievalfake/orange
-/datum/gear/seasonal/halloween/costumes/suit/knight/red
+/datum/loadout_entry/seasonal/halloween/costumes/suit/knight/red
name = "Costume Suit - Knight's Plate Armor (Red)"
path = /obj/item/clothing/suit/medievalfake/red
-/datum/gear/seasonal/halloween/costumes/suit/knight/crusader
+/datum/loadout_entry/seasonal/halloween/costumes/suit/knight/crusader
name = "Costume Suit - Knight's Crusader Armor"
path = /obj/item/clothing/suit/medievalfake/crusader
-/datum/gear/seasonal/halloween/costumes/suit/knight/crusader/dark
+/datum/loadout_entry/seasonal/halloween/costumes/suit/knight/crusader/dark
name = "Costume Suit - Knight's Crusader Armor (Dark)"
path = /obj/item/clothing/suit/medievalfake/crusader/dark
-/datum/gear/seasonal/halloween/costumes/suit/knight/crusader/cross
+/datum/loadout_entry/seasonal/halloween/costumes/suit/knight/crusader/cross
name = "Costume Suit - Knight's Crusader Armor (Cross)"
path = /obj/item/clothing/suit/medievalfake/crusader/cross
-/datum/gear/seasonal/halloween/costumes/suit/knight/crusader/hospitaller
+/datum/loadout_entry/seasonal/halloween/costumes/suit/knight/crusader/hospitaller
name = "Costume Suit - Knight's Crusader Armor (Hospitaller)"
path = /obj/item/clothing/suit/medievalfake/crusader/cross/hospitaller
-/datum/gear/seasonal/halloween/costumes/suit/knight/crusader/templar
+/datum/loadout_entry/seasonal/halloween/costumes/suit/knight/crusader/templar
name = "Costume Suit - Knight's Crusader Armor (Templar)"
path = /obj/item/clothing/suit/medievalfake/crusader/cross/templar
-/datum/gear/seasonal/halloween/costumes/suit/knight/crusader/teutonic
+/datum/loadout_entry/seasonal/halloween/costumes/suit/knight/crusader/teutonic
name = "Costume Suit - Knight's Crusader Armor (Teutonic)"
path = /obj/item/clothing/suit/medievalfake/crusader/cross/teutonic
// Uniform
-/datum/gear/seasonal/halloween/costumes/under
+/datum/loadout_entry/seasonal/halloween/costumes/under
name = "Costume Uniform - Gladiator"
path = /obj/item/clothing/under/gladiator
slot = SLOT_ID_UNIFORM
-/datum/gear/seasonal/halloween/costumes/under/schoolgirl
+/datum/loadout_entry/seasonal/halloween/costumes/under/schoolgirl
name = "Costume Uniform - Schoolgirl (Blue)"
path = /obj/item/clothing/under/schoolgirl
-/datum/gear/seasonal/halloween/costumes/under/schoolgirl/red
+/datum/loadout_entry/seasonal/halloween/costumes/under/schoolgirl/red
name = "Costume Uniform - Schoolgirl (Red)"
path = /obj/item/clothing/under/schoolgirl/red
-/datum/gear/seasonal/halloween/costumes/under/schoolgirl/green
+/datum/loadout_entry/seasonal/halloween/costumes/under/schoolgirl/green
name = "Costume Uniform - Schoolgirl (Green)"
path = /obj/item/clothing/under/schoolgirl/green
-/datum/gear/seasonal/halloween/costumes/under/schoolgirl/orange
+/datum/loadout_entry/seasonal/halloween/costumes/under/schoolgirl/orange
name = "Costume Uniform - Schoolgirl (Orange)"
path = /obj/item/clothing/under/schoolgirl/orange
-/datum/gear/seasonal/halloween/costumes/under/schoolgirl/pink
+/datum/loadout_entry/seasonal/halloween/costumes/under/schoolgirl/pink
name = "Costume Uniform - Schoolgirl (Pink)"
path = /obj/item/clothing/under/schoolgirl/pink
-/datum/gear/seasonal/halloween/costumes/under/scratch
+/datum/loadout_entry/seasonal/halloween/costumes/under/scratch
name = "Costume Uniform - Cueball Man"
path = /obj/item/clothing/under/scratch
-/datum/gear/seasonal/halloween/costumes/under/kilt
+/datum/loadout_entry/seasonal/halloween/costumes/under/kilt
name = "Costume Uniform - Kilt"
path = /obj/item/clothing/under/kilt
-/datum/gear/seasonal/halloween/costumes/under/owl
+/datum/loadout_entry/seasonal/halloween/costumes/under/owl
name = "Costume Uniform - The Owl"
path = /obj/item/clothing/under/owl
-/datum/gear/seasonal/halloween/costumes/under/pirate
+/datum/loadout_entry/seasonal/halloween/costumes/under/pirate
name = "Costume Uniform - Pirate"
path = /obj/item/clothing/under/pirate
-/datum/gear/seasonal/halloween/costumes/under/soviet
+/datum/loadout_entry/seasonal/halloween/costumes/under/soviet
name = "Costume Uniform - Russian"
path = /obj/item/clothing/under/soviet
-/datum/gear/seasonal/halloween/costumes/under/sexyclown
+/datum/loadout_entry/seasonal/halloween/costumes/under/sexyclown
name = "Costume Uniform - Sexy Clown"
path = /obj/item/clothing/under/sexyclown
-/datum/gear/seasonal/halloween/costumes/under/sexymime
+/datum/loadout_entry/seasonal/halloween/costumes/under/sexymime
name = "Costume Uniform - Sexy Mime"
path = /obj/item/clothing/under/sexymime
-/datum/gear/seasonal/halloween/costumes/under/lobster
+/datum/loadout_entry/seasonal/halloween/costumes/under/lobster
name = "Costume Uniform - Lobster"
path = /obj/item/clothing/under/lobster
-/datum/gear/seasonal/halloween/costumes/under/mummy
+/datum/loadout_entry/seasonal/halloween/costumes/under/mummy
name = "Costume Uniform - Mummy"
path = /obj/item/clothing/under/mummy
-/datum/gear/seasonal/halloween/costumes/under/scarecrow
+/datum/loadout_entry/seasonal/halloween/costumes/under/scarecrow
name = "Costume Uniform - Scarecrow"
path = /obj/item/clothing/under/scarecrow
-/datum/gear/seasonal/halloween/costumes/under/skeleton
+/datum/loadout_entry/seasonal/halloween/costumes/under/skeleton
name = "Costume Uniform - Skeleton"
path = /obj/item/clothing/under/skeleton
-/datum/gear/seasonal/halloween/costumes/under/drfreeze
+/datum/loadout_entry/seasonal/halloween/costumes/under/drfreeze
name = "Costume Uniform - Ice Scientist"
path = /obj/item/clothing/under/drfreeze
-/datum/gear/seasonal/halloween/costumes/under/darkholme
+/datum/loadout_entry/seasonal/halloween/costumes/under/darkholme
name = "Costume Uniform - Leather Harness"
path = /obj/item/clothing/under/darkholme
-/datum/gear/seasonal/halloween/costumes/under/geisha
+/datum/loadout_entry/seasonal/halloween/costumes/under/geisha
name = "Costume Uniform - Geisha"
path = /obj/item/clothing/under/geisha
-/datum/gear/seasonal/halloween/costumes/under/telegram
+/datum/loadout_entry/seasonal/halloween/costumes/under/telegram
name = "Costume Uniform - Singing Telegram"
path = /obj/item/clothing/under/telegram
-/datum/gear/seasonal/halloween/costumes/under/red_mech
+/datum/loadout_entry/seasonal/halloween/costumes/under/red_mech
name = "Costume Uniform - Mechsuit (Red)"
path = /obj/item/clothing/under/red_mech
-/datum/gear/seasonal/halloween/costumes/under/white_mech
+/datum/loadout_entry/seasonal/halloween/costumes/under/white_mech
name = "Costume Uniform - Mechsuit (White)"
path = /obj/item/clothing/under/white_mech
-/datum/gear/seasonal/halloween/costumes/under/blue_mech
+/datum/loadout_entry/seasonal/halloween/costumes/under/blue_mech
name = "Costume Uniform - Mechsuit (Blue)"
path = /obj/item/clothing/under/blue_mech
-/datum/gear/seasonal/halloween/costumes/under/bsing
+/datum/loadout_entry/seasonal/halloween/costumes/under/bsing
name = "Costume Uniform - Blue Singer"
path = /obj/item/clothing/under/bsing
-/datum/gear/seasonal/halloween/costumes/under/ysing
+/datum/loadout_entry/seasonal/halloween/costumes/under/ysing
name = "Costume Uniform - Yellow Singer"
path = /obj/item/clothing/under/ysing
-/datum/gear/seasonal/halloween/costumes/under/maid
+/datum/loadout_entry/seasonal/halloween/costumes/under/maid
name = "Costume Uniform - Maid"
path = /obj/item/clothing/under/dress/maid
-/datum/gear/seasonal/halloween/costumes/under/maid2
+/datum/loadout_entry/seasonal/halloween/costumes/under/maid2
name = "Costume Uniform - Maid (Sexy)"
path = /obj/item/clothing/under/dress/maid/sexy
-/datum/gear/seasonal/halloween/costumes/under/maid3
+/datum/loadout_entry/seasonal/halloween/costumes/under/maid3
name = "Costume Uniform - Maid (Janitor)"
path = /obj/item/clothing/under/dress/maid/janitor
-/datum/gear/seasonal/halloween/costumes/under/roman
+/datum/loadout_entry/seasonal/halloween/costumes/under/roman
name = "Costume Uniform - Roman Lorica"
path = /obj/item/clothing/under/roman
-/datum/gear/seasonal/halloween/costumes/under/imperial
+/datum/loadout_entry/seasonal/halloween/costumes/under/imperial
name = "Costume Uniform - Imperial Soldier"
path = /obj/item/clothing/under/imperial
// Shoes
-/datum/gear/seasonal/halloween/costumes/shoes
+/datum/loadout_entry/seasonal/halloween/costumes/shoes
name = "Costume Shoes - Cueball Man"
path = /obj/item/clothing/shoes/white
slot = SLOT_ID_SHOES
-/datum/gear/seasonal/halloween/costumes/shoes/bsing
+/datum/loadout_entry/seasonal/halloween/costumes/shoes/bsing
name = "Costume Shoes - Blue Singer"
path = /obj/item/clothing/shoes/boots/bsing
-/datum/gear/seasonal/halloween/costumes/shoes/ysing
+/datum/loadout_entry/seasonal/halloween/costumes/shoes/ysing
name = "Costume Shoes - Yellow Singer"
path = /obj/item/clothing/shoes/boots/ysing
-/datum/gear/seasonal/halloween/costumes/shoes/roman
+/datum/loadout_entry/seasonal/halloween/costumes/shoes/roman
name = "Costume Shoes - Roman Caligae"
path = /obj/item/clothing/shoes/roman
// Accessories
-/datum/gear/seasonal/halloween/costumes/accessory
+/datum/loadout_entry/seasonal/halloween/costumes/accessory
name = "Costume Accessories - Cueball Man"
path = /obj/item/clothing/accessory/wcoat
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
-/datum/gear/seasonal/halloween/costumes/accessory/broom
+/datum/loadout_entry/seasonal/halloween/costumes/accessory/broom
name = "Costume Accessories - Witch Broom"
path = /obj/item/staff/broom
-/datum/gear/seasonal/halloween/costumes/accessory/staff
+/datum/loadout_entry/seasonal/halloween/costumes/accessory/staff
name = "Costume Accessories - Wizard Staff"
path = /obj/item/staff
-/datum/gear/seasonal/halloween/costumes/accessory/roman_shield
+/datum/loadout_entry/seasonal/halloween/costumes/accessory/roman_shield
name = "Costume Accessories - Replica Scutum"
path = /obj/item/shield/fluff/roman
-/datum/gear/seasonal/halloween/costumes/accessory/crusader
+/datum/loadout_entry/seasonal/halloween/costumes/accessory/crusader
name = "Costume Accessories - Crusader Tabard"
path = /obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade
-/datum/gear/seasonal/halloween/costumes/accessory/crusader/templar
+/datum/loadout_entry/seasonal/halloween/costumes/accessory/crusader/templar
name = "Costume Accessories - Crusader Tabard (Templar)"
path = /obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade/templar
-/datum/gear/seasonal/halloween/costumes/accessory/crusader/hospitaller
+/datum/loadout_entry/seasonal/halloween/costumes/accessory/crusader/hospitaller
name = "Costume Accessories - Crusader Tabard (Hospitaller)"
path = /obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade/hospitaller
-/datum/gear/seasonal/halloween/costumes/accessory/crusader/teutonic
+/datum/loadout_entry/seasonal/halloween/costumes/accessory/crusader/teutonic
name = "Costume Accessories - Crusader Tabard (Teutonic)"
path = /obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade/teutonic
diff --git a/code/modules/holidays/halloween_loadout_masquarade.dm b/code/modules/holidays/halloween_loadout_masquarade.dm
index 46a5ed400aa..e1d5b984704 100644
--- a/code/modules/holidays/halloween_loadout_masquarade.dm
+++ b/code/modules/holidays/halloween_loadout_masquarade.dm
@@ -19,15 +19,15 @@
/**
* i decided it'd be really funny if we had pseudo antags running around as a reminder that our server could have antags (and therefore fun) but don't
*/
-/datum/gear/seasonal/masquarade
+/datum/loadout_entry/seasonal/masquarade
holiday_whitelist = list(HALLOWEEN)
- sort_category = "Halloween - Masquarade"
- abstract_type = /datum/gear/seasonal/masquarade
+ category = "Halloween - Masquarade"
+ abstract_type = /datum/loadout_entry/seasonal/masquarade
description = "This is not a real antagonist item. It is highly recommended you rename and set their description yourself using gear tweaks."
cost = 1
var/antag_name
-/datum/gear/seasonal/masquarade/New()
+/datum/loadout_entry/seasonal/masquarade/New()
if(isnull(name))
name = "[type]" // yeah we're saving by type, sue me lmao
if(antag_name)
@@ -37,11 +37,11 @@
/**
* syndicate
*/
-/datum/gear/seasonal/masquarade/syndicate
+/datum/loadout_entry/seasonal/masquarade/syndicate
antag_name = "Syndie"
- abstract_type = /datum/gear/seasonal/masquarade/syndicate
+ abstract_type = /datum/loadout_entry/seasonal/masquarade/syndicate
-/datum/gear/seasonal/masquarade/syndicate/sneaksuit_under
+/datum/loadout_entry/seasonal/masquarade/syndicate/sneaksuit_under
display_name = "Sneaksuit Uniform"
path = /obj/item/clothing/under/fake_sneaksuit
@@ -55,7 +55,7 @@
body_cover_flags = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
-/datum/gear/seasonal/masquarade/syndicate/sneaksuit_armor
+/datum/loadout_entry/seasonal/masquarade/syndicate/sneaksuit_armor
display_name = "Sneaksuit Armor"
path = /obj/item/clothing/suit/storage/fake_sneaksuit
@@ -69,7 +69,7 @@
body_cover_flags = UPPER_TORSO|LOWER_TORSO
cold_protection = UPPER_TORSO|LOWER_TORSO
-/datum/gear/seasonal/masquarade/syndicate/sneaksuit_gloves
+/datum/loadout_entry/seasonal/masquarade/syndicate/sneaksuit_gloves
display_name = "Sneaksuit Gloves"
path = /obj/item/clothing/gloves/fake_sneaksuit
@@ -83,7 +83,7 @@
body_cover_flags = HANDS
cold_protection = HANDS
-/datum/gear/seasonal/masquarade/syndicate/sneaksuit_helmet
+/datum/loadout_entry/seasonal/masquarade/syndicate/sneaksuit_helmet
display_name = "Sneaksuit Helmet"
path = /obj/item/clothing/head/fake_sneaksuit
@@ -98,7 +98,7 @@
clothing_flags = ALLOWINTERNALS
cold_protection = HEAD
-/datum/gear/seasonal/masquarade/syndicate/sneaksuit_shoes
+/datum/loadout_entry/seasonal/masquarade/syndicate/sneaksuit_shoes
display_name = "Sneaksuit Boots"
path = /obj/item/clothing/shoes/fake_sneaksuit
@@ -112,7 +112,7 @@
body_cover_flags = FEET
cold_protection = FEET
-/datum/gear/seasonal/masquarade/syndicate/sneaksuit_mask
+/datum/loadout_entry/seasonal/masquarade/syndicate/sneaksuit_mask
display_name = "Sneaksuit Mask"
path = /obj/item/clothing/mask/fake_sneaksuit
@@ -127,7 +127,7 @@
clothing_flags = ALLOWINTERNALS
cold_protection = HEAD
-/datum/gear/seasonal/masquarade/syndicate/contractor_helmet
+/datum/loadout_entry/seasonal/masquarade/syndicate/contractor_helmet
display_name = "Contractor Helmet"
path = /obj/item/clothing/head/fake_contractor
@@ -142,7 +142,7 @@
clothing_flags = ALLOWINTERNALS
cold_protection = HEAD
-/datum/gear/seasonal/masquarade/syndicate/contractor_suit
+/datum/loadout_entry/seasonal/masquarade/syndicate/contractor_suit
display_name = "Contractor Suit"
path = /obj/item/clothing/suit/storage/fake_contractor
@@ -156,28 +156,28 @@
body_cover_flags = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
-/datum/gear/seasonal/masquarade/syndicate/esword
+/datum/loadout_entry/seasonal/masquarade/syndicate/esword
display_name = "Energy Sword (toy)"
path = /obj/item/toy/sword
/*
-/datum/gear/seasonal/masquarade/syndicate/ebow
+/datum/loadout_entry/seasonal/masquarade/syndicate/ebow
display_name = "Energy Bow (toy)"
path = /obj/item/gun/
*/
-/datum/gear/seasonal/masquarade/syndicate/revolver
+/datum/loadout_entry/seasonal/masquarade/syndicate/revolver
display_name = ".357 revolver (capgun)"
path = /obj/item/gun/ballistic/revolver/capgun
/**
* changeling
*/
-/datum/gear/seasonal/masquarade/changeling
+/datum/loadout_entry/seasonal/masquarade/changeling
antag_name = "Changeling"
- abstract_type = /datum/gear/seasonal/masquarade/changeling
+ abstract_type = /datum/loadout_entry/seasonal/masquarade/changeling
-/datum/gear/seasonal/masquarade/changeling/chitin_hood
+/datum/loadout_entry/seasonal/masquarade/changeling/chitin_hood
display_name = "Chitin Hood"
path = /obj/item/clothing/head/fake_chitin
@@ -190,7 +190,7 @@
clothing_flags = ALLOWINTERNALS
cold_protection = HEAD
-/datum/gear/seasonal/masquarade/changeling/chitin_suit
+/datum/loadout_entry/seasonal/masquarade/changeling/chitin_suit
display_name = "Chitin Suit"
path = /obj/item/clothing/suit/storage/fake_chitin
@@ -202,7 +202,7 @@
body_cover_flags = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
-/datum/gear/seasonal/masquarade/changeling/flesh_hood
+/datum/loadout_entry/seasonal/masquarade/changeling/flesh_hood
display_name = "Flesh Hood"
path = /obj/item/clothing/head/fake_flesh
@@ -215,7 +215,7 @@
clothing_flags = ALLOWINTERNALS
cold_protection = HEAD
-/datum/gear/seasonal/masquarade/changeling/flesh_suit
+/datum/loadout_entry/seasonal/masquarade/changeling/flesh_suit
display_name = "Flesh Suit"
path = /obj/item/clothing/suit/storage/fake_flesh
@@ -227,7 +227,7 @@
body_cover_flags = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
-/datum/gear/seasonal/masquarade/changeling/arm_blade
+/datum/loadout_entry/seasonal/masquarade/changeling/arm_blade
display_name = "Arm Blade"
path = /obj/item/toy/armblade
@@ -240,7 +240,7 @@
SLOT_ID_RIGHT_HAND = 'icons/antagonists/changeling/on_mob/right_hand.dmi'
)
-/datum/gear/seasonal/masquarade/changeling/tentacle
+/datum/loadout_entry/seasonal/masquarade/changeling/tentacle
display_name = "Tentacle"
path = /obj/item/toy/tentacle
@@ -253,7 +253,7 @@
SLOT_ID_RIGHT_HAND = 'icons/antagonists/changeling/on_mob/right_hand.dmi'
)
-/datum/gear/seasonal/masquarade/changeling/shield
+/datum/loadout_entry/seasonal/masquarade/changeling/shield
display_name = "Shield"
path = /obj/item/toy/flesh_shield
@@ -269,11 +269,11 @@
/**
* clockcult
*/
-/datum/gear/seasonal/masquarade/clockcult
+/datum/loadout_entry/seasonal/masquarade/clockcult
antag_name = "Clockcult"
- abstract_type = /datum/gear/seasonal/masquarade/clockcult
+ abstract_type = /datum/loadout_entry/seasonal/masquarade/clockcult
-/datum/gear/seasonal/masquarade/clockcult/helmet
+/datum/loadout_entry/seasonal/masquarade/clockcult/helmet
display_name = "Helmet"
path = /obj/item/clothing/head/fake_brass
@@ -286,7 +286,7 @@
clothing_flags = ALLOWINTERNALS
cold_protection = HEAD
-/datum/gear/seasonal/masquarade/clockcult/suit
+/datum/loadout_entry/seasonal/masquarade/clockcult/suit
display_name = "Armor"
path = /obj/item/clothing/suit/storage/fake_brass
@@ -298,7 +298,7 @@
body_cover_flags = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
-/datum/gear/seasonal/masquarade/clockcult/boots
+/datum/loadout_entry/seasonal/masquarade/clockcult/boots
display_name = "Boots"
path = /obj/item/clothing/shoes/fake_brass
@@ -310,7 +310,7 @@
body_cover_flags = FEET
cold_protection = FEET
-/datum/gear/seasonal/masquarade/clockcult/gloves
+/datum/loadout_entry/seasonal/masquarade/clockcult/gloves
display_name = "Gloves"
path = /obj/item/clothing/gloves/fake_brass
@@ -322,7 +322,7 @@
body_cover_flags = HANDS
cold_protection = HANDS
-/datum/gear/seasonal/masquarade/clockcult/slab
+/datum/loadout_entry/seasonal/masquarade/clockcult/slab
display_name = "Slab"
path = /obj/item/toy/slab
@@ -335,7 +335,7 @@
SLOT_ID_RIGHT_HAND = 'icons/antagonists/clockcult/on_mob/right_hand.dmi'
)
-/datum/gear/seasonal/masquarade/clockcult/spear
+/datum/loadout_entry/seasonal/masquarade/clockcult/spear
display_name = "Spear"
path = /obj/item/toy/ratvar_spear
@@ -348,7 +348,7 @@
SLOT_ID_RIGHT_HAND = 'icons/antagonists/clockcult/on_mob/right_hand.dmi'
)
-/datum/gear/seasonal/masquarade/clockcult/shield
+/datum/loadout_entry/seasonal/masquarade/clockcult/shield
display_name = "Shield"
path = /obj/item/toy/ratvar_shield
@@ -361,7 +361,7 @@
SLOT_ID_RIGHT_HAND = 'icons/antagonists/clockcult/on_mob/right_hand.dmi'
)
-/datum/gear/seasonal/masquarade/clockcult/claw
+/datum/loadout_entry/seasonal/masquarade/clockcult/claw
display_name = "Claw"
path = /obj/item/toy/ratvar_claw
@@ -374,7 +374,7 @@
SLOT_ID_RIGHT_HAND = 'icons/antagonists/clockcult/on_mob/right_hand.dmi'
)
-/datum/gear/seasonal/masquarade/clockcult/visor
+/datum/loadout_entry/seasonal/masquarade/clockcult/visor
display_name = "Visor"
path = /obj/item/clothing/glasses/fake_judicial
@@ -384,7 +384,7 @@
default_worn_icon = 'icons/antagonists/clockcult/on_mob/clothing.dmi'
icon_state = "judicial_visor_1"
-/datum/gear/seasonal/masquarade/clockcult/spectacles
+/datum/loadout_entry/seasonal/masquarade/clockcult/spectacles
display_name = "Spectacles"
path = /obj/item/clothing/glasses/fake_spectacles
@@ -397,11 +397,11 @@
/**
* cult
*/
-/datum/gear/seasonal/masquarade/cult
+/datum/loadout_entry/seasonal/masquarade/cult
antag_name = "Cult"
- abstract_type = /datum/gear/seasonal/masquarade/cult
+ abstract_type = /datum/loadout_entry/seasonal/masquarade/cult
-/datum/gear/seasonal/masquarade/cult/spear
+/datum/loadout_entry/seasonal/masquarade/cult/spear
display_name = "Halbard"
path = /obj/item/toy/blood_halbard
@@ -414,7 +414,7 @@
SLOT_ID_RIGHT_HAND = 'icons/antagonists/cult/on_mob/right_hand.dmi'
)
-/datum/gear/seasonal/masquarade/cult/shield
+/datum/loadout_entry/seasonal/masquarade/cult/shield
display_name = "Mirror Shield"
path = /obj/item/toy/mirror_shield
@@ -427,7 +427,7 @@
SLOT_ID_RIGHT_HAND = 'icons/antagonists/cult/on_mob/right_hand.dmi'
)
-/datum/gear/seasonal/masquarade/cult/hardsuit
+/datum/loadout_entry/seasonal/masquarade/cult/hardsuit
display_name = "Hardsuit"
path = /obj/item/clothing/suit/storage/hooded/fake_cult_hardsuit
@@ -449,7 +449,7 @@
clothing_flags = ALLOWINTERNALS
cold_protection = HEAD
-/datum/gear/seasonal/masquarade/cult/robes_new
+/datum/loadout_entry/seasonal/masquarade/cult/robes_new
display_name = "Robes (new)"
path = /obj/item/clothing/suit/storage/hooded/fake_cult_robes_new
@@ -470,7 +470,7 @@
body_cover_flags = HEAD
cold_protection = HEAD
-/datum/gear/seasonal/masquarade/cult/robes_old
+/datum/loadout_entry/seasonal/masquarade/cult/robes_old
display_name = "Robes (old)"
path = /obj/item/clothing/suit/storage/hooded/fake_cult_robes_old
@@ -491,18 +491,18 @@
body_cover_flags = HEAD
cold_protection = HEAD
-/datum/gear/seasonal/masquarade/cult/sword
+/datum/loadout_entry/seasonal/masquarade/cult/sword
display_name = "Sword"
path = /obj/item/toy/cultsword
/**
* heretic
*/
-/datum/gear/seasonal/masquarade/heretic
+/datum/loadout_entry/seasonal/masquarade/heretic
antag_name = "Heretic"
- abstract_type = /datum/gear/seasonal/masquarade/heretic
+ abstract_type = /datum/loadout_entry/seasonal/masquarade/heretic
-/datum/gear/seasonal/masquarade/heretic/robes
+/datum/loadout_entry/seasonal/masquarade/heretic/robes
display_name = "Robes"
path = /obj/item/clothing/suit/storage/hooded/fake_heretic
@@ -523,7 +523,7 @@
body_cover_flags = HEAD
cold_protection = HEAD
-/datum/gear/seasonal/masquarade/heretic/void_cloak
+/datum/loadout_entry/seasonal/masquarade/heretic/void_cloak
display_name = "Void Cloak"
path = /obj/item/clothing/suit/storage/hooded/fake_void
@@ -546,42 +546,42 @@
cold_protection = HEAD
/*
-/datum/gear/seasonal/masquarade/heretic/living_heart
+/datum/loadout_entry/seasonal/masquarade/heretic/living_heart
display_name = "Heart"
path = /obj/item/toy/heretic_heart
/obj/item/toy/heretic_heart
-/datum/gear/seasonal/masquarade/heretic/tome
+/datum/loadout_entry/seasonal/masquarade/heretic/tome
display_name = "Tome"
path = /obj/item/toy/heretic_tome
/obj/item/toy/heretic_tome
-/datum/gear/seasonal/masquarade/heretic/laughing_mask
+/datum/loadout_entry/seasonal/masquarade/heretic/laughing_mask
display_name = "Laughing Mask"
path = /obj/item/clothing/mask/fake_laughing_mask
/obj/item/clothing/mask/fake_laughing_mask
*/
-/datum/gear/seasonal/masquarade/heretic/blade
+/datum/loadout_entry/seasonal/masquarade/heretic/blade
display_name = "Eldritch Blade"
path = /obj/item/toy/heretic_blade
-/datum/gear/seasonal/masquarade/heretic/blade/ash
+/datum/loadout_entry/seasonal/masquarade/heretic/blade/ash
display_name = "Ash Blade"
path = /obj/item/toy/heretic_blade/ash
-/datum/gear/seasonal/masquarade/heretic/blade/flesh
+/datum/loadout_entry/seasonal/masquarade/heretic/blade/flesh
display_name = "Flesh Blade"
path = /obj/item/toy/heretic_blade/flesh
-/datum/gear/seasonal/masquarade/heretic/rust
+/datum/loadout_entry/seasonal/masquarade/heretic/rust
display_name = "Rust Blade"
path = /obj/item/toy/heretic_blade/rust
-/datum/gear/seasonal/masquarade/heretic/blade/void
+/datum/loadout_entry/seasonal/masquarade/heretic/blade/void
display_name = "Void Blade"
path = /obj/item/toy/heretic_blade/void
@@ -611,19 +611,19 @@
/**
* wizard
*/
-/datum/gear/seasonal/masquarade/wizard
+/datum/loadout_entry/seasonal/masquarade/wizard
antag_name = "Wizard"
- abstract_type = /datum/gear/seasonal/masquarade/wizard
+ abstract_type = /datum/loadout_entry/seasonal/masquarade/wizard
/**
* ninja
*/
-/datum/gear/seasonal/masquarade/ninja
+/datum/loadout_entry/seasonal/masquarade/ninja
antag_name = "Ninja"
- abstract_type = /datum/gear/seasonal/masquarade/ninja
+ abstract_type = /datum/loadout_entry/seasonal/masquarade/ninja
/*
-/datum/gear/seasonal/masquarade/ninja/suit
+/datum/loadout_entry/seasonal/masquarade/ninja/suit
display_name = "Suit"
path = /obj/item/clothing/suit/storage/hooded/fake_ninja
@@ -631,7 +631,7 @@
/obj/item/clothing/head/hood/fake_ninja
-/datum/gear/seasonal/masquarade/ninja/katana
+/datum/loadout_entry/seasonal/masquarade/ninja/katana
display_name = "Katana"
path = /obj/item/toy/ninja_katana
diff --git a/code/modules/loadout/accessories/armband.dm b/code/modules/loadout/accessories/armband.dm
new file mode 100644
index 00000000000..00cee556c24
--- /dev/null
+++ b/code/modules/loadout/accessories/armband.dm
@@ -0,0 +1,15 @@
+/datum/loadout_entry/accessory/armband
+ name = "Armband Selection"
+ path = /obj/item/clothing/accessory/armband
+
+/datum/loadout_entry/accessory/armband/New()
+ ..()
+ var/list/armbands = list()
+ for(var/armband in (typesof(/obj/item/clothing/accessory/armband) - typesof(/obj/item/clothing/accessory/armband/med/color)))
+ var/obj/item/clothing/accessory/armband_type = armband
+ armbands[initial(armband_type.name)] = armband_type
+ tweaks += new/datum/loadout_tweak/path(tim_sort(armbands, /proc/cmp_text_asc))
+
+/datum/loadout_entry/accessory/armband/colored
+ name = "Armband - Colorable"
+ path = /obj/item/clothing/accessory/armband/med/color
diff --git a/code/modules/loadout/accessories/cloak.dm b/code/modules/loadout/accessories/cloak.dm
new file mode 100644
index 00000000000..5010133954c
--- /dev/null
+++ b/code/modules/loadout/accessories/cloak.dm
@@ -0,0 +1,11 @@
+/datum/loadout_entry/accessory/halfcape
+ name = "Half Cape"
+ path = /obj/item/clothing/accessory/halfcape
+
+/datum/loadout_entry/accessory/fullcape
+ name = "Full Cape"
+ path = /obj/item/clothing/accessory/fullcape
+
+/datum/loadout_entry/accessory/sash
+ name = "Sash - Colorable"
+ path = /obj/item/clothing/accessory/sash
diff --git a/code/modules/loadout/accessories/collar.dm b/code/modules/loadout/accessories/collar.dm
new file mode 100644
index 00000000000..58006bfcf30
--- /dev/null
+++ b/code/modules/loadout/accessories/collar.dm
@@ -0,0 +1,47 @@
+/datum/loadout_entry/choker // A colorable choker
+ name = "Choker"
+ path = /obj/item/clothing/accessory/choker
+ slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
+ category = LOADOUT_CATEGORY_ACCESSORIES
+
+/datum/loadout_entry/collar
+ name = "Collar - Silver"
+ path = /obj/item/clothing/accessory/collar/silver
+ slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
+ category = LOADOUT_CATEGORY_ACCESSORIES
+
+/datum/loadout_entry/collar/New()
+ ..()
+ tweaks = list(gear_tweak_collar_tag)
+
+/datum/loadout_entry/collar/golden
+ name = "Collar - Golden"
+ path = /obj/item/clothing/accessory/collar/gold
+
+/datum/loadout_entry/collar/bell
+ name = "Collar - Bell"
+ path = /obj/item/clothing/accessory/collar/bell
+
+/datum/loadout_entry/collar/shock
+ name = "Collar - Shock"
+ path = /obj/item/clothing/accessory/collar/shock
+
+/datum/loadout_entry/collar/spike
+ name = "Collar - Spike"
+ path = /obj/item/clothing/accessory/collar/spike
+
+/datum/loadout_entry/collar/pink
+ name = "Collar - Pink"
+ path = /obj/item/clothing/accessory/collar/pink
+
+/datum/loadout_entry/collar/holo
+ name = "Collar - Holo"
+ path = /obj/item/clothing/accessory/collar/holo
+
+/datum/loadout_entry/collar/cow
+ name = "Collar - Cowbell"
+ path = /obj/item/clothing/accessory/collar/cowbell
+
+/datum/loadout_entry/collar/holo/indigestible
+ name = "Collar - Holo - Indigestible"
+ path = /obj/item/clothing/accessory/collar/holo/indigestible
diff --git a/code/modules/loadout/accessories/insignia.dm b/code/modules/loadout/accessories/insignia.dm
new file mode 100644
index 00000000000..70c78c19519
--- /dev/null
+++ b/code/modules/loadout/accessories/insignia.dm
@@ -0,0 +1,53 @@
+/datum/loadout_entry/accessory/insignia
+ name = "Insignia Selection"
+ path = /obj/item/clothing/accessory/oricon/department
+
+/datum/loadout_entry/accessory/insignia/New()
+ ..()
+ var/insignia = list()
+ insignia["Command - Crew"] = /obj/item/clothing/accessory/oricon/department/command/crew
+ insignia["Command - Crew Short"] = /obj/item/clothing/accessory/oricon/department/command/service
+ insignia["Command - Bands"] = /obj/item/clothing/accessory/oricon/department/command/fleet
+ insignia["Command - Echelons"] = /obj/item/clothing/accessory/oricon/department/command/marine
+ insignia["Blueshield - Crew"] = /obj/item/clothing/accessory/oricon/department/blueshield/crew
+ insignia["Blueshield - Crew Short"] = /obj/item/clothing/accessory/oricon/department/blueshield/service
+ insignia["Blueshield - Bands"] = /obj/item/clothing/accessory/oricon/department/blueshield/fleet
+ insignia["Blueshield - Echelons"] = /obj/item/clothing/accessory/oricon/department/blueshield/marine
+ insignia["Security - Crew"] = /obj/item/clothing/accessory/oricon/department/security/crew
+ insignia["Security - Crew Short"] = /obj/item/clothing/accessory/oricon/department/security/service
+ insignia["Security - Bands"] = /obj/item/clothing/accessory/oricon/department/security/fleet
+ insignia["Security - Echelons"] = /obj/item/clothing/accessory/oricon/department/security/marine
+ insignia["Medical - Crew"] = /obj/item/clothing/accessory/oricon/department/medical/crew
+ insignia["Medical - Crew Short"] = /obj/item/clothing/accessory/oricon/department/medical/service
+ insignia["Medical - Bands"] = /obj/item/clothing/accessory/oricon/department/medical/fleet
+ insignia["Medical - Echelons"] = /obj/item/clothing/accessory/oricon/department/medical/marine
+ insignia["Science - Crew"] = /obj/item/clothing/accessory/oricon/department/research/crew
+ insignia["Science - Crew Short"] = /obj/item/clothing/accessory/oricon/department/research/service
+ insignia["Science - Bands"] = /obj/item/clothing/accessory/oricon/department/research/fleet
+ insignia["Science - Echelons"] = /obj/item/clothing/accessory/oricon/department/research/marine
+ insignia["Engineering - Crew"] = /obj/item/clothing/accessory/oricon/department/engineering/crew
+ insignia["Engineering - Crew Short"] = /obj/item/clothing/accessory/oricon/department/engineering/service
+ insignia["Engineering - Bands"] = /obj/item/clothing/accessory/oricon/department/engineering/fleet
+ insignia["Engineering - Echelons"] = /obj/item/clothing/accessory/oricon/department/engineering/marine
+ insignia["Supply - Crew"] = /obj/item/clothing/accessory/oricon/department/supply/crew
+ insignia["Supply - Crew Short"] = /obj/item/clothing/accessory/oricon/department/supply/service
+ insignia["Supply - Bands"] = /obj/item/clothing/accessory/oricon/department/supply/fleet
+ insignia["Supply - Echelons"] = /obj/item/clothing/accessory/oricon/department/supply/marine
+ insignia["Service - Crew"] = /obj/item/clothing/accessory/oricon/department/service/crew
+ insignia["Service - Crew Short"] = /obj/item/clothing/accessory/oricon/department/service/service
+ insignia["Service - Bands"] = /obj/item/clothing/accessory/oricon/department/service/fleet
+ insignia["Service - Echelons"] = /obj/item/clothing/accessory/oricon/department/service/marine
+ tweaks += new/datum/loadout_tweak/path(insignia)
+
+/datum/loadout_entry/accessory/insigniacolored
+ name = "Insignia - Colorable"
+ path = /obj/item/clothing/accessory/oricon/department/colorable
+
+/datum/loadout_entry/accessory/insigniacolored/New()
+ ..()
+ var/insignia = list()
+ insignia["Colorable - Crew"] = /obj/item/clothing/accessory/oricon/department/colorable
+ insignia["Colorable - Crew Short"] = /obj/item/clothing/accessory/oricon/department/colorable/service
+ insignia["Colorable - Bands"] = /obj/item/clothing/accessory/oricon/department/colorable/fleet
+ insignia["Colorable - Echelons"] = /obj/item/clothing/accessory/oricon/department/colorable/marine
+ tweaks += new/datum/loadout_tweak/path(insignia)
diff --git a/code/modules/loadout/accessories/utility.dm b/code/modules/loadout/accessories/utility.dm
new file mode 100644
index 00000000000..7ec62f35d86
--- /dev/null
+++ b/code/modules/loadout/accessories/utility.dm
@@ -0,0 +1,29 @@
+/datum/loadout_entry/accessory/brown_drop_pouches
+ name = "Drop Pouches - Brown"
+ path = /obj/item/clothing/accessory/storage/brown_drop_pouches
+ cost = 2
+
+/datum/loadout_entry/accessory/black_drop_pouches
+ name = "Drop Pouches - Black"
+ path = /obj/item/clothing/accessory/storage/black_drop_pouches
+ cost = 2
+
+/datum/loadout_entry/accessory/white_drop_pouches
+ name = "Drop Pouches - White"
+ path = /obj/item/clothing/accessory/storage/white_drop_pouches
+ cost = 2
+
+/datum/loadout_entry/accessory/holster_selection
+ name = "Holster - Selection"
+ path = /obj/item/clothing/accessory/holster
+
+/datum/loadout_entry/accessory/holster_selection/New()
+ ..()
+ var/holstertype = list()
+ holstertype["Holster - Shoulder"] = /obj/item/clothing/accessory/holster
+ holstertype["Holster - Armpit"] = /obj/item/clothing/accessory/holster/armpit
+ holstertype["Holster - Waist"] = /obj/item/clothing/accessory/holster/waist
+ holstertype["Holster - Hip"] = /obj/item/clothing/accessory/holster/hip
+ holstertype["Holster - Leg"] = /obj/item/clothing/accessory/holster/leg
+ holstertype["Holster - Machete"] = /obj/item/clothing/accessory/holster/machete
+ tweaks += new/datum/loadout_tweak/path(holstertype)
diff --git a/code/modules/loadout/loadout_accessories.dm b/code/modules/loadout/loadout_accessories.dm
new file mode 100644
index 00000000000..3095c97b03a
--- /dev/null
+++ b/code/modules/loadout/loadout_accessories.dm
@@ -0,0 +1,314 @@
+
+/datum/loadout_entry/accessory
+ slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
+ category = LOADOUT_CATEGORY_ACCESSORIES
+ abstract_type = /datum/loadout_entry/accessory
+ path = /obj/item/clothing/accessory
+ cost = 1
+
+/datum/loadout_entry/accessory/wallet
+ name = "Wallet - Orange"
+ path = /obj/item/storage/wallet/random
+
+/datum/loadout_entry/accessory/wallet_poly
+ name = "Wallet - Colorable"
+ path = /obj/item/storage/wallet/poly
+ cost = 0
+
+
+/datum/loadout_entry/accessory/wallet/womens
+ name = "Wallet - Womens"
+ path = /obj/item/storage/wallet/womens
+ cost = 0
+
+/datum/loadout_entry/accessory/clutch
+ name = "Clutch Bag"
+ path = /obj/item/storage/briefcase/clutch
+ cost = 2
+
+/datum/loadout_entry/accessory/purse
+ name = "Purse"
+ path = /obj/item/storage/backpack/purse
+ cost = 3
+
+/datum/loadout_entry/accessory/wcoat
+ name = "Waistcoat - Selection"
+ path = /obj/item/clothing/accessory/wcoat
+
+/datum/loadout_entry/accessory/wcoat/New()
+ ..()
+ var/list/wcoats = list()
+ for(var/wcoat in typesof(/obj/item/clothing/accessory/wcoat))
+ var/obj/item/clothing/accessory/wcoat_type = wcoat
+ wcoats[initial(wcoat_type.name)] = wcoat_type
+ tweaks += new/datum/loadout_tweak/path(tim_sort(wcoats, /proc/cmp_text_asc))
+
+/datum/loadout_entry/accessory/tie
+ name = "Tie - Selection"
+ path = /obj/item/clothing/accessory/tie
+
+/datum/loadout_entry/accessory/tie/New()
+ ..()
+ var/list/ties = list()
+ for(var/tie in typesof(/obj/item/clothing/accessory/tie))
+ var/obj/item/clothing/accessory/tie_type = tie
+ ties[initial(tie_type.name)] = tie_type
+ tweaks += new/datum/loadout_tweak/path(tim_sort(ties, /proc/cmp_text_asc))
+
+/datum/loadout_entry/accessory/scarf
+ name = "Scarf - Selection"
+ path = /obj/item/clothing/accessory/scarf
+
+/datum/loadout_entry/accessory/scarf/New()
+ ..()
+ var/list/scarfs = list()
+ for(var/scarf in typesof(/obj/item/clothing/accessory/scarf))
+ var/obj/item/clothing/accessory/scarf_type = scarf
+ scarfs[initial(scarf_type.name)] = scarf_type
+ tweaks += new/datum/loadout_tweak/path(tim_sort(scarfs, /proc/cmp_text_asc))
+
+/datum/loadout_entry/accessory/scarfcolor
+ name = "Scarf Colorable"
+ path = /obj/item/clothing/accessory/scarf/white
+
+/datum/loadout_entry/accessory/jacket
+ name = "Suit Jacket Selection"
+ path = /obj/item/clothing/accessory/jacket
+
+/datum/loadout_entry/accessory/jacket/New()
+ ..()
+ var/list/jackets = list()
+ for(var/jacket in typesof(/obj/item/clothing/accessory/jacket))
+ var/obj/item/clothing/accessory/jacket_type = jacket
+ jackets[initial(jacket_type.name)] = jacket_type
+ tweaks += new/datum/loadout_tweak/path(tim_sort(jackets, /proc/cmp_text_asc))
+
+/datum/loadout_entry/accessory/suitvest
+ name = "Suit Vest"
+ path = /obj/item/clothing/accessory/vest
+
+/datum/loadout_entry/accessory/lifecrystal
+ name = "Life Crystal"
+ path = /obj/item/clothing/accessory/collar/lifecrystal
+ description = "A smart medical necklace that pings an offsite recovery facility and acts as a beacon, should you die."
+
+/datum/loadout_entry/accessory/fannypack
+ name = "Fannypack - Selection"
+ cost = 2
+ path = /obj/item/storage/belt/fannypack
+
+/datum/loadout_entry/accessory/fannypack/New()
+ ..()
+ var/list/fannys = list()
+ for(var/fanny in typesof(/obj/item/storage/belt/fannypack))
+ var/obj/item/storage/belt/fannypack/fanny_type = fanny
+ fannys[initial(fanny_type.name)] = fanny_type
+ tweaks += new/datum/loadout_tweak/path(tim_sort(fannys, /proc/cmp_text_asc))
+
+/datum/loadout_entry/accessory/chaps
+ name = "Chaps - Brown"
+ path = /obj/item/clothing/accessory/chaps
+
+/datum/loadout_entry/accessory/chaps/black
+ name = "Chaps - Black"
+ path = /obj/item/clothing/accessory/chaps/black
+
+/datum/loadout_entry/accessory/hawaii
+ name = "Hawaii Shirt"
+ path = /obj/item/clothing/accessory/hawaii
+
+/datum/loadout_entry/accessory/hawaii/New()
+ ..()
+ var/list/shirts = list()
+ shirts["Blue Hawaii Shirt"] = /obj/item/clothing/accessory/hawaii
+ shirts["Red hawaii Shirt"] = /obj/item/clothing/accessory/hawaii/red
+ shirts["Random Colored Hawaii Shirt"] = /obj/item/clothing/accessory/hawaii/random
+ tweaks += new/datum/loadout_tweak/path(shirts)
+
+
+/datum/loadout_entry/accessory/sweater
+ name = "Sweater - Selection"
+ path = /obj/item/clothing/accessory/sweater
+
+/datum/loadout_entry/accessory/sweater/New()
+ ..()
+ var/list/sweaters = list()
+ for(var/sweater in typesof(/obj/item/clothing/accessory/sweater))
+ var/obj/item/clothing/suit/sweater_type = sweater
+ sweaters[initial(sweater_type.name)] = sweater_type
+ tweaks += new/datum/loadout_tweak/path(tim_sort(sweaters, /proc/cmp_text_asc))
+
+/datum/loadout_entry/accessory/bracelet
+ abstract_type = /datum/loadout_entry/accessory/bracelet
+
+/datum/loadout_entry/accessory/bracelet/material
+ name = "Bracelet - Selection"
+ description = "Choose from a number of bracelets."
+ path = /obj/item/clothing/accessory/bracelet
+
+/datum/loadout_entry/accessory/bracelet/material/New()
+ ..()
+ var/bracelettype = list()
+ bracelettype["Bracelet - Steel"] = /obj/item/clothing/accessory/bracelet/material/steel
+ bracelettype["Bracelet - Iron"] = /obj/item/clothing/accessory/bracelet/material/iron
+ bracelettype["Bracelet - Silver"] = /obj/item/clothing/accessory/bracelet/material/silver
+ bracelettype["Bracelet - Gold"] = /obj/item/clothing/accessory/bracelet/material/gold
+ bracelettype["Bracelet - Platinum"] = /obj/item/clothing/accessory/bracelet/material/platinum
+ bracelettype["Bracelet - Glass"] = /obj/item/clothing/accessory/bracelet/material/glass
+ bracelettype["Bracelet - Wood"] = /obj/item/clothing/accessory/bracelet/material/wood
+ bracelettype["Bracelet - Plastic"] = /obj/item/clothing/accessory/bracelet/material/plastic
+ tweaks += new/datum/loadout_tweak/path(bracelettype)
+
+/datum/loadout_entry/accessory/bracelet/friendship
+ name = "Friendship Bracelet"
+ path = /obj/item/clothing/accessory/bracelet/friendship
+
+/datum/loadout_entry/accessory/locket
+ name = "Locket"
+ path = /obj/item/clothing/accessory/locket
+
+/datum/loadout_entry/accessory/necklace
+ name = "Customizable Necklace"
+ path = /obj/item/clothing/accessory/necklace
+ description = "A necklace. You can rename it and change its description in-game."
+
+/datum/loadout_entry/accessory/treatbox
+ name = "Box of Treats"
+ path = /obj/item/storage/box/treats
+ cost = 2
+
+/datum/loadout_entry/accessory/asym
+ name = "Asymmetric Jacket - Selection"
+ path = /obj/item/clothing/accessory/asymmetric
+
+/datum/loadout_entry/accessory/asym/New()
+ ..()
+ var/list/asyms = list()
+ for(var/asym in typesof(/obj/item/clothing/accessory/asymmetric))
+ var/obj/item/clothing/accessory/asymmetric_type = asym
+ asyms[initial(asymmetric_type.name)] = asymmetric_type
+ tweaks += new/datum/loadout_tweak/path(tim_sort(asyms, /proc/cmp_text_asc))
+
+/datum/loadout_entry/accessory/cowledvest
+ name = "Cowled Vest"
+ path = /obj/item/clothing/accessory/cowledvest
+
+/datum/loadout_entry/accessory/vmcrystal
+ name = "Life Crystal"
+ path = /obj/item/storage/box/vmcrystal
+ description = "A small necklace device that will notify an offsite cloning facility should you expire after activating it."
+
+/datum/loadout_entry/accessory/metal_necklace
+ name = "Metal Necklace"
+ description = "A shiny steel chain with a vague metallic object dangling off it."
+ path = /obj/item/clothing/accessory/metal_necklace
+
+/datum/loadout_entry/accessory/pilotpin
+ name = "Pilot - Qualification Pin"
+ description = "An iron pin denoting the qualification to fly OCG voidcraft."
+ path = /obj/item/clothing/accessory/oricon/specialty/pilot
+
+/datum/loadout_entry/accessory/flops
+ name = "Drop Straps"
+ description = "Wearing suspenders over shoulders? That's been so out for centuries and you know better."
+ path = /obj/item/clothing/accessory/flops
+
+/datum/loadout_entry/accessory/gaiter
+ name = "Neck Gaiter - Selection"
+ path = /obj/item/clothing/accessory/gaiter
+
+/datum/loadout_entry/accessory/gaiter/New()
+ ..()
+ var/list/gaiters = list()
+ for(var/gaiter in typesof(/obj/item/clothing/accessory/gaiter))
+ var/obj/item/clothing/accessory/gaiter_type = gaiter
+ gaiters[initial(gaiter_type.name)] = gaiter_type
+ tweaks += new/datum/loadout_tweak/path(tim_sort(gaiters, /proc/cmp_text_asc))
+
+/datum/loadout_entry/accessory/laconic
+ name = "Laconic Field Pouch System"
+ path = /obj/item/clothing/accessory/storage/laconic
+
+/datum/loadout_entry/accessory/buttonup
+ name = "Button Up Shirt"
+ path = /obj/item/clothing/accessory/buttonup
+ slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
+
+/datum/loadout_entry/accessory/buttonup/untucked
+ name = "Button Up Shirt - Untucked"
+ path = /obj/item/clothing/accessory/buttonup/untucked
+ slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
+
+/datum/loadout_entry/accessory/antediluvian
+ name = "Antediluvian Loincloth"
+ path = /obj/item/clothing/accessory/antediluvian
+
+/datum/loadout_entry/accessory/antediluvian_gloves
+ name = "Antediluvian Bracers"
+ path = /obj/item/clothing/accessory/antediluvian_gloves
+
+/datum/loadout_entry/accessory/mekkyaku
+ name = "Mekkyaku Turtleneck"
+ path = /obj/item/clothing/accessory/mekkyaku
+
+/datum/loadout_entry/accessory/armsock
+ name = "Fingerless Sleeves"
+ path = /obj/item/clothing/accessory/armsocks
+
+/datum/loadout_entry/accessory/armsock_left
+ name = "Fingerless Sleeve (Left)"
+ path = /obj/item/clothing/accessory/armsock_left
+
+/datum/loadout_entry/accessory/armsock_right
+ name = "Fingerless Sleeve (Right)"
+ path = /obj/item/clothing/accessory/armsock_right
+
+/datum/loadout_entry/accessory/disenchanted_talisman
+ name = "Disenchanted Bone Talisman"
+ path = /obj/item/clothing/accessory/disenchanted_talisman
+
+/datum/loadout_entry/accessory/legwarmers
+ name = "Thigh-Length Legwarmers"
+ path = /obj/item/clothing/accessory/legwarmers
+
+/datum/loadout_entry/accessory/legwarmersmedium
+ name = "Legwarmers"
+ path = /obj/item/clothing/accessory/legwarmersmedium
+
+/datum/loadout_entry/accessory/legwarmersshort
+ name = "Short Legwarmers"
+ path = /obj/item/clothing/accessory/legwarmersshort
+
+/datum/loadout_entry/accessory/halo_projector
+ name = "Holographic Halo Projector"
+ path = /obj/item/clothing/accessory/halo_projector
+
+/datum/loadout_entry/accessory/halo_projector/New()
+ ..()
+ var/list/halos = list()
+ for(var/obj/item/clothing/accessory/halo_projector/halo as anything in typesof(/obj/item/clothing/accessory/halo_projector))
+ halos[initial(halo.name)] = halo
+ tweaks += new/datum/loadout_tweak/path(tim_sort(halos, /proc/cmp_text_asc))
+
+//Tajaran wears
+
+/datum/loadout_entry/accessory/tajaran
+ abstract_type = /datum/loadout_entry/accessory/tajaran
+
+/datum/loadout_entry/accessory/tajaran/scarf
+ name = "Adhomian fur scarf"
+ description = "A selection of tajaran colored fur scarfs."
+ path = /obj/item/clothing/accessory/tajaran/scarf
+
+/datum/loadout_entry/accessory/tajaran/scarf/New()
+ ..()
+ var/list/tscarfs = list()
+ for(var/tscarf in (typesof(/obj/item/clothing/accessory/tajaran/scarf)))
+ var/obj/item/clothing/accessory/tajaran/scarf/tscarf_type = tscarf
+ tscarfs[initial(tscarf_type.name)] = tscarf_type
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tscarfs, /proc/cmp_text_asc))
+
+/datum/loadout_entry/accessory/civ_exos_mob
+ name = "medical exoframe"
+ description = "A cheap medical exoframe mass-produced by NanoTrasen and provided to employees who cannot function in gravity without assistance. (This is cosmetic, and does not actually do anything.)"
+ path = /obj/item/clothing/accessory/civ_exos_mob
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_cosmetics.dm b/code/modules/loadout/loadout_cosmetics.dm
similarity index 55%
rename from code/modules/preferences/preference_setup/loadout/loadout_cosmetics.dm
rename to code/modules/loadout/loadout_cosmetics.dm
index ae29b6f1ced..99c97dd29ac 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_cosmetics.dm
+++ b/code/modules/loadout/loadout_cosmetics.dm
@@ -1,44 +1,44 @@
-/datum/gear/cosmetic
+/datum/loadout_entry/cosmetic
name = "Purple Comb"
path = /obj/item/haircomb
- sort_category = LOADOUT_CATEGORY_COSMETICS
+ category = LOADOUT_CATEGORY_COSMETICS
-/datum/gear/cosmetic/lipstick
+/datum/loadout_entry/cosmetic/lipstick
name = "Lipstick - Red"
path = /obj/item/lipstick
-/datum/gear/cosmetic/lipstick/black
+/datum/loadout_entry/cosmetic/lipstick/black
name = "Lipstick - Black"
path = /obj/item/lipstick/black
-/datum/gear/cosmetic/lipstick/cyan
+/datum/loadout_entry/cosmetic/lipstick/cyan
name = "Lipstick - Cyan"
path = /obj/item/lipstick/cyan
-/datum/gear/cosmetic/lipstick/jade
+/datum/loadout_entry/cosmetic/lipstick/jade
name = "Lipstick - Jade"
path = /obj/item/lipstick/jade
-/datum/gear/cosmetic/lipstick/maroon
+/datum/loadout_entry/cosmetic/lipstick/maroon
name = "Lipstick - Maroon"
path = /obj/item/lipstick/maroon
-/datum/gear/cosmetic/lipstick/orange
+/datum/loadout_entry/cosmetic/lipstick/orange
name = "Lipstick - Orange"
path = /obj/item/lipstick/orange
-/datum/gear/cosmetic/lipstick/pink
+/datum/loadout_entry/cosmetic/lipstick/pink
name = "Lipstick - Pink"
path = /obj/item/lipstick/pink
-/datum/gear/cosmetic/lipstick/purple
+/datum/loadout_entry/cosmetic/lipstick/purple
name = "Lipstick - Purple"
path = /obj/item/lipstick/purple
-/datum/gear/cosmetic/lipstick/white
+/datum/loadout_entry/cosmetic/lipstick/white
name = "Lipstick - White"
path = /obj/item/lipstick/white
-/datum/gear/cosmetic/lipstick/yellow
+/datum/loadout_entry/cosmetic/lipstick/yellow
name = "Lipstick - Yellow"
path = /obj/item/lipstick/yellow
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_ears.dm b/code/modules/loadout/loadout_ears.dm
similarity index 85%
rename from code/modules/preferences/preference_setup/loadout/loadout_ears.dm
rename to code/modules/loadout/loadout_ears.dm
index caafdf735bd..21fd9d14bf2 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_ears.dm
+++ b/code/modules/loadout/loadout_ears.dm
@@ -1,26 +1,26 @@
// Stuff worn on the ears. Items here go in the "ears" sort_category but they must not use
// the SLOT_ID_RIGHT_EAR or SLOT_ID_LEFT_EAR as the slot, or else players will spawn with no headset.
-/datum/gear/ears
+/datum/loadout_entry/ears
name = "Earmuffs"
path = /obj/item/clothing/ears/earmuffs
- sort_category = LOADOUT_CATEGORY_EARS
+ category = LOADOUT_CATEGORY_EARS
slot = SLOT_ID_RIGHT_EAR
-/datum/gear/ears/headphones
+/datum/loadout_entry/ears/headphones
name = "Headphones"
path = /obj/item/clothing/ears/earmuffs/headphones
-/datum/gear/ears/circuitry
+/datum/loadout_entry/ears/circuitry
name = "Earwear - Circuitry"
path = /obj/item/clothing/ears/circuitry
-/datum/gear/ears/earrings
+/datum/loadout_entry/ears/earrings
name = "Earring Selection"
description = "A selection of eye-catching earrings."
path = /obj/item/clothing/ears/earring
-/datum/gear/ears/earrings/New()
+/datum/loadout_entry/ears/earrings/New()
..()
var/earrings = list()
earrings["Stud - Pearl"] = /obj/item/clothing/ears/earring/stud
@@ -40,18 +40,18 @@
earrings["Dangle - Gold"] = /obj/item/clothing/ears/earring/dangle/gold
earrings["Dangle - Platinum"] = /obj/item/clothing/ears/earring/dangle/platinum
earrings["Dangle - Diamond"] = /obj/item/clothing/ears/earring/dangle/diamond
- gear_tweaks += new/datum/gear_tweak/path(earrings)
+ tweaks += new/datum/loadout_tweak/path(earrings)
-/datum/gear/ears/laurel
+/datum/loadout_entry/ears/laurel
name = "Laurel Wreath Selection"
description = "A selection of leaf-like headwear."
path = /obj/item/clothing/ears/laurel
-/datum/gear/ears/laurel/New()
+/datum/loadout_entry/ears/laurel/New()
..()
var/laurel = list()
laurel["Laurel Wreath - Leaf"] = /obj/item/clothing/ears/laurel
laurel["Laurel Wreath - Silver"] = /obj/item/clothing/ears/laurel/silver
laurel["Laurel Wreath - Gold"] = /obj/item/clothing/ears/laurel/gold
- gear_tweaks += new/datum/gear_tweak/path(laurel)
+ tweaks += new/datum/loadout_tweak/path(laurel)
diff --git a/code/modules/loadout/loadout_entry.dm b/code/modules/loadout/loadout_entry.dm
new file mode 100644
index 00000000000..ca64bbdc684
--- /dev/null
+++ b/code/modules/loadout/loadout_entry.dm
@@ -0,0 +1,147 @@
+var/list/gear_datums = list()
+
+/proc/tgui_loadout_context()
+ . = list()
+ var/list/instances = list()
+ var/list/categories = list()
+ for(var/id in global.gear_datums)
+ var/datum/loadout_entry/entry = global.gear_datums[id]
+ LAZYDISTINCTADD(categories[entry.category], entry.subcategory)
+ var/list/instance = entry.tgui_entry_data()
+ instances[instance["id"]] = instance
+ .["instances"] = instances
+ .["categories"] = categories
+ .["maxEntries"] = LOADOUT_MAX_ITEMS
+
+/datum/loadout_entry
+ abstract_type = /datum/loadout_entry
+
+ /// unique id - must be unique (duh)
+ var/id
+ /// allowed standard customizations
+ var/loadout_customize_flags = LOADOUT_CUSTOMIZE_COLOR | LOADOUT_CUSTOMIZE_DESC | LOADOUT_CUSTOMIZE_NAME
+
+ /// name used for save/load don't change this or everyone loses it
+ var/name
+ /// what we display our name as. feel free to change this. defaults to name.
+ var/display_name
+ /// Description of this gear. If left blank will default to the description of the pathed item.
+ var/description
+ /// Path to item.
+ var/path
+ /// Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points.
+ var/cost = 1
+ /// Slot to equip to.
+ var/slot
+ /// Roles that can spawn with this item.
+ var/list/allowed_roles
+ // todo: remove in favor of uid locks and or just a better system.
+ // Term to check the whitelist for.
+ var/legacy_species_lock
+ /// category. can't be null.
+ var/category = LOADOUT_CATEGORY_GENERAL
+ /// subcategory. can't be null.
+ var/subcategory = "Miscellaneous"
+ /// List of datums which will alter the item after it has been spawned.
+ var/list/tweaks = list()
+ /// Does it go on the exploitable information list?
+ var/exploitable = 0
+ var/static/datum/loadout_tweak/color/gear_tweak_free_color_choice = new
+ var/list/ckeywhitelist
+ /// Seasonal whitelist - only create if holiday is active. NOTE: This IGNORES ALLOW_HOLIDAYS config! This is because character setup isn't subsystem-init-synced so we must init all of this dumb shit before config loads.
+ var/list/holiday_whitelist
+
+/datum/loadout_entry/New()
+ if(!description)
+ var/obj/O = path
+ description = initial(O.desc)
+ if(isnull(display_name))
+ display_name = name
+
+/**
+ * remove & regex this to just directly access the `.id` variable when we have id's on every entry.
+ */
+/datum/loadout_entry/proc/legacy_get_id()
+ return name
+
+/**
+ * encodes data for tgui/interfaces/CharacterSetup/CharacterLoadout.tsx's [LoadoutEntry] interface.
+ */
+/datum/loadout_entry/proc/tgui_entry_data()
+ var/list/tweaks = list()
+ for(var/datum/loadout_tweak/tweak as anything in src.tweaks)
+ tweaks += tweak.id
+ return list(
+ "name" = display_name || name,
+ "id" = legacy_get_id(),
+ "cost" = cost,
+ "category" = category,
+ "subcategory" = subcategory,
+ "customize" = loadout_customize_flags,
+ "desc" = description,
+ "tweaks" = tweaks,
+ )
+
+/datum/loadout_entry/proc/instantiate(atom/where, list/entry_data)
+ var/path = src.path
+ var/list/tweak_assembled = list()
+ for(var/datum/loadout_tweak/tweak as anything in tweaks)
+ var/tweak_data = entry_data[LOADOUT_ENTRYDATA_TWEAKS]?[tweak.id]
+ if(isnull(tweak_data))
+ continue
+ where = tweak.tweak_spawn_location(where, tweak_data)
+ path = tweak.tweak_spawn_path(path, tweak_data)
+ tweak_assembled[tweak] = tweak_data
+ var/obj/item/spawned = new path(where)
+ if((loadout_customize_flags & LOADOUT_CUSTOMIZE_NAME) && entry_data[LOADOUT_ENTRYDATA_RENAME])
+ spawned.name = entry_data[LOADOUT_ENTRYDATA_RENAME]
+ if((loadout_customize_flags & LOADOUT_CUSTOMIZE_DESC) && entry_data[LOADOUT_ENTRYDATA_REDESC])
+ spawned.desc = entry_data[LOADOUT_ENTRYDATA_REDESC]
+ if((loadout_customize_flags & LOADOUT_CUSTOMIZE_COLOR) && entry_data[LOADOUT_ENTRYDATA_RECOLOR])
+ spawned.color = entry_data[LOADOUT_ENTRYDATA_RECOLOR]
+ for(var/datum/loadout_tweak/tweak as anything in tweak_assembled)
+ tweak.tweak_item(spawned, tweak_assembled[tweak])
+
+ //! legacy start
+ var/mob/M = where
+ if(istype(M) && exploitable)
+ M.amend_exploitable(spawned)
+ //! end
+
+ return spawned
+
+/hook/startup/proc/populate_gear_list()
+
+ // Create a list of gear datums to sort
+ for(var/geartype in typesof(/datum/loadout_entry)-/datum/loadout_entry)
+ var/datum/loadout_entry/G = geartype
+ if(initial(G.abstract_type) == geartype)
+ continue
+ G = new geartype
+
+ if(!G.name)
+ stack_trace("Missing name on [G.type].")
+ continue
+ if(!isnum(G.cost))
+ stack_trace("Missing cost on [G.type]")
+ continue
+ if(!G.path)
+ stack_trace("Missing path on [G.type].")
+ continue
+ if(!G.category)
+ stack_trace("Missing category on [G.type].")
+ continue
+ if(!G.subcategory)
+ stack_trace("Missing subcategory on [G.type].")
+ continue
+ if(length(G.holiday_whitelist))
+ var/found = FALSE
+ for(var/name in G.holiday_whitelist)
+ if(name in SSevents.holidays)
+ found = TRUE
+ break
+ if(!found)
+ continue
+ global.gear_datums[G.legacy_get_id()] = G
+
+ return 1
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_event_rewards.dm b/code/modules/loadout/loadout_event_rewards.dm
similarity index 81%
rename from code/modules/preferences/preference_setup/loadout/loadout_event_rewards.dm
rename to code/modules/loadout/loadout_event_rewards.dm
index a6e688a9eec..d6c9d7156a8 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_event_rewards.dm
+++ b/code/modules/loadout/loadout_event_rewards.dm
@@ -1,58 +1,58 @@
-/datum/gear/event_reward
- sort_category = LOADOUT_CATEGORY_EVENTS
+/datum/loadout_entry/event_reward
+ category = LOADOUT_CATEGORY_EVENTS
cost = 0 // If they got something custom, it's only right that they aren't penalized and need to re-adjust their loadout to compensate for their new item's cost.
name = "If this item can be chosen or seen, ping a coder immediately!"
path = /obj/item/bikehorn
ckeywhitelist = list("This entry should never be choosable with this variable set.") // Reminder - ckeys are always all lowercase, regardless of what someone's username displays (and apparently without spaces)
/*
-/datum/gear/event_reward/imperium <------ Example Item
+/datum/loadout_entry/event_reward/imperium <------ Example Item
name = "Imperium"
path = /obj/item/clothing/suit/armor/combat/imperial/centurion
slot = SLOT_ID_SUIT <------ Important to change to whichever slot the item should be worn on. If it's not a piece of clothing/equipment, leaving it blank should put it into their backpack.
ckeywhitelist = list("drofoljaelisglis")
*/
-/datum/gear/event_reward/gameboy
+/datum/loadout_entry/event_reward/gameboy
name = "Game Boy"
path = /obj/item/instrument/gameboy
ckeywhitelist = list("jaybird1")
-/datum/gear/event_reward/foxmimko
+/datum/loadout_entry/event_reward/foxmimko
name = "Miko Garb"
path = /obj/item/clothing/under/event_reward/foxmiko
slot = SLOT_ID_UNIFORM
ckeywhitelist = list("knouli")
-/datum/gear/event_reward/glue
+/datum/loadout_entry/event_reward/glue
name = "All Purpose Non-Toxic Glue"
path = /datum/reagent/drink/glue
ckeywhitelist = list("trubus", "g0atman", "linzolle", "racobio", "oaklee", "askaris", "bluewildrose", "serinexxa", "ticklem0nster", "pixelthekitty", "ktoma36", "keekenox", "nik707")
-/datum/gear/event_reward/fishingcap
+/datum/loadout_entry/event_reward/fishingcap
name = "Fishing Cap"
path = /obj/item/clothing/head/fishingcap
ckeywhitelist = list("biteroankles", "cawingcrow", "tzula", "doopytoots", "slybrowngote", "0roxas0", "g0atman", "kiroking", "gonepostal298", "silicons", "linzolle", "vapeon", "keekenox", "monara", "crystal9156")
-/datum/gear/event_reward/toadplush
+/datum/loadout_entry/event_reward/toadplush
name = "Toad Plushie"
path = /obj/item/toy/plushie/toad
ckeywhitelist = list("coreflare", "jacksontmurphy", "uncleburbon", "biteroankles", "athena14", "rezbit", "nik707", "0roxas0")
-/datum/gear/event_reward/cooking_pin
+/datum/loadout_entry/event_reward/cooking_pin
name = "Culinary Excellence Pin"
path = /obj/item/clothing/accessory/medal/cooking
ckeywhitelist = list("spessinquisitor", "ktoma36", "ghxst_azy")
-/datum/gear/event_reward/petrock
+/datum/loadout_entry/event_reward/petrock
name = "Pet Rock"
path = /obj/item/toy/plushie/petrock
ckeywhitelist = list("cawingcrow")
-/datum/gear/event_reward/nka_miaphus
+/datum/loadout_entry/event_reward/nka_miaphus
name = "Miaphus'irra Campagian Medal"
path = /obj/item/clothing/accessory/medal/nka_miaphus
ckeywhitelist = list("trubus", "alphamach", "monara", "pixelthekitty", "biteroankles", "jacksontmurphy", "slybrowngote", "r0adic", "mazian")
-/datum/gear/event_reward/tacskirt
+/datum/loadout_entry/event_reward/tacskirt
name = "Tactical Skirt"
path = /obj/item/clothing/under/syndicate/skirt_pleated
ckeywhitelist = list("grapepantasoda")
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_eyes.dm b/code/modules/loadout/loadout_eyes.dm
similarity index 65%
rename from code/modules/preferences/preference_setup/loadout/loadout_eyes.dm
rename to code/modules/loadout/loadout_eyes.dm
index 0840ec3d202..f6b208c5f09 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_eyes.dm
+++ b/code/modules/loadout/loadout_eyes.dm
@@ -1,158 +1,154 @@
// Eyes
-/datum/gear/eyes
+/datum/loadout_entry/eyes
name = "Eyepatch"
path = /obj/item/clothing/glasses/eyepatch
slot = SLOT_ID_GLASSES
- sort_category = LOADOUT_CATEGORY_GLASSES
+ category = LOADOUT_CATEGORY_GLASSES
-/datum/gear/eyes/eyepatchwhite
+/datum/loadout_entry/eyes/eyepatchwhite
name = "Eyepatch (Recolorable)"
path = /obj/item/clothing/glasses/eyepatchwhite
-/datum/gear/eyes/eyepatchwhite/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/eyes/glasses/tinted
+/datum/loadout_entry/eyes/glasses/tinted
display_name = "Tinted Glasses Selection"
path = /obj/item/clothing/glasses/tinted
-/datum/gear/eyes/glasses/tinted/New()
+/datum/loadout_entry/eyes/glasses/tinted/New()
..()
var/list/tints = list()
for(var/tinted in (typesof(/obj/item/clothing/glasses/tinted/color) - typesof(/obj/item/clothing/glasses/tinted/color/purple)))
var/obj/item/clothing/glasses/tinted_type = tinted
tints[initial(tinted_type.name)] = tinted_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tints, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tints, /proc/cmp_text_asc))
-/datum/gear/eyes/glasses/regular
+/datum/loadout_entry/eyes/glasses/regular
name = "Glasses - Prescription"
path = /obj/item/clothing/glasses/regular
-/datum/gear/eyes/glasses/green
+/datum/loadout_entry/eyes/glasses/green
name = "Glasses - Green"
path = /obj/item/clothing/glasses/gglasses
-/datum/gear/eyes/glasses/prescriptionhipster
+/datum/loadout_entry/eyes/glasses/prescriptionhipster
name = "Glasses - Hipster"
path = /obj/item/clothing/glasses/regular/hipster
-/datum/gear/eyes/glasses/monocle
+/datum/loadout_entry/eyes/glasses/monocle
name = "Monocle"
path = /obj/item/clothing/glasses/monocle
-/datum/gear/eyes/goggles
+/datum/loadout_entry/eyes/goggles
name = "Plain Goggles"
path = /obj/item/clothing/glasses/goggles
-/datum/gear/eyes/goggles/scanning
+/datum/loadout_entry/eyes/goggles/scanning
name = "Scanning Goggles"
path = /obj/item/clothing/glasses/regular/scanners
-/datum/gear/eyes/goggles/science
+/datum/loadout_entry/eyes/goggles/science
name = "Science Goggles"
path = /obj/item/clothing/glasses/science
-/datum/gear/eyes/glasses/fakesun
+/datum/loadout_entry/eyes/glasses/fakesun
name = "Sunglasses - Stylish"
path = /obj/item/clothing/glasses/fakesunglasses
-/datum/gear/eyes/glasses/fakeaviator
+/datum/loadout_entry/eyes/glasses/fakeaviator
name = "Sunglasses - Stylish Aviators"
path = /obj/item/clothing/glasses/fakesunglasses/aviator
-/datum/gear/eyes/circuitry
+/datum/loadout_entry/eyes/circuitry
name = "goggles, Circuitry (Empty)"
path = /obj/item/clothing/glasses/circuitry
-/datum/gear/eyes/glasses/rimless
+/datum/loadout_entry/eyes/glasses/rimless
name = "Glasses - Rimless"
path = /obj/item/clothing/glasses/rimless
-/datum/gear/eyes/glasses/prescriptionrimless
+/datum/loadout_entry/eyes/glasses/prescriptionrimless
name = "Glasses - Prescription Rimless"
path = /obj/item/clothing/glasses/regular/rimless
-/datum/gear/eyes/glasses/thin
+/datum/loadout_entry/eyes/glasses/thin
name = "Glasses - Thin Frame"
path = /obj/item/clothing/glasses/thin
-/datum/gear/eyes/glasses/prescriptionthin
+/datum/loadout_entry/eyes/glasses/prescriptionthin
name = "Glasses - Prescription Thin Frame"
path = /obj/item/clothing/glasses/regular/thin
-/datum/gear/eyes/glasses/thick
+/datum/loadout_entry/eyes/glasses/thick
name = "Glasses - Thick Lenses"
path = /obj/item/clothing/glasses/thick
-/datum/gear/eyes/glasses/prescriptionthick
+/datum/loadout_entry/eyes/glasses/prescriptionthick
name = "Glasses - Prescription Thick Lenses"
path = /obj/item/clothing/glasses/regular/thick
-/datum/gear/eyes/glasses/dark
+/datum/loadout_entry/eyes/glasses/dark
name = "Glasses - Dark Frame"
path = /obj/item/clothing/glasses/dark
-/datum/gear/eyes/glasses/prescriptiondark
+/datum/loadout_entry/eyes/glasses/prescriptiondark
name = "Glasses - Prescription Dark Frame"
path = /obj/item/clothing/glasses/regular/dark
-/datum/gear/eyes/glasses/scan
+/datum/loadout_entry/eyes/glasses/scan
name = "Glasses - Scanner"
path = /obj/item/clothing/glasses/scan
-/datum/gear/eyes/glasses/prescriptionscan
+/datum/loadout_entry/eyes/glasses/prescriptionscan
name = "Glasses - Prescription Scanner"
path = /obj/item/clothing/glasses/regular/scan
-/datum/gear/eyes/jamjar
+/datum/loadout_entry/eyes/jamjar
name = "Jamjar Glasses"
path = /obj/item/clothing/glasses/jamjar
-/datum/gear/eyes/jensenshades
+/datum/loadout_entry/eyes/jensenshades
name = "Augmented Shades"
path = /obj/item/clothing/glasses/augmentedshades
-/datum/gear/eyes/whiteblindfold
+/datum/loadout_entry/eyes/whiteblindfold
name = "White Blindfold"
path = /obj/item/clothing/glasses/sunglasses/blindfold/whiteblindfold
-/datum/gear/eyes/whiteblindfoldfake
+/datum/loadout_entry/eyes/whiteblindfoldfake
name = "White Blindfold (Fake)"
path = /obj/item/clothing/glasses/sunglasses/fakeblindfold/whiteblindfold
-/datum/gear/eyes/redglasses
+/datum/loadout_entry/eyes/redglasses
name = "Red Glasses"
path = /obj/item/clothing/glasses/redglasses
-/datum/gear/eyes/badglasses
+/datum/loadout_entry/eyes/badglasses
name = "Poorly Made Glasses"
path = /obj/item/clothing/glasses/badglasses
-/datum/gear/eyes/orangeglasses
+/datum/loadout_entry/eyes/orangeglasses
name = "Orange Glasses"
path = /obj/item/clothing/glasses/orangeglasses
-/datum/gear/eyes/glasses/welding
+/datum/loadout_entry/eyes/glasses/welding
name = "Welding Goggles"
path = /obj/item/clothing/glasses/welding
-/datum/gear/eyes/arglasses
+/datum/loadout_entry/eyes/arglasses
name = "AR Glasses"
path = /obj/item/clothing/glasses/omnihud
-/datum/gear/eyes/arglassespres
+/datum/loadout_entry/eyes/arglassespres
name = "AR Glasses, Prescription"
path = /obj/item/clothing/glasses/omnihud/prescription
-/datum/gear/eyes/spiffygogs
+/datum/loadout_entry/eyes/spiffygogs
name = "Slick Orange Goggles"
path = /obj/item/clothing/glasses/fluff/spiffygogs
-/datum/gear/eyes/science_proper
+/datum/loadout_entry/eyes/science_proper
name = "Science Goggles (No Overlay)"
path = /obj/item/clothing/glasses/fluff/science_proper
-/datum/gear/eyes/laconic
+/datum/loadout_entry/eyes/laconic
name = "Laconic Goggles"
path = /obj/item/clothing/glasses/welding/laconic
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_general.dm b/code/modules/loadout/loadout_general.dm
similarity index 66%
rename from code/modules/preferences/preference_setup/loadout/loadout_general.dm
rename to code/modules/loadout/loadout_general.dm
index 8918ae9d2d2..f3c16bfc75c 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_general.dm
+++ b/code/modules/loadout/loadout_general.dm
@@ -1,137 +1,133 @@
-/datum/gear/cane
+/datum/loadout_entry/cane
name = "Cane"
path = /obj/item/cane
-/datum/gear/cane/white
+/datum/loadout_entry/cane/white
name = "Cane - White"
path = /obj/item/cane/whitecane
-/datum/gear/cane/whitecollapsible
+/datum/loadout_entry/cane/whitecollapsible
name = "Cane - White telescopic"
path = /obj/item/cane/whitecane/collapsible
-/datum/gear/cane/crutch
+/datum/loadout_entry/cane/crutch
name = "Crutch"
path = /obj/item/cane/crutch
-/datum/gear/dice
+/datum/loadout_entry/dice
name = "Dice Pack"
path = /obj/item/storage/pill_bottle/dice
-/datum/gear/dice/nerd
+/datum/loadout_entry/dice/nerd
name = "Dice Pack - Gaming"
path = /obj/item/storage/pill_bottle/dice_nerd
-/datum/gear/dice/cup
+/datum/loadout_entry/dice/cup
name = "Dice Cup and Dice"
path = /obj/item/storage/dicecup/loaded
-/datum/gear/cards
+/datum/loadout_entry/cards
name = "Deck of Cards"
path = /obj/item/deck/cards
-/datum/gear/unus
+/datum/loadout_entry/unus
name = "Deck of Unus Cards"
path = /obj/item/deck/unus
-/datum/gear/tarot
+/datum/loadout_entry/tarot
name = "Deck of Tarot Cards"
path = /obj/item/deck/tarot
-/datum/gear/holder
+/datum/loadout_entry/holder
name = "Card Holder"
path = /obj/item/deck/holder
-/datum/gear/cardemon_pack
+/datum/loadout_entry/cardemon_pack
name = "Cardemon Booster Pack"
path = /obj/item/pack/cardemon
-/datum/gear/spaceball_pack
+/datum/loadout_entry/spaceball_pack
name = "Spaceball Booster Pack"
path = /obj/item/pack/spaceball
-/datum/gear/plushie
+/datum/loadout_entry/plushie
name = "Plushie Selection"
path = /obj/item/toy/plushie/
-/datum/gear/plushie/New()
+/datum/loadout_entry/plushie/New()
..()
var/list/plushies = list()
for(var/plushie in subtypesof(/obj/item/toy/plushie/) - /obj/item/toy/plushie/therapy)
var/obj/item/toy/plushie/plushie_type = plushie
plushies[initial(plushie_type.name)] = plushie_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(plushies, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(plushies, /proc/cmp_text_asc))
-/datum/gear/flask
+/datum/loadout_entry/flask
name = "Flask"
path = /obj/item/reagent_containers/food/drinks/flask/barflask
-/datum/gear/flask/New()
+/datum/loadout_entry/flask/New()
..()
- gear_tweaks += new/datum/gear_tweak/reagents(lunchables_ethanol_reagents())
+ tweaks += new/datum/loadout_tweak/reagents(lunchables_ethanol_reagents())
-/datum/gear/vacflask
+/datum/loadout_entry/vacflask
name = "Flask - Vacuum"
path = /obj/item/reagent_containers/food/drinks/flask/vacuumflask
-/datum/gear/vacflask/New()
+/datum/loadout_entry/vacflask/New()
..()
- gear_tweaks += new/datum/gear_tweak/reagents(lunchables_drink_reagents())
+ tweaks += new/datum/loadout_tweak/reagents(lunchables_drink_reagents())
-/datum/gear/lunchbox
+/datum/loadout_entry/lunchbox
name = "Lunchbox"
description = "A little lunchbox."
cost = 2
path = /obj/item/storage/toolbox/lunchbox
-/datum/gear/lunchbox/New()
+/datum/loadout_entry/lunchbox/New()
..()
var/list/lunchboxes = list()
for(var/lunchbox_type in typesof(/obj/item/storage/toolbox/lunchbox))
var/obj/item/storage/toolbox/lunchbox/lunchbox = lunchbox_type
if(!initial(lunchbox.filled))
lunchboxes[initial(lunchbox.name)] = lunchbox_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(lunchboxes, /proc/cmp_text_asc))
- gear_tweaks += new/datum/gear_tweak/contents(lunchables_lunches(), lunchables_snacks(), lunchables_drinks())
+ tweaks += new/datum/loadout_tweak/path(tim_sort(lunchboxes, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/contents(lunchables_lunches(), lunchables_snacks(), lunchables_drinks())
-/datum/gear/towel
+/datum/loadout_entry/towel
name = "Towel"
path = /obj/item/towel
-/datum/gear/towel/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/cahwhite
+/datum/loadout_entry/cahwhite
name = "Cards Against The Galaxy - White Deck"
path = /obj/item/deck/cah
description = "The ever-popular Cards Against The Galaxy word game. Warning: may include traces of broken fourth wall. This is the white deck."
-/datum/gear/cahblack
+/datum/loadout_entry/cahblack
name = "Cards Against The Galaxy - Black Deck"
path = /obj/item/deck/cah/black
description = "The ever-popular Cards Against The Galaxy word game. Warning: may include traces of broken fourth wall. This is the black deck."
-/datum/gear/tennis_ball
+/datum/loadout_entry/tennis_ball
name = "Tennis Ball Selection"
path = /obj/item/toy/tennis
-/datum/gear/tennis_ball/New()
+/datum/loadout_entry/tennis_ball/New()
..()
var/list/tennis_balls = list()
for(var/tball in typesof(/obj/item/toy/tennis) - typesof(/obj/item/toy/tennis/rainbow))
var/obj/item/toy/tennis/ball_type = tball
tennis_balls[initial(ball_type.name)] = ball_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tennis_balls, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tennis_balls, /proc/cmp_text_asc))
-/datum/gear/swimsuitcaps
+/datum/loadout_entry/swimsuitcaps
name = "Swimsuit Capsule Selection"
path = /obj/item/storage/box/fluff/swimsuit
-/datum/gear/swimsuitcaps/New()
+/datum/loadout_entry/swimsuitcaps/New()
..()
var/list/swimsuits = list()
for(var/swimsuit in typesof(/obj/item/storage/box/fluff/swimsuit))
var/obj/item/storage/box/fluff/swimsuit/swimsuit_type = swimsuit
swimsuits[initial(swimsuit_type.name)] = swimsuit_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(swimsuits, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(swimsuits, /proc/cmp_text_asc))
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_gloves.dm b/code/modules/loadout/loadout_gloves.dm
similarity index 75%
rename from code/modules/preferences/preference_setup/loadout/loadout_gloves.dm
rename to code/modules/loadout/loadout_gloves.dm
index e7e1e1aa13c..2ee4dd9f2ee 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_gloves.dm
+++ b/code/modules/loadout/loadout_gloves.dm
@@ -1,87 +1,83 @@
// Gloves
-/datum/gear/gloves
+/datum/loadout_entry/gloves
name = "Gloves - Black"
path = /obj/item/clothing/gloves/black
slot = SLOT_ID_GLOVES
- sort_category = LOADOUT_CATEGORY_GLOVES
+ category = LOADOUT_CATEGORY_GLOVES
-/datum/gear/gloves/blue
+/datum/loadout_entry/gloves/blue
name = "Gloves - Blue"
path = /obj/item/clothing/gloves/blue
-/datum/gear/gloves/brown
+/datum/loadout_entry/gloves/brown
name = "Gloves - Brown"
path = /obj/item/clothing/gloves/brown
-/datum/gear/gloves/light_brown
+/datum/loadout_entry/gloves/light_brown
name = "Gloves - Light-Brown"
path = /obj/item/clothing/gloves/light_brown
-/datum/gear/gloves/green
+/datum/loadout_entry/gloves/green
name = "Gloves - Green"
path = /obj/item/clothing/gloves/green
-/datum/gear/gloves/grey
+/datum/loadout_entry/gloves/grey
name = "Gloves - Grey"
path = /obj/item/clothing/gloves/grey
-/datum/gear/gloves/latex
+/datum/loadout_entry/gloves/latex
name = "Gloves - Latex"
path = /obj/item/clothing/gloves/sterile/latex
-/datum/gear/gloves/nitrile
+/datum/loadout_entry/gloves/nitrile
name = "Gloves - Nitrile"
path = /obj/item/clothing/gloves/sterile/nitrile
-/datum/gear/gloves/orange
+/datum/loadout_entry/gloves/orange
name = "Gloves - Orange"
path = /obj/item/clothing/gloves/orange
-/datum/gear/gloves/purple
+/datum/loadout_entry/gloves/purple
name = "Gloves - Purple"
path = /obj/item/clothing/gloves/purple
-/datum/gear/gloves/rainbow
+/datum/loadout_entry/gloves/rainbow
name = "Gloves - Rainbow"
path = /obj/item/clothing/gloves/rainbow
-/datum/gear/gloves/red
+/datum/loadout_entry/gloves/red
name = "Gloves - Red"
path = /obj/item/clothing/gloves/red
-/datum/gear/gloves/white
+/datum/loadout_entry/gloves/white
name = "Gloves - White"
path = /obj/item/clothing/gloves/white
-/datum/gear/gloves/evening
+/datum/loadout_entry/gloves/evening
name = "Evening Gloves"
path = /obj/item/clothing/gloves/evening
-/datum/gear/gloves/evening/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/gloves/duty
+/datum/loadout_entry/gloves/duty
name = "Gloves - Work"
path = /obj/item/clothing/gloves/duty
cost = 3
-/datum/gear/gloves/forensic
+/datum/loadout_entry/gloves/forensic
name = "Detective Gloves - Forensic"
path = /obj/item/clothing/gloves/forensic
allowed_roles = list("Detective")
-/datum/gear/gloves/fingerless
+/datum/loadout_entry/gloves/fingerless
name = "Gloves - Fingerless"
path = /obj/item/clothing/gloves/fingerless
-/datum/gear/gloves/ring
+/datum/loadout_entry/gloves/ring
name = "Ring Selection"
description = "Choose from a number of rings."
path = /obj/item/clothing/gloves/ring
cost = 1
-/datum/gear/gloves/ring/New()
+/datum/loadout_entry/gloves/ring/New()
..()
var/ringtype = list()
ringtype["CTI Ring"] = /obj/item/clothing/gloves/ring/cti
@@ -101,50 +97,42 @@
ringtype["Ring - Osmium"] = /obj/item/clothing/gloves/ring/material/osmium
ringtype["Ring - Mhydrogen"] = /obj/item/clothing/gloves/ring/material/mhydrogen
ringtype["Ring - Custom"] = /obj/item/clothing/gloves/ring/custom
- gear_tweaks += new/datum/gear_tweak/path(ringtype)
+ tweaks += new/datum/loadout_tweak/path(ringtype)
-/datum/gear/gloves/circuitry
+/datum/loadout_entry/gloves/circuitry
name = "Gloves - Circuitry"
path = /obj/item/clothing/gloves/circuitry
-/datum/gear/gloves/goldring
+/datum/loadout_entry/gloves/goldring
name = "Wedding Ring - Gold"
path = /obj/item/clothing/gloves/ring/wedding
-/datum/gear/gloves/silverring
+/datum/loadout_entry/gloves/silverring
name = "Wedding Ring - Silver"
path = /obj/item/clothing/gloves/ring/wedding/silver
-/datum/gear/gloves/colored
+/datum/loadout_entry/gloves/colored
name = "Gloves - Colorable"
path = /obj/item/clothing/gloves/color
-/datum/gear/gloves/colored/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/gloves/latex/colorable
+/datum/loadout_entry/gloves/latex/colorable
name = "Gloves - Latex - Colorable"
path = /obj/item/clothing/gloves/sterile/latex
-/datum/gear/gloves/latex/colorable/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/gloves/siren
+/datum/loadout_entry/gloves/siren
name = "Gloves - Siren"
path = /obj/item/clothing/gloves/fluff/siren
-/datum/gear/gloves/bountyskin
+/datum/loadout_entry/gloves/bountyskin
name = "Bounty Hunters Gloves"
path = /obj/item/clothing/gloves/bountyskin
-/datum/gear/gloves/hasie
+/datum/loadout_entry/gloves/hasie
name = "Hasie Fingerless Gloves"
path = /obj/item/clothing/gloves/hasie
-/datum/gear/gloves/utility_fur_gloves
+/datum/loadout_entry/gloves/utility_fur_gloves
name = "Utility Fur Gloves"
path = /obj/item/clothing/gloves/utility_fur_gloves
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_head.dm b/code/modules/loadout/loadout_head.dm
similarity index 64%
rename from code/modules/preferences/preference_setup/loadout/loadout_head.dm
rename to code/modules/loadout/loadout_head.dm
index 065f20d8614..4cc2749deea 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_head.dm
+++ b/code/modules/loadout/loadout_head.dm
@@ -1,326 +1,273 @@
//Hats & Headwear
-/datum/gear/head
+/datum/loadout_entry/head
name = "Bandana - Pirate-Red"
path = /obj/item/clothing/head/bandana
slot = SLOT_ID_HEAD
- sort_category = LOADOUT_CATEGORY_HATS
+ category = LOADOUT_CATEGORY_HATS
-/datum/gear/head/bandana_green
+/datum/loadout_entry/head/bandana_green
name = "Bandana - Green"
path = /obj/item/clothing/head/greenbandana
-/datum/gear/head/bandana_orange
+/datum/loadout_entry/head/bandana_orange
name = "Bandana - Orange"
path = /obj/item/clothing/head/orangebandana
-/datum/gear/head/beret
+/datum/loadout_entry/head/beret
name = "Beret - Red"
path = /obj/item/clothing/head/beret
-/datum/gear/head/beret/med
+/datum/loadout_entry/head/beret/med
name = "Beret - Medical"
path = /obj/item/clothing/head/beret/medical
-/datum/gear/head/cap
+/datum/loadout_entry/head/cap
name = "Cap - Black"
path = /obj/item/clothing/head/soft/black
-/datum/gear/head/cap/blue
+/datum/loadout_entry/head/cap/blue
name = "Cap - Blue"
path = /obj/item/clothing/head/soft/blue
-/datum/gear/head/cap/mailman
+/datum/loadout_entry/head/cap/mailman
name = "Cap - Blue Station"
path = /obj/item/clothing/head/mailman
-/datum/gear/head/cap/flat
+/datum/loadout_entry/head/cap/flat
name = "Cap - Brown-Flat"
path = /obj/item/clothing/head/flatcap
-/datum/gear/head/cap/green
+/datum/loadout_entry/head/cap/green
name = "Cap - Green"
path = /obj/item/clothing/head/soft/green
-/datum/gear/head/cap/grey
+/datum/loadout_entry/head/cap/grey
name = "Cap - Grey"
path = /obj/item/clothing/head/soft/grey
-/datum/gear/head/cap/orange
+/datum/loadout_entry/head/cap/orange
name = "Cap - Orange"
path = /obj/item/clothing/head/soft/orange
-/datum/gear/head/cap/purple
+/datum/loadout_entry/head/cap/purple
name = "Cap - Purple"
path = /obj/item/clothing/head/soft/purple
-/datum/gear/head/cap/rainbow
+/datum/loadout_entry/head/cap/rainbow
name = "Cap - Rainbow"
path = /obj/item/clothing/head/soft/rainbow
-/datum/gear/head/cap/red
+/datum/loadout_entry/head/cap/red
name = "Cap - Red"
path = /obj/item/clothing/head/soft/red
-/datum/gear/head/cap/yellow
+/datum/loadout_entry/head/cap/yellow
name = "Cap - Yellow"
path = /obj/item/clothing/head/soft/yellow
-/datum/gear/head/cap/white
+/datum/loadout_entry/head/cap/white
name = "Cap (Colorable)"
path = /obj/item/clothing/head/soft/mime
-/datum/gear/head/cap/white/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/cap/mbill
+/datum/loadout_entry/head/cap/mbill
name = "Cap - Bill"
path = /obj/item/clothing/head/soft/mbill
-/*/datum/gear/head/cap/sol
+/*/datum/loadout_entry/head/cap/sol
name = "Cap - Sol"
path = /obj/item/clothing/head/soft/sol
-/datum/gear/head/cap/expdition
+/datum/loadout_entry/head/cap/expdition
name = "Cap - Expedition"
path = /obj/item/clothing/head/soft/sol/expedition
-/datum/gear/head/cap/fleet
+/datum/loadout_entry/head/cap/fleet
name = "Cap - Fleet"
path = /obj/item/clothing/head/soft/sol/fleet*/
-/datum/gear/head/cowboy
+/datum/loadout_entry/head/cowboy
name = "Cowboy Hat - Rodeo"
path = /obj/item/clothing/head/cowboy_hat
-/datum/gear/head/cowboy/black
+/datum/loadout_entry/head/cowboy/black
name = "Cowboy Hat - Black"
path = /obj/item/clothing/head/cowboy_hat/black
-/datum/gear/head/cowboy/pink
+/datum/loadout_entry/head/cowboy/pink
name = "Cowboy Hat - Pink"
path = /obj/item/clothing/head/cowboy_hat/pink
-/datum/gear/head/cowboy/wide
+/datum/loadout_entry/head/cowboy/wide
name = "Cowboy Hat - Wide"
path = /obj/item/clothing/head/cowboy_hat/wide
-/datum/gear/head/fedora
+/datum/loadout_entry/head/fedora
name = "Fedora - Brown"
path = /obj/item/clothing/head/fedora/brown
-/datum/gear/head/fedora/grey
+/datum/loadout_entry/head/fedora/grey
name = "Fedora - Grey"
path = /obj/item/clothing/head/fedora/grey
-/datum/gear/head/fedora/floppy
+/datum/loadout_entry/head/fedora/floppy
name = "Wide Brimmed Hat"
path = /obj/item/clothing/head/fedora/floppy
-/datum/gear/head/hairflower
+/datum/loadout_entry/head/hairflower
name = "Hair Flower Pin (Colorable)"
path = /obj/item/clothing/head/pin/flower/white
-/datum/gear/head/hairflower/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/pin
+/datum/loadout_entry/head/pin
name = "Pin Selection"
path = /obj/item/clothing/head/pin
-/datum/gear/head/pin/New()
+/datum/loadout_entry/head/pin/New()
..()
var/list/pins = list()
for(var/pin in typesof(/obj/item/clothing/head/pin))
var/obj/item/clothing/head/pin/pin_type = pin
pins[initial(pin_type.name)] = pin_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(pins, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(pins, /proc/cmp_text_asc))
-/datum/gear/head/hardhat
+/datum/loadout_entry/head/hardhat
name = "Hardhat Selection"
path = /obj/item/clothing/head/hardhat
cost = 2
-/datum/gear/head/hardhat/New()
+/datum/loadout_entry/head/hardhat/New()
..()
var/list/hardhats = list()
for(var/hardhat in typesof(/obj/item/clothing/head/hardhat))
var/obj/item/clothing/head/hardhat/hardhat_type = hardhat
hardhats[initial(hardhat_type.name)] = hardhat_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(hardhats, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(hardhats, /proc/cmp_text_asc))
-/datum/gear/head/boater
+/datum/loadout_entry/head/boater
name = "Hat, Boatsman"
path = /obj/item/clothing/head/boaterhat
-/datum/gear/head/bowler
+/datum/loadout_entry/head/bowler
name = "Hat, Bowler"
path = /obj/item/clothing/head/bowler
-/datum/gear/head/fez
+/datum/loadout_entry/head/fez
name = "Hat, Fez"
path = /obj/item/clothing/head/fez
-/datum/gear/head/rice
+/datum/loadout_entry/head/rice
name = "Hat, Rice"
path = /obj/item/clothing/head/rice
-/datum/gear/head/tophat
+/datum/loadout_entry/head/tophat
name = "Hat, Tophat"
path = /obj/item/clothing/head/that
-/datum/gear/head/wig/philosopher
+/datum/loadout_entry/head/wig/philosopher
name = "Natural Philosopher's Wig"
path = /obj/item/clothing/head/philosopher_wig
-/datum/gear/head/wig
+/datum/loadout_entry/head/wig
name = "Powdered Wig"
path = /obj/item/clothing/head/powdered_wig
-/datum/gear/head/ushanka
+/datum/loadout_entry/head/ushanka
name = "Ushanka"
path = /obj/item/clothing/head/ushanka
-/datum/gear/head/santahat
+/datum/loadout_entry/head/santahat
name = "Santa Hat"
path = /obj/item/clothing/head/santa
cost = 2
-/datum/gear/head/santahat/New()
+/datum/loadout_entry/head/santahat/New()
..()
var/list/santahats = list()
for(var/santahat in typesof(/obj/item/clothing/head/santa))
var/obj/item/clothing/head/santa/santahat_type = santahat
santahats[initial(santahat_type.name)] = santahat_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(santahats, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(santahats, /proc/cmp_text_asc))
-/datum/gear/head/hijab
+/datum/loadout_entry/head/hijab
name = "Hijab (Colorable)"
path = /obj/item/clothing/head/hijab
-/datum/gear/head/hijab/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/kippa
+/datum/loadout_entry/head/kippa
name = "Kippa (Colorable)"
path = /obj/item/clothing/head/kippa
-/datum/gear/head/kippa/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/turban
+/datum/loadout_entry/head/turban
name = "Turban (Colorable)"
path = /obj/item/clothing/head/turban
-/datum/gear/head/turban/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/taqiyah
+/datum/loadout_entry/head/taqiyah
name = "Taqiyah (Colorable)"
path = /obj/item/clothing/head/taqiyah
-/datum/gear/head/taqiyah/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/kitty
+/datum/loadout_entry/head/kitty
name = "Kitty Ears"
path = /obj/item/clothing/head/kitty
-/datum/gear/head/rabbit
+/datum/loadout_entry/head/rabbit
name = "Rabbit Ears"
path = /obj/item/clothing/head/rabbitears
-/datum/gear/head/maid_band
+/datum/loadout_entry/head/maid_band
name = "Maid Headband"
path = /obj/item/clothing/head/headband/maid
-/datum/gear/head/beanie
+/datum/loadout_entry/head/beanie
name = "Beanie (Colorable)"
path = /obj/item/clothing/head/beanie
-/datum/gear/head/beanie/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/loose_beanie
+/datum/loadout_entry/head/loose_beanie
name = "Loose Beanie (Colorable)"
path = /obj/item/clothing/head/beanie_loose
-/datum/gear/head/loose_beanie/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/beretg
+/datum/loadout_entry/head/beretg
name = "Beret (Colorable)"
path = /obj/item/clothing/head/beretg
-/datum/gear/head/beretg/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/beretbs
+/datum/loadout_entry/head/beretbs
name = "Blueshield Beret"
path = /obj/item/clothing/head/beret/sec/corporate/blueshield
-/datum/gear/head/beretbs/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/sombrero
+/datum/loadout_entry/head/sombrero
name = "Sombrero"
path = /obj/item/clothing/head/sombrero
-/datum/gear/head/flatCapg
+/datum/loadout_entry/head/flatCapg
name = "Flat Cap"
path = /obj/item/clothing/head/flatcap/grey
-/datum/gear/head/flatCapg/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/bow/small
+/datum/loadout_entry/head/bow/small
name = "Hair Bow, Small (Colorable)"
path = /obj/item/clothing/head/pin/bow
-/datum/gear/head/bow/small/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/traveller
+/datum/loadout_entry/head/traveller
name = "Traveller Hat (Colorable)"
path = /obj/item/clothing/head/traveller
-/datum/gear/head/traveller/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/slime
+/datum/loadout_entry/head/slime
name = "Slime hat"
path = /obj/item/clothing/head/collectable/slime
-/datum/gear/head/beret/orion
+/datum/loadout_entry/head/beret/orion
name = "Orion Beret Selection"
path = /obj/item/clothing/head/beret/orion
-/datum/gear/head/beret/orion/New()
+/datum/loadout_entry/head/beret/orion/New()
..()
var/list/orions = list()
for(var/orion_style in typesof(/obj/item/clothing/head/beret/orion))
var/obj/item/clothing/head/beret/orion/orion = orion_style
orions[initial(orion.name)] = orion
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(orions, /proc/cmp_text_asc))
-
-/datum/gear/head/surgery
+ tweaks += new/datum/loadout_tweak/path(tim_sort(orions, /proc/cmp_text_asc))
+/datum/loadout_entry/head/surgery
name = "Surgical Cap Selection"
description = "Choose from a number of rings of different Caps."
path = /obj/item/clothing/head/surgery
-/datum/gear/head/surgery/New()
+/datum/loadout_entry/head/surgery/New()
..()
var/Cap_type = list()
Cap_type["Purple Cap"] = /obj/item/clothing/head/surgery/purple
@@ -328,105 +275,97 @@
Cap_type["Green Cap"] = /obj/item/clothing/head/surgery/green
Cap_type["Black Cap"] = /obj/item/clothing/head/surgery/black
Cap_type["Navy Cap"] = /obj/item/clothing/head/surgery/navyblue
- gear_tweaks += new/datum/gear_tweak/path(Cap_type)
+ tweaks += new/datum/loadout_tweak/path(Cap_type)
-/datum/gear/head/circuitry
+/datum/loadout_entry/head/circuitry
name = "Headwear, Circuitry (Empty)"
path = /obj/item/clothing/head/circuitry
-/datum/gear/head/maangtikka
+/datum/loadout_entry/head/maangtikka
name = "Maang Tikka"
path = /obj/item/clothing/head/maangtikka
-/datum/gear/head/jingasa
+/datum/loadout_entry/head/jingasa
name = "Jingasa"
path = /obj/item/clothing/head/jingasa
-/*/datum/gear/head/cap/sol
+/*/datum/loadout_entry/head/cap/sol
name = "Cap - sol"
path = /obj/item/clothing/head/soft/sol*/
-/datum/gear/head/headbando
+/datum/loadout_entry/head/headbando
name = "Basic Headband (Colorable)"
path = /obj/item/clothing/head/fluff/headbando
-/datum/gear/head/headbando/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
// happy valentine's day
-/datum/gear/head/woodcirclet
+/datum/loadout_entry/head/woodcirclet
name = "Wooden Circlet"
path = /obj/item/clothing/head/woodcirclet
-/datum/gear/head/rose_crown
+/datum/loadout_entry/head/rose_crown
name = "Flower Crown (Rose)"
path = /obj/item/clothing/head/rose_crown
-/datum/gear/head/sunflower_crown
+/datum/loadout_entry/head/sunflower_crown
name = "Flower Crown (Sunflower)"
path = /obj/item/clothing/head/sunflower_crown
-/datum/gear/head/lavender_crown
+/datum/loadout_entry/head/lavender_crown
name = "Flower Crown (Lavender)"
path = /obj/item/clothing/head/lavender_crown
-/datum/gear/head/harebell_crown
+/datum/loadout_entry/head/harebell_crown
display_name = "Flower Crown (Harebell)"
path = /obj/item/clothing/head/harebell_crown
-/datum/gear/head/poppy_crown
+/datum/loadout_entry/head/poppy_crown
name = "Flower Crown (Poppy)"
path = /obj/item/clothing/head/poppy_crown
-/datum/gear/head/nettle_crown
+/datum/loadout_entry/head/nettle_crown
display_name = "Flower Crown (Thorns)"
path = /obj/item/clothing/head/nettle_crown
-/datum/gear/head/samurai
+/datum/loadout_entry/head/samurai
name = "Replica Kabuto (Colorable)"
path = /obj/item/clothing/head/samurai_replica
-/datum/gear/head/samurai/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/head/half_pint
+/datum/loadout_entry/head/half_pint
name = "Half-Pint Headband"
path = /obj/item/clothing/head/half_pint
-/datum/gear/head/bard
+/datum/loadout_entry/head/bard
name = "Audacious Wide Brimmed Hat"
path = /obj/item/clothing/head/bard
//Tajaran head wears
-/datum/gear/head/furhat
+/datum/loadout_entry/head/furhat
name = "Adhomian fur hat"
path = /obj/item/clothing/head/tajaran/fur
-/datum/gear/head/beret/tajaran
+/datum/loadout_entry/head/beret/tajaran
name = "Adhomian beret selection"
description = "A selection of Adhomian berets."
path = /obj/item/clothing/head/beret/tajaran
-/datum/gear/head/beret/tajaran/New()
+/datum/loadout_entry/head/beret/tajaran/New()
..()
var/list/tberets = list()
for(var/tberet in (typesof(/obj/item/clothing/head/beret/tajaran)))
var/obj/item/clothing/head/beret/tajaran/tberet_type = tberet
tberets[initial(tberet_type.name)] = tberet_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tberets, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tberets, /proc/cmp_text_asc))
-/datum/gear/head/tajaran/circlet
+/datum/loadout_entry/head/tajaran/circlet
name = "Adhomian circlet selection"
description = "A selection of Adhomian circlet."
path = /obj/item/clothing/head/tajaran/circlet
-/datum/gear/head/tajaran/circlet/New()
+/datum/loadout_entry/head/tajaran/circlet/New()
..()
var/list/tcirclets = list()
for(var/tcirclet in (typesof(/obj/item/clothing/head/tajaran/circlet)))
var/obj/item/clothing/head/tajaran/circlet/tcirclet_type = tcirclet
tcirclets[initial(tcirclet_type.name)] = tcirclet_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tcirclets, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tcirclets, /proc/cmp_text_asc))
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_mask.dm b/code/modules/loadout/loadout_mask.dm
similarity index 67%
rename from code/modules/preferences/preference_setup/loadout/loadout_mask.dm
rename to code/modules/loadout/loadout_mask.dm
index 873510ed546..8c2c66a9e7d 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_mask.dm
+++ b/code/modules/loadout/loadout_mask.dm
@@ -1,63 +1,59 @@
// Mask
-/datum/gear/mask
+/datum/loadout_entry/mask
name = "Bandana - Blue"
path = /obj/item/clothing/mask/bandana/blue
slot = SLOT_ID_MASK
- sort_category = LOADOUT_CATEGORY_MASKS
+ category = LOADOUT_CATEGORY_MASKS
-/datum/gear/mask/gold
+/datum/loadout_entry/mask/gold
name = "Bandana - Gold"
path = /obj/item/clothing/mask/bandana/gold
-/datum/gear/mask/green
+/datum/loadout_entry/mask/green
name = "Bandana - Green"
path = /obj/item/clothing/mask/bandana/green
-/datum/gear/mask/red
+/datum/loadout_entry/mask/red
name = "Bandana - Red"
path = /obj/item/clothing/mask/bandana/red
-/datum/gear/mask/sterile
+/datum/loadout_entry/mask/sterile
name = "Sterile Mask"
path = /obj/item/clothing/mask/surgical
cost = 2
-/datum/gear/mask/half
+/datum/loadout_entry/mask/half
name = "Half Gas Mask"
path = /obj/item/clothing/mask/gas/half
cost = 2
-/datum/gear/mask/skull
+/datum/loadout_entry/mask/skull
name = "Bandana - Skull"
path = /obj/item/clothing/mask/bandana/skull
-/datum/gear/mask/balaclava
+/datum/loadout_entry/mask/balaclava
name = "Balaclava"
path = /obj/item/clothing/mask/balaclava
-/datum/gear/mask/muzzle
+/datum/loadout_entry/mask/muzzle
name = "Muzzle"
path = /obj/item/clothing/mask/muzzle
-/datum/gear/mask/fakemoustache
+/datum/loadout_entry/mask/fakemoustache
name = "Fake Moustache"
path = /obj/item/clothing/mask/fakemoustache
-/datum/gear/mask/samurai
+/datum/loadout_entry/mask/samurai
name = "Samurai Mask"
path = /obj/item/clothing/mask/samurai
-/datum/gear/mask/samurai_colorable
+/datum/loadout_entry/mask/samurai_colorable
name = "Samurai Mask (Colorable)"
path = /obj/item/clothing/mask/samurai/colorable
-/datum/gear/mask/samurai_colorable/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/mask/fox
+/datum/loadout_entry/mask/fox
name = "Fox mask" //capitalisation because everything else here is capitalised
path = /obj/item/clothing/mask/gas/fox
-/datum/gear/mask/opaque
+/datum/loadout_entry/mask/opaque
name = "Opaque Mask"
path = /obj/item/clothing/mask/gas/opaque
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_role_restricted.dm b/code/modules/loadout/loadout_role_restricted.dm
similarity index 65%
rename from code/modules/preferences/preference_setup/loadout/loadout_role_restricted.dm
rename to code/modules/loadout/loadout_role_restricted.dm
index a9be97e875a..8dded2a8f0d 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_role_restricted.dm
+++ b/code/modules/loadout/loadout_role_restricted.dm
@@ -1,974 +1,982 @@
/***********************************************************************************/
//Datum Variable Assignments to Reduce Redundant Code
-/datum/gear/restricted //BYOND refuses to stop shitting a brick and throwing warnings (even though it STILL WORKS!) if all variables are initialized with a null, so the captain gets a rubber ducky.
+/datum/loadout_entry/restricted //BYOND refuses to stop shitting a brick and throwing warnings (even though it STILL WORKS!) if all variables are initialized with a null, so the captain gets a rubber ducky.
name = "Captain's Companion"
path = /obj/item/bikehorn/rubberducky
slot = null //At least you work as null.
allowed_roles = list("Facility Director") //This technically also works as null, but we're supposed to be role restricted so it's the captain's exclusive, special ducky.
- sort_category = LOADOUT_CATEGORY_ROLE_RESTRICTED
+ category = LOADOUT_CATEGORY_ROLE_RESTRICTED
//*Single Departments
//Security
-/datum/gear/restricted/security
+/datum/loadout_entry/restricted/security
+ subcategory = "Security"
allowed_roles = list("Security Officer", "Head of Security", "Warden", "Detective", "Blueshield")
-/datum/gear/restricted/security/eyes
+/datum/loadout_entry/restricted/security/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/restricted/security/head
+/datum/loadout_entry/restricted/security/head
slot = SLOT_ID_HEAD
-/datum/gear/restricted/security/back
+/datum/loadout_entry/restricted/security/back
slot = SLOT_ID_BACK
-/datum/gear/restricted/security/uniform
+/datum/loadout_entry/restricted/security/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/restricted/security/suit
+/datum/loadout_entry/restricted/security/suit
slot = SLOT_ID_SUIT
-/datum/gear/restricted/security/shoes
+/datum/loadout_entry/restricted/security/shoes
slot = SLOT_ID_SHOES
-/datum/gear/restricted/security/accessory
+/datum/loadout_entry/restricted/security/accessory
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
//Medical
-/datum/gear/restricted/medical
+/datum/loadout_entry/restricted/medical
+ subcategory = "Medical"
allowed_roles = list("Medical Doctor", "Chief Medical Officer", "Chemist", "Paramedic", "Geneticist", "Psychiatrist", "Field Medic", "Head Nurse")
-/datum/gear/restricted/medical/eyes
+/datum/loadout_entry/restricted/medical/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/restricted/medical/head
+/datum/loadout_entry/restricted/medical/head
slot = SLOT_ID_HEAD
-/datum/gear/restricted/medical/back
+/datum/loadout_entry/restricted/medical/back
slot = SLOT_ID_BACK
-/datum/gear/restricted/medical/uniform
+/datum/loadout_entry/restricted/medical/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/restricted/medical/suit
+/datum/loadout_entry/restricted/medical/suit
slot = SLOT_ID_SUIT
-/datum/gear/restricted/medical/shoes
+/datum/loadout_entry/restricted/medical/shoes
slot = SLOT_ID_SHOES
-/datum/gear/restricted/medical/accessory
+/datum/loadout_entry/restricted/medical/accessory
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
//Engineering
-/datum/gear/restricted/engineering
+/datum/loadout_entry/restricted/engineering
+ subcategory = "Engineering"
allowed_roles = list("Station Engineer", "Chief Engineer", "Atmospheric Technician", "Senior Engineer")
-/datum/gear/restricted/engineering/eyes
+/datum/loadout_entry/restricted/engineering/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/restricted/engineering/head
+/datum/loadout_entry/restricted/engineering/head
slot = SLOT_ID_HEAD
-/datum/gear/restricted/engineering/back
+/datum/loadout_entry/restricted/engineering/back
slot = SLOT_ID_BACK
-/datum/gear/restricted/engineering/uniform
+/datum/loadout_entry/restricted/engineering/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/restricted/engineering/suit
+/datum/loadout_entry/restricted/engineering/suit
slot = SLOT_ID_SUIT
-/datum/gear/restricted/engineering/shoes
+/datum/loadout_entry/restricted/engineering/shoes
slot = SLOT_ID_SHOES
-/datum/gear/restricted/engineering/accessory
+/datum/loadout_entry/restricted/engineering/accessory
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
//Command
-/datum/gear/restricted/command
+/datum/loadout_entry/restricted/command
+ subcategory = "Command"
allowed_roles = list("Facility Director", "Head of Personnel", "Chief Medical Officer", "Head of Security", "Research Director", "Chief Engineer", "Command Secretary", "Blueshield")
-/datum/gear/restricted/command/eyes
+/datum/loadout_entry/restricted/command/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/restricted/command/head
+/datum/loadout_entry/restricted/command/head
slot = SLOT_ID_HEAD
-/datum/gear/restricted/command/uniform
+/datum/loadout_entry/restricted/command/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/restricted/command/suit
+/datum/loadout_entry/restricted/command/suit
slot = SLOT_ID_SUIT
-/datum/gear/restricted/command/shoes
+/datum/loadout_entry/restricted/command/shoes
slot = SLOT_ID_SHOES
-/datum/gear/restricted/command/accessory
+/datum/loadout_entry/restricted/command/accessory
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
//Science
-/datum/gear/restricted/science
+/datum/loadout_entry/restricted/science
+ subcategory = "Science"
allowed_roles = list("Research Director", "Scientist", "Xenobiologist", "Roboticist", "Explorer", "Pathfinder", "Senior Researcher")
-/datum/gear/restricted/science/eyes
+/datum/loadout_entry/restricted/science/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/restricted/science/head
+/datum/loadout_entry/restricted/science/head
slot = SLOT_ID_HEAD
-/datum/gear/restricted/science/back
+/datum/loadout_entry/restricted/science/back
slot = SLOT_ID_BACK
-/datum/gear/restricted/science/uniform
+/datum/loadout_entry/restricted/science/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/restricted/science/suit
+/datum/loadout_entry/restricted/science/suit
slot = SLOT_ID_SUIT
-/datum/gear/restricted/science/shoes
+/datum/loadout_entry/restricted/science/shoes
slot = SLOT_ID_SHOES
-/datum/gear/restricted/science/accessory
+/datum/loadout_entry/restricted/science/accessory
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
//Supply
-/datum/gear/restricted/supply
+/datum/loadout_entry/restricted/supply
+ subcategory = "Supply"
allowed_roles = list("Shaft Miner", "Cargo Technician", "Quartermaster")
-/datum/gear/restricted/supply/eyes
+/datum/loadout_entry/restricted/supply/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/restricted/supply/uniform
+/datum/loadout_entry/restricted/supply/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/restricted/supply/suit
+/datum/loadout_entry/restricted/supply/suit
slot = SLOT_ID_SUIT
-/datum/gear/restricted/supply/shoes
+/datum/loadout_entry/restricted/supply/shoes
slot = SLOT_ID_SHOES
-/datum/gear/restricted/supply/accessory
+/datum/loadout_entry/restricted/supply/accessory
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
//Service
-/datum/gear/restricted/service
+/datum/loadout_entry/restricted/service
allowed_roles = list("Head of Personnel", "Bartender", "Botanist", "Janitor", "Chef", "Librarian", "Chaplain")
-/datum/gear/restricted/service/accessory
+/datum/loadout_entry/restricted/service/accessory
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
-/datum/gear/restricted/service/suit
+/datum/loadout_entry/restricted/service/suit
slot = SLOT_ID_SUIT
//Misc.
-/datum/gear/restricted/misc
+/datum/loadout_entry/restricted/misc
allowed_roles = null
-/datum/gear/restricted/misc/head
+/datum/loadout_entry/restricted/misc/head
slot = SLOT_ID_HEAD
-/datum/gear/restricted/misc/uniform
+/datum/loadout_entry/restricted/misc/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/restricted/misc/suit
+/datum/loadout_entry/restricted/misc/suit
slot = SLOT_ID_SUIT
-/datum/gear/restricted/misc/shoes
+/datum/loadout_entry/restricted/misc/shoes
slot = SLOT_ID_SHOES
-/datum/gear/restricted/misc/accessory
+/datum/loadout_entry/restricted/misc/accessory
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
//*Multi-Department Combinations (Aka Multi-Department Drifting)
//Security + Command
-/datum/gear/restricted/sec_com
+/datum/loadout_entry/restricted/sec_com
+ subcategory = "Sec-Com"
allowed_roles = list("Security Officer", "Head of Security", "Warden", "Detective", "Facility Director", "Head of Personnel", "Internal Affairs Agent")
-/datum/gear/restricted/sec_com/eyes
+/datum/loadout_entry/restricted/sec_com/eyes
slot = SLOT_ID_GLASSES
//Engineering + Science + Supply
-/datum/gear/restricted/eng_sci_supply
+/datum/loadout_entry/restricted/eng_sci_supply
allowed_roles = list("Senior Engineer", "Station Engineer", "Chief Engineer", "Atmospheric Technician", "Scientist", "Xenobiologist", "Roboticist", "Senior Researcher", "Explorer", "Pathfinder", "Research Director", "Shaft Miner", "Cargo Technician", "Quartermaster")
-/datum/gear/restricted/eng_sci_supply/eyes
+/datum/loadout_entry/restricted/eng_sci_supply/eyes
slot = SLOT_ID_GLASSES
//Medical + Science
-/datum/gear/restricted/med_sci
+/datum/loadout_entry/restricted/med_sci
+ subcategory = "Med-Sci"
allowed_roles = list("Research Director", "Scientist", "Xenobiologist", "Roboticist", "Explorer", "Senior Researcher", "Pathfinder", "Medical Doctor", "Chief Medical Officer", "Chemist", "Paramedic", "Geneticist", "Psychiatrist", "Field Medic", "Head Nurse")
-/datum/gear/restricted/med_sci/head
+/datum/loadout_entry/restricted/med_sci/head
slot = SLOT_ID_HEAD
-/datum/gear/restricted/med_sci/suit
+/datum/loadout_entry/restricted/med_sci/suit
slot = SLOT_ID_SUIT
/***********************************************************************************/
//**Single-Department Items
//*Security
//Eyes
-/datum/gear/restricted/security/eyes/hud
+/datum/loadout_entry/restricted/security/eyes/hud
name = "Security HUD"
path = /obj/item/clothing/glasses/hud/security
-/datum/gear/restricted/security/eyes/secpatch
+/datum/loadout_entry/restricted/security/eyes/secpatch
name = "Security HUD - Eyepatch"
path = /obj/item/clothing/glasses/hud/security/eyepatch
-/datum/gear/restricted/security/eyes/prescriptionsec
+/datum/loadout_entry/restricted/security/eyes/prescriptionsec
name = "Security HUD - Prescription"
path = /obj/item/clothing/glasses/hud/security/prescription
-/datum/gear/restricted/security/eyes/sunglasshud
+/datum/loadout_entry/restricted/security/eyes/sunglasshud
name = "Security HUD - Sunglasses"
path = /obj/item/clothing/glasses/sunglasses/sechud
-/datum/gear/restricted/security/eyes/aviator
+/datum/loadout_entry/restricted/security/eyes/aviator
name = "Security HUD - Aviators"
path = /obj/item/clothing/glasses/sunglasses/sechud/aviator
-/datum/gear/restricted/security/eyes/aviator/prescription
+/datum/loadout_entry/restricted/security/eyes/aviator/prescription
name = "Security HUD - Aviators, Prescription"
path = /obj/item/clothing/glasses/sunglasses/sechud/aviator/prescription
-/datum/gear/restricted/security/eyes/arglasses_sec
+/datum/loadout_entry/restricted/security/eyes/arglasses_sec
name = "Security AR-S Glasses"
path = /obj/item/clothing/glasses/omnihud/sec
//Head
-/datum/gear/restricted/security/head/beret
+/datum/loadout_entry/restricted/security/head/beret
name = "Security Beret - Red"
path = /obj/item/clothing/head/beret/sec
-/datum/gear/restricted/security/head/beret/naval
+/datum/loadout_entry/restricted/security/head/beret/naval
name = "Security Beret - Naval"
path = /obj/item/clothing/head/beret/sec/navy/officer
-/datum/gear/restricted/security/head/beret/naval/warden
+/datum/loadout_entry/restricted/security/head/beret/naval/warden
name = "Security Warden Beret - Naval"
path = /obj/item/clothing/head/beret/sec/navy/warden
allowed_roles = list("Warden")
-/datum/gear/restricted/security/head/beret/naval/hos
+/datum/loadout_entry/restricted/security/head/beret/naval/hos
name = "Security Head of Security Beret - Naval"
path = /obj/item/clothing/head/beret/sec/navy/hos
allowed_roles = list("Head of Security")
-/datum/gear/restricted/security/head/beret/corporate
+/datum/loadout_entry/restricted/security/head/beret/corporate
name = "Security Beret - Corporate"
path = /obj/item/clothing/head/beret/sec/corporate/officer
-/datum/gear/restricted/security/head/beret/corporate/warden
+/datum/loadout_entry/restricted/security/head/beret/corporate/warden
name = "Security Warden Beret - Corporate"
path = /obj/item/clothing/head/beret/sec/corporate/warden
allowed_roles = list("Warden")
-/datum/gear/restricted/security/head/beret/corporate/hos
+/datum/loadout_entry/restricted/security/head/beret/corporate/hos
name = "Security Head of Security Beret - Corporate"
path = /obj/item/clothing/head/beret/sec/corporate/hos
allowed_roles = list("Head of Security")
-/datum/gear/restricted/security/head/cap
+/datum/loadout_entry/restricted/security/head/cap
name = "Security Cap"
path = /obj/item/clothing/head/soft/sec
-/datum/gear/restricted/security/head/cap/corporate
+/datum/loadout_entry/restricted/security/head/cap/corporate
name = "Security Cap - Corporate Security"
path = /obj/item/clothing/head/soft/sec/corp
-/datum/gear/restricted/security/head/cap/operations
+/datum/loadout_entry/restricted/security/head/cap/operations
name = "Security Cap - Security Operations"
path = /obj/item/clothing/head/operations/security
//Uniform
-/datum/gear/restricted/security/uniform/skirt
+/datum/loadout_entry/restricted/security/uniform/skirt
name = "Security Skirt"
path = /obj/item/clothing/under/rank/security/skirt
-/datum/gear/restricted/security/uniform/skirt
+/datum/loadout_entry/restricted/security/uniform/skirt
name = "Security Pleated Skirt"
path = /obj/item/clothing/under/rank/security/skirt_pleated
-/datum/gear/restricted/security/uniform/skirt/warden
+/datum/loadout_entry/restricted/security/uniform/skirt/warden
name = "Warden Skirt"
path = /obj/item/clothing/under/rank/warden/skirt
allowed_roles = list("Head of Security", "Warden")
-/datum/gear/restricted/security/uniform/skirt/warden_pleated
+/datum/loadout_entry/restricted/security/uniform/skirt/warden_pleated
name = "Wardens Pleated Skirt"
path = /obj/item/clothing/under/rank/warden/skirt_pleated
allowed_roles = list("Head of Security", "Warden")
-/datum/gear/restricted/security/uniform/skirt/hos
+/datum/loadout_entry/restricted/security/uniform/skirt/hos
name = "Head of Security Skirt"
path = /obj/item/clothing/under/rank/head_of_security/skirt
allowed_roles = list("Head of Security")
-/datum/gear/restricted/security/uniform/skirt/hos_pleated
+/datum/loadout_entry/restricted/security/uniform/skirt/hos_pleated
name = "Head of Securitys Pleated Skirt"
path = /obj/item/clothing/under/rank/head_of_security/skirt_pleated
allowed_roles = list("Head of Security")
-/datum/gear/restricted/security/uniform/skirt/hos_pleated_dark
+/datum/loadout_entry/restricted/security/uniform/skirt/hos_pleated_dark
name = "Head of Securitys Dark Pleated Skirt"
path = /obj/item/clothing/under/rank/head_of_security/skirt_pleated/alt
allowed_roles = list("Head of Security")
-/datum/gear/restricted/security/uniform/skirt/detective
+/datum/loadout_entry/restricted/security/uniform/skirt/detective
name = "Detective Suit - Skirt"
path = /obj/item/clothing/under/det/skirt
allowed_roles = list("Detective", "Head of Security")
-/datum/gear/restricted/security/uniform/skirt/detective_pleated
+/datum/loadout_entry/restricted/security/uniform/skirt/detective_pleated
name = "Detective Suit - Pleated Skirt"
path = /obj/item/clothing/under/det/grey/skirt_pleated
allowed_roles = list("Detective", "Head of Security")
-/datum/gear/restricted/security/uniform/corporate
+/datum/loadout_entry/restricted/security/uniform/corporate
name = "Security Uniform - Corporate"
path = /obj/item/clothing/under/rank/security/corp
-/datum/gear/restricted/security/uniform/corporate_fem
+/datum/loadout_entry/restricted/security/uniform/corporate_fem
name = "Security Uniform - Corporate - Female"
path = /obj/item/clothing/under/rank/security/corp_fem
-/datum/gear/restricted/security/uniform/corporate/detective
+/datum/loadout_entry/restricted/security/uniform/corporate/detective
name = "Detective Uniform - Corporate"
path = /obj/item/clothing/under/det/corporate
allowed_roles = list("Detective", "Head of Security")
-/datum/gear/restricted/security/uniform/corporate/detective_fem
+/datum/loadout_entry/restricted/security/uniform/corporate/detective_fem
name = "Detective Uniform - Corporate - Female"
path = /obj/item/clothing/under/det/corporate_fem
allowed_roles = list("Detective", "Head of Security")
-/datum/gear/restricted/security/uniform/detective/fem
+/datum/loadout_entry/restricted/security/uniform/detective/fem
name = "Detective Uniform - Suit - Female"
path = /obj/item/clothing/under/det_fem
allowed_roles = list("Detective", "Head of Security")
-/datum/gear/restricted/security/uniform/detective/fem/tan
+/datum/loadout_entry/restricted/security/uniform/detective/fem/tan
name = "Detective Uniform - Tan - Female"
path = /obj/item/clothing/under/det/grey_fem
allowed_roles = list("Detective", "Head of Security")
-/datum/gear/restricted/security/uniform/detective/fem/spiffy
+/datum/loadout_entry/restricted/security/uniform/detective/fem/spiffy
name = "Detective Uniform - Spiffy - Female"
path = /obj/item/clothing/under/det/black_fem
allowed_roles = list("Detective", "Head of Security")
-/datum/gear/restricted/security/uniform/detective/fem/tidy
+/datum/loadout_entry/restricted/security/uniform/detective/fem/tidy
name = "Detective Uniform - Semi-Tidy - Female"
path = /obj/item/clothing/under/det/waistcoat_fem
allowed_roles = list("Detective", "Head of Security")
-/datum/gear/restricted/security/uniform/detective/fem/serious
+/datum/loadout_entry/restricted/security/uniform/detective/fem/serious
name = "Detective Uniform - Serious - Female"
path = /obj/item/clothing/under/det/grey/waistcoat_fem
-/datum/gear/restricted/security/uniform/corporate/warden //before this was changed it was called the corpwarsuit. shame there's no full borg in a hard rock cafe shirt.
+/datum/loadout_entry/restricted/security/uniform/corporate/warden //before this was changed it was called the corpwarsuit. shame there's no full borg in a hard rock cafe shirt.
name = "Warden Uniform - Corporate"
path = /obj/item/clothing/under/rank/warden/corp
allowed_roles = list("Head of Security", "Warden")
-/datum/gear/restricted/security/uniform/corporate/warden_fem
+/datum/loadout_entry/restricted/security/uniform/corporate/warden_fem
name = "Warden Uniform - Corporate - Female"
path = /obj/item/clothing/under/rank/warden/corp_fem
allowed_roles = list("Head of Security", "Warden")
-/datum/gear/restricted/security/uniform/corporate/hos
+/datum/loadout_entry/restricted/security/uniform/corporate/hos
name = "Head of Security Uniform - Corporate"
path = /obj/item/clothing/under/rank/head_of_security/corp
allowed_roles = list("Head of Security")
-/datum/gear/restricted/security/uniform/corporate/hos_fem
+/datum/loadout_entry/restricted/security/uniform/corporate/hos_fem
name = "Head of Security Uniform - Corporate - Female"
path = /obj/item/clothing/under/rank/head_of_security/corp_fem
-/datum/gear/restricted/security/uniform/navyblue
+/datum/loadout_entry/restricted/security/uniform/navyblue
name = "Security Uniform - Navy Blue"
path = /obj/item/clothing/under/rank/security/navyblue
-/datum/gear/restricted/security/uniform/navyblue_fem
+/datum/loadout_entry/restricted/security/uniform/navyblue_fem
name = "Security Uniform - Navy Blue - Female"
path = /obj/item/clothing/under/rank/security/navyblue_fem
-/datum/gear/restricted/security/uniform/navyblue/warden
+/datum/loadout_entry/restricted/security/uniform/navyblue/warden
name = "Warden Uniform - Navy Blue"
path = /obj/item/clothing/under/rank/warden/navyblue
allowed_roles = list("Head of Security", "Warden")
-/datum/gear/restricted/security/uniform/navyblue/warden_fem
+/datum/loadout_entry/restricted/security/uniform/navyblue/warden_fem
name = "Warden Uniform - Navy Blue - Female"
path = /obj/item/clothing/under/rank/warden/navyblue_fem
allowed_roles = list("Head of Security", "Warden")
-/datum/gear/restricted/security/uniform/navyblue/hos
+/datum/loadout_entry/restricted/security/uniform/navyblue/hos
name = "Head of Security Uniform - Navy Blue"
path = /obj/item/clothing/under/rank/head_of_security/navyblue
allowed_roles = list("Head of Security")
-/datum/gear/restricted/security/uniform/navyblue/hos_fem
+/datum/loadout_entry/restricted/security/uniform/navyblue/hos_fem
name = "Head of Security Funiform - Navy Blue - Female"
path = /obj/item/clothing/under/rank/head_of_security/navyblue_fem
allowed_roles = list("Head of Security")
-/datum/gear/restricted/security/uniform/turtleneck
+/datum/loadout_entry/restricted/security/uniform/turtleneck
name = "Security Turtleneck"
path = /obj/item/clothing/under/rank/security/turtleneck
-/datum/gear/restricted/security/uniform/turtleneck_fem
+/datum/loadout_entry/restricted/security/uniform/turtleneck_fem
name = "Security Turtleneck - Female"
path = /obj/item/clothing/under/rank/security/turtleneck_fem
-/datum/gear/restricted/security/uniform/turtleneck/alt
+/datum/loadout_entry/restricted/security/uniform/turtleneck/alt
name = "Security Turtleneck - Alternative"
path = /obj/item/clothing/under/oricon/utility/sysguard/crew/security
-/datum/gear/restricted/security/uniform/turtleneck/hos
+/datum/loadout_entry/restricted/security/uniform/turtleneck/hos
name = "Head of Security Turtleneck"
path = /obj/item/clothing/under/rank/head_of_security/turtleneck
allowed_roles = list("Head of Security")
-/datum/gear/restricted/security/uniform/bodysuit
+/datum/loadout_entry/restricted/security/uniform/bodysuit
name = "Security Bodysuit"
path = /obj/item/clothing/under/bodysuit/bodysuitsec
-/datum/gear/restricted/security/uniform/bodysuit_fem
+/datum/loadout_entry/restricted/security/uniform/bodysuit_fem
name = "Security Bodysuit - Female"
path = /obj/item/clothing/under/bodysuit/bodysuitsec_fem
-/datum/gear/restricted/security/uniform/bodysuit/command
+/datum/loadout_entry/restricted/security/uniform/bodysuit/command
name = "Security Command Bodysuit"
path = /obj/item/clothing/under/bodysuit/bodysuitseccom
allowed_roles = list("Head of Security", "Warden")
-/datum/gear/restricted/security/uniform/bodysuit/command_fem
+/datum/loadout_entry/restricted/security/uniform/bodysuit/command_fem
name = "Security Command Bodysuit - Female"
path = /obj/item/clothing/under/bodysuit/bodysuitseccom_fem
allowed_roles = list("Head of Security", "Warden")
-/datum/gear/restricted/security/uniform/coveralls
+/datum/loadout_entry/restricted/security/uniform/coveralls
name = "Security Uniform - Coveralls"
path = /obj/item/clothing/under/oricon/utility/fleet/security
-/datum/gear/restricted/security/uniform/fatigues
+/datum/loadout_entry/restricted/security/uniform/fatigues
name = "Security Uniform - Fatigues" //You marine larper.
path = /obj/item/clothing/under/oricon/utility/marine/security
-/datum/gear/restricted/security/uniform/dispatch
+/datum/loadout_entry/restricted/security/uniform/dispatch
name = "Security Uniform - Dispatch"
path = /obj/item/clothing/under/rank/dispatch
//Back
-/datum/gear/restricted/security/back/dufflebag
+/datum/loadout_entry/restricted/security/back/dufflebag
name = "Security - Dufflebag"
path = /obj/item/storage/backpack/dufflebag/sec
allowed_roles = list("Security Officer", "Head of Security", "Warden", "Detective", "Talon Guard")
cost = 2
//Suit
-/datum/gear/restricted/security/suit/forensics
+/datum/loadout_entry/restricted/security/suit/forensics
name = "Detective Forensics - Red"
path = /obj/item/clothing/suit/storage/forensics/red
allowed_roles = list("Detective")
-/datum/gear/restricted/security/suit/forensics/blue
+/datum/loadout_entry/restricted/security/suit/forensics/blue
name = "Detective Forensics - Blue"
path = /obj/item/clothing/suit/storage/forensics/blue
allowed_roles = list("Detective")
-/datum/gear/restricted/security/suit/forensics/long_red
+/datum/loadout_entry/restricted/security/suit/forensics/long_red
name = "Detective Forensics Long - Red"
path = /obj/item/clothing/suit/storage/forensics/red/long
allowed_roles = list("Detective")
-/datum/gear/restricted/security/suit/forensics/long_blue
+/datum/loadout_entry/restricted/security/suit/forensics/long_blue
name = "Detective Forensics Long - Blue"
path = /obj/item/clothing/suit/storage/forensics/blue/long
allowed_roles = list("Detective")
-/datum/gear/restricted/security/suit/wintercoat
+/datum/loadout_entry/restricted/security/suit/wintercoat
name = "Security Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/security
-/datum/gear/restricted/security/suit/wintercoat
+/datum/loadout_entry/restricted/security/suit/wintercoat
name = "Head of Securitys Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/security/hos
allowed_roles = list("Head of Security")
-/datum/gear/restricted/security/suit/operations_coat
+/datum/loadout_entry/restricted/security/suit/operations_coat
name = "Security Operations Jacket"
path = /obj/item/clothing/suit/storage/toggle/operations_coat
-/datum/gear/restricted/security/suit/snowsuit
+/datum/loadout_entry/restricted/security/suit/snowsuit
name = "Security Snowsuit"
path = /obj/item/clothing/suit/storage/snowsuit/security
-/datum/gear/restricted/security/suit/department_jacket
+/datum/loadout_entry/restricted/security/suit/department_jacket
name = "Security Department Jacket"
path = /obj/item/clothing/suit/storage/toggle/sec_dep_jacket
//Depite being declared as an accessory, it is also equippable in the suit slot, and the sprite is so bulky that it "clips" through most suit slot items. Therefore, all loadout cloaks will default to the suit slot.
-/datum/gear/restricted/security/suit/cloak
+/datum/loadout_entry/restricted/security/suit/cloak
name = "Security Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/security
-/datum/gear/restricted/security/suit/cloak/hos
+/datum/loadout_entry/restricted/security/suit/cloak/hos
name = "Head of Security Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/hos
allowed_roles = list("Head of Security")
//Depite being declared as an accessory, it is also equippable in the suit slot, and the sprite is so bulky that it "clips" through most suit slot items. Therefore, all loadout ponchos will default to the suit slot.
-/datum/gear/restricted/security/suit/poncho
+/datum/loadout_entry/restricted/security/suit/poncho
name = "Security Poncho"
path = /obj/item/clothing/accessory/poncho/roles/security
//Shoes
-/datum/gear/restricted/security/shoes/winterboots
+/datum/loadout_entry/restricted/security/shoes/winterboots
name = "Security - Winter Boots"
path = /obj/item/clothing/shoes/boots/winter/security
//*Medical
//Eyes
-/datum/gear/restricted/medical/eyes/hud
+/datum/loadout_entry/restricted/medical/eyes/hud
name = "Medical HUD"
path = /obj/item/clothing/glasses/hud/health
-/datum/gear/restricted/medical/eyes/eyepatch
+/datum/loadout_entry/restricted/medical/eyes/eyepatch
name = "Medical HUD Eyepatch"
path = /obj/item/clothing/glasses/hud/health/eyepatch
-/datum/gear/restricted/medical/eyes/prescriptionmed
+/datum/loadout_entry/restricted/medical/eyes/prescriptionmed
name = "Medical HUD - Prescription"
path = /obj/item/clothing/glasses/hud/health/prescription
-/datum/gear/restricted/medical/eyes/aviator
+/datum/loadout_entry/restricted/medical/eyes/aviator
name = "Medical HUD - Aviators"
path = /obj/item/clothing/glasses/hud/health/aviator
-/datum/gear/restricted/medical/eyes/aviator/prescription
+/datum/loadout_entry/restricted/medical/eyes/aviator/prescription
name = "Medical HUD - Aviators, Prescription"
path = /obj/item/clothing/glasses/hud/health/aviator/prescription
-/datum/gear/restricted/medical/eyes/arglasses_med
+/datum/loadout_entry/restricted/medical/eyes/arglasses_med
name = "Medical AR-M Glasses"
path = /obj/item/clothing/glasses/omnihud/med
//Head
-/datum/gear/restricted/medical/head/paramedic_cap
+/datum/loadout_entry/restricted/medical/head/paramedic_cap
name = "Medical Paramedic Cap"
path = /obj/item/clothing/head/parahat
//Back
-/datum/gear/restricted/medical/back/dufflebag
+/datum/loadout_entry/restricted/medical/back/dufflebag
name = "Medical Dufflebag"
path = /obj/item/storage/backpack/dufflebag/med
allowed_roles = list("Medical Doctor", "Chief Medical Officer", "Chemist", "Paramedic", "Geneticist", "Psychiatrist", "Field Medic", "Talon Doctor")
cost = 2
-/datum/gear/restricted/medical/back/dufflebag/emt
+/datum/loadout_entry/restricted/medical/back/dufflebag/emt
name = "Medical Dufflebag - EMT Variant"
path = /obj/item/storage/backpack/dufflebag/emt
//Uniform
-/datum/gear/restricted/medical/uniform/skirt
+/datum/loadout_entry/restricted/medical/uniform/skirt
name = "Medical Skirt"
path = /obj/item/clothing/under/rank/medical/skirt
-/datum/gear/restricted/medical/uniform/skirt_pleated
+/datum/loadout_entry/restricted/medical/uniform/skirt_pleated
name = "Medical Pleated Skirt"
path = /obj/item/clothing/under/rank/medical/skirt_pleated
-/datum/gear/restricted/medical/uniform/jeans/chem
+/datum/loadout_entry/restricted/medical/uniform/jeans/chem
name = "Chemist Jumpjeans"
path = /obj/item/clothing/under/rank/chemist/jeans
allowed_roles = list("Chief Medical Officer", "Chemist")
-/datum/gear/restricted/medical/uniform/fem_jeans/chem
+/datum/loadout_entry/restricted/medical/uniform/fem_jeans/chem
name = "Chemist Jumpjeans - Female"
path = /obj/item/clothing/under/rank/chemist/fem_jeans
allowed_roles = list("Chief Medical Officer", "Chemist")
-/datum/gear/restricted/medical/uniform/skirt/chem
+/datum/loadout_entry/restricted/medical/uniform/skirt/chem
name = "Chemist Skirt"
path = /obj/item/clothing/under/rank/chemist/skirt
allowed_roles = list("Chief Medical Officer", "Chemist")
-/datum/gear/restricted/medical/uniform/skirt/chem_pleated
+/datum/loadout_entry/restricted/medical/uniform/skirt/chem_pleated
name = "Chemists Pleated Skirt"
path = /obj/item/clothing/under/rank/chemist/skirt_pleated
allowed_roles = list("Chief Medical Officer", "Chemist")
-/datum/gear/restricted/medical/uniform/jeans/viro
+/datum/loadout_entry/restricted/medical/uniform/jeans/viro
name = "Virologists Jumpjeans"
path = /obj/item/clothing/under/rank/virologist/jeans
allowed_roles = list("Chief Medical Officer", "Medical Doctor")
-/datum/gear/restricted/medical/uniform/fem_jeans/viro
+/datum/loadout_entry/restricted/medical/uniform/fem_jeans/viro
name = "Virologists Jumpjeans - Female"
path = /obj/item/clothing/under/rank/virologist/fem_jeans
allowed_roles = list("Chief Medical Officer", "Medical Doctor")
-/datum/gear/restricted/medical/uniform/skirt/viro
+/datum/loadout_entry/restricted/medical/uniform/skirt/viro
name = "Virologist Skirt"
path = /obj/item/clothing/under/rank/virologist/skirt
allowed_roles = list("Chief Medical Officer", "Medical Doctor")
-/datum/gear/restricted/medical/uniform/skirt/viro_pleated
+/datum/loadout_entry/restricted/medical/uniform/skirt/viro_pleated
name = "Virologists Pleated Skirt"
path = /obj/item/clothing/under/rank/virologist/skirt_pleated
allowed_roles = list("Chief Medical Officer", "Medical Doctor")
-/datum/gear/restricted/medical/uniform/jeans/cmo
+/datum/loadout_entry/restricted/medical/uniform/jeans/cmo
name = "Chief Medical Officers Jumpjeans"
path = /obj/item/clothing/under/rank/chief_medical_officer/jeans
allowed_roles = list("Chief Medical Officer")
-/datum/gear/restricted/medical/uniform/fem_jeans/cmo
+/datum/loadout_entry/restricted/medical/uniform/fem_jeans/cmo
name = "Chief Medical Officers Jumpjeans - Female"
path = /obj/item/clothing/under/rank/chief_medical_officer/fem_jeans
allowed_roles = list("Chief Medical Officer")
-/datum/gear/restricted/medical/uniform/skirt/cmo
+/datum/loadout_entry/restricted/medical/uniform/skirt/cmo
name = "Chief Medical Officer Skirt"
path = /obj/item/clothing/under/rank/chief_medical_officer/skirt
allowed_roles = list("Chief Medical Officer")
-/datum/gear/restricted/medical/uniform/skirt/cmo_pleated
+/datum/loadout_entry/restricted/medical/uniform/skirt/cmo_pleated
name = "Chief Medical Officers Pleated Skirt"
path = /obj/item/clothing/under/rank/chief_medical_officer/skirt_pleated
allowed_roles = list("Chief Medical Officer")
-/datum/gear/restricted/medical/uniform/turtleneck
+/datum/loadout_entry/restricted/medical/uniform/turtleneck
name = "Medical Turtleneck"
path = /obj/item/clothing/under/rank/medical/turtleneck
-/datum/gear/restricted/medical/uniform/turtleneck_fem
+/datum/loadout_entry/restricted/medical/uniform/turtleneck_fem
name = "Medical Turtleneck - Female"
path = /obj/item/clothing/under/rank/medical/turtleneck_fem
-/datum/gear/restricted/medical/uniform/turtleneck/alt
+/datum/loadout_entry/restricted/medical/uniform/turtleneck/alt
name = "Medical Turtleneck - Alternative"
path = /obj/item/clothing/under/oricon/utility/sysguard/crew/medical
-/datum/gear/restricted/medical/uniform/coveralls
+/datum/loadout_entry/restricted/medical/uniform/coveralls
name = "Medical Uniform - Coveralls"
path = /obj/item/clothing/under/oricon/utility/fleet/medical
-/datum/gear/restricted/medical/uniform/fatigues
+/datum/loadout_entry/restricted/medical/uniform/fatigues
name = "Medical Uniform - Fatigues"
path = /obj/item/clothing/under/oricon/utility/marine/medical
-/datum/gear/restricted/medical/uniform/jeans
+/datum/loadout_entry/restricted/medical/uniform/jeans
name = "Medical Uniform - Jeans"
path = /obj/item/clothing/under/rank/medical/jeans
-/datum/gear/restricted/medical/uniform/fem_jeans
+/datum/loadout_entry/restricted/medical/uniform/fem_jeans
name = "Medical Uniform - Female Jeans"
path = /obj/item/clothing/under/rank/medical/fem_jeans
-/datum/gear/restricted/medical/uniform/paramedic
+/datum/loadout_entry/restricted/medical/uniform/paramedic
name = "Medical Uniform - Paramedic Light"
path = /obj/item/clothing/under/paramedunilight
-/datum/gear/restricted/medical/uniform/paramedic/dark
+/datum/loadout_entry/restricted/medical/uniform/paramedic/dark
name = "Medical Uniform - Paramedic Dark"
path = /obj/item/clothing/under/paramedunidark
-/datum/gear/restricted/medical/uniform/paramedic/skirt_pleated
+/datum/loadout_entry/restricted/medical/uniform/paramedic/skirt_pleated
name = "Medical Skirt - Paramedic Skirt Light"
path = /obj/item/clothing/under/parameduniskirtlight
-/datum/gear/restricted/medical/uniform/paramedic/skirt/dark_pleated
+/datum/loadout_entry/restricted/medical/uniform/paramedic/skirt/dark_pleated
name = "Medical Skirt - Paramedic Skirt Dark"
path = /obj/item/clothing/under/parameduniskirtdark
-/datum/gear/restricted/medical/uniform/bodysuit
+/datum/loadout_entry/restricted/medical/uniform/bodysuit
name = "Medical Bodysuit - EMT"
path = /obj/item/clothing/under/bodysuit/bodysuitemt
-/datum/gear/restricted/medical/uniform/bodysuit_fem
+/datum/loadout_entry/restricted/medical/uniform/bodysuit_fem
name = "Medical Bodysuit - EMT - Female"
path = /obj/item/clothing/under/bodysuit/bodysuitemt_fem
-/datum/gear/restricted/medical/uniform/psych_fem
+/datum/loadout_entry/restricted/medical/uniform/psych_fem
name = "Psychologists Turtleneck - Female"
path = /obj/item/clothing/under/rank/psych/turtleneck_fem
//Suit
-/datum/gear/restricted/medical/suit/wintercoat
+/datum/loadout_entry/restricted/medical/suit/wintercoat
name = "Medical Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical
-/datum/gear/restricted/medical/suit/wintercoat/paramedic
+/datum/loadout_entry/restricted/medical/suit/wintercoat/paramedic
name = "Medical Winter Coat, Paramedic"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/para
-/datum/gear/restricted/medical/suit/wintercoat/chemist
+/datum/loadout_entry/restricted/medical/suit/wintercoat/chemist
name = "Medical Winter Coat, Chemist"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/chemistry
-/datum/gear/restricted/medical/suit/wintercoat/viro
+/datum/loadout_entry/restricted/medical/suit/wintercoat/viro
name = "Medical Winter Coat, Virologist"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/viro
-/datum/gear/restricted/medical/suit/wintercoat/genetics
+/datum/loadout_entry/restricted/medical/suit/wintercoat/genetics
name = "Medical Winter Coat, Geneticist"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/genetics
-/datum/gear/restricted/medical/suit/wintercoat/cmo
+/datum/loadout_entry/restricted/medical/suit/wintercoat/cmo
name = "Medical Winter Coat, CMO"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/cmo
allowed_roles = list("Chief Medical Officer")
-/datum/gear/restricted/medical/suit/surgical_apron
+/datum/loadout_entry/restricted/medical/suit/surgical_apron
name = "Medical Surgical Apron"
path = /obj/item/clothing/suit/surgicalapron
-/datum/gear/restricted/medical/suit/paramedic_jacket
+/datum/loadout_entry/restricted/medical/suit/paramedic_jacket
name = "Medical Paramedic Jacket"
path = /obj/item/clothing/suit/toggle/paramed
-/datum/gear/restricted/medical/suit/emt_vest
+/datum/loadout_entry/restricted/medical/suit/emt_vest
name = "Medical EMT Vest"
path = /obj/item/clothing/suit/toggle/labcoat/paramedic
-/datum/gear/restricted/medical/suit/snowsuit
+/datum/loadout_entry/restricted/medical/suit/snowsuit
name = "Medical Snowsuit"
path = /obj/item/clothing/suit/storage/snowsuit/medical
-/datum/gear/restricted/medical/suit/labcoat_emt
+/datum/loadout_entry/restricted/medical/suit/labcoat_emt
name = "Medical Labcoat - EMT"
path = /obj/item/clothing/suit/storage/toggle/labcoat/emt
-/datum/gear/restricted/medical/suit/labcoat_blue
+/datum/loadout_entry/restricted/medical/suit/labcoat_blue
name = "Medical Labcoat - Blue"
path = /obj/item/clothing/suit/storage/toggle/labcoat/blue
-/datum/gear/restricted/medical/suit/department_jacket
+/datum/loadout_entry/restricted/medical/suit/department_jacket
name = "Medical Department Jacket"
path = /obj/item/clothing/suit/storage/toggle/med_dep_jacket
-/datum/gear/restricted/medical/suit/cloak
+/datum/loadout_entry/restricted/medical/suit/cloak
name = "Medical Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/medical
-/datum/gear/restricted/medical/suit/cloak/cmo
+/datum/loadout_entry/restricted/medical/suit/cloak/cmo
name = "Chief Medical Officer - Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/cmo
allowed_roles = list("Chief Medical Officer")
-/datum/gear/restricted/medical/suit/poncho
+/datum/loadout_entry/restricted/medical/suit/poncho
name = "Medical Poncho"
path = /obj/item/clothing/accessory/poncho/roles/medical
-/datum/gear/restricted/medical/suit/labcoat_viro_classic
+/datum/loadout_entry/restricted/medical/suit/labcoat_viro_classic
name = "Medical Labcoat - Virologist (Classic)"
path = /obj/item/clothing/suit/storage/toggle/labcoat/virologist/classic
allowed_roles = list("Virologist")
-/datum/gear/restricted/medical/suit/labcoat_viro
+/datum/loadout_entry/restricted/medical/suit/labcoat_viro
name = "Medical Labcoat - Virologist"
path = /obj/item/clothing/suit/storage/toggle/labcoat/virologist
allowed_roles = list("Virologist")
-/datum/gear/restricted/medical/suit/labcoat_geneticist
+/datum/loadout_entry/restricted/medical/suit/labcoat_geneticist
name = "Medical Labcoat - Geneticist"
path = /obj/item/clothing/suit/storage/toggle/labcoat/genetics
-/datum/gear/restricted/medical/suit/labcoat_geneticist_classic
+/datum/loadout_entry/restricted/medical/suit/labcoat_geneticist_classic
name = "Medical Labcoat - Geneticist (Classic)"
path = /obj/item/clothing/suit/storage/toggle/labcoat/genetics/classic
-/datum/gear/restricted/medical/suit/labcoat_chemist
+/datum/loadout_entry/restricted/medical/suit/labcoat_chemist
name = "Medical Labcoat - Chemist"
path = /obj/item/clothing/suit/storage/toggle/labcoat/chemist
allowed_roles = list("Chemist")
-/datum/gear/restricted/medical/suit/labcoat_chemist_classic
+/datum/loadout_entry/restricted/medical/suit/labcoat_chemist_classic
name = "Medical Labcoat - Chemist (Classic)"
path = /obj/item/clothing/suit/storage/toggle/labcoat/chemist/classic
allowed_roles = list("Chemist")
-/datum/gear/restricted/medical/suit/labcoat_emt
+/datum/loadout_entry/restricted/medical/suit/labcoat_emt
name = "Medical Labcoat - EMT"
path = /obj/item/clothing/suit/storage/toggle/labcoat/virologist/classic
//Shoes
-/datum/gear/restricted/medical/shoes/winterboots
+/datum/loadout_entry/restricted/medical/shoes/winterboots
name = "Medical - Winter Boots"
path = /obj/item/clothing/shoes/boots/winter/medical
//Accessories
-/datum/gear/restricted/medical/accessory/stethoscope
+/datum/loadout_entry/restricted/medical/accessory/stethoscope
name = "Medical - Stethoscope"
path = /obj/item/clothing/accessory/stethoscope
//*Engineering
//Eyes
-/datum/gear/restricted/engineering/eyes/arglasses_eng
+/datum/loadout_entry/restricted/engineering/eyes/arglasses_eng
name = "Engineering AR-E Glasses"
path = /obj/item/clothing/glasses/omnihud/eng
//Head
-/datum/gear/restricted/engineering/head/beret
+/datum/loadout_entry/restricted/engineering/head/beret
name = "Engineering Beret"
path = /obj/item/clothing/head/beret/engineering
-/datum/gear/restricted/engineering/head/operations_cap
+/datum/loadout_entry/restricted/engineering/head/operations_cap
name = "Engineering Cap - Engineering Operations"
path = /obj/item/clothing/head/operations/engineering
//Back
-/datum/gear/restricted/engineering/back/dufflebag
+/datum/loadout_entry/restricted/engineering/back/dufflebag
name = "Engineering Dufflebag"
path = /obj/item/storage/backpack/dufflebag/eng
allowed_roles = list("Station Engineer", "Chief Engineer", "Atmospheric Technician", "Talon Engineer")
cost = 2
//Uniform
-/datum/gear/restricted/engineering/uniform/jeans/ce
+/datum/loadout_entry/restricted/engineering/uniform/jeans/ce
name = "Chief Engineers Jumpjeans"
path = /obj/item/clothing/under/rank/chief_engineer/jeans
allowed_roles = list("Chief Engineer")
-/datum/gear/restricted/engineering/uniform/fem_jeans/ce
+/datum/loadout_entry/restricted/engineering/uniform/fem_jeans/ce
name = "Chief Engineers Jumpjeans - Female"
path = /obj/item/clothing/under/rank/chief_engineer/fem_jeans
allowed_roles = list("Chief Engineer")
-/datum/gear/restricted/engineering/uniform/ce_skirt
+/datum/loadout_entry/restricted/engineering/uniform/ce_skirt
name = "Chief Engineer Skirt"
path = /obj/item/clothing/under/rank/chief_engineer/skirt
allowed_roles = list("Chief Engineer")
-/datum/gear/restricted/engineering/uniform/ce_pleated_skirt
+/datum/loadout_entry/restricted/engineering/uniform/ce_pleated_skirt
name = "Chief Engineers Pleated Skirt"
path = /obj/item/clothing/under/rank/chief_engineer/skirt_pleated
allowed_roles = list("Chief Engineer")
-/datum/gear/restricted/engineering/uniform/jeans/atmos
+/datum/loadout_entry/restricted/engineering/uniform/jeans/atmos
name = "Atmospheric Technicians Jumpjeans"
path = /obj/item/clothing/under/rank/atmospheric_technician/jeans
allowed_roles = list("Chief Engineer", "Atmospheric Technician")
-/datum/gear/restricted/engineering/uniform/fem_jeans/atmos
+/datum/loadout_entry/restricted/engineering/uniform/fem_jeans/atmos
name = "Atmospheric Technicians Jumpjeans - Female"
path = /obj/item/clothing/under/rank/atmospheric_technician/fem_jeans
allowed_roles = list("Chief Engineer", "Atmospheric Technician")
-/datum/gear/restricted/engineering/uniform/atmos_skirt
+/datum/loadout_entry/restricted/engineering/uniform/atmos_skirt
name = "Atmospherics Skirt"
path = /obj/item/clothing/under/rank/atmospheric_technician/skirt
allowed_roles = list("Chief Engineer", "Atmospheric Technician")
-/datum/gear/restricted/engineering/uniform/atmos_pleated_skirt
+/datum/loadout_entry/restricted/engineering/uniform/atmos_pleated_skirt
name = "Atmospherics Pleated Skirt"
path = /obj/item/clothing/under/rank/atmospheric_technician/skirt_pleated
allowed_roles = list("Chief Engineer", "Atmospheric Technician")
-/datum/gear/restricted/engineering/uniform/jeans
+/datum/loadout_entry/restricted/engineering/uniform/jeans
name = "Engineering Jumpjeans"
path = /obj/item/clothing/under/rank/engineer/jeans
-/datum/gear/restricted/engineering/uniform/fem_jeans
+/datum/loadout_entry/restricted/engineering/uniform/fem_jeans
name = "Engineering Jumpjeans - Female"
path = /obj/item/clothing/under/rank/engineer/fem_jeans
-/datum/gear/restricted/engineering/uniform/eng_skirt
+/datum/loadout_entry/restricted/engineering/uniform/eng_skirt
name = "Engineering Skirt"
path = /obj/item/clothing/under/rank/engineer/skirt
-/datum/gear/restricted/engineering/uniform/eng_skirt_pleated
+/datum/loadout_entry/restricted/engineering/uniform/eng_skirt_pleated
name = "Engineers Pleated Skirt"
path = /obj/item/clothing/under/rank/engineer/skirt_pleated
allowed_roles = list("Chief Engineer", "Atmospheric Techician")
-/datum/gear/restricted/engineering/uniform/bodysuit
+/datum/loadout_entry/restricted/engineering/uniform/bodysuit
name = "Engineering Bodysuit"
path = /obj/item/clothing/under/bodysuit/bodysuithazard
-/datum/gear/restricted/engineering/uniform/bodysuit_fem
+/datum/loadout_entry/restricted/engineering/uniform/bodysuit_fem
name = "Engineering Bodysuit - Female"
path = /obj/item/clothing/under/bodysuit/bodysuithazard_fem
-/datum/gear/restricted/engineering/uniform/turtleneck
+/datum/loadout_entry/restricted/engineering/uniform/turtleneck
name = "Engineering Turtleneck"
path = /obj/item/clothing/under/rank/engineer/turtleneck
-/datum/gear/restricted/engineering/uniform/turtleneck_fem
+/datum/loadout_entry/restricted/engineering/uniform/turtleneck_fem
name = "Engineering Turtleneck - Female"
path = /obj/item/clothing/under/rank/engineer/turtleneck
-/datum/gear/restricted/engineering/uniform/turtleneck/alt
+/datum/loadout_entry/restricted/engineering/uniform/turtleneck/alt
name = "Engineering Turtleneck - Alt"
path = /obj/item/clothing/under/oricon/utility/sysguard/crew/engineering
-/datum/gear/restricted/engineering/uniform/coveralls
+/datum/loadout_entry/restricted/engineering/uniform/coveralls
name = "Engineering Uniform - Coveralls"
path = /obj/item/clothing/under/oricon/utility/fleet/engineering
-/datum/gear/restricted/engineering/uniform/fatigues
+/datum/loadout_entry/restricted/engineering/uniform/fatigues
name = "Engineering Uniform - Fatigues"
path = /obj/item/clothing/under/oricon/utility/marine/engineering
//Suit
-/datum/gear/restricted/engineering/suit/wintercoat
+/datum/loadout_entry/restricted/engineering/suit/wintercoat
name = "Engineering Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/engineering
-/datum/gear/restricted/engineering/suit/wintercoat/atmos
+/datum/loadout_entry/restricted/engineering/suit/wintercoat/atmos
name = "Atmospherics Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos
allowed_roles = list("Chief Engineer", "Atmospheric Technician")
-/datum/gear/restricted/engineering/suit/wintercoat/ce
+/datum/loadout_entry/restricted/engineering/suit/wintercoat/ce
name = "Chief Engineers Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/ce
allowed_roles = list("Chief Engineer")
-/datum/gear/restricted/engineering/suit/operations_coat
+/datum/loadout_entry/restricted/engineering/suit/operations_coat
name = "Engineering Operations Jacket"
path = /obj/item/clothing/suit/storage/toggle/operations_coat/engineering
-/datum/gear/restricted/engineering/suit/snowsuit
+/datum/loadout_entry/restricted/engineering/suit/snowsuit
name = "Engineering Snowsuit"
path = /obj/item/clothing/suit/storage/snowsuit/engineering
-/datum/gear/restricted/engineering/suit/department_jacket
+/datum/loadout_entry/restricted/engineering/suit/department_jacket
name = "Engineering Department Jacket"
path = /obj/item/clothing/suit/storage/toggle/engi_dep_jacket
-/datum/gear/restricted/engineering/suit/cloak
+/datum/loadout_entry/restricted/engineering/suit/cloak
name = "Engineering Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/engineer
-/datum/gear/restricted/engineering/suit/cloak/atmos
+/datum/loadout_entry/restricted/engineering/suit/cloak/atmos
name = "Atmospherics Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/atmos
-/datum/gear/restricted/engineering/suit/cloak/ce
+/datum/loadout_entry/restricted/engineering/suit/cloak/ce
name = "Chief Engineer - Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/ce
allowed_roles = list("Chief Engineer")
-/datum/gear/restricted/engineering/suit/poncho
+/datum/loadout_entry/restricted/engineering/suit/poncho
name = "Engineering Poncho"
path = /obj/item/clothing/accessory/poncho/roles/engineering
//Shoes
-/datum/gear/restricted/engineering/shoes/winterboots
+/datum/loadout_entry/restricted/engineering/shoes/winterboots
name = "Engineering - Winter Boots"
path = /obj/item/clothing/shoes/boots/winter/engineering
-/datum/gear/restricted/engineering/shoes/winterboots/atmos
+/datum/loadout_entry/restricted/engineering/shoes/winterboots/atmos
name = "Atmospherics Winter Boots"
path = /obj/item/clothing/shoes/boots/winter/atmos
allowed_roles = list("Chief Engineer", "Atmospheric Technician")
@@ -977,123 +985,123 @@
//*Supply
//Eyes
-/datum/gear/restricted/supply/eyes/material
+/datum/loadout_entry/restricted/supply/eyes/material
name = "(Supply) Optical Material Scanners"
path = /obj/item/clothing/glasses/material
-/datum/gear/restricted/supply/eyes/material/prescription
+/datum/loadout_entry/restricted/supply/eyes/material/prescription
name = "(Supply) Optical Material Scanners - Prescription"
path = /obj/item/clothing/glasses/material/prescription
//Uniforms
-/datum/gear/restricted/supply/uniform/jeans_qm
+/datum/loadout_entry/restricted/supply/uniform/jeans_qm
name = "Quartermaster Jeans"
path = /obj/item/clothing/under/rank/cargo/jeans
allowed_roles = list("Quartermaster")
-/datum/gear/restricted/supply/uniform/jeans_qm/female
+/datum/loadout_entry/restricted/supply/uniform/jeans_qm/female
name = "Quartermaster Jeans - Female"
path = /obj/item/clothing/under/rank/cargo/jeans/female
allowed_roles = list("Quartermaster")
-/datum/gear/restricted/supply/uniform/jeans_cargo
+/datum/loadout_entry/restricted/supply/uniform/jeans_cargo
name = "Cargo Jeans"
path = /obj/item/clothing/under/rank/cargotech/jeans
-/datum/gear/restricted/supply/uniform/jeans_cargo/female
+/datum/loadout_entry/restricted/supply/uniform/jeans_cargo/female
name = "Cargo Jeans - Female"
path = /obj/item/clothing/under/rank/cargotech/jeans/female
-/datum/gear/restricted/supply/uniform/skirt
+/datum/loadout_entry/restricted/supply/uniform/skirt
name = "Cargo Skirt"
path = /obj/item/clothing/under/rank/cargotech/skirt
-/datum/gear/restricted/supply/uniform/skirt
+/datum/loadout_entry/restricted/supply/uniform/skirt
name = "Cargo Pleated Skirt"
path = /obj/item/clothing/under/rank/cargotech/skirt_pleated
-/datum/gear/restricted/supply/uniform/skirt/qm
+/datum/loadout_entry/restricted/supply/uniform/skirt/qm
name = "Quartermaster Skirt"
path = /obj/item/clothing/under/rank/cargo/skirt
allowed_roles = list("Quartermaster")
-/datum/gear/restricted/supply/uniform/qm_skirt_pleated
+/datum/loadout_entry/restricted/supply/uniform/qm_skirt_pleated
name = "Quartermasters Pleated Skirt"
path = /obj/item/clothing/under/rank/cargo/skirt_pleated
allowed_roles = list("Quartermaster")
-/datum/gear/restricted/supply/uniform/bodysuit_miner
+/datum/loadout_entry/restricted/supply/uniform/bodysuit_miner
name = "Mining Bodysuit"
path = /obj/item/clothing/under/bodysuit/bodysuitminer
allowed_roles = list("Quartermaster", "Shaft Miner")
-/datum/gear/restricted/supply/uniform/bodysuit_miner_fem
+/datum/loadout_entry/restricted/supply/uniform/bodysuit_miner_fem
name = "Mining Bodysuit - Female"
path = /obj/item/clothing/under/bodysuit/bodysuitminer_fem
allowed_roles = list("Quartermaster", "Shaft Miner")
-/datum/gear/restricted/supply/uniform/turtleneck
+/datum/loadout_entry/restricted/supply/uniform/turtleneck
name = "Cargo Turtleneck"
path = /obj/item/clothing/under/oricon/utility/sysguard/crew/supply
-/datum/gear/restricted/supply/uniform/coveralls
+/datum/loadout_entry/restricted/supply/uniform/coveralls
name = "Cargo Uniform - Coveralls"
path = /obj/item/clothing/under/oricon/utility/fleet/supply
-/datum/gear/restricted/supply/uniform/fatigues
+/datum/loadout_entry/restricted/supply/uniform/fatigues
name = "Cargo Uniform - Fatigues"
path = /obj/item/clothing/under/oricon/utility/marine/supply
//Suit
-/datum/gear/restricted/supply/suit/snowsuit
+/datum/loadout_entry/restricted/supply/suit/snowsuit
name = "Cargo Snowsuit"
path = /obj/item/clothing/suit/storage/snowsuit/cargo
-/datum/gear/restricted/supply/suit/wintercoat
+/datum/loadout_entry/restricted/supply/suit/wintercoat
name = "Cargo Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/cargo
-/datum/gear/restricted/supply/suit/wintercoat/qm
+/datum/loadout_entry/restricted/supply/suit/wintercoat/qm
name = "Quartermasters Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/qm
allowed_roles = list("Quartermaster")
-/datum/gear/restricted/supply/suit/wintercoat/mining
+/datum/loadout_entry/restricted/supply/suit/wintercoat/mining
name = "Mining Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/miner
allowed_roles = list("Quartermaster", "Shaft Miner")
-/datum/gear/restricted/supply/suit/department_jacket
+/datum/loadout_entry/restricted/supply/suit/department_jacket
name = "Cargo Department Jacket"
path = /obj/item/clothing/suit/storage/toggle/supply_dep_jacket
-/datum/gear/restricted/supply/suit/cloak
+/datum/loadout_entry/restricted/supply/suit/cloak
name = "Cargo Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/cargo
-/datum/gear/restricted/supply/suit/cloak/mining
+/datum/loadout_entry/restricted/supply/suit/cloak/mining
name = "Mining Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/mining
-/datum/gear/restricted/supply/suit/cloak/qm
+/datum/loadout_entry/restricted/supply/suit/cloak/qm
name = "Quartermaster - Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/qm
allowed_roles = list("Quartermaster")
-/datum/gear/restricted/supply/suit/poncho
+/datum/loadout_entry/restricted/supply/suit/poncho
name = "Cargo Poncho"
path = /obj/item/clothing/accessory/poncho/roles/cargo
-/datum/gear/restricted/supply/suit/overcoat
+/datum/loadout_entry/restricted/supply/suit/overcoat
name = "Cargo Great Overcoat"
path = /obj/item/clothing/suit/storage/vest/formal/cargo
//Shoes
-/datum/gear/restricted/supply/shoes/winterboots
+/datum/loadout_entry/restricted/supply/shoes/winterboots
name = "Cargo Winter Boots"
path = /obj/item/clothing/shoes/boots/winter/supply
-/datum/gear/restricted/supply/shoes/winterboots/mining
+/datum/loadout_entry/restricted/supply/shoes/winterboots/mining
name = "Mining Winter Boots"
path = /obj/item/clothing/shoes/boots/winter/mining
allowed_roles = list("Shaft Miner", "Quartermaster")
@@ -1105,273 +1113,273 @@
//*Science
//Head
-/datum/gear/restricted/science/head/beret
+/datum/loadout_entry/restricted/science/head/beret
name = "Science Beret"
path = /obj/item/clothing/head/beret/science
//Back
-/datum/gear/restricted/science/back/dufflebag
+/datum/loadout_entry/restricted/science/back/dufflebag
name = "Science Dufflebag"
path = /obj/item/storage/backpack/dufflebag/sci
cost = 2
//Uniform
-/datum/gear/restricted/science/uniform/rd_pleated_skirt
+/datum/loadout_entry/restricted/science/uniform/rd_pleated_skirt
name = "Research Directors Pleated Skirt"
path = /obj/item/clothing/under/rank/research_director/skirt_pleated
allowed_roles = list("Research Director")
-/datum/gear/restricted/science/uniform/rd_whimsical_skirt
+/datum/loadout_entry/restricted/science/uniform/rd_whimsical_skirt
name = "Research Directors Whimsical Pleated Skirt"
path = /obj/item/clothing/under/rank/research_director/skirt_pleated/whimsical
allowed_roles = list("Research Director")
-/datum/gear/restricted/science/uniform/rd_turtleneck_skirt
+/datum/loadout_entry/restricted/science/uniform/rd_turtleneck_skirt
name = "Research Directors Turtleneck Pleated Skirt"
path = /obj/item/clothing/under/rank/research_director/skirt_pleated/turtleneck
-/datum/gear/restricted/science/uniform/skirt
+/datum/loadout_entry/restricted/science/uniform/skirt
name = "Science Skirt"
path = /obj/item/clothing/under/rank/scientist/skirt
-/datum/gear/restricted/science/uniform/skirt_pleated
+/datum/loadout_entry/restricted/science/uniform/skirt_pleated
name = "Scientists Pleated Skirt"
path = /obj/item/clothing/under/rank/scientist/skirt_pleated
-/datum/gear/restricted/science/uniform/alt/roboticist
+/datum/loadout_entry/restricted/science/uniform/alt/roboticist
name = "Roboticists Jumpsuit - Gold"
path = /obj/item/clothing/under/rank/roboticist/alt
allowed_roles = list("Research Director", "Roboticist")
-/datum/gear/restricted/science/uniform/skirt/roboticist
+/datum/loadout_entry/restricted/science/uniform/skirt/roboticist
name = "Roboticist Skirt"
path = /obj/item/clothing/under/rank/roboticist/skirt
allowed_roles = list("Research Director", "Roboticist")
-/datum/gear/restricted/science/uniform/skirt/roboticist_pleated
+/datum/loadout_entry/restricted/science/uniform/skirt/roboticist_pleated
name = "Roboticists Pleated Skirt"
path = /obj/item/clothing/under/rank/roboticist/skirt_pleated
allowed_roles = list("Research Director", "Roboticist")
-/datum/gear/restricted/science/uniform/turtleneck
+/datum/loadout_entry/restricted/science/uniform/turtleneck
name = "Science Turtleneck"
path = /obj/item/clothing/under/rank/scientist/turtleneck
-/datum/gear/restricted/science/uniform/turtleneck_fem
+/datum/loadout_entry/restricted/science/uniform/turtleneck_fem
name = "Science Turtleneck - Female"
path = /obj/item/clothing/under/rank/scientist/turtleneck_fem
-/datum/gear/restricted/science/uniform/turtleneck/alt
+/datum/loadout_entry/restricted/science/uniform/turtleneck/alt
name = "Science Turtleneck - Alt"
path = /obj/item/clothing/under/oricon/utility/sysguard/crew/research
-/datum/gear/restricted/science/uniform/coveralls
+/datum/loadout_entry/restricted/science/uniform/coveralls
name = "Science Uniform - Coveralls"
path = /obj/item/clothing/under/oricon/utility/fleet/exploration
-/datum/gear/restricted/science/uniform/fatigues
+/datum/loadout_entry/restricted/science/uniform/fatigues
name = "Science Uniform - Fatigues"
path = /obj/item/clothing/under/oricon/utility/marine/research
-/datum/gear/restricted/science/uniform/jeans
+/datum/loadout_entry/restricted/science/uniform/jeans
name = "Science Uniform - Jeans"
path = /obj/item/clothing/under/rank/scientist/jeans
-/datum/gear/restricted/science/uniform/fem_jeans
+/datum/loadout_entry/restricted/science/uniform/fem_jeans
name = "Science Uniform - Female Jeans"
path = /obj/item/clothing/under/rank/scientist/femjeans
//Suit
-/datum/gear/restricted/science/suit/wintercoat
+/datum/loadout_entry/restricted/science/suit/wintercoat
name = "Science Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/science
-/datum/gear/restricted/science/suit/wintercoat/rd
+/datum/loadout_entry/restricted/science/suit/wintercoat/rd
name = "Research Directors Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/science/rd
allowed_roles = list("Research Director")
-/datum/gear/restricted/science/suit/wintercoat/robotics
+/datum/loadout_entry/restricted/science/suit/wintercoat/robotics
name = "Robotics Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/science/robotics
-/datum/gear/restricted/science/suit/snowsuit
+/datum/loadout_entry/restricted/science/suit/snowsuit
name = "Science Snowsuit"
path = /obj/item/clothing/suit/storage/snowsuit/science
-/datum/gear/restricted/science/suit/labcoat
+/datum/loadout_entry/restricted/science/suit/labcoat
name = "Research Labcoat"
path = /obj/item/clothing/suit/storage/toggle/labcoat/science
-/datum/gear/restricted/science/suit/labcoat/roboticist
+/datum/loadout_entry/restricted/science/suit/labcoat/roboticist
name = "Research Labcoat - Robotics"
path = /obj/item/clothing/suit/storage/toggle/labcoat/robotics
allowed_roles = list("Research Director", "Roboticist")
-/datum/gear/restricted/science/suit/labcoat_classic
+/datum/loadout_entry/restricted/science/suit/labcoat_classic
name = "Research Labcoat (Classic)"
path = /obj/item/clothing/suit/storage/toggle/labcoat/science/classic
-/datum/gear/restricted/science/suit/labcoat/roboticist_classic
+/datum/loadout_entry/restricted/science/suit/labcoat/roboticist_classic
name = "Research Labcoat - Robotics (Classic)"
path = /obj/item/clothing/suit/storage/toggle/labcoat/robotics/classic
allowed_roles = list("Research Director", "Roboticist")
-/datum/gear/restricted/science/suit/labcoat/rd
+/datum/loadout_entry/restricted/science/suit/labcoat/rd
name = "Research Labcoat - Research Director"
path = /obj/item/clothing/suit/storage/toggle/labcoat/rd
allowed_roles = list("Research Director")
-/datum/gear/restricted/science/suit/department_jacket
+/datum/loadout_entry/restricted/science/suit/department_jacket
name = "Science Department Jacket"
path = /obj/item/clothing/suit/storage/toggle/sci_dep_jacket
-/datum/gear/restricted/science/suit/cloak
+/datum/loadout_entry/restricted/science/suit/cloak
name = "Science Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/research
-/datum/gear/restricted/science/suit/cloak/rd
+/datum/loadout_entry/restricted/science/suit/cloak/rd
name = "Research Director - Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/rd
allowed_roles = list("Research Director")
-/datum/gear/restricted/science/suit/poncho
+/datum/loadout_entry/restricted/science/suit/poncho
name = "Science Poncho"
path = /obj/item/clothing/accessory/poncho/roles/science
//Shoes
-/datum/gear/restricted/science/shoes/winterboots
+/datum/loadout_entry/restricted/science/shoes/winterboots
name = "Science - Winter Boots"
path = /obj/item/clothing/shoes/boots/winter/science
//*Command
//Eyes
-/datum/gear/restricted/command/eyes/arglasses_com
+/datum/loadout_entry/restricted/command/eyes/arglasses_com
name = "Command AR-B glasses"
path = /obj/item/clothing/glasses/omnihud/all
cost = 2
//Head
-/datum/gear/restricted/command/head/cap
+/datum/loadout_entry/restricted/command/head/cap
name = "Command Cap - Command Operations"
path = /obj/item/clothing/head/operations
-/datum/gear/restricted/command/head/cap/bridge_officer
+/datum/loadout_entry/restricted/command/head/cap/bridge_officer
name = "Command Cap - Bridge Officer"
path = /obj/item/clothing/head/bocap
-/datum/gear/restricted/command/head/hat
+/datum/loadout_entry/restricted/command/head/hat
name = "Command Hat - Bridge Officer"
path = /obj/item/clothing/head/bohat
//Uniform
-/datum/gear/restricted/command/uniform/coveralls
+/datum/loadout_entry/restricted/command/uniform/coveralls
name = "Command Uniform - Coveralls"
path = /obj/item/clothing/under/oricon/utility/fleet/command
-/datum/gear/restricted/command/uniform/hop_dress
+/datum/loadout_entry/restricted/command/uniform/hop_dress
name = "Head of Personnel Uniform - Dress"
path = /obj/item/clothing/under/dress/dress_hop
allowed_roles = list("Head of Personnel")
-/datum/gear/restricted/command/uniform/hop_pleated_skirt
+/datum/loadout_entry/restricted/command/uniform/hop_pleated_skirt
name = "Head of Personnel Uniform - Pleated Skirt"
path = /obj/item/clothing/under/rank/head_of_personnel/skirt_pleated
allowed_roles = list("Head of Personnel")
-/datum/gear/restricted/command/uniform/hop_hr
+/datum/loadout_entry/restricted/command/uniform/hop_hr
name = "Head of Personnel Uniform - HR Director"
path = /obj/item/clothing/under/dress/dress_hr
allowed_roles = list("Head of Personnel")
-/datum/gear/restricted/command/uniform/cap_dress
+/datum/loadout_entry/restricted/command/uniform/cap_dress
name = "Facility Director Uniform - Dress"
path = /obj/item/clothing/under/dress/dress_cap
allowed_roles = list("Facility Director")
-/datum/gear/restricted/command/uniform/cap_skirt_pleated
+/datum/loadout_entry/restricted/command/uniform/cap_skirt_pleated
name = "Facility Director Uniform - Pleated Skirt"
path = /obj/item/clothing/under/rank/captain/skirt_pleated
allowed_roles = list("Facility Director")
-/datum/gear/restricted/command/uniform/turtleneck
+/datum/loadout_entry/restricted/command/uniform/turtleneck
name = "Command Uniform - Turtleneck"
path = /obj/item/clothing/under/oricon/utility/sysguard/officer/crew
-/datum/gear/restricted/command/uniform/bridge_officer
+/datum/loadout_entry/restricted/command/uniform/bridge_officer
name = "Bridge Officer Uniform"
path = /obj/item/clothing/under/bridgeofficer
allowed_roles = list("Command Secretary")
-/datum/gear/restricted/command/uniform/bridge_officer/skirt
+/datum/loadout_entry/restricted/command/uniform/bridge_officer/skirt
name = "Bridge Officer Skirt"
path = /obj/item/clothing/under/bridgeofficerskirt
allowed_roles = list("Command Secretary")
-/datum/gear/restricted/command/uniform/fatigues
+/datum/loadout_entry/restricted/command/uniform/fatigues
name = "Command Uniform - Fatigues"
path = /obj/item/clothing/under/oricon/utility/marine/command
-/datum/gear/restricted/command/uniform/bodysuit
+/datum/loadout_entry/restricted/command/uniform/bodysuit
name = "Command Bodysuit"
path = /obj/item/clothing/under/bodysuit/bodysuitcommand
-/datum/gear/restricted/command/uniform/bodysuit_fem
+/datum/loadout_entry/restricted/command/uniform/bodysuit_fem
name = "Command Bodysuit - Female"
path = /obj/item/clothing/under/bodysuit/bodysuitcommand_fem
//Suit
-/datum/gear/restricted/command/suit/operations_coat
+/datum/loadout_entry/restricted/command/suit/operations_coat
name = "Command Operations Jacket"
path = /obj/item/clothing/suit/storage/toggle/operations_coat/command
-/datum/gear/restricted/command/suit/snowsuit
+/datum/loadout_entry/restricted/command/suit/snowsuit
name = "Command Snowsuit"
path = /obj/item/clothing/suit/storage/snowsuit/command
-/datum/gear/restricted/command/suit/parade_jacket
+/datum/loadout_entry/restricted/command/suit/parade_jacket
name = "Command Parade Jacket"
path = /obj/item/clothing/suit/storage/ecdress_ofcr
-/datum/gear/restricted/command/suit/dress_jacket
+/datum/loadout_entry/restricted/command/suit/dress_jacket
name = "Command Dress Jacket"
path = /obj/item/clothing/suit/storage/bridgeofficer
-/datum/gear/restricted/command/suit/wintercoat_captain
+/datum/loadout_entry/restricted/command/suit/wintercoat_captain
name = "Facility Director - Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/captain
allowed_roles = list("Facility Director")
-/datum/gear/restricted/command/suit/wintercoat_hop
+/datum/loadout_entry/restricted/command/suit/wintercoat_hop
name = "Head of Personnel - Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/captain/hop
allowed_roles = list("Head of Personnel")
-/datum/gear/restricted/command/suit/cloak
+/datum/loadout_entry/restricted/command/suit/cloak
name = "Facility Director - Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/captain
allowed_roles = list("Facility Director")
-/datum/gear/restricted/command/suit/overcoat
+/datum/loadout_entry/restricted/command/suit/overcoat
name = "Command Formal Overcoat"
path = /obj/item/clothing/suit/storage/vest/formal/command
-/datum/gear/restricted/command/suit/overcoat/cape
+/datum/loadout_entry/restricted/command/suit/overcoat/cape
name = "Command Formal Overcoat Caped"
path = /obj/item/clothing/suit/storage/vest/formal/command/caped
-/datum/gear/restricted/command/suit/cloak/hop
+/datum/loadout_entry/restricted/command/suit/cloak/hop
name = "Head of Personnel - Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/hop
allowed_roles = list("Head of Personnel")
//Shoes
-/datum/gear/restricted/command/shoes/winterboots
+/datum/loadout_entry/restricted/command/shoes/winterboots
name = "Facility Director - Winter Boots"
path = /obj/item/clothing/shoes/boots/winter/command
allowed_roles = list("Facility Director")
@@ -1379,7 +1387,7 @@
//*Service (Poor Service and their ONE item)
-/datum/gear/restricted/service/suit/cloak
+/datum/loadout_entry/restricted/service/suit/cloak
name = "Service - Cloak"
path = /obj/item/clothing/accessory/poncho/roles/cloak/service
@@ -1388,177 +1396,177 @@
//**Multi-Department Items
//*Engineering + Science + Supply
//Eyes
-/datum/gear/restricted/eng_sci_supply/eyes/meson
+/datum/loadout_entry/restricted/eng_sci_supply/eyes/meson
name = "(Engineering/Science/Supply) Optical Meson Scanners"
path = /obj/item/clothing/glasses/meson
-/datum/gear/restricted/eng_sci_supply/eyes/meson/prescription
+/datum/loadout_entry/restricted/eng_sci_supply/eyes/meson/prescription
name = "(Engineering/Science/Supply) Optical Meson Scanners - Prescription"
path = /obj/item/clothing/glasses/meson/prescription
-/datum/gear/restricted/eng_sci_supply/eyes/meson/eyepatch
+/datum/loadout_entry/restricted/eng_sci_supply/eyes/meson/eyepatch
name = "(Engineering/Science/Supply) Optical Meson Eyepatch"
path = /obj/item/clothing/glasses/hud/engi/eyepatch
-/datum/gear/restricted/eng_sci_supply/eyes/aviator
+/datum/loadout_entry/restricted/eng_sci_supply/eyes/aviator
name = "(Engineering/Science/Supply) Optical Meson Scanners - Aviators"
path = /obj/item/clothing/glasses/meson/aviator
-/datum/gear/restricted/eng_sci_supply/eyes/aviator/prescription
+/datum/loadout_entry/restricted/eng_sci_supply/eyes/aviator/prescription
name = "(Engineering/Science/Supply) Optical Meson Scanners - Aviators, Prescription"
path = /obj/item/clothing/glasses/meson/aviator/prescription
//*Security + Command
//Eyes
-/datum/gear/restricted/sec_com/eyes/shades
+/datum/loadout_entry/restricted/sec_com/eyes/shades
name = "(Security/Command) Sunglasses"
path = /obj/item/clothing/glasses/sunglasses
-/datum/gear/restricted/sec_com/eyes/shades_big
+/datum/loadout_entry/restricted/sec_com/eyes/shades_big
name = "(Security/Command) Sunglasses, Fat"
path = /obj/item/clothing/glasses/sunglasses/big
-/datum/gear/restricted/sec_com/eyes/aviators
+/datum/loadout_entry/restricted/sec_com/eyes/aviators
name = "(Security/Command) Sunglasses, Aviators"
path = /obj/item/clothing/glasses/sunglasses/aviator
-/datum/gear/restricted/sec_com/eyes/prescriptionsun
+/datum/loadout_entry/restricted/sec_com/eyes/prescriptionsun
name = "(Security/Command) Sunglasses, Presciption"
path = /obj/item/clothing/glasses/sunglasses/prescription
//*Medical + Science
-/datum/gear/restricted/med_sci/head/cap
+/datum/loadout_entry/restricted/med_sci/head/cap
name = "(Medical/Science) MedSci Operations Cap"
path = /obj/item/clothing/head/operations/medsci
-/datum/gear/restricted/med_sci/suit/operations_jacket
+/datum/loadout_entry/restricted/med_sci/suit/operations_jacket
name = "(Medical/Science) MedSci Operations Jacket"
path = /obj/item/clothing/suit/storage/toggle/operations_coat/medsci
/***********************************************************************************************/
//**Misc. Roles
//*Pilot
-/datum/gear/restricted/misc/head/pilot
+/datum/loadout_entry/restricted/misc/head/pilot
name = "Pilot Helmet"
path = /obj/item/clothing/head/pilot/alt
allowed_roles = list("Pilot")
-/datum/gear/restricted/misc/uniform/pilot
+/datum/loadout_entry/restricted/misc/uniform/pilot
name = "Pilot Uniform"
path = /obj/item/clothing/under/rank/pilot2
allowed_roles = list("Pilot")
//*Bartender
-/datum/gear/restricted/misc/uniform/bartender_skirt
+/datum/loadout_entry/restricted/misc/uniform/bartender_skirt
name = "Bartender Uniform - Skirt"
path = /obj/item/clothing/under/rank/bartender/skirt
allowed_roles = list("Bartender")
-/datum/gear/restricted/misc/uniform/bartender_skirt_pleated
+/datum/loadout_entry/restricted/misc/uniform/bartender_skirt_pleated
name = "Bartender Uniform - Pleated Skirt"
path = /obj/item/clothing/under/rank/bartender/skirt_pleated
allowed_roles = list("Bartender")
-/datum/gear/restricted/misc/uniform/bartender_btc
+/datum/loadout_entry/restricted/misc/uniform/bartender_btc
name = "Bartender Uniform - BTC"
path = /obj/item/clothing/under/btcbartender
allowed_roles = list("Bartender")
-/datum/gear/restricted/misc/suit/wintercoat_bartender
+/datum/loadout_entry/restricted/misc/suit/wintercoat_bartender
name = "Bartender Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/bar
allowed_roles = list("Bartender")
//*Chaplain
-/datum/gear/restricted/misc/uniform/chaplain/chap_skirt_pleated
+/datum/loadout_entry/restricted/misc/uniform/chaplain/chap_skirt_pleated
name = "Chaplains Pleated Skirt"
path = /obj/item/clothing/under/rank/chaplain/skirt_pleated
allowed_roles = list("Chaplain")
//*Chef
-/datum/gear/restricted/misc/uniform/chef/chef_skirt_pleated
+/datum/loadout_entry/restricted/misc/uniform/chef/chef_skirt_pleated
name = "Chefs Pleated Skirt"
path = /obj/item/clothing/under/rank/chef/skirt_pleated
allowed_roles = list("Chef")
//*Internal Affairs Agent
-/datum/gear/restricted/misc/uniform/iaskirt
+/datum/loadout_entry/restricted/misc/uniform/iaskirt
name = "Internal Affairs Uniform - Skirt"
path = /obj/item/clothing/under/rank/internalaffairs/skirt
allowed_roles = list("Internal Affairs Agent")
//*Janitor
-/datum/gear/restricted/misc/uniform/janitor_fem
+/datum/loadout_entry/restricted/misc/uniform/janitor_fem
name = "Janitors Jumpsuit - Female"
path = /obj/item/clothing/under/rank/janitor_fem
allowed_roles = list("Janitor")
-/datum/gear/restricted/misc/uniform/janitor_alt
+/datum/loadout_entry/restricted/misc/uniform/janitor_alt
name = "Janitor Jumpsuit - Alt"
path = /obj/item/clothing/under/rank/janitor/starcon
allowed_roles = list("Janitor")
-/datum/gear/restricted/misc/uniform/janitor_pleated_skirt
+/datum/loadout_entry/restricted/misc/uniform/janitor_pleated_skirt
name = "Janitor Jumpskirt - Pleated"
path = /obj/item/clothing/under/rank/janitor/skirt_pleated
allowed_roles = list("Janitor")
-/datum/gear/restricted/misc/shoes/janitor
+/datum/loadout_entry/restricted/misc/shoes/janitor
name = "Janitor Galoshes - Black"
path = /obj/item/clothing/shoes/galoshes/black
allowed_roles = list("Janitor")
-/datum/gear/restricted/janitor/wintercoat
+/datum/loadout_entry/restricted/janitor/wintercoat
name = "Janitors Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/janitor
allowed_roles = list("Janitor")
-/datum/gear/restricted/misc/shoes/janitor/alt
+/datum/loadout_entry/restricted/misc/shoes/janitor/alt
name = "Janitor Galoshes - Dark-Purple"
path = /obj/item/clothing/shoes/galoshes/starcon
allowed_roles = list("Janitor")
cost = 2
//*Exploration
-/datum/gear/restricted/misc/uniform/bodysuit_explo/command
+/datum/loadout_entry/restricted/misc/uniform/bodysuit_explo/command
name = "Exploration Command Bodysuit"
path = /obj/item/clothing/under/bodysuit/bodysuitexplocom
allowed_roles = list("Research Director", "Pathfinder")
-/datum/gear/restricted/misc/uniform/bodysuit_explo/command_fem
+/datum/loadout_entry/restricted/misc/uniform/bodysuit_explo/command_fem
name = "Exploration Command Bodysuit - Female"
path = /obj/item/clothing/under/bodysuit/bodysuitexplocom_fem
allowed_roles = list("Research Director", "Pathfinder")
-/datum/gear/restricted/misc/uniform/bodysuit_explo
+/datum/loadout_entry/restricted/misc/uniform/bodysuit_explo
name = "Exploration Bodysuit"
path = /obj/item/clothing/under/bodysuit/bodysuitexplo
allowed_roles = list("Research Director", "Pathfinder", "Explorer", "Field Medic", "Pilot")
-/datum/gear/restricted/misc/uniform/bodysuit_explo_fem
+/datum/loadout_entry/restricted/misc/uniform/bodysuit_explo_fem
name = "Exploration Bodysuit - Female"
path = /obj/item/clothing/under/bodysuit/bodysuitexplo_fem
allowed_roles = list("Research Director", "Pathfinder", "Explorer", "Field Medic", "Pilot")
-/datum/gear/restricted/misc/suit/wintercoat_field_medic
+/datum/loadout_entry/restricted/misc/suit/wintercoat_field_medic
name = "Field Medic Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/sar
allowed_roles = list("Field Medic")
//*Botany
-/datum/gear/restricted/misc/uniform/hydro_pleated_skirt
+/datum/loadout_entry/restricted/misc/uniform/hydro_pleated_skirt
name = "Hydroponics Pleated Skirt"
path = /obj/item/clothing/under/rank/hydroponics/skirt_pleated
allowed_roles = list("Botanist")
-/datum/gear/restricted/misc/suit/wintercoat_hydroponics
+/datum/loadout_entry/restricted/misc/suit/wintercoat_hydroponics
name = "Hydroponics Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/hydro
allowed_roles = list("Botanist")
-/datum/gear/restricted/misc/shoes/winterboots_hydroponics
+/datum/loadout_entry/restricted/misc/shoes/winterboots_hydroponics
name = "Hydroponics Winter Boots"
path = /obj/item/clothing/shoes/boots/winter/hydro
allowed_roles = list("Botanist")
diff --git a/code/modules/loadout/loadout_seasonal.dm b/code/modules/loadout/loadout_seasonal.dm
new file mode 100644
index 00000000000..cb556b36b5c
--- /dev/null
+++ b/code/modules/loadout/loadout_seasonal.dm
@@ -0,0 +1,8 @@
+/datum/loadout_entry/seasonal
+ category = LOADOUT_CATEGORY_SEASONAL // seasonal ones are usually tied to holidays we don't want a category just for this
+ abstract_type = /datum/loadout_entry/seasonal
+ cost = 1
+
+/datum/loadout_entry/seasonal/xmas_tree
+ name = "Toy Christmas Tree"
+ path = /obj/item/toy/xmastree
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_shoes.dm b/code/modules/loadout/loadout_shoes.dm
similarity index 65%
rename from code/modules/preferences/preference_setup/loadout/loadout_shoes.dm
rename to code/modules/loadout/loadout_shoes.dm
index e0bed406e9b..7d382bccf5c 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_shoes.dm
+++ b/code/modules/loadout/loadout_shoes.dm
@@ -1,257 +1,229 @@
// Shoelocker
-/datum/gear/shoes
+/datum/loadout_entry/shoes
name = "Sandals"
path = /obj/item/clothing/shoes/sandal
slot = SLOT_ID_SHOES
- sort_category = LOADOUT_CATEGORY_SHOES
+ category = LOADOUT_CATEGORY_SHOES
-/datum/gear/shoes/jackboots
+/datum/loadout_entry/shoes/jackboots
name = "Jackboots"
path = /obj/item/clothing/shoes/boots/jackboots
-/datum/gear/shoes/kneeboots
+/datum/loadout_entry/shoes/kneeboots
name = "Jackboots - Knee-Length"
path = /obj/item/clothing/shoes/boots/jackboots/knee
-/datum/gear/shoes/thighboots
+/datum/loadout_entry/shoes/thighboots
name = "Jackboots - Thigh-Length"
path = /obj/item/clothing/shoes/boots/jackboots/thigh
-/datum/gear/shoes/toeless
+/datum/loadout_entry/shoes/toeless
name = "Toe-Less Jackboots"
path = /obj/item/clothing/shoes/boots/jackboots/toeless
-/datum/gear/shoes/toelessknee
+/datum/loadout_entry/shoes/toelessknee
name = "Toe-Less Jackboots - Knee-Length"
path = /obj/item/clothing/shoes/boots/jackboots/toeless/knee
-/datum/gear/shoes/toelessthigh
+/datum/loadout_entry/shoes/toelessthigh
name = "Toe-Less Jackboots - Thigh-Length"
path = /obj/item/clothing/shoes/boots/jackboots/toeless/thigh
-/datum/gear/shoes/workboots
+/datum/loadout_entry/shoes/workboots
name = "Workboots"
path = /obj/item/clothing/shoes/boots/workboots
-/datum/gear/shoes/workboots/toeless
+/datum/loadout_entry/shoes/workboots/toeless
name = "Toe-Less Workboots"
path = /obj/item/clothing/shoes/boots/workboots/toeless
-/datum/gear/shoes/black
+/datum/loadout_entry/shoes/black
name = "Shoes - Black"
path = /obj/item/clothing/shoes/black
-/datum/gear/shoes/blue
+/datum/loadout_entry/shoes/blue
name = "Shoes - Blue"
path = /obj/item/clothing/shoes/blue
-/datum/gear/shoes/brown
+/datum/loadout_entry/shoes/brown
name = "Shoes - Brown"
path = /obj/item/clothing/shoes/brown
-/datum/gear/shoes/lacey
+/datum/loadout_entry/shoes/lacey
name = "Shoes, Oxford Selection"
path = /obj/item/clothing/shoes/laceup
-/datum/gear/shoes/lacey/New()
+/datum/loadout_entry/shoes/lacey/New()
..()
var/list/laces = list()
for(var/lace in typesof(/obj/item/clothing/shoes/laceup))
var/obj/item/clothing/shoes/laceup/lace_type = lace
laces[initial(lace_type.name)] = lace_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(laces, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(laces, /proc/cmp_text_asc))
-/datum/gear/shoes/green
+/datum/loadout_entry/shoes/green
name = "Shoes - Green"
path = /obj/item/clothing/shoes/green
-/datum/gear/shoes/orange
+/datum/loadout_entry/shoes/orange
name = "Shoes - Orange"
path = /obj/item/clothing/shoes/orange
-/datum/gear/shoes/purple
+/datum/loadout_entry/shoes/purple
name = "Shoes - Purple"
path = /obj/item/clothing/shoes/purple
-/datum/gear/shoes/rainbow
+/datum/loadout_entry/shoes/rainbow
name = "Shoes - Rainbow"
path = /obj/item/clothing/shoes/rainbow
-/datum/gear/shoes/red
+/datum/loadout_entry/shoes/red
name = "Shoes - Red"
path = /obj/item/clothing/shoes/red
-/datum/gear/shoes/white
+/datum/loadout_entry/shoes/white
name = "Shoes - White"
path = /obj/item/clothing/shoes/white
-/datum/gear/shoes/yellow
+/datum/loadout_entry/shoes/yellow
name = "Shoes - Yellow"
path = /obj/item/clothing/shoes/yellow
-/datum/gear/shoes/hitops/
+/datum/loadout_entry/shoes/hitops/
name = "High-Tops - Selection"
path = /obj/item/clothing/shoes/hitops/
-/datum/gear/shoes/hitops/New()
+/datum/loadout_entry/shoes/hitops/New()
..()
var/list/hitops = list()
for(var/hitop in typesof(/obj/item/clothing/shoes/hitops))
var/obj/item/clothing/shoes/hitops/hitop_type = hitop
hitops[initial(hitop_type.name)] = hitop_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(hitops, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(hitops, /proc/cmp_text_asc))
-/datum/gear/shoes/flipflops
+/datum/loadout_entry/shoes/flipflops
name = "Flip Flops"
path = /obj/item/clothing/shoes/flipflop
-/datum/gear/shoes/flipflops/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/shoes/athletic
+/datum/loadout_entry/shoes/athletic
name = "Athletic Shoes"
path = /obj/item/clothing/shoes/athletic
-/datum/gear/shoes/athletic/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/shoes/skater
+/datum/loadout_entry/shoes/skater
name = "Skater Shoes"
path = /obj/item/clothing/shoes/skater
-/datum/gear/shoes/skater/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/shoes/flats
+/datum/loadout_entry/shoes/flats
name = "Flats"
path = /obj/item/clothing/shoes/flats/white/color
-/datum/gear/shoes/flats/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/shoes/cowboy
+/datum/loadout_entry/shoes/cowboy
name = "Cowboy Boots"
path = /obj/item/clothing/shoes/boots/cowboy
-/datum/gear/shoes/cowboy/classic
+/datum/loadout_entry/shoes/cowboy/classic
name = "Cowboy Boots - Classic"
path = /obj/item/clothing/shoes/boots/cowboy/classic
-/datum/gear/shoes/cowboy/snakeskin
+/datum/loadout_entry/shoes/cowboy/snakeskin
name = "Cowboy Boots - Snakeskin"
path = /obj/item/clothing/shoes/boots/cowboy/snakeskin
-/datum/gear/shoes/jungle
+/datum/loadout_entry/shoes/jungle
name = "Jungle Boots"
path = /obj/item/clothing/shoes/boots/jungle
cost = 2
-/datum/gear/shoes/duty
+/datum/loadout_entry/shoes/duty
name = "Duty Boots"
path = /obj/item/clothing/shoes/boots/duty
cost = 2
-/datum/gear/shoes/dress
+/datum/loadout_entry/shoes/dress
name = "Shoes - Dress"
path = /obj/item/clothing/shoes/dress
-/datum/gear/shoes/dress/white
+/datum/loadout_entry/shoes/dress/white
name = "Shoes - Dress - White"
path = /obj/item/clothing/shoes/dress/white
-/datum/gear/shoes/heels
+/datum/loadout_entry/shoes/heels
name = "High Heels"
path = /obj/item/clothing/shoes/heels
-/datum/gear/shoes/heels/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/shoes/slippers
+/datum/loadout_entry/shoes/slippers
name = "Bunny Slippers"
path = /obj/item/clothing/shoes/slippers
-/datum/gear/shoes/boots/winter
+/datum/loadout_entry/shoes/boots/winter
name = "Winter Boots"
path = /obj/item/clothing/shoes/boots/winter
-/datum/gear/shoes/circuitry
+/datum/loadout_entry/shoes/circuitry
name = "Boots - Circuitry"
path = /obj/item/clothing/shoes/circuitry
-/datum/gear/shoes/cowboy/black
+/datum/loadout_entry/shoes/cowboy/black
name = "Cowboy Boots - Black"
path = /obj/item/clothing/shoes/cowboyboots/black
-/datum/gear/shoes/black/cuffs
+/datum/loadout_entry/shoes/black/cuffs
name = "Legwraps - Black"
path = /obj/item/clothing/shoes/black/cuffs
-/datum/gear/shoes/black/cuffs/blue
+/datum/loadout_entry/shoes/black/cuffs/blue
name = "Legwraps - Blue"
path = /obj/item/clothing/shoes/black/cuffs/blue
-/datum/gear/shoes/black/cuffs/red
+/datum/loadout_entry/shoes/black/cuffs/red
name = "Legwraps - Red"
path = /obj/item/clothing/shoes/black/cuffs/red
-/datum/gear/shoes/siren
+/datum/loadout_entry/shoes/siren
name = "Boots - Siren"
path = /obj/item/clothing/shoes/boots/fluff/siren
-/datum/gear/shoes/footwraps
+/datum/loadout_entry/shoes/footwraps
name = "Cloth Footwraps (Colorable)"
path = /obj/item/clothing/shoes/footwraps
-/datum/gear/shoes/footwraps/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/shoes/laconic
+/datum/loadout_entry/shoes/laconic
name = "Laconic Field Boots"
path = /obj/item/clothing/shoes/boots/laconic
-/datum/gear/shoes/bountyskin
+/datum/loadout_entry/shoes/bountyskin
name = "Bounty Hunters Heels"
path = /obj/item/clothing/shoes/bountyskin
-/datum/gear/shoes/antediluvian
+/datum/loadout_entry/shoes/antediluvian
name = "Antediluvian Legwraps"
path = /obj/item/clothing/shoes/antediluvian
-/datum/gear/shoes/antediluvian
+/datum/loadout_entry/shoes/antediluvian
name = "Antediluvian Heels"
path = /obj/item/clothing/shoes/antediluvian/heels
-/datum/gear/shoes/halfmoon
+/datum/loadout_entry/shoes/halfmoon
name = "Half Moon boots"
path = /obj/item/clothing/shoes/boots/half_moon
-/datum/gear/shoes/utilitarian
+/datum/loadout_entry/shoes/utilitarian
name = "Utilitarian Shoes"
path = /obj/item/clothing/shoes/utilitarian
-/datum/gear/shoes/duty_alt
+/datum/loadout_entry/shoes/duty_alt
name = "Duty Boots (Alternate)"
path = /obj/item/clothing/shoes/boots/duty/alt
cost = 2
-/datum/gear/shoes/duty_alt/knee
+/datum/loadout_entry/shoes/duty_alt/knee
name = "Duty Boots (Alternate), Knee-High"
path = /obj/item/clothing/shoes/boots/duty/alt/knee
-/datum/gear/shoes/duty_alt/heel
+/datum/loadout_entry/shoes/duty_alt/heel
name = "Duty Boots (Alternate), Heels"
path = /obj/item/clothing/shoes/boots/duty/alt/heel
-/datum/gear/shoes/ballet
+/datum/loadout_entry/shoes/ballet
name = "Antheia Pointe Shoes"
path = /obj/item/clothing/shoes/ballet
-
-/datum/gear/shoes/ballet/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_smoking.dm b/code/modules/loadout/loadout_smoking.dm
similarity index 68%
rename from code/modules/preferences/preference_setup/loadout/loadout_smoking.dm
rename to code/modules/loadout/loadout_smoking.dm
index eec94cef661..384f842d7d4 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_smoking.dm
+++ b/code/modules/loadout/loadout_smoking.dm
@@ -1,29 +1,29 @@
-/datum/gear/pipe
+/datum/loadout_entry/pipe
name = "Pipe"
path = /obj/item/clothing/mask/smokable/pipe
-/datum/gear/pipe/New()
+/datum/loadout_entry/pipe/New()
..()
var/list/pipes = list()
for(var/pipe_style in typesof(/obj/item/clothing/mask/smokable/pipe))
var/obj/item/clothing/mask/smokable/pipe/pipe = pipe_style
pipes[initial(pipe.name)] = pipe
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(pipes, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(pipes, /proc/cmp_text_asc))
-/datum/gear/matchbook
+/datum/loadout_entry/matchbook
name = "Matchbook"
path = /obj/item/storage/box/matches
-/datum/gear/lighter
+/datum/loadout_entry/lighter
name = "Cheap Lighter"
path = /obj/item/flame/lighter
-/datum/gear/lighter/zippo
+/datum/loadout_entry/lighter/zippo
name = "Zippo Selection"
path = /obj/item/flame/lighter/zippo
-/datum/gear/lighter/zippo/New()
+/datum/loadout_entry/lighter/zippo/New()
..()
var/list/zippos = list()
for(var/zippo in typesof(/obj/item/flame/lighter/zippo))
@@ -31,29 +31,29 @@
continue
var/obj/item/flame/lighter/zippo/zippo_type = zippo
zippos[initial(zippo_type.name)] = zippo_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(zippos, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(zippos, /proc/cmp_text_asc))
-/datum/gear/ashtray
+/datum/loadout_entry/ashtray
name = "Plastic Ashtray"
path = /obj/item/material/ashtray/plastic
-/datum/gear/cigar
+/datum/loadout_entry/cigar
name = "Cigar"
path = /obj/item/clothing/mask/smokable/cigarette/cigar
-/datum/gear/cigarcase
+/datum/loadout_entry/cigarcase
name = "Cigar Case"
path = /obj/item/storage/fancy/cigar
cost = 3
-/datum/gear/cigarettes
+/datum/loadout_entry/cigarettes
name = "Cigarette Selection"
path = /obj/item/storage/fancy/cigarettes
-/datum/gear/cigarettes/New()
+/datum/loadout_entry/cigarettes/New()
..()
var/list/cigarettes = list()
for(var/cigarette in (typesof(/obj/item/storage/fancy/cigarettes) - typesof(/obj/item/storage/fancy/cigarettes/killthroat)))
var/obj/item/storage/fancy/cigarettes/cigarette_brand = cigarette
cigarettes[initial(cigarette_brand.name)] = cigarette_brand
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(cigarettes, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(cigarettes, /proc/cmp_text_asc))
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_suit.dm b/code/modules/loadout/loadout_suit.dm
similarity index 68%
rename from code/modules/preferences/preference_setup/loadout/loadout_suit.dm
rename to code/modules/loadout/loadout_suit.dm
index ea580104b8a..e9b0b242aa8 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_suit.dm
+++ b/code/modules/loadout/loadout_suit.dm
@@ -1,622 +1,582 @@
// Suit slot
-/datum/gear/suit
+/datum/loadout_entry/suit
name = "Apron - Blue"
path = /obj/item/clothing/suit/storage/apron
slot = SLOT_ID_SUIT
- sort_category = LOADOUT_CATEGORY_SUITS
+ category = LOADOUT_CATEGORY_SUITS
-/datum/gear/suit/apron_white
+/datum/loadout_entry/suit/apron_white
name = "Apron - Colorable"
path = /obj/item/clothing/suit/storage/apron/white
-/datum/gear/suit/apron_white/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/suit/greatcoat
+/datum/loadout_entry/suit/greatcoat
name = "Greatcoat"
path = /obj/item/clothing/suit/greatcoat
-/datum/gear/suit/leather_coat
+/datum/loadout_entry/suit/leather_coat
name = "Leather Coat"
path = /obj/item/clothing/suit/leathercoat
-/datum/gear/suit/overcoat
+/datum/loadout_entry/suit/overcoat
name = "Leather Overcoat"
path = /obj/item/clothing/suit/overcoat
-/datum/gear/suit/puffer_coat
+/datum/loadout_entry/suit/puffer_coat
name = "Puffer Coat"
path = /obj/item/clothing/suit/jacket/puffer
-/datum/gear/suit/puffer_vest
+/datum/loadout_entry/suit/puffer_vest
name = "Puffer Vest"
path = /obj/item/clothing/suit/jacket/puffer/vest
-/datum/gear/suit/bomber
+/datum/loadout_entry/suit/bomber
name = "Bomber Jacket"
path = /obj/item/clothing/suit/storage/toggle/bomber
-/datum/gear/suit/bomber_alt
+/datum/loadout_entry/suit/bomber_alt
name = "Bomber Jacket Alt"
path = /obj/item/clothing/suit/storage/bomber/alt
-/datum/gear/suit/storage/gothcoat
+/datum/loadout_entry/suit/storage/gothcoat
name = "Gothic Coat"
path = /obj/item/clothing/suit/storage/gothcoat
-/datum/gear/suit/leather_jacket
+/datum/loadout_entry/suit/leather_jacket
name = "Leather Jacket - Black"
path = /obj/item/clothing/suit/storage/toggle/leather_jacket
-/datum/gear/suit/leather_jacket_sleeveless
+/datum/loadout_entry/suit/leather_jacket_sleeveless
name = "Leather Vest - Black"
path = /obj/item/clothing/suit/storage/toggle/leather_jacket/sleeveless
-/datum/gear/suit/leather_jacket_alt
+/datum/loadout_entry/suit/leather_jacket_alt
name = "Leather Jacket Alt - Black"
path = /obj/item/clothing/suit/storage/leather_jacket_alt
-/datum/gear/suit/leather_jacket_nt
+/datum/loadout_entry/suit/leather_jacket_nt
name = "Leather Jacket - Corporate - Black"
path = /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen
-/datum/gear/suit/leather_jacket_nt/sleeveless
+/datum/loadout_entry/suit/leather_jacket_nt/sleeveless
name = "Leather Vest - Corporate - Black"
path = /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen/sleeveless
-/datum/gear/suit/brown_jacket
+/datum/loadout_entry/suit/brown_jacket
name = "Leather Jacket - Brown"
path = /obj/item/clothing/suit/storage/toggle/brown_jacket
-/datum/gear/suit/brown_jacket_sleeveless
+/datum/loadout_entry/suit/brown_jacket_sleeveless
name = "Leather Vest - Brown"
path = /obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless
-/datum/gear/suit/brown_jacket_nt
+/datum/loadout_entry/suit/brown_jacket_nt
name = "Leather Jacket - Corporate - Brown"
path = /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen
-/datum/gear/suit/brown_jacket_nt/sleeveless
+/datum/loadout_entry/suit/brown_jacket_nt/sleeveless
name = "Leather Vest - Corporate, Brown"
path = /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen/sleeveless
-/datum/gear/suit/mil
+/datum/loadout_entry/suit/mil
name = "Military Jacket - Selection"
path = /obj/item/clothing/suit/storage/miljacket
-/datum/gear/suit/mil/New()
+/datum/loadout_entry/suit/mil/New()
..()
var/list/mil_jackets = list()
for(var/military_style in typesof(/obj/item/clothing/suit/storage/miljacket))
var/obj/item/clothing/suit/storage/miljacket/miljacket = military_style
mil_jackets[initial(miljacket.name)] = miljacket
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(mil_jackets, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(mil_jackets, /proc/cmp_text_asc))
-/datum/gear/suit/greyjacket
+/datum/loadout_entry/suit/greyjacket
name = "Jacket - Grey"
path = /obj/item/clothing/suit/storage/greyjacket
-/datum/gear/suit/brown_trenchcoat
+/datum/loadout_entry/suit/brown_trenchcoat
name = "Trenchcoat - Brown"
path = /obj/item/clothing/suit/storage/trench
-/datum/gear/suit/grey_trenchcoat
+/datum/loadout_entry/suit/grey_trenchcoat
name = "Trenchcoat - Grey"
path = /obj/item/clothing/suit/storage/trench/grey
-/datum/gear/suit/duster
+/datum/loadout_entry/suit/duster
name = "Cowboy Duster"
path = /obj/item/clothing/suit/storage/duster
-/datum/gear/suit/duster/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/suit/hazard_vest
+/datum/loadout_entry/suit/hazard_vest
name = "Hazard Vest - Selection"
path = /obj/item/clothing/suit/storage/hazardvest
-/datum/gear/suit/hazard_vest/New()
+/datum/loadout_entry/suit/hazard_vest/New()
..()
var/list/hazards = list()
for(var/hazard_style in typesof(/obj/item/clothing/suit/storage/hazardvest))
var/obj/item/clothing/suit/storage/hazardvest/hazardvest = hazard_style
hazards[initial(hazardvest.name)] = hazardvest
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(hazards, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(hazards, /proc/cmp_text_asc))
-/datum/gear/suit/hoodie
+/datum/loadout_entry/suit/hoodie
name = "Hoodie - Selection"
path = /obj/item/clothing/suit/storage/toggle/hoodie
-/datum/gear/suit/hoodie/New()
+/datum/loadout_entry/suit/hoodie/New()
..()
var/list/hoodies = list()
for(var/hoodie_style in typesof(/obj/item/clothing/suit/storage/toggle/hoodie))
var/obj/item/clothing/suit/storage/toggle/hoodie/hoodie = hoodie_style
hoodies[initial(hoodie.name)] = hoodie
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(hoodies, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(hoodies, /proc/cmp_text_asc))
-/datum/gear/suit/labcoat
+/datum/loadout_entry/suit/labcoat
name = "Labcoat"
path = /obj/item/clothing/suit/storage/toggle/labcoat
-/datum/gear/suit/labcoat/green
+/datum/loadout_entry/suit/labcoat/green
name = "Labcoat - Green"
path = /obj/item/clothing/suit/storage/toggle/labcoat/green
-/datum/gear/suit/overalls
+/datum/loadout_entry/suit/overalls
name = "Overalls"
path = /obj/item/clothing/suit/storage/apron/overalls
-/datum/gear/suit/poncho
+/datum/loadout_entry/suit/poncho
name = "Poncho Selection"
path = /obj/item/clothing/accessory/poncho
-/datum/gear/suit/poncho/New()
+/datum/loadout_entry/suit/poncho/New()
..()
var/list/ponchos = list()
for(var/poncho_style in (typesof(/obj/item/clothing/accessory/poncho) - typesof(/obj/item/clothing/accessory/poncho/roles)))
var/obj/item/clothing/accessory/poncho/poncho = poncho_style
ponchos[initial(poncho.name)] = poncho
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(ponchos, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(ponchos, /proc/cmp_text_asc))
-/datum/gear/suit/dust_cloak_selection
+/datum/loadout_entry/suit/dust_cloak_selection
name = "Dust cloak Selection"
path = /obj/item/clothing/accessory/poncho/dust_cloak
-/datum/gear/suit/dust_cloak_selection/New()
+/datum/loadout_entry/suit/dust_cloak_selection/New()
..()
var/list/dustcloak_selection = list()
for(var/dustcloak in typesof(/obj/item/clothing/accessory/poncho/dust_cloak))
var/obj/item/clothing/accessory/poncho/dustcloak_type = dustcloak
dustcloak_selection[initial(dustcloak_type.name)] = dustcloak_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(dustcloak_selection, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(dustcloak_selection, /proc/cmp_text_asc))
-/datum/gear/suit/cyberpunk_coat_selection
+/datum/loadout_entry/suit/cyberpunk_coat_selection
name = "Cyberpunk Coat Selection"
path = /obj/item/clothing/suit/storage/cyberpunk
-/datum/gear/suit/cyberpunk_coat_selection/New()
+/datum/loadout_entry/suit/cyberpunk_coat_selection/New()
..()
var/list/cybercoat_selection = list()
for(var/cybercoat in typesof(/obj/item/clothing/suit/storage/cyberpunk))
var/obj/item/clothing/accessory/poncho/cybercoat_type = cybercoat
cybercoat_selection[initial(cybercoat_type.name)] = cybercoat_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(cybercoat_selection, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(cybercoat_selection, /proc/cmp_text_asc))
// A colorable cloak
-/datum/gear/suit/roles/poncho/cloak
+/datum/loadout_entry/suit/roles/poncho/cloak
name = "Cloak - Glowing Light"
path = /obj/item/clothing/accessory/poncho/roles/cloak/glowing
-/datum/gear/suit/roles/poncho/cloak/dark
+/datum/loadout_entry/suit/roles/poncho/cloak/dark
name = "Cloak - Glowing Dark"
path = /obj/item/clothing/accessory/poncho/roles/cloak/glowingdark
-/datum/gear/suit/roles/poncho/cloak/colorable/
+/datum/loadout_entry/suit/roles/poncho/cloak/colorable/
name = "Cloak - Colorable"
path = /obj/item/clothing/accessory/poncho/roles/cloak/custom
-/datum/gear/suit/roles/poncho/cloak/colorable/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/suit/halfcloak
+/datum/loadout_entry/suit/halfcloak
name = "Rough Half Cloak (Tan)"
path = /obj/item/clothing/accessory/poncho/rough_cloak/tan
-/datum/gear/suit/halfcloaktorn
+/datum/loadout_entry/suit/halfcloaktorn
name = "Rough Torn Half Cloak (Tan)"
path = /obj/item/clothing/accessory/poncho/rough_cloak_torn/tan
-/datum/gear/suit/halfcloak/colorable
+/datum/loadout_entry/suit/halfcloak/colorable
name = "Rough Half Cloak (Colorable)"
path = /obj/item/clothing/accessory/poncho/rough_cloak
-
-/datum/gear/suit/halfcloak/colorable/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-/datum/gear/suit/halfcloak/colorable/torn
+/datum/loadout_entry/suit/halfcloak/colorable/torn
name = "Rough Torn Half Cloak (Colorable)"
path = /obj/item/clothing/accessory/poncho/rough_cloak_torn
-/datum/gear/suit/black_lawyer_jacket
+/datum/loadout_entry/suit/black_lawyer_jacket
name = "Suit Jacket - Black"
path = /obj/item/clothing/suit/storage/toggle/internalaffairs
-/datum/gear/suit/blue_lawyer_jacket
+/datum/loadout_entry/suit/blue_lawyer_jacket
name = "Suit Jacket - Blue"
path = /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket
-/datum/gear/suit/purple_lawyer_jacket
+/datum/loadout_entry/suit/purple_lawyer_jacket
name = "Suit Jacket - Purple"
path = /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket
-/datum/gear/suit/suspenders
+/datum/loadout_entry/suit/suspenders
name = "Suspenders"
path = /obj/item/clothing/suit/suspenders
-/datum/gear/suit/wintercoat
+/datum/loadout_entry/suit/wintercoat
name = "Winter Coat"
path = /obj/item/clothing/suit/storage/hooded/wintercoat
-/datum/gear/suit/wintercoat
+/datum/loadout_entry/suit/wintercoat
name = "Winter Coat - Assistant Formal"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/aformal
-/datum/gear/suit/wintercoat/brass
+/datum/loadout_entry/suit/wintercoat/brass
name = "Winter Coat - Brassy"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/ratvar/fake
-/datum/gear/suit/wintercoat/runed
+/datum/loadout_entry/suit/wintercoat/runed
name = "Winter Coat - Runed"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/narsie/fake
-/datum/gear/suit/wintercoat/olive
+/datum/loadout_entry/suit/wintercoat/olive
name = "Winter Coat - Olive Green"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/olive
-/datum/gear/suit/techrobes
+/datum/loadout_entry/suit/techrobes
name = "Techpriest"
path = /obj/item/clothing/suit/storage/hooded/techpriest
-/datum/gear/suit/varsity
+/datum/loadout_entry/suit/varsity
name = "Varsity Jacket - Selection"
path = /obj/item/clothing/suit/varsity
-/datum/gear/suit/varsity/New()
+/datum/loadout_entry/suit/varsity/New()
..()
var/list/varsities = list()
for(var/varsity_style in typesof(/obj/item/clothing/suit/varsity))
var/obj/item/clothing/suit/varsity/varsity = varsity_style
varsities[initial(varsity.name)] = varsity
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(varsities, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(varsities, /proc/cmp_text_asc))
-/datum/gear/suit/varsity_worn
+/datum/loadout_entry/suit/varsity_worn
name = "Varsity Jacket - Worn"
path = /obj/item/clothing/suit/storage/toggle/varsity/worn
-/datum/gear/suit/track
+/datum/loadout_entry/suit/track
name = "Track Jacket - Selection"
path = /obj/item/clothing/suit/storage/toggle/track
-/datum/gear/suit/track/New()
+/datum/loadout_entry/suit/track/New()
..()
var/list/tracks = list()
for(var/track_style in typesof(/obj/item/clothing/suit/storage/toggle/track))
var/obj/item/clothing/suit/storage/toggle/track/track = track_style
tracks[initial(track.name)] = track
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tracks, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tracks, /proc/cmp_text_asc))
-/datum/gear/suit/flannel
+/datum/loadout_entry/suit/flannel
name = "Flannel - Grey"
path = /obj/item/clothing/suit/storage/flannel
-/datum/gear/suit/flannel/red
+/datum/loadout_entry/suit/flannel/red
name = "Flannel - Red"
path = /obj/item/clothing/suit/storage/flannel/red
-/datum/gear/suit/flannel/aqua
+/datum/loadout_entry/suit/flannel/aqua
name = "Flannel - Aqua"
path = /obj/item/clothing/suit/storage/flannel/aqua
-/datum/gear/suit/flannel/brown
+/datum/loadout_entry/suit/flannel/brown
name = "Flannel - Brown"
path = /obj/item/clothing/suit/storage/flannel/brown
-/datum/gear/suit/denim_jacket
+/datum/loadout_entry/suit/denim_jacket
name = "Denim Jacket"
path = /obj/item/clothing/suit/storage/toggle/denim_jacket
-/datum/gear/suit/denim_jacket/corporate
+/datum/loadout_entry/suit/denim_jacket/corporate
name = "Denim Jacket - Corporate"
path = /obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen
-/datum/gear/suit/denim_vest
+/datum/loadout_entry/suit/denim_vest
name = "Denim Vest"
path = /obj/item/clothing/suit/storage/toggle/denim_jacket/sleeveless
-/datum/gear/suit/denim_vest/corporate
+/datum/loadout_entry/suit/denim_vest/corporate
name = "Denim Vest - Corporate"
path = /obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen/sleeveless
-/datum/gear/suit/miscellaneous/kimono
+/datum/loadout_entry/suit/miscellaneous/kimono
name = "Kimono"
path = /obj/item/clothing/suit/kimono
-/datum/gear/suit/miscellaneous/kimono/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/suit/miscellaneous/peacoat
+/datum/loadout_entry/suit/miscellaneous/peacoat
name = "Peacoat"
path = /obj/item/clothing/suit/storage/toggle/peacoat
-/datum/gear/suit/miscellaneous/peacoat/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/suit/miscellaneous/kamishimo
+/datum/loadout_entry/suit/miscellaneous/kamishimo
name = "Kamishimo"
path = /obj/item/clothing/suit/kamishimo
-/datum/gear/suit/snowsuit
+/datum/loadout_entry/suit/snowsuit
name = "Snowsuit"
path = /obj/item/clothing/suit/storage/snowsuit
-/datum/gear/suit/miscellaneous/cardigan
+/datum/loadout_entry/suit/miscellaneous/cardigan
name = "Cardigan (Colorable)"
path = /obj/item/clothing/suit/storage/toggle/cardigan
-/datum/gear/suit/miscellaneous/cardigan/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/suit/storage/dutchcoat
+/datum/loadout_entry/suit/storage/dutchcoat
name = "Western Coat"
path = /obj/item/clothing/suit/storage/dutchcoat
-/datum/gear/suit/storage/tailcoat
+/datum/loadout_entry/suit/storage/tailcoat
name = "Tailcoat"
path = /obj/item/clothing/suit/storage/tailcoat
-/datum/gear/suit/storage/redladvic
+/datum/loadout_entry/suit/storage/redladvic
name = "Red Victorian Coat"
path = /obj/item/clothing/suit/storage/redladiesvictoriancoat
-/datum/gear/suit/storage/ladvic
+/datum/loadout_entry/suit/storage/ladvic
name = "Ladies Victorian Coat"
path = /obj/item/clothing/suit/storage/ladiesvictoriancoat
-/datum/gear/suit/slimleather
+/datum/loadout_entry/suit/slimleather
name = "Slim Leather Jacket"
path = /obj/item/clothing/suit/storage/toggle/slimleather
-/datum/gear/suit/ronincoat
+/datum/loadout_entry/suit/ronincoat
name = "Ronin Coat"
path = /obj/item/clothing/suit/storage/toggle/heated/ronincoat
-/datum/gear/suit/runnerjacket
+/datum/loadout_entry/suit/runnerjacket
name = "Runner Jacket"
path = /obj/item/clothing/suit/storage/toggle/heated
-/datum/gear/suit/halfpintjacket
+/datum/loadout_entry/suit/halfpintjacket
name = "Half-Pint Jacket"
path = /obj/item/clothing/suit/storage/toggle/heated/half_pint
-/datum/gear/suit/halfmoon
+/datum/loadout_entry/suit/halfmoon
name = "Half Moon Jacket"
path = /obj/item/clothing/suit/storage/runner/half_moon
-/datum/gear/suit/labcoat_colorable
+/datum/loadout_entry/suit/labcoat_colorable
name = "Labcoat - Colorable"
path = /obj/item/clothing/suit/storage/toggle/labcoat
-/datum/gear/suit/labcoat_colorable/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/suit/jacket_modular
+/datum/loadout_entry/suit/jacket_modular
name = "Jacket - Modular"
path = /obj/item/clothing/suit/storage/fluff/jacket
-/datum/gear/suit/jacket_modular/New()
+/datum/loadout_entry/suit/jacket_modular/New()
..()
var/list/the_jackets = list()
for(var/the_jacket in typesof(/obj/item/clothing/suit/storage/fluff/jacket))
var/obj/item/clothing/suit/jacket_type = the_jacket
the_jackets[initial(jacket_type.name)] = jacket_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(the_jackets, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(the_jackets, /proc/cmp_text_asc))
-/datum/gear/suit/gntop
+/datum/loadout_entry/suit/gntop
name = "GN Crop Jacket"
path = /obj/item/clothing/suit/storage/fluff/gntop
-/datum/gear/suit/bomber_pilot
+/datum/loadout_entry/suit/bomber_pilot
name = "Bomber Jacket - Pilot"
path = /obj/item/clothing/suit/storage/toggle/bomber/pilot
-/datum/gear/suit/highwayman_jacket
+/datum/loadout_entry/suit/highwayman_jacket
name = "Black Jacket w/ Fur Lining"
path = /obj/item/clothing/suit/highwayman_jacket
-/datum/gear/suit/samurai
+/datum/loadout_entry/suit/samurai
name = "Replica Karuta-Gane (Colorable)"
path = /obj/item/clothing/suit/samurai_replica
-/datum/gear/suit/samurai/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/suit/laconic
+/datum/loadout_entry/suit/laconic
name = "Laconic Field Coat"
path = /obj/item/clothing/suit/laconic
-/datum/gear/suit/blue_navy_coat
+/datum/loadout_entry/suit/blue_navy_coat
name = "Navy Blue Coat"
path = /obj/item/clothing/suit/storage/toggle/navy_coat_blue
-/datum/gear/suit/brown_navy_coat
+/datum/loadout_entry/suit/brown_navy_coat
name = "Navy Brown Coat"
path = /obj/item/clothing/suit/storage/toggle/navy_coat_brown
-/datum/gear/suit/green_navy_coat
+/datum/loadout_entry/suit/green_navy_coat
name = "Navy Green Coat"
path = /obj/item/clothing/suit/storage/toggle/navy_coat_green
-/datum/gear/suit/jacket_stripe
+/datum/loadout_entry/suit/jacket_stripe
name = "Striped Jacket"
path = /obj/item/clothing/suit/storage/stripe_jacket
-/datum/gear/suit/jacket_darkfur
+/datum/loadout_entry/suit/jacket_darkfur
name = "Vexatious Coat w/ Dark Fur Lining"
path = /obj/item/clothing/suit/darkfur
-/datum/gear/suit/vainglorious
+/datum/loadout_entry/suit/vainglorious
name = "Vainglorious Hoodie"
path = /obj/item/clothing/suit/storage/hooded/vainglorious
-/datum/gear/suit/raincoat
+/datum/loadout_entry/suit/raincoat
name = "Raincoat"
path = /obj/item/clothing/suit/storage/hooded/raincoat
-/datum/gear/suit/pullover
+/datum/loadout_entry/suit/pullover
name = "Pullover Hoodie - Selection"
path = /obj/item/clothing/suit/storage/pullover
-/datum/gear/suit/pullover/New()
+/datum/loadout_entry/suit/pullover/New()
..()
var/list/pullovers = list()
for(var/pullover_style in typesof(/obj/item/clothing/suit/storage/pullover))
var/obj/item/clothing/suit/storage/pullover/pullover = pullover_style
pullovers[initial(pullover.name)] = pullover
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(pullovers, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(pullovers, /proc/cmp_text_asc))
-/datum/gear/suit/antediluvian
+/datum/loadout_entry/suit/antediluvian
name = "Antediluvian Cloak"
path = /obj/item/clothing/accessory/poncho/antediluvian
-/datum/gear/suit/rainponcho
+/datum/loadout_entry/suit/rainponcho
name = "Plastic Raincoat"
path = /obj/item/clothing/suit/storage/hooded/rainponcho
-/datum/gear/suit/mekkyaku
+/datum/loadout_entry/suit/mekkyaku
name = "Mekkyaku Hoodie"
path = /obj/item/clothing/suit/storage/mekkyaku
-/datum/gear/suit/utility_fur_coat
+/datum/loadout_entry/suit/utility_fur_coat
name = "Utility Fur Coat"
path = /obj/item/clothing/suit/storage/utility_fur_coat
-/datum/gear/suit/hobo
+/datum/loadout_entry/suit/hobo
name = "Ragged Coat"
path = /obj/item/clothing/suit/storage/hobo
-/datum/gear/suit/kamina
+/datum/loadout_entry/suit/kamina
name = "Spiral Hero Cloak"
path = /obj/item/clothing/suit/storage/kamina
-/datum/gear/suit/nerdshirt
+/datum/loadout_entry/suit/nerdshirt
name = "Nerdy Shirt"
path = /obj/item/clothing/suit/nerdshirt
-/datum/gear/suit/brownfancycoat
+/datum/loadout_entry/suit/brownfancycoat
name = "Brown Fancy Coat"
path = /obj/item/clothing/suit/storage/toggle/brown_fancycoat
-/datum/gear/suit/motojacket
+/datum/loadout_entry/suit/motojacket
name = "Motorcycle Jacket"
path = /obj/item/clothing/suit/storage/toggle/moto_jacket
-/datum/gear/suit/furcoat
+/datum/loadout_entry/suit/furcoat
name = "Furcoat"
path = /obj/item/clothing/suit/storage/furcoat
-/datum/gear/suit/noble_coat
+/datum/loadout_entry/suit/noble_coat
name = "Colorful Noble Coat"
path = /obj/item/clothing/suit/storage/noble_coat
-/datum/gear/suit/mercy_hoodie
+/datum/loadout_entry/suit/mercy_hoodie
name = "Mercy Robe"
path = /obj/item/clothing/suit/storage/hooded/mercy
-/datum/gear/suit/cyberpunk
+/datum/loadout_entry/suit/cyberpunk
name = "Cyber Coat"
path = /obj/item/clothing/suit/storage/cyberpunk
-/datum/gear/suit/cyberpunk_long
+/datum/loadout_entry/suit/cyberpunk_long
name = "Cyber Coat Long"
path = /obj/item/clothing/suit/storage/cyberpunk/long
-/datum/gear/suit/bladerunner
+/datum/loadout_entry/suit/bladerunner
name = "Gun Walker Coat"
path = /obj/item/clothing/suit/storage/bladerunner
-/datum/gear/suit/overcoat_fancy
+/datum/loadout_entry/suit/overcoat_fancy
name = "Fancy Overcoat Brown"
path = /obj/item/clothing/suit/storage/overcoat_fancy
-/datum/gear/suit/drive
+/datum/loadout_entry/suit/drive
name = "Relatable Jacket"
path = /obj/item/clothing/suit/storage/drive
-/datum/gear/suit/boxer
+/datum/loadout_entry/suit/boxer
name = "Boxer Jacket"
path = /obj/item/clothing/suit/storage/drive/boxer
-/datum/gear/suit/tunnelsnake
+/datum/loadout_entry/suit/tunnelsnake
name = "Maintenance Python Jacket"
path = /obj/item/clothing/suit/storage/tunnelsnake
-/datum/gear/suit/triadkiller
+/datum/loadout_entry/suit/triadkiller
name = "Oriental Coat"
path = /obj/item/clothing/suit/storage/triadkiller
-/datum/gear/suit/furbomberfancy
+/datum/loadout_entry/suit/furbomberfancy
name = "Fancy Fur Bomber Jacket"
path = /obj/item/clothing/suit/storage/toggle/fur_bomber
-/datum/gear/suit/bomj
+/datum/loadout_entry/suit/bomj
name = "Bomj Coat"
path = /obj/item/clothing/suit/storage/bomj
-/datum/gear/suit/violetjacket
+/datum/loadout_entry/suit/violetjacket
name = "Violet Jacket"
path = /obj/item/clothing/suit/storage/violet
-/datum/gear/suit/jamrock
+/datum/loadout_entry/suit/jamrock
name = "Jamrock Blazer"
path = /obj/item/clothing/suit/storage/jamrock
-/datum/gear/suit/khakijacket
+/datum/loadout_entry/suit/khakijacket
name = "Khaki Jacket"
path = /obj/item/clothing/suit/storage/khaki
-/datum/gear/suit/punkvest
+/datum/loadout_entry/suit/punkvest
name = "Punk Vest"
path = /obj/item/clothing/suit/storage/punkvest
-/datum/gear/suit/onestar
+/datum/loadout_entry/suit/onestar
name = "One Star Coat"
path = /obj/item/clothing/suit/storage/onestar
-/datum/gear/suit/overcoatdark
+/datum/loadout_entry/suit/overcoatdark
name = "Great Dark Overcoat"
path = /obj/item/clothing/suit/storage/vest/formal/dark
-/datum/gear/suit/overcoatdark/caped
+/datum/loadout_entry/suit/overcoatdark/caped
name = "Great Dark Overcoat Caped"
path = /obj/item/clothing/suit/storage/vest/formal/dark/caped
-/datum/gear/suit/overcoatbleached
+/datum/loadout_entry/suit/overcoatbleached
name = "Great Bleached Overcoat Caped"
path = /obj/item/clothing/suit/storage/vest/formal/bleached
-/datum/gear/suit/cropped_hoodie
+/datum/loadout_entry/suit/cropped_hoodie
name = "Cropped Hoodie"
path = /obj/item/clothing/suit/cropped_hoodie
-/datum/gear/suit/cropped_hoodie/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/suit/cropped_hoodie/croppier
+/datum/loadout_entry/suit/cropped_hoodie/croppier
name = "Cropped Hoodie (high crop)"
path = /obj/item/clothing/suit/cropped_hoodie/croppier
-/datum/gear/suit/cropped_hoodie/veryhighcrop
+/datum/loadout_entry/suit/cropped_hoodie/veryhighcrop
name = "Cropped Hoodie (very high crop)"
path = /obj/item/clothing/suit/cropped_hoodie/croppierer
-/datum/gear/suit/cropped_hoodie/croppiest
+/datum/loadout_entry/suit/cropped_hoodie/croppiest
name = "Cropped Hoodie (supercrop)"
path = /obj/item/clothing/suit/cropped_hoodie/croppiest
-/datum/gear/suit/leather_cropped
+/datum/loadout_entry/suit/leather_cropped
name = "Cropped Leather Jacket"
path = /obj/item/clothing/suit/storage/leather_cropped
-/datum/gear/suit/leather_supercropped
+/datum/loadout_entry/suit/leather_supercropped
name = "Supercropped Leather Jacket"
path = /obj/item/clothing/suit/storage/leather_supercropped
@@ -624,67 +584,67 @@
//Cloak no hoods
-/datum/gear/suit/tajarancloak
+/datum/loadout_entry/suit/tajarancloak
name = "Adhomian basic cloak selection"
description = "A selection of tajaran native cloaks."
path = /obj/item/clothing/accessory/tponcho/tajarancloak
-/datum/gear/suit/tajarancloak/New()
+/datum/loadout_entry/suit/tajarancloak/New()
..()
var/list/tajarancloaks = list()
for(var/tajarancloak in (typesof(/obj/item/clothing/accessory/tponcho/tajarancloak)))
var/obj/item/clothing/accessory/tponcho/tajarancloak/tajarancloak_type = tajarancloak
tajarancloaks[initial(tajarancloak_type.name)] = tajarancloak_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tajarancloaks, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tajarancloaks, /proc/cmp_text_asc))
-/datum/gear/suit/tajarancloakhood
+/datum/loadout_entry/suit/tajarancloakhood
name = "Adhomian hooded cloak selection"
description = "A selection of tajaran native cloaks. These ones have hoods"
path = /obj/item/clothing/suit/storage/hooded/tajaran/cloak
-/datum/gear/suit/tajarancloakhood/New()
+/datum/loadout_entry/suit/tajarancloakhood/New()
..()
var/list/tajarancloakhoods = list()
for(var/tajarancloakhood in (typesof(/obj/item/clothing/suit/storage/hooded/tajaran/cloak)))
var/obj/item/clothing/suit/storage/hooded/tajaran/cloak/tajarancloakhood_type = tajarancloakhood
tajarancloakhoods[initial(tajarancloakhood_type.name)] = tajarancloakhood_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tajarancloakhoods, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tajarancloakhoods, /proc/cmp_text_asc))
-/datum/gear/suit/tajara_coat
+/datum/loadout_entry/suit/tajara_coat
name = "Adhomian coat selection"
description = "A selection of tajaran native coats."
path = /obj/item/clothing/suit/storage/toggle/tajaran/coat
-/datum/gear/suit/tajara_coat/New()
+/datum/loadout_entry/suit/tajara_coat/New()
..()
var/list/tajara_coats = list()
for(var/tajara_coat in (typesof(/obj/item/clothing/suit/storage/toggle/tajaran/coat)))
var/obj/item/clothing/suit/storage/toggle/tajaran/coat/tajara_coat_type = tajara_coat
tajara_coats[initial(tajara_coat_type.name)] = tajara_coat_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tajara_coats, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tajara_coats, /proc/cmp_text_asc))
-/datum/gear/suit/tajara_coat_alt //No toggle
+/datum/loadout_entry/suit/tajara_coat_alt //No toggle
name = "Adhomian coat alt selection"
description = "A alternative selection of tajaran native coats."
path = /obj/item/clothing/suit/storage/tajaran/coat
-/datum/gear/suit/tajara_coat_alt/New()
+/datum/loadout_entry/suit/tajara_coat_alt/New()
..()
var/list/tajara_coat_alts = list()
for(var/tajara_coat_alt in (typesof(/obj/item/clothing/suit/storage/tajaran/coat)))
var/obj/item/clothing/suit/storage/tajaran/coat/tajara_coat_alt_type = tajara_coat_alt
tajara_coat_alts[initial(tajara_coat_alt_type.name)] = tajara_coat_alt_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tajara_coat_alts, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tajara_coat_alts, /proc/cmp_text_asc))
-/datum/gear/suit/tajara_jacket
+/datum/loadout_entry/suit/tajara_jacket
name = "Adhomian jacket selection"
description = "A selection of tajaran native jackets."
path = /obj/item/clothing/suit/storage/tajaran/jacket
-/datum/gear/suit/tajara_jacket/New()
+/datum/loadout_entry/suit/tajara_jacket/New()
..()
var/list/tajara_jackets = list()
for(var/tajara_jacket in (typesof(/obj/item/clothing/suit/storage/tajaran/jacket)))
var/obj/item/clothing/suit/storage/tajaran/jacket/tajara_jacket_type = tajara_jacket
tajara_jackets[initial(tajara_jacket_type.name)] = tajara_jacket_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tajara_jackets, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tajara_jackets, /proc/cmp_text_asc))
diff --git a/code/modules/preferences/preference_setup/loadout/gear_tweaks.dm b/code/modules/loadout/loadout_tweak.dm
similarity index 63%
rename from code/modules/preferences/preference_setup/loadout/gear_tweaks.dm
rename to code/modules/loadout/loadout_tweak.dm
index 7923941a854..d69caff6020 100644
--- a/code/modules/preferences/preference_setup/loadout/gear_tweaks.dm
+++ b/code/modules/loadout/loadout_tweak.dm
@@ -1,41 +1,57 @@
-/datum/gear_tweak/proc/get_contents(var/metadata)
+/**
+ * arbitrary loadout tweaks
+ *
+ * stored data should always be a string.
+ */
+/datum/loadout_tweak
+ /// unique id; defaults to last part of name
+ var/id
+
+/datum/loadout_tweak/New()
+ if(isnull(id))
+ id = "[src]"
+
+/datum/loadout_tweak/proc/get_contents(var/metadata)
return
-/datum/gear_tweak/proc/get_metadata(var/user, var/metadata)
+/datum/loadout_tweak/proc/get_metadata(var/user, var/metadata)
return
-/datum/gear_tweak/proc/get_default()
+/datum/loadout_tweak/proc/get_default()
return
-/datum/gear_tweak/proc/tweak_gear_data(var/metadata, var/datum/gear_data)
+/datum/loadout_tweak/proc/tweak_item(obj/item/I, data)
return
-/datum/gear_tweak/proc/tweak_item(var/obj/item/I, var/metadata)
- return
+/datum/loadout_tweak/proc/tweak_spawn_location(atom/where, data)
+ return where
+
+/datum/loadout_tweak/proc/tweak_spawn_path(path, data)
+ return path
/*
* Color adjustment
*/
-/datum/gear_tweak/color
+/datum/loadout_tweak/color
var/list/valid_colors
-/datum/gear_tweak/color/New(var/list/valid_colors)
+/datum/loadout_tweak/color/New(var/list/valid_colors)
src.valid_colors = valid_colors
..()
-/datum/gear_tweak/color/get_contents(var/metadata)
+/datum/loadout_tweak/color/get_contents(var/metadata)
return "Color: ⚫"
-/datum/gear_tweak/color/get_default()
+/datum/loadout_tweak/color/get_default()
return valid_colors ? valid_colors[1] : COLOR_GRAY
-/datum/gear_tweak/color/get_metadata(var/user, var/metadata, var/title = "Character Preference")
+/datum/loadout_tweak/color/get_metadata(var/user, var/metadata, var/title = "Character Preference")
if(valid_colors)
return input(user, "Choose a color.", title, metadata) as null|anything in valid_colors
return input(user, "Choose a color.", title, metadata) as color|null
-/datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata)
+/datum/loadout_tweak/color/tweak_item(var/obj/item/I, var/metadata)
if(valid_colors && !(metadata in valid_colors))
return
if(!metadata || (metadata == "#ffffff"))
@@ -45,87 +61,51 @@
else
I.color = metadata // fuck off underwear
-GLOBAL_DATUM_INIT(gear_tweak_free_matrix_recolor, /datum/gear_tweak/matrix_recolor, new)
-
-/datum/gear_tweak/matrix_recolor
-
-/datum/gear_tweak/matrix_recolor/get_contents(var/metadata)
- if(islist(metadata) && length(metadata))
- return "Matrix Recolor: [english_list(metadata)]"
- return "Matrix Recolor"
-
-/datum/gear_tweak/matrix_recolor/get_default()
- return null
-
-/datum/gear_tweak/matrix_recolor/get_metadata(user, metadata)
- var/list/returned = color_matrix_picker(user, "Pick a color matrix for this item", "Matrix Recolor", "Ok", "Erase", "Cancel", TRUE, 10 MINUTES, islist(metadata) && metadata)
- var/list/L = returned["matrix"]
- if(returned["button"] == 3)
- return metadata
- if((returned["button"] == 2) || !islist(L) || !ISINRANGE(L.len, 9, 20))
- return list()
- var/identity = TRUE
- var/static/list/ones = list(1, 5, 9)
- for(var/i in 1 to L.len)
- if(L[i] != ((i in ones)? 1 : 0))
- identity = FALSE
- break
- return identity? list() : L
-
-/datum/gear_tweak/matrix_recolor/tweak_item(obj/item/I, metadata)
- . = ..()
- if(!islist(metadata) || (length(metadata) < 12))
- return
- if(istype(I))
- I.add_atom_colour(metadata, FIXED_COLOUR_PRIORITY)
- else
- I.color = metadata // fuck off underwear
-
/*
* Path adjustment
*/
-/datum/gear_tweak/path
+/datum/loadout_tweak/path
var/list/valid_paths
-/datum/gear_tweak/path/New(var/list/valid_paths)
+/datum/loadout_tweak/path/New(var/list/valid_paths)
src.valid_paths = valid_paths
..()
-/datum/gear_tweak/path/get_contents(var/metadata)
+/datum/loadout_tweak/path/get_contents(var/metadata)
return "Type: [metadata]"
-/datum/gear_tweak/path/get_default()
+/datum/loadout_tweak/path/get_default()
return valid_paths[1]
-/datum/gear_tweak/path/get_metadata(var/user, var/metadata)
+/datum/loadout_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))
+/datum/loadout_tweak/path/tweak_spawn_path(path, data)
+ if(!(data in valid_paths))
return
- gear_data.path = valid_paths[metadata]
+ return valid_paths[data]
/*
* Content adjustment
*/
-/datum/gear_tweak/contents
+/datum/loadout_tweak/contents
var/list/valid_contents
-/datum/gear_tweak/contents/New()
+/datum/loadout_tweak/contents/New()
valid_contents = args.Copy()
..()
-/datum/gear_tweak/contents/get_contents(var/metadata)
+/datum/loadout_tweak/contents/get_contents(var/metadata)
return "Contents: [english_list(metadata, and_text = ", ")]"
-/datum/gear_tweak/contents/get_default()
+/datum/loadout_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)
+/datum/loadout_tweak/contents/get_metadata(var/user, var/list/metadata)
. = list()
for(var/i = metadata.len to valid_contents.len)
metadata += "Random"
@@ -136,7 +116,7 @@ GLOBAL_DATUM_INIT(gear_tweak_free_matrix_recolor, /datum/gear_tweak/matrix_recol
else
return metadata
-/datum/gear_tweak/contents/tweak_item(var/obj/item/I, var/list/metadata)
+/datum/loadout_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)
@@ -155,25 +135,25 @@ GLOBAL_DATUM_INIT(gear_tweak_free_matrix_recolor, /datum/gear_tweak/matrix_recol
* Ragent adjustment
*/
-/datum/gear_tweak/reagents
+/datum/loadout_tweak/reagents
var/list/valid_reagents
-/datum/gear_tweak/reagents/New(var/list/reagents)
+/datum/loadout_tweak/reagents/New(var/list/reagents)
valid_reagents = reagents.Copy()
..()
-/datum/gear_tweak/reagents/get_contents(var/metadata)
+/datum/loadout_tweak/reagents/get_contents(var/metadata)
return "Reagents: [metadata]"
-/datum/gear_tweak/reagents/get_default()
+/datum/loadout_tweak/reagents/get_default()
return "Random"
-/datum/gear_tweak/reagents/get_metadata(var/user, var/list/metadata)
+/datum/loadout_tweak/reagents/get_metadata(var/user, var/list/metadata)
. = input(user, "Choose an entry.", "Character Preference", metadata) as null|anything in (valid_reagents + list("Random", "None"))
if(!.)
return metadata
-/datum/gear_tweak/reagents/tweak_item(var/obj/item/I, var/list/metadata)
+/datum/loadout_tweak/reagents/tweak_item(var/obj/item/I, var/list/metadata)
if(metadata == "None")
return
if(metadata == "Random")
@@ -182,77 +162,7 @@ GLOBAL_DATUM_INIT(gear_tweak_free_matrix_recolor, /datum/gear_tweak/matrix_recol
. = valid_reagents[metadata]
I.reagents.add_reagent(., I.reagents.available_volume())
-//Custom name and desciption code
-//note to devs downstream: where 'gear_tweaks = list(gear_tweak_free_color_choice)' was used before for color selection
-//in the loadout, now 'gear_tweaks += gear_tweak_free_color_choice' will need to be used, otherwise the item will not
-// be able to be given a custom name or description
-/*
-Custom Name
-*/
-
-var/datum/gear_tweak/custom_name/gear_tweak_free_name = new()
-
-/datum/gear_tweak/custom_name
- var/list/valid_custom_names
-
-/datum/gear_tweak/custom_name/New(var/list/valid_custom_names)
- src.valid_custom_names = valid_custom_names
- ..()
-
-/datum/gear_tweak/custom_name/get_contents(var/metadata)
- return "Name: [metadata]"
-
-/datum/gear_tweak/custom_name/get_default()
- return ""
-
-/datum/gear_tweak/custom_name/get_metadata(var/user, var/metadata)
- if(jobban_isbanned(user, "Custom loadout"))
- to_chat(user, WARNING("You are banned from using custom loadout names/descriptions."))
- return
- if(valid_custom_names)
- return input(user, "Choose an item name.", "Character Preference", metadata) as null|anything in valid_custom_names
- return sanitize(input(user, "Choose the item's name. Leave it blank to use the default name.", "Item Name", metadata) as text|null, MAX_LNAME_LEN, extra = 0)
-
-/datum/gear_tweak/custom_name/tweak_item(var/obj/item/I, var/metadata)
- if(!metadata)
- return I.name
- I.name = metadata
-
-/*
-Custom Description
-*/
-var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new()
-
-/datum/gear_tweak/custom_desc
- var/list/valid_custom_desc
-
-/datum/gear_tweak/custom_desc/New(var/list/valid_custom_desc)
- src.valid_custom_desc = valid_custom_desc
- ..()
-
-/datum/gear_tweak/custom_desc/get_contents(var/metadata)
- return "Description: [metadata]"
-
-/datum/gear_tweak/custom_desc/get_default()
- return ""
-
-/datum/gear_tweak/custom_desc/get_metadata(var/user, var/metadata)
- if(jobban_isbanned(user, "Custom loadout"))
- to_chat(user, WARNING("You are banned from using custom loadout names/descriptions."))
- return
- if(valid_custom_desc)
- return input(user, "Choose an item description.", "Character Preference", metadata) as null|anything in valid_custom_desc
- return sanitize(input(user, "Choose the item's description. Leave it blank to use the default description.", "Item Description", metadata) as message|null, extra = 0)
-
-/datum/gear_tweak/custom_desc/tweak_item(var/obj/item/I, var/metadata)
- if(!metadata)
- return I.desc
- I.desc = metadata
-
-//end of custom description
-
-
-/datum/gear_tweak/tablet
+/datum/loadout_tweak/tablet
var/list/ValidProcessors = list(/obj/item/computer_hardware/processor_unit/small)
var/list/ValidBatteries = list(/obj/item/computer_hardware/battery_module/nano, /obj/item/computer_hardware/battery_module/micro, /obj/item/computer_hardware/battery_module)
var/list/ValidHardDrives = list(/obj/item/computer_hardware/hard_drive/micro, /obj/item/computer_hardware/hard_drive/small, /obj/item/computer_hardware/hard_drive)
@@ -261,7 +171,7 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new()
var/list/ValidCardSlots = list(null, /obj/item/computer_hardware/card_slot)
var/list/ValidTeslaLinks = list(null, /obj/item/computer_hardware/tesla_link)
-/datum/gear_tweak/tablet/get_contents(var/list/metadata)
+/datum/loadout_tweak/tablet/get_contents(var/list/metadata)
var/list/names = list()
var/obj/O = ValidProcessors[metadata[1]]
if(O)
@@ -286,7 +196,7 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new()
names += initial(O.name)
return "[english_list(names, and_text = ", ")]"
-/datum/gear_tweak/tablet/get_metadata(var/user, var/metadata)
+/datum/loadout_tweak/tablet/get_metadata(var/user, var/metadata)
. = list()
var/list/names = list()
@@ -373,10 +283,10 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new()
entry = input(user, "Choose a tesla link.", "Character Preference") in names
. += names[entry]
-/datum/gear_tweak/tablet/get_default()
+/datum/loadout_tweak/tablet/get_default()
return list(1, 1, 1, 1, 1, 1, 1)
-/datum/gear_tweak/tablet/tweak_item(var/obj/item/modular_computer/tablet/I, var/list/metadata)
+/datum/loadout_tweak/tablet/tweak_item(var/obj/item/modular_computer/tablet/I, var/list/metadata)
if(ValidProcessors[metadata[1]])
var/t = ValidProcessors[metadata[1]]
I.processor_unit = new t(I)
@@ -401,7 +311,7 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new()
I.tesla_link = new t(I)
I.update_verbs()
-/datum/gear_tweak/laptop
+/datum/loadout_tweak/laptop
var/list/ValidProcessors = list(/obj/item/computer_hardware/processor_unit/small, /obj/item/computer_hardware/processor_unit)
var/list/ValidBatteries = list(/obj/item/computer_hardware/battery_module, /obj/item/computer_hardware/battery_module/advanced, /obj/item/computer_hardware/battery_module/super)
var/list/ValidHardDrives = list(/obj/item/computer_hardware/hard_drive, /obj/item/computer_hardware/hard_drive/advanced, /obj/item/computer_hardware/hard_drive/super)
@@ -410,7 +320,7 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new()
var/list/ValidCardSlots = list(null, /obj/item/computer_hardware/card_slot)
var/list/ValidTeslaLinks = list(null, /obj/item/computer_hardware/tesla_link)
-/datum/gear_tweak/laptop/get_contents(var/list/metadata)
+/datum/loadout_tweak/laptop/get_contents(var/list/metadata)
var/list/names = list()
var/obj/O = ValidProcessors[metadata[1]]
if(O)
@@ -435,7 +345,7 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new()
names += initial(O.name)
return "[english_list(names, and_text = ", ")]"
-/datum/gear_tweak/laptop/get_metadata(var/user, var/metadata)
+/datum/loadout_tweak/laptop/get_metadata(var/user, var/metadata)
. = list()
var/list/names = list()
@@ -522,10 +432,10 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new()
entry = input(user, "Choose a tesla link.", "Character Preference") in names
. += names[entry]
-/datum/gear_tweak/laptop/get_default()
+/datum/loadout_tweak/laptop/get_default()
return list(1, 1, 1, 1, 1, 1, 1)
-/datum/gear_tweak/laptop/tweak_item(var/obj/item/modular_computer/laptop/preset/I, var/list/metadata)
+/datum/loadout_tweak/laptop/tweak_item(var/obj/item/modular_computer/laptop/preset/I, var/list/metadata)
if(ValidProcessors[metadata[1]])
var/t = ValidProcessors[metadata[1]]
I.processor_unit = new t(I)
@@ -550,16 +460,16 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new()
I.tesla_link = new t(I)
I.update_verbs()
-/datum/gear_tweak/collar_tag/get_contents(var/metadata)
+/datum/loadout_tweak/collar_tag/get_contents(var/metadata)
return "Tag: [metadata]"
-/datum/gear_tweak/collar_tag/get_default()
+/datum/loadout_tweak/collar_tag/get_default()
return ""
-/datum/gear_tweak/collar_tag/get_metadata(var/user, var/metadata)
+/datum/loadout_tweak/collar_tag/get_metadata(var/user, var/metadata)
return sanitize( input(user, "Choose the tag text", "Character Preference", metadata) as text , MAX_NAME_LEN )
-/datum/gear_tweak/collar_tag/tweak_item(var/obj/item/clothing/accessory/collar/C, var/metadata)
+/datum/loadout_tweak/collar_tag/tweak_item(var/obj/item/clothing/accessory/collar/C, var/metadata)
if(metadata == "")
return ..()
else
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_uniform.dm b/code/modules/loadout/loadout_uniform.dm
similarity index 65%
rename from code/modules/preferences/preference_setup/loadout/loadout_uniform.dm
rename to code/modules/loadout/loadout_uniform.dm
index e94f865f62d..e23ffeb111e 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_uniform.dm
+++ b/code/modules/loadout/loadout_uniform.dm
@@ -1,592 +1,564 @@
// Uniform slot
-/datum/gear/uniform/
+/datum/loadout_entry/uniform/
name = "Blazer - Blue"
path = /obj/item/clothing/under/blazer
slot = SLOT_ID_UNIFORM
- sort_category = LOADOUT_CATEGORY_UNIFORMS
+ category = LOADOUT_CATEGORY_UNIFORMS
-/datum/gear/uniform/blazer_skirt
+/datum/loadout_entry/uniform/blazer_skirt
name = "Blazer - Skirt "
path = /obj/item/clothing/under/blazer/skirt
-/datum/gear/uniform/cheongsam
+/datum/loadout_entry/uniform/cheongsam
name = "Cheongsam Selection"
description = "Various color variations of an old earth dress style. They are pretty close fitting around the waist."
-/datum/gear/uniform/cheongsam/New()
+/datum/loadout_entry/uniform/cheongsam/New()
..()
var/list/cheongsams = list()
for(var/cheongsam in typesof(/obj/item/clothing/under/cheongsam))
var/obj/item/clothing/under/cheongsam/cheongsam_type = cheongsam
cheongsams[initial(cheongsam_type.name)] = cheongsam_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(cheongsams, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(cheongsams, /proc/cmp_text_asc))
-/datum/gear/uniform/cheongsam_male
+/datum/loadout_entry/uniform/cheongsam_male
name = "Cheongsam (Male) - Black"
path = /obj/item/clothing/under/cheong
-/datum/gear/uniform/cheongsam_male/white
+/datum/loadout_entry/uniform/cheongsam_male/white
name = "Cheongsam (Male) - White"
path = /obj/item/clothing/under/cheong/white
-/datum/gear/uniform/cheongsam_male/red
+/datum/loadout_entry/uniform/cheongsam_male/red
name = "Cheongsam (Male) - Red"
path = /obj/item/clothing/under/cheong/red
-/datum/gear/uniform/qipao
+/datum/loadout_entry/uniform/qipao
name = "Qipao"
path = /obj/item/clothing/under/qipao
-/datum/gear/uniform/qipao/white
+/datum/loadout_entry/uniform/qipao/white
name = "Qipao - White"
path = /obj/item/clothing/under/qipao/white
-/datum/gear/uniform/qipao/red
+/datum/loadout_entry/uniform/qipao/red
name = "Qipao - Red"
path = /obj/item/clothing/under/qipao/red
-/datum/gear/uniform/croptop
+/datum/loadout_entry/uniform/croptop
name = "Croptop Selection"
description = "Light shirts which shows the midsection of the wearer."
-/datum/gear/uniform/croptop/New()
+/datum/loadout_entry/uniform/croptop/New()
..()
var/list/croptops = list()
for(var/croptop in typesof(/obj/item/clothing/under/croptop))
var/obj/item/clothing/under/croptop/croptop_type = croptop
croptops[initial(croptop_type.name)] = croptop_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(croptops, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(croptops, /proc/cmp_text_asc))
-/datum/gear/uniform/kilt
+/datum/loadout_entry/uniform/kilt
name = "Kilt"
path = /obj/item/clothing/under/kilt
-/datum/gear/uniform/cuttop
+/datum/loadout_entry/uniform/cuttop
name = "Cut Top - Grey"
path = /obj/item/clothing/under/cuttop
-/datum/gear/uniform/cuttop/red
+/datum/loadout_entry/uniform/cuttop/red
name = "Cut Top - Red"
path = /obj/item/clothing/under/cuttop/red
-/datum/gear/uniform/jumpsuit
+/datum/loadout_entry/uniform/jumpsuit
name = "Jumpclothes Selection"
path = /obj/item/clothing/under/color/grey
-/datum/gear/uniform/jumpsuit/New()
+/datum/loadout_entry/uniform/jumpsuit/New()
..()
var/list/jumpclothes = list()
for(var/jump in typesof(/obj/item/clothing/under/color))
var/obj/item/clothing/under/color/jumps = jump
jumpclothes[initial(jumps.name)] = jumps
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(jumpclothes, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(jumpclothes, /proc/cmp_text_asc))
-/datum/gear/uniform/blueshortskirt
+/datum/loadout_entry/uniform/blueshortskirt
name = "Short Skirt"
path = /obj/item/clothing/under/blueshortskirt
-/datum/gear/uniform/skirt
+/datum/loadout_entry/uniform/skirt
name = "Skirts Selection"
path = /obj/item/clothing/under/skirt
-/datum/gear/uniform/skirt/New()
+/datum/loadout_entry/uniform/skirt/New()
..()
var/list/skirts = list()
for(var/skirt in (typesof(/obj/item/clothing/under/skirt)))
var/obj/item/clothing/under/skirt/skirt_type = skirt
skirts[initial(skirt_type.name)] = skirt_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(skirts, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(skirts, /proc/cmp_text_asc))
-/datum/gear/uniform/pants
+/datum/loadout_entry/uniform/pants
name = "Pants Selection"
path = /obj/item/clothing/under/pants/white
-/datum/gear/uniform/pants/New()
+/datum/loadout_entry/uniform/pants/New()
..()
var/list/pants = list()
for(var/pant in typesof(/obj/item/clothing/under/pants))
var/obj/item/clothing/under/pants/pant_type = pant
pants[initial(pant_type.name)] = pant_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(pants, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(pants, /proc/cmp_text_asc))
-/datum/gear/uniform/shorts
+/datum/loadout_entry/uniform/shorts
name = "Shorts Selection"
path = /obj/item/clothing/under/shorts/jeans
-/datum/gear/uniform/shorts/New()
+/datum/loadout_entry/uniform/shorts/New()
..()
var/list/shorts = list()
for(var/short in typesof(/obj/item/clothing/under/shorts))
var/obj/item/clothing/under/pants/short_type = short
shorts[initial(short_type.name)] = short_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(shorts, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(shorts, /proc/cmp_text_asc))
-/datum/gear/uniform/suit/lawyer
+/datum/loadout_entry/uniform/suit/lawyer
name = "Suit One-Piece Selection"
path = /obj/item/clothing/under/lawyer
-/datum/gear/uniform/suit/lawyer/New()
+/datum/loadout_entry/uniform/suit/lawyer/New()
..()
var/list/lsuits = list()
for(var/lsuit in typesof(/obj/item/clothing/under/lawyer))
var/obj/item/clothing/suit/lsuit_type = lsuit
lsuits[initial(lsuit_type.name)] = lsuit_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(lsuits, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(lsuits, /proc/cmp_text_asc))
-/datum/gear/uniform/suit/suit_jacket
+/datum/loadout_entry/uniform/suit/suit_jacket
name = "Suit Modular Selection"
path = /obj/item/clothing/under/suit_jacket
-/datum/gear/uniform/suit/suit_jacket/New()
+/datum/loadout_entry/uniform/suit/suit_jacket/New()
..()
var/list/msuits = list()
for(var/msuit in typesof(/obj/item/clothing/under/suit_jacket))
var/obj/item/clothing/suit/msuit_type = msuit
msuits[initial(msuit_type.name)] = msuit_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(msuits, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(msuits, /proc/cmp_text_asc))
-/datum/gear/uniform/suit/amish
+/datum/loadout_entry/uniform/suit/amish
name = "Suit - Amish"
path = /obj/item/clothing/under/sl_suit
-/datum/gear/uniform/suit/gentle
+/datum/loadout_entry/uniform/suit/gentle
name = "Suit - Gentlemen"
path = /obj/item/clothing/under/gentlesuit
-/datum/gear/uniform/suit/gentleskirt
+/datum/loadout_entry/uniform/suit/gentleskirt
name = "Suit - Lady"
path = /obj/item/clothing/under/gentlesuit/skirt
-/datum/gear/uniform/suit/white
+/datum/loadout_entry/uniform/suit/white
name = "Suit - White"
path = /obj/item/clothing/under/scratch
-/datum/gear/uniform/suit/whiteskirt
+/datum/loadout_entry/uniform/suit/whiteskirt
name = "Suit - White Skirt"
path = /obj/item/clothing/under/scratch/skirt
-/datum/gear/uniform/scrub
+/datum/loadout_entry/uniform/scrub
name = "Scrubs Selection"
path = /obj/item/clothing/under/rank/medical/scrubs
-/datum/gear/uniform/scrub/New()
+/datum/loadout_entry/uniform/scrub/New()
..()
var/list/scrubs = list()
for(var/scrub in typesof(/obj/item/clothing/under/rank/medical/scrubs))
var/obj/item/clothing/under/rank/medical/scrubs/scrub_type = scrub
scrubs[initial(scrub_type.name)] = scrub_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(scrubs, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(scrubs, /proc/cmp_text_asc))
-/datum/gear/uniform/scrub_fem
+/datum/loadout_entry/uniform/scrub_fem
name = "Scrubs Selection - Female"
path = /obj/item/clothing/under/rank/medical/scrubs_fem
-/datum/gear/uniform/scrub_fem/New()
+/datum/loadout_entry/uniform/scrub_fem/New()
..()
var/list/scrubs_fem = list()
for(var/scrub_fem in typesof(/obj/item/clothing/under/rank/medical/scrubs_fem))
var/obj/item/clothing/under/rank/medical/scrubs_fem/scrub_type = scrub_fem
scrubs_fem[initial(scrub_type.name)] = scrub_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(scrubs_fem, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(scrubs_fem, /proc/cmp_text_asc))
-/datum/gear/uniform/oldwoman
+/datum/loadout_entry/uniform/oldwoman
name = "Old Woman Attire"
path = /obj/item/clothing/under/oldwoman
-/datum/gear/uniform/sundress
+/datum/loadout_entry/uniform/sundress
name = "Sundress"
path = /obj/item/clothing/under/sundress
-/datum/gear/uniform/sundress/white
+/datum/loadout_entry/uniform/sundress/white
name = "Sundress - White"
path = /obj/item/clothing/under/sundress_white
-/datum/gear/uniform/turtlebaggy_selection
+/datum/loadout_entry/uniform/turtlebaggy_selection
name = "Baggy Turtleneck Selection"
path = /obj/item/clothing/under/turtlebaggy
-/datum/gear/uniform/turtlebaggy_selection/New()
+/datum/loadout_entry/uniform/turtlebaggy_selection/New()
..()
var/list/turtlebaggy_selection = list()
for(var/turtlebaggy in typesof(/obj/item/clothing/under/turtlebaggy))
var/obj/item/clothing/under/turtlebaggy_type = turtlebaggy
turtlebaggy_selection[initial(turtlebaggy_type.name)] = turtlebaggy_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(turtlebaggy_selection, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(turtlebaggy_selection, /proc/cmp_text_asc))
-/datum/gear/uniform/pentagramdress
+/datum/loadout_entry/uniform/pentagramdress
name = "Pentagram Dress"
path = /obj/item/clothing/under/pentagramdress
-/datum/gear/uniform/dress_fire
+/datum/loadout_entry/uniform/dress_fire
name = "Flame Dress"
path = /obj/item/clothing/under/dress/dress_fire
-/datum/gear/uniform/whitedress
+/datum/loadout_entry/uniform/whitedress
name = "White Wedding Dress"
path = /obj/item/clothing/under/dress/white
-/datum/gear/uniform/longdress
+/datum/loadout_entry/uniform/longdress
name = "Long Dress"
path = /obj/item/clothing/under/dress/white2
-/datum/gear/uniform/longdress/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/uniform/shortplaindress
+/datum/loadout_entry/uniform/shortplaindress
name = "Plain Dress"
path = /obj/item/clothing/under/dress/white3
-/datum/gear/uniform/shortplaindress/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/uniform/longwidedress
+/datum/loadout_entry/uniform/longwidedress
name = "Long Wide Dress"
path = /obj/item/clothing/under/dress/white4
-/datum/gear/uniform/longwidedress/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/uniform/reddress
+/datum/loadout_entry/uniform/reddress
name = "Red Dress - Belted"
path = /obj/item/clothing/under/dress/darkred
-/datum/gear/uniform/wedding
+/datum/loadout_entry/uniform/wedding
name = "Wedding Dress Selection"
path = /obj/item/clothing/under/wedding
-/datum/gear/uniform/wedding/New()
+/datum/loadout_entry/uniform/wedding/New()
..()
var/list/weddings = list()
for(var/wedding in typesof(/obj/item/clothing/under/wedding))
var/obj/item/clothing/under/wedding/wedding_type = wedding
weddings[initial(wedding_type.name)] = wedding_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(weddings, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(weddings, /proc/cmp_text_asc))
-/datum/gear/uniform/suit/reallyblack
+/datum/loadout_entry/uniform/suit/reallyblack
name = "Executive Suit"
path = /obj/item/clothing/under/suit_jacket/really_black
-/datum/gear/uniform/skirts
+/datum/loadout_entry/uniform/skirts
name = "Executive Skirt"
path = /obj/item/clothing/under/suit_jacket/female/skirt
-/datum/gear/uniform/dresses
+/datum/loadout_entry/uniform/dresses
name = "Sailor Dress"
path = /obj/item/clothing/under/dress/sailordress
-/datum/gear/uniform/dresses/eveninggown
+/datum/loadout_entry/uniform/dresses/eveninggown
name = "Red Evening Gown"
path = /obj/item/clothing/under/dress/redeveninggown
-/datum/gear/uniform/dresses/maid
+/datum/loadout_entry/uniform/dresses/maid
name = "Maid Uniform Selection"
path = /obj/item/clothing/under/dress/maid
-/datum/gear/uniform/dresses/maid/New()
+/datum/loadout_entry/uniform/dresses/maid/New()
..()
var/list/maids = list()
for(var/maid in typesof(/obj/item/clothing/under/dress/maid))
var/obj/item/clothing/under/dress/maid/maid_type = maid
maids[initial(maid_type.name)] = maid_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(maids, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(maids, /proc/cmp_text_asc))
-/datum/gear/uniform/utility
+/datum/loadout_entry/uniform/utility
name = "Utility - Black"
path = /obj/item/clothing/under/utility
-/datum/gear/uniform/utility/blue
+/datum/loadout_entry/uniform/utility/blue
name = "Utility - Blue"
path = /obj/item/clothing/under/utility/blue
-/datum/gear/uniform/utility/grey
+/datum/loadout_entry/uniform/utility/grey
name = "Utility - Grey"
path = /obj/item/clothing/under/utility/grey
-/datum/gear/uniform/sweater
+/datum/loadout_entry/uniform/sweater
name = "Sweater - Grey"
path = /obj/item/clothing/under/rank/psych/turtleneck/sweater
-/datum/gear/uniform/brandjumpsuit_selection
+/datum/loadout_entry/uniform/brandjumpsuit_selection
name = "Branded Jumpsuit Selection"
path = /obj/item/clothing/under/brandjumpsuit/aether
-/datum/gear/uniform/brandjumpsuit_selection/New()
+/datum/loadout_entry/uniform/brandjumpsuit_selection/New()
..()
var/list/brandjumpsuit_selection = list()
for(var/brandjumpsuit in typesof(/obj/item/clothing/under/brandjumpsuit))
var/obj/item/clothing/under/brandjumpsuit_type = brandjumpsuit
brandjumpsuit_selection[initial(brandjumpsuit_type.name)] = brandjumpsuit_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(brandjumpsuit_selection, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(brandjumpsuit_selection, /proc/cmp_text_asc))
-/datum/gear/uniform/yogapants
+/datum/loadout_entry/uniform/yogapants
name = "Yoga Pants"
path = /obj/item/clothing/under/pants/yogapants
-/datum/gear/uniform/yogapants/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/uniform/black_corset
+/datum/loadout_entry/uniform/black_corset
name = "Black Corset"
path = /obj/item/clothing/under/dress/black_corset
-/datum/gear/uniform/flower_dress
+/datum/loadout_entry/uniform/flower_dress
name = "Flower Dress"
path = /obj/item/clothing/under/dress/flower_dress
-/datum/gear/uniform/red_swept_dress
+/datum/loadout_entry/uniform/red_swept_dress
name = "Red Swept Dress"
path = /obj/item/clothing/under/dress/red_swept_dress
-/datum/gear/uniform/bathrobe
+/datum/loadout_entry/uniform/bathrobe
name = "Bathrobe"
path = /obj/item/clothing/under/bathrobe
-/datum/gear/uniform/flamenco
+/datum/loadout_entry/uniform/flamenco
name = "Flamenco Dress"
path = /obj/item/clothing/under/dress/flamenco
-/datum/gear/uniform/westernbustle
+/datum/loadout_entry/uniform/westernbustle
name = "Western Bustle"
path = /obj/item/clothing/under/dress/westernbustle
-/datum/gear/uniform/circuitry
+/datum/loadout_entry/uniform/circuitry
name = "Jumpsuit - Circuitry"
path = /obj/item/clothing/under/circuitry
-/datum/gear/uniform/sysguard
+/datum/loadout_entry/uniform/sysguard
name = "Uniform - Crew"
path = /obj/item/clothing/under/oricon/utility/sysguard/crew
-/datum/gear/uniform/marine/green
+/datum/loadout_entry/uniform/marine/green
name = "Uniform - Green Fatigues"
path = /obj/item/clothing/under/oricon/utility/marine/green
-/datum/gear/uniform/marine/tan
+/datum/loadout_entry/uniform/marine/tan
name = "Uniform - Tan Fatigues"
path = /obj/item/clothing/under/oricon/utility/marine/tan
-/datum/gear/uniform/overalls
+/datum/loadout_entry/uniform/overalls
name = "Overalls"
path = /obj/item/clothing/under/overalls
-/datum/gear/uniform/overalls_fem
+/datum/loadout_entry/uniform/overalls_fem
name = "Overalls - Female"
path = /obj/item/clothing/under/overalls_fem
-/datum/gear/uniform/sleekoverall
+/datum/loadout_entry/uniform/sleekoverall
name = "Overalls - Sleek"
path = /obj/item/clothing/under/overalls/sleek
-/datum/gear/uniform/sleekoverall_fem
+/datum/loadout_entry/uniform/sleekoverall_fem
name = "Overalls - Sleek - Female"
path = /obj/item/clothing/under/overalls/sleek_fem
-/datum/gear/uniform/sarired
+/datum/loadout_entry/uniform/sarired
name = "Sari - Red"
path = /obj/item/clothing/under/dress/sari
-/datum/gear/uniform/sarigreen
+/datum/loadout_entry/uniform/sarigreen
name = "Sari - Green"
path = /obj/item/clothing/under/dress/sari/green
-/datum/gear/uniform/kamishimo
+/datum/loadout_entry/uniform/kamishimo
name = "Kamishimo"
path = /obj/item/clothing/under/kamishimo
-/datum/gear/uniform/kimono
+/datum/loadout_entry/uniform/kimono
name = "Kimono - Plain"
path = /obj/item/clothing/under/kimono
-/datum/gear/uniform/kimono_black
+/datum/loadout_entry/uniform/kimono_black
name = "Kimono - Black"
path = /obj/item/clothing/under/kimono_black
-/datum/gear/uniform/kimono_sakura
+/datum/loadout_entry/uniform/kimono_sakura
name = "Kimono - Sakura"
path = /obj/item/clothing/under/kimono_sakura
-/datum/gear/uniform/kimono_fancy
+/datum/loadout_entry/uniform/kimono_fancy
name = "Kimono - Festival"
path = /obj/item/clothing/under/kimono_fancy
-/datum/gear/uniform/kimono_selection
+/datum/loadout_entry/uniform/kimono_selection
name = "Kimono Selection"
description = "Colorful variants of the basic kimono. Stylish and comfy!"
-/datum/gear/uniform/kimono_selection/New()
+/datum/loadout_entry/uniform/kimono_selection/New()
..()
var/list/kimonos = list()
for(var/kimono in typesof(/obj/item/clothing/under/kimono))
var/obj/item/clothing/under/kimono/kimono_type = kimono
kimonos[initial(kimono_type.name)] = kimono_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(kimonos, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(kimonos, /proc/cmp_text_asc))
-/datum/gear/uniform/pyjamas_red
+/datum/loadout_entry/uniform/pyjamas_red
name = "Pyjamas - Red"
path = /obj/item/clothing/under/redpyjamas
-/datum/gear/uniform/pyjamas_blue
+/datum/loadout_entry/uniform/pyjamas_blue
name = "Pyjamas - Blue"
path = /obj/item/clothing/under/bluepyjamas
-/datum/gear/uniform/pyjamas_red_fem
+/datum/loadout_entry/uniform/pyjamas_red_fem
name = "Pyjamas - Red - Female"
path = /obj/item/clothing/under/redpyjamas_fem
-/datum/gear/uniform/pyjamas_blue_fem
+/datum/loadout_entry/uniform/pyjamas_blue_fem
name = "Pyjamas - Blue - Female"
path = /obj/item/clothing/under/bluepyjamas_fem
-/datum/gear/uniform/wrappedcoat
+/datum/loadout_entry/uniform/wrappedcoat
name = "Modern Wrapped Coat"
path = /obj/item/clothing/under/moderncoat
-/datum/gear/uniform/ascetic
+/datum/loadout_entry/uniform/ascetic
name = "Plain Ascetic Garb"
path = /obj/item/clothing/under/ascetic
-/datum/gear/uniform/ascetic_fem
+/datum/loadout_entry/uniform/ascetic_fem
name = "Plain Ascetic Garb - Female"
path = /obj/item/clothing/under/ascetic_fem
-/datum/gear/uniform/pleated
+/datum/loadout_entry/uniform/pleated
name = "Pleated Skirt"
path = /obj/item/clothing/under/skirt/pleated
-/datum/gear/uniform/pleated/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/uniform/lilacdress
+/datum/loadout_entry/uniform/lilacdress
name = "Lilac Dress"
path = /obj/item/clothing/under/dress/lilacdress
-/datum/gear/uniform/stripeddress
+/datum/loadout_entry/uniform/stripeddress
name = "Striped Dress"
path = /obj/item/clothing/under/dress/stripeddress
-/datum/gear/uniform/festivedress
+/datum/loadout_entry/uniform/festivedress
name = "Festive Dress"
path = /obj/item/clothing/under/festivedress
-/datum/gear/uniform/haltertop
+/datum/loadout_entry/uniform/haltertop
name = "Halter Top"
path = /obj/item/clothing/under/haltertop
-/datum/gear/uniform/littleblackdress
+/datum/loadout_entry/uniform/littleblackdress
name = "Little Black Dress"
path = /obj/item/clothing/under/littleblackdress
-/datum/gear/uniform/dutchsuit
+/datum/loadout_entry/uniform/dutchsuit
name = "Western Suit"
path = /obj/item/clothing/under/dutchuniform
-/datum/gear/uniform/victorianredshirt
+/datum/loadout_entry/uniform/victorianredshirt
name = "Red Shirted Victorian Suit"
path = /obj/item/clothing/under/victorianblred
-/datum/gear/uniform/victorianredshirt/female
+/datum/loadout_entry/uniform/victorianredshirt/female
name = "Red Shirted Victorian Suit - Female"
path = /obj/item/clothing/under/fem_victorianblred
-/datum/gear/uniform/victorianredvest
+/datum/loadout_entry/uniform/victorianredvest
name = "Red Vested Victorian Suit"
path = /obj/item/clothing/under/victorianredvest
-/datum/gear/uniform/victorianredvest/female
+/datum/loadout_entry/uniform/victorianredvest/female
name = "Red Vested Victorian Suit - Female"
path = /obj/item/clothing/under/fem_victorianredvest
-/datum/gear/uniform/victoriansuit
+/datum/loadout_entry/uniform/victoriansuit
name = "Victorian Suit"
path = /obj/item/clothing/under/victorianvest
-/datum/gear/uniform/victoriansuit/female
+/datum/loadout_entry/uniform/victoriansuit/female
name = "Victorian Suit - Female"
path = /obj/item/clothing/under/fem_victorianvest
-/datum/gear/uniform/victorianbluesuit
+/datum/loadout_entry/uniform/victorianbluesuit
name = "Blue Shirted Victorian Suit"
path = /obj/item/clothing/under/victorianlightfire
-/datum/gear/uniform/victorianbluesuit/female
+/datum/loadout_entry/uniform/victorianbluesuit/female
name = "Blue Shirted Victorian Suit - Female"
path = /obj/item/clothing/under/fem_victorianlightfire
-/datum/gear/uniform/victorianreddress
+/datum/loadout_entry/uniform/victorianreddress
name = "Victorian Red Dress"
path = /obj/item/clothing/under/victorianreddress
-/datum/gear/uniform/victorianblackdress
+/datum/loadout_entry/uniform/victorianblackdress
name = "Victorian Black Dress"
path = /obj/item/clothing/under/victorianblackdress
-/datum/gear/uniform/fiendsuit
+/datum/loadout_entry/uniform/fiendsuit
name = "Fiendish Suit"
path = /obj/item/clothing/under/fiendsuit
-/datum/gear/uniform/fienddress
+/datum/loadout_entry/uniform/fienddress
name = "Fiendish Dress"
path = /obj/item/clothing/under/fienddress
-/datum/gear/uniform/leotard
+/datum/loadout_entry/uniform/leotard
name = "Black Leotard"
path = /obj/item/clothing/under/leotard
-/datum/gear/uniform/leotardcolor
+/datum/loadout_entry/uniform/leotardcolor
name = "Colored Leotard"
path = /obj/item/clothing/under/leotardcolor
-/datum/gear/uniform/leotardcolor/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/uniform/verglasdress
+/datum/loadout_entry/uniform/verglasdress
name = "Verglas Dress"
path = /obj/item/clothing/under/verglasdress
-/datum/gear/uniform/fashionminiskirt
+/datum/loadout_entry/uniform/fashionminiskirt
name = "Fashionable Miniskirt"
path = /obj/item/clothing/under/fashionminiskirt
-/datum/gear/uniform/fashionminiskirt/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/uniform/bodysuit
+/datum/loadout_entry/uniform/bodysuit
name = "Standard Bodysuit"
path = /obj/item/clothing/under/bodysuit
-/datum/gear/uniform/bodysuit_fem
+/datum/loadout_entry/uniform/bodysuit_fem
name = "Standard Bodysuit - Female"
path = /obj/item/clothing/under/bodysuit_fem
-/datum/gear/uniform/bodysuiteva
+/datum/loadout_entry/uniform/bodysuiteva
name = "EVA Bodysuit"
path = /obj/item/clothing/under/bodysuit/bodysuiteva
-/datum/gear/uniform/bodysuiteva_fem
+/datum/loadout_entry/uniform/bodysuiteva_fem
name = "EVA Bodysuit - Female"
path = /obj/item/clothing/under/bodysuit/bodysuiteva_fem
-/datum/gear/uniform/future_fashion_selection
+/datum/loadout_entry/uniform/future_fashion_selection
name = "Futuristic Striped Jumpsuit Selection"
path = /obj/item/clothing/under/future_fashion
-/datum/gear/uniform/future_fashion_selection/New()
+/datum/loadout_entry/uniform/future_fashion_selection/New()
..()
var/list/future_fashion_selection = list()
for(var/future_fashion in typesof(/obj/item/clothing/under/future_fashion))
var/obj/item/clothing/under/future_fashion/future_fashion_type = future_fashion
future_fashion_selection[initial(future_fashion_type.name)] = future_fashion_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(future_fashion_selection, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(future_fashion_selection, /proc/cmp_text_asc))
-/datum/gear/uniform/suit/permit
+/datum/loadout_entry/uniform/suit/permit
name = "Nudity Permit"
path = /obj/item/clothing/under/permit
@@ -595,347 +567,343 @@
Swimsuits
*/
-/datum/gear/uniform/swimsuits
+/datum/loadout_entry/uniform/swimsuits
name = "Swimsuit Selection"
path = /obj/item/clothing/under/swimsuit
-/datum/gear/uniform/swimsuits/New()
+/datum/loadout_entry/uniform/swimsuits/New()
..()
var/list/swimsuits = list()
for(var/swimsuit in typesof(/obj/item/clothing/under/swimsuit))
var/obj/item/clothing/under/swimsuit/swimsuit_type = swimsuit
swimsuits[initial(swimsuit_type.name)] = swimsuit_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(swimsuits, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(swimsuits, /proc/cmp_text_asc))
-/datum/gear/uniform/suit/gnshorts
+/datum/loadout_entry/uniform/suit/gnshorts
name = "GN Shorts"
path = /obj/item/clothing/under/fluff/gnshorts
// Latex maid dress
-/datum/gear/uniform/latexmaid
+/datum/loadout_entry/uniform/latexmaid
name = "Latex Maid Dress"
path = /obj/item/clothing/under/fluff/latexmaid
//Tron Siren outfit
-/datum/gear/uniform/siren
+/datum/loadout_entry/uniform/siren
name = "Jumpsuit - Siren"
path = /obj/item/clothing/under/fluff/siren
-/datum/gear/uniform/suit/v_nanovest
+/datum/loadout_entry/uniform/suit/v_nanovest
name = "Varmacorp Nanovest"
path = /obj/item/clothing/under/fluff/v_nanovest
-/datum/gear/uniform/greyskirt_female
+/datum/loadout_entry/uniform/greyskirt_female
name = "Grey Skirt"
path = /obj/item/clothing/under/greyskirt_female
-/datum/gear/uniform/highwayman_clothes
+/datum/loadout_entry/uniform/highwayman_clothes
name = "Highwayman Outfit"
path = /obj/item/clothing/under/highwayman_clothes
-/datum/gear/uniform/highwayman_clothes_fem
+/datum/loadout_entry/uniform/highwayman_clothes_fem
name = "Highwayman Outfit - Female"
path = /obj/item/clothing/under/highwayman_clothes_fem
-/datum/gear/uniform/businessskirt
+/datum/loadout_entry/uniform/businessskirt
name = "Business Skirt"
path = /obj/item/clothing/under/businessskirt_female
-/datum/gear/uniform/simpledress
+/datum/loadout_entry/uniform/simpledress
name = "Simple Dress"
path = /obj/item/clothing/under/simpledress
-/datum/gear/uniform/formalredcoat
+/datum/loadout_entry/uniform/formalredcoat
name = "Formal Coat - Red"
path = /obj/item/clothing/under/redcoatformal
-/datum/gear/uniform/vice
+/datum/loadout_entry/uniform/vice
name = "Vice Officers Jumpsuit"
path = /obj/item/clothing/under/rank/vice
-/datum/gear/uniform/saare
+/datum/loadout_entry/uniform/saare
name = "SAARE Uniform"
path = /obj/item/clothing/under/saare
-/datum/gear/uniform/saare_fem
+/datum/loadout_entry/uniform/saare_fem
name = "SAARE Uniform - Female"
path = /obj/item/clothing/under/saare_fem
-/datum/gear/uniform/hawaiianpink
+/datum/loadout_entry/uniform/hawaiianpink
name = "Suit - Pink Hawaiian"
path = /obj/item/clothing/under/hawaiian
-/datum/gear/uniform/geisha
+/datum/loadout_entry/uniform/geisha
name = "Geisha Outfit"
path = /obj/item/clothing/under/geisha
-/datum/gear/uniform/blueshift
+/datum/loadout_entry/uniform/blueshift
name = "Suit - Light Blue"
path = /obj/item/clothing/under/blueshift
-/datum/gear/uniform/office_worker
+/datum/loadout_entry/uniform/office_worker
name = "Suit - Office Worker"
path = /obj/item/clothing/under/office_worker
-/datum/gear/uniform/tracksuit_blue
+/datum/loadout_entry/uniform/tracksuit_blue
name = "Tracksuit - Blue"
path = /obj/item/clothing/under/tracksuit_blue
-/datum/gear/uniform/tribal_tunic
+/datum/loadout_entry/uniform/tribal_tunic
name = "Tunic - Simple"
path = /obj/item/clothing/under/tribal_tunic
-/datum/gear/uniform/tribal_tunic_fem
+/datum/loadout_entry/uniform/tribal_tunic_fem
name = "Tunic - Simple - Female"
path = /obj/item/clothing/under/tribal_tunic_fem
-/datum/gear/uniform/druidic_gown
+/datum/loadout_entry/uniform/druidic_gown
name = "Tunic - Flowered"
path = /obj/item/clothing/under/druidic_gown
-/datum/gear/uniform/druidic_gown_fem
+/datum/loadout_entry/uniform/druidic_gown_fem
name = "Tunic - Flowered - Female"
path = /obj/item/clothing/under/druidic_gown_fem
-/datum/gear/uniform/laconic
+/datum/loadout_entry/uniform/laconic
name = "Laconic Field Suit"
path = /obj/item/clothing/under/laconic
-/datum/gear/uniform/bountyskin
+/datum/loadout_entry/uniform/bountyskin
name = "Bounty Hunters Skinsuit"
path = /obj/item/clothing/under/bountyskin
-/datum/gear/uniform/navy_jumpsuit
+/datum/loadout_entry/uniform/navy_jumpsuit
name = "Navy Gray Jumpsuit"
path = /obj/item/clothing/under/navy_gray
-/datum/gear/uniform/gray_smooth
+/datum/loadout_entry/uniform/gray_smooth
name = "Gray Smooth Jumpsuit"
path = /obj/item/clothing/under/smooth_gray
-/datum/gear/uniform/chiming_dress
+/datum/loadout_entry/uniform/chiming_dress
name = "Chiming Dress"
path = /obj/item/clothing/under/chiming_dress
-/datum/gear/uniform/waiter
+/datum/loadout_entry/uniform/waiter
name = "Waiters Outfit"
path = /obj/item/clothing/under/waiter
-/datum/gear/uniform/waiter_fem
+/datum/loadout_entry/uniform/waiter_fem
name = "Waiters Outfit - Female"
path = /obj/item/clothing/under/waiter_fem
-/datum/gear/uniform/assistantformal
+/datum/loadout_entry/uniform/assistantformal
name = "Assistants Formal Uniform"
path = /obj/item/clothing/under/assistantformal
-/datum/gear/uniform/assistantformal_fem
+/datum/loadout_entry/uniform/assistantformal_fem
name = "Assistants Formal Uniform - Female"
path = /obj/item/clothing/under/assistantformal_fem
-/datum/gear/uniform/cropdress
+/datum/loadout_entry/uniform/cropdress
name = "Cropped Dress"
path = /obj/item/clothing/under/dress/cropdress
-/datum/gear/uniform/twistdress
+/datum/loadout_entry/uniform/twistdress
name = "Twisted Dress"
path = /obj/item/clothing/under/dress/twistdress
-/datum/gear/uniform/antediluvian
+/datum/loadout_entry/uniform/antediluvian
name = "Antediluvian Corset"
path = /obj/item/clothing/under/antediluvian
-/datum/gear/uniform/antediluvian_dress
+/datum/loadout_entry/uniform/antediluvian_dress
name = "Antediluvian Dress"
path = /obj/item/clothing/under/antediluvian/dress
-/datum/gear/accessory/antediluvian_gloves_alt
+/datum/loadout_entry/accessory/antediluvian_gloves_alt
name = "Antediluvian Bracers Alternate"
path = /obj/item/clothing/accessory/antediluvian_gloves/alt
-/datum/gear/accessory/antediluvian_socks
+/datum/loadout_entry/accessory/antediluvian_socks
name = "Antediluvian Socks"
path = /obj/item/clothing/accessory/antediluvian_socks
-/datum/gear/accessory/antediluvian_necklace
+/datum/loadout_entry/accessory/antediluvian_necklace
name = "Antediluvian Necklace"
path = /obj/item/clothing/accessory/antediluvian_necklace
-/datum/gear/accessory/antediluvian_flaps
+/datum/loadout_entry/accessory/antediluvian_flaps
name = "Antediluvian Flaps"
path = /obj/item/clothing/accessory/antediluvian_flaps
-/datum/gear/uniform/hasie
+/datum/loadout_entry/uniform/hasie
name = "Hasie Designer Skirt/Vest"
path = /obj/item/clothing/under/hasie
-/datum/gear/uniform/utility_fur_pants
+/datum/loadout_entry/uniform/utility_fur_pants
name = "Utility Fur Pants"
path = /obj/item/clothing/under/utility_fur_pants
-/datum/gear/uniform/sitri
+/datum/loadout_entry/uniform/sitri
name = "Sitri Striped Sweater"
path = /obj/item/clothing/under/sitri
-/datum/gear/uniform/halfmoon
+/datum/loadout_entry/uniform/halfmoon
name = "Half Moon Outfit"
path = /obj/item/clothing/under/half_moon
-/datum/gear/uniform/toga
+/datum/loadout_entry/uniform/toga
name = "Toga"
path = /obj/item/clothing/under/toga
-/datum/gear/uniform/countess
+/datum/loadout_entry/uniform/countess
name = "Countess Dress"
path = /obj/item/clothing/under/countess
-/datum/gear/uniform/baroness
+/datum/loadout_entry/uniform/baroness
name = "Baroness Dress"
path = /obj/item/clothing/under/baroness
-/datum/gear/uniform/yoko
+/datum/loadout_entry/uniform/yoko
name = "Scavenging Sniper Set"
path = /obj/item/clothing/under/yoko
-/datum/gear/uniform/kamina
+/datum/loadout_entry/uniform/kamina
name = "Spiral Hero Outfit"
path = /obj/item/clothing/under/kamina
-/datum/gear/uniform/tape
+/datum/loadout_entry/uniform/tape
name = "Body Tape Wrapping"
path = /obj/item/clothing/under/tape
-/datum/gear/uniform/revealing
+/datum/loadout_entry/uniform/revealing
name = "Revealing Cocktail Dress"
path = /obj/item/clothing/under/revealing
-/datum/gear/uniform/belial
+/datum/loadout_entry/uniform/belial
name = "Belial Striped Shirt and Shorts"
path = /obj/item/clothing/under/belial
-/datum/gear/uniform/lilin
+/datum/loadout_entry/uniform/lilin
name = "Lilin Sash Dress"
path = /obj/item/clothing/under/lilin
-/datum/gear/uniform/asmodai
+/datum/loadout_entry/uniform/asmodai
name = "Asmodai Laced Blouse"
path = /obj/item/clothing/under/asmodai
-/datum/gear/uniform/blackshortsripped
+/datum/loadout_entry/uniform/blackshortsripped
name = "Ripped Black Shorts"
path = /obj/item/clothing/under/blackshortsripped
-/datum/gear/uniform/summerdress_selection
+/datum/loadout_entry/uniform/summerdress_selection
name = "Summer Dress Selection"
path = /obj/item/clothing/under/dress/summer
-/datum/gear/uniform/summerdress_selection/New()
+/datum/loadout_entry/uniform/summerdress_selection/New()
..()
var/list/summerdress_selection = list()
for(var/summerdress in typesof(/obj/item/clothing/under/dress/summer))
var/obj/item/clothing/under/summerdress_type = summerdress
summerdress_selection[initial(summerdress_type.name)] = summerdress_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(summerdress_selection, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(summerdress_selection, /proc/cmp_text_asc))
-/datum/gear/uniform/skinsuit_selection
+/datum/loadout_entry/uniform/skinsuit_selection
name = "Skinsuit Selection - Male"
path = /obj/item/clothing/under/skinsuit
-/datum/gear/uniform/skinsuit_selection/New()
+/datum/loadout_entry/uniform/skinsuit_selection/New()
..()
var/list/skinsuit_selection = list()
for(var/skinsuit in typesof(/obj/item/clothing/under/skinsuit))
var/obj/item/clothing/under/skinsuit_type = skinsuit
skinsuit_selection[initial(skinsuit_type.name)] = skinsuit_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(skinsuit_selection, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(skinsuit_selection, /proc/cmp_text_asc))
-/datum/gear/uniform/skinsuitfem_selection
+/datum/loadout_entry/uniform/skinsuitfem_selection
name = "Skinsuit Selection - Female"
path = /obj/item/clothing/under/skinsuit_fem
-/datum/gear/uniform/skinsuitfem_selection/New()
+/datum/loadout_entry/uniform/skinsuitfem_selection/New()
..()
var/list/skinsuitfem_selection = list()
for(var/skinsuitfem in typesof(/obj/item/clothing/under/skinsuit_fem))
var/obj/item/clothing/under/skinsuitfem_type = skinsuitfem
skinsuitfem_selection[initial(skinsuitfem_type.name)] = skinsuitfem_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(skinsuitfem_selection, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(skinsuitfem_selection, /proc/cmp_text_asc))
-/datum/gear/uniform/altbodysuit_selection
+/datum/loadout_entry/uniform/altbodysuit_selection
name = "Alternate Bodysuit Selection - Male"
path = /obj/item/clothing/under/bodysuit/alt
-/datum/gear/uniform/altbodysuit_selection/New()
+/datum/loadout_entry/uniform/altbodysuit_selection/New()
..()
var/list/altbodysuit_selection = list()
for(var/altbodysuit in typesof(/obj/item/clothing/under/bodysuit/alt))
var/obj/item/clothing/under/altbodysuit_type = altbodysuit
altbodysuit_selection[initial(altbodysuit_type.name)] = altbodysuit_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(altbodysuit_selection, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(altbodysuit_selection, /proc/cmp_text_asc))
-/datum/gear/uniform/altbodysuitfem_selection
+/datum/loadout_entry/uniform/altbodysuitfem_selection
name = "Alternate Bodysuit Selection - Female"
path = /obj/item/clothing/under/bodysuit/alt_fem
-/datum/gear/uniform/altbodysuitfem_selection/New()
+/datum/loadout_entry/uniform/altbodysuitfem_selection/New()
..()
var/list/altbodysuitfem_selection = list()
for(var/altbodysuitfem in typesof(/obj/item/clothing/under/bodysuit/alt_fem))
var/obj/item/clothing/under/altbodysuitfem_type = altbodysuitfem
altbodysuitfem_selection[initial(altbodysuitfem_type.name)] = altbodysuitfem_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(altbodysuitfem_selection, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(altbodysuitfem_selection, /proc/cmp_text_asc))
-/datum/gear/uniform/ballet
+/datum/loadout_entry/uniform/ballet
name = "Antheia Tutu"
path = /obj/item/clothing/under/ballet
-/datum/gear/uniform/ballet/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
//Tajaran wears
-/datum/gear/uniform/tajaran/summercloths_selection
+/datum/loadout_entry/uniform/tajaran/summercloths_selection
name = "Adhomian summerwear"
path = /obj/item/clothing/under/tajaran/summer
-/datum/gear/uniform/tajaran/summercloths_selection/New()
+/datum/loadout_entry/uniform/tajaran/summercloths_selection/New()
..()
var/list/summercloths_selection = list()
for(var/summercloths in (typesof(/obj/item/clothing/under/tajaran/summer)))
var/obj/item/clothing/under/summercloths_type = summercloths
summercloths_selection[initial(summercloths_type.name)] = summercloths_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(summercloths_selection, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(summercloths_selection, /proc/cmp_text_asc))
-/datum/gear/uniform/tajaran/tajara_dress_selection
+/datum/loadout_entry/uniform/tajaran/tajara_dress_selection
name = "Adhomian dresses selection"
description = "A selection of tajaran native dresses."
path = /obj/item/clothing/under/dress/tajaran
-/datum/gear/uniform/tajaran/tajara_dress_selection/New()
+/datum/loadout_entry/uniform/tajaran/tajara_dress_selection/New()
..()
var/list/tajara_dress_selection = list()
for(var/tajara_dress in (typesof(/obj/item/clothing/under/dress/tajaran)))
var/obj/item/clothing/under/dress/tajaran/tajara_dress_type = tajara_dress
tajara_dress_selection[initial(tajara_dress_type.name)] = tajara_dress_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tajara_dress_selection, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tajara_dress_selection, /proc/cmp_text_asc))
-/datum/gear/uniform/tajaran/laborer
+/datum/loadout_entry/uniform/tajaran/laborer
name = "Generic Adhomian laborer clothes"
path = /obj/item/clothing/under/tajaran
-/datum/gear/uniform/tajaran/machinist
+/datum/loadout_entry/uniform/tajaran/machinist
name = "Adhomian machinist uniform"
path = /obj/item/clothing/under/tajaran/mechanic
-/datum/gear/uniform/tajaran/raakti_shariim
+/datum/loadout_entry/uniform/tajaran/raakti_shariim
name = "Raakti shariim uniform"
path = /obj/item/clothing/under/tajaran/raakti_shariim
-/datum/gear/uniform/tajaran/dpra
+/datum/loadout_entry/uniform/tajaran/dpra
name = "DPRA laborer clothes"
path = /obj/item/clothing/under/tajaran/dpra
-/datum/gear/uniform/tajaran/dpra/alt
+/datum/loadout_entry/uniform/tajaran/dpra/alt
name = "DPRA laborer clothes, alternate"
path = /obj/item/clothing/under/tajaran/dpra/alt
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_utility.dm b/code/modules/loadout/loadout_utility.dm
similarity index 65%
rename from code/modules/preferences/preference_setup/loadout/loadout_utility.dm
rename to code/modules/loadout/loadout_utility.dm
index 2b035384ea1..2bab8ddc8df 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_utility.dm
+++ b/code/modules/loadout/loadout_utility.dm
@@ -1,271 +1,263 @@
// "Useful" items - I'm guessing things that might be used at work?
-/datum/gear/utility
+/datum/loadout_entry/utility
name = "Briefcase"
path = /obj/item/storage/briefcase
- sort_category = LOADOUT_CATEGORY_UTILITY
+ category = LOADOUT_CATEGORY_UTILITY
-/datum/gear/utility/clipboard
+/datum/loadout_entry/utility/clipboard
name = "Clipboard"
path = /obj/item/clipboard
-/datum/gear/utility/tts_device
+/datum/loadout_entry/utility/tts_device
name = "Text To Speech Device"
path = /obj/item/text_to_speech
cost = 3 // Not extremely expensive, but it's useful for mute chracters.
-/datum/gear/utility/communicator
+/datum/loadout_entry/utility/communicator
name = "Communicator Selection"
path = /obj/item/communicator
cost = 0
-/datum/gear/utility/communicator/New()
+/datum/loadout_entry/utility/communicator/New()
..()
var/list/communicators = list()
for(var/communicator in typesof(/obj/item/communicator) - list(/obj/item/communicator/integrated,/obj/item/communicator/commlink))
var/obj/item/communicator_type = communicator
communicators[initial(communicator_type.name)] = communicator_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(communicators, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(communicators, /proc/cmp_text_asc))
-/datum/gear/utility/camera
+/datum/loadout_entry/utility/camera
name = "Camera"
path = /obj/item/camera
-/datum/gear/utility/news
+/datum/loadout_entry/utility/news
name = "Daedalus Pocket Newscaster"
path = /obj/item/book/codex/lore/news
cost = 0
-/datum/gear/utility/fbp_guide
+/datum/loadout_entry/utility/fbp_guide
name = "A Buyer's Guide To Artificial Bodies"
path = /obj/item/book/codex/lore/robutt
cost = 0
-/datum/gear/utility/folder_blue
+/datum/loadout_entry/utility/folder_blue
name = "Folder - Blue"
path = /obj/item/folder/blue
-/datum/gear/utility/folder_grey
+/datum/loadout_entry/utility/folder_grey
name = "Folder - Grey"
path = /obj/item/folder
-/datum/gear/utility/folder_red
+/datum/loadout_entry/utility/folder_red
name = "Folder - Red"
path = /obj/item/folder/red
-/datum/gear/utility/folder_white
+/datum/loadout_entry/utility/folder_white
name = "Folder - White"
path = /obj/item/folder/white
-/datum/gear/utility/folder_yellow
+/datum/loadout_entry/utility/folder_yellow
name = "Folder - Yellow"
path = /obj/item/folder/yellow
-/datum/gear/utility/paicard
+/datum/loadout_entry/utility/paicard
name = "Personal AI Device"
path = /obj/item/paicard
-/datum/gear/utility/securecase
+/datum/loadout_entry/utility/securecase
name = "Secure, Portable Briefcase"
path =/obj/item/storage/secure/briefcase/portable
cost = 2
-/datum/gear/utility/laserpointer
+/datum/loadout_entry/utility/laserpointer
name = "Laser Pointer"
path =/obj/item/laser_pointer
cost = 2
-/datum/gear/utility/flashlight
+/datum/loadout_entry/utility/flashlight
name = "Flashlight"
path = /obj/item/flashlight
-/datum/gear/utility/flashlight_blue
+/datum/loadout_entry/utility/flashlight_blue
name = "Flashlight - Blue"
path = /obj/item/flashlight/color
-/datum/gear/utility/flashlight_orange
+/datum/loadout_entry/utility/flashlight_orange
name = "Flashlight - Orange"
path = /obj/item/flashlight/color/orange
-/datum/gear/utility/flashlight_red
+/datum/loadout_entry/utility/flashlight_red
name = "Flashlight - Red"
path = /obj/item/flashlight/color/red
-/datum/gear/utility/flashlight_yellow
+/datum/loadout_entry/utility/flashlight_yellow
name = "Flashlight - Yellow"
path = /obj/item/flashlight/color/yellow
-/datum/gear/utility/maglight
+/datum/loadout_entry/utility/maglight
name = "Flashlight - Maglight"
path = /obj/item/flashlight/maglight
cost = 2
-/datum/gear/utility/battery
+/datum/loadout_entry/utility/battery
name = "Device Cell"
path = /obj/item/cell/device
-/datum/gear/utility/implant
+/datum/loadout_entry/utility/implant
slot = "implant"
exploitable = 0
-/datum/gear/utility/implant/tracking
+/datum/loadout_entry/utility/implant/tracking
name = "Implant - Tracking"
slot = "implant"
path = /obj/item/implant/tracking/weak
cost = 0
-/datum/gear/utility/implant/neural
+/datum/loadout_entry/utility/implant/neural
name = "Implant - Neural Assistance Web"
description = "A complex web implanted into the subject, medically in order to compensate for neurological disease."
path = /obj/item/implant/neural
cost = 0
-/datum/gear/utility/implant/dud1
+/datum/loadout_entry/utility/implant/dud1
name = "Implant - Head"
description = "An implant with no obvious purpose."
path = /obj/item/implant/dud
cost = 0
-/datum/gear/utility/implant/dud2
+/datum/loadout_entry/utility/implant/dud2
name = "Implant - Torso"
description = "An implant with no obvious purpose."
path = /obj/item/implant/dud/torso
cost = 0
-/datum/gear/utility/implant/language
+/datum/loadout_entry/utility/implant/language
cost = 2
exploitable = 0
-/datum/gear/utility/implant/language/eal
+/datum/loadout_entry/utility/implant/language/eal
name = "Vocal Synthesizer - EAL"
description = "A surgically implanted vocal synthesizer which allows the owner to speak EAL, if they know it."
path = /obj/item/implant/language/eal
-/datum/gear/utility/implant/language/skrellian
+/datum/loadout_entry/utility/implant/language/skrellian
name = "Vocal Synthesizer - Skrellian"
description = "A surgically implanted vocal synthesizer which allows the owner to speak Common Skrellian, if they know it."
path = /obj/item/implant/language/skrellian
-/datum/gear/utility/pen
+/datum/loadout_entry/utility/pen
name = "Fountain Pen"
path = /obj/item/pen/fountain
-/datum/gear/utility/pen/click
+/datum/loadout_entry/utility/pen/click
name = "Clicker Pen"
path = /obj/item/pen/click
cost = 3
-/datum/gear/utility/wheelchair/color
+/datum/loadout_entry/utility/wheelchair/color
name = "Wheelchair"
path = /obj/item/wheelchair
cost = 4
-/datum/gear/utility/wheelchair/color/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/utility/umbrella
+/datum/loadout_entry/utility/umbrella
name = "Umbrella"
path = /obj/item/melee/umbrella
cost = 3
-/datum/gear/utility/umbrella/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
/****************
modular computers
****************/
-/datum/gear/utility/cheaptablet
+/datum/loadout_entry/utility/cheaptablet
name = "Tablet Computer - Cheap"
path = /obj/item/modular_computer/tablet/preset/custom_loadout/cheap
cost = 3
-/datum/gear/utility/normaltablet
+/datum/loadout_entry/utility/normaltablet
name = "Tablet Computer - Advanced"
path = /obj/item/modular_computer/tablet/preset/custom_loadout/advanced
cost = 4
-/datum/gear/utility/customtablet
+/datum/loadout_entry/utility/customtablet
name = "Tablet Computer - Custom"
path = /obj/item/modular_computer/tablet
cost = 4
-/datum/gear/utility/customtablet/New()
+/datum/loadout_entry/utility/customtablet/New()
..()
- gear_tweaks += new /datum/gear_tweak/tablet()
+ tweaks += new /datum/loadout_tweak/tablet()
-/datum/gear/utility/cheaplaptop
+/datum/loadout_entry/utility/cheaplaptop
name = "Laptop Computer - Cheap"
path = /obj/item/modular_computer/laptop/preset/custom_loadout/cheap
cost = 4
-/datum/gear/utility/normallaptop
+/datum/loadout_entry/utility/normallaptop
name = "Laptop Computer - Advanced"
path = /obj/item/modular_computer/laptop/preset/custom_loadout/advanced
cost = 5
-/datum/gear/utility/customlaptop
+/datum/loadout_entry/utility/customlaptop
name = "Laptop Computer - Custom"
path = /obj/item/modular_computer/laptop/preset/
cost = 6
-/datum/gear/utility/customlaptop/New()
+/datum/loadout_entry/utility/customlaptop/New()
..()
- gear_tweaks += new /datum/gear_tweak/laptop()
+ tweaks += new /datum/loadout_tweak/laptop()
-/datum/gear/utility/dufflebag
+/datum/loadout_entry/utility/dufflebag
name = "Dufflebag"
path = /obj/item/storage/backpack/dufflebag
slot = SLOT_ID_BACK
cost = 2
-/datum/gear/utility/dufflebag/black
+/datum/loadout_entry/utility/dufflebag/black
name = "Dufflebag - Black"
path = /obj/item/storage/backpack/dufflebag/fluff
-/datum/gear/utility/rigbag
+/datum/loadout_entry/utility/rigbag
name = "Rig Storage Unit"
path = /obj/item/storage/backpack/rig
slot = SLOT_ID_BACK
cost = 0
-/datum/gear/utility/welding_helmet
+/datum/loadout_entry/utility/welding_helmet
name = "Welding Helmet"
path = /obj/item/clothing/head/welding
cost = 2
-/datum/gear/utility/welding_helmet/demon
+/datum/loadout_entry/utility/welding_helmet/demon
name = "Welding Helmet - Demon"
path = /obj/item/clothing/head/welding/demon
-/datum/gear/utility/welding_helmet/knight
+/datum/loadout_entry/utility/welding_helmet/knight
name = "Welding Helmet - Knight"
path = /obj/item/clothing/head/welding/knight
-/datum/gear/utility/welding_helmet/fancy
+/datum/loadout_entry/utility/welding_helmet/fancy
name = "Welding Helmet - Fancy"
path = /obj/item/clothing/head/welding/fancy
-/datum/gear/utility/welding_helmet/engie
+/datum/loadout_entry/utility/welding_helmet/engie
name = "Welding Helmet - Engie"
path = /obj/item/clothing/head/welding/engie
-/datum/gear/utility/webbing
+/datum/loadout_entry/utility/webbing
name = "Webbing - Simple"
path = /obj/item/clothing/accessory/storage/webbing
-/datum/gear/utility/webbing/brown
+/datum/loadout_entry/utility/webbing/brown
name = "Webbing - Brown"
path = /obj/item/clothing/accessory/storage/brown_vest
cost = 2
-/datum/gear/utility/webbing/black
+/datum/loadout_entry/utility/webbing/black
name = "Webbing - Black"
path = /obj/item/clothing/accessory/storage/black_vest
cost = 2
-/datum/gear/utility/webbing/white
+/datum/loadout_entry/utility/webbing/white
name = "Webbing - White" //it's a nice day for a / white webbing
path = /obj/item/clothing/accessory/storage/white_vest
cost = 2
diff --git a/code/modules/preferences/preference_setup/loadout/loadout_xeno.dm b/code/modules/loadout/loadout_xeno.dm
similarity index 67%
rename from code/modules/preferences/preference_setup/loadout/loadout_xeno.dm
rename to code/modules/loadout/loadout_xeno.dm
index edcbb926248..7e220c52e5d 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout_xeno.dm
+++ b/code/modules/loadout/loadout_xeno.dm
@@ -1,448 +1,448 @@
//Anything species-restricted to non-human species should be declared here.
/******************************************************************************/
//*Initial Datum Declarations to Reduce Redundancy
-/datum/gear/xeno
+/datum/loadout_entry/xeno
name = "Generic - Loincloth"
path = /obj/item/clothing/suit/storage/fluff/loincloth
slot = null
allowed_roles = null //Since 99.99% of all items in this file are going to be species-locked, we should keep the role-locked species items here, rather than in the role_restricted.dm file.
- sort_category = LOADOUT_CATEGORY_XENOWEAR
+ category = LOADOUT_CATEGORY_XENOWEAR
-/datum/gear/xeno/accessories
+/datum/loadout_entry/xeno/accessories
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
-/datum/gear/xeno/shoes
+/datum/loadout_entry/xeno/shoes
slot = SLOT_ID_SHOES
-/datum/gear/xeno/uniform
+/datum/loadout_entry/xeno/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/xeno/suit
+/datum/loadout_entry/xeno/suit
slot = SLOT_ID_SUIT
-/datum/gear/xeno/head
+/datum/loadout_entry/xeno/head
slot = SLOT_ID_HEAD
-/datum/gear/xeno/eyes
+/datum/loadout_entry/xeno/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/xeno/back
+/datum/loadout_entry/xeno/back
slot = SLOT_ID_BACK
-/datum/gear/xeno/mask
+/datum/loadout_entry/xeno/mask
slot = SLOT_ID_MASK
-/datum/gear/xeno/gloves
+/datum/loadout_entry/xeno/gloves
slot = SLOT_ID_GLOVES
/******************************************************************************/
//**Species-Specific Datum Declarations
//*Tajaran
-/datum/gear/xeno/tajaran
+/datum/loadout_entry/xeno/tajaran
legacy_species_lock = SPECIES_TAJ
-/datum/gear/xeno/tajaran/accessories
+/datum/loadout_entry/xeno/tajaran/accessories
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
-/datum/gear/xeno/tajaran/shoes
+/datum/loadout_entry/xeno/tajaran/shoes
slot = SLOT_ID_SHOES
-/datum/gear/xeno/tajaran/uniform
+/datum/loadout_entry/xeno/tajaran/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/xeno/tajaran/suit
+/datum/loadout_entry/xeno/tajaran/suit
slot = SLOT_ID_SUIT
-/datum/gear/xeno/tajaran/head
+/datum/loadout_entry/xeno/tajaran/head
slot = SLOT_ID_HEAD
-/datum/gear/xeno/tajaran/eyes
+/datum/loadout_entry/xeno/tajaran/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/xeno/tajaran/back
+/datum/loadout_entry/xeno/tajaran/back
slot = SLOT_ID_BACK
//*Promethean
-/datum/gear/xeno/promethean
+/datum/loadout_entry/xeno/promethean
legacy_species_lock = SPECIES_PROMETHEAN
-/datum/gear/xeno/promethean/accessories
+/datum/loadout_entry/xeno/promethean/accessories
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
-/datum/gear/xeno/promethean/shoes
+/datum/loadout_entry/xeno/promethean/shoes
slot = SLOT_ID_SHOES
-/datum/gear/xeno/promethean/uniform
+/datum/loadout_entry/xeno/promethean/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/xeno/promethean/suit
+/datum/loadout_entry/xeno/promethean/suit
slot = SLOT_ID_SUIT
-/datum/gear/xeno/promethean/head
+/datum/loadout_entry/xeno/promethean/head
slot = SLOT_ID_HEAD
-/datum/gear/xeno/promethean/eyes
+/datum/loadout_entry/xeno/promethean/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/xeno/promethean/back
+/datum/loadout_entry/xeno/promethean/back
slot = SLOT_ID_BACK
//*Teshari
-/datum/gear/xeno/teshari
+/datum/loadout_entry/xeno/teshari
-/datum/gear/xeno/teshari/accessories
+/datum/loadout_entry/xeno/teshari/accessories
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
-/datum/gear/xeno/teshari/shoes
+/datum/loadout_entry/xeno/teshari/shoes
slot = SLOT_ID_SHOES
-/datum/gear/xeno/teshari/uniform
+/datum/loadout_entry/xeno/teshari/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/xeno/teshari/suit
+/datum/loadout_entry/xeno/teshari/suit
slot = SLOT_ID_SUIT
-/datum/gear/xeno/teshari/head
+/datum/loadout_entry/xeno/teshari/head
slot = SLOT_ID_HEAD
-/datum/gear/xeno/teshari/eyes
+/datum/loadout_entry/xeno/teshari/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/xeno/teshari/back
+/datum/loadout_entry/xeno/teshari/back
slot = SLOT_ID_BACK
-/datum/gear/xeno/teshari/mask
+/datum/loadout_entry/xeno/teshari/mask
slot = SLOT_ID_MASK
-/datum/gear/xeno/teshari/gloves
+/datum/loadout_entry/xeno/teshari/gloves
slot = SLOT_ID_GLOVES
//*Phoronoid
-/datum/gear/xeno/phoronoid
+/datum/loadout_entry/xeno/phoronoid
legacy_species_lock = SPECIES_PHORONOID
-/datum/gear/xeno/phoronoid/accessories
+/datum/loadout_entry/xeno/phoronoid/accessories
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
-/datum/gear/xeno/phoronoid/shoes
+/datum/loadout_entry/xeno/phoronoid/shoes
slot = SLOT_ID_SHOES
-/datum/gear/xeno/phoronoid/uniform
+/datum/loadout_entry/xeno/phoronoid/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/xeno/phoronoid/suit
+/datum/loadout_entry/xeno/phoronoid/suit
slot = SLOT_ID_SUIT
-/datum/gear/xeno/phoronoid/head
+/datum/loadout_entry/xeno/phoronoid/head
slot = SLOT_ID_HEAD
-/datum/gear/xeno/phoronoid/eyes
+/datum/loadout_entry/xeno/phoronoid/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/xeno/phoronoid/back
+/datum/loadout_entry/xeno/phoronoid/back
slot = SLOT_ID_BACK
-/datum/gear/xeno/phoronoid/mask
+/datum/loadout_entry/xeno/phoronoid/mask
slot = SLOT_ID_MASK
-/datum/gear/xeno/phoronoid/gloves
+/datum/loadout_entry/xeno/phoronoid/gloves
slot = SLOT_ID_GLOVES
//*Skrell
-/datum/gear/xeno/skrell
+/datum/loadout_entry/xeno/skrell
// hello monara
// legacy_species_lock = SPECIES_SKRELL
-/datum/gear/xeno/skrell/accessories
+/datum/loadout_entry/xeno/skrell/accessories
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
-/datum/gear/xeno/skrell/shoes
+/datum/loadout_entry/xeno/skrell/shoes
slot = SLOT_ID_SHOES
-/datum/gear/xeno/skrell/uniform
+/datum/loadout_entry/xeno/skrell/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/xeno/skrell/suit
+/datum/loadout_entry/xeno/skrell/suit
slot = SLOT_ID_SUIT
-/datum/gear/xeno/skrell/head
+/datum/loadout_entry/xeno/skrell/head
slot = SLOT_ID_HEAD
-/datum/gear/xeno/skrell/eyes
+/datum/loadout_entry/xeno/skrell/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/xeno/skrell/back
+/datum/loadout_entry/xeno/skrell/back
slot = SLOT_ID_BACK
-/datum/gear/xeno/skrell/mask
+/datum/loadout_entry/xeno/skrell/mask
slot = SLOT_ID_MASK
-/datum/gear/xeno/skrell/gloves
+/datum/loadout_entry/xeno/skrell/gloves
slot = SLOT_ID_GLOVES
//*Unathi
-/datum/gear/xeno/unathi
+/datum/loadout_entry/xeno/unathi
legacy_species_lock = SPECIES_UNATHI
-/datum/gear/xeno/unathi/accessories
+/datum/loadout_entry/xeno/unathi/accessories
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
-/datum/gear/xeno/unathi/shoes
+/datum/loadout_entry/xeno/unathi/shoes
slot = SLOT_ID_SHOES
-/datum/gear/xeno/unathi/uniform
+/datum/loadout_entry/xeno/unathi/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/xeno/unathi/suit
+/datum/loadout_entry/xeno/unathi/suit
slot = SLOT_ID_SUIT
-/datum/gear/xeno/unathi/head
+/datum/loadout_entry/xeno/unathi/head
slot = SLOT_ID_HEAD
-/datum/gear/xeno/unathi/eyes
+/datum/loadout_entry/xeno/unathi/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/xeno/unathi/back
+/datum/loadout_entry/xeno/unathi/back
slot = SLOT_ID_BACK
-/datum/gear/xeno/unathi/mask
+/datum/loadout_entry/xeno/unathi/mask
slot = SLOT_ID_MASK
-/datum/gear/xeno/unathi/gloves
+/datum/loadout_entry/xeno/unathi/gloves
slot = SLOT_ID_GLOVES
//*Vox
-/datum/gear/xeno/vox
+/datum/loadout_entry/xeno/vox
legacy_species_lock = SPECIES_VOX
-/datum/gear/xeno/vox/accessories
+/datum/loadout_entry/xeno/vox/accessories
slot = /datum/inventory_slot_meta/abstract/attach_as_accessory
-/datum/gear/xeno/vox/shoes
+/datum/loadout_entry/xeno/vox/shoes
slot = SLOT_ID_SHOES
-/datum/gear/xeno/vox/uniform
+/datum/loadout_entry/xeno/vox/uniform
slot = SLOT_ID_UNIFORM
-/datum/gear/xeno/vox/suit
+/datum/loadout_entry/xeno/vox/suit
slot = SLOT_ID_SUIT
-/datum/gear/xeno/vox/head
+/datum/loadout_entry/xeno/vox/head
slot = SLOT_ID_HEAD
-/datum/gear/xeno/vox/eyes
+/datum/loadout_entry/xeno/vox/eyes
slot = SLOT_ID_GLASSES
-/datum/gear/xeno/vox/back
+/datum/loadout_entry/xeno/vox/back
slot = SLOT_ID_BACK
-/datum/gear/xeno/vox/mask
+/datum/loadout_entry/xeno/vox/mask
slot = SLOT_ID_MASK
-/datum/gear/xeno/vox/gloves
+/datum/loadout_entry/xeno/vox/gloves
slot = SLOT_ID_GLOVES
/******************************************************************************/
//**Actual Item Declarations
//*Tajaran
//Eyes
-/datum/gear/xeno/tajaran/eyes/veil
+/datum/loadout_entry/xeno/tajaran/eyes/veil
name = "Tajaran - Embroidered Veil"
path = /obj/item/clothing/glasses/tajblind
-/datum/gear/xeno/tajaran/eyes/veil/medical
+/datum/loadout_entry/xeno/tajaran/eyes/veil/medical
name = "Tajaran - Medical Veil"
path = /obj/item/clothing/glasses/hud/health/tajblind
allowed_roles = list("Medical Doctor", "Chief Medical Officer", "Chemist", "Paramedic", "Geneticist", "Psychiatrist", "Field Medic")
-/datum/gear/xeno/tajaran/eyes/veil/mesons
+/datum/loadout_entry/xeno/tajaran/eyes/veil/mesons
name = "Tajaran - Optical Meson Veil"
path = /obj/item/clothing/glasses/meson/prescription/tajblind
allowed_roles = list("Station Engineer", "Chief Engineer", "Atmospheric Technician", "Research Director", "Scientist", "Roboticist", "Xenobiologist", "Explorer", "Pathfinder")
-/datum/gear/xeno/tajaran/eyes/veil/material_scanners
+/datum/loadout_entry/xeno/tajaran/eyes/veil/material_scanners
name = "Tajaran - Material Scanning Veil"
path = /obj/item/clothing/glasses/material/prescription/tajblind
allowed_roles = list("Shaft Miner", "Cargo Technician", "Quartermaster")
-/datum/gear/xeno/tajaran/eyes/veil/security
+/datum/loadout_entry/xeno/tajaran/eyes/veil/security
name = "Tajaran - Security Veil Sleek"
path = /obj/item/clothing/glasses/sunglasses/sechud/tajblind
allowed_roles = list("Security Officer", "Head of Security", "Warden", "Detective")
//Suits
-/datum/gear/xeno/tajaran/suit/zk_furs
+/datum/loadout_entry/xeno/tajaran/suit/zk_furs
name = "Tajaran - Zhan-Khazan Furs"
path = /obj/item/clothing/suit/tajaran/furs
//Headwear
-/datum/gear/xeno/tajaran/head/zhan_headscarf
+/datum/loadout_entry/xeno/tajaran/head/zhan_headscarf
name = "Tajaran - Zhan Headscarf"
path = /obj/item/clothing/head/tajaranold/scarf
//Accessories
-/datum/gear/xeno/tajaran/accessories/tajara_wrap
+/datum/loadout_entry/xeno/tajaran/accessories/tajara_wrap
name = "Tajaran - Marriage wrap"
description = "A holy cloth wrap that signifies marriage amongst tajara."
path = /obj/item/clothing/accessory/tajaran_wrap
-/datum/gear/xeno/tajaran/accessories/tajara_wrap/New()
+/datum/loadout_entry/xeno/tajaran/accessories/tajara_wrap/New()
..()
var/list/tajara_wraps = list()
for(var/tajara_wrap in (typesof(/obj/item/clothing/accessory/tajaran_wrap)))
var/obj/item/clothing/accessory/tajaran_wrap/tajara_wrap_type = tajara_wrap
tajara_wraps[initial(tajara_wrap_type.name)] = tajara_wrap_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tajara_wraps, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tajara_wraps, /proc/cmp_text_asc))
//Foot wear
-/datum/gear/xeno/tajaran/shoes/workboots
+/datum/loadout_entry/xeno/tajaran/shoes/workboots
name = "Tajaran - Adhomian Work boots"
description = "A selection of work boots best fitted for Tajara."
path = /obj/item/clothing/shoes/tajara/workboots
-/datum/gear/xeno/tajaran/shoes/workboots/New()
+/datum/loadout_entry/xeno/tajaran/shoes/workboots/New()
..()
var/list/tworkboots = list()
for(var/tworkboot in (typesof(/obj/item/clothing/shoes/tajara/workboots)))
var/obj/item/clothing/shoes/tajara/workboots/tworkboot_type = tworkboot
tworkboots[initial(tworkboot_type.name)] = tworkboot_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tworkboots, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tworkboots, /proc/cmp_text_asc))
-/datum/gear/xeno/tajaran/shoes/footwraps
+/datum/loadout_entry/xeno/tajaran/shoes/footwraps
name = "Tajaran - Native foot-wear"
description = "Native foot and leg wear worn by Tajara, completely covering the legs in wraps and the feet in adhomian fabric."
path = /obj/item/clothing/shoes/tajara/footwraps
-/datum/gear/xeno/tajaran/shoes/fancy
+/datum/loadout_entry/xeno/tajaran/shoes/fancy
name = "Tajaran - Fancy adhomian shoes"
description = "A pair of fancy Tajaran shoes used for formal occasions."
path = /obj/item/clothing/shoes/tajara/fancy
-/datum/gear/xeno/tajaran/shoes/flats
+/datum/loadout_entry/xeno/tajaran/shoes/flats
name = "Tajaran - Adhomian flats selection"
description = "Dress flats, in a selection of colors. Best fitted for Tajara."
path = /obj/item/clothing/shoes/flats/tajara
-/datum/gear/xeno/tajaran/shoes/flats/New()
+/datum/loadout_entry/xeno/tajaran/shoes/flats/New()
..()
var/list/tflats = list()
for(var/tflat in (typesof(/obj/item/clothing/shoes/flats/tajara)))
var/obj/item/clothing/shoes/flats/tajara/tflat_type = tflat
tflats[initial(tflat_type.name)] = tflat_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tflats, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tflats, /proc/cmp_text_asc))
//*Promethean
-/datum/gear/xeno/promethean/uniform/cohesion_suit
+/datum/loadout_entry/xeno/promethean/uniform/cohesion_suit
name = "Promethean - Cohesion Suit - Selection"
path = /obj/item/clothing/under/cohesion
-/datum/gear/xeno/promethean/uniform/cohesion_suit/New()
+/datum/loadout_entry/xeno/promethean/uniform/cohesion_suit/New()
..()
var/list/cohesionsuits = list()
for(var/cohesionsuit in (typesof(/obj/item/clothing/under/cohesion)))
var/obj/item/clothing/under/cohesion/cohesion_type = cohesionsuit
cohesionsuits[initial(cohesion_type.name)] = cohesion_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(cohesionsuits, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(cohesionsuits, /proc/cmp_text_asc))
//*Vox
//Uniforms
-/datum/gear/xeno/vox/uniform/assistant
+/datum/loadout_entry/xeno/vox/uniform/assistant
name = "Vox - Assistant - Pressure Suit"
path = /obj/item/clothing/under/pressuresuit/voxcivassistant
-/datum/gear/xeno/vox/uniform/bartender
+/datum/loadout_entry/xeno/vox/uniform/bartender
name = "Vox - Bartender - Pressure Suit"
path = /obj/item/clothing/under/pressuresuit/voxcivbartender
allowed_roles = list("Bartender")
-/datum/gear/xeno/vox/uniform/chef
+/datum/loadout_entry/xeno/vox/uniform/chef
name = "Vox - Chef - Pressure Suit"
path = /obj/item/clothing/under/pressuresuit/voxcivchef
allowed_roles = list("Chef")
-/datum/gear/xeno/vox/uniform/chaplain
+/datum/loadout_entry/xeno/vox/uniform/chaplain
name = "Vox - Chaplain - Pressure Suit"
path = /obj/item/clothing/under/pressuresuit/voxcivchaplain
allowed_roles = list("Chaplain")
-/datum/gear/xeno/vox/uniform/librarian
+/datum/loadout_entry/xeno/vox/uniform/librarian
name = "Vox - Librarian - Pressure Suit"
path = /obj/item/clothing/under/pressuresuit/voxcivlibrarian
allowed_roles = list("Librarian")
-/datum/gear/xeno/vox/uniform/security
+/datum/loadout_entry/xeno/vox/uniform/security
name = "Vox - Security - Pressure Suit"
path = /obj/item/clothing/under/pressuresuit/voxcivsecurity
allowed_roles = list("Security Officer", "Head of Security", "Warden", "Detective")
-/datum/gear/xeno/vox/uniform/medical
+/datum/loadout_entry/xeno/vox/uniform/medical
name = "Vox - Medical - Pressure Suit"
path = /obj/item/clothing/under/pressuresuit/voxcivmedical
allowed_roles = list("Medical Doctor", "Chief Medical Officer", "Chemist", "Paramedic", "Geneticist", "Psychiatrist", "Field Medic")
-/datum/gear/xeno/vox/uniform/engineer
+/datum/loadout_entry/xeno/vox/uniform/engineer
name = "Vox - Engineering - Pressure Suit"
path = /obj/item/clothing/under/pressuresuit/voxcivengineer
allowed_roles = list("Station Engineer", "Chief Engineer", "Atmospheric Technician")
-/datum/gear/xeno/vox/uniform/engineer/ce
+/datum/loadout_entry/xeno/vox/uniform/engineer/ce
name = "Vox - Chief Engineer - Pressure Suit"
path = /obj/item/clothing/under/pressuresuit/voxcivce
allowed_roles = list("Chief Engineer")
-/datum/gear/xeno/vox/uniform/science
+/datum/loadout_entry/xeno/vox/uniform/science
name = "Vox - Scientist - Pressure Suit"
path = /obj/item/clothing/under/pressuresuit/voxcivscience
allowed_roles = list("Research Director", "Scientist", "Xenobiologist", "Roboticist", "Explorer", "Pathfinder")
-/datum/gear/xeno/vox/uniform/science/rd
+/datum/loadout_entry/xeno/vox/uniform/science/rd
name = "Vox - Research Director - Pressure Suit"
path = /obj/item/clothing/under/pressuresuit/voxcivrd
allowed_roles = list("Research Director")
-/datum/gear/xeno/vox/uniform/simon_pants
+/datum/loadout_entry/xeno/vox/uniform/simon_pants
name = "Vox - Simon Pants"
path = /obj/item/clothing/under/vox/simonpants
-/datum/gear/xeno/vox/uniform/voxcasual
+/datum/loadout_entry/xeno/vox/uniform/voxcasual
name = "Vox - Casual Wear"
path = /obj/item/clothing/under/vox/vox_casual
-/datum/gear/xeno/vox/uniform/voxrobes
+/datum/loadout_entry/xeno/vox/uniform/voxrobes
name = "Vox - Comfy Robes"
path = /obj/item/clothing/under/vox/vox_robes
//Suit
-/datum/gear/xeno/vox/suit/simon_jacket
+/datum/loadout_entry/xeno/vox/suit/simon_jacket
name = "Vox - Simon Jacket"
path = /obj/item/clothing/suit/simonjacket
//Accessories
-/datum/gear/xeno/vox/accessories/storage_vest
+/datum/loadout_entry/xeno/vox/accessories/storage_vest
name = "Vox - Storage Vest"
path = /obj/item/clothing/accessory/storage/vox
//Gloves
-/datum/gear/xeno/vox/gloves/insulated_gauntlets
+/datum/loadout_entry/xeno/vox/gloves/insulated_gauntlets
name = "Vox - Insulated Gauntlets"
path = /obj/item/clothing/gloves/vox
//Shoes
-/datum/gear/xeno/vox/shoes/magclaws
+/datum/loadout_entry/xeno/vox/shoes/magclaws
name = "Vox - Magclaws"
path = /obj/item/clothing/shoes/magboots/vox
//Mask
-/datum/gear/xeno/vox/mask
+/datum/loadout_entry/xeno/vox/mask
name = "Vox - Alien Mask"
path = /obj/item/clothing/mask/gas/swat/vox
@@ -452,11 +452,11 @@
//*Unathi
//Suits
-/datum/gear/xeno/unathi/suit/mantle
+/datum/loadout_entry/xeno/unathi/suit/mantle
name = "Unathi - Hide Mantle"
path = /obj/item/clothing/suit/unathi/mantle
-/datum/gear/xeno/unathi/suit/roughspun_robe
+/datum/loadout_entry/xeno/unathi/suit/roughspun_robe
name = "Unathi - Roughspun Robe"
path = /obj/item/clothing/suit/unathi/robe
@@ -464,599 +464,563 @@
//*Phoronoids
//Head
-/datum/gear/xeno/phoronoid/head/captain_helmet_alt
+/datum/loadout_entry/xeno/phoronoid/head/captain_helmet_alt
name = "Phoronoid - Alternate Facility Director Helmet"
path = /obj/item/clothing/head/helmet/space/plasman/sec/captain/alt
allowed_roles = list("Facility Director")
-/datum/gear/xeno/phoronoid/head/hos_helmet_alt
+/datum/loadout_entry/xeno/phoronoid/head/hos_helmet_alt
name = "Phoronoid - Alternate Head of Security Helmet I"
path = /obj/item/clothing/head/helmet/space/plasman/sec/hos/alt1
allowed_roles = list("Head of Security")
-/datum/gear/xeno/phoronoid/head/hos_helmet_alt_2
+/datum/loadout_entry/xeno/phoronoid/head/hos_helmet_alt_2
name = "Phoronoid - Alternate Head of Security Helmet II"
path = /obj/item/clothing/head/helmet/space/plasman/sec/hos/alt2
allowed_roles = list("Head of Security")
//Accessories
-/datum/gear/xeno/phoronoid/accessories/suit_accessories
+/datum/loadout_entry/xeno/phoronoid/accessories/suit_accessories
name = "Phoronoid - Containment Suit Accessory Selection"
-/datum/gear/xeno/phoronoid/accessories/suit_accessories/New()
+/datum/loadout_entry/xeno/phoronoid/accessories/suit_accessories/New()
..()
var/list/plasaccessories = list()
for(var/plasman in (typesof(/obj/item/clothing/accessory/plasman)))
var/obj/item/clothing/accessory/plasman/plasaccessory_type = plasman
plasaccessories[initial(plasaccessory_type.name)] = plasaccessory_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(plasaccessories, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(plasaccessories, /proc/cmp_text_asc))
//*Skrell
//Special Case items because Skrell are weird and I'm too lazy to go find out whether or not there's even a slot you need to specify for ear-wear.
-/datum/gear/xeno/skrell/chains
+/datum/loadout_entry/xeno/skrell/chains
name = "Skrell - Headtail Chain - Selection"
path = /obj/item/clothing/ears/skrell/chain
-/datum/gear/xeno/skrell/chains/New()
+/datum/loadout_entry/xeno/skrell/chains/New()
..()
var/list/chaintypes = list()
for(var/chain_style in typesof(/obj/item/clothing/ears/skrell/chain))
var/obj/item/clothing/ears/skrell/chain/chain = chain_style
chaintypes[initial(chain.name)] = chain
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(chaintypes, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(chaintypes, /proc/cmp_text_asc))
-/datum/gear/xeno/skrell/bands
+/datum/loadout_entry/xeno/skrell/bands
name = "Skrell - Headtail Band - Selection"
path = /obj/item/clothing/ears/skrell/band
-/datum/gear/xeno/skrell/bands/New()
+/datum/loadout_entry/xeno/skrell/bands/New()
..()
var/list/bandtypes = list()
for(var/band_style in typesof(/obj/item/clothing/ears/skrell/band))
var/obj/item/clothing/ears/skrell/band/band = band_style
bandtypes[initial(band.name)] = band
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(bandtypes, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(bandtypes, /proc/cmp_text_asc))
-/datum/gear/xeno/skrell/cloth/short
+/datum/loadout_entry/xeno/skrell/cloth/short
name = "Skrell - Short Headtail cloth - Selection"
path = /obj/item/clothing/ears/skrell/cloth_male/black
-/datum/gear/xeno/skrell/cloth/short/New()
+/datum/loadout_entry/xeno/skrell/cloth/short/New()
..()
var/list/shorttypes = list()
for(var/short_style in typesof(/obj/item/clothing/ears/skrell/cloth_male))
var/obj/item/clothing/ears/skrell/cloth_male/short = short_style
shorttypes[initial(short.name)] = short
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(shorttypes, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(shorttypes, /proc/cmp_text_asc))
-/datum/gear/xeno/skrell/cloth/long
+/datum/loadout_entry/xeno/skrell/cloth/long
name = "Skrell - Long Headtail Cloth - Selection"
path = /obj/item/clothing/ears/skrell/cloth_female/black
-/datum/gear/xeno/skrell/cloth/long/New()
+/datum/loadout_entry/xeno/skrell/cloth/long/New()
..()
var/list/longtypes = list()
for(var/long_style in typesof(/obj/item/clothing/ears/skrell/cloth_female))
var/obj/item/clothing/ears/skrell/cloth_female/long = long_style
longtypes[initial(long.name)] = long
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(longtypes, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(longtypes, /proc/cmp_text_asc))
-/datum/gear/xeno/skrell/colored/band
+/datum/loadout_entry/xeno/skrell/colored/band
name = "Skrell - Colored Bands"
path = /obj/item/clothing/ears/skrell/colored/band
-/datum/gear/xeno/skrell/colored/band/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/xeno/skrell/colored/chain
+/datum/loadout_entry/xeno/skrell/colored/chain
name = "Skrell - Colored Chain"
path = /obj/item/clothing/ears/skrell/colored/chain
-/datum/gear/xeno/skrell/colored/chain/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
//*Teshari
//Uniform
-/datum/gear/xeno/teshari/uniform/smock_selection
+/datum/loadout_entry/xeno/teshari/uniform/smock_selection
name = "Teshari - Smock Selection"
path = /obj/item/clothing/under/teshari/smock
-/datum/gear/xeno/teshari/uniform/smock_selection/New()
+/datum/loadout_entry/xeno/teshari/uniform/smock_selection/New()
..()
var/list/smocks = list()
for(var/smock in typesof(/obj/item/clothing/under/teshari/smock))
var/obj/item/clothing/under/teshari/smock/smock_type = smock
smocks[initial(smock_type.name)] = smock_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(smocks, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(smocks, /proc/cmp_text_asc))
-/datum/gear/xeno/teshari/uniform/standard_undercoat_selection
+/datum/loadout_entry/xeno/teshari/uniform/standard_undercoat_selection
name = "Teshari - Standard Undercoat Selection"
path = /obj/item/clothing/under/teshari/undercoat/standard
-/datum/gear/xeno/teshari/uniform/standard_undercoat_selection/New()
+/datum/loadout_entry/xeno/teshari/uniform/standard_undercoat_selection/New()
..()
var/list/undercoats = list()
for(var/undercoat in typesof(/obj/item/clothing/under/teshari/undercoat/standard))
var/obj/item/clothing/under/teshari/undercoat/standard/undercoat_type = undercoat
undercoats[initial(undercoat_type.name)] = undercoat_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(undercoats, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(undercoats, /proc/cmp_text_asc))
-/datum/gear/xeno/teshari/uniform/dress_smock_selection
+/datum/loadout_entry/xeno/teshari/uniform/dress_smock_selection
name = "Teshari - Department Dress Selection"
path = /obj/item/clothing/under/teshari/dresssmock
-/datum/gear/xeno/teshari/uniform/dress_smock_selection/New()
+/datum/loadout_entry/xeno/teshari/uniform/dress_smock_selection/New()
..()
var/list/dresssmocks = list()
for(var/dresssmock in typesof(/obj/item/clothing/under/teshari/dresssmock))
var/obj/item/clothing/under/teshari/dresssmock/dresssmock_type = dresssmock
dresssmocks[initial(dresssmock_type.name)] = dresssmock_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(dresssmocks, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(dresssmocks, /proc/cmp_text_asc))
-/datum/gear/xeno/teshari/uniform/role_undercoat
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat
name = "Teshari - Facility Director Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/cap
allowed_roles = list("Facility Director")
-/datum/gear/xeno/teshari/uniform/role_undercoat/hop
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/hop
name = "Teshari - Head of Personnel Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/hop
allowed_roles = list("Head of Personnel")
-/datum/gear/xeno/teshari/uniform/role_undercoat/rd
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/rd
name = "Teshari - Research Director Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/rd
allowed_roles = list("Research Director")
-/datum/gear/xeno/teshari/uniform/role_undercoat/hos
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/hos
name = "Teshari - Head of Security Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/hos
allowed_roles = list("Head of Security")
-/datum/gear/xeno/teshari/uniform/role_undercoat/ce
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/ce
name = "Teshari - Chief Engineer Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/ce
allowed_roles = list("Chief Engineer")
-/datum/gear/xeno/teshari/uniform/role_undercoat/cmo
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/cmo
name = "Teshari - Chief Medical Officer Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/cmo
allowed_roles = list("Chief Medical Officer")
-/datum/gear/xeno/teshari/uniform/role_undercoat/qm
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/qm
name = "Teshari - Quartermaster Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/qm
allowed_roles = list("Quartermaster")
-/datum/gear/xeno/teshari/uniform/role_undercoat/cargo
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/cargo
name = "Teshari - Cargo Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/cargo
allowed_roles = list("Quartermaster","Cargo Technician")
-/datum/gear/xeno/teshari/uniform/role_undercoat/mining
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/mining
name = "Teshari - Mining Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/mining
allowed_roles = list("Quartermaster","Shaft Miner")
-/datum/gear/xeno/teshari/uniform/role_undercoat/security
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/security
name = "Teshari - Security Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/sec
allowed_roles = list("Head of Security","Detective","Warden","Security Officer",)
-/datum/gear/xeno/teshari/uniform/role_undercoat/service
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/service
name = "Teshari - Service Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/service
allowed_roles = list("Head of Personnel", "Bartender", "Botanist", "Janitor", "Chef", "Librarian", "Chaplain")
-/datum/gear/xeno/teshari/uniform/role_undercoat/engineer
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/engineer
name = "Teshari - Engineering Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/engineer
allowed_roles = list("Chief Engineer", "Station Engineer")
-/datum/gear/xeno/teshari/uniform/role_undercoat/atmos
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/atmos
name = "Teshari - Atmospherics Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/atmos
allowed_roles = list("Chief Engineer","Atmospheric Technician")
-/datum/gear/xeno/teshari/uniform/role_undercoat/research
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/research
name = "Teshari - Scientist Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/sci
allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist")
-/datum/gear/xeno/teshari/uniform/role_undercoat/robo
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/robo
name = "Teshari - Roboticist Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/robo
allowed_roles = list("Research Director","Roboticist")
-/datum/gear/xeno/teshari/uniform/role_undercoat/medical
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/medical
name = "Teshari - Medical Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/medical
allowed_roles = list("Chief Medical Officer","Medical Doctor","Geneticist")
-/datum/gear/xeno/teshari/uniform/role_undercoat/chemistry
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/chemistry
name = "Teshari - Chemist Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/chemistry
allowed_roles = list("Chief Medical Officer","Chemist")
-/datum/gear/xeno/teshari/uniform/role_undercoat/virology
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/virology
name = "Teshari - Virologist Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/viro
allowed_roles = list("Chief Medical Officer","Medical Doctor")
-/datum/gear/xeno/teshari/uniform/role_undercoat/psych
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/psych
name = "Teshari - Psychiatrist Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/psych
allowed_roles = list("Chief Medical Officer","Psychiatrist")
-/datum/gear/xeno/teshari/uniform/role_undercoat/paramedic
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/paramedic
name = "Teshari - Paramedic Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/para
allowed_roles = list("Chief Medical Officer","Paramedic")
-/datum/gear/xeno/teshari/uniform/role_undercoat/iaa
+/datum/loadout_entry/xeno/teshari/uniform/role_undercoat/iaa
name = "Teshari - Internal Affairs Undercoat"
path = /obj/item/clothing/under/teshari/undercoat/jobs/iaa
allowed_roles = list("Internal Affairs Agent")
-/datum/gear/xeno/teshari/uniform/smock_colorable
+/datum/loadout_entry/xeno/teshari/uniform/smock_colorable
name = "Teshari - Smock (Colorable)"
path = /obj/item/clothing/under/teshari/smock/white
-/datum/gear/xeno/teshari/uniform/smock_colorable/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/xeno/teshari/uniform/undercoat_colorable
+/datum/loadout_entry/xeno/teshari/uniform/undercoat_colorable
name = "Teshari - Undercoat (Colorable)"
path = /obj/item/clothing/under/teshari/undercoat/standard/white_grey
-/datum/gear/xeno/teshari/uniform/undercoat_colorable/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
//Suit
-/datum/gear/xeno/teshari/suit/standard_cloak_selection
+/datum/loadout_entry/xeno/teshari/suit/standard_cloak_selection
name = "Teshari - Standard Cloak Selection"
path = /obj/item/clothing/suit/storage/teshari/cloak/standard
-/datum/gear/xeno/teshari/suit/standard_cloak_selection/New()
+/datum/loadout_entry/xeno/teshari/suit/standard_cloak_selection/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/teshari/cloak/standard))
var/obj/item/clothing/suit/storage/teshari/cloak/standard/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(cloaks, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(cloaks, /proc/cmp_text_asc))
-/datum/gear/xeno/teshari/suit/role_cloak
+/datum/loadout_entry/xeno/teshari/suit/role_cloak
name = "Teshari - Facility Director Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs
allowed_roles = list("Facility Director")
-/datum/gear/xeno/teshari/suit/role_cloak/hop
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/hop
name = "Teshari - Head of Personnel Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/hop
allowed_roles = list("Head of Personnel")
-/datum/gear/xeno/teshari/suit/role_cloak/rd
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/rd
name = "Teshari - Research Director Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/rd
allowed_roles = list("Research Director")
-/datum/gear/xeno/teshari/suit/role_cloak/hos
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/hos
name = "Teshari - Head of Security Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/hos
allowed_roles = list("Head of Security")
-/datum/gear/xeno/teshari/suit/role_cloak/ce
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/ce
name = "Teshari - Chief Engineer Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/ce
allowed_roles = list("Chief Engineer")
-/datum/gear/xeno/teshari/suit/role_cloak/cmo
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/cmo
name = "Teshari - Chief Medical Officer Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/cmo
allowed_roles = list("Chief Medical Officer")
-/datum/gear/xeno/teshari/suit/role_cloak/qm
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/qm
name = "Teshari - Quartermaster Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/qm
allowed_roles = list("Quartermaster")
-/datum/gear/xeno/teshari/suit/role_cloak/cargo
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/cargo
name = "Teshari - Cargo Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/cargo
allowed_roles = list("Quartermaster","Shaft Miner" ,"Cargo Technician")
-/datum/gear/xeno/teshari/suit/role_cloak/mining
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/mining
name = "Teshari - Mining Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/mining
allowed_roles = list("Quartermaster","Shaft Miner" ,"Cargo Technician")
-/datum/gear/xeno/teshari/suit/role_cloak/security
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/security
name = "Teshari - Security Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/sec
allowed_roles = list("Head of Security","Detective","Warden","Security Officer",)
-/datum/gear/xeno/teshari/suit/role_cloak/service
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/service
name = "Teshari - Service Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/service
allowed_roles = list("Head of Personnel","Bartender","Botanist","Janitor","Chef","Librarian","Chaplain")
-/datum/gear/xeno/teshari/suit/role_cloak/engineer
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/engineer
name = "Teshari - Engineering Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/eningeer
allowed_roles = list("Chief Engineer","Station Engineer")
-/datum/gear/xeno/teshari/suit/role_cloak/atmos
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/atmos
name = "Teshari - Atmospherics Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/atmos
allowed_roles = list("Chief Engineer","Atmospheric Technician")
-/datum/gear/xeno/teshari/suit/role_cloak/research
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/research
name = "Teshari - Scientist Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/sci
allowed_roles = list("Research Director","Scientist","Xenobiologist")
-/datum/gear/xeno/teshari/suit/role_cloak/robo
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/robo
name = "Teshari - Roboticist Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/robo
allowed_roles = list("Research Director","Roboticist")
-/datum/gear/xeno/teshari/suit/role_cloak/medical
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/medical
name = "Teshari - Medical Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/medical
allowed_roles = list("Chief Medical Officer","Medical Doctor","Geneticist")
-/datum/gear/xeno/teshari/suit/role_cloak/chemistry
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/chemistry
name = "Teshari - Chemist Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/chemistry
allowed_roles = list("Chemist")
-/datum/gear/xeno/teshari/suit/role_cloak/virology
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/virology
name = "Teshari - Virologist Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/viro
allowed_roles = list("Medical Doctor")
-/datum/gear/xeno/teshari/suit/role_cloak/psych
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/psych
name = "Teshari - Psychiatrist Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/psych
allowed_roles = list("Chief Medical Officer","Psychiatrist")
-/datum/gear/xeno/teshari/suit/role_cloak/paramedic
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/paramedic
name = "Teshari - Paramedic Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/para
allowed_roles = list("Chief Medical Officer","Paramedic")
-/datum/gear/xeno/teshari/suit/role_cloak/iaa
+/datum/loadout_entry/xeno/teshari/suit/role_cloak/iaa
name = "Teshari - Internal Affairs Cloak"
path = /obj/item/clothing/suit/storage/teshari/cloak/jobs/iaa
allowed_roles = list("Internal Affairs Agent")
-/datum/gear/xeno/teshari/suit/hooded_cloak_selection
+/datum/loadout_entry/xeno/teshari/suit/hooded_cloak_selection
name = "Teshari - Hooded Cloak Selection"
path = /obj/item/clothing/suit/storage/teshari/cloak/standard
-/datum/gear/xeno/teshari/suit/hooded_cloak_selection/New()
+/datum/loadout_entry/xeno/teshari/suit/hooded_cloak_selection/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/hooded/teshari/standard))
var/obj/item/clothing/suit/storage/teshari/cloak/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(cloaks, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(cloaks, /proc/cmp_text_asc))
-/datum/gear/xeno/teshari/suit/cloak_colorable
+/datum/loadout_entry/xeno/teshari/suit/cloak_colorable
name = "Teshari - Cloak (Colorable)"
path = /obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey
-/datum/gear/xeno/teshari/suit/cloak_colorable/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/xeno/teshari/suit/labcoat_colorable
+/datum/loadout_entry/xeno/teshari/suit/labcoat_colorable
name = "Teshari - Labcoat (Colorable)"
path = /obj/item/clothing/suit/storage/toggle/labcoat/teshari
-/datum/gear/xeno/teshari/suit/labcoat_colorable/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/xeno/teshari/suit/smallcoat
+/datum/loadout_entry/xeno/teshari/suit/smallcoat
name = "Teshari - Smallcoat (Colorable)"
path = /obj/item/clothing/suit/storage/toggle/tesharicoat
-/datum/gear/xeno/teshari/suit/smallcoat/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
-/datum/gear/xeno/teshari/suit/smallcoat_alt
+/datum/loadout_entry/xeno/teshari/suit/smallcoat_alt
name = "Teshari - Smallcoat Alt (Colorable)"
path = /obj/item/clothing/suit/storage/toggle/tesharicoatwhite
-/datum/gear/xeno/teshari/suit/smallcoat_alt/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
//Eyes
-/datum/gear/xeno/teshari/eyes/aerogelgoggles
+/datum/loadout_entry/xeno/teshari/eyes/aerogelgoggles
name = "Teshari - Orange Goggles"
path = /obj/item/clothing/glasses/aerogelgoggles
//Accessory
-/datum/gear/xeno/teshari/accessories/neckscarf_colorable
+/datum/loadout_entry/xeno/teshari/accessories/neckscarf_colorable
name = "Teshari - Neckscarf (Colorable)"
path = /obj/item/clothing/accessory/scarf/teshari/neckscarf
-/datum/gear/xeno/teshari/accessories/neckscarf_colorable/New()
- ..()
- gear_tweaks += gear_tweak_free_color_choice
-
//*Moth
// Will be restricted in the future, when moths have a separate species. For now, rely on the sprites looking goofy as fuck on anything other than moths to keep people away. - WrongEnd
-/datum/gear/xeno/uniform/puffy_pants
+/datum/loadout_entry/xeno/uniform/puffy_pants
name = "Moth - Puffy Pants Selection"
description = "Selection of Puffy Moth Pants."
-/datum/gear/xeno/uniform/puffy_pants/New()
+/datum/loadout_entry/xeno/uniform/puffy_pants/New()
..()
var/list/puffy_pants = list()
for(var/puffy_pant in typesof(/obj/item/clothing/under/moth/puffy_pants))
var/obj/item/clothing/under/moth/puffy_pants/puffy_pant_type = puffy_pant
puffy_pants[initial(puffy_pant_type.name)] = puffy_pant_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(puffy_pants, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(puffy_pants, /proc/cmp_text_asc))
-/datum/gear/xeno/uniform/tight_pants
+/datum/loadout_entry/xeno/uniform/tight_pants
name = "Moth - Pants Selection"
description = "Selection of Moth Pants."
-/datum/gear/xeno/uniform/tight_pants/New()
+/datum/loadout_entry/xeno/uniform/tight_pants/New()
..()
var/list/tight_pants = list()
for(var/tight_pant in typesof(/obj/item/clothing/under/moth/tight_pants))
var/obj/item/clothing/under/moth/tight_pants/tight_pant_type = tight_pant
tight_pants[initial(tight_pant_type.name)] = tight_pant_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tight_pants, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tight_pants, /proc/cmp_text_asc))
-/datum/gear/xeno/uniform/moth_skirt
+/datum/loadout_entry/xeno/uniform/moth_skirt
name = "Moth - Skirt Selection"
description = "Selection of Moth Skirts."
-/datum/gear/xeno/uniform/moth_skirt/New()
+/datum/loadout_entry/xeno/uniform/moth_skirt/New()
..()
var/list/moth_skirt = list()
for(var/moth_skirts in typesof(/obj/item/clothing/under/moth/moth_skirt))
var/obj/item/clothing/under/moth/moth_skirt/moth_skirts_type = moth_skirts
moth_skirt[initial(moth_skirts_type.name)] = moth_skirts_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(moth_skirt, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(moth_skirt, /proc/cmp_text_asc))
-/datum/gear/xeno/accessories/abdomen_guard
+/datum/loadout_entry/xeno/accessories/abdomen_guard
name = "Moth - Abdomen Guards Selection"
description = "Selection of Abdomen Guards."
-/datum/gear/xeno/accessories/abdomen_guard/New()
+/datum/loadout_entry/xeno/accessories/abdomen_guard/New()
..()
var/list/abdomen_guard = list()
for(var/abdomen_guards in typesof(/obj/item/clothing/accessory/vest/moth/abdomen_guard))
var/obj/item/clothing/accessory/vest/moth/abdomen_guard/abdomen_guards_type = abdomen_guards
abdomen_guard[initial(abdomen_guards_type.name)] = abdomen_guards_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(abdomen_guard, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(abdomen_guard, /proc/cmp_text_asc))
-/datum/gear/xeno/accessories/tunic_top
+/datum/loadout_entry/xeno/accessories/tunic_top
name = "Moth - Tunic Tops Selection"
description = "Selection of Moth Tunic Tops."
-/datum/gear/xeno/accessories/tunic_top/New()
+/datum/loadout_entry/xeno/accessories/tunic_top/New()
..()
var/list/tunic_top = list()
for(var/tunic_tops in typesof(/obj/item/clothing/accessory/vest/moth/tunic_top))
var/obj/item/clothing/accessory/vest/moth/tunic_top/tunic_tops_type = tunic_tops
tunic_top[initial(tunic_tops_type.name)] = tunic_tops_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(tunic_top, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(tunic_top, /proc/cmp_text_asc))
-/datum/gear/xeno/accessories/cloth_strap_top
+/datum/loadout_entry/xeno/accessories/cloth_strap_top
name = "Moth - Cloth Strap Tops Selection"
description = "Selection of Moth Cloth Strap Tops."
-/datum/gear/xeno/accessories/cloth_strap_top/New()
+/datum/loadout_entry/xeno/accessories/cloth_strap_top/New()
..()
var/list/cloth_strap_top = list()
for(var/cloth_strap_tops in typesof(/obj/item/clothing/accessory/vest/moth/cloth_strap_top))
var/obj/item/clothing/accessory/vest/moth/cloth_strap_top/cloth_strap_tops_type = cloth_strap_tops
cloth_strap_top[initial(cloth_strap_tops_type.name)] = cloth_strap_tops_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(cloth_strap_top, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(cloth_strap_top, /proc/cmp_text_asc))
-/datum/gear/xeno/accessories/shoulder_pad_right
+/datum/loadout_entry/xeno/accessories/shoulder_pad_right
name = "Moth - Right Shoulder Pads Selection"
description = "Selection of Moth Right Shoulder Pads."
-/datum/gear/xeno/accessories/shoulder_pad_right/New()
+/datum/loadout_entry/xeno/accessories/shoulder_pad_right/New()
..()
var/list/shoulder_pad_right = list()
for(var/shoulder_pad_rights in typesof(/obj/item/clothing/accessory/vest/moth/shoulder_pad_right))
var/obj/item/clothing/accessory/vest/moth/shoulder_pad_right/shoulder_pad_rights_type = shoulder_pad_rights
shoulder_pad_right[initial(shoulder_pad_rights_type.name)] = shoulder_pad_rights_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(shoulder_pad_right, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(shoulder_pad_right, /proc/cmp_text_asc))
-/datum/gear/xeno/accessories/shoulder_pad_left
+/datum/loadout_entry/xeno/accessories/shoulder_pad_left
name = "Moth - Left Shoulder Pads Selection"
description = "Selection of Moth Left Shoulder Pads."
-/datum/gear/xeno/accessories/shoulder_pad_left/New()
+/datum/loadout_entry/xeno/accessories/shoulder_pad_left/New()
..()
var/list/shoulder_pad_left = list()
for(var/shoulder_pad_lefts in typesof(/obj/item/clothing/accessory/vest/moth/shoulder_pad_left))
var/obj/item/clothing/accessory/vest/moth/shoulder_pad_left/shoulder_pad_lefts_type = shoulder_pad_lefts
shoulder_pad_left[initial(shoulder_pad_lefts_type.name)] = shoulder_pad_lefts_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(shoulder_pad_left, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(shoulder_pad_left, /proc/cmp_text_asc))
-/datum/gear/xeno/accessories/front_tunic
+/datum/loadout_entry/xeno/accessories/front_tunic
name = "Moth - Front Tunics Selection"
description = "Selection of Moth Front Tunics."
-/datum/gear/xeno/accessories/front_tunic/New()
+/datum/loadout_entry/xeno/accessories/front_tunic/New()
..()
var/list/front_tunic = list()
for(var/front_tunics in typesof(/obj/item/clothing/accessory/vest/moth/front_tunic))
var/obj/item/clothing/accessory/vest/moth/front_tunic/front_tunics_type = front_tunics
front_tunic[initial(front_tunics_type.name)] = front_tunics_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(front_tunic, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(front_tunic, /proc/cmp_text_asc))
-/datum/gear/xeno/accessories/gaiter
+/datum/loadout_entry/xeno/accessories/gaiter
name = "Moth - Gaiters Selection"
description = "Selection of Moth Gaiters."
-/datum/gear/xeno/accessories/gaiter/New()
+/datum/loadout_entry/xeno/accessories/gaiter/New()
..()
var/list/gaiter = list()
for(var/gaiters in typesof(/obj/item/clothing/accessory/vest/moth/gaiter))
var/obj/item/clothing/accessory/vest/moth/gaiter/gaiters_type = gaiters
gaiter[initial(gaiters_type.name)] = gaiters_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(gaiter, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(gaiter, /proc/cmp_text_asc))
-/datum/gear/xeno/shoes/legwrap
+/datum/loadout_entry/xeno/shoes/legwrap
name = "Moth - Legwraps Selection"
description = "Selection of Moth Legwraps."
-/datum/gear/xeno/shoes/legwrap/New()
+/datum/loadout_entry/xeno/shoes/legwrap/New()
..()
var/list/legwrap = list()
for(var/legwraps in typesof(/obj/item/clothing/shoes/moth/legwrap))
var/obj/item/clothing/shoes/moth/legwrap/legwraps_type = legwraps
legwrap[initial(legwraps_type.name)] = legwraps_type
- gear_tweaks += new/datum/gear_tweak/path(tim_sort(legwrap, /proc/cmp_text_asc))
+ tweaks += new/datum/loadout_tweak/path(tim_sort(legwrap, /proc/cmp_text_asc))
-/datum/gear/xeno/shoes/moth/jackboots
+/datum/loadout_entry/xeno/shoes/moth/jackboots
name = "Moth - Jackboots"
path = /obj/item/clothing/shoes/boots/jackboots/moth
allowed_roles = list("Security Officer", "Head of Security", "Warden", "Detective")
-/datum/gear/xeno/shoes/moth/workboots
+/datum/loadout_entry/xeno/shoes/moth/workboots
name = "Moth - Workboots"
path = /obj/item/clothing/shoes/boots/moth
allowed_roles = list("Station Engineer", "Chief Engineer", "Atmospheric Technician", "Research Director", "Scientist", "Roboticist", "Xenobiologist", "Explorer", "Pathfinder")
@@ -1065,24 +1029,24 @@
//*Non-Restricted Items (THIS SHOULD BE KEPT MINIMAL. IF IT HAS A SPECIFIC SPECIES, PLACE IT THERE.)
//These need a taur maintainer before they're readded. None of them work as intended.
-/*/datum/gear/xeno/back/saddlebag
+/*/datum/loadout_entry/xeno/back/saddlebag
name = "Generic - Saddle Bag, Horse"
path = /obj/item/storage/backpack/saddlebag
cost = 2
-/datum/gear/xeno/back/saddlebag/common
+/datum/loadout_entry/xeno/back/saddlebag/common
name = "Generic - Saddle Bag, Common"
path = /obj/item/storage/backpack/saddlebag_common
-/datum/gear/xeno/back/saddlebag/robust
+/datum/loadout_entry/xeno/back/saddlebag/robust
name = "Generic - Saddle Bag, Robust"
path = /obj/item/storage/backpack/saddlebag_common/robust
-/datum/gear/xeno/back/taur_vest
+/datum/loadout_entry/xeno/back/taur_vest
name = "Generic - Taur Duty Vest, Backpack"
path = /obj/item/storage/backpack/saddlebag_common/vest
*/
-/datum/gear/xeno/uniform
+/datum/loadout_entry/xeno/uniform
name = "Generic - Gear Harness"
path = /obj/item/clothing/under/harness
diff --git a/code/modules/mob/inventory/mobs.dm b/code/modules/mob/inventory/mobs.dm
index 17ed1b0213c..13a1111be74 100644
--- a/code/modules/mob/inventory/mobs.dm
+++ b/code/modules/mob/inventory/mobs.dm
@@ -87,7 +87,7 @@
* @return TRUE/FALSE
*/
/mob/proc/force_equip_to_slot(obj/item/I, slot, flags, mob/user)
- return _equip_item(I, flags | INV_OP_FATAL, slot, user)
+ return _equip_item(I, flags | INV_OP_FORCE, slot, user)
/**
* forcefully equips an item to a slot
diff --git a/code/modules/modular_computers/computers/modular_computer/hardware.dm b/code/modules/modular_computers/computers/modular_computer/hardware.dm
index 5cd1dbd29ca..32fcedaf71e 100644
--- a/code/modules/modular_computers/computers/modular_computer/hardware.dm
+++ b/code/modules/modular_computers/computers/modular_computer/hardware.dm
@@ -87,7 +87,13 @@
if(found)
if(user)
to_chat(user, "You remove \the [H] from \the [src].")
- H.forceMove(get_turf(src))
+ //! Legacy code start
+ var/turf/T = get_turf(src)
+ if(T)
+ H.forceMove(T)
+ else
+ H.moveToNullspace()
+ //! End
H.holder2 = null
update_verbs()
if(critical && enabled)
diff --git a/code/modules/preferences/_preferences.dm b/code/modules/preferences/_preferences.dm
index 2808aafd075..d0255ead526 100644
--- a/code/modules/preferences/_preferences.dm
+++ b/code/modules/preferences/_preferences.dm
@@ -120,12 +120,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/g_eyes = 0
/// Eye color.
var/b_eyes = 0
- /// Left in for Legacy reasons, will no longer save.
- var/list/gear
- /// Custom/fluff item loadouts.
- var/list/gear_list = list()
- /// The current gear save slot.
- var/gear_slot = 1
/// Traits which modifier characters for better or worse (mostly worse).
var/list/traits
/// Lets normally uncolorable synth parts be colorable.
@@ -246,10 +240,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
real_name = random_name(identifying_gender, real_species_name())
b_type = RANDOM_BLOOD_TYPE
- gear = list()
- gear_list = list()
- gear_slot = 1
-
if(client)
if(!IsGuestKey(client.key))
if(load_path(client.ckey))
@@ -328,45 +318,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(24 to 1000)
return "God"
-/datum/preferences/proc/update_character_previews(mutable_appearance/MA)
- if(!client)
- return
-
- var/atom/movable/screen/setup_preview/bg/BG= LAZYACCESS(char_render_holders, "BG")
- if(!BG)
- BG = new
- BG.plane = TURF_PLANE
- BG.icon = 'icons/effects/setup_backgrounds_vr.dmi'
- BG.pref = src
- LAZYSET(char_render_holders, "BG", BG)
- client.screen |= BG
- BG.icon_state = bgstate
- BG.screen_loc = preview_screen_locs["BG"]
-
- for(var/D in GLOB.cardinal)
- var/atom/movable/screen/setup_preview/O = LAZYACCESS(char_render_holders, "[D]")
- if(!O)
- O = new
- O.pref = src
- LAZYSET(char_render_holders, "[D]", O)
- client.screen |= O
- O.appearance = MA
- O.dir = D
- O.screen_loc = preview_screen_locs["[D]"]
-
-/datum/preferences/proc/show_character_previews()
- if(!client || !char_render_holders)
- return
- for(var/render_holder in char_render_holders)
- client.screen |= char_render_holders[render_holder]
-
-/datum/preferences/proc/clear_character_previews()
- for(var/index in char_render_holders)
- var/atom/movable/screen/S = char_render_holders[index]
- client?.screen -= S
- qdel(S)
- char_render_holders = null
-
/datum/preferences/proc/process_link(mob/user, list/href_list)
if(!user) return
@@ -417,7 +368,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
close_load_dialog(usr)
else if(href_list["close"])
// User closed preferences window, cleanup anything we need to.
- clear_character_previews()
+ clear_character_renders()
return 1
else
return 0
diff --git a/code/modules/preferences/apply.dm b/code/modules/preferences/apply.dm
index dfd2fd3e543..cf1197513e8 100644
--- a/code/modules/preferences/apply.dm
+++ b/code/modules/preferences/apply.dm
@@ -68,62 +68,95 @@
unset_busy_human_dummy("prefs/render_to_appearance")
/**
- * equips loadout - let SSjobs/SSticker handle this, this is for special cases.
+ * equips loadout
*
* @params
* * character - the mob
* * flags - PREF_COPY_TO_ flags like in [copy_to]
+ * * role - (optional) the /datum/role being used.
+ * * allow_storage_spawn - spawn extra items in storage instead of stuffing into reject.
+ * * reject - list to stuff rejected items into. if null, they're deleted.
*/
-/datum/preferences/proc/equip_loadout(mob/character, flags)
-
- // todo: copypaste, refactor
+/datum/preferences/proc/equip_loadout(mob/character, flags, datum/role/role, allow_storage_spawn, list/reject)
+ //! todo: copypaste, refactor
var/mob/living/carbon/human/H = character
if(!istype(H))
return
+ //! end
- //Equip custom gear loadout.
- var/list/custom_equip_slots = list()
- var/list/custom_equip_leftovers = list()
- if(gear && gear.len)
- for(var/thing in gear)
- var/datum/gear/G = gear_datums[thing]
- if(!G) //Not a real gear datum (maybe removed, as this is loaded from their savefile)
+ // check allow storage spawns
+ if(isnull(allow_storage_spawn))
+ // by default, we only spawn stuff in backpack if they're actually spawning in.
+ allow_storage_spawn = PREF_COPYING_TO_CHECK_IS_SPAWNING(flags)
+
+ // generate gear datum + data list
+ var/list/loadout = generate_loadout_entry_list(flags, role)
+ // overflow list of items associated to slot IDs
+ var/list/obj/item/overflow = list()
+
+ // first pass
+ for(var/datum/loadout_entry/entry as anything in loadout)
+ var/list/data = loadout[entry]
+ var/obj/item/instanced = entry.instantiate(entry_data = data)
+ var/use_slot = entry.slot
+ var/succeeded = FALSE
+ switch(use_slot)
+ if("implant")
+ var/obj/item/implant/implant = instanced
+ INVOKE_ASYNC(implant, TYPE_PROC_REF(/obj/item/implant, implant_loadout), character)
+ succeeded = TRUE
+ if(null)
+ succeeded = FALSE
+ else
+ succeeded = H.equip_to_slot_if_possible(instanced, use_slot, INV_OP_SILENT | INV_OP_FLUFFLESS)
+ if(!succeeded)
+ overflow[instanced] = use_slot
+ else
+ if(!(flags & PREF_COPY_TO_SILENT))
+ to_chat(character, SPAN_NOTICE("Equipping you with \the [instanced]"))
+
+ // second pass
+ for(var/obj/item/instance as anything in overflow)
+ var/slot = overflow[instance]
+ if(isnull(slot))
+ continue
+ if(character.equip_to_slot_if_possible(instance, slot, INV_OP_SILENT | INV_OP_FLUFFLESS))
+ overflow -= instance
+ if(!(flags & PREF_COPY_TO_SILENT))
+ to_chat(character, SPAN_NOTICE("Equipping you with \the [instance]"))
+ continue
+
+ // storage?
+ if(allow_storage_spawn)
+ for(var/obj/item/instance as anything in overflow)
+ if(character.force_equip_to_slot(instance, /datum/inventory_slot_meta/abstract/put_in_backpack))
+ overflow -= instance
+ if(!(flags & PREF_COPY_TO_SILENT))
+ to_chat(character, SPAN_NOTICE("Putting \the [instance] into your backpack."))
continue
- var/permitted = TRUE
+ // failed, reject or delete
+ for(var/obj/item/instance as anything in overflow)
+ if(!isnull(reject))
+ reject += instance
+ else
+ qdel(instance)
- // If they aren't, tell them
- if(!permitted)
- to_chat(H, SPAN_WARNING("Your current species, job or whitelist status does not permit you to spawn with [G.display_name]!"))
+/datum/preferences/proc/overflow_loadout(mob/character, flags, list/obj/item/instances, allow_storage_spawn)
+ // check allow storage spawns
+ if(isnull(allow_storage_spawn))
+ // by default, we only spawn stuff in backpack if they're actually spawning in.
+ allow_storage_spawn = PREF_COPYING_TO_CHECK_IS_SPAWNING(flags)
+
+ // storage?
+ if(allow_storage_spawn)
+ for(var/obj/item/instance as anything in instances)
+ if(character.force_equip_to_slot(instance, /datum/inventory_slot_meta/abstract/put_in_backpack, INV_OP_SILENT))
+ instances -= instance
+ if(!(flags & PREF_COPY_TO_SILENT))
+ to_chat(character, SPAN_NOTICE("Putting \the [instance] into your backpack."))
continue
- // Implants get special treatment
- if(G.slot == "implant")
- var/obj/item/implant/I = G.spawn_item(H, gear[G.display_name])
- I.invisibility = 100
- I.implant_loadout(H)
- continue
-
- // Try desperately (and sorta poorly) to equip the item. Now with increased desperation!
- // why are we stuffing metadata in assoclists?
- // because client might not be valid later down, so
- // we're gonna just grab it once and call it a day
- // sigh.
- var/metadata = gear[G.name]
- if(G.slot && !(G.slot in custom_equip_slots))
- if(G.slot == SLOT_ID_MASK || G.slot == SLOT_ID_SUIT || G.slot == SLOT_ID_HEAD)
- custom_equip_leftovers[thing] = metadata
- else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot))
- to_chat(H, SPAN_NOTICE("Equipping you with \the [G.display_name]!"))
- if(G.slot != /datum/inventory_slot_meta/abstract/attach_as_accessory)
- custom_equip_slots.Add(G.slot)
- else
- custom_equip_leftovers[thing] = metadata
-
- // If some custom items could not be equipped before, try again now.
- for(var/thing in custom_equip_leftovers)
- var/datum/gear/G = gear_datums[thing]
- if(!(G.slot in custom_equip_slots))
- if(H.equip_to_slot_or_del(G.spawn_item(H, custom_equip_leftovers[thing]), G.slot))
- to_chat(H, "Equipping you with \the [G.display_name]!")
- custom_equip_slots.Add(G.slot)
+ // failed, reject or delete
+ for(var/obj/item/instance as anything in instances)
+ qdel(instance)
diff --git a/code/modules/preferences/data.dm b/code/modules/preferences/data.dm
index e8222a277bd..2d09be04bc5 100644
--- a/code/modules/preferences/data.dm
+++ b/code/modules/preferences/data.dm
@@ -1,11 +1,17 @@
/**
* sets a character data key to a value
+ *
+ * warning: lists are actually a shared reference, this is a known issue
+ * todo: on character setup refactor, redo this behavior if possible
*/
/datum/preferences/proc/set_character_data(key, value)
character[key] = value
/**
* reads a character data key
+ *
+ * warning: lists are actually a shared reference, this is a known issue
+ * todo: on character setup refactor, redo this behavior if possible
*/
/datum/preferences/proc/get_character_data(key)
return character[key]
diff --git a/code/modules/preferences/migration.dm b/code/modules/preferences/migration.dm
index dd2476f315c..a1220b03b74 100644
--- a/code/modules/preferences/migration.dm
+++ b/code/modules/preferences/migration.dm
@@ -224,8 +224,57 @@
character[CHARACTER_DATA_CHAR_SPECIES] = RS.uid
else
errors?.Add(SPAN_DANGER("Species migration failed - no species datum. Report this to a coder."))
-
-
+ if(current_version < 5)
+ var/gear_slot
+ READ_FILE(S["gear_slot"], gear_slot)
+ if(isnum(gear_slot))
+ character[CHARACTER_DATA_LOADOUT_SLOT] = sanitize_integer(gear_slot, 1, LOADOUT_MAX_SLOTS, 1)
+ var/list/gear_data
+ READ_FILE(S["gear_list"], gear_data)
+ var/list/translated_slots = LAZYGETLIST(character[CHARACTER_DATA_LOADOUT])
+ if(islist(gear_data))
+ for(var/i in 1 to LOADOUT_MAX_SLOTS)
+ var/list/data = gear_data["[i]"]
+ if(!islist(data))
+ continue
+ var/list/translated_slot = LAZYGETLIST(translated_slots["[i]"])
+ var/list/translated_entries = LAZYGETLIST(translated_slot[LOADOUT_SLOTDATA_ENTRIES])
+ for(var/name in data)
+ var/list/assembled = list()
+ var/datum/loadout_entry/entry = global.gear_datums[name]
+ if(isnull(entry))
+ errors?.Add("unable to translate loadout slot-entry [i]-[name]: name not found.")
+ continue
+ var/list/old_tweaks = data[name]
+ for(var/old_tweak in old_tweaks)
+ if(!old_tweaks[old_tweak])
+ continue
+ switch(old_tweak)
+ if("/datum/gear_tweak/custom_name")
+ assembled[LOADOUT_ENTRYDATA_RENAME] = old_tweaks[old_tweak]
+ if("/datum/gear_tweak/custom_desc")
+ assembled[LOADOUT_ENTRYDATA_REDESC] = old_tweaks[old_tweak]
+ if("/datum/gear_tweak/color", "/datum/gear_tweak/matrix_recolor")
+ assembled[LOADOUT_ENTRYDATA_RECOLOR] = old_tweaks[old_tweak]
+ else
+ var/replaced = old_tweak
+ if(findtext(replaced, "gear_tweak"))
+ replaced = replacetext(replaced, "gear_tweak", "loadout_tweak")
+ LAZYSET(assembled[LOADOUT_ENTRYDATA_TWEAKS], replaced, old_tweaks[old_tweak])
+ translated_entries[entry.legacy_get_id()] = assembled
+ var/all_underwear_metadata
+ READ_FILE(S["all_underwear_metadata"], all_underwear_metadata)
+ for(var/category in all_underwear_metadata)
+ var/list/catlist = all_underwear_metadata[category]
+ if(!islist(catlist))
+ continue
+ for(var/key in catlist)
+ if(key != "/datum/gear_tweak/color")
+ continue
+ var/val = catlist[key]
+ catlist -= key
+ catlist["/datum/loadout_tweak/color"] = val
+ WRITE_FILE(S["all_underwear_metadata"], all_underwear_metadata)
/**
* clientless migration of savefiles
diff --git a/code/modules/preferences/preference_setup/general/04_equipment.dm b/code/modules/preferences/preference_setup/general/04_equipment.dm
index 7faa1f15966..ab57ec111d8 100644
--- a/code/modules/preferences/preference_setup/general/04_equipment.dm
+++ b/code/modules/preferences/preference_setup/general/04_equipment.dm
@@ -52,7 +52,6 @@
return TRUE
/datum/category_item/player_setup_item/general/equipment/sanitize_character()
- if(!islist(pref.gear)) pref.gear = list()
if(!istype(pref.all_underwear))
pref.all_underwear = list()
@@ -90,7 +89,7 @@
. += "[UWC.name]: [item_name]"
var/datum/category_item/underwear/UWI = UWC.items_by_name[item_name]
if(UWI)
- for(var/datum/gear_tweak/gt in UWI.tweaks)
+ for(var/datum/loadout_tweak/gt in UWI.tweaks)
. += " [gt.get_contents(get_metadata(UWC.name, gt))]"
. += "
"
@@ -101,7 +100,7 @@
return jointext(.,null)
-/datum/category_item/player_setup_item/general/equipment/proc/get_metadata(var/underwear_category, var/datum/gear_tweak/gt)
+/datum/category_item/player_setup_item/general/equipment/proc/get_metadata(var/underwear_category, var/datum/loadout_tweak/gt)
var/metadata = pref.all_underwear_metadata[underwear_category]
if(!metadata)
metadata = list()
@@ -113,7 +112,7 @@
metadata["[gt]"] = tweak_data
return tweak_data
-/datum/category_item/player_setup_item/general/equipment/proc/set_metadata(var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata)
+/datum/category_item/player_setup_item/general/equipment/proc/set_metadata(var/underwear_category, var/datum/loadout_tweak/gt, var/new_metadata)
var/list/metadata = pref.all_underwear_metadata[underwear_category]
metadata["[gt]"] = new_metadata
@@ -144,7 +143,7 @@
var/underwear = href_list["underwear"]
if(!(underwear in pref.all_underwear))
return PREFERENCES_NOACTION
- var/datum/gear_tweak/gt = locate(href_list["tweak"])
+ var/datum/loadout_tweak/gt = locate(href_list["tweak"])
if(!gt)
return PREFERENCES_NOACTION
var/new_metadata = gt.get_metadata(usr, get_metadata(underwear, gt))
diff --git a/code/modules/preferences/preference_setup/loadout/loadout.dm b/code/modules/preferences/preference_setup/loadout/loadout.dm
index 85674c26287..3af7b92af1d 100644
--- a/code/modules/preferences/preference_setup/loadout/loadout.dm
+++ b/code/modules/preferences/preference_setup/loadout/loadout.dm
@@ -1,318 +1,463 @@
-var/list/loadout_categories = list()
-var/list/gear_datums = list()
+/datum/category_group/player_setup_category/loadout_preferences
+ name = "Loadout"
+ sort_order = 5
+ category_item_type = /datum/category_item/player_setup_item/loadout
-/datum/loadout_category
- var/category = ""
- var/list/gear = list()
-
-/datum/gear
- /// name used for save/load don't change this or everyone loses it
- var/name
- /// what we display our name as. feel free to change this. defaults to name.
- var/display_name
- /// Description of this gear. If left blank will default to the description of the pathed item.
- var/description
- /// Path to item.
- var/path
- /// Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points.
- var/cost = 1
- /// Slot to equip to.
- var/slot
- /// Roles that can spawn with this item.
- var/list/allowed_roles
- // todo: remove in favor of uid locks and or just a better system.
- // Term to check the whitelist for.
- var/legacy_species_lock
- var/sort_category = LOADOUT_CATEGORY_GENERAL
- /// List of datums which will alter the item after it has been spawned.
- var/list/gear_tweaks = list()
- /// Does it go on the exploitable information list?
- var/exploitable = 0
- var/static/datum/gear_tweak/color/gear_tweak_free_color_choice = new
- var/list/ckeywhitelist
- var/list/character_name
- /// Seasonal whitelist - only create if holiday is active. NOTE: This IGNORES ALLOW_HOLIDAYS config! This is because character setup isn't subsystem-init-synced so we must init all of this dumb shit before config loads.
- var/list/holiday_whitelist
-
-/datum/gear/New()
- if(!description)
- var/obj/O = path
- description = initial(O.desc)
- gear_tweaks = list(gear_tweak_free_name, gear_tweak_free_desc, GLOB.gear_tweak_free_matrix_recolor)
- if(isnull(display_name))
- display_name = name
-
-/datum/gear_data
- var/path
- var/location
-
-/datum/gear_data/New(var/path, var/location)
- src.path = path
- src.location = location
-
-/datum/gear/proc/spawn_item(var/location, var/metadata)
- var/datum/gear_data/gd = new(path, location)
- if(metadata)
- for(var/datum/gear_tweak/gt in gear_tweaks)
- gt.tweak_gear_data(metadata["[gt]"], gd)
- var/item = new gd.path(gd.location)
- if(metadata)
- for(var/datum/gear_tweak/gt in gear_tweaks)
- gt.tweak_item(item, metadata["[gt]"])
- var/mob/M = location
- if(istype(M) && exploitable) // Update exploitable info records for the mob without creating a duplicate object at their feet.
- M.amend_exploitable(item)
- return item
-
-/datum/loadout_category/New(var/cat)
- category = cat
- ..()
-
-/hook/startup/proc/populate_gear_list()
-
- // Create a list of gear datums to sort
- for(var/geartype in typesof(/datum/gear)-/datum/gear)
- var/datum/gear/G = geartype
- if(initial(G.abstract_type) == geartype)
- continue
- G = new geartype
-
- if(!G.name)
- stack_trace("Missing name on [G.type].")
- continue
- if(!isnum(G.cost))
- stack_trace("Missing cost on [G.type]")
- continue
- if(!G.path)
- stack_trace("Missing path on [G.type].")
- continue
- if(!G.sort_category)
- stack_trace("Missing sort category on [G.type].")
- continue
- if(length(G.holiday_whitelist))
- var/found = FALSE
- for(var/name in G.holiday_whitelist)
- if(name in SSevents.holidays)
- found = TRUE
- break
- if(!found)
- continue
- if(!loadout_categories[G.sort_category])
- loadout_categories[G.sort_category] = new /datum/loadout_category(G.sort_category)
- var/datum/loadout_category/LC = loadout_categories[G.sort_category]
- gear_datums[G.name] = G
- LC.gear[G.name] = gear_datums[G.name]
-
- loadout_categories = tim_sort(loadout_categories, /proc/cmp_text_asc)
- for(var/loadout_category in loadout_categories)
- var/datum/loadout_category/LC = loadout_categories[loadout_category]
- LC.gear = tim_sort(LC.gear, /proc/cmp_text_asc) // DO NOT ADD A ", TRUE" TO THE END OF THIS FUCKING LINE IT'S WHAT WAS CAUSING ALPHABETIZATION TO BREAK
- return 1
+/datum/category_group/player_setup_category/loadout_preferences/override_tab_to(mob/user)
+ var/datum/category_item/player_setup_item/loadout/gear/entry = locate() in items
+ entry.ui_interact(user)
+ return TRUE
/datum/category_item/player_setup_item/loadout
+ abstract_type = /datum/category_item/player_setup_item/loadout
+
+/datum/category_item/player_setup_item/loadout/slot
+ name = "Loadout Slot"
+ save_key = CHARACTER_DATA_LOADOUT_SLOT
+
+/datum/category_item/player_setup_item/loadout/slot/default_value(randomizing)
+ return 1
+
+/datum/category_item/player_setup_item/loadout/slot/filter_data(datum/preferences/prefs, data, list/errors)
+ return sanitize_integer(data, 1, LOADOUT_MAX_SLOTS, 1)
+
+/datum/category_item/player_setup_item/loadout/gear
name = "Loadout"
- sort_order = 1
- var/current_tab = "General"
+ save_key = CHARACTER_DATA_LOADOUT
-/datum/category_item/player_setup_item/loadout/load_character(var/savefile/S)
- READ_FILE(S["gear_list"], pref.gear_list)
- READ_FILE(S["gear_slot"], pref.gear_slot)
- if(pref.gear_list!=null && pref.gear_slot!=null)
- pref.gear = pref.gear_list["[pref.gear_slot]"]
- else
- READ_FILE(S["gear"], pref.gear)
- pref.gear_slot = 1
-
-/datum/category_item/player_setup_item/loadout/save_character(var/savefile/S)
- pref.gear_list["[pref.gear_slot]"] = pref.gear
- WRITE_FILE(S["gear_list"], pref.gear_list)
- WRITE_FILE(S["gear_slot"], pref.gear_slot)
-
-/datum/category_item/player_setup_item/loadout/proc/valid_gear_choices(datum/preferences/prefs ,max_cost)
- . = list()
- var/mob/preference_mob = preference_mob()
- // todo: loadouts should use char species UID
- var/real_species_name = prefs.real_species_name()
- for(var/gear_name in gear_datums)
- var/datum/gear/G = gear_datums[gear_name]
- if(G.legacy_species_lock)
- if(G.legacy_species_lock != real_species_name)
- continue
- if(max_cost && G.cost > max_cost)
+/datum/category_item/player_setup_item/loadout/gear/filter_data(datum/preferences/prefs, data, list/errors)
+ var/list/slots = sanitize_islist(data)
+ if(length(slots) > LOADOUT_MAX_SLOTS)
+ slots.len = LOADOUT_MAX_SLOTS
+ var/list/datum/loadout_entry/valid_entries = valid_loadout_entries(prefs)
+ for(var/i in 1 to LOADOUT_MAX_SLOTS)
+ var/numkey = num2text(i)
+ if(isnull(slots[numkey]))
continue
- if(preference_mob && preference_mob.client)
- if(G.ckeywhitelist && !(preference_mob.ckey in G.ckeywhitelist))
+ var/list/slot = (slots[numkey] = sanitize_islist(slots[numkey]))
+ var/list/dedupe = list()
+ if(length(slot) > LOADOUT_MAX_ITEMS)
+ slot.len = LOADOUT_MAX_ITEMS
+ var/list/slot_entries = slot[LOADOUT_SLOTDATA_ENTRIES]
+ for(var/id in slot_entries)
+ var/datum/loadout_entry/entry = global.gear_datums[id]
+ if(isnull(entry))
+ slot_entries -= id
+ errors?.Add("Could not find loadout entry id '[id]'")
continue
- if(G.character_name && !(preference_mob.client.prefs.real_name in G.character_name))
+ if(dedupe[id])
+ slot_entries -= id
+ errors?.Add("Fatal: Removed duplicate loadout entry for id '[id]'")
continue
- . += gear_name
-
-/datum/category_item/player_setup_item/loadout/sanitize_character()
- var/mob/preference_mob = preference_mob()
- if(!islist(pref.gear))
- pref.gear = list()
- if(!islist(pref.gear_list))
- pref.gear_list = list()
-
- for(var/gear_name in pref.gear)
- if(!(gear_name in gear_datums))
- pref.gear -= gear_name
- var/total_cost = 0
- var/list/valid = valid_gear_choices(pref)
- for(var/gear_name in pref.gear)
- if(!gear_datums[gear_name])
- to_chat(preference_mob, SPAN_WARNING("You cannot have more than one of the \the [gear_name]"))
- pref.gear -= gear_name
- else if(!(gear_name in valid))
- to_chat(preference_mob, SPAN_WARNING("You cannot take \the [gear_name] as you are not whitelisted for the species or item."))
- pref.gear -= gear_name
- else
- var/datum/gear/G = gear_datums[gear_name]
- if(total_cost + G.cost > max_gear_points())
- pref.gear -= gear_name
- to_chat(preference_mob, SPAN_WARNING("You cannot afford to take \the [gear_name]"))
else
- total_cost += G.cost
+ dedupe[id] = TRUE
+ if(!(entry in valid_entries))
+ slot_entries -= id
+ errors?.Add("Not allowed to take loadout entry id '[id]")
+ continue
+ // commented out - /datum/loadout_entry checks this on spawn.
+ /*
+ var/list/entry_data = slot_entries[id]
+ for(var/datakey in entry_data)
+ switch(datakey)
+ if(LOADOUT_ENTRYDATA_RECOLOR)
+ if(!(entry.loadout_customize_flags & LOADOUT_CUSTOMIZE_COLOR))
+ entry_data -= LOADOUT_ENTRYDATA_RECOLOR
+ errors?.Add("Loadout entry id '[id]' does not allow recoloring.")
+ if(LOADOUT_ENTRYDATA_RENAME)
+ if(!(entry.loadout_customize_flags & LOADOUT_CUSTOMIZE_NAME))
+ entry_data -= LOADOUT_ENTRYDATA_RENAME
+ errors?.Add("Loadout entry id '[id]' does not allow renaming.")
+ if(LOADOUT_ENTRYDATA_REDESC)
+ if(!(entry.loadout_customize_flags & LOADOUT_CUSTOMIZE_DESC))
+ entry_data -= LOADOUT_ENTRYDATA_REDESC
+ errors?.Add("Loadout entry id '[id]' does not allow setting description.")
+ else
+ // else we just don't care because gear tweaks need to sanitize their own stuff.
+ */
+ return slots
-/datum/category_item/player_setup_item/loadout/content(datum/preferences/prefs, mob/user, data)
+/datum/category_item/player_setup_item/loadout/gear/spawn_checks(datum/preferences/prefs, data, flags, list/errors, list/warnings)
+ var/list/slots = sanitize_islist(data)
+ var/slot_index = prefs.get_character_data(CHARACTER_DATA_LOADOUT_SLOT)
+ var/list/slot = SAFEINDEXACCESS(slots, slot_index)
+ if(!islist(slot))
+ return TRUE
+ var/max_cost = max_loadout_cost()
+ var/current_cost = 0
+ . = TRUE
+ for(var/id in slot)
+ var/datum/loadout_entry/entry = global.gear_datums[id]
+ if(isnull(entry))
+ errors?.Add("Could not find loadout item [id].")
+ . = FALSE
+ if(current_cost + entry.cost > max_cost)
+ if(current_cost <= max_cost)
+ // only when going over.
+ errors?.Add("Insufficient loadout points for all items selected.")
+ . = FALSE
+ current_cost += entry.cost
+
+/datum/category_item/player_setup_item/loadout/gear/ui_static_data(mob/user, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ .["gearContext"] = tgui_loadout_context()
+ var/list/allowed_ids = list()
+ for(var/datum/loadout_entry/entry as anything in valid_loadout_entries(pref))
+ allowed_ids += entry.legacy_get_id()
+ .["gearAllowed"] = allowed_ids
+ .["gearData"] = tgui_loadout_data()
+ .["characterName"] = pref.real_name
+
+/datum/category_item/player_setup_item/loadout/gear/ui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "CharacterLoadoutStandalone")
+ ui.open()
+
+/datum/category_item/player_setup_item/loadout/gear/ui_status(mob/user, datum/ui_state/state, datum/tgui_module/module)
+ return UI_INTERACTIVE
+
+/datum/category_item/player_setup_item/loadout/gear/proc/tgui_loadout_selected(list/loadout_slot)
. = list()
- var/mob/preference_mob = preference_mob()
- var/total_cost = 0
- if(pref.gear && pref.gear.len)
- for(var/i = 1; i <= pref.gear.len; i++)
- var/datum/gear/G = gear_datums[pref.gear[i]]
- if(G)
- total_cost += G.cost
+ .["name"] = loadout_slot[LOADOUT_SLOTDATA_NAME]
+ var/cost_used = 0
+ var/cost_max = max_loadout_cost()
+ var/list/our_entries = loadout_slot[LOADOUT_SLOTDATA_ENTRIES]
+ var/list/entries = list()
+ var/list/cost_categories = list()
+ var/list/cost_subcategories = list()
+ .["entries"] = entries
+ for(var/id in our_entries)
+ var/datum/loadout_entry/entry = global.gear_datums[id]
+ if(isnull(entry))
+ our_entries -= id
+ continue
+ cost_used += entry.cost
+ var/list/transformed = our_entries[id]
+ transformed = transformed.Copy()
+ var/list/tweak_texts = list()
+ for(var/datum/loadout_tweak/tweak as anything in entry.tweaks)
+ tweak_texts[tweak.id] = tweak.get_contents(our_entries[id][LOADOUT_ENTRYDATA_TWEAKS]?[tweak.id] || tweak.get_default())
+ transformed["tweakTexts"] = tweak_texts
+ entries[entry.legacy_get_id()] = transformed
+ cost_categories[entry.category] += entry.cost
+ LAZYINITLIST(cost_subcategories[entry.category])
+ cost_subcategories[entry.category][entry.subcategory] += entry.cost
- var/fcolor = "#3366CC"
- if(total_cost < max_gear_points())
- fcolor = "#E67300"
+ .["costUsed"] = cost_used
+ .["costMax"] = cost_max
+ .["costCategories"] = cost_categories
+ .["costSubcategories"] = cost_subcategories
- . += "
| [G.display_name] | " - . += "[G.cost] | " - . += "[G.description] |
| " - for(var/datum/gear_tweak/tweak in G.gear_tweaks) - . += " [tweak.get_contents(get_tweak_metadata(G, tweak))]" - . += " | ||