Generalizes lizard parts to "features" for future non-lizard fields, at the same time merging mutant color into this list

Random lizard bodies will finally have color!

Pushes features almost all the way to the DNA side of thing, the mob side is only needed during character creation.

Note that changes to the save file will invoke a one time per character runtime for legacy characters as the save file purges mutant_color, this is as far as I can tell harmless, has no effect on the player, and is self correcting.
This commit is contained in:
Incoming
2015-06-12 00:43:35 -04:00
parent bff351c555
commit 595bb0c8e4
21 changed files with 91 additions and 111 deletions

View File

@@ -36,7 +36,7 @@
if(FEMALE) return pick(socks_f) if(FEMALE) return pick(socks_f)
else return pick(socks_list) else return pick(socks_list)
/proc/random_lizard_features() /proc/random_features()
if(!tails_list.len) if(!tails_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails, tails_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails, tails_list)
if(!snouts_list.len) if(!snouts_list.len)
@@ -50,7 +50,7 @@
if(!body_markings_list.len) if(!body_markings_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, body_markings_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, body_markings_list)
return(list("tail" = pick(tails_list), "snout" = pick(snouts_list), "horns" = pick(horns_list), "frills" = pick(frills_list), "spines" = pick(spines_list), "body_markings" = pick(body_markings_list))) return(list("mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "tail" = pick(tails_list), "snout" = pick(snouts_list), "horns" = pick(horns_list), "frills" = pick(frills_list), "spines" = pick(spines_list), "body_markings" = pick(body_markings_list)))
/proc/random_hair_style(gender) /proc/random_hair_style(gender)
switch(gender) switch(gender)

View File

@@ -260,8 +260,7 @@ var/record_id_num = 1001
L.fields["enzymes"] = H.dna.struc_enzymes L.fields["enzymes"] = H.dna.struc_enzymes
L.fields["identity"] = H.dna.uni_identity L.fields["identity"] = H.dna.uni_identity
L.fields["species"] = H.dna.species.type L.fields["species"] = H.dna.species.type
L.fields["mcolor"] = H.dna.mutant_color L.fields["features"] = H.dna.features
L.fields["lizard_parts"]= H.dna.lizard_parts
L.fields["image"] = image L.fields["image"] = image
locked += L locked += L
return return
@@ -273,7 +272,7 @@ var/record_id_num = 1001
photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.skin_tone]_[g]_s") photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.skin_tone]_[g]_s")
else else
photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.dna.species.id]_[g]_s") photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.dna.species.id]_[g]_s")
photo.Blend("#[H.dna.mutant_color]", ICON_MULTIPLY) photo.Blend("#[H.dna.features["mcolor"]]", ICON_MULTIPLY)
var/icon/eyes_s var/icon/eyes_s
if(EYECOLOR in H.dna.species.specflags) if(EYECOLOR in H.dna.species.specflags)

View File

