diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index 42ac1cdc97f..b5b6cf74233 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -43,7 +43,8 @@
var/Tickcomp = 0
var/socket_talk = 0 // use socket_talk to communicate with other processes
var/list/resource_urls = null
-
+ var/antag_hud_allowed = 0 // Ghosts can turn on Antagovision to see a HUD of who is the bad guys this round.
+ var/antag_hud_restricted = 0 // Ghosts that turn on Antagovision cannot rejoin the round.
var/list/mode_names = list()
var/list/modes = list() // allowed modes
var/list/votable_modes = list() // votable modes
@@ -61,6 +62,9 @@
var/automute_on = 0 //enables automuting/spam prevention
var/jobs_have_minimal_access = 0 //determines whether jobs use minimal access or expanded access.
+ var/disable_player_mice = 0
+ var/uneducated_mice = 0 //Set to 1 to prevent newly-spawned mice from understanding human speech
+
var/usealienwhitelist = 0
var/limitalienplayers = 0
var/alien_to_human_ratio = 0.5
@@ -385,6 +389,11 @@
if("ticklag")
Ticklag = text2num(value)
+ if("allow_antag_hud")
+ config.antag_hud_allowed = 1
+ if("antag_hud_restricted")
+ config.antag_hud_restricted = 1
+
if("socket_talk")
socket_talk = text2num(value)
@@ -419,6 +428,12 @@
if("ghost_interaction")
config.ghost_interaction = 1
+ if("disable_player_mice")
+ config.disable_player_mice = 1
+
+ if("uneducated_mice")
+ config.uneducated_mice = 1
+
if("comms_password")
config.comms_password = value
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index fb7262a5f9c..efc910b8649 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -293,6 +293,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set name = "Become mouse"
set category = "Ghost"
+ if(config.disable_player_mice)
+ src << "Spawning as a mouse is currently disabled."
+ return
+
var/timedifference = world.time - client.time_died_as_mouse
if(client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600)
var/timedifference_text
@@ -302,7 +306,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/response = alert(src, "Are you -sure- you want to become a mouse?","Are you sure you want to squeek?","Squeek!","Nope!")
if(response != "Squeek!") return //Hit the wrong key...again.
-
+
//find a viable mouse candidate
var/mob/living/simple_animal/mouse/host
@@ -318,6 +322,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
src << "Unable to find any unwelded vents to spawn mice at."
if(host)
+ if(config.uneducated_mice)
+ host.universal_understand = 0
host.ckey = src.ckey
host << "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent."
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index 503b8536054..491841ebada 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -27,6 +27,7 @@
minbodytemp = 223 //Below -50 Degrees Celcius
maxbodytemp = 323 //Above 50 Degrees Celcius
universal_speak = 0
+ universal_understand = 1
/mob/living/simple_animal/mouse/Life()
..()
@@ -50,6 +51,7 @@
/mob/living/simple_animal/mouse/New()
..()
+ name = "[name] ([rand(1, 1000)])"
if(!body_color)
body_color = pick( list("brown","gray","white") )
icon_state = "mouse_[body_color]"
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 5f7c707635f..00c3b448ce2 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -207,6 +207,7 @@
//Whether or not mobs can understand other mobtypes. These stay in /mob so that ghosts can hear everything.
var/universal_speak = 0 // Set to 1 to enable the mob to speak to everyone -- TLE
+ var/universal_understand = 0 // Set to 1 to enable the mob to understand everyone, not necessarily speak
var/robot_talk_understand = 0
var/alien_talk_understand = 0
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index f4a99e097fd..040c1615c50 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -66,7 +66,7 @@
if(!other)
return 1
//Universal speak makes everything understandable, for obvious reasons.
- else if(other.universal_speak || src.universal_speak)
+ else if(other.universal_speak || src.universal_speak || src.universal_understand)
return 1
else if (src.stat == 2)
return 1
@@ -83,11 +83,11 @@
else
return 0
- else if(other.universal_speak || src.universal_speak)
+ else if(other.universal_speak || src.universal_speak || src.universal_understand)
return 1
else if(isAI(src) && ispAI(other))
return 1
- else if (istype(other, src.type) || istype(src, other.type))
+ else if (istype(other, src.type) || istype(src, other.type))
return 1
return 0