"
+ var/HTML = ""
+ HTML += "Select your Skills "
+ HTML += "Current skill level: [GetSkillClass(used_skillpoints)] ([used_skillpoints]) "
+ HTML += "Use preconfigured skillset "
+ HTML += ""
+ for(var/V in SKILLS)
+ HTML += "| [V]"
+ HTML += " | "
+ for(var/datum/skill/S in SKILLS[V])
+ var/level = skills[S.ID]
+ HTML += ""
+ HTML += "| [S.name] | "
+ HTML += "\[Untrained\] | "
+ // secondary skills don't have an amateur level
+ if(S.secondary)
+ HTML += " | "
+ else
+ HTML += "\[Amateur\] | "
+ HTML += "\[Trained\] | "
+ HTML += "\[Professional\] | "
+ HTML += " "
+ HTML += " "
+ HTML += "\[Done\]"
- dat += "Name: "
- dat += "[real_name] "
- dat += "(Random Name) "
- dat += "(Always Random Name: [be_random_name ? "Yes" : "No"])"
+ user << browse(null, "window=preferences")
+ user << browse(HTML, "window=show_skills;size=600x800")
+ return
+
+/datum/preferences/proc/ShowChoices(mob/user)
+ if(!user || !user.client) return
+ update_preview_icon()
+ user << browse_rsc(preview_icon_front, "previewicon.png")
+ user << browse_rsc(preview_icon_side, "previewicon2.png")
+ var/dat = ""
+
+ if(path)
+ dat += ""
+ dat += "Slot [slot_name] - "
+ dat += "Load slot - "
+ dat += "Save slot - "
+ dat += "Reload slot"
+ dat += ""
+
+ else
+ dat += "Please create an account to save your preferences."
+
+ dat += "
"
+
+ dat += "Name: "
+ dat += "[real_name] "
+ dat += "(Random Name) "
+ dat += "(Always Random Name: [be_random_name ? "Yes" : "No"])"
+ dat += " "
+
+ dat += "Gender: [gender == MALE ? "Male" : "Female"] "
+ dat += "Age: [age] "
+ dat += "Spawn Point: [spawnpoint]"
+
+ dat += " "
+ dat += "UI Style: [UI_style] "
+ dat += "Custom UI(recommended for White UI): "
+ dat += "-Color: [UI_style_color] "
+ dat += "-Alpha(transparency): [UI_style_alpha] "
+ dat += "Play admin midis: [(toggles & SOUND_MIDI) ? "Yes" : "No"] "
+ dat += "Play lobby music: [(toggles & SOUND_LOBBY) ? "Yes" : "No"] "
+ dat += "Ghost ears: [(toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"] "
+ dat += "Ghost sight: [(toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"] "
+ dat += "Ghost radio: [(toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"] "
+
+ if(config.allow_Metadata)
+ dat += "OOC Notes: Edit "
+
+ dat += " Custom Loadout: "
+ var/total_cost = 0
+
+ if(isnull(gear) || !islist(gear)) gear = list()
+
+ if(gear && gear.len)
dat += " "
+ for(var/gear_name in gear)
+ if(gear_datums[gear_name])
+ var/datum/gear/G = gear_datums[gear_name]
+ total_cost += G.cost
+ dat += "[gear_name] \[remove\] "
- dat += "Gender: [gender == MALE ? "Male" : "Female"] "
- dat += "Age: [age] "
- dat += "Spawn Point: [spawnpoint]"
+ dat += "Used: [total_cost] points."
+ else
+ dat += "none."
- dat += " "
- dat += "UI Style: [UI_style] "
- dat += "Custom UI(recommended for White UI): "
- dat += "-Color: [UI_style_color] "
- dat += "-Alpha(transparency): [UI_style_alpha] "
- dat += "Play admin midis: [(toggles & SOUND_MIDI) ? "Yes" : "No"] "
- dat += "Play lobby music: [(toggles & SOUND_LOBBY) ? "Yes" : "No"] "
- dat += "Ghost ears: [(toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"] "
- dat += "Ghost sight: [(toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"] "
- dat += "Ghost radio: [(toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"] "
+ if(total_cost < MAX_GEAR_COST)
+ dat += " \[add\]"
- if(config.allow_Metadata)
- dat += "OOC Notes: Edit "
+ dat += "
Occupation Choices "
+ dat += "\tSet Preferences "
- dat += " Custom Loadout: "
- var/total_cost = 0
+ dat += "
Body "
+ dat += "(®)"
+ dat += " "
+ dat += "Species: [species] "
+ dat += "Secondary Language: [language] "
+ dat += "Blood Type: [b_type] "
+ dat += "Skin Tone: [-s_tone + 35]/220 "
+ //dat += "Skin pattern: Adjust "
+ dat += "Needs Glasses: [disabilities == 0 ? "No" : "Yes"] "
+ dat += "Limbs: Adjust "
+ dat += "Internal Organs: Adjust "
- if(isnull(gear) || !islist(gear)) gear = list()
+ //display limbs below
+ var/ind = 0
+ for(var/name in organ_data)
+ //world << "[ind] \ [organ_data.len]"
+ var/status = organ_data[name]
+ var/organ_name = null
+ switch(name)
+ if("l_arm")
+ organ_name = "left arm"
+ if("r_arm")
+ organ_name = "right arm"
+ if("l_leg")
+ organ_name = "left leg"
+ if("r_leg")
+ organ_name = "right leg"
+ if("l_foot")
+ organ_name = "left foot"
+ if("r_foot")
+ organ_name = "right foot"
+ if("l_hand")
+ organ_name = "left hand"
+ if("r_hand")
+ organ_name = "right hand"
+ if("heart")
+ organ_name = "heart"
+ if("eyes")
+ organ_name = "eyes"
- if(gear && gear.len)
- dat += " "
- for(var/gear_name in gear)
- if(gear_datums[gear_name])
- var/datum/gear/G = gear_datums[gear_name]
- total_cost += G.cost
- dat += "[gear_name] \[remove\] "
-
- dat += "Used: [total_cost] points."
- else
- dat += "none."
-
- if(total_cost < MAX_GEAR_COST)
- dat += " \[add\]"
-
- dat += "
Occupation Choices "
- dat += "\tSet Preferences "
-
- dat += "
Body "
- dat += "(®)"
- dat += " "
- dat += "Species: [species] "
- dat += "Secondary Language: [language] "
- dat += "Blood Type: [b_type] "
- dat += "Skin Tone: [-s_tone + 35]/220 "
- //dat += "Skin pattern: Adjust "
- dat += "Needs Glasses: [disabilities == 0 ? "No" : "Yes"] "
- dat += "Limbs: Adjust "
- dat += "Internal Organs: Adjust "
-
- //display limbs below
- var/ind = 0
- for(var/name in organ_data)
- //world << "[ind] \ [organ_data.len]"
- var/status = organ_data[name]
- var/organ_name = null
- switch(name)
- if("l_arm")
- organ_name = "left arm"
- if("r_arm")
- organ_name = "right arm"
- if("l_leg")
- organ_name = "left leg"
- if("r_leg")
- organ_name = "right leg"
- if("l_foot")
- organ_name = "left foot"
- if("r_foot")
- organ_name = "right foot"
- if("l_hand")
- organ_name = "left hand"
- if("r_hand")
- organ_name = "right hand"
+ if(status == "cyborg")
+ ++ind
+ if(ind > 1)
+ dat += ", "
+ dat += "\tMechanical [organ_name] prothesis"
+ else if(status == "amputated")
+ ++ind
+ if(ind > 1)
+ dat += ", "
+ dat += "\tAmputated [organ_name]"
+ else if(status == "mechanical")
+ ++ind
+ if(ind > 1)
+ dat += ", "
+ dat += "\tMechanical [organ_name]"
+ else if(status == "assisted")
+ ++ind
+ if(ind > 1)
+ dat += ", "
+ switch(organ_name)
if("heart")
- organ_name = "heart"
+ dat += "\tPacemaker-assisted [organ_name]"
+ if("voicebox") //on adding voiceboxes for speaking skrell/similar replacements
+ dat += "\tSurgically altered [organ_name]"
if("eyes")
- organ_name = "eyes"
-
- if(status == "cyborg")
- ++ind
- if(ind > 1)
- dat += ", "
- dat += "\tMechanical [organ_name] prothesis"
- else if(status == "amputated")
- ++ind
- if(ind > 1)
- dat += ", "
- dat += "\tAmputated [organ_name]"
- else if(status == "mechanical")
- ++ind
- if(ind > 1)
- dat += ", "
- dat += "\tMechanical [organ_name]"
- else if(status == "assisted")
- ++ind
- if(ind > 1)
- dat += ", "
- switch(organ_name)
- if("heart")
- dat += "\tPacemaker-assisted [organ_name]"
- if("voicebox") //on adding voiceboxes for speaking skrell/similar replacements
- dat += "\tSurgically altered [organ_name]"
- if("eyes")
- dat += "\tRetinal overlayed [organ_name]"
- else
- dat += "\tMechanically assisted [organ_name]"
- if(!ind)
- dat += "\[...\]
"
- else
- dat += "
"
-
- if(gender == MALE)
- dat += "Underwear: [underwear_m[underwear]] "
- else
- dat += "Underwear: [underwear_f[underwear]] "
-
- dat += "Undershirt: [undershirt_t[undershirt]] "
-
- dat += "Backpack Type: [backbaglist[backbag]] "
-
- dat += "Nanotrasen Relation: [nanotrasen_relation] "
-
- dat += " | Preview
  | "