@@ -21,8 +21,7 @@
var/uni_identity var/uni_identity
var/blood_type var/blood_type
var/datum/species/species = new /datum/species/human() //The type of mutant race the player is if applicable (i.e. potato-man) var/datum/species/species = new /datum/species/human() //The type of mutant race the player is if applicable (i.e. potato-man)
var/mutant_color = "FFF" // What color you are if you have certain speciess var/list/features = list("FFF") //first value is mutant color
var/list/lizard_parts = list()
var/real_name //Stores the real name of the person who originally got this dna datum. Used primarely for changelings, var/real_name //Stores the real name of the person who originally got this dna datum. Used primarely for changelings,
var/list/mutations = list() //All mutations are from now on here var/list/mutations = list() //All mutations are from now on here
var/mob/living/carbon/holder var/mob/living/carbon/holder
@@ -37,8 +36,7 @@
destination.dna.uni_identity = uni_identity destination.dna.uni_identity = uni_identity
destination.dna.blood_type = blood_type destination.dna.blood_type = blood_type
hardset_dna(destination, null, null, null, null, species) hardset_dna(destination, null, null, null, null, species)
destination.dna.mutant_color = mutant_color destination.dna.features = features
destination.dna.lizard_parts = lizard_parts
destination.dna.real_name = real_name destination.dna.real_name = real_name
destination.dna.mutations = mutations destination.dna.mutations = mutations
@@ -48,8 +46,7 @@
new_dna.uni_identity = uni_identity new_dna.uni_identity = uni_identity
new_dna.blood_type = blood_type new_dna.blood_type = blood_type
new_dna.species = new species.type new_dna.species = new species.type
new_dna.mutant_color = mutant_color new_dna.features = features
new_dna.lizard_parts = lizard_parts
new_dna.real_name = real_name new_dna.real_name = real_name
new_dna.mutations = mutations new_dna.mutations = mutations
@@ -134,7 +131,7 @@
spans |= M.get_spans() spans |= M.get_spans()
return spans return spans
/proc/hardset_dna(mob/living/carbon/owner, ui, se, real_name, blood_type, datum/species/mrace, mcolor, lizard_parts) /proc/hardset_dna(mob/living/carbon/owner, ui, se, real_name, blood_type, datum/species/mrace, features)
if(!ismonkey(owner) && !ishuman(owner)) if(!ismonkey(owner) && !ishuman(owner))
return return
if(!owner.dna) if(!owner.dna)
@@ -146,15 +143,8 @@
owner.reagents.del_reagent(exotic_blood.id) owner.reagents.del_reagent(exotic_blood.id)
owner.dna.species = new mrace() owner.dna.species = new mrace()
if(mcolor) if(features)
owner.dna.mutant_color = mcolor owner.dna.features = features
if(lizard_parts)
owner.dna.lizard_parts = lizard_parts
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
H.lizard_parts = lizard_parts
if(real_name) if(real_name)
owner.real_name = real_name owner.real_name = real_name
@@ -203,9 +193,7 @@
character.dna.uni_identity = character.dna.generate_uni_identity(character) character.dna.uni_identity = character.dna.generate_uni_identity(character)
character.dna.struc_enzymes = character.dna.generate_struc_enzymes(character) character.dna.struc_enzymes = character.dna.generate_struc_enzymes(character)
character.dna.unique_enzymes = character.dna.generate_unique_enzymes(character) character.dna.unique_enzymes = character.dna.generate_unique_enzymes(character)
if(istype(character, /mob/living/carbon/human)) character.dna.features = character.features
var/mob/living/carbon/human/H = character
H.dna.lizard_parts = H.lizard_parts
return character.dna return character.dna
/proc/create_dna(mob/living/carbon/C, datum/species/S) //don't use this unless you're about to use hardset_dna or ready_dna /proc/create_dna(mob/living/carbon/C, datum/species/S) //don't use this unless you're about to use hardset_dna or ready_dna
@@ -985,7 +973,7 @@
/datum/dna/proc/is_same_as(var/datum/dna/D) /datum/dna/proc/is_same_as(var/datum/dna/D)
if(uni_identity == D.uni_identity && struc_enzymes == D.struc_enzymes && real_name == D.real_name) if(uni_identity == D.uni_identity && struc_enzymes == D.struc_enzymes && real_name == D.real_name)
if(species == D.species && mutant_color == D.mutant_color && blood_type == D.blood_type && D.lizard_parts == lizard_parts) if(species == D.species && features == D.features && blood_type == D.blood_type)
return 1 return 1
return 0 return 0

View File

@@ -213,7 +213,7 @@
/obj/effect/cocoon/abductor/proc/Copy(var/mob/living/carbon/human/H) /obj/effect/cocoon/abductor/proc/Copy(var/mob/living/carbon/human/H)
var/mob/living/carbon/human/interactive/greytide/clone = new(src) var/mob/living/carbon/human/interactive/greytide/clone = new(src)
hardset_dna(clone,H.dna.uni_identity,H.dna.struc_enzymes,H.real_name, H.dna.blood_type, H.dna.species.type, H.dna.mutant_color) hardset_dna(clone,H.dna.uni_identity,H.dna.struc_enzymes,H.real_name, H.dna.blood_type, H.dna.species.type, H.dna.features)
//There's no define for this / get all items ? //There's no define for this / get all items ?
var/list/slots = list(slot_back,slot_w_uniform,slot_wear_suit,\ var/list/slots = list(slot_back,slot_w_uniform,slot_wear_suit,\

View File

@@ -43,7 +43,7 @@
photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.skin_tone]_[g]_s") photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.skin_tone]_[g]_s")
else else
photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.dna.species.id]_[g]_s") photo = icon("icon" = 'icons/mob/human.dmi', "icon_state" = "[H.dna.species.id]_[g]_s")
photo.Blend("#[H.dna.mutant_color]", ICON_MULTIPLY) photo.Blend("#[H.dna.features["mcolor"]]", ICON_MULTIPLY)
var/icon/eyes_s var/icon/eyes_s
if(EYECOLOR in H.dna.species.specflags) if(EYECOLOR in H.dna.species.specflags)

View File

@@ -92,7 +92,7 @@
new_dna.struc_enzymes = T.dna.struc_enzymes new_dna.struc_enzymes = T.dna.struc_enzymes
new_dna.real_name = T.dna.real_name new_dna.real_name = T.dna.real_name
new_dna.species = T.dna.species new_dna.species = T.dna.species
new_dna.mutant_color = T.dna.mutant_color new_dna.features = T.dna.features
new_dna.blood_type = T.dna.blood_type new_dna.blood_type = T.dna.blood_type
absorbedcount++ absorbedcount++
store_dna(new_dna, user) store_dna(new_dna, user)

View File

