diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index 71e82bbc19..322f642896 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -39,6 +39,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["synth_markings"] >> pref.synth_markings pref.preview_icon = null S["bgstate"] >> pref.bgstate + S["body_descriptors"] >> pref.body_descriptors /datum/category_item/player_setup_item/general/body/save_character(var/savefile/S) S["species"] << pref.species @@ -68,6 +69,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O S["synth_blue"] << pref.b_synth S["synth_markings"] << pref.synth_markings S["bgstate"] << pref.bgstate + S["body_descriptors"] << pref.body_descriptors /datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S) if(!pref.species || !(pref.species in playable_species)) @@ -167,6 +169,21 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O if(O) O.markings[M] = list("color" = mark_color, "datum" = mark_datum) + var/list/last_descriptors = list() + if(islist(pref.body_descriptors)) + last_descriptors = pref.body_descriptors.Copy() + pref.body_descriptors = list() + + var/datum/species/mob_species = all_species[pref.species] + if(LAZYLEN(mob_species.descriptors)) + for(var/entry in mob_species.descriptors) + var/datum/mob_descriptor/descriptor = mob_species.descriptors[entry] + if(istype(descriptor)) + if(isnull(last_descriptors[entry])) + pref.body_descriptors[entry] = descriptor.default_value // Species datums have initial default value. + else + pref.body_descriptors[entry] = Clamp(last_descriptors[entry], 1, LAZYLEN(descriptor.standalone_value_descriptors)) + return /datum/category_item/player_setup_item/general/body/content(var/mob/user) @@ -175,7 +192,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.update_preview_icon() user << browse_rsc(pref.preview_icon, "previewicon.png") - var/mob_species = all_species[pref.species] + var/datum/species/mob_species = all_species[pref.species] . += "
| Body "
. += "(®)"
. += " " @@ -280,6 +297,13 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O else . += " " + if(LAZYLEN(pref.body_descriptors)) + . += "
" + . += " | Preview " . += " Cycle background" @@ -329,6 +353,16 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.randomize_appearance_and_body_for() return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["change_descriptor"]) + if(mob_species.descriptors) + var/desc_id = href_list["change_descriptor"] + if(pref.body_descriptors[desc_id]) + var/datum/mob_descriptor/descriptor = mob_species.descriptors[desc_id] + var/choice = input("Please select a descriptor.", "Descriptor") as null|anything in descriptor.chargen_value_descriptors + if(choice && mob_species.descriptors[desc_id]) // Check in case they sneakily changed species. + pref.body_descriptors[desc_id] = descriptor.chargen_value_descriptors[choice] + return TOPIC_REFRESH + else if(href_list["blood_type"]) var/new_b_type = input(user, "Choose your character's blood-type:", "Character Preference") as null|anything in valid_bloodtypes if(new_b_type && CanUseTopic(user)) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index dee21ddd5b..00f693e7cf 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -104,6 +104,8 @@ datum/preferences var/list/flavor_texts = list() var/list/flavour_texts_robot = list() + var/list/body_descriptors = list() + var/med_record = "" var/sec_record = "" var/gen_record = "" @@ -295,6 +297,10 @@ datum/preferences character.update_underwear() character.update_hair() + if(LAZYLEN(character.descriptors)) + for(var/entry in body_descriptors) + character.descriptors[entry] = body_descriptors[entry] + /datum/preferences/proc/open_load_dialog(mob/user) var/dat = "" dat += " ")]" + to_chat(user, jointext(msg, null)) //Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records. diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a5ef3304ab..021021b45b 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1148,6 +1148,15 @@ maxHealth = species.total_health + if(LAZYLEN(descriptors)) + descriptors = null + + if(LAZYLEN(species.descriptors)) + descriptors = list() + for(var/desctype in species.descriptors) + var/datum/mob_descriptor.descriptor = species.descriptors[desctype] + descriptors[desctype] = descriptor.default_value + spawn(0) if(regen_icons) regenerate_icons() make_blood() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 2cbd93260c..f8fdae8bbb 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -99,6 +99,8 @@ var/identifying_gender // In case the human identifies as another gender than it's biological + var/list/descriptors // For comparative examine code + var/step_count = 0 // Track how many footsteps have been taken to know when to play footstep sounds can_be_antagged = TRUE diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm index 525a611882..327b4d9ad1 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/vox.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm @@ -81,6 +81,12 @@ genders = list(NEUTER) + descriptors = list( + /datum/mob_descriptor/height = -1, + /datum/mob_descriptor/build = 1, + /datum/mob_descriptor/vox_markings = 0 + ) + /datum/species/vox/get_random_name(var/gender) var/datum/language/species_language = all_languages[default_language] return species_language.get_random_name(gender) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 38d566d430..b5878e41ef 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -221,12 +221,25 @@ var/pass_flags = 0 + var/list/descriptors = list( + /datum/mob_descriptor/height, + /datum/mob_descriptor/build + ) + /datum/species/New() if(hud_type) hud = new hud_type() else hud = new() + // Prep the descriptors for the species + if(LAZYLEN(descriptors)) + var/list/descriptor_datums = list() + for(var/desctype in descriptors) + var/datum/mob_descriptor/descriptor = new desctype + descriptor_datums[descriptor.name] = descriptor + descriptors = descriptor_datums + //If the species has eyes, they are the default vision organ if(!vision_organ && has_organ[O_EYES]) vision_organ = O_EYES diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index 5d95a63285..09491f9fbb 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -137,6 +137,11 @@ "Your scales bristle against the cold." ) + descriptors = list( + /datum/mob_descriptor/height = 2, + /datum/mob_descriptor/build = 2 + ) + /datum/species/unathi/equip_survival_gear(var/mob/living/carbon/human/H) ..() H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes) diff --git a/polaris.dme b/polaris.dme index 60b06190e0..db920b42e8 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1841,6 +1841,10 @@ #include "code\modules\mob\living\carbon\human\stripping.dm" #include "code\modules\mob\living\carbon\human\unarmed_attack.dm" #include "code\modules\mob\living\carbon\human\update_icons.dm" +#include "code\modules\mob\living\carbon\human\descriptors\_descriptors.dm" +#include "code\modules\mob\living\carbon\human\descriptors\descriptors_generic.dm" +#include "code\modules\mob\living\carbon\human\descriptors\descriptors_skrell.dm" +#include "code\modules\mob\living\carbon\human\descriptors\descriptors_vox.dm" #include "code\modules\mob\living\carbon\human\species\species.dm" #include "code\modules\mob\living\carbon\human\species\species_attack.dm" #include "code\modules\mob\living\carbon\human\species\species_getters.dm" |