diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index a5e8e31cd8..3d01682e49 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -60,7 +60,7 @@ if(prob(5)) new /obj/item/clothing/gloves/yellow(src) else - new /obj/item/stack/cable_coil(src,30,color) + new /obj/item/stack/cable_coil/random(src,30) /obj/item/weapon/storage/toolbox/syndicate name = "black and red toolbox" @@ -71,11 +71,11 @@ /obj/item/weapon/storage/toolbox/syndicate/New() ..() + new /obj/item/clothing/gloves/yellow(src) new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wrench(src) new /obj/item/weapon/weldingtool(src) new /obj/item/weapon/crowbar(src) - new /obj/item/stack/cable_coil/random(src,30,color) new /obj/item/weapon/wirecutters(src) new /obj/item/device/multitool(src) @@ -86,41 +86,21 @@ item_state = "toolbox_pink" desc = "A little lunchbox. This one is the colors of the rainbow!" var/filled = FALSE + attack_verb = list("lunched") /obj/item/weapon/storage/toolbox/lunchbox/New() ..() if(filled) - var/lunch = pick(/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) - - var/snack = pick(/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) - - var/drink = pick(/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) - + 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 @@ -154,7 +134,7 @@ filled = TRUE /obj/item/weapon/storage/toolbox/lunchbox/mars - name = "Mars university lunchbox" + name = "\improper Mars university lunchbox" icon_state = "lunchbox_marsuniversity" item_state = "toolbox_red" desc = "A little lunchbox. This one is branded with the Mars university logo!" @@ -163,7 +143,7 @@ filled = TRUE /obj/item/weapon/storage/toolbox/lunchbox/cti - name = "CTI lunchbox" + name = "\improper CTI lunchbox" icon_state = "lunchbox_cti" item_state = "toolbox_blue" desc = "A little lunchbox. This one is branded with the CTI logo!" @@ -172,7 +152,7 @@ filled = TRUE /obj/item/weapon/storage/toolbox/lunchbox/nymph - name = "Diona nymph lunchbox" + name = "\improper Diona nymph lunchbox" icon_state = "lunchbox_dionanymph" item_state = "toolbox_yellow" desc = "A little lunchbox. This one is an adorable Diona nymph on the side!" diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index eb25cb24e8..db9fa5227d 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -409,7 +409,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O choice_options = list("Normal","Prosthesis") var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in choice_options - if(!new_state && !CanUseTopic(user)) return TOPIC_NOACTION + if(!new_state || !CanUseTopic(user)) return TOPIC_NOACTION switch(new_state) if("Normal") diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm index ead0c2e738..27d71f9e55 100644 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -27,7 +27,7 @@ var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() ..() /datum/gear_tweak/color/get_contents(var/metadata) - return "(Color)" + return "Color: " /datum/gear_tweak/color/get_default() return valid_colors ? valid_colors[1] : COLOR_GRAY @@ -54,7 +54,7 @@ var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() ..() /datum/gear_tweak/path/get_contents(var/metadata) - return "(Type: [metadata])" + return "Type: [metadata]" /datum/gear_tweak/path/get_default() return valid_paths[1] @@ -75,20 +75,21 @@ var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() var/list/valid_contents /datum/gear_tweak/contents/New() - valid_contents = args + valid_contents = args.Copy() ..() /datum/gear_tweak/contents/get_contents(var/metadata) - return "(Contents)" + return "Contents: [english_list(metadata, and_text = ", ")]" /datum/gear_tweak/contents/get_default() . = list() for(var/i = 1 to valid_contents.len) - var/list/contents = valid_contents[i] - . += contents[1] + . += "Random" /datum/gear_tweak/contents/get_metadata(var/user, var/list/metadata) . = list() + for(var/i = metadata.len to valid_contents.len) + metadata += "Random" for(var/i = 1 to valid_contents.len) var/entry = input(user, "Choose an entry.", "Character Preference", metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None")) if(entry) @@ -100,12 +101,13 @@ var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() if(metadata.len != valid_contents.len) return for(var/i = 1 to valid_contents.len) + var/path var/list/contents = valid_contents[i] - var/path = contents[metadata[i]] - if(path) - if(path == "Random") - path = pick(contents) - path = contents[path] - else if(path == "None") - continue - new path(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) diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index 09ab09d3db..4244cd0037 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -123,25 +123,34 @@ var/list/gear_datums = list() for(var/gear_name in LC.gear) var/datum/gear/G = LC.gear[gear_name] var/ticked = (G.display_name in pref.gear) - var/obj/item/temp = G.path - . += "[G.display_name]" + . += "[G.display_name]" + . += "[G.cost]" + . += "[G.description]" if(ticked) - var/metadata = pref.gear[G.display_name] - if(!metadata) - metadata = list() - pref.gear[G.display_name] = metadata + . += "" for(var/datum/gear_tweak/tweak in G.gear_tweaks) - var/tweak_input = metadata["[tweak]"] - if(!tweak_input) - tweak_input = tweak.get_default() - metadata["[tweak]"] = tweak_input - . += " [tweak.get_contents(tweak_input)]" - . += "" - . += "[G.cost]" - . += "[initial(temp.desc)]" + . += " [tweak.get_contents(get_tweak_metadata(G, tweak))]" + . += "" . += "" . = jointext(.) +/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"]] @@ -160,11 +169,10 @@ var/list/gear_datums = list() 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) - if(!metadata && !CanUseTopic(user)) + var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak)) + if(!metadata || !CanUseTopic(user)) return TOPIC_NOACTION - var/gear_metadata = pref.gear[gear.display_name] - gear_metadata["[tweak]"] = metadata + set_tweak_metadata(gear, tweak, metadata) return TOPIC_REFRESH else if(href_list["select_category"]) current_tab = href_list["select_category"] @@ -176,6 +184,7 @@ var/list/gear_datums = list() /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. @@ -184,6 +193,12 @@ var/list/gear_datums = list() 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 diff --git a/code/modules/client/preference_setup/loadout/loadout_general.dm b/code/modules/client/preference_setup/loadout/loadout_general.dm index e51d299d75..89aaa0a8d1 100644 --- a/code/modules/client/preference_setup/loadout/loadout_general.dm +++ b/code/modules/client/preference_setup/loadout/loadout_general.dm @@ -39,34 +39,17 @@ path = /obj/item/weapon/haircomb /datum/gear/lunchbox - display_name = "lunchbox, rainbow" + display_name = "lunchbox" + description = "A little lunchbox." cost = 2 - path = /obj/item/weapon/storage/toolbox/lunchbox/filled + path = /obj/item/weapon/storage/toolbox/lunchbox -/datum/gear/lunchbox/heartlunchbox - display_name = "lunchbox, heart" - path = /obj/item/weapon/storage/toolbox/lunchbox/heart/filled - -/datum/gear/lunchbox/catlunchbox - display_name = "lunchbox, cat" - path = /obj/item/weapon/storage/toolbox/lunchbox/cat/filled - -/datum/gear/lunchbox/ntlunchbox - display_name = "lunchbox, Nanotrasen" - path = /obj/item/weapon/storage/toolbox/lunchbox/nt/filled - -/datum/gear/lunchbox/marslunchbox - display_name = "lunchbox, Mars university" - path = /obj/item/weapon/storage/toolbox/lunchbox/mars/filled - -/datum/gear/lunchbox/ctilunchbox - display_name = "lunchbox, CTI" - path = /obj/item/weapon/storage/toolbox/lunchbox/cti/filled - -/datum/gear/lunchbox/nymphlunchbox - display_name = "lunchbox, Diona nymph" - path = /obj/item/weapon/storage/toolbox/lunchbox/nymph/filled - -/datum/gear/lunchbox/syndicatelunchbox - display_name = "lunchbox, black and red" - path = /obj/item/weapon/storage/toolbox/lunchbox/syndicate/filled +/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()) diff --git a/code/modules/client/preference_setup/skills/skills.dm b/code/modules/client/preference_setup/skills/skills.dm index 1f60cd3bb7..8370f35668 100644 --- a/code/modules/client/preference_setup/skills/skills.dm +++ b/code/modules/client/preference_setup/skills/skills.dm @@ -57,7 +57,7 @@ else if(href_list["preconfigured"]) var/selected = input(user, "Select a skillset", "Skillset") as null|anything in SKILL_PRE - if(!selected && !CanUseTopic(user)) return + if(!selected || !CanUseTopic(user)) return pref.ZeroSkills(1) for(var/V in SKILL_PRE[selected]) 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 0000000000..f2b114d62c --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/lunch.dm @@ -0,0 +1,74 @@ +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) + +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) + +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) + +/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/init_lunchable_list(var/list/lunches) + var/list/unsorted_lunches = list() + for(var/lunch in lunches) + var/obj/O = lunch + unsorted_lunches[initial(O.name)] = lunch + return sortAssoc(unsorted_lunches) diff --git a/polaris.dme b/polaris.dme index c19f3b95ea..ce495611f6 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1677,6 +1677,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"