/datum/preferences/proc/setup_character_options(var/dat, var/user) var/race_skin_tone_desc = skintone2racedescription(get_pref(/datum/preference_setting/numerical/s_tone), get_pref(/datum/preference_setting/string/species)) dat += {"

Occupation Choices

Set Occupation Preferences

Identity

Random Name Always Random Name: [get_pref(/datum/preference_setting/toggle/be_random_name) ? "Yes" : "No"]
Name: [get_pref(/datum/preference_setting/string/real_name)]
Gender: [get_pref(/datum/preference_setting/enum/gender) == MALE ? "Male" : "Female"]
Age: [get_pref(/datum/preference_setting/numerical/age)]
Background < >

Body

Random Body Always Random Body: [get_pref(/datum/preference_setting/toggle/be_random_body) ? "Yes" : "No"]

Species: [get_pref(/datum/preference_setting/string/species)]
Tertiary Language: [get_pref(/datum/preference_setting/string/language)]
Skin Tone: [get_pref(/datum/preference_setting/string/species) == "Human" ? "[-get_pref(/datum/preference_setting/numerical/s_tone) + 35]/220" : "[get_pref(/datum/preference_setting/numerical/s_tone)]"] - [race_skin_tone_desc]

Hair Style

[get_pref(/datum/preference_setting/string/h_style)]
< >
    Change

Facial Hair Style

[get_pref(/datum/preference_setting/string/f_style)]
< >
    Change

Eye Color

    Change
Handicaps: Set
Limbs: Set
Organs: Set
Underwear: [get_pref(/datum/preference_setting/enum/gender) == MALE ? "[underwear_m[get_pref(/datum/preference_setting/numerical/underwear)]]" : "[underwear_f[get_pref(/datum/preference_setting/numerical/underwear)]]"]
Backpack: [backbaglist[get_pref(/datum/preference_setting/numerical/backbag)]]
Nanotrasen Relation: [get_pref(/datum/preference_setting/enum/string/nanotrasen_relation)]
Flavor Text: Set
Character records: [jobban_isbanned(user, "Records") ? "Banned" : "Set"]
Bank account security preference: [bank_security_num2text(get_pref(/datum/preference_setting/enum/bank_security))]
Percent of wages sent to ID virtual wallet: [get_pref(/datum/preference_setting/numerical/wage_ratio)]
"} return dat /datum/preferences/proc/setup_UI(var/dat, var/user) dat += {"UI Style: [get_pref(/datum/preference_setting/string/UI_style)]
Custom UI(recommended for White UI):    
Color: [get_pref(/datum/preference_setting/string/UI_style_color)]
Alpha(transparency): [get_pref(/datum/preference_setting/numerical/UI_style_alpha)]
"} return dat /datum/preferences/proc/setup_special(var/dat, var/mob/user) if(user.client.holder) dat += {"

Admin Only Settings

Toggle Adminhelp Sound [get_pref(/datum/preference_setting/binary_flag/toggles) & SOUND_ADMINHELP ? "Enabled" : "Disabled"]
Toggle Prayers [get_pref(/datum/preference_setting/binary_flag/toggles) & CHAT_PRAYER ? "Enabled" : "Disabled"]
Toggle Hear Radio [get_pref(/datum/preference_setting/binary_flag/toggles) & CHAT_GHOSTRADIO ? "Enabled" : "Disabled"]
Toggle Attack Logs [get_pref(/datum/preference_setting/binary_flag/toggles) & CHAT_ATTACKLOGS ? "Enabled" : "Disabled"]
Toggle Debug Logs [get_pref(/datum/preference_setting/binary_flag/toggles) & CHAT_DEBUGLOGS ? "Enabled" : "Disabled"]
De-admin on login [get_pref(/datum/preference_setting/binary_flag/toggles) & AUTO_DEADMIN ? "Enabled" : "Disabled"]
"} dat += {"

General Settings

FPS: [get_pref(/datum/preference_setting/numerical/fps)]
Space Parallax: [get_pref(/datum/preference_setting/toggle/space_parallax) ? "Enabled" : "Disabled"]
Parallax Speed: [get_pref(/datum/preference_setting/numerical/parallax_speed) ]
Space Dust: [get_pref(/datum/preference_setting/toggle/space_dust) ? "Yes" : "No"]
Play admin midis: [(get_pref(/datum/preference_setting/binary_flag/toggles) & SOUND_MIDI) ? "Yes" : "No"]
Play lobby music: [(get_pref(/datum/preference_setting/binary_flag/toggles) & SOUND_LOBBY) ? "Yes" : "No"]
Play Ambience: [(get_pref(/datum/preference_setting/binary_flag/toggles) & SOUND_AMBIENCE) ? "Yes" : "No"]
[(get_pref(/datum/preference_setting/binary_flag/toggles) & SOUND_AMBIENCE)? \ "Ambience Volume:[get_pref(/datum/preference_setting/numerical/ambience_volume)]
":""] Radio Headset Sounds: [headset_sound_text2num[get_pref(/datum/preference_setting/numerical/headset_sound)+1]]
Hear streamed media: [(get_pref(/datum/preference_setting/binary_flag/toggles) & SOUND_STREAMING) ? "Yes" : "No"]
Streaming Program: [get_pref(/datum/preference_setting/toggle/usewmp) ? "WMP (compatibility)" : "VLC (requires plugin)"]
Streaming Volume [get_pref(/datum/preference_setting/numerical/volume) ]
Hear player voices [(get_pref(/datum/preference_setting/toggle/hear_voicesound)) ? "Yes" : "No"]
Hear instruments [(get_pref(/datum/preference_setting/toggle/hear_instruments)) ? "Yes":"No"]
Progress Bars: [get_pref(/datum/preference_setting/toggle/progress_bars) ? "Yes" : "No"]
Pause after first step: [get_pref(/datum/preference_setting/toggle/stumble) ? "Yes" : "No"]
Pulling action: [get_pref(/datum/preference_setting/toggle/pulltoggle) ? "Toggle Pulling" : "Always Pull"]
Solo Antag Objectives: [get_pref(/datum/preference_setting/toggle/antag_objectives) ? "Standard" : "Freeform"]
Say bubbles: [get_pref(/datum/preference_setting/toggle/typing_indicator) ? "Active" : "Inactive"]
Randomized Character Slot: [get_pref(/datum/preference_setting/toggle/randomslot) ? "Yes" : "No"]
Show Deadchat: [(get_pref(/datum/preference_setting/binary_flag/toggles) & CHAT_DEAD) ? "On" : "Off"]
Ghost Hearing: [(get_pref(/datum/preference_setting/binary_flag/toggles) & CHAT_GHOSTEARS) ? "All Speech" : "Nearby Speech"]
Ghost Sight: [(get_pref(/datum/preference_setting/binary_flag/toggles) & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearby Emotes"]
Ghost Radio: [(get_pref(/datum/preference_setting/binary_flag/toggles) & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearby Speakers"]
Ghost PDA: [(get_pref(/datum/preference_setting/binary_flag/toggles) & CHAT_GHOSTPDA) ? "All PDA Messages" : "No PDA Messages"]
Show OOC: [(get_pref(/datum/preference_setting/binary_flag/toggles) & CHAT_OOC) ? "Enabled" : "Disabled"]
Show LOOC: [(get_pref(/datum/preference_setting/binary_flag/toggles) & CHAT_LOOC) ? "Enabled" : "Disabled"]
Show Tooltips: [get_pref(/datum/preference_setting/toggle/tooltips) ? "Yes" : "No"]
Adminhelp Special Tab: [special_popup_text2num[get_pref(/datum/preference_setting/enum/special_popup)+1]]
Attack Animations: [get_pref(/datum/preference_setting/enum/attack_animations) ? (get_pref(/datum/preference_setting/enum/attack_animations) == ITEM_ANIMATION? "Item Anim." : "Person Anim.") : "No"]
Show Credits (?): [get_pref(/datum/preference_setting/enum/credits)]
Server Shutdown Jingle (?): [get_pref(/datum/preference_setting/enum/jingle)]
Credits/Jingle Volume: [get_pref(/datum/preference_setting/numerical/credits_volume)]
Window Flashing [get_pref(/datum/preference_setting/toggle/window_flashing) ? "Yes":"No"]
Fancy tgui: [get_pref(/datum/preference_setting/toggle/tgui_fancy) ? "Enabled" : "Disabled"]
Runechat prefererences
Chat on map for mobs: [get_pref(/datum/preference_setting/toggle/mob_chat_on_map) ? "Enabled" : "Disabled"]
Chat on map for objects: [get_pref(/datum/preference_setting/toggle/obj_chat_on_map) ? "Enabled" : "Disabled"]
No goonchat messages for objects: [get_pref(/datum/preference_setting/toggle/no_goonchat_for_obj) ? "Enabled" : "Disabled"]
Runechat message char limit: [get_pref(/datum/preference_setting/numerical/max_chat_length)]
"} if(config.allow_Metadata) dat += "OOC Notes: Edit
" return dat /datum/preferences/proc/getPrefLevelText(var/datum/job/job) var/list/jobs = get_pref(/datum/preference_setting/assoc_list_setting/jobs) switch(jobs[job.title]) if(JOB_PREF_HIGH) return "High" if(JOB_PREF_MED) return "Medium" if(JOB_PREF_LOW) return "Low" return "NEVER" /datum/preferences/proc/SetJobsChoice(mob/user, limit = 16, list/splitJobs = list("Chief Engineer", "Head of Security"), widthPerColumn = 295, height = 620) if(!job_master) return //limit - The amount of jobs allowed per column. Defaults to 17 to make it look nice. //splitJobs - Allows you split the table by job. You can make different tables for each department by including their heads. Defaults to CE to make it look nice. //width - Screen' width. Defaults to 550 to make it look nice. //height - Screen's height. Defaults to 500 to make it look nice. var/width = widthPerColumn var/HTML = "" HTML += {""} //the event.button == 1 check is brought to you by legacy IE running in wine HTML += {"
Choose occupation chances
Left-click to raise an occupation preference, right-click to lower it.
Done

"} var/index = -1 //The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows. var/datum/job/lastJob if (!job_master) return for(var/datum/job/job in job_master.occupations) index += 1 if((index >= limit) || (job.title in splitJobs)) width += widthPerColumn if((index < limit) && (lastJob != null)) //If the cells were broken up by a job in the splitJob list then it will fill in the rest of the cells with //the last job's selection color. Creating a rather nice effect. for(var/i = 0, i < (limit - index), i += 1) HTML += "" HTML += "
  
" index = 0 HTML += "" continue if(!job.player_old_enough(user.client)) var/available_in_days = job.available_in_days(user.client) HTML += "[rank]" continue if((rank in command_positions) || (rank == "AI"))//Bold head jobs if(job.alt_titles) HTML += "[GetPlayerAltTitle(job)]" else HTML += "[rank]" else if(job.alt_titles) HTML += "[GetPlayerAltTitle(job)]" else HTML += "[rank]" HTML += "" for(var/i = 1, i < (limit - index), i += 1) HTML += "" HTML += {"
" var/rank = job.title lastJob = job if(jobban_isbanned(user, rank)) HTML += "[rank] \[BANNED]
\[IN [(available_in_days)] DAYS]
" var/prefLevelLabel = "NEVER" var/prefLevelColor = "red" var/species = get_pref(/datum/preference_setting/string/species) var/list/jobs = get_pref(/datum/preference_setting/assoc_list_setting/jobs) if(job.species_whitelist.len && !job.species_whitelist.Find(species)) prefLevelLabel = "Unavailable" prefLevelColor = "gray" else if(job.species_blacklist.Find(species)) prefLevelLabel = "Unavailable" prefLevelColor = "gray" else switch(jobs[job.title]) if(JOB_PREF_HIGH) prefLevelLabel = "High" prefLevelColor = "slateblue" if(JOB_PREF_MED) prefLevelLabel = "Medium" prefLevelColor = "green" if(JOB_PREF_LOW) prefLevelLabel = "Low" prefLevelColor = "orange" HTML += "" HTML += "[prefLevelLabel]" HTML += "
  
"} var/alternate_option = get_pref(/datum/preference_setting/enum/alternate_option) switch(alternate_option) if(GET_EMPTY_JOB) HTML += "

Get unique job

" if(GET_RANDOM_JOB) HTML += "

Get random job if preferences unavailable

" if(BE_ASSISTANT) HTML += "

Be assistant if preference unavailable

" if(RETURN_TO_LOBBY) HTML += "

Return to lobby if preference unavailable

" HTML += {"
Reset
"} user << browse(null, "window=preferences") //user << browse(HTML, "window=mob_occupation;size=[width]x[height]") var/datum/browser/popup = new(user, "mob_occupation", "
Occupation Preferences
", width, height) popup.set_content(HTML) popup.open(0) return /datum/preferences/proc/ShowChoices(mob/user) if(!user || !user.client) return update_preview_icon() var/preview_front = fcopy_rsc(preview_icon_front) var/preview_side = fcopy_rsc(preview_icon_side) user << browse_rsc(preview_front, "previewicon.png") user << browse_rsc(preview_side, "previewicon2.png") var/dat = "" if(!IsGuestKey(user.key)) dat += {"
Slot [slot_name] - Load slot - Save slot - Reload slot

"} else dat += "Please create an account to save your preferences." dat += "
Character Settings | " dat += "UI Settings | " dat += "General Settings | " dat += "Special Roles

" if(appearance_isbanned(user)) 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.
" switch(current_tab) if(CHARACTER_SETUP) dat = setup_character_options(dat, user) if(UI_SETUP) dat = setup_UI(dat, user) if(GENERAL_SETUP) dat = setup_special(dat, user) if(SPECIAL_ROLES_SETUP) dat = configure_special_roles(dat, user) dat += "


" if(!IsGuestKey(user.key)) dat += {"Undo | Save Setup | "} dat += {"Reset Setup
"} //user << browse(HTML_SKELETON(dat), "window=preferences;size=560x580") var/datum/browser/popup = new(user, "preferences", "
Character Setup
", 680, 720) popup.set_content(dat) popup.open(0) /datum/preferences/proc/ShowDisabilityState(mob/user,flag,label) var/species = get_pref(/datum/preference_setting/string/species) var/disabilities = get_pref(/datum/preference_setting/binary_flag/disabilities) if(flag==DISABILITY_FLAG_FAT && species!="Human") return "
  • [species] cannot be fat.
  • " return "
  • [label]: [disabilities & flag ? "Yes" : "No"]
  • " /datum/preferences/proc/SetDisabilities(mob/user) var/HTML = "" HTML += {"
    Choose disabilities
      "} HTML += ShowDisabilityState(user,DISABILITY_FLAG_NEARSIGHTED,"Needs Glasses") HTML += ShowDisabilityState(user,DISABILITY_FLAG_FAT, "Obese") HTML += ShowDisabilityState(user,DISABILITY_FLAG_EPILEPTIC, "Seizures") HTML += ShowDisabilityState(user,DISABILITY_FLAG_DEAF, "Deaf") HTML += ShowDisabilityState(user,DISABILITY_FLAG_BLIND, "Blind") HTML += ShowDisabilityState(user,DISABILITY_FLAG_MUTE, "Mute") HTML += ShowDisabilityState(user,DISABILITY_FLAG_VEGAN, "Vegan") HTML += ShowDisabilityState(user,DISABILITY_FLAG_ASTHMA, "Asthma") HTML += ShowDisabilityState(user,DISABILITY_FLAG_LACTOSE, "Lactose Intolerant") HTML += ShowDisabilityState(user,DISABILITY_FLAG_LISP, "Lisp") HTML += ShowDisabilityState(user,DISABILITY_FLAG_ANEMIA, "Anemia") HTML += ShowDisabilityState(user,DISABILITY_FLAG_EHS, "Electromagnetic Hypersensitivity") /*HTML += ShowDisabilityState(user,DISABILITY_FLAG_COUGHING, "Coughing") HTML += ShowDisabilityState(user,DISABILITY_FLAG_TOURETTES, "Tourettes") Still working on it! -Angelite*/ HTML += {"
    \[Done\] \[Reset\]
    "} user << browse(null, "window=preferences") user << browse(HTML_SKELETON(HTML), "window=disabil;size=350x300") return /datum/preferences/proc/SetRecords(mob/user) var/HTML = "" HTML += {"
    Set Character Records
    Medical Records
    "} var/med_record = get_pref(/datum/preference_setting/string/med_record) if(length(med_record) <= 40) HTML += "[med_record]" else HTML += "[copytext(med_record, 1, 37)]..." HTML += "

    Employment Records
    " var/gen_record = get_pref(/datum/preference_setting/string/gen_record) if(length(gen_record) <= 40) HTML += "[gen_record]" else HTML += "[copytext(gen_record, 1, 37)]..." HTML += "

    Security Records
    " var/sec_record = get_pref(/datum/preference_setting/string/sec_record) if(length(sec_record) <= 40) HTML += "[sec_record]
    " else HTML += "[copytext(sec_record, 1, 37)]...
    " HTML += {"
    \[Done\]
    "} user << browse(null, "window=preferences") user << browse(HTML_SKELETON(HTML), "window=records;size=350x300") return /datum/preferences/proc/open_load_dialog(mob/user) var/database/query/q = new var/list/name_list[MAX_SAVE_SLOTS] message_admins("open load dialog for [user]") q.Add("select real_name, player_slot from players where player_ckey=?", user.ckey) if(q.Execute(db)) while(q.NextRow()) name_list[q.GetColumn(2)] = q.GetColumn(1) else message_admins("Error in open_load_dialog [__FILE__] ln:[__LINE__] #: [q.Error()] - [q.ErrorMsg()]") warning("Error in open_load_dialog [__FILE__] ln:[__LINE__] #:[q.Error()] - [q.ErrorMsg()]") return 0 var/dat = "
    Select a character slot to load
    " var/counter = 1 while(counter <= MAX_SAVE_SLOTS) if(counter==get_pref(/datum/preference_setting/numerical/default_slot)) dat += "[name_list[counter]]
    " else if(!name_list[counter]) dat += "Character[counter]
    " else dat += "[name_list[counter]]
    " counter++ dat += "
    " var/datum/browser/browser = new(user, "saves", null, 300, 340) browser.set_content(dat) browser.open(use_onclose=FALSE) /datum/preferences/proc/close_load_dialog(mob/user) user << browse(null, "window=saves") /datum/preferences/proc/configure_special_roles(var/dat, var/mob/user) dat+={"

    Special Role Preferences

    Please note that this also handles in-round polling for things like Raging Mages and Borers.

    Legend
    Never:
    Decline this role for this round and all future rounds. You will not be polled again.
    No:
    Default. Decline this role for this round only.
    Yes:
    Accept this role for this round only.
    Always:
    Accept this role for this round and all future rounds. You will not be polled again.
    "} for(var/list/table_type in list(antag_roles,nonantag_roles)) dat += {"
    "} if(table_type == antag_roles && isantagbanned(user)) dat += "" else for(var/role_id in table_type) dat += "" if(table_type[role_id]) //if mode is available on the server if(jobban_isbanned(user, role_id) || (role_id == "pai candidate" && jobban_isbanned(user, "pAI")) || (role_id == MALF && jobban_isbanned(user, "AI"))) dat += "" else var/wikiroute = role_wiki[role_id] var/desire = get_role_desire_str(roles[role_id]) dat += {""} dat += "

    [table_type == nonantag_roles ? "Non-" : ""]Antagonist Roles

    You are banned from antagonist roles

    [capitalize(role_id)]\[BANNED][wikiroute ? "(Wiki)" : "(Wiki)"] Never No Yes Always
    " dat += "

    " return dat