mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-20 19:43:13 +01:00
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:
@@ -1,3 +0,0 @@
|
||||
#define EQUIP_PREVIEW_LOADOUT 1
|
||||
#define EQUIP_PREVIEW_JOB 2
|
||||
#define EQUIP_PREVIEW_ALL (EQUIP_PREVIEW_LOADOUT|EQUIP_PREVIEW_JOB)
|
||||
@@ -244,25 +244,25 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/status = pref.organ_data[name]
|
||||
var/organ_name = name
|
||||
|
||||
if(status == "cyborg")
|
||||
if(status == ORGAN_PREF_CYBORG)
|
||||
var/datum/robolimb/R
|
||||
if(pref.rlimb_data[name] && GLOB.all_robolimbs[pref.rlimb_data[name]])
|
||||
R = GLOB.all_robolimbs[pref.rlimb_data[name]]
|
||||
else
|
||||
R = GLOB.basic_robolimb
|
||||
out += "<li>- [R.company] [capitalize_first_letters(parse_zone(organ_name))] Prosthesis</li>"
|
||||
else if(status == "amputated")
|
||||
else if(status == ORGAN_PREF_AMPUTATED)
|
||||
out += "<li>- Amputated [capitalize_first_letters(parse_zone(organ_name))]</li>"
|
||||
else if(status == "mechanical")
|
||||
else if(status == ORGAN_PREF_MECHANICAL)
|
||||
var/datum/robolimb/R
|
||||
if(pref.rlimb_data[name] && GLOB.all_robolimbs[pref.rlimb_data[name]])
|
||||
R = GLOB.all_robolimbs[pref.rlimb_data[name]]
|
||||
else
|
||||
R = GLOB.basic_robolimb
|
||||
out += "<li>- [R.company] Mechanical [capitalize_first_letters(parse_zone(organ_name))]</li>"
|
||||
else if(status == "nymph")
|
||||
else if(status == ORGAN_PREF_NYMPH)
|
||||
out += "<li>- Diona Nymph [capitalize_first_letters(parse_zone(organ_name))]</li>"
|
||||
else if(status == "assisted")
|
||||
else if(status == ORGAN_PREF_ASSISTED)
|
||||
switch(organ_name)
|
||||
if(BP_HEART)
|
||||
out += "<li>- Pacemaker-Assisted [capitalize_first_letters(parse_zone(organ_name))]</li>"
|
||||
@@ -272,7 +272,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
out += "<li>- Retinal Overlayed [capitalize_first_letters(parse_zone(organ_name))]</li>"
|
||||
else
|
||||
out += "<li>- Mechanically Assisted [capitalize_first_letters(parse_zone(organ_name))]</li>"
|
||||
else if(status == "removed")
|
||||
else if(status == ORGAN_PREF_REMOVED)
|
||||
out += "<li>- Removed [capitalize_first_letters(parse_zone(organ_name))]</li>"
|
||||
|
||||
if(length(pref.organ_data))
|
||||
@@ -395,6 +395,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
continue
|
||||
if(!(mob_species.type in S.species_allowed))
|
||||
continue
|
||||
if(!verify_robolimb_appropriate(S))
|
||||
continue
|
||||
|
||||
valid_hairstyles[hairstyle] = GLOB.hair_styles_list[hairstyle]
|
||||
|
||||
if(valid_hairstyles.len)
|
||||
@@ -417,6 +420,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
continue
|
||||
if(!(mob_species.type in S.species_allowed))
|
||||
continue
|
||||
if(!verify_robolimb_appropriate(S))
|
||||
continue
|
||||
|
||||
valid_facialhairstyles[facialhairstyle] = GLOB.facial_hair_styles_list[facialhairstyle]
|
||||
|
||||
@@ -435,6 +440,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
continue
|
||||
if(!(mob_species.type in S.species_allowed))
|
||||
continue
|
||||
if(!verify_robolimb_appropriate(S))
|
||||
continue
|
||||
|
||||
valid_hair_gradients[hair_gradient] = valid_hair_gradients[hair_gradient]
|
||||
|
||||
@@ -520,6 +527,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
continue
|
||||
if(!(mob_species.type in S.species_allowed))
|
||||
continue
|
||||
if(!verify_robolimb_appropriate(S))
|
||||
continue
|
||||
|
||||
valid_hairstyles[hairstyle] = GLOB.hair_styles_list[hairstyle]
|
||||
|
||||
@@ -625,6 +634,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
continue
|
||||
if(!(mob_species.type in S.species_allowed))
|
||||
continue
|
||||
if(!verify_robolimb_appropriate(S))
|
||||
continue
|
||||
|
||||
valid_facialhairstyles[facialhairstyle] = GLOB.facial_hair_styles_list[facialhairstyle]
|
||||
|
||||
@@ -661,10 +672,12 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/datum/species/species = GLOB.all_species[pref.species]
|
||||
for(var/M in usable_markings)
|
||||
var/datum/sprite_accessory/S = usable_markings[M]
|
||||
if(!S.species_allowed.len)
|
||||
if(!length(S.species_allowed))
|
||||
continue
|
||||
else if(!(species.type in S.species_allowed))
|
||||
usable_markings -= M
|
||||
if(!verify_robolimb_appropriate(S))
|
||||
usable_markings -= M
|
||||
|
||||
if (!usable_markings.len)
|
||||
alert(user, "This species does not have any body markings available.")
|
||||
@@ -707,7 +720,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["limbs"])
|
||||
var/list/acceptable_organ_input = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand")
|
||||
var/list/acceptable_organ_input = list("Head", "Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand")
|
||||
var/limb_name = tgui_input_list(user, "Which limb do you want to change?", "Limbs", acceptable_organ_input)
|
||||
if(!limb_name && !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
|
||||
@@ -746,7 +759,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
if("Upper Body")
|
||||
limb = BP_CHEST
|
||||
carries_organs = 1
|
||||
if(BP_HEAD)
|
||||
if("Head")
|
||||
limb = BP_HEAD
|
||||
carries_organs = 1
|
||||
else
|
||||
@@ -769,10 +782,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
pref.rlimb_data -= third_limb
|
||||
|
||||
if("Amputated")
|
||||
pref.organ_data[limb] = "amputated"
|
||||
pref.organ_data[limb] = ORGAN_PREF_AMPUTATED
|
||||
pref.rlimb_data[limb] = null
|
||||
if(second_limb)
|
||||
pref.organ_data[second_limb] = "amputated"
|
||||
pref.organ_data[second_limb] = ORGAN_PREF_AMPUTATED
|
||||
pref.rlimb_data[second_limb] = null
|
||||
|
||||
if("Prosthesis")
|
||||
@@ -782,6 +795,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/datum/robolimb/M = GLOB.chargen_robolimbs[company]
|
||||
if(!(tmp_species in M.species_can_use))
|
||||
continue
|
||||
if(!(limb in M.allowed_external_organs))
|
||||
continue
|
||||
usable_manufacturers[company] = M
|
||||
if(!usable_manufacturers.len)
|
||||
return
|
||||
@@ -789,20 +804,22 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
if(!choice)
|
||||
return
|
||||
pref.rlimb_data[limb] = choice
|
||||
pref.organ_data[limb] = "cyborg"
|
||||
pref.organ_data[limb] = ORGAN_PREF_CYBORG
|
||||
if(second_limb)
|
||||
pref.rlimb_data[second_limb] = choice
|
||||
pref.organ_data[second_limb] = "cyborg"
|
||||
if(third_limb && pref.organ_data[third_limb] == "amputated")
|
||||
pref.organ_data[second_limb] = ORGAN_PREF_CYBORG
|
||||
if(third_limb && pref.organ_data[third_limb] == ORGAN_PREF_AMPUTATED)
|
||||
pref.organ_data[third_limb] = null
|
||||
|
||||
if("Diona Nymph")
|
||||
pref.organ_data[limb] = "nymph"
|
||||
pref.organ_data[limb] = ORGAN_PREF_NYMPH
|
||||
pref.rlimb_data[limb] = null
|
||||
if(second_limb)
|
||||
pref.organ_data[second_limb] = "nymph"
|
||||
pref.organ_data[second_limb] = ORGAN_PREF_NYMPH
|
||||
pref.rlimb_data[second_limb] = null
|
||||
|
||||
// Recheck markings in case we changed prosthetics.
|
||||
recheck_markings_and_facial_hair()
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["organs"])
|
||||
@@ -828,7 +845,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
if("Normal")
|
||||
pref.organ_data[organ_name] = null
|
||||
if("Assisted")
|
||||
pref.organ_data[organ_name] = "assisted"
|
||||
pref.organ_data[organ_name] = ORGAN_PREF_ASSISTED
|
||||
if("Mechanical")
|
||||
|
||||
var/tmp_species = pref.species ? pref.species : SPECIES_HUMAN
|
||||
@@ -837,6 +854,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/datum/robolimb/M = GLOB.chargen_robolimbs[company]
|
||||
if(!(tmp_species in M.species_can_use))
|
||||
continue
|
||||
if(!(organ_name in M.allowed_internal_organs))
|
||||
continue
|
||||
usable_manufacturers[company] = M
|
||||
if(!usable_manufacturers.len)
|
||||
return
|
||||
@@ -844,22 +863,18 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
|
||||
var/datum/robolimb/R = GLOB.all_robolimbs[choice]
|
||||
if(!(organ_name in R.allowed_internal_organs))
|
||||
alert(user, "You can not select this manufacturer for this organ.")
|
||||
return
|
||||
pref.rlimb_data[organ_name] = choice
|
||||
pref.organ_data[organ_name] = "mechanical"
|
||||
pref.organ_data[organ_name] = ORGAN_PREF_MECHANICAL
|
||||
|
||||
if("Removed")
|
||||
pref.organ_data[organ_name] = "removed"
|
||||
pref.organ_data[organ_name] = ORGAN_PREF_REMOVED
|
||||
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
else if(href_list["reset_organs"])
|
||||
pref.organ_data.Cut()
|
||||
pref.rlimb_data.Cut()
|
||||
recheck_markings_and_facial_hair()
|
||||
|
||||
return TOPIC_REFRESH_UPDATE_PREVIEW
|
||||
|
||||
@@ -958,14 +973,25 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
user << browse(dat.Join(), "window=species;size=700x400")
|
||||
|
||||
/*/datum/category_item/player_setup_item/general/body/proc/reset_limbs()
|
||||
/// This proc verifies if a sprite accessory can be put on a robolimb, checking its manufacturer.
|
||||
/datum/category_item/player_setup_item/general/body/proc/verify_robolimb_appropriate(datum/sprite_accessory/S)
|
||||
var/organ_status = pref.organ_data[S.required_organ]
|
||||
var/robolimb_manufacturer = pref.rlimb_data[S.required_organ]
|
||||
. = check_robolimb_appropriate(S, organ_status, robolimb_manufacturer)
|
||||
|
||||
for(var/organ in pref.organ_data)
|
||||
pref.organ_data[organ] = null
|
||||
while(null in pref.organ_data)
|
||||
pref.organ_data -= null
|
||||
/// This proc is used to check markings and facial hair after changing prosthesis.
|
||||
/datum/category_item/player_setup_item/general/body/proc/recheck_markings_and_facial_hair()
|
||||
if(length(pref.body_markings))
|
||||
for(var/marking in pref.body_markings)
|
||||
var/datum/sprite_accessory/S = GLOB.body_marking_styles_list[marking]
|
||||
if(!verify_robolimb_appropriate(S))
|
||||
pref.body_markings -= marking
|
||||
to_chat(pref.client, SPAN_WARNING("Removed the [marking] marking as it is not appropriate for your current robo-limb!"))
|
||||
|
||||
for(var/organ in pref.rlimb_data)
|
||||
pref.rlimb_data[organ] = null
|
||||
while(null in pref.rlimb_data)
|
||||
pref.rlimb_data -= null*/
|
||||
if(pref.f_style)
|
||||
var/datum/sprite_accessory/F = GLOB.facial_hair_styles_list[pref.f_style]
|
||||
if(!verify_robolimb_appropriate(F))
|
||||
var/datum/species/user_species = GLOB.all_species[pref.species]
|
||||
var/organ_status = pref.organ_data[F.required_organ]
|
||||
var/robolimb_manufacturer = pref.rlimb_data[F.required_organ]
|
||||
pref.f_style = random_facial_hair_style(pref.gender, user_species.type, organ_status, robolimb_manufacturer)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -175,6 +175,7 @@
|
||||
continue
|
||||
if(!(species.type in S.species_allowed))
|
||||
continue
|
||||
|
||||
valid_hairstyles += hairstyle
|
||||
|
||||
return valid_hairstyles
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
O.status = 0
|
||||
switch(status)
|
||||
|
||||
if ("amputated")
|
||||
if (ORGAN_PREF_AMPUTATED)
|
||||
organs_by_name[O.limb_name] = null
|
||||
organs -= O
|
||||
if(O.children) // This might need to become recursive.
|
||||
@@ -112,14 +112,14 @@
|
||||
organs_by_name[child.limb_name] = null
|
||||
organs -= child
|
||||
|
||||
if ("nymph")
|
||||
if (ORGAN_PREF_NYMPH)
|
||||
if (organ_data[name])
|
||||
O.AddComponent(/datum/component/nymph_limb)
|
||||
var/datum/component/nymph_limb/D = O.GetComponent(/datum/component/nymph_limb)
|
||||
if(D)
|
||||
D.nymphize(src, O.limb_name, TRUE)
|
||||
|
||||
if ("cyborg")
|
||||
if (ORGAN_PREF_CYBORG)
|
||||
if (rlimb_data[name])
|
||||
O.force_skintone = FALSE
|
||||
for(var/thing in O.children)
|
||||
@@ -132,14 +132,14 @@
|
||||
var/obj/item/organ/I = internal_organs_by_name[name]
|
||||
if(I)
|
||||
switch (status)
|
||||
if ("assisted")
|
||||
if (ORGAN_PREF_ASSISTED)
|
||||
I.mechassist()
|
||||
if ("mechanical")
|
||||
if (ORGAN_PREF_MECHANICAL)
|
||||
if (rlimb_data[name])
|
||||
I.robotize(rlimb_data[name])
|
||||
else
|
||||
I.robotize()
|
||||
if ("removed")
|
||||
if (ORGAN_PREF_REMOVED)
|
||||
qdel(I)
|
||||
|
||||
if (apply_markings)
|
||||
@@ -162,7 +162,7 @@
|
||||
for(var/BP in mark_datum.body_parts)
|
||||
var/obj/item/organ/external/O = organs_by_name[BP]
|
||||
if(O)
|
||||
if(mark_datum.robotize_type_required && O.robotize_type != mark_datum.robotize_type_required)
|
||||
if(length(mark_datum.robotize_type_required) && !(O.robotize_type in mark_datum.robotize_type_required))
|
||||
continue
|
||||
var/list/attr = list("color" = mark_color, "datum" = mark_datum)
|
||||
if (mark_datum.is_genetic)
|
||||
|
||||
@@ -17,11 +17,17 @@ GLOBAL_DATUM(basic_robolimb, /datum/robolimb)
|
||||
GLOB.internal_robolimbs[R.company] = R
|
||||
|
||||
/datum/robolimb
|
||||
var/company = "Unbranded" // Shown when selecting the limb.
|
||||
var/desc = "A generic unbranded robotic prosthesis." // Seen when examining a limb.
|
||||
var/icon = 'icons/mob/human_races/ipc/robotic.dmi' // Icon base to draw from.
|
||||
var/unavailable_at_chargen // If set, not available at chargen.
|
||||
var/lifelike = FALSE // If set, appears organic.
|
||||
/// Shown when selecting the limb.
|
||||
var/company = "Unbranded"
|
||||
/// Seen when examining a limb.
|
||||
var/desc = "A generic unbranded robotic prosthesis."
|
||||
/// Icon base to draw from.
|
||||
var/icon = 'icons/mob/human_races/ipc/robotic.dmi'
|
||||
/// If set, not available in character setup.
|
||||
var/unavailable_at_chargen
|
||||
/// If set, it appears as organic on examine, like synthskin.
|
||||
var/lifelike = FALSE
|
||||
/// Which species can use this prosthetic type.
|
||||
var/list/species_can_use = list(
|
||||
SPECIES_HUMAN,
|
||||
SPECIES_SKRELL,
|
||||
@@ -37,14 +43,40 @@ GLOBAL_DATUM(basic_robolimb, /datum/robolimb)
|
||||
SPECIES_IPC_BISHOP,
|
||||
SPECIES_HUMAN_OFFWORLD
|
||||
)
|
||||
var/paintable = 0 //tired of istype exceptions. bullshit to find, and by god do i know it after this project.
|
||||
var/linked_frame = SPECIES_IPC_UNBRANDED //which machine species this limb will create
|
||||
var/brute_mod = 0.9 //how resistant is this mode to brute damage
|
||||
var/burn_mod = 1.1 //how resistant is this mode to burn damage
|
||||
var/fabricator_available = FALSE //if you can print this limb in the robotics fabricator
|
||||
var/internal_organ_suffix = "prosthetic" //this is used to define the icon
|
||||
var/list/allowed_internal_organs = list(BP_HEART, BP_EYES, BP_LUNGS, BP_LIVER, BP_KIDNEYS, BP_STOMACH)//what organs can be augmented by this brand
|
||||
/// If this prosthetic type is paintable.
|
||||
var/paintable = 0
|
||||
/// Which IPC species this prosthetic type will create.
|
||||
var/linked_frame = SPECIES_IPC_UNBRANDED
|
||||
/// How resistant this prosthetic type is to brute damage.
|
||||
var/brute_mod = 0.9
|
||||
/// How resistant this prosthetic type is to burn damage.
|
||||
var/burn_mod = 1.1
|
||||
/// If you can print this prosthetic type in the robotics fabricator.
|
||||
var/fabricator_available = FALSE
|
||||
/// Suffix used for the icon.
|
||||
var/internal_organ_suffix = "prosthetic"
|
||||
/// If this prosthetic type can be used for internal organs.
|
||||
var/allows_internal = TRUE
|
||||
/// What internal organs you can pick this prosthetic type for.
|
||||
var/list/allowed_internal_organs = list(
|
||||
BP_HEART,
|
||||
BP_EYES,
|
||||
BP_LUNGS,
|
||||
BP_LIVER,
|
||||
BP_KIDNEYS,
|
||||
BP_STOMACH
|
||||
)
|
||||
/// What external organs you can pick this prosthetic type for.
|
||||
var/list/allowed_external_organs = list(
|
||||
BP_L_ARM,
|
||||
BP_R_ARM,
|
||||
BP_L_HAND,
|
||||
BP_R_HAND,
|
||||
BP_L_LEG,
|
||||
BP_R_LEG,
|
||||
BP_L_FOOT,
|
||||
BP_R_FOOT
|
||||
)
|
||||
|
||||
/datum/robolimb/proc/malfunctioning_check()
|
||||
return FALSE
|
||||
@@ -154,3 +186,30 @@ GLOBAL_DATUM(basic_robolimb, /datum/robolimb)
|
||||
icon = 'icons/mob/human_races/vaurca/r_vaurcalimbs.dmi'
|
||||
species_can_use = list(SPECIES_VAURCA_WORKER, SPECIES_VAURCA_WARRIOR)
|
||||
allows_internal = FALSE
|
||||
|
||||
/datum/robolimb/hoplan
|
||||
company = PROSTHETIC_HOPLAN
|
||||
desc = "A refined helmet with an industrial lean. Extra plating seems to be applied to the top surface while the rest of the head features \
|
||||
small breaks in the armor and running lights. A polished screen hides four optic sensors behind a display."
|
||||
species_can_use = list(SPECIES_IPC)
|
||||
icon = 'icons/mob/human_races/ipc/hoplan.dmi'
|
||||
allowed_external_organs = list(BP_HEAD)
|
||||
|
||||
/datum/robolimb/indricus
|
||||
company = PROSTHETIC_INDRICUS
|
||||
desc = "One lens-like eye dominates this style of head, with a camera like adjustable segment, this head is entirely encased with no seams or \
|
||||
crevices bar service hatches."
|
||||
species_can_use = list(SPECIES_IPC)
|
||||
linked_frame = SPECIES_IPC
|
||||
icon = 'icons/mob/human_races/ipc/indricus.dmi'
|
||||
allowed_external_organs = list(BP_HEAD)
|
||||
|
||||
/datum/robolimb/raxus
|
||||
company = PROSTHETIC_RAXUS
|
||||
desc = "Imposing and bold, this angled helmet features a collection of small pin-prick optic sensors to make up for its lack of inherent eyes. \
|
||||
The top of the head extends outward, where the thinner point meets halfway down the face before extending in to a similarly wide jaw, \
|
||||
giving the head a shape almost like an cubic hourglass."
|
||||
species_can_use = list(SPECIES_IPC)
|
||||
linked_frame = SPECIES_IPC
|
||||
icon = 'icons/mob/human_races/ipc/raxus.dmi'
|
||||
allowed_external_organs = list(BP_HEAD)
|
||||
|
||||
Reference in New Issue
Block a user