var/list/preferences_datums = list() /datum/preferences var/client/parent //doohickeys for savefiles var/path var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used var/max_save_slots = 10 //non-preference stuff var/muted = 0 var/last_ip var/last_id //game-preferences var/lastchangelog = "" //Saved changlog filesize to detect if there was a change var/ooccolor = null //Antag preferences var/list/be_special = list() //Special role selection var/tmp/old_be_special = 0 //Bitflag version of be_special, used to update old savefiles and nothing more //If it's 0, that's good, if it's anything but 0, the owner of this prefs file's antag choices were, //autocorrected this round, not that you'd need to check that. var/UI_style = "Midnight" var/hotkeys = FALSE var/tgui_fancy = TRUE var/tgui_lock = TRUE var/windowflashing = TRUE var/toggles = TOGGLES_DEFAULT var/chat_toggles = TOGGLES_DEFAULT_CHAT var/ghost_form = "ghost" var/ghost_orbit = GHOST_ORBIT_CIRCLE var/ghost_accs = GHOST_ACCS_DEFAULT_OPTION var/ghost_others = GHOST_OTHERS_DEFAULT_OPTION var/ghost_hud = 1 var/inquisitive_ghost = 1 var/allow_midround_antag = 1 var/preferred_map = null var/uses_glasses_colour = 0 //character preferences var/real_name //our character's name var/be_random_name = 0 //whether we'll have a random name every round var/be_random_body = 0 //whether we'll have a random body every round var/gender = MALE //gender of character (well duh) var/age = 30 //age of character var/underwear = "Nude" //underwear type var/undershirt = "Nude" //undershirt type var/socks = "Nude" //socks type var/backbag = DBACKPACK //backpack type var/hair_style = "Bald" //Hair type var/hair_color = "000" //Hair color var/facial_hair_style = "Shaved" //Face hair type var/facial_hair_color = "000" //Facial hair color var/skin_tone = "caucasian1" //Skin color var/eye_color = "000" //Eye color var/datum/species/pref_species = new /datum/species/human() //Mutant race var/list/features = list("mcolor" = "FFF", "mcolor2" = "FFF","mcolor3" = "FFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "ears" = "None", "wings" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "mam_body_markings" = "None", "mam_ears" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "None", "xenohead" = "None", "xenotail" = "None", "legs" = "Normal Legs", "taur" = "None") var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity") var/prefered_security_department = SEC_DEPT_RANDOM //Mob preview var/icon/preview_icon = null //Jobs, uses bitflags var/job_civilian_high = 0 var/job_civilian_med = 0 var/job_civilian_low = 0 var/job_medsci_high = 0 var/job_medsci_med = 0 var/job_medsci_low = 0 var/job_engsec_high = 0 var/job_engsec_med = 0 var/job_engsec_low = 0 //citadel code var/arousable = TRUE //Allows players to disable arousal from the character creation menu // Want randomjob if preferences already filled - Donkie var/joblessrole = BERANDOMJOB //defaults to 1 for fewer assistants // 0 = character settings, 1 = game preferences var/current_tab = 0 var/flavor_text = "" // OOC Metadata: var/metadata = "" var/unlock_content = 0 var/list/ignoring = list() var/clientfps = 0 var/parallax = PARALLAX_DISABLE //Starting disabled by default so people stop freaking about about certain issues. var/uplink_spawn_loc = UPLINK_PDA /datum/preferences/New(client/C) parent = C custom_names["ai"] = pick(ai_names) custom_names["cyborg"] = pick(ai_names) custom_names["clown"] = pick(clown_names) custom_names["mime"] = pick(mime_names) if(istype(C)) if(!IsGuestKey(C.key)) load_path(C.ckey) unlock_content = C.IsByondMember() if(unlock_content) max_save_slots = 16 var/loaded_preferences_successfully = load_preferences() if(loaded_preferences_successfully) if(load_character()) return //we couldn't load character data so just randomize the character appearance + name random_character() //let's create a random character then - rather than a fat, bald and naked man. real_name = pref_species.random_name(gender,1) if(!loaded_preferences_successfully) save_preferences() save_character() //let's save this new random character so it doesn't keep generating new ones. return /datum/preferences/proc/ShowChoices(mob/user) if(!user || !user.client) return update_preview_icon() user << browse_rsc(preview_icon, "previewicon.png") var/dat = "
| "
if(jobban_isbanned(user, "appearance"))
dat += "You are banned from using custom names and appearances. You can continue to adjust your characters, but you will be randomised once you join the game. " dat += "Random Name " dat += "Always Random Name: [be_random_name ? "Yes" : "No"] " dat += "Name: " dat += "[real_name] " dat += "Gender: [gender == MALE ? "Male" : "Female"] " dat += "Age: [age] " dat += "Special Names: " dat += "Clown: [custom_names["clown"]] " dat += "Mime:[custom_names["mime"]] " dat += "AI: [custom_names["ai"]] " dat += "Cyborg: [custom_names["cyborg"]] " dat += "Chaplain religion: [custom_names["religion"]] " dat += "Chaplain deity: [custom_names["deity"]] " dat += "Custom job preferences: " dat += "Prefered security department: [prefered_security_department] | "
dat += ""
dat += " |
| "
if(config.mutant_races)
dat += "Species: [pref_species.id] " else dat += "Species: Human " dat += "Underwear: [underwear] " dat += "Undershirt: [undershirt] " dat += "Socks: [socks] " dat += "Backpack: [backbag] " dat += "Uplink Spawn Location: [uplink_spawn_loc] | "
// dat += "Size: [character_size]"
dat += "Skin Tone" dat += "[skin_tone]" dat += " | "
if(HAIR in pref_species.species_traits)
dat += ""
dat += "Hair Style" dat += "[hair_style]" dat += "< > " dat += " Change " dat += " | "
dat += "Facial Hair Style" dat += "[facial_hair_style]" dat += "< > " dat += " Change " dat += " | "
if(EYECOLOR in pref_species.species_traits)
dat += ""
dat += "Eye Color" dat += " Change" dat += " | "
if(config.mutant_races) //We don't allow mutant bodyparts for humans either unless this is true.
if((MUTCOLORS in pref_species.species_traits) || (MUTCOLORS_PARTSONLY in pref_species.species_traits))
dat += ""
dat += "Alien/Mutant Colors" dat += " Change" dat += " Change " dat += " Change " dat += " | "
if("tail_lizard" in pref_species.mutant_bodyparts)
dat += ""
dat += "Tail" dat += "[features["tail_lizard"]]" dat += " | "
if("snout" in pref_species.mutant_bodyparts)
dat += ""
dat += "Snout" dat += "[features["snout"]]" dat += " | "
if("horns" in pref_species.mutant_bodyparts)
dat += ""
dat += "Horns" dat += "[features["horns"]]" dat += " | "
if("frills" in pref_species.mutant_bodyparts)
dat += ""
dat += "Frills" dat += "[features["frills"]]" dat += " | "
if("spines" in pref_species.mutant_bodyparts)
dat += ""
dat += "Spines" dat += "[features["spines"]]" dat += " | "
if("body_markings" in pref_species.mutant_bodyparts)
dat += ""
dat += "Body Markings" dat += "[features["body_markings"]]" dat += " | "
//Mammal bodyparts
if("mam_body_markings" in pref_species.mutant_bodyparts)
dat += ""
dat += "Mammal Body Markings" dat += "[features["mam_body_markings"]]" dat += " | "
if("mam_tail" in pref_species.mutant_bodyparts)
dat += ""
dat += "Tail" dat += "[features["mam_tail"]]" if("legs" in pref_species.mutant_bodyparts) dat += " | "
dat += "Legs" dat += "[features["legs"]]" dat += " | "
if("mam_ears" in pref_species.mutant_bodyparts)
dat += ""
dat += "Ears" dat += "[features["mam_ears"]]" dat += " | "
if("taur" in pref_species.mutant_bodyparts)
dat += ""
dat += "Taur Body" dat += "[features["taur"]]" dat += " | "
//Xeno Bodyparts
if("xenohead" in pref_species.mutant_bodyparts)
dat += ""
dat += "Head/Caste" dat += "[features["xenohead"]]" dat += " | "
if("xenotail" in pref_species.mutant_bodyparts)
dat += ""
dat += "Tail" dat += "[features["xenotail"]]" dat += " | "
if("xenodorsal" in pref_species.mutant_bodyparts)
dat += ""
dat += "Dorsal Tubes" dat += "[features["xenodorsal"]]" dat += " | "
if(config.mutant_humans)
if("tail_human" in pref_species.mutant_bodyparts)
dat += ""
dat += "Tail" dat += "[features["tail_human"]]" dat += " | "
if("ears" in pref_species.mutant_bodyparts)
dat += ""
dat += "Ears" dat += "[features["ears"]]" dat += " | "
if("wings" in pref_species.mutant_bodyparts && r_wings_list.len >1)
dat += ""
dat += "Wings" dat += "[features["wings"]]" dat += " | "
dat += "
| " dat += " | "
dat += "Options" dat += "Arousal:[arousable == TRUE ? "Enabled" : "Disabled"]" dat += " More Coming Soon(tm)" dat += " | "
dat += "
"
dat += "General Settings" dat += "UI Style: [UI_style]" dat += "Keybindings: [(hotkeys) ? "Hotkeys" : "Default"] " dat += "tgui Style: [(tgui_fancy) ? "Fancy" : "No Frills"] " dat += "tgui Monitors: [(tgui_lock) ? "Primary" : "All"] " dat += "Window Flashing: [(windowflashing) ? "Yes" : "No"] " dat += "Play admin midis: [(toggles & SOUND_MIDI) ? "Yes" : "No"] " dat += "Play lobby music: [(toggles & SOUND_LOBBY) ? "Yes" : "No"] " dat += "Ghost ears: [(chat_toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"] " dat += "Ghost sight: [(chat_toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"] " dat += "Ghost whispers: [(chat_toggles & CHAT_GHOSTWHISPER) ? "All Speech" : "Nearest Creatures"] " dat += "Ghost radio: [(chat_toggles & CHAT_GHOSTRADIO) ? "Yes" : "No"] " dat += "Ghost pda: [(chat_toggles & CHAT_GHOSTPDA) ? "All Messages" : "Nearest Creatures"] " dat += "Pull requests: [(chat_toggles & CHAT_PULLR) ? "Yes" : "No"] " dat += "Midround Antagonist: [(toggles & MIDROUND_ANTAG) ? "Yes" : "No"] " if(config.allow_Metadata) dat += "OOC Notes: Edit " if(user.client) if(user.client.holder) dat += "Adminhelp Sound: [(toggles & SOUND_ADMINHELP)?"On":"Off"] " dat += "Announce Login: [(toggles & ANNOUNCE_LOGIN)?"On":"Off"] " if(unlock_content || check_rights_for(user.client, R_ADMIN)) dat += "OOC: Change " if(unlock_content) dat += "BYOND Membership Publicity: [(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"] " dat += "Ghost Form: [ghost_form] " dat += "Ghost Orbit: [ghost_orbit] " var/button_name = "If you see this something went wrong." switch(ghost_accs) if(GHOST_ACCS_FULL) button_name = GHOST_ACCS_FULL_NAME if(GHOST_ACCS_DIR) button_name = GHOST_ACCS_DIR_NAME if(GHOST_ACCS_NONE) button_name = GHOST_ACCS_NONE_NAME dat += "Ghost Accessories: [button_name] " switch(ghost_others) if(GHOST_OTHERS_THEIR_SETTING) button_name = GHOST_OTHERS_THEIR_SETTING_NAME if(GHOST_OTHERS_DEFAULT_SPRITE) button_name = GHOST_OTHERS_DEFAULT_SPRITE_NAME if(GHOST_OTHERS_SIMPLE) button_name = GHOST_OTHERS_SIMPLE_NAME dat += "Ghosts of Others: [button_name] " if (SERVERTOOLS && config.maprotation) var/p_map = preferred_map if (!p_map) p_map = "Default" if (config.defaultmap) p_map += " ([config.defaultmap.friendlyname])" else if (p_map in config.maplist) var/datum/votablemap/VM = config.maplist[p_map] if (!VM) p_map += " (No longer exists)" else p_map = VM.friendlyname else p_map += " (No longer exists)" dat += "Preferred Map: [p_map] " dat += "FPS: [clientfps] " dat += "Parallax (Fancy Space): " switch (parallax) if (PARALLAX_LOW) dat += "Low" if (PARALLAX_MED) dat += "Medium" if (PARALLAX_INSANE) dat += "Insane" if (PARALLAX_DISABLE) dat += "Disabled" else dat += "High" dat += " " dat += " | "
dat += "Special Role Settings" if(jobban_isbanned(user, "Syndicate")) dat += "You are banned from antagonist roles." src.be_special = list() for (var/i in special_roles) if(jobban_isbanned(user, i)) dat += "Be [capitalize(i)]: BANNED" else var/days_remaining = null if(config.use_age_restriction_for_jobs && ispath(special_roles[i])) //If it's a game mode antag, check if the player meets the minimum age var/mode_path = special_roles[i] var/datum/game_mode/temp_mode = new mode_path days_remaining = temp_mode.get_remaining_days(user.client) if(days_remaining) dat += "Be [capitalize(i)]: \[IN [days_remaining] DAYS] " else dat += "Be [capitalize(i)]: [(i in be_special) ? "Yes" : "No"] " dat += " |
" // Table within a table for alignment, also allows you to easily add more colomns.
HTML += "
|
|