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 = "