@@ -91,7 +91,7 @@
var/datum/dna/NewDNA = selected_dna var/datum/dna/NewDNA = selected_dna
if(ismonkey(target)) if(ismonkey(target))
user << "<span class='notice'>We stealthily sting [target.name].</span>" user << "<span class='notice'>We stealthily sting [target.name].</span>"
hardset_dna(target, NewDNA.uni_identity, NewDNA.struc_enzymes, NewDNA.real_name, NewDNA.blood_type, NewDNA.species.type, NewDNA.mutant_color, NewDNA.lizard_parts) hardset_dna(target, NewDNA.uni_identity, NewDNA.struc_enzymes, NewDNA.real_name, NewDNA.blood_type, NewDNA.species.type, NewDNA.features)
updateappearance(target) updateappearance(target)
feedback_add_details("changeling_powers","TS") feedback_add_details("changeling_powers","TS")
return 1 return 1

View File

@@ -17,9 +17,7 @@
user.dna = chosen_dna user.dna = chosen_dna
user.real_name = chosen_dna.real_name user.real_name = chosen_dna.real_name
hardset_dna(user, null, null, null, null, chosen_dna.species.type) hardset_dna(user, null, null, null, null, chosen_dna.species.type, chosen_dna.features)
user.dna.mutant_color = chosen_dna.mutant_color
user.dna.lizard_parts = chosen_dna.lizard_parts
updateappearance(user) updateappearance(user)
domutcheck(user) domutcheck(user)

View File

@@ -122,7 +122,7 @@
//Clonepod //Clonepod
//Start growing a human clone in the pod! //Start growing a human clone in the pod!
/obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/datum/species/mrace, var/mcolor, var/lizard_parts, var/factions) /obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/ui, var/se, var/mindref, var/datum/species/mrace, var/list/features, var/factions)
if(panel_open) if(panel_open)
return 0 return 0
if(mess || attempting) if(mess || attempting)
@@ -183,7 +183,7 @@
H.ckey = ckey H.ckey = ckey
H << "<span class='notice'><b>Consciousness slowly creeps over you as your body regenerates.</b><br><i>So this is what cloning feels like?</i></span>" H << "<span class='notice'><b>Consciousness slowly creeps over you as your body regenerates.</b><br><i>So this is what cloning feels like?</i></span>"
hardset_dna(H, ui, se, null, null, mrace, mcolor, lizard_parts) hardset_dna(H, ui, se, null, null, mrace, features)
H.faction |= factions H.faction |= factions
H.set_cloned_appearance() H.set_cloned_appearance()

View File

@@ -35,7 +35,7 @@
if(!(pod1.occupant || pod1.mess) && (pod1.efficiency > 5)) if(!(pod1.occupant || pod1.mess) && (pod1.efficiency > 5))
for(var/datum/data/record/R in records) for(var/datum/data/record/R in records)
if(!(pod1.occupant || pod1.mess)) if(!(pod1.occupant || pod1.mess))
if(pod1.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["mcolor"], R.fields["lizard_parts"], R.fields["factions"])) if(pod1.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"]))
records -= R records -= R
/obj/machinery/computer/cloning/proc/updatemodules() /obj/machinery/computer/cloning/proc/updatemodules()
@@ -329,7 +329,7 @@
temp = "<font class='bad'>Clonepod malfunction.</font>" temp = "<font class='bad'>Clonepod malfunction.</font>"
else if(!config.revival_cloning) else if(!config.revival_cloning)
temp = "<font class='bad'>Unable to initiate cloning cycle.</font>" temp = "<font class='bad'>Unable to initiate cloning cycle.</font>"
else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["mcolor"], C.fields["lizard_parts"], C.fields["factions"])) else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["features"], C.fields["factions"]))
temp = "[C.fields["name"]] => <font class='good'>Cloning cycle in progress...</font>" temp = "[C.fields["name"]] => <font class='good'>Cloning cycle in progress...</font>"
records.Remove(C) records.Remove(C)
if(active_record == C) if(active_record == C)
@@ -380,8 +380,7 @@
R.fields["UI"] = subject.dna.uni_identity R.fields["UI"] = subject.dna.uni_identity
R.fields["SE"] = subject.dna.struc_enzymes R.fields["SE"] = subject.dna.struc_enzymes
R.fields["blood_type"] = subject.dna.blood_type R.fields["blood_type"] = subject.dna.blood_type
R.fields["mcolor"] = subject.dna.mutant_color R.fields["features"] = subject.dna.features
R.fields["lizard_parts"] = subject.dna.lizard_parts
R.fields["factions"] = subject.faction R.fields["factions"] = subject.faction
//Add an implant if needed //Add an implant if needed
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject) var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)

View File

