mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 03:27:05 +01:00
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:
@@ -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
|
||||
..()
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user