diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql
index 2a7c07d0cdd..ea78bcc0d55 100644
--- a/SQL/paradise_schema.sql
+++ b/SQL/paradise_schema.sql
@@ -67,6 +67,8 @@ CREATE TABLE `characters` (
`organ_data` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`rlimb_data` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`nanotrasen_relation` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
+ `physique` varchar(45) NULL DEFAULT NULL COLLATE utf8mb4_unicode_ci,
+ `height` varchar(45) NULL DEFAULT NULL COLLATE utf8mb4_unicode_ci,
`speciesprefs` int(1) NOT NULL,
`socks` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`body_accessory` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
diff --git a/SQL/updates/52-53.sql b/SQL/updates/52-53.sql
new file mode 100644
index 00000000000..f0bcbc9b64d
--- /dev/null
+++ b/SQL/updates/52-53.sql
@@ -0,0 +1,6 @@
+# Updating SQL from 52 to 53 -Octus
+# Add characther descriptors of height and build to preference menu
+
+ALTER TABLE `characters`
+ ADD COLUMN `physique` VARCHAR(45) NULL DEFAULT NULL AFTER `nanotrasen_relation`,
+ ADD COLUMN `height` VARCHAR(45) NULL DEFAULT NULL AFTER `physique`;
diff --git a/code/_globalvars/misc_globals.dm b/code/_globalvars/misc_globals.dm
index bcbaa4ac54b..08ad1d0ee60 100644
--- a/code/_globalvars/misc_globals.dm
+++ b/code/_globalvars/misc_globals.dm
@@ -56,3 +56,8 @@ GLOBAL_LIST_INIT(pipe_colors, list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_
GLOBAL_LIST_INIT(mod_themes, setup_mod_themes())
GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/atmospherics/supermatter_crystal)
+
+///Global list for descriptors
+GLOBAL_LIST_INIT(character_physiques, list("rail thin", "thin", "average", "well-built", "muscular", "overweight"))
+
+GLOBAL_LIST_INIT(character_heights, list("very short", "short", "average height", "tall", "very tall"))
diff --git a/code/modules/client/login_processing/20-load_characters.dm b/code/modules/client/login_processing/20-load_characters.dm
index aea96b26dda..f22512e75e9 100644
--- a/code/modules/client/login_processing/20-load_characters.dm
+++ b/code/modules/client/login_processing/20-load_characters.dm
@@ -58,7 +58,9 @@
hair_gradient_offset,
hair_gradient_colour,
hair_gradient_alpha,
- custom_emotes
+ custom_emotes,
+ physique,
+ height
FROM characters WHERE ckey=:ckey"}, list(
"ckey" = C.ckey
))
diff --git a/code/modules/client/preference/character.dm b/code/modules/client/preference/character.dm
index ce9f80838f7..2532e1d3235 100644
--- a/code/modules/client/preference/character.dm
+++ b/code/modules/client/preference/character.dm
@@ -79,6 +79,10 @@
var/nanotrasen_relation = "Neutral"
+ var/physique = "average"
+
+ var/height = "average height"
+
// OOC Metadata:
var/metadata = ""
@@ -176,6 +180,8 @@
organ_data=:organlist,
rlimb_data=:rlimblist,
nanotrasen_relation=:nanotrasen_relation,
+ physique=:physique,
+ height=:height,
speciesprefs=:speciesprefs,
socks=:socks,
body_accessory=:body_accessory,
@@ -233,6 +239,8 @@
"organlist" = (organlist ? organlist : ""),
"rlimblist" = (rlimblist ? rlimblist : ""),
"nanotrasen_relation" = nanotrasen_relation,
+ "physique" = physique,
+ "height" = height,
"speciesprefs" = speciesprefs,
"socks" = socks,
"body_accessory" = (body_accessory ? body_accessory : ""),
@@ -281,7 +289,7 @@
sec_record,
gen_record,
player_alt_titles,
- disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs,
+ disabilities, organ_data, rlimb_data, nanotrasen_relation, physique, height, speciesprefs,
socks, body_accessory, gear, autohiss,
hair_gradient, hair_gradient_offset, hair_gradient_colour, hair_gradient_alpha, custom_emotes)
VALUES
@@ -308,7 +316,7 @@
:sec_record,
:gen_record,
:playertitlelist,
- :disabilities, :organlist, :rlimblist, :nanotrasen_relation, :speciesprefs,
+ :disabilities, :organlist, :rlimblist, :nanotrasen_relation, :physique, :height, :speciesprefs,
:socks, :body_accessory, :gearlist, :autohiss_mode,
:h_grad_style, :h_grad_offset, :h_grad_colour, :h_grad_alpha, :custom_emotes)
"}, list(
@@ -359,6 +367,8 @@
"organlist" = (organlist ? organlist : ""),
"rlimblist" = (rlimblist ? rlimblist : ""),
"nanotrasen_relation" = nanotrasen_relation,
+ "physique" = physique,
+ "height" = height,
"speciesprefs" = speciesprefs,
"socks" = socks,
"body_accessory" = (body_accessory ? body_accessory : ""),
@@ -454,6 +464,8 @@
h_grad_colour = query.item[53]
h_grad_alpha = query.item[54]
var/custom_emotes_tmp = query.item[55]
+ physique = query.item[56]
+ height = query.item[57]
//Sanitize
var/datum/species/SP = GLOB.all_species[species]
@@ -474,6 +486,12 @@
if(isnull(nanotrasen_relation))
nanotrasen_relation = initial(nanotrasen_relation)
+ if(isnull(physique))
+ physique = initial(physique)
+
+ if(isnull(height))
+ height = initial(height)
+
if(isnull(speciesprefs))
speciesprefs = initial(speciesprefs)
@@ -1778,6 +1796,8 @@
character.dna.real_name = real_name
character.name = character.real_name
+ character.physique = physique
+ character.height = height
character.flavor_text = flavor_text
character.med_record = med_record
character.sec_record = sec_record
diff --git a/code/modules/client/preference/link_processing.dm b/code/modules/client/preference/link_processing.dm
index 9eeda3ef7cd..9fe48e522a1 100644
--- a/code/modules/client/preference/link_processing.dm
+++ b/code/modules/client/preference/link_processing.dm
@@ -700,6 +700,16 @@
if(new_relation)
active_character.nanotrasen_relation = new_relation
+ if("physique")
+ var/new_physique = input(user, "Choose your descriptor for how built your character is on glance.", "Character Preference") as null|anything in GLOB.character_physiques
+ if(new_physique)
+ active_character.physique = new_physique
+
+ if("height")
+ var/new_height = input(user, "Choose your descriptor for how tall your character is on glance.", "Character Preference") as null|anything in GLOB.character_heights
+ if(new_height)
+ active_character.height = new_height
+
if("flavor_text")
var/msg = input(usr,"Set the flavor text in your 'examine' verb. The flavor text should be a physical descriptor of your character at a glance. SFW Drawn Art of your character is acceptable.","Flavor Text",html_decode(active_character.flavor_text)) as message
diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm
index f6397708b1c..5d93a6c1c99 100644
--- a/code/modules/client/preference/preferences.dm
+++ b/code/modules/client/preference/preferences.dm
@@ -223,6 +223,8 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
dat += "Skin Tone: [S.bodyflags & HAS_ICON_SKIN_TONE ? "[active_character.s_tone]" : "[-active_character.s_tone + 35]/220"]
"
dat += "Disabilities: \[Set\]
"
dat += "Nanotrasen Relation: [active_character.nanotrasen_relation]
"
+ dat += "Physique: [active_character.physique]
"
+ dat += "Height: [active_character.height]
"
dat += "Set Flavor Text
"
if(length(active_character.flavor_text) <= 40)
if(!length(active_character.flavor_text))
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index d6b74d07a08..74113625e2e 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -21,6 +21,10 @@
var/lip_color = "white"
var/age = 30 //Player's age (pure fluff)
+ /// Players' height (more fluff)
+ var/height = "average height"
+ /// Players physique (even MORE fluff)
+ var/physique = "average"
var/underwear = "Nude" //Which underwear the player wants
var/undershirt = "Nude" //Which undershirt the player wants
diff --git a/code/modules/mob/living/carbon/human/human_examine.dm b/code/modules/mob/living/carbon/human/human_examine.dm
index 508c33a00c3..645bf2164a3 100644
--- a/code/modules/mob/living/carbon/human/human_examine.dm
+++ b/code/modules/mob/living/carbon/human/human_examine.dm
@@ -57,15 +57,7 @@
else if(displayed_species == "Slime People") //snowflakey because Slime People are defined as a plural
msg += ", a slime person!"
else
- // do all this extra stuff because byond's text macros get confused by whatever comes between the species name and the article,
- // so we can't just do \a
- var/article_override = dna?.species.article_override
- var/article = article_override
- if(!article_override)
- article = starts_with_vowel(displayed_species) ? "an" : "a"
-
- msg += ", [article] [lowertext(displayed_species)]!"
-
+ msg += ", \a [height] [lowertext(displayed_species)] with \a [physique] physique!" //Look I know it uses physique twice, lets not think about it too much ok?
return msg
/mob/living/carbon/human/examine_start_damage_block(skip_gloves = FALSE, skip_suit_storage = FALSE, skip_jumpsuit = FALSE, skip_shoes = FALSE, skip_mask = FALSE, skip_ears = FALSE, skip_eyes = FALSE, skip_face = FALSE)