diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm index 64f4ee35f6076..53fef07eb194a 100644 --- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm @@ -666,6 +666,10 @@ /obj/machinery/vending/wardrobe/science_wardrobe = "SciDrobe", /obj/machinery/vending/wardrobe/sec_wardrobe = "SecDrobe", /obj/machinery/vending/wardrobe/viro_wardrobe = "ViroDrobe", + /obj/machinery/vending/imported/nt = "NT Sustenance Supplier", //DOPPLER ADDITION + /obj/machinery/vending/imported/yangyu = "Fudobenda", //DOPPLER ADDITION + /obj/machinery/vending/imported/mothic = "Nomad Fleet Ration Chit Exchange", //DOPPLER ADDITION + /obj/machinery/vending/imported/tiziran = "Tiziran Imported Delicacies", //DOPPLER ADDITION ) /obj/item/circuitboard/machine/vendor/screwdriver_act(mob/living/user, obj/item/tool) diff --git a/modular_doppler/clutter objects/icons/janitor.dmi b/modular_doppler/clutter objects/icons/janitor.dmi new file mode 100644 index 0000000000000..fb41f7464c829 Binary files /dev/null and b/modular_doppler/clutter objects/icons/janitor.dmi differ diff --git a/modular_doppler/modular_food_drinks_and_chems/chemistry_reagents.dm b/modular_doppler/modular_food_drinks_and_chems/chemistry_reagents.dm new file mode 100644 index 0000000000000..99b6fc2339b82 --- /dev/null +++ b/modular_doppler/modular_food_drinks_and_chems/chemistry_reagents.dm @@ -0,0 +1,101 @@ +/* +/datum/reagent/fuel + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC + +/datum/reagent/fuel/oil + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC + +/datum/reagent/stable_plasma + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC + +/datum/reagent/pax + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC + +/datum/reagent/water + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC + +/datum/reagent/hellwater + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC + +/datum/reagent/carbondioxide + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC + +/datum/reagent/iron + chemical_flags_nova = REAGENT_BLOOD_REGENERATING + +/datum/reagent/blood + chemical_flags_nova = REAGENT_BLOOD_REGENERATING // For Hemophages to be able to drink it without any issue. + +/datum/reagent/blood/on_new(list/data) + . = ..() + + if(!src.data["blood_type"]) + src.data["blood_type"] = random_blood_type() // This is so we don't get blood without a blood type spawned from something that doesn't explicitly set the blood type. + + + +/datum/reagent/stable_plasma/on_mob_life(mob/living/carbon/C) + if(C.mob_biotypes & MOB_ROBOTIC) + C.nutrition = min(C.nutrition + 5, NUTRITION_LEVEL_FULL-1) + ..() + +/datum/reagent/fuel/on_mob_life(mob/living/carbon/C) + if(C.mob_biotypes & MOB_ROBOTIC) + C.nutrition = min(C.nutrition + 5, NUTRITION_LEVEL_FULL-1) + ..() + +/datum/reagent/fuel/oil/on_mob_life(mob/living/carbon/C) + if(C.mob_biotypes & MOB_ROBOTIC && C.blood_volume < BLOOD_VOLUME_NORMAL) + C.blood_volume += 0.5 + ..() + +/datum/reagent/carbondioxide/on_mob_life(mob/living/carbon/C) + if(C.mob_biotypes & MOB_ROBOTIC) + C.nutrition = min(C.nutrition + 5, NUTRITION_LEVEL_FULL-1) + ..() +*/ +// Catnip +/datum/reagent/pax/catnip + name = "Catnip" + taste_description = "grass" + description = "A colourless liquid that makes people more peaceful and felines happier." + metabolization_rate = 1.75 * REAGENTS_METABOLISM + +/datum/reagent/pax/catnip/on_mob_life(mob/living/carbon/M) + if(isfelinid(M)) + if(prob(20)) + M.emote("nya") + if(prob(20)) + to_chat(M, span_notice("[pick("Headpats feel nice.", "Backrubs would be nice.", "Mew")]")) + else + to_chat(M, span_notice("[pick("I feel oddly calm.", "I feel relaxed.", "Mew?")]")) + ..() + +/* +#define DERMAGEN_SCAR_FIX_AMOUNT 10 + +/datum/reagent/medicine/dermagen + name = "Dermagen" + description = "Heals scars formed by past physical trauma when applied. Minimum 10u needed, only works when applied topically." + reagent_state = LIQUID + color = "#FFEBEB" + ph = 6 + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/medicine/dermagen/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message = TRUE) + . = ..() + if(!iscarbon(exposed_mob)) + return + if(!(methods & (PATCH|TOUCH|VAPOR))) + return + var/mob/living/carbon/scarred = exposed_mob + if(scarred.stat == DEAD) + show_message = FALSE + if(show_message) + to_chat(scarred, span_danger("The scars on your body start to fade and disappear.")) + if(reac_volume >= DERMAGEN_SCAR_FIX_AMOUNT) + for(var/i in scarred.all_scars) + qdel(i) + +#undef DERMAGEN_SCAR_FIX_AMOUNT +*/ diff --git a/modular_doppler/modular_food_drinks_and_chems/food_and_drinks/alcohol reagents.dm b/modular_doppler/modular_food_drinks_and_chems/food_and_drinks/alcohol reagents.dm new file mode 100644 index 0000000000000..8e639ef8f63b5 --- /dev/null +++ b/modular_doppler/modular_food_drinks_and_chems/food_and_drinks/alcohol reagents.dm @@ -0,0 +1,900 @@ +/*STUFF WE CAN'T USE YET BECAUSE WE HAVEN'T PORTED THEIR PRECURSORS + +// Modular Booze REAGENTS, see the following file for the mixes: modular_nova\modules\customization\modules\food_and_drinks\recipes\drinks_recipes.dm + +/datum/reagent/consumable/ethanol/whiskey + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC //let's not force the detective to change his alcohol brand + + +/datum/reagent/consumable/ethanol/bloody_mary + chemical_flags_nova = REAGENT_BLOOD_REGENERATING +*/ + +/*SYNTHETIC DRINKS +/datum/reagent/consumable/ethanol/synthanol + name = "Synthanol" + description = "A runny liquid with conductive capacities. Its effects on synthetics are similar to those of alcohol on organics." + color = "#1BB1FF" + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC + boozepwr = 50 + quality = DRINK_NICE + taste_description = "motor oil" + +/datum/glass_style/drinking_glass/synthanol + required_drink_type = /datum/reagent/consumable/ethanol/synthanol + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "synthanolglass" + name = "glass of synthanol" + desc = "The equivalent of alcohol for synthetic crewmembers. They'd find it awful if they had tastebuds too." + +/datum/reagent/consumable/ethanol/synthanol/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + if(!(affected_mob.mob_biotypes & MOB_ROBOTIC)) + affected_mob.reagents.remove_reagent(type, 3.6 * REM * seconds_per_tick) //gets removed from organics very fast + if(prob(25)) + affected_mob.vomit(VOMIT_CATEGORY_DEFAULT, lost_nutrition = 5) + return ..() + +/datum/reagent/consumable/ethanol/synthanol/expose_mob(mob/living/carbon/C, method=TOUCH, volume) + . = ..() + if(C.mob_biotypes & MOB_ROBOTIC) + return + if(method == INGEST) + to_chat(C, pick(span_danger("That was awful!"), span_danger("That was disgusting!"))) + +/datum/reagent/consumable/ethanol/synthanol/robottears + name = "Robot Tears" + description = "An oily substance that an IPC could technically consider a 'drink'." + color = "#363636" + quality = DRINK_GOOD + boozepwr = 25 + taste_description = "existential angst" + +/datum/glass_style/drinking_glass/synthanol/robottears + required_drink_type = /datum/reagent/consumable/ethanol/synthanol/robottears + icon_state = "robottearsglass" + name = "glass of robot tears" + desc = "No robots were hurt in the making of this drink." + +/datum/reagent/consumable/ethanol/synthanol/trinary + name = "Trinary" + description = "A fruit drink meant only for synthetics, however that works." + color = "#ADB21f" + quality = DRINK_GOOD + boozepwr = 20 + taste_description = "modem static" + +/datum/glass_style/drinking_glass/synthanol/trinary + required_drink_type = /datum/reagent/consumable/ethanol/synthanol/trinary + icon_state = "trinaryglass" + name = "glass of trinary" + desc = "Colorful drink made for synthetic crewmembers. It doesn't seem like it would taste well." + +/datum/reagent/consumable/ethanol/synthanol/servo + name = "Servo" + description = "A drink containing some organic ingredients, but meant only for synthetics." + color = "#5B3210" + quality = DRINK_GOOD + boozepwr = 25 + taste_description = "motor oil and cocoa" + +/datum/glass_style/drinking_glass/synthanol/servo + required_drink_type = /datum/reagent/consumable/ethanol/synthanol/servo + icon_state = "servoglass" + name = "glass of servo" + desc = "Chocolate - based drink made for IPCs. Not sure if anyone's actually tried out the recipe." + +/datum/reagent/consumable/ethanol/synthanol/uplink + name = "Uplink" + description = "A potent mix of alcohol and synthanol. Will only work on synthetics." + color = "#E7AE04" + quality = DRINK_GOOD + boozepwr = 15 + taste_description = "a GUI in visual basic" + +/datum/glass_style/drinking_glass/synthanol/uplink + required_drink_type = /datum/reagent/consumable/ethanol/synthanol/uplink + icon_state = "uplinkglass" + name = "glass of uplink" + desc = "An exquisite mix of the finest liquoirs and synthanol. Meant only for synthetics." + +/datum/reagent/consumable/ethanol/synthanol/synthncoke + name = "Synth 'n Coke" + description = "The classic drink adjusted for a robot's tastes." + color = "#7204E7" + quality = DRINK_GOOD + boozepwr = 25 + taste_description = "fizzy motor oil" + +/datum/glass_style/drinking_glass/synthanol/synthncoke + required_drink_type = /datum/reagent/consumable/ethanol/synthanol/synthncoke + icon_state = "synthncokeglass" + name = "glass of synth 'n coke" + desc = "Classic drink altered to fit the tastes of a robot, contains de-rustifying properties. Bad idea to drink if you're made of carbon." + +/datum/reagent/consumable/ethanol/synthanol/synthignon + name = "Synthignon" + description = "Someone mixed wine and alcohol for robots. Hope you're proud of yourself." + color = "#D004E7" + quality = DRINK_GOOD + boozepwr = 25 + taste_description = "fancy motor oil" + +/datum/glass_style/drinking_glass/synthanol/synthignon + required_drink_type = /datum/reagent/consumable/ethanol/synthanol/synthignon + icon_state = "synthignonglass" + name = "glass of synthignon" + desc = "Someone mixed good wine and robot booze. Romantic, but atrocious." +*/ +// Other Booze + +/datum/reagent/consumable/ethanol/hot_toddy + name = "Hot Toddy" + description = "An old fashioned cocktail made of honey, rum, and tea." + color = "#e4830d" + boozepwr = 40 + quality = DRINK_GOOD + taste_description = "sweet spiced tea" + +/datum/glass_style/drinking_glass/hot_toddy + required_drink_type = /datum/reagent/consumable/ethanol/hot_toddy + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "hot_toddy" + name = "hot toddy glass" + desc = "An old fashioned cocktail made of honey, rum, and tea, it tastes like sweet holiday spices." + +/datum/reagent/consumable/ethanol/hellfire + name = "Hellfire" + description = "A nice drink that isn't quite as hot as it looks." + color = "#fb2203" + boozepwr = 60 + quality = DRINK_VERYGOOD + taste_description = "cold flames that lick at the top of your mouth" + +/datum/glass_style/drinking_glass/hellfire + required_drink_type = /datum/reagent/consumable/ethanol/hellfire + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "hellfire" + name = "glass of hellfire" + desc = "An amber colored drink that isn't quite as hot as it looks." + +/datum/reagent/consumable/ethanol/hellfire/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.adjust_bodytemperature(30 * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick, 0, BODYTEMP_NORMAL + 30) + +/datum/reagent/consumable/ethanol/sins_delight + name = "Sin's Delight" + description = "The drink smells like the seven sins." + color = "#330000" + boozepwr = 66 + quality = DRINK_FANTASTIC + taste_description = "overpowering sweetness with a touch of sourness, followed by iron and the sensation of a warm summer breeze" +// chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING //component drink is demon's blood, thus this drink is made with blood so hemophages can comfortably drink it + +/datum/glass_style/drinking_glass/sins_delight + required_drink_type = /datum/reagent/consumable/ethanol/sins_delight + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "sins_delight" + name = "glass of sin's delight" + desc = "You can smell the seven sins rolling off the top of the glass." + +/datum/reagent/consumable/ethanol/strawberry_daiquiri + name = "Strawberry Daiquiri" + description = "Pink looking alcoholic drink." + boozepwr = 20 + color = "#FF4A74" + quality = DRINK_NICE + taste_description = "sweet strawberry, lime and the ocean breeze" + +/datum/glass_style/drinking_glass/strawberry_daiquiri + required_drink_type = /datum/reagent/consumable/ethanol/strawberry_daiquiri + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "strawberry_daiquiri" + name = "glass of strawberry daiquiri" + desc = "Pink looking drink with flowers and a big straw to sip it. Looks sweet and refreshing, perfect for warm days." + +/datum/reagent/consumable/ethanol/liz_fizz + name = "Liz Fizz" + description = "Triple citrus layered with some ice and cream." + boozepwr = 0 + color = "#D8FF59" + quality = DRINK_NICE + taste_description = "brain freezing sourness" + +/datum/glass_style/drinking_glass/liz_fizz + required_drink_type = /datum/reagent/consumable/ethanol/liz_fizz + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "liz_fizz" + name = "glass of liz fizz" + desc = "Looks like a citrus sherbet seperated in layers? Why would anyone want that is beyond you." + +/datum/reagent/consumable/ethanol/miami_vice + name = "Miami Vice" + description = "A drink layering Pina Colada and Strawberry Daiquiri" + boozepwr = 30 + color = "#D8FF59" + quality = DRINK_FANTASTIC + taste_description = "sweet and refreshing flavor, complemented with strawberries and coconut, and hints of citrus" + +/datum/glass_style/drinking_glass/miami_vice + required_drink_type = /datum/reagent/consumable/ethanol/miami_vice + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "miami_vice" + name = "glass of miami vice" + desc = "Strawberries and coconut, like yin and yang." + +/datum/reagent/consumable/ethanol/malibu_sunset + name = "Malibu Sunset" + description = "A drink consisting of creme de coconut and tropical juices" + boozepwr = 20 + color = "#FF9473" + quality = DRINK_VERYGOOD + taste_description = "coconut, with orange and grenadine accents" + +/datum/glass_style/drinking_glass/malibu_sunset + required_drink_type = /datum/reagent/consumable/ethanol/malibu_sunset + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "malibu_sunset" + name = "glass of malibu sunset" + desc = "Tropical looking drinks, with ice cubes hovering on the surface and grenadine coloring the bottom." + +/datum/reagent/consumable/ethanol/hotlime_miami + name = "Hotlime Miami" + description = "The essence of the 90's, if they were a bloody mess that is." + boozepwr = 40 + color = "#A7FAE8" + quality = DRINK_FANTASTIC + taste_description = "coconut and aesthetic violence" + +/datum/glass_style/drinking_glass/hotlime_miami + required_drink_type = /datum/reagent/consumable/ethanol/hotlime_miami + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "hotlime_miami" + name = "glass of hotlime miami" + desc = "This looks very aesthetically pleasing." + +/datum/reagent/consumable/ethanol/hotlime_miami/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.set_drugginess(1.5 MINUTES * REM * seconds_per_tick) + if(affected_mob.adjustStaminaLoss(-2 * REM * seconds_per_tick, updating_stamina = FALSE)) + return UPDATE_MOB_HEALTH + +/datum/reagent/consumable/ethanol/coggrog + name = "Cog Grog" + description = "Now you can fill yourself with the power of Ratvar!" + color = rgb(255, 201, 49) + boozepwr = 10 + quality = DRINK_FANTASTIC + taste_description = "a brass taste with a hint of oil" + +/datum/glass_style/drinking_glass/coggrog + required_drink_type = /datum/reagent/consumable/ethanol/coggrog + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "coggrog" + name = "glass of cog grog" + desc = "Not even Ratvar's Four Generals could withstand this! Qevax Jryy!" + +/datum/reagent/consumable/ethanol/badtouch + name = "Bad Touch" + description = "A sour and vintage drink. Some say the inventor gets slapped a lot." + color = rgb(31, 181, 99) + boozepwr = 35 + quality = DRINK_GOOD + taste_description = "a slap to the face" + +/datum/glass_style/drinking_glass/badtouch + required_drink_type = /datum/reagent/consumable/ethanol/badtouch + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "badtouch" + name = "glass of bad touch" + desc = "We're nothing but mammals after all." + +/datum/reagent/consumable/ethanol/marsblast + name = "Marsblast" + description = "A spicy and manly drink in honor of the first colonists on Mars." + color = rgb(246, 143, 55) + boozepwr = 70 + quality = DRINK_FANTASTIC + taste_description = "hot red sand" + +/datum/glass_style/drinking_glass/marsblast + required_drink_type = /datum/reagent/consumable/ethanol/marsblast + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "marsblast" + name = "glass of marsblast" + desc = "One of these is enough to leave your face as red as the planet." + +/datum/reagent/consumable/ethanol/mercuryblast + name = "Mercuryblast" + description = "A sour burningly cold drink that's sure to chill the drinker." + color = rgb(29, 148, 213) + boozepwr = 40 + quality = DRINK_VERYGOOD + taste_description = "chills down your spine" + +/datum/glass_style/drinking_glass/mercuryblast + required_drink_type = /datum/reagent/consumable/ethanol/mercuryblast + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "mercuryblast" + name = "glass of mercuryblast" + desc = "No thermometers were harmed in the creation of this drink" + +/datum/reagent/consumable/ethanol/mercuryblast/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + affected_mob.adjust_bodytemperature(-30 * TEMPERATURE_DAMAGE_COEFFICIENT * REM * seconds_per_tick, T0C) + +/datum/reagent/consumable/ethanol/piledriver + name = "Piledriver" + description = "A bright drink that leaves you with a burning sensation." + color = rgb(241, 146, 59) + boozepwr = 45 + quality = DRINK_NICE + taste_description = "a fire in your throat" + +/datum/glass_style/drinking_glass/piledriver + required_drink_type = /datum/reagent/consumable/ethanol/piledriver + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "piledriver" + name = "glass of piledriver" + desc = "Not the only thing to leave your throat sore." + +/datum/reagent/consumable/ethanol/zenstar + name = "Zen Star" + description = "A sour and bland drink, rather disappointing." + color = rgb(51, 87, 203) + boozepwr = 35 + quality = DRINK_NICE + taste_description = "disappointment" + +/datum/glass_style/drinking_glass/zenstar + required_drink_type = /datum/reagent/consumable/ethanol/zenstar + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "zenstar" + name = "glass of zen star" + desc = "You'd think something so balanced would actually taste nice... you'd be dead wrong." + + +/* MORE RACE SPECIFIC STUFF WE DON'T HAVE SUPPORT FOR YET +// RACE SPECIFIC DRINKS + +/datum/reagent/consumable/ethanol/coldscales + name = "Coldscales" + color = "#5AEB52" //(90, 235, 82) + description = "A cold looking drink made for people with scales." + boozepwr = 50 //strong! + taste_description = "dead flies" + +/datum/glass_style/drinking_glass/coldscales + required_drink_type = /datum/reagent/consumable/ethanol/coldscales + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "coldscales" + name = "glass of coldscales" + desc = "A soft green drink that looks inviting!" + +/datum/reagent/consumable/ethanol/coldscales/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(islizard(exposed_mob)) + quality = RACE_DRINK + else + quality = DRINK_GOOD + return ..() + +/datum/reagent/consumable/ethanol/oil_drum + name = "Oil Drum" + color = "#000000" //(0, 0, 0) + description = "Industrial grade oil mixed with some ethanol to make it a drink. Somehow not known to be toxic." + boozepwr = 45 + taste_description = "oil spill" + +/datum/glass_style/drinking_glass/oil_drum + required_drink_type = /datum/reagent/consumable/ethanol/oil_drum + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "oil_drum" + name = "drum of oil" + desc = "A gray can of booze and oil..." + +/datum/reagent/consumable/ethanol/oil_drum/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(MOB_ROBOTIC) + quality = RACE_DRINK + else + quality = DRINK_GOOD + return ..() + +/datum/reagent/consumable/ethanol/nord_king + name = "Nord King" + color = "#EB1010" //(235, 16, 16) + description = "Strong mead mixed with more honey and ethanol. Beloved by its human patrons." + boozepwr = 50 //strong! + taste_description = "honey and red wine" + chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING + +/datum/glass_style/drinking_glass/nord_king + required_drink_type = /datum/reagent/consumable/ethanol/nord_king + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "nord_king" + name = "keg of nord king" + desc = "A dripping keg of red mead." + +/datum/reagent/consumable/ethanol/nord_king/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(ishumanbasic(exposed_mob) || isdwarf(exposed_mob)) + quality = RACE_DRINK + else + quality = DRINK_GOOD + return ..() + +/datum/reagent/consumable/ethanol/velvet_kiss + name = "Velvet Kiss" + color = "#EB1010" //(235, 16, 16) + description = "A bloody drink mixed with wine." + boozepwr = 10 //weak + taste_description = "iron with grapejuice" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING + +/datum/glass_style/drinking_glass/velvet_kiss + required_drink_type = /datum/reagent/consumable/ethanol/velvet_kiss + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "velvet_kiss" + name = "glass of velvet kiss" + desc = "Red and white drink for the upper classes or undead." + +/datum/reagent/consumable/ethanol/velvet_kiss/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(iszombie(exposed_mob) || isvampire(exposed_mob) || isdullahan(exposed_mob) || ishemophage(exposed_mob)) //Rare races! + quality = RACE_DRINK + else + quality = DRINK_GOOD + return ..() + +/datum/reagent/consumable/ethanol/velvet_kiss/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) + . = ..() + if(drinker.blood_volume < BLOOD_VOLUME_NORMAL) + drinker.blood_volume = min(drinker.blood_volume + (1 * REM * seconds_per_tick), BLOOD_VOLUME_NORMAL) //Same as Bloody Mary, as it is roughly the same difficulty to make. Gives hemophages a bit more choices to supplant their blood levels. + +/datum/reagent/consumable/ethanol/abduction_fruit + name = "Abduction Fruit" + color = "#DEFACD" //(222, 250, 205) + description = "Mixing of juices to make an alien taste." + boozepwr = 80 //Strong + taste_description = "grass and lime" + +/datum/glass_style/drinking_glass/abduction_fruit + required_drink_type = /datum/reagent/consumable/ethanol/abduction_fruit + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "abduction_fruit" + name = "glass of abduction fruit" + desc = "Mixed fruits that were never meant to be mixed..." + +/datum/reagent/consumable/ethanol/abduction_fruit/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(isabductor(exposed_mob) || isxenohybrid(exposed_mob)) + quality = RACE_DRINK + else + quality = DRINK_GOOD + return ..() + +/datum/reagent/consumable/ethanol/bug_zapper + name = "Bug Zapper" + color = "#F5882A" //(222, 250, 205) + description = "Copper and lemon juice. Hardly even a drink." + boozepwr = 5 //No booze really + taste_description = "copper and AC power" + +/datum/glass_style/drinking_glass/bug_zapper + required_drink_type = /datum/reagent/consumable/ethanol/bug_zapper + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "bug_zapper" + name = "glass of bug zapper" + desc = "An odd mix of copper, lemon juice and power meant for non-human consumption." + +/datum/reagent/consumable/ethanol/bug_zapper/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(isinsect(exposed_mob) || isflyperson(exposed_mob) || ismoth(exposed_mob)) + quality = RACE_DRINK + else + quality = DRINK_GOOD + return ..() + +/datum/reagent/consumable/ethanol/mush_crush + name = "Mush Crush" + color = "#F5882A" //(222, 250, 205) + description = "Soil in a glass." + boozepwr = 5 //No booze really + taste_description = "dirt and iron" + +/datum/glass_style/drinking_glass/mush_crush + required_drink_type = /datum/reagent/consumable/ethanol/mush_crush + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "mush_crush" + name = "glass of mush crush" + desc = "Popular among people that want to grow their own food rather than drink the soil." + +/datum/reagent/consumable/ethanol/mush_crush/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(ispodperson(exposed_mob) || issnail(exposed_mob)) + quality = RACE_DRINK + else + quality = DRINK_GOOD + return ..() + +/datum/reagent/consumable/ethanol/hollow_bone + name = "Hollow Bone" + color = "#FCF7D4" //(252, 247, 212) + description = "Shockingly none-harmful mix of toxins and milk." + boozepwr = 15 + taste_description = "Milk and salt" + +/datum/glass_style/drinking_glass/hollow_bone + required_drink_type = /datum/reagent/consumable/ethanol/hollow_bone + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "hollow_bone" + name = "skull of hollow bone" + desc = "Mixing of milk and bone hurting juice for enjoyment for rather skinny people." + +/datum/reagent/consumable/ethanol/hollow_bone/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(isplasmaman(exposed_mob) || isskeleton(exposed_mob)) + quality = RACE_DRINK + else + quality = DRINK_GOOD + return ..() + +/datum/reagent/consumable/ethanol/jell_wyrm + name = "Jell Wyrm" + color = "#FF6200" //(255, 98, 0) + description = "Horrible mix of CO2, toxins, and heat. Meant for slime based life." + boozepwr = 40 + taste_description = "tropical sea" + +/datum/glass_style/drinking_glass/jell_wyrm + required_drink_type = /datum/reagent/consumable/ethanol/jell_wyrm + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "jell_wyrm" + name = "glass of jell wyrm" + desc = "A bubbly drink that is rather inviting to those that don't know who it's meant for." + +/datum/reagent/consumable/ethanol/jell_wyrm/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + if(prob(20)) + if(affected_mob.adjustToxLoss(0.5 * REM * seconds_per_tick, updating_health = FALSE)) + return UPDATE_MOB_HEALTH + +#define JELLWYRM_DISGUST 25 + +/datum/reagent/consumable/ethanol/jell_wyrm/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(isjellyperson(exposed_mob) || isslimeperson(exposed_mob) || isluminescent(exposed_mob)) + quality = RACE_DRINK + else //if youre not a slime, jell wyrm should be GROSS + exposed_mob.adjust_disgust(JELLWYRM_DISGUST) + return ..() + +#undef JELLWYRM_DISGUST + +/datum/reagent/consumable/ethanol/laval_spit //Yes Laval + name = "Laval Spit" + color = "#DE3009" //(222, 48, 9) + description = "Heat minerals and some mauna loa. Meant for rock based life." + boozepwr = 30 + taste_description = "tropical island" + +/datum/glass_style/drinking_glass/laval_spit + required_drink_type = /datum/reagent/consumable/ethanol/laval_spit + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "laval_spit" + name = "glass of laval spit" + desc = "Piping hot drink for those who can stomach the heat of lava." + +/datum/reagent/consumable/ethanol/laval_spit/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(isgolem(exposed_mob)) + quality = RACE_DRINK + else + quality = DRINK_GOOD + return ..() +*/ + +/datum/reagent/consumable/ethanol/frisky_kitty + name = "Frisky Kitty" + color = "#FCF7D4" //(252, 247, 212) + description = "Warm milk mixed with catnip." + boozepwr = 0 + taste_description = "Warm milk and catnip" + +/datum/glass_style/drinking_glass/frisky_kitty + required_drink_type = /datum/reagent/consumable/ethanol/frisky_kitty + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "frisky_kitty" + name = "cup of frisky kitty" + desc = "Warm milk and some catnip." + +/*/datum/reagent/consumable/ethanol/frisky_kitty/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(isfelinid(exposed_mob)) + quality = RACE_DRINK + else + quality = DRINK_GOOD + return ..()*/ + +/* +/datum/reagent/consumable/ethanol/bloodshot_base + name = "Bloodshot Base" + description = "The bootleg blend of nutrients and alcohol that goes into making Bloodshots. Doesn't taste too great on its own, for Hemophages at least." + color = "#c29ca1" + boozepwr = 25 // Still more concentrated than in Bloodshot. + taste_description = "nutritious mix with an alcoholic kick to it" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + + +/datum/reagent/consumable/ethanol/bloodshot + name = "Bloodshot" + description = "The history of the 'Bloodshot' is based in a mix of flavor-neutral chems devised to help deliver nutrients to a Hemophage's tumorous organs. Due to the expense of the real thing and the clinical nature of it, this liquor has been designed as a 'improvised' alternative; though, still tasting like a hangover cure. It smells like iron, giving a clue to the key ingredient." + color = "#a30000" + boozepwr = 20 // The only booze in it is Bloody Mary + taste_description = "blood filled to the brim with nutrients of all kinds" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + chemical_flags_skyrat = REAGENT_BLOOD_REGENERATING + + +/datum/glass_style/drinking_glass/bloodshot + required_drink_type = /datum/reagent/consumable/ethanol/bloodshot + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "bloodshot" + name = "glass of bloodshot" + desc = "The history of the 'Bloodshot' is based in a mix of flavor-neutral chems devised to help deliver nutrients to a Hemophage's tumorous organs. Due to the expense of the real thing and the clinical nature of it, this liquor has been designed as a 'improvised' alternative; though, still tasting like a hangover cure. It smells like iron, giving a clue to the key ingredient." + + +#define BLOODSHOT_DISGUST 25 + +/datum/reagent/consumable/ethanol/bloodshot/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(ishemophage(exposed_mob)) + quality = RACE_DRINK + + else if(exposed_mob.blood_volume < exposed_mob.blood_volume_normal) + quality = DRINK_GOOD + + if(!quality) // Basically, you don't have a reason to want to have this in your system, it doesn't taste good to you! + exposed_mob.adjust_disgust(BLOODSHOT_DISGUST) + + return ..() + +#undef BLOODSHOT_DISGUST + +/datum/reagent/consumable/ethanol/bloodshot/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) + . = ..() + if(drinker.blood_volume < drinker.blood_volume_normal) + drinker.blood_volume = max(drinker.blood_volume, min(drinker.blood_volume + (3 * REM * seconds_per_tick), BLOOD_VOLUME_NORMAL)) //Bloodshot quickly restores blood loss. + +/datum/reagent/consumable/ethanol/blizzard_brew + name = "Blizzard Brew" + description = "An ancient recipe. Served best chilled as much as dwarvenly possible." + color = rgb(180, 231, 216) + boozepwr = 25 + metabolization_rate = 1.25 * REAGENTS_METABOLISM + taste_description = "ancient icicles" + overdose_threshold = 25 + var/obj/structure/ice_stasis/cube + var/atom/movable/screen/alert/status_effect/freon/cryostylane_alert + +/datum/glass_style/drinking_glass/blizzard_brew + required_drink_type = /datum/reagent/consumable/ethanol/blizzard_brew + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "blizzard_brew" + name = "glass of Blizzard Brew" + desc = "An ancient recipe. Served best chilled as much as dwarvenly possible." + +/datum/reagent/consumable/ethanol/blizzard_brew/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(isdwarf(exposed_mob)) + quality = RACE_DRINK + else + quality = DRINK_NICE + return ..() + +/datum/reagent/consumable/ethanol/blizzard_brew/overdose_start(mob/living/carbon/drinker) + . = ..() + cube = new /obj/structure/ice_stasis(get_turf(drinker)) + cube.color = COLOR_CYAN + cube.set_anchored(TRUE) + drinker.forceMove(cube) + cryostylane_alert = drinker.throw_alert("cryostylane_alert", /atom/movable/screen/alert/status_effect/freon/cryostylane) + cryostylane_alert.attached_effect = src //so the alert can reference us, if it needs to + +/datum/reagent/consumable/ethanol/blizzard_brew/on_mob_delete(mob/living/carbon/drinker, amount) + QDEL_NULL(cube) + drinker.clear_alert("cryostylane_alert") + return ..() + +/datum/reagent/consumable/ethanol/molten_mead + name = "Molten Mead" + description = "Famously known to set beards aflame. Ingest at your own risk!" + color = rgb(224, 78, 16) + boozepwr = 35 + metabolization_rate = 1.25 * REAGENTS_METABOLISM + taste_description = "burning wasps" + overdose_threshold = 25 + +/datum/glass_style/drinking_glass/molten_mead + required_drink_type = /datum/reagent/consumable/ethanol/molten_mead + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "molten_mead" + name = "glass of Molten Mead" + desc = "Famously known to set beards aflame. Ingest at your own risk!" + +/datum/reagent/consumable/ethanol/molten_mead/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(isdwarf(exposed_mob)) + quality = RACE_DRINK + else + quality = DRINK_VERYGOOD + return ..() + +/datum/reagent/consumable/ethanol/molten_mead/overdose_start(mob/living/carbon/drinker) + drinker.adjust_fire_stacks(2) + drinker.ignite_mob() + ..() +*/ +/datum/reagent/consumable/ethanol/hippie_hooch + name = "Hippie Hooch" + description = "Peace and love! Under request of the HR department, this drink is sure to sober you up quickly." + color = rgb(77, 138, 34) + boozepwr = -20 + taste_description = "eggy hemp" + var/static/list/status_effects_to_clear = list( + /datum/status_effect/confusion, + /datum/status_effect/dizziness, + /datum/status_effect/drowsiness, + /datum/status_effect/speech/slurring/drunk, + ) + +/datum/glass_style/drinking_glass/hippie_hooch + required_drink_type = /datum/reagent/consumable/ethanol/hippie_hooch + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "hippie_hooch" + name = "glass of Hippie Hooch" + desc = "Peace and love! Under request of the HR department, this drink is sure to sober you up quickly." + +/*/datum/reagent/consumable/ethanol/hippie_hooch/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(isdwarf(exposed_mob)) + quality = RACE_DRINK + else + quality = DRINK_FANTASTIC + return ..()*/ + +/datum/reagent/consumable/ethanol/hippie_hooch/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + for(var/effect in status_effects_to_clear) + affected_mob.remove_status_effect(effect) + affected_mob.reagents.remove_reagent(/datum/reagent/consumable/ethanol, 3 * REM * seconds_per_tick, include_subtypes = TRUE) + . = ..() + if(affected_mob.adjustToxLoss(-0.2 * REM * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)) + . = UPDATE_MOB_HEALTH + affected_mob.adjust_drunk_effect(-10 * REM * seconds_per_tick) + +/datum/reagent/consumable/ethanol/research_rum + name = "Research Rum" + description = "Cooked up by dwarven scientists, this glowing pink brew is sure to supercharge your thinking. How? Science!" + color = rgb(169, 69, 169) + boozepwr = 50 + taste_description = "slippery grey matter" + +/datum/glass_style/drinking_glass/research_rum + required_drink_type = /datum/reagent/consumable/ethanol/research_rum + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "research_rum" + name = "glass of Research Rum" + desc = "Cooked up by dwarven scientists, this glowing pink brew is sure to supercharge your thinking. How? Science!" + +/*/datum/reagent/consumable/ethanol/research_rum/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(isdwarf(exposed_mob)) + quality = RACE_DRINK + else + quality = DRINK_GOOD + return ..()*/ + +/datum/reagent/consumable/ethanol/research_rum/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) + . = ..() + if(prob(5)) + drinker.say(pick_list_replacements(VISTA_FILE, "ballmer_good_msg"), forced = "ballmer") + +/datum/reagent/consumable/ethanol/golden_grog + name = "Golden Grog" + description = "A drink concocted by a dwarven Quartermaster who had too much time and money on his hands. Commonly ordered by influencers looking to flaunt their wealth." + color = rgb(247, 230, 141) + boozepwr = 70 + taste_description = "sweet credit holochips" + +/datum/glass_style/drinking_glass/golden_grog + required_drink_type = /datum/reagent/consumable/ethanol/golden_grog + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "golden_grog" + name = "glass of Golden Grog" + desc = "A drink concocted by a dwarven Quartermaster who had too much time and money on his hands. Commonly ordered by influencers looking to flaunt their wealth." + +/*/datum/reagent/consumable/ethanol/golden_grog/expose_mob(mob/living/exposed_mob, methods, reac_volume) + if(isdwarf(exposed_mob)) + quality = RACE_DRINK + else + quality = DRINK_FANTASTIC + return ..()*/ + +// RACIAL DRINKS END + +/datum/reagent/consumable/ethanol/appletini + name = "Appletini" + color = "#9bd1a9" //(155, 209, 169) + description = "The electric-green appley beverage nobody can turn down!" + boozepwr = 50 + taste_description = "Sweet and green" + quality = DRINK_GOOD + +/datum/glass_style/drinking_glass/appletini + required_drink_type = /datum/reagent/consumable/ethanol/appletini + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "appletini" + name = "glass of appletini" + desc = "An appley beverage in a martini glass" + +/datum/reagent/consumable/ethanol/quadruple_sec/cityofsin //making this a subtype was some REAL JANK, but it saves me a headache, and it looks good! + name = "City of Sin" + color = "#eb9378" //(235, 147, 120) + description = "A smooth, fancy drink for people of ill repute" + boozepwr = 70 + taste_description = "Your own sins" + quality = DRINK_VERYGOOD //takes extra effort + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/glass_style/drinking_glass/cityofsin + required_drink_type = /datum/reagent/consumable/ethanol/quadruple_sec/cityofsin + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "cityofsin" + name = "glass of city of sin" + desc = "Looking at it makes you recall every mistake you've made." + +/datum/reagent/consumable/ethanol/shakiri + name = "Shakiri" + description = "A sweet, fragrant red drink made from fermented kiri fruits. It seems to gently sparkle when exposed to light." + boozepwr = 45 + color = "#cf3c3c" + quality = DRINK_GOOD + taste_description = "delicious liquified jelly" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/glass_style/drinking_glass/shakiri + required_drink_type = /datum/reagent/consumable/ethanol/shakiri + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "shakiri" + name = "glass of shakiri" + desc = "A sweet, fragrant red drink made from fermented kiri fruits. It seems to gently sparkle when exposed to light." + +/datum/reagent/consumable/ethanol/shakiri_spritz + name = "Shakiri Spritz" + description = "A carbonated cocktail made from shakiri and orange juice with soda water." + color = "#cf863c" + quality = DRINK_GOOD + boozepwr = 45 + taste_description = "tangy, carbonated sweetness" + +/datum/glass_style/drinking_glass/shakiri_spritz + required_drink_type = /datum/reagent/consumable/ethanol/shakiri_spritz + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "shakiri_spritz" + name = "glass of shakiri spritz" + desc = "A carbonated cocktail made from shakiri and orange juice with soda water." + +/datum/reagent/consumable/ethanol/crimson_hurricane + name = "Crimson Hurricane" + description = "A strong, citrusy cocktail of human origin, now made with shakiri and kiri jelly for a delightfully sweet drink." + color = "#b86637" + quality = DRINK_VERYGOOD + boozepwr = 60 + taste_description = "thick, fruity sweetness with a punch" + +/datum/glass_style/drinking_glass/crimson_hurricane + required_drink_type = /datum/reagent/consumable/ethanol/crimson_hurricane + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "crimson_hurricane" + name = "glass of crimson hurricane" + desc = "A strong, citrusy cocktail of human origin, now with shakiri and kiri jelly for a delightfully sweet drink." + +/datum/reagent/consumable/ethanol/shakiri_rogers + name = "Shakiri Rogers" + description = "A take on the classic Roy Rogers, with shakiri instead of grenadine. Sweet and refreshing." + color = "#6F2B1A" + quality = DRINK_GOOD + boozepwr = 45 + taste_description = "fruity, carbonated soda with a slight kick" + +/datum/glass_style/drinking_glass/shakiri_rogers + required_drink_type = /datum/reagent/consumable/ethanol/shakiri_rogers + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "shakiri_rogers" + name = "glass of shakiri rogers" + desc = "A take on the classic Roy Rogers, with shakiri instead of grenadine. Sweet and refreshing." diff --git a/modular_doppler/modular_food_drinks_and_chems/food_and_drinks/drink_reagents.dm b/modular_doppler/modular_food_drinks_and_chems/food_and_drinks/drink_reagents.dm new file mode 100644 index 0000000000000..062854fc73b3d --- /dev/null +++ b/modular_doppler/modular_food_drinks_and_chems/food_and_drinks/drink_reagents.dm @@ -0,0 +1,79 @@ +/datum/reagent/consumable/pinkmilk + name = "Strawberry Milk" + description = "A drink of a bygone era of milk and artificial sweetener back on a rock." + color = "#f76aeb"//rgb(247, 106, 235) + quality = DRINK_VERYGOOD + taste_description = "sweet strawberry and milk cream" + +/datum/glass_style/drinking_glass/pinkmilk + required_drink_type = /datum/reagent/consumable/pinkmilk + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "pinkmilk" + name = "tall glass of strawberry milk" + desc = "Delicious flavored strawberry syrup mixed with milk." + +/datum/reagent/consumable/pinkmilk/on_mob_life(mob/living/carbon/M) + if(prob(15)) + to_chat(M, span_notice("[pick("You cant help to smile.","You feel nostalgia all of sudden.","You remember to relax.")]")) + ..() + . = 1 + +/datum/reagent/consumable/pinktea + name = "Strawberry Tea" + description = "A timeless classic!" + color = "#f76aeb"//rgb(247, 106, 235) + quality = DRINK_VERYGOOD + taste_description = "sweet tea with a hint of strawberry" + +/datum/glass_style/drinking_glass/pinktea + required_drink_type = /datum/reagent/consumable/pinktea + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "pinktea" + name = "mug of strawberry tea" + desc = "Delicious traditional tea flavored with strawberries." + +/datum/reagent/consumable/pinktea/on_mob_life(mob/living/carbon/M) + if(prob(10)) + to_chat(M, span_notice("[pick("Diamond skies where white deer fly.","Sipping strawberry tea.","Silver raindrops drift through timeless, Neverending June.","Crystal ... pearls free, with love!","Beaming love into me.")]")) + ..() + . = TRUE + +/datum/reagent/consumable/catnip_tea + name = "Catnip Tea" + description = "A sleepy and tasty catnip tea!" + color = "#101000" // rgb: 16, 16, 0 + taste_description = "sugar and catnip" + +/datum/glass_style/drinking_glass/catnip_tea + required_drink_type = /datum/reagent/consumable/catnip_tea + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = "catnip_tea" + name = "glass of catnip tea" + desc = "A purrfect drink for a cat." + +/datum/reagent/consumable/catnip_tea/on_mob_life(mob/living/carbon/M) + M.adjustStaminaLoss(min(50 - M.getStaminaLoss(), 3)) + if(isfelinid(M)) + if(prob(20)) + M.emote("nya") + if(prob(20)) + to_chat(M, span_notice("[pick("Headpats feel nice.", "Backrubs would be nice.", "Mew")]")) + else + to_chat(M, span_notice("[pick("I feel oddly calm.", "I feel relaxed.", "Mew?")]")) + ..() + +/datum/reagent/consumable/ethanol/beerbatter + name = "Beer Batter" + description = "Probably not the greatest idea to drink...sludge." + color = "#f5f4e9" + nutriment_factor = 2 * REAGENTS_METABOLISM + taste_description = "flour and cheap booze" + boozepwr = 8 // beer diluted at about a 1:3 ratio + ph = 6 + +/datum/glass_style/drinking_glass/beerbatter + required_drink_type = /datum/reagent/consumable/ethanol/beerbatter + icon = 'icons/obj/drinks/shakes.dmi' + icon_state = "chocolatepudding" + name = "glass of beer batter" + desc = "Used in cooking, pure cholesterol, Scottish people eat it." diff --git a/modular_doppler/modular_food_drinks_and_chems/food_and_drinks/drinks.dm b/modular_doppler/modular_food_drinks_and_chems/food_and_drinks/drinks.dm new file mode 100644 index 0000000000000..882f440c220c7 --- /dev/null +++ b/modular_doppler/modular_food_drinks_and_chems/food_and_drinks/drinks.dm @@ -0,0 +1,87 @@ +/// How much fizziness is added to the can of soda by throwing it, in percentage points +#define SODA_FIZZINESS_THROWN 15 +/// How much fizziness is added to the can of soda by shaking it, in percentage points +#define SODA_FIZZINESS_SHAKE 5 + +/obj/item/reagent_containers/cup/soda_cans/doppler + icon = 'modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi' + icon_state = null + +/obj/item/reagent_containers/cup/soda_cans/doppler/attack(mob/M, mob/living/user) + if(istype(M, /mob/living/carbon) && !reagents.total_volume && user.combat_mode && user.zone_selected == BODY_ZONE_HEAD) + if(M == user) + user.visible_message(span_warning("[user] crushes the can of [src] on [user.p_their()] forehead!"), span_notice("You crush the can of [src] on your forehead.")) + else + user.visible_message(span_warning("[user] crushes the can of [src] on [M]'s forehead!"), span_notice("You crush the can of [src] on [M]'s forehead.")) + playsound(M,'sound/weapons/pierce.ogg', rand(10,50), TRUE) + var/obj/item/trash/can/doppler/crushed_can = new /obj/item/trash/can/doppler(M.loc) + crushed_can.icon_state = icon_state + qdel(src) + return TRUE + . = ..() + +/obj/item/reagent_containers/cup/soda_cans/doppler/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit = FALSE) + . = ..() + + if(. != BULLET_ACT_HIT) + return + + if(hitting_projectile.damage > 0 && hitting_projectile.damage_type == BRUTE && !QDELETED(src)) + var/obj/item/trash/can/doppler/crushed_can = new /obj/item/trash/can/doppler(src.loc) + crushed_can.icon_state = icon_state + var/atom/throw_target = get_edge_target_turf(crushed_can, pick(GLOB.alldirs)) + crushed_can.throw_at(throw_target, rand(1,2), 7) + qdel(src) + return + +/** + * Burst the soda open on someone. Fun! Opens and empties the soda can, but does not crush it. + * + * Arguments: + * * target - Who's getting covered in soda + * * hide_message - Stops the generic fizzing message, so you can do your own + */ + +/obj/item/reagent_containers/cup/soda_cans/doppler/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + if(. || spillable || !reagents.total_volume) // if it was caught, already opened, or has nothing in it + return + + fizziness += SODA_FIZZINESS_THROWN + if(!prob(fizziness)) + return + + burst_soda(hit_atom, hide_message = TRUE) + visible_message(span_danger("[src]'s impact with [hit_atom] causes it to rupture, spilling everywhere!")) + var/obj/item/trash/can/doppler/crushed_can = new /obj/item/trash/can/doppler(src.loc) + crushed_can.icon_state = icon_state + moveToNullspace() + QDEL_IN(src, 1 SECONDS) // give it a second so it can still be logged for the throw impact + +/obj/item/trash/can/doppler + icon = 'modular_doppler/clutter objects/icons/janitor.dmi' + icon_state = "lemonade" + +/obj/item/reagent_containers/cup/soda_cans/doppler/lubricola + name = "LubriCola" + desc = "The perfect lubricant for your weary gears." + icon_state = "lubricola" + list_reagents = list(/datum/reagent/fuel/oil = 30) + custom_price = PAYCHECK_LOWER * 1.2 + +/obj/item/reagent_containers/cup/soda_cans/doppler/welding_fizz + name = "Welding Fizz" + desc = "More energy than in an IED! Now carbonated. WARNING: Contains toxic and flammable fuels." + icon_state = "welding_fizz" + list_reagents = list(/datum/reagent/fuel = 25, /datum/reagent/carbondioxide = 5) + custom_price = PAYCHECK_LOWER * 1.2 + +/*/obj/item/reagent_containers/cup/soda_cans/doppler/synthanolcan + name = "Silly Cone's Synthanol" + desc = "A recompiling can of synthanol." + icon_state = "synthanolcan" + list_reagents = list(/datum/reagent/consumable/ethanol/synthanol = 30) + custom_price = PAYCHECK_CREW*/ + +#undef SODA_FIZZINESS_THROWN +#undef SODA_FIZZINESS_SHAKE diff --git a/modular_doppler/modular_food_drinks_and_chems/food_and_drinks/drinks_recipes.dm b/modular_doppler/modular_food_drinks_and_chems/food_and_drinks/drinks_recipes.dm new file mode 100644 index 0000000000000..420fea48fb751 --- /dev/null +++ b/modular_doppler/modular_food_drinks_and_chems/food_and_drinks/drinks_recipes.dm @@ -0,0 +1,421 @@ +/*STUFF WE CAN'T USE YET + +/datum/chemical_reaction/drink/synthanol + results = list(/datum/reagent/consumable/ethanol/synthanol = 3) + required_reagents = list( + /datum/reagent/lube = 1, + /datum/reagent/toxin/plasma = 1, + /datum/reagent/fuel = 1, + ) + mix_message = "The chemicals mix to create shiny, blue substance." + +/datum/chemical_reaction/drink/robottears + results = list(/datum/reagent/consumable/ethanol/synthanol/robottears = 3) + required_reagents = list( + /datum/reagent/consumable/ethanol/synthanol = 1, + /datum/reagent/fuel/oil = 1, + /datum/reagent/consumable/sodawater = 1, + ) + mix_message = "The ingredients combine into a stiff, dark goo." + +/datum/chemical_reaction/drink/trinary + results = list(/datum/reagent/consumable/ethanol/synthanol/trinary = 3) + required_reagents = list( + /datum/reagent/consumable/ethanol/synthanol = 1, + /datum/reagent/consumable/limejuice = 1, + /datum/reagent/consumable/orangejuice = 1, + ) + mix_message = "The ingredients mix into a colorful substance." + +/datum/chemical_reaction/drink/servo + results = list(/datum/reagent/consumable/ethanol/synthanol/servo = 4) + required_reagents = list( + /datum/reagent/consumable/ethanol/synthanol = 2, + /datum/reagent/consumable/cream = 1, + /datum/reagent/consumable/hot_coco = 1, + ) + mix_message = "The ingredients mix into a dark brown substance." + +/datum/chemical_reaction/drink/uplink + results = list(/datum/reagent/consumable/ethanol/synthanol/uplink = 5) + required_reagents = list( + /datum/reagent/consumable/ethanol/synthanol = 1, + /datum/reagent/consumable/ethanol/rum = 1, + /datum/reagent/consumable/ethanol/vodka = 1, + /datum/reagent/consumable/ethanol/tequila = 1, + /datum/reagent/consumable/ethanol/whiskey = 1, + ) + mix_message = "The chemicals mix to create a shiny, orange substance." + +/datum/chemical_reaction/drink/synthncoke + results = list(/datum/reagent/consumable/ethanol/synthanol/synthncoke = 2) + required_reagents = list( + /datum/reagent/consumable/ethanol/synthanol = 1, + /datum/reagent/consumable/space_cola = 1, + ) + mix_message = "The chemicals mix to create a smooth, fizzy substance." + +/datum/chemical_reaction/drink/synthignon + results = list(/datum/reagent/consumable/ethanol/synthanol/synthignon = 2) + required_reagents = list( + /datum/reagent/consumable/ethanol/synthanol = 1, + /datum/reagent/consumable/ethanol/wine = 1, + ) + mix_message = "The chemicals mix to create a fine, red substance." +*/ +// Other Booze + +/datum/chemical_reaction/drink/hot_toddy + results = list(/datum/reagent/consumable/ethanol/hot_toddy = 5) + required_reagents = list( + /datum/reagent/consumable/ethanol/rum = 1, + /datum/reagent/consumable/tea = 3, + /datum/reagent/consumable/honey = 1, + ) + mix_message = "A loud popping begins to fill the air as the drink is mixed." + +/datum/chemical_reaction/drink/hellfire + results = list(/datum/reagent/consumable/ethanol/hellfire = 4) + required_reagents = list( + /datum/reagent/consumable/ethanol/rum = 2, + /datum/reagent/consumable/ice = 1, + /datum/reagent/consumable/ethanol/crevice_spike = 1, + ) + mix_message = "The liquid begins to churn as it changes to an amber orange and catches on fire." + +/datum/chemical_reaction/drink/sins_delight + results = list(/datum/reagent/consumable/ethanol/sins_delight = 5) + required_reagents = list( + /datum/reagent/consumable/ethanol/demonsblood = 2, + /datum/reagent/consumable/ethanol/triple_sec = 1, + /datum/reagent/consumable/ethanol/martini = 1, + /datum/reagent/consumable/ethanol/changelingsting = 1, + ) + mix_message = "The liquid starts swirling, before forming a pink cloud that dissipates in the air." + +/datum/chemical_reaction/drink/strawberry_daiquiri + results = list(/datum/reagent/consumable/ethanol/strawberry_daiquiri = 7) + required_reagents = list( + /datum/reagent/consumable/ethanol/rum = 2, + /datum/reagent/consumable/limejuice = 1, + /datum/reagent/consumable/sugar = 1, + /datum/reagent/consumable/berryjuice = 2, + /datum/reagent/consumable/ice = 1, + ) + +/datum/chemical_reaction/drink/miami_vice + results = list(/datum/reagent/consumable/ethanol/miami_vice = 2) + required_reagents = list( + /datum/reagent/consumable/ethanol/pina_colada = 1, + /datum/reagent/consumable/ethanol/strawberry_daiquiri = 1, + ) + +/datum/chemical_reaction/drink/malibu_sunset + results = list(/datum/reagent/consumable/ethanol/malibu_sunset = 5) + required_reagents = list( + /datum/reagent/consumable/ethanol/painkiller = 2, + /datum/reagent/consumable/grenadine = 1, + /datum/reagent/consumable/orangejuice = 1, + /datum/reagent/consumable/ice = 1, + ) + +/datum/chemical_reaction/drink/liz_fizz + results = list(/datum/reagent/consumable/ethanol/liz_fizz = 5) + required_reagents = list( + /datum/reagent/consumable/triple_citrus = 3, + /datum/reagent/consumable/ice = 1, + /datum/reagent/consumable/cream = 1,) + +/datum/chemical_reaction/drink/hotlime_miami + results = list(/datum/reagent/consumable/ethanol/hotlime_miami = 2) + required_reagents = list( + /datum/reagent/medicine/ephedrine = 1, + /datum/reagent/consumable/ethanol/pina_colada = 1, + ) + +/datum/chemical_reaction/drink/coggrog + results = list(/datum/reagent/consumable/ethanol/coggrog = 3) + required_reagents = list( + /datum/reagent/consumable/ethanol/cognac = 1, + /datum/reagent/fuel = 1, + /datum/reagent/consumable/ethanol/screwdrivercocktail = 1, + ) + mix_message = "You hear faint sounds of gears turning as it mixes." + mix_sound = 'sound/machines/clockcult/steam_whoosh.ogg' + +/datum/chemical_reaction/drink/badtouch + results = list(/datum/reagent/consumable/ethanol/badtouch = 5) + required_reagents = list( + /datum/reagent/consumable/ethanol/cognac = 2, + /datum/reagent/consumable/limejuice = 2, + /datum/reagent/consumable/orangejuice=1, + ) + +/datum/chemical_reaction/drink/marsblast + results = list(/datum/reagent/consumable/ethanol/marsblast = 5) + required_reagents = list( + /datum/reagent/consumable/ethanol/whiskey = 3, + /datum/reagent/consumable/dr_gibb = 2, + ) + +/datum/chemical_reaction/drink/mercuryblast + results = list(/datum/reagent/consumable/ethanol/mercuryblast = 4) + required_reagents = list( + /datum/reagent/consumable/ethanol/vodka = 2, + /datum/reagent/consumable/spacemountainwind = 1, + /datum/reagent/consumable/ice = 1, + ) + +/datum/chemical_reaction/drink/piledriver + results = list(/datum/reagent/consumable/ethanol/piledriver = 6) + required_reagents = list( + /datum/reagent/consumable/ethanol/screwdrivercocktail = 1, + /datum/reagent/consumable/ethanol/rum_coke = 1, + ) + +/datum/chemical_reaction/drink/zenstar + results = list(/datum/reagent/consumable/ethanol/zenstar = 5) + required_reagents = list( + /datum/reagent/consumable/ethanol/triple_sec = 2, + /datum/reagent/consumable/lemonjuice = 2, + /datum/reagent/consumable/grenadine = 1, + ) + +/datum/chemical_reaction/drink/appletini + results = list(/datum/reagent/consumable/ethanol/appletini = 5) + required_reagents = list( + /datum/reagent/consumable/ethanol/vodka = 3, + /datum/reagent/consumable/ethanol/hcider = 1, + /datum/reagent/consumable/lemonjuice = 1, + ) + +/datum/chemical_reaction/drink/quadruple_sec/cityofsin + results = list(/datum/reagent/consumable/ethanol/quadruple_sec/cityofsin = 4) + required_reagents = list( + /datum/reagent/consumable/ethanol/vodka = 2, + /datum/reagent/consumable/ethanol/champagne = 1, + /datum/reagent/consumable/berryjuice = 1, + ) + +/*/datum/chemical_reaction/drink/blizzard_brew + results = list(/datum/reagent/consumable/ethanol/blizzard_brew = 3) + required_reagents = list( + /datum/reagent/consumable/ethanol/iced_beer = 1, + /datum/reagent/consumable/ice = 1, + /datum/reagent/inverse/cryostylane = 1, + ) + mix_message = "You hear crackling ice as it mixes." + mix_sound = 'sound/effects/ice_shovel.ogg' + +/datum/chemical_reaction/drink/molten_mead + results = list(/datum/reagent/consumable/ethanol/molten_mead = 3) + required_reagents = list( + /datum/reagent/consumable/condensedcapsaicin = 2, + /datum/reagent/consumable/ethanol/mead = 2, + /datum/reagent/consumable/ethanol/mauna_loa = 1, + ) + mix_message = "You hear sizzling flesh and angry wasps buzzing as it mixes." + mix_sound = 'sound/effects/wounds/sizzle2.ogg'*/ + +/datum/chemical_reaction/drink/hippie_hooch + results = list(/datum/reagent/consumable/ethanol/hippie_hooch = 5) + required_reagents = list( + /datum/reagent/medicine/antihol = 1, + /datum/reagent/consumable/ethanol/crevice_spike = 3, + /datum/reagent/medicine/earthsblood = 1, + ) + mix_message = "You hear wood flutes and nature as it mixes." + mix_sound = 'modular_doppler/emotes/sound/hoot.ogg' + +/datum/chemical_reaction/drink/research_rum + results = list(/datum/reagent/consumable/ethanol/research_rum = 4) + required_reagents = list( + /datum/reagent/consumable/ethanol/bananahonk = 2, + /datum/reagent/inverse/neurine = 1, + /datum/reagent/consumable/ethanol/grog = 1, + ) + mix_message = "You hear gurgling and dinging as it mixes." + mix_sound = 'sound/machines/microwave/microwave-end.ogg' + +/datum/chemical_reaction/drink/golden_grog + results = list(/datum/reagent/consumable/ethanol/golden_grog = 5) + required_reagents = list( + /datum/reagent/consumable/ethanol/goldschlager = 10, + /datum/reagent/gold = 1, + /datum/reagent/silver = 1, + /datum/reagent/cellulose = 1, + /datum/reagent/spraytan = 1, + ) + mix_message = "You hear golden coins and snobby rich laughing as it mixes." + mix_sound = 'sound/items/coinflip.ogg' + +/* MORE STUFF WE CAN'T USE YET +// RACE SPECIFIC DRINKS + +/datum/chemical_reaction/drink/coldscales + results = list(/datum/reagent/consumable/ethanol/coldscales = 3) + required_reagents = list( + /datum/reagent/consumable/tea = 1, + /datum/reagent/toxin/slimejelly = 1, + /datum/reagent/consumable/menthol = 1, + ) + +/datum/chemical_reaction/drink/oil_drum + results = list(/datum/reagent/consumable/ethanol/oil_drum = 3) + required_reagents = list( + /datum/reagent/consumable/ethanol = 1, + /datum/reagent/fuel/oil = 1, + /datum/reagent/consumable/ethanol/champagne = 12, + ) + +/datum/chemical_reaction/drink/nord_king + results = list(/datum/reagent/consumable/ethanol/nord_king = 10) + required_reagents = list( + /datum/reagent/consumable/ethanol = 5, + /datum/reagent/consumable/honey = 1, + /datum/reagent/consumable/ethanol/red_mead = 10, + ) + +/datum/chemical_reaction/drink/velvet_kiss + results = list(/datum/reagent/consumable/ethanol/velvet_kiss = 15) //Limited races use this + required_reagents = list( + /datum/reagent/blood = 5, + /datum/reagent/consumable/tea = 1, + /datum/reagent/consumable/ethanol/wine = 10, + ) + +/datum/chemical_reaction/drink/abduction_fruit + results = list(/datum/reagent/consumable/ethanol/abduction_fruit = 3) + required_reagents = list( + /datum/reagent/consumable/limejuice = 10, + /datum/reagent/consumable/berryjuice = 5, + /datum/reagent/consumable/watermelonjuice = 10, + ) + +/datum/chemical_reaction/drink/bug_zapper + results = list(/datum/reagent/consumable/ethanol/bug_zapper = 20) //Harder to make + required_reagents = list( + /datum/reagent/consumable/lemonjuice = 10, + /datum/reagent/teslium = 1, + /datum/reagent/copper = 10, + ) + +/datum/chemical_reaction/drink/mush_crush + results = list(/datum/reagent/consumable/ethanol/mush_crush = 10) + required_reagents = list( + /datum/reagent/iron = 5, + /datum/reagent/ash = 5, + /datum/reagent/toxin/coffeepowder = 10, + ) + +/datum/chemical_reaction/drink/hollow_bone + results = list(/datum/reagent/consumable/ethanol/hollow_bone = 10) + required_reagents = list( + /datum/reagent/toxin/bonehurtingjuice = 10, + /datum/reagent/consumable/soymilk = 15, + ) + +/datum/chemical_reaction/drink/jell_wyrm + results = list(/datum/reagent/consumable/ethanol/jell_wyrm = 2) + required_reagents = list( + /datum/reagent/toxin/slimejelly = 1, + /datum/reagent/toxin/carpotoxin = 1, + /datum/reagent/carbondioxide = 5, + ) + required_temp = 333 // (59.85'C) + +/datum/chemical_reaction/drink/laval_spit + results = list(/datum/reagent/consumable/ethanol/laval_spit = 20) //Limited use + required_reagents = list( + /datum/reagent/iron = 5, + /datum/reagent/consumable/ethanol/mauna_loa = 10, + /datum/reagent/sulfur = 5, + ) + required_temp = 900 // (626.85'C) +*/ +/datum/chemical_reaction/drink/frisky_kitty + results = list(/datum/reagent/consumable/ethanol/frisky_kitty = 2) + required_reagents = list( + /datum/reagent/consumable/catnip_tea = 1, + /datum/reagent/consumable/milk = 1, + ) + required_temp = 296 //Just above room temp (22.85'C) +/* +/datum/chemical_reaction/drink/bloodshot_base + results = list(/datum/reagent/consumable/ethanol/bloodshot_base = 2) + required_reagents = list( + /datum/reagent/consumable/ethanol/bloody_mary = 1, + /datum/reagent/consumable/sugar = 1, + ) + reaction_tags = REACTION_TAG_DRINK | REACTION_TAG_EASY | REACTION_TAG_OTHER + +/datum/chemical_reaction/drink/bloodshot + results = list(/datum/reagent/consumable/ethanol/bloodshot = 5) + required_reagents = list( + /datum/reagent/blood = 3, + /datum/reagent/consumable/ethanol/bloodshot_base = 2, + ) + reaction_tags = REACTION_TAG_DRINK | REACTION_TAG_EASY | REACTION_TAG_OTHER +*/ + +// Non-Booze + +/datum/chemical_reaction/drink/pinkmilk + results = list(/datum/reagent/consumable/pinkmilk = 2) + required_reagents = list( + /datum/reagent/consumable/berryjuice = 1, + /datum/reagent/consumable/milk = 1, + /datum/reagent/consumable/sugar = 1, + ) + +/datum/chemical_reaction/drink/pinktea + results = list(/datum/reagent/consumable/pinktea = 5) + required_reagents = list( + /datum/reagent/consumable/berryjuice = 1, + /datum/reagent/consumable/tea/arnold_palmer = 1, + /datum/reagent/consumable/sugar = 1, + ) + +/datum/chemical_reaction/drink/catnip_tea + results = list(/datum/reagent/consumable/catnip_tea = 10) + required_reagents = list( + /datum/reagent/consumable/tea = 5, + /datum/reagent/pax/catnip = 2, + ) + +/datum/chemical_reaction/drink/beerbatter + results = list(/datum/reagent/consumable/ethanol/beerbatter = 4) + required_reagents = list( + /datum/reagent/consumable/nutriment/fat/oil = 1, + /datum/reagent/consumable/ethanol/beer = 1, + /datum/reagent/consumable/flour = 1, + ) + mix_message = "Sizzling and cracking is heard as you beat the mixture into submission." + +/datum/chemical_reaction/drink/shakiri_spritz + results = list(/datum/reagent/consumable/ethanol/shakiri_spritz = 3) + required_reagents = list( + /datum/reagent/consumable/ethanol/shakiri = 1, + /datum/reagent/consumable/sodawater = 1, + /datum/reagent/consumable/orangejuice = 1, + ) + mix_message = "The liquids combine to create a pleasant orange mixture." + +/datum/chemical_reaction/drink/crimson_hurricane + results = list(/datum/reagent/consumable/ethanol/crimson_hurricane = 5) + required_reagents = list( + /datum/reagent/consumable/ethanol/shakiri = 1, + /datum/reagent/consumable/ethanol/rum = 2, + /datum/reagent/consumable/grenadine = 1, + /datum/reagent/consumable/limejuice = 1, + ) + mix_message = "The mixture develops into a rich red color." + +/datum/chemical_reaction/drink/shakiri_rogers + results = list(/datum/reagent/consumable/ethanol/shakiri_rogers = 10) + required_reagents = list( + /datum/reagent/consumable/ethanol/shakiri = 1, + /datum/reagent/consumable/space_cola = 5, + /datum/reagent/consumable/ice = 2, + ) + mix_message = "Bubbles of carbonation rise and pop at the surface of the dark mixture." diff --git a/modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi b/modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi new file mode 100644 index 0000000000000..0b1eaf31cf571 Binary files /dev/null and b/modular_doppler/modular_food_drinks_and_chems/icons/drinks.dmi differ diff --git a/modular_doppler/vending_machines/code/vendor_containers.dm b/modular_doppler/vending_machines/code/vendor_containers.dm new file mode 100644 index 0000000000000..7feb74dfbcfd6 --- /dev/null +++ b/modular_doppler/vending_machines/code/vendor_containers.dm @@ -0,0 +1,89 @@ +/obj/item/storage/box/foodpack + name = "wrapped meal container" + desc = "A generic brown paper food package, you aren't quite sure where this comes from." + icon = 'modular_doppler/vending_machines/icons/imported_quick_foods.dmi' + icon_state = "foodpack_generic_big" + illustration = null + custom_price = PAYCHECK_CREW * 1.8 + ///What the main course of this package is + var/main_course = /obj/item/trash/empty_food_tray + ///What the side of this package should be + var/side_item = /obj/item/food/vendor_snacks + ///What kind of condiment pack should we give the package + var/condiment_pack = /obj/item/reagent_containers/condiment/pack/ketchup + +/obj/item/storage/box/foodpack/PopulateContents() + . = ..() + new main_course(src) + new side_item(src) + new condiment_pack(src) + +/obj/item/storage/box/foodpack/nt + name = "\improper NT-Combo Meal - Salisbury Steak" + desc = "A relatively bland package made of reflective metal foil, it has a blue sprite and the letters 'NT' printed on the top." + icon_state = "foodpack_nt_big" + main_course = /obj/item/food/vendor_tray_meal + side_item = /obj/effect/spawner/random/vendor_meal_sides/nt + condiment_pack = /obj/item/reagent_containers/condiment/pack/ketchup + +/obj/item/storage/box/foodpack/nt/burger + name = "\improper NT-Combo Meal - Cheeseburger" + main_course = /obj/item/food/vendor_tray_meal/burger + +/obj/item/storage/box/foodpack/nt/chicken_sammy + name = "\improper NT-Combo Meal - Spicy Chicken Sandwich" + main_course = /obj/item/food/vendor_tray_meal/chicken_sandwich + +/obj/item/storage/box/foodpack/yangyu + name = "\improper Atatakai shokuji - Homestyle Noodles" + desc = "A well decorated red and white plastic package, covered in nearly incomprehensible yangyu text." + icon_state = "foodpack_yangyu_big" + main_course = /obj/item/food/vendor_tray_meal/ramen + side_item = /obj/effect/spawner/random/vendor_meal_sides/yangyu + condiment_pack = /obj/item/reagent_containers/condiment/pack/hotsauce + +/obj/item/storage/box/foodpack/yangyu/sushi + name = "\improper Atatakai shokuji - Carp Sushi Rolls" + main_course = /obj/item/food/vendor_tray_meal/sushi + +/obj/item/storage/box/foodpack/yangyu/beef_rice + name = "\improper Atatakai shokuji - Beef and Rice" + main_course = /obj/item/food/vendor_tray_meal/beef_rice + +/obj/item/storage/box/foodpack/moth + name = "\improper Ration Type M - Pesto Pizza" + desc = "A cardboard-colored paper package with the symbol of the nomad fleet stamped upon it." + icon_state = "foodpack_moth_big" + main_course = /obj/item/food/vendor_tray_meal/pesto_pizza + side_item = /obj/effect/spawner/random/vendor_meal_sides/moth + condiment_pack = /obj/item/reagent_containers/condiment/pack/astrotame + +/obj/item/storage/box/foodpack/moth/baked_rice + name = "\improper Ration Type M - Baked Rice and Grilled Cheese" + main_course = /obj/item/food/vendor_tray_meal/baked_rice + +/obj/item/storage/box/foodpack/moth/fuel_jack + name = "\improper Ration Type M - Fueljack's Feast" + main_course = /obj/item/food/vendor_tray_meal/fueljack + +/obj/item/storage/box/foodpack/tizira + name = "\improper Tizira Imports Pack - Moonfish Nizaya" + desc = "A dull, metal foil package with the colors of the Tiziran flag striped across it, as well as a stamp of legitimate origin from the Tiziran exports office." + icon_state = "foodpack_tizira_big" + main_course = /obj/item/food/vendor_tray_meal/moonfish_nizaya + side_item = /obj/effect/spawner/random/vendor_meal_sides/tizira + condiment_pack = /obj/item/reagent_containers/condiment/pack/bbqsauce + custom_price = PAYCHECK_CREW * 2 //Tiziran imports are a bit more expensive + +/obj/item/storage/box/foodpack/tizira/examine_more(mob/user) + . = ..() + . += span_notice("Now that you look at it, the origin stamp appears to be a poor imitation of the real thing!") + return . + +/obj/item/storage/box/foodpack/tizira/roll + name = "\improper Tizira Imports Pack - Emperor Roll" + main_course = /obj/item/food/vendor_tray_meal/emperor_roll + +/obj/item/storage/box/foodpack/tizira/stir_fry + name = "\improper Tizira Imports Pack - Mushroom Stirfry" + main_course = /obj/item/food/vendor_tray_meal/mushroom_fry diff --git a/modular_doppler/vending_machines/code/vendor_food.dm b/modular_doppler/vending_machines/code/vendor_food.dm new file mode 100644 index 0000000000000..2e036b9ec31a2 --- /dev/null +++ b/modular_doppler/vending_machines/code/vendor_food.dm @@ -0,0 +1,318 @@ +// Packaged whole meals and sides for the 'meals' tab of vendors + +/* TRASH */ + +/obj/item/trash/empty_food_tray + name = "empty plastic food tray" + desc = "The condensation and what you can only hope are the leftovers of food make this a bit hard to reuse." + icon = 'modular_doppler/vending_machines/icons/imported_quick_foods.dmi' + icon_state = "foodtray_empty" + custom_materials = list( + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) + +/obj/item/trash/empty_side_pack + name = "empty side wrapper" + desc = "Unfortunately, this no longer holds any sides to distract you from the other 'food'." + icon = 'modular_doppler/vending_machines/icons/imported_quick_foods.dmi' + icon_state = "foodpack_generic_trash" + custom_materials = list( + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) + +/obj/item/trash/empty_side_pack/nt + icon_state = "foodpack_nt_trash" + +/obj/item/trash/empty_side_pack/yangyu + icon_state = "foodpack_yangyu_trash" + +/obj/item/trash/empty_side_pack/moth + icon_state = "foodpack_moth_trash" + +/obj/item/trash/empty_side_pack/tizira + icon_state = "foodpack_tizira_trash" + +/* MEALS */ + +/* +* NT Meals +*/ + +/obj/item/food/vendor_tray_meal + name = "\improper NT-Meal: Steak and Macaroni" + desc = "A 'salisbury steak' drowning in something similar to a gravy, with a macaroni and cheese substitute mix sitting right beside it." + icon = 'modular_doppler/vending_machines/icons/imported_quick_foods.dmi' + icon_state = "foodtray_sad_steak" + trash_type = /obj/item/trash/empty_food_tray + food_reagents = list(/datum/reagent/consumable/nutriment = 8) + tastes = list("meat?" = 2, "cheese?" = 2, "laziness" = 1) + foodtypes = MEAT | GRAIN | DAIRY + food_flags = FOOD_FINGER_FOOD + w_class = WEIGHT_CLASS_SMALL + ///Does this food have the steam effect on it when initialized + var/hot_and_steamy = TRUE + +/obj/item/food/vendor_tray_meal/Initialize(mapload) + . = ..() + if(hot_and_steamy) + overlays += mutable_appearance('icons/effects/steam.dmi', "steam_triple", ABOVE_OBJ_LAYER) + +/obj/item/food/vendor_tray_meal/examine_more(mob/user) + . = ..() + . += span_notice("You browse the back of the box...") + . += "\t[span_warning("Warning: Packaged in a factory where every allergen known is present.")]" + . += "\t[span_warning("Warning: Contents might be hot.")]" + . += "\t[span_info("Per 200g serving contains: 8g Sodium; 25g Fat, of which 22g are saturated; 2g Sugar.")]" + return . + +/obj/item/food/vendor_tray_meal/burger + name = "\improper NT-Meal: Cheeseburger" + desc = "A pretty sad looking burger with a kinda soggy bottom bun and highlighter yellow cheese." + icon_state = "foodtray_burg" + tastes = list("bread" = 2, "meat?" = 2, "cheese?" = 2, "laziness" = 1) + foodtypes = MEAT | GRAIN | DAIRY + +/obj/item/food/vendor_tray_meal/chicken_sandwich + name = "\improper NT-Meal: Spicy Chicken Sandwich" + desc = "A pretty sad looking chicken sandwich, the 'meat' patty is covered in so many manufactured spices that it has become an eerie red color." + icon_state = "foodtray_chickie_sandwich" + food_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/capsaicin = 10) + tastes = list("bread" = 2, "chicken?" = 2, "overwhelming spice" = 2, "laziness" = 1) + foodtypes = MEAT | GRAIN | DAIRY + +/* +* Yangyu Meals +*/ + +/obj/item/food/vendor_tray_meal/ramen + name = "\improper Meinkosu: Homestyle Noodles" + desc = "A brick of the finest factory made ramen, with a small amount of rehydrated vegetables and herbs floating around." + icon_state = "foodtray_noodle" + tastes = list("cheap noodles" = 2, "laziness" = 1) + foodtypes = GRAIN | VEGETABLES + +/obj/item/food/vendor_tray_meal/sushi + name = "\improper Meinkosu: Fresh Carp Rolls" + desc = "A pair of sushi rolls, the appearance of which would suggest that the label is lying to you." + icon_state = "foodtray_gas_station_sushi" + tastes = list("imitation space carp" = 2, "stale rice" = 2, "laziness" = 1) + foodtypes = GRAIN | SEAFOOD + +/obj/item/food/vendor_tray_meal/beef_rice + name = "\improper Meinkosu: Beef and Fried Rice" + desc = "A few slices of seemingly grilled beef, paired with a disproportionately large amount of rice." + icon_state = "foodtray_beef_n_rice" + tastes = list("cheap beef" = 1, "rice" = 3, "laziness" = 1) + foodtypes = GRAIN | MEAT + +/* +* Mothic Meals +*/ + +/obj/item/food/vendor_tray_meal/pesto_pizza + name = "\improper Main Course - Type M: Pesto Pizza" + desc = "A rectangular pizza with a suspiciously bright green pesto in place of the standard tomato sauce." + icon_state = "foodtray_pesto_pizza" + tastes = list("tomato?" = 2, "cheese?" = 2, "herbs" = 1, "laziness" = 1) + foodtypes = GRAIN | DAIRY | VEGETABLES + +/obj/item/food/vendor_tray_meal/baked_rice + name = "\improper Main Course - Type M: Baked Rice and Grilled Cheese" + desc = "Some sub-par looking fleet style rice, with a very grilled chunk of cheese." + icon_state = "foodtray_rice_n_grilled_cheese" + tastes = list("rice" = 2, "peppers" = 2, "charred cheese" = 2, "laziness" = 1) + foodtypes = GRAIN | DAIRY | VEGETABLES + +/obj/item/food/vendor_tray_meal/fueljack + name = "\improper Main Course - Type M: Fueljack's Tray" + desc = "A flat chunk of fueljack's lunch, seemingly missing most of the usual variety in ingredients." + icon_state = "foodtray_fuel_jacks_meal" + tastes = list("potato" = 2, "cabbage" = 2, "cheese?" = 2, "laziness" = 1) + foodtypes = DAIRY | VEGETABLES + +/* +* Tiziran Meals +*/ + +/obj/item/food/vendor_tray_meal/moonfish_nizaya + name = "\improper Tizira Imports: Moonfish and Nizaya" + desc = "An almost synthetic looking cut of moonfish, paired with an equal helping of nizaya pasta." + icon_state = "foodtray_moonfish_nizaya" + tastes = list("fish?" = 2, "cheap noodles" = 2, "laziness" = 1) + foodtypes = VEGETABLES | NUTS | SEAFOOD + +/obj/item/food/vendor_tray_meal/emperor_roll + name = "\improper Tizira Imports: Emperor Roll" + desc = "A pretty sad looking emperor roll, if you can even call it that; it seems caviar wasn't in the budget." + icon_state = "foodtray_emperor_roll" + tastes = list("bread" = 2, "cheese?" = 2, "liver?" = 2, "laziness" = 1) + foodtypes = VEGETABLES | NUTS | MEAT | GORE + +/obj/item/food/vendor_tray_meal/mushroom_fry + name = "\improper Tizira Imports: Mushroom Stirfry" + desc = "A mix of what was likely mushrooms too low quality to be used in making actual food, lightly fried and tossed in a plastic container together." + icon_state = "foodtray_shroom_fry" + tastes = list("mushroom" = 4, "becoming rich" = 1, "laziness" = 1) + foodtypes = VEGETABLES + +/* SIDES */ + +/obj/effect/spawner/random/vendor_meal_sides + name = "random side spawner" + desc = "I hope I get one that actually matches my meal." + icon_state = "loot" + +/* +* NT Sides +*/ + +/obj/effect/spawner/random/vendor_meal_sides/nt + name = "random nt side spawner" + +/obj/effect/spawner/random/vendor_meal_sides/nt/Initialize(mapload) + loot = list( + /obj/item/food/vendor_tray_meal/side, + /obj/item/food/vendor_tray_meal/side/crackers_and_jam, + /obj/item/food/vendor_tray_meal/side/crackers_and_cheese, + ) + . = ..() + +/obj/item/food/vendor_tray_meal/side + name = "\improper NT-Side: Flatbread and Peanut Butter" + desc = "A small stack of tough flatbread, and a small spread of peanut butter for each." + icon_state = "foodpack_nt" + trash_type = /obj/item/trash/empty_side_pack/nt + food_reagents = list(/datum/reagent/consumable/nutriment = 5) + tastes = list("tough bread" = 2, "peanut butter" = 2) + foodtypes = GRAIN + hot_and_steamy = FALSE + custom_price = PAYCHECK_LOWER * 2.5 + +/obj/item/food/vendor_tray_meal/side/crackers_and_jam + name = "\improper NT-Side: Flatbread and Berry Jelly" + desc = "A small stack of tough flatbread, and a small spread of nondescript berry jelly for each." + tastes = list("tough bread" = 2, "berries" = 2) + foodtypes = GRAIN | FRUIT + +/obj/item/food/vendor_tray_meal/side/crackers_and_cheese + name = "\improper NT-Side: Flatbread and Cheese Spread" + desc = "A small stack of tough flatbread, and a small spread of cheese for each." + tastes = list("tough bread" = 2, "cheese" = 2) + foodtypes = GRAIN | DAIRY + +/* +* Yangyu Sides +*/ + +/obj/effect/spawner/random/vendor_meal_sides/yangyu + name = "random yangyu side spawner" + +/obj/effect/spawner/random/vendor_meal_sides/yangyu/Initialize(mapload) + loot = list( + /obj/item/food/vendor_tray_meal/side/miso, + /obj/item/food/vendor_tray_meal/side/rice, + /obj/item/food/vendor_tray_meal/side/pickled_vegetables, + ) + . = ..() + +/obj/item/food/vendor_tray_meal/side/miso + name = "\improper Fukusai: Miso Soup" + desc = "This is quite literally just a plastic bag full of miso soup, opening it on any side other than the one indicated may result in spilled soup." + icon_state = "foodpack_yangyu" + trash_type = /obj/item/trash/empty_side_pack/yangyu + tastes = list("miso" = 2) + foodtypes = VEGETABLES + +/obj/item/food/vendor_tray_meal/side/rice + name = "\improper Fukusai: White Rice" + desc = "A bag stuffed full of white rice, in case your meal didn't come with enough to sate your needs." + icon_state = "foodpack_yangyu" + trash_type = /obj/item/trash/empty_side_pack/yangyu + tastes = list("old rice" = 2) + foodtypes = GRAIN + +/obj/item/food/vendor_tray_meal/side/pickled_vegetables + name = "\improper Fukusai: Pickled Vegetables" + desc = "Contains a small assortment of vegetables pickled in a vinegar-like solution." + icon_state = "foodpack_yangyu" + trash_type = /obj/item/trash/empty_side_pack/yangyu + tastes = list("vinegar" = 4) + foodtypes = VEGETABLES + +/* +* Mothic Sides +*/ + +/obj/effect/spawner/random/vendor_meal_sides/moth + name = "random mothic side spawner" + +/obj/effect/spawner/random/vendor_meal_sides/moth/Initialize(mapload) + loot = list( + /obj/item/food/vendor_tray_meal/side/moffin, + /obj/item/food/vendor_tray_meal/side/cornbread, + /obj/item/food/vendor_tray_meal/side/roasted_seeds, + ) + . = ..() + +/obj/item/food/vendor_tray_meal/side/moffin + name = "\improper Side Course - Type M: Moffin" + desc = "The result of taking a perfectly fine moffin, and flattening it into a more wafer-like form." + icon_state = "foodpack_moth" + trash_type = /obj/item/trash/empty_side_pack/moth + tastes = list("fabric?" = 2, "sugar" = 2) + foodtypes = CLOTH | GRAIN | SUGAR + +/obj/item/food/vendor_tray_meal/side/cornbread + name = "\improper Side Course - Type M: Cornbread" + desc = "A flattened cut of sweetened cornbread, goes well with butter." + icon_state = "foodpack_moth" + trash_type = /obj/item/trash/empty_side_pack/moth + tastes = list("cornbread" = 2, "sweetness" = 2) + foodtypes = GRAIN | SUGAR + +/obj/item/food/vendor_tray_meal/side/roasted_seeds + name = "\improper Side Course - Type M: Roasted Seeds" + desc = "A packet full of various oven roasted seeds." + icon_state = "foodpack_moth" + trash_type = /obj/item/trash/empty_side_pack/moth + tastes = list("seeds" = 2, "char" = 2) + foodtypes = NUTS + +/* +* Tiziran Sides +*/ + +/obj/effect/spawner/random/vendor_meal_sides/tizira + name = "random tiziran side spawner" + +/obj/effect/spawner/random/vendor_meal_sides/tizira/Initialize(mapload) + loot = list( + /obj/item/food/vendor_tray_meal/side/root_crackers, + /obj/item/food/vendor_tray_meal/side/korta_brittle, + /obj/item/food/vendor_tray_meal/side/crispy_headcheese, + ) + . = ..() + +/obj/item/food/vendor_tray_meal/side/root_crackers + name = "\improper Tizira Imports: Rootbread Crackers and Pate" + desc = "A small stack of rootbread crackers, with a small spread of meat pate for each." + icon_state = "foodpack_tizira" + trash_type = /obj/item/trash/empty_side_pack/tizira + tastes = list("tough rootbread" = 2, "pate" = 2) + foodtypes = VEGETABLES | NUTS | MEAT + +/obj/item/food/vendor_tray_meal/side/korta_brittle + name = "\improper Tizira Imports: Korta Brittle" + desc = "A perfectly rectangular portion of unsweetened korta brittle." + icon_state = "foodpack_tizira" + trash_type = /obj/item/trash/empty_side_pack/tizira + tastes = list("peppery heat" = 2) + foodtypes = NUTS + +/obj/item/food/vendor_tray_meal/side/crispy_headcheese + name = "\improper Tizira Imports: Crisped Headcheese" + desc = "A processed looking block of breaded headcheese." + icon_state = "foodpack_tizira" + trash_type = /obj/item/trash/empty_side_pack/tizira + tastes = list("cheese" = 1, "oil" = 1) + foodtypes = MEAT | VEGETABLES | NUTS | GORE diff --git a/modular_doppler/vending_machines/code/vendor_snacks.dm b/modular_doppler/vending_machines/code/vendor_snacks.dm new file mode 100644 index 0000000000000..0b5fd481f2b4d --- /dev/null +++ b/modular_doppler/vending_machines/code/vendor_snacks.dm @@ -0,0 +1,302 @@ +// Snacks and drinks for the 'snacks' tab of vendors + +/obj/item/food/vendor_snacks + name = "\improper God's Strongest Snacks" + desc = "You best hope you aren't a sinner. (You should never see this item please report it)" + icon = 'modular_doppler/vending_machines/icons/imported_quick_foods.dmi' + icon_state = "foodpack_generic" + trash_type = /obj/item/trash/vendor_trash + bite_consumption = 10 + food_reagents = list(/datum/reagent/consumable/nutriment = INFINITY) + junkiness = 10 + custom_price = PAYCHECK_LOWER * INFINITY + tastes = list("the unmatched power of the sun" = 10) + foodtypes = JUNKFOOD | CLOTH | GORE | NUTS | FRIED | FRUIT + w_class = WEIGHT_CLASS_SMALL + +/obj/item/trash/vendor_trash + name = "\improper God's Weakest Snacks" + desc = "The leftovers of what was likely a great snack in a past time." + icon = 'modular_doppler/vending_machines/icons/imported_quick_foods.dmi' + icon_state = "foodpack_generic_trash" + custom_materials = list( + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + ) + +/* +* Yangyu Snacks +*/ + +/obj/item/reagent_containers/cup/glass/dry_ramen/prepared + name = "cup ramen" + desc = "This one even comes with water, amazing!" + list_reagents = list(/datum/reagent/consumable/hot_ramen = 15, /datum/reagent/consumable/salt = 3) + +/obj/item/reagent_containers/cup/glass/dry_ramen/prepared/hell + name = "spicy cup ramen" + desc = "This one comes with water, AND a security checkpoint's worth of capsaicin!" + list_reagents = list(/datum/reagent/consumable/hell_ramen = 15, /datum/reagent/consumable/salt = 3) + +/obj/item/food/vendor_snacks/rice_crackers + name = "rice crackers" + desc = "Despite most of the package being clear, you will never truly know what flavor these are until you eat them." + icon_state = "rice_cracka" + trash_type = /obj/item/trash/vendor_trash/rice_crackers + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/rice = 2) + tastes = list("incomprehensible flavoring" = 1, "rice cracker" = 2) + foodtypes = JUNKFOOD | GRAIN + custom_price = PAYCHECK_LOWER * 0.8 + +/obj/item/food/vendor_snacks/rice_crackers/make_leave_trash() + AddElement(/datum/element/food_trash, trash_type, FOOD_TRASH_POPABLE) + +/obj/item/trash/vendor_trash/rice_crackers + name = "empty rice crackers bag" + desc = "You never did find out what flavor that was supposed to be, did you?" + icon_state = "rice_cracka_trash" + +/obj/item/food/vendor_snacks/mochi_ice_cream + name = "mochi ice cream balls - vanilla" + desc = "A six pack of mochi ice cream, which is to say vanilla icecream surrounded by mochi. Comes with small plastic skewer for consumption." + icon_state = "mochi_ice" + trash_type = /obj/item/trash/vendor_trash/mochi_ice_cream + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/ice = 3) + tastes = list("rice cake" = 2, "vanilla" = 2) + foodtypes = JUNKFOOD | DAIRY | GRAIN + custom_price = PAYCHECK_LOWER + +/obj/item/food/vendor_snacks/mochi_ice_cream/matcha + name = "mochi ice cream balls - matcha" + desc = "A six pack of mochi ice cream - or, more specifically, matcha icecream surrounded by mochi. Comes with small plastic skewer for consumption." + icon_state = "mochi_ice_green" + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/tea = 2) + tastes = list("rice cake" = 1, "bitter matcha" = 2) + custom_price = PAYCHECK_LOWER * 1.2 + +/obj/item/food/vendor_snacks/mochi_ice_cream/matcha/examine_more(mob/user) + . = ..() + . += span_notice("A small label on the container specifies that this icecream is made using only culinary grade matcha grown outside of the Sol system.") + return . + +/obj/item/trash/vendor_trash/mochi_ice_cream + name = "empty mochi ice cream tray" + desc = "Somehow, that tiny plastic skewer it came with has gone missing." + icon_state = "mochi_ice_trash" + +/obj/item/reagent_containers/cup/glass/waterbottle/tea + name = "bottle of tea" + desc = "A bottle of tea brought to you in a convenient plastic bottle." + icon = 'modular_doppler/vending_machines/icons/imported_quick_foods.dmi' + icon_state = "tea_bottle" + list_reagents = list(/datum/reagent/consumable/tea = 40) + cap_icon_state = "bottle_cap_tea" + flip_chance = 5 + custom_price = PAYCHECK_LOWER * 1.2 + fill_icon_state = null + +/obj/item/reagent_containers/cup/glass/waterbottle/tea/astra + name = "bottle of tea astra" + desc = "A bottle of tea astra, known for the rather unusual tastes the leaf is known to give when brewed." + icon_state = "tea_bottle_blue" + list_reagents = list( + /datum/reagent/consumable/tea = 25, + /datum/reagent/medicine/salglu_solution = 10, + /datum/reagent/consumable/nutriment/vitamin = 5, + ) + custom_price = PAYCHECK_LOWER * 2 + +/obj/item/reagent_containers/cup/glass/waterbottle/tea/strawberry + name = "bottle of strawberry tea" + desc = "A bottle of strawberry flavored tea; does not contain any actual strawberries." + icon_state = "tea_bottle_pink" + list_reagents = list(/datum/reagent/consumable/pinktea = 40) + custom_price = PAYCHECK_LOWER * 2 + +/obj/item/reagent_containers/cup/glass/waterbottle/tea/nip + name = "bottle of catnip tea" + desc = "A bottle of catnip tea, required to be at or under a 50% concentration by the SFDA for safety purposes." + icon_state = "tea_bottle_pink" + list_reagents = list( + /datum/reagent/consumable/catnip_tea = 20, + /datum/reagent/consumable/pinkmilk = 20, + ) + custom_price = PAYCHECK_LOWER * 2.5 + +/* +* Mothic Snacks +*/ + +/obj/item/food/vendor_snacks/mothmallow + name = "mothmallow" + desc = "A vacuum sealed bag containing a pretty crushed looking mothmallow, someone save him!" + icon_state = "mothmallow" + trash_type = /obj/item/trash/vendor_trash/mothmallow + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/sugar = 4) + tastes = list("vanilla" = 1, "cotton" = 1, "chocolate" = 1) + foodtypes = VEGETABLES | SUGAR + custom_price = PAYCHECK_LOWER + +/obj/item/food/vendor_snacks/mothmallow/make_leave_trash() + AddElement(/datum/element/food_trash, trash_type, FOOD_TRASH_POPABLE) + +/obj/item/trash/vendor_trash/mothmallow + name = "empty mothmallow bag" + desc = "Finally he is free." + icon_state = "mothmallow_trash" + +/obj/item/food/vendor_snacks/moth_bag + name = "engine fodder" + desc = "A vacuum sealed bag containing a small portion of colorful engine fodder." + icon_state = "fodder" + trash_type = /obj/item/trash/vendor_trash/moth_bag + food_reagents = list(/datum/reagent/consumable/sugar = 3, /datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/salt = 2) + tastes = list("seeds" = 1, "nuts" = 1, "chocolate" = 1, "salt" = 1, "popcorn" = 1, "potato" = 1) + foodtypes = GRAIN | NUTS | VEGETABLES | SUGAR + custom_price = PAYCHECK_LOWER * 1.2 + +/obj/item/food/vendor_snacks/moth_bag/fuel_jack + name = "fueljack's snack" + desc = "A vacuum sealed bag containing a smaller than usual brick of fueljack's lunch, ultimately downgrading it to a fueljack's snack." + icon_state = "fuel_jack_snack" + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/protein = 1) + tastes = list("cabbage" = 1, "potato" = 1, "onion" = 1, "chili" = 1, "cheese" = 1) + foodtypes = DAIRY | VEGETABLES + custom_price = PAYCHECK_LOWER * 1.2 + +/obj/item/food/vendor_snacks/moth_bag/cheesecake + name = "chocolate cheesecake cube" + desc = "A vacuum sealed bag containing a small cube of a mothic style cheesecake, this one is covered in chocolate." + icon_state = "choco_cheese_cake" + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/sugar = 4) + tastes = list("cheesecake" = 1, "chocolate" = 1) + foodtypes = SUGAR | FRIED | DAIRY | GRAIN + custom_price = PAYCHECK_LOWER * 1.4 + +/obj/item/food/vendor_snacks/moth_bag/cheesecake/honey + name = "honey cheesecake cube" + desc = "A vacuum sealed bag containing a small cube of a mothic style cheesecake, this one is covered in honey." + icon_state = "honey_cheese_cake" + tastes = list("cheesecake" = 1, "honey" = 1) + foodtypes = SUGAR | FRIED | DAIRY | GRAIN + +/obj/item/trash/vendor_trash/moth_bag + name = "empty mothic snack bag" + desc = "The clear plastic reveals that this no longer holds tasty treats for your winged friends." + icon_state = "moth_bag_trash" + +/obj/item/reagent_containers/cup/soda_cans/doppler/lemonade + name = "\improper Gyárhajó 1023: Lemonade" + desc = "A can of lemonade, for those who are into that kind of thing, or just have no choice." + icon_state = "lemonade" + list_reagents = list(/datum/reagent/consumable/lemonade = 30) + drink_type = FRUIT + +/obj/item/reagent_containers/cup/soda_cans/doppler/lemonade/examine_more(mob/user) + . = ..() + . += span_notice("Markings on the can indicate this one was made on factory ship 1023 of the Grand Nomad Fleet.") + return . + +/obj/item/reagent_containers/cup/soda_cans/doppler/navy_rum + name = "\improper Gyárhajó 1506: Navy Rum" + desc = "A can of navy rum brewed up and imported from a detachment of the nomad fleet, or so the can says." + icon_state = "navy_rum" + list_reagents = list(/datum/reagent/consumable/ethanol/navy_rum = 30) + drink_type = ALCOHOL + +/obj/item/reagent_containers/cup/soda_cans/doppler/navy_rum/examine_more(mob/user) + . = ..() + . += span_notice("Markings on the can indicate this one was made on factory ship 1506 of the Grand Nomad Fleet.") + return . + +/obj/item/reagent_containers/cup/soda_cans/doppler/soda_water_moth + name = "\improper Gyárhajó 1023: Soda Water" + desc = "A can of soda water. Why not make a rum and soda? Now that you think of it, maybe not." + icon_state = "soda_water" + list_reagents = list(/datum/reagent/consumable/sodawater = 30) + drink_type = SUGAR + +/obj/item/reagent_containers/cup/soda_cans/doppler/soda_water_moth/examine_more(mob/user) + . = ..() + . += span_notice("Markings on the can indicate this one was made on factory ship 1023 of the Grand Nomad Fleet.") + return . + +/obj/item/reagent_containers/cup/soda_cans/doppler/ginger_beer + name = "\improper Gyárhajó 1023: Ginger Beer" + desc = "A can of ginger beer, don't let the beer part mislead you, this is entirely non-alcoholic." + icon_state = "gingie_beer" + list_reagents = list(/datum/reagent/consumable/sol_dry = 30) + drink_type = SUGAR + +/obj/item/reagent_containers/cup/soda_cans/doppler/ginger_beer/examine_more(mob/user) + . = ..() + . += span_notice("Markings on the can indicate this one was made on factory ship 1023 of the Grand Nomad Fleet.") + return . + +/* +* Tiziran Snacks +*/ + +/obj/item/food/vendor_snacks/lizard_bag + name = "candied mushroom" + desc = "An odd treat of the lizard empire, a mushroom dipped in caramel; unfortunately, it seems to have been bagged before the caramel fully hardened." + icon_state = "candied_shroom" + trash_type = /obj/item/trash/vendor_trash/lizard_bag + food_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/caramel = 2) + tastes = list("savouriness" = 1, "sweetness" = 1) + foodtypes = SUGAR | VEGETABLES + custom_price = PAYCHECK_LOWER * 1.4 //Tiziran imports are a bit more expensive overall + +/obj/item/food/vendor_snacks/lizard_bag/make_leave_trash() + AddElement(/datum/element/food_trash, trash_type, FOOD_TRASH_POPABLE) + +/obj/item/food/vendor_snacks/lizard_bag/moon_jerky + name = "moonfish jerky" + desc = "A fish jerky, made from what you can only hope is moonfish. It also seems to taste subtly of barbecue" + icon_state = "moon_jerky" + food_reagents = list(/datum/reagent/consumable/nutriment/protein = 2, /datum/reagent/consumable/bbqsauce = 2) + tastes = list("fish" = 1, "smokey sauce" = 1) + foodtypes = MEAT + custom_price = PAYCHECK_LOWER * 1.6 + +/obj/item/trash/vendor_trash/lizard_bag + name = "empty tiziran snack bag" + desc = "All that money importing tiziran snacks just to end at this?" + icon_state = "tizira_bag_trash" + +/obj/item/food/vendor_snacks/lizard_box + name = "tiziran dumplings" + desc = "A three pack of tiziran style dumplings, not actually stuffed with anything." + icon_state = "dumpling" + trash_type = /obj/item/trash/vendor_trash/lizard_box + food_reagents = list(/datum/reagent/consumable/nutriment = 3) + tastes = list("potato" = 1, "earthy heat" = 1) + foodtypes = VEGETABLES | NUTS + custom_price = PAYCHECK_LOWER * 1.6 + +/obj/item/food/vendor_snacks/lizard_box/sweet_roll + name = "honey roll" + desc = "Definitely don't let the guards find out that someone stole your last one." + icon_state = "sweet_roll" + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/honey = 2) + tastes = list("bread" = 1, "honey" = 1, "fruit" = 1) + foodtypes = VEGETABLES | NUTS | FRUIT + custom_price = PAYCHECK_LOWER *1.8 + +/obj/item/trash/vendor_trash/lizard_box + name = "empty tiziran snack box" + desc = "Tizira, contributing to the space plastic crisis since 2530." + icon_state = "tizira_box_trash" + +/obj/item/reagent_containers/cup/glass/waterbottle/tea/mushroom + name = "bottle of mushroom tea" + desc = "A bottle of somewhat bitter mushroom tea, a favorite of the Tiziran empire." + icon_state = "tea_bottle_grey" + list_reagents = list(/datum/reagent/consumable/mushroom_tea = 40) + custom_price = PAYCHECK_LOWER * 2 + +/obj/item/reagent_containers/cup/soda_cans/doppler/kortara + name = "kortara" + desc = "A can of kortara, alcohol brewed from korta seeds, which gives it a unique peppery spice flavor." + icon_state = "kortara" + list_reagents = list(/datum/reagent/consumable/ethanol/kortara = 30) + drink_type = ALCOHOL diff --git a/modular_doppler/vending_machines/code/vendors.dm b/modular_doppler/vending_machines/code/vendors.dm new file mode 100644 index 0000000000000..f5a4085f79a4c --- /dev/null +++ b/modular_doppler/vending_machines/code/vendors.dm @@ -0,0 +1,229 @@ +/obj/effect/spawner/random/vending/snackvend + loot = list( + /obj/machinery/vending/imported/nt, + /obj/machinery/vending/imported/yangyu, + /obj/machinery/vending/imported/mothic, + /obj/machinery/vending/imported/tiziran, +// /obj/machinery/vending/deforest_medvend, + ) + +/obj/effect/spawner/random/vending/colavend //These can serve both snacks AND drinks so it's kinda both of them? + loot = list( + /obj/machinery/vending/imported/nt, + /obj/machinery/vending/imported/yangyu, + /obj/machinery/vending/imported/mothic, + /obj/machinery/vending/imported/tiziran, +// /obj/machinery/vending/deforest_medvend, + ) + +/datum/supply_pack/vending/imported/fill(obj/structure/closet/crate/target_crate) + . = ..() + for(var/obj/vendor_refill as anything in subtypesof(/obj/item/vending_refill/snack/imported)) + new vendor_refill(target_crate) + +/obj/machinery/vending/imported + icon = 'modular_doppler/vending_machines/icons/imported_vendors.dmi' + icon_state = null + panel_type = "panel15" + default_price = PAYCHECK_CREW * 0.5 + extra_price = PAYCHECK_COMMAND + payment_department = NO_FREEBIES + +/obj/machinery/vending/imported/nt + name = "NT Sustenance Supplier" + desc = "A vending machine serving up only the finest of human college student food." + icon_state = "nt_food" + light_mask = "nt_food-light-mask" + light_color = LIGHT_COLOR_LIGHT_CYAN + product_slogans = "Caution, contents may be selling hot!;Look at these low prices!;Hungry? Me too- Wait, no, you didn't hear that!" + product_categories = list( + list( + "name" = "Snacks", + "icon" = "cookie", + "products" = list( + /obj/item/food/peanuts/random = 6, + /obj/item/food/cnds/random = 6, + /obj/item/food/pistachios = 6, + /obj/item/food/cornchips/random = 6, + /obj/item/food/sosjerky = 6, + /obj/item/reagent_containers/cup/soda_cans/cola = 6, + /obj/item/reagent_containers/cup/soda_cans/lemon_lime = 6, + /obj/item/reagent_containers/cup/soda_cans/starkist = 6, + /obj/item/reagent_containers/cup/soda_cans/pwr_game = 6, + ), + ), + list( + "name" = "Meals", + "icon" = "pizza-slice", + "products" = list( + /obj/item/storage/box/foodpack/nt = 6, + /obj/item/storage/box/foodpack/nt/burger = 6, + /obj/item/storage/box/foodpack/nt/chicken_sammy = 6, + /obj/item/food/vendor_tray_meal/side = 6, + /obj/item/food/vendor_tray_meal/side/crackers_and_jam = 6, + /obj/item/food/vendor_tray_meal/side/crackers_and_cheese = 6, + ), + ), + ) + + refill_canister = /obj/item/vending_refill/snack/imported/nt + +/obj/item/vending_refill/snack/imported/nt + machine_name = "NT Sustenance Supplier" + +/obj/machinery/vending/imported/yangyu + name = "Fudobenda" + desc = "A vendor selling traditional Sol eastern foods of dubious quality." + icon_state = "yangyu_food" + light_mask = "yangyu_food-light-mask" + light_color = LIGHT_COLOR_FLARE + product_slogans = "Fresh farmed space carp from local space!;Imitation lobstrocity sushi choices availible!;Made with traditional recipes and care!" + product_categories = list( + list( + "name" = "Snacks", + "icon" = "cookie", + "products" = list( + /obj/item/reagent_containers/cup/glass/dry_ramen/prepared = 6, + /obj/item/reagent_containers/cup/glass/dry_ramen/prepared/hell = 6, + /obj/item/food/vendor_snacks/rice_crackers = 6, + /obj/item/food/vendor_snacks/mochi_ice_cream = 6, + /obj/item/food/vendor_snacks/mochi_ice_cream/matcha = 6, + /obj/item/reagent_containers/cup/glass/waterbottle/tea = 6, + /obj/item/reagent_containers/cup/glass/waterbottle/tea/astra = 6, + /obj/item/reagent_containers/cup/glass/waterbottle/tea/strawberry = 6, + /obj/item/reagent_containers/cup/glass/waterbottle/tea/nip = 6, + ), + ), + list( + "name" = "Meals", + "icon" = "pizza-slice", + "products" = list( + /obj/item/storage/box/foodpack/yangyu = 6, + /obj/item/storage/box/foodpack/yangyu/sushi = 6, + /obj/item/storage/box/foodpack/yangyu/beef_rice = 6, + /obj/item/food/vendor_tray_meal/side/miso = 6, + /obj/item/food/vendor_tray_meal/side/rice = 6, + /obj/item/food/vendor_tray_meal/side/pickled_vegetables = 6, + ), + ), + ) + + refill_canister = /obj/item/vending_refill/snack/imported/yangyu + initial_language_holder = /datum/language_holder/yangyu_vendor + +/datum/language_holder/yangyu_vendor + understood_languages = list( + /datum/language/yangyu = list(LANGUAGE_ATOM), + ) + spoken_languages = list( + /datum/language/yangyu = list(LANGUAGE_ATOM), + ) + +/obj/machinery/vending/imported/yangyu/examine_more(mob/user) + . = ..() + . += span_notice("Someone appears to have written \"Don't trust the sushi!\" in marker on the side of the vendor.") + return . + +/obj/item/vending_refill/snack/imported/yangyu + machine_name = "Fudobenda" + +/obj/machinery/vending/imported/mothic + name = "Nomad Fleet Ration Chit Exchange" + desc = "One of the Nomad Fleet's own ration vendors; in spite of the name engraved into it, it's been fitted to accept credits." + icon_state = "moth_food" + light_mask = "moth_food-light-mask" + light_color = LIGHT_COLOR_HALOGEN + product_slogans = "Support the fleet, conserve rations today!;Some options in reduced portion and cost!;Do your part to keep the fleet flying!" + product_categories = list( + list( + "name" = "Snacks", + "icon" = "cookie", + "products" = list( + /obj/item/food/vendor_snacks/mothmallow = 6, + /obj/item/food/vendor_snacks/moth_bag = 6, + /obj/item/food/vendor_snacks/moth_bag/fuel_jack = 6, + /obj/item/food/vendor_snacks/moth_bag/cheesecake = 6, + /obj/item/food/vendor_snacks/moth_bag/cheesecake/honey = 6, + /obj/item/reagent_containers/cup/soda_cans/doppler/lemonade = 6, + /obj/item/reagent_containers/cup/soda_cans/doppler/navy_rum = 6, + /obj/item/reagent_containers/cup/soda_cans/doppler/soda_water_moth = 6, + /obj/item/reagent_containers/cup/soda_cans/doppler/ginger_beer = 6, + ), + ), + list( + "name" = "Meals", + "icon" = "pizza-slice", + "products" = list( + /obj/item/storage/box/foodpack/moth = 6, + /obj/item/storage/box/foodpack/moth/baked_rice = 6, + /obj/item/storage/box/foodpack/moth/fuel_jack = 6, + /obj/item/food/vendor_tray_meal/side/moffin = 6, + /obj/item/food/vendor_tray_meal/side/cornbread = 6, + /obj/item/food/vendor_tray_meal/side/roasted_seeds = 6, + ), + ), + ) + + refill_canister = /obj/item/vending_refill/snack/imported/mothic + initial_language_holder = /datum/language_holder/moffic_vendor + +/datum/language_holder/moffic_vendor + understood_languages = list( + /datum/language/moffic = list(LANGUAGE_ATOM), + ) + spoken_languages = list( + /datum/language/moffic = list(LANGUAGE_ATOM), + ) + +/obj/item/vending_refill/snack/imported/mothic + machine_name = "Nomad Fleet Ration Chit Exchange" + +/obj/machinery/vending/imported/tiziran + name = "Tiziran Imported Delicacies" + desc = "A vendor serving a fine collection of what is very likely knock-offs of popular Tiziran brands." + icon_state = "tizira_food" + light_mask = "tizira_food-light-mask" + light_color = LIGHT_COLOR_FIRE + product_slogans = "Real imports from the capital itself, we promise!;Rare selections of salt water catch!;Moonfish glaze included with all meat options!" + product_categories = list( + list( + "name" = "Snacks", + "icon" = "cookie", + "products" = list( + /obj/item/food/chips/shrimp = 6, + /obj/item/food/vendor_snacks/lizard_bag = 6, + /obj/item/food/vendor_snacks/lizard_bag/moon_jerky = 6, + /obj/item/food/vendor_snacks/lizard_box = 6, + /obj/item/food/vendor_snacks/lizard_box/sweet_roll = 6, + /obj/item/reagent_containers/cup/glass/bottle/mushi_kombucha = 6, + /obj/item/reagent_containers/cup/glass/waterbottle/tea/mushroom = 6, + /obj/item/reagent_containers/cup/soda_cans/doppler/kortara = 6, + ), + ), + list( + "name" = "Meals", + "icon" = "pizza-slice", + "products" = list( + /obj/item/storage/box/foodpack/tizira = 6, + /obj/item/storage/box/foodpack/tizira/roll = 6, + /obj/item/storage/box/foodpack/tizira/stir_fry = 6, + /obj/item/food/vendor_tray_meal/side/root_crackers = 6, + /obj/item/food/vendor_tray_meal/side/korta_brittle = 6, + /obj/item/food/vendor_tray_meal/side/crispy_headcheese = 6, + ), + ), + ) + + refill_canister = /obj/item/vending_refill/snack/imported/tiziran + initial_language_holder = /datum/language_holder/draconic_vendor + +/datum/language_holder/draconic_vendor + understood_languages = list( + /datum/language/draconic = list(LANGUAGE_ATOM), + ) + spoken_languages = list( + /datum/language/draconic = list(LANGUAGE_ATOM), + ) + +/obj/item/vending_refill/snack/imported/tiziran + machine_name = "Tiziran Imported Delicacies" diff --git a/modular_doppler/vending_machines/icons/imported_quick_foods.dmi b/modular_doppler/vending_machines/icons/imported_quick_foods.dmi new file mode 100644 index 0000000000000..4249a5f4f0a48 Binary files /dev/null and b/modular_doppler/vending_machines/icons/imported_quick_foods.dmi differ diff --git a/modular_doppler/vending_machines/icons/imported_vendors.dmi b/modular_doppler/vending_machines/icons/imported_vendors.dmi new file mode 100644 index 0000000000000..d26e14e5a38ed Binary files /dev/null and b/modular_doppler/vending_machines/icons/imported_vendors.dmi differ diff --git a/modular_doppler/vending_machines/readme.md b/modular_doppler/vending_machines/readme.md new file mode 100644 index 0000000000000..b9f0bff08d00c --- /dev/null +++ b/modular_doppler/vending_machines/readme.md @@ -0,0 +1,26 @@ +## Title: ImportedVendors + +MODULE ID: CulturalVendors + +### Description: + +Adds random, imported food and drink vendors to the pool of snack vendors that can spawn across the maps + +### TG Proc Changes: + +- N/A + +### Defines: + +- N/A + +### Master file additions + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: +Paxilmaniac diff --git a/tgstation.dme b/tgstation.dme index 13158af3bf479..7dc16af00805f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6389,6 +6389,11 @@ #include "modular_doppler\modular_cosmetics\code\neck\collar.dm" #include "modular_doppler\modular_cosmetics\code\suits\jacket.dm" #include "modular_doppler\modular_cosmetics\GAGS\greyscale_configs_neck.dm" +#include "modular_doppler\modular_food_drinks_and_chems\chemistry_reagents.dm" +#include "modular_doppler\modular_food_drinks_and_chems\food_and_drinks\alcohol reagents.dm" +#include "modular_doppler\modular_food_drinks_and_chems\food_and_drinks\drink_reagents.dm" +#include "modular_doppler\modular_food_drinks_and_chems\food_and_drinks\drinks.dm" +#include "modular_doppler\modular_food_drinks_and_chems\food_and_drinks\drinks_recipes.dm" #include "modular_doppler\pixel_shift\living.dm" #include "modular_doppler\pixel_shift\living_movement.dm" #include "modular_doppler\pixel_shift\code\pixel_shift_component.dm" @@ -6396,6 +6401,10 @@ #include "modular_doppler\pixel_shift\code\pixel_shift_mob.dm" #include "modular_doppler\sprite_accessories\code\hair.dm" #include "modular_doppler\tableflip\tableflip.dm" +#include "modular_doppler\vending_machines\code\vendor_containers.dm" +#include "modular_doppler\vending_machines\code\vendor_food.dm" +#include "modular_doppler\vending_machines\code\vendor_snacks.dm" +#include "modular_doppler\vending_machines\code\vendors.dm" #include "modular_doppler\wargaming\code\game_kit.dm" #include "modular_doppler\wargaming\code\holograms.dm" #include "modular_doppler\wargaming\code\projectors.dm"