[SEMI-MODULAR] Ports the old food like/dislike system (#2092)

* added: bobjoga code

* the numbers

Co-authored-by: Ranged <nickvanderkroon@gmail.com>
This commit is contained in:
NotRanged
2020-12-30 21:19:13 +00:00
committed by GitHub
co-authored by Ranged
parent 4c5433d5cf
commit df0318d50e
3 changed files with 132 additions and 0 deletions
@@ -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
@@ -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 += "<center><h2>Quirk Setup</h2>"
dat += "<a href='?_src_=prefs;preference=trait;task=menu'>Configure Quirks</a><br></center>"
dat += "<center><b>Current Quirks:</b> [all_quirks.len ? all_quirks.Join(", ") : "None"]</center>"
dat += "<center><h2>Food Setup</h2>"
dat += "<a href='?_src_=prefs;preference=food;task=menu'>Configure Foods</a></center>"
dat += "<center><b>Current Likings:</b> [foodlikes.len ? foodlikes.Join(", ") : "None"]</center>"
dat += "<center><b>Current Dislikings:</b> [fooddislikes.len ? fooddislikes.Join(", ") : "None"]</center>"
dat += "<h2>Identity</h2>"
dat += "<table width='100%'><tr><td width='75%' valign='top'>"
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 += "<center><b>Choose food setup</b></center><br>"
dat += "<div align='center'>Click on \"like\" to add a food type to your likings. Click on \"dislike\" to add it to your dislikings.<br>"
dat += "Food types cannot be liked and disliked at the same time.<br>"
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.<br>"
dat += "Having no food preferences means you'll just default your species' standard instead.</div><br>"
dat += "<center><a href='?_src_=prefs;preference=food;task=close'>Done</a></center>"
dat += "<hr>"
dat += "<center><b>Current Likings:</b> [foodlikes.len ? foodlikes.Join(", ") : "None"] ([foodlikes.len]/[maxlikes])</center><br>"
dat += "<center><b>Current Dislikings:</b> [fooddislikes.len ? fooddislikes.Join(", ") : "None"] ([fooddislikes.len]/[maxdislikes])</center>"
dat += "<hr>"
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 += "<center><p style='color: [font_color];'><b>[F]: </p></b>"
dat += "<a style='background-color: #32c232;' href='?_src_=prefs;preference=food;task=update;like=[F]'>Like</a>"
dat += "<a href='?_src_=prefs;preference=food;task=update;dislike=[F]'>Dislike</a></center>"
else if(dislikes)
dat += "<center><p style='color: [font_color];'><b>[F]: </p></b>"
dat += "<a href='?_src_=prefs;preference=food;task=update;like=[F]'>Like</a>"
dat += "<a style='background-color: #ff1a1a;' href='?_src_=prefs;preference=food;task=update;dislike=[F]'>Dislike</a></center>"
else
dat += "<center><p style='color: [font_color];'><b>[F]: </p></b>"
dat += "<a href='?_src_=prefs;preference=food;task=update;like=[F]'>Like</a>"
dat += "<a href='?_src_=prefs;preference=food;task=update;dislike=[F]'>Dislike</a></center>"
dat += "<br><center><a href='?_src_=prefs;preference=food;task=reset'>Reset Food Preferences</a></center>"
var/datum/browser/popup = new(user, "mob_occupation", "<div align='center'>Food Preferences</div>", 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)
@@ -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