From 7905b640761cd3d6aff60d5ff45509c5697d9750 Mon Sep 17 00:00:00 2001 From: variableundefined <40092670+variableundefined@users.noreply.github.com> Date: Wed, 31 Oct 2018 22:44:39 +0800 Subject: [PATCH 1/4] Port over fermentation barrel, minor refactor of reagent container, add in wine power etc. --- .../objects/items/weapons/storage/bags.dm | 2 +- code/modules/food_and_drinks/drinks/drinks.dm | 2 +- code/modules/hydroponics/fermenting_barrel.dm | 79 +++++++++++++ code/modules/hydroponics/grown.dm | 11 +- code/modules/hydroponics/grown/ambrosia.dm | 7 +- code/modules/hydroponics/grown/apple.dm | 3 + code/modules/hydroponics/grown/banana.dm | 4 + code/modules/hydroponics/grown/beans.dm | 4 +- code/modules/hydroponics/grown/berries.dm | 12 ++ code/modules/hydroponics/grown/cannabis.dm | 5 + code/modules/hydroponics/grown/cereals.dm | 4 + code/modules/hydroponics/grown/chili.dm | 3 + code/modules/hydroponics/grown/citrus.dm | 4 + .../hydroponics/grown/cocoa_vanilla.dm | 4 +- code/modules/hydroponics/grown/corn.dm | 2 + code/modules/hydroponics/grown/eggplant.dm | 4 +- code/modules/hydroponics/grown/flowers.dm | 3 + .../modules/hydroponics/grown/grass_carpet.dm | 2 + code/modules/hydroponics/grown/kudzu.dm | 1 + code/modules/hydroponics/grown/melon.dm | 3 + code/modules/hydroponics/grown/misc.dm | 4 + code/modules/hydroponics/grown/mushrooms.dm | 11 ++ code/modules/hydroponics/grown/onion.dm | 4 + code/modules/hydroponics/grown/pineapple.dm | 3 +- code/modules/hydroponics/grown/potato.dm | 2 + code/modules/hydroponics/grown/pumpkin.dm | 2 + code/modules/hydroponics/grown/random.dm | 8 +- code/modules/hydroponics/grown/root.dm | 4 + code/modules/hydroponics/grown/tea_coffee.dm | 2 + code/modules/hydroponics/grown/tobacco.dm | 5 +- code/modules/hydroponics/grown/tomato.dm | 5 + code/modules/mining/lavaland/ash_flora.dm | 32 +++--- .../reagents/chemistry/reagents/alcohol.dm | 104 ++++++++++++++++++ .../reagent_containers/glass_containers.dm | 3 +- icons/obj/objects.dmi | Bin 113670 -> 114714 bytes paradise.dme | 1 + 36 files changed, 320 insertions(+), 29 deletions(-) create mode 100644 code/modules/hydroponics/fermenting_barrel.dm diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 4d0de3bd09e..26309f885fa 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -168,7 +168,7 @@ max_combined_w_class = 100 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class max_w_class = WEIGHT_CLASS_NORMAL w_class = WEIGHT_CLASS_TINY - can_hold = list(/obj/item/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/grown,/obj/item/reagent_containers/food/snacks/ash_flora) + can_hold = list(/obj/item/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/grown,/obj/item/reagent_containers/food/snacks/grown/ash_flora) burn_state = FLAMMABLE /obj/item/storage/bag/plants/portaseeder diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 235b0b609f1..c481df1ca42 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -62,7 +62,7 @@ if(!proximity) return - if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it. + if(target.is_refillable() && is_drainable()) //Something like a glass. Player probably wants to transfer TO it. if(!reagents.total_volume) to_chat(user, " [src] is empty.") return FALSE diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm new file mode 100644 index 00000000000..ab9f9f82d3e --- /dev/null +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -0,0 +1,79 @@ +/obj/structure/fermenting_barrel + name = "wooden barrel" + desc = "A large wooden barrel. You can ferment fruits and such inside it, or just use it to hold liquid." + icon = 'icons/obj/objects.dmi' + icon_state = "barrel" + density = TRUE + anchored = FALSE + container_type = DRAINABLE | AMOUNT_VISIBLE + pressure_resistance = 2 * ONE_ATMOSPHERE + max_integrity = 300 + var/open = FALSE + var/speed_multiplier = 1 //How fast it distills. Defaults to 100% (1.0). Lower is better. + +/obj/structure/fermenting_barrel/Initialize() + create_reagents(300) //Bluespace beakers, but without the portability or efficiency in circuits. + . = ..() + +/obj/structure/fermenting_barrel/examine(mob/user) + . = ..() + to_chat(user, "It is currently [open ? "open, letting you pour liquids in." : "closed, letting you draw liquids from the tap."] ") + +/obj/structure/fermenting_barrel/proc/makeWine(obj/item/reagent_containers/food/snacks/grown/G) + if(G.reagents) + G.reagents.trans_to(src, G.reagents.total_volume) + var/amount = G.seed.potency / 4 + if(G.distill_reagent) + reagents.add_reagent(G.distill_reagent, amount) + else + var/data = list() + data["names"] = list("[initial(G.name)]" = 1) + data["color"] = G.filling_color + data["alcohol_perc"] = G.wine_power + if(G.wine_flavor) + data["tastes"] = list(G.wine_flavor = 1) + // else // Stub - Will implement when we port over tg's better taste system - I'd rather get the barrel in first. + // data["tastes"] = list(G.tastes[1] = 1) + reagents.add_reagent("fruit_wine", amount, data) + qdel(G) + playsound(src, 'sound/effects/bubbles.ogg', 50, TRUE) + +/obj/structure/fermenting_barrel/attackby(obj/item/I, mob/user, params) + var/obj/item/reagent_containers/food/snacks/grown/G = I + if(istype(G)) + if(!G.can_distill) + to_chat(user, "You can't distill this into anything...") + return FALSE + else if(!user.drop_item()) + to_chat(user, "[G] is stuck to your hand!") + return FALSE + G.loc = src + to_chat(user, "You place [G] into [src] to start the fermentation process.") + addtimer(CALLBACK(src, .proc/makeWine, G), rand(80, 120) * speed_multiplier) + else if(I.is_refillable()) + return FALSE // To refill via afterattack proc + else + return ..() + +/obj/structure/fermenting_barrel/attack_hand(mob/user) + open = !open + if(open) + container_type = REFILLABLE | AMOUNT_VISIBLE + to_chat(user, "You open [src], letting you fill it.") + else + container_type = DRAINABLE | AMOUNT_VISIBLE + to_chat(user, "You close [src], letting you draw from its tap.") + update_icon() + +/obj/structure/fermenting_barrel/update_icon() + if(open) + icon_state = "barrel_open" + else + icon_state = "barrel" + +/datum/crafting_recipe/fermenting_barrel + name = "Wooden Barrel" + result = /obj/structure/fermenting_barrel + reqs = list(/obj/item/stack/sheet/wood = 30) + time = 50 + category = CAT_PRIMAL diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 772e9f5d856..2e0feaecea7 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -8,12 +8,13 @@ icon = 'icons/obj/hydroponics/harvest.dmi' var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item. var/plantname = "" - var/bitesize_mod = 0 + var/bitesize_mod = 0 // If set, bitesize = 1 + round(reagents.total_volume / bitesize_mod) var/splat_type = /obj/effect/decal/cleanable/plant_smudge - // If set, bitesize = 1 + round(reagents.total_volume / bitesize_mod) - dried_type = -1 - // Saves us from having to define each stupid grown's dried_type as itself. - // If you don't want a plant to be driable (watermelons) set this to null in the time definition. + var/can_distill = TRUE //If FALSE, this object cannot be distilled into an alcohol. + var/distill_reagent //If NULL and this object can be distilled, it uses a generic fruit_wine reagent and adjusts its variables. + var/wine_flavor //If NULL, this is automatically set to the fruit's flavor. Determines the flavor of the wine if distill_reagent is NULL. + var/wine_power = 0.1 //Determines the boozepwr of the wine if distill_reagent is NULL. Uses 0.1 - 1.2 not tg's boozepower (divide by 100) else you'll end up with 1000% proof alcohol! + dried_type = -1 // Saves us from having to define each stupid grown's dried_type as itself. If you don't want a plant to be driable (watermelons) set this to null in the time definition. burn_state = FLAMMABLE origin_tech = "biotech=1" diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm index d6942d6a7f6..47b2975ffa8 100644 --- a/code/modules/hydroponics/grown/ambrosia.dm +++ b/code/modules/hydroponics/grown/ambrosia.dm @@ -30,6 +30,7 @@ name = "ambrosia vulgaris branch" desc = "This is a plant containing various healing chemicals." origin_tech = "biotech=2" + wine_power = 0.2 // Ambrosia Deus /obj/item/seeds/ambrosia/deus @@ -50,6 +51,7 @@ icon_state = "ambrosiadeus" filling_color = "#008B8B" origin_tech = "biotech=4;materials=3" + wine_power = 0.5 //Ambrosia Gaia /obj/item/seeds/ambrosia/gaia @@ -74,6 +76,8 @@ origin_tech = "biotech=6;materials=5" light_range = 3 seed = /obj/item/seeds/ambrosia/gaia + wine_power = 0.7 + wine_flavor = "the earthmothert's blessing" // Ambrosia Cruciatus /obj/item/seeds/ambrosia/cruciatus @@ -83,4 +87,5 @@ reagents_add = list("thc" = 0.15, "kelotane" = 0.15, "bicaridine" = 0.1, "bath_salts" = 0.20, "plantmatter" = 0.05) /obj/item/reagent_containers/food/snacks/grown/ambrosia/cruciatus - seed = /obj/item/seeds/ambrosia/cruciatus \ No newline at end of file + seed = /obj/item/seeds/ambrosia/cruciatus + wine_power = 0.7 \ No newline at end of file diff --git a/code/modules/hydroponics/grown/apple.dm b/code/modules/hydroponics/grown/apple.dm index 64c7c0381a9..67948c4beb9 100644 --- a/code/modules/hydroponics/grown/apple.dm +++ b/code/modules/hydroponics/grown/apple.dm @@ -23,6 +23,7 @@ icon_state = "apple" filling_color = "#FF4500" bitesize = 100 // Always eat the apple in one bite + distill_reagent = "hcider" // Posioned Apple /obj/item/seeds/apple/poisoned @@ -55,3 +56,5 @@ icon_state = "goldapple" filling_color = "#FFD700" origin_tech = "biotech=4;materials=5" + distill_reagent = null + wine_power = 0.5 diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm index 6874038a7bf..4515b3ad75f 100644 --- a/code/modules/hydroponics/grown/banana.dm +++ b/code/modules/hydroponics/grown/banana.dm @@ -23,6 +23,7 @@ trash = /obj/item/grown/bananapeel filling_color = "#FFFF00" bitesize = 5 + distill_reagent = "bananahonk" /obj/item/reagent_containers/food/snacks/grown/banana/suicide_act(mob/user) user.visible_message("[user] is aiming the [name] at [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide.") @@ -74,6 +75,7 @@ icon_state = "mimana" trash = /obj/item/grown/bananapeel/mimanapeel filling_color = "#FFFFEE" + distill_reagent = "silencer" /obj/item/grown/bananapeel/mimanapeel seed = /obj/item/seeds/banana/mime @@ -102,6 +104,8 @@ trash = /obj/item/grown/bananapeel/bluespace filling_color = "#0000FF" origin_tech = "biotech=3;bluespace=5" + wine_power = 0.6 + wine_flavor = "slippery hypercubes" /obj/item/grown/bananapeel/bluespace seed = /obj/item/seeds/banana/bluespace diff --git a/code/modules/hydroponics/grown/beans.dm b/code/modules/hydroponics/grown/beans.dm index 24ddf1dbbba..fa73e7cd45f 100644 --- a/code/modules/hydroponics/grown/beans.dm +++ b/code/modules/hydroponics/grown/beans.dm @@ -25,6 +25,7 @@ icon_state = "soybeans" filling_color = "#F0E68C" bitesize_mod = 2 + wine_power = 20 // Koibean /obj/item/seeds/soya/koi @@ -45,4 +46,5 @@ desc = "Something about these seems fishy." icon_state = "koibeans" filling_color = "#F0E68C" - bitesize_mod = 2 \ No newline at end of file + bitesize_mod = 2 + wine_power = 40 \ No newline at end of file diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index 155566ebd10..8e740719fbf 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -25,6 +25,7 @@ gender = PLURAL filling_color = "#FF00FF" bitesize_mod = 2 + distill_reagent = "gin" // Poison Berries /obj/item/seeds/berry/poison @@ -44,6 +45,8 @@ desc = "Taste so good, you could die!" icon_state = "poisonberrypile" filling_color = "#C71585" + distill_reagent = null + wine_power = 0.35 // Death Berries /obj/item/seeds/berry/death @@ -65,6 +68,8 @@ desc = "Taste so good, you could die!" icon_state = "deathberrypile" filling_color = "#708090" + distill_reagent = null + wine_power = 0.5 // Glow Berries /obj/item/seeds/berry/glow @@ -89,6 +94,9 @@ filling_color = "#7CFC00" origin_tech = "plasmatech=6" light_color = "#006622" + distill_reagent = null + wine_power = 0.6 + wine_flavor = "warmth" // Cherries /obj/item/seeds/cherry @@ -118,6 +126,7 @@ gender = PLURAL filling_color = "#FF0000" bitesize_mod = 2 + wine_power = 0.3 // Blue Cherries /obj/item/seeds/cherry/blue @@ -138,6 +147,7 @@ icon_state = "bluecherry" filling_color = "#6495ED" bitesize_mod = 2 + wine_power = 0.5 // Grapes /obj/item/seeds/grape @@ -168,6 +178,7 @@ dried_type = /obj/item/reagent_containers/food/snacks/no_raisin filling_color = "#FF1493" bitesize_mod = 2 + distill_reagent = "wine" // Green Grapes /obj/item/seeds/grape/green @@ -186,3 +197,4 @@ name = "bunch of green grapes" icon_state = "greengrapes" filling_color = "#7FFF00" + distill_reagent = "cognac" diff --git a/code/modules/hydroponics/grown/cannabis.dm b/code/modules/hydroponics/grown/cannabis.dm index e82e72e83b0..ed05d7a6954 100644 --- a/code/modules/hydroponics/grown/cannabis.dm +++ b/code/modules/hydroponics/grown/cannabis.dm @@ -93,6 +93,7 @@ icon_state = "cannabis" filling_color = "#00FF00" bitesize_mod = 2 + wine_power = 0.2 /obj/item/reagent_containers/food/snacks/grown/cannabis/rainbow @@ -100,18 +101,21 @@ name = "rainbow cannabis leaf" desc = "Is it supposed to be glowing like that...?" icon_state = "megacannabis" + wine_power = 0.6 /obj/item/reagent_containers/food/snacks/grown/cannabis/death seed = /obj/item/seeds/cannabis/death name = "death cannabis leaf" desc = "Looks a bit dark. Oh well." icon_state = "blackcannabis" + wine_power = 0.4 /obj/item/reagent_containers/food/snacks/grown/cannabis/white seed = /obj/item/seeds/cannabis/white name = "white cannabis leaf" desc = "It feels smooth and nice to the touch." icon_state = "whitecannabis" + wine_power = 0.1 /obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate seed = /obj/item/seeds/cannabis/ultimate @@ -119,3 +123,4 @@ desc = "You feel dizzy looking at it. What the fuck?" icon_state = "ocannabis" volume = 420 + wine_power = 0.9 diff --git a/code/modules/hydroponics/grown/cereals.dm b/code/modules/hydroponics/grown/cereals.dm index 91b6cd0a14c..e864687a551 100644 --- a/code/modules/hydroponics/grown/cereals.dm +++ b/code/modules/hydroponics/grown/cereals.dm @@ -21,6 +21,7 @@ icon_state = "wheat" filling_color = "#F0E68C" bitesize_mod = 2 + distill_reagent = "beer" // Oat /obj/item/seeds/wheat/oat @@ -40,6 +41,7 @@ icon_state = "oat" filling_color = "#556B2F" bitesize_mod = 2 + distill_reagent = "ale" // Rice /obj/item/seeds/wheat/rice @@ -60,6 +62,7 @@ icon_state = "rice" filling_color = "#FAFAD2" bitesize_mod = 2 + distill_reagent = "sake" //Meatwheat - grows into synthetic meat /obj/item/seeds/wheat/meat @@ -80,6 +83,7 @@ filling_color = rgb(150, 0, 0) bitesize_mod = 2 seed = /obj/item/seeds/wheat/meat + can_distill = FALSE /obj/item/reagent_containers/food/snacks/grown/meatwheat/attack_self(mob/living/user) user.visible_message("[user] crushes [src] into meat.", "You crush [src] into something that resembles meat.") diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm index f8bf515ce6b..5f4621eff16 100644 --- a/code/modules/hydroponics/grown/chili.dm +++ b/code/modules/hydroponics/grown/chili.dm @@ -25,6 +25,7 @@ icon_state = "chilipepper" filling_color = "#FF0000" bitesize_mod = 2 + wine_power = 0.2 // Ice Chili /obj/item/seeds/chili/ice @@ -49,6 +50,7 @@ filling_color = "#0000CD" bitesize_mod = 2 origin_tech = "biotech=4" + wine_power = 0.3 // Ghost Chili /obj/item/seeds/chili/ghost @@ -74,3 +76,4 @@ filling_color = "#F8F8FF" bitesize_mod = 4 origin_tech = "biotech=4;magnets=5" + wine_power = 0.5 diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index 86bc8082661..b6e4a36d164 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -5,6 +5,7 @@ desc = "It's so sour, your face will twist." icon_state = "lime" bitesize_mod = 2 + wine_power = 0.3 // Lime /obj/item/seeds/lime @@ -29,6 +30,7 @@ desc = "It's so sour, your face will twist." icon_state = "lime" filling_color = "#00FF00" + distill_reagent = "triple_sec" // Orange /obj/item/seeds/orange @@ -104,6 +106,8 @@ desc = "Made for burning houses down." icon_state = "firelemon" bitesize_mod = 2 + wine_power = 0.7 + wine_flavor = "fire" /obj/item/reagent_containers/food/snacks/grown/firelemon/attack_self(mob/living/user) var/area/A = get_area(user) diff --git a/code/modules/hydroponics/grown/cocoa_vanilla.dm b/code/modules/hydroponics/grown/cocoa_vanilla.dm index 0ca061af745..745aa006498 100644 --- a/code/modules/hydroponics/grown/cocoa_vanilla.dm +++ b/code/modules/hydroponics/grown/cocoa_vanilla.dm @@ -25,6 +25,7 @@ icon_state = "cocoapod" filling_color = "#FFD700" bitesize_mod = 2 + distill_reagent = "creme_de_cacao" // Vanilla Pod /obj/item/seeds/cocoapod/vanillapod @@ -43,4 +44,5 @@ name = "vanilla pod" desc = "Fattening... Mmmmm... vanilla." icon_state = "vanillapod" - filling_color = "#FFD700" \ No newline at end of file + filling_color = "#FFD700" + distill_reagent = "vanilla" //Takes longer, but you can get even more vanilla from it. \ No newline at end of file diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm index 693818c9537..dca121d1acb 100644 --- a/code/modules/hydroponics/grown/corn.dm +++ b/code/modules/hydroponics/grown/corn.dm @@ -24,6 +24,8 @@ filling_color = "#FFFF00" trash = /obj/item/grown/corncob bitesize_mod = 2 + distill_reagent = "whiskey" + wine_power = 0.4 /obj/item/grown/corncob name = "corn cob" diff --git a/code/modules/hydroponics/grown/eggplant.dm b/code/modules/hydroponics/grown/eggplant.dm index d9a243eab6f..b9244bfd3ec 100644 --- a/code/modules/hydroponics/grown/eggplant.dm +++ b/code/modules/hydroponics/grown/eggplant.dm @@ -22,6 +22,7 @@ icon_state = "eggplant" filling_color = "#800080" bitesize_mod = 2 + wine_power = 0.2 // Egg-Plant /obj/item/seeds/eggplant/eggy @@ -41,4 +42,5 @@ icon_state = "eggyplant" trash = /obj/item/reagent_containers/food/snacks/egg filling_color = "#F8F8FF" - bitesize_mod = 2 \ No newline at end of file + bitesize_mod = 2 + distill_reagent = "eggnog" \ No newline at end of file diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm index b8d88ebf0c9..adbb5f3152c 100644 --- a/code/modules/hydroponics/grown/flowers.dm +++ b/code/modules/hydroponics/grown/flowers.dm @@ -25,6 +25,7 @@ slot_flags = SLOT_HEAD filling_color = "#FF6347" bitesize_mod = 3 + distill_reagent = "vermouth" // Lily /obj/item/seeds/poppy/lily @@ -88,6 +89,7 @@ slot_flags = SLOT_HEAD filling_color = "#E6E6FA" bitesize_mod = 3 + distill_reagent = "vermouth" // Sunflower @@ -145,6 +147,7 @@ slot_flags = SLOT_HEAD filling_color = "#E6E6FA" bitesize_mod = 2 + distill_reagent = "absinthe" // Novaflower /obj/item/seeds/sunflower/novaflower diff --git a/code/modules/hydroponics/grown/grass_carpet.dm b/code/modules/hydroponics/grown/grass_carpet.dm index 5113a8454f3..c45899a310b 100644 --- a/code/modules/hydroponics/grown/grass_carpet.dm +++ b/code/modules/hydroponics/grown/grass_carpet.dm @@ -27,6 +27,7 @@ bitesize_mod = 2 var/stacktype = /obj/item/stack/tile/grass var/tile_coefficient = 0.02 // 1/50 + wine_power = 0.15 /obj/item/reagent_containers/food/snacks/grown/grass/attack_self(mob/user) to_chat(user, "You prepare the astroturf.") @@ -65,3 +66,4 @@ desc = "The textile industry's dark secret." icon_state = "carpetclump" stacktype = /obj/item/stack/tile/carpet + can_distill = FALSE diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index ba67bf426fa..eea80e17e60 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -95,3 +95,4 @@ icon_state = "kudzupod" filling_color = "#6B8E23" bitesize_mod = 2 + wine_power = 0.2 diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm index be548339d39..ed7608e21b9 100644 --- a/code/modules/hydroponics/grown/melon.dm +++ b/code/modules/hydroponics/grown/melon.dm @@ -25,6 +25,7 @@ w_class = WEIGHT_CLASS_NORMAL filling_color = "#008000" bitesize_mod = 3 + wine_power = 0.4 // Holymelon /obj/item/seeds/watermelon/holy @@ -45,3 +46,5 @@ icon_state = "holymelon" filling_color = "#FFD700" dried_type = null + wine_power = 0.7 //Water to wine, baby. + wine_flavor = "divinity" diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm index df58b55c333..605f5082522 100644 --- a/code/modules/hydroponics/grown/misc.dm +++ b/code/modules/hydroponics/grown/misc.dm @@ -53,6 +53,7 @@ icon_state = "cabbage" filling_color = "#90EE90" bitesize_mod = 2 + wine_power = 0.2 // Sugarcane @@ -78,6 +79,7 @@ icon_state = "sugarcane" filling_color = "#FFD700" bitesize_mod = 2 + distill_reagent = "rum" // Gatfruit @@ -108,6 +110,7 @@ origin_tech = "combat=6" trash = /obj/item/gun/projectile/revolver bitesize_mod = 2 + wine_power = 0.9 //It burns going down, too. //Cherry Bombs /obj/item/seeds/cherry/bomb @@ -129,6 +132,7 @@ seed = /obj/item/seeds/cherry/bomb bitesize_mod = 2 volume = 125 //Gives enough room for the black powder at max potency + wine_power = 0.8 /obj/item/reagent_containers/food/snacks/grown/cherry_bomb/attack_self(mob/living/user) var/area/A = get_area(user) diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index 95ea83cd424..14c4b2a252a 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -1,6 +1,7 @@ /obj/item/reagent_containers/food/snacks/grown/mushroom name = "mushroom" bitesize_mod = 2 + wine_power = 0.4 // Reishi @@ -84,6 +85,7 @@ desc = "Amanita Virosa: Deadly poisonous basidiomycete fungus filled with alpha amanitin." icon_state = "angel" filling_color = "#C0C0C0" + wine_power = 0.6 // Liberty Cap @@ -109,6 +111,8 @@ desc = "Psilocybe Semilanceata: Liberate yourself!" icon_state = "libertycap" filling_color = "#DAA520" + wine_power = 0.8 + wine_flavor = "freedom" // Plump Helmet @@ -135,6 +139,7 @@ desc = "Plumus Hellmus: Plump, soft and s-so inviting~" icon_state = "plumphelmet" filling_color = "#9370DB" + distill_reagent = "manlydorf" // Walking Mushroom @@ -161,6 +166,7 @@ icon_state = "walkingmushroom" filling_color = "#9370DB" origin_tech = "biotech=4;programming=5" + can_distill = FALSE /obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user) if(istype(user.loc, /turf/space)) @@ -232,6 +238,7 @@ var/effect_path = /obj/structure/glowshroom origin_tech = "biotech=4;plasmatech=6" light_color = "#006622" + wine_power = 0.5 /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user) if(istype(user.loc, /turf/space)) @@ -280,6 +287,8 @@ effect_path = /obj/structure/glowshroom/glowcap origin_tech = "biotech=4;powerstorage=6;plasmatech=4" light_color = "#8E0300" + wine_power = 0.6 + wine_flavor = "warmth" // Fungus/Mold /obj/item/seeds/fungus @@ -326,3 +335,5 @@ icon_state = "shadowshroom" effect_path = /obj/structure/glowshroom/shadowshroom origin_tech = "biotech=4;plasmatech=4;magnets=4" + wine_power = 0.6 + wine_flavor = "strange coldness" diff --git a/code/modules/hydroponics/grown/onion.dm b/code/modules/hydroponics/grown/onion.dm index 93176799802..e39548d9e7c 100644 --- a/code/modules/hydroponics/grown/onion.dm +++ b/code/modules/hydroponics/grown/onion.dm @@ -25,6 +25,8 @@ bitesize_mod = 2 slice_path = /obj/item/reagent_containers/food/snacks/onion_slice slices_num = 2 + wine_power = 0.2 + wine_flavor = "pungentness" /obj/item/seeds/onion/red name = "pack of red onion seeds" @@ -43,6 +45,8 @@ icon_state = "onion_red" filling_color = "#C29ACF" slice_path = /obj/item/reagent_containers/food/snacks/onion_slice/red + wine_power = 0.6 + wine_flavor = "powerful pungentness" /obj/item/reagent_containers/food/snacks/onion_slice name = "onion slices" diff --git a/code/modules/hydroponics/grown/pineapple.dm b/code/modules/hydroponics/grown/pineapple.dm index 2e0825151c6..589f9456bc2 100644 --- a/code/modules/hydroponics/grown/pineapple.dm +++ b/code/modules/hydroponics/grown/pineapple.dm @@ -24,4 +24,5 @@ icon_state = "pineapple" filling_color = "#e5b437" w_class = WEIGHT_CLASS_NORMAL - bitesize_mod = 3 \ No newline at end of file + bitesize_mod = 3 + wine_power = 0.4 \ No newline at end of file diff --git a/code/modules/hydroponics/grown/potato.dm b/code/modules/hydroponics/grown/potato.dm index 2692ee8adf8..655cb6d69bd 100644 --- a/code/modules/hydroponics/grown/potato.dm +++ b/code/modules/hydroponics/grown/potato.dm @@ -25,6 +25,7 @@ icon_state = "potato" filling_color = "#E9967A" bitesize = 100 + distill_reagent = "vodka" /obj/item/reagent_containers/food/snacks/grown/potato/wedges @@ -33,6 +34,7 @@ icon_state = "potato_wedges" filling_color = "#E9967A" bitesize = 100 + distill_reagent = "sbiten" /obj/item/reagent_containers/food/snacks/grown/potato/attackby(obj/item/W, mob/user, params) diff --git a/code/modules/hydroponics/grown/pumpkin.dm b/code/modules/hydroponics/grown/pumpkin.dm index 9668379442d..f05a6847dc2 100644 --- a/code/modules/hydroponics/grown/pumpkin.dm +++ b/code/modules/hydroponics/grown/pumpkin.dm @@ -23,6 +23,7 @@ icon_state = "pumpkin" filling_color = "#FFA500" bitesize_mod = 2 + wine_power = 0.2 /obj/item/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/W as obj, mob/user as mob, params) if(is_sharp(W)) @@ -52,3 +53,4 @@ icon_state = "blumpkin" filling_color = "#87CEFA" bitesize_mod = 2 + wine_power = 0.5 diff --git a/code/modules/hydroponics/grown/random.dm b/code/modules/hydroponics/grown/random.dm index 734adae15be..f743989cb4a 100644 --- a/code/modules/hydroponics/grown/random.dm +++ b/code/modules/hydroponics/grown/random.dm @@ -26,4 +26,10 @@ name = "strange plant" desc = "What could this even be?" icon_state = "crunchy" - bitesize_mod = 2 \ No newline at end of file + bitesize_mod = 2 + +/obj/item/reagent_containers/food/snacks/grown/random/Initialize() + . = ..() + wine_power = rand(0.1,1.5) + if(prob(1)) + wine_power = 2.0 \ No newline at end of file diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm index 7f26176c675..35bb5ee195c 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -21,6 +21,7 @@ icon_state = "carrot" filling_color = "#FFA500" bitesize_mod = 2 + wine_power = 0.3 /obj/item/reagent_containers/food/snacks/grown/carrot/wedges name = "carrot wedges" @@ -59,6 +60,7 @@ desc = "Closely related to carrots." icon_state = "parsnip" bitesize_mod = 2 + wine_power = 0.35 // White-Beet @@ -84,6 +86,7 @@ icon_state = "whitebeet" filling_color = "#F4A460" bitesize_mod = 2 + wine_power = 0.4 // Red Beet /obj/item/seeds/redbeet @@ -107,3 +110,4 @@ desc = "You can't beat red beet." icon_state = "redbeet" bitesize_mod = 2 + wine_power = 0.6 diff --git a/code/modules/hydroponics/grown/tea_coffee.dm b/code/modules/hydroponics/grown/tea_coffee.dm index bd3b182c132..1139c03cad5 100644 --- a/code/modules/hydroponics/grown/tea_coffee.dm +++ b/code/modules/hydroponics/grown/tea_coffee.dm @@ -22,6 +22,7 @@ desc = "These aromatic tips of the tea plant can be dried to make tea." icon_state = "tea_aspera_leaves" filling_color = "#008000" + can_distill = FALSE // Tea Astra /obj/item/seeds/tea/astra @@ -67,6 +68,7 @@ icon_state = "coffee_arabica" filling_color = "#DC143C" bitesize_mod = 2 + distill_reagent = "kahlua" // Coffee Robusta /obj/item/seeds/coffee/robusta diff --git a/code/modules/hydroponics/grown/tobacco.dm b/code/modules/hydroponics/grown/tobacco.dm index de235280b02..95333bba31a 100644 --- a/code/modules/hydroponics/grown/tobacco.dm +++ b/code/modules/hydroponics/grown/tobacco.dm @@ -21,6 +21,7 @@ desc = "Dry them out to make some smokes." icon_state = "tobacco_leaves" filling_color = "#008000" + distill_reagent = "creme_de_menthe" //Menthol, I guess. // Space Tobacco /obj/item/seeds/tobacco/space @@ -38,4 +39,6 @@ seed = /obj/item/seeds/tobacco/space name = "space tobacco leaves" desc = "Dry them out to make some space-smokes." - icon_state = "stobacco_leaves" \ No newline at end of file + icon_state = "stobacco_leaves" + distill_reagent = null + wine_power = 0.5 \ No newline at end of file diff --git a/code/modules/hydroponics/grown/tomato.dm b/code/modules/hydroponics/grown/tomato.dm index 3adf57c4021..58bf18057ad 100644 --- a/code/modules/hydroponics/grown/tomato.dm +++ b/code/modules/hydroponics/grown/tomato.dm @@ -22,6 +22,7 @@ splat_type = /obj/effect/decal/cleanable/tomato_smudge filling_color = "#FF6347" bitesize_mod = 2 + distill_reagent = "enzyme" // Blood Tomato /obj/item/seeds/tomato/blood @@ -43,6 +44,7 @@ splat_type = /obj/effect/gibspawner/generic filling_color = "#FF0000" origin_tech = "biotech=5" + distill_reagent = "bloodymary" // Blue Tomato @@ -89,6 +91,8 @@ desc = "So lubricated, you might slip through space-time." icon_state = "bluespacetomato" origin_tech = "biotech=4;bluespace=5" + distill_reagent = null + wine_power = 0.8 // Killer Tomato @@ -117,6 +121,7 @@ var/awakening = 0 filling_color = "#FF0000" origin_tech = "biotech=4;combat=5" + distill_reagent = "demonsblood" /obj/item/reagent_containers/food/snacks/grown/tomato/killer/attack(mob/M, mob/user, def_zone) if(awakening) diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index 364a918c0ff..0e0d248d8b7 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -7,7 +7,7 @@ var/harvested_name = "shortened mushrooms" var/harvested_desc = "Some quickly regrowing mushrooms, formerly known to be quite large." var/needs_sharp_harvest = TRUE - var/harvest = /obj/item/reagent_containers/food/snacks/ash_flora/shavings + var/harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings var/harvest_amount_low = 1 var/harvest_amount_high = 3 var/harvest_time = 60 @@ -79,7 +79,7 @@ desc = "A number of mushrooms, each of which surrounds a greenish sporangium with a number of leaf-like structures." harvested_name = "leafless mushrooms" harvested_desc = "A bunch of formerly-leafed mushrooms, with their sporangiums exposed. Scandalous?" - harvest = /obj/item/reagent_containers/food/snacks/ash_flora/mushroom_leaf + harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf needs_sharp_harvest = FALSE harvest_amount_high = 4 harvest_time = 20 @@ -95,7 +95,7 @@ desc = "Several mushrooms, the larger of which have a ring of conks at the midpoint of their stems." harvested_name = "small mushrooms" harvested_desc = "Several small mushrooms near the stumps of what likely were larger mushrooms." - harvest = /obj/item/reagent_containers/food/snacks/ash_flora/mushroom_cap + harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap harvest_amount_high = 4 harvest_time = 50 harvest_message_low = "You slice the cap off of a mushroom." @@ -111,7 +111,7 @@ luminosity = 1 harvested_name = "tiny mushrooms" harvested_desc = "A few tiny mushrooms around larger stumps. You can already see them growing back." - harvest = /obj/item/reagent_containers/food/snacks/ash_flora/mushroom_stem + harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem harvest_amount_high = 4 harvest_time = 40 harvest_message_low = "You pick and slice the cap off of a mushroom, leaving the stem." @@ -126,7 +126,7 @@ desc = "Several prickly cacti, brimming with ripe fruit and covered in a thin layer of ash." harvested_name = "cacti" harvested_desc = "A bunch of prickly cacti. You can see fruits slowly growing beneath the covering of ash." - harvest = /obj/item/reagent_containers/food/snacks/ash_flora/cactus_fruit + harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit needs_sharp_harvest = FALSE harvest_amount_high = 2 harvest_time = 10 @@ -149,45 +149,51 @@ H.visible_message("[H] steps on a cactus!", \ "You step on a cactus!") -/obj/item/reagent_containers/food/snacks/ash_flora +/obj/item/reagent_containers/food/snacks/grown/ash_flora name = "mushroom shavings" desc = "Some shavings from a tall mushroom. With enough, might serve as a bowl." icon = 'icons/obj/lavaland/ash_flora.dmi' icon_state = "mushroom_shavings" list_reagents = list("sugar" = 3, "ethanol" = 2, "stabilizing_agent" = 3, "minttoxin" = 2) w_class = WEIGHT_CLASS_TINY + wine_power = 0.2 -/obj/item/reagent_containers/food/snacks/ash_flora/New() +/obj/item/reagent_containers/food/snacks/grown/ash_flora/New() ..() pixel_x = rand(-4, 4) pixel_y = rand(-4, 4) -/obj/item/reagent_containers/food/snacks/ash_flora/shavings //for actual crafting +/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings //for actual crafting -/obj/item/reagent_containers/food/snacks/ash_flora/mushroom_leaf +/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf name = "mushroom leaf" desc = "A leaf, from a mushroom." list_reagents = list("nutriment" = 3, "vitfro" = 2, "nicotine" = 2) icon_state = "mushroom_leaf" + wine_power = 0.4 -/obj/item/reagent_containers/food/snacks/ash_flora/mushroom_cap +/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap name = "mushroom cap" desc = "The cap of a large mushroom." list_reagents = list("lsd" = 2, "entpoly" = 4, "psilocybin" = 2) icon_state = "mushroom_cap" + wine_power = 0.7 -/obj/item/reagent_containers/food/snacks/ash_flora/mushroom_stem + +/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem name = "mushroom stem" desc = "A long mushroom stem. It's slightly glowing." list_reagents = list("tinlux" = 2, "vitamin" = 1, "space_drugs" = 1) icon_state = "mushroom_stem" luminosity = 1 + wine_power = 0.6 -/obj/item/reagent_containers/food/snacks/ash_flora/cactus_fruit +/obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit name = "cactus fruit" list_reagents = list("vitamin" = 2, "nutriment" = 2, "vitfro" = 4) desc = "A cactus fruit covered in a thick, reddish skin. And some ash." icon_state = "cactus_fruit" + wine_power = 0.5 /obj/item/mushroom_bowl name = "mushroom bowl" @@ -200,6 +206,6 @@ /datum/crafting_recipe/mushroom_bowl name = "Mushroom Bowl" result = /obj/item/reagent_containers/food/drinks/mushroom_bowl - reqs = list(/obj/item/reagent_containers/food/snacks/ash_flora/shavings = 5) + reqs = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings = 5) time = 30 category = CAT_PRIMAL diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index c74e5973bf7..9a74b155e52 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -1236,3 +1236,107 @@ drink_icon = "synthignonglass" drink_name = "Glass of Synthignon" drink_desc = "Someone mixed good wine and robot booze. Romantic, but atrocious." + +/datum/reagent/consumable/ethanol/fruit_wine + name = "Fruit Wine" + id = "fruit_wine" + description = "A wine made from grown plants." + color = "#FFFFFF" + alcohol_perc = 0.35 + taste_message = "bad coding" + can_synth = FALSE + var/list/names = list("null fruit" = 1) //Names of the fruits used. Associative list where name is key, value is the percentage of that fruit. + var/list/tastes = list("bad coding" = 1) //List of tastes. See above. + +/datum/reagent/consumable/ethanol/fruit_wine/on_new(list/data) + names = data["names"] + tastes = data["tastes"] + alcohol_perc = data["alcohol_perc"] + color = data["color"] + generate_data_info(data) + +/datum/reagent/consumable/ethanol/fruit_wine/on_merge(list/data, amount) + var/diff = (amount/volume) + if(diff < 1) + color = BlendRGB(color, data["color"], diff/2) //The percentage difference over two, so that they take average if equal. + else + color = BlendRGB(color, data["color"], (1/diff)/2) //Adjust so it's always blending properly. + var/oldvolume = volume-amount + + var/list/cachednames = data["names"] + for(var/name in names | cachednames) + names[name] = ((names[name] * oldvolume) + (cachednames[name] * amount)) / volume + + var/list/cachedtastes = data["tastes"] + for(var/taste in tastes | cachedtastes) + tastes[taste] = ((tastes[taste] * oldvolume) + (cachedtastes[taste] * amount)) / volume + + alcohol_perc *= oldvolume + var/newzepwr = data["alcohol_perc"] * amount + alcohol_perc += newzepwr + alcohol_perc /= volume //Blending alcohol percentage to volume. + generate_data_info(data) + +/datum/reagent/consumable/ethanol/fruit_wine/proc/generate_data_info(list/data) + var/minimum_percent = 0.15 //Percentages measured between 0 and 1. + var/list/primary_tastes = list() + var/list/secondary_tastes = list() + drink_name = "glass of [name]" + drink_desc = description + for(var/taste in tastes) + switch(tastes[taste]) + if(minimum_percent*2 to INFINITY) + primary_tastes += taste + if(minimum_percent to minimum_percent*2) + secondary_tastes += taste + + var/minimum_name_percent = 0.35 + name = "" + var/list/names_in_order = sortTim(names, /proc/cmp_numeric_dsc, TRUE) + var/named = FALSE + for(var/fruit_name in names) + if(names[fruit_name] >= minimum_name_percent) + name += "[fruit_name] " + named = TRUE + if(named) + name += "wine" + else + name = "mixed [names_in_order[1]] wine" + + var/alcohol_description + switch(alcohol_perc) + if(1.2 to INFINITY) + alcohol_description = "suicidally strong" + if(0.9 to 1.2) + alcohol_description = "rather strong" + if(0.7 to 0.9) + alcohol_description = "strong" + if(0.4 to 0.7) + alcohol_description = "rich" + if(0.2 to 0.4) + alcohol_description = "mild" + if(0 to 0.2) + alcohol_description = "sweet" + else + alcohol_description = "watery" //How the hell did you get negative boozepwr? + + var/list/fruits = list() + if(names_in_order.len <= 3) + fruits = names_in_order + else + for(var/i in 1 to 3) + fruits += names_in_order[i] + fruits += "other plants" + var/fruit_list = english_list(fruits) + description = "A [alcohol_description] wine brewed from [fruit_list]." + + var/flavor = "" + if(!primary_tastes.len) + primary_tastes = list("[alcohol_description] alcohol") + flavor += english_list(primary_tastes) + if(secondary_tastes.len) + flavor += ", with a hint of " + flavor += english_list(secondary_tastes) + taste_message = flavor + if(holder.my_atom) + holder.my_atom.on_reagent_change() diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index 69030fafa74..e82dbda249d 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -95,7 +95,6 @@ spawn(5) reagents.clear_reagents() return else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. - if(target.reagents && !target.reagents.total_volume) to_chat(user, "[target] is empty and can't be refilled!") return @@ -107,7 +106,7 @@ var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) to_chat(user, "You fill [src] with [trans] unit\s of the contents of [target].") - else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it. + else if(target.is_refillable() && is_drainable()) //Something like a glass. Player probably wants to transfer TO it. if(!reagents.total_volume) to_chat(user, "[src] is empty.") return diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 1206aa48dfc7b2a8959a63515ed88b1b1b99191c..f9c13a5c3321841ec205f0efe2bccc3138e1eb33 100644 GIT binary patch delta 17797 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

