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)
else return pick(socks_list)
/proc/random_lizard_features()
/proc/random_features()
if(!tails_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails, tails_list)
if(!snouts_list.len)
@@ -50,7 +50,7 @@
if(!body_markings_list.len)
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)
switch(gender)

View File

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

View File

@@ -21,8 +21,7 @@
var/uni_identity
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/mutant_color = "FFF" // What color you are if you have certain speciess
var/list/lizard_parts = list()
var/list/features = list("FFF") //first value is mutant color
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/mob/living/carbon/holder
@@ -37,8 +36,7 @@
destination.dna.uni_identity = uni_identity
destination.dna.blood_type = blood_type
hardset_dna(destination, null, null, null, null, species)
destination.dna.mutant_color = mutant_color
destination.dna.lizard_parts = lizard_parts
destination.dna.features = features
destination.dna.real_name = real_name
destination.dna.mutations = mutations
@@ -48,8 +46,7 @@
new_dna.uni_identity = uni_identity
new_dna.blood_type = blood_type
new_dna.species = new species.type
new_dna.mutant_color = mutant_color
new_dna.lizard_parts = lizard_parts
new_dna.features = features
new_dna.real_name = real_name
new_dna.mutations = mutations
@@ -134,7 +131,7 @@
spans |= M.get_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))
return
if(!owner.dna)
@@ -146,15 +143,8 @@
owner.reagents.del_reagent(exotic_blood.id)
owner.dna.species = new mrace()
if(mcolor)
owner.dna.mutant_color = mcolor
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(features)
owner.dna.features = features
if(real_name)
owner.real_name = real_name
@@ -203,9 +193,7 @@
character.dna.uni_identity = character.dna.generate_uni_identity(character)
character.dna.struc_enzymes = character.dna.generate_struc_enzymes(character)
character.dna.unique_enzymes = character.dna.generate_unique_enzymes(character)
if(istype(character, /mob/living/carbon/human))
var/mob/living/carbon/human/H = character
H.dna.lizard_parts = H.lizard_parts
character.dna.features = character.features
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
@@ -985,7 +973,7 @@
/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(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 0

View File

@@ -213,7 +213,7 @@
/obj/effect/cocoon/abductor/proc/Copy(var/mob/living/carbon/human/H)
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 ?
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")
else
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
if(EYECOLOR in H.dna.species.specflags)

View File

@@ -92,7 +92,7 @@
new_dna.struc_enzymes = T.dna.struc_enzymes
new_dna.real_name = T.dna.real_name
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
absorbedcount++
store_dna(new_dna, user)

View File

@@ -91,7 +91,7 @@
var/datum/dna/NewDNA = selected_dna
if(ismonkey(target))
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)
feedback_add_details("changeling_powers","TS")
return 1

View File

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

View File

@@ -122,7 +122,7 @@
//Clonepod
//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)
return 0
if(mess || attempting)
@@ -183,7 +183,7 @@
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>"
hardset_dna(H, ui, se, null, null, mrace, mcolor, lizard_parts)
hardset_dna(H, ui, se, null, null, mrace, features)
H.faction |= factions
H.set_cloned_appearance()

View File

@@ -35,7 +35,7 @@
if(!(pod1.occupant || pod1.mess) && (pod1.efficiency > 5))
for(var/datum/data/record/R in records)
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
/obj/machinery/computer/cloning/proc/updatemodules()
@@ -329,7 +329,7 @@
temp = "<font class='bad'>Clonepod malfunction.</font>"
else if(!config.revival_cloning)
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>"
records.Remove(C)
if(active_record == C)
@@ -380,8 +380,7 @@
R.fields["UI"] = subject.dna.uni_identity
R.fields["SE"] = subject.dna.struc_enzymes
R.fields["blood_type"] = subject.dna.blood_type
R.fields["mcolor"] = subject.dna.mutant_color
R.fields["lizard_parts"] = subject.dna.lizard_parts
R.fields["features"] = subject.dna.features
R.fields["factions"] = subject.faction
//Add an implant if needed
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)
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
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
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.
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/eye_color = "000" //Eye color
var/datum/species/pref_species = new /datum/species/human() //Mutant race
var/mutant_color = "FFF" //Mutant race skin color
var/list/lizard_parts = list("tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None")
var/list/features = list("mcolor" = "FFF", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None")
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 += "<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>"
@@ -254,7 +253,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
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>"
@@ -263,7 +262,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
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>"
@@ -272,7 +271,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
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>"
@@ -281,7 +280,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
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>"
@@ -290,7 +289,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
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>"
@@ -299,7 +298,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
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>"
@@ -792,54 +791,54 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
if(result)
var/newtype = roundstart_species[result]
pref_species = new newtype()
if(mutant_color == "#000")
mutant_color = pref_species.default_color
if(features["mcolor"] == "#000")
features["mcolor"] = pref_species.default_color
if("mutant_color")
var/new_mutantcolor = input(user, "Choose your character's alien skin color:", "Character Preference") as color|null
if(new_mutantcolor)
var/temp_hsv = RGBtoHSV(new_mutantcolor)
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
mutant_color = sanitize_hexcolor(new_mutantcolor)
features["mcolor"] = sanitize_hexcolor(new_mutantcolor)
else
user << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
if("tail")
var/new_tail
new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list
if(new_tail)
lizard_parts["tail"] = new_tail
features["tail"] = new_tail
if("snout")
var/new_snout
new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in snouts_list
if(new_snout)
lizard_parts["snout"] = new_snout
features["snout"] = new_snout
if("horns")
var/new_horns
new_horns = input(user, "Choose your character's horns:", "Character Preference") as null|anything in horns_list
if(new_horns)
lizard_parts["horns"] = new_horns
features["horns"] = new_horns
if("frills")
var/new_frills
new_frills = input(user, "Choose your character's frills:", "Character Preference") as null|anything in frills_list
if(new_frills)
lizard_parts["frills"] = new_frills
features["frills"] = new_frills
if("spines")
var/new_spines
new_spines = input(user, "Choose your character's spines:", "Character Preference") as null|anything in spines_list
if(new_spines)
lizard_parts["spines"] = new_spines
features["spines"] = new_spines
if("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
if(new_body_markings)
lizard_parts["body_markings"] = new_body_markings
features["body_markings"] = new_body_markings
if("s_tone")
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)
character.dna.real_name = character.real_name
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
hardset_dna(character, null, null, null, null, /datum/species/human)
character.dna.mutant_color = mutant_color
hardset_dna(character, null, null, null, null, /datum/species/human, features)
character.update_mutcolor()
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.socks = socks
character.lizard_parts = lizard_parts
character.features = features
if(backbag > 3 || backbag < 1)
backbag = 1 //Same as above

View File

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

View File

@@ -848,9 +848,9 @@
podman.ckey = ckey_holder
podman.gender = blood_gender
podman.faction |= factions
if(!mutant_color)
mutant_color = "#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
if(!features["mcolor"])
features["mcolor"] = "#59CE00"
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()
else //else, one packet of seeds. maybe two

View File

@@ -90,7 +90,7 @@
var/datum/mind/mind = null
var/blood_gender = null
var/blood_type = null
var/mutant_color = null
var/list/features = null
var/factions = null
var/contains_sample = 0
@@ -104,7 +104,7 @@
realName = bloodSample.data["real_name"]
blood_gender = bloodSample.data["gender"]
blood_type = bloodSample.data["blood_type"]
mutant_color = bloodSample.data["mutant_color"]
features = bloodSample.data["features"]
factions = bloodSample.data["factions"]
W.reagents.clear_reagents()
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/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
var/obj/item/back = 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()
for(var/datum/reagent/blood/B in vessel.reagent_list)
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)
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["gender"] = src.gender
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
return B

