mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-10 01:12:18 +00:00
/obj/effects is now /obj/effect. /obj/station_objects is now /obj/structure. Did a bit of minor blob work. The Bay 12 body bags were replaced with closets because having two sets of code that do almost the same thing is silly. Changed back a few of the last jobproc edits as the remove from list before assign was a check to see if the mob was fucked up and if it was remove it so we did not check it again as it would still be fucked up. The medbay/tox monkeys names are random once more. More random name monkeys will help with changeling and clean up the observe/mob menus. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2324 316c924e-a436-60f5-8080-3fe189b3f50e
373 lines
11 KiB
Plaintext
373 lines
11 KiB
Plaintext
|
|
/obj/machinery/microwave
|
|
name = "Microwave"
|
|
icon = 'kitchen.dmi'
|
|
icon_state = "mw"
|
|
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
|
|
|
|
|
|
// see code/modules/food/recipes_microwave.dm for recipes
|
|
|
|
/*******************
|
|
* Initialising
|
|
********************/
|
|
|
|
/obj/machinery/microwave/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)-/datum/recipe))
|
|
available_recipes+= new type
|
|
acceptable_items = new
|
|
acceptable_reagents = new
|
|
for (var/datum/recipe/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)
|
|
|
|
/*******************
|
|
* Item Adding
|
|
********************/
|
|
|
|
/obj/machinery/microwave/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
|
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 microwave.", \
|
|
"\blue You start to fix part of the microwave." \
|
|
)
|
|
if (do_after(user,20))
|
|
user.visible_message( \
|
|
"\blue [user] fixes part of the microwave.", \
|
|
"\blue You have fixed part of the microwave." \
|
|
)
|
|
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 microwave.", \
|
|
"\blue You start to fix part of the microwave." \
|
|
)
|
|
if (do_after(user,20))
|
|
user.visible_message( \
|
|
"\blue [user] fixes the microwave.", \
|
|
"\blue You have fixed the microwave." \
|
|
)
|
|
src.icon_state = "mw"
|
|
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 microwave is all dirty so can't be used!
|
|
if(istype(O, /obj/item/weapon/cleaner)) // If they're trying to clean it then let them
|
|
user.visible_message( \
|
|
"\blue [user] starts to clean the microwave.", \
|
|
"\blue You start to clean the microwave." \
|
|
)
|
|
if (do_after(user,20))
|
|
user.visible_message( \
|
|
"\blue [user] has cleaned the microwave.", \
|
|
"\blue You have cleaned the microwave." \
|
|
)
|
|
src.dirty = 0 // It's cleaned!
|
|
src.broken = 0 // just to be sure
|
|
src.icon_state = "mw"
|
|
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.before_take_item(O)
|
|
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/microwave/attack_paw(mob/user as mob)
|
|
return src.attack_hand(user)
|
|
|
|
/obj/machinery/microwave/attack_ai(mob/user as mob)
|
|
return 0
|
|
|
|
/obj/machinery/microwave/attack_hand(mob/user as mob)
|
|
user.machine = src
|
|
interact(user)
|
|
|
|
/*******************
|
|
* Microwave Menu
|
|
********************/
|
|
|
|
/obj/machinery/microwave/proc/interact(mob/user as mob) // The microwave Menu
|
|
var/dat = ""
|
|
if(src.broken > 0)
|
|
dat = {"<TT>Bzzzzttttt</TT>"}
|
|
else if(src.operating)
|
|
dat = {"<TT>Microwaving in progress!<BR>Please wait...!</TT>"}
|
|
else if(src.dirty==100)
|
|
dat = {"<TT>This microwave is dirty!<BR>Please clean it before use!</TT>"}
|
|
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/flour))
|
|
items_measures[display_name] = "cup of flour"
|
|
items_measures_p[display_name] = "cups of flour"
|
|
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 += {"<B>[capitalize(O)]:</B> [N] [lowertext(O)]\s<BR>"}
|
|
else
|
|
if (N==1)
|
|
dat += {"<B>[capitalize(O)]:</B> [N] [items_measures[O]]<BR>"}
|
|
else
|
|
dat += {"<B>[capitalize(O)]:</B> [N] [items_measures_p[O]]<BR>"}
|
|
|
|
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 += {"<B>[display_name]:</B> [R.volume] unit\s<BR>"}
|
|
|
|
if (items_counts.len==0 && reagents.reagent_list.len==0)
|
|
dat = {"<B>The microwave is empty</B><BR>"}
|
|
else
|
|
dat = {"<b>Ingredients:</b><br>[dat]"}
|
|
dat += {"<HR><BR>\
|
|
<A href='?src=\ref[src];action=cook'>Turn on!<BR>\
|
|
<A href='?src=\ref[src];action=dispose'>Eject ingredients!<BR>\
|
|
"}
|
|
|
|
user << browse("<HEAD><TITLE>Microwave Controls</TITLE></HEAD><TT>[dat]</TT>", "window=microwave")
|
|
onclose(user, "microwave")
|
|
return
|
|
|
|
|
|
|
|
/***********************************
|
|
* Microwave Menu Handling/Cooking
|
|
************************************/
|
|
|
|
/obj/machinery/microwave/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()
|
|
cooked.loc = src.loc
|
|
return
|
|
|
|
/obj/machinery/microwave/proc/wzhzhzh(var/seconds as num)
|
|
for (var/i=1 to seconds)
|
|
if (stat & (NOPOWER|BROKEN))
|
|
return 0
|
|
use_power(500)
|
|
sleep(10)
|
|
return 1
|
|
|
|
/obj/machinery/microwave/proc/has_extra_item()
|
|
for (var/obj/O in contents)
|
|
if ( \
|
|
!istype(O,/obj/item/weapon/reagent_containers/food) && \
|
|
!istype(O, /obj/item/weapon/grown) \
|
|
)
|
|
return 1
|
|
return 0
|
|
|
|
/obj/machinery/microwave/proc/start()
|
|
src.visible_message("\blue The microwave turns on.", "\blue You hear a microwave.")
|
|
src.operating = 1
|
|
src.icon_state = "mw1"
|
|
src.updateUsrDialog()
|
|
|
|
/obj/machinery/microwave/proc/abort()
|
|
src.operating = 0 // Turn it off again aferwards
|
|
src.icon_state = "mw"
|
|
src.updateUsrDialog()
|
|
|
|
/obj/machinery/microwave/proc/stop()
|
|
playsound(src.loc, 'ding.ogg', 50, 1)
|
|
src.operating = 0 // Turn it off again aferwards
|
|
src.icon_state = "mw"
|
|
src.updateUsrDialog()
|
|
|
|
/obj/machinery/microwave/proc/dispose()
|
|
for (var/obj/O in contents)
|
|
O.loc = src.loc
|
|
if (src.reagents.total_volume)
|
|
src.dirty++
|
|
src.reagents.clear_reagents()
|
|
usr << "\blue You dispose of the microwave contents."
|
|
src.updateUsrDialog()
|
|
|
|
/obj/machinery/microwave/proc/muck_start()
|
|
playsound(src.loc, 'splat.ogg', 50, 1) // Play a splat sound
|
|
src.icon_state = "mwbloody1" // Make it look dirty!!
|
|
|
|
/obj/machinery/microwave/proc/muck_finish()
|
|
playsound(src.loc, 'ding.ogg', 50, 1)
|
|
src.visible_message("\red The microwave gets covered in muck!")
|
|
src.dirty = 100 // Make it dirty so it can't be used util cleaned
|
|
src.flags = null //So you can't add condiments
|
|
src.icon_state = "mwbloody" // Make it look dirty too
|
|
src.operating = 0 // Turn it off again aferwards
|
|
src.updateUsrDialog()
|
|
|
|
/obj/machinery/microwave/proc/broke()
|
|
var/datum/effect/system/spark_spread/s = new
|
|
s.set_up(2, 1, src)
|
|
s.start()
|
|
src.icon_state = "mwb" // Make it look all busted up and shit
|
|
src.visible_message("\red The microwave breaks!") //Let them know they're stupid
|
|
src.broken = 2 // Make it broken so it can't be used util fixed
|
|
src.flags = null //So you can't add condiments
|
|
src.operating = 0 // Turn it off again aferwards
|
|
src.updateUsrDialog()
|
|
|
|
/obj/machinery/microwave/proc/fail()
|
|
var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src)
|
|
var/amount = 0
|
|
for (var/obj/O in contents-ffuu)
|
|
amount++
|
|
if (O.reagents)
|
|
var/id = O.reagents.get_master_reagent_id()
|
|
if (id)
|
|
amount+=O.reagents.get_reagent_amount(id)
|
|
del(O)
|
|
src.reagents.clear_reagents()
|
|
ffuu.reagents.add_reagent("carbon", amount)
|
|
ffuu.reagents.add_reagent("toxin", amount/10)
|
|
return ffuu
|
|
|
|
/obj/machinery/microwave/Topic(href, href_list)
|
|
if(..())
|
|
return
|
|
|
|
usr.machine = src
|
|
if(src.operating)
|
|
src.updateUsrDialog()
|
|
return
|
|
|
|
switch(href_list["action"])
|
|
if ("cook")
|
|
cook()
|
|
|
|
if ("dispose")
|
|
dispose()
|
|
return
|