Noir Doesn't Grey out HUD, Adds Remaining Glasses for Vox, 'Yi' to Vox-pidgin syllables & Framework for Icon-based Skin Tone, Fixes #3138, Greyscales Vox Hair (#4614)

* Ports #9294 and #9322 from VG: 'Yi' to Vox-pidgin and Framework for Icon-based Skin Tone (Feat. Vox) and Glasses/Goggles for Vox.

Both ported PRs by Intigracy.

Also adds all remaining in-use glasses/goggle sprites for Vox. I cleaned up the code a bit while I was in there. Otherwise, that's it.

Furthermore, randomizing skin tone doesn't seem to work for Vox despite their being specified in the conditional lists and s_tone being not null.

* Morph Support

* CMA Support

* Ports Intigracy's vgstation13/pull/9460, Noir Vision No Longer Greys Out HUD.

* Fixes Positioning of Vox Jensen Shades East+West facing Sprites.

Fixes Heist Goofery

Game-mode (not one-click antag) Heist tweaked and returned to working order now that I've found out how to test the actual game-mode (after temporarily adjusting the population requirement).

Vox Raiders won't spawn in with whatever socks were in their selected spawn-character's preferences anymore.

Additionally, the set_species proc now zeroes out skin tone if the species doesn't have skin tone to avoid goofing up the icons on initial generation.

Also condenses the code in preferences_setup character creation icon generation. Made it use the individual species' skin-tone handling procs instead of code snowflaked into preferences_setup.dm.

* No More Vox Tail Colours, but they can Colour Their Hair.

* Removes unneeded 'src's and retroactively prohibits colouring tails on species without HAS_SKIN_COLOR.

Colouration won't be applied to src's tail unless HAS_SKIN_COLOR is in
src's species bodyflags.

* Tidies up some Lists in CharPrefs and Retroactively Prohibits Vox Hair Colouration

* Reverts unnecessary commenting out of vox armalis post-spawn handling parent call.

* Adds Emerald and Azure Vox Skin Tones.

* Stealthy Wryn Typo Fixed.

* Greyscales Vox Head+Facial Hair and Adds More Default Colours in Species Definitions