-
- dat += " | "
-
- if(jobban_isbanned(user, "Records"))
- dat += "You are banned from using character records. "
- else
- dat += "Character Records "
-
- dat += "Set Antag Options "
-
- dat += "\tSet Skills ([GetSkillClass(used_skillpoints)][used_skillpoints > 0 ? " [used_skillpoints]" : "0"]) "
-
- dat += "Set Flavor Text "
- dat += " "
-
- dat += " Hair "
- dat += "Change Color "
- dat += " Style: [h_style] "
-
- dat += " Facial "
- dat += "Change Color "
- dat += " Style: [f_style] "
-
- dat += " Eyes "
- dat += "Change Color "
-
- dat += " Body Color "
- dat += "Change Color "
-
- dat += "
"
- if(jobban_isbanned(user, "Syndicate"))
- dat += "You are banned from antagonist roles."
- src.be_special = 0
- else
- var/n = 0
- for (var/i in special_roles)
- if(special_roles[i]) //if mode is available on the server
- if(jobban_isbanned(user, i))
- dat += "Be [i]: \[BANNED] "
- else if(i == "pai candidate")
- if(jobban_isbanned(user, "pAI"))
- dat += "Be [i]: \[BANNED] "
- else
- dat += "Be [i]: [src.be_special&(1< "
- n++
- dat += " |
"
-
- if(!IsGuestKey(user.key))
- dat += "Undo - "
- dat += "Save Setup - "
-
- dat += "Reset Setup"
- dat += ""
-
- user << browse(dat, "window=preferences;size=560x736")
-
- proc/SetChoices(mob/user, limit = 16, list/splitJobs = list("Chief Medical Officer"), width = 550, height = 660)
- 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/HTML = ""
- HTML += ""
- HTML += "Choose occupation chances Unavailable occupations are crossed out.
"
- HTML += "\[Done\] " // Easier to press up here.
- HTML += "" // Table within a table for alignment, also allows you to easily add more colomns.
- HTML += ""
- 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))
- 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 += " | "
+
+ dat += " | "
+
+ if(jobban_isbanned(user, "Records"))
+ dat += "You are banned from using character records. "
+ else
+ dat += "Character Records "
+
+ dat += "Set Antag Options "
+
+ dat += "\tSet Skills ([GetSkillClass(used_skillpoints)][used_skillpoints > 0 ? " [used_skillpoints]" : "0"]) "
+
+ dat += "Set Flavor Text "
+ dat += " "
+
+ dat += " Hair "
+ dat += "Change Color "
+ dat += " Style: [h_style] "
+
+ dat += " Facial "
+ dat += "Change Color "
+ dat += " Style: [f_style] "
+
+ dat += " Eyes "
+ dat += "Change Color "
+
+ dat += " Body Color "
+ dat += "Change Color "
+
+ dat += "
"
+ if(jobban_isbanned(user, "Syndicate"))
+ dat += "You are banned from antagonist roles."
+ src.be_special = 0
+ else
+ var/n = 0
+ for (var/i in special_roles)
+ if(special_roles[i]) //if mode is available on the server
+ if(jobban_isbanned(user, i))
+ dat += "Be [i]: \[BANNED] "
+ else if(i == "pai candidate")
+ if(jobban_isbanned(user, "pAI"))
+ dat += "Be [i]: \[BANNED] "
+ else
+ dat += "Be [i]: [src.be_special&(1< "
+ n++
+ dat += " |
"
+
+ if(!IsGuestKey(user.key))
+ dat += "Undo - "
+ dat += "Save Setup - "
+
+ dat += "Reset Setup"
+ dat += ""
+
+ user << browse(dat, "window=preferences;size=560x736")
+
+/datum/preferences/proc/SetChoices(mob/user, limit = 16, list/splitJobs = list("Chief Medical Officer"), width = 550, height = 660)
+ 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/HTML = ""
+ HTML += ""
+ HTML += "Choose occupation chances Unavailable occupations are crossed out.
"
+ HTML += "\[Done\] " // Easier to press up here.
+ HTML += "" // Table within a table for alignment, also allows you to easily add more colomns.
+ HTML += ""
+ 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))
+ 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 += " | "
-
- HTML += " | "
-
- switch(alternate_option)
- 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\]"
- HTML += ""
-
- user << browse(null, "window=preferences")
- user << browse(HTML, "window=mob_occupation;size=[width]x[height]")
- return
-
- proc/SetDisabilities(mob/user)
- var/HTML = ""
- HTML += ""
- HTML += "Choose disabilities "
-
- HTML += "Need Glasses? [disabilities & (1<<0) ? "Yes" : "No"] "
- HTML += "Seizures? [disabilities & (1<<1) ? "Yes" : "No"] "
- HTML += "Coughing? [disabilities & (1<<2) ? "Yes" : "No"] "
- HTML += "Tourettes/Twitching? [disabilities & (1<<3) ? "Yes" : "No"] "
- HTML += "Nervousness? [disabilities & (1<<4) ? "Yes" : "No"] "
- HTML += "Deafness? [disabilities & (1<<5) ? "Yes" : "No"] "
-
- HTML += " "
- HTML += "\[Done\]"
- HTML += ""
-
- user << browse(null, "window=preferences")
- user << browse(HTML, "window=disabil;size=350x300")
- return
-
- proc/SetRecords(mob/user)
- var/HTML = ""
- HTML += ""
- HTML += "Set Character Records "
-
- HTML += "Medical Records "
-
- HTML += TextPreview(med_record,40)
-
- HTML += "
Employment Records "
-
- HTML += TextPreview(gen_record,40)
-
- HTML += "
Security Records "
-
- HTML += TextPreview(sec_record,40)
-
- HTML += " "
- HTML += "\[Done\]"
- HTML += ""
-
- user << browse(null, "window=preferences")
- user << browse(HTML, "window=records;size=350x300")
- return
-
- proc/SetAntagoptions(mob/user)
- if(uplinklocation == "" || !uplinklocation)
- uplinklocation = "PDA"
- var/HTML = ""
- HTML += ""
- HTML += "Antagonist Options "
- HTML += " "
- HTML +="Uplink Type : [uplinklocation]"
- HTML +=" "
- HTML +=" "
- HTML +="\[Done\]"
-
- HTML += ""
-
- user << browse(null, "window=preferences")
- user << browse(HTML, "window=antagoptions")
- return
-
- proc/SetFlavorText(mob/user)
- var/HTML = ""
- HTML += ""
- HTML += "Set Flavour Text "
- HTML += " "
- HTML += "General: "
- HTML += TextPreview(flavor_texts["general"])
- HTML += " "
- HTML += "Head: "
- HTML += TextPreview(flavor_texts["head"])
- HTML += " "
- HTML += "Face: "
- HTML += TextPreview(flavor_texts["face"])
- HTML += " "
- HTML += "Eyes: "
- HTML += TextPreview(flavor_texts["eyes"])
- HTML += " "
- HTML += "Body: "
- HTML += TextPreview(flavor_texts["torso"])
- HTML += " "
- HTML += "Arms: "
- HTML += TextPreview(flavor_texts["arms"])
- HTML += " "
- HTML += "Hands: "
- HTML += TextPreview(flavor_texts["hands"])
- HTML += " "
- HTML += "Legs: "
- HTML += TextPreview(flavor_texts["legs"])
- HTML += " "
- HTML += "Feet: "
- HTML += TextPreview(flavor_texts["feet"])
- HTML += " "
- HTML += " "
- HTML +="\[Done\]"
- HTML += ""
- user << browse(null, "window=preferences")
- user << browse(HTML, "window=flavor_text;size=430x300")
- return
-
- proc/GetPlayerAltTitle(datum/job/job)
- return player_alt_titles.Find(job.title) > 0 \
- ? player_alt_titles[job.title] \
- : job.title
-
- proc/SetPlayerAltTitle(datum/job/job, new_title)
- // remove existing entry
- if(player_alt_titles.Find(job.title))
- player_alt_titles -= job.title
- // add one if it's not default
- if(job.title != new_title)
- player_alt_titles[job.title] = new_title
-
- proc/SetJob(mob/user, role)
- var/datum/job/job = job_master.GetJob(role)
- if(!job)
- user << browse(null, "window=mob_occupation")
- ShowChoices(user)
- return
-
- if(role == "Assistant")
- if(job_civilian_low & job.flag)
- job_civilian_low &= ~job.flag
- else
- job_civilian_low |= job.flag
- SetChoices(user)
- return 1
+ continue
if(GetJobDepartment(job, 1) & job.flag)
- SetJobDepartment(job, 1)
+ HTML += " \[High]"
else if(GetJobDepartment(job, 2) & job.flag)
- SetJobDepartment(job, 2)
+ HTML += " \[Medium]"
else if(GetJobDepartment(job, 3) & job.flag)
- SetJobDepartment(job, 3)
- else//job = Never
- SetJobDepartment(job, 4)
+ HTML += " \[Low]"
+ else
+ HTML += " \[NEVER]"
+ if(job.alt_titles)
+ HTML += " | |   | \[[GetPlayerAltTitle(job)]\] | "
+ HTML += ""
+ HTML += " "
+
+ HTML += " |