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.
This commit is contained in:
danno "big fucking moron" brando
2017-07-18 18:35:01 +12:00
committed by oranges
parent 07ccb56852
commit 9e969fd016
16 changed files with 150 additions and 6 deletions
@@ -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" = (
+1 -1
View File
@@ -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"
+135
View File
@@ -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
+1 -1
View File
@@ -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>")
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 843 B

After

Width:  |  Height:  |  Size: 843 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

+1
View File
@@ -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"