/obj/item/mech_component
icon = 'icons/mecha/mech_parts.dmi'
w_class = 5
pixel_x = -8
gender = PLURAL
var/on_mech_icon = 'icons/mecha/mech_parts.dmi'
var/decal
var/exosuit_desc_string
var/total_damage = 0
var/brute_damage = 0
var/burn_damage = 0
var/max_damage = 60
var/damage_state = 1
var/list/has_hardpoints = list()
var/power_use = 0
matter = list(DEFAULT_WALL_MATERIAL = 15000, MATERIAL_PLASTIC = 1000, MATERIAL_OSMIUM = 500)
dir = SOUTH
/obj/item/mech_component/pickup(mob/user)
pixel_x = initial(pixel_x)
pixel_y = initial(pixel_y)
return
/obj/item/mech_component/proc/set_colour(new_colour)
var/last_colour = color
color = new_colour
return color != last_colour
/obj/item/mech_component/emp_act(var/severity)
take_burn_damage(rand((10 - (severity*3)),15-(severity*4)))
for(var/obj/item/thing in contents)
thing.emp_act(severity)
/obj/item/mech_component/examine(mob/user)
. = ..()
if(ready_to_install())
to_chat(user, "It is ready for installation.")
else
show_missing_parts(user)
/obj/item/mech_component/set_dir()
..(SOUTH)
/obj/item/mech_component/proc/show_missing_parts(var/mob/user)
return
/obj/item/mech_component/proc/prebuild()
return
/obj/item/mech_component/proc/install_component(var/obj/item/thing, var/mob/user)
user.drop_from_inventory(thing)
thing.forceMove(src)
user.visible_message("\The [user] installs \the [thing] in \the [src].")
return 1
/obj/item/mech_component/proc/update_health()
total_damage = brute_damage + burn_damage
if(total_damage > max_damage) total_damage = max_damage
damage_state = Clamp(round((total_damage/max_damage) * 4), MECH_COMPONENT_DAMAGE_UNDAMAGED, MECH_COMPONENT_DAMAGE_DAMAGED_TOTAL)
/obj/item/mech_component/proc/ready_to_install()
return 1
/obj/item/mech_component/proc/repair_brute_damage(var/amt)
take_brute_damage(-amt)
/obj/item/mech_component/proc/repair_burn_damage(var/amt)
take_burn_damage(-amt)
/obj/item/mech_component/proc/take_brute_damage(var/amt)
brute_damage = max(0, brute_damage + amt)
update_health()
if(total_damage == max_damage)
take_component_damage(amt,0)
/obj/item/mech_component/proc/take_burn_damage(var/amt)
burn_damage = max(0, burn_damage + amt)
update_health()
if(total_damage == max_damage)
take_component_damage(0,amt)
/obj/item/mech_component/proc/take_component_damage(var/brute, var/burn)
var/list/damageable_components = list()
for(var/obj/item/robot_parts/robot_component/RC in contents)
damageable_components += RC
if(!damageable_components.len) return
var/obj/item/robot_parts/robot_component/RC = pick(damageable_components)
if(RC.take_damage(brute, burn))
qdel(RC)
update_components()
/obj/item/mech_component/attackby(var/obj/item/thing, var/mob/user)
if(thing.isscrewdriver())
if(contents.len)
var/obj/item/removed = pick(contents)
user.visible_message("\The [user] removes \the [removed] from \the [src].")
removed.forceMove(user.loc)
playsound(user.loc, 'sound/effects/pop.ogg', 50, 0)
update_components()
else
to_chat(user, "There is nothing to remove.")
return
if(thing.iswelder())
repair_brute_generic(thing, user)
return
if(thing.iscoil())
repair_burn_generic(thing, user)
return
return ..()
/obj/item/mech_component/proc/update_components()
return
/obj/item/mech_component/proc/repair_brute_generic(var/obj/item/weldingtool/WT, var/mob/user)
if(!istype(WT))
return
if(!brute_damage)
to_chat(user, "You inspect \the [src] but find nothing to weld.")
return
if(!WT.isOn())
to_chat(user, "Turn \the [WT] on, first.")
return
if(WT.remove_fuel(0, user))
var/repair_value = 15
if(brute_damage)
repair_brute_damage(repair_value)
to_chat(user, "You mend the damage to \the [src].")
playsound(user.loc, 'sound/items/Welder.ogg', 25, 1)
/obj/item/mech_component/proc/repair_burn_generic(var/obj/item/stack/cable_coil/CC, var/mob/user)
if(!istype(CC))
return
if(!burn_damage)
to_chat(user, "\The [src]'s wiring doesn't need replacing.")
return
var/needed_amount = 3
if(CC.get_amount() < needed_amount)
to_chat(user, "You need at least [needed_amount] unit\s of cable to repair this section.")
return
user.visible_message("\The [user] begins replacing the wiring of \the [src]...")
if(burn_damage)
if(QDELETED(CC) || QDELETED(src) || !CC.use(needed_amount))
return
repair_burn_damage(25)
to_chat(user, "You mend the damage to \the [src]'s wiring.")
playsound(user.loc, 'sound/items/Deconstruct.ogg', 25, 1)
return