New baseline IPC sprites and different IPC heads. (#18800)

New IPC heads can be selected by changing the head's prosthetic type, as
you would with a robot limb. All sprites by Noble Row.

Relevant to everyone else, this PR adds functionality to whitelist
sprite_accessories to certain prosthetic types, so you could
theoretically add Bishop-only markings for humans.

To-do:

- [x] Facial hair sanitization so that selecting a new head properly
removes the screens.
- [x] Marking sanitization so that selecting an invalid head for the
markings resets them.

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
This commit is contained in:
Matt Atlas
2024-04-05 22:19:58 +00:00
committed by GitHub
co-authored by Matt Atlas
parent 183b2c67ef
commit 97bda936f2
17 changed files with 323 additions and 84 deletions
@@ -17,27 +17,34 @@
*/
/datum/sprite_accessory
var/icon // the icon file the accessory is located in
var/icon_state // the icon_state of the accessory
var/preview_state // a custom preview state for whatever reason
var/name // the preview name of the accessory
// Determines if the accessory will be skipped or included in random hair generations
/// The icon file the accessory is located in.
var/icon
/// The icon_state of the accessory.
var/icon_state
/// A custom preview state if wanted.
var/preview_state
/// The name of the accessory.
var/name
/// Determines if the accessory will be skipped or included in random hair generation.
var/gender = NEUTER
// Restrict some styles to specific species. This requires the type path of the datum of the species in question, as well as all children of that datum if applicable.
var/list/species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie)
// Whether or not the accessory can be affected by colouration
var/do_colouration = 1
// The blend mode to use when blending this icon with its color. May not apply to all sprite_accessory types, and must be a ICON_* blend mode, not BLEND_*!
/// Restrict some styles to specific species. This requires the type path of the datum of the species in question, as well as all children if applicable.
var/list/species_allowed = list(
/datum/species/human,
/datum/species/human/offworlder,
/datum/species/machine/shell,
/datum/species/machine/shell/rogue,
/datum/species/zombie
)
/// Whether or not the accessory can be affected by colouration.
var/do_colouration = TRUE
/// The blend mode to use when blending this icon with its color. May not apply to all sprite_accessory types, and must be a ICON_* blend mode, not BLEND_*!
var/icon_blend_mode = ICON_ADD
//This is to provide safe names to use for hair/sprite to text. See Skrell tentacles for example
var/chatname = null
/// This is to provide safe names to use for hair/sprite to text. See Skrell tentacles for an example.
var/chatname
/// The organ the markings go over. Used to check if a marking can go over a certain organ. Must be an organ tag.
var/required_organ
/// Required prosthetic types to use this marking, if any. List is "any of". Null means no robotize type required. Empty list means there must be NO robotize type.
var/list/robotize_type_required
/*
@@ -4141,8 +4148,15 @@ Follow by example and make good judgement based on length which list to include
name = "blank IPC screen"
icon_state = "ipc_blank"
species_allowed = list(/datum/species/machine)
robotize_type_required = list()
required_organ = BP_HEAD
gender = NEUTER
/datum/sprite_accessory/facial_hair/ipc_screen_blank/none
name = "no IPC screen"
icon_state = "none"
robotize_type_required = list(PROSTHETIC_HOPLAN, PROSTHETIC_RAXUS, PROSTHETIC_INDRICUS)
/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_blue
name = "blue IPC screen"
icon_state = "ipc_blue"
@@ -4545,8 +4559,6 @@ Follow by example and make good judgement based on length which list to include
var/is_genetic = TRUE // If TRUE, the marking is considered genetic and is embedded into DNA.
var/is_painted = FALSE // If TRUE, the marking can be put on prosthetics/robolimbs.
var/robotize_type_required // if set, this marking will only apply when put on a valid robolimb type
/datum/sprite_accessory/marking/bandage_head
name = "Bandage, head 1"
icon_state = "bandage1"
@@ -6172,6 +6184,56 @@ Follow by example and make good judgement based on length which list to include
body_parts = list(BP_GROIN)
do_colouration = FALSE
// Baseline markings.
/datum/sprite_accessory/marking/baseline_head
name = "Baseline - Raxus Primary Colors"
icon = 'icons/mob/human_races/markings_baseline.dmi'
icon_state = "raxus_primary"
is_painted = TRUE
body_parts = list(BP_HEAD)
robotize_type_required = list(PROSTHETIC_RAXUS)
/datum/sprite_accessory/marking/baseline_head/lights
name = "Baseline - Raxus Head Lights"
icon_state = "raxus_lights"
/datum/sprite_accessory/marking/baseline_head/indricus
name = "Baseline - Indricus Primary Colors"
icon_state = "indricus_primary"
robotize_type_required = list(PROSTHETIC_INDRICUS)
/datum/sprite_accessory/marking/baseline_head/indricus/lights
name = "Baseline - Indricus Lights"
icon_state = "indricus_lights"
/datum/sprite_accessory/marking/baseline_head/hoplan
name = "Baseline - Hoplan Primary Colors"
icon_state = "indricus_primary"
robotize_type_required = list(PROSTHETIC_HOPLAN)
/datum/sprite_accessory/marking/baseline_head/hoplan/lights
name = "Baseline - Hoplan Lights"
icon_state = "hoplan_lights"
/datum/sprite_accessory/marking/baseline_color
name = "Baseline - Primary Colors"
icon = 'icons/mob/human_races/markings_baseline.dmi'
icon_state = "machine_primary"
is_painted = TRUE
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_CHEST,BP_HEAD)
/datum/sprite_accessory/marking/baseline_color/arm
name = "Baseline - Primary Arm Colors"
body_parts = list(BP_R_ARM, BP_L_ARM, BP_R_HAND, BP_L_HAND)
/datum/sprite_accessory/marking/baseline_color/arm
name = "Baseline - Primary Leg Colors"
body_parts = list(BP_R_LEG, BP_L_LEG, BP_R_LEG, BP_L_LEG)
/datum/sprite_accessory/marking/baseline_color/chest
name = "Baseline - Primary Head Colors"
body_parts = list(BP_HEAD)
//bishop
/datum/sprite_accessory/marking/bishop_lights
name = "Bishop - Lights Colour"
@@ -6180,7 +6242,7 @@ Follow by example and make good judgement based on length which list to include
icon_blend_mode = ICON_MULTIPLY
is_painted = TRUE
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_HEAD)
robotize_type_required = PROSTHETIC_BC
robotize_type_required = list(PROSTHETIC_BC)
/datum/sprite_accessory/marking/bishop_lights/bishop_mask
name = "Bishop - Face Mask"
@@ -6217,7 +6279,7 @@ Follow by example and make good judgement based on length which list to include
icon_blend_mode = ICON_MULTIPLY
is_painted = TRUE
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_CHEST,BP_HEAD)
robotize_type_required = PROSTHETIC_IND
robotize_type_required = list(PROSTHETIC_IND)
/datum/sprite_accessory/marking/g1_panels/g1_head
name = "G1 - Head Panel Colors"
@@ -6244,7 +6306,7 @@ Follow by example and make good judgement based on length which list to include
icon_blend_mode = ICON_MULTIPLY
is_painted = TRUE
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_CHEST,BP_HEAD)
robotize_type_required = PROSTHETIC_HI
robotize_type_required = list(PROSTHETIC_HI)
/datum/sprite_accessory/marking/g2_panels/g2_head
name = "G2 - Head Panel Colors"
@@ -6271,7 +6333,7 @@ Follow by example and make good judgement based on length which list to include
icon_blend_mode = ICON_MULTIPLY
is_painted = TRUE
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_CHEST,BP_HEAD)
robotize_type_required = PROSTHETIC_ZH
robotize_type_required = list(PROSTHETIC_ZH)
/datum/sprite_accessory/marking/zeng_panels/zeng_head
name = "Zeng-Hu - Head Panel Colors"
@@ -6298,7 +6360,7 @@ Follow by example and make good judgement based on length which list to include
icon_blend_mode = ICON_MULTIPLY
is_painted = TRUE
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_CHEST,BP_HEAD)
robotize_type_required = PROSTHETIC_XMG
robotize_type_required = list(PROSTHETIC_XMG)
/datum/sprite_accessory/marking/xion_panels/xion_head
name = "Xion - Head Panel Colors"