0kCXmqt9yN`xnHxYB^ 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 Z{{hKj=(oB-(yjmi002ovPDHLkV1kg`TrU6s delta 16745 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 Date: Sat, 3 Nov 2018 20:30:52 +0800 Subject: [PATCH 2/4] Fixes typo --- code/modules/hydroponics/grown/ambrosia.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm index 47b2975ffa8..a2085eafaee 100644 --- a/code/modules/hydroponics/grown/ambrosia.dm +++ b/code/modules/hydroponics/grown/ambrosia.dm @@ -77,7 +77,7 @@ light_range = 3 seed = /obj/item/seeds/ambrosia/gaia wine_power = 0.7 - wine_flavor = "the earthmothert's blessing" + wine_flavor = "the earthmother's blessing" // Ambrosia Cruciatus /obj/item/seeds/ambrosia/cruciatus From c2f92bec5e67250dd55c2ec3cc8f4f4c5e7f2cae Mon Sep 17 00:00:00 2001 From: variableundefined <40092670+variableundefined@users.noreply.github.com> Date: Sat, 3 Nov 2018 21:39:38 +0800 Subject: [PATCH 3/4] Make fermentation barrel a stack recipe, fixes koibean and soybean being OP --- code/game/objects/items/stacks/sheets/sheet_types.dm | 3 ++- code/modules/hydroponics/grown/beans.dm | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 376acfe20ac..3ab43d0793a 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -174,7 +174,8 @@ var/global/list/datum/stack_recipe/wood_recipes = list( new /datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), new /datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50), new /datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10), - new /datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 15) + new /datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 15), + new /datum/stack_recipe("fermenting barrel", /obj/structure/fermenting_barrel, 30, time = 50) ) /obj/item/stack/sheet/wood diff --git a/code/modules/hydroponics/grown/beans.dm b/code/modules/hydroponics/grown/beans.dm index fa73e7cd45f..3649e84b869 100644 --- a/code/modules/hydroponics/grown/beans.dm +++ b/code/modules/hydroponics/grown/beans.dm @@ -25,7 +25,7 @@ icon_state = "soybeans" filling_color = "#F0E68C" bitesize_mod = 2 - wine_power = 20 + wine_power = 0.2 // Koibean /obj/item/seeds/soya/koi @@ -47,4 +47,4 @@ icon_state = "koibeans" filling_color = "#F0E68C" bitesize_mod = 2 - wine_power = 40 \ No newline at end of file + wine_power = 0.4 \ No newline at end of file From a4812dd4e79a1adec964f07788722b7f005ac2cf Mon Sep 17 00:00:00 2001 From: variableundefined <40092670+variableundefined@users.noreply.github.com> Date: Thu, 8 Nov 2018 14:57:56 +0800 Subject: [PATCH 4/4] Update fermenting_barrel.dm --- code/modules/hydroponics/fermenting_barrel.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index ab9f9f82d3e..9f4dbb7315d 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -47,7 +47,7 @@ else if(!user.drop_item()) to_chat(user, "[G] is stuck to your hand!") return FALSE - G.loc = src + G.forceMove(src) to_chat(user, "You place [G] into [src] to start the fermentation process.") addtimer(CALLBACK(src, .proc/makeWine, G), rand(80, 120) * speed_multiplier) else if(I.is_refillable())