Files
SandPoot c07e94be66 push
2024-08-24 21:28:55 -03:00

150 lines
4.6 KiB
Plaintext

/obj/machinery/aug_manipulator
name = "\improper augment manipulator"
desc = "A machine for custom fitting augmentations, with in-built spraypainter."
icon = 'icons/obj/pda.dmi'
icon_state = "pdapainter"
density = TRUE
obj_integrity = 200
max_integrity = 200
var/obj/item/bodypart/storedpart
var/initial_icon_state
var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi',
"engineer" = 'icons/mob/augmentation/augments_engineer.dmi',
"security" = 'icons/mob/augmentation/augments_security.dmi',
"mining" = 'icons/mob/augmentation/augments_mining.dmi',
"Talon" = 'icons/mob/augmentation/cosmetic_prosthetic/talon.dmi',
"Nanotrasen" = 'icons/mob/augmentation/cosmetic_prosthetic/nanotrasen.dmi',
"Hephaesthus" = 'icons/mob/augmentation/cosmetic_prosthetic/hephaestus.dmi',
"Bishop" = 'icons/mob/augmentation/cosmetic_prosthetic/bishop.dmi',
"Xion" = 'icons/mob/augmentation/cosmetic_prosthetic/xion.dmi',
"Grayson" = 'icons/mob/augmentation/cosmetic_prosthetic/grayson.dmi',
"Cybersolutions" = 'icons/mob/augmentation/cosmetic_prosthetic/cybersolutions.dmi',
"Ward" = 'icons/mob/augmentation/cosmetic_prosthetic/ward.dmi'
)
/obj/machinery/aug_manipulator/examine(mob/user)
. = ..()
if(storedpart)
. += "<span class='notice'>Alt-click to eject the limb.</span>"
/obj/machinery/aug_manipulator/Initialize(mapload)
initial_icon_state = initial(icon_state)
return ..()
/obj/machinery/aug_manipulator/update_icon_state()
if(machine_stat & BROKEN)
icon_state = "[initial_icon_state]-broken"
return
if(powered())
icon_state = initial_icon_state
else
icon_state = "[initial_icon_state]-off"
/obj/machinery/aug_manipulator/update_overlays()
. = ..()
if(storedpart)
. += "[initial_icon_state]-closed"
/obj/machinery/aug_manipulator/Destroy()
QDEL_NULL(storedpart)
return ..()
/obj/machinery/aug_manipulator/on_deconstruction()
if(storedpart)
storedpart.forceMove(loc)
storedpart = null
/obj/machinery/aug_manipulator/contents_explosion(severity, target, origin)
if(storedpart)
storedpart.ex_act(severity, target, origin)
/obj/machinery/aug_manipulator/handle_atom_del(atom/A)
if(A == storedpart)
storedpart = null
update_icon()
/obj/machinery/aug_manipulator/attackby(obj/item/O, mob/user, params)
if(default_unfasten_wrench(user, O))
power_change()
return
else if(istype(O, /obj/item/bodypart))
var/obj/item/bodypart/B = O
if(!B.is_robotic_limb(FALSE))
to_chat(user, "<span class='warning'>The machine only accepts cybernetics!</span>")
return
if(storedpart)
to_chat(user, "<span class='warning'>There is already something inside!</span>")
return
else
O = user.get_active_held_item()
if(!user.transferItemToLoc(O, src))
return
storedpart = O
O.add_fingerprint(user)
update_icon()
else if(O.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM)
if(obj_integrity < max_integrity)
if(!O.tool_start_check(user, amount=0))
return
user.visible_message("[user] begins repairing [src].", \
"<span class='notice'>You begin repairing [src]...</span>", \
"<span class='italics'>You hear welding.</span>")
if(O.use_tool(src, user, 40, volume=50))
if(!(machine_stat & BROKEN))
return
to_chat(user, "<span class='notice'>You repair [src].</span>")
machine_stat &= ~BROKEN
obj_integrity = max(obj_integrity, max_integrity)
update_icon()
else
to_chat(user, "<span class='notice'>[src] does not need repairs.</span>")
else
return ..()
/obj/machinery/aug_manipulator/obj_break(damage_flag)
if(!(flags_1 & NODECONSTRUCT_1))
if(!(machine_stat & BROKEN))
machine_stat |= BROKEN
update_icon()
/obj/machinery/aug_manipulator/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
add_fingerprint(user)
if(storedpart)
var/augstyle = input(user, "Select style.", "Augment Custom Fitting") as null|anything in style_list_icons
if(!augstyle)
return
if(!in_range(src, user))
return
if(!storedpart)
return
storedpart.icon = style_list_icons[augstyle]
eject_part(user)
else
to_chat(user, "<span class='notice'>\The [src] is empty.</span>")
/obj/machinery/aug_manipulator/proc/eject_part(mob/living/user)
if(storedpart)
storedpart.forceMove(get_turf(src))
storedpart = null
update_icon()
else
to_chat(user, "<span class='notice'>[src] is empty.</span>")
/obj/machinery/aug_manipulator/AltClick(mob/living/user)
..()
if(!user.canUseTopic(src))
return
eject_part(user)
return TRUE
/obj/machinery/aug_manipulator/power_change()
..()
update_icon()