tweaks to the bunsen burner, added a grinder (automated mortar and pestle)

Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
Cael_Aislinn
2012-08-11 20:25:54 +10:00
parent b72e96c08d
commit 782510645a
+158 -11
View File
@@ -795,6 +795,8 @@
/obj/machinery/disease2/incubator,
/obj/machinery/disease2/isolator,
/obj/machinery/disease2/biodestroyer,
/obj/item/device/cooker,
/obj/item/device/grinder,
/mob/living/simple_animal/livestock/cow
)
@@ -1477,27 +1479,34 @@
/// Bunsen Burner
////////////////////////////////////////////////////////////////////////////////
//make a subclass of this for cooking at some point, allow it to accept multiple containers etc
//todo: make a subclass of this for cooking, allow it to accept multiple containers simultaneously etc
//todo: use mini plasma tanks for fuel
/obj/item/device/cooker
name = "bunsen burner"
desc = "a small, gas-powered cooker."
desc = "A small, gas-powered cooker."
icon = 'chemical.dmi'
icon_state = "bunsen1" //spawns with an empty beaker already on it
var/obj/item/weapon/reagent_containers/held_container
var/obj/item/weapon/reagent_containers/glass/held_container
var/heating_stage = 0
var/active = 0
var/icon_empty = "bunsen0"
var/icon_full = "bunsen1"
var/icon_heating = "bunsen2"
var/icon_active = "bunsen2"
/obj/item/device/cooker/New()
held_container = new /obj/item/weapon/reagent_containers/glass/large/(src)
/obj/item/device/cooker/verb/toggle()
set src in oview(1)
set category = "Object"
set name = "Toggle cooker"
if(held_container)
if(!active)
usr << "\blue You switch the [src] on."
active = 1
icon_state = icon_heating
icon_state = icon_active
spawn(50)
heat()
else
@@ -1515,7 +1524,7 @@
return
if(active)
icon_state = icon_heating
icon_state = icon_active
spawn(50)
heat()
else
@@ -1523,17 +1532,14 @@
icon_state = icon_full
return
if(heating_stage++ > 5)
if(heating_stage++ >= 5)
visible_message("bubbles!")
held_container.reagents.handle_reactions(1)
else
visible_message("hisses and steams!")
/obj/item/device/cooker/New()
held_container = new /obj/item/weapon/reagent_containers/glass/large/(src)
/obj/item/device/cooker/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O, /obj/item/weapon/reagent_containers/))
if(istype(O, /obj/item/weapon/reagent_containers/glass/))
if(held_container)
//todo: empty O into held_container
user << "\red There is already a [held_container] on the [src]!"
@@ -1571,6 +1577,147 @@
else
..()
////////////////////////////////////////////////////////////////////////////////
/// Grinder
////////////////////////////////////////////////////////////////////////////////
//todo: make a thing like this for cooking, or just redo the kitchen machinery so that they make more sense
//this is a (mostly) non-retarded version of obj/machiner/reagentgrinder
var/list/grind_products = list()
/obj/item/device/grinder
name = "grinder"
desc = "A small, automated grinder for breaking things down into a powder."
icon = 'chemical.dmi'
icon_state = "grinder1" //spawns with an empty beaker already on it
var/obj/item/weapon/reagent_containers/glass/held_container
var/grinding_stage = 0
var/active = 0
var/icon_empty = "grinder0"
var/icon_full = "grinder1"
var/icon_active = "grinder2"
/obj/item/device/grinder/New()
held_container = new /obj/item/weapon/reagent_containers/glass/large/(src)
/obj/item/device/grinder/verb/toggle()
set src in oview(1)
set category = "Object"
set name = "Toggle grinder"
if(held_container)
if(!active)
usr << "\blue You switch the [src] on."
active = 1
icon_state = icon_active
spawn(50)
grind()
else
usr << "\blue You switch the [src] off."
active = 0
icon_state = icon_full
else
usr << "\red You can not toggle the [src] when it holds no container!"
/obj/item/device/grinder/verb/eject()
set src in oview(1)
set category = "Object"
set name = "Eject contents from grinder"
for(var/obj/item/I in src)
if(I == held_container)
continue
I.loc = src.loc
/obj/item/device/grinder/proc/grind()
if(!held_container)
grinding_stage = 0
active = 0
icon_state = icon_empty
return
if(active)
icon_state = icon_active
spawn(50)
grind()
else
grinding_stage = 0
icon_state = icon_full
return
var/grinding = 0
for(var/obj/item/I in src)
if(I == held_container)
continue
if( prob(max(grinding_stage * 20, 100)) )
var/pre_volume = held_container.reagents.total_volume
//shitty hardcode of things for now, but it's the fastest easiest solution
if(istype(I,/obj/item/weapon/rocksliver))
var/obj/item/weapon/rocksliver/R = I
held_container.reagents.add_reagent("ground_rock",10, R.geological_data)
else
held_container.reagents.add_reagent("chemical_waste",10)
del(I)
//slight hack to spill some chemical waste if it won't fit
if(pre_volume == held_container.reagents.total_volume)
var/obj/effect/decal/ash/A = new(src.loc)
A.name = "gritty powder"
A.desc = "Looks like some kind of chemical waste."
A.loc = pick(view(get_turf(src),1))
visible_message("<b>[src]</b> leaks some kind of powder.")
else
grinding = 1
if(grinding)
visible_message("<b>[src]</b> makes a clanking, clattering noise!")
else
visible_message("<b>[src]</b> makes a whirring noise!")
/obj/item/device/grinder/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O, /obj/item/weapon/reagent_containers/glass/))
if(held_container)
//todo: empty O into held_container
user << "\red There is already a [held_container] on the [src]!"
else
user.drop_item()
user << "\blue You place the [O] on the [src]."
held_container = O
O.loc = src
icon_state = icon_full
return 1
else if(!held_container)
user << "\red There is nothing to put [O] in to!"
return 1
else if (istype(O,/obj/item))
var/obj/item/I = O
if(I.w_class > 2)
user << "\red That won't fit in the [held_container]!"
else
//add random things to the container. when the burner is activated, they will melt
O.loc = held_container
return 1
else
user << "\blue You add the [O] to the [src]."
user.drop_item()
O.loc = src
return 1
return ..()
/obj/item/device/grinder/attack_hand(var/mob/user as mob)
if(held_container)
held_container.attack_hand(user)
if(held_container.loc != src)
held_container = null
icon_state = icon_empty
user << "\blue You remove the [held_container] from the [src]."
return 1
else
..()
////////////////////////////////////////////////////////////////////////////////