diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm
index 7e146a8fc4e..26fb60335c8 100644
--- a/code/_onclick/hud/_defines.dm
+++ b/code/_onclick/hud/_defines.dm
@@ -55,6 +55,8 @@
#define ui_alien_storage_l "CENTER-2:14,SOUTH:5"//alien
#define ui_alien_storage_r "CENTER+1:18,SOUTH:5"//alien
+#define ui_alien_language_menu "EAST-3:25,SOUTH+1:7"//alien
+#define ui_alienlarva_language_menu "EAST-3:26,SOUTH:5"//alien
//Lower right, persistant menu
//#define ui_dropbutton "11:22,1:5"
@@ -66,10 +68,12 @@
#define ui_acti_alt "EAST-1:28,SOUTH:5" //alternative intent switcher for when the interface is hidden (F12)
#define ui_crafting "EAST:-5,SOUTH+2:7"
+#define ui_language_menu "EAST:-22,SOUTH+2:7"
#define ui_borg_pull "EAST-2:26,SOUTH+1:7"
#define ui_borg_radio "EAST-1:28,SOUTH+1:7"
#define ui_borg_intents "EAST-2:26,SOUTH:5"
+#define ui_borg_lanugage_menu "EAST-2:26,SOUTH+1:7"
//Upper-middle right (alerts)
#define ui_alert1 "EAST-1:28,CENTER+5:27"
diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm
index 0a3ca11f315..c8864f36d8a 100644
--- a/code/_onclick/hud/ai.dm
+++ b/code/_onclick/hud/ai.dm
@@ -150,6 +150,10 @@
var/obj/screen/using
+ using = new /obj/screen/language_menu
+ using.screen_loc = ui_borg_lanugage_menu
+ static_inventory += using
+
//AI core
using = new /obj/screen/ai/aicore()
using.screen_loc = ui_ai_core
diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm
index 70d121a190b..79d109c0c57 100644
--- a/code/_onclick/hud/alien.dm
+++ b/code/_onclick/hud/alien.dm
@@ -36,6 +36,10 @@
var/obj/screen/using
var/obj/screen/inventory/inv_box
+ using = new /obj/screen/language_menu
+ using.screen_loc = ui_alien_language_menu
+ static_inventory += using
+
using = new /obj/screen/act_intent/alien()
using.icon_state = (mymob.a_intent == "hurt" ? "harm" : mymob.a_intent)
using.screen_loc = ui_acti
diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm
index 6ab416259e7..c4f453077ef 100644
--- a/code/_onclick/hud/alien_larva.dm
+++ b/code/_onclick/hud/alien_larva.dm
@@ -30,6 +30,10 @@
mymob.pullin.screen_loc = ui_pull_resist
hotkeybuttons += mymob.pullin
+ using = new /obj/screen/language_menu
+ using.screen_loc = ui_alienlarva_language_menu
+ static_inventory += using
+
mymob.zone_sel = new /obj/screen/zone_sel/alien()
mymob.zone_sel.update_icon(mymob)
static_inventory += mymob.zone_sel
\ No newline at end of file
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 3f5ea2dcb94..d543ce9c416 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -60,7 +60,13 @@
var/obj/screen/using
var/obj/screen/inventory/inv_box
- using = new /obj/screen/inventory/craft
+ using = new /obj/screen/craft
+ using.icon = ui_style
+ using.color = ui_color
+ using.alpha = ui_alpha
+ static_inventory += using
+
+ using = new /obj/screen/language_menu
using.icon = ui_style
using.color = ui_color
using.alpha = ui_alpha
diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm
index 6c69063e0b8..e5d1e15512a 100644
--- a/code/_onclick/hud/monkey.dm
+++ b/code/_onclick/hud/monkey.dm
@@ -24,6 +24,12 @@
static_inventory += using
move_intent = using
+ using = new /obj/screen/language_menu
+ using.icon = ui_style
+ using.color = ui_color
+ using.alpha = ui_alpha
+ static_inventory += using
+
using = new /obj/screen/drop()
using.icon = ui_style
using.screen_loc = ui_drop_throw
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index b95bacd06e2..b735d05c3da 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -97,6 +97,11 @@
var/obj/screen/using
var/mob/living/silicon/robot/mymobR = mymob
+//Language menu
+ using = new /obj/screen/language_menu
+ using.screen_loc = ui_borg_lanugage_menu
+ static_inventory += using
+
//Radio
using = new /obj/screen/robot/radio()
using.screen_loc = ui_borg_radio
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 6fe0e4a8532..cf0247e847a 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -346,16 +346,28 @@
/obj/screen/zone_sel/robot
icon = 'icons/mob/screen_robot.dmi'
-/obj/screen/inventory/craft
+/obj/screen/craft
name = "crafting menu"
icon = 'icons/mob/screen_midnight.dmi'
icon_state = "craft"
screen_loc = ui_crafting
-/obj/screen/inventory/craft/Click()
+/obj/screen/craft/Click()
var/mob/living/M = usr
M.OpenCraftingMenu()
+/obj/screen/language_menu
+ name = "language menu"
+ icon = 'icons/mob/screen_midnight.dmi'
+ icon_state = "talk_wheel"
+ screen_loc = ui_language_menu
+
+/obj/screen/language_menu/Click()
+ var/mob/M = usr
+ if(!istype(M))
+ return
+ M.check_languages()
+
/obj/screen/inventory
var/slot_id //The indentifier for the slot. It has nothing to do with ID cards.
layer = 19
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index 61bd133efef..4b43c8cbeaa 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -618,34 +618,34 @@
return (universal_speak || (speaking && speaking.flags & INNATE) || speaking in languages)
//TBD
+/mob/proc/check_lang_data()
+ . = ""
+
+ for(var/datum/language/L in languages)
+ if(!(L.flags & NONGLOBAL))
+ . += "[L.name] (:[L.key])
[L.desc]
"
+
+/mob/living/check_lang_data()
+ . = ""
+
+ if(default_language)
+ . += "Current default language: [default_language] - reset
"
+
+ for(var/datum/language/L in languages)
+ if(!(L.flags & NONGLOBAL))
+ if(L == default_language)
+ . += "[L.name] (:[L.key]) - default - reset
[L.desc]
"
+ else
+ . += "[L.name] (:[L.key]) - set default
[L.desc]
"
+
/mob/verb/check_languages()
set name = "Check Known Languages"
set category = "IC"
set src = usr
- var/dat = "Known Languages
"
-
- for(var/datum/language/L in languages)
- if(!(L.flags & NONGLOBAL))
- dat += "[L.name] (:[L.key])
[L.desc]
"
-
- src << browse(dat, "window=checklanguage")
- return
-
-/mob/living/check_languages()
- var/dat = "Known Languages
"
-
- if(default_language)
- dat += "Current default language: [default_language] - reset
"
-
- for(var/datum/language/L in languages)
- if(!(L.flags & NONGLOBAL))
- if(L == default_language)
- dat += "[L.name] (:[L.key]) - default - reset
[L.desc]
"
- else
- dat += "[L.name] (:[L.key]) - set default
[L.desc]
"
-
- src << browse(dat, "window=checklanguage")
+ var/datum/browser/popup = new(src, "checklanguage", "Known Languages", 420, 470)
+ popup.set_content(check_lang_data())
+ popup.open()
/mob/living/Topic(href, href_list)
if(href_list["default_lang"])
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index f9849e9b6cc..d7435fdff5a 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -167,15 +167,11 @@
if(L.name == rem_language)
speech_synthesizer_langs -= L
-/mob/living/silicon/check_languages()
- set name = "Check Known Languages"
- set category = "IC"
- set src = usr
-
- var/dat = "Known Languages
"
+/mob/living/silicon/check_lang_data()
+ . = ""
if(default_language)
- dat += "Current default language: [default_language] - reset
"
+ . += "Current default language: [default_language] - reset
"
for(var/datum/language/L in languages)
if(!(L.flags & NONGLOBAL))
@@ -186,10 +182,8 @@
default_str = " - set default"
var/synth = (L in speech_synthesizer_langs)
- dat += "[L.name] (:[L.key])[synth ? default_str : null]
Speech Synthesizer: [synth ? "YES" : "NOT SUPPORTED"]
[L.desc]
"
+ . += "[L.name] (:[L.key])[synth ? default_str : null]
Speech Synthesizer: [synth ? "YES" : "NOT SUPPORTED"]
[L.desc]
"
- src << browse(dat, "window=checklanguage")
- return
// this function displays the stations manifest in a separate window
/mob/living/silicon/proc/show_station_manifest()
diff --git a/icons/mob/screen_midnight.dmi b/icons/mob/screen_midnight.dmi
index 2dab86ef7f9..a5f9caa6a90 100644
Binary files a/icons/mob/screen_midnight.dmi and b/icons/mob/screen_midnight.dmi differ
diff --git a/icons/mob/screen_operative.dmi b/icons/mob/screen_operative.dmi
index 8d90aa7c3b3..0bb1a0b9d44 100644
Binary files a/icons/mob/screen_operative.dmi and b/icons/mob/screen_operative.dmi differ
diff --git a/icons/mob/screen_plasmafire.dmi b/icons/mob/screen_plasmafire.dmi
index cca826d272c..81453caddef 100644
Binary files a/icons/mob/screen_plasmafire.dmi and b/icons/mob/screen_plasmafire.dmi differ
diff --git a/icons/mob/screen_retro.dmi b/icons/mob/screen_retro.dmi
index 77aefd6a16b..1568e701222 100644
Binary files a/icons/mob/screen_retro.dmi and b/icons/mob/screen_retro.dmi differ
diff --git a/icons/mob/screen_slimecore.dmi b/icons/mob/screen_slimecore.dmi
index 3af866db6bd..3b2392cb8fc 100644
Binary files a/icons/mob/screen_slimecore.dmi and b/icons/mob/screen_slimecore.dmi differ
diff --git a/icons/mob/screen_white.dmi b/icons/mob/screen_white.dmi
index 8288217dcd0..361611cf4e0 100644
Binary files a/icons/mob/screen_white.dmi and b/icons/mob/screen_white.dmi differ