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 f27b5246b4f6c..0b72d3aebbaa2 100644 Binary files a/icons/mob/human_races/cyberlimbs/shellguard/shellguard_main.dmi and b/icons/mob/human_races/cyberlimbs/shellguard/shellguard_main.dmi differ diff --git a/icons/mob/human_races/species/ipc/facial.dmi b/icons/mob/human_races/species/ipc/facial.dmi new file mode 100644 index 0000000000000..ff74516fd6cd1 Binary files /dev/null and b/icons/mob/human_races/species/ipc/facial.dmi differ diff --git a/icons/mob/human_races/species/ipc/hair.dmi b/icons/mob/human_races/species/ipc/hair.dmi new file mode 100644 index 0000000000000..7b92779ebac3a Binary files /dev/null and b/icons/mob/human_races/species/ipc/hair.dmi differ 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 0000000000000..8d59d24802a8d Binary files /dev/null and b/icons/mob/human_races/species/ipc/legacy_markings.dmi differ diff --git a/icons/mob/human_races/species/ipc/markings.dmi b/icons/mob/human_races/species/ipc/markings.dmi index 8d59d24802a8d..b8a932a960ec6 100644 Binary files a/icons/mob/human_races/species/ipc/markings.dmi and b/icons/mob/human_races/species/ipc/markings.dmi differ