diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index e8c7725bb7b..f4e373d0ed0 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -139,6 +139,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron,
/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/sarezhiwine,
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,
/obj/item/weapon/lipstick/random,
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale,
@@ -207,6 +208,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
group = "Atmospherics"
+
+
/datum/supply_packs/inflatable
name = "Inflatable barriers"
contains = list(/obj/item/weapon/storage/briefcase/inflatable,
@@ -1093,6 +1096,22 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
containername = "Sterile equipment crate"
group = "Medical"
+/datum/supply_packs/beer
+ contains = list(/obj/structure/reagent_dispensers/beerkeg)
+ name = "Beer Keg"
+ cost = 10
+ containertype = /obj/structure/largecrate
+ containername = "Beer Crate"
+ group = "Hospitality"
+
+/datum/supply_packs/xuizi
+ contains = list(/obj/structure/reagent_dispensers/xuizikeg)
+ name = "Xuizi Juice Keg"
+ cost = 20
+ containertype = /obj/structure/largecrate
+ containername = "Xuizi Juice Crate"
+ group = "Hospitality"
+
/datum/supply_packs/randomised/pizza
num_contained = 5
contains = list(/obj/item/pizzabox/margherita,
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index b1372d569d6..04ef89c45b6 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -715,7 +715,8 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/chartreusegreen = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/chartreuseyellow =5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/cremewhite = 4, /obj/item/weapon/reagent_containers/food/drinks/bottle/brandy = 4,
/obj/item/weapon/reagent_containers/food/drinks/bottle/guinnes = 4, /obj/item/weapon/reagent_containers/food/drinks/bottle/drambuie = 4,
- /obj/item/weapon/reagent_containers/food/drinks/bottle/cremeyvette = 4)
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/cremeyvette = 4, /obj/item/weapon/reagent_containers/food/drinks/bottle/small/xuizijuice = 8,
+ /obj/item/weapon/reagent_containers/food/drinks/bottle/sarezhiwine = 2, /obj/item/weapon/reagent_containers/food/drinks/bottle/victorygin = 2)
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/tea = 10)
vend_delay = 15
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
diff --git a/code/modules/admin/verbs/bluespacetech.dm b/code/modules/admin/verbs/bluespacetech.dm
index f25a668b327..7ee71ad63ea 100644
--- a/code/modules/admin/verbs/bluespacetech.dm
+++ b/code/modules/admin/verbs/bluespacetech.dm
@@ -329,6 +329,14 @@
C.holder.original_mob = null
suicide()
+/mob/living/carbon/human/bst/verb/tgm()
+ set name = "Toggle Godmode"
+ set desc = "Enable or disable god mode. For testing things that require you to be vulnerable."
+ set category = "BST"
+
+ status_flags ^= GODMODE
+ src << span("notice", "God mode is now [status_flags & GODMODE ? "enabled" : "disabled"]")
+
//Equipment. All should have canremove set to 0
//All items with a /bst need the attack_hand() proc overrided to stop people getting overpowered items.
diff --git a/code/modules/cargo/randomstock.dm b/code/modules/cargo/randomstock.dm
index 73d1eb4e04a..35c879741cb 100644
--- a/code/modules/cargo/randomstock.dm
+++ b/code/modules/cargo/randomstock.dm
@@ -115,7 +115,7 @@ var/list/global/random_stock_common = list(
"cosmetic" = 2.2,
"suitcooler" = 1.2,
"officechair" = 1.2,
- "booze" = 3.5,
+ "booze" = 3.7,
"plant" = 3.5,
"bag" = 2,
"extinguish" = 2.2,
@@ -795,7 +795,7 @@ var/list/global/random_stock_large = list(
break
new /obj/structure/bed/chair/office/dark(T)
if ("booze")
- if (prob(8))//Spare keg of beer
+ if (prob(8))//Spare keg of beer or xuizi juice
var/turf/T = get_turf(L)
if (!turf_clear(T))
for (var/turf/U in range(T,1))
@@ -803,7 +803,10 @@ var/list/global/random_stock_large = list(
T = U
break
- new /obj/structure/reagent_dispensers/beerkeg(T)
+ if (prob(80))
+ new /obj/structure/reagent_dispensers/beerkeg(T)
+ else
+ new /obj/structure/reagent_dispensers/xuizikeg(T)
else
var/list/drinks = typesof(/obj/item/weapon/reagent_containers/food/drinks/bottle)
drinks -= /obj/item/weapon/reagent_containers/food/drinks/bottle
@@ -1657,7 +1660,7 @@ var/list/global/random_stock_large = list(
if ("bike")
new /obj/vehicle/bike(L)
-
+
if ("sol")
if (prob(50))
new /obj/structure/closet/sol/navy(L)
diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm
index 3e0bc2582a0..8ddcb1e883b 100644
--- a/code/modules/food/recipes_microwave.dm
+++ b/code/modules/food/recipes_microwave.dm
@@ -569,6 +569,7 @@ I said no!
items = list()
result = /obj/item/weapon/reagent_containers/food/snacks/slimesoup
+
/datum/recipe/boiledslimeextract
reagents = list("water" = 5)
items = list(
diff --git a/code/modules/mob/living/carbon/human/intoxication.dm b/code/modules/mob/living/carbon/human/intoxication.dm
index 24fae1d543d..4b838894c46 100644
--- a/code/modules/mob/living/carbon/human/intoxication.dm
+++ b/code/modules/mob/living/carbon/human/intoxication.dm
@@ -12,7 +12,7 @@
#define BASE_DIZZY 100
-#define ALCOHOL_FILTRATION_RATE 0.02//The base rate at which intoxication decreases per proc. this is actually multiplied by 3 most of the time if the liver is healthy
+#define ALCOHOL_FILTRATION_RATE 0.015//The base rate at which intoxication decreases per proc. this is actually multiplied by 3 most of the time if the liver is healthy
#define BASE_VOMIT_CHANCE 2
#define VOMIT_CHANCE_SCALE 0.2//An extra 1% for every 5 units over the vomiting threshold
@@ -26,6 +26,17 @@ var/mob/living/carbon/human/alcohol_clumsy = 0
intoxication = 0
return
+ //Godmode messes some things up, so no more BSTs getting drunk unless they toggle it off
+ if (status_flags & GODMODE)
+ intoxication = 0 //Zero out intoxication but don't return, let the rest of this function run to remove any residual effects
+ slurring = 0
+ confused = 0
+ eye_blurry = 0
+ drowsyness = 0
+ paralysis = 0
+ sleeping = 0
+ //Many of these parameters normally tick down in life code, but some parts of that code don't run in godmode, so this prevents a BST being stuck with blurred vision
+
if(intoxication > AE_DIZZY*SR) // Early warning
if (dizziness == 0)
src << "The room starts spinning!"
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 674304f1e33..c2df63f5463 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -182,6 +182,8 @@
if(!(sdisabilities & BLIND))
if(equipment_tint_total >= TINT_BLIND) // Covered eyes, heal faster
eye_blurry = max(eye_blurry-2, 0)
+ else
+ eye_blurry = max(eye_blurry-1, 0)
if (disabilities & EPILEPSY)
if ((prob(1) && paralysis < 1))
@@ -916,9 +918,6 @@
if (intoxication)
handle_intoxication()
- else if (alcohol_clumsy)//This var is defined in intoxication.dm, its set true when alcohol has caused clumsiness
- mutations.Remove(CLUMSY)
- alcohol_clumsy = 0
if(status_flags & GODMODE) return 0 //godmode
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index 50ffd360d96..ec3c5b8756e 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -141,10 +141,13 @@
if(is_broken())
filter_effect -= 2
- if (owner.intoxication)
+ if (owner.intoxication > 0)
//ALCOHOL_FILTRATION_RATE is defined in intoxication.dm
owner.intoxication -= ALCOHOL_FILTRATION_RATE*filter_effect*PROCESS_ACCURACY//A weakened liver filters out alcohol more slowly
owner.intoxication = max(owner.intoxication, 0)
+ if (!owner.intoxication)
+ //If intoxication has just been reduced to zero, this will handle removing any effects
+ owner.handle_intoxication()
// Do some reagent processing.
if(owner.chem_effects[CE_ALCOHOL_TOXIC])
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
index 032c7470ee6..74039079960 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
@@ -117,9 +117,9 @@
if(alien == IS_DIONA)
return //Diona can gain nutrients, but don't get drunk or suffer other effects
-
+
if(isunathi(M))//unathi are poisoned by alcohol as well
- M.adjustToxLoss(2.5 * removed * (strength / 100))
+ M.adjustToxLoss(1.5 * removed * (strength / 100))
var/quantity = (strength / 100) * removed
M.intoxication += quantity
@@ -158,6 +158,50 @@
usr << "The solution dissolves the ink on the book."
return
+
+//Butanol is a common alcohol that is fairly ineffective for humans and most other species, but highly intoxicating to unathi
+//Butanol duplicates a lot of code from ethanol. This is by design, it does not inherit.
+//Possible future todo: Add "alcohol" as a parent class to both ethanol and butanol
+/datum/reagent/butanol
+ name = "Butanol" //Parent class for all alcoholic reagents.
+ id = "butanol"
+ description = "A fairly harmless alcohol that has intoxicating effects on certain species."
+ reagent_state = LIQUID
+ color = "#404030"
+ ingest_met = 0.17 //Extremely slow metabolic rate means the liver will generally purge it faster than it can intoxicate you
+ var/nutriment_factor = 0.5
+ var/strength = 100 // This is the ABV of the drink
+
+ glass_icon_state = "glass_clear"
+ glass_name = "glass of butanol"
+ glass_desc = "A fairly harmless alcohol that has intoxicating effects on certain species."
+
+/datum/reagent/butanol/touch_mob(var/mob/living/L, var/amount)
+ if(istype(L) && strength > 40)
+ L.adjust_fire_stacks((amount / 7) * (strength / 100)) //Butanol is a bit less flammable than ethanol
+
+/datum/reagent/butanol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.adjustToxLoss(removed)
+ return
+
+/datum/reagent/butanol/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ if(isvaurca(M))//Vaurca are damaged instead of getting nutrients, but they can still get drunk
+ M.adjustToxLoss(removed * (strength / 100))
+ else
+ M.nutrition += nutriment_factor * removed
+
+ if(alien == IS_DIONA)
+ return //Diona can gain nutrients, but don't get drunk or suffer other effects
+
+ if(isunathi(M))
+ ingest_met = initial(ingest_met)*3 //Unathi digest butanol much faster
+
+ var/quantity = (strength / 100) * removed
+ M.intoxication += quantity
+
+
+
+
/datum/reagent/hydrazine
name = "Hydrazine"
id = "hydrazine"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
index 5f63e9b02d4..6e32a024fc7 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
@@ -787,6 +787,7 @@
glass_desc = "No relation to a certain rap artist/ actor."
glass_center_of_mass = list("x"=15, "y"=10)
+
/datum/reagent/drink/coffee
name = "Coffee"
id = "coffee"
@@ -1262,6 +1263,18 @@
glass_desc = "A crystal clear glass of Griffeater gin."
glass_center_of_mass = list("x"=16, "y"=12)
+/datum/reagent/ethanol/victorygin
+ name = "Victory Gin"
+ id = "victorygin"
+ description = "An oily Adhomai-based gin."
+ color = "#664300"
+ strength = 32
+
+ glass_icon_state = "ginvodkaglass"
+ glass_name = "glass of gin"
+ glass_desc = "It has an oily smell and doesn't taste like typical gin."
+ glass_center_of_mass = list("x"=16, "y"=12)
+
//Base type for alchoholic drinks containing coffee
/datum/reagent/ethanol/coffee
overdose = 45
@@ -2529,3 +2542,31 @@
glass_icon_state = "tallblackrussian"
glass_name = "glass of Tall Black Russian"
glass_desc = "Just like black russian but taller."
+
+
+// Butanol-based alcoholic drinks
+//=====================================
+//These are mainly for unathi, and have very little (but still some) effect on other species
+
+/datum/reagent/butanol/xuizijuice
+ name = "Xuizi Juice"
+ id = "xuizijuice"
+ description = "Blended flower buds from a Moghean Xuizi cactus. Has a mild butanol content and is a staple recreational beverage in Unathi culture."
+ color = "#91de47"
+ strength = 5
+
+ glass_icon_state = "xuiziglass"
+ glass_name = "glass of Xuizi Juice"
+ glass_desc = "The clear green liquid smells like vanilla, tastes like water. Unathi swear it has a rich taste and texture."
+
+/datum/reagent/butanol/sarezhiwine
+ name = "Sarezhi Wine"
+ id = "sarezhiwine"
+ description = "An alcoholic beverage made from lightly fermented Sareszhi berries, considered an upper class delicacy on Moghes. Significant butanol content indicates intoxicating effects on Unathi."
+ color = "#bf8fbc"
+ strength = 20
+
+ glass_icon_state = "sarezhiglass"
+ glass_name = "glass of Sarezhi Wine"
+ glass_desc = "It tastes like flat grape soda. Is this supposed to be alcoholic?"
+
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 6fdff178b1f..4683a953b1f 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -1560,6 +1560,8 @@
required_reagents = list("ice" = 1, "tea" = 2)
result_amount = 3
+
+
/datum/chemical_reaction/icecoffee
name = "Iced Coffee"
id = "icecoffee"
@@ -1582,6 +1584,14 @@
catalysts = list("enzyme" = 5)
result_amount = 10
+/datum/chemical_reaction/butanol
+ name = "Butanol"
+ id = "butanol"
+ result = "butanol"
+ required_reagents = list("cornoil" = 10, "sugar" = 10)
+ catalysts = list("enzyme" = 5)
+ result_amount = 5
+
/datum/chemical_reaction/grenadine
name = "Grenadine Syrup"
id = "grenadine"
diff --git a/code/modules/reagents/dispenser/cartridge_presets.dm b/code/modules/reagents/dispenser/cartridge_presets.dm
index 0e7321089c8..7d3efa66406 100644
--- a/code/modules/reagents/dispenser/cartridge_presets.dm
+++ b/code/modules/reagents/dispenser/cartridge_presets.dm
@@ -27,6 +27,7 @@
mercury spawn_reagent = "mercury"
radium spawn_reagent = "radium"
ethanol spawn_reagent = "ethanol"
+ butanol spawn_reagent = "butanol"
sacid spawn_reagent = "sacid"
tungsten spawn_reagent = "tungsten"
diff --git a/code/modules/reagents/dispenser/dispenser_presets.dm b/code/modules/reagents/dispenser/dispenser_presets.dm
index 350cb0deea9..ab1b158d21e 100644
--- a/code/modules/reagents/dispenser/dispenser_presets.dm
+++ b/code/modules/reagents/dispenser/dispenser_presets.dm
@@ -18,6 +18,7 @@
/obj/item/weapon/reagent_containers/chem_disp_cartridge/radium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/water,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/ethanol,
+ /obj/item/weapon/reagent_containers/chem_disp_cartridge/butanol,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sacid,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tungsten
diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
index b3a44f0a5e9..5e918ceea31 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
@@ -179,6 +179,15 @@
..()
reagents.add_reagent("gin", 100)
+/obj/item/weapon/reagent_containers/food/drinks/bottle/victorygin
+ name = "Victory gin"
+ desc = "Pour one out for Al'mari. His gun was on stun, bless his heart."
+ icon_state = "victorygin"
+ center_of_mass = list("x"=16, "y"=4)
+ New()
+ ..()
+ reagents.add_reagent("victorygin", 100)
+
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey
name = "Uncle Git's Special Reserve"
desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES."
@@ -499,3 +508,25 @@
New()
..()
reagents.add_reagent("sbiten", 100)
+
+
+// Butanol-based alcoholic drinks
+//=====================================
+//These are mainly for unathi, and have very little (but still some) effect on other species
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small/xuizijuice
+ name = "Xuizi Juice"
+ desc = "Blended flower buds from the Xuizi cactus. It smells faintly of vanilla. Bottled by the Arizi Guild for over 200 years."
+ icon_state = "xuizibottle"
+ center_of_mass = list("x"=16, "y"=10)
+ New()
+ ..()
+ reagents.add_reagent("xuizijuice", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/sarezhiwine
+ name = "Sarezhi Wine"
+ desc = "A premium Moghean wine made from Sareszhi berries. Bottled by the Arizi Guild for over 200 years."
+ icon_state = "sarezhibottle"
+ New()
+ ..()
+ reagents.add_reagent("sarezhiwine", 100)
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 843627ef6d0..823855d1ca3 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -245,6 +245,16 @@
..()
reagents.add_reagent("beer",capacity)
+/obj/structure/reagent_dispensers/xuizikeg
+ name = "xuizi juice keg"
+ desc = "A keg full of Xuizi juice, blended flower buds from the Moghean Xuizi cactus. The export stamp of the Arizi Guild is imprinted on the side."
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "keg_xuizi"
+ amount_per_transfer_from_this = 10
+ New()
+ ..()
+ reagents.add_reagent("xuizijuice",capacity)
+
/obj/structure/reagent_dispensers/virusfood
name = "Virus Food Dispenser"
desc = "A dispenser of virus food."
diff --git a/html/changelogs/Nanako-Butanol.yml b/html/changelogs/Nanako-Butanol.yml
new file mode 100644
index 00000000000..d9bd77fbb03
--- /dev/null
+++ b/html/changelogs/Nanako-Butanol.yml
@@ -0,0 +1,41 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Nanako
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Added butanol, an alcohol that is safe, though largely ineffective, for humans and most species, but highly intoxicating (and safe in moderation) for unathi. Pure butanol is in the chem dispenser, and can be distilled by combining sugar, corn oil and universal enzyme."
+ - rscadd: "Added two new butanol-based drinks, imported from Moghes, they can be found in the bar and rarely in the cargo warehouse."
+ - rscadd: "Added a new tajaran spirit, can be found in the bar fridge and sometimes in the warehouse."
+ - tweak: "Kegs of beer or xuizi juice can now be ordered at cargo."
+ - bugfix: "Fixed several issues with alcohol effects getting stuck and not wearing off when you sober up."
+ - tweak: "Reduced the rate at which the liver filters alcohol, making it slightly easier to get drunk and take longer to sober up. Drink responsibly!"
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index ad0146bc12f..b5c29c7cef9 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index c3a7a120df0..9d047ce09be 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