@@ -150,7 +150,7 @@
var/temp_hsv = RGBtoHSV(new_mutantcolor) var/temp_hsv = RGBtoHSV(new_mutantcolor)
if(ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright if(ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright
H.dna.mutant_color = sanitize_hexcolor(new_mutantcolor) H.dna.features["mcolor"] = sanitize_hexcolor(new_mutantcolor)
else else
H << "<span class='notice'>Invalid color. Your color is not bright enough.</span>" H << "<span class='notice'>Invalid color. Your color is not bright enough.</span>"

View File

@@ -298,7 +298,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
//DNA //DNA
if(record_found)//Pull up their name from database records if they did have a mind. if(record_found)//Pull up their name from database records if they did have a mind.
hardset_dna(new_character, record_found.fields["identity"], record_found.fields["enzymes"], record_found.fields["name"], record_found.fields["blood_type"], record_found.fields["species"], record_found.fields["mcolor"], record_found.fields["lizard_parts"]) hardset_dna(new_character, record_found.fields["identity"], record_found.fields["enzymes"], record_found.fields["name"], record_found.fields["blood_type"], record_found.fields["species"], record_found.fields["features"])
else//If they have no records, we just do a random DNA for them, based on their random appearance/savefile. else//If they have no records, we just do a random DNA for them, based on their random appearance/savefile.
ready_dna(new_character) ready_dna(new_character)

View File

@@ -61,8 +61,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
var/skin_tone = "caucasian1" //Skin color var/skin_tone = "caucasian1" //Skin color
var/eye_color = "000" //Eye color var/eye_color = "000" //Eye color
var/datum/species/pref_species = new /datum/species/human() //Mutant race var/datum/species/pref_species = new /datum/species/human() //Mutant race
var/mutant_color = "FFF" //Mutant race skin color var/list/features = list("mcolor" = "FFF", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None")
var/list/lizard_parts = list("tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None")
var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity") var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity")
@@ -245,7 +244,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
dat += "<h3>Alien Color</h3>" dat += "<h3>Alien Color</h3>"
dat += "<span style='border: 1px solid #161616; background-color: #[mutant_color];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=mutant_color;task=input'>Change</a><BR>" dat += "<span style='border: 1px solid #161616; background-color: #[features["mcolor"]];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=mutant_color;task=input'>Change</a><BR>"
dat += "</td>" dat += "</td>"
@@ -254,7 +253,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
dat += "<h3>Tail</h3>" dat += "<h3>Tail</h3>"
dat += "<a href='?_src_=prefs;preference=tail;task=input'>[lizard_parts["tail"]]</a><BR>" dat += "<a href='?_src_=prefs;preference=tail;task=input'>[features["tail"]]</a><BR>"
dat += "</td>" dat += "</td>"
@@ -263,7 +262,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
dat += "<h3>Snout</h3>" dat += "<h3>Snout</h3>"
dat += "<a href='?_src_=prefs;preference=snout;task=input'>[lizard_parts["snout"]]</a><BR>" dat += "<a href='?_src_=prefs;preference=snout;task=input'>[features["snout"]]</a><BR>"
dat += "</td>" dat += "</td>"
@@ -272,7 +271,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
dat += "<h3>Horns</h3>" dat += "<h3>Horns</h3>"
dat += "<a href='?_src_=prefs;preference=horns;task=input'>[lizard_parts["horns"]]</a><BR>" dat += "<a href='?_src_=prefs;preference=horns;task=input'>[features["horns"]]</a><BR>"
dat += "</td>" dat += "</td>"
@@ -281,7 +280,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
dat += "<h3>Frills</h3>" dat += "<h3>Frills</h3>"
dat += "<a href='?_src_=prefs;preference=frills;task=input'>[lizard_parts["frills"]]</a><BR>" dat += "<a href='?_src_=prefs;preference=frills;task=input'>[features["frills"]]</a><BR>"
dat += "</td>" dat += "</td>"
@@ -290,7 +289,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
dat += "<h3>Spines</h3>" dat += "<h3>Spines</h3>"
dat += "<a href='?_src_=prefs;preference=spines;task=input'>[lizard_parts["spines"]]</a><BR>" dat += "<a href='?_src_=prefs;preference=spines;task=input'>[features["spines"]]</a><BR>"
dat += "</td>" dat += "</td>"
@@ -299,7 +298,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
dat += "<h3>Body Markings</h3>" dat += "<h3>Body Markings</h3>"
dat += "<a href='?_src_=prefs;preference=body_markings;task=input'>[lizard_parts["body_markings"]]</a><BR>" dat += "<a href='?_src_=prefs;preference=body_markings;task=input'>[features["body_markings"]]</a><BR>"
dat += "</td>" dat += "</td>"
@@ -792,54 +791,54 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
if(result) if(result)
var/newtype = roundstart_species[result] var/newtype = roundstart_species[result]
pref_species = new newtype() pref_species = new newtype()
if(mutant_color == "#000") if(features["mcolor"] == "#000")
mutant_color = pref_species.default_color features["mcolor"] = pref_species.default_color
if("mutant_color") if("mutant_color")
var/new_mutantcolor = input(user, "Choose your character's alien skin color:", "Character Preference") as color|null var/new_mutantcolor = input(user, "Choose your character's alien skin color:", "Character Preference") as color|null
if(new_mutantcolor) if(new_mutantcolor)
var/temp_hsv = RGBtoHSV(new_mutantcolor) var/temp_hsv = RGBtoHSV(new_mutantcolor)
if(new_mutantcolor == "#000000") if(new_mutantcolor == "#000000")
mutant_color = pref_species.default_color features["mcolor"] = pref_species.default_color
else if(ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright else if(ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright
mutant_color = sanitize_hexcolor(new_mutantcolor) features["mcolor"] = sanitize_hexcolor(new_mutantcolor)
else else
user << "<span class='danger'>Invalid color. Your color is not bright enough.</span>" user << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
if("tail") if("tail")
var/new_tail var/new_tail
new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list
if(new_tail) if(new_tail)
lizard_parts["tail"] = new_tail features["tail"] = new_tail
if("snout") if("snout")
var/new_snout var/new_snout
new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in snouts_list new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in snouts_list
if(new_snout) if(new_snout)
lizard_parts["snout"] = new_snout features["snout"] = new_snout
if("horns") if("horns")
var/new_horns var/new_horns
new_horns = input(user, "Choose your character's horns:", "Character Preference") as null|anything in horns_list new_horns = input(user, "Choose your character's horns:", "Character Preference") as null|anything in horns_list
if(new_horns) if(new_horns)
lizard_parts["horns"] = new_horns features["horns"] = new_horns
if("frills") if("frills")
var/new_frills var/new_frills
new_frills = input(user, "Choose your character's frills:", "Character Preference") as null|anything in frills_list new_frills = input(user, "Choose your character's frills:", "Character Preference") as null|anything in frills_list
if(new_frills) if(new_frills)
lizard_parts["frills"] = new_frills features["frills"] = new_frills
if("spines") if("spines")
var/new_spines var/new_spines
new_spines = input(user, "Choose your character's spines:", "Character Preference") as null|anything in spines_list new_spines = input(user, "Choose your character's spines:", "Character Preference") as null|anything in spines_list
if(new_spines) if(new_spines)
lizard_parts["spines"] = new_spines features["spines"] = new_spines
if("body_markings") if("body_markings")
var/new_body_markings var/new_body_markings
new_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in body_markings_list new_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in body_markings_list
if(new_body_markings) if(new_body_markings)
lizard_parts["body_markings"] = new_body_markings features["body_markings"] = new_body_markings
if("s_tone") if("s_tone")
var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in skin_tones var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in skin_tones
@@ -1010,10 +1009,9 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
if(character.dna) if(character.dna)
character.dna.real_name = character.real_name character.dna.real_name = character.real_name
if(pref_species != /datum/species/human && config.mutant_races) if(pref_species != /datum/species/human && config.mutant_races)
hardset_dna(character, null, null, null, null, pref_species.type) hardset_dna(character, null, null, null, null, pref_species.type, features)
else else
hardset_dna(character, null, null, null, null, /datum/species/human) hardset_dna(character, null, null, null, null, /datum/species/human, features)
character.dna.mutant_color = mutant_color
character.update_mutcolor() character.update_mutcolor()
character.gender = gender character.gender = gender
@@ -1031,7 +1029,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
character.undershirt = undershirt character.undershirt = undershirt
character.socks = socks character.socks = socks
character.lizard_parts = lizard_parts character.features = features
if(backbag > 3 || backbag < 1) if(backbag > 3 || backbag < 1)
backbag = 1 //Same as above backbag = 1 //Same as above

View File

@@ -166,8 +166,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
else else
pref_species = new /datum/species/human() pref_species = new /datum/species/human()
if(!S["mutant_color"] || S["mutant_color"] == "#000") if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000")
S["mutant_color"] << "#FFF" S["features["mcolor"]"] << "#FFF"
//Character //Character
S["OOC_Notes"] >> metadata S["OOC_Notes"] >> metadata
@@ -186,8 +186,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["undershirt"] >> undershirt S["undershirt"] >> undershirt
S["socks"] >> socks S["socks"] >> socks
S["backbag"] >> backbag S["backbag"] >> backbag
S["mutant_color"] >> mutant_color S["features"] >> features
S["lizard_parts"] >> lizard_parts
S["clown_name"] >> custom_names["clown"] S["clown_name"] >> custom_names["clown"]
S["mime_name"] >> custom_names["mime"] S["mime_name"] >> custom_names["mime"]
S["ai_name"] >> custom_names["ai"] S["ai_name"] >> custom_names["ai"]
@@ -214,8 +213,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Sanitize //Sanitize
metadata = sanitize_text(metadata, initial(metadata)) metadata = sanitize_text(metadata, initial(metadata))
real_name = reject_bad_name(real_name) real_name = reject_bad_name(real_name)
if(!mutant_color || mutant_color == "#000") if(!features["mcolor"] || features["mcolor"] == "#000")
mutant_color = "#FFF" features["mcolor"] = "#FFF"
if(!real_name) real_name = random_name(gender) if(!real_name) real_name = random_name(gender)
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name)) be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body)) be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body))
@@ -239,13 +238,13 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
eye_color = sanitize_hexcolor(eye_color, 3, 0) eye_color = sanitize_hexcolor(eye_color, 3, 0)
skin_tone = sanitize_inlist(skin_tone, skin_tones) skin_tone = sanitize_inlist(skin_tone, skin_tones)
backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag)) backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag))
mutant_color = sanitize_hexcolor(mutant_color, 3, 0) features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0)
lizard_parts["tail"] = sanitize_inlist(lizard_parts["tail"], tails_list) features["tail"] = sanitize_inlist(features["tail"], tails_list)
lizard_parts["snout"] = sanitize_inlist(lizard_parts["snout"], snouts_list) features["snout"] = sanitize_inlist(features["snout"], snouts_list)
lizard_parts["horns"] = sanitize_inlist(lizard_parts["horns"], horns_list) features["horns"] = sanitize_inlist(features["horns"], horns_list)
lizard_parts["frills"] = sanitize_inlist(lizard_parts["frills"], frills_list) features["frills"] = sanitize_inlist(features["frills"], frills_list)
lizard_parts["spines"] = sanitize_inlist(lizard_parts["spines"], spines_list) features["spines"] = sanitize_inlist(features["spines"], spines_list)
lizard_parts["body_markings"] = sanitize_inlist(lizard_parts["body_markings"], body_markings_list) features["body_markings"] = sanitize_inlist(features["body_markings"], body_markings_list)
userandomjob = sanitize_integer(userandomjob, 0, 1, initial(userandomjob)) userandomjob = sanitize_integer(userandomjob, 0, 1, initial(userandomjob))
job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high)) job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high))
@@ -286,8 +285,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["socks"] << socks S["socks"] << socks
S["backbag"] << backbag S["backbag"] << backbag
S["species"] << pref_species.name S["species"] << pref_species.name
S["mutant_color"] << mutant_color S["features"] << features
S["lizard_parts"] << lizard_parts
S["clown_name"] << custom_names["clown"] S["clown_name"] << custom_names["clown"]
S["mime_name"] << custom_names["mime"] S["mime_name"] << custom_names["mime"]
S["ai_name"] << custom_names["ai"] S["ai_name"] << custom_names["ai"]

