diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 5466ab60ef..5457a2832c 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -9,6 +9,8 @@ datum/mind var/assigned_role var/special_role + var/role_alt_title + var/datum/job/assigned_job var/list/datum/objective/objectives = list() @@ -287,6 +289,7 @@ datum/mind var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in get_all_jobs() if (!new_role) return assigned_role = new_role + role_alt_title = null else if (href_list["memory_edit"]) var/new_memo = input("Write new memory", "Memory", memory) as null|message @@ -345,7 +348,7 @@ datum/mind new_objective.owner = src new_objective:target = new_target:mind //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. - new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:assigned_role)]." + new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:role_alt_title ? new_target:mind:role_alt_title : new_target:mind:assigned_role)]." if ("hijack") new_objective = new /datum/objective/hijack diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index f516247850..a4900fb067 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -108,7 +108,7 @@ explanation = "Our knowledge must live on. Make sure at least [acolytes_needed] acolytes escape on the shuttle to spread their work on an another station." if("sacrifice") if(sacrifice_target && sacrifice_target.current) - explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. You will need the sacrifice rune (Hell blood join) and three acolytes to do so." + explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.role_alt_title ? sacrifice_target.role_alt_title : sacrifice_target.assigned_role]. You will need the sacrifice rune (Hell blood join) and three acolytes to do so." else explanation = "Free objective." if("eldergod") @@ -307,9 +307,9 @@ explanation = "Free objective" else if(sacrificed.Find(sacrifice_target)) - explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. \green Success!" + explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.role_alt_title ? sacrifice_target.role_alt_title : sacrifice_target.assigned_role]. \green Success!" else if(sacrifice_target && sacrifice_target.current) - explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.assigned_role]. \red Failed." + explanation = "Sacrifice [sacrifice_target.current.real_name], the [sacrifice_target.role_alt_title ? sacrifice_target.role_alt_title : sacrifice_target.assigned_role]. \red Failed." else explanation = "Sacrifice Unknown, the Unknown whos body was likely gibbed. \red Failed." if("eldergod") diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index cb2f4a46a8..2f9a9747e3 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -33,7 +33,7 @@ datum/objective/decapitate find_target() ..() if(target && target.current) - explanation_text = "[target.current.real_name], the [target.assigned_role], has defied us for the last time. Make an example of him, and bring us his severed head." + explanation_text = "[target.current.real_name], the [target.role_alt_title ? target.role_alt_title : target.assigned_role], has defied us for the last time. Make an example of him, and bring us his severed head." else explanation_text = "Free Objective" return target @@ -42,7 +42,7 @@ datum/objective/decapitate find_target_by_role(role, role_type=0) ..(role, role_type) if(target && target.current) - explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role], has defied us for the last time. Make an example of him, and bring us his severed head." + explanation_text = "[target.current.real_name], the [target.role_alt_title ? target.role_alt_title : (!role_type ? target.assigned_role : target.special_role)], has defied us for the last time. Make an example of him, and bring us his severed head." else explanation_text = "Free Objective" return target @@ -66,7 +66,7 @@ datum/objective/assassinate find_target() ..() if(target && target.current) - explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]." + explanation_text = "Assassinate [target.current.real_name], the [target.role_alt_title ? target.role_alt_title : target.assigned_role]." else explanation_text = "Free Objective" return target @@ -75,7 +75,7 @@ datum/objective/assassinate find_target_by_role(role, role_type=0) ..(role, role_type) if(target && target.current) - explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." + explanation_text = "Assassinate [target.current.real_name], the [target.role_alt_title ? target.role_alt_title : (!role_type ? target.assigned_role : target.special_role)]." else explanation_text = "Free Objective" return target @@ -96,7 +96,7 @@ datum/objective/mutiny find_target() ..() if(target && target.current) - explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]." + explanation_text = "Assassinate [target.current.real_name], the [target.role_alt_title ? target.role_alt_title : target.assigned_role]." else explanation_text = "Free Objective" return target @@ -105,7 +105,7 @@ datum/objective/mutiny find_target_by_role(role, role_type=0) ..(role, role_type) if(target && target.current) - explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." + explanation_text = "Assassinate [target.current.real_name], the [target.role_alt_title ? target.role_alt_title : (!role_type ? target.assigned_role : target.special_role)]." else explanation_text = "Free Objective" return target @@ -138,7 +138,7 @@ datum/objective/debrain//I want braaaainssss find_target_by_role(role, role_type=0) ..(role, role_type) if(target && target.current) - explanation_text = "Steal the brain of [target.current.real_name] the [!role_type ? target.assigned_role : target.special_role]." + explanation_text = "Steal the brain of [target.current.real_name] the [target.role_alt_title ? target.role_alt_title : (!role_type ? target.assigned_role : target.special_role)]." else explanation_text = "Free Objective" return target @@ -162,7 +162,7 @@ datum/objective/protect//The opposite of killing a dude. find_target() ..() if(target && target.current) - explanation_text = "Protect [target.current.real_name], the [target.assigned_role]." + explanation_text = "Protect [target.current.real_name], the [target.role_alt_title ? target.role_alt_title : target.assigned_role]." else explanation_text = "Free Objective" return target @@ -171,7 +171,7 @@ datum/objective/protect//The opposite of killing a dude. find_target_by_role(role, role_type=0) ..(role, role_type) if(target && target.current) - explanation_text = "Protect [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." + explanation_text = "Protect [target.current.real_name], the [target.role_alt_title ? target.role_alt_title : (!role_type ? target.assigned_role : target.special_role)]." else explanation_text = "Free Objective" return target diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 5fe771c796..4210ac52d5 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -72,7 +72,7 @@ var/datum/objective/assassinate/rev_obj = new rev_obj.owner = rev_mind rev_obj.target = head_mind - rev_obj.explanation_text = "Assassinate [head_mind.current.real_name], the [head_mind.assigned_role]." + rev_obj.explanation_text = "Assassinate [head_mind.current.real_name], the [head_mind.role_alt_title ? head_mind.role_alt_title : head_mind.assigned_role]." rev_mind.objectives += rev_obj equip_traitor(rev_mind.current, 1) //changing how revs get assigned their uplink so they can get PDA uplinks. --NEO @@ -102,7 +102,7 @@ var/datum/objective/mutiny/rev_obj = new rev_obj.owner = rev_mind rev_obj.target = head_mind - rev_obj.explanation_text = "Assassinate [head_mind.current.real_name], the [head_mind.assigned_role]." + rev_obj.explanation_text = "Assassinate [head_mind.current.real_name], the [head_mind.role_alt_title ? head_mind.role_alt_title : head_mind.assigned_role]." rev_mind.objectives += rev_obj /datum/game_mode/proc/greet_revolutionary(var/datum/mind/rev_mind, var/you_are=1) diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm index 93fa084042..489f5433ab 100644 --- a/code/game/jobs/job/civilian_chaplain.dm +++ b/code/game/jobs/job/civilian_chaplain.dm @@ -7,6 +7,7 @@ total_positions = 1 spawn_positions = 1 supervisors = "the head of personnel" + alt_titles = list("Counselor") equip(var/mob/living/carbon/human/H) @@ -19,7 +20,7 @@ H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes) spawn(0) var/religion_name = "Christianity" - var/new_religion = input(H, "You are the Chaplain. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name) + var/new_religion = input(H, "You are the Chaplain / Councelor. For game mechanics purposes, you need to choose a religion either way. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name) if ((length(new_religion) == 0) || (new_religion == "Christianity")) new_religion = religion_name diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index c8ae094586..7a005104b9 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -22,5 +22,8 @@ //Supervisors, who this person answers to directly var/supervisors = "" + //List of alternate titles, if any + var/list/alt_titles + /datum/job/proc/equip(var/mob/living/carbon/human/H) return 1 diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 46484f681d..501200ebcf 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -30,6 +30,7 @@ total_positions = 5 spawn_positions = 3 supervisors = "the chief medical officer" + alt_titles = list("Virologist", "Surgeon") equip(var/mob/living/carbon/human/H) @@ -68,7 +69,7 @@ return 1 - +/* /datum/job/virologist title = "Virologist" flag = VIROLOGIST @@ -90,5 +91,5 @@ H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/virologist(H), H.slot_wear_suit) H.equip_if_possible(new /obj/item/device/flashlight/pen(H), H.slot_s_store) return 1 - +*/ diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 2aa27c4ead..a764f6e98f 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -28,6 +28,7 @@ total_positions = 5 spawn_positions = 3 supervisors = "the research director" + alt_titles = list("Plasma Researcher", "Xenobiologist") equip(var/mob/living/carbon/human/H) diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index c6c6631fb9..2f4dc783ad 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -68,6 +68,7 @@ total_positions = 1 spawn_positions = 1 supervisors = "the head of security" + alt_titles = list("Forensic Technician") equip(var/mob/living/carbon/human/H) diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 5bea81d596..ef382c34ba 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -262,11 +262,11 @@ var/global/datum/controller/occupations/job_master C = new /obj/item/weapon/card/id/gold(H) else C = new /obj/item/weapon/card/id(H) - if(C) + if(C) C.registered_name = H.real_name C.assignment = title C.name = "[C.registered_name]'s ID Card ([C.assignment])" - C.access = get_access(rank) + C.access = get_access(rank) H.equip_if_possible(C, H.slot_wear_id) if(!H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_r_store)) H.equip_if_possible(new /obj/item/weapon/pen(H), H.slot_ears) diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index fc90968815..f831625543 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -22,7 +22,6 @@ var/const CMO =(1<<3) DOCTOR =(1<<4) GENETICIST =(1<<5) - VIROLOGIST =(1<<6) CIVILIAN =(1<<2) @@ -74,8 +73,7 @@ var/list/engineering_positions = list( var/list/medical_positions = list( "Chief Medical Officer", "Medical Doctor", - "Geneticist", - "Virologist" + "Geneticist" ) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 397de4f9b2..7a168c4d4e 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -189,7 +189,7 @@ Pod/Blast Doors computer L.fields["sex"] = H.gender L.fields["age"] = H.age L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]") - L.fields["rank"] = H.mind.assigned_role + L.fields["rank"] = H.mind.role_alt_title ? H.mind.role_alt_title : H.mind.assigned_role L.fields["b_type"] = H.dna.b_type L.fields["b_dna"] = H.dna.unique_enzymes L.fields["enzymes"] = H.dna.struc_enzymes @@ -266,7 +266,7 @@ Pod/Blast Doors computer L.fields["sex"] = H.gender L.fields["age"] = H.age L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]") - L.fields["rank"] = H.mind.assigned_role + L.fields["rank"] = H.mind.role_alt_title ? H.mind.role_alt_title : H.mind.assigned_role L.fields["b_type"] = H.dna.b_type L.fields["b_dna"] = H.dna.unique_enzymes L.fields["enzymes"] = H.dna.struc_enzymes diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index fac90da513..454e0df955 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -335,7 +335,7 @@ jobs += "Chemist+RD+CMO
" jobs += "Geneticist+RD+CMO
" jobs += "MD+CMO
" - jobs += "Virologist+RD+CMO
" + /*jobs += "Virologist+RD+CMO
"*/ jobs += "Scientist+RD
" jobs += "AI+Cyborg
" jobs += "Detective+HoS

" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 1c8d2d9139..8337882b31 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -315,6 +315,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!record_found)//We have to pick their role if they have no record. if(G_found.mind&&G_found.mind.assigned_role)//But they may have an assigned role already. new_character.mind.assigned_role = G_found.mind.assigned_role//Also makes sure our MODE people are equipped right later on. + new_character.mind.role_alt_title = G_found.mind.role_alt_title else var/assigned_role = input("Please specify which job the character will be respawned as.", "Assigned role") as null|anything in get_all_jobs() if(!assigned_role) new_character.mind.assigned_role = "Assistant"//Defaults to assistant. diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 64f207624f..d864340eff 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -253,9 +253,9 @@ src << alert("[rank] is not available. Please try another.") return 0 + job_master.AssignRole(src, rank, 1) var/mob/living/carbon/human/character = create_character() var/icon/char_icon = getFlatIcon(character,0)//We're creating out own cache so it's not needed. - job_master.AssignRole(character, rank, 1) job_master.EquipRank(character, rank, 1) EquipCustomItems(character) character.loc = pick(latejoin) @@ -327,7 +327,7 @@ L.fields["sex"] = H.gender L.fields["age"] = H.age L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]") - L.fields["rank"] = H.mind.assigned_role + L.fields["rank"] = H.mind.role_alt_title ? H.mind.role_alt_title : H.mind.assigned_role L.fields["b_type"] = H.dna.b_type L.fields["b_dna"] = H.dna.unique_enzymes L.fields["enzymes"] = H.dna.struc_enzymes diff --git a/code/modules/mob/new_player/preferences.dm b/code/modules/mob/new_player/preferences.dm index 4f51f45141..0af5050991 100644 --- a/code/modules/mob/new_player/preferences.dm +++ b/code/modules/mob/new_player/preferences.dm @@ -104,6 +104,8 @@ datum/preferences job_engsec_med = 0 job_engsec_low = 0 + list/job_alt_titles = new() // the default name of a job like "Medical Doctor" + flavor_text = "" // slot stuff @@ -213,6 +215,19 @@ datum/preferences proc/closesave(mob/user) user << browse(null, "window=saves;size=300x640") + proc/GetAltTitle(datum/job/job) + return job_alt_titles.Find(job.title) > 0 \ + ? job_alt_titles[job.title] \ + : job.title + + proc/SetAltTitle(datum/job/job, new_title) + // remove existing entry + if(job_alt_titles.Find(job.title)) + job_alt_titles -= job.title + // add one if it's not default + if(job.title != new_title) + job_alt_titles[job.title] = new_title + proc/SetChoices(mob/user, changedjob) var/HTML = "" HTML += "
" @@ -246,14 +261,17 @@ datum/preferences HTML += "\[Low]" else HTML += "\[NEVER]" - HTML += "
" + if(job.alt_titles) + HTML += " \[[GetAltTitle(job)]\]
" + else + HTML += "
" HTML += "
" HTML += "\[Done\]" HTML += "
" user << browse(null, "window=preferences") - user << browse(HTML, "window=mob_occupation;size=320x600") + user << browse(HTML, "window=mob_occupation;size=350x600") return @@ -378,6 +396,14 @@ datum/preferences return 1 + if(link_tags["alt_title"] && link_tags["job"]) + var/datum/job/job = locate(link_tags["job"]) + var/choices = list(job.title) + job.alt_titles + var/choice = input("Pick a title for [job.title].", "Character Generation", GetAltTitle(job)) as anything in choices | null + if(choice) + SetAltTitle(job, choice) + SetChoices(user) + if(link_tags["real_name"]) var/new_name @@ -638,6 +664,7 @@ datum/preferences job_engsec_high = 0 job_engsec_med = 0 job_engsec_low = 0 + job_alt_titles = new() underwear = 1 be_special = 0 be_random_name = 0 diff --git a/code/modules/mob/new_player/savefile.dm b/code/modules/mob/new_player/savefile.dm index 17f6d826cb..95ba0bdb75 100644 --- a/code/modules/mob/new_player/savefile.dm +++ b/code/modules/mob/new_player/savefile.dm @@ -115,6 +115,8 @@ datum/preferences/proc/savefile_save(mob/user, slot) F["job_engsec_med"] << src.job_engsec_med F["job_engsec_low"] << src.job_engsec_low + F["job_alt_titles"] << job_alt_titles + //Body data F["hair_red"] << src.r_hair F["hair_green"] << src.g_hair @@ -212,6 +214,10 @@ datum/preferences/proc/savefile_load(mob/user, slot) F["job_engsec_med"] >> src.job_engsec_med F["job_engsec_low"] >> src.job_engsec_low + F["job_alt_titles"] >> job_alt_titles + if(!job_alt_titles) + job_alt_titles = new() + //NOTE: Conversion things go inside this if statement //When updating the save file remember to add 1 to BOTH the savefile constants //Also take the old conversion things that no longer apply out of this if