diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index 261f144713..9741282f93 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -23,11 +23,6 @@
// Some arbitrary defines to be used by self-pruning global lists. (see master_controller)
#define PROCESS_KILL 26 // Used to trigger removal from a processing list.
-
-// Age limits on a character.
-#define AGE_MIN 17
-#define AGE_MAX 85
-
#define MAX_GEAR_COST 10 // Used in chargen for accessory loadout limit.
// Preference toggles.
diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm
index 0f993b0fca..00027a08c5 100644
--- a/code/modules/client/preference_setup/general/01_basic.dm
+++ b/code/modules/client/preference_setup/general/01_basic.dm
@@ -20,7 +20,8 @@
S["OOC_Notes"] << pref.metadata
/datum/category_item/player_setup_item/general/basic/sanitize_character()
- pref.age = sanitize_integer(pref.age, AGE_MIN, AGE_MAX, initial(pref.age))
+ var/datum/species/S = all_species[pref.species]
+ pref.age = sanitize_integer(pref.age, S.min_age, S.max_age, initial(pref.age))
pref.gender = sanitize_inlist(pref.gender, valid_player_genders, pick(valid_player_genders))
pref.real_name = sanitize_name(pref.real_name, pref.species)
if(!pref.real_name)
@@ -65,9 +66,10 @@
return TOPIC_REFRESH
else if(href_list["age"])
- var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference", pref.age) as num|null
+ var/datum/species/S = all_species[pref.species]
+ var/new_age = input(user, "Choose your character's age:\n([S.min_age]-[S.max_age])", "Character Preference", pref.age) as num|null
if(new_age && CanUseTopic(user))
- pref.age = max(min(round(text2num(new_age)), AGE_MAX), AGE_MIN)
+ pref.age = max(min(round(text2num(new_age)), S.max_age), S.min_age)
return TOPIC_REFRESH
else if(href_list["spawnpoint"])
diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm
index 3df5086cf0..93449981e4 100644
--- a/code/modules/client/preference_setup/general/03_body.dm
+++ b/code/modules/client/preference_setup/general/03_body.dm
@@ -264,6 +264,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.s_tone = 0
reset_limbs() // Safety for species with incompatible manufacturers; easier than trying to do it case by case.
+
+ var/datum/species/S = all_species[pref.species]
+ pref.age = max(min(pref.age, S.max_age), S.min_age)
+
return TOPIC_REFRESH
else if(href_list["hair_color"])
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 0677171f05..47c6f3c304 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -32,6 +32,9 @@
var/virus_immune
var/short_sighted
+ var/min_age = 17
+ var/max_age = 70
+
// Language/culture vars.
var/default_language = "Galactic Common" // Default language is used when 'say' is used without modifiers.
var/language = "Galactic Common" // Default racial language, if any.
diff --git a/code/modules/mob/living/carbon/human/species/station/seromi.dm b/code/modules/mob/living/carbon/human/species/station/seromi.dm
index 40fd5c63b8..eebd7f7efd 100644
--- a/code/modules/mob/living/carbon/human/species/station/seromi.dm
+++ b/code/modules/mob/living/carbon/human/species/station/seromi.dm
@@ -9,6 +9,8 @@
num_alternate_languages = 2
secondary_langs = list("Schechi", "Skrellian")
name_language = "Schechi"
+ min_age = 12
+ max_age = 45
blood_color = "#D514F7"
flesh_color = "#5F7BB0"
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 9d2ac99825..d27955858b 100644
--- a/code/modules/mob/living/carbon/human/species/station/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station.dm
@@ -11,6 +11,8 @@
num_alternate_languages = 2
secondary_langs = list("Sol Common")
name_language = null // Use the first-name last-name generator rather than a language scrambler
+ min_age = 17
+ max_age = 110
spawn_flags = CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
@@ -35,6 +37,9 @@
secondary_langs = list("Sinta'unathi")
name_language = "Sinta'unathi"
+ min_age = 18
+ max_age = 60
+
blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \
Uuosa-Eso system, which roughly translates to 'burning mother'.
Coming from a harsh, radioactive \
desert planet, they mostly hold ideals of honesty, virtue, martial combat and bravery above all \
@@ -92,6 +97,9 @@
secondary_langs = list("Siik'tajr")
name_language = "Siik'tajr"
+ min_age = 17
+ max_age = 80
+
blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \
S'randarr system. They have been brought up into the space age by the Humans and Skrell, and have been \
influenced heavily by their long history of Slavemaster rule. They have a structured, clan-influenced way \
@@ -139,9 +147,12 @@
herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \
the secrets of their empire to their allies."
num_alternate_languages = 2
- secondary_langs = list("Skrellian")
+ secondary_langs = list("Skrellian", "Teshari")
name_language = null
+ min_age = 19
+ max_age = 80
+
spawn_flags = CAN_JOIN | IS_WHITELISTED
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR
@@ -181,6 +192,9 @@
num_alternate_languages = 1
name_language = "Rootspeak"
+ min_age = 1
+ max_age = 300
+
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \
@@ -271,4 +285,3 @@
qdel(D)
H.visible_message("\The [H] splits apart with a wet slithering noise!")
-
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index 49d2e9d068..f7416c5024 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -32,7 +32,8 @@ datum/preferences
socks = rand(1,socks_t.len)
backbag = 2
- age = rand(AGE_MIN,AGE_MAX)
+ var/datum/species/S = all_species[species]
+ age = rand(S.min_age,S.max_age)
if(H)
copy_to(H,1)