Files
2022-04-06 18:41:31 -03:00

166 lines
6.2 KiB
Plaintext

/*
April 3rd, 2014 marks the day this machine changed the face of the kitchen on NTStation13
God bless America.
___----------___
_-- ----__
- ---_
-___ ____---_ --_
__---_ .-_-- _ O _- -
- -_- --- -
- __---------___ -
- _---- -
- -_ _
` _- _
_ _-_ _-_ _
_- ____ -_ - --
- _-__ _ __--- ------- -
_- _- -_-- -_-- _
-_- _
_- _
-
*/
/obj/machinery/deepfryer
name = "deep fryer"
desc = "Deep fried <i>everything</i>."
icon = 'icons/obj/kitchen.dmi'
icon_state = "fryer_off"
density = TRUE
use_power = IDLE_POWER_USE
idle_power_usage = 5
layer = BELOW_OBJ_LAYER
var/obj/item/frying //What's being fried RIGHT NOW?
var/cook_time = 0
var/oil_use = 0.05 //How much cooking oil is used per tick
var/fry_speed = 1 //How quickly we fry food
var/frying_fried //If the object has been fried; used for messages
var/frying_burnt //If the object has been burnt
var/static/list/deepfry_blacklisted_items = typecacheof(list(
/obj/item/screwdriver,
/obj/item/crowbar,
/obj/item/wrench,
/obj/item/wirecutters,
/obj/item/multitool,
/obj/item/weldingtool,
/obj/item/reagent_containers/glass,
/obj/item/reagent_containers/syringe,
/obj/item/reagent_containers/food/condiment,
/obj/item/storage/part_replacer,
/obj/item/his_grace))
var/datum/looping_sound/deep_fryer/fry_loop
/obj/machinery/deepfryer/Initialize(mapload)
. = ..()
create_reagents(50, OPENCONTAINER)
reagents.add_reagent(/datum/reagent/consumable/cooking_oil, 25)
component_parts = list()
component_parts += new /obj/item/circuitboard/machine/deep_fryer(null)
component_parts += new /obj/item/stock_parts/micro_laser(null)
RefreshParts()
fry_loop = new(src, FALSE)
/obj/machinery/deepfryer/Destroy()
QDEL_NULL(fry_loop)
return ..()
/obj/machinery/deepfryer/RefreshParts()
var/oil_efficiency
for(var/obj/item/stock_parts/micro_laser/M in component_parts)
oil_efficiency += M.rating
oil_use = initial(oil_use) - (oil_efficiency * 0.0095)
fry_speed = oil_efficiency
/obj/machinery/deepfryer/examine(mob/user)
. = ..()
if(frying)
. += "You can make out \a [frying] in the oil."
if(in_range(user, src) || isobserver(user))
. += "<span class='notice'>The status display reads: Frying at <b>[fry_speed*100]%</b> speed.<br>Using <b>[oil_use*10]</b> units of oil per second.</span>"
/obj/machinery/deepfryer/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/reagent_containers/pill))
if(!reagents.total_volume)
to_chat(user, "<span class='warning'>There's nothing to dissolve [I] in!</span>")
return
user.visible_message("<span class='notice'>[user] drops [I] into [src].</span>", "<span class='notice'>You dissolve [I] in [src].</span>")
I.reagents.trans_to(src, I.reagents.total_volume, log = "pill into deep fryer")
qdel(I)
return
if(istype(I,/obj/item/clothing/head/mob_holder))
to_chat(user, "<span class='warning'>This does not fit in the fryer.</span>") // TODO: Deepfrying instakills mobs, spawns a whole deep-fried mob.
return
if(!reagents.has_reagent(/datum/reagent/consumable/cooking_oil))
to_chat(user, "<span class='warning'>[src] has no cooking oil to fry with!</span>")
return
if(I.resistance_flags & INDESTRUCTIBLE)
to_chat(user, "<span class='warning'>You don't feel it would be wise to fry [I]...</span>")
return
if(I.GetComponent(/datum/component/fried))
to_chat(user, "<span class='userdanger'>Your cooking skills are not up to the legendary Doublefry technique.</span>")
return
if(default_unfasten_wrench(user, I))
return
else if(default_deconstruction_screwdriver(user, "fryer_off", "fryer_off" ,I)) //where's the open maint panel icon?!
return
else if(I.reagents && !isfood(I))
return
else
if(is_type_in_typecache(I, deepfry_blacklisted_items) || HAS_TRAIT(I, TRAIT_NODROP) || (I.item_flags & (ABSTRACT | DROPDEL)))
return ..()
else if(!frying && user.transferItemToLoc(I, src))
frying = I
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
icon_state = "fryer_on"
fry_loop.start()
/obj/machinery/deepfryer/process()
..()
var/datum/reagent/consumable/cooking_oil/C = reagents.has_reagent(/datum/reagent/consumable/cooking_oil)
if(!C)
return
reagents.chem_temp = C.fry_temperature
if(frying)
reagents.trans_to(frying, oil_use, multiplier = fry_speed * 3) //Fried foods gain more of the reagent thanks to space magic
cook_time += fry_speed
if(cook_time >= 30 && !frying_fried)
frying_fried = TRUE //frying... frying... fried
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
audible_message("<span class='notice'>[src] dings!</span>")
else if (cook_time >= 60 && !frying_burnt)
frying_burnt = TRUE
visible_message("<span class='warning'>[src] emits an acrid smell!</span>")
/obj/machinery/deepfryer/attack_ai(mob/user)
return
/obj/machinery/deepfryer/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
if(frying)
if(frying.loc == src)
to_chat(user, "<span class='notice'>You eject [frying] from [src].</span>")
frying.fry(cook_time)
icon_state = "fryer_off"
frying.forceMove(drop_location())
if(Adjacent(user) && !issilicon(user))
user.put_in_hands(frying)
frying = null
cook_time = 0
frying_fried = FALSE
frying_burnt = FALSE
fry_loop.stop()
return
else if(user.pulling && user.a_intent == "grab" && iscarbon(user.pulling) && reagents.total_volume)
if(!user.CheckActionCooldown(CLICK_CD_MELEE))
return
if(user.grab_state < GRAB_AGGRESSIVE)
to_chat(user, "<span class='warning'>You need a better grip to do that!</span>")
return
var/mob/living/carbon/C = user.pulling
user.visible_message("<span class = 'danger'>[user] dunks [C]'s face in [src]!</span>")
reagents.reaction(C, TOUCH)
C.apply_damage(min(30, reagents.total_volume), BURN, BODY_ZONE_HEAD)
reagents.remove_any((reagents.total_volume/2))
C.DefaultCombatKnockdown(60)
user.DelayNextAction()
return ..()