Augment Styles/Changes (#28977)
Full augment sets on the left, partial mix/match on the right. This PR aims to make augmenting slightly more interesting than just turning your body grey, while also begin reminiscent of the cyborg parts that are actually used in the process. Using the augment manipulator now found in robotics, one can insert a part and custom fit it to one of three different styles (security, engineering, and standard). Mix and match if you so choose, or make a full set for maximum style.
@@ -26568,6 +26568,7 @@
|
||||
layer = 3;
|
||||
pixel_x = 32
|
||||
},
|
||||
/obj/machinery/aug_manipulator,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/robotics/lab)
|
||||
"bkp" = (
|
||||
|
||||
@@ -93138,6 +93138,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/aug_manipulator,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/science/robotics/lab)
|
||||
"dxQ" = (
|
||||
|
||||
@@ -71169,6 +71169,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/aug_manipulator,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/science/robotics/lab)
|
||||
"cFe" = (
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
#define BODYPART_ROBOTIC 2
|
||||
|
||||
#define DEFAULT_BODYPART_ICON_ORGANIC 'icons/mob/human_parts_greyscale.dmi'
|
||||
#define DEFAULT_BODYPART_ICON_ROBOTIC 'icons/mob/augments.dmi'
|
||||
#define DEFAULT_BODYPART_ICON_ROBOTIC 'icons/mob/augmentation/augments.dmi'
|
||||
|
||||
#define MONKEY_BODYPART "monkey"
|
||||
#define ALIEN_BODYPART "alien"
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
/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
|
||||
anchored = 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')
|
||||
|
||||
|
||||
/obj/machinery/aug_manipulator/Initialize()
|
||||
initial_icon_state = initial(icon_state)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/aug_manipulator/update_icon()
|
||||
cut_overlays()
|
||||
|
||||
if(stat & BROKEN)
|
||||
icon_state = "[initial_icon_state]-broken"
|
||||
return
|
||||
|
||||
if(storedpart)
|
||||
add_overlay("[initial_icon_state]-closed")
|
||||
|
||||
if(powered())
|
||||
icon_state = initial_icon_state
|
||||
else
|
||||
icon_state = "[initial_icon_state]-off"
|
||||
|
||||
/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)
|
||||
if(storedpart)
|
||||
storedpart.ex_act(severity, target)
|
||||
|
||||
/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.status != BODYPART_ROBOTIC)
|
||||
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(istype(O, /obj/item/weapon/weldingtool) && user.a_intent != INTENT_HARM)
|
||||
var/obj/item/weapon/weldingtool/WT = O
|
||||
if(obj_integrity < max_integrity)
|
||||
if(WT.remove_fuel(0,user))
|
||||
user.visible_message("[user] begins repairing [src].", \
|
||||
"<span class='notice'>You begin repairing [src]...</span>", \
|
||||
"<span class='italics'>You hear welding.</span>")
|
||||
playsound(src, WT.usesound, 40, 1)
|
||||
if(do_after(user,40*WT.toolspeed, TRUE, target = src))
|
||||
if(!WT.isOn() || !(stat & BROKEN))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You repair [src].</span>")
|
||||
playsound(src, 'sound/items/welder2.ogg', 50, 1)
|
||||
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 & NODECONSTRUCT))
|
||||
if(!(stat & BROKEN))
|
||||
stat |= BROKEN
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/aug_manipulator/attack_hand(mob/user)
|
||||
if(!..())
|
||||
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
|
||||
else
|
||||
eject_part(user)
|
||||
|
||||
/obj/machinery/aug_manipulator/power_change()
|
||||
..()
|
||||
update_icon()
|
||||
@@ -241,6 +241,10 @@
|
||||
var/dynamic_hair_suffix = "" //if this is non-null, and hair+suffix matches an iconstate, then we render that hair instead
|
||||
var/dynamic_fhair_suffix = ""
|
||||
|
||||
//for augmented heads
|
||||
if(HD.status == BODYPART_ROBOTIC)
|
||||
return
|
||||
|
||||
//we check if our hat or helmet hides our facial hair.
|
||||
if(H.head)
|
||||
var/obj/item/I = H.head
|
||||
|
||||
@@ -306,7 +306,7 @@
|
||||
else
|
||||
limb.icon_state = "[animal_origin]_[body_zone]"
|
||||
else
|
||||
limb.icon = 'icons/mob/augments.dmi'
|
||||
limb.icon = 'icons/mob/augmentation/augments.dmi'
|
||||
limb.icon_state = "[animal_origin]_[body_zone]"
|
||||
return
|
||||
|
||||
|
||||
@@ -165,27 +165,27 @@
|
||||
/obj/item/bodypart/l_arm/robot/surplus
|
||||
name = "surplus prosthetic left arm"
|
||||
desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing."
|
||||
icon = 'icons/mob/surplus_augments.dmi'
|
||||
icon = 'icons/mob/augmentation/surplus_augments.dmi'
|
||||
icon_state = "l_arm"
|
||||
max_damage = 20
|
||||
|
||||
/obj/item/bodypart/r_arm/robot/surplus
|
||||
name = "surplus prosthetic right arm"
|
||||
desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing."
|
||||
icon = 'icons/mob/surplus_augments.dmi'
|
||||
icon = 'icons/mob/augmentation/surplus_augments.dmi'
|
||||
icon_state = "r_arm"
|
||||
max_damage = 20
|
||||
|
||||
/obj/item/bodypart/l_leg/robot/surplus
|
||||
name = "surplus prosthetic left leg"
|
||||
desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing."
|
||||
icon = 'icons/mob/surplus_augments.dmi'
|
||||
icon = 'icons/mob/augmentation/surplus_augments.dmi'
|
||||
icon_state = "l_leg"
|
||||
max_damage = 20
|
||||
|
||||
/obj/item/bodypart/r_leg/robot/surplus
|
||||
name = "surplus prosthetic right leg"
|
||||
desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing."
|
||||
icon = 'icons/mob/surplus_augments.dmi'
|
||||
icon = 'icons/mob/augmentation/surplus_augments.dmi'
|
||||
icon_state = "r_leg"
|
||||
max_damage = 20
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
qdel(tool)
|
||||
target.update_body_parts()
|
||||
target.updatehealth()
|
||||
target.update_hair()
|
||||
add_logs(user, target, "augmented", addition="by giving him new [parse_zone(target_zone)] INTENT: [uppertext(user.a_intent)]")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[target] has no organic [parse_zone(target_zone)] there!</span>")
|
||||
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 843 B After Width: | Height: | Size: 843 B |
|
Before Width: | Height: | Size: 1.7 KiB |
@@ -515,6 +515,7 @@
|
||||
#include "code\game\machinery\ai_slipper.dm"
|
||||
#include "code\game\machinery\airlock_control.dm"
|
||||
#include "code\game\machinery\announcement_system.dm"
|
||||
#include "code\game\machinery\aug_manipulator.dm"
|
||||
#include "code\game\machinery\autolathe.dm"
|
||||
#include "code\game\machinery\bank_machine.dm"
|
||||
#include "code\game\machinery\Beacon.dm"
|
||||
|
||||