View File

@@ -25,9 +25,6 @@
var/socks = "Nude" //Which socks the player wants
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
var/obj/item/wear_suit = 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.color = "#[H.dna.mutant_color]"
spec_base.color = "#[H.dna.features["mcolor"]]"
standing = spec_base
if(standing)
@@ -136,7 +136,7 @@
if(hair_color)
if(hair_color == "mutcolor")
img_facial_s.color = "#" + H.dna.mutant_color
img_facial_s.color = "#" + H.dna.features["mcolor"]
else
img_facial_s.color = "#" + hair_color
else
@@ -164,7 +164,7 @@
if(hair_color)
if(hair_color == "mutcolor")
img_hair_s.color = "#" + H.dna.mutant_color
img_hair_s.color = "#" + H.dna.features["mcolor"]
else
img_hair_s.color = "#" + hair_color
else
@@ -241,7 +241,7 @@
bodyparts_to_add -= "tail"
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"
if("snout" in mutant_bodyparts) //Take a closer look at that snout!
@@ -249,11 +249,11 @@
bodyparts_to_add -= "snout"
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"
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"
if(!bodyparts_to_add)
@@ -268,19 +268,19 @@
var/datum/sprite_accessory/S
switch(bodypart)
if("tail")
S = tails_list[H.lizard_parts["tail"]]
S = tails_list[H.dna.features["tail"]]
if("spines")
S = spines_list[H.lizard_parts["spines"]]
S = spines_list[H.dna.features["spines"]]
if("snout")
S = snouts_list[H.lizard_parts["snout"]]
S = snouts_list[H.dna.features["snout"]]
if("frills")
S = frills_list[H.lizard_parts["frills"]]
S = frills_list[H.dna.features["frills"]]
if("horns")
S = horns_list[H.lizard_parts["horns"]]
S = horns_list[H.dna.features["horns"]]
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
var/icon_string
if(S.gender_specific)
@@ -291,7 +291,7 @@
I = image("icon" = 'icons/mob/mutant_bodyparts.dmi', "icon_state" = icon_string, "layer" =- layer)
if(!(H.disabilities & HUSK))
I.color = "#[H.dna.mutant_color]"
I.color = "#[H.dna.features["mcolor"]]"
standing += I
H.overlays_standing[layer] = standing.Copy()
standing = list()

View File

@@ -17,7 +17,7 @@
if(!pref_species)
pref_species = new /datum/species/human()
backbag = 2
lizard_parts = random_lizard_features()
features = random_features()
age = rand(AGE_MIN,AGE_MAX)
/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")
else
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/icon/eyes_s = new/icon()
@@ -79,17 +79,17 @@
for(var/bodypart in pref_species.mutant_bodyparts)
switch(bodypart)
if("tail")
S = tails_list[lizard_parts["tail"]]
S = tails_list[features["tail"]]
if("spines")
S = spines_list[lizard_parts["spines"]]
S = spines_list[features["spines"]]
if("snout")
S = snouts_list[lizard_parts["snout"]]
S = snouts_list[features["snout"]]
if("frills")
S = frills_list[lizard_parts["frills"]]
S = frills_list[features["frills"]]
if("horns")
S = horns_list[lizard_parts["horns"]]
S = horns_list[features["horns"]]
if("body_markings")
S = body_markings_list[lizard_parts["body_markings"]]
S = body_markings_list[features["body_markings"]]
if(S.icon_state == "none")
continue
@@ -100,7 +100,7 @@
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)
part.Blend("#[mutant_color]", ICON_MULTIPLY)
part.Blend("#[features["mcolor"]]", ICON_MULTIPLY)
preview_icon.Blend(part, ICON_OVERLAY)
if(underwear)