Random spawn mobs now have random cultures, hair, and skin tone. (#18120)

* Random spawn mobs now have random cultures, hair, and skin tone.

* fixes + trioxin

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
This commit is contained in:
Matt Atlas
2024-01-05 17:48:13 +00:00
committed by GitHub
co-authored by Matt Atlas
parent a424aedae1
commit 65d32eabd6
13 changed files with 145 additions and 42 deletions
@@ -20,3 +20,16 @@
/singleton/origin_item/proc/on_apply(var/mob/living/carbon/human/H)
for(var/trait in origin_traits)
ADD_TRAIT(H, trait, CULTURE_TRAIT)
/mob/living/carbon/human/proc/set_culture(var/singleton/origin_item/OI)
if(!istype(OI))
crash_with("Invalid culture supplied: [OI]!")
culture = OI
OI.on_apply(src)
/mob/living/carbon/human/proc/set_origin(var/singleton/origin_item/OI)
if(!istype(OI))
crash_with("Invalid origin supplied: [OI]!")
origin = OI
OI.on_apply(src)
+3 -4
View File
@@ -457,10 +457,9 @@ var/list/preferences_datums = list()
character.employer_faction = faction
character.religion = religion
character.accent = accent
character.origin = GET_SINGLETON(text2path(origin))
character.culture = GET_SINGLETON(text2path(culture))
character.origin.on_apply(character)
character.culture.on_apply(character)
character.set_culture(GET_SINGLETON(text2path(culture)))
character.set_origin(GET_SINGLETON(text2path(origin)))
// Destroy/cyborgize organs & setup body markings
character.sync_organ_prefs_to_mob(src)
@@ -156,14 +156,14 @@
for(var/culture in culture_restriction)
var/singleton/origin_item/culture/CL = GET_SINGLETON(culture)
if(CL.type in M.species.possible_cultures)
M.culture = CL
M.set_culture(CL)
break
for(var/origin in M.culture.possible_origins)
var/singleton/origin_item/origin/OI = GET_SINGLETON(origin)
if(length(origin_restriction))
if(!(OI.type in origin_restriction))
continue
M.origin = OI
M.set_origin(OI)
M.accent = pick(OI.possible_accents)
break
@@ -26,11 +26,11 @@
pda_choice = 2
age = rand(getMinAge(),getMaxAge())
if(length(culture_restriction))
H.culture = GET_SINGLETON(pick(culture_restriction))
H.set_culture(GET_SINGLETON(pick(culture_restriction)))
if(length(origin_restriction))
for(var/O in origin_restriction)
if(O in culture_restriction)
H.origin = GET_SINGLETON(O)
H.set_origin(GET_SINGLETON(O))
break
if(!H.origin)
crash_with("Invalid origin restrictions [english_list(origin_restriction)] for culture restrictions [english_list(culture_restriction)]!")
+28 -6
View File
@@ -24,7 +24,7 @@
if(!species)
if(new_species)
set_species(new_species,1)
set_species(new_species, 1)
else
set_species()
@@ -1481,10 +1481,21 @@
if(typing_indicator)
adjust_typing_indicator_offsets(typing_indicator)
fill_out_culture_data()
if(change_hair)
species.set_default_hair(src)
h_style = random_hair_style(gender, species.type)
if(prob(10))
f_style = random_facial_hair_style(gender, species.type)
if(length(species.character_color_presets) && !default_colour)
var/preset_name = pick(species.character_color_presets)
var/preset_colour = species.character_color_presets[preset_name]
r_skin = GetRedPart(preset_colour)
g_skin = GetGreenPart(preset_colour)
b_skin = GetBluePart(preset_colour)
change_skin_tone(35 - rand(30, 220))
fill_random_culture_data()
species.set_default_tail(src)
@@ -1505,12 +1516,23 @@
/mob/living/carbon/human/proc/fill_out_culture_data()
culture = GET_SINGLETON(species.possible_cultures[1])
origin = GET_SINGLETON(culture.possible_origins[1])
set_culture(GET_SINGLETON(species.possible_cultures[1]))
set_origin(GET_SINGLETON(culture.possible_origins[1]))
accent = pick(origin.possible_accents)
citizenship = origin.possible_citizenships[1]
religion = origin.possible_religions[1]
/mob/living/carbon/human/proc/fill_random_culture_data()
var/new_culture_type = pick(species.possible_cultures)
var/culture_singleton = GET_SINGLETON(new_culture_type)
set_culture(culture_singleton)
var/new_origin = pick(culture.possible_origins)
var/origin_singleton = GET_SINGLETON(new_origin)
set_origin(origin_singleton)
accent = pick(origin.possible_accents)
citizenship = pick(origin.possible_citizenships)
religion = pick(origin.possible_religions)
/mob/living/carbon/human/proc/bloody_doodle()
set category = "IC"
set name = "Write in blood"
@@ -321,8 +321,8 @@
G.set_species(golem_type)
G.name = G.species.get_random_name()
G.real_name = G.name
G.culture = GET_SINGLETON(/singleton/origin_item/culture/golem)
G.origin = GET_SINGLETON(/singleton/origin_item/origin/golem)
G.set_culture(GET_SINGLETON(/singleton/origin_item/culture/golem))
G.set_origin(GET_SINGLETON(/singleton/origin_item/origin/golem))
G.accent = G.origin.possible_accents[1]
G.citizenship = G.origin.possible_citizenships[1]
G.religion = G.origin.possible_religions[1]
@@ -142,10 +142,9 @@
var/new_culture_id = params["culture"]
if(new_culture_id in valid_cultures)
var/singleton/origin_item/culture/new_culture = culture_map[new_culture_id]
owner.culture = new_culture
owner.culture.on_apply(owner)
owner.set_culture(new_culture)
if(!(owner.origin in new_culture.possible_origins))
owner.origin = GET_SINGLETON(pick(new_culture.possible_origins))
owner.set_origin(GET_SINGLETON(pick(new_culture.possible_origins)))
clear_and_generate_data()
. = TRUE
if("origin")
@@ -153,8 +152,7 @@
var/new_origin_id = params["origin"]
if(new_origin_id in valid_origins)
var/singleton/origin_item/origin/new_origin = origin_map[new_origin_id]
owner.origin = new_origin
owner.origin.on_apply(owner)
owner.set_origin(new_origin)
if(!(owner.accent in new_origin.possible_accents))
owner.accent = new_origin.possible_accents[1]
if(!(owner.religion in new_origin.possible_religions))
@@ -227,6 +227,12 @@
icon_state = "bottle-4"
reagents_to_add = list(/singleton/reagent/hyronalin = 60)
/obj/item/reagent_containers/glass/bottle/trioxin
name = "trioxin bottle"
desc = "A small bottle. Contains a swirling, green liquid."
icon_state = "bottle-1"
reagents_to_add = list(/singleton/reagent/toxin/trioxin = 60)
//syrups
/obj/item/reagent_containers/glass/bottle/syrup