From a110ad0bb3521ca281df96040a4bc0f426a9c761 Mon Sep 17 00:00:00 2001 From: Seijan-Etroix Date: Sun, 1 Mar 2026 16:27:45 -0500 Subject: [PATCH] Adds 6 new drinks for hemophages (& Gives Eggnog a unique glass.) (#5292) ## About The Pull Request Alcohol is the lifeblood of any good bar, and a good bar is where any good bloodsucker goes for an easy meal. But why settle for floozies and flunkies, when you can have a flight of delicious, and suspicious cocktails to sip between (un)fortunate victims? **Have five new blood-infused boozes.** _And a bubbly float for the freshly bitten_ preview preview3 [In order of appearance] - Morocco Coffin / A blood-and-rum iced coffee, served in a coffin-shaped glass - Cranberry Cadillac / Sugar-candy crystals infused with ichor rim the glass like chrome - Bat Outta' Hell / A sports-themed yard glass! Just try not to drink too fast... [Causes an OD: Temporary blind, dizzy, and shake, but improves your hearing, like a bat in flight!] - Jubokko / Beware whose branches you sit under... - Venetian Waltz / Caramel, chocolate and blood make for a fun, if not unserious cocktail. - Intraverde / For those adverse to alcohol, or still hate the taste of blood. And eggnog is here too. :) image - It's eggnog!!!! ## Why It's Good For The Game -An expanded flight of drinks for hemophages adds personality to characters; the variety of colours and shapes of the drinks themselves helps define characters by their tastes. -Eggnog no longer being a menacing glass of off-white liquid is a flat upgrade; probably too small to be its own PR so it's stuck here. ## Proof Of Testing A proper look without the set: BatOuttaHell-Preview ![CranberryCadillac-preview](https://github.com/user-attachments/assets/0530eba8-decb-4245-9b62-942c6f9716e3) Jubokko-Preview Morocco Coffin Preview Venetian Waltz-Preview ![Intraverde-Preview](https://github.com/user-attachments/assets/80803e84-2ca8-432e-91a2-67c126856c5f) preview2 preview 25 And eggnog. :) eggnog-Preview
Screenshots/Videos
## Changelog :cl: add: 6 new drinks for blood-drinkers 5 Alcoholic: Morocco Coffin, Cranberry Cadillac, Jubokko, Venetian Waltz, and the Bat Outta' Hell 1 Non-Alcoholic: The Intraverde. add: Eggnog now has its own sprite. No more suspicious glasses of white liquid during the holidays. /:cl: --------- Co-authored-by: gavla <96078776+shayoki@users.noreply.github.com> --- .../recipes/drinks/drinks_alcoholic.dm | 24 +++ .../recipes/drinks/drinks_non-alcoholic.dm | 5 + .../code/modules/reagents/drink_reagents.dm | 191 ++++++++++++++++++ .../icons/obj/drinks/mixed_drinks.dmi | Bin 1166 -> 9967 bytes tgstation.dme | 1 + 5 files changed, 221 insertions(+) create mode 100644 modular_zubbers/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm diff --git a/modular_zubbers/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm b/modular_zubbers/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm new file mode 100644 index 00000000000..bf88e781bca --- /dev/null +++ b/modular_zubbers/code/modules/food_and_drinks/recipes/drinks/drinks_alcoholic.dm @@ -0,0 +1,24 @@ + +//Hemophage / Vampire drinks + +/datum/chemical_reaction/drink/venetianwaltz + results = list(/datum/reagent/consumable/ethanol/venetianwaltz = 9) + required_reagents = list(/datum/reagent/consumable/caramel = 1, /datum/reagent/consumable/ethanol/creme_de_cacao = 2, /datum/reagent/consumable/ethanol/amaretto = 3, /datum/reagent/blood = 3) + +/datum/chemical_reaction/drink/cranberrycadillac + results = list(/datum/reagent/consumable/ethanol/cranberrycadillac = 5) + required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/ethanol/champagne = 2, /datum/reagent/consumable/ethanol/cognac = 1, /datum/reagent/blood = 1) + required_temp = 373.15 //Roughly the temp to boil sugar to make sugar crystals + mix_message = "The sugar melts then crystalizes around the blood, making candy rocks..." + +/datum/chemical_reaction/drink/jubokko + results = list(/datum/reagent/consumable/ethanol/jubokko = 4) + required_reagents = list(/datum/reagent/consumable/ethanol/sake = 1, /datum/reagent/consumable/ethanol/yuyake = 1, /datum/reagent/blood = 3) + +/datum/chemical_reaction/drink/moroccocoffin + results = list(/datum/reagent/consumable/ethanol/moroccocoffin = 4) + required_reagents = list(/datum/reagent/consumable/icecoffee = 2, /datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/blood = 1) + +/datum/chemical_reaction/drink/batouttahell + results = list(/datum/reagent/consumable/ethanol/batouttahell = 10) + required_reagents = list(/datum/reagent/consumable/ethanol/absinthe = 1, /datum/reagent/consumable/ethanol/brave_bull = 6, /datum/reagent/blood = 3) diff --git a/modular_zubbers/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm b/modular_zubbers/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm index 9f991f4a623..651f191468b 100644 --- a/modular_zubbers/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm +++ b/modular_zubbers/code/modules/food_and_drinks/recipes/drinks/drinks_non-alcoholic.dm @@ -5,3 +5,8 @@ /datum/chemical_reaction/drink/blood_coffee results = list(/datum/reagent/consumable/coffee/blood_coffee = 2) //Results in 2u instead of 3 required_reagents = list(/datum/reagent/consumable/coffee = 1, /datum/reagent/blood = 2) + +/datum/chemical_reaction/drink/intraverde + results = list(/datum/reagent/consumable/intraverde = 5) + required_reagents = list(/datum/reagent/consumable/melon_soda = 1, /datum/reagent/consumable/cream = 1, /datum/reagent/consumable/ice = 1, /datum/reagent/blood = 2) + diff --git a/modular_zubbers/code/modules/reagents/drink_reagents.dm b/modular_zubbers/code/modules/reagents/drink_reagents.dm index 26e7891ae7e..ec1eb9ae7ca 100644 --- a/modular_zubbers/code/modules/reagents/drink_reagents.dm +++ b/modular_zubbers/code/modules/reagents/drink_reagents.dm @@ -1,3 +1,7 @@ +/datum/glass_style/has_foodtype/drinking_glass/eggnog //Eggnog doesn't have a custom glass in the dm where + icon = 'modular_zubbers/icons/obj/drinks/mixed_drinks.dmi' //it should (mixed_alcohol.dm), so this exists to give it a glass. + icon_state = "eggnog" + /datum/reagent/consumable/moth_milk name = "Moth Milk" description = "Whoever thought that milking moths is a good idea was totally wrong. Is it even milk?" @@ -69,3 +73,190 @@ icon_state = "bloodcoffeeglass" name = "mug of blood coffee" desc = "A mug of hot black coffee mixed with fresh blood." + + +/datum/reagent/consumable/intraverde + name = "Intraverde" + description = "A melon soda float topped with blood-infused whipped cream." + color = "#40e729" + quality = DRINK_GOOD + taste_description = "tart sugar and a bit lip." + chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING + +/datum/reagent/consumable/intraverde/expose_mob(mob/living/exposed_mob, methods, reac_volume) + . = ..() + if(!(methods & INGEST)) + return + var/obj/item/organ/stomach/stomach = exposed_mob.get_organ_slot(ORGAN_SLOT_STOMACH) + if(!istype(stomach) || !ishemophage(exposed_mob) || reac_volume <= 0) + return + exposed_mob.blood_volume = min(exposed_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) + +/datum/glass_style/drinking_glass/intraverde + required_drink_type = /datum/reagent/consumable/intraverde + icon = 'modular_zubbers/icons/obj/drinks/mixed_drinks.dmi' + icon_state = "intraverde" + name = "glass of intraverde" + desc = "A fang-rotting float, often requested by hemophage fledglings who have yet grown the taste for ichor. The whipped cream top is infused with blood." + + +/datum/reagent/consumable/ethanol/venetianwaltz + name = "Venetian Waltz" + description = "A chocolate-caramel dessert cocktail, made for blood-drinkers." + color = "#38210b" + boozepwr = 15 + quality = DRINK_GOOD + taste_description = "dark and bloody chocolate" + chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING + +/datum/reagent/consumable/ethanol/venetianwaltz/expose_mob(mob/living/exposed_mob, methods, reac_volume) + . = ..() + if(!(methods & INGEST)) + return + var/obj/item/organ/stomach/stomach = exposed_mob.get_organ_slot(ORGAN_SLOT_STOMACH) + if(!istype(stomach) || !ishemophage(exposed_mob) || reac_volume <= 0) + return + exposed_mob.blood_volume = min(exposed_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) + +/datum/glass_style/drinking_glass/venetianwaltz + required_drink_type = /datum/reagent/consumable/ethanol/venetianwaltz + icon = 'modular_zubbers/icons/obj/drinks/mixed_drinks.dmi' + icon_state = "venetianwaltz" + name = "glass of venetian waltz" + desc = "Despite the presentation, its scoffed at by older generations for its dessert-like flavour, and is relegated to the tables of sororities and heemoboos as punishment." + + +/datum/reagent/consumable/ethanol/cranberrycadillac + name = "Cranberry Cadillac" + description = "A bubbly, candy-rimmed cocktail." + color = "#ac1e2a" + boozepwr = 45 + quality = DRINK_GOOD + taste_description = "a hit-and-run made of candy" + chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING + +/datum/reagent/consumable/ethanol/cranberrycadillac/expose_mob(mob/living/exposed_mob, methods, reac_volume) + . = ..() + if(!(methods & INGEST)) + return + var/obj/item/organ/stomach/stomach = exposed_mob.get_organ_slot(ORGAN_SLOT_STOMACH) + if(!istype(stomach) || !ishemophage(exposed_mob) || reac_volume <= 0) + return + exposed_mob.blood_volume = min(exposed_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) + +/datum/glass_style/drinking_glass/cranberrycadillac + required_drink_type = /datum/reagent/consumable/ethanol/cranberrycadillac + icon = 'modular_zubbers/icons/obj/drinks/mixed_drinks.dmi' + icon_state = "cranberrycadillac" + name = "coupe of cranberry cadillac" + desc = "The sugar crystals that rim the glass are red with real blood, inviting the hungry to lick it clean. Served with half a lemon slice to counter the sweetness." + + +/datum/reagent/consumable/ethanol/jubokko + name = "Jubokko" + description = "A drink set of sake, and yukake mixed with blood." + color = "#ac1e2a" + boozepwr = 30 + quality = DRINK_GOOD + taste_description = "danger looming above you" + chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING + +/datum/reagent/consumable/ethanol/jubokko/expose_mob(mob/living/exposed_mob, methods, reac_volume) + . = ..() + if(!(methods & INGEST)) + return + var/obj/item/organ/stomach/stomach = exposed_mob.get_organ_slot(ORGAN_SLOT_STOMACH) + if(!istype(stomach) || !ishemophage(exposed_mob) || reac_volume <= 0) + return + exposed_mob.blood_volume = min(exposed_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) + +/datum/glass_style/drinking_glass/jubokko + required_drink_type = /datum/reagent/consumable/ethanol/jubokko + icon = 'modular_zubbers/icons/obj/drinks/mixed_drinks.dmi' + icon_state = "jubokko" + name = "serving of jubokko" + desc = "The martian, blood-drinking chaebol serve this to their guests. Tasteful as it appears, any good poet knows foreshadowing when it's put in front of them." + + +/datum/reagent/consumable/ethanol/moroccocoffin + name = "Morocco Coffin" + description = "A cold pressed coffee with a tinge of iron." + color = "#200608" + boozepwr = 20 + overdose_threshold = 75 + quality = DRINK_GOOD + taste_description = "waking up at midnight" + chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING + metabolized_traits = list(TRAIT_STIMULATED) + +/datum/reagent/consumable/ethanol/moroccocoffin/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) + +/datum/reagent/consumable/ethanol/moroccocoffin/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.adjust_dizzy(-10 SECONDS * REM * seconds_per_tick) + affected_mob.adjust_drowsiness(-6 SECONDS * REM * seconds_per_tick) + affected_mob.AdjustSleeping(-4 SECONDS * REM * seconds_per_tick) + affected_mob.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) + +/datum/reagent/consumable/ethanol/moroccocoffin/expose_mob(mob/living/exposed_mob, methods, reac_volume) + . = ..() + if(!(methods & INGEST)) + return + var/obj/item/organ/stomach/stomach = exposed_mob.get_organ_slot(ORGAN_SLOT_STOMACH) + if(!istype(stomach) || !ishemophage(exposed_mob) || reac_volume <= 0) + return + exposed_mob.blood_volume = min(exposed_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) + +/datum/glass_style/drinking_glass/moroccocoffin + required_drink_type = /datum/reagent/consumable/ethanol/moroccocoffin + icon = 'modular_zubbers/icons/obj/drinks/mixed_drinks.dmi' + icon_state = "moroccocoffin" + name = "glass of morocco coffin" + desc = "For waking up when the sun goes down. Cools you down and wakes you up." + + +/datum/reagent/consumable/ethanol/batouttahell + name = "Bat Outta' Hell" + description = "Brave bull mixed with blood, with an absinthe 'varnish' sitting on top." + color = "#3d1013" + boozepwr = 70 + overdose_threshold = 47 + quality = DRINK_VERYGOOD + taste_description = "the blinding thrill of a HOME RUN, BABY!!" + chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING + metabolization_rate = 1.2 * REAGENTS_METABOLISM + +/datum/reagent/consumable/ethanol/batouttahell/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.remove_status_effect(/datum/status_effect/drowsiness) + affected_mob.AdjustSleeping(-2 SECONDS * REM * seconds_per_tick) + +/datum/reagent/consumable/ethanol/batouttahell/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.add_traits(list(TRAIT_GOOD_HEARING, TRAIT_MINOR_NIGHT_VISION),"Overdose:/datum/reagent/consumable/ethanol/batouttahell") + metabolization_rate = 4.5 * REAGENTS_METABOLISM + affected_mob.set_jitter_if_lower(5 SECONDS * REM * seconds_per_tick) + affected_mob.set_dizzy_if_lower(5 SECONDS * REM * seconds_per_tick) + affected_mob.set_temp_blindness_if_lower(5 SECONDS * REM * seconds_per_tick) + +/datum/reagent/consumable/ethanol/batouttahell/on_mob_end_metabolize(mob/living/affected_mob) + . = ..() + affected_mob.remove_traits(list(TRAIT_GOOD_HEARING, TRAIT_MINOR_NIGHT_VISION),"Overdose:/datum/reagent/consumable/ethanol/batouttahell") + +/datum/reagent/consumable/ethanol/batouttahell/expose_mob(mob/living/exposed_mob, methods, reac_volume) + . = ..() + if(!(methods & INGEST)) + return + var/obj/item/organ/stomach/stomach = exposed_mob.get_organ_slot(ORGAN_SLOT_STOMACH) + if(!istype(stomach) || !ishemophage(exposed_mob) || reac_volume <= 0) + return + exposed_mob.blood_volume = min(exposed_mob.blood_volume + reac_volume, BLOOD_VOLUME_MAXIMUM) + +/datum/glass_style/drinking_glass/batouttahell + required_drink_type = /datum/reagent/consumable/ethanol/batouttahell + icon = 'modular_zubbers/icons/obj/drinks/mixed_drinks.dmi' + icon_state = "batouttahell" + name = "glass of bat outta' hell" + desc = "Strong enough to send you flyin' out of the park! Or maybe stumbling..." diff --git a/modular_zubbers/icons/obj/drinks/mixed_drinks.dmi b/modular_zubbers/icons/obj/drinks/mixed_drinks.dmi index b66b8ddd7117293155cec39d9434c6ed3e063669..ac9c2ffbc38d320ffd56c5d30b36bf03e38209e7 100644 GIT binary patch literal 9967 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 F{{g65QJDY$ literal 1166 zcmV;91abR`P)V=-0C=2zi#rO#Fc1Z6?I|91AM$I}1R0~kzJn62EP)e&c8Ra=!d04dGceQR zF^qnOn>>BFNvR)L+)rmRTZx)sal4YqT$Zedhz4a?bkDWcs2r9xh;(FPX#$H2nbg9Y z5B{xRH6`Z1Lyuv0aFeGUx3w&v`|qqH000BYNklK3a8gH7f! zMx9PaYo+blMM?*~aD^6xvAYe%de>cSH>0=fuDV{V40f~aYK-0VVmCs^E;=tV5ZW}P zLJUq>)tJP57^cKziOo)Ob`j4pmJaf!IUH>LL3m%zdwBBv|L1w1^M;uGem^fWW}_1@ znnMGOPQYjyHXymwq3D^2Q8Z-0$jB*08qJ$tL=ze^z<+lcfQwT@x+Y@;4H+Pf=1s6? z#EXPgur?|^kLR8*EZ+2Ta?LZ||AIWx}Ln=z;fPb@@Y z_3Oj)o2|_4nYi6&6qlvFSU)~bJfRA3IH~~DKYf5VK6*d4yY6-U6(u_8d7hm97nh~I zn46CP*hxirQqJ31yH9UVhq7)dH`RAcjs6&_ce*lt8>kten&JHTbFvwQ!gc|t%Rwgd zsHKh2?LMRA<|DlF@OuDKb8&tTJmy{BFh{T6z;*U)Q{O3MKxO(imiMmj>;CGfidXqp zS#GHTy>@4@@XOcs)LfjN(|rJ}1y_;UtIR&mG4=DE($=O-(Z1a#5?81PBo-p9eRXx; zTcEsCA)8SMUcVfG)(cmWI|u9lJ*WFf&BX!eKQ~CSVAj^x|85Jnl{$+eafNz7BAE;T zBtE@_N0NM=<6{J8?gaomlH?PKC5ppQWhuBy|G7b+_VkZft*oTCwDm4edLkOyDZ1Wz zwc)rz72uI1-^Ao4O=w~vqFqHyTDvOCMe}tkeCbGQgImYGb z`>goqOU=X;ssPv%tqOj6t|v>MT;c6IzcTt%|9SYq6}qq8YAU9X0kH}Jb0(>k|AU!( zf%-Y<*8@~C-+TtZ((V>mOk{cewJrcQLOVs9dms$yhT{nzg{y7}s8zzV=6a&;cYq^S zD`i>M!~@ve1K}=DdO{>-!vl)5sbUH0$*9#o$Z6~j|h4;S7fiVE~OmOubMIF}`H;_j2O^JsCW`G_X{x4v30!DLa gfYAvU%}Z~