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 - . += "" - . += "" +/datum/category_item/player_setup_item/loadout/gear/proc/tgui_loadout_data() + . = list() + var/list/slots = list() + var/slot_index = pref.get_character_data(CHARACTER_DATA_LOADOUT_SLOT) + var/list/all_slots = pref.get_character_data(CHARACTER_DATA_LOADOUT) + for(var/i in 1 to LOADOUT_MAX_SLOTS) + var/list/the_slot = all_slots["[i]"] + slots[++slots.len] = list( + "name" = the_slot?[LOADOUT_SLOTDATA_NAME] || "Slot [i]" + ) + var/list/the_slot = all_slots["[slot_index]"] || list() + .["slots"] = slots + .["slot"] = tgui_loadout_selected(the_slot) + .["slotIndex"] = slot_index - . += "" + entries = entries.Copy() + slot[LOADOUT_SLOTDATA_ENTRIES] = entries + if(entries[id]) + entries -= id + else + entries[id] = list() + pref.set_character_data(CHARACTER_DATA_LOADOUT, loadout) + push_loadout_data() + pref.update_character_previews() + return TRUE + if("rename") + var/id = params["id"] + if(isnull(id)) + return TRUE + var/datum/loadout_entry/entry = global.gear_datums[id] + if(isnull(entry)) + return TRUE + var/list/loadout = pref.get_character_data(CHARACTER_DATA_LOADOUT) + loadout = loadout.Copy() + var/slot_index = pref.get_character_data(CHARACTER_DATA_LOADOUT_SLOT) + var/list/slot = loadout["[slot_index]"] + slot = slot?.Copy() || list() + loadout["[slot_index]"] = slot + var/list/entries = slot[LOADOUT_SLOTDATA_ENTRIES] + var/list/entry_data = entries[id] + if(isnull(entry_data)) + return TRUE + entry_data = entry_data.Copy() + entries[id] = entry_data + if(!(entry.loadout_customize_flags & LOADOUT_CUSTOMIZE_NAME)) + return TRUE + var/name = sanitize(params["name"], MAX_NAME_LEN) + if(isnull(name)) + return TRUE + if(name) + entry_data[LOADOUT_ENTRYDATA_RENAME] = name + else + entry_data -= LOADOUT_ENTRYDATA_RENAME + pref.set_character_data(CHARACTER_DATA_LOADOUT, loadout) + push_loadout_data() + return TRUE + if("redesc") + var/id = params["id"] + if(isnull(id)) + return TRUE + var/datum/loadout_entry/entry = global.gear_datums[id] + if(isnull(entry)) + return TRUE + var/list/loadout = pref.get_character_data(CHARACTER_DATA_LOADOUT) + loadout = loadout.Copy() + var/slot_index = pref.get_character_data(CHARACTER_DATA_LOADOUT_SLOT) + var/list/slot = loadout["[slot_index]"] + slot = slot?.Copy() || list() + loadout["[slot_index]"] = slot + var/list/entries = slot[LOADOUT_SLOTDATA_ENTRIES] + var/list/entry_data = entries[id] + if(isnull(entry_data)) + return TRUE + entry_data = entry_data.Copy() + entries[id] = entry_data + if(!(entry.loadout_customize_flags & LOADOUT_CUSTOMIZE_DESC)) + return TRUE + var/desc = sanitize(params["desc"], MAX_MESSAGE_LEN) + if(isnull(desc)) + return TRUE + if(desc) + entry_data[LOADOUT_ENTRYDATA_REDESC] = desc + else + entry_data -= LOADOUT_ENTRYDATA_REDESC + pref.set_character_data(CHARACTER_DATA_LOADOUT, loadout) + push_loadout_data() + return TRUE + if("recolor") + var/id = params["id"] + if(isnull(id)) + return TRUE + var/datum/loadout_entry/entry = global.gear_datums[id] + if(isnull(entry)) + return TRUE + var/list/loadout = pref.get_character_data(CHARACTER_DATA_LOADOUT) + loadout = loadout.Copy() + var/slot_index = pref.get_character_data(CHARACTER_DATA_LOADOUT_SLOT) + var/list/slot = loadout["[slot_index]"] + slot = slot?.Copy() || list() + loadout["[slot_index]"] = slot + var/list/entries = slot[LOADOUT_SLOTDATA_ENTRIES] + var/list/entry_data = entries[id] + if(isnull(entry_data)) + return TRUE + entry_data = entry_data.Copy() + entries[id] = entry_data + if(!(entry.loadout_customize_flags & LOADOUT_CUSTOMIZE_COLOR)) + return TRUE + var/color = sanitize_probably_a_byond_color(params["color"], null) + if(!isnull(color) && (color != "#ffffff")) + entry_data[LOADOUT_ENTRYDATA_RECOLOR] = color + else + entry_data -= LOADOUT_ENTRYDATA_RECOLOR + pref.set_character_data(CHARACTER_DATA_LOADOUT, loadout) + push_loadout_data() + pref.update_character_previews() + return TRUE + if("tweak") + var/id = params["id"] + if(!id) + return TRUE + var/datum/loadout_entry/entry = global.gear_datums[id] + if(isnull(entry)) + return TRUE + var/list/loadout = pref.get_character_data(CHARACTER_DATA_LOADOUT) + loadout = loadout.Copy() + var/slot_index = pref.get_character_data(CHARACTER_DATA_LOADOUT_SLOT) + var/list/slot = loadout["[slot_index]"] + slot = slot?.Copy() || list() + loadout["[slot_index]"] = slot + var/list/entries = slot[LOADOUT_SLOTDATA_ENTRIES] + var/list/entry_data = entries[id] + if(isnull(entry_data)) + return TRUE + entry_data = entry_data.Copy() + entries[id] = entry_data + var/list/tweak_data = entry_data[LOADOUT_ENTRYDATA_TWEAKS] || list() + tweak_data = deep_copy_list(tweak_data) + entry_data[LOADOUT_ENTRYDATA_TWEAKS] = tweak_data + var/tweak_id = params["tweakId"] + for(var/datum/loadout_tweak/tweak as anything in entry.tweaks) + if(tweak.id != tweak_id) + continue + tweak_data[tweak.id] = tweak.get_metadata(usr, tweak_data[tweak.id]) + pref.set_character_data(CHARACTER_DATA_LOADOUT, loadout) + push_loadout_data() + pref.update_character_previews() + return TRUE + if("clear") + var/list/loadout = pref.get_character_data(CHARACTER_DATA_LOADOUT) + loadout = loadout.Copy() + var/slot_index = pref.get_character_data(CHARACTER_DATA_LOADOUT_SLOT) + var/wanted_index = text2num(params["index"]) + if(slot_index != wanted_index) + return TRUE + var/list/slot = loadout["[slot_index]"] + slot = slot.Copy() + loadout["[slot_index]"] = slot + slot[LOADOUT_SLOTDATA_ENTRIES] = list() + pref.set_character_data(CHARACTER_DATA_LOADOUT, loadout) + push_loadout_data() + pref.update_character_previews() + return TRUE + if("slot") + var/index = text2num(params["index"]) + if(!index) + return TRUE + if(index > LOADOUT_MAX_SLOTS) + return TRUE + pref.set_character_data(CHARACTER_DATA_LOADOUT_SLOT, index) + push_loadout_data() + pref.update_character_previews() + return TRUE + if("slotName") + var/index = text2num(params["index"]) + if(!ISINRANGE(index, 1, LOADOUT_MAX_SLOTS)) + return FALSE + var/name = params["name"] || (input(usr, "Choose a name for Slot [index]", "Slot Rename", "Slot [index]") as text|null) + if(isnull(name)) + return TRUE + var/list/loadout = pref.get_character_data(CHARACTER_DATA_LOADOUT) + loadout = loadout.Copy() + var/slot_index = index + var/list/slot = loadout["[slot_index]"] || list() + slot = slot?.Copy() + loadout["[slot_index]"] = slot + if(name) + slot?[LOADOUT_SLOTDATA_NAME] = name + else + slot?.Remove(LOADOUT_SLOTDATA_NAME) + pref.set_character_data(CHARACTER_DATA_LOADOUT, loadout) + push_loadout_data() + return TRUE - var/datum/loadout_category/LC = loadout_categories[current_tab] - . += "" - . += "" - . += "" - for(var/gear_name in LC.gear) - var/datum/gear/G = LC.gear[gear_name] - if(preference_mob && preference_mob.client) - if(G.ckeywhitelist && !(preference_mob.ckey in G.ckeywhitelist)) +/datum/category_item/player_setup_item/loadout/gear/proc/current_loadout_slot(datum/preferences/prefs) + var/list/all_slots = prefs.get_character_data(CHARACTER_DATA_LOADOUT) + var/index_slot = prefs.get_character_data(CHARACTER_DATA_LOADOUT_SLOT) + return all_slots["[index_slot]"] || (all_slots["[index_slot]"] = list()) + +/datum/category_item/player_setup_item/loadout/gear/proc/push_loadout_data() + push_ui_data( + data = list( + "gearData" = tgui_loadout_data(), + ) + ) + +/datum/category_item/player_setup_item/loadout/gear/proc/push_character_name() + push_ui_data( + data = list( + "characterName" = pref.real_name, + ) + ) + +/datum/category_item/player_setup_item/loadout/gear/load_character(savefile/S) + // LITERALLY JUST A SHIM TO TRIGGER UI UPDATES. + addtimer(CALLBACK(src, PROC_REF(push_loadout_data)), 0) + addtimer(CALLBACK(src, PROC_REF(push_character_name)), 0) + +// These checks should all be on /datum/loadout_entry +// However, for performance reasons, we're going to avoid doing that +// Because this is way faster than +// manually calling procs and fetching species name every time. + +/datum/category_item/player_setup_item/loadout/gear/proc/check_loadout_entry(datum/preferences/prefs, datum/loadout_entry/entry) + if(entry.legacy_species_lock && (entry.legacy_species_lock != prefs.real_species_name())) + return FALSE + if(entry.ckeywhitelist && (prefs.client_ckey != entry.ckeywhitelist)) + return FALSE + return TRUE + +/datum/category_item/player_setup_item/loadout/gear/proc/valid_loadout_entries(datum/preferences/prefs) + RETURN_TYPE(/list) + . = list() + var/datum/species/real_species = prefs.real_species_datum() + var/real_species_name = real_species.name + for(var/entry_name in gear_datums) + var/datum/loadout_entry/entry = gear_datums[entry_name] + if(entry.legacy_species_lock && (entry.legacy_species_lock != real_species_name)) + continue + if(entry.ckeywhitelist && !(prefs.client_ckey in entry.ckeywhitelist)) + continue + . += entry + +/** + * generate list of gear entry datums associated to data + * + * @params + * * flags - PREF_COPY_TO flags + * * role - the role being used for equip + */ +/datum/preferences/proc/generate_loadout_entry_list(flags, datum/role/role) + RETURN_TYPE(/list) + . = list() + var/list/loadout_slots = get_character_data(CHARACTER_DATA_LOADOUT) + var/loadout_slot = get_character_data(CHARACTER_DATA_LOADOUT_SLOT) + var/list/loadout_data = loadout_slots?["[loadout_slot]"]?[LOADOUT_SLOTDATA_ENTRIES] + if(isnull(loadout_data)) + return + var/max_cost = max_loadout_cost() + var/used_cost = 0 + var/real_species_name = real_species_name() + for(var/id in loadout_data) + var/datum/loadout_entry/entry = gear_datums[id] + if(!(flags & PREF_COPY_TO_LOADOUT_IGNORE_ROLE)) + if(length(entry.allowed_roles)) + if(!istype(role, /datum/role/job)) + continue + var/datum/role/job/J = role + if(!(J.title in entry.allowed_roles)) + continue + if(!(flags & PREF_COPY_TO_LOADOUT_IGNORE_WHITELIST)) + if(length(entry.ckeywhitelist) && !(client_ckey in entry.ckeywhitelist)) continue - if(G.character_name && !(preference_mob.client.prefs.real_name in G.character_name)) + if(!(flags & PREF_COPY_TO_LOADOUT_IGNORE_CHECKS)) + if(entry.legacy_species_lock && (entry.legacy_species_lock != real_species_name)) continue - var/ticked = (G.name in pref.gear) - . += "" - . += "" - . += "" - if(ticked) - . += "" - . += "
\<\<\[[pref.gear_slot]\] \>\>[total_cost]/[max_gear_points()] loadout points spent. \[Clear Loadout\]
" - var/firstcat = 1 - for(var/category in loadout_categories) - - if(firstcat) - firstcat = 0 - else - . += " |" - - var/datum/loadout_category/LC = loadout_categories[category] - var/category_cost = 0 - for(var/gear in LC.gear) - if(gear in pref.gear) - var/datum/gear/G = LC.gear[gear] - category_cost += G.cost - - if(category == current_tab) - . += " [category] - [category_cost] " - else - if(category_cost) - . += " [category] - [category_cost] " +/datum/category_item/player_setup_item/loadout/gear/ui_act(action, list/params, datum/tgui/ui) + . = ..() + if(.) + return + // todo: we really need a better way, tgui prefs when lol + if(pref.client_ckey != usr.ckey && !check_rights(usr)) + return + switch(action) + if("toggle") + var/id = params["id"] + if(!id) + return TRUE + var/datum/loadout_entry/entry = global.gear_datums[id] + if(isnull(entry)) + return TRUE + var/list/loadout = pref.get_character_data(CHARACTER_DATA_LOADOUT) + loadout = loadout.Copy() + var/slot_index = pref.get_character_data(CHARACTER_DATA_LOADOUT_SLOT) + var/list/slot = loadout["[slot_index]"] + slot = slot?.Copy() || list() + loadout["[slot_index]"] = slot + var/list/entries = slot[LOADOUT_SLOTDATA_ENTRIES] + if(isnull(entries)) + slot[LOADOUT_SLOTDATA_ENTRIES] = (entries = list()) else - . += " [category] - 0 " - . += "