* Gives Vox Raiders Default Hair Colour and Fixes Bug where Roundstart Raiders don't get Random Skin
This commit is contained in:
KasparoVy
2016-06-19 11:35:36 -04:00
committed by Fox McCloud
parent ea1196b1ce
commit 3dba1b2886
36 changed files with 323 additions and 140 deletions
+2 -2
View File
@@ -213,7 +213,7 @@
colour = "vox"
key = "v"
flags = RESTRICTED | WHITELISTED
syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya","chi","cha","kah", \
syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya", "yi", "chi","cha","kah", \
"SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA")
/datum/language/vox/get_random_name()
@@ -278,7 +278,7 @@
/datum/language/drask
name = "Orluum"
desc = "The droning, vibrous language of the Drask. It sounds somewhat like whalesong"
desc = "The droning, vibrous language of the Drask. It sounds somewhat like whalesong."
speech_verb = "drones"
ask_verb = "hums"
exclaim_verb = "rumbles"
@@ -243,7 +243,7 @@
return 1
/mob/living/carbon/human/proc/change_skin_tone(var/tone)
if(s_tone == tone || !(species.bodyflags & HAS_SKIN_TONE))
if(s_tone == tone || !((species.bodyflags & HAS_SKIN_TONE) || (species.bodyflags & HAS_ICON_SKIN_TONE)))
return
s_tone = tone
+32 -3
View File
@@ -1537,14 +1537,17 @@
if(species.base_color && default_colour)
//Apply colour.
r_skin = hex2num(copytext(species.base_color,2,4))
g_skin = hex2num(copytext(species.base_color,4,6))
b_skin = hex2num(copytext(species.base_color,6,8))
r_skin = hex2num(copytext(species.base_color, 2, 4))
g_skin = hex2num(copytext(species.base_color, 4, 6))
b_skin = hex2num(copytext(species.base_color, 6, 8))
else
r_skin = 0
g_skin = 0
b_skin = 0
if(!(species.bodyflags & HAS_SKIN_TONE))
s_tone = 0
species.create_organs(src)
//Handle default hair/head accessories for created mobs.
@@ -1556,6 +1559,32 @@
if(species.default_headacc)
H.ha_style = species.default_headacc
if(species.default_hair_colour)
//Apply colour.
H.r_hair = hex2num(copytext(species.default_hair_colour, 2, 4))
H.g_hair = hex2num(copytext(species.default_hair_colour, 4, 6))
H.b_hair = hex2num(copytext(species.default_hair_colour, 6, 8))
else
H.r_hair = 0
H.g_hair = 0
H.b_hair = 0
if(species.default_fhair_colour)
H.r_facial = hex2num(copytext(species.default_fhair_colour, 2, 4))
H.g_facial = hex2num(copytext(species.default_fhair_colour, 4, 6))
H.b_facial = hex2num(copytext(species.default_fhair_colour, 6, 8))
else
H.r_facial = 0
H.g_facial = 0
H.b_facial = 0
if(species.default_headacc_colour)
H.r_headacc = hex2num(copytext(species.default_headacc_colour, 2, 4))
H.g_headacc = hex2num(copytext(species.default_headacc_colour, 4, 6))
H.b_headacc = hex2num(copytext(species.default_headacc_colour, 6, 8))
else
H.r_headacc = 0
H.g_headacc = 0
H.b_headacc = 0
if(!dna)
dna = new /datum/dna(null)
dna.species = species.name
@@ -121,8 +121,14 @@
//Default hair/headacc style vars.
var/default_hair = "Bald" //Default hair style for newly created humans unless otherwise set.
var/default_hair_colour
var/default_fhair = "Shaved" //Default facial hair style for newly created humans unless otherwise set.
var/default_fhair_colour
var/default_headacc = "None" //Default head accessory style for newly created humans unless otherwise set.
var/default_headacc_colour
//Defining lists of icon skin tones for species that have them.
var/list/icon_skin_tones = list()
// Determines the organs that the species spawns with and
var/list/has_organ = list( // which required-organ checks are conducted.
@@ -372,6 +378,9 @@
grant_abilities(C)
return
/datum/species/proc/updatespeciescolor(var/mob/living/carbon/human/H) //Handles changing icobase for species that have multiple skin colors.
return
/datum/species/proc/grant_abilities(var/mob/living/carbon/human/H)
for(var/proc/ability in species_abilities)
H.verbs += ability
@@ -221,8 +221,8 @@
/datum/species/vox
name = "Vox"
name_plural = "Vox"
icobase = 'icons/mob/human_races/r_vox.dmi'
deform = 'icons/mob/human_races/r_def_vox.dmi'
icobase = 'icons/mob/human_races/vox/r_vox.dmi'
deform = 'icons/mob/human_races/vox/r_def_vox.dmi'
path = /mob/living/carbon/human/vox
default_language = "Galactic Common"
@@ -267,12 +267,13 @@
flags = NO_SCAN | IS_WHITELISTED
clothing_flags = HAS_SOCKS
dietflags = DIET_OMNI
bodyflags = HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED
bodyflags = HAS_ICON_SKIN_TONE | HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED
blood_color = "#2299FC"
flesh_color = "#808D11"
//Default styles for created mobs.
default_hair = "Short Vox Quills"
default_hair_colour = "#614f19" //R: 97, G: 79, B: 25
butt_sprite = "vox"
reagent_tag = PROCESS_ORG
@@ -280,6 +281,15 @@
male_scream_sound = 'sound/voice/shriek1.ogg'
female_scream_sound = 'sound/voice/shriek1.ogg'
icon_skin_tones = list(
1 = "Default Green",
2 = "Dark Green",
3 = "Brown",
4 = "Grey",
5 = "Emerald",
6 = "Azure"
)
has_organ = list(
"heart" = /obj/item/organ/internal/heart,
"lungs" = /obj/item/organ/internal/lungs,
@@ -327,12 +337,44 @@
if (H.internals)
H.internals.icon_state = "internal1"
/*
/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H)
H.verbs += /mob/living/carbon/human/proc/leap
..() */
updatespeciescolor(H)
H.update_icons()
//H.verbs += /mob/living/carbon/human/proc/leap
..()
/datum/species/vox/updatespeciescolor(var/mob/living/carbon/human/H) //Handling species-specific skin-tones for the Vox race.
if(H.species.name == "Vox") //Making sure we don't break Armalis.
switch(H.s_tone)
if(6) //Azure Vox.
icobase = 'icons/mob/human_races/vox/r_voxazu.dmi'
deform = 'icons/mob/human_races/vox/r_def_voxazu.dmi'
tail = "voxtail_azu"
if(5) //Emerald Vox.
icobase = 'icons/mob/human_races/vox/r_voxemrl.dmi'
deform = 'icons/mob/human_races/vox/r_def_voxemrl.dmi'
tail = "voxtail_emrl"
if(4) //Grey Vox.
icobase = 'icons/mob/human_races/vox/r_voxgry.dmi'
deform = 'icons/mob/human_races/vox/r_def_voxgry.dmi'
tail = "voxtail_gry"
if(3) //Brown Vox.
icobase = 'icons/mob/human_races/vox/r_voxbrn.dmi'
deform = 'icons/mob/human_races/vox/r_def_voxbrn.dmi'
tail = "voxtail_brn"
if(2) //Dark Green Vox.
icobase = 'icons/mob/human_races/vox/r_voxdgrn.dmi'
deform = 'icons/mob/human_races/vox/r_def_voxdgrn.dmi'
tail = "voxtail_dgrn"
else //Default Green Vox.
icobase = 'icons/mob/human_races/vox/r_vox.dmi'
deform = 'icons/mob/human_races/vox/r_def_vox.dmi'
tail = "voxtail" //Ensures they get an appropriately coloured tail depending on the skin-tone.
H.update_dna()
/datum/species/vox/armalis/handle_post_spawn(var/mob/living/carbon/human/H)
H.verbs += /mob/living/carbon/human/proc/leap
H.verbs += /mob/living/carbon/human/proc/gut
..()
@@ -212,6 +212,9 @@ var/global/list/damage_icon_parts = list()
var/hulk = (HULK in src.mutations)
var/skeleton = (SKELETON in src.mutations)
if(species && species.bodyflags & HAS_ICON_SKIN_TONE)
species.updatespeciescolor(src)
//CACHING: Generate an index key from visible bodyparts.
//0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic.
//Create a new, blank icon for our mob to use.
@@ -1108,12 +1111,13 @@ var/global/list/damage_icon_parts = list()
if(body_accessory)
if(body_accessory.try_restrictions(src))
var/icon/accessory_s = new/icon("icon" = body_accessory.icon, "icon_state" = body_accessory.icon_state)
accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode)
if(species.bodyflags & HAS_SKIN_COLOR)
accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode)
if(src.species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs...
if(species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs...
// Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway.
var/icon/temp1 = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s")
if(src.species.name in body_accessory.allowed_species)
if(species.name in body_accessory.allowed_species)
var/icon/temp = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "[species.tail]_delay")
temp1 = temp
else
@@ -1129,7 +1133,7 @@ var/global/list/damage_icon_parts = list()
// Creates a blank icon, and copies accessory_s' north direction sprite into it
// before passing that to the tail layer that overlays uniforms and such.
var/icon/temp2 = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s")
if(src.species.name in body_accessory.allowed_species)
if(species.name in body_accessory.allowed_species)
var/icon/temp = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "[species.tail]_delay")
temp2 = temp
else
@@ -1145,9 +1149,10 @@ var/global/list/damage_icon_parts = list()
else if(species.tail && species.bodyflags & HAS_TAIL) //no tailless tajaran
if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space))
var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s")
tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
if(species.bodyflags & HAS_SKIN_COLOR)
tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
if(src.species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs...
if(species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs...
// Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway.
var/icon/temp1 = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_delay")
temp1.Insert(new/icon(tail_s,dir=SOUTH),dir=SOUTH)
@@ -1177,13 +1182,14 @@ var/global/list/damage_icon_parts = list()
if(body_accessory)
var/icon/accessory_s = new/icon("icon" = body_accessory.get_animated_icon(), "icon_state" = body_accessory.get_animated_icon_state())
accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode)
if(species.bodyflags & HAS_SKIN_COLOR)
accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode)
if(src.species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs...
if(species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs...
// Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway.
var/icon/temp1 = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s")
if(body_accessory.allowed_species)
if(src.species.name in body_accessory.allowed_species)
if(species.name in body_accessory.allowed_species)
var/icon/temp = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "[species.tail]_delay")
temp1 = temp
else
@@ -1199,7 +1205,7 @@ var/global/list/damage_icon_parts = list()
// Creates a blank icon, and copies accessory_s' north direction sprite into it
// before passing that to the tail layer that overlays uniforms and such.
var/icon/temp2 = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s")
if(src.species.name in body_accessory.allowed_species) // If the user's species is in the list of allowed species for the currently selected body accessory, use the appropriate animation timing blank
if(species.name in body_accessory.allowed_species) // If the user's species is in the list of allowed species for the currently selected body accessory, use the appropriate animation timing blank
var/icon/temp = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "[species.tail]_delay")
temp2 = temp
else // Else if the user's species is not in the list of allowed species for the currently selected body accessory, this point must have been reached by admin-override. Use vulpkanin timings as default.
@@ -1214,9 +1220,10 @@ var/global/list/damage_icon_parts = list()
else if(species.tail && species.bodyflags & HAS_TAIL)
var/icon/tailw_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]w_s")
tailw_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
if(species.bodyflags & HAS_SKIN_COLOR)
tailw_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
if(src.species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs...
if(species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs...
// Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway.
var/icon/temp1 = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_delay")
temp1.Insert(tailw_s,dir=SOUTH)
@@ -199,13 +199,25 @@
var/icon/icobase
var/datum/species/current_species = all_species[species]
//Icon-based species colour.
var/coloured_tail
if(current_species)
icobase = current_species.icobase
if(current_species.bodyflags & HAS_ICON_SKIN_TONE) //Handling species-specific icon-based skin tones by flagged race.
var/mob/living/carbon/human/H = new
H.species = current_species
H.s_tone = s_tone
H.species.updatespeciescolor(H)
icobase = H.species.icobase
if(H.species.bodyflags & HAS_TAIL)
coloured_tail = H.species.tail
else
icobase = current_species.icobase
else
icobase = 'icons/mob/human_races/r_human.dmi'
var/fat=""
if(disabilities&DISABILITY_FLAG_FAT && current_species.flags & CAN_BE_FAT)
if(disabilities & DISABILITY_FLAG_FAT && current_species.flags & CAN_BE_FAT)
fat="_fat"
preview_icon = new /icon(icobase, "torso_[g][fat]")
preview_icon.Blend(new /icon(icobase, "groin_[g]"), ICON_OVERLAY)
@@ -222,7 +234,10 @@
tail_icon_state = accessory.icon_state
else
tail_icon = "icons/effects/species.dmi"
tail_icon_state = "[current_species.tail]_s"
if(coloured_tail)
tail_icon_state = "[coloured_tail]_s"
else
tail_icon_state = "[current_species.tail]_s"
var/icon/temp = new /icon("icon" = tail_icon, "icon_state" = tail_icon_state)
preview_icon.Blend(temp, ICON_OVERLAY)
@@ -1017,7 +1017,6 @@
icon_state = "vox_beard"
species_allowed = list("Vox")
//Vulpkanin
vulp_blaze