Merge pull request #4722 from AnymousUnknow/master

hide_body_part flags for markings, with supplied abnormal bodytype markings.
This commit is contained in:
Nadyr
2022-08-28 17:54:20 -04:00
committed by GitHub
19 changed files with 384 additions and 8 deletions

View File

@@ -1,5 +1,6 @@
/datum/sprite_accessory/marking/ch
icon = 'icons/mob/human_races/markings_ch.dmi'
/datum/sprite_accessory/marking/ch/orca_head
name = "Orca head"
icon_state = "orca_head"

View File

@@ -43,7 +43,6 @@
mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
apply_colouration(mob_icon)
else
//Use digi icon if digitigrade, otherwise use regular icon. Ternary operator is based.
mob_icon = new /icon(digitigrade ? species.icodigi : species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]")
apply_colouration(mob_icon)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -0,0 +1,148 @@
/datum/sprite_accessory/marking
var/hide_body_parts = list()
/datum/sprite_accessory/marking/ch/anthrovirus_ra
name = "Anthro Virus (Right Arm)"
icon_state = "anthrovirus"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_ARM,BP_R_HAND)
hide_body_parts = list(BP_R_ARM,BP_R_HAND)
/datum/sprite_accessory/marking/ch/anthrovirus_la
name = "Anthro Virus (Left Arm)"
icon_state = "anthrovirus"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_ARM,BP_L_HAND)
hide_body_parts = list(BP_L_ARM,BP_L_HAND)
/datum/sprite_accessory/marking/ch/anthrovirus_rl
name = "Anthro Virus (Right Leg)"
icon_state = "anthrovirus"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG)
hide_body_parts = list(BP_R_LEG)
/datum/sprite_accessory/marking/ch/anthrovirus_ll
name = "Anthro Virus (Left Leg)"
icon_state = "anthrovirus"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG)
hide_body_parts = list(BP_L_LEG)
/datum/sprite_accessory/marking/ch/anthrovirus_rf
name = "Anthro Virus (Right Foot)"
icon_state = "anthrovirus"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_FOOT)
hide_body_parts = list(BP_R_FOOT)
/datum/sprite_accessory/marking/ch/anthrovirus_lf
name = "Anthro Virus (Left Foot)"
icon_state = "anthrovirus"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT)
hide_body_parts = list(BP_L_FOOT)
/datum/sprite_accessory/marking/ch/anthrovirus_t
name = "Anthro Virus (Torso)"
icon_state = "anthrovirus"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
hide_body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/ch/anthrovirus_h
name = "Anthro Virus (Head)"
icon_state = "anthrovirus"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
hide_body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/ch/virus_ra
name = "Bacteriophage (Right Arm)"
icon_state = "virus"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_ARM,BP_R_HAND)
hide_body_parts = list(BP_R_ARM,BP_R_HAND)
/datum/sprite_accessory/marking/ch/virus_la
name = "Bacteriophage (Left Arm)"
icon_state = "virus"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_ARM,BP_L_HAND)
hide_body_parts = list(BP_L_ARM,BP_L_HAND)
/datum/sprite_accessory/marking/ch/virus_rl
name = "Bacteriophage (Right Leg)"
icon_state = "virus"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG,BP_R_FOOT)
hide_body_parts = list(BP_R_LEG,BP_R_FOOT)
/datum/sprite_accessory/marking/ch/virus_ll
name = "Bacteriophage (Left Leg)"
icon_state = "virus"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_L_FOOT)
hide_body_parts = list(BP_L_LEG,BP_L_FOOT)
/datum/sprite_accessory/marking/ch/virus_t
name = "Bacteriophage (Torso)"
icon_state = "virus"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
hide_body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/ch/virus_g
name = "Bacteriophage (Groin)"
icon_state = "virusgroin" //this is separate so that the groin region can be hidden by the torso.
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN)
//hide_body_parts = list(BP_GROIN) this IS pretty low, even for the groin body part.
/datum/sprite_accessory/marking/ch/virus_h
name = "Bacteriophage (Head)"
icon_state = "virus"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
hide_body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/ch/tyranid
name = "Tyranid Bodytype (Use with Armor)"
icon_state = "tyranid"
color_blend_mode = ICON_MULTIPLY
hide_body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/ch/tyranid_armor
name = "Tyranid Bodytype (Armor)"
icon_state = "tyranidarmor"
color_blend_mode = ICON_MULTIPLY
hide_body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/ch/tyranid_legs
name = "Tyranid Legs (Use with Armor)"
icon_state = "tyranid"
color_blend_mode = ICON_MULTIPLY
hide_body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG)
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_GROIN)
/datum/sprite_accessory/marking/ch/tyranid_legs_armor
name = "Tyranid Legs (Armor)"
icon_state = "tyranidarmor"
color_blend_mode = ICON_MULTIPLY
hide_body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG)
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_GROIN)
/datum/sprite_accessory/marking/ch/sect_drone
name = "Sect Drone Bodytype"
icon_state = "sectdrone"
color_blend_mode = ICON_MULTIPLY
hide_body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/ch/sect_drone_eyes
name = "Sect Drone Eyes"
icon_state = "sectdrone_eyes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)