View File

@@ -848,9 +848,9 @@
podman.ckey = ckey_holder podman.ckey = ckey_holder
podman.gender = blood_gender podman.gender = blood_gender
podman.faction |= factions podman.faction |= factions
if(!mutant_color) if(!features["mcolor"])
mutant_color = "#59CE00" features["mcolor"] = "#59CE00"
hardset_dna(podman,null,null,podman.real_name,blood_type,/datum/species/plant/pod,mutant_color)//Discard SE's and UI's, podman cloning is inaccurate, and always make them a podman hardset_dna(podman,null,null,podman.real_name,blood_type,/datum/species/plant/pod,features)//Discard SE's and UI's, podman cloning is inaccurate, and always make them a podman
podman.set_cloned_appearance() podman.set_cloned_appearance()
else //else, one packet of seeds. maybe two else //else, one packet of seeds. maybe two

View File

@@ -90,7 +90,7 @@
var/datum/mind/mind = null var/datum/mind/mind = null
var/blood_gender = null var/blood_gender = null
var/blood_type = null var/blood_type = null
var/mutant_color = null var/list/features = null
var/factions = null var/factions = null
var/contains_sample = 0 var/contains_sample = 0
@@ -104,7 +104,7 @@
realName = bloodSample.data["real_name"] realName = bloodSample.data["real_name"]
blood_gender = bloodSample.data["gender"] blood_gender = bloodSample.data["gender"]
blood_type = bloodSample.data["blood_type"] blood_type = bloodSample.data["blood_type"]
mutant_color = bloodSample.data["mutant_color"] features = bloodSample.data["features"]
factions = bloodSample.data["factions"] factions = bloodSample.data["factions"]
W.reagents.clear_reagents() W.reagents.clear_reagents()
user << "<span class='notice'>You inject the contents of the syringe into the seeds.</span>" user << "<span class='notice'>You inject the contents of the syringe into the seeds.</span>"

