diff --git a/code/__defines/sound.dm b/code/__defines/sound.dm index 0602ffc8dc..669df0ccc4 100644 --- a/code/__defines/sound.dm +++ b/code/__defines/sound.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD //max channel is 1024. Only go lower from here, because byond tends to pick the first availiable channel to play sounds on #define CHANNEL_LOBBYMUSIC 1024 #define CHANNEL_ADMIN 1023 @@ -234,3 +235,452 @@ 'sound/ambience/atmospherics/atmospherics1.ogg'\ ) +||||||| parent of dd01ae71ab... Merge pull request #9961 from VOREStation/upstream-merge-7976 +//max channel is 1024. Only go lower from here, because byond tends to pick the first availiable channel to play sounds on +#define CHANNEL_LOBBYMUSIC 1024 +#define CHANNEL_ADMIN 1023 +#define CHANNEL_VOX 1022 +#define CHANNEL_JUKEBOX 1021 +#define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats +#define CHANNEL_AMBIENCE_FORCED 1019 +#define CHANNEL_AMBIENCE 1018 +#define CHANNEL_BUZZ 1017 +#define CHANNEL_BICYCLE 1016 +#define CHANNEL_PREYLOOP 1015 //VORESTATION ADD - Fancy Sound Loop channel + +//THIS SHOULD ALWAYS BE THE LOWEST ONE! +//KEEP IT UPDATED + +#define CHANNEL_HIGHEST_AVAILABLE 1014 //VORESTATION EDIT - Fancy Sound Loop channel from 1015 + +#define SOUND_MINIMUM_PRESSURE 10 +#define FALLOFF_SOUNDS 0.5 + +//Sound environment defines. Reverb preset for sounds played in an area, see sound datum reference for more. +#define GENERIC 0 +#define PADDED_CELL 1 +#define ROOM 2 +#define BATHROOM 3 +#define LIVINGROOM 4 +#define STONEROOM 5 +#define AUDITORIUM 6 +#define CONCERT_HALL 7 +#define CAVE 8 +#define ARENA 9 +#define HANGAR 10 +#define CARPETED_HALLWAY 11 +#define HALLWAY 12 +#define STONE_CORRIDOR 13 +#define ALLEY 14 +#define FOREST 15 +#define CITY 16 +#define MOUNTAINS 17 +#define QUARRY 18 +#define PLAIN 19 +#define PARKING_LOT 20 +#define SEWER_PIPE 21 +#define UNDERWATER 22 +#define DRUGGED 23 +#define DIZZY 24 +#define PSYCHOTIC 25 + +#define STANDARD_STATION STONEROOM +#define LARGE_ENCLOSED HANGAR +#define SMALL_ENCLOSED BATHROOM +#define TUNNEL_ENCLOSED CAVE +#define LARGE_SOFTFLOOR CARPETED_HALLWAY +#define MEDIUM_SOFTFLOOR LIVINGROOM +#define SMALL_SOFTFLOOR ROOM +#define ASTEROID CAVE +#define SPACE UNDERWATER + +// Ambience presets. +// All you need to do to make an area play one of these is set their ambience var to one of these lists. +// You can even combine them by adding them together, since they're just lists, however you'd have to do that in initialization. + +// For weird alien places like the crashed UFO. +#define AMBIENCE_OTHERWORLDLY list(\ + 'sound/ambience/otherworldly/otherworldly1.ogg',\ + 'sound/ambience/otherworldly/otherworldly2.ogg',\ + 'sound/ambience/otherworldly/otherworldly3.ogg'\ + ) + +// Restricted, military, or mercenary aligned locations like the armory, the merc ship/base, BSD, etc. +#define AMBIENCE_HIGHSEC list(\ + 'sound/ambience/highsec/highsec1.ogg',\ + 'sound/ambience/highsec/highsec2.ogg',\ + 'sound/ambience/highsec/highsec3.ogg',\ + 'sound/ambience/highsec/highsec4.ogg'\ + ) + +// Ruined structures found on the surface or in the caves. +#define AMBIENCE_RUINS list(\ + 'sound/ambience/ruins/ruins1.ogg',\ + 'sound/ambience/ruins/ruins2.ogg',\ + 'sound/ambience/ruins/ruins3.ogg',\ + 'sound/ambience/ruins/ruins4.ogg',\ + 'sound/ambience/ruins/ruins5.ogg',\ + 'sound/ambience/ruins/ruins6.ogg'\ + ) + +// Similar to the above, but for more technology/signaling based ruins. +#define AMBIENCE_TECH_RUINS list(\ + 'sound/ambience/tech_ruins/tech_ruins1.ogg',\ + 'sound/ambience/tech_ruins/tech_ruins2.ogg',\ + 'sound/ambience/tech_ruins/tech_ruins3.ogg'\ + ) + +// The actual chapel room, and maybe some other places of worship. +#define AMBIENCE_CHAPEL list(\ + 'sound/ambience/chapel/chapel1.ogg',\ + 'sound/ambience/chapel/chapel2.ogg',\ + 'sound/ambience/chapel/chapel3.ogg',\ + 'sound/ambience/chapel/chapel4.ogg'\ + ) + +// For peaceful, serene areas, distinct from the Chapel. +#define AMBIENCE_HOLY list(\ + 'sound/ambience/holy/holy1.ogg',\ + 'sound/ambience/holy/holy2.ogg'\ + ) + +// Generic sounds for less special rooms. +#define AMBIENCE_GENERIC list(\ + 'sound/ambience/generic/generic1.ogg',\ + 'sound/ambience/generic/generic2.ogg',\ + 'sound/ambience/generic/generic3.ogg'\ + ) +// 'sound/ambience/generic/generic4.ogg'\ // VOREStation Edit: Comment out entry 4 as this doesn't fit on Virgo, and we have our own weather system. + +// Sounds of PA announcements, presumably involving shuttles? +#define AMBIENCE_ARRIVALS list(\ + 'sound/ambience/arrivals/arrivals1.ogg',\ + 'sound/ambience/arrivals/arrivals2.ogg',\ + 'sound/ambience/arrivals/arrivals3.ogg',\ + 'sound/ambience/arrivals/arrivals4.ogg',\ + 'sound/ambience/arrivals/arrivals5.ogg',\ + 'sound/ambience/arrivals/arrivals6.ogg',\ + 'sound/ambience/arrivals/arrivals7.ogg'\ + ) + +// Sounds suitable for being inside dark, tight corridors in the underbelly of the station. +#define AMBIENCE_MAINTENANCE list(\ + 'sound/ambience/maintenance/maintenance1.ogg',\ + 'sound/ambience/maintenance/maintenance2.ogg',\ + 'sound/ambience/maintenance/maintenance3.ogg',\ + 'sound/ambience/maintenance/maintenance4.ogg',\ + 'sound/ambience/maintenance/maintenance5.ogg',\ + 'sound/ambience/maintenance/maintenance6.ogg',\ + 'sound/ambience/maintenance/maintenance7.ogg',\ + 'sound/ambience/maintenance/maintenance8.ogg',\ + 'sound/ambience/maintenance/maintenance9.ogg'\ + ) + +// Life support machinery at work, keeping everyone breathing. +#define AMBIENCE_ENGINEERING list(\ + 'sound/ambience/engineering/engineering1.ogg',\ + 'sound/ambience/engineering/engineering2.ogg',\ + 'sound/ambience/engineering/engineering3.ogg'\ + ) + +// Creepy AI/borg stuff. +#define AMBIENCE_AI list(\ + 'sound/ambience/ai/ai1.ogg',\ + 'sound/ambience/ai/ai2.ogg',\ + 'sound/ambience/ai/ai3.ogg'\ + ) + +// Peaceful sounds when floating in the void. +#define AMBIENCE_SPACE list(\ + 'sound/ambience/space/space_serithi.ogg',\ + 'sound/ambience/space/space1.ogg'\ + ) + +// Vaguely spooky sounds when around dead things. +#define AMBIENCE_GHOSTLY list(\ + 'sound/ambience/ghostly/ghostly1.ogg',\ + 'sound/ambience/ghostly/ghostly2.ogg'\ + ) + +// Concerning sounds, for when one discovers something horrible happened in a PoI. +#define AMBIENCE_FOREBODING list(\ + 'sound/ambience/foreboding/foreboding1.ogg',\ + 'sound/ambience/foreboding/foreboding2.ogg',\ + 'sound/ambience/foreboding/foreboding3.ogg',\ + 'sound/ambience/foreboding/foreboding4.ogg',\ + 'sound/ambience/foreboding/foreboding5.ogg',\ + 'sound/ambience/foreboding/foreboding6.ogg'\ + ) + +// Ambience heard when aboveground on Sif and not in a Point of Interest. +#define AMBIENCE_SIF list(\ + 'sound/ambience/sif/sif1.ogg'\ + ) + +// If we ever add geothermal PoIs or other places that are really hot, this will do. +#define AMBIENCE_LAVA list(\ + 'sound/ambience/lava/lava1.ogg'\ + ) + +// Cult-y ambience, for some PoIs, and maybe when the cultists darken the world with the ritual. +#define AMBIENCE_UNHOLY list(\ + 'sound/ambience/unholy/unholy1.ogg'\ + ) + +// For the memes. +#define AMBIENCE_AESTHETIC list(\ + 'sound/ambience/vaporwave.ogg'\ + ) + +#define AMBIENCE_OUTPOST list(\ + 'sound/ambience/expoutpost/expoutpost1.ogg',\ + 'sound/ambience/expoutpost/expoutpost2.ogg',\ + 'sound/ambience/expoutpost/expoutpost3.ogg',\ + 'sound/ambience/expoutpost/expoutpost4.ogg'\ + ) + +#define AMBIENCE_SUBSTATION list(\ + 'sound/ambience/substation/substation1.ogg',\ + 'sound/ambience/substation/substation2.ogg'\ + ) + +#define AMBIENCE_HANGAR list(\ + 'sound/ambience/hangar/hangar1.ogg',\ + 'sound/ambience/hangar/hangar2.ogg',\ + 'sound/ambience/hangar/hangar3.ogg',\ + 'sound/ambience/hangar/hangar4.ogg',\ + 'sound/ambience/hangar/hangar5.ogg',\ + 'sound/ambience/hangar/hangar6.ogg'\ + ) + +#define AMBIENCE_ATMOS list(\ + 'sound/ambience/engineering/engineering1.ogg',\ + 'sound/ambience/engineering/engineering2.ogg',\ + 'sound/ambience/engineering/engineering3.ogg',\ + 'sound/ambience/atmospherics/atmospherics1.ogg'\ + ) +======= +//max channel is 1024. Only go lower from here, because byond tends to pick the first availiable channel to play sounds on +#define CHANNEL_LOBBYMUSIC 1024 +#define CHANNEL_ADMIN 1023 +#define CHANNEL_VOX 1022 +#define CHANNEL_JUKEBOX 1021 +#define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats +#define CHANNEL_AMBIENCE_FORCED 1019 +#define CHANNEL_AMBIENCE 1018 +#define CHANNEL_BUZZ 1017 +#define CHANNEL_BICYCLE 1016 +#define CHANNEL_PREYLOOP 1015 //VORESTATION ADD - Fancy Sound Loop channel + +//THIS SHOULD ALWAYS BE THE LOWEST ONE! +//KEEP IT UPDATED + +#define CHANNEL_HIGHEST_AVAILABLE 1014 //VORESTATION EDIT - Fancy Sound Loop channel from 1015 + +#define SOUND_MINIMUM_PRESSURE 10 +#define FALLOFF_SOUNDS 0.5 + +//Sound environment defines. Reverb preset for sounds played in an area, see sound datum reference for more. +#define GENERIC 0 +#define PADDED_CELL 1 +#define ROOM 2 +#define BATHROOM 3 +#define LIVINGROOM 4 +#define STONEROOM 5 +#define AUDITORIUM 6 +#define CONCERT_HALL 7 +#define CAVE 8 +#define ARENA 9 +#define HANGAR 10 +#define CARPETED_HALLWAY 11 +#define HALLWAY 12 +#define STONE_CORRIDOR 13 +#define ALLEY 14 +#define FOREST 15 +#define CITY 16 +#define MOUNTAINS 17 +#define QUARRY 18 +#define PLAIN 19 +#define PARKING_LOT 20 +#define SEWER_PIPE 21 +#define UNDERWATER 22 +#define DRUGGED 23 +#define DIZZY 24 +#define PSYCHOTIC 25 + +#define STANDARD_STATION STONEROOM +#define LARGE_ENCLOSED HANGAR +#define SMALL_ENCLOSED BATHROOM +#define TUNNEL_ENCLOSED CAVE +#define LARGE_SOFTFLOOR CARPETED_HALLWAY +#define MEDIUM_SOFTFLOOR LIVINGROOM +#define SMALL_SOFTFLOOR ROOM +#define ASTEROID CAVE +#define SPACE UNDERWATER + +// Ambience presets. +// All you need to do to make an area play one of these is set their ambience var to one of these lists. +// You can even combine them by adding them together, since they're just lists, however you'd have to do that in initialization. + +// For weird alien places like the crashed UFO. +#define AMBIENCE_OTHERWORLDLY list(\ + 'sound/ambience/otherworldly/otherworldly1.ogg',\ + 'sound/ambience/otherworldly/otherworldly2.ogg',\ + 'sound/ambience/otherworldly/otherworldly3.ogg'\ + ) + +// Restricted, military, or mercenary aligned locations like the armory, the merc ship/base, BSD, etc. +#define AMBIENCE_HIGHSEC list(\ + 'sound/ambience/highsec/highsec1.ogg',\ + 'sound/ambience/highsec/highsec2.ogg',\ + 'sound/ambience/highsec/highsec3.ogg',\ + 'sound/ambience/highsec/highsec4.ogg'\ + ) + +// Ruined structures found on the surface or in the caves. +#define AMBIENCE_RUINS list(\ + 'sound/ambience/ruins/ruins1.ogg',\ + 'sound/ambience/ruins/ruins2.ogg',\ + 'sound/ambience/ruins/ruins3.ogg',\ + 'sound/ambience/ruins/ruins4.ogg',\ + 'sound/ambience/ruins/ruins5.ogg',\ + 'sound/ambience/ruins/ruins6.ogg'\ + ) + +// Similar to the above, but for more technology/signaling based ruins. +#define AMBIENCE_TECH_RUINS list(\ + 'sound/ambience/tech_ruins/tech_ruins1.ogg',\ + 'sound/ambience/tech_ruins/tech_ruins2.ogg',\ + 'sound/ambience/tech_ruins/tech_ruins3.ogg'\ + ) + +// The actual chapel room, and maybe some other places of worship. +#define AMBIENCE_CHAPEL list(\ + 'sound/ambience/chapel/chapel1.ogg',\ + 'sound/ambience/chapel/chapel2.ogg',\ + 'sound/ambience/chapel/chapel3.ogg',\ + 'sound/ambience/chapel/chapel4.ogg'\ + ) + +// For peaceful, serene areas, distinct from the Chapel. +#define AMBIENCE_HOLY list(\ + 'sound/ambience/holy/holy1.ogg',\ + 'sound/ambience/holy/holy2.ogg'\ + ) + +// Generic sounds for less special rooms. +#define AMBIENCE_GENERIC list(\ + 'sound/ambience/generic/generic1.ogg',\ + 'sound/ambience/generic/generic2.ogg',\ + 'sound/ambience/generic/generic3.ogg'\ + ) +// 'sound/ambience/generic/generic4.ogg'\ + +// Sounds of PA announcements, presumably involving shuttles? +#define AMBIENCE_ARRIVALS list(\ + 'sound/ambience/arrivals/arrivals1.ogg',\ + 'sound/ambience/arrivals/arrivals2.ogg',\ + 'sound/ambience/arrivals/arrivals3.ogg',\ + 'sound/ambience/arrivals/arrivals4.ogg',\ + 'sound/ambience/arrivals/arrivals5.ogg',\ + 'sound/ambience/arrivals/arrivals6.ogg',\ + 'sound/ambience/arrivals/arrivals7.ogg'\ + ) + +// Sounds suitable for being inside dark, tight corridors in the underbelly of the station. +#define AMBIENCE_MAINTENANCE list(\ + 'sound/ambience/maintenance/maintenance1.ogg',\ + 'sound/ambience/maintenance/maintenance2.ogg',\ + 'sound/ambience/maintenance/maintenance3.ogg',\ + 'sound/ambience/maintenance/maintenance4.ogg',\ + 'sound/ambience/maintenance/maintenance5.ogg',\ + 'sound/ambience/maintenance/maintenance6.ogg',\ + 'sound/ambience/maintenance/maintenance7.ogg',\ + 'sound/ambience/maintenance/maintenance8.ogg',\ + 'sound/ambience/maintenance/maintenance9.ogg'\ + ) + +// Life support machinery at work, keeping everyone breathing. +#define AMBIENCE_ENGINEERING list(\ + 'sound/ambience/engineering/engineering1.ogg',\ + 'sound/ambience/engineering/engineering2.ogg',\ + 'sound/ambience/engineering/engineering3.ogg'\ + ) + +// Creepy AI/borg stuff. +#define AMBIENCE_AI list(\ + 'sound/ambience/ai/ai1.ogg',\ + 'sound/ambience/ai/ai2.ogg',\ + 'sound/ambience/ai/ai3.ogg'\ + ) + +// Peaceful sounds when floating in the void. +#define AMBIENCE_SPACE list(\ + 'sound/ambience/space/space_serithi.ogg',\ + 'sound/ambience/space/space1.ogg'\ + ) + +// Vaguely spooky sounds when around dead things. +#define AMBIENCE_GHOSTLY list(\ + 'sound/ambience/ghostly/ghostly1.ogg',\ + 'sound/ambience/ghostly/ghostly2.ogg'\ + ) + +// Concerning sounds, for when one discovers something horrible happened in a PoI. +#define AMBIENCE_FOREBODING list(\ + 'sound/ambience/foreboding/foreboding1.ogg',\ + 'sound/ambience/foreboding/foreboding2.ogg',\ + 'sound/ambience/foreboding/foreboding3.ogg',\ + 'sound/ambience/foreboding/foreboding4.ogg',\ + 'sound/ambience/foreboding/foreboding5.ogg',\ + 'sound/ambience/foreboding/foreboding6.ogg'\ + ) + +// Ambience heard when aboveground on Sif and not in a Point of Interest. +#define AMBIENCE_SIF list(\ + 'sound/ambience/sif/sif1.ogg'\ + ) + +// If we ever add geothermal PoIs or other places that are really hot, this will do. +#define AMBIENCE_LAVA list(\ + 'sound/ambience/lava/lava1.ogg'\ + ) + +// Cult-y ambience, for some PoIs, and maybe when the cultists darken the world with the ritual. +#define AMBIENCE_UNHOLY list(\ + 'sound/ambience/unholy/unholy1.ogg'\ + ) + +// For the memes. +#define AMBIENCE_AESTHETIC list(\ + 'sound/ambience/vaporwave.ogg'\ + ) + +#define AMBIENCE_OUTPOST list(\ + 'sound/ambience/expoutpost/expoutpost1.ogg',\ + 'sound/ambience/expoutpost/expoutpost2.ogg',\ + 'sound/ambience/expoutpost/expoutpost3.ogg',\ + 'sound/ambience/expoutpost/expoutpost4.ogg'\ + ) + +#define AMBIENCE_SUBSTATION list(\ + 'sound/ambience/substation/substation1.ogg',\ + 'sound/ambience/substation/substation2.ogg'\ + ) + +#define AMBIENCE_HANGAR list(\ + 'sound/ambience/hangar/hangar1.ogg',\ + 'sound/ambience/hangar/hangar2.ogg',\ + 'sound/ambience/hangar/hangar3.ogg',\ + 'sound/ambience/hangar/hangar4.ogg',\ + 'sound/ambience/hangar/hangar5.ogg',\ + 'sound/ambience/hangar/hangar6.ogg'\ + ) + +#define AMBIENCE_ATMOS list(\ + 'sound/ambience/engineering/engineering1.ogg',\ + 'sound/ambience/engineering/engineering2.ogg',\ + 'sound/ambience/engineering/engineering3.ogg',\ + 'sound/ambience/atmospherics/atmospherics1.ogg'\ + ) +>>>>>>> dd01ae71ab... Merge pull request #9961 from VOREStation/upstream-merge-7976 diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index e8ce56ecfd..24a8f79cbe 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -746,7 +746,7 @@ var/global/datum/controller/occupations/job_master to_chat(C, "Your chosen spawnpoint ([spawnpos.display_name]) is unavailable for your chosen job. Spawning you at the Arrivals shuttle instead.") var/spawning = pick(latejoin) .["turf"] = get_turf(spawning) - .["msg"] = "will arrive at the station shortly" //VOREStation Edit - Grammar but mostly 'shuttle' reference removal, and this also applies to notified spawn-character verb use + .["msg"] = "will arrive at the station shortly" else if(!fail_deadly) var/spawning = pick(latejoin) .["turf"] = get_turf(spawning) diff --git a/code/game/objects/structures/crates_lockers/__closets.dm b/code/game/objects/structures/crates_lockers/__closets.dm index 4e18d87207..64c865604e 100644 --- a/code/game/objects/structures/crates_lockers/__closets.dm +++ b/code/game/objects/structures/crates_lockers/__closets.dm @@ -46,7 +46,7 @@ starts_with = null if(!opened) // if closed, any item at the crate's loc is put in the contents - if(istype(loc, /mob/living)) return //VOREStation Edit - No collecting mob organs if spawned inside mob + if(istype(loc, /mob/living)) return var/obj/item/I for(I in loc) if(I.density || I.anchored || I == src) continue diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm index 1c4fb5ee27..6e6487a001 100644 --- a/code/modules/organs/subtypes/standard.dm +++ b/code/modules/organs/subtypes/standard.dm @@ -324,6 +324,136 @@ "You make \the [I] kiss \the [src]!.") return ..() +<<<<<<< HEAD +||||||| parent of dd01ae71ab... Merge pull request #9961 from VOREStation/upstream-merge-7976 +/obj/item/organ/external/head/get_icon() + ..() + + //The overlays are not drawn on the mob, they are used for if the head is removed and becomes an item + cut_overlays() + + //Every 'addon' below requires information from species + if(!iscarbon(owner) || !owner.species) + return + + var/icon/eyecon //VOREStation Edit -- holds eye icon to render over markings later. + + //Eye color/icon + var/should_have_eyes = owner.should_have_organ(O_EYES) + var/has_eye_color = owner.species.appearance_flags & HAS_EYE_COLOR + if((should_have_eyes || has_eye_color) && eye_icon) + var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[O_EYES] + var/icon/eyes_icon = new/icon(eye_icon_location, eye_icon) + //Should have eyes + if(should_have_eyes) + //And we have them + if(eyes) + if(has_eye_color) + eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD) + //They're gone! + else + eyes_icon.Blend(rgb(128,0,0), ICON_ADD) + //We have weird other-sorts of eyes (as we're not supposed to have eye organ, but we have HAS_EYE_COLOR species) + else + eyes_icon.Blend(rgb(owner.r_eyes, owner.g_eyes, owner.b_eyes), ICON_ADD) + + //VOREStation edit -- allow rendering of eyes over markings. + if(eyes_over_markings) + eyecon = eyes_icon + else + add_overlay(eyes_icon) + mob_icon.Blend(eyes_icon, ICON_OVERLAY) + icon_cache_key += "[eye_icon]" + + //Lip color/icon + if(owner.lip_style && (species && (species.appearance_flags & HAS_LIPS))) + var/icon/lip_icon = new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s") + add_overlay(lip_icon) + mob_icon.Blend(lip_icon, ICON_OVERLAY) + + //Head 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(eyes_over_markings && eyecon) //VOREStation edit -- toggle to render eyes above markings. + add_overlay(eyecon) + mob_icon.Blend(eyecon, ICON_OVERLAY) + icon_cache_key += "[eye_icon]" + + add_overlay(get_hair_icon()) + + return mob_icon + +======= +/obj/item/organ/external/head/get_icon() + ..() + + //The overlays are not drawn on the mob, they are used for if the head is removed and becomes an item + cut_overlays() + + //Every 'addon' below requires information from species + if(!iscarbon(owner) || !owner.species) + return + + var/icon/eyecon + + //Eye color/icon + var/should_have_eyes = owner.should_have_organ(O_EYES) + var/has_eye_color = owner.species.appearance_flags & HAS_EYE_COLOR + if((should_have_eyes || has_eye_color) && eye_icon) + var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[O_EYES] + var/icon/eyes_icon = new/icon(eye_icon_location, eye_icon) + //Should have eyes + if(should_have_eyes) + //And we have them + if(eyes) + if(has_eye_color) + eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD) + //They're gone! + else + eyes_icon.Blend(rgb(128,0,0), ICON_ADD) + //We have weird other-sorts of eyes (as we're not supposed to have eye organ, but we have HAS_EYE_COLOR species) + else + eyes_icon.Blend(rgb(owner.r_eyes, owner.g_eyes, owner.b_eyes), ICON_ADD) + + //VOREStation edit -- allow rendering of eyes over markings. + if(eyes_over_markings) + eyecon = eyes_icon + else + add_overlay(eyes_icon) + mob_icon.Blend(eyes_icon, ICON_OVERLAY) + icon_cache_key += "[eye_icon]" + + //Lip color/icon + if(owner.lip_style && (species && (species.appearance_flags & HAS_LIPS))) + var/icon/lip_icon = new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s") + add_overlay(lip_icon) + mob_icon.Blend(lip_icon, ICON_OVERLAY) + + //Head 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) + 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(eyes_over_markings && eyecon) //VOREStation edit -- toggle to render eyes above markings. + add_overlay(eyecon) + mob_icon.Blend(eyecon, ICON_OVERLAY) + icon_cache_key += "[eye_icon]" + + add_overlay(get_hair_icon()) + + return mob_icon + +>>>>>>> dd01ae71ab... Merge pull request #9961 from VOREStation/upstream-merge-7976 /obj/item/organ/external/head/skrell eye_icon = "skrell_eyes_s"