[LC.category]

[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))]" - . += "
" - . = jointext(., null) + if(max_cost < (used_cost + entry.cost)) + continue + used_cost += entry.cost + .[entry] = loadout_data[id] -/datum/category_item/player_setup_item/loadout/proc/get_gear_metadata(var/datum/gear/G) - . = pref.gear[G.name] - if(!.) - . = list() - pref.gear[G.name] = . - -/datum/category_item/player_setup_item/loadout/proc/get_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak) - var/list/metadata = get_gear_metadata(G) - . = metadata["[tweak]"] - if(!.) - . = tweak.get_default() - metadata["[tweak]"] = . - -/datum/category_item/player_setup_item/loadout/proc/set_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak, var/new_metadata) - var/list/metadata = get_gear_metadata(G) - metadata["[tweak]"] = new_metadata - -/datum/category_item/player_setup_item/loadout/OnTopic(href, href_list, user) - if(href_list["toggle_gear"]) - var/datum/gear/TG = gear_datums[href_list["toggle_gear"]] - if(TG?.name in pref.gear) - pref.gear -= TG.name - else - var/total_cost = 0 - for(var/gear_name in pref.gear) - var/datum/gear/G = gear_datums[gear_name] - if(istype(G)) total_cost += G.cost - if((total_cost+TG.cost) <= max_gear_points()) - pref.gear += TG.name - return PREFERENCES_REFRESH_UPDATE_PREVIEW - if(href_list["gear"] && href_list["tweak"]) - var/datum/gear/gear = gear_datums[href_list["gear"]] - var/datum/gear_tweak/tweak = locate(href_list["tweak"]) - if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks)) - return PREFERENCES_NOACTION - var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak)) - if(!metadata || !CanUseTopic(user)) - return PREFERENCES_NOACTION - set_tweak_metadata(gear, tweak, metadata) - return PREFERENCES_REFRESH_UPDATE_PREVIEW - if(href_list["next_slot"] || href_list["prev_slot"]) - // Set the current slot in the gear list to the currently selected gear - pref.gear_list["[pref.gear_slot]"] = pref.gear - // If we're moving up a slot.. - if(href_list["next_slot"]) - // Change the current slot number - pref.gear_slot = pref.gear_slot+1 - if(pref.gear_slot>config_legacy.loadout_slots) - pref.gear_slot = 1 - // If we're moving down a slot.. - else if(href_list["prev_slot"]) - // Change current slot one down - pref.gear_slot = pref.gear_slot-1 - if(pref.gear_slot<1) - pref.gear_slot = config_legacy.loadout_slots - // Set the currently selected gear to whatever's in the new slot - if(pref.gear_list["[pref.gear_slot]"]) - pref.gear = pref.gear_list["[pref.gear_slot]"] - else - pref.gear = list() - pref.gear_list["[pref.gear_slot]"] = list() - // Refresh? - return PREFERENCES_REFRESH_UPDATE_PREVIEW - else if(href_list["select_category"]) - current_tab = href_list["select_category"] - return PREFERENCES_REFRESH - else if(href_list["clear_loadout"]) - pref.gear.Cut() - return PREFERENCES_REFRESH_UPDATE_PREVIEW - return ..() - -/proc/max_gear_points() - . = MAX_GEAR_COST +/proc/max_loadout_cost() + . = LOADOUT_MAX_COST for(var/name in SSevents.holidays) var/datum/holiday/H = SSevents.holidays[name] if(H.loadout_spam) - return MAX_GEAR_COST_HOLIDAY_SPAM + return LOADOUT_MAX_COST_HOLIDAY_SPAM diff --git a/code/modules/preferences/preference_setup/loadout/loadout_accessories.dm b/code/modules/preferences/preference_setup/loadout/loadout_accessories.dm deleted file mode 100644 index cfd26331f73..00000000000 --- a/code/modules/preferences/preference_setup/loadout/loadout_accessories.dm +++ /dev/null @@ -1,509 +0,0 @@ - -/datum/gear/accessory - name = "Blue Silk Tie" - slot = /datum/inventory_slot_meta/abstract/attach_as_accessory - sort_category = LOADOUT_CATEGORY_ACCESSORIES - abstract_type = /datum/gear/accessory - path = /obj/item/clothing/accessory - cost = 1 - -/datum/gear/accessory/armband - name = "Armband Selection" - path = /obj/item/clothing/accessory/armband - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(tim_sort(armbands, /proc/cmp_text_asc)) - -/datum/gear/accessory/armband/colored - name = "Armband - Colorable" - path = /obj/item/clothing/accessory/armband/med/color - -/datum/gear/accessory/armband/colored/New() - ..() - gear_tweaks += gear_tweak_free_color_choice - - -/datum/gear/accessory/insignia - name = "Insignia Selection" - path = /obj/item/clothing/accessory/oricon/department - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(insignia) - -/datum/gear/accessory/insigniacolored - name = "Insignia - Colorable" - path = /obj/item/clothing/accessory/oricon/department/colorable - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(insignia) - gear_tweaks += gear_tweak_free_color_choice - - -/datum/gear/accessory/wallet - name = "Wallet - Orange" - path = /obj/item/storage/wallet/random - -/datum/gear/accessory/wallet_poly - name = "Wallet - Colorable" - path = /obj/item/storage/wallet/poly - cost = 0 - - -/datum/gear/accessory/wallet/womens - name = "Wallet - Womens" - path = /obj/item/storage/wallet/womens - cost = 0 - -/datum/gear/accessory/wallet/womens/New() - ..() - gear_tweaks += gear_tweak_free_color_choice - -/datum/gear/accessory/clutch - name = "Clutch Bag" - path = /obj/item/storage/briefcase/clutch - cost = 2 - -/datum/gear/accessory/clutch/New() - ..() - gear_tweaks += gear_tweak_free_color_choice - -/datum/gear/accessory/purse - name = "Purse" - path = /obj/item/storage/backpack/purse - cost = 3 - -/datum/gear/accessory/purse/New() - ..() - gear_tweaks += gear_tweak_free_color_choice - -/datum/gear/accessory/wcoat - name = "Waistcoat - Selection" - path = /obj/item/clothing/accessory/wcoat - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(tim_sort(wcoats, /proc/cmp_text_asc)) - -/datum/gear/accessory/tie - name = "Tie - Selection" - path = /obj/item/clothing/accessory/tie - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(tim_sort(ties, /proc/cmp_text_asc)) - -/datum/gear/accessory/scarf - name = "Scarf - Selection" - path = /obj/item/clothing/accessory/scarf - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(tim_sort(scarfs, /proc/cmp_text_asc)) - -/datum/gear/accessory/scarfcolor - name = "Scarf Colorable" - path = /obj/item/clothing/accessory/scarf/white - -/datum/gear/accessory/scarfcolor/New() - ..() - gear_tweaks += gear_tweak_free_color_choice - -/datum/gear/accessory/jacket - name = "Suit Jacket Selection" - path = /obj/item/clothing/accessory/jacket - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(tim_sort(jackets, /proc/cmp_text_asc)) - -/datum/gear/accessory/suitvest - name = "Suit Vest" - path = /obj/item/clothing/accessory/vest - -/datum/gear/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/gear/accessory/brown_drop_pouches - name = "Drop Pouches - Brown" - path = /obj/item/clothing/accessory/storage/brown_drop_pouches - cost = 2 - -/datum/gear/accessory/black_drop_pouches - name = "Drop Pouches - Black" - path = /obj/item/clothing/accessory/storage/black_drop_pouches - cost = 2 - -/datum/gear/accessory/white_drop_pouches - name = "Drop Pouches - White" - path = /obj/item/clothing/accessory/storage/white_drop_pouches - cost = 2 - -/datum/gear/accessory/holster_selection - name = "Holster - Selection" - path = /obj/item/clothing/accessory/holster - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(holstertype) - -/datum/gear/accessory/fannypack - name = "Fannypack - Selection" - cost = 2 - path = /obj/item/storage/belt/fannypack - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(tim_sort(fannys, /proc/cmp_text_asc)) - -/datum/gear/accessory/chaps - name = "Chaps - Brown" - path = /obj/item/clothing/accessory/chaps - -/datum/gear/accessory/chaps/black - name = "Chaps - Black" - path = /obj/item/clothing/accessory/chaps/black - -/datum/gear/accessory/hawaii - name = "Hawaii Shirt" - path = /obj/item/clothing/accessory/hawaii - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(shirts) - - -/datum/gear/accessory/sweater - name = "Sweater - Selection" - path = /obj/item/clothing/accessory/sweater - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(tim_sort(sweaters, /proc/cmp_text_asc)) - -/datum/gear/accessory/bracelet/material - name = "Bracelet - Selection" - description = "Choose from a number of bracelets." - path = /obj/item/clothing/accessory/bracelet - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(bracelettype) - -/datum/gear/accessory/bracelet/friendship - name = "Friendship Bracelet" - path = /obj/item/clothing/accessory/bracelet/friendship - -/datum/gear/accessory/locket - name = "Locket" - path = /obj/item/clothing/accessory/locket - -/datum/gear/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/gear/accessory/treatbox - name = "Box of Treats" - path = /obj/item/storage/box/treats - cost = 2 -/datum/gear/accessory/halfcape - name = "Half Cape" - path = /obj/item/clothing/accessory/halfcape - -/datum/gear/accessory/fullcape - name = "Full Cape" - path = /obj/item/clothing/accessory/fullcape - -/datum/gear/accessory/sash - name = "Sash - Colorable" - path = /obj/item/clothing/accessory/sash - -/datum/gear/accessory/sash/New() - ..() - gear_tweaks += gear_tweak_free_color_choice - -/datum/gear/accessory/asym - name = "Asymmetric Jacket - Selection" - path = /obj/item/clothing/accessory/asymmetric - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(tim_sort(asyms, /proc/cmp_text_asc)) - -/datum/gear/accessory/cowledvest - name = "Cowled Vest" - path = /obj/item/clothing/accessory/cowledvest - -/datum/gear/choker // A colorable choker - name = "Choker" - path = /obj/item/clothing/accessory/choker - slot = /datum/inventory_slot_meta/abstract/attach_as_accessory - sort_category = LOADOUT_CATEGORY_ACCESSORIES - -/datum/gear/choker/New() - ..() - gear_tweaks += gear_tweak_free_color_choice - -/datum/gear/collar - name = "Collar - Silver" - path = /obj/item/clothing/accessory/collar/silver - slot = /datum/inventory_slot_meta/abstract/attach_as_accessory - sort_category = LOADOUT_CATEGORY_ACCESSORIES - -/datum/gear/collar/New() - ..() - gear_tweaks = list(gear_tweak_collar_tag) - -/datum/gear/collar/golden - name = "Collar - Golden" - path = /obj/item/clothing/accessory/collar/gold - -/datum/gear/collar/bell - name = "Collar - Bell" - path = /obj/item/clothing/accessory/collar/bell - -/datum/gear/collar/shock - name = "Collar - Shock" - path = /obj/item/clothing/accessory/collar/shock - -/datum/gear/collar/spike - name = "Collar - Spike" - path = /obj/item/clothing/accessory/collar/spike - -/datum/gear/collar/pink - name = "Collar - Pink" - path = /obj/item/clothing/accessory/collar/pink - -/datum/gear/collar/holo - name = "Collar - Holo" - path = /obj/item/clothing/accessory/collar/holo - -/datum/gear/collar/cow - name = "Collar - Cowbell" - path = /obj/item/clothing/accessory/collar/cowbell - -/datum/gear/collar/holo/indigestible - name = "Collar - Holo - Indigestible" - path = /obj/item/clothing/accessory/collar/holo/indigestible - -/datum/gear/accessory/webbing - -/datum/gear/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/gear/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/gear/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/gear/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/gear/accessory/flops/New() - ..() - gear_tweaks += gear_tweak_free_color_choice - -/datum/gear/accessory/gaiter - name = "Neck Gaiter - Selection" - path = /obj/item/clothing/accessory/gaiter - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(tim_sort(gaiters, /proc/cmp_text_asc)) - -/datum/gear/accessory/laconic - name = "Laconic Field Pouch System" - path = /obj/item/clothing/accessory/storage/laconic - -/datum/gear/accessory/buttonup - name = "Button Up Shirt" - path = /obj/item/clothing/accessory/buttonup - slot = /datum/inventory_slot_meta/abstract/attach_as_accessory - -/datum/gear/accessory/buttonup/New() - ..() - gear_tweaks += gear_tweak_free_color_choice - -/datum/gear/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/gear/accessory/antediluvian - name = "Antediluvian Loincloth" - path = /obj/item/clothing/accessory/antediluvian - -/datum/gear/accessory/antediluvian_gloves - name = "Antediluvian Bracers" - path = /obj/item/clothing/accessory/antediluvian_gloves - -/datum/gear/accessory/mekkyaku - name = "Mekkyaku Turtleneck" - path = /obj/item/clothing/accessory/mekkyaku - -/datum/gear/accessory/armsock - name = "Fingerless Sleeves" - path = /obj/item/clothing/accessory/armsocks - -/datum/gear/accessory/armsock_left - name = "Fingerless Sleeve (Left)" - path = /obj/item/clothing/accessory/armsock_left - -/datum/gear/accessory/armsock_right - name = "Fingerless Sleeve (Right)" - path = /obj/item/clothing/accessory/armsock_right - -/datum/gear/accessory/disenchanted_talisman - name = "Disenchanted Bone Talisman" - path = /obj/item/clothing/accessory/disenchanted_talisman - -/datum/gear/accessory/legwarmers - name = "Thigh-Length Legwarmers" - path = /obj/item/clothing/accessory/legwarmers - -/datum/gear/accessory/legwarmersmedium - name = "Legwarmers" - path = /obj/item/clothing/accessory/legwarmersmedium - -/datum/gear/accessory/legwarmersshort - name = "Short Legwarmers" - path = /obj/item/clothing/accessory/legwarmersshort - -/datum/gear/accessory/halo_projector - name = "Holographic Halo Projector" - path = /obj/item/clothing/accessory/halo_projector - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(tim_sort(halos, /proc/cmp_text_asc)) - -//Tajaran wears - -/datum/gear/accessory/tajaran/scarf - name = "Adhomian fur scarf" - description = "A selection of tajaran colored fur scarfs." - path = /obj/item/clothing/accessory/tajaran/scarf - -/datum/gear/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 - gear_tweaks += new/datum/gear_tweak/path(tim_sort(tscarfs, /proc/cmp_text_asc)) - -/datum/gear/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_seasonal.dm b/code/modules/preferences/preference_setup/loadout/loadout_seasonal.dm deleted file mode 100644 index 3c9c5c4c6d6..00000000000 --- a/code/modules/preferences/preference_setup/loadout/loadout_seasonal.dm +++ /dev/null @@ -1,8 +0,0 @@ -/datum/gear/seasonal - sort_category = LOADOUT_CATEGORY_SEASONAL // seasonal ones are usually tied to holidays we don't want a category just for this - abstract_type = /datum/gear/seasonal - cost = 1 - -/datum/gear/seasonal/xmas_tree - name = "Toy Christmas Tree" - path = /obj/item/toy/xmastree diff --git a/code/modules/preferences/preference_setup/preference_category_new.dm b/code/modules/preferences/preference_setup/preference_category_new.dm index d1174acb4e7..dd704e63158 100644 --- a/code/modules/preferences/preference_setup/preference_category_new.dm +++ b/code/modules/preferences/preference_setup/preference_category_new.dm @@ -7,3 +7,5 @@ . = FALSE // todo: multi stage random character generation +// todo: categories should probably go; entries should have the ability to render as the TGUI section fully as +// opposed to defining categories manually. diff --git a/code/modules/preferences/preference_setup/preference_setup.dm b/code/modules/preferences/preference_setup/preference_setup.dm index 4850c6c63c7..852725fed21 100644 --- a/code/modules/preferences/preference_setup/preference_setup.dm +++ b/code/modules/preferences/preference_setup/preference_setup.dm @@ -12,11 +12,6 @@ sort_order = 4 category_item_type = /datum/category_item/player_setup_item/antagonism -/datum/category_group/player_setup_category/loadout_preferences - name = "Loadout" - sort_order = 5 - category_item_type = /datum/category_item/player_setup_item/loadout - /datum/category_group/player_setup_category/global_preferences name = "Global" sort_order = 6 @@ -82,9 +77,11 @@ return 1 if(href_list["category"]) - var/category = locate(href_list["category"]) + var/datum/category_group/player_setup_category/category = locate(href_list["category"]) if(category && (category in categories)) - selected_category = category + if(category.override_tab_to(user)) + else + selected_category = category . = 1 if(.) @@ -242,7 +239,7 @@ . |= act(pref, usr, resolved, href_list) if(. & PREFERENCES_UPDATE_PREVIEW) - pref_mob.client.prefs.update_preview_icon() + pref_mob.client.prefs.update_character_previews() if(. & PREFERENCES_REFRESH) pref_mob.client.prefs.ShowChoices(usr) diff --git a/code/modules/preferences/preference_setup/traits/traits.dm b/code/modules/preferences/preference_setup/traits/traits.dm index 375dc86f4e3..1e451f28a95 100644 --- a/code/modules/preferences/preference_setup/traits/traits.dm +++ b/code/modules/preferences/preference_setup/traits/traits.dm @@ -84,7 +84,7 @@ var/list/trait_categories = list() // The categories available for the trait men [invalid ? "
Cannot take trait. Reason: [invalid]
":""]" // if(ticked) // . += "" -// for(var/datum/gear_tweak/tweak in G.gear_tweaks) +// for(var/datum/loadout_tweak/tweak in G.tweaks) // . += " [tweak.get_contents(get_tweak_metadata(G, tweak))]" // . += "" . += "" diff --git a/code/modules/preferences/preferences_savefile.dm b/code/modules/preferences/preferences_savefile.dm index e9d5c75822f..6bc9a9f825a 100644 --- a/code/modules/preferences/preferences_savefile.dm +++ b/code/modules/preferences/preferences_savefile.dm @@ -40,6 +40,7 @@ savefile_version = SAVEFILE_VERSION_MAX // don't flush immediately incase they want to cancel/ahelp about something breaking // save_preferences() + sanitize_global(io_errors) queue_errors(io_errors, "error while migrating global data:") // load legacy data player_setup.load_preferences(S) @@ -154,12 +155,13 @@ else if(current_version < CHARACTER_VERSION_MAX) SScharacters.perform_character_migrations(S, current_version, io_errors, character, src) current_version = CHARACTER_VERSION_MAX + sanitize_character(io_errors) queue_errors(io_errors, "error while migrating slot [slot]:") character[CHARACTER_DATA_VERSION] = current_version // load legacy data player_setup.load_character(S) // rebuild previews - clear_character_previews() // Recalculate them on next show + clear_character_renders() // Recalculate them on next show if(initialized) auto_flush_errors() return TRUE diff --git a/code/modules/preferences/preferences_setup.dm b/code/modules/preferences/preferences_setup.dm index 1f3e6127984..ef1f401dcd1 100644 --- a/code/modules/preferences/preferences_setup.dm +++ b/code/modules/preferences/preferences_setup.dm @@ -191,61 +191,6 @@ g_skin = green b_skin = blue -/datum/preferences/proc/dress_preview_mob(var/mob/living/carbon/human/mannequin, flags) - copy_to(mannequin, flags) - - if(!equip_preview_mob) - return - - var/datum/role/job/previewJob = SSjob.job_by_id(preview_job_id()) - - if((equip_preview_mob & EQUIP_PREVIEW_LOADOUT) && !(previewJob && (equip_preview_mob & EQUIP_PREVIEW_JOB) && (previewJob.type == /datum/role/job/station/ai || previewJob.type == /datum/role/job/station/cyborg))) - var/list/equipped_slots = list() - for(var/thing in gear) - var/datum/gear/G = gear_datums[thing] - if(G) - var/permitted = 0 - if(!G.allowed_roles) - permitted = 1 - else if(!previewJob) - permitted = 0 - else - for(var/job_name in G.allowed_roles) - if(previewJob.title == job_name) - permitted = 1 - - if(G.legacy_species_lock && (G.legacy_species_lock != mannequin.species.name)) - permitted = 0 - - if(!permitted) - continue - - if(G.slot && !(G.slot in equipped_slots)) - var/metadata = gear[G.display_name] - if(G.slot == "implant") - // todo: remove fucking snowflake - continue - if(mannequin.force_equip_to_slot_or_del(G.spawn_item(mannequin, metadata), G.slot, INV_OP_SILENT)) - if(G.slot != /datum/inventory_slot_meta/abstract/attach_as_accessory) - equipped_slots += G.slot - - if((equip_preview_mob & EQUIP_PREVIEW_JOB) && previewJob) - mannequin.job = previewJob.title - previewJob.equip_preview(mannequin, get_job_alt_title_name(previewJob)) - -/datum/preferences/proc/update_preview_icon() - var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client_ckey) - mannequin.delete_inventory(TRUE) - if(regen_limbs) - var/datum/species/current_species = real_species_datum() - current_species.create_organs(mannequin) - regen_limbs = 0 - dress_preview_mob(mannequin) - mannequin.update_transform() - mannequin.compile_overlays() - - update_character_previews(new /mutable_appearance(mannequin)) - //TFF 5/8/19 - add randomised sensor setting for random button clicking /datum/preferences/randomize_appearance_and_body_for(var/mob/living/carbon/human/H) sensorpref = rand(1,5) @@ -277,19 +222,3 @@ valid_facialhairstyles[facialhairstyle] = GLOB.legacy_facial_hair_lookup[facialhairstyle] return valid_facialhairstyles - -/datum/preferences/update_preview_icon() // Lines up and un-overlaps character edit previews. Also un-splits taurs. - var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client_ckey) - if(!mannequin.dna) // Special handling for preview icons before SSAtoms has initailized. - mannequin.dna = new /datum/dna(null) - mannequin.delete_inventory(TRUE) - if(regen_limbs) - var/datum/species/current_species = real_species_datum() - current_species.create_organs(mannequin) - regen_limbs = 0 - dress_preview_mob(mannequin) - mannequin.update_transform() - mannequin.toggle_tail_vr(setting = TRUE) - mannequin.toggle_wing_vr(setting = TRUE) - mannequin.compile_overlays() - update_character_previews(new /mutable_appearance(mannequin)) diff --git a/code/modules/preferences/preview.dm b/code/modules/preferences/preview.dm new file mode 100644 index 00000000000..cbabc1063cf --- /dev/null +++ b/code/modules/preferences/preview.dm @@ -0,0 +1,75 @@ +/** + * Lines up and un-overlaps character edit previews. Also un-splits taurs. + * + * todo: refactor + */ +/datum/preferences/proc/update_character_previews() + var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client_ckey) + if(!mannequin.dna) // Special handling for preview icons before SSAtoms has initailized. + mannequin.dna = new /datum/dna(null) + mannequin.delete_inventory(TRUE) + if(regen_limbs) + var/datum/species/current_species = real_species_datum() + current_species.create_organs(mannequin) + regen_limbs = 0 + dress_preview_mob(mannequin) + mannequin.update_transform() + mannequin.toggle_tail_vr(setting = TRUE) + mannequin.toggle_wing_vr(setting = TRUE) + mannequin.compile_overlays() + set_character_renders(new /mutable_appearance(mannequin)) + +// todo: refactor +/datum/preferences/proc/dress_preview_mob(var/mob/living/carbon/human/mannequin, flags) + copy_to(mannequin, flags) + + if(!equip_preview_mob) + return + + var/datum/role/job/previewJob = SSjob.job_by_id(preview_job_id()) + + if((equip_preview_mob & EQUIP_PREVIEW_LOADOUT) && !(previewJob && (equip_preview_mob & EQUIP_PREVIEW_JOB) && (previewJob.type == /datum/role/job/station/ai || previewJob.type == /datum/role/job/station/cyborg))) + equip_loadout(mannequin, flags, previewJob) + + if((equip_preview_mob & EQUIP_PREVIEW_JOB) && previewJob) + mannequin.job = previewJob.title + previewJob.equip_preview(mannequin, get_job_alt_title_name(previewJob)) + +/datum/preferences/proc/set_character_renders(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_renders() + 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_renders() + 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 diff --git a/code/modules/preferences/shims.dm b/code/modules/preferences/shims.dm index 61e0fbb18e1..e72e3f4664d 100644 --- a/code/modules/preferences/shims.dm +++ b/code/modules/preferences/shims.dm @@ -10,3 +10,6 @@ /datum/preferences/proc/preference_by_type(type) RETURN_TYPE(/datum/category_item/player_setup_item) return preference_by_type[type] + +/datum/category_group/player_setup_category/proc/override_tab_to(mob/user) + return FALSE diff --git a/code/modules/preferences/ui.dm b/code/modules/preferences/ui.dm index 82c4ec029ec..a89b4076014 100644 --- a/code/modules/preferences/ui.dm +++ b/code/modules/preferences/ui.dm @@ -1,6 +1,6 @@ /datum/preferences/proc/refresh(mob/user, update_previews) if(update_previews) - update_preview_icon() + update_character_previews() ShowChoices(user) /datum/preferences/proc/show(mob/user) @@ -20,8 +20,8 @@ return if(!char_render_holders) - update_preview_icon() - show_character_previews() + update_character_previews() + show_character_renders() var/dat = "
" diff --git a/code/modules/unit_tests/loadout_tests.dm b/code/modules/unit_tests/loadout_tests.dm index e80e90fd304..03f21640608 100644 --- a/code/modules/unit_tests/loadout_tests.dm +++ b/code/modules/unit_tests/loadout_tests.dm @@ -1,6 +1,6 @@ /datum/unit_test/loadout_test_shall_have_name_cost_path/Run() - for(var/geartype in typesof(/datum/gear) - /datum/gear) - var/datum/gear/G = geartype + for(var/geartype in typesof(/datum/loadout_entry) - /datum/loadout_entry) + var/datum/loadout_entry/G = geartype if(!initial(G.display_name)) Fail("[G]: Loadout - Missing display name.") diff --git a/config/legacy/config.txt b/config/legacy/config.txt index 6f000ec3730..b0484237cd8 100644 --- a/config/legacy/config.txt +++ b/config/legacy/config.txt @@ -319,9 +319,6 @@ REQ_CULT_GHOSTWRITER 6 ## Sets the number of available character slots CHARACTER_SLOTS 64 -## Sets the number of loadout slots per character -LOADOUT_SLOTS 3 - ## Uncomment to use overmap system for zlevel travel #USE_OVERMAP diff --git a/code/modules/preferences/preference_setup/loadout/loadout_donator.dm b/donator/legacy.dm similarity index 76% rename from code/modules/preferences/preference_setup/loadout/loadout_donator.dm rename to donator/legacy.dm index 713e7f60164..0e7f1611a47 100644 --- a/code/modules/preferences/preference_setup/loadout/loadout_donator.dm +++ b/donator/legacy.dm @@ -1,277 +1,277 @@ -/datum/gear/donator - sort_category = LOADOUT_CATEGORY_DONATOR +/datum/loadout_entry/donator + category = LOADOUT_CATEGORY_DONATOR cost = 0 // If they went out of their way to PAY for a custom item, given our no-gameplay-advantage-granting-items rule, 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.") //If it does, then that means somebody fucked up the whitelist system pretty hard /* -/datum/gear/donator/testhorn +/datum/loadout_entry/donator/testhorn name = "Airhorn - Example Item" path = /obj/item/bikehorn ckeywhitelist = list("realdonaldtrump") */ -/datum/gear/donator/gladiator +/datum/loadout_entry/donator/gladiator name = "Gladiator Armor" slot = SLOT_ID_SUIT path = /obj/item/clothing/under/gladiator ckeywhitelist = list("aroche") -/datum/gear/donator/stool +/datum/loadout_entry/donator/stool name = "Faiza's Stool" slot = SLOT_ID_SUIT path = /obj/item/melee/stool/faiza ckeywhitelist = list("crystal9156") -/datum/gear/donator/chayse +/datum/loadout_entry/donator/chayse name = "NTSC Naval Uniform" slot = SLOT_ID_UNIFORM path = /obj/item/clothing/under/donator/chayse ckeywhitelist = list("realdonaldtrump", "aaronskywalker") -/datum/gear/donator/labredblack +/datum/loadout_entry/donator/labredblack name = "Black and Red Coat" slot = SLOT_ID_SUIT path = /obj/item/clothing/suit/storage/toggle/labcoat/donator/labredblack ckeywhitelist = list("blakeryan", "durandalphor") -/datum/gear/donator/carrotsatchel +/datum/loadout_entry/donator/carrotsatchel name = "Carrot Satchel" slot = SLOT_ID_BACK path = /obj/item/storage/backpack/satchel/donator/carrot ckeywhitelist = list("improvedname") -/datum/gear/donator/stripedcollar +/datum/loadout_entry/donator/stripedcollar name = "Striped collar" slot = /datum/inventory_slot_meta/abstract/attach_as_accessory path = /obj/item/clothing/accessory/collar/donator/striped ckeywhitelist = list("jademanique") -/datum/gear/donator/cameronbackpack +/datum/loadout_entry/donator/cameronbackpack name = "Brig Physician's Backpack" slot = SLOT_ID_BACK path = /obj/item/storage/backpack/satchel/donator/cameron ckeywhitelist = list("cameronlancaster") -/datum/gear/donator/cameronarmor +/datum/loadout_entry/donator/cameronarmor name = "Brig Physician's Armor Vest" slot = SLOT_ID_SUIT path = /obj/item/clothing/suit/armor/vest/donator/cameron ckeywhitelist = list("cameronlancaster") -/datum/gear/donator/crown +/datum/loadout_entry/donator/crown name = "Crown" slot = SLOT_ID_HEAD path = /obj/item/clothing/accessory/collar/donator/crown ckeywhitelist = list("grayrachnid") -/datum/gear/donator/beesuit +/datum/loadout_entry/donator/beesuit name = "Bee Suit" slot = SLOT_ID_HEAD path = /obj/item/clothing/suit/storage/hooded/donator/bee_costume ckeywhitelist = list("beeskee") -/datum/gear/donator/rarehat +/datum/loadout_entry/donator/rarehat name = "Ultra Rare Hat" slot = SLOT_ID_HEAD path = /obj/item/clothing/head/collectable/petehat ckeywhitelist = list("risingstarslash") -/datum/gear/donator/holotags +/datum/loadout_entry/donator/holotags name = "USDF Holotags" description = "United Sol Defense Force issued ID, Belonging to Nikolai Volkov, DOB 12/12/2537, Blood Type O+" path = /obj/item/clothing/accessory/collar/donator/holotags ckeywhitelist = list("certifiedhyena") -/datum/gear/donator/silverhelmet +/datum/loadout_entry/donator/silverhelmet name = "Silver's Helmet" slot = SLOT_ID_HEAD path = /obj/item/reskin_kit/jenna ckeywhitelist = list("jennasilver") -/datum/gear/donator/izzyball +/datum/loadout_entry/donator/izzyball name = "Katlin's Ball" path = /obj/item/toy/tennis/rainbow/izzy ckeywhitelist = list("izzyinbox") -/datum/gear/donator/pduni +/datum/loadout_entry/donator/pduni name = "Olympius PD Service Uniform" path = /obj/item/clothing/under/donator/opd ckeywhitelist = list("hungrycricket") -/datum/gear/donator/mewchild +/datum/loadout_entry/donator/mewchild name = "Bone Signet Ring" path = /obj/item/clothing/gloves/ring/seal/signet/fluff/vietsi ckeywhitelist = list("mewchild") -/datum/gear/donator/stunsword +/datum/loadout_entry/donator/stunsword name = "Stunsword kit" path = /obj/item/reskin_kit/stunsword ckeywhitelist = list("phillip458") -/datum/gear/donator/redlensmask +/datum/loadout_entry/donator/redlensmask name = "Red-Lensed Gas Mask" path = /obj/item/clothing/mask/red_mask ckeywhitelist = list("figneugen") -/datum/gear/donator/blackredgold +/datum/loadout_entry/donator/blackredgold name = "Black, Red, and Gold Coat" path = /obj/item/clothing/suit/storage/toggle/labcoat/donator/blackredgold ckeywhitelist = list("ttbnc") -/datum/gear/donator/hoodedlcoak +/datum/loadout_entry/donator/hoodedlcoak name = "Project: Zul-E" path = /obj/item/clothing/suit/storage/hooded/donator/hooded_cloak ckeywhitelist = list("asky") -/datum/gear/donator/pinklatex +/datum/loadout_entry/donator/pinklatex name = "Pink Latex" path = /obj/item/clothing/under/donator/pinksuit ckeywhitelist = list("tippler") -/datum/gear/donator/peltcloak +/datum/loadout_entry/donator/peltcloak name = "Pelt Cloak" path = /obj/item/clothing/accessory/poncho/roles/cloak/peltcloak ckeywhitelist = list("irkallaepsilon") -/datum/gear/donator/doubleglasses +/datum/loadout_entry/donator/doubleglasses name = "Double Sunglasses" path = /obj/item/clothing/glasses/sunglasses/double ckeywhitelist = list("jglitch") -/datum/gear/donator/huni +/datum/loadout_entry/donator/huni name = "KHI Uniform" path = /obj/item/clothing/under/donator/huni ckeywhitelist = list("certifiedhyena") -/datum/gear/donator/hberet +/datum/loadout_entry/donator/hberet name = "USDF Beret" path = /obj/item/clothing/head/donator/hberet ckeywhitelist = list("certifiedhyena") -/datum/gear/donator/jacksonb +/datum/loadout_entry/donator/jacksonb name = "Granite Gear Aid Bag" path = /obj/item/storage/backpack/satchel/donator/jacksonbackpack ckeywhitelist = list("vfivesix") -/datum/gear/donator/carcharodon +/datum/loadout_entry/donator/carcharodon name = "Carcharodon Suit" path = /obj/item/clothing/under/carcharodon ckeywhitelist = list("desucake") -/datum/gear/donator/mantleofheaven +/datum/loadout_entry/donator/mantleofheaven name = "Mantle of the Heavens" path = /obj/item/clothing/under/mantleofheaven ckeywhitelist = list("hjorthorn") -/datum/gear/donator/kepytw +/datum/loadout_entry/donator/kepytw name = "Teshari Hatchling Care Kit" path = /obj/item/toy/kepytw ckeywhitelist = list("kepytw") -/datum/gear/donator/chaoterobe +/datum/loadout_entry/donator/chaoterobe name = "Chaote Robe" path = /obj/item/clothing/suit/storage/hooded/techpriest/chaos ckeywhitelist = list("loburd") -/datum/gear/donator/veterancargoarmband +/datum/loadout_entry/donator/veterancargoarmband name = "Veteran's Cargo Armband" path = /obj/item/clothing/accessory/armband/veterancargo ckeywhitelist = list("yourdoom9898") -/datum/gear/donator/customcamcorder +/datum/loadout_entry/donator/customcamcorder name = "Prop Video Recorder" path = /obj/item/faketvcamera ckeywhitelist = list("fauxmagician") -/datum/gear/donator/mikubikini +/datum/loadout_entry/donator/mikubikini name = "starlight singer bikini" path = /obj/item/clothing/under/donator/mikubikini ckeywhitelist = list("grandvegeta") -/datum/gear/donator/mikujacket +/datum/loadout_entry/donator/mikujacket name = "starlight singer jacket" path = /obj/item/clothing/suit/donator/mikujacket ckeywhitelist = list("grandvegeta") -/datum/gear/donator/mikuhair +/datum/loadout_entry/donator/mikuhair name = "starlight singer hair" path = /obj/item/clothing/head/donator/mikuhair ckeywhitelist = list("grandvegeta") -/datum/gear/donator/mikugloves +/datum/loadout_entry/donator/mikugloves name = "starlight singer gloves" path = /obj/item/clothing/gloves/donator/mikugloves ckeywhitelist = list("grandvegeta") -/datum/gear/donator/mikuleggings +/datum/loadout_entry/donator/mikuleggings name = "starlight singer leggings" path = /obj/item/clothing/shoes/donator/mikuleggings ckeywhitelist = list("grandvegeta") -/datum/gear/donator/iaccmask +/datum/loadout_entry/donator/iaccmask name = "orchid's mask" path = /obj/item/clothing/mask/gas/orchid ckeywhitelist = list("iamcrystalclear") -/datum/gear/donator/vicase +/datum/loadout_entry/donator/vicase name = "VI's secure briefcase" path = /obj/item/storage/secure/briefcase/vicase ckeywhitelist = list("capesh") -/datum/gear/donator/aura +/datum/loadout_entry/donator/aura name = "KNIGHT-brand Melodic headset" path = /obj/item/radio/headset/speak_n_rock/aura ckeywhitelist = list("theknightofaura") -/datum/gear/donator/dancer_scarf +/datum/loadout_entry/donator/dancer_scarf name = "belly dancer headscarf" path = /obj/item/clothing/head/donator/dancer ckeywhitelist = list("phishman") -/datum/gear/donator/dancer_veil +/datum/loadout_entry/donator/dancer_veil name = "belly dancer veil" path = /obj/item/clothing/mask/donator/dancer ckeywhitelist = list("phishman") -/datum/gear/donator/dancer_gloves +/datum/loadout_entry/donator/dancer_gloves name = "belly dancer sleeves" path = /obj/item/clothing/gloves/donator/dancer ckeywhitelist = list("phishman") -/datum/gear/donator/dancer_costume +/datum/loadout_entry/donator/dancer_costume name = "belly dancer costume" path = /obj/item/clothing/under/donator/dancer ckeywhitelist = list("phishman") -/datum/gear/donator/dancer_wraps +/datum/loadout_entry/donator/dancer_wraps name = "belly dancer footwraps" path = /obj/item/clothing/shoes/donator/dancer ckeywhitelist = list("phishman") -/datum/gear/donator/iacccoat +/datum/loadout_entry/donator/iacccoat name = "connor's coat" path = /obj/item/clothing/suit/storage/umbral ckeywhitelist = list("iamcrystalclear") -/datum/gear/suit/pariah +/datum/loadout_entry/suit/pariah name = "springtime pariah moto jacket" path = /obj/item/clothing/suit/storage/toggle/heated/pariah ckeywhitelist = list("rezbit") -/datum/gear/suit/mindelectric +/datum/loadout_entry/suit/mindelectric name = "「 The Mind Electric 」" path = /obj/item/clothing/suit/storage/mindelectric ckeywhitelist = list("lectronyx") -/datum/gear/donator/tajcigarcase +/datum/loadout_entry/donator/tajcigarcase name = "S'rendarr's Hand case" path = /obj/item/storage/fancy/cigar/taj ckeywhitelist = list("vailthewolf") -/datum/gear/donator/noahcloak +/datum/loadout_entry/donator/noahcloak name = "Noah's Cloak" path = /obj/item/clothing/suit/storage/hooded/donatornoahcloak ckeywhitelist = list("rainbyplays") diff --git a/donator/unclebourbon/pmc_mask.dm b/donator/unclebourbon/pmc_mask.dm index 71a29cccfdf..1cb54e2ce0e 100644 --- a/donator/unclebourbon/pmc_mask.dm +++ b/donator/unclebourbon/pmc_mask.dm @@ -7,7 +7,7 @@ inhand_default_type = INHAND_DEFAULT_ICON_MASKS inhand_state = "swat" -/datum/gear/donator/unclebourbon_pmcmask +/datum/loadout_entry/donator/unclebourbon_pmcmask name = "PMC Mask" slot = SLOT_ID_MASK path = /obj/item/clothing/mask/gas/clear/donator_pmc diff --git a/tgui/docs/component-reference.md b/tgui/docs/component-reference.md index f1a277c1b01..61ce829a88c 100644 --- a/tgui/docs/component-reference.md +++ b/tgui/docs/component-reference.md @@ -322,6 +322,7 @@ toggle, closed by default. **Props:** - See inherited props: [Box](#box) +- `captureKeys: boolean` - Should we capture keys to open/close? - `children: any` - What is collapsed when closed - `title: string` - Text to display on the button for collapsing - `color: string` - Color of the button; see [Button](#button) diff --git a/tgui/packages/common/color.spec.ts b/tgui/packages/common/color.spec.ts new file mode 100644 index 00000000000..cfb5a868399 --- /dev/null +++ b/tgui/packages/common/color.spec.ts @@ -0,0 +1,31 @@ +import { DecodeRGBString, EncodeRGBAString, EncodeRGBString, HSVtoRGB, RGBtoHSV } from "./color"; + +describe("RGBtoHSV", () => { + test("RGB2HSV", () => { + expect(RGBtoHSV(125, 179, 128).map((n) => Math.round(n))).toEqual([123, 30, 70]); + }); +}); + +describe("HSVtoRGB", () => { + test("HSVtoRGB", () => { + expect(HSVtoRGB(123, 30, 70).map((n) => Math.round(n))).toEqual([125, 179, 128]); + }); +}); + +describe("DecodeRGBString", () => { + test("DecodeRGBString", () => { + expect(DecodeRGBString("#abcdef40").map((n) => Math.round(n))).toEqual([171, 205, 239, 64]); + }); +}); + +describe("EncodeRGBString", () => { + test("EncodeRGBString", () => { + expect(EncodeRGBString(171, 205, 239, true)).toEqual("#abcdef"); + }); +}); + +describe("EncodeRGBAString", () => { + test("EncodeRGBAString", () => { + expect(EncodeRGBAString(171, 205, 239, 64, true)).toEqual("#abcdef40"); + }); +}); diff --git a/tgui/packages/common/color.ts b/tgui/packages/common/color.ts new file mode 100644 index 00000000000..7dcb175644f --- /dev/null +++ b/tgui/packages/common/color.ts @@ -0,0 +1,158 @@ +/** + * decodes RGB(A) string; output values are 0 to 255 + * alpha defualts to max if it isn't in the string + * + * @param str - rgb string, as #abc or #aabbcc or abc or aabbcc + */ +export const DecodeRGBString = (str: string): [number, number, number, number] => { + let strLen = str.length; + // get rid of everything and ensure RRGGBBAA format. + switch (strLen) { + case 3: + str = `${str[0]}${str[0]}${str[1]}${str[1]}${str[2]}${str[2]}ff`; + break; + case 4: + if (str[0] !== "#") { + throw new Error("unexepected string without #"); + } + str = `${str[1]}${str[1]}${str[2]}${str[2]}${str[3]}${str[3]}ff`; + break; + case 7: + if (str[0] !== "#") { + throw new Error("unexepected string without #"); + } + str = str.substring(1); + break; + case 9: + if (str[0] !== "#") { + throw new Error("unexepected string without #"); + } + str = str.substring(1); + break; + default: + throw new Error("unexpected string length"); + } + // convert to upper + str = str.toUpperCase(); + // sanitize string + for (let i = 0; i < 8; ++i) { + let char = str.charCodeAt(i); + if ((char < 48 || char > 57) && (char < 65 || char > 70)) { + throw new Error(`unexpected char ${str.charAt(i)} at position ${i}}`); + } + } + // get values + let rCode1 = str.charCodeAt(0); + let rCode2 = str.charCodeAt(1); + let gCode1 = str.charCodeAt(2); + let gCode2 = str.charCodeAt(3); + let bCode1 = str.charCodeAt(4); + let bCode2 = str.charCodeAt(5); + let aCode1 = str.charCodeAt(6); + let aCode2 = str.charCodeAt(7); + return [ + (rCode1 > 57? rCode1 - (7 + 48) : rCode1 - (48)) * 16 + (rCode2 > 57? rCode2 - (7 + 48) : rCode2 - (48)), + (gCode1 > 57? gCode1 - (7 + 48) : gCode1 - (48)) * 16 + (gCode2 > 57? gCode2 - (7 + 48) : gCode2 - (48)), + (bCode1 > 57? bCode1 - (7 + 48) : bCode1 - (48)) * 16 + (bCode2 > 57? bCode2 - (7 + 48) : bCode2 - (48)), + (aCode1 > 57? aCode1 - (7 + 48) : aCode1 - (48)) * 16 + (aCode2 > 57? aCode2 - (7 + 48) : aCode2 - (48)), + ]; +}; + +/** + * inputs are 0 to 255. + * + * @param r + * @param g + * @param b + * @param includeHash + */ +export const EncodeRGBString = (r: number, g: number, b: number, includeHash: boolean): string => { + return `${includeHash && "#"}${Math.round(r).toString(16).padStart(2, "0")}${Math.round(g).toString(16).padStart(2, "0")}${Math.round(b).toString(16).padStart(2, "0")}`; +}; + +/** + * inputs are 0 to 255. + * + * @param r + * @param g + * @param b + * @param includeHash + */ +export const EncodeRGBAString = (r: number, g: number, b: number, a: number, includeHash: boolean): string => { + return `${includeHash && "#"}${Math.round(r).toString(16).padStart(2, "0")}${Math.round(g).toString(16).padStart(2, "0")}${Math.round(b).toString(16).padStart(2, "0")}${Math.round(a).toString(16).padStart(2, "0")}`; +}; + +/** + * HSV to RGB + * + * input are H: 0 to 360, S: 0 to 100, V: 0 to 100 + * output are 0 to 255 + */ +export const HSVtoRGB = (h: number, s: number, v: number): [number, number, number] => { + s = s / 100; + v = v / 100; + let c = v * s; + let x = c * (1 - Math.abs(((h / 60) % 2) - 1)); + let m = v - c; + let r = 0; + let g = 0; + let b = 0; + if (h < 60) { + r = c; + g = x; + } + else if (h <= 120) { + r = x; + g = c; + } + else if (h <= 180) { + g = c; + b = x; + } + else if (h <= 240) { + g = x; + b = c; + } + else if (h <= 300) { + r = x; + b = c; + } + else if (h <= 360) { + r = c; + b = x; + } + return [(r + m) * 255, (g + m) * 255, (b + m) * 255]; +}; + +/** + * RGB to HSV + * + * input are 0 to 255 + * output are H: 0 to 360, S: 0 to 100, V: 0 to 100 + */ +export const RGBtoHSV = (r: number, g: number, b: number): [number, number, number] => { + r = r / 255; + g = g / 255; + b = b / 255; + let cMax = Math.max(r, g, b); + let cMin = Math.min(r, g, b); + let delta = cMax - cMin; + let h; + if (delta === 0) { + h = 0; + } + else if (cMax === r) { + h = (60 * ((g - b) / delta) + 360) % 360; + } + else if (cMax === g) { + h = (60 * ((b - r) / delta) + 120) % 360; + } + else if (cMax === b) { + h = (60 * ((r - g) / delta) + 240) % 360; + } + else { + throw new Error("Neither R nor G nor B matched cMax and Delta is nonzero."); + } + let s = cMax === 0? 0 : delta / cMax; + return [h, s * 100, cMax * 100]; +}; diff --git a/tgui/packages/common/color.js b/tgui/packages/common/colorLegacy.js similarity index 100% rename from tgui/packages/common/color.js rename to tgui/packages/common/colorLegacy.js diff --git a/tgui/packages/tgui-panel/ping/PingIndicator.js b/tgui/packages/tgui-panel/ping/PingIndicator.js index b663cd3a180..86751dc7214 100644 --- a/tgui/packages/tgui-panel/ping/PingIndicator.js +++ b/tgui/packages/tgui-panel/ping/PingIndicator.js @@ -4,7 +4,7 @@ * @license MIT */ -import { Color } from 'common/color'; +import { Color } from 'common/colorLegacy'; import { toFixed } from 'common/math'; import { useSelector } from 'common/redux'; import { Box } from 'tgui/components'; diff --git a/tgui/packages/tgui/components/Box.tsx b/tgui/packages/tgui/components/Box.tsx index 6fcd6eb75bb..f5503e5482f 100644 --- a/tgui/packages/tgui/components/Box.tsx +++ b/tgui/packages/tgui/components/Box.tsx @@ -57,6 +57,7 @@ export type BoxProps = ComponentProps & { textColor?: string | BooleanLike; backgroundColor?: string | BooleanLike; fillPositionedParent?: BooleanLike; + style?: CSSProperties; } /** diff --git a/tgui/packages/tgui/components/Collapsible.tsx b/tgui/packages/tgui/components/Collapsible.tsx index 6f5ca186ecc..91f411e65c5 100644 --- a/tgui/packages/tgui/components/Collapsible.tsx +++ b/tgui/packages/tgui/components/Collapsible.tsx @@ -14,6 +14,7 @@ interface CollapsibleProps extends BoxProps { color?: string; title?: string | InfernoNode; open?: BooleanLike; + captureKeys?: BooleanLike; } interface CollapsibleState { @@ -50,6 +51,7 @@ export class Collapsible extends Component {
+ + + ); + } +} diff --git a/tgui/packages/tgui/interfaces/ChemMaster.tsx b/tgui/packages/tgui/interfaces/ChemMaster.tsx index 7f594ef85a8..5057e6de464 100644 --- a/tgui/packages/tgui/interfaces/ChemMaster.tsx +++ b/tgui/packages/tgui/interfaces/ChemMaster.tsx @@ -1,4 +1,4 @@ -import { Color } from '../../common/color'; +import { Color } from '../../common/colorLegacy'; import { useBackend, useSharedState } from '../backend'; import { AnimatedNumber, Box, Button, ColorBox, LabeledList, NumberInput, Section, Table } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/ChemPrimi.tsx b/tgui/packages/tgui/interfaces/ChemPrimi.tsx index f001e87d3b4..68a85514abb 100644 --- a/tgui/packages/tgui/interfaces/ChemPrimi.tsx +++ b/tgui/packages/tgui/interfaces/ChemPrimi.tsx @@ -1,4 +1,4 @@ -import { Color } from '../../common/color'; +import { Color } from '../../common/colorLegacy'; import { useBackend } from '../backend'; import { AnimatedNumber, Box, Button, Section, Table } from '../components'; import { Window } from '../layouts'; diff --git a/tgui/packages/tgui/interfaces/common/Color.tsx b/tgui/packages/tgui/interfaces/common/Color.tsx new file mode 100644 index 00000000000..b61aa1d5136 --- /dev/null +++ b/tgui/packages/tgui/interfaces/common/Color.tsx @@ -0,0 +1,472 @@ +import { DecodeRGBString, EncodeRGBAString, EncodeRGBString, HSVtoRGB, RGBtoHSV } from "common/color"; +import { round } from "common/math"; +import { Component } from "inferno"; +import { Box, ColorBox, Input, NumberInput, Slider, Stack, Table, Tabs } from "../../components"; +import { BoxProps } from "../../components/Box"; + +// full, 20-value RGBA matrix with constants +export type ByondColorMatrixRGBAC = [ + number, number, number, number, + number, number, number, number, + number, number, number, number, + number, number, number, number, + number, number, number, number, +]; + +export const IdentityByondMatrixRGBAC = (): ByondColorMatrixRGBAC => { + return [ + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1, + 0, 0, 0, 0, + ]; +}; + +// partial, 16-value RGBA matrix without constants +export type ByondColorMatrixRGBA = [ + number, number, number, number, + number, number, number, number, + number, number, number, number, + number, number, number, number, +]; + +export const IdentityByondMatrixRGBA = (): ByondColorMatrixRGBA => { + return [ + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1, + ]; +}; + +// full, 12-value RGB matrix with constants +export type ByondColorMatrixRGBC = [ + number, number, number, + number, number, number, + number, number, number, + number, number, number, +]; + +export const IdentityByondMatrixRGBC = (): ByondColorMatrixRGBC => { + return [ + 1, 0, 0, + 0, 1, 0, + 0, 0, 1, + 0, 0, 0, + ]; +}; + +// full, 20-value matrix +export type ByondColorMatrixRGB = [ + number, number, number, + number, number, number, + number, number, number, +]; + +export const IdentityByondMatrixRGB = (): ByondColorMatrixRGB => { + return [ + 1, 0, 0, + 0, 1, 0, + 0, 0, 1, + ]; +}; + +// RGB or RGBA string, usually used to do color multiply operations / set color vars. +export type ByondColorString = string; + +export type ByondColorMatrix = + ByondColorMatrixRGB | + ByondColorMatrixRGBA | + ByondColorMatrixRGBAC | + ByondColorMatrixRGBC; + +// byond color var compatible +export type ByondAtomColor = + ByondColorString | + ByondColorMatrixRGB | + ByondColorMatrixRGBA | + ByondColorMatrixRGBAC | + ByondColorMatrixRGBC; + +interface ColorPickerProps extends BoxProps { + allowMatrix?: boolean; + allowAlpha?: boolean; + currentColor: ByondAtomColor; + setColor: (ByondAtomColor) => void; +} + +interface ColorPickerState { + mode: ColorPickerMode; + cRed: number; + cGreen: number; + cBlue: number; + cAlpha: number; + cMatrix: ByondColorMatrixRGBAC; +} + +enum ColorPickerMode { + Normal = 0, + Matrix = 1, +} + +export const ConvertByondColorMatrixRGBACToRGBC = ( + matrix: ByondColorMatrixRGBAC +): ByondColorMatrixRGBC => { + return [ + matrix[0], matrix[1], matrix[2], + matrix[4], matrix[5], matrix[6], + matrix[8], matrix[9], matrix[10], + matrix[16], matrix[17], matrix[18], + ]; +}; + +export const ConvertByondColorMatrixtoRGBAC = ( + matrix: ByondColorMatrixRGB | ByondColorMatrixRGBA | ByondColorMatrixRGBAC | ByondColorMatrixRGBC) + : ByondColorMatrixRGBAC => { + switch (matrix.length) { + case 9: + return [ + matrix[0], + matrix[1], + matrix[2], + 0, + matrix[3], + matrix[4], + matrix[5], + 0, + matrix[6], + matrix[7], + matrix[8], + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + ]; + case 12: + return [ + matrix[0], + matrix[1], + matrix[2], + 0, + matrix[3], + matrix[4], + matrix[5], + 0, + matrix[6], + matrix[7], + matrix[8], + 0, + 0, + 0, + 0, + 1, + matrix[9], + matrix[10], + matrix[11], + 0, + ]; + case 16: + matrix = matrix.slice() as ByondColorMatrixRGBA; + matrix.push(0, 0, 0, 0); + return matrix as unknown as ByondColorMatrixRGBAC; + case 20: + return matrix; + default: + throw new Error("invalid matrix length"); + } +}; + +export class ColorPicker extends Component { + assembleState = (): ColorPickerState => { + if ((typeof this.props.currentColor) !== 'string') { + // matrix + return { + mode: ColorPickerMode.Matrix, + cRed: 255, + cGreen: 255, + cBlue: 255, + cAlpha: 255, + cMatrix: ConvertByondColorMatrixtoRGBAC(this.props.currentColor as ByondColorMatrix), + }; + } + else { + // string + let [r, g, b, a] = DecodeRGBString(this.props.currentColor as string); + return { + mode: ColorPickerMode.Normal, + cRed: r, + cGreen: g, + cBlue: b, + cAlpha: a, + cMatrix: IdentityByondMatrixRGBAC(), + }; + } + throw new Error("not matrix or string"); + }; + + state: ColorPickerState = this.assembleState(); + + render() { + let colorAsString = () => this.props.allowAlpha ? EncodeRGBAString( + this.state.cRed, + this.state.cGreen, + this.state.cBlue, + this.state.cAlpha, + true) : EncodeRGBString( + this.state.cRed, + this.state.cGreen, + this.state.cBlue, + true); + let [cHue, cSat, cVal] = RGBtoHSV(this.state.cRed, this.state.cGreen, this.state.cBlue).map((n) => round(n, 2)); + return ( + + + + { + this.setState((prev) => ({ ...prev, mode: ColorPickerMode.Normal })); + this.props.setColor( + this.props.allowAlpha + ? EncodeRGBAString(this.state.cRed, this.state.cGreen, this.state.cBlue, this.state.cAlpha, true) + : EncodeRGBString(this.state.cRed, this.state.cGreen, this.state.cBlue, true)); + }}>Basic + + { + this.setState((prev) => ({ ...prev, mode: ColorPickerMode.Matrix })); + this.props.setColor(this.state.cMatrix); + }}>Matrix + + + + {this.state.mode === ColorPickerMode.Normal && ( + + + + + + Red + { + this.setState((prev) => ({ + ...prev, + cRed: val, + })); + this.props.setColor(colorAsString()); + }} /> + + + Green + { + this.setState((prev) => ({ + ...prev, + cGreen: val, + })); + this.props.setColor(colorAsString()); + }} /> + + + Blue + { + this.setState((prev) => ({ + ...prev, + cBlue: val, + })); + this.props.setColor(colorAsString()); + }} /> + + + + + + + Hue + { + let [r, g, b] = HSVtoRGB(val, cSat, cVal).map((n) => round(n, 2)); + this.setState((prev) => ({ + ...prev, + cRed: r, + cGreen: g, + cBlue: b, + })); + this.props.setColor(colorAsString()); + }} /> + + + Saturation + { + let [r, g, b] = HSVtoRGB(cHue, val, cVal).map((n) => round(n, 2)); + this.setState((prev) => ({ + ...prev, + cRed: r, + cGreen: g, + cBlue: b, + })); + this.props.setColor(colorAsString()); + }} /> + + + Value + { + let [r, g, b] = HSVtoRGB(cHue, cSat, val).map((n) => round(n, 2)); + this.setState((prev) => ({ + ...prev, + cRed: r, + cGreen: g, + cBlue: b, + })); + this.props.setColor(colorAsString()); + }} /> + + + + + + {this.props.allowAlpha && ( + + Alpha + { + this.setState((prev) => ({ + ...prev, + cAlpha: val, + })); + this.props.setColor(colorAsString()); + }} /> + + )} + + { + try { + let [r, g, b, a] = DecodeRGBString(val); + this.setState((prev) => ({ + ...prev, + cAlpha: a, + cRed: r, + cBlue: b, + cGreen: g, + })); + this.props.setColor(val); + } + finally {} + }} width="90px" /> + + + + + + + + + )} + {this.state.mode === ColorPickerMode.Matrix && ( + + { + this.props.allowAlpha? [ + ["RR", "RG", "RB", "RA"], + ["GR", "GG", "GB", "GA"], + ["BR", "BG", "BB", "BA"], + ["AR", "AG", "AB", "AA"], + ["CR", "CG", "CB", "CA"], + ].map((arr, i1) => ( + + {arr.map((l, i2) => { + let ifull = (i1 * 4) + (i2); + return ( + + {l}: { + this.setState((prev) => { + let modified = prev.cMatrix.slice(); + modified[ifull] = val; + return { + ...prev, + cMatrix: modified as ByondColorMatrixRGBAC, + }; + }); + this.props.setColor(this.state.cMatrix); + }} /> + + ); })} + + )) : [ + ["RR", "RG", "RB"], + ["GR", "GG", "GB"], + ["BR", "BG", "BB"], + ["CR", "CG", "CB"], + ].map((arr, i1) => ( + + {arr.map((l, i2) => { + let ifull = ((i1 === 3? 4 : i1) * 4) + (i2); + return ( + + {l}: { + this.setState((prev) => { + let modified = prev.cMatrix.slice(); + modified[ifull] = val; + return { + ...prev, + cMatrix: modified as ByondColorMatrixRGBAC, + }; + }); + this.props.setColor(ConvertByondColorMatrixRGBACToRGBC(this.state.cMatrix)); + }} /> + + ); })} + + )) + } +
+ )} +
+
+
+ ); + } +}