"
dat += "Clothing & Equipment"
dat += "Underwear:[underwear]"
@@ -1284,9 +1336,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(jobban_isbanned(user, rank))
HTML += "[rank] | BANNED |
"
continue
+ //Hyperstation Edit - Whitelisted roles
if((rank in GLOB.silly_positions) && (!sillyroles))
HTML += "[rank] WHITELIST | "
continue
+ if((rank in GLOB.important_positions) && (!importantroles)) //TODO: make whitelists a bit more accurate than "silly" and "important"
+ HTML += "[rank] WHITELIST | "
+ continue
+ //Hyperstation Edit end
var/required_playtime_remaining = job.required_playtime_remaining(user.client)
if(required_playtime_remaining)
HTML += "[rank] \[ [get_exp_format(required_playtime_remaining)] as [job.get_exp_req_type()] \] | "
@@ -1898,8 +1955,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
grad_style = previous_list_item(grad_style, GLOB.hair_gradients_list)
- if("cycle_bg")
- bgstate = next_list_item(bgstate, bgstate_options)
+ if("select_bg")
+ var/new_bg = input(user, "Select a background:", "Character Preference") as null|anything in bgstate_options
+ if(new_bg)
+ bgstate = new_bg
if("underwear")
var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_list
@@ -2288,6 +2347,81 @@ GLOBAL_LIST_EMPTY(preferences_datums)
new_dors = input(user, "Choose your character's dorsal tube type:", "Character Preference") as null|anything in GLOB.xeno_dorsal_list
if(new_dors)
features["xenodorsal"] = new_dors
+
+ // HYPER EDIT: Cosmetic body parts
+ if("cosmetic_head")
+ var/list/selectable_parts = list()
+ for(var/path in GLOB.cosmetic_heads)
+ var/datum/cosmetic_part/possible_part = GLOB.cosmetic_heads[path]
+ var/list/supported_species = possible_part.supported_species
+ if(!show_mismatched_markings && supported_species && !supported_species.Find(pref_species.id))
+ continue
+ selectable_parts[possible_part.name] = path
+ if(!selectable_parts.len)
+ to_chat(user, "There are no valid alt heads for this species!")
+ var/new_cosmetic_part
+ var/question = "Choose your character's alt head style:"
+ new_cosmetic_part = input(user, question, "Character Preference") as null|anything in selectable_parts
+ if(new_cosmetic_part)
+ features["cosmetic_head"] = GLOB.cosmetic_heads[selectable_parts[new_cosmetic_part]]
+ update_preview_icon()
+
+ if("cosmetic_chest")
+ var/list/selectable_parts = list()
+ for(var/path in GLOB.cosmetic_chests)
+ var/datum/cosmetic_part/possible_part = GLOB.cosmetic_chests[path]
+ var/list/supported_species = possible_part.supported_species
+ if(!show_mismatched_markings && supported_species && !supported_species.Find(pref_species.id))
+ continue
+ selectable_parts[possible_part.name] = path
+ if(!selectable_parts.len)
+ to_chat(user, "There are no valid alt chests for this species!")
+ var/new_cosmetic_part
+ var/question = "Choose your character's alt chest style:"
+ new_cosmetic_part = input(user, question, "Character Preference") as null|anything in selectable_parts
+ if(new_cosmetic_part)
+ features["cosmetic_chest"] = GLOB.cosmetic_chests[selectable_parts[new_cosmetic_part]]
+ update_preview_icon()
+
+ // currently symmetrical
+ if("cosmetic_arms")
+ var/list/selectable_parts = list()
+ for(var/path in GLOB.cosmetic_arms)
+ var/datum/cosmetic_part/possible_part = GLOB.cosmetic_arms[path]
+ var/list/supported_species = possible_part.supported_species
+ if(!show_mismatched_markings && supported_species && !supported_species.Find(pref_species.id))
+ continue
+ selectable_parts[possible_part.name] = path
+ if(!selectable_parts.len)
+ to_chat(user, "There are no valid alt arms for this species!")
+ var/new_cosmetic_part
+ var/question = "Choose your character's alt arms style:"
+ new_cosmetic_part = input(user, question, "Character Preference") as null|anything in selectable_parts
+ if(new_cosmetic_part)
+ features["cosmetic_l_arm"] = GLOB.cosmetic_arms[selectable_parts[new_cosmetic_part]]
+ features["cosmetic_r_arm"] = GLOB.cosmetic_arms[selectable_parts[new_cosmetic_part]]
+ update_preview_icon()
+
+ if("cosmetic_legs")
+ var/list/selectable_parts = list()
+ for(var/path in GLOB.cosmetic_legs)
+ var/datum/cosmetic_part/possible_part = GLOB.cosmetic_legs[path]
+ var/list/supported_species = possible_part.supported_species
+ if(!show_mismatched_markings && supported_species && !supported_species.Find(pref_species.id))
+ continue
+ selectable_parts[possible_part.name] = path
+ if(!selectable_parts.len)
+ to_chat(user, "There are no valid alt legs for this species!")
+ var/new_cosmetic_part
+ var/question = "Choose your character's alt legs style:"
+ new_cosmetic_part = input(user, question, "Character Preference") as null|anything in selectable_parts
+ if(new_cosmetic_part)
+ features["cosmetic_l_leg"] = GLOB.cosmetic_legs[selectable_parts[new_cosmetic_part]]
+ features["cosmetic_r_leg"] = GLOB.cosmetic_legs[selectable_parts[new_cosmetic_part]]
+ update_preview_icon()
+
+ // End hyper edit
+
//Genital code
if("cock_color")
var/new_cockcolor = input(user, "Penis color:", "Character Preference") as color|null
@@ -2435,9 +2569,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
features["belly_size"] = clamp(new_bellysize, BELLY_MIN_SIZE, BELLY_MAX_SIZE)
if("butt_size")
- var/new_buttsize = input(user, "Butt size :\n([BUTT_MIN_SIZE]-[BUTT_MAX_SIZE])", "Character Preference") as num|null
+ var/new_buttsize = input(user, "Butt size :\n([BUTT_MIN_SIZE]-[BUTT_MAX_SIZE_SELECTABLE])", "Character Preference") as num|null
if(new_buttsize != null)
- features["butt_size"] = clamp(new_buttsize, BUTT_MIN_SIZE, BUTT_MAX_SIZE)
+ features["butt_size"] = clamp(new_buttsize, BUTT_MIN_SIZE, BUTT_MAX_SIZE_SELECTABLE)
+ //Restricted to 5 in menu, because we have chems to make them big IC, like with breasts and what not.
if("vag_shape")
var/new_shape
@@ -2687,6 +2822,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if("all")
be_random_body = !be_random_body
+ if("cosmetic_markings")
+ features["cosmetic_markings"] = !features["cosmetic_markings"]
+
if("hear_midis")
toggles ^= SOUND_MIDI
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 80fab69e6..a77f504f8 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -576,6 +576,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
all_quirks -= V
cit_character_pref_load(S)
+ hyper_character_pref_load(S)
return 1
@@ -671,6 +672,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["all_quirks"] , all_quirks)
cit_character_pref_save(S)
+ hyper_character_pref_save(S)
return 1
diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm
index e01b770ba..7e0d0a31a 100644
--- a/code/modules/food_and_drinks/food/snacks_pastry.dm
+++ b/code/modules/food_and_drinks/food/snacks_pastry.dm
@@ -461,6 +461,120 @@
tastes = list("meat" = 2, "dough" = 2, "laziness" = 1)
foodtype = GRAIN | ANTITOXIC
+/obj/item/reagent_containers/food/snacks/donkpocket/taco
+ name = "\improper Taco-pocket"
+ desc = "Es hora de adentrarse en el espacio de bolsillo más salvaje jamás conocido. ¡jajaja!"
+ icon_state = "donkpockettaco"
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/capsaicin = 2)
+ cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
+ filling_color = "#CD853F"
+ tastes = list("meat" = 2, "dough" = 2, "spice" = 2, "vegetables" = 2, "cheese" = 2)
+ foodtype = GRAIN | VEGETABLES | MEAT
+
+/obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
+ name = "warm Taco-pocket"
+ desc = "Es hora de adentrarse en el espacio de bolsillo más salvaje jamás conocido. ¡jajaja!"
+ icon_state = "donkpockettaco"
+ bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/capsaicin = 2)
+ tastes = list("meat" = 2, "dough" = 2, "spice" = 2, "vegetables" = 2, "cheese" = 2)
+ foodtype = GRAIN | VEGETABLES | MEAT
+
+/obj/item/reagent_containers/food/snacks/donkpocket/plasma
+ name = "\improper Poison-pocket"
+ desc = "NOTE: WARNING. For slime species consumption only. Call ###-##-### if injested"
+ icon_state = "donkpocketplasma"
+ list_reagents = list(/datum/reagent/toxin/carpotoxin = 2, /datum/reagent/toxin/plasma = 2, /datum/reagent/fuel = 2)
+ cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
+ filling_color = "#CD853F"
+ tastes = list("meat" = 2, "dough" = 2, "poison" = 2, "welding fuel" = 2)
+ foodtype = GRAIN | TOXIC | MEAT
+
+/obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
+ name = "warm Poison-pocket"
+ desc = "NOTE: WARNING. For slime species consumption only. Call ###-##-### if injested"
+ icon_state = "donkpocketplasma"
+ bonus_reagents = list(/datum/reagent/toxin/carpotoxin = 2, /datum/reagent/toxin/plasma = 2, /datum/reagent/fuel = 2)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4)
+ tastes = list("meat" = 2, "dough" = 2, "poison" = 2, "welding fuel" = 2)
+ foodtype = GRAIN | TOXIC | MEAT
+
+/obj/item/reagent_containers/food/snacks/donkpocket/breakfast
+ name = "\improper Breakfast-pocket"
+ desc = "Now for all you early morning Joes!."
+ icon_state = "donkpocketbreakfast"
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4)
+ cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast
+ filling_color = "#CD853F"
+ tastes = list("meat" = 2, "dough" = 2, "eggs" =2, "bacon" =2)
+ foodtype = GRAIN | DAIRY | MEAT | BREAKFAST
+
+/obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast //IT'S BEEN ELEVEN FUCKING HOURS I HATE BYOND I HATE BYOND I HATE BEYOND!!!
+ name = "warm Breakfast-pocket"
+ desc = "Now for all you early morning Joes!."
+ icon_state = "donkpocketbreakfast"
+ bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4)
+ tastes = list("meat" = 2, "dough" = 2, "eggs" = 2, "bacon" = 2)
+ foodtype = GRAIN | DAIRY | MEAT | BREAKFAST | ANTITOXIC
+
+/obj/item/reagent_containers/food/snacks/donkpocket/moth
+ name = "\improper Moth-pocket"
+ desc = "Donk Corp is now reaching out to all species! Dig in moths one and all."
+ icon_state = "donkpocketmoth"
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4)
+ cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
+ filling_color = "#CD853F"
+ tastes = list("lint" = 2, "dough" = 2, "felt" = 2)
+ foodtype = GRAIN | DAIRY | CLOTH
+
+/obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
+ name = "warm Moth-pocket"
+ desc = "Donk Corp is now reaching out to all species! Dig in moths one and all."
+ icon_state = "donkpocketmoth"
+ bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4)
+ tastes = list("lint" = 2, "dough" = 2, "felt" = 2)
+ foodtype = GRAIN | DAIRY | CLOTH
+
+/obj/item/reagent_containers/food/snacks/donkpocket/vegan
+ name = "\improper Vegan-pocket"
+ desc = "For all you Animal Rights Consortium members out there!."
+ icon_state = "donkpocketvegan"
+ list_reagents = list(/datum/reagent/consumable/nutriment = 2)
+ cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
+ filling_color = "#CD853F"
+ tastes = list("vegetables" = 2, "dough" = 2)
+ foodtype = GRAIN | VEGETABLES
+
+/obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
+ name = "warm Vegan-pocket"
+ desc = "For all you Animal Rights Consortium members out there!."
+ icon_state = "donkpocketvegan"
+ bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 3)
+ tastes = list("vegetables" = 2, "dough" = 2)
+ foodtype = GRAIN | VEGETABLES
+
+/obj/item/reagent_containers/food/snacks/donkpocket/sm
+ name = "\improper Super-pocket"
+ desc = "You're probably not in a good spot if you're laying eyes on this."
+ icon_state = "donkpocketsm"
+ list_reagents = list(/datum/reagent/consumable/nutriment = 99)
+ cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/sm
+ filling_color = "#CD853F"
+ tastes = list("white-noise" = 2)
+ foodtype = TOXIC
+
+/obj/item/reagent_containers/food/snacks/donkpocket/warm/sm
+ name = "warm Super-pocket"
+ desc = "You're probably not in a good spot if you're laying eyes on this."
+ icon_state = "donkpocketsm"
+ bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 99)
+ tastes = list("white-noise" = 2)
+ foodtype = TOXIC
+
/obj/item/reagent_containers/food/snacks/dankpocket
name = "\improper Dank-pocket"
desc = "The food of choice for the seasoned botanist."
@@ -554,7 +668,7 @@
cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/berry
filling_color = "#CD853F"
tastes = list("dough" = 2, "jam" = 2)
- foodtype = GRAIN
+ foodtype = GRAIN | SUGAR
/obj/item/reagent_containers/food/snacks/donkpocket/warm/berry
name = "warm Berry-pocket"
@@ -563,7 +677,7 @@
bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/medicine/omnizine = 1, /datum/reagent/consumable/berryjuice = 3)
tastes = list("dough" = 2, "warm jam" = 2)
- foodtype = GRAIN
+ foodtype = GRAIN | SUGAR
/obj/item/reagent_containers/food/snacks/donkpocket/gondola
name = "\improper Gondola-pocket"
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
index 7c34fc8c2..9100bab34 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
@@ -362,6 +362,159 @@ datum/crafting_recipe/food/donut/meat
tastes = list("meat" = 2, "dough" = 2)
foodtype = GRAIN | VEGETABLES
+/datum/crafting_recipe/food/donkpocket/taco
+ time = 15
+ name = "Taco-pocket"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/pastrybase = 1,
+ /obj/item/reagent_containers/food/snacks/meatball = 1,
+ /obj/item/reagent_containers/food/snacks/grown/carrot = 1,
+ /obj/item/reagent_containers/food/snacks/grown/citrus/lime = 1,
+ )
+ result = /obj/item/reagent_containers/food/snacks/donkpocket/taco
+ subcategory = CAT_PASTRY
+
+/obj/item/reagent_containers/food/snacks/donkpocket/taco
+ name = "\improper Taco-pocket"
+ desc = "Es hora de adentrarse en el espacio de bolsillo más salvaje jamás conocido. ¡jajaja!"
+ icon_state = "donkpockettaco"
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/capsaicin = 2)
+ cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
+ filling_color = "#CD853F"
+ tastes = list("meat" = 2, "dough" = 2, "spice" = 2, "vegetables" = 2, "cheese" = 2)
+ foodtype = GRAIN | VEGETABLES | MEAT
+
+/obj/item/reagent_containers/food/snacks/donkpocket/warm/taco
+ name = "warm Taco-pocket"
+ desc = "Es hora de adentrarse en el espacio de bolsillo más salvaje jamás conocido. ¡jajaja!"
+ icon_state = "donkpockettaco"
+ bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/capsaicin = 2)
+ tastes = list("meat" = 2, "dough" = 2, "spice" = 2, "vegetables" = 2, "cheese" = 2)
+ foodtype = GRAIN | VEGETABLES | MEAT
+
+/datum/crafting_recipe/food/donkpocket/plasma
+ time = 15
+ name = "Plasma-pocket"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/pastrybase = 1,
+ /obj/item/reagent_containers/food/snacks/meatball = 1,
+ /datum/reagent/fuel = 1,
+ /datum/reagent/toxin/plasma = 1,
+ )
+ result = /obj/item/reagent_containers/food/snacks/donkpocket/plasma
+ subcategory = CAT_PASTRY
+
+/obj/item/reagent_containers/food/snacks/donkpocket/plasma
+ name = "\improper Poison-pocket"
+ desc = "NOTE: WARNING. For slime species consumption only. Call ###-##-### if injested"
+ icon_state = "donkpocketplasma"
+ list_reagents = list(/datum/reagent/toxin/carpotoxin = 2, /datum/reagent/toxin/plasma = 2, /datum/reagent/fuel = 2)
+ cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
+ filling_color = "#CD853F"
+ tastes = list("meat" = 2, "dough" = 2, "poison" = 2, "welding fuel" = 2)
+ foodtype = GRAIN | TOXIC | MEAT
+
+/obj/item/reagent_containers/food/snacks/donkpocket/warm/plasma
+ name = "warm Poison-pocket"
+ desc = "NOTE: WARNING. For slime species consumption only. Call ###-##-### if injested"
+ icon_state = "donkpocketplasma"
+ bonus_reagents = list(/datum/reagent/toxin/carpotoxin = 2, /datum/reagent/toxin/plasma = 2, /datum/reagent/fuel = 2)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4)
+ tastes = list("meat" = 2, "dough" = 2, "poison" = 2, "welding fuel" = 2)
+ foodtype = GRAIN | TOXIC | MEAT
+
+/datum/crafting_recipe/food/donkpocket/breakfast
+ time = 15
+ name = "Breakfast-pocket"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/pastrybase = 1,
+ /obj/item/reagent_containers/food/snacks/cheesewedge = 1,
+ /obj/item/reagent_containers/food/snacks/friedegg = 1,
+ /obj/item/reagent_containers/food/snacks/meat/cutlet = 1,
+ )
+ result = /obj/item/reagent_containers/food/snacks/donkpocket/breakfast
+ subcategory = CAT_PASTRY
+
+/obj/item/reagent_containers/food/snacks/donkpocket/breakfast
+ name = "\improper Breakfast-pocket"
+ desc = "Now for all you early morning Joes!."
+ icon_state = "donkpocketbreakfast"
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4)
+ cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast
+ filling_color = "#CD853F"
+ tastes = list("meat" = 2, "dough" = 2, "eggs" = 2, "bacon" = 2)
+ foodtype = GRAIN | DAIRY | MEAT | BREAKFAST
+
+/obj/item/reagent_containers/food/snacks/donkpocket/warm/breakfast
+ name = "warm Breakfast-pocket"
+ desc = "Now for all you early morning Joes!."
+ icon_state = "donkpocketbreakfast"
+ bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4)
+ tastes = list("meat" = 2, "dough" = 2, "eggs" = 2, "bacon" = 2)
+ foodtype = GRAIN | DAIRY | MEAT | BREAKFAST | ANTITOXIC
+
+/datum/crafting_recipe/food/donkpocket/moth
+ time = 15
+ name = "Moth-pocket"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/pastrybase = 1,
+ /obj/item/reagent_containers/food/snacks/cheesewedge = 1,
+ /obj/item/stack/sheet/cloth = 1,
+ )
+ result = /obj/item/reagent_containers/food/snacks/donkpocket/moth
+ subcategory = CAT_PASTRY
+
+/obj/item/reagent_containers/food/snacks/donkpocket/moth
+ name = "\improper Moth-pocket"
+ desc = "Donk Corp is now reaching out to all species! Dig in moths one and all."
+ icon_state = "donkpocketmoth"
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4)
+ cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
+ filling_color = "#CD853F"
+ tastes = list("lint" = 2, "dough" = 2, "felt" = 2)
+ foodtype = GRAIN | DAIRY | CLOTH
+
+/obj/item/reagent_containers/food/snacks/donkpocket/warm/moth
+ name = "warm Moth-pocket"
+ desc = "Donk Corp is now reaching out to all species! Dig in moths one and all."
+ icon_state = "donkpocketmoth"
+ bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 4)
+ tastes = list("lint" = 2, "dough" = 2, "felt" = 2)
+ foodtype = GRAIN | DAIRY | CLOTH
+
+/datum/crafting_recipe/food/donkpocket/vegan
+ time = 15
+ name = "Vegan-pocket"
+ reqs = list(
+ /obj/item/reagent_containers/food/snacks/pastrybase = 1,
+ /obj/item/reagent_containers/food/snacks/grown/cabbage = 1,
+ /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle = 1,
+ )
+ result = /obj/item/reagent_containers/food/snacks/donkpocket/vegan
+ subcategory = CAT_PASTRY
+
+/obj/item/reagent_containers/food/snacks/donkpocket/vegan
+ name = "\improper Vegan-pocket"
+ desc = "For all you Animal Rights Consortium members out there!."
+ icon_state = "donkpocketvegan"
+ list_reagents = list(/datum/reagent/consumable/nutriment = 2)
+ cooked_type = /obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
+ filling_color = "#CD853F"
+ tastes = list("vegetables" = 2, "dough" = 2)
+ foodtype = GRAIN | VEGETABLES
+
+/obj/item/reagent_containers/food/snacks/donkpocket/warm/vegan
+ name = "warm Vegan-pocket"
+ desc = "For all you Animal Rights Consortium members out there!."
+ icon_state = "donkpocketvegan"
+ bonus_reagents = list(/datum/reagent/medicine/omnizine = 1)
+ list_reagents = list(/datum/reagent/consumable/nutriment = 3)
+ tastes = list("vegetables" = 2, "dough" = 2)
+ foodtype = GRAIN | VEGETABLES
+
/datum/crafting_recipe/food/donkpocket/spicy
time = 15
name = "Spicy-pocket"
diff --git a/code/modules/games/unum.dm b/code/modules/games/unum.dm
index 9820fa675..233b62232 100644
--- a/code/modules/games/unum.dm
+++ b/code/modules/games/unum.dm
@@ -10,13 +10,27 @@
//Populate the deck.
/obj/item/toy/cards/deck/unum/populate_deck()
for(var/colour in list("Red","Yellow","Green","Blue"))
- cards += "[colour] 0" //Uno, i mean, cough cough, Unum decks have only one colour of each 0, weird huh?
+ cards += new_card("[colour] 0") //Uno, i mean, cough cough, Unum decks have only one colour of each 0, weird huh?
for(var/k in 0 to 1) //two of each colour of number
- cards += "[colour] skip"
- cards += "[colour] reverse"
- cards += "[colour] draw 2"
+ cards += new_card("[colour] skip")
+ cards += new_card("[colour] reverse")
+ cards += new_card("[colour] draw 2")
for(var/i in 1 to 9)
- cards += "[colour] [i]"
+ cards += new_card("[colour] [i]")
for(var/k in 0 to 3) //4 wilds and draw 4s
- cards += "Wildcard"
- cards += "Draw 4"
+ cards += new_card("Wildcard")
+ cards += new_card("Draw 4")
+
+
+//
+// hyperstation edits below
+// -- sarcoph (july 2022)
+//
+
+/obj/item/toy/cards/deck/unum/proc/new_card(name)
+ return list(list(
+ "name" = name,
+ "icon_state" = name,
+ "rotation" = null,
+ "face_up" = null
+ ))
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 5895c6de3..330744ebf 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -33,6 +33,9 @@
// This is for adminspawn or map-placed growns. They get the default stats of their seed type.
seed = new seed()
seed.adjust_potency(50-seed.potency)
+ else if(!seed)
+ stack_trace("Grown initialized without seed. Okay.")
+ return INITIALIZE_HINT_QDEL
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
@@ -40,13 +43,11 @@
if(dried_type == -1)
dried_type = src.type
- if(seed)
- for(var/datum/plant_gene/trait/T in seed.genes)
- T.on_new(src, loc)
- seed.prepare_result(src)
- transform *= TRANSFORM_USING_VARIABLE(seed.potency, 100) + 0.5 //Makes the resulting produce's sprite larger or smaller based on potency!
- add_juice()
-
+ for(var/datum/plant_gene/trait/T in seed.genes)
+ T.on_new(src, loc)
+ seed.prepare_result(src)
+ AddElement(/datum/element/item_scaling, TRANSFORM_USING_VARIABLE(seed.potency, 100) + 0.5, 1) //Makes the resulting produce's sprite larger or smaller based on potency!
+ add_juice()
/obj/item/reagent_containers/food/snacks/grown/proc/add_juice()
diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm
index cd8ac3df9..fe8414b80 100644
--- a/code/modules/jobs/access.dm
+++ b/code/modules/jobs/access.dm
@@ -127,13 +127,13 @@
return list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING, ACCESS_CENT_BAR)
/proc/get_all_accesses()
- return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
+ return list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_LAMBENT,
ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_MORGUE, ACCESS_RD,
ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_CHEMISTRY, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_MAINT_TUNNELS,
ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD,
ACCESS_TELEPORTER, ACCESS_EVA, ACCESS_HEADS, ACCESS_CAPTAIN, ACCESS_ALL_PERSONAL_LOCKERS,
ACCESS_TECH_STORAGE, ACCESS_CHAPEL_OFFICE, ACCESS_ATMOSPHERICS, ACCESS_KITCHEN,
- ACCESS_BAR, ACCESS_JANITOR, ACCESS_CREMATORIUM, ACCESS_ROBOTICS, ACCESS_CARGO, ACCESS_CONSTRUCTION,
+ ACCESS_BAR, ACCESS_JANITOR, ACCESS_CREMATORIUM, ACCESS_ROBOTICS, ACCESS_CARGO, ACCESS_CONSTRUCTION, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_HYDROPONICS, ACCESS_LIBRARY, ACCESS_LAWYER, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_QM, ACCESS_SURGERY,
ACCESS_THEATRE, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_MAILSORTING, ACCESS_WEAPONS,
ACCESS_VAULT, ACCESS_MINING_STATION, ACCESS_XENOBIOLOGY, ACCESS_CE, ACCESS_HOP, ACCESS_HOS, ACCESS_RC_ANNOUNCE,
@@ -161,9 +161,9 @@
if(0)
return get_all_accesses()
if(1) //station general
- return list(ACCESS_KITCHEN,ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER)
+ return list(ACCESS_KITCHEN,ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER, ACCESS_BARISTA, ACCESS_BARBER)
if(2) //security
- return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP)
+ return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP, ACCESS_LAMBENT)
if(3) //medbay
return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO, ACCESS_PSYCH)
if(4) //research
@@ -224,6 +224,10 @@
return "RD Office"
if(ACCESS_BAR)
return "Bar"
+ if(ACCESS_BARBER)
+ return "Barber"
+ if(ACCESS_BARISTA)
+ return "Barista"
if(ACCESS_JANITOR)
return "Custodial Closet"
if(ACCESS_ENGINE)
@@ -322,6 +326,8 @@
return "Prison Turnstile Entrance"
if(ACCESS_LEAVE_GENPOP)
return "Prison Turnstile Exit"
+ if(ACCESS_LAMBENT)
+ return "Lambent's Quarters"
if(ACCESS_MINERAL_STOREROOM)
return "Mineral Storage"
if(ACCESS_MINISAT)
@@ -357,10 +363,10 @@
return "Code Scotch"
/proc/get_all_jobs()
- return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
+ return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Barista", "Barber", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
"Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer", "Engineering Intern",
"Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Psychologist", "Medical Resident",
- "Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Rookie")
+ "Research Director", "Scientist", "Roboticist", "Research Student", "Head of Security", "Warden", "Detective", "Security Officer", "Rookie", "Lambent")
/proc/get_all_job_icons() //For all existing HUD icons
return get_all_jobs() + list("Prisoner")
diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm
index 1565ab437..61e7d291f 100644
--- a/code/modules/jobs/job_types/captain.dm
+++ b/code/modules/jobs/job_types/captain.dm
@@ -65,7 +65,7 @@ Captain
satchel = /obj/item/storage/backpack/satchel/cap
duffelbag = /obj/item/storage/backpack/duffelbag/captain
- implants = list(/obj/item/implant/mindshield)
+ implants = list(/obj/item/implant/mindshield, /obj/item/implant/kinaris)
accessory = /obj/item/clothing/accessory/medal/gold/captain
chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain)
@@ -100,13 +100,13 @@ Head of Personnel
outfit = /datum/outfit/job/hop
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
- ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
+ ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_PSYCH)
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS,
- ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS,
+ ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE,
ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER,
ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_VAULT, ACCESS_MINING_STATION,
diff --git a/code/modules/jobs/job_types/cargo_service.dm b/code/modules/jobs/job_types/cargo_service.dm
index 9dec1a40a..9480cc9ae 100644
--- a/code/modules/jobs/job_types/cargo_service.dm
+++ b/code/modules/jobs/job_types/cargo_service.dm
@@ -170,7 +170,7 @@ Bartender
outfit = /datum/outfit/job/bartender
- access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
+ access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_BAR, ACCESS_MINERAL_STOREROOM)
@@ -183,7 +183,7 @@ Bartender
ears = /obj/item/radio/headset/headset_srv
uniform = /obj/item/clothing/under/rank/bartender
suit = /obj/item/clothing/suit/armor/vest
- backpack_contents = list(/obj/item/storage/box/beanbag=1,/obj/item/book/granter/action/drink_fling=1)
+ backpack_contents = list(/obj/item/book/granter/action/drink_fling=1)
shoes = /obj/item/clothing/shoes/laceup
/*
@@ -195,7 +195,7 @@ Cook
department_head = list("Head of Personnel")
department_flag = CIVILIAN
faction = "Station"
- total_positions = 2
+ total_positions = 1
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm
index 0b18fd650..94bd75059 100644
--- a/code/modules/jobs/job_types/security.dm
+++ b/code/modules/jobs/job_types/security.dm
@@ -27,11 +27,11 @@ Head of Security
outfit = /datum/outfit/job/hos
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
- ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
+ ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_ENTER_GENPOP, ACCESS_LEAVE_GENPOP,
- ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
+ ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_BARISTA, ACCESS_BARBER,
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
@@ -62,7 +62,7 @@ Head of Security
duffelbag = /obj/item/storage/backpack/duffelbag/sec
box = /obj/item/storage/box/security
- implants = list(/obj/item/implant/mindshield)
+ implants = list(/obj/item/implant/mindshield, /obj/item/implant/kinaris)
chameleon_extras = list(/obj/item/gun/energy/e_gun/hos, /obj/item/stamp/hos)
diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm
index 267680408..92afee693 100644
--- a/code/modules/jobs/jobs.dm
+++ b/code/modules/jobs/jobs.dm
@@ -1,5 +1,6 @@
GLOBAL_LIST_INIT(command_positions, list(
"Captain",
+ "Lambent",
"Head of Personnel",
"Head of Security",
"Chief Engineer",
@@ -37,6 +38,8 @@ GLOBAL_LIST_INIT(supply_positions, list(
GLOBAL_LIST_INIT(civilian_positions, list(
"Head of Personnel",
+ "Barista",
+ "Barber",
"Bartender",
"Botanist",
"Cook",
@@ -60,6 +63,9 @@ GLOBAL_LIST_INIT(nonhuman_positions, list(
"Cyborg",
ROLE_PAI))
+GLOBAL_LIST_INIT(important_positions, list(
+ "Lambent"))
+
GLOBAL_LIST_INIT(silly_positions, list(
"Clown",
"Mime"))
diff --git a/code/modules/mob/dead/new_player/login.dm b/code/modules/mob/dead/new_player/login.dm
index acd966416..c691b799d 100644
--- a/code/modules/mob/dead/new_player/login.dm
+++ b/code/modules/mob/dead/new_player/login.dm
@@ -43,7 +43,14 @@
S.cd = "/"
var/slot
S["default_slot"] >> slot
+ var/differing_version_notification = 0
if(slot)
S.cd = "/character[slot]"
- if(S["version"] < SAVEFILE_VERSION_MAX)
- to_chat(src, "Your characters are outdated from recent updates. Please make sure if everything is within reasonable levels.")
+ var/slot_version = 0
+ S["version"] >> slot_version
+ if(slot_version && slot_version < SAVEFILE_VERSION_MAX)
+ S.cd = "/"
+ S["new_differences_notification"] >> differing_version_notification
+ if(!differing_version_notification || differing_version_notification <= slot_version)
+ S["new_differences_notification"] << slot_version
+ to_chat(src, "There were recent changes with characters, and your savefiles are outdated. Your characters may not look the same depending on what changed.")
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 168b31410..c436e5808 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -487,6 +487,9 @@
if(HAS_TRAIT(src, TRAIT_NOHUNGER))
return 1
+ if(!has_mouth())
+ return 1
+
if(nutrition < 100 && !blood)
if(message)
visible_message("[src] dry heaves!", \
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 1be10296d..a79bb4629 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -25,7 +25,7 @@
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
-
+
if(skipface || get_visible_name() == "Unknown")
. += "You can't make out what species they are."
else
@@ -127,10 +127,15 @@
. += "[t_He] [t_is] currently in heat."
//CIT CHANGES START HERE - adds genital details to examine text
- if(LAZYLEN(internal_organs) && user.client?.prefs.cit_toggles & GENITAL_EXAMINE)
+ if(LAZYLEN(internal_organs) && user.client?.prefs.cit_toggles)
for(var/obj/item/organ/genital/dicc in internal_organs)
if(istype(dicc) && dicc.is_exposed())
- . += "[dicc.desc]"
+
+ if(!dicc.equipment)
+ . += "[dicc.desc]"
+ else
+ . += "[dicc.desc] It's equipped with a [dicc.equipment.name]."
+
if(user.client?.prefs.cit_toggles & VORE_EXAMINE)
var/cursed_stuff = attempt_vr(src,"examine_bellies",args) //vore Code
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 92ad4fa08..450a9f2cb 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -188,10 +188,24 @@
if(legcuffed)
dat += "| Legcuffed |
"
+
+ var/mob/living/carbon/U = src //for carbon genitals
+ if(U)
+ for(var/obj/item/organ/genital/G in U.internal_organs)
+ if(G.is_exposed())
+ if(!G.equipment)
+ dat += "| [G.name]: | ["Empty"] |
"
+ else
+ dat += "| [G.name]: | [G.equipment.name] |
"
+ else
+ dat += "| [G.name]: | Obscured |
"
+
dat += {"