diff --git a/code/WorkInProgress/Tastyfish/livestock.dm b/code/WorkInProgress/Tastyfish/livestock.dm
index 9c9e7cc4958..36d2ba6385c 100644
--- a/code/WorkInProgress/Tastyfish/livestock.dm
+++ b/code/WorkInProgress/Tastyfish/livestock.dm
@@ -6,9 +6,9 @@
speak_chance = 1
turns_per_move = 15
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
- response_help = "pets "
- response_disarm = "gently pushes aside "
- response_harm = "kicks "
+ response_help = "pets"
+ response_disarm = "gently pushes aside"
+ response_harm = "kicks"
var/max_nutrition = 100 // different animals get hungry faster, basically number of 5-second steps from full to starving (60 == 5 minutes)
var/nutrition_step // cycle step in nutrition system
var/obj/movement_target // eating-ing target
@@ -17,6 +17,9 @@
if(!nutrition)
nutrition = max_nutrition * 0.33 // at 1/3 nutrition
+ reagents = new()
+ reagents.my_atom = src
+
Life()
..()
@@ -38,12 +41,14 @@
if(nutrition >= max_nutrition)
return
- if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
+ if((movement_target) && !(isturf(movement_target.loc)))
movement_target = null
- stop_automated_movement = 0
+ a_intent = "help"
+ turns_per_move = initial(turns_per_move)
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
movement_target = null
- stop_automated_movement = 0
+ a_intent = "help"
+ turns_per_move = initial(turns_per_move)
for(var/obj/item/weapon/reagent_containers/food/snacks/S in oview(src,3))
if(isturf(S.loc) || ishuman(S.loc))
movement_target = S
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 5466ab60ef9..5457a2832c3 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 f5162478508..a4900fb0670 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 cb2f4a46a8f..2f9a9747e3c 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 5fe771c796e..4210ac52d51 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 93fa0840423..489f5433ab2 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 c8ae0945866..7a005104b9b 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 46484f681d2..501200ebcfa 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 2aa27c4eadf..a764f6e98ff 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 c6c6631fb96..2f4dc783ad0 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 0ffb81b43e4..ef382c34bad 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -44,6 +44,12 @@ var/global/datum/controller/occupations/job_master
return null
+ proc/GetAltTitle(mob/new_player/player, rank)
+ . = player.preferences.GetAltTitle(GetJob(rank))
+ world << "AT: [rank]: [.]"
+ return .
+
+
proc/AssignRole(var/mob/new_player/player, var/rank, var/latejoin = 0)
Debug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]")
if((player) && (player.mind) && (rank))
@@ -56,6 +62,7 @@ var/global/datum/controller/occupations/job_master
if((job.current_positions < position_limit) || position_limit == -1)
Debug("Player: [player] is now Rank: [rank], JCP:[job.current_positions], JPL:[position_limit]")
player.mind.assigned_role = rank
+ player.mind.role_alt_title = GetAltTitle(player, rank)
unassigned -= player
job.current_positions++
return 1
@@ -83,6 +90,7 @@ var/global/datum/controller/occupations/job_master
for(var/mob/new_player/player in world)
if((player) && (player.mind))
player.mind.assigned_role = null
+ player.mind.role_alt_title = null
player.mind.special_role = null
SetupOccupations()
unassigned = list()
@@ -207,12 +215,16 @@ var/global/datum/controller/occupations/job_master
else
H << "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator."
- spawnId(H,rank)
+ if(H.mind.assigned_role == rank && H.mind.role_alt_title)
+ spawnId(H, rank, H.mind.role_alt_title)
+ else
+ spawnId(H, rank)
H << "You are the [rank]."
H << "As the [rank] you answer directly to [job.supervisors]. Special circumstances may change this."
H.job = rank
- if(H.mind)
+ if(H.mind && H.mind.assigned_role != rank)
H.mind.assigned_role = rank
+ H.mind.role_alt_title = null
if(!joined_late && rank != "Tourist")
var/obj/S = null
@@ -239,8 +251,9 @@ var/global/datum/controller/occupations/job_master
return 1
- proc/spawnId(var/mob/living/carbon/human/H, rank)
+ proc/spawnId(var/mob/living/carbon/human/H, rank, title)
if(!H) return 0
+ if(!title) title = rank
var/obj/item/weapon/card/id/C = null
switch(rank)
if("Cyborg")
@@ -251,9 +264,9 @@ var/global/datum/controller/occupations/job_master
C = new /obj/item/weapon/card/id(H)
if(C)
C.registered_name = H.real_name
- C.assignment = rank
+ C.assignment = title
C.name = "[C.registered_name]'s ID Card ([C.assignment])"
- C.access = get_access(C.assignment)
+ 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 fc90968815e..f8316255431 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 397de4f9b22..7a168c4d4e5 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/game/machinery/sink.dm b/code/game/machinery/sink.dm
index d0319d4de42..2c75cacad85 100644
--- a/code/game/machinery/sink.dm
+++ b/code/game/machinery/sink.dm
@@ -5,13 +5,18 @@
desc = "A sink used for washing one's hands and face."
anchored = 1
var/busy = 0 //Something's being washed at the moment
+ var/mode = 0 //0 == fill, 1 == pour
+ New()
+ ..()
+ verbs += /obj/machinery/sink/proc/mode_pour
+
attack_hand(mob/M as mob)
if(busy)
M << "\red Someone's already washing something here."
return
- usr << "\blue You start washing up."
+ M << "\blue You start washing up."
busy = 1
if(do_after(M,40))
@@ -43,6 +48,25 @@
V.show_message(text("\blue [M] washes up using \the [src]."))
busy = 0
+ proc/mode_pour()
+ set name = "Mode -> Pour"
+ set category = "Object"
+ set src in oview(1)
+
+ mode = 1
+ verbs -= /obj/machinery/sink/proc/mode_pour
+ verbs += /obj/machinery/sink/proc/mode_fill
+ usr << "You will now pour reagents down \the [src]."
+
+ proc/mode_fill()
+ set name = "Mode -> Fill"
+ set category = "Object"
+ set src in oview(1)
+
+ mode = 0
+ verbs -= /obj/machinery/sink/proc/mode_fill
+ verbs += /obj/machinery/sink/proc/mode_pour
+ usr << "You will now fill your container from the faucet."
attackby(var/obj/item/O as obj, var/mob/user as mob)
if(busy)
@@ -50,15 +74,26 @@
return
if (istype(O, /obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks))
- if(O.reagents.total_volume < O.reagents.maximum_volume)
- O:reagents.add_reagent("water", 10)
- user.visible_message( \
- "\blue [user] fills the [O] using the [src].", \
- "\blue You fill the [O] using the [src].")
+ if(!mode)
+ // fill
+ if(O.reagents.total_volume < O.reagents.maximum_volume)
+ O:reagents.add_reagent("water", 10)
+ user.visible_message( \
+ "\blue [user] fills the [O] using the [src].", \
+ "\blue You fill the [O] using the [src].")
+ else
+ user.visible_message( \
+ "\blue [user] spills water out of the overflowing [O] into the [src].", \
+ "\blue You spill water out of the overflowing [O] into the [src].")
else
- user.visible_message( \
- "\blue [user] spills water out of the overflowing [O] into the [src].", \
- "\blue You spill water out of the overflowing [O] into the [src].")
+ // pour
+ if(O.reagents.total_volume > 0)
+ O.reagents.clear_reagents()
+ user.visible_message( \
+ "\blue [user] pours the contents of \the [O] into \the [src].", \
+ "\blue You pour the contents of \the [O] into \the [src].")
+ else
+ user << "\The [O] is empty."
return
else if (istype(O, /obj/item/weapon/melee/baton))
var/obj/item/weapon/melee/baton/B = O
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index fac90da5131..454e0df9551 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 1c8d2d91397..8337882b31f 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/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm
index 9f7d5ec4180..4adbfcce936 100644
--- a/code/modules/chemical/Chemistry-Tools.dm
+++ b/code/modules/chemical/Chemistry-Tools.dm
@@ -132,17 +132,27 @@
playsound(src.loc, 'Crowbar.ogg', 50, 1)
user << "\blue You remove the remote signalling device."
src.state = 3
- new /obj/item/device/assembly/signaler( src.loc, 1 )
+ var/obj/item/device/assembly/signaler/S = locate() in src
+ if(S)
+ S.loc = src.loc
+ else
+ new /obj/item/device/assembly/signaler( src.loc, 1 )
if(isprox(W) && motion == 0)
// if(W:amount >= 1)
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
// W:use(1)
user << "\blue You attach the proximity sensor."
+ user.drop_item()
+ W.loc = src
motion = 1
if(istype(W, /obj/item/weapon/crowbar) && motion)
playsound(src.loc, 'Crowbar.ogg', 50, 1)
user << "\blue You remove the proximity sensor."
- new /obj/item/device/assembly/prox_sensor( src.loc, 1 )
+ var/obj/item/device/assembly/prox_sensor/S = locate() in src
+ if(S)
+ S.loc = src.loc
+ else
+ new /obj/item/device/assembly/prox_sensor( src.loc, 1 )
motion = 0
if(istype(W, /obj/item/stack/sheet/glass))
if(W:amount >= 1)
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 32556891113..947ada101d5 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -1,7 +1,4 @@
/mob/living/carbon/human/say(var/message)
- if(src.mutantrace == "lizard")
- if(copytext(message, 1, 2) != "*")
- message = dd_replaceText(message, "s", stutter("ss"))
if(src.mutantrace == "metroid" && prob(5))
if(copytext(message, 1, 2) != "*")
if(copytext(message, 1, 2) == ";")
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 64f207624f6..d864340eff7 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 4f51f45141f..0af50509919 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 = "