From 5a355914fcf06f1c13a849851220c72a9dd04655 Mon Sep 17 00:00:00 2001 From: Alberyk Date: Sun, 29 Jan 2017 17:52:09 -0200 Subject: [PATCH] Port bay newest loadout system (#1648) -ports bay newest loadout system, which is pretty much a tab of their own, with different sections instead of a single list -adds code that allows for several tweaks of custom loadout, like color, item path and contents -adds dumb lunchboxes that can be filled with some food selection -adds the option to select pre-filled vacuum-flasks or flasks -also tries to fix the issues with xeno gear again --- baystation12.dme | 18 +- code/game/jobs/job_controller.dm | 17 +- .../objects/items/weapons/storage/toolbox.dm | 77 + code/modules/client/client procs.dm | 2 + .../preference_setup/general/04_equipment.dm | 84 +- .../preference_setup/loadout/gear_tweaks.dm | 145 ++ .../preference_setup/loadout/loadout.dm | 228 +++ .../loadout/loadout_accessories.dm | 69 + .../loadout/loadout_cosmetics.dm | 21 + .../preference_setup/loadout/loadout_ears.dm | 19 + .../preference_setup/loadout/loadout_eyes.dm | 50 + .../loadout/loadout_general.dm | 69 + .../loadout/loadout_gloves.dm | 25 + .../preference_setup/loadout/loadout_head.dm | 113 ++ .../preference_setup/loadout/loadout_mask.dm | 5 + .../preference_setup/loadout/loadout_shoes.dm | 45 + .../loadout/loadout_smoking.dm | 27 + .../preference_setup/loadout/loadout_suit.dm | 129 ++ .../loadout/loadout_uniform.dm | 150 ++ .../loadout/loadout_utility.dm | 55 + .../preference_setup/loadout/loadout_xeno.dm | 108 ++ .../preference_setup/preference_setup.dm | 5 + code/modules/client/preferences_gear.dm | 1546 ----------------- .../reagents/reagent_containers/food/lunch.dm | 123 ++ html/changelogs/alberky-PR-1648.yml | 9 + icons/obj/lunchbox.dmi | Bin 0 -> 2640 bytes 26 files changed, 1505 insertions(+), 1634 deletions(-) create mode 100644 code/modules/client/preference_setup/loadout/gear_tweaks.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_accessories.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_cosmetics.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_ears.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_eyes.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_general.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_gloves.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_head.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_mask.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_shoes.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_smoking.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_suit.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_uniform.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_utility.dm create mode 100644 code/modules/client/preference_setup/loadout/loadout_xeno.dm delete mode 100644 code/modules/client/preferences_gear.dm create mode 100644 code/modules/reagents/reagent_containers/food/lunch.dm create mode 100644 html/changelogs/alberky-PR-1648.yml create mode 100644 icons/obj/lunchbox.dmi diff --git a/baystation12.dme b/baystation12.dme index 54912bc34eb..cae3ef936f8 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1025,7 +1025,6 @@ #include "code\modules\client\preferences.dm" #include "code\modules\client\preferences_ambience.dm" #include "code\modules\client\preferences_factions.dm" -#include "code\modules\client\preferences_gear.dm" #include "code\modules\client\preferences_notification.dm" #include "code\modules\client\preferences_savefile.dm" #include "code\modules\client\preferences_spawnpoints.dm" @@ -1045,6 +1044,22 @@ #include "code\modules\client\preference_setup\global\02_settings.dm" #include "code\modules\client\preference_setup\global\03_language.dm" #include "code\modules\client\preference_setup\global\04_pai.dm" +#include "code\modules\client\preference_setup\loadout\gear_tweaks.dm" +#include "code\modules\client\preference_setup\loadout\loadout.dm" +#include "code\modules\client\preference_setup\loadout\loadout_accessories.dm" +#include "code\modules\client\preference_setup\loadout\loadout_cosmetics.dm" +#include "code\modules\client\preference_setup\loadout\loadout_ears.dm" +#include "code\modules\client\preference_setup\loadout\loadout_eyes.dm" +#include "code\modules\client\preference_setup\loadout\loadout_general.dm" +#include "code\modules\client\preference_setup\loadout\loadout_gloves.dm" +#include "code\modules\client\preference_setup\loadout\loadout_head.dm" +#include "code\modules\client\preference_setup\loadout\loadout_mask.dm" +#include "code\modules\client\preference_setup\loadout\loadout_shoes.dm" +#include "code\modules\client\preference_setup\loadout\loadout_smoking.dm" +#include "code\modules\client\preference_setup\loadout\loadout_suit.dm" +#include "code\modules\client\preference_setup\loadout\loadout_uniform.dm" +#include "code\modules\client\preference_setup\loadout\loadout_utility.dm" +#include "code\modules\client\preference_setup\loadout\loadout_xeno.dm" #include "code\modules\client\preference_setup\occupation\occupation.dm" #include "code\modules\client\preference_setup\other\01_incidents.dm" #include "code\modules\client\preference_setup\skills\skills.dm" @@ -1820,6 +1835,7 @@ #include "code\modules\reagents\reagent_containers\food\cans.dm" #include "code\modules\reagents\reagent_containers\food\condiment.dm" #include "code\modules\reagents\reagent_containers\food\drinks.dm" +#include "code\modules\reagents\reagent_containers\food\lunch.dm" #include "code\modules\reagents\reagent_containers\food\sandwich.dm" #include "code\modules\reagents\reagent_containers\food\snacks.dm" #include "code\modules\reagents\reagent_containers\food\drinks\bottle.dm" diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index ccbae49934c..01f95d2a360 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -333,7 +333,7 @@ var/global/datum/controller/occupations/job_master else permitted = 1 - if(G.whitelisted && (G.whitelisted != H.species.name || !is_alien_whitelisted(H, G.whitelisted))) + if(G.whitelisted && !is_alien_whitelisted(H, all_species[G.whitelisted])) permitted = 0 if(!permitted) @@ -343,10 +343,11 @@ var/global/datum/controller/occupations/job_master if(G.slot && !(G.slot in custom_equip_slots)) // This is a miserable way to fix the loadout overwrite bug, but the alternative requires // adding an arg to a bunch of different procs. Will look into it after this merge. ~ Z + var/metadata = H.client.prefs.gear[G.display_name] if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head) custom_equip_leftovers += thing - else if(H.equip_to_slot_or_del(new G.path(H), G.slot)) - H << "Equipping you with [thing]!" + else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot)) + H << "Equipping you with \the [thing]!" custom_equip_slots.Add(G.slot) else custom_equip_leftovers.Add(thing) @@ -365,8 +366,9 @@ var/global/datum/controller/occupations/job_master if(G.slot in custom_equip_slots) spawn_in_storage += thing else - if(H.equip_to_slot_or_del(new G.path(H), G.slot)) - H << "Equipping you with [thing]!" + var/metadata = H.client.prefs.gear[G.display_name] + if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot)) + H << "Equipping you with \the [thing]!" custom_equip_slots.Add(G.slot) else spawn_in_storage += thing @@ -429,9 +431,10 @@ var/global/datum/controller/occupations/job_master if(!isnull(B)) for(var/thing in spawn_in_storage) - H << "Placing [thing] in your [B]!" + H << "Placing \the [thing] in your [B.name]!" var/datum/gear/G = gear_datums[thing] - new G.path(B) + var/metadata = H.client.prefs.gear[G.display_name] + G.spawn_item(B, metadata) else H << "Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug." diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 09ddfaea85b..0265f40d5ea 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -105,3 +105,80 @@ update_force() user.visible_message(span("danger", "[user] smashes the [src] into [M], causing it to break open and strew its contents across the area")) + +/obj/item/weapon/storage/toolbox/lunchbox + name = "rainbow lunchbox" + icon = 'icons/obj/lunchbox.dmi' + force = 3 + throwforce = 5 + contained_sprite = 1 + icon_state = "lunchbox_rainbow" + item_state = "lunchbox_rainbow" + desc = "A little lunchbox. This one is the colors of the rainbow." + attack_verb = list("lunched") + w_class = 3 + max_storage_space = 8 + var/filled = FALSE + +/obj/item/weapon/storage/toolbox/lunchbox/New() + ..() + if(filled) + var/list/lunches = lunchables_lunches() + var/lunch = lunches[pick(lunches)] + new lunch(src) + + var/list/snacks = lunchables_snacks() + var/snack = snacks[pick(snacks)] + new snack(src) + + var/list/drinks = lunchables_drinks() + var/drink = drinks[pick(drinks)] + new drink(src) + +/obj/item/weapon/storage/toolbox/lunchbox/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/heart + name = "heart lunchbox" + icon_state = "lunchbox_hearts" + item_state = "lunchbox_hearts" + desc = "A little lunchbox. This one has little hearts on it." + +/obj/item/weapon/storage/toolbox/lunchbox/heart/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/cat + name = "cat lunchbox" + icon_state = "lunchbox_cat" + item_state = "lunchbox_cat" + desc = "A little lunchbox. This one has a cat stamp on it." + +/obj/item/weapon/storage/toolbox/lunchbox/cat/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/nt + name = "NanoTrasen brand lunchbox" + icon_state = "lunchbox_nanotrasen" + item_state = "lunchbox_nanotrasen" + desc = "A little lunchbox. This one is branded with the NanoTrasen logo." + +/obj/item/weapon/storage/toolbox/lunchbox/nt/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/nymph + name = "\improper diona nymph lunchbox" + icon_state = "lunchbox_dionanymph" + item_state = "lunchbox_dionanymph" + desc = "A little lunchbox. This one has a diona nymph on the side." + +/obj/item/weapon/storage/toolbox/lunchbox/nymph/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/syndicate + name = "black and red lunchbox" + icon_state = "lunchbox_syndie" + item_state = "lunchbox_syndie" + desc = "A little lunchbox. This one is a sleek black and red." + +/obj/item/weapon/storage/toolbox/lunchbox/syndicate/filled + filled = TRUE diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index e1bce814e36..08bcb180119 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -278,6 +278,8 @@ prefs.last_id = computer_id //these are gonna be used for banning . = ..() //calls mob.Login() + + prefs.sanitize_preferences() if (byond_version < config.client_error_version) src << "Your version of BYOND is too old!" diff --git a/code/modules/client/preference_setup/general/04_equipment.dm b/code/modules/client/preference_setup/general/04_equipment.dm index 74c6ff7077a..2ceb8aea4d3 100644 --- a/code/modules/client/preference_setup/general/04_equipment.dm +++ b/code/modules/client/preference_setup/general/04_equipment.dm @@ -7,37 +7,31 @@ S["undershirt"] >> pref.undershirt S["socks"] >> pref.socks S["backbag"] >> pref.backbag - S["gear"] >> pref.gear /datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S) S["underwear"] << pref.underwear S["undershirt"] << pref.undershirt S["socks"] << pref.socks S["backbag"] << pref.backbag - S["gear"] << pref.gear /datum/category_item/player_setup_item/general/equipment/gather_load_query() - return list("ss13_characters" = list("vars" = list("underwear", "undershirt", "socks", "backbag", "gear"), "args" = list("id"))) + return list("ss13_characters" = list("vars" = list("underwear", "undershirt", "socks", "backbag"), "args" = list("id"))) /datum/category_item/player_setup_item/general/equipment/gather_load_parameters() return list(":id" = pref.current_character) /datum/category_item/player_setup_item/general/equipment/gather_save_query() - return list("ss13_characters" = list("underwear", "undershirt", "socks", "backbag", "gear", "id" = 1, "ckey" = 1)) + return list("ss13_characters" = list("underwear", "undershirt", "socks", "backbag", "id" = 1, "ckey" = 1)) /datum/category_item/player_setup_item/general/equipment/gather_save_parameters() - return list(":underwear" = pref.underwear, ":undershirt" = pref.undershirt, ":socks" = pref.socks, ":backbag" = pref.backbag, ":gear" = list2params(pref.gear), ":id" = pref.current_character, ":ckey" = pref.client.ckey) + return list(":underwear" = pref.underwear, ":undershirt" = pref.undershirt, ":socks" = pref.socks, ":backbag" = pref.backbag, ":id" = pref.current_character, ":ckey" = pref.client.ckey) /datum/category_item/player_setup_item/general/equipment/sanitize_character(var/sql_load = 0) if (sql_load) pref.backbag = text2num(pref.backbag) - pref.gear = params2list(pref.gear) pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag)) - if (!islist(pref.gear)) - pref.gear = list() - var/undies = get_undies() var/gender_socks = get_gender_socks() if(!get_key_by_value(undies, pref.underwear)) @@ -47,45 +41,14 @@ if(!get_key_by_value(gender_socks, pref.socks)) pref.socks = gender_socks[gender_socks[1]] - var/total_cost = 0 - for(var/gear_name in pref.gear) - if(!gear_datums[gear_name]) - pref.gear -= gear_name - else if(!(gear_name in valid_gear_choices())) - pref.gear -= gear_name - else - var/datum/gear/G = gear_datums[gear_name] - if(total_cost + G.cost > MAX_GEAR_COST) - pref.gear -= gear_name - else - total_cost += G.cost /datum/category_item/player_setup_item/general/equipment/content() - . += "Equipment Loadout:
" + . += "Equipment:
" . += "Underwear: [get_key_by_value(get_undies(),pref.underwear)]
" . += "Undershirt: [get_key_by_value(undershirt_t,pref.undershirt)]
" . += "Socks: [get_key_by_value(get_gender_socks(),pref.socks)]
" . += "Backpack Type: [backbaglist[pref.backbag]]
" - . += "
Custom Loadout:
" - 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 - . += "[pref.gear[i]] ([G.cost] points) Remove
" - - . += "Used: [total_cost] points." - else - . += "None." - - if(total_cost < MAX_GEAR_COST) - . += " Add" - if(pref.gear && pref.gear.len) - . += " Clear" - . += "
" /datum/category_item/player_setup_item/general/equipment/proc/get_undies() return pref.gender == MALE ? underwear_m : underwear_f @@ -93,17 +56,6 @@ /datum/category_item/player_setup_item/general/equipment/proc/get_gender_socks() return pref.gender == MALE ? socks_m : socks_f -/datum/category_item/player_setup_item/general/equipment/proc/valid_gear_choices(var/max_cost) - . = list() - var/mob/preference_mob = preference_mob() - for(var/gear_name in gear_datums) - var/datum/gear/G = gear_datums[gear_name] - if(G.whitelisted && !is_alien_whitelisted(preference_mob, G.whitelisted)) - continue - if(max_cost && G.cost > max_cost) - continue - . += gear_name - /datum/category_item/player_setup_item/general/equipment/OnTopic(var/href,var/list/href_list, var/mob/user) if(href_list["change_underwear"]) var/underwear_options = get_undies() @@ -131,32 +83,4 @@ pref.backbag = backbaglist.Find(new_backbag) return TOPIC_REFRESH - else if(href_list["add_loadout"]) - var/total_cost = 0 - for(var/gear_name in pref.gear) - if(gear_datums[gear_name]) - var/datum/gear/G = gear_datums[gear_name] - total_cost += G.cost - - var/choice = input(user, "Select gear to add:", "Character Preference") as null|anything in valid_gear_choices(MAX_GEAR_COST - total_cost) - if(choice && gear_datums[choice] && CanUseTopic(user)) - var/datum/gear/C = gear_datums[choice] - total_cost += C.cost - if(C && total_cost <= MAX_GEAR_COST) - pref.gear += choice - user << "Added \the '[choice]' for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining)." - else - user << "Adding \the '[choice]' will exceed the maximum loadout cost of [MAX_GEAR_COST] points." - return TOPIC_REFRESH - - else if(href_list["remove_loadout"]) - var/i_remove = text2num(href_list["remove_loadout"]) - if(i_remove < 1 || i_remove > pref.gear.len) return TOPIC_NOACTION - pref.gear.Cut(i_remove, i_remove + 1) - return TOPIC_REFRESH - - else if(href_list["clear_loadout"]) - pref.gear.Cut() - return TOPIC_REFRESH - return ..() diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm new file mode 100644 index 00000000000..8620e866793 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -0,0 +1,145 @@ +/datum/gear_tweak/proc/get_contents(var/metadata) + return + +/datum/gear_tweak/proc/get_metadata(var/user, var/metadata) + return + +/datum/gear_tweak/proc/get_default() + return + +/datum/gear_tweak/proc/tweak_gear_data(var/metadata, var/datum/gear_data) + return + +/datum/gear_tweak/proc/tweak_item(var/obj/item/I, var/metadata) + return + +/* +Color adjustment +*/ + +var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() + +/datum/gear_tweak/color + var/list/valid_colors + +/datum/gear_tweak/color/New(var/list/valid_colors) + src.valid_colors = valid_colors + ..() + +/datum/gear_tweak/color/get_contents(var/metadata) + return "Color: " + +/datum/gear_tweak/color/get_default() + return valid_colors ? valid_colors[1] : COLOR_GRAY + +/datum/gear_tweak/color/get_metadata(var/user, var/metadata) + if(valid_colors) + return input(user, "Choose an item color.", "Character Preference", metadata) as null|anything in valid_colors + return input(user, "Choose an item color.", "Global Preference", metadata) as color|null + +/datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata) + if(valid_colors && !(metadata in valid_colors)) + return + I.color = metadata + +/* +Path adjustment +*/ + +/datum/gear_tweak/path + var/list/valid_paths + +/datum/gear_tweak/path/New(var/list/valid_paths) + src.valid_paths = valid_paths + ..() + +/datum/gear_tweak/path/get_contents(var/metadata) + return "Type: [metadata]" + +/datum/gear_tweak/path/get_default() + return valid_paths[1] + +/datum/gear_tweak/path/get_metadata(var/user, var/metadata) + return input(user, "Choose a type.", "Character Preference", metadata) as null|anything in valid_paths + +/datum/gear_tweak/path/tweak_gear_data(var/metadata, var/datum/gear_data/gear_data) + if(!(metadata in valid_paths)) + return + gear_data.path = valid_paths[metadata] + +/* +Content adjustment +*/ + +/datum/gear_tweak/contents + var/list/valid_contents + +/datum/gear_tweak/contents/New() + valid_contents = args.Copy() + ..() + +/datum/gear_tweak/contents/get_contents(var/metadata) + return "Contents: [english_list(metadata, and_text = ", ")]" + +/datum/gear_tweak/contents/get_default() + . = list() + for(var/i = 1 to valid_contents.len) + . += "Random" + +/datum/gear_tweak/contents/get_metadata(var/user, var/list/metadata) + . = list() + for(var/i = metadata.len to (valid_contents.len - 1)) + metadata += "Random" + for(var/i = 1 to valid_contents.len) + var/entry = input(user, "Choose an entry.", "Character Preference", metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None")) + if(entry) + . += entry + else + return metadata + +/datum/gear_tweak/contents/tweak_item(var/obj/item/I, var/list/metadata) + if(metadata.len != valid_contents.len) + return + for(var/i = 1 to valid_contents.len) + var/path + var/list/contents = valid_contents[i] + if(metadata[i] == "Random") + path = pick(contents) + path = contents[path] + else if(metadata[i] == "None") + continue + else + path = contents[metadata[i]] + new path(I) + +/* +Reagents adjustment +*/ + + +/datum/gear_tweak/reagents + var/list/valid_reagents + +/datum/gear_tweak/reagents/New(var/list/reagents) + valid_reagents = reagents.Copy() + ..() + +/datum/gear_tweak/reagents/get_contents(var/metadata) + return "Reagents: [metadata]" + +/datum/gear_tweak/reagents/get_default() + return "Random" + +/datum/gear_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) + if(metadata == "None") + return + if(metadata == "Random") + . = valid_reagents[pick(valid_reagents)] + else + . = valid_reagents[metadata] + I.reagents.add_reagent(., I.reagents.get_free_space()) \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm new file mode 100644 index 00000000000..70a18e5b8a6 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -0,0 +1,228 @@ +var/list/loadout_categories = list() +var/list/gear_datums = list() + +/datum/loadout_category + var/category = "" + var/list/gear = list() + +/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 + + var/use_name = initial(G.display_name) + var/use_category = initial(G.sort_category) + + if(!loadout_categories[use_category]) + loadout_categories[use_category] = new /datum/loadout_category(use_category) + var/datum/loadout_category/LC = loadout_categories[use_category] + gear_datums[use_name] = new geartype + LC.gear[use_name] = gear_datums[use_name] + + loadout_categories = sortAssoc(loadout_categories) + for(var/loadout_category in loadout_categories) + var/datum/loadout_category/LC = loadout_categories[loadout_category] + LC.gear = sortAssoc(LC.gear) + return 1 + +/datum/category_item/player_setup_item/loadout + name = "Loadout" + sort_order = 1 + var/current_tab = "General" + +/datum/category_item/player_setup_item/loadout/load_character(var/savefile/S) + S["gear"] >> pref.gear + +/datum/category_item/player_setup_item/loadout/save_character(var/savefile/S) + S["gear"] << pref.gear + +/datum/category_item/player_setup_item/loadout/gather_load_query() + return list("ss13_characters" = list("vars" = list("gear"), "args" = list("id"))) + +/datum/category_item/player_setup_item/loadout/gather_save_query() + return list("ss13_characters" = list("gear", "id" = 1, "ckey" = 1)) + +/datum/category_item/player_setup_item/loadout/gather_save_parameters() + return list(":gear" = list2params(pref.gear), ":id" = pref.current_character, ":ckey" = pref.client.ckey) + +/datum/category_item/player_setup_item/loadout/proc/valid_gear_choices(var/max_cost) + . = list() + var/mob/preference_mob = preference_mob() + for(var/gear_name in gear_datums) + var/datum/gear/G = gear_datums[gear_name] + + if(G.whitelisted && !is_alien_whitelisted(preference_mob, all_species[G.whitelisted])) + continue + if(max_cost && G.cost > max_cost) + continue + . += gear_name + +/datum/category_item/player_setup_item/loadout/sanitize_character(var/sql_load = 0) + + if (sql_load) + pref.gear = params2list(pref.gear) + + var/mob/preference_mob = preference_mob() + if(!islist(pref.gear)) + pref.gear = list() + + for(var/gear_name in pref.gear) + if(!(gear_name in gear_datums)) + pref.gear -= gear_name + var/total_cost = 0 + for(var/gear_name in pref.gear) + if(!gear_datums[gear_name]) + preference_mob << "You cannot have more than one of the \the [gear_name]" + pref.gear -= gear_name + else if(!(gear_name in valid_gear_choices())) + preference_mob << "You cannot take \the [gear_name] as you are not whitelisted for the species." + pref.gear -= gear_name + else + var/datum/gear/G = gear_datums[gear_name] + if(total_cost + G.cost > MAX_GEAR_COST) + pref.gear -= gear_name + preference_mob << "You cannot afford to take \the [gear_name]" + else + total_cost += G.cost + +/datum/category_item/player_setup_item/loadout/content() + 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 + + var/fcolor = "#3366CC" + if(total_cost < MAX_GEAR_COST) + fcolor = "#E67300" + . = list() + . += "" + . += "" + + . += "" + + var/datum/loadout_category/LC = loadout_categories[current_tab] + . += "" + . += "" + . += "" + for(var/gear_name in LC.gear) + if(!(gear_name in valid_gear_choices())) + continue + var/datum/gear/G = LC.gear[gear_name] + var/ticked = (G.display_name in pref.gear) + . += "" + . += "" + . += "" + if(ticked) + . += "" + . += "
[total_cost]/[MAX_GEAR_COST] loadout points spent. \[Clear Loadout\]
" + var/firstcat = 1 + for(var/category in loadout_categories) + + if(firstcat) + firstcat = 0 + else + . += " |" + if(category == current_tab) + . += " [category] " + else + var/datum/loadout_category/LC = loadout_categories[category] + var/tcolor = "#3366CC" + for(var/thing in LC.gear) + if(thing in pref.gear) + tcolor = "#E67300" + break + . += " [category] " + . += "

[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) + +/datum/category_item/player_setup_item/loadout/proc/get_gear_metadata(var/datum/gear/G) + . = pref.gear[G.display_name] + if(!.) + . = list() + pref.gear[G.display_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.display_name in pref.gear) + pref.gear -= TG.display_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_COST) + pref.gear += TG.display_name + return TOPIC_REFRESH + 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 TOPIC_NOACTION + var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak)) + if(!metadata || !CanUseTopic(user)) + return TOPIC_NOACTION + set_tweak_metadata(gear, tweak, metadata) + return TOPIC_REFRESH + else if(href_list["select_category"]) + current_tab = href_list["select_category"] + return TOPIC_REFRESH + else if(href_list["clear_loadout"]) + pref.gear.Cut() + return TOPIC_REFRESH + return ..() + +/datum/gear + var/display_name //Name/index. Must be unique. + var/description //Description of this gear. If left blank will default to the description of the pathed item. + var/path //Path to item. + var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points. + var/slot //Slot to equip to. + var/list/allowed_roles //Roles that can spawn with this item. + var/whitelisted //Term to check the whitelist for.. + var/sort_category = "General" + var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. + +/datum/gear/New() + ..() + if(!description) + var/obj/O = path + description = initial(O.desc) + +/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) + for(var/datum/gear_tweak/gt in gear_tweaks) + gt.tweak_gear_data(metadata["[gt]"], gd) + var/item = new gd.path(gd.location) + for(var/datum/gear_tweak/gt in gear_tweaks) + gt.tweak_item(item, metadata["[gt]"]) + return item diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm new file mode 100644 index 00000000000..04cffbef2e6 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm @@ -0,0 +1,69 @@ +/datum/gear/accessory + display_name = "suspenders" + path = /obj/item/clothing/accessory/suspenders + slot = slot_tie + sort_category = "Accessories" + +/datum/gear/accessory/waistcoat + display_name = "waistcoat" + path = /obj/item/clothing/accessory/wcoat + +/datum/gear/accessory/armband + display_name = "armband selection" + path = /obj/item/clothing/accessory/armband + +/datum/gear/accessory/armband/New() + ..() + var/armbands = list() + armbands["red armband"] = /obj/item/clothing/accessory/armband + armbands["cargo armband"] = /obj/item/clothing/accessory/armband/cargo + armbands["EMT armband"] = /obj/item/clothing/accessory/armband/medgreen + armbands["medical armband"] = /obj/item/clothing/accessory/armband/med + armbands["engineering armband"] = /obj/item/clothing/accessory/armband/engine + armbands["hydroponics armband"] = /obj/item/clothing/accessory/armband/hydro + armbands["science armband"] = /obj/item/clothing/accessory/armband/science + armbands["synthetic intelligence movement armband"] = /obj/item/clothing/accessory/armband/movement + armbands["ATLAS armband"] = /obj/item/clothing/accessory/armband/atlas + gear_tweaks += new/datum/gear_tweak/path(armbands) + +/datum/gear/accessory/holster + display_name = "holster selection" + path = /obj/item/clothing/accessory/holster + allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective", "Security Cadet") + +/datum/gear/accessory/holster/New() + ..() + var/holsters = list() + holsters["holster, armpit"] = /obj/item/clothing/accessory/holster/armpit + holsters["holster, hip"] = /obj/item/clothing/accessory/holster/hip + holsters["holster, waist"] = /obj/item/clothing/accessory/holster/waist + holsters["holster, thigh"] = /obj/item/clothing/accessory/holster/thigh + gear_tweaks += new/datum/gear_tweak/path(holsters) + +/datum/gear/accessory/tie + display_name = "tie selection" + path = /obj/item/clothing/accessory + +/datum/gear/accessory/tie/New() + ..() + var/ties = list() + ties["blue tie"] = /obj/item/clothing/accessory/blue + ties["red tie"] = /obj/item/clothing/accessory/red + ties["horrible tie"] = /obj/item/clothing/accessory/horrible + gear_tweaks += new/datum/gear_tweak/path(ties) + +/datum/gear/accessory/brown_vest + display_name = "webbing, engineering" + path = /obj/item/clothing/accessory/storage/brown_vest + allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer") + +/datum/gear/accessory/black_vest + display_name = "webbing, security" + path = /obj/item/clothing/accessory/storage/black_vest + allowed_roles = list("Security Officer","Head of Security","Warden") + +/datum/gear/accessory/webbing + display_name = "webbing, simple" + path = /obj/item/clothing/accessory/storage/webbing + cost = 2 + diff --git a/code/modules/client/preference_setup/loadout/loadout_cosmetics.dm b/code/modules/client/preference_setup/loadout/loadout_cosmetics.dm new file mode 100644 index 00000000000..c75a557675b --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_cosmetics.dm @@ -0,0 +1,21 @@ +/datum/gear/cosmetic + display_name = "purple comb" + path = /obj/item/weapon/haircomb + sort_category = "Cosmetics" + +/datum/gear/cosmetic/lipstick + display_name = "lipstick selection" + path = /obj/item/weapon/lipstick + +/datum/gear/cosmetic/lipstick/New() + ..() + var/lipsticks = list() + lipsticks["lipstick, red"] = /obj/item/weapon/lipstick + lipsticks["lipstick, purple"] = /obj/item/weapon/lipstick/purple + lipsticks["lipstick, jade"] = /obj/item/weapon/lipstick/jade + lipsticks["lipstick, back"] = /obj/item/weapon/lipstick/black + gear_tweaks += new/datum/gear_tweak/path(lipsticks) + +/datum/gear/cosmetic/mirror + display_name = "handheld mirror" + path = /obj/item/weapon/mirror diff --git a/code/modules/client/preference_setup/loadout/loadout_ears.dm b/code/modules/client/preference_setup/loadout/loadout_ears.dm new file mode 100644 index 00000000000..11685305ca3 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_ears.dm @@ -0,0 +1,19 @@ +// Stuff worn on the ears. Items here go in the "ears" sort_category but they must not use +// the slot_r_ear or slot_l_ear as the slot, or else players will spawn with no headset. +/datum/gear/ears + display_name = "earmuffs" + path = /obj/item/clothing/ears/earmuffs + sort_category = "Earwear" + +/datum/gear/ears/bandanna + display_name = "neck bandanna selection" + path = /obj/item/clothing/ears/bandanna + +/datum/gear/ears/bandanna/New() + ..() + var/bandanna = list() + bandanna["red bandanna"] = /obj/item/clothing/ears/bandanna + bandanna["blue bandanna"] = /obj/item/clothing/ears/bandanna/blue + bandanna["black bandanna"] = /obj/item/clothing/ears/bandanna/black + gear_tweaks += new/datum/gear_tweak/path(bandanna) + diff --git a/code/modules/client/preference_setup/loadout/loadout_eyes.dm b/code/modules/client/preference_setup/loadout/loadout_eyes.dm new file mode 100644 index 00000000000..fef99095d78 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_eyes.dm @@ -0,0 +1,50 @@ +// Eyes +/datum/gear/eyes + display_name = "eyepatch" + path = /obj/item/clothing/glasses/eyepatch + slot = slot_glasses + sort_category = "Glasses and Eyewear" + +/datum/gear/eyes/glasses + display_name = "glasses, prescription" + path = /obj/item/clothing/glasses/regular + +/datum/gear/eyes/glasses/green + display_name = "glasses, green" + path = /obj/item/clothing/glasses/gglasses + +/datum/gear/eyes/glasses/prescriptionhipster + display_name = "glasses, hipster" + path = /obj/item/clothing/glasses/regular/hipster + +/datum/gear/eyes/glasses/monocle + display_name = "monocle" + path = /obj/item/clothing/glasses/monocle + +/datum/gear/eyes/scanning_goggles + display_name = "scanning goggles" + path = /obj/item/clothing/glasses/regular/scanners + +/datum/gear/eyes/sciencegoggles + display_name = "science Goggles" + path = /obj/item/clothing/glasses/science + +/datum/gear/eyes/security + display_name = "security HUD" + path = /obj/item/clothing/glasses/hud/security + allowed_roles = list("Security Officer","Head of Security","Warden") + +/datum/gear/eyes/medical + display_name = "medical HUD" + path = /obj/item/clothing/glasses/hud/health + allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist") + +/datum/gear/eyes/shades + display_name = "sunglasses, fat" + path = /obj/item/clothing/glasses/sunglasses/big + allowed_roles = list("Security Officer","Head of Security","Warden","Captain","Head of Personnel","Quartermaster","Internal Affairs Agent","Detective") + +/datum/gear/eyes/shades/prescriptionsun + display_name = "sunglasses, presciption" + path = /obj/item/clothing/glasses/sunglasses/prescription + cost = 2 diff --git a/code/modules/client/preference_setup/loadout/loadout_general.dm b/code/modules/client/preference_setup/loadout/loadout_general.dm new file mode 100644 index 00000000000..7c3c9da7e5a --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_general.dm @@ -0,0 +1,69 @@ +/datum/gear/cane + display_name = "cane" + path = /obj/item/weapon/cane + +/datum/gear/dice + display_name = "d20" + path = /obj/item/weapon/dice/d20 + +/datum/gear/cards + display_name = "deck of cards" + path = /obj/item/weapon/deck/cards + +/datum/gear/tarot + display_name = "deck of tarot cards" + path = /obj/item/weapon/deck/tarot + +/datum/gear/holder + display_name = "card holder" + path = /obj/item/weapon/deck/holder + +/datum/gear/cardemon_pack + display_name = "cardemon booster pack" + path = /obj/item/weapon/pack/cardemon + +/datum/gear/spaceball_pack + display_name = "spaceball booster pack" + path = /obj/item/weapon/pack/spaceball + +/datum/gear/flask + display_name = "flask" + path = /obj/item/weapon/reagent_containers/food/drinks/flask/barflask + +/datum/gear/flask/New() + ..() + gear_tweaks += new/datum/gear_tweak/reagents(lunchables_ethanol_reagents()) + +/datum/gear/vacflask + display_name = "vacuum-flask" + path = /obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask + +/datum/gear/vacflask/New() + ..() + gear_tweaks += new/datum/gear_tweak/reagents(lunchables_drink_reagents()) + +/datum/gear/boot_knife + display_name = "boot knife" + path = /obj/item/weapon/material/kitchen/utensil/knife/boot + cost = 3 + +/datum/gear/cape + display_name = "tunnel cloak" + path = /obj/item/weapon/storage/backpack/cloak + cost = 1 + +/datum/gear/lunchbox + display_name = "lunchbox" + description = "A little lunchbox." + cost = 2 + path = /obj/item/weapon/storage/toolbox/lunchbox + +/datum/gear/lunchbox/New() + ..() + var/list/lunchboxes = list() + for(var/lunchbox_type in typesof(/obj/item/weapon/storage/toolbox/lunchbox)) + var/obj/item/weapon/storage/toolbox/lunchbox/lunchbox = lunchbox_type + if(!initial(lunchbox.filled)) + lunchboxes[initial(lunchbox.name)] = lunchbox_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(lunchboxes)) + gear_tweaks += new/datum/gear_tweak/contents(lunchables_lunches(), lunchables_snacks(), lunchables_drinks()) \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_gloves.dm b/code/modules/client/preference_setup/loadout/loadout_gloves.dm new file mode 100644 index 00000000000..3680312c54f --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_gloves.dm @@ -0,0 +1,25 @@ +/datum/gear/gloves + display_name = "watch" + path = /obj/item/clothing/gloves/watch + cost = 2 + slot = slot_gloves + sort_category = "Gloves and Handwear" + +/datum/gear/gloves/color + display_name = "gloves selection" + path = /obj/item/clothing/gloves/black + +/datum/gear/gloves/color/New() + ..() + var/gloves = list() + gloves["black gloves"] = /obj/item/clothing/gloves + gloves["red gloves"] = /obj/item/clothing/gloves/red + gloves["blue gloves"] = /obj/item/clothing/gloves/blue + gloves["orange gloves"] = /obj/item/clothing/gloves/orange + gloves["purple gloves"] = /obj/item/clothing/gloves/purple + gloves["brown gloves"] = /obj/item/clothing/gloves/brown + gloves["light-brown gloves"] = /obj/item/clothing/gloves/light_brown + gloves["white gloves"] = /obj/item/clothing/gloves/green + gloves["grey gloves"] = /obj/item/clothing/gloves/grey + gloves["rainbow gloves"] = /obj/item/clothing/gloves/rainbow + gear_tweaks += new/datum/gear_tweak/path(gloves) diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm new file mode 100644 index 00000000000..081b6536564 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_head.dm @@ -0,0 +1,113 @@ +/datum/gear/head + display_name = "hat, boatsman" + path = /obj/item/clothing/head/boaterhat + slot = slot_head + sort_category = "Hats and Headwear" + +/datum/gear/head/bandana + display_name = "bandana selection" + path = /obj/item/clothing/head/bandana + +/datum/gear/head/bandana/New() + ..() + var/bandanas = list() + bandanas["green bandana"] = /obj/item/clothing/head/greenbandana + bandanas["orange bandana"] = /obj/item/clothing/head/orangebandana + bandanas["pirate bandana"] = /obj/item/clothing/head/bandana + gear_tweaks += new/datum/gear_tweak/path(bandanas) + +/datum/gear/head/cap + display_name = "cap selection" + path = /obj/item/clothing/head/soft/blue + +/datum/gear/head/cap/New() + ..() + var/caps = list() + caps["blue cap"] = /obj/item/clothing/head/soft/blue + caps["flat cap"] = /obj/item/clothing/head/flatcap + caps["green cap"] = /obj/item/clothing/head/soft/green + caps["grey cap"] = /obj/item/clothing/head/soft/grey + caps["mailman cap"] = /obj/item/clothing/head/mailman + caps["orange cap"] = /obj/item/clothing/head/soft/orange + caps["purple cap"] = /obj/item/clothing/head/soft/purple + caps["rainbow cap"] = /obj/item/clothing/head/soft/rainbow + caps["red cap"] = /obj/item/clothing/head/soft/red + caps["white cap"] = /obj/item/clothing/head/soft/mime + caps["yellow cap"] = /obj/item/clothing/head/soft/yellow + gear_tweaks += new/datum/gear_tweak/path(caps) + +/datum/gear/head/beret + display_name = "beret, red" + path = /obj/item/clothing/head/beret + +/datum/gear/head/beret/eng + display_name = "beret, engie-orange" + path = /obj/item/clothing/head/beret/engineering + allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice") + +/datum/gear/head/beret/purp + display_name = "beret, purple" + path = /obj/item/clothing/head/beret/purple + +/datum/gear/head/beret/sec + display_name = "beret,security" + path = /obj/item/clothing/head/beret/sec + allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective") + +/datum/gear/head/beret/warden + display_name = "beret,security (warden)" + path = /obj/item/clothing/head/beret/sec/warden + allowed_roles = list("Head of Security","Warden") + +/datum/gear/head/beret/hos + display_name = "beret,security (head of security)" + path = /obj/item/clothing/head/beret/sec/hos + allowed_roles = list("Head of Security") + +/datum/gear/head/cap/corp + display_name = "cap, corporate (security)" + path = /obj/item/clothing/head/soft/sec/corp + allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective") + +/datum/gear/head/cap/sec + display_name = "cap, security" + path = /obj/item/clothing/head/soft/sec + allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective") + +/datum/gear/head/hardhat + display_name = "hardhat, yellow" + path = /obj/item/clothing/head/hardhat + allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice") + +/datum/gear/head/hardhat/New() + ..() + var/hardhat = list() + hardhat["hardhat, yellow"] = /obj/item/clothing/head/hardhat + hardhat["hardhat, blue"] = /obj/item/clothing/head/hardhat/dblue + hardhat["hardhat, orange"] = /obj/item/clothing/head/hardhat/orange + hardhat["hardhat, red"] = /obj/item/clothing/head/hardhat/red + gear_tweaks += new/datum/gear_tweak/path(hardhat) + +/datum/gear/head/hairflower + display_name = "hair flower pin, red" + path = /obj/item/clothing/head/hairflower + +/datum/gear/head/bowler + display_name = "hat, bowler" + path = /obj/item/clothing/head/bowler + +/datum/gear/head/fez + display_name = "hat, fez" + path = /obj/item/clothing/head/fez + +/datum/gear/head/tophat + display_name = "hat, tophat" + path = /obj/item/clothing/head/that + +/datum/gear/head/philosopher_wig + display_name = "natural philosopher's wig" + path = /obj/item/clothing/head/philosopher_wig + +/datum/gear/head/ushanka + display_name = "ushanka" + path = /obj/item/clothing/head/ushanka diff --git a/code/modules/client/preference_setup/loadout/loadout_mask.dm b/code/modules/client/preference_setup/loadout/loadout_mask.dm new file mode 100644 index 00000000000..c6342904f67 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_mask.dm @@ -0,0 +1,5 @@ +// Mask +/datum/gear/mask + display_name = "sterile mask" + path = /obj/item/clothing/mask/surgical + cost = 2 diff --git a/code/modules/client/preference_setup/loadout/loadout_shoes.dm b/code/modules/client/preference_setup/loadout/loadout_shoes.dm new file mode 100644 index 00000000000..473714a5b81 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_shoes.dm @@ -0,0 +1,45 @@ +// Shoelocker +/datum/gear/shoes + display_name = "jackboots" + path = /obj/item/clothing/shoes/jackboots + slot = slot_shoes + sort_category = "Shoes and Footwear" + +/datum/gear/shoes/toeless + display_name = "toe-less jackboots" + path = /obj/item/clothing/shoes/jackboots/unathi + +/datum/gear/shoes/workboots + display_name = "workboots" + path = /obj/item/clothing/shoes/workboots + +/datum/gear/shoes/sandals + display_name = "sandals" + path = /obj/item/clothing/shoes/sandal + +/datum/gear/shoes/color + display_name = "shoe selection" + path = /obj/item/clothing/shoes/black + +/datum/gear/shoes/color/New() + ..() + var/shoes = list() + shoes["black shoes"] = /obj/item/clothing/shoes/black + shoes["blue shoes"] = /obj/item/clothing/shoes/blue + shoes["brown shoes"] = /obj/item/clothing/shoes/brown + shoes["green shoes"] = /obj/item/clothing/shoes/green + shoes["orange shoes"] = /obj/item/clothing/shoes/orange + shoes["purple shoes"] = /obj/item/clothing/shoes/purple + shoes["rainbow shoes"] = /obj/item/clothing/shoes/rainbow + shoes["red shoes"] = /obj/item/clothing/shoes/red + shoes["white shoes"] = /obj/item/clothing/shoes/white + shoes["yellow shoes"] = /obj/item/clothing/shoes/yellow + gear_tweaks += new/datum/gear_tweak/path(shoes) + +/datum/gear/shoes/dress + display_name = "shoes, dress" + path = /obj/item/clothing/shoes/laceup + +/datum/gear/shoes/leather + display_name = "shoes, leather" + path = /obj/item/clothing/shoes/leather diff --git a/code/modules/client/preference_setup/loadout/loadout_smoking.dm b/code/modules/client/preference_setup/loadout/loadout_smoking.dm new file mode 100644 index 00000000000..d41c0d44c18 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_smoking.dm @@ -0,0 +1,27 @@ +/datum/gear/smokingpipe + display_name = "pipe, smoking" + path = /obj/item/clothing/mask/smokable/pipe + +/datum/gear/cornpipe + display_name = "pipe, corn" + path = /obj/item/clothing/mask/smokable/pipe/cobpipe + +/datum/gear/matchbook + display_name = "matchbook" + path = /obj/item/weapon/storage/box/matches + +/datum/gear/zippo + display_name = "zippo" + path = /obj/item/weapon/flame/lighter/zippo + +/datum/gear/cigarcase + display_name = "cigar case" + path = /obj/item/weapon/storage/fancy/cigar + +/datum/gear/cigarette + display_name = "cigarette packet" + path = /obj/item/weapon/storage/fancy/cigarettes + +/datum/gear/dromedaryco + display_name = "dromedaryco cigarette packet" + path = /obj/item/weapon/storage/fancy/cigarettes/dromedaryco \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm new file mode 100644 index 00000000000..2973900b7c2 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -0,0 +1,129 @@ +// Suit slot +/datum/gear/suit + display_name = "apron, blue" + path = /obj/item/clothing/suit/apron + slot = slot_wear_suit + sort_category = "Suits and Overwear" + cost = 2 + +/datum/gear/suit/leather + display_name = "jacket selection" + path = /obj/item/clothing/suit/storage/leather_jacket + +/datum/gear/suit/leather/New() + ..() + var/jackets = list() + jackets["bomber jacket"] = /obj/item/clothing/suit/storage/toggle/bomber + jackets["corporate black jacket"] = /obj/item/clothing/suit/storage/leather_jacket/nanotrasen + jackets["corporate brown jacket"] = /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen + jackets["black jacket"] = /obj/item/clothing/suit/storage/leather_jacket + jackets["brown jacket"] = /obj/item/clothing/suit/storage/toggle/brown_jacket + gear_tweaks += new/datum/gear_tweak/path(jackets) + +/datum/gear/suit/hazard_vest + display_name = "hazard vest" + path = /obj/item/clothing/suit/storage/hazardvest + +/datum/gear/suit/hoodie + display_name = "hoodie, grey" + path = /obj/item/clothing/suit/storage/toggle/hoodie + +/datum/gear/suit/hoodie/black + display_name = "hoodie, black" + path = /obj/item/clothing/suit/storage/toggle/hoodie/black + +/datum/gear/suit/labcoat + display_name = "labcoat selection" + path = /obj/item/clothing/suit/storage/toggle/labcoat + +/datum/gear/suit/labcoat/New() + ..() + var/labcoat = list() + labcoat["labcoat"] = /obj/item/clothing/suit/storage/toggle/labcoat + labcoat["labcoat, blue"] = /obj/item/clothing/suit/storage/toggle/labcoat/blue + labcoat["labcoat, green"] = /obj/item/clothing/suit/storage/toggle/labcoat/green + labcoat["labcoat, orange"] = /obj/item/clothing/suit/storage/toggle/labcoat/orange + labcoat["labcoat, purple"] = /obj/item/clothing/suit/storage/toggle/labcoat/purple + labcoat["labcoat, red"] = /obj/item/clothing/suit/storage/toggle/labcoat/red + gear_tweaks += new/datum/gear_tweak/path(labcoat) + +/datum/gear/suit/overalls + display_name = "overalls" + path = /obj/item/clothing/suit/apron/overalls + cost = 1 + +/datum/gear/suit/poncho + display_name = "poncho selection" + path = /obj/item/clothing/suit/poncho + cost = 1 + +/datum/gear/suit/poncho/New() + ..() + var/poncho = list() + poncho["poncho, tan"] = /obj/item/clothing/suit/poncho + poncho["poncho, blue"] = /obj/item/clothing/suit/poncho/blue + poncho["poncho, green"] = /obj/item/clothing/suit/poncho/green + poncho["poncho, purple"] = /obj/item/clothing/suit/poncho/purple + poncho["poncho, red"] = /obj/item/clothing/suit/poncho/red + gear_tweaks += new/datum/gear_tweak/path(poncho) + +/datum/gear/suit/blue_lawyer_jacket + display_name = "suit jacket, blue" + path = /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket + +/datum/gear/suit/purple_lawyer_jacket + display_name = "suit jacket, purple" + path = /obj/item/clothing/suit/storage/lawyer/purpjacket + +/datum/gear/suit/track_jacket + display_name = "track jacket" + path = /obj/item/clothing/suit/storage/toggle/tracksuit + +/datum/gear/suit/winter + display_name = "winter coat" + path = /obj/item/clothing/suit/storage/hooded/wintercoat + +/datum/gear/suit/winter/captain + display_name = "winter coat, captain" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/captain + allowed_roles = list("Captain") + +/datum/gear/suit/winter/security + display_name = "winter coat, security" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/security + allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective") + +/datum/gear/suit/winter/science + display_name = "winter coat, science" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/science + allowed_roles = list("Research Director","Scientist","Xenobiologist","Roboticist","Lab Assistant","Geneticist") + +/datum/gear/suit/winter/medical + display_name = "winter coat, medical" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical + allowed_roles = list("Chief Medical Officer","Medical Doctor","Paramedic","Nursing Intern","Psychiatrist","Chemist",) + +/datum/gear/suit/winter/engineering + display_name = "winter coat, engineering" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/engineering + allowed_roles = list("Station Engineer","Chief Engineer","Engineering Apprentice") + +/datum/gear/suit/winter/atmos + display_name = "winter coat, atmospherics" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos + allowed_roles = list("Atmospheric Technician","Chief Engineer") + +/datum/gear/suit/winter/hydro + display_name = "winter coat, hydroponics" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/hydro + allowed_roles = list("Head of Personnel","Gardener") + +/datum/gear/suit/winter/cargo + display_name = "winter coat, cargo" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/cargo + allowed_roles = list("Cargo Technician","Quartermaster","Head of Personnel") + +/datum/gear/suit/winter/mining + display_name = "winter coat, mining" + path = /obj/item/clothing/suit/storage/hooded/wintercoat/miner + allowed_roles = list("Quartermaster","Head of Personnel","Shaft Miner") \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm new file mode 100644 index 00000000000..22705c17560 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -0,0 +1,150 @@ +// Uniform slot +/datum/gear/uniform + display_name = "blazer, blue" + path = /obj/item/clothing/under/blazer + slot = slot_w_uniform + sort_category = "Uniforms and Casual Dress" + +/datum/gear/uniform/cheongsam + display_name = "cheongsam, white" + path = /obj/item/clothing/under/cheongsam + +/datum/gear/uniform/kilt + display_name = "kilt" + path = /obj/item/clothing/under/kilt + +/datum/gear/uniform/jumpskirt + display_name = "jumpskirt, black" + path = /obj/item/clothing/under/blackjumpskirt + +/datum/gear/uniform/jumpsuit + display_name = "generic jumpsuits" + path = /obj/item/clothing/under/color/grey + +/datum/gear/uniform/jumpsuit/New() + ..() + var/jumpsuit = list() + jumpsuit["grey jumpsuit"] = /obj/item/clothing/under/color/grey + jumpsuit["black jumpsuit"] = /obj/item/clothing/under/color/black + jumpsuit["blue jumpsuit"] = /obj/item/clothing/under/color/blue + jumpsuit["green jumpsuit"] = /obj/item/clothing/under/color/green + jumpsuit["orange jumpsuit"] = /obj/item/clothing/under/color/orange + jumpsuit["pink jumpsuit"] = /obj/item/clothing/under/color/pink + jumpsuit["red jumpsuit"] = /obj/item/clothing/under/color/red + jumpsuit["white jumpsuit"] = /obj/item/clothing/under/color/white + jumpsuit["yellow jumpsuit"] = /obj/item/clothing/under/color/yellow + jumpsuit["light blue jumpsuit"] = /obj/item/clothing/under/lightblue + jumpsuit["aqua jumpsuit"] = /obj/item/clothing/under/aqua + jumpsuit["purple jumpsuit"] = /obj/item/clothing/under/purple + jumpsuit["light purple jumpsuit"] = /obj/item/clothing/under/lightpurple + jumpsuit["light green jumpsuit"] = /obj/item/clothing/under/lightgreen + jumpsuit["brown jumpsuit"] = /obj/item/clothing/under/brown + jumpsuit["light brown jumpsuit"] = /obj/item/clothing/under/lightbrown + jumpsuit["yellow green jumpsuit"] = /obj/item/clothing/under/yellowgreen + jumpsuit["light red jumpsuit"] = /obj/item/clothing/under/lightred + jumpsuit["dark red jumpsuit"] = /obj/item/clothing/under/darkred + gear_tweaks += new/datum/gear_tweak/path(jumpsuit) + +/datum/gear/uniform/skirt + display_name = "plaid skirt, blue" + path = /obj/item/clothing/under/dress/plaid_blue + +/datum/gear/uniform/skirt/purple + display_name = "plaid skirt, purple" + path = /obj/item/clothing/under/dress/plaid_purple + +/datum/gear/uniform/skirt/red + display_name = "plaid skirt, red" + path = /obj/item/clothing/under/dress/plaid_red + +/datum/gear/uniform/suit + display_name = "suit selection" + path = /obj/item/clothing/under/lawyer/bluesuit + +/datum/gear/uniform/suit/New() + ..() + var/suits = list() + suits["amish suit"] = /obj/item/clothing/under/sl_suit + suits["black suit"] = /obj/item/clothing/under/suit_jacket + suits["blue suit"] = /obj/item/clothing/under/lawyer/blue + suits["burgundy suit"] = /obj/item/clothing/under/suit_jacket/burgundy + suits["charcoal suit"] = /obj/item/clothing/under/suit_jacket/charcoal + suits["checkered suit"] = /obj/item/clothing/under/suit_jacket/checkered + suits["executive suit"] = /obj/item/clothing/under/suit_jacket/really_black + suits["female executive suit"] = /obj/item/clothing/under/suit_jacket/female + suits["gentleman suit"] = /obj/item/clothing/under/gentlesuit + suits["navy suit"] = /obj/item/clothing/under/suit_jacket/navy + suits["old man suit"] = /obj/item/clothing/under/lawyer/oldman + suits["purple suit"] = /obj/item/clothing/under/lawyer/purpsuit + suits["red suit"] = /obj/item/clothing/under/suit_jacket/red + suits["red lawyer suit"] = /obj/item/clothing/under/lawyer/red + suits["shiny black suit"] = /obj/item/clothing/under/lawyer/black + suits["tan suit"] = /obj/item/clothing/under/suit_jacket/tan + suits["white suit"] = /obj/item/clothing/under/scratch + suits["white-blue suit"] = /obj/item/clothing/under/lawyer/bluesuit + gear_tweaks += new/datum/gear_tweak/path(suits) + +/datum/gear/uniform/scrubs + display_name = "scrubs selection" + path = /obj/item/clothing/under/rank/medical/black + allowed_roles = list("Scientist","Chief Medical Officer","Medical Doctor","Geneticist","Paramedic","Nursing Intern","Xenobiologist","Roboticist","Research Director","Detective",) + +/datum/gear/uniform/scrubs/New() + ..() + var/scrubs = list() + scrubs["scrubs, black"] = /obj/item/clothing/under/rank/medical/black + scrubs["scrubs, blue"] = /obj/item/clothing/under/rank/medical/blue + scrubs["scrubs, green"] = /obj/item/clothing/under/rank/medical/green + scrubs["scrubs, purple"] = /obj/item/clothing/under/rank/medical/purple + gear_tweaks += new/datum/gear_tweak/path(scrubs) + +/datum/gear/uniform/sundress + display_name = "sundress" + path = /obj/item/clothing/under/sundress + +/datum/gear/uniform/sundress/white + display_name = "sundress, white" + path = /obj/item/clothing/under/sundress_white + +/datum/gear/uniform/dress_fire + display_name = "flame dress" + path = /obj/item/clothing/under/dress/dress_fire + +/datum/gear/uniform/uniform_captain + display_name = "uniform, captain's dress" + path = /obj/item/clothing/under/dress/dress_cap + allowed_roles = list("Captain") + +/datum/gear/uniform/corpsecsuit + display_name = "uniform, corporate (Security)" + path = /obj/item/clothing/under/rank/security/corp + allowed_roles = list("Security Officer","Head of Security","Warden") + +/datum/gear/uniform/uniform_hop + display_name = "uniform, HoP's dress" + path = /obj/item/clothing/under/dress/dress_hop + allowed_roles = list("Head of Personnel") + +/datum/gear/uniform/uniform_hr + display_name = "uniform, HR director (HoP)" + path = /obj/item/clothing/under/dress/dress_hr + allowed_roles = list("Head of Personnel") + +/datum/gear/uniform/navysecsuit + display_name = "uniform, navyblue (Security)" + path = /obj/item/clothing/under/rank/security/navyblue + allowed_roles = list("Security Officer","Head of Security","Warden") + +/datum/gear/uniform/gearharness + display_name = "gear harness" + path = /obj/item/clothing/under/gearharness + cost = 2 + +/datum/gear/uniform/track_pants + display_name = "track pants" + path = /obj/item/clothing/under/track + +/datum/gear/uniform/turtleneck + display_name = "tacticool turtleneck" + path = /obj/item/clothing/under/syndicate/tacticool + diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm new file mode 100644 index 00000000000..6fd34e628c3 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm @@ -0,0 +1,55 @@ +/datum/gear/utility + display_name = "briefcase" + path = /obj/item/weapon/storage/briefcase + sort_category = "Utility" + +/datum/gear/utility/secure + display_name = "secure briefcase" + path = /obj/item/weapon/storage/secure/briefcase + cost = 2 + +/datum/gear/utility/clipboard + display_name = "clipboard" + path = /obj/item/weapon/clipboard + +/datum/gear/utility/folder + display_name = "folders" + path = /obj/item/weapon/folder + +/datum/gear/utility/folder/New() + ..() + var/folders = list() + folders["blue folder"] = /obj/item/weapon/folder/blue + folders["grey folder"] = /obj/item/weapon/folder + folders["red folder"] = /obj/item/weapon/folder/red + folders["white folder"] = /obj/item/weapon/folder/white + folders["yellow folder"] = /obj/item/weapon/folder/yellow + gear_tweaks += new/datum/gear_tweak/path(folders) + +/datum/gear/utility/paicard + display_name = "personal AI device" + path = /obj/item/device/paicard + +/datum/gear/utility/wallet + display_name = "wallet" + path = /obj/item/weapon/storage/wallet + +/* +/datum/gear/utility/cheaptablet + display_name = "cheap tablet computer" + path = /obj/item/modular_computer/tablet/preset/custom_loadout/cheap + cost = 3 + +/datum/gear/utility/normaltablet + display_name = "tablet computer" + path = /obj/item/modular_computer/tablet/preset/custom_loadout/advanced + cost = 4 +*/ + +/datum/gear/utility/recorder + display_name = "universal recorder" + path = /obj/item/device/taperecorder + +/datum/gear/utility/camera + display_name = "camera" + path = /obj/item/device/camera diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm new file mode 100644 index 00000000000..6ee001c5ace --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_xeno.dm @@ -0,0 +1,108 @@ +//unathi clothing + +/datum/gear/suit/unathi_mantle + display_name = "hide mantle (Unathi)" + path = /obj/item/clothing/suit/unathi/mantle + cost = 1 + whitelisted = "Unathi" + sort_category = "Xenowear" + +/datum/gear/suit/unathi_robe + display_name = "roughspun robe (Unathi)" + path = /obj/item/clothing/suit/unathi/robe + cost = 1 + whitelisted = "Unathi" + sort_category = "Xenowear" + +//skrell headtail adorns + +/datum/gear/ears/f_skrell + display_name = "headtail-wear, female (Skrell)" + path = /obj/item/clothing/ears/skrell/chain + sort_category = "Xenowear" + whitelisted = "Skrell" + +/datum/gear/ears/f_skrell/New() + ..() + var/f_chains = list() + f_chains["headtail chains"] = /obj/item/clothing/ears/skrell/chain + f_chains["headtail cloth"] = /obj/item/clothing/ears/skrell/cloth_female + f_chains["red-jeweled chain"] = /obj/item/clothing/ears/skrell/redjewel_chain + f_chains["ebony chain"] = /obj/item/clothing/ears/skrell/ebony_chain + f_chains["blue-jeweled chain"] = /obj/item/clothing/ears/skrell/bluejeweled_chain + f_chains["silver chain"] = /obj/item/clothing/ears/skrell/silver_chain + f_chains["blue cloth"] = /obj/item/clothing/ears/skrell/blue_skrell_cloth_band_female + gear_tweaks += new/datum/gear_tweak/path(f_chains) + +/datum/gear/ears/m_skrell + display_name = "headtail-wear, male (Skrell)" + path = /obj/item/clothing/ears/skrell/band + sort_category = "Xenowear" + whitelisted = "Skrell" + +/datum/gear/ears/m_skrell/New() + ..() + var/m_chains = list() + m_chains["headtail bands"] = /obj/item/clothing/ears/skrell/chain + m_chains["headtail cloth"] = /obj/item/clothing/ears/skrell/cloth_male + m_chains["red-jeweled bands"] = /obj/item/clothing/ears/skrell/redjeweled_band + m_chains["ebony bands"] = /obj/item/clothing/ears/skrell/ebony_band + m_chains["blue-jeweled bands"] = /obj/item/clothing/ears/skrell/bluejeweled_band + m_chains["silver bands"] = /obj/item/clothing/ears/skrell/silver_band + m_chains["blue cloth"] = /obj/item/clothing/ears/skrell/blue_skrell_cloth_band_male + gear_tweaks += new/datum/gear_tweak/path(m_chains) + +//vaurca items + +/datum/gear/eyes/blindfold + display_name = "vaurca blindfold (Vaurca)" + path = /obj/item/clothing/glasses/sunglasses/blinders + cost = 2 + whitelisted = "Vaurca" + sort_category = "Xenowear" + +/datum/gear/mask/vaurca + display_name = "mandible garment (Vaurca)" + path = /obj/item/clothing/mask/breath/vaurca + cost = 1 + whitelisted = "Vaurca" + sort_category = "Xenowear" + +//beastmen gloves + +/datum/gear/gloves/unathi + display_name = "gloves selection (Unathi)" + path = /obj/item/clothing/gloves/black/unathi + whitelisted = "Unathi" + sort_category = "Xenowear" + +/datum/gear/gloves/unathi/New() + ..() + var/un_gloves = list() + un_gloves["black gloves"] = /obj/item/clothing/gloves/black/unathi + un_gloves["red gloves"] = /obj/item/clothing/gloves/red/unathi + un_gloves["blue gloves"] = /obj/item/clothing/gloves/blue/unathi + un_gloves["orange gloves"] = /obj/item/clothing/gloves/orange/unathi + un_gloves["purple gloves"] = /obj/item/clothing/gloves/purple/unathi + un_gloves["brown gloves"] = /obj/item/clothing/gloves/brown/unathi + un_gloves["green gloves"] = /obj/item/clothing/gloves/green/unathi + un_gloves["white gloves"] = /obj/item/clothing/gloves/white/unathi + gear_tweaks += new/datum/gear_tweak/path(un_gloves) + +/datum/gear/gloves/tajara + display_name = "gloves selection (Tajara)" + path = /obj/item/clothing/gloves/black/tajara + whitelisted = "Tajara" + sort_category = "Xenowear" + +/datum/gear/gloves/tajara/New() + ..() + var/taj_gloves = list() + taj_gloves["black gloves"] = /obj/item/clothing/gloves/black/tajara + taj_gloves["red gloves"] = /obj/item/clothing/gloves/red/tajara + taj_gloves["blue gloves"] = /obj/item/clothing/gloves/blue/tajara + taj_gloves["orange gloves"] = /obj/item/clothing/gloves/orange/tajara + taj_gloves["purple gloves"] = /obj/item/clothing/gloves/purple/tajara + taj_gloves["brown gloves"] = /obj/item/clothing/gloves/brown/tajara + taj_gloves["white gloves"] = /obj/item/clothing/gloves/green/tajara + gear_tweaks += new/datum/gear_tweak/path(taj_gloves) diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm index 237c4fa0a78..99af44e65eb 100644 --- a/code/modules/client/preference_setup/preference_setup.dm +++ b/code/modules/client/preference_setup/preference_setup.dm @@ -27,6 +27,11 @@ 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 = 5 diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm deleted file mode 100644 index d355926c873..00000000000 --- a/code/modules/client/preferences_gear.dm +++ /dev/null @@ -1,1546 +0,0 @@ -var/global/list/gear_datums = list() - -/hook/startup/proc/populate_gear_list() - var/list/sort_categories = list( - "[slot_head]" = list(), - "ears" = list(), - "[slot_glasses]" = list(), - "[slot_wear_mask]" = list(), - "[slot_w_uniform]" = list(), - "[slot_tie]" = list(), - "[slot_wear_suit]" = list(), - "[slot_gloves]" = list(), - "[slot_shoes]" = list(), - "utility" = list(), - "misc" = list(), - "unknown" = list() - ) - - //create a list of gear datums to sort - for(var/type in typesof(/datum/gear)-/datum/gear) - var/datum/gear/G = type - if(!initial(G.display_name)) - error("Loadout - Missing display name: [G]") - continue - if(!initial(G.cost)) - error("Loadout - Missing cost: [G]") - continue - if(!initial(G.path)) - error("Loadout - Missing path definition: [G]") - continue - G = new G() - - var/category = (G.sort_category in sort_categories)? G.sort_category : "unknown" - sort_categories[category][G.display_name] = G - - for (var/category in sort_categories) - gear_datums.Add(sortAssoc(sort_categories[category])) - - return 1 - -/datum/gear - var/display_name //Name/index. Must be unique. - var/path //Path to item. - var/cost //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points. - var/slot //Slot to equip to. - var/list/allowed_roles //Roles that can spawn with this item. - var/whitelisted //Term to check the whitelist for.. - var/sort_category - -/datum/gear/New() - ..() - if (!sort_category) - sort_category = "[slot]" - -// This is sorted both by slot and alphabetically! Don't fuck it up! -// Headslot items - -/datum/gear/gbandana - display_name = "bandana, green" - path = /obj/item/clothing/head/greenbandana - cost = 1 - slot = slot_head - -/datum/gear/obandana - display_name = "bandana, orange" - path = /obj/item/clothing/head/orangebandana - cost = 1 - slot = slot_head - -/datum/gear/bandana - display_name = "bandana, pirate-red" - path = /obj/item/clothing/head/bandana - cost = 1 - slot = slot_head - -/datum/gear/bsec_beret - display_name = "beret, navy (officer)" - path = /obj/item/clothing/head/beret/sec - cost = 1 - slot = slot_head - allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective") - -/datum/gear/bsec_beret_warden - display_name = "beret, navy (warden)" - path = /obj/item/clothing/head/beret/sec/warden - cost = 1 - slot = slot_head - allowed_roles = list("Head of Security","Warden") - -/datum/gear/bsec_beret_hos - display_name = "beret, navy (hos)" - path = /obj/item/clothing/head/beret/sec/hos - cost = 1 - slot = slot_head - allowed_roles = list("Head of Security") - -/datum/gear/eng_beret - display_name = "beret, engie-orange" - path = /obj/item/clothing/head/beret/engineering - cost = 1 - slot = slot_head - allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice") - -/datum/gear/purp_beret - display_name = "beret, purple" - path = /obj/item/clothing/head/beret/purple - cost = 1 - slot = slot_head - -/datum/gear/red_beret - display_name = "beret, red" - path = /obj/item/clothing/head/beret - cost = 1 - slot = slot_head - -/datum/gear/sec_beret - display_name = "beret, security" - path = /obj/item/clothing/head/beret/sec - cost = 1 - slot = slot_head - allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective") - -/datum/gear/bcap - display_name = "cap, blue" - path = /obj/item/clothing/head/soft/blue - cost = 1 - slot = slot_head - -/datum/gear/mailman - display_name = "cap, blue station" - path = /obj/item/clothing/head/mailman - cost = 1 - slot = slot_head - -/datum/gear/flatcap - display_name = "cap, brown-flat" - path = /obj/item/clothing/head/flatcap - cost = 1 - slot = slot_head - -/datum/gear/corpcap - display_name = "cap, corporate (Security)" - path = /obj/item/clothing/head/soft/sec/corp - cost = 1 - slot = slot_head - allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective") - -/datum/gear/gcap - display_name = "cap, green" - path = /obj/item/clothing/head/soft/green - cost = 1 - slot = slot_head - -/datum/gear/grcap - display_name = "cap, grey" - path = /obj/item/clothing/head/soft/grey - cost = 1 - slot = slot_head - -/datum/gear/ocap - display_name = "cap, orange" - path = /obj/item/clothing/head/soft/orange - cost = 1 - slot = slot_head - -/datum/gear/purcap - display_name = "cap, purple" - path = /obj/item/clothing/head/soft/purple - cost = 1 - slot = slot_head - -/datum/gear/raincap - display_name = "cap, rainbow" - path = /obj/item/clothing/head/soft/rainbow - cost = 1 - slot = slot_head - -/datum/gear/rcap - display_name = "cap, red" - path = /obj/item/clothing/head/soft/red - cost = 1 - slot = slot_head - -/datum/gear/ycap - display_name = "cap, yellow" - path = /obj/item/clothing/head/soft/yellow - cost = 1 - slot = slot_head - -/datum/gear/wcap - display_name = "cap, white" - path = /obj/item/clothing/head/soft/mime - cost = 1 - slot = slot_head - -/datum/gear/hairflower - display_name = "hair flower pin" - path = /obj/item/clothing/head/hairflower - cost = 1 - slot = slot_head - -/datum/gear/dbhardhat - display_name = "hardhat, blue" - path = /obj/item/clothing/head/hardhat/dblue - cost = 2 - slot = slot_head - allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice") - -/datum/gear/ohardhat - display_name = "hardhat, orange" - path = /obj/item/clothing/head/hardhat/orange - cost = 2 - slot = slot_head - allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice") - -/datum/gear/rhardhat - display_name = "hardhat, red" - path = /obj/item/clothing/head/hardhat/red - cost = 2 - slot = slot_head - allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice") - -/datum/gear/yhardhat - display_name = "hardhat, yellow" - path = /obj/item/clothing/head/hardhat - cost = 2 - slot = slot_head - allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice") - -/datum/gear/boater - display_name = "hat, boatsman" - path = /obj/item/clothing/head/boaterhat - cost = 1 - slot = slot_head - -/datum/gear/bowler - display_name = "hat, bowler" - path = /obj/item/clothing/head/bowler - cost = 1 - slot = slot_head - -/datum/gear/fez - display_name = "hat, fez" - path = /obj/item/clothing/head/fez - cost = 1 - slot = slot_head - -/datum/gear/tophat - display_name = "hat, tophat" - path = /obj/item/clothing/head/that - cost = 1 - slot = slot_head - -// Wig by Earthcrusher, blame him. -/datum/gear/philosopher_wig - display_name = "natural philosopher's wig" - path = /obj/item/clothing/head/philosopher_wig - cost = 1 - slot = slot_head - -/datum/gear/ushanka - display_name = "ushanka" - path = /obj/item/clothing/head/ushanka - cost = 1 - slot = slot_head - -//lol fuck bay ~LordFowl -/datum/gear/zhan_scarf - display_name = "Zhan headscarf" - path = /obj/item/clothing/head/tajaran/scarf - cost = 1 - slot = slot_head - whitelisted = "Tajara" - -// Eyes - -/datum/gear/eyepatch - display_name = "eyepatch" - path = /obj/item/clothing/glasses/eyepatch - cost = 1 - slot = slot_glasses - -/datum/gear/green_glasses - display_name = "glasses, green" - path = /obj/item/clothing/glasses/gglasses - cost = 1 - slot = slot_glasses - -/datum/gear/prescriptionhipster - display_name = "glasses, hipster" - path = /obj/item/clothing/glasses/regular/hipster - cost = 1 - slot = slot_glasses - -/datum/gear/prescription - display_name = "glasses, prescription" - path = /obj/item/clothing/glasses/regular - cost = 1 - slot = slot_glasses - -/datum/gear/monocle - display_name = "monocle" - path = /obj/item/clothing/glasses/monocle - cost = 1 - slot = slot_glasses - -/datum/gear/scanning_goggles - display_name = "scanning goggles" - path = /obj/item/clothing/glasses/regular/scanners - cost = 1 - slot = slot_glasses - -/datum/gear/sciencegoggles - display_name = "science Goggles" - path = /obj/item/clothing/glasses/science - cost = 1 - slot = slot_glasses - -/datum/gear/security - display_name = "security HUD" - path = /obj/item/clothing/glasses/hud/security - cost = 1 - slot = slot_glasses - allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective") - -/datum/gear/thugshades - display_name = "sunglasses, fat" - path = /obj/item/clothing/glasses/sunglasses/big - cost = 1 - slot = slot_glasses - allowed_roles = list("Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain","Security Cadet") - -/datum/gear/prescriptionsun - display_name = "sunglasses, presciption" - path = /obj/item/clothing/glasses/sunglasses/prescription - cost = 2 - slot = slot_glasses - allowed_roles = list("Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain","Security Cadet") - -/datum/gear/blindfold - display_name = "vaurca blindfold" - path = /obj/item/clothing/glasses/sunglasses/blinders - cost = 2 - slot = slot_glasses - whitelisted = "Vaurca" - -// Mask - -/datum/gear/sterilemask - display_name = "sterile mask" - path = /obj/item/clothing/mask/surgical - slot = slot_wear_mask - cost = 2 - -// Uniform slot - -/datum/gear/blazer_blue - display_name = "blazer, blue" - path = /obj/item/clothing/under/blazer - slot = slot_w_uniform - cost = 1 - -/datum/gear/cheongsam - display_name = "cheongsam, white" - path = /obj/item/clothing/under/cheongsam - slot = slot_w_uniform - cost = 1 - -/datum/gear/gearharness - display_name = "gear harness" - path = /obj/item/clothing/under/gearharness - slot = slot_w_uniform - cost = 2 - -/datum/gear/kilt - display_name = "kilt" - path = /obj/item/clothing/under/kilt - slot = slot_w_uniform - cost = 1 - -/datum/gear/track_pants - display_name = "track pants" - path = /obj/item/clothing/under/track - slot = slot_w_uniform - cost = 1 - -/datum/gear/blackjumpskirt - display_name = "jumpskirt, black" - path = /obj/item/clothing/under/blackjumpskirt - slot = slot_w_uniform - cost = 1 - -/datum/gear/blackfjumpsuit - display_name = "jumpsuit, female-black" - path = /obj/item/clothing/under/color/blackf - slot = slot_w_uniform - cost = 1 - -/datum/gear/blackfjumpsuit - display_name = "jumpsuit, rainbow" - path = /obj/item/clothing/under/rainbow - slot = slot_w_uniform - cost = 1 - -/datum/gear/skirt_blue - display_name = "plaid skirt, blue" - path = /obj/item/clothing/under/dress/plaid_blue - slot = slot_w_uniform - cost = 1 - -/datum/gear/skirt_purple - display_name = "plaid skirt, purple" - path = /obj/item/clothing/under/dress/plaid_purple - slot = slot_w_uniform - cost = 1 - -/datum/gear/skirt_red - display_name = "plaid skirt, red" - path = /obj/item/clothing/under/dress/plaid_red - slot = slot_w_uniform - cost = 1 - -/datum/gear/skirt_black - display_name = "skirt, black" - path = /obj/item/clothing/under/blackskirt - slot = slot_w_uniform - cost = 1 - -/datum/gear/amishsuit - display_name = "suit, amish" - path = /obj/item/clothing/under/sl_suit - slot = slot_w_uniform - cost = 1 - -/datum/gear/blacksuit - display_name = "suit, black" - path = /obj/item/clothing/under/suit_jacket - slot = slot_w_uniform - cost = 1 - -/datum/gear/shinyblacksuit - display_name = "suit, shiny-black" - path = /obj/item/clothing/under/lawyer/black - slot = slot_w_uniform - cost = 1 - -/datum/gear/bluesuit - display_name = "suit, blue" - path = /obj/item/clothing/under/lawyer/blue - slot = slot_w_uniform - cost = 1 - -/datum/gear/burgundysuit - display_name = "suit, burgundy" - path = /obj/item/clothing/under/suit_jacket/burgundy - slot = slot_w_uniform - cost = 1 - -/datum/gear/checkeredsuit - display_name = "suit, checkered" - path = /obj/item/clothing/under/suit_jacket/checkered - slot = slot_w_uniform - cost = 1 - -/datum/gear/charcoalsuit - display_name = "suit, charcoal" - path = /obj/item/clothing/under/suit_jacket/charcoal - slot = slot_w_uniform - cost = 1 - -/datum/gear/execsuit - display_name = "suit, executive" - path = /obj/item/clothing/under/suit_jacket/really_black - slot = slot_w_uniform - cost = 1 - -/datum/gear/femaleexecsuit - display_name = "suit, female-executive" - path = /obj/item/clothing/under/suit_jacket/female - slot = slot_w_uniform - cost = 1 - -/datum/gear/gentlesuit - display_name = "suit, gentlemen" - path = /obj/item/clothing/under/gentlesuit - slot = slot_w_uniform - cost = 1 - -/datum/gear/navysuit - display_name = "suit, navy" - path = /obj/item/clothing/under/suit_jacket/navy - slot = slot_w_uniform - cost = 1 - -/datum/gear/redsuit - display_name = "suit, red" - path = /obj/item/clothing/under/suit_jacket/red - slot = slot_w_uniform - cost = 1 - -/datum/gear/redlawyer - display_name = "suit, lawyer-red" - path = /obj/item/clothing/under/lawyer/red - slot = slot_w_uniform - cost = 1 - -/datum/gear/oldmansuit - display_name = "suit, old-man" - path = /obj/item/clothing/under/lawyer/oldman - slot = slot_w_uniform - cost = 1 - -/datum/gear/purplesuit - display_name = "suit, purple" - path = /obj/item/clothing/under/lawyer/purpsuit - slot = slot_w_uniform - cost = 1 - -/datum/gear/tansuit - display_name = "suit, tan" - path = /obj/item/clothing/under/suit_jacket/tan - slot = slot_w_uniform - cost = 1 - -/datum/gear/whitesuit - display_name = "suit, white" - path = /obj/item/clothing/under/scratch - slot = slot_w_uniform - cost = 1 - -/datum/gear/whitebluesuit - display_name = "suit, white-blue" - path = /obj/item/clothing/under/lawyer/bluesuit - slot = slot_w_uniform - cost = 1 - -/datum/gear/sundress - display_name = "sundress" - path = /obj/item/clothing/under/sundress - slot = slot_w_uniform - cost = 1 - -/datum/gear/sundress_white - display_name = "sundress, white" - path = /obj/item/clothing/under/sundress_white - slot = slot_w_uniform - cost = 1 - -/datum/gear/uniform_captain - display_name = "uniform, captain's dress" - path = /obj/item/clothing/under/dress/dress_cap - slot = slot_w_uniform - cost = 1 - allowed_roles = list("Captain") - -/datum/gear/corpsecsuit - display_name = "uniform, corporate (Security)" - path = /obj/item/clothing/under/rank/security/corp - cost = 1 - slot = slot_w_uniform - allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective") - -/datum/gear/uniform_hop - display_name = "uniform, HoP's dress" - path = /obj/item/clothing/under/dress/dress_hop - slot = slot_w_uniform - cost = 1 - allowed_roles = list("Head of Personnel") - -/datum/gear/uniform_hr - display_name = "uniform, HR director (HoP)" - path = /obj/item/clothing/under/dress/dress_hr - slot = slot_w_uniform - cost = 1 - allowed_roles = list("Head of Personnel") - -/datum/gear/navysecsuit - display_name = "uniform, navyblue (Security)" - path = /obj/item/clothing/under/rank/security/navyblue - cost = 1 - slot = slot_w_uniform - allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective") - -//medical scrubs - -/datum/gear/bluescrub - display_name = "medical scrubs, blue" - path = /obj/item/clothing/under/rank/medical/blue - slot = slot_w_uniform - cost = 1 - allowed_roles = list("Scientist","Chief Medical Officer","Medical Doctor","Geneticist","Paramedic","Nursing Intern","Xenobiologist","Roboticist","Research Director","Detective",) - -/datum/gear/greenscrub - display_name = "medical scrubs, green" - path = /obj/item/clothing/under/rank/medical/green - slot = slot_w_uniform - cost = 1 - allowed_roles = list("Scientist","Chief Medical Officer","Medical Doctor","Geneticist","Paramedic","Nursing Intern","Xenobiologist","Roboticist","Research Director","Detective",) - -/datum/gear/purplescrub - display_name = "medical scrubs, purple" - path = /obj/item/clothing/under/rank/medical/purple - slot = slot_w_uniform - cost = 1 - allowed_roles = list("Scientist","Chief Medical Officer","Medical Doctor","Geneticist","Paramedic","Nursing Intern","Xenobiologist","Roboticist","Research Director","Detective",) - -/datum/gear/blackscrub - display_name = "medical scrubs, black" - path = /obj/item/clothing/under/rank/medical/black - slot = slot_w_uniform - cost = 1 - allowed_roles = list("Scientist","Chief Medical Officer","Medical Doctor","Geneticist","Paramedic","Nursing Intern","Xenobiologist","Roboticist","Research Director","Detective",) - -// Attachments -/datum/gear/armband_cargo - display_name = "armband, cargo" - path = /obj/item/clothing/accessory/armband/cargo - slot = slot_tie - cost = 1 - allowed_roles = list("Cargo Technician","Quartermaster","Head of Personnel","Shaft Miner") - -/datum/gear/armband_emt - display_name = "armband, EMT" - path = /obj/item/clothing/accessory/armband/medgreen - slot = slot_tie - cost = 1 - allowed_roles = list("Paramedic","Chief Medical Officer") - -/datum/gear/armband_engineering - display_name = "armband, engineering" - path = /obj/item/clothing/accessory/armband/engine - slot = slot_tie - cost = 1 - allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice") - -/datum/gear/armband_hydroponics - display_name = "armband, hydroponics" - path = /obj/item/clothing/accessory/armband/hydro - slot = slot_tie - cost = 1 - allowed_roles = list("Head of Personnel","Gardener") - -/datum/gear/armband_medical - display_name = "armband, medical" - path = /obj/item/clothing/accessory/armband/med - slot = slot_tie - cost = 1 - allowed_roles = list("Chief Medical Officer","Medical Doctor","Paramedic","Nursing Intern","Psychiatrist","Chemist",) - -/datum/gear/armband - display_name = "armband, red" - path = /obj/item/clothing/accessory/armband - slot = slot_tie - cost = 1 - -/datum/gear/armband_science - display_name = "armband, science" - path = /obj/item/clothing/accessory/armband/science - slot = slot_tie - cost = 1 - allowed_roles = list("Research Director","Scientist","Xenobiologist","Roboticist","Lab Assistant","Geneticist") - -/datum/gear/armband_movement - display_name = "armband, synthetic intelligence movement" - path = /obj/item/clothing/accessory/armband/movement - slot = slot_tie - cost = 1 - -/datum/gear/atlas - display_name = "armband, ATLAS" - path = /obj/item/clothing/accessory/armband/atlas - slot = slot_tie - cost = 1 - -/datum/gear/armpit - display_name = "holster, armpit" - path = /obj/item/clothing/accessory/holster/armpit - slot = slot_tie - cost = 1 - allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective","Security Cadet") - -/datum/gear/hip - display_name = "holster, hip" - path = /obj/item/clothing/accessory/holster/hip - slot = slot_tie - cost = 1 - allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective","Security Cadet") - -/datum/gear/waist - display_name = "holster, waist" - path = /obj/item/clothing/accessory/holster/waist - slot = slot_tie - cost = 1 - allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective","Security Cadet") - -/datum/gear/thigh - display_name = "holster, thigh" - path = /obj/item/clothing/accessory/holster/thigh - slot = slot_tie - cost = 1 - allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective","Security Cadet") - -/datum/gear/tie_blue - display_name = "tie, blue" - path = /obj/item/clothing/accessory/blue - slot = slot_tie - cost = 1 - -/datum/gear/tie_red - display_name = "tie, red" - path = /obj/item/clothing/accessory/red - slot = slot_tie - cost = 1 - -/datum/gear/tie_horrible - display_name = "tie, socially disgraceful" - path = /obj/item/clothing/accessory/horrible - slot = slot_tie - cost = 1 - -/datum/gear/brown_vest - display_name = "webbing, engineering" - path = /obj/item/clothing/accessory/storage/brown_vest - slot = slot_tie - cost = 1 - allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice") - -/datum/gear/black_vest - display_name = "webbing, security" - path = /obj/item/clothing/accessory/storage/black_vest - slot = slot_tie - cost = 1 - allowed_roles = list("Security Officer","Head of Security","Warden","Security Cadet","Detective") - -/datum/gear/webbing - display_name = "webbing, simple" - path = /obj/item/clothing/accessory/storage/webbing - slot = slot_tie - cost = 2 - -/datum/gear/suspenders - display_name = "suspenders" - path = /obj/item/clothing/accessory/suspenders - cost = 1 - slot = slot_tie - -/datum/gear/wcoat - display_name = "waistcoat" - path = /obj/item/clothing/accessory/wcoat - cost = 1 - slot = slot_tie - -// Suit slot - -/datum/gear/apron - display_name = "apron, blue" - path = /obj/item/clothing/suit/apron - cost = 1 - slot = slot_wear_suit - -/datum/gear/bomber - display_name = "bomber jacket" - path = /obj/item/clothing/suit/storage/toggle/bomber - cost = 2 - slot = slot_wear_suit - -/datum/gear/leather_jacket - display_name = "leather jacket, black" - path = /obj/item/clothing/suit/storage/leather_jacket - cost = 2 - slot = slot_wear_suit - -/datum/gear/leather_jacket_nt - display_name = "leather jacket, corporate, black" - path = /obj/item/clothing/suit/storage/leather_jacket/nanotrasen - cost = 2 - slot = slot_wear_suit - -/datum/gear/brown_jacket - display_name = "leather jacket, brown" - path = /obj/item/clothing/suit/storage/toggle/brown_jacket - cost = 2 - slot = slot_wear_suit - -/datum/gear/brown_jacket_nt - display_name = "leather jacket, corporate, brown" - path = /obj/item/clothing/suit/storage/toggle/brown_jacket/nanotrasen - cost = 2 - slot = slot_wear_suit - -/datum/gear/hazard_vest - display_name = "hazard vest" - path = /obj/item/clothing/suit/storage/hazardvest - cost = 2 - slot = slot_wear_suit - allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice") - -/datum/gear/hoodie - display_name = "hoodie, grey" - path = /obj/item/clothing/suit/storage/toggle/hoodie - cost = 2 - slot = slot_wear_suit - -/datum/gear/hoodie/black - display_name = "hoodie, black" - path = /obj/item/clothing/suit/storage/toggle/hoodie/black - cost = 2 - -/datum/gear/unathi_mantle - display_name = "hide mantle (Unathi)" - path = /obj/item/clothing/suit/unathi/mantle - cost = 1 - slot = slot_wear_suit - whitelisted = "Unathi" - -/datum/gear/labcoat - display_name = "labcoat" - path = /obj/item/clothing/suit/storage/toggle/labcoat - cost = 2 - slot = slot_wear_suit - -/datum/gear/bluelabcoat - display_name = "labcoat, blue" - path = /obj/item/clothing/suit/storage/toggle/labcoat/blue - cost = 2 - slot = slot_wear_suit - -/datum/gear/greenlabcoat - display_name = "labcoat, green" - path = /obj/item/clothing/suit/storage/toggle/labcoat/green - cost = 2 - slot = slot_wear_suit - -/datum/gear/orangelabcoat - display_name = "labcoat, orange" - path = /obj/item/clothing/suit/storage/toggle/labcoat/orange - cost = 2 - slot = slot_wear_suit - -/datum/gear/purplelabcoat - display_name = "labcoat, purple" - path = /obj/item/clothing/suit/storage/toggle/labcoat/purple - cost = 2 - slot = slot_wear_suit - -/datum/gear/redlabcoat - display_name = "labcoat, red" - path = /obj/item/clothing/suit/storage/toggle/labcoat/red - cost = 2 - slot = slot_wear_suit - -/datum/gear/overalls - display_name = "overalls" - path = /obj/item/clothing/suit/apron/overalls - cost = 1 - slot = slot_wear_suit - -/datum/gear/bponcho - display_name = "poncho, blue" - path = /obj/item/clothing/suit/poncho/blue - cost = 1 - slot = slot_wear_suit - -/datum/gear/gponcho - display_name = "poncho, green" - path = /obj/item/clothing/suit/poncho/green - cost = 1 - slot = slot_wear_suit - -/datum/gear/pponcho - display_name = "poncho, purple" - path = /obj/item/clothing/suit/poncho/purple - cost = 1 - slot = slot_wear_suit - -/datum/gear/rponcho - display_name = "poncho, red" - path = /obj/item/clothing/suit/poncho/red - cost = 1 - slot = slot_wear_suit - -/datum/gear/poncho - display_name = "poncho, tan" - path = /obj/item/clothing/suit/poncho - cost = 1 - slot = slot_wear_suit - -/datum/gear/unathi_robe - display_name = "roughspun robe (Unathi)" - path = /obj/item/clothing/suit/unathi/robe - cost = 1 - slot = slot_wear_suit - whitelisted = "Unathi" - -/datum/gear/blue_lawyer_jacket - display_name = "suit jacket, blue" - path = /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket - cost = 2 - slot = slot_wear_suit - -/datum/gear/purple_lawyer_jacket - display_name = "suit jacket, purple" - path = /obj/item/clothing/suit/storage/lawyer/purpjacket - cost = 2 - slot = slot_wear_suit - -/datum/gear/zhan_furs - display_name = "zhan-Khazan furs" - path = /obj/item/clothing/suit/tajaran/furs - cost = 1 - slot = slot_wear_suit - whitelisted = "Tajara" - -/datum/gear/track_jacket - display_name = "track jacket" - path = /obj/item/clothing/suit/storage/toggle/tracksuit - cost = 1 - slot = slot_wear_suit - -// Gloves - -/datum/gear/black_gloves - display_name = "gloves, black" - path = /obj/item/clothing/gloves/black - cost = 2 - slot = slot_gloves - -/datum/gear/blue_gloves - display_name = "gloves, blue" - path = /obj/item/clothing/gloves/blue - cost = 2 - slot = slot_gloves - -/datum/gear/brown_gloves - display_name = "gloves, brown" - path = /obj/item/clothing/gloves/brown - cost = 2 - slot = slot_gloves - -/datum/gear/light_brown_gloves - display_name = "gloves, light-brown" - path = /obj/item/clothing/gloves/light_brown - cost = 2 - slot = slot_gloves - -/datum/gear/green_gloves - display_name = "gloves, green" - path = /obj/item/clothing/gloves/green - cost = 2 - slot = slot_gloves - -/datum/gear/grey_gloves - display_name = "gloves, grey" - path = /obj/item/clothing/gloves/grey - cost = 2 - slot = slot_gloves - -/datum/gear/latex_gloves - display_name = "gloves, latex" - path = /obj/item/clothing/gloves/latex - cost = 2 - slot = slot_gloves - - -/datum/gear/orange_gloves - display_name = "gloves, orange" - path = /obj/item/clothing/gloves/orange - cost = 2 - slot = slot_gloves - -/datum/gear/purple_gloves - display_name = "gloves, purple" - path = /obj/item/clothing/gloves/purple - cost = 2 - slot = slot_gloves - -/datum/gear/rainbow_gloves - display_name = "gloves, rainbow" - path = /obj/item/clothing/gloves/rainbow - cost = 2 - slot = slot_gloves - -/datum/gear/red_gloves - display_name = "gloves, red" - path = /obj/item/clothing/gloves/red - cost = 2 - slot = slot_gloves - -/datum/gear/white_gloves - display_name = "gloves, white" - path = /obj/item/clothing/gloves/white - cost = 2 - slot = slot_gloves - -/datum/gear/black_gloves_unathi - display_name = "black gloves, unathi" - path = /obj/item/clothing/gloves/black/unathi - cost = 2 - slot = slot_gloves - -/datum/gear/black_gloves_tajara - display_name = "black gloves, tajaran" - path = /obj/item/clothing/gloves/black/tajara - cost = 2 - slot = slot_gloves - -/datum/gear/red_gloves_unathi - display_name = "red gloves, unathi" - path = /obj/item/clothing/gloves/red/unathi - cost = 2 - slot = slot_gloves - -/datum/gear/red_gloves_tajaran - display_name = "red gloves, tajaran" - path = /obj/item/clothing/gloves/red/tajara - cost = 2 - slot = slot_gloves - -/datum/gear/blue_gloves_unathi - display_name = "blue gloves, unathi" - path = /obj/item/clothing/gloves/blue/unathi - cost = 2 - slot = slot_gloves - -/datum/gear/blue_gloves_tajaran - display_name = "blue gloves, tajaran" - path = /obj/item/clothing/gloves/blue/tajara - cost = 2 - slot = slot_gloves - -/datum/gear/orange_gloves_unathi - display_name = "orange gloves, unathi" - path = /obj/item/clothing/gloves/orange/unathi - cost = 2 - slot = slot_gloves - -/datum/gear/orange_gloves_tajaran - display_name = "orange gloves, tajaran" - path = /obj/item/clothing/gloves/orange/tajara - cost = 2 - slot = slot_gloves - -/datum/gear/purple_gloves_unathi - display_name = "purple gloves, unathi" - path = /obj/item/clothing/gloves/purple/unathi - cost = 2 - slot = slot_gloves - -/datum/gear/purple_gloves_tajaran - display_name = "purple gloves, tajaran" - path = /obj/item/clothing/gloves/purple/tajara - cost = 2 - slot = slot_gloves - -/datum/gear/brown_gloves_unathi - display_name = "brown gloves, unathi" - path = /obj/item/clothing/gloves/brown/unathi - cost = 2 - slot = slot_gloves - -/datum/gear/brown_gloves_tajaran - display_name = "brown gloves, tajaran" - path = /obj/item/clothing/gloves/brown/tajara - cost = 2 - slot = slot_gloves - -/datum/gear/green_gloves_unathi - display_name = "green gloves, unathi" - path = /obj/item/clothing/gloves/green/unathi - cost = 2 - slot = slot_gloves - -/datum/gear/green_gloves_tajaran - display_name = "green gloves, tajaran" - path = /obj/item/clothing/gloves/green/tajara - cost = 2 - slot = slot_gloves - -/datum/gear/white_gloves_unathi - display_name = "white gloves, unathi" - path = /obj/item/clothing/gloves/white/unathi - cost = 2 - slot = slot_gloves - -/datum/gear/white_gloves_tajaran - display_name = "white gloves, tajaran" - path = /obj/item/clothing/gloves/white/tajara - cost = 2 - slot = slot_gloves - -/datum/gear/watch - display_name = "watch" - path = /obj/item/clothing/gloves/watch - cost = 2 - slot = slot_gloves - -// Shoelocker - -/datum/gear/jackboots - display_name = "jackboots" - path = /obj/item/clothing/shoes/jackboots - cost = 1 - slot = slot_shoes -// allowed_roles = list("Security Cadet","Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain") - -/datum/gear/toeless_jackboots - display_name = "toe-less jackboots" - path = /obj/item/clothing/shoes/jackboots/unathi - cost = 1 - slot = slot_shoes -// allowed_roles = list("Security Cadet","Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain") - -/datum/gear/workboots - display_name = "workboots" - path = /obj/item/clothing/shoes/workboots - cost = 1 - slot = slot_shoes -// allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice") - -/datum/gear/sandal - display_name = "sandals" - path = /obj/item/clothing/shoes/sandal - cost = 1 - slot = slot_shoes - -/datum/gear/black_shoes - display_name = "shoes, black" - path = /obj/item/clothing/shoes/black - cost = 1 - slot = slot_shoes - -/datum/gear/blue_shoes - display_name = "shoes, blue" - path = /obj/item/clothing/shoes/blue - cost = 1 - slot = slot_shoes - -/datum/gear/brown_shoes - display_name = "shoes, brown" - path = /obj/item/clothing/shoes/brown - cost = 1 - slot = slot_shoes - -/datum/gear/laceyshoes - display_name = "shoes, classy" - path = /obj/item/clothing/shoes/laceup - cost = 1 - slot = slot_shoes - -/datum/gear/dress_shoes - display_name = "shoes, dress" - path = /obj/item/clothing/shoes/laceup - cost = 1 - slot = slot_shoes - -/datum/gear/green_shoes - display_name = "shoes, green" - path = /obj/item/clothing/shoes/green - cost = 1 - slot = slot_shoes - -/datum/gear/leather - display_name = "shoes, leather" - path = /obj/item/clothing/shoes/leather - cost = 1 - slot = slot_shoes - -/datum/gear/orange_shoes - display_name = "shoes, orange" - path = /obj/item/clothing/shoes/orange - cost = 1 - slot = slot_shoes - -/datum/gear/purple_shoes - display_name = "shoes, purple" - path = /obj/item/clothing/shoes/purple - cost = 1 - slot = slot_shoes - -/datum/gear/rainbow_shoes - display_name = "shoes, rainbow" - path = /obj/item/clothing/shoes/rainbow - cost = 1 - slot = slot_shoes - -/datum/gear/red_shoes - display_name = "shoes, red" - path = /obj/item/clothing/shoes/red - cost = 1 - slot = slot_shoes - -/datum/gear/white_shoes - display_name = "shoes, white" - path = /obj/item/clothing/shoes/white - cost = 1 - slot = slot_shoes - -/datum/gear/yellow_shoes - display_name = "shoes, yellow" - path = /obj/item/clothing/shoes/yellow - cost = 1 - slot = slot_shoes - -// "Useful" items - I'm guessing things that might be used at work? - -/datum/gear/briefcase - display_name = "briefcase" - path = /obj/item/weapon/storage/briefcase - sort_category = "utility" - cost = 2 - -/datum/gear/clipboard - display_name = "clipboard" - path = /obj/item/weapon/clipboard - sort_category = "utility" - cost = 1 - -/datum/gear/folder_blue - display_name = "folder, blue" - path = /obj/item/weapon/folder/blue - sort_category = "utility" - cost = 1 - -/datum/gear/folder_grey - display_name = "folder, grey" - path = /obj/item/weapon/folder - sort_category = "utility" - cost = 1 - -/datum/gear/folder_red - display_name = "folder, red" - path = /obj/item/weapon/folder/red - sort_category = "utility" - cost = 1 - -/datum/gear/folder_white - display_name = "folder, white" - path = /obj/item/weapon/folder/white - sort_category = "utility" - cost = 1 - -/datum/gear/folder_yellow - display_name = "folder, yellow" - path = /obj/item/weapon/folder/yellow - sort_category = "utility" - cost = 1 - -/datum/gear/paicard - display_name = "personal AI device" - path = /obj/item/device/paicard - sort_category = "utility" - cost = 2 - -/datum/gear/wallet - display_name = "wallet" - path = /obj/item/weapon/storage/wallet - sort_category = "utility" - cost = 1 - -// Reserved for later use -// /datum/gear/cheaptablet -// display_name = "cheap tablet computer" -// path = /obj/item/modular_computer/tablet/preset/custom_loadout/cheap -// sort_category = "utility" -// cost = 3 -// -// /datum/gear/normaltablet -// display_name = "tablet computer" -// path = /obj/item/modular_computer/tablet/preset/custom_loadout/advanced -// sort_category = "utility" -// cost = 4 - -// The rest of the trash. - -/datum/gear/ashtray - display_name = "ashtray, plastic" - path = /obj/item/weapon/material/ashtray/plastic - sort_category = "misc" - cost = 1 - -/datum/gear/boot_knife - display_name = "boot knife" - path = /obj/item/weapon/material/kitchen/utensil/knife/boot - sort_category = "misc" - cost = 3 - -/datum/gear/cane - display_name = "cane" - path = /obj/item/weapon/cane - sort_category = "misc" - cost = 1 - -/datum/gear/dice - display_name = "d20" - path = /obj/item/weapon/dice/d20 - sort_category = "misc" - cost = 1 - -/datum/gear/cards - display_name = "deck of cards" - path = /obj/item/weapon/deck/cards - sort_category = "misc" - cost = 1 - -/datum/gear/tarot - display_name = "deck of tarot cards" - path = /obj/item/weapon/deck/tarot - sort_category = "misc" - cost = 1 - -/datum/gear/holder - display_name = "card holder" - path = /obj/item/weapon/deck/holder - sort_category = "misc" - cost = 1 - -/datum/gear/cardemon_pack - display_name = "\improper cardemon booster pack" - path = /obj/item/weapon/pack/cardemon - sort_category = "misc" - cost = 1 - -/datum/gear/spaceball_pack - display_name = "\improper spaceball booster pack" - path = /obj/item/weapon/pack/spaceball - sort_category = "misc" - cost = 1 - -/datum/gear/flask - display_name = "flask" - path = /obj/item/weapon/reagent_containers/food/drinks/flask/barflask - sort_category = "misc" - cost = 1 - -/datum/gear/vacflask - display_name = "vacuum-flask" - path = /obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask - sort_category = "misc" - cost = 1 -/datum/gear/blipstick - display_name = "lipstick, black" - path = /obj/item/weapon/lipstick/black - sort_category = "misc" - cost = 1 - -/datum/gear/jlipstick - display_name = "lipstick, jade" - path = /obj/item/weapon/lipstick/jade - sort_category = "misc" - cost = 1 - -/datum/gear/plipstick - display_name = "lipstick, purple" - path = /obj/item/weapon/lipstick/purple - sort_category = "misc" - cost = 1 - -/datum/gear/rlipstick - display_name = "lipstick, red" - path = /obj/item/weapon/lipstick - sort_category = "misc" - cost = 1 - -/datum/gear/smokingpipe - display_name = "pipe, smoking" - path = /obj/item/clothing/mask/smokable/pipe - sort_category = "misc" - cost = 1 - -/datum/gear/cornpipe - display_name = "pipe, corn" - path = /obj/item/clothing/mask/smokable/pipe/cobpipe - sort_category = "misc" - cost = 1 - -/datum/gear/cigar_case - display_name = "cigar case" - path = /obj/item/weapon/storage/fancy/cigar - sort_category = "misc" - cost = 2 - -/datum/gear/cigarettes - display_name = "pack of DromedaryCo cigarettes" - path = /obj/item/weapon/storage/fancy/cigarettes/dromedaryco - sort_category = "misc" - cost = 2 - -/datum/gear/matchbook - display_name = "matchbook" - path = /obj/item/weapon/storage/box/matches - sort_category = "misc" - cost = 1 - -/datum/gear/comb - display_name = "purple comb" - path = /obj/item/weapon/haircomb - sort_category = "misc" - cost = 1 - -/datum/gear/cape - display_name = "tunnel cloak" - path = /obj/item/weapon/storage/backpack/cloak - sort_category = "misc" - cost = 1 - -/datum/gear/mirror - display_name = "handheld mirror" - path = /obj/item/weapon/mirror - sort_category = "misc" - cost = 1 - -/datum/gear/zippo - display_name = "zippo" - path = /obj/item/weapon/flame/lighter/zippo - sort_category = "misc" - cost = 1 - -/datum/gear/recorder - display_name = "universal recorder" - path = /obj/item/device/taperecorder - sort_category = "misc" - cost = 1 - -// Stuff worn on the ears. Items here go in the "ears" sort_category but they must not use -// the slot_r_ear or slot_l_ear as the slot, or else players will spawn with no headset. -/datum/gear/earmuffs - display_name = "earmuffs" - path = /obj/item/clothing/ears/earmuffs - cost = 1 - sort_category = "ears" - -/datum/gear/skrell_chain - display_name = "skrell headtail-wear, female, chain" - path = /obj/item/clothing/ears/skrell/chain - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/skrell_plate - display_name = "skrell headtail-wear, male, bands" - path = /obj/item/clothing/ears/skrell/band - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/skrell_cloth_male - display_name = "skrell headtail-wear, male, cloth" - path = /obj/item/clothing/ears/skrell/cloth_male - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/skrell_cloth_female - display_name = "skrell headtail-wear, female, cloth" - path = /obj/item/clothing/ears/skrell/cloth_female - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/red_jeweled - display_name = "skrell headtail-wear, female, red-jeweled chain" - path = /obj/item/clothing/ears/skrell/redjewel_chain - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/ebony_chain - display_name = "skrell headtail-wear, female, ebony chain" - path = /obj/item/clothing/ears/skrell/ebony_chain - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/redjeweled_band - display_name = "skrell headtail-wear, male, red-jeweled bands" - path = /obj/item/clothing/ears/skrell/redjeweled_band - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/ebony_band - display_name = "skrell headtail-wear, male, ebony bands" - path = /obj/item/clothing/ears/skrell/ebony_band - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/bluejeweled_chain - display_name = "skrell headtail-wear, female, blue-jeweled chain" - path = /obj/item/clothing/ears/skrell/bluejeweled_chain - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/bluejeweled_band - display_name = "skrell headtail-wear, male, blue-jeweled bands" - path = /obj/item/clothing/ears/skrell/bluejeweled_band - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/silver_chain - display_name = "skrell headtail-wear, female, silver chain" - path = /obj/item/clothing/ears/skrell/silver_chain - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/silver_band - display_name = "skrell headtail-wear, male, silver bands" - path = /obj/item/clothing/ears/skrell/silver_band - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/blue_skrell_cloth_band_male - display_name = "skrell headtail-wear, male, blue cloth" - path = /obj/item/clothing/ears/skrell/blue_skrell_cloth_band_male - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/blue_skrell_cloth_band_female - display_name = "skrell headtail-wear, female, blue cloth" - path = /obj/item/clothing/ears/skrell/blue_skrell_cloth_band_female - cost = 1 - sort_category = "ears" - whitelisted = "Skrell" - -/datum/gear/bandanna_r - display_name = "neck bandanna, red" - path = /obj/item/clothing/ears/bandanna - cost = 1 - sort_category = "ears" - -/datum/gear/bandanna_bl - display_name = "neck bandanna, blue" - path = /obj/item/clothing/ears/bandanna/blue - cost = 1 - sort_category = "ears" - -/datum/gear/bandanna_bk - display_name = "neck bandanna, black" - path = /obj/item/clothing/ears/bandanna/black - cost = 1 - sort_category = "ears" diff --git a/code/modules/reagents/reagent_containers/food/lunch.dm b/code/modules/reagents/reagent_containers/food/lunch.dm new file mode 100644 index 00000000000..6392213adae --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/lunch.dm @@ -0,0 +1,123 @@ +var/list/lunchables_lunches_ = list(/obj/item/weapon/reagent_containers/food/snacks/sandwich, + /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice, + /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice, + /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice, + /obj/item/weapon/reagent_containers/food/snacks/margheritaslice, + /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice, + /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice, + /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice, + /obj/item/weapon/reagent_containers/food/snacks/tastybread, + /obj/item/weapon/reagent_containers/food/snacks/liquidfood, + /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry, + /obj/item/weapon/reagent_containers/food/snacks/tossedsalad, + /obj/item/weapon/reagent_containers/food/snacks/koiswaffles) + +var/list/lunchables_snacks_ = list(/obj/item/weapon/reagent_containers/food/snacks/donut/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly, + /obj/item/weapon/reagent_containers/food/snacks/muffin, + /obj/item/weapon/reagent_containers/food/snacks/popcorn, + /obj/item/weapon/reagent_containers/food/snacks/sosjerky, + /obj/item/weapon/reagent_containers/food/snacks/no_raisin, + /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie, + /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers, + /obj/item/weapon/reagent_containers/food/snacks/poppypretzel, + /obj/item/weapon/reagent_containers/food/snacks/carrotfries, + /obj/item/weapon/reagent_containers/food/snacks/candiedapple, + /obj/item/weapon/reagent_containers/food/snacks/applepie, + /obj/item/weapon/reagent_containers/food/snacks/cherrypie, + /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit, + /obj/item/weapon/reagent_containers/food/snacks/appletart, + /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice, + /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice, + /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/limecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice, + /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice, + /obj/item/weapon/reagent_containers/food/snacks/watermelonslice, + /obj/item/weapon/reagent_containers/food/snacks/applecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice, + /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks, + /obj/item/weapon/reagent_containers/food/snacks/friedkois, + /obj/item/weapon/reagent_containers/food/snacks/meatsnack, + /obj/item/weapon/reagent_containers/food/snacks/maps, + /obj/item/weapon/reagent_containers/food/snacks/nathisnack) + +var/list/lunchables_drinks_ = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola, + /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, + /obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind, + /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb, + /obj/item/weapon/reagent_containers/food/drinks/cans/starkist, + /obj/item/weapon/reagent_containers/food/drinks/cans/space_up, + /obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime, + /obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea, + /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice, + /obj/item/weapon/reagent_containers/food/drinks/cans/tonic, + /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater) + +// This default list is a bit different, it contains items we don't want +var/list/lunchables_drink_reagents_ = list(/datum/reagent/drink/nothing, + /datum/reagent/drink/doctor_delight, + /datum/reagent/drink/dry_ramen, + /datum/reagent/drink/hell_ramen, + /datum/reagent/drink/hot_ramen, + /datum/reagent/drink/nuka_cola, + /datum/reagent/drink/black_coffee, + /datum/reagent/drink/white_coffee, + /datum/reagent/drink/cafe_melange) + +// This default list is a bit different, it contains items we don't want +var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit, + /datum/reagent/ethanol/atomicbomb, + /datum/reagent/ethanol/beepsky_smash, + /datum/reagent/ethanol/coffee, + /datum/reagent/ethanol/hippies_delight, + /datum/reagent/ethanol/hooch, + /datum/reagent/ethanol/thirteenloko, + /datum/reagent/ethanol/manhattan_proj, + /datum/reagent/ethanol/neurotoxin, + /datum/reagent/ethanol/pwine, + /datum/reagent/ethanol/threemileisland, + /datum/reagent/ethanol/toxins_special) + +/proc/lunchables_lunches() + if(!(lunchables_lunches_[lunchables_lunches_[1]])) + lunchables_lunches_ = init_lunchable_list(lunchables_lunches_) + return lunchables_lunches_ + +/proc/lunchables_snacks() + if(!(lunchables_snacks_[lunchables_snacks_[1]])) + lunchables_snacks_ = init_lunchable_list(lunchables_snacks_) + return lunchables_snacks_ + +/proc/lunchables_drinks() + if(!(lunchables_drinks_[lunchables_drinks_[1]])) + lunchables_drinks_ = init_lunchable_list(lunchables_drinks_) + return lunchables_drinks_ + +/proc/lunchables_drink_reagents() + if(!(lunchables_drink_reagents_[lunchables_drink_reagents_[1]])) + lunchables_drink_reagents_ = init_lunchable_reagent_list(lunchables_drink_reagents_, /datum/reagent/drink) + return lunchables_drink_reagents_ + +/proc/lunchables_ethanol_reagents() + if(!(lunchables_ethanol_reagents_[lunchables_ethanol_reagents_[1]])) + lunchables_ethanol_reagents_ = init_lunchable_reagent_list(lunchables_ethanol_reagents_, /datum/reagent/ethanol) + return lunchables_ethanol_reagents_ + +/proc/init_lunchable_list(var/list/lunches) + . = list() + for(var/lunch in lunches) + var/obj/O = lunch + .[initial(O.name)] = lunch + return sortAssoc(.) + +/proc/init_lunchable_reagent_list(var/list/banned_reagents, var/reagent_types) + . = list() + for(var/reagent_type in subtypesof(reagent_types)) + if(reagent_type in banned_reagents) + continue + var/datum/reagent/reagent = reagent_type + .[initial(reagent.name)] = initial(reagent.id) + return sortAssoc(.) diff --git a/html/changelogs/alberky-PR-1648.yml b/html/changelogs/alberky-PR-1648.yml new file mode 100644 index 00000000000..f4044d08745 --- /dev/null +++ b/html/changelogs/alberky-PR-1648.yml @@ -0,0 +1,9 @@ +author: Alberyk + +delete-after: True + +changes: + - rscadd: "Ported the newest custom loadout from baystation12." + - rscadd: "Loadout flask and vacuum-flask can now be prefilled." + - rscadd: "Added lunchboxes." + - rscadd: "Added more options to the custom loadout, like winter coats." diff --git a/icons/obj/lunchbox.dmi b/icons/obj/lunchbox.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f75c38737219819e636b2769b5aa005259f25e03 GIT binary patch literal 2640 zcmXw*dpy(oAIHDLSk_z<8RfFm38U2##xiY=%iJxu47rPt`*kLlPKI?Ha!(_YCXNZY z6jD)gO+#2axutSB70G44>HN;)^LV@;pZEKp&*SlYzh1A$=bDX`2~1R86aWC2nJK{z z06_dJ@D3u#uW!ptJ^6zI8w-;0)2C0(&CT`o^-(Aki9~X8a?;h+MWfN(m~JMT$+O_) zA@dk01`?Ua#dFbUCLYhlV7icbd01>en#ok7(ePX@w!dGEriNysRU=gKTs*cP>*@+G z1kji+4BQpYV4z&#a2|kWvvFK5o<>va>cWi4$#r*QcmOgDKz3s=Y#i>9jLcNsL{ny6 z;pOYRAs#cOk`Y(fce7`%a{XPCd}^O&0p zaWF^p^}3IY`1m=a%h>40v(Y(JVp^)6W1x0uh-OMUEHTJ1Al2Y;kM!))Ash~;rlw|L zVSz*90mTW zKoNFU_5f~v+?U_5<48^s1fOuPuz=8rfRJDSh$$%@wS=Z9$#t%=D57__#))k5ZznL! zIthnh(Qk4~Z+@(YYg7{}?i80BepjU{w;|Z4yw)@;k6&PpbPgaVKdXHp&E4jdWapYP z4v)a#A6uj;hhAGB^I>ovaz#a_!MUUtPDv5BW`ko?)4!?o2I>|1SDt{Vf^`P8BL8st zxL!v9XA6xwhBf~(fF@0BoH+{B_4jL$sjmzksqQ`Wq|t%msrS`VgH7jn+oYk>)f%xR z^Pt#1qjGtZhAG(w1TBfPBM5fUe|vO6`TaWw%C9Nwze zR(Wb%yyv7u5HQ6n33=tEQ+w2nAidVcrbH>F9i!w$&UCYEOK9KnjGI){`%hb)Qx?nF z9nGA#`USBqt`Ox^iIb5E*3(!v*xUp&}ZNz8wAs_QCL_OTr~#}&n^v%KD! z_R^7*k8mWu)cLis(e>eW?NZKc4dmUD_Si3dbKfY@SJ?5Nmm-%pYX#zKMqkLiocR8l z<&2khTge*P4vFdD@IwF8p`1UziL1SIDO=rJ`8_FnIU->a($9c32Xi)uBNo8bW4-a^jS z)Rs6Nv_-a1R4f592wESi&kPJ1>u9DPKbMs)HXu4=q;EqOJiEt-Ul8|MEY>|@q@-wM z)Mmn&ENSZI69Zcgjy3~Af=EZe)HY>Gn9r>3pu)fhc~B6Z4~Gc(*l_&=A_ zT&OTVOKNB~$8_aH(@t3d^Wx_drRC)J!z39-qh?^#L)2wsRLdT0Hg?2$xfoEumwCK)plnxMMmYXko zjTFfZi|&@6 zi4w>jq3ihtcr6Ef7CS;09CT0pOCU(lnd8((aC-_Cy3DhWzWPPI~lzg#1HfnGG zmsIg)TTUmR&5GEsG{V)eRHnpyR{+ia;qHk)^b^$OD?^elM$7$cuv7_*4Bukm;e09i zM``7m2b2K)N1A>dMH%K7{c0CpZ%fWhfI^{lmQdPc?Uh&>TOxfaW46e>p&$u+XHQFW zc{1OR?(tzVwd!(0>dy+8?rEvAa%}9ug9^YQ|Aw8saQ*iD=b{rkk*d__24d(N3&u^& z@whw6p!P&o6KK?(Lj`7DT?!kthJL#I%$Zj@StAqFVc(_i5$lz>LpNmK(CO9p2v3H0 zzH!)07(IXf9C>`UnrCI`T>s5VyDitnd1Blted}>kj!V(>?0}&q>{gSu4ISulSs~G` z^q+i|d|1wO6MhK!U>~|#{imKw*1^TSu^ttza+_1Z8`*sw_omgyo5quWiYIEu zGyZwS9v`xF!uZ;DWh>&L$8J)wQgUfhSPd~pql~weny~9m_XU0Wyc69$<2Jxba>+Mu zTkMGPdv#!Gg2@2q)=?7&K^xmoGO*w-jYEl1<}3X_;aG;85Q7{`5>aS*2s$9T@^W3_ zppdkwALJtNcjc(HFHBRVcrcFwo&9G*aCzGh*dj-KsNMe{-h~dx;q$XuCR1rb7Mq{$ zzY?@LmTM@OOU_i!sNPBw_9*L@pES7HhoUQfTJ|Ld&97jD*4yO8oR#}iL=H;b%YkgI z|Cc{|;mpUAH8*7Z@ewQPyJ8Gq6`qvf_b;xh`~aC${4TC}WZ|^J z!S#)efahuO)&4&V@x{;6p4UmP@TbG#5clM`li~i!4NEmcx5QPDaJ|4=w!Fe}+mCy% doN?g^GH*_v99+Z<^M4$GnXwh&{#lPJ{{ucl$jbl# literal 0 HcmV?d00001