diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index d4309bd48831..8258ceb5c384 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -1097,6 +1097,18 @@ . += aux_em_block //EMISSIVE CODE END + // NON-MODULE CHANGE START + if (limb.icon in GLOB.emissive_augmentations) + var/mutable_appearance/limb_emissive = emissive_appearance(limb.icon, "[limb.icon_state]_e", loc || owner || src, layer = limb.layer + 0.01, alpha = limb.alpha * 0.8) // Waaagh need layer BS to work + limb_emissive.dir = image_dir + . += limb_emissive + + if (aux_zone && (aux.icon in GLOB.emissive_augmentations)) + var/mutable_appearance/aux_emissive = emissive_appearance(aux.icon, "[aux.icon_state]_e", loc || owner || src, layer = aux.layer + 0.01, alpha = aux.alpha * 0.8) + aux_emissive.dir = image_dir + . += aux_emissive + // NON-MODULE CHANGE END + //No need to handle leg layering if dropped, we only face south anyways if(!dropped && ((body_zone == BODY_ZONE_R_LEG) || (body_zone == BODY_ZONE_L_LEG))) //Legs are a bit goofy in regards to layering, and we will need two images instead of one to fix that diff --git a/maplestation.dme b/maplestation.dme index 9bdcc1a57352..d01fed6c5662 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -6150,6 +6150,7 @@ #include "maplestation_modules\code\game\objects\items\bola.dm" #include "maplestation_modules\code\game\objects\items\captain_weapons.dm" #include "maplestation_modules\code\game\objects\items\cards_ids.dm" +#include "maplestation_modules\code\game\objects\items\cybernetics_paintkit.dm" #include "maplestation_modules\code\game\objects\items\holy_weapons.dm" #include "maplestation_modules\code\game\objects\items\locker_spawners.dm" #include "maplestation_modules\code\game\objects\items\plushes.dm" diff --git a/maplestation_modules/code/game/objects/items/cybernetics_paintkit.dm b/maplestation_modules/code/game/objects/items/cybernetics_paintkit.dm new file mode 100644 index 000000000000..5d14e7f8a849 --- /dev/null +++ b/maplestation_modules/code/game/objects/items/cybernetics_paintkit.dm @@ -0,0 +1,107 @@ +/// List of icons that have emissives. Bodyparts with this icon will try to look for an [icon_state]_e icon_state +GLOBAL_LIST_INIT(emissive_augmentations, list( + 'maplestation_modules/icons/mob/augmentation/monokai.dmi', + 'maplestation_modules/icons/mob/augmentation/bs2ipc.dmi', + 'maplestation_modules/icons/mob/augmentation/bshipc.dmi', +)) + +/obj/item/cybernetics_paintkit + name = "cybernetics paint kit" + desc = "A kit for quickly stylizing your cybernetic prosthetics. Comes with a set of paint, brushes and LEDs." + icon = 'maplestation_modules/icons/obj/devices.dmi' + icon_state = "cybernetics_paintkit" + var/static/list/full_recolor_options = 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', + "bishop" = 'maplestation_modules/icons/mob/augmentation/bshipc.dmi', + "bishop mk2" = 'maplestation_modules/icons/mob/augmentation/bs2ipc.dmi', + "hephaestus" = 'maplestation_modules/icons/mob/augmentation/hsiipc.dmi', + "hephaestus mk2" = 'maplestation_modules/icons/mob/augmentation/hi2ipc.dmi', + "mariin" = 'maplestation_modules/icons/mob/augmentation/mariinskyipc.dmi', + "MCG" = 'maplestation_modules/icons/mob/augmentation/mcgipc.dmi', + "SGM" = 'maplestation_modules/icons/mob/augmentation/sgmipc.dmi', + "WTM" = 'maplestation_modules/icons/mob/augmentation/wtmipc.dmi', + "XMG" = 'maplestation_modules/icons/mob/augmentation/xmgipc.dmi', + "zhenkov" = 'maplestation_modules/icons/mob/augmentation/zhenkovipc.dmi', + "zhenkov dark" = 'maplestation_modules/icons/mob/augmentation/zhenkovipc_dark.dmi', + "ZHP" = 'maplestation_modules/icons/mob/augmentation/zhpipc.dmi', + ) + + var/static/list/limb_recolor_options = list( + "monokai" = 'maplestation_modules/icons/mob/augmentation/monokai.dmi', + ) + +/obj/item/cybernetics_paintkit/attack_self(mob/living/carbon/user, modifiers) + . = ..() + if (!istype(user)) + return + + var/list/skins = list() + for(var/skin_option in full_recolor_options) + var/image/part_image = image(icon = full_recolor_options[skin_option], icon_state = "robotic_chest") + skins[skin_option] = part_image + + for(var/skin_option in limb_recolor_options) + var/image/part_image = image(icon = limb_recolor_options[skin_option], icon_state = "robotic_l_arm") + part_image.overlays += image(icon = limb_recolor_options[skin_option], icon_state = "robotic_l_hand") + skins[skin_option] = part_image + + var/choice = show_radial_menu(user, src, skins, require_near = TRUE) + if (!choice) + return + + var/list/parts_to_paint = list(BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_ARM, BODY_ZONE_R_LEG) + if (choice in full_recolor_options) + parts_to_paint |= list(BODY_ZONE_CHEST, BODY_ZONE_HEAD) + + for (var/part_zone in parts_to_paint) + var/obj/item/bodypart/limb = user.get_bodypart(part_zone) + if (!IS_ORGANIC_LIMB(limb)) + limb.icon_state = replacetext("[limb.icon_state]", "borg_", "robotic_") // This is awful but /tg/code insists on duplicating all limb textures(???) and I'll go insane making emissives for those + limb.base_icon_state = replacetext("[limb.base_icon_state]", "borg_", "robotic_") + limb.update_appearance() + limb.change_appearance((choice in full_recolor_options) ? full_recolor_options[choice] : limb_recolor_options[choice], greyscale = FALSE) + + playsound(user.loc, 'sound/effects/spray.ogg', 5, TRUE, 5) + balloon_alert(user, "style applied") + user.update_body() + qdel(src) + +/obj/item/cybernetics_paintkit/interact_with_atom(atom/interacting_with, mob/living/user) + if (!isbodypart(interacting_with)) + return NONE + var/obj/item/bodypart/limb = interacting_with + if (IS_ORGANIC_LIMB(limb)) + return + var/list/skins = list() + for(var/skin_option in full_recolor_options) + var/image/part_image = image(icon = full_recolor_options[skin_option], icon_state = "[limb.limb_id]_[limb.body_zone]") + skins[skin_option] = part_image + + if (limb.body_zone in list(BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_ARM, BODY_ZONE_R_LEG)) + for(var/skin_option in limb_recolor_options) + var/image/part_image = image(icon = limb_recolor_options[skin_option], icon_state = "[limb.limb_id]_[limb.body_zone]") + skins[skin_option] = part_image + + var/choice = show_radial_menu(user, src, skins, require_near = TRUE) + if (!choice) + return ITEM_INTERACT_BLOCKING + playsound(user.loc, 'sound/effects/spray.ogg', 5, TRUE, 5) + limb.icon_state = replacetext("[limb.icon_state]", "borg_", "robotic_") + limb.base_icon_state = replacetext("[limb.base_icon_state]", "borg_", "robotic_") + limb.update_appearance() + limb.change_appearance((choice in full_recolor_options) ? full_recolor_options[choice] : limb_recolor_options[choice], greyscale = FALSE) + balloon_alert(user, "style applied") + qdel(src) + return ITEM_INTERACT_SUCCESS + +/datum/design/cybernetics_paintkit + name = "Cybernetics Paintkit" + id = "cybernetics_paintkit" + build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE |MECHFAB + materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) + construction_time = 5 SECONDS + build_path = /obj/item/cybernetics_paintkit + category = list(RND_CATEGORY_INITIAL) diff --git a/maplestation_modules/code/modules/loadouts/loadout_items/_limb_datums.dm b/maplestation_modules/code/modules/loadouts/loadout_items/_limb_datums.dm index 4c1f8ecd32f2..3615072b2dc6 100644 --- a/maplestation_modules/code/modules/loadouts/loadout_items/_limb_datums.dm +++ b/maplestation_modules/code/modules/loadouts/loadout_items/_limb_datums.dm @@ -77,6 +77,22 @@ GLOBAL_LIST_INIT(limb_loadout_options, init_loadout_limb_options()) name = "Prosthetic Left Arm" limb_path = /obj/item/bodypart/arm/left/robot/surplus +/datum/limb_option_datum/bodypart/cybernetic_r_leg + name = "Cybernetic Right Leg" + limb_path = /obj/item/bodypart/leg/right/robot + +/datum/limb_option_datum/bodypart/cybernetic_l_leg + name = "Cybernetic Left Leg" + limb_path = /obj/item/bodypart/leg/left/robot + +/datum/limb_option_datum/bodypart/cybernetic_r_arm + name = "Cybernetic Right Arm" + limb_path = /obj/item/bodypart/arm/right/robot + +/datum/limb_option_datum/bodypart/cybernetic_l_arm + name = "Cybernetic Left Arm" + limb_path = /obj/item/bodypart/arm/left/robot + /datum/limb_option_datum/organ /datum/limb_option_datum/organ/New() diff --git a/maplestation_modules/code/modules/loadouts/loadout_items/loadout_datum_pocket.dm b/maplestation_modules/code/modules/loadouts/loadout_items/loadout_datum_pocket.dm index f906fe271f8e..71e62bfa548f 100644 --- a/maplestation_modules/code/modules/loadouts/loadout_items/loadout_datum_pocket.dm +++ b/maplestation_modules/code/modules/loadouts/loadout_items/loadout_datum_pocket.dm @@ -307,3 +307,7 @@ /datum/loadout_item/pocket_items/counter name = "Counter" item_path = /obj/item/toy/counter + +/datum/loadout_item/pocket_items/cybernetics_paintkit + name = "Cybernetics Paint Kit" + item_path = /obj/item/cybernetics_paintkit diff --git a/maplestation_modules/icons/mob/augmentation/bs2ipc.dmi b/maplestation_modules/icons/mob/augmentation/bs2ipc.dmi new file mode 100644 index 000000000000..c9cf33d303cd Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/bs2ipc.dmi differ diff --git a/maplestation_modules/icons/mob/augmentation/bshipc.dmi b/maplestation_modules/icons/mob/augmentation/bshipc.dmi new file mode 100644 index 000000000000..fe0c5c5b26db Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/bshipc.dmi differ diff --git a/maplestation_modules/icons/mob/augmentation/hi2ipc.dmi b/maplestation_modules/icons/mob/augmentation/hi2ipc.dmi new file mode 100644 index 000000000000..68903a28ad14 Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/hi2ipc.dmi differ diff --git a/maplestation_modules/icons/mob/augmentation/hsiipc.dmi b/maplestation_modules/icons/mob/augmentation/hsiipc.dmi new file mode 100644 index 000000000000..bbe605be748f Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/hsiipc.dmi differ diff --git a/maplestation_modules/icons/mob/augmentation/mariinskyipc.dmi b/maplestation_modules/icons/mob/augmentation/mariinskyipc.dmi new file mode 100644 index 000000000000..bcf3c0822952 Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/mariinskyipc.dmi differ diff --git a/maplestation_modules/icons/mob/augmentation/mcgipc.dmi b/maplestation_modules/icons/mob/augmentation/mcgipc.dmi new file mode 100644 index 000000000000..351f13a02c59 Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/mcgipc.dmi differ diff --git a/maplestation_modules/icons/mob/augmentation/monokai.dmi b/maplestation_modules/icons/mob/augmentation/monokai.dmi new file mode 100644 index 000000000000..9e47543ce6f7 Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/monokai.dmi differ diff --git a/maplestation_modules/icons/mob/augmentation/sgmipc.dmi b/maplestation_modules/icons/mob/augmentation/sgmipc.dmi new file mode 100644 index 000000000000..1e17b0af7ba7 Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/sgmipc.dmi differ diff --git a/maplestation_modules/icons/mob/augmentation/wtmipc.dmi b/maplestation_modules/icons/mob/augmentation/wtmipc.dmi new file mode 100644 index 000000000000..c724f801115f Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/wtmipc.dmi differ diff --git a/maplestation_modules/icons/mob/augmentation/xm2ipc.dmi b/maplestation_modules/icons/mob/augmentation/xm2ipc.dmi new file mode 100644 index 000000000000..b7873f6aa3f1 Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/xm2ipc.dmi differ diff --git a/maplestation_modules/icons/mob/augmentation/xmgipc.dmi b/maplestation_modules/icons/mob/augmentation/xmgipc.dmi new file mode 100644 index 000000000000..29adb5a780f6 Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/xmgipc.dmi differ diff --git a/maplestation_modules/icons/mob/augmentation/zhenkovipc.dmi b/maplestation_modules/icons/mob/augmentation/zhenkovipc.dmi new file mode 100644 index 000000000000..b29bc16345c5 Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/zhenkovipc.dmi differ diff --git a/maplestation_modules/icons/mob/augmentation/zhenkovipc_dark.dmi b/maplestation_modules/icons/mob/augmentation/zhenkovipc_dark.dmi new file mode 100644 index 000000000000..4b808bd3f7e2 Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/zhenkovipc_dark.dmi differ diff --git a/maplestation_modules/icons/mob/augmentation/zhpipc.dmi b/maplestation_modules/icons/mob/augmentation/zhpipc.dmi new file mode 100644 index 000000000000..ae63b29beb13 Binary files /dev/null and b/maplestation_modules/icons/mob/augmentation/zhpipc.dmi differ diff --git a/maplestation_modules/icons/obj/devices.dmi b/maplestation_modules/icons/obj/devices.dmi new file mode 100644 index 000000000000..f40e0fd6e346 Binary files /dev/null and b/maplestation_modules/icons/obj/devices.dmi differ