#define SAUNA_H2O_TEMP T20C + 20 #define SAUNA_LOG_FUEL 150 #define SAUNA_PAPER_FUEL 5 #define SAUNA_MAXIMUM_FUEL 3000 #define SAUNA_WATER_PER_WATER_UNIT 5 /obj/structure/sauna_oven name = "sauna oven" desc = "A modest sauna oven with rocks. Add some fuel, pour some water and enjoy the moment." icon = 'hyperstation/icons/obj/structures/sauna_oven.dmi' icon_state = "sauna_oven" density = TRUE anchored = TRUE resistance_flags = FIRE_PROOF var/lit = FALSE var/fuel_amount = 0 var/water_amount = 0 /obj/structure/sauna_oven/examine(mob/user) . = ..() . += "The rocks are [water_amount ? "moist" : "dry"]." . += "There's [fuel_amount ? "some fuel" : "no fuel"] in the oven." /obj/structure/sauna_oven/Destroy() if(lit) STOP_PROCESSING(SSobj, src) return ..() /obj/structure/sauna_oven/attack_hand(mob/user) . = ..() if(.) return if(lit) lit = FALSE STOP_PROCESSING(SSobj, src) user.visible_message("[user] turns on [src].", "You turn on [src].") else if (fuel_amount) lit = TRUE START_PROCESSING(SSobj, src) user.visible_message("[user] turns off [src].", "You turn off [src].") update_icon() /obj/structure/sauna_oven/update_overlays() . = ..() if(lit) . += "sauna_oven_on_overlay" /obj/structure/sauna_oven/update_icon() ..() icon_state = "[lit ? "sauna_oven_on" : initial(icon_state)]" /obj/structure/sauna_oven/attackby(obj/item/T, mob/user) if(T.tool_behaviour == TOOL_WRENCH) to_chat(user, "You begin to deconstruct [src].") if(T.use_tool(src, user, 60, volume=50)) to_chat(user, "You successfully deconstructed [src].") new /obj/item/stack/sheet/mineral/wood(get_turf(src), 30) qdel(src) return TRUE else if(istype(T, /obj/item/reagent_containers)) var/obj/item/reagent_containers/reagent_container = T if(!reagent_container.is_open_container()) return ..() if(reagent_container.reagents.has_reagent(/datum/reagent/water)) reagent_container.reagents.remove_reagent(/datum/reagent/water, 5) user.visible_message("[user] pours some \ water into [src].", "You pour \ some water to [src].") water_amount += 5 * SAUNA_WATER_PER_WATER_UNIT return TRUE else to_chat(user, "There's no water in [reagent_container]") return FALSE else if(istype(T, /obj/item/stack/sheet/mineral/wood)) var/obj/item/stack/sheet/mineral/wood/wood = T if(fuel_amount > SAUNA_MAXIMUM_FUEL) to_chat(user, "You can't fit any more of [T] in [src]!") return FALSE fuel_amount += SAUNA_LOG_FUEL * wood.amount wood.use(wood.amount) user.visible_message("[user] tosses some \ wood into [src].", "You add \ some fuel to [src].") return TRUE else if(istype(T, /obj/item/paper_bin)) var/obj/item/paper_bin/paper_bin = T user.visible_message("[user] throws [T] into \ [src].", "You add [T] to [src].\ ") fuel_amount += SAUNA_PAPER_FUEL * paper_bin.total_paper qdel(paper_bin) return TRUE else if(istype(T, /obj/item/paper)) user.visible_message("[user] throws [T] into \ [src].", "You throw [T] into [src].\ ") fuel_amount += SAUNA_PAPER_FUEL qdel(T) return TRUE return ..() /obj/structure/sauna_oven/process() if(water_amount) water_amount-- var/turf/pos = get_turf(src) if(pos) pos.atmos_spawn_air("water_vapor=10;TEMP=[SAUNA_H2O_TEMP]") fuel_amount-- if(fuel_amount <= 0) lit = FALSE STOP_PROCESSING(SSobj, src) update_icon() #undef SAUNA_H2O_TEMP #undef SAUNA_LOG_FUEL #undef SAUNA_PAPER_FUEL #undef SAUNA_MAXIMUM_FUEL #undef SAUNA_WATER_PER_WATER_UNIT