View File

@@ -9,6 +9,9 @@
var/obj/item/handcuffed = null //Whether or not the mob is handcuffed var/obj/item/handcuffed = null //Whether or not the mob is handcuffed
var/obj/item/legcuffed = null //Same as handcuffs but for legs. Bear traps use this. var/obj/item/legcuffed = null //Same as handcuffs but for legs. Bear traps use this.
var/list/features = list("mcolor" = "FFF", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None")
//inventory slots //inventory slots
var/obj/item/back = null var/obj/item/back = null
var/obj/item/clothing/mask/wear_mask = null var/obj/item/clothing/mask/wear_mask = null

View File

@@ -30,7 +30,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
/mob/living/carbon/human/proc/fixblood() /mob/living/carbon/human/proc/fixblood()
for(var/datum/reagent/blood/B in vessel.reagent_list) for(var/datum/reagent/blood/B in vessel.reagent_list)
if(B.id == "blood") if(B.id == "blood")
B.data = list("donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.blood_type,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"mutant_color"=null, "factions"=null) B.data = list("donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.blood_type,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"features"=null, "factions"=null)
/mob/living/carbon/human/proc/suppress_bloodloss(var/amount) /mob/living/carbon/human/proc/suppress_bloodloss(var/amount)
if(bleedsuppress) if(bleedsuppress)
@@ -172,7 +172,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
B.data["blood_type"] = copytext(src.dna.blood_type,1,0) B.data["blood_type"] = copytext(src.dna.blood_type,1,0)
B.data["gender"] = src.gender B.data["gender"] = src.gender
B.data["real_name"] = src.real_name B.data["real_name"] = src.real_name
B.data["mutant_color"] = src.dna.mutant_color B.data["features"] = src.dna.features
B.data["factions"] = src.faction B.data["factions"] = src.faction
return B return B

View File

@@ -25,9 +25,6 @@
var/socks = "Nude" //Which socks the player wants var/socks = "Nude" //Which socks the player wants
var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack. var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack.
//Mutant Parts
var/list/lizard_parts = list("tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None")
//Equipment slots //Equipment slots
var/obj/item/wear_suit = null var/obj/item/wear_suit = null
var/obj/item/w_uniform = null var/obj/item/w_uniform = null

View File

@@ -113,7 +113,7 @@
spec_base = image("icon" = 'icons/mob/human.dmi', "icon_state" = icon_state_string, "layer" = -SPECIES_LAYER) spec_base = image("icon" = 'icons/mob/human.dmi', "icon_state" = icon_state_string, "layer" = -SPECIES_LAYER)
spec_base.color = "#[H.dna.mutant_color]" spec_base.color = "#[H.dna.features["mcolor"]]"
standing = spec_base standing = spec_base
if(standing) if(standing)
@@ -136,7 +136,7 @@
if(hair_color) if(hair_color)
if(hair_color == "mutcolor") if(hair_color == "mutcolor")
img_facial_s.color = "#" + H.dna.mutant_color img_facial_s.color = "#" + H.dna.features["mcolor"]
else else
img_facial_s.color = "#" + hair_color img_facial_s.color = "#" + hair_color
else else
@@ -164,7 +164,7 @@
if(hair_color) if(hair_color)
if(hair_color == "mutcolor") if(hair_color == "mutcolor")
img_hair_s.color = "#" + H.dna.mutant_color img_hair_s.color = "#" + H.dna.features["mcolor"]
else else
img_hair_s.color = "#" + hair_color img_hair_s.color = "#" + hair_color
else else
@@ -241,7 +241,7 @@
bodyparts_to_add -= "tail" bodyparts_to_add -= "tail"
if("spines" in mutant_bodyparts) if("spines" in mutant_bodyparts)
if(!H.lizard_parts["spines"] || H.lizard_parts["spines"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT)) if(!H.dna.features["spines"] || H.dna.features["spines"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
bodyparts_to_add -= "spines" bodyparts_to_add -= "spines"
if("snout" in mutant_bodyparts) //Take a closer look at that snout! if("snout" in mutant_bodyparts) //Take a closer look at that snout!
@@ -249,11 +249,11 @@
bodyparts_to_add -= "snout" bodyparts_to_add -= "snout"
if("frills" in mutant_bodyparts) if("frills" in mutant_bodyparts)
if(!H.lizard_parts["frills"] || H.lizard_parts["frills"] == "None" || H.head && (H.head.flags_inv & HIDEEARS)) if(!H.dna.features["frills"] || H.dna.features["frills"] == "None" || H.head && (H.head.flags_inv & HIDEEARS))
bodyparts_to_add -= "frills" bodyparts_to_add -= "frills"
if("horns" in mutant_bodyparts) if("horns" in mutant_bodyparts)
if(!H.lizard_parts["horns"] || H.lizard_parts["horns"] == "None" || H.head && (H.head.flags & BLOCKHAIR) || (H.wear_mask && (H.wear_mask.flags & BLOCKHAIR))) if(!H.dna.features["horns"] || H.dna.features["horns"] == "None" || H.head && (H.head.flags & BLOCKHAIR) || (H.wear_mask && (H.wear_mask.flags & BLOCKHAIR)))
bodyparts_to_add -= "horns" bodyparts_to_add -= "horns"
if(!bodyparts_to_add) if(!bodyparts_to_add)
@@ -268,19 +268,19 @@
var/datum/sprite_accessory/S var/datum/sprite_accessory/S
switch(bodypart) switch(bodypart)
if("tail") if("tail")
S = tails_list[H.lizard_parts["tail"]] S = tails_list[H.dna.features["tail"]]
if("spines") if("spines")
S = spines_list[H.lizard_parts["spines"]] S = spines_list[H.dna.features["spines"]]
if("snout") if("snout")
S = snouts_list[H.lizard_parts["snout"]] S = snouts_list[H.dna.features["snout"]]
if("frills") if("frills")
S = frills_list[H.lizard_parts["frills"]] S = frills_list[H.dna.features["frills"]]
if("horns") if("horns")
S = horns_list[H.lizard_parts["horns"]] S = horns_list[H.dna.features["horns"]]
if("body_markings") if("body_markings")
S = body_markings_list[H.lizard_parts["body_markings"]] S = body_markings_list[H.dna.features["body_markings"]]
if(S.icon_state == "none") if(!S || S.icon_state == "none")
continue continue
var/icon_string var/icon_string
if(S.gender_specific) if(S.gender_specific)
@@ -291,7 +291,7 @@
I = image("icon" = 'icons/mob/mutant_bodyparts.dmi', "icon_state" = icon_string, "layer" =- layer) I = image("icon" = 'icons/mob/mutant_bodyparts.dmi', "icon_state" = icon_string, "layer" =- layer)
if(!(H.disabilities & HUSK)) if(!(H.disabilities & HUSK))
I.color = "#[H.dna.mutant_color]" I.color = "#[H.dna.features["mcolor"]]"
standing += I standing += I
H.overlays_standing[layer] = standing.Copy() H.overlays_standing[layer] = standing.Copy()
standing = list() standing = list()

View File

@@ -17,7 +17,7 @@
if(!pref_species) if(!pref_species)
pref_species = new /datum/species/human() pref_species = new /datum/species/human()
backbag = 2 backbag = 2
lizard_parts = random_lizard_features() features = random_features()
age = rand(AGE_MIN,AGE_MAX) age = rand(AGE_MIN,AGE_MAX)
/datum/preferences/proc/update_preview_icon() //seriously. This is horrendous. /datum/preferences/proc/update_preview_icon() //seriously. This is horrendous.
@@ -47,7 +47,7 @@
preview_icon = new /icon('icons/mob/human.dmi', "[skin_tone]_[g]_s") preview_icon = new /icon('icons/mob/human.dmi', "[skin_tone]_[g]_s")
else else
preview_icon = new /icon('icons/mob/human.dmi', "[pref_species.id]_[g]_s") preview_icon = new /icon('icons/mob/human.dmi', "[pref_species.id]_[g]_s")
preview_icon.Blend("#[mutant_color]", ICON_MULTIPLY) preview_icon.Blend("#[features["mcolor"]]", ICON_MULTIPLY)
var/datum/sprite_accessory/S var/datum/sprite_accessory/S
var/icon/eyes_s = new/icon() var/icon/eyes_s = new/icon()
@@ -79,17 +79,17 @@
for(var/bodypart in pref_species.mutant_bodyparts) for(var/bodypart in pref_species.mutant_bodyparts)
switch(bodypart) switch(bodypart)
if("tail") if("tail")
S = tails_list[lizard_parts["tail"]] S = tails_list[features["tail"]]
if("spines") if("spines")
S = spines_list[lizard_parts["spines"]] S = spines_list[features["spines"]]
if("snout") if("snout")
S = snouts_list[lizard_parts["snout"]] S = snouts_list[features["snout"]]
if("frills") if("frills")
S = frills_list[lizard_parts["frills"]] S = frills_list[features["frills"]]
if("horns") if("horns")
S = horns_list[lizard_parts["horns"]] S = horns_list[features["horns"]]
if("body_markings") if("body_markings")
S = body_markings_list[lizard_parts["body_markings"]] S = body_markings_list[features["body_markings"]]
if(S.icon_state == "none") if(S.icon_state == "none")
continue continue
@@ -100,7 +100,7 @@
icon_string = "[pref_species.id]_m_[bodypart]_[S.icon_state]_[layer]" icon_string = "[pref_species.id]_m_[bodypart]_[S.icon_state]_[layer]"
var/icon/part = new/icon("icon" = 'icons/mob/mutant_bodyparts.dmi', "icon_state" = icon_string) var/icon/part = new/icon("icon" = 'icons/mob/mutant_bodyparts.dmi', "icon_state" = icon_string)
part.Blend("#[mutant_color]", ICON_MULTIPLY) part.Blend("#[features["mcolor"]]", ICON_MULTIPLY)
preview_icon.Blend(part, ICON_OVERLAY) preview_icon.Blend(part, ICON_OVERLAY)
if(underwear) if(underwear)