Files
Paradise/code/modules/smithing/machinery/lava_furnace.dm
T
kyunkyunkyunandGitHub b0463d3c83 Convert most spans to defines (#31080)
* spanish?

* aaaagain

* keep maptext

* Update robot_items.dm

* Update span_defines.dm

* compiles

* Update silicon_mob.dm

* compile
2025-12-13 23:55:48 +00:00

88 lines
3.1 KiB
Plaintext

/obj/machinery/smithing/lava_furnace
name = "lava furnace"
desc = "A furnace that uses the innate heat of lavaland to reheat metal that has not been fully reshaped."
icon_state = "furnace_off"
operation_sound = 'sound/surgery/cautery1.ogg'
/// How much the device heats the component
var/heat_amount = 5
/obj/machinery/smithing/lava_furnace/Initialize(mapload)
. = ..()
// Stock parts
component_parts = list()
component_parts += new /obj/item/circuitboard/lava_furnace(null)
component_parts += new /obj/item/stock_parts/micro_laser(null)
component_parts += new /obj/item/stock_parts/micro_laser(null)
component_parts += new /obj/item/stock_parts/micro_laser(null)
component_parts += new /obj/item/stock_parts/micro_laser(null)
component_parts += new /obj/item/assembly/igniter(null)
RefreshParts()
/obj/machinery/smithing/lava_furnace/RefreshParts()
var/operation_mult = 0
var/heat_mult = 0
for(var/obj/item/stock_parts/component in component_parts)
operation_mult += OPERATION_SPEED_MULT_PER_RATING * component.rating
heat_mult += 0.25 * component.rating
// Update our values
operation_time = max(ROUND_UP(initial(operation_time) * (1.3 - operation_mult)), 2)
heat_amount = round(5 * heat_mult)
/obj/machinery/smithing/lava_furnace/update_overlays()
. = ..()
overlays.Cut()
if(panel_open)
. += "furnace_wires"
/obj/machinery/smithing/lava_furnace/update_icon_state()
. = ..()
if(operating)
icon_state = "furnace"
else
icon_state = "furnace_off"
/obj/machinery/smithing/lava_furnace/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/I)
. = ..()
update_icon(UPDATE_OVERLAYS)
/obj/machinery/smithing/lava_furnace/operate(loops, mob/living/user)
if(working_component.heat > 10)
to_chat(user, SPAN_NOTICE("[working_component] is already well heated."))
return
if(working_component.hammer_time <= 0)
to_chat(user, SPAN_NOTICE("[working_component] is already fully shaped."))
return
..()
working_component.heat_up(heat_amount)
/obj/machinery/smithing/lava_furnace/attack_hand(mob/user)
. = ..()
if(!allowed(user) && !isobserver(user))
to_chat(user, SPAN_WARNING("Access denied."))
return FINISH_ATTACK
if(operating)
to_chat(user, SPAN_WARNING("[src] is currently operating!"))
return
if(!working_component)
to_chat(user, SPAN_WARNING("There is nothing in [src]!"))
return
operate(operation_time, user)
return FINISH_ATTACK
/obj/machinery/smithing/lava_furnace/special_attack(mob/user, mob/living/target)
var/obj/item/organ/external/head/head = target.get_organ(BODY_ZONE_HEAD)
if(!istype(head))
to_chat(user, SPAN_WARNING("This person doesn't have a head!"))
return FALSE
target.visible_message(SPAN_DANGER("[user] pushes [target]'s head into [src]!"), \
SPAN_USERDANGER("[user] pushes your head into [src]! The heat is agonizing!"))
var/armor = target.run_armor_check(def_zone = BODY_ZONE_HEAD, armor_type = MELEE, armor_penetration_percentage = 50)
target.apply_damage(40, BURN, BODY_ZONE_HEAD, armor)
target.adjust_fire_stacks(5)
target.IgniteMob()
target.emote("scream")
playsound(src, operation_sound, 50, TRUE)
add_attack_logs(user, target, "Burned with [src]")
return TRUE