diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index 4f2750c0c06..0f7dcd15b4a 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -38,6 +38,7 @@ var/list/items // example: =list(/obj/item/weapon/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo var/result //example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal var/time = 100 // 1/10 part of second + var/byproduct //example: = /obj/item/weapon/kitchen/mould // byproduct to return, such as a mould or trash /datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) //1=precisely, 0=insufficiently, -1=superfluous @@ -118,3 +119,9 @@ i_count = N_i . = recipe return . + +/datum/recipe/proc/get_byproduct() + if(byproduct) + return byproduct + else + return null diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 546b5956f0b..f1aae4943e3 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -344,12 +344,45 @@ to destroy them and players will be able to make replacements. build_path = /obj/machinery/microwave board_type = "machine" origin_tech = "programming=1" - frame_desc = "Requires 1 Micro Laser, 1 piece of cable and 1 Console Screen." + frame_desc = "Requires 1 Micro Laser, 2 pieces of cable and 1 Console Screen." req_components = list( /obj/item/weapon/stock_parts/micro_laser = 1, /obj/item/stack/cable_coil = 2, /obj/item/weapon/stock_parts/console_screen = 1) +/obj/item/weapon/circuitboard/oven + name = "circuit board (Oven)" + build_path = /obj/machinery/oven + board_type = "machine" + origin_tech = "programming=1;plasmatech=1" + frame_desc = "Requires 2 Micro Lasers, 5 pieces of cable and 1 Console Screen." + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 2, + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/grill + name = "circuit board (Grill)" + build_path = /obj/machinery/grill + board_type = "machine" + origin_tech = "programming=1;plasmatech=1" + frame_desc = "Requires 2 Micro Lasers, 5 pieces of cable and 1 Console Screen." + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 2, + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/candy_maker + name = "circuit board (Candy Maker)" + build_path = /obj/machinery/candy_maker + board_type = "machine" + origin_tech = "programming=2" + frame_desc = "Requires 1 Manipulator, 5 pieces of cable and 1 Console Screen." + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/console_screen = 1) + /obj/item/weapon/circuitboard/chem_dispenser name = "circuit board (Portable Chem Dispenser)" build_path = /obj/machinery/chem_dispenser/constructable diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index cd8e806fbb0..064bb7ff475 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -32,11 +32,11 @@ reagents.my_atom = src if (!available_recipes) available_recipes = new - for (var/type in (typesof(/datum/recipe)-/datum/recipe)) + for (var/type in (typesof(/datum/recipe/microwave)-/datum/recipe/microwave)) available_recipes+= new type acceptable_items = new acceptable_reagents = new - for (var/datum/recipe/recipe in available_recipes) + for (var/datum/recipe/microwave/recipe in available_recipes) for (var/item in recipe.items) acceptable_items |= item for (var/reagent in recipe.reagents) diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index 937629589ed..b4131a8437d 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -90,6 +90,14 @@ /obj/machinery/poolcontroller/proc/updateMobs() for(var/turf/simulated/floor/beach/water/W in linkedturfs) //Check for pool-turfs linked to the controller. for(var/mob/M in W) //Check for mobs in the linked pool-turfs. + //Sanity checks, don't affect robuts, AI eyes, and observers + if(isAIEye(M)) + return + if(issilicon(M)) + return + if(isobserver(M)) + return + //End sanity checks, go on switch(temperature) //Apply different effects based on what the temperature is set to. if("scalding") //Burn the mob. M.bodytemperature = min(500, M.bodytemperature + 35) //heat mob at 35k(elvin) per cycle @@ -106,12 +114,14 @@ if("warm") //Gently warm the mob. M.bodytemperature = min(330, M.bodytemperature + 10) //Heats up mobs to just over normal, not enough to burn - M << "The water is quite warm." //Inform the mob it's warm water. + if(prob(50)) //inform the mob of warm water half the time + M << "The water is quite warm." //Inform the mob it's warm water. return if("cool") //Gently cool the mob. M.bodytemperature = max(290, M.bodytemperature - 10) //Cools mobs to just below normal, not enough to burn - M << "The water is chilly." //Inform the mob it's chilly water. + if(prob(50)) //inform the mob of cold water half the time + M << "The water is chilly." //Inform the mob it's chilly water. return /obj/machinery/poolcontroller/proc/miston() //Spawn /obj/effect/mist (from the shower) on all linked pool tiles diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 36098f5ffa9..786caf13331 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -786,11 +786,11 @@ product_slogans = "Try our new nougat bar!;Twice the calories for half the price!" product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!" icon_state = "snack" - products = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 6,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 6,/obj/item/weapon/reagent_containers/food/snacks/chips =6, + products = list(/obj/item/weapon/reagent_containers/food/snacks/candy/candybar = 6,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 6,/obj/item/weapon/reagent_containers/food/snacks/chips =6, /obj/item/weapon/reagent_containers/food/snacks/sosjerky = 6,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 6,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 6, /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 6) contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6) - prices = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 20,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 30,/obj/item/weapon/reagent_containers/food/snacks/chips =25, + prices = list(/obj/item/weapon/reagent_containers/food/snacks/candy/candybar = 20,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 30,/obj/item/weapon/reagent_containers/food/snacks/chips =25, /obj/item/weapon/reagent_containers/food/snacks/sosjerky = 30,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 20,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 30, /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 25) refill_canister = /obj/item/weapon/vending_refill/snack @@ -1057,7 +1057,15 @@ desc = "A kitchen and restaurant equipment vendor" product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..." icon_state = "dinnerware" - products = list(/obj/item/weapon/storage/bag/tray = 8,/obj/item/weapon/kitchen/utensil/fork = 6,/obj/item/weapon/kitchenknife = 3,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 8,/obj/item/clothing/suit/chef/classic = 2,/obj/item/weapon/reagent_containers/food/condiment/pack/ketchup = 5,/obj/item/weapon/reagent_containers/food/condiment/pack/hotsauce = 5) + products = list(/obj/item/weapon/storage/bag/tray = 8,/obj/item/weapon/kitchen/utensil/fork = 6, + /obj/item/weapon/kitchenknife = 3,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 8, + /obj/item/clothing/suit/chef/classic = 2, + /obj/item/weapon/reagent_containers/food/condiment/pack/ketchup = 5, + /obj/item/weapon/reagent_containers/food/condiment/pack/hotsauce = 5, + /obj/item/weapon/kitchen/mould/bear = 1, /obj/item/weapon/kitchen/mould/worm = 1, + /obj/item/weapon/kitchen/mould/bean = 1, /obj/item/weapon/kitchen/mould/ball = 1, + /obj/item/weapon/kitchen/mould/cane = 1, /obj/item/weapon/kitchen/mould/cash = 1, + /obj/item/weapon/kitchen/mould/coin = 1, /obj/item/weapon/kitchen/mould/loli = 1) contraband = list(/obj/item/weapon/kitchen/utensil/spoon = 2,/obj/item/weapon/kitchen/utensil/knife = 2,/obj/item/weapon/kitchen/rollingpin = 2, /obj/item/weapon/butch = 2) /obj/machinery/vending/sovietsoda @@ -1240,4 +1248,4 @@ /obj/item/weapon/c_tube = 10,/obj/item/weapon/pen = 5,/obj/item/weapon/pen/blue = 5, /obj/item/weapon/pen/red = 5) contraband = list(/obj/item/toy/crayon/mime = 1,/obj/item/toy/crayon/rainbow = 1) - premium = list(/obj/item/weapon/contraband/poster = 5) \ No newline at end of file + premium = list(/obj/item/weapon/contraband/poster = 5) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 4ad71cb9c93..5a5ae43957a 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -47,6 +47,14 @@ var/global/list/datum/stack_recipe/plastic_recipes = list ( \ new/datum/stack_recipe("plastic spoon", /obj/item/weapon/kitchen/utensil/pspoon, 1, on_floor = 1), \ new/datum/stack_recipe("plastic knife", /obj/item/weapon/kitchen/utensil/pknife, 1, on_floor = 1), \ new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1), \ + new/datum/stack_recipe("bear mould", /obj/item/weapon/kitchen/mould/bear, 1, on_floor = 1), \ + new/datum/stack_recipe("worm mould", /obj/item/weapon/kitchen/mould/worm, 1, on_floor = 1), \ + new/datum/stack_recipe("bean mould", /obj/item/weapon/kitchen/mould/bean, 1, on_floor = 1), \ + new/datum/stack_recipe("ball mould", /obj/item/weapon/kitchen/mould/ball, 1, on_floor = 1), \ + new/datum/stack_recipe("cane mould", /obj/item/weapon/kitchen/mould/cane, 1, on_floor = 1), \ + new/datum/stack_recipe("cash mould", /obj/item/weapon/kitchen/mould/cash, 1, on_floor = 1), \ + new/datum/stack_recipe("coin mould", /obj/item/weapon/kitchen/mould/coin, 1, on_floor = 1), \ + new/datum/stack_recipe("sucker mould", /obj/item/weapon/kitchen/mould/loli, 1, on_floor = 1), \ ) var/global/list/datum/stack_recipe/clown_recipes = list ( \ diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 320f9331427..69ab0899003 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -81,7 +81,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ throwforce = 10.0 flags = CONDUCT origin_tech = "materials=1" - + /obj/item/stack/sheet/metal/full/New() ..() amount = 50 @@ -126,7 +126,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \ /obj/item/stack/sheet/plasteel/New(var/loc, var/amount=null) recipes = plasteel_recipes return ..() - + /obj/item/stack/sheet/plasteel/full/New(var/loc, var/amount=null) amount = 50 ..(loc, amount) @@ -188,6 +188,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \ new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg), \ new/datum/stack_recipe("pizza box", /obj/item/pizzabox), \ new/datum/stack_recipe("folder", /obj/item/weapon/folder), \ + new/datum/stack_recipe("cardboard tube", /obj/item/weapon/c_tube), \ ) /obj/item/stack/sheet/cardboard //BubbleWrap diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 67f28494dea..eb6b59b95cd 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -56,6 +56,10 @@ can name = "crushed can" icon_state = "cola" + gum + name = "chewed gum" + desc = "NOT free candy." + icon_state = "gum" /obj/item/trash/attack(mob/M as mob, mob/living/user as mob) return diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index b4288c7033c..9268883a017 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -7,6 +7,7 @@ * Kitchen knives * Butcher's cleaver * Rolling Pins + * Candy Moulds */ /obj/item/weapon/kitchen @@ -214,4 +215,59 @@ w_class = 3.0 attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") -/* Trays moved to /obj/item/weapon/storage/bag */ \ No newline at end of file +/* Trays moved to /obj/item/weapon/storage/bag */ + +/* + * Candy Moulds + */ + +/obj/item/weapon/kitchen/mould + name = "generic candy mould" + desc = "You aren't sure what it's supposed to be." + icon_state = "mould" + force = 5 + throwforce = 5 + throw_speed = 3 + throw_range = 3 + w_class = 2.0 + attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed") + +/obj/item/weapon/kitchen/mould/bear + name = "bear-shaped candy mould" + desc = "It has the shape of a small bear imprinted into it." + icon_state = "mould_bear" + +/obj/item/weapon/kitchen/mould/worm + name = "worm-shaped candy mould" + desc = "It has the shape of a worm imprinted into it." + icon_state = "mould_worm" + +/obj/item/weapon/kitchen/mould/bean + name = "bean-shaped candy mould" + desc = "It has the shape of a bean imprinted into it." + icon_state = "mould_bean" + +/obj/item/weapon/kitchen/mould/ball + name = "ball-shaped candy mould" + desc = "It has a small sphere imprinted into it." + icon_state = "mould_ball" + +/obj/item/weapon/kitchen/mould/cane + name = "cane-shaped candy mould" + desc = "It has the shape of a cane imprinted into it." + icon_state = "mould_cane" + +/obj/item/weapon/kitchen/mould/cash + name = "cash-shaped candy mould" + desc = "It has the shape and design of fake money imprinted into it." + icon_state = "mould_cash" + +/obj/item/weapon/kitchen/mould/coin + name = "coin-shaped candy mould" + desc = "It has the shape of a coin imprinted into it." + icon_state = "mould_coin" + +/obj/item/weapon/kitchen/mould/loli + name = "sucker mould" + desc = "It has the shape of a sucker imprinted into it." + icon_state = "mould_loli" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 109a257ac03..c11f24f5514 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -9,7 +9,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set "changeling" = IS_MODE_COMPILED("changeling"), // 4 / 3 "wizard" = IS_MODE_COMPILED("wizard"), // 8 / 4 "malf AI" = IS_MODE_COMPILED("malfunction"), // 16 / 5 - "revolutionary" = IS_MODE_COMPILED("revolution"), // 32 / 6 + "revolutionary" = IS_MODE_COMPILED("revolution"), // 32 / 6 "alien" = 1, // 62 / 7 "pAI" = 1, // 128 / 8 "cultist" = IS_MODE_COMPILED("cult"), // 256 / 9 @@ -20,9 +20,9 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set "blob" = IS_MODE_COMPILED("blob") // 8192 / 14 ) var/global/list/special_role_times = list( //minimum age (in days) for accounts to play these roles - num2text(BE_PAI) = 0, - num2text(BE_TRAITOR) = 7, - num2text(BE_CHANGELING) = 14, + num2text(BE_PAI) = 0, + num2text(BE_TRAITOR) = 7, + num2text(BE_CHANGELING) = 14, num2text(BE_WIZARD) = 14, num2text(BE_REV) = 14, num2text(BE_VAMPIRE) = 14, @@ -30,8 +30,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts num2text(BE_OPERATIVE) = 21, num2text(BE_CULTIST) = 21, num2text(BE_RAIDER) = 21, - num2text(BE_ALIEN) = 21, - num2text(BE_NINJA) = 21, + num2text(BE_ALIEN) = 21, + num2text(BE_NINJA) = 21, num2text(BE_MUTINEER) = 21, num2text(BE_MALF) = 30 ) @@ -53,9 +53,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/minimal_player_age_antag = special_role_times[num2text(role)] if(!isnum(minimal_player_age_antag)) return 0 - + return max(0, minimal_player_age_antag - C.player_age) - + /proc/check_client_age(client/C, var/days) // If days isn't provided, returns the age of the client. If it is provided, it returns the days until the player_age is equal to or greater than the days variable if(!days) return C.player_age @@ -966,9 +966,10 @@ datum/preferences if("age") age = rand(AGE_MIN, AGE_MAX) if("hair") - r_hair = rand(0,255) - g_hair = rand(0,255) - b_hair = rand(0,255) + if(species == "Human" || species == "Unathi" || species == "Tajaran" || species == "Skrell" || species == "Machine") + r_hair = rand(0,255) + g_hair = rand(0,255) + b_hair = rand(0,255) if("h_style") h_style = random_hair_style(gender, species) if("facial") @@ -988,11 +989,13 @@ datum/preferences g_eyes = rand(0,255) b_eyes = rand(0,255) if("s_tone") - s_tone = random_skin_tone() + if(species == "Human") + s_tone = random_skin_tone() if("s_color") - r_skin = rand(0,255) - g_skin = rand(0,255) - b_skin = rand(0,255) + if(species == "Unathi" || species == "Tajaran" || species == "Skrell") + r_skin = rand(0,255) + g_skin = rand(0,255) + b_skin = rand(0,255) if("bag") backbag = rand(1,4) /*if("skin_style") diff --git a/code/modules/food/candy_maker.dm b/code/modules/food/candy_maker.dm new file mode 100644 index 00000000000..cfc3842e685 --- /dev/null +++ b/code/modules/food/candy_maker.dm @@ -0,0 +1,427 @@ + +/obj/machinery/candy_maker + name = "candy machine" + desc = "The stuff of nightmares for a dentist." + icon = 'icons/obj/cooking_machines.dmi' + icon_state = "candymaker_off" + layer = 2.9 + density = 1 + anchored = 1 + use_power = 1 + idle_power_usage = 5 + active_power_usage = 100 + flags = OPENCONTAINER | NOREACT + var/operating = 0 // Is it on? + var/dirty = 0 // = {0..100} Does it need cleaning? + var/broken = 0 // ={0,1,2} How broken is it??? + var/global/list/datum/recipe/available_recipes // List of the recipes you can use + var/global/list/acceptable_items // List of the items you can put in + var/global/list/acceptable_reagents // List of the reagents you can put in + var/global/max_n_of_items = 0 + var/efficiency + +// see code/modules/food/recipes_candy.dm for recipes + +/******************* +* Initialising +********************/ + +/obj/machinery/candy_maker/New() + //..() //do not need this + reagents = new/datum/reagents(100) + reagents.my_atom = src + if (!available_recipes) + available_recipes = new + for (var/type in (typesof(/datum/recipe/candy)-/datum/recipe/candy)) + available_recipes+= new type + acceptable_items = new + acceptable_reagents = new + for (var/datum/recipe/candy/recipe in available_recipes) + for (var/item in recipe.items) + acceptable_items |= item + for (var/reagent in recipe.reagents) + acceptable_reagents |= reagent + if (recipe.items) + max_n_of_items = max(max_n_of_items,recipe.items.len) + + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/candy_maker(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/stack/cable_coil(null, 5) + RefreshParts() + + +/obj/machinery/candy_maker/upgraded/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/candy_maker(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/stack/cable_coil(null, 5) + RefreshParts() + +/obj/machinery/candy_maker/RefreshParts() + var/E + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + E += M.rating + efficiency = E + +/******************* +* Item Adding +********************/ + +/obj/machinery/candy_maker/attackby(var/obj/item/O as obj, var/mob/user as mob, params) + if(operating) + return + if(!broken && dirty < 100) + if(default_deconstruction_screwdriver(user, "candymaker_open", "candymaker_off", O)) + return + if(exchange_parts(user, O)) + return + if(istype(O, /obj/item/weapon/wrench)) + playsound(src, 'sound/items/Ratchet.ogg', 50, 1) + if(anchored) + anchored = 0 + user << "The [src] can now be moved." + return + else if(!anchored) + anchored = 1 + user << "The [src] is now secured." + return + + default_deconstruction_crowbar(O) + + if(src.broken > 0) + if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver + user.visible_message( \ + "\blue [user] starts to fix part of the candy maker.", \ + "\blue You start to fix part of the candy maker." \ + ) + if (do_after(user,20)) + user.visible_message( \ + "\blue [user] fixes part of the candy maker.", \ + "\blue You have fixed part of the candy maker." \ + ) + src.broken = 1 // Fix it a bit + else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench + user.visible_message( \ + "\blue [user] starts to fix part of the candy maker.", \ + "\blue You start to fix part of the candy maker." \ + ) + if (do_after(user,20)) + user.visible_message( \ + "\blue [user] fixes the candy maker.", \ + "\blue You have fixed the candy maker." \ + ) + src.icon_state = "candymaker_off" + src.broken = 0 // Fix it! + src.dirty = 0 // just to be sure + src.flags = OPENCONTAINER + else + user << "\red It's broken!" + return 1 + else if(src.dirty==100) // The candy_maker is all dirty so can't be used! + if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them + user.visible_message( \ + "\blue [user] starts to clean the candy maker.", \ + "\blue You start to clean the candy maker." \ + ) + if (do_after(user,20)) + user.visible_message( \ + "\blue [user] has cleaned the candy maker.", \ + "\blue You have cleaned the candy maker." \ + ) + src.dirty = 0 // It's clean! + src.broken = 0 // just to be sure + src.icon_state = "candymaker_off" + src.flags = OPENCONTAINER + else //Otherwise bad luck!! + user << "\red It's dirty!" + return 1 + else if(is_type_in_list(O,acceptable_items)) + if (contents.len>=max_n_of_items) + user << "\red This [src] is full of ingredients, you cannot put more." + return 1 + if (istype(O,/obj/item/stack) && O:amount>1) + new O.type (src) + O:use(1) + user.visible_message( \ + "\blue [user] has added one of [O] to \the [src].", \ + "\blue You add one of [O] to \the [src].") + else + // user.unEquip(O) //This just causes problems so far as I can tell. -Pete + if(!user.drop_item()) + user << "\the [O] is stuck to your hand, you cannot put it in \the [src]" + return 0 + O.loc = src + user.visible_message( \ + "\blue [user] has added \the [O] to \the [src].", \ + "\blue You add \the [O] to \the [src].") + else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \ + istype(O,/obj/item/weapon/reagent_containers/food/condiment) \ + ) + if (!O.reagents) + return 1 + for (var/datum/reagent/R in O.reagents.reagent_list) + if (!(R.id in acceptable_reagents)) + user << "\red Your [O] contains components unsuitable for cookery." + return 1 + //G.reagents.trans_to(src,G.amount_per_transfer_from_this) + else if(istype(O,/obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = O + user << "\red This is ridiculous. You can not fit \the [G.affecting] in this [src]." + return 1 + else + user << "\red You have no idea what you can cook with this [O]." + return 1 + src.updateUsrDialog() + +/obj/machinery/candy_maker/attack_paw(mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/candy_maker/attack_ai(mob/user as mob) + return 0 + +/obj/machinery/candy_maker/attack_hand(mob/user as mob) + user.set_machine(src) + interact(user) + +/******************* +* candy_maker Menu +********************/ + +/obj/machinery/candy_maker/interact(mob/user as mob) // The Candy Maker Menu + if(panel_open || !anchored) + return + var/dat = "" + if(src.broken > 0) + dat = {"Bzzzzttttt"} + else if(src.operating) + var/whimsy_word = pick("Wonderizing", "Scrumpdiddlyumptiousification", "Miracle-coating", "Flavorifaction") + dat = {"[whimsy_word] in progress!
Please wait...!
"} + else if(src.dirty==100) + dat = {"This candy maker is dirty!
Please clean it before use!
"} + else + var/list/items_counts = new + var/list/items_measures = new + var/list/items_measures_p = new + for (var/obj/O in contents) + var/display_name = O.name + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) + items_measures[display_name] = "egg" + items_measures_p[display_name] = "eggs" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) + items_measures[display_name] = "tofu chunk" + items_measures_p[display_name] = "tofu chunks" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat + items_measures[display_name] = "slab of meat" + items_measures_p[display_name] = "slabs of meat" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) + display_name = "Turnovers" + items_measures[display_name] = "turnover" + items_measures_p[display_name] = "turnovers" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) + items_measures[display_name] = "fillet of meat" + items_measures_p[display_name] = "fillets of meat" + items_counts[display_name]++ + for (var/O in items_counts) + var/N = items_counts[O] + if (!(O in items_measures)) + dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"} + else + if (N==1) + dat += {"[capitalize(O)]: [N] [items_measures[O]]
"} + else + dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"} + + for (var/datum/reagent/R in reagents.reagent_list) + var/display_name = R.name + if (R.id == "capsaicin") + display_name = "Hotsauce" + if (R.id == "frostoil") + display_name = "Coldsauce" + dat += {"[display_name]: [R.volume] unit\s
"} + + if (items_counts.len==0 && reagents.reagent_list.len==0) + dat = {"The candy maker is empty
"} + else + dat = {"Ingredients:
[dat]"} + dat += {"

\ +Turn on!
\ +
Eject ingredients!
\ +"} + + user << browse("Candy Maker Controls[dat]", "window=candy_maker") + onclose(user, "candy_maker") + return + + + +/*********************************** +* candy_maker Menu Handling/Cooking +************************************/ + +/obj/machinery/candy_maker/proc/cook() + if(stat & (NOPOWER|BROKEN)) + return + start() + if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run + if (!wzhzhzh(10)) + abort() + return + stop() + return + + var/datum/recipe/recipe = select_recipe(available_recipes,src) + var/obj/cooked + var/obj/byproduct + if (!recipe) + dirty += 1 + if (prob(max(10,dirty*5))) + if (!wzhzhzh(4)) + abort() + return + muck_start() + wzhzhzh(4) + muck_finish() + cooked = fail() + cooked.loc = src.loc + return + else if (has_extra_item()) + if (!wzhzhzh(4)) + abort() + return + broke() + cooked = fail() + cooked.loc = src.loc + return + else + if (!wzhzhzh(10)) + abort() + return + stop() + cooked = fail() + cooked.loc = src.loc + return + else + var/halftime = round(recipe.time/10/2) + if (!wzhzhzh(halftime)) + abort() + return + if (!wzhzhzh(halftime)) + abort() + cooked = fail() + cooked.loc = src.loc + return + cooked = recipe.make_food(src) + byproduct = recipe.get_byproduct() + stop() + if(cooked) + cooked.loc = src.loc + for(var/i=1,iThe [src] can now be moved." + return + else if(!anchored) + anchored = 1 + user << "The [src] is now secured." + return + + default_deconstruction_crowbar(O) + + if(src.broken > 0) + if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver + user.visible_message( \ + "\blue [user] starts to fix part of the grill.", \ + "\blue You start to fix part of the grill." \ + ) + if (do_after(user,20)) + user.visible_message( \ + "\blue [user] fixes part of the grill.", \ + "\blue You have fixed part of the grill." \ + ) + src.broken = 1 // Fix it a bit + else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench + user.visible_message( \ + "\blue [user] starts to fix part of the grill.", \ + "\blue You start to fix part of the grill." \ + ) + if (do_after(user,20)) + user.visible_message( \ + "\blue [user] fixes the grill.", \ + "\blue You have fixed the grill." \ + ) + src.icon_state = "grill_off" + src.broken = 0 // Fix it! + src.dirty = 0 // just to be sure + src.flags = OPENCONTAINER + else + user << "\red It's broken!" + return 1 + else if(src.dirty==100) // The grill is all dirty so can't be used! + if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them + user.visible_message( \ + "\blue [user] starts to clean the grill.", \ + "\blue You start to clean the grill." \ + ) + if (do_after(user,20)) + user.visible_message( \ + "\blue [user] has cleaned the grill.", \ + "\blue You have cleaned the grill." \ + ) + src.dirty = 0 // It's clean! + src.broken = 0 // just to be sure + src.icon_state = "grill_off" + src.flags = OPENCONTAINER + else //Otherwise bad luck!! + user << "\red It's dirty!" + return 1 + else if(is_type_in_list(O,acceptable_items)) + if (contents.len>=max_n_of_items) + user << "\red This [src] is full of ingredients, you cannot put more." + return 1 + if (istype(O,/obj/item/stack) && O:amount>1) + new O.type (src) + O:use(1) + user.visible_message( \ + "\blue [user] has added one of [O] to \the [src].", \ + "\blue You add one of [O] to \the [src].") + else + // user.unEquip(O) //This just causes problems so far as I can tell. -Pete + if(!user.drop_item()) + user << "\the [O] is stuck to your hand, you cannot put it in \the [src]" + return 0 + O.loc = src + user.visible_message( \ + "\blue [user] has added \the [O] to \the [src].", \ + "\blue You add \the [O] to \the [src].") + else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \ + istype(O,/obj/item/weapon/reagent_containers/food/condiment) \ + ) + if (!O.reagents) + return 1 + for (var/datum/reagent/R in O.reagents.reagent_list) + if (!(R.id in acceptable_reagents)) + user << "\red Your [O] contains components unsuitable for cookery." + return 1 + //G.reagents.trans_to(src,G.amount_per_transfer_from_this) + else if(istype(O,/obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = O + user << "\red This is ridiculous. You can not fit \the [G.affecting] in this [src]." + return 1 + else + user << "\red You have no idea what you can cook with this [O]." + return 1 + src.updateUsrDialog() + +/obj/machinery/grill/attack_paw(mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/grill/attack_ai(mob/user as mob) + return 0 + +/obj/machinery/grill/attack_hand(mob/user as mob) + user.set_machine(src) + interact(user) + +/******************* +* grill Menu +********************/ + +/obj/machinery/grill/interact(mob/user as mob) // The grill Menu + if(panel_open || !anchored) + return + var/dat = "" + if(src.broken > 0) + dat = {"Bzzzzttttt"} + else if(src.operating) + dat = {"Grilling in progress!
Please wait...!
"} + else if(src.dirty==100) + dat = {"This grill is dirty!
Please clean it before use!
"} + else + var/list/items_counts = new + var/list/items_measures = new + var/list/items_measures_p = new + for (var/obj/O in contents) + var/display_name = O.name + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) + items_measures[display_name] = "egg" + items_measures_p[display_name] = "eggs" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) + items_measures[display_name] = "tofu chunk" + items_measures_p[display_name] = "tofu chunks" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat + items_measures[display_name] = "slab of meat" + items_measures_p[display_name] = "slabs of meat" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) + display_name = "Turnovers" + items_measures[display_name] = "turnover" + items_measures_p[display_name] = "turnovers" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) + items_measures[display_name] = "fillet of meat" + items_measures_p[display_name] = "fillets of meat" + items_counts[display_name]++ + for (var/O in items_counts) + var/N = items_counts[O] + if (!(O in items_measures)) + dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"} + else + if (N==1) + dat += {"[capitalize(O)]: [N] [items_measures[O]]
"} + else + dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"} + + for (var/datum/reagent/R in reagents.reagent_list) + var/display_name = R.name + if (R.id == "capsaicin") + display_name = "Hotsauce" + if (R.id == "frostoil") + display_name = "Coldsauce" + dat += {"[display_name]: [R.volume] unit\s
"} + + if (items_counts.len==0 && reagents.reagent_list.len==0) + dat = {"The grill is empty
"} + else + dat = {"Ingredients:
[dat]"} + dat += {"

\ +
Turn on!
\ +
Eject ingredients!
\ +"} + + user << browse("grill Controls[dat]", "window=grill") + onclose(user, "grill") + return + + + +/*********************************** +* grill Menu Handling/Cooking +************************************/ + +/obj/machinery/grill/proc/cook() + if(stat & (NOPOWER|BROKEN)) + return + start() + if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run + if (!wzhzhzh(10)) + abort() + return + stop() + return + + var/datum/recipe/recipe = select_recipe(available_recipes,src) + var/obj/cooked + if (!recipe) + dirty += 1 + if (prob(max(10,dirty*5))) + if (!wzhzhzh(4)) + abort() + return + muck_start() + wzhzhzh(4) + muck_finish() + cooked = fail() + cooked.loc = src.loc + return + else if (has_extra_item()) + if (!wzhzhzh(4)) + abort() + return + broke() + cooked = fail() + cooked.loc = src.loc + return + else + if (!wzhzhzh(10)) + abort() + return + stop() + cooked = fail() + cooked.loc = src.loc + return + else + var/halftime = round(recipe.time/10/2) + if (!wzhzhzh(halftime)) + abort() + return + if (!wzhzhzh(halftime)) + abort() + cooked = fail() + cooked.loc = src.loc + return + cooked = recipe.make_food(src) + stop() + if(cooked) + cooked.loc = src.loc + for(var/i=1,iThe [src] can now be moved." + return + else if(!anchored) + anchored = 1 + user << "The [src] is now secured." + return + + default_deconstruction_crowbar(O) + + if(src.broken > 0) + if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver + user.visible_message( \ + "\blue [user] starts to fix part of the oven.", \ + "\blue You start to fix part of the oven." \ + ) + if (do_after(user,20)) + user.visible_message( \ + "\blue [user] fixes part of the oven.", \ + "\blue You have fixed part of the oven." \ + ) + src.broken = 1 // Fix it a bit + else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench + user.visible_message( \ + "\blue [user] starts to fix part of the oven.", \ + "\blue You start to fix part of the oven." \ + ) + if (do_after(user,20)) + user.visible_message( \ + "\blue [user] fixes the oven.", \ + "\blue You have fixed the oven." \ + ) + src.icon_state = "oven_off" + src.broken = 0 // Fix it! + src.dirty = 0 // just to be sure + src.flags = OPENCONTAINER + else + user << "\red It's broken!" + return 1 + else if(src.dirty==100) // The oven is all dirty so can't be used! + if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them + user.visible_message( \ + "\blue [user] starts to clean the oven.", \ + "\blue You start to clean the oven." \ + ) + if (do_after(user,20)) + user.visible_message( \ + "\blue [user] has cleaned the oven.", \ + "\blue You have cleaned the oven." \ + ) + src.dirty = 0 // It's clean! + src.broken = 0 // just to be sure + src.icon_state = "oven_off" + src.flags = OPENCONTAINER + else //Otherwise bad luck!! + user << "\red It's dirty!" + return 1 + else if(is_type_in_list(O,acceptable_items)) + if (contents.len>=max_n_of_items) + user << "\red This [src] is full of ingredients, you cannot put more." + return 1 + if (istype(O,/obj/item/stack) && O:amount>1) + new O.type (src) + O:use(1) + user.visible_message( \ + "\blue [user] has added one of [O] to \the [src].", \ + "\blue You add one of [O] to \the [src].") + else + // user.unEquip(O) //This just causes problems so far as I can tell. -Pete + if(!user.drop_item()) + user << "\the [O] is stuck to your hand, you cannot put it in \the [src]" + return 0 + O.loc = src + user.visible_message( \ + "\blue [user] has added \the [O] to \the [src].", \ + "\blue You add \the [O] to \the [src].") + else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \ + istype(O,/obj/item/weapon/reagent_containers/food/condiment) \ + ) + if (!O.reagents) + return 1 + for (var/datum/reagent/R in O.reagents.reagent_list) + if (!(R.id in acceptable_reagents)) + user << "\red Your [O] contains components unsuitable for cookery." + return 1 + //G.reagents.trans_to(src,G.amount_per_transfer_from_this) + else if(istype(O,/obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = O + user << "\red This is ridiculous. You can not fit \the [G.affecting] in this [src]." + return 1 + else + user << "\red You have no idea what you can cook with this [O]." + return 1 + src.updateUsrDialog() + +/obj/machinery/oven/attack_paw(mob/user as mob) + return src.attack_hand(user) + +/obj/machinery/oven/attack_ai(mob/user as mob) + return 0 + +/obj/machinery/oven/attack_hand(mob/user as mob) + user.set_machine(src) + interact(user) + +/******************* +* oven Menu +********************/ + +/obj/machinery/oven/interact(mob/user as mob) // The oven Menu + if(panel_open || !anchored) + return + var/dat = "" + if(src.broken > 0) + dat = {"Bzzzzttttt"} + else if(src.operating) + dat = {"Baking in progress!
Please wait...!
"} + else if(src.dirty==100) + dat = {"This oven is dirty!
Please clean it before use!
"} + else + var/list/items_counts = new + var/list/items_measures = new + var/list/items_measures_p = new + for (var/obj/O in contents) + var/display_name = O.name + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) + items_measures[display_name] = "egg" + items_measures_p[display_name] = "eggs" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu)) + items_measures[display_name] = "tofu chunk" + items_measures_p[display_name] = "tofu chunks" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat + items_measures[display_name] = "slab of meat" + items_measures_p[display_name] = "slabs of meat" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket)) + display_name = "Turnovers" + items_measures[display_name] = "turnover" + items_measures_p[display_name] = "turnovers" + if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat)) + items_measures[display_name] = "fillet of meat" + items_measures_p[display_name] = "fillets of meat" + items_counts[display_name]++ + for (var/O in items_counts) + var/N = items_counts[O] + if (!(O in items_measures)) + dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"} + else + if (N==1) + dat += {"[capitalize(O)]: [N] [items_measures[O]]
"} + else + dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"} + + for (var/datum/reagent/R in reagents.reagent_list) + var/display_name = R.name + if (R.id == "capsaicin") + display_name = "Hotsauce" + if (R.id == "frostoil") + display_name = "Coldsauce" + dat += {"[display_name]: [R.volume] unit\s
"} + + if (items_counts.len==0 && reagents.reagent_list.len==0) + dat = {"The oven is empty
"} + else + dat = {"Ingredients:
[dat]"} + dat += {"

\ +
Turn on!
\ +
Eject ingredients!
\ +"} + + user << browse("oven Controls[dat]", "window=oven") + onclose(user, "oven") + return + + + +/*********************************** +* oven Menu Handling/Cooking +************************************/ + +/obj/machinery/oven/proc/cook() + if(stat & (NOPOWER|BROKEN)) + return + start() + if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run + if (!wzhzhzh(10)) + abort() + return + stop() + return + + var/datum/recipe/recipe = select_recipe(available_recipes,src) + var/obj/cooked + if (!recipe) + dirty += 1 + if (prob(max(10,dirty*5))) + if (!wzhzhzh(4)) + abort() + return + muck_start() + wzhzhzh(4) + muck_finish() + cooked = fail() + cooked.loc = src.loc + return + else if (has_extra_item()) + if (!wzhzhzh(4)) + abort() + return + broke() + cooked = fail() + cooked.loc = src.loc + return + else + if (!wzhzhzh(10)) + abort() + return + stop() + cooked = fail() + cooked.loc = src.loc + return + else + var/halftime = round(recipe.time/10/2) + if (!wzhzhzh(halftime)) + abort() + return + if (!wzhzhzh(halftime)) + abort() + cooked = fail() + cooked.loc = src.loc + return + cooked = recipe.make_food(src) + stop() + if(cooked) + cooked.loc = src.loc + for(var/i=1,i
Entry Won - 28/05/2554:
Hello. I am Crazy Ivan. Boss say I must write. I do good job fixing outpost. Is very good job. Much better than mines. Many nice people. I cause no trouble.

Entry Too - 05/06/2554:
I am finding problem with Booze-O-Mat. Is not problem. I solve very easy. Use yellow tool to make purple light go off. I am good engineer! Bartender will be very happy.

Entry Tree - 08/06/2554:
Bartender is not happy. Security man is not happy. Cannot feel legs, is very cold in freezer. Is not good. Table is jammed into door, have no tools. Is very not good. But, on bright side, found meat! Shall chew to keep spirits up.

Entry Fore - 12/06/2554:
Big nasty purple bug looked at me today. Make nervous. Blue wall wire can be broken, then bad thing happens. Very very bad thing. Man in orange spacesuit wave at me today too. He seem nice. Wonder who was?

Entry Fiv - 15/06/2554:
I eat cornflakes today. Is good day. Sun shine for a while. Was nice. I also take ride on disposals chute. Was fun, but tiny. Get clog out of pipes, was vodka bottle. Is empty. This make many sads.

Entry Sex: 19/06/2554:
Purple bugs jumpy today. When waved, get hiss. Maybe very bad. Maybe just ill. Do not know. Is science problem, is not engineer problem. I eat sandwich. Is glorious job. Wish to never end."; name = "Personal Log - Ivan Volodin"},/turf/simulated/floor/plating{broken = 1; heat_capacity = 1e+006; icon_state = "platingdmg3"; tag = "icon-platingdmg3"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) -"gy" = (/obj/machinery/light/small,/obj/structure/closet/toolcloset,/obj/item/clothing/gloves/yellow,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) +"gy" = (/obj/machinery/light/small,/obj/structure/closet/toolcloset,/obj/item/clothing/gloves/color/yellow,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "gz" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "gA" = (/obj/structure/cable,/obj/structure/computer3frame,/turf/simulated/floor/plating{heat_capacity = 1e+006},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) "gB" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/newscaster/security_unit{pixel_x = -30; pixel_y = 0},/turf/simulated/floor{dir = 8; heat_capacity = 1e+006; icon_state = "red"},/area/awaycontent/a2{has_gravity = 1; name = "MO19 Research"}) diff --git a/maps/RandomZLevels/undergroundoutpost45.dmm b/maps/RandomZLevels/undergroundoutpost45.dmm index f73599fa3f1..3af51dd136e 100644 --- a/maps/RandomZLevels/undergroundoutpost45.dmm +++ b/maps/RandomZLevels/undergroundoutpost45.dmm @@ -865,7 +865,7 @@ "qG" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 5},/turf/simulated/floor{heat_capacity = 1e+006},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) "qH" = (/obj/structure/closet/secure_closet{icon_broken = "secureengbroken"; icon_closed = "secureeng"; icon_locked = "secureeng1"; icon_off = "secureengoff"; icon_opened = "secureengopen"; icon_state = "secureeng1"; locked = 1; name = "engineer's locker"; req_access_txt = "201"},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/backpack/satchel_eng,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/mask/gas,/obj/item/clothing/glasses/meson,/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor{dir = 1; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) "qI" = (/obj/structure/window/reinforced{dir = 4; layer = 2.9},/obj/structure/closet/secure_closet/engineering_personal{req_access = list(201)},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 4},/turf/simulated/floor{dir = 1; heat_capacity = 1e+006; icon_state = "yellow"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) -"qJ" = (/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Atmospherics"; dir = 2; network = list("UO45")},/obj/structure/table,/obj/item/clothing/gloves/yellow,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/machinery/firealarm{dir = 2; pixel_x = 0; pixel_y = 24},/obj/item/device/multitool,/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 10},/turf/simulated/floor{dir = 1; heat_capacity = 1e+006; icon_state = "yellowcorner"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) +"qJ" = (/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Atmospherics"; dir = 2; network = list("UO45")},/obj/structure/table,/obj/item/clothing/gloves/color/yellow,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/machinery/firealarm{dir = 2; pixel_x = 0; pixel_y = 24},/obj/item/device/multitool,/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 10},/turf/simulated/floor{dir = 1; heat_capacity = 1e+006; icon_state = "yellowcorner"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) "qK" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1443; input_tag = "UO45_air_in"; name = "Mixed Air Supply Control"; output_tag = "UO45_air_out"; pressure_setting = 2000; sensors = list("UO45_air_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/turf/simulated/floor{dir = 9; heat_capacity = 1e+006; icon_state = "arrival"; tag = "icon-arrival (NORTHWEST)"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) "qL" = (/obj/machinery/atmospherics/trinary/mixer{dir = 1; node1_concentration = 0.8; node2_concentration = 0.2; on = 1; pixel_x = 0; pixel_y = 0; req_access = null; target_pressure = 4500},/turf/simulated/floor{dir = 5; heat_capacity = 1e+006; icon_state = "arrival"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) "qM" = (/obj/machinery/portable_atmospherics/scrubber,/obj/machinery/atmospherics/pipe/simple/visible{dir = 10},/turf/simulated/floor{dir = 2; heat_capacity = 1e+006; icon_state = "bot"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) @@ -1192,7 +1192,7 @@ "wV" = (/obj/machinery/light/small,/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) "wW" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/closet/secure_closet{desc = "It's a secure locker for personnel. The first card swiped gains control."; icon_broken = "cabinetdetective_broken"; icon_closed = "cabinetdetective"; icon_locked = "cabinetdetective_locked"; icon_off = "cabinetdetective_broken"; icon_opened = "cabinetdetective_open"; icon_state = "cabinetdetective"; locked = 0; name = "personal closet"; req_access_txt = "201"},/turf/simulated/floor/carpet{heat_capacity = 1e+006},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) "wX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/structure/closet/secure_closet/miner{req_access = list(201)},/turf/simulated/floor{dir = 8; heat_capacity = 1e+006; icon_state = "floorgrime"; tag = "icon-floorgrime (WEST)"},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) -"wY" = (/obj/structure/cable,/obj/machinery/power/apc{cell_type = 15000; dir = 2; locked = 0; name = "UO45 Mining APC"; pixel_x = 0; pixel_y = -25; req_access = null; start_charge = 100},/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/closet/secure_closet/engineering_personal{icon_broken = "miningsecbroken"; icon_closed = "miningsec"; icon_locked = "miningsec1"; icon_off = "miningsecoff"; icon_opened = "miningsecopen"; icon_state = "miningsec"; locked = 0; name = "miner's equipment"; req_access = list(201)},/obj/item/weapon/storage/backpack/satchel_eng,/obj/item/clothing/gloves/black,/turf/simulated/floor{dir = 2; heat_capacity = 1e+006; icon_state = "browncorner"},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) +"wY" = (/obj/structure/cable,/obj/machinery/power/apc{cell_type = 15000; dir = 2; locked = 0; name = "UO45 Mining APC"; pixel_x = 0; pixel_y = -25; req_access = null; start_charge = 100},/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/closet/secure_closet/engineering_personal{icon_broken = "miningsecbroken"; icon_closed = "miningsec"; icon_locked = "miningsec1"; icon_off = "miningsecoff"; icon_opened = "miningsecopen"; icon_state = "miningsec"; locked = 0; name = "miner's equipment"; req_access = list(201)},/obj/item/weapon/storage/backpack/satchel_eng,/obj/item/clothing/gloves/color/black,/turf/simulated/floor{dir = 2; heat_capacity = 1e+006; icon_state = "browncorner"},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) "wZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 2; heat_capacity = 1e+006; icon_state = "brown"},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) "xa" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-manifold-r-f (EAST)"; dir = 4},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{dir = 2; heat_capacity = 1e+006; icon_state = "brown"},/area/awaycontent/a4{has_gravity = 1; name = "UO45 Mining"}) "xb" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/cigarettes{pixel_x = -2},/obj/item/weapon/lighter/zippo{pixel_x = 4},/turf/simulated/floor{dir = 2; heat_capacity = 1e+006; icon_state = "neutralfull"},/area/awaycontent/a3{has_gravity = 1; name = "UO45 Engineering"}) diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm index 8c8f2dcedb7..d948e5ff464 100644 --- a/maps/cyberiad.dmm +++ b/maps/cyberiad.dmm @@ -2657,13 +2657,13 @@ "aZe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aZf" = (/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "aZg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"aZh" = (/obj/machinery/camera{c_tag = "Kitchen"; network = list("SS13")},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/cooker/cerealmaker,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"aZi" = (/obj/machinery/cooker/foodgrill,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"aZh" = (/obj/machinery/camera{c_tag = "Kitchen"; network = list("SS13")},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/candy_maker,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) +"aZi" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/grill,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "aZj" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "aZk" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "aZl" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "aZm" = (/obj/machinery/cooker/deepfryer,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) -"aZn" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/cooking,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) +"aZn" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/oven,/turf/simulated/floor{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/crew_quarters/kitchen) "aZo" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "aZp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics) "aZq" = (/turf/simulated/floor,/area/hydroponics) diff --git a/paradise.dme b/paradise.dme index 27274de9efa..21a34c8006a 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1117,14 +1117,20 @@ #include "code\modules\flufftext\Dreaming.dm" #include "code\modules\flufftext\Hallucination.dm" #include "code\modules\flufftext\TextFilters.dm" +#include "code\modules\food\candy_maker.dm" #include "code\modules\food\cereal_maker.dm" #include "code\modules\food\cooker.dm" #include "code\modules\food\customizables.dm" #include "code\modules\food\deep_fryer.dm" #include "code\modules\food\food_grill.dm" +#include "code\modules\food\grill_new.dm" #include "code\modules\food\icecream_vat.dm" #include "code\modules\food\oven.dm" +#include "code\modules\food\oven_new.dm" +#include "code\modules\food\recipes_candy.dm" +#include "code\modules\food\recipes_grill.dm" #include "code\modules\food\recipes_microwave.dm" +#include "code\modules\food\recipes_oven.dm" #include "code\modules\genetics\side_effects.dm" #include "code\modules\hydroponics\grown_inedible.dm" #include "code\modules\hydroponics\hydro_tools.dm" @@ -1542,6 +1548,7 @@ #include "code\modules\reagents\reagent_containers\food\drinks\drinkingglass.dm" #include "code\modules\reagents\reagent_containers\food\drinks\jar.dm" #include "code\modules\reagents\reagent_containers\food\drinks\bottle\robot.dm" +#include "code\modules\reagents\reagent_containers\food\snacks\candy.dm" #include "code\modules\reagents\reagent_containers\food\snacks\grown.dm" #include "code\modules\reagents\reagent_containers\food\snacks\meat.dm" #include "code\modules\reagents\reagent_containers\glass\bottle.dm"