From 24d5c885be7d20c0f21f3071dc90e4fc0a59f2c9 Mon Sep 17 00:00:00 2001 From: Lexanx <61974560+Lexanx@users.noreply.github.com> Date: Mon, 4 Dec 2023 18:00:33 +0300 Subject: [PATCH] [MIRROR] Additions to IPC --- baystation12.dme | 1 + code/_helpers/global_lists.dm | 4 +- .../loadout/lists/xenowear.dm | 7 - .../mob/living/carbon/human/examine.dm | 3 + code/modules/mob/living/carbon/human/human.dm | 1 + .../carbon/human/machine/screen_abilities.dm | 82 ++++ code/modules/organs/robolimbs.dm | 8 + code/modules/species/station/machine.dm | 6 + .../sprite_accessories/accessory_ipc.dm | 432 +++++++++++++++++- code/unit_tests/icon_tests.dm | 3 +- .../cyberlimbs/shellguard/shellguard_main.dmi | Bin 1458 -> 1453 bytes icons/mob/human_races/species/ipc/facial.dmi | Bin 0 -> 17566 bytes icons/mob/human_races/species/ipc/hair.dmi | Bin 0 -> 3322 bytes .../species/ipc/legacy_markings.dmi | Bin 0 -> 1081 bytes .../mob/human_races/species/ipc/markings.dmi | Bin 1081 -> 16806 bytes 15 files changed, 515 insertions(+), 32 deletions(-) create mode 100644 code/modules/mob/living/carbon/human/machine/screen_abilities.dm create mode 100644 icons/mob/human_races/species/ipc/facial.dmi create mode 100644 icons/mob/human_races/species/ipc/hair.dmi create mode 100644 icons/mob/human_races/species/ipc/legacy_markings.dmi diff --git a/baystation12.dme b/baystation12.dme index 8d1957ff8e168..c802301530442 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -2231,6 +2231,7 @@ #include "code\modules\mob\living\carbon\human\descriptors\descriptors_nabber.dm" #include "code\modules\mob\living\carbon\human\descriptors\descriptors_skrell.dm" #include "code\modules\mob\living\carbon\human\descriptors\descriptors_vox.dm" +#include "code\modules\mob\living\carbon\human\machine\screen_abilities.dm" #include "code\modules\mob\living\carbon\xenobiological\death.dm" #include "code\modules\mob\living\carbon\xenobiological\examine.dm" #include "code\modules\mob\living\carbon\xenobiological\hud.dm" diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 0b480b8131fb7..cfd3fcf1145ab 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -100,7 +100,7 @@ var/global/list/string_slot_flags = list( paths = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair for(var/path in paths) var/datum/sprite_accessory/hair/H = path - if (!initial(H.name)) + if (is_abstract(H) || !initial(H.name)) continue H = new path() GLOB.hair_styles_list[H.name] = H @@ -109,7 +109,7 @@ var/global/list/string_slot_flags = list( paths = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair for(var/path in paths) var/datum/sprite_accessory/facial_hair/H = path - if (!initial(H.name)) + if (is_abstract(H) || !initial(H.name)) continue H = new path() GLOB.facial_hair_styles_list[H.name] = H diff --git a/code/modules/client/preference_setup/loadout/lists/xenowear.dm b/code/modules/client/preference_setup/loadout/lists/xenowear.dm index 41edf676c3e21..7b3d8353adf84 100644 --- a/code/modules/client/preference_setup/loadout/lists/xenowear.dm +++ b/code/modules/client/preference_setup/loadout/lists/xenowear.dm @@ -86,13 +86,6 @@ sort_category = "Xenowear" // IPC clothing -/datum/gear/ipc_monitor - display_name = "display monitor (IPC)" - path = /obj/item/clothing/mask/monitor - sort_category = "Xenowear" - whitelisted = list(SPECIES_IPC) - cost = 0 - /datum/gear/suit/lab_xyn_machine display_name = "Xynergy labcoat" path = /obj/item/clothing/suit/storage/toggle/labcoat/xyn_machine diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 44b76ea59acbb..587f2d9834198 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -158,6 +158,9 @@ msg += E.species.disfigure_msg(src) else //Just in case they lack a species for whatever reason. msg += "[SPAN_WARNING("[P.His] face is horribly mangled!")]\n" + var/datum/robolimb/robohead = all_robolimbs[E.model] + if(length(robohead.display_text) && facial_hair_style == "Text") + msg += "The message \"[robohead.display_text]\" is displayed on its screen.\n" //splints for(var/organ in list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f059fb3cd8f6c..6b69e968c1fd6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -613,6 +613,7 @@ var/obj/item/organ/internal/cell/potato = internal_organs_by_name[BP_CELL] if(potato && potato.cell) stat("Battery charge:", "[potato.get_charge()]/[potato.cell.maxcharge]") + stat("Operating temperature:", "[round(bodytemperature-T0C)]°C") if(back && istype(back,/obj/item/rig)) var/obj/item/rig/suit = back diff --git a/code/modules/mob/living/carbon/human/machine/screen_abilities.dm b/code/modules/mob/living/carbon/human/machine/screen_abilities.dm new file mode 100644 index 0000000000000..454807aced556 --- /dev/null +++ b/code/modules/mob/living/carbon/human/machine/screen_abilities.dm @@ -0,0 +1,82 @@ +/mob/living/carbon/human/proc/MachineChangeScreen() + set category = "Abilities" + set name = "Change Screen" + if (stat) + to_chat(src, SPAN_WARNING("You're in no condition to do that.")) + return + var/obj/item/organ/external/head/head = get_organ(BP_HEAD) + var/datum/robolimb/robohead = all_robolimbs[head.model] + if (!head || head.is_stump()) + to_chat(src, SPAN_WARNING("You have no head!")) + return + if (head.is_broken()) + to_chat(src, SPAN_WARNING("Your head is broken!")) + return + if (!robohead.has_screen) + to_chat(src, SPAN_WARNING("Your head has no screen!")) + return + var/list/options = list() + for (var/datum/sprite_accessory/facial_hair/ipc/entry as anything in subtypesof(/datum/sprite_accessory/facial_hair/ipc)) + options += initial(entry.name) + var/choice = input(src, null, "Select Screen") as null | anything in options + if (!choice || !(choice in options)) + return + facial_hair_style = choice + update_hair() + + +/mob/living/carbon/human/proc/MachineDisableScreen() + set category = "Abilities" + set name = "Disable Screen" + if (stat) + to_chat(src, SPAN_WARNING("You're in no condition to do that.")) + return + var/obj/item/organ/external/head/head = get_organ(BP_HEAD) + var/datum/robolimb/robohead = all_robolimbs[head.model] + if (!head || head.is_stump()) + to_chat(src, SPAN_WARNING("You have no head!")) + return + if (head.is_broken()) + to_chat(src, SPAN_WARNING("Your head is broken!")) + return + if (!robohead.has_screen) + to_chat(src, SPAN_WARNING("Your head has no screen!")) + return + facial_hair_style = "Off" + update_hair() + + +/mob/living/carbon/human/proc/MachineShowText() + set category = "Abilities" + set name = "Set Screen Text" + if (stat) + to_chat(src, SPAN_WARNING("You're in no condition to do that.")) + return + var/obj/item/organ/external/head/head = get_organ(BP_HEAD) + var/datum/robolimb/robohead = all_robolimbs[head.model] + if (!head || head.is_stump()) + to_chat(src, SPAN_WARNING("You have no head!")) + return + if (head.is_broken()) + to_chat(src, SPAN_WARNING("Your head is broken!")) + return + if (!robohead.has_screen) + to_chat(src, SPAN_WARNING("Your head has no screen!")) + return + var/text = input(src, null, "Display Text") as null | text + if (isnull(text)) + return + text = sanitize(text, MAX_DESC_LEN) + robohead.display_text = text + facial_hair_style = "Text" + if (!length(text)) + facial_hair_style = "Off" + update_hair() + if (HAS_FLAGS(head?.flags_inv, HIDEFACE) || HAS_FLAGS(wear_mask?.flags_inv, HIDEFACE)) + return + if (!length(text)) + return + visible_message( + "\The [src] displays \"[text]\" on their screen.", + "You display \"[text]\" on your screen." + ) diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm index 19eb534477b38..790e07297b4ee 100644 --- a/code/modules/organs/robolimbs.dm +++ b/code/modules/organs/robolimbs.dm @@ -25,6 +25,8 @@ var/global/datum/robolimb/basic_robolimb var/list/restricted_to = list() var/list/applies_to_part = list() //TODO. var/list/allowed_bodytypes = list(SPECIES_HUMAN, SPECIES_IPC, SPECIES_SKRELL, SPECIES_UNATHI) + var/has_screen = FALSE + var/display_text /datum/robolimb/bishop company = "Bishop" @@ -50,6 +52,7 @@ var/global/datum/robolimb/basic_robolimb icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi' allowed_bodytypes = list(SPECIES_IPC) unavailable_at_fab = 1 + has_screen = TRUE /datum/robolimb/hephaestus company = "Hephaestus Industries" @@ -76,6 +79,7 @@ var/global/datum/robolimb/basic_robolimb allowed_bodytypes = list(SPECIES_IPC) can_eat = null unavailable_at_fab = 1 + has_screen = TRUE /datum/robolimb/zenghu company = "Zeng-Hu" @@ -114,6 +118,7 @@ var/global/datum/robolimb/basic_robolimb allowed_bodytypes = list(SPECIES_IPC) can_eat = null unavailable_at_fab = 1 + has_screen = TRUE /datum/robolimb/nanotrasen company = "NanoTrasen" @@ -144,6 +149,7 @@ var/global/datum/robolimb/basic_robolimb allowed_bodytypes = list(SPECIES_IPC) can_eat = null unavailable_at_fab = 1 + has_screen = TRUE /datum/robolimb/morpheus company = "Morpheus" @@ -192,6 +198,7 @@ var/global/datum/robolimb/basic_robolimb unavailable_at_fab = 1 has_eyes = FALSE allowed_bodytypes = list(SPECIES_IPC) + has_screen = TRUE /datum/robolimb/veymed company = "Vey-Med" @@ -219,6 +226,7 @@ var/global/datum/robolimb/basic_robolimb applies_to_part = list(BP_HEAD) unavailable_at_fab = 1 allowed_bodytypes = list(SPECIES_IPC) + has_screen = TRUE /datum/robolimb/vox company = "Arkmade" diff --git a/code/modules/species/station/machine.dm b/code/modules/species/station/machine.dm index 0cca443c01c65..92f56902f0c4e 100644 --- a/code/modules/species/station/machine.dm +++ b/code/modules/species/station/machine.dm @@ -102,6 +102,12 @@ bodyfall_sound = 'sound/effects/bodyfall_machine.ogg' + inherent_verbs = list( + /mob/living/carbon/human/proc/MachineChangeScreen, + /mob/living/carbon/human/proc/MachineDisableScreen, + /mob/living/carbon/human/proc/MachineShowText + ) + /datum/species/machine/handle_death(mob/living/carbon/human/H) ..() if(istype(H.wear_mask,/obj/item/clothing/mask/monitor)) diff --git a/code/modules/sprite_accessories/accessory_ipc.dm b/code/modules/sprite_accessories/accessory_ipc.dm index 9501fe1937dea..972cbf08ad9bb 100644 --- a/code/modules/sprite_accessories/accessory_ipc.dm +++ b/code/modules/sprite_accessories/accessory_ipc.dm @@ -1,35 +1,423 @@ /datum/sprite_accessory/marking/ipc icon = 'icons/mob/human_races/species/ipc/markings.dmi' - name = "Bishop Alt. Optics (IPC)" - icon_state = "bishop_alt_optics" - body_parts = list(BP_HEAD) species_allowed = list(SPECIES_IPC) + gender = NEUTER + do_coloration = TRUE -/datum/sprite_accessory/marking/ipc/takahashi - name = "Ward Takahashi Alt. Optics (IPC)" - icon_state = "wardtakahashi_alt_optics" +/datum/sprite_accessory/marking/ipc/head + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/ipc/torso + body_parts = list(BP_CHEST,BP_GROIN) + +/datum/sprite_accessory/marking/ipc/arms + body_parts = list(BP_R_ARM,BP_R_HAND,BP_L_ARM,BP_L_HAND) + +/datum/sprite_accessory/marking/ipc/legs + body_parts = list(BP_R_LEG,BP_R_FOOT,BP_L_LEG,BP_L_FOOT) + +//SHELLGUARD +/datum/sprite_accessory/marking/ipc/head/shellguard + name = "Shellguard Colored Head" + icon_state = "shellguard" + +/datum/sprite_accessory/marking/ipc/head/shellguard_alt + name = "Shellguard Colored Alt. Head" + icon_state = "shellguard_alt" + +/datum/sprite_accessory/marking/ipc/head/shellguard_monitor + name = "Shellguard Colored Monitor" + icon_state = "shellguard_monitor" + +/datum/sprite_accessory/marking/ipc/torso/shellguard + name = "Shellguard Colored Torso" + icon_state = "shellguard" + +/datum/sprite_accessory/marking/ipc/arms/shellguard + name = "Shellguard Colored Arms" + icon_state = "shellguard" + +/datum/sprite_accessory/marking/ipc/legs/shellguard + name = "Shellguard Colored Legs" + icon_state = "shellguard" -/datum/sprite_accessory/marking/ipc/xion - name = "Xion Alt. Optics (IPC)" +//XION +/datum/sprite_accessory/marking/ipc/head/xion + name = "Xion Colored Head" + icon_state = "xion" + +/datum/sprite_accessory/marking/ipc/head/xion_alt + name = "Xion Colored Alt. Head" + icon_state = "xion_alt" + +/datum/sprite_accessory/marking/ipc/head/xion_monitor + name = "Xion Colored Monitor" + icon_state = "xion_monitor" + +/datum/sprite_accessory/marking/ipc/head/xion_eyes + name = "Xion Alt. Optics" icon_state = "xion_alt_optics" -/datum/sprite_accessory/marking/ipc/hephaestus - name = "Hephaestus Alt. Optics (IPC)" +/datum/sprite_accessory/marking/ipc/torso/xion + name = "Xion Colored Torso" + icon_state = "xion" + +/datum/sprite_accessory/marking/ipc/arms/xion + name = "Xion Colored Arms" + icon_state = "xion" + +/datum/sprite_accessory/marking/ipc/legs/xion + name = "Xion Colored Legs" + icon_state = "xion" + +//XION ECON +/datum/sprite_accessory/marking/ipc/head/xion_e + name = "Xion Econ. Colored Head" + icon_state = "xion_e" + +/datum/sprite_accessory/marking/ipc/torso/xion_e + name = "Xion Econ. Colored Torso" + icon_state = "xion_e" + +/datum/sprite_accessory/marking/ipc/arms/xion_e + name = "Xion Econ. Colored Arms" + icon_state = "xion_e" + +/datum/sprite_accessory/marking/ipc/legs/xion_e + name = "Xion Econ. Colored Legs" + icon_state = "xion_e" + +//WARD-TAKAHASHI +/datum/sprite_accessory/marking/ipc/head/wt + name = "Ward-Takahashi GMB Colored Head" + icon_state = "wt" + +/datum/sprite_accessory/marking/ipc/head/wt_alt + name = "Ward-Takahashi GMB Colored Alt. Head" + icon_state = "wt_alt" + +/datum/sprite_accessory/marking/ipc/head/wt_monitor + name = "Ward-Takahashi GMB Colored Monitor" + icon_state = "wt_monitor" + +/datum/sprite_accessory/marking/ipc/head/wt_eyes + name = "Ward Takahashi Alt. Optics" + icon_state = "wardtakahashi_alt_optics" + +/datum/sprite_accessory/marking/ipc/torso/wt + name = "Ward-Takahashi GMB Colored Torso" + icon_state = "wt" + +/datum/sprite_accessory/marking/ipc/arms/wt + name = "Ward-Takahashi GMB Colored Arms" + icon_state = "wt" + +/datum/sprite_accessory/marking/ipc/legs/wt + name = "Ward-Takahashi GMB Colored Legs" + icon_state = "wt" + +//BISHOP +/datum/sprite_accessory/marking/ipc/head/bishop_eyes + name = "Bishop Alt. Optics" + icon_state = "bishop_alt_optics" + +/datum/sprite_accessory/marking/ipc/head/bishop + name = "Bishop Head Color Accents" + icon_state = "bishop" + +/datum/sprite_accessory/marking/ipc/head/bishop_monitor + name = "Bishop Monitor Color Accents" + icon_state = "bishop_monitor" + +/datum/sprite_accessory/marking/ipc/torso/bishop + name = "Bishop Torso Color Accents" + icon_state = "bishop" + +/datum/sprite_accessory/marking/ipc/arms/bishop + name = "Bishop Arms Color Accents" + icon_state = "bishop" + +/datum/sprite_accessory/marking/ipc/legs/bishop + name = "Bishop Legs Color Accents" + icon_state = "bishop" + +//BISHOP ROOK +/datum/sprite_accessory/marking/ipc/head/b_rook + name = "Bishop Rook Colored Facepanel" + icon_state = "bishop_rook" + +/datum/sprite_accessory/marking/ipc/torso/b_rook + name = "Bishop Rook Torso Color Accents" + icon_state = "bishop_rook" + +/datum/sprite_accessory/marking/ipc/arms/b_rook + name = "Bishop Rook Arms Color Accents" + icon_state = "bishop_rook" + +/datum/sprite_accessory/marking/ipc/legs/b_rook + name = "Bishop Rook Legs Color Accents" + icon_state = "bishop_rook" + +//HEPHAESTUS +/datum/sprite_accessory/marking/ipc/head/hephaestus + name = "Hephaestus Colored Head" + icon_state = "hephaestus" + +/datum/sprite_accessory/marking/ipc/head/hephaestus_alt + name = "Hephaestus Colored Alt. Head" + icon_state = "hephaestus_alt" + +/datum/sprite_accessory/marking/ipc/head/hephaestus_monitor + name = "Hephaestus Colored Monitor" + icon_state = "hephaestus_monitor" + +/datum/sprite_accessory/marking/ipc/head/hephaestus_eyes + name = "Hephaestus Alt. Optics" icon_state = "hephaestus_alt_optics" -/datum/sprite_accessory/marking/ipc/morpheus - name = "Morpheus Optics (IPC)" +/datum/sprite_accessory/marking/ipc/torso/hephaestus + name = "Hephaestus Colored Torso" + icon_state = "hephaestus" + +/datum/sprite_accessory/marking/ipc/arms/hephaestus + name = "Hephaestus Colored Arms" + icon_state = "hephaestus" + +/datum/sprite_accessory/marking/ipc/legs/hephaestus + name = "Hephaestus Colored Legs" + icon_state = "hephaestus" + +//TITAN +/datum/sprite_accessory/marking/ipc/head/titan + name = "Hephaestus Titan Colored Head" + icon_state = "titan" + +/datum/sprite_accessory/marking/ipc/torso/titan + name = "Hephaestus Titan Colored Torso" + icon_state = "titan" + +/datum/sprite_accessory/marking/ipc/arms/titan + name = "Hephaestus Titan Colored Arms" + icon_state = "titan" + +/datum/sprite_accessory/marking/ipc/legs/titan + name = "Hephaestus Titan Colored Legs" + icon_state = "titan" + +//MORPHEUS +/datum/sprite_accessory/marking/ipc/head/morpheus_eyes + name = "Morpheus Optics" icon_state = "morpheus_optics" -/datum/sprite_accessory/marking/ipc/antenna - name = "Angled Antennas (IPC)" - icon_state = "antenna_dual" - blend = ICON_MULTIPLY +/datum/sprite_accessory/marking/ipc/head/airborne_face + name = "Morpheus Airborne Faceplate" + icon_state = "airborne_face" + +/datum/sprite_accessory/marking/ipc/head/blitz_optics + name = "Morpheus Blitz Optics" + icon_state = "blitz_optics" + +/datum/sprite_accessory/marking/ipc/head/prime_optics + name = "Morpheus Prime Optics" + icon_state = "prime_optics" + +//ZENG-HU SPIRIT +/datum/sprite_accessory/marking/ipc/head/zenghu + name = "Zeng-Hu Spirit Head Color Accents" + icon_state = "zenghu" + +/datum/sprite_accessory/marking/ipc/torso/zenghu + name = "Zeng-Hu Spirit Torso Color Accents" + icon_state = "zenghu" + +/datum/sprite_accessory/marking/ipc/arms/zenghu + name = "Zeng-Hu Spirit Arms Color Accents" + icon_state = "zenghu" + +/datum/sprite_accessory/marking/ipc/legs/zenghu + name = "Zeng-Hu Spirit Legs Color Accents" + icon_state = "zenghu" + + +/datum/sprite_accessory/facial_hair/ipc + abstract_type = /datum/sprite_accessory/facial_hair/ipc + icon = 'icons/mob/human_races/species/ipc/facial.dmi' + species_allowed = list(SPECIES_IPC) + gender = NEUTER + do_coloration = FALSE + +/datum/sprite_accessory/facial_hair/ipc/off + name = "Off" + icon_state = "ipc_blank" + +/datum/sprite_accessory/facial_hair/ipc/ipc_text + name = "Text" + icon_state = "ipc_text" + +/datum/sprite_accessory/facial_hair/ipc/red + name = "Red" + icon_state = "ipc_red" + +/datum/sprite_accessory/facial_hair/ipc/blue + name = "Blue" + icon_state = "ipc_blue" + +/datum/sprite_accessory/facial_hair/ipc/shower + name = "Shower" + icon_state = "ipc_shower" + +/datum/sprite_accessory/facial_hair/ipc/orange + name = "Orange" + icon_state = "ipc_orange" + +/datum/sprite_accessory/facial_hair/ipc/nature + name = "Nature" + icon_state = "ipc_nature" + +/datum/sprite_accessory/facial_hair/ipc/eight + name = "Eight" + icon_state = "ipc_eight" + +/datum/sprite_accessory/facial_hair/ipc/Yellow + name = "Yellow face" + icon_state = "ipc_yellow" + +/datum/sprite_accessory/facial_hair/ipc/goggles + name = "Goggles" + icon_state = "ipc_goggles" + +/datum/sprite_accessory/facial_hair/ipc/eight + name = "Eight" + icon_state = "ipc_eight" + +/datum/sprite_accessory/facial_hair/ipc/heart + name = "Heart" + icon_state = "ipc_heart" + +/datum/sprite_accessory/facial_hair/ipc/monoeye + name = "Mono Eye" + icon_state = "ipc_monoeye" + +/datum/sprite_accessory/facial_hair/ipc/breakout + name = "Breakout" + icon_state = "ipc_breakout" + +/datum/sprite_accessory/facial_hair/ipc/eight + name = "Static" + icon_state = "ipc_static" + +/datum/sprite_accessory/facial_hair/ipc/question + name = "Question" + icon_state = "ipc_purple" + +/datum/sprite_accessory/facial_hair/ipc/smiley + name = "Smiley" + icon_state = "ipc_smiley" + +/datum/sprite_accessory/facial_hair/ipc/datebase + name = "Database" + icon_state = "ipc_database" + +/datum/sprite_accessory/facial_hair/ipc/frowny + name = "Frowny" + icon_state = "ipc_frowny" + +/datum/sprite_accessory/facial_hair/ipc/crt + name = "CRT" + icon_state = "ipc_crt" + +/datum/sprite_accessory/facial_hair/ipc/scroll + name = "Scroll" + icon_state = "ipc_scroll" + +/datum/sprite_accessory/facial_hair/ipc/tetris + name = "Tetris" + icon_state = "ipc_tetris" + +/datum/sprite_accessory/facial_hair/ipc/dot + name = "Dot" + icon_state = "ipc_dot" + +/datum/sprite_accessory/facial_hair/ipc/four + name = "Four" + icon_state = "ipc_four" + +/datum/sprite_accessory/facial_hair/ipc/eye + name = "Eye" + icon_state = "ipc_eye" + +/datum/sprite_accessory/facial_hair/ipc/eyes + name = "Eyes" + icon_state = "ipc_eyes" + +/datum/sprite_accessory/facial_hair/ipc/color_array + name = "Color Array" + icon_state = "ipc_color_array" + +/datum/sprite_accessory/facial_hair/ipc/array_horizontal + name = "Array Horizontal" + icon_state = "ipc_color_array_horizontal" + +/datum/sprite_accessory/facial_hair/ipc/array_vertical + name = "Array Vertical" + icon_state = "ipc_color_array_vertical" + +/datum/sprite_accessory/facial_hair/ipc/television + name = "Television" + icon_state = "ipc_television" + +/datum/sprite_accessory/facial_hair/ipc/miami + name = "Miami" + icon_state = "ipc_miami" + +/datum/sprite_accessory/facial_hair/ipc/waiting + name = "Waiting" + icon_state = "ipc_waiting" + +/datum/sprite_accessory/facial_hair/ipc/smoking + name = "Smoking" + icon_state = "ipc_smoking" + + +/datum/sprite_accessory/hair/ipc + abstract_type = /datum/sprite_accessory/hair/ipc + icon = 'icons/mob/human_races/species/ipc/hair.dmi' + species_allowed = list(SPECIES_IPC) + gender = NEUTER + do_coloration = FALSE + +/datum/sprite_accessory/hair/ipc/ipc_antennae + name = "Antennae" + icon_state = "antennae" + +/datum/sprite_accessory/hair/ipc/ipc_tv_antennae + name = "T.V. Antennae" + icon_state = "tvantennae" + +/datum/sprite_accessory/hair/ipc/ipc_tesla_antennae + name = "Tesla Antennae" + icon_state = "tesla" + +/datum/sprite_accessory/hair/ipc/ipc_light + name = "Head Light" + icon_state = "light" + +/datum/sprite_accessory/hair/ipc/ipc_side_lights + name = "Side Lights" + icon_state = "sidelights" + +/datum/sprite_accessory/hair/ipc/ipc_side_cyber_head + name = "Cyber Pipes" + icon_state = "cyberhead" + +/datum/sprite_accessory/hair/ipc/ipc_side_antlers + name = "Antlers" + icon_state = "antlers" -/datum/sprite_accessory/marking/ipc/antenna/left - name = "Left Antenna (IPC)" - icon_state = "antenna_left" +/datum/sprite_accessory/hair/ipc/ipc_side_drone_eyes + name = "Drone Eyes" + icon_state = "droneeyes" -/datum/sprite_accessory/marking/ipc/antenna/right - name = "Right Antenna (IPC)" - icon_state = "antenna_right" +/datum/sprite_accessory/hair/ipc/ipc_crowned + name = "Crowned" + icon_state = "crowned" diff --git a/code/unit_tests/icon_tests.dm b/code/unit_tests/icon_tests.dm index e4b91b718811c..9f30992c2a92e 100644 --- a/code/unit_tests/icon_tests.dm +++ b/code/unit_tests/icon_tests.dm @@ -55,7 +55,8 @@ for(var/sprite_accessory_type in subtypesof(sprite_accessory_main_type)) var/failed = FALSE var/datum/sprite_accessory/sat = sprite_accessory_type - + if (is_abstract(sat)) + continue var/sat_name = initial(sat.name) if(sat_name) group_by(sprite_accessories_by_name, sat_name, sat) diff --git a/icons/mob/human_races/cyberlimbs/shellguard/shellguard_main.dmi b/icons/mob/human_races/cyberlimbs/shellguard/shellguard_main.dmi index f27b5246b4f6c682e4ee36e56a7209d98e330cfb..0b72d3aebbaa2ba69b97e7d4e6bfce0569865a24 100644 GIT binary patch delta 1180 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 P143T5yVP*;PQt$cP*3)S literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/species/ipc/legacy_markings.dmi b/icons/mob/human_races/species/ipc/legacy_markings.dmi new file mode 100644 index 0000000000000000000000000000000000000000..8d59d24802a8d0e7dee134a06982949b9682f34f GIT binary patch literal 1081 zcmV-91jhS`P)U3Lz`%GAm)QUS00DGTPE!Ct=GbNc007r|R9JLGWpiV4 zX>fFDZ*Bkpc$}q@!3x4K42I9`QxtcdqHb3&G7%5%6-Knt6z4YD==AOF9JmQ04(a6& zq6N2urxQF>mH0E$`3}MevgVhWtAaG>zZs&=5QYA9 zj&o@%!iyU;MLg|~L0A!>V=o!H&btT-#-e~sUm*X&e;{o0n!}JB58sJEtr9`lR}-~0`LE%HAh;SvXbx-Lh^mgz>H<> z>M*}n%CRo9ZUrd)L1{-C7^r5++FJuWpjP55Y4*l5%~EVh1;s^v!HQwteSY z$xS^K4PZh;Hg}W+Qx9O2Ct%6}Ol|TV{^$d^^acO`00000>{UnKC)`%uCl{mWrl{}H z_X*p`moKcOXE*%-QyF$;uT*_Lv%`hLZOHCVW`_&KPguTeUU$nAoNjm*-OxY4Lks`_ z00000diyl(_a#i7KX)|a?tU*C!9)FhtA2?3KORI0UfY8NcTan9{vTU$ z{@a5ne^#~2-~SIX&kW$uJdfJ%tF8Oq`5)(dy#oLM000000KAXPyXU8N;qw8D`e)UB z>P7Deb@SXbU7)D_wSFGe=c~PF1zzS4Tl1Ho{cfHqPrtUuOFYICuxy$r$RU4tfZ=I( zKH{l&>f5pd5<}mRkkw3`000000002Eb{DSCPi!%pHO+GqzCM0YFRSh|q(0w1w{2LT z?=H994T;y+|Jv%E{ZF3N>FZU~EOULwcmkTXJz1ZQuK#s7ATcccvROrQc(<~7d)DQD zjPVb2JOBUy0002^?AEi*rH3%k`pxh8?N`16xe0FG{Qe(cecdZCcmb|`1rDR%gbT1a z{yBY1as^h|!vD1O`CR_o4(FeMbla?2Wex}&4oD>L$!gkFP@isAxdQ@ID@Z>^eLg$~ zP;x*3000000ANg;u>3ekanQ*Mn1zAE`IpWhSHI8ZpDcdS3T)N`Cy=Pm59*x_Q!u@f zTf+GdUw~O0`y2xnATL!wFFak4uFs!4pfh5m5}y&iS5xtQV~jC(J^%m!00000icNAp z;EI_4mo`of|9V~bD+WgJ)#ncY00000z-RRv%BL1rJThv100000NkvXXu0mjfeihr& literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/species/ipc/markings.dmi b/icons/mob/human_races/species/ipc/markings.dmi index 8d59d24802a8d0e7dee134a06982949b9682f34f..b8a932a960ec669c8ef66dbe03c17e524f311edb 100644 GIT binary patch literal 16806 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 literal 1081 zcmV-91jhS`P)U3Lz`%GAm)QUS00DGTPE!Ct=GbNc007r|R9JLGWpiV4 zX>fFDZ*Bkpc$}q@!3x4K42I9`QxtcdqHb3&G7%5%6-Knt6z4YD==AOF9JmQ04(a6& zq6N2urxQF>mH0E$`3}MevgVhWtAaG>zZs&=5QYA9 zj&o@%!iyU;MLg|~L0A!>V=o!H&btT-#-e~sUm*X&e;{o0n!}JB58sJEtr9`lR}-~0`LE%HAh;SvXbx-Lh^mgz>H<> z>M*}n%CRo9ZUrd)L1{-C7^r5++FJuWpjP55Y4*l5%~EVh1;s^v!HQwteSY z$xS^K4PZh;Hg}W+Qx9O2Ct%6}Ol|TV{^$d^^acO`00000>{UnKC)`%uCl{mWrl{}H z_X*p`moKcOXE*%-QyF$;uT*_Lv%`hLZOHCVW`_&KPguTeUU$nAoNjm*-OxY4Lks`_ z00000diyl(_a#i7KX)|a?tU*C!9)FhtA2?3KORI0UfY8NcTan9{vTU$ z{@a5ne^#~2-~SIX&kW$uJdfJ%tF8Oq`5)(dy#oLM000000KAXPyXU8N;qw8D`e)UB z>P7Deb@SXbU7)D_wSFGe=c~PF1zzS4Tl1Ho{cfHqPrtUuOFYICuxy$r$RU4tfZ=I( zKH{l&>f5pd5<}mRkkw3`000000002Eb{DSCPi!%pHO+GqzCM0YFRSh|q(0w1w{2LT z?=H994T;y+|Jv%E{ZF3N>FZU~EOULwcmkTXJz1ZQuK#s7ATcccvROrQc(<~7d)DQD zjPVb2JOBUy0002^?AEi*rH3%k`pxh8?N`16xe0FG{Qe(cecdZCcmb|`1rDR%gbT1a z{yBY1as^h|!vD1O`CR_o4(FeMbla?2Wex}&4oD>L$!gkFP@isAxdQ@ID@Z>^eLg$~ zP;x*3000000ANg;u>3ekanQ*Mn1zAE`IpWhSHI8ZpDcdS3T)N`Cy=Pm59*x_Q!u@f zTf+GdUw~O0`y2xnATL!wFFak4uFs!4pfh5m5}y&iS5xtQV~jC(J^%m!00000icNAp z;EI_4mo`of|9V~bD+WgJ)#ncY00000z-RRv%BL1rJThv100000NkvXXu0mjfeihr&