View File

@@ -0,0 +1,22 @@
/datum/sprite_accessory/tail/anthrovirus_tail
name = "Anthro Virus Tail"
icon = 'icons/mob/vore/tails_ch.dmi'
icon_state = "anthrovirustail_mark"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "anthrovirustail"
/datum/sprite_accessory/tail/tyranid_tail
name = "Tyranid"
icon = 'icons/mob/vore/tails_ch.dmi'
icon_state = "tyranid"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/sectdrone_tail
name = "Sect Drone Tail (To use with bodytype-marking)"
icon = 'icons/mob/vore/tails_ch.dmi'
icon_state = "sectdrone_tail"
extra_overlay = "sectdrone_tail_mark"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY

View File

@@ -4,3 +4,10 @@
/datum/sprite_accessory/tail/taur/wolf
vore_tail_sprite_variant = "N"
/datum/sprite_accessory/tail/taur/ch/longvirus
name = "Long Virus (Taur)"
icon_state = "longvirus_s"
extra_overlay = "longvirus_markings"
icon_sprite_tag = "virus"
//suit_sprites = 'icons/mob/taursuits_noodle.dmi' Aye, I've gotta sprite that shit.

View File

@@ -0,0 +1,7 @@
/datum/sprite_accessory/wing/sect_drone //We should some day make a variable to make some wings not be able to fly
name = "Sect drone wings (To use with bodytype marking)"
desc = ""
icon = 'icons/mob/vore/wings_ch.dmi'
icon_state = "sectdrone_wing"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY

View File

@@ -0,0 +1,14 @@
//new function to check for markings
/obj/item/organ/external/proc/is_hidden_by_markings()
//code that checked all limbs.
/*
for(var/obj/item/organ/external/organ in owner.organs)
for(var/M in organ.markings)
var/datum/sprite_accessory/marking/mark_style = organ.markings[M]["datum"]
if (mark_style.hide_body_parts && (organ_tag in mark_style.hide_body_parts))
return 1
*/
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
if(istype(mark_style,/datum/sprite_accessory/marking/ch) && (organ_tag in mark_style.hide_body_parts))
return 1

View File

