From df0318d50e04d9f86098e299ca000db05e4276bc Mon Sep 17 00:00:00 2001 From: NotRanged Date: Wed, 30 Dec 2020 22:19:13 +0100 Subject: [PATCH] [SEMI-MODULAR] Ports the old food like/dislike system (#2092) * added: bobjoga code * the numbers Co-authored-by: Ranged --- .../subsystem/processing/quirks.dm | 15 +++ .../modules/client/preferences.dm | 110 ++++++++++++++++++ .../modules/client/preferences_savefile.dm | 7 ++ 3 files changed, 132 insertions(+) diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 6b7b3a99933..32dddfa494d 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -64,3 +64,18 @@ PROCESSING_SUBSYSTEM_DEF(quirks) // Assign wayfinding pinpointer granting quirk if they're new if(cli.get_exp_living(TRUE) < EXP_ASSIGN_WAYFINDER && !user.has_quirk(/datum/quirk/needswayfinder)) user.add_quirk(/datum/quirk/needswayfinder, TRUE) + + + // SKYRAT EDIT ADDITION START - Customization (food prefs) + // This was done in this proc on old skyrat and i cba to find a better way + var/mob/living/carbon/human/H = user + if(istype(H)) + if(cli.prefs.foodlikes.len) + H.dna.species.liked_food = 0 + for(var/V in cli.prefs.foodlikes) + H.dna.species.liked_food |= cli.prefs.foodlikes[V] + if(cli.prefs.fooddislikes.len) + H.dna.species.disliked_food = 0 + for(var/V in cli.prefs.fooddislikes) + H.dna.species.disliked_food |= cli.prefs.fooddislikes[V] + // SKYRAT EDIT ADDITION END diff --git a/modular_skyrat/modules/customization/modules/client/preferences.dm b/modular_skyrat/modules/customization/modules/client/preferences.dm index cc7bcd7e4ed..9ab2ceea735 100644 --- a/modular_skyrat/modules/customization/modules/client/preferences.dm +++ b/modular_skyrat/modules/customization/modules/client/preferences.dm @@ -1,3 +1,22 @@ +// i shall taint your pretty preferences file with bobcode +GLOBAL_LIST_INIT(food, list( + "Meat" = MEAT, + "Vegetables" = VEGETABLES, + "Raw" = RAW, + "Junk Food" = JUNKFOOD, + "Grain" = GRAIN, + "Fruit" = FRUIT, + "Dairy" = DAIRY, + "Fried" = FRIED, + "Alcohol" = ALCOHOL, + "Sugar" = SUGAR, + "Gross" = GROSS, + "Toxic" = TOXIC, + "Pineapple" = PINEAPPLE, + "Breakfast" = BREAKFAST, + "Cloth" = CLOTH + )) + /datum/preferences var/client/parent //doohickeys for savefiles @@ -83,6 +102,10 @@ var/list/features = MANDATORY_FEATURE_LIST var/list/randomise = list(RANDOM_UNDERWEAR = FALSE, RANDOM_UNDERWEAR_COLOR = TRUE, RANDOM_UNDERSHIRT = FALSE, RANDOM_SOCKS = FALSE, RANDOM_BACKPACK = TRUE, RANDOM_JUMPSUIT_STYLE = TRUE, RANDOM_HAIRSTYLE = TRUE, RANDOM_HAIR_COLOR = TRUE, RANDOM_FACIAL_HAIRSTYLE = TRUE, RANDOM_FACIAL_HAIR_COLOR = TRUE, RANDOM_SKIN_TONE = TRUE, RANDOM_EYE_COLOR = TRUE) var/phobia = "spiders" + var/list/foodlikes = list() + var/list/fooddislikes = list() + var/maxlikes = 4 + var/maxdislikes = 6 var/list/custom_names = list() var/preferred_ai_core_display = "Blue" @@ -319,6 +342,12 @@ dat += "

Quirk Setup

" dat += "Configure Quirks
" dat += "
Current Quirks: [all_quirks.len ? all_quirks.Join(", ") : "None"]
" + + dat += "

Food Setup

" + dat += "Configure Foods
" + dat += "
Current Likings: [foodlikes.len ? foodlikes.Join(", ") : "None"]
" + dat += "
Current Dislikings: [fooddislikes.len ? fooddislikes.Join(", ") : "None"]
" + dat += "

Identity

" dat += "
" if(is_banned_from(user.ckey, "Appearance")) @@ -1524,6 +1553,45 @@ SetQuirks(user) return TRUE + else if(href_list["preference"] == "food") + switch(href_list["task"]) + if("close") + user << browse(null, "window=mob_occupation") + ShowChoices(user) + if("update") + if(href_list["like"]) + for(var/F in GLOB.food) + if(F == href_list["like"]) + if(!foodlikes[F]) + if(foodlikes.len < maxlikes) + foodlikes[F] = GLOB.food[F] + if(fooddislikes[F]) + fooddislikes.Remove(F) + else + foodlikes.Remove(F) + if(href_list["dislike"]) + for(var/F in GLOB.food) + if(F == href_list["dislike"]) + if(!fooddislikes[F]) + if(fooddislikes.len < maxdislikes) + fooddislikes[F] = GLOB.food[F] + if(foodlikes[F]) + foodlikes.Remove(F) + else + fooddislikes.Remove(F) + if(foodlikes.len > maxlikes) + foodlikes.Cut(maxlikes+1) + if(fooddislikes.len > maxdislikes) + foodlikes.Cut(maxdislikes+1) + SetFood(user) + if("reset") + foodlikes = list() + fooddislikes = list() + SetFood(user) + else + SetFood(user) + return TRUE + switch(href_list["task"]) if("augment_style") needs_update = TRUE @@ -2841,3 +2909,45 @@ return TRUE else return FALSE + +// old bobcode copypaste, handle with caution +/datum/preferences/proc/SetFood(mob/user) + var/list/dat = list() + dat += "
Choose food setup

" + dat += "
Click on \"like\" to add a food type to your likings. Click on \"dislike\" to add it to your dislikings.
" + dat += "Food types cannot be liked and disliked at the same time.
" + dat += "If a food type is already liked or disliked, simply click the appropriate button again to remove it from your like or dislike list.
" + dat += "Having no food preferences means you'll just default your species' standard instead.

" + dat += "
Done
" + dat += "
" + dat += "
Current Likings: [foodlikes.len ? foodlikes.Join(", ") : "None"] ([foodlikes.len]/[maxlikes])

" + dat += "
Current Dislikings: [fooddislikes.len ? fooddislikes.Join(", ") : "None"] ([fooddislikes.len]/[maxdislikes])
" + dat += "
" + for(var/F in GLOB.food) + var/likes = FALSE + var/dislikes = FALSE + for(var/food in foodlikes) + if(food == F) + likes = TRUE + for(var/food in fooddislikes) + if(food == F) + dislikes = TRUE + var/font_color = "#8686ff" + if(likes) + dat += "

[F]:

" + dat += "Like" + dat += "Dislike
" + else if(dislikes) + dat += "

[F]:

" + dat += "Like" + dat += "Dislike
" + else + dat += "

[F]:

" + dat += "Like" + dat += "Dislike
" + dat += "
Reset Food Preferences
" + + var/datum/browser/popup = new(user, "mob_occupation", "
Food Preferences
", 900, 600) //no reason not to reuse the occupation window, as it's cleaner that way + popup.set_window_options("can_close=0") + popup.set_content(dat.Join()) + popup.open(FALSE) diff --git a/modular_skyrat/modules/customization/modules/client/preferences_savefile.dm b/modular_skyrat/modules/customization/modules/client/preferences_savefile.dm index 4bc8caa63e1..b1fda684284 100644 --- a/modular_skyrat/modules/customization/modules/client/preferences_savefile.dm +++ b/modular_skyrat/modules/customization/modules/client/preferences_savefile.dm @@ -487,6 +487,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car READ_FILE(S["socks_color"], socks_color) socks_color = sanitize_hexcolor(socks_color, 3, 0) + READ_FILE(S["foodlikes"], foodlikes) + READ_FILE(S["fooddislikes"], fooddislikes) + + foodlikes = SANITIZE_LIST(foodlikes) + fooddislikes = SANITIZE_LIST(fooddislikes) features = SANITIZE_LIST(features) mutant_bodyparts = SANITIZE_LIST(mutant_bodyparts) body_markings = SANITIZE_LIST(body_markings) @@ -603,6 +608,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["scars3"] , scars_list["3"]) WRITE_FILE(S["scars4"] , scars_list["4"]) WRITE_FILE(S["scars5"] , scars_list["5"]) + WRITE_FILE(S["foodlikes"] , foodlikes) + WRITE_FILE(S["fooddislikes"] , fooddislikes) //Custom names