Files
Bubberstation/code/modules/mob/dead/new_player/preferences_setup.dm
2020-07-16 03:02:40 +03:00

137 lines
5.3 KiB
Plaintext

//The mob should have a gender you want before running this proc. Will run fine without H
/datum/preferences/proc/random_character(gender_override, antag_override = FALSE)
if(randomise[RANDOM_SPECIES])
random_species()
else if(randomise[RANDOM_NAME])
real_name = pref_species.random_name(gender,1)
if(gender_override && !(randomise[RANDOM_GENDER] || randomise[RANDOM_GENDER_ANTAG] && antag_override))
gender = gender_override
else
gender = pick(MALE,FEMALE,PLURAL)
if(randomise[RANDOM_AGE] || randomise[RANDOM_AGE_ANTAG] && antag_override)
age = rand(AGE_MIN,AGE_MAX)
if(randomise[RANDOM_UNDERWEAR])
underwear = random_underwear(gender)
if(randomise[RANDOM_UNDERWEAR_COLOR])
underwear_color = random_short_color()
if(randomise[RANDOM_UNDERSHIRT])
undershirt = random_undershirt(gender)
if(randomise[RANDOM_SOCKS])
socks = random_socks()
if(randomise[RANDOM_BACKPACK])
backpack = random_backpack()
if(randomise[RANDOM_JUMPSUIT_STYLE])
jumpsuit_style = pick(GLOB.jumpsuitlist)
if(randomise[RANDOM_HAIRSTYLE])
hairstyle = random_hairstyle(gender)
if(randomise[RANDOM_FACIAL_HAIRSTYLE])
facial_hairstyle = random_facial_hairstyle(gender)
if(randomise[RANDOM_HAIR_COLOR])
hair_color = random_short_color()
if(randomise[RANDOM_FACIAL_HAIR_COLOR])
facial_hair_color = random_short_color()
if(randomise[RANDOM_SKIN_TONE])
skin_tone = random_skin_tone()
if(randomise[RANDOM_EYE_COLOR])
eye_color = random_eye_color()
if(!pref_species)
var/rando_race = pick(GLOB.roundstart_races)
pref_species = new rando_race()
features = random_features()
if(gender in list(MALE, FEMALE))
body_type = gender
else
body_type = pick(MALE, FEMALE)
/datum/preferences/proc/random_species()
var/random_species_type = GLOB.species_list[pick(GLOB.roundstart_races)]
pref_species = new random_species_type
if(randomise[RANDOM_NAME])
real_name = pref_species.random_name(gender,1)
///Setup a hardcore random character and calculate their hardcore random score
/datum/preferences/proc/hardcore_random_setup(mob/living/carbon/human/character, antagonist, is_latejoiner)
var/rand_gender = pick(list(MALE, FEMALE, PLURAL))
random_character(rand_gender, antagonist)
select_hardcore_quirks()
hardcore_survival_score = hardcore_survival_score ** 1.2 //30 points would be about 60 score
if(is_latejoiner)//prevent them from cheatintg
hardcore_survival_score = 0
///Go through all quirks that can be used in hardcore mode and select some based on a random budget.
/datum/preferences/proc/select_hardcore_quirks()
var/quirk_budget = rand(8, 35)
all_quirks = list() //empty it out
var/list/available_hardcore_quirks = SSquirks.hardcore_quirks.Copy()
while(quirk_budget > 0)
for(var/i in available_hardcore_quirks) //Remove from available quirks if its too expensive.
var/datum/quirk/available_quirk = i
if(available_hardcore_quirks[available_quirk] > quirk_budget)
available_hardcore_quirks -= available_quirk
if(!available_hardcore_quirks.len)
break
var/datum/quirk/picked_quirk = pick(available_hardcore_quirks)
var/picked_quirk_blacklisted = FALSE
for(var/bl in SSquirks.quirk_blacklist) //Check if the quirk is blacklisted with our current quirks. quirk_blacklist is a list of lists.
var/list/blacklist = bl
if(!(picked_quirk in blacklist))
continue
for(var/iterator_quirk in all_quirks) //Go through all the quirks we've already selected to see if theres a blacklist match
if((iterator_quirk in blacklist) && !(iterator_quirk == picked_quirk)) //two quirks have lined up in the list of the list of quirks that conflict with each other, so return (see quirks.dm for more details)
picked_quirk_blacklisted = TRUE
break
if(picked_quirk_blacklisted)
break
if(picked_quirk_blacklisted)
available_hardcore_quirks -= picked_quirk
continue
if(initial(picked_quirk.mood_quirk) && CONFIG_GET(flag/disable_human_mood)) //check for moodlet quirks
available_hardcore_quirks -= picked_quirk
continue
all_quirks += initial(picked_quirk.name)
quirk_budget -= available_hardcore_quirks[picked_quirk]
hardcore_survival_score += available_hardcore_quirks[picked_quirk]
available_hardcore_quirks -= picked_quirk
/datum/preferences/proc/update_preview_icon()
// Determine what job is marked as 'High' priority, and dress them up as such.
var/datum/job/previewJob
var/highest_pref = 0
for(var/job in job_preferences)
if(job_preferences[job] > highest_pref)
previewJob = SSjob.GetJob(job)
highest_pref = job_preferences[job]
if(previewJob)
// Silicons only need a very basic preview since there is no customization for them.
if(istype(previewJob,/datum/job/ai))
parent.show_character_previews(image('icons/mob/ai.dmi', icon_state = resolve_ai_icon(preferred_ai_core_display), dir = SOUTH))
return
if(istype(previewJob,/datum/job/cyborg))
parent.show_character_previews(image('icons/mob/robots.dmi', icon_state = "robot", dir = SOUTH))
return
// Set up the dummy for its photoshoot
var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES)
copy_to(mannequin, 1, TRUE, TRUE)
if(previewJob)
mannequin.job = previewJob.title
previewJob.equip(mannequin, TRUE, preference_source = parent)
COMPILE_OVERLAYS(mannequin)
parent.show_character_previews(new /mutable_appearance(mannequin))
unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES)