Character Creation Overhaul (#7987)
* Rebase fail. good thing I made back ups. c: * Tails more or less done * wouldn't update cleanly otherwise * It's completly working now. holy fuck I did it Just need the refurbished body markings done, then to chop 'em up for full PR status * MARKINGS DONE AAAAAAAAAAAAA * fixes digi legs that didn't convert correctly * ports the refractored preferences Kinda ugly now tbh. but fuckit * quality sweep, things should should properly now in general * Taurs converted and improved! BODYMARKING -> MATRIXED * oops. s'what I get for not compile checking * remember to throw shade at furries * vigorously update markings upon switching species and colors * re-adds old wolf ears, Big Wolf fixes snout bugs * few more snout tweaks * cut the lists, cut everything. reeee * This code I s2g * Adds context clues to preferences Hopefully people will read them before making an OOC fuss * Fixes hands and feet markings with this one weird trick remember kids, proper layering and order of operations is important * Sprite tweaking and polishing Sergal stuff being worked on * a few QoL things for species swapping * how the fuck did I miss these markings * fleshes out sprites in preperation for marking experimentation later * fixes catboy problems * Mam_snout is a thing now, * pixel adjusted tails, cleaned up wah tail a bit better also gets digitgate legs missing pixels fixed * cleans up more shit. ree * force "plain" instead of none to avoid missing pixel reports * tweaks to reinspire mapdiff * Clean up Preference UI Looks a little better now * k * doubly ensure None markings aren't valid * reee spessman barbie * brightens pixels around tiger head markings * YEENS * Cat ears tweaked because it triggers Kev otherwise * another session of quality control * Crows and crow accessories * husk fixes * works good enough, mission accomplished * fixes the proc properly * cleans up brute force code that isn't needed * c a t
This commit is contained in:
@@ -20,17 +20,19 @@
|
||||
features = random_features()
|
||||
age = rand(AGE_MIN,AGE_MAX)
|
||||
|
||||
/datum/preferences/proc/update_preview_icon(nude = FALSE)
|
||||
/datum/preferences/proc/update_preview_icon()
|
||||
// Silicons only need a very basic preview since there is no customization for them.
|
||||
// var/wide_icon = FALSE //CITDEL THINGS
|
||||
// if(features["taur"] != "None")
|
||||
// wide_icon = TRUE
|
||||
|
||||
if(job_engsec_high)
|
||||
switch(job_engsec_high)
|
||||
if(AI_JF)
|
||||
preview_icon = icon('icons/mob/ai.dmi', "AI", SOUTH)
|
||||
preview_icon.Scale(64, 64)
|
||||
parent.show_character_previews(image('icons/mob/ai.dmi', icon_state = "AI", dir = SOUTH))
|
||||
return
|
||||
if(CYBORG)
|
||||
preview_icon = icon('icons/mob/robots.dmi', "robot", SOUTH)
|
||||
preview_icon.Scale(64, 64)
|
||||
parent.show_character_previews(image('icons/mob/robots.dmi', icon_state = "robot", dir = SOUTH))
|
||||
return
|
||||
|
||||
// Set up the dummy for its photoshoot
|
||||
@@ -57,30 +59,11 @@
|
||||
previewJob = job
|
||||
break
|
||||
|
||||
if(previewJob && !nude)
|
||||
mannequin.job = previewJob.title
|
||||
previewJob.equip(mannequin, TRUE)
|
||||
COMPILE_OVERLAYS(mannequin)
|
||||
CHECK_TICK
|
||||
preview_icon = icon('icons/effects/effects.dmi', "nothing")
|
||||
preview_icon.Scale(48+32, 16+32)
|
||||
CHECK_TICK
|
||||
mannequin.setDir(NORTH)
|
||||
if(previewJob)
|
||||
if(current_tab != 2)
|
||||
mannequin.job = previewJob.title
|
||||
previewJob.equip(mannequin, TRUE)
|
||||
|
||||
var/icon/stamp = getFlatIcon(mannequin)
|
||||
CHECK_TICK
|
||||
preview_icon.Blend(stamp, ICON_OVERLAY, 25, 17)
|
||||
CHECK_TICK
|
||||
mannequin.setDir(WEST)
|
||||
stamp = getFlatIcon(mannequin)
|
||||
CHECK_TICK
|
||||
preview_icon.Blend(stamp, ICON_OVERLAY, 1, 9)
|
||||
CHECK_TICK
|
||||
mannequin.setDir(SOUTH)
|
||||
stamp = getFlatIcon(mannequin)
|
||||
CHECK_TICK
|
||||
preview_icon.Blend(stamp, ICON_OVERLAY, 49, 1)
|
||||
CHECK_TICK
|
||||
preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser.
|
||||
CHECK_TICK
|
||||
COMPILE_OVERLAYS(mannequin)
|
||||
parent.show_character_previews(new /mutable_appearance(mannequin))
|
||||
unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES)
|
||||
|
||||
@@ -1522,18 +1522,3 @@
|
||||
/datum/sprite_accessory/moth_wings/snow
|
||||
name = "Snow"
|
||||
icon_state = "snow"
|
||||
|
||||
//Lunasune
|
||||
/datum/sprite_accessory/mam_ears/lunasune
|
||||
name = "lunasune"
|
||||
icon_state = "lunasune"
|
||||
hasinner = 1
|
||||
extra = TRUE
|
||||
extra_color_src = MUTCOLORS2
|
||||
ckeys_allowed = list("invader4352")
|
||||
|
||||
/datum/sprite_accessory/mam_tails/lunasune
|
||||
name = "lunasune"
|
||||
icon_state = "lunasune"
|
||||
extra = TRUE
|
||||
ckeys_allowed = list("invader4352")
|
||||
|
||||
@@ -317,9 +317,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
if(!HD) //Decapitated
|
||||
return
|
||||
|
||||
if(H.has_trait(TRAIT_HUSK))
|
||||
return
|
||||
|
||||
var/datum/sprite_accessory/S
|
||||
var/list/standing = list()
|
||||
|
||||
@@ -351,7 +351,6 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(H.facial_hair_style && (FACEHAIR in species_traits) && (!facialhair_hidden || dynamic_fhair_suffix))
|
||||
S = GLOB.facial_hair_styles_list[H.facial_hair_style]
|
||||
if(S)
|
||||
|
||||
//List of all valid dynamic_fhair_suffixes
|
||||
var/static/list/fextensions
|
||||
if(!fextensions)
|
||||
@@ -410,7 +409,6 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
else if(H.hair_style && (HAIR in species_traits))
|
||||
S = GLOB.hair_styles_list[H.hair_style]
|
||||
if(S)
|
||||
|
||||
//List of all valid dynamic_hair_suffixes
|
||||
var/static/list/extensions
|
||||
if(!extensions)
|
||||
@@ -612,6 +610,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
bodyparts_to_add -= "mam_ears"
|
||||
|
||||
if("mam_snouts" in mutant_bodyparts) //Take a closer look at that snout!
|
||||
if((H.wear_mask && (H.wear_mask.flags_inv & HIDEFACE)) || (H.head && (H.head.flags_inv & HIDEFACE)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
bodyparts_to_add -= "mam_snouts"
|
||||
|
||||
if("taur" in mutant_bodyparts)
|
||||
if(!H.dna.features["taur"] || H.dna.features["taur"] == "None" || (H.wear_suit && (H.wear_suit.flags_inv & HIDETAUR)))
|
||||
bodyparts_to_add -= "taur"
|
||||
@@ -696,13 +698,19 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
|
||||
var/mutable_appearance/accessory_overlay = mutable_appearance(S.icon, layer = -layer)
|
||||
|
||||
accessory_overlay.color = null //just because. reee.
|
||||
|
||||
//A little rename so we don't have to use tail_lizard or tail_human when naming the sprites.
|
||||
if(bodypart == "tail_lizard" || bodypart == "tail_human" || bodypart == "mam_tail" || bodypart == "xenotail")
|
||||
bodypart = "tail"
|
||||
else if(bodypart == "waggingtail_lizard" || bodypart == "waggingtail_human" || bodypart == "mam_waggingtail")
|
||||
else if(bodypart == "waggingtail_lizard" || bodypart == "waggingtail_human")
|
||||
bodypart = "waggingtail"
|
||||
if(bodypart == "mam_waggingtail")
|
||||
bodypart = "tailwag"
|
||||
if(bodypart == "mam_ears" || bodypart == "ears")
|
||||
bodypart = "ears"
|
||||
if(bodypart == "mam_snouts" || bodypart == "snout")
|
||||
bodypart = "snout"
|
||||
if(bodypart == "xenohead")
|
||||
bodypart = "xhead"
|
||||
|
||||
@@ -714,6 +722,15 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(S.center)
|
||||
accessory_overlay = center_image(accessory_overlay, S.dimension_x, S.dimension_y)
|
||||
|
||||
var/list/colorlist = list()
|
||||
colorlist.Cut()
|
||||
colorlist += ReadRGB(H.dna.features["mcolor"])
|
||||
colorlist += ReadRGB(H.dna.features["mcolor2"])
|
||||
colorlist += ReadRGB(H.dna.features["mcolor3"])
|
||||
colorlist += list(0,0,0)
|
||||
for(var/index=1, index<=colorlist.len, index++)
|
||||
colorlist[index] = colorlist[index]/255
|
||||
|
||||
if(!(H.has_trait(TRAIT_HUSK)))
|
||||
if(!forced_colour)
|
||||
switch(S.color_src)
|
||||
@@ -732,6 +749,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
accessory_overlay.color = "#[fixed_mut_color3]"
|
||||
else
|
||||
accessory_overlay.color = "#[H.dna.features["mcolor3"]]"
|
||||
|
||||
if(MATRIXED)
|
||||
accessory_overlay.color = list(colorlist)
|
||||
|
||||
if(HAIR)
|
||||
if(hair_color == "mutcolor")
|
||||
accessory_overlay.color = "#[H.dna.features["mcolor"]]"
|
||||
@@ -743,6 +764,21 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
accessory_overlay.color = "#[H.eye_color]"
|
||||
else
|
||||
accessory_overlay.color = forced_colour
|
||||
else
|
||||
if(bodypart == "ears")
|
||||
accessory_overlay.icon_state = "m_ears_none_[layertext]"
|
||||
if(bodypart == "tail")
|
||||
accessory_overlay.icon_state = "m_tail_husk_[layertext]"
|
||||
if(MATRIXED)
|
||||
var/list/husklist = list()
|
||||
husklist += ReadRGB("#a3a3a3")
|
||||
husklist += ReadRGB("#a3a3a3")
|
||||
husklist += ReadRGB("#a3a3a3")
|
||||
husklist += list(0,0,0)
|
||||
for(var/index=1, index<=husklist.len, index++)
|
||||
husklist[index] = husklist[index]/255
|
||||
accessory_overlay.color = husklist
|
||||
|
||||
standing += accessory_overlay
|
||||
|
||||
if(S.hasinner)
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
id = "felinid"
|
||||
limbs_id = "human"
|
||||
|
||||
mutant_bodyparts = list("ears", "tail_human")
|
||||
default_features = list("mcolor" = "FFF", "tail_human" = "Cat", "ears" = "Cat", "wings" = "None")
|
||||
mutant_bodyparts = list("mam_ears", "mam_tail")
|
||||
default_features = list("mcolor" = "FFF", "mam_tail" = "Cat", "mam_ears" = "Cat", "wings" = "None")
|
||||
|
||||
mutantears = /obj/item/organ/ears/cat
|
||||
mutanttail = /obj/item/organ/tail/cat
|
||||
@@ -23,38 +23,39 @@
|
||||
stop_wagging_tail(H)
|
||||
. = ..()
|
||||
|
||||
|
||||
/datum/species/human/felinid/can_wag_tail(mob/living/carbon/human/H)
|
||||
return ("tail_human" in mutant_bodyparts) || ("waggingtail_human" in mutant_bodyparts)
|
||||
return ("mam_tail" in mutant_bodyparts) || ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/human/felinid/is_wagging_tail(mob/living/carbon/human/H)
|
||||
return ("waggingtail_human" in mutant_bodyparts)
|
||||
return ("mam_waggingtail" in mutant_bodyparts)
|
||||
|
||||
/datum/species/human/felinid/start_wagging_tail(mob/living/carbon/human/H)
|
||||
if("tail_human" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "tail_human"
|
||||
mutant_bodyparts |= "waggingtail_human"
|
||||
if("mam_tail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_tail"
|
||||
mutant_bodyparts |= "mam_waggingtail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/human/felinid/stop_wagging_tail(mob/living/carbon/human/H)
|
||||
if("waggingtail_human" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "waggingtail_human"
|
||||
mutant_bodyparts |= "tail_human"
|
||||
if("mam_waggingtail" in mutant_bodyparts)
|
||||
mutant_bodyparts -= "mam_waggingtail"
|
||||
mutant_bodyparts |= "mam_tail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/human/felinid/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load)
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(!pref_load) //Hah! They got forcefully purrbation'd. Force default felinid parts on them if they have no mutant parts in those areas!
|
||||
if(H.dna.features["tail_human"] == "None")
|
||||
H.dna.features["tail_human"] = "Cat"
|
||||
if(H.dna.features["ears"] == "None")
|
||||
H.dna.features["ears"] = "Cat"
|
||||
if(H.dna.features["ears"] == "Cat")
|
||||
if(H.dna.features["mam_tail"] == "None")
|
||||
H.dna.features["mam_tail"] = "Cat"
|
||||
if(H.dna.features["mam_ears"] == "None")
|
||||
H.dna.features["mam_ears"] = "Cat"
|
||||
if(H.dna.features["mam_ears"] == "Cat")
|
||||
var/obj/item/organ/ears/cat/ears = new
|
||||
ears.Insert(H, drop_if_replaced = FALSE)
|
||||
else
|
||||
mutantears = /obj/item/organ/ears
|
||||
if(H.dna.features["tail_human"] == "Cat")
|
||||
if(H.dna.features["mam_tail"] == "Cat")
|
||||
var/obj/item/organ/tail/cat/tail = new
|
||||
tail.Insert(H, drop_if_replaced = FALSE)
|
||||
else
|
||||
|
||||
@@ -359,7 +359,6 @@ There are several things that need to be remembered:
|
||||
apply_overlay(BELT_LAYER)
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/update_inv_wear_suit()
|
||||
remove_overlay(SUIT_LAYER)
|
||||
|
||||
@@ -391,8 +390,6 @@ There are several things that need to be remembered:
|
||||
else if(S.taurmode == NOT_TAURIC && S.adjusted == NORMAL_STYLE)
|
||||
S.alternate_worn_icon = null
|
||||
|
||||
|
||||
|
||||
overlays_standing[SUIT_LAYER] = S.build_worn_icon(state = wear_suit.icon_state, default_layer = SUIT_LAYER, default_icon_file = ((wear_suit.alternate_worn_icon) ? S.alternate_worn_icon : 'icons/mob/suit.dmi'))
|
||||
var/mutable_appearance/suit_overlay = overlays_standing[SUIT_LAYER]
|
||||
if(OFFSET_SUIT in dna.species.offset_features)
|
||||
@@ -477,7 +474,6 @@ There are several things that need to be remembered:
|
||||
out += overlays_standing[i]
|
||||
return out
|
||||
|
||||
|
||||
//human HUD updates for items in our inventory
|
||||
|
||||
//update whether our head item appears on our hud.
|
||||
@@ -614,7 +610,7 @@ generate/load female uniform sprites matching all previously decided variables
|
||||
else if(dna.species.fixed_mut_color)
|
||||
. += "-coloured-[dna.species.fixed_mut_color]"
|
||||
else if(dna.features["mcolor"])
|
||||
. += "-coloured-[dna.features["mcolor"]]"
|
||||
. += "-coloured-[dna.features["mcolor"]]-[dna.features["mcolor2"]]-[dna.features["mcolor3"]]"
|
||||
else
|
||||
. += "-not_coloured"
|
||||
|
||||
@@ -644,6 +640,8 @@ generate/load female uniform sprites matching all previously decided variables
|
||||
. += "-digitigrade[BP.use_digitigrade]"
|
||||
if(BP.dmg_overlay_type)
|
||||
. += "-[BP.dmg_overlay_type]"
|
||||
if(BP.body_markings)
|
||||
. += "-[BP.body_markings]"
|
||||
|
||||
if(has_trait(TRAIT_HUSK))
|
||||
. += "-husk"
|
||||
|
||||
@@ -261,11 +261,13 @@
|
||||
if(!has_trait(TRAIT_HUSK))
|
||||
remove_trait(TRAIT_DISFIGURED, "husk")
|
||||
update_body()
|
||||
return TRUE
|
||||
|
||||
/mob/living/proc/become_husk(source)
|
||||
if(!has_trait(TRAIT_HUSK))
|
||||
add_trait(TRAIT_DISFIGURED, "husk")
|
||||
update_body()
|
||||
. = TRUE
|
||||
add_trait(TRAIT_HUSK, source)
|
||||
|
||||
/mob/living/proc/cure_fakedeath(list/sources)
|
||||
|
||||
Reference in New Issue
Block a user