diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index 46ac27bad0c..116136bfafb 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -70,7 +70,7 @@
.manifest td:first-child {text-align:right}
.manifest tr.alt td {[monochrome?"border-top-width: 2px":"background-color: #DEF"]}
-
+
| Name | Rank | Activity |
"}
var/even = 0
@@ -94,28 +94,31 @@
//world << "[name]: [rank]"
+ //cael - to prevent multiple appearances of a player/job combination, add a continue after each line
+ var/department = 0
if(real_rank in command_positions)
heads[name] = rank
+ department = 1
if(real_rank in security_positions)
sec[name] = rank
- continue
+ department = 1
if(real_rank in engineering_positions)
eng[name] = rank
- continue
+ department = 1
if(real_rank in medical_positions)
med[name] = rank
- continue
+ department = 1
if(real_rank in science_positions)
sci[name] = rank
- continue
+ department = 1
if(real_rank in civilian_positions)
civ[name] = rank
- continue
+ department = 1
if(real_rank in nonhuman_positions)
bot[name] = rank
- continue
+ department = 1
- if(!(name in heads))
+ if(!department && !(name in heads))
misc[name] = rank
if(heads.len > 0)
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index b71453292fd..7ebb958112a 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -74,7 +74,7 @@
selection_color = "#ffeeff"
access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research) //As a job that handles so many corpses, it makes sense for them to have morgue access.
- alt_titles = list("Biomedical Engineer","Mechatronic Engineer")
+ alt_titles = list("Biomechanical Engineer","Mechatronic Engineer")
equip(var/mob/living/carbon/human/H)
if(!H) return 0
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index a32e9ea1343..5e9b8256e54 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -51,14 +51,24 @@
if (!( ticker ))
return
if (mode) // accessing crew manifest
- var/crew = ""
+
+ dat += "Crew Manifest
"
+ dat += "Entries cannot be modified from this terminal.
"
+ if(data_core)
+ dat += data_core.get_manifest(0) // make it monochrome
+ dat += "
"
+ dat += "Print
"
+ dat += "
"
+ dat += "Access ID modification console.
"
+
+ /*var/crew = ""
var/list/L = list()
for (var/datum/data/record/t in data_core.general)
var/R = t.fields["name"] + " - " + t.fields["rank"]
L += R
for(var/R in sortList(L))
- crew += "[R]
"
- dat = "Crew Manifest:
Please use security record computer to modify entries.
[crew]Print
Access ID modification console.
"
+ crew += "[R]
"*/
+ //dat = "Crew Manifest:
Please use security record computer to modify entries.
[crew]Print
Access ID modification console.
"
else
var/header = "Identification Card Modifier
"
@@ -267,13 +277,19 @@
printing = 1
sleep(50)
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
- var/t1 = "Crew Manifest:
"
+ /*var/t1 = "Crew Manifest:
"
var/list/L = list()
for (var/datum/data/record/t in data_core.general)
var/R = t.fields["name"] + " - " + t.fields["rank"]
L += R
for(var/R in sortList(L))
- t1 += "[R]
"
+ t1 += "[R]
"*/
+
+ var/t1 = "Crew Manifest
"
+ t1 += "
"
+ if(data_core)
+ t1 += data_core.get_manifest(0) // make it monochrome
+
P.info = t1
P.name = "paper- 'Crew Manifest'"
printing = null
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index 3080f4d1bb6..2a56a4f3def 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -74,7 +74,7 @@
var/recieve_color = "purple"
var/send_pm_type = ""
var/recieve_pm_type = "Player"
- //usr.client.holder.rights
+
if(holder)
//mod PMs are maroon
@@ -91,17 +91,17 @@
src << "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden."
return
- var/recieve_message = "[recieve_pm_type] PM from-[key_name(src, C, 1)]: [msg]"
+ var/recieve_message = ""
if(holder && !C.holder)
- recieve_message = "-- Administrator private message --\n" + recieve_message
+ recieve_message = "-- Administrator private message --\n"
//AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn
if(config.popup_admin_pm)
spawn(0) //so we don't hold the caller proc up
var/sender = src
var/sendername = key
- var/reply = input(C, msg,"Admin PM from-[sendername]", "") as text|null //show message and await a reply
+ var/reply = input(C, msg,"[recieve_pm_type] PM from-[sendername]", "") as text|null //show message and await a reply
if(C && reply)
if(sender)
C.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them
@@ -109,8 +109,9 @@
adminhelp(reply) //sender has left, adminhelp instead
return
+ recieve_message = "[recieve_pm_type] PM from-[key_name(src, C, C.holder ? 1 : 0)]: [msg]"
C << recieve_message
- src << "[send_pm_type] PM to-[key_name(C, src, 1)]: [msg]"
+ src << "[send_pm_type] PM to-[key_name(C, src, holder ? 1 : 0)]: [msg]"
/*if(holder && !C.holder)
C.last_pm_recieved = world.time
@@ -177,6 +178,7 @@
//we don't use message_admins here because the sender/receiver might get it too
for(var/client/X in admins)
//check client/X is an admin and isn't the sender or recipient
- //only admins can see PMs
+ if(X == C || X == src)
+ continue
if(X.key!=key && X.key!=C.key && (X.holder.rights & R_ADMIN) || (X.holder.rights & R_MOD) )
X << "PM: [key_name(src, X, 0)]->[key_name(C, X, 0)]: \blue [msg]" //inform X
diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm
index 513f83ea5ed..04dc7d46a17 100644
--- a/code/modules/events/infestation.dm
+++ b/code/modules/events/infestation.dm
@@ -94,7 +94,7 @@
var/spawn_type = pick(spawn_types)
new spawn_type(T)
num--
- world << "[vermstring] spawned in [spawn_area_type]"
+ //world << "[vermstring] spawned in [spawn_area_type]"
/datum/event/infestation/announce()
command_alert("Bioscans indicate that [vermstring] have been breeding in [locstring]. Clear them out, before this starts to affect productivity.", "Vermin infestation")
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 3dbe68a53fe..8b238f6ee91 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1260,10 +1260,9 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
if("lizard","slime")
see_in_dark = 3
see_invisible = SEE_INVISIBLE_LEVEL_ONE
- if("tajaran")
- see_in_dark = 4
- if("shadow")
+ if("shadow","tajaran")
see_in_dark = 8
+ see_invisible = SEE_INVISIBLE_LEVEL_ONE
else
see_in_dark = 2
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 1b5e8e5e3f4..425c730ba85 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -15,6 +15,9 @@ var/list/department_radio_keys = list(
":t" = "Syndicate", "#t" = "Syndicate", ".t" = "Syndicate",
":u" = "Supply", "#u" = "Supply", ".u" = "Supply",
":g" = "changeling", "#g" = "changeling", ".g" = "changeling",
+ ":k" = "skrell", "#k" = "skrell", ".k" = "skrell",
+ ":j" = "tajaran", "#j" = "tajaran", ".j" = "tajaran",
+ ":o" = "soghun", "#o" = "soghun", ".o" = "soghun",
":R" = "right hand", "#R" = "right hand", ".R" = "right hand",
":L" = "left hand", "#L" = "left hand", ".L" = "left hand",
@@ -31,6 +34,9 @@ var/list/department_radio_keys = list(
":T" = "Syndicate", "#T" = "Syndicate", ".T" = "Syndicate",
":U" = "Supply", "#U" = "Supply", ".U" = "Supply",
":G" = "changeling", "#G" = "changeling", ".G" = "changeling",
+ ":K" = "skrell", "#K" = "skrell", ".K" = "skrell",
+ ":J" = "tajaran", "#J" = "tajaran", ".J" = "tajaran",
+ ":O" = "soghun", "#O" = "soghun", ".O" = "soghun",
//kinda localization -- rastaf0
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
@@ -139,27 +145,6 @@ var/list/department_radio_keys = list(
if (!message)
return
- //work out if we're speaking skrell or not
- var/is_speaking_skrell = 0
- if(copytext(message, 1, 3) == ":k" || copytext(message, 1, 3) == ":K")
- message = copytext(message, 3)
- if(skrell_talk_understand || universal_speak)
- is_speaking_skrell = 1
-
- //work out if we're speaking soghun or not
- var/is_speaking_soghun = 0
- if(copytext(message, 1, 3) == ":o" || copytext(message, 1, 3) == ":O")
- message = copytext(message, 3)
- if(soghun_talk_understand || universal_speak)
- is_speaking_soghun = 1
-
- //work out if we're speaking soghun or not
- var/is_speaking_taj = 0
- if(copytext(message, 1, 3) == ":j" || copytext(message, 1, 3) == ":J")
- message = copytext(message, 3)
- if(tajaran_talk_understand || universal_speak)
- is_speaking_taj = 1
-
// :downs:
if (getBrainLoss() >= 60)
message = replacetext(message, " am ", " ")
@@ -191,6 +176,10 @@ var/list/department_radio_keys = list(
*/
var/list/obj/item/used_radios = new
+ var/is_speaking_skrell = 0
+ var/is_speaking_soghun = 0
+ var/is_speaking_taj = 0
+
switch (message_mode)
if ("headset")
if (src:ears)
@@ -269,6 +258,18 @@ var/list/department_radio_keys = list(
message_range = 1
italics = 1
+ if ("tajaran")
+ if(tajaran_talk_understand || universal_speak)
+ is_speaking_taj = 1
+
+ if ("soghun")
+ if(soghun_talk_understand || universal_speak)
+ is_speaking_soghun = 1
+
+ if ("skrell")
+ if(skrell_talk_understand || universal_speak)
+ is_speaking_skrell = 1
+
if("changeling")
if(mind && mind.changeling)
for(var/mob/Changeling in mob_list)