@@ -0,0 +1,173 @@
/obj/item/organ/external/get_icon(var/skeletal)
var/digitigrade = 0
// preferentially take digitigrade value from owner if available, THEN DNA.
// this allows limbs to be set properly when being printed in the bioprinter without an owner
// this also allows the preview mannequin to update properly because customisation topic calls don't call a DNA check
if(owner)
digitigrade = owner.digitigrade
else if(dna)
digitigrade = dna.digitigrade
if( !model && ( istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot) ) ) //All leg icons go through here now.
var/gender = "m"
if(owner && owner.gender == FEMALE)
gender = "f"
if(!force_icon_key)
icon_cache_key = "[icon_name]_[species ? species.get_bodytype() : SPECIES_HUMAN]" //VOREStation Edit
else
icon_cache_key = "[icon_name]_[force_icon_key]"
if(force_icon)
mob_icon = new /icon(force_icon, "[icon_name][gendered_icon ? "_[gender]" : ""]")
else
if(!dna)
mob_icon = new /icon('icons/mob/human_races/r_human.dmi', "[icon_name][gendered_icon ? "_[gender]" : ""]")
else
if(!gendered_icon)
gender = null
else
if(dna.GetUIState(DNA_UI_GENDER))
gender = "f"
else
gender = "m"
if(skeletal)
mob_icon = new /icon('icons/mob/human_races/r_skeleton.dmi', "[icon_name][gender ? "_[gender]" : ""]")
else if (robotic >= ORGAN_ROBOT)
mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
apply_colouration(mob_icon)
else
if(is_hidden_by_markings())
mob_icon = new /icon('icons/mob/human_races/r_blank.dmi', "[icon_name][gender ? "_[gender]" : ""]")
else
//Use digi icon if digitigrade, otherwise use regular icon. Ternary operator is based.
mob_icon = new /icon(digitigrade ? species.icodigi : species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]")
apply_colouration(mob_icon)
//Code here is copied from organ_icon.dm line 118 at time of writing (9/20/21), VOREStation edits are left in intentionally, because I think it's worth keeping track of the fact that the code is from Virgo's edits.
//Body markings, actually does not include head this time. Done separately above.
if(!istype(src,/obj/item/organ/external/head))
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
var/isdigitype = istype(mark_style,/datum/sprite_accessory/marking/digi)
if(!(digitigrade ^ isdigitype)) //Equivalent to XNOR; this code will only run if either both digitigrade and isdigitype are true, or if both are false.
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit
add_overlay(mark_s) //So when it's not on your body, it has icons
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
icon_cache_key += "[M][markings[M]["color"]]"
if(body_hair && islist(h_col) && h_col.len >= 3)
var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]"
if(!limb_icon_cache[cache_key])
var/icon/I = icon(species.get_icobase(owner), "[icon_name]_[body_hair]")
I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_MULTIPLY) //VOREStation edit
limb_icon_cache[cache_key] = I
mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY)
// VOREStation edit start
if(nail_polish)
var/icon/I = new(nail_polish.icon, nail_polish.icon_state)
I.Blend(nail_polish.color, ICON_MULTIPLY)
add_overlay(I)
mob_icon.Blend(I, ICON_OVERLAY)
icon_cache_key += "_[nail_polish.icon]_[nail_polish.icon_state]_[nail_polish.color]"
// VOREStation edit end
dir = EAST
icon = mob_icon
return mob_icon
else
//. = ..()
//due to the wierd fact that this calls the old code, and defining it here makes a duplicate procedure error, i'm gonna have to bring the whole code here and modify it. if there is a more condensed way, it is appreciated.
var/gender = "m"
if(owner && owner.gender == FEMALE)
gender = "f"
if(!force_icon_key)
icon_cache_key = "[icon_name]_[species ? species.get_bodytype() : SPECIES_HUMAN]" //VOREStation Edit
else
icon_cache_key = "[icon_name]_[force_icon_key]"
if(force_icon)
mob_icon = new /icon(force_icon, "[icon_name][gendered_icon ? "_[gender]" : ""]")
else
if(!dna)
mob_icon = new /icon('icons/mob/human_races/r_human.dmi', "[icon_name][gendered_icon ? "_[gender]" : ""]")
else
if(!gendered_icon)
gender = null
else
if(dna.GetUIState(DNA_UI_GENDER))
gender = "f"
else
gender = "m"
if(skeletal)
mob_icon = new /icon('icons/mob/human_races/r_skeleton.dmi', "[icon_name][gender ? "_[gender]" : ""]")
else if (robotic >= ORGAN_ROBOT)
mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
apply_colouration(mob_icon)
else
if(is_hidden_by_markings())
mob_icon = new /icon('icons/mob/human_races/r_blank.dmi', "[icon_name][gender ? "_[gender]" : ""]")
else
//Use digi icon if digitigrade, otherwise use regular icon. Ternary operator is based.
mob_icon = new /icon(digitigrade ? species.icodigi : species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]")
apply_colouration(mob_icon)
//Body markings, actually does not include head this time. Done separately above.
if(!istype(src,/obj/item/organ/external/head))
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit
add_overlay(mark_s) //So when it's not on your body, it has icons
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
icon_cache_key += "[M][markings[M]["color"]]"
if(body_hair && islist(h_col) && h_col.len >= 3)
var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]"
if(!limb_icon_cache[cache_key])
var/icon/I = icon(species.get_icobase(owner), "[icon_name]_[body_hair]")
I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_MULTIPLY) //VOREStation edit
limb_icon_cache[cache_key] = I
mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY)
// VOREStation edit start
if(nail_polish)
var/icon/I = new(nail_polish.icon, nail_polish.icon_state)
I.Blend(nail_polish.color, ICON_MULTIPLY)
add_overlay(I)
mob_icon.Blend(I, ICON_OVERLAY)
icon_cache_key += "_[nail_polish.icon]_[nail_polish.icon_state]_[nail_polish.color]"
// VOREStation edit end
if(model)
icon_cache_key += "_model_[model]"
apply_colouration(mob_icon)
if(owner && owner.synth_markings)
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit
add_overlay(mark_s) //So when it's not on your body, it has icons
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
icon_cache_key += "[M][markings[M]["color"]]"
if(body_hair && islist(h_col) && h_col.len >= 3)
var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]"
if(!limb_icon_cache[cache_key])
var/icon/I = icon(species.get_icobase(owner), "[icon_name]_[body_hair]")
I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_MULTIPLY) //VOREStation edit
limb_icon_cache[cache_key] = I
mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY)
// VOREStation edit ends here
dir = EAST
icon = mob_icon
return mob_icon

View File

@@ -4524,7 +4524,12 @@
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\greatwolf.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\vore.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\wolf.dm"
#include "modular_chomp\code\modules\mob\new_player\sprite_accessories_extra.dm"
#include "modular_chomp\code\modules\mob\new_player\sprite_accessories_tail.dm"
#include "modular_chomp\code\modules\mob\new_player\sprite_accessories_taur.dm"
#include "modular_chomp\code\modules\mob\new_player\sprite_accessories_wing.dm"
#include "modular_chomp\code\modules\organs\organ_external.dm"
#include "modular_chomp\code\modules\organs\organ_icon.dm"
#include "modular_chomp\code\modules\power\cells\device_cells.dm"
#include "modular_chomp\code\modules\power\cells\esoteric_cells.dm"
#include "modular_chomp\code\modules\power\cells\power_cells.dm"