diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 296b2e8e..d6977cb1 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -315,6 +315,7 @@ proc/tg_list2text(list/list, glue=",")
if(rights & R_SOUNDS) . += "[seperator]+SOUND"
if(rights & R_SPAWN) . += "[seperator]+SPAWN"
if(rights & R_MOD) . += "[seperator]+MODERATOR"
+ if(rights & R_DEV) . += "[seperator]+DEVELOPER"
return .
/proc/ui_style2icon(ui_style)
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index 95b871cf..13e91914 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -48,6 +48,8 @@ var/global/normal_ooc_colour = "#002eb8"
display_colour = "#184880" //dark blue
if(holder.rights & R_DEBUG && !(holder.rights & R_ADMIN))
display_colour = "#1b521f" //dark green
+ if(holder.rights & R_DEV && !(holder.rights & R_ADMIN))
+ display_colour = "#1b521f"
else if(holder.rights & R_ADMIN)
if(config.allow_admin_ooccolor)
display_colour = src.prefs.ooccolor
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index ca49e960..e509e093 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -41,7 +41,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
if("sound","sounds") rights |= R_SOUNDS
if("spawn","create") rights |= R_SPAWN
if("mod") rights |= R_MOD
-
+ if("developer") rights |= R_DEV
admin_ranks[rank] = rights
previous_rights = rights
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index c817a9bb..b43d32ec 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -103,6 +103,30 @@ var/list/admin_verbs_fun = list(
/client/proc/set_ooc,
/client/proc/editappear
)
+var/list/admin_verbs_dev = list(
+ /client/proc/giveruntimelog,
+ /client/proc/getruntimelog,
+ /client/proc/cmd_admin_list_open_jobs,
+ /client/proc/Debug2,
+ /client/proc/kill_air,
+ /client/proc/ZASSettings,
+ /client/proc/cmd_debug_make_powernets,
+ /client/proc/kill_airgroup,
+ /client/proc/debug_controller,
+ /client/proc/cmd_debug_mob_lists,
+ /client/proc/cmd_admin_delete,
+ /client/proc/cmd_debug_del_all,
+ /client/proc/cmd_debug_tog_aliens,
+ /client/proc/air_report,
+ /client/proc/reload_admins,
+ /client/proc/restart_controller,
+ /client/proc/enable_debug_verbs,
+ /client/proc/callproc,
+ /client/proc/toggledebuglogs,
+ /client/proc/SDQL_query,
+ /client/proc/SDQL2_query,
+ /client/proc/cmd_dev_say
+)
var/list/admin_verbs_spawn = list(
/datum/admins/proc/spawn_atom, /*allows us to spawn instances*/
/client/proc/respawn_character
@@ -262,6 +286,7 @@ var/list/admin_verbs_mod = list(
if(holder.rights & R_SOUNDS) verbs += admin_verbs_sounds
if(holder.rights & R_SPAWN) verbs += admin_verbs_spawn
if(holder.rights & R_MOD) verbs += admin_verbs_mod
+ if(holder.rights & R_DEV) verbs += admin_verbs_dev
/client/proc/remove_admin_verbs()
verbs.Remove(
diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm
index 8b7c1071..841297b5 100644
--- a/code/modules/admin/verbs/adminsay.dm
+++ b/code/modules/admin/verbs/adminsay.dm
@@ -35,3 +35,21 @@
for(var/client/C in admins)
if((R_ADMIN|R_MOD) & C.holder.rights)
C << "MOD: [key_name(src,1)] (JMP): [msg]"
+
+/client/proc/cmd_dev_say(msg as text)
+ set category = "Developer"
+ set name = "Desay"
+ set hidden = 1
+
+ if(!check_rights(R_DEV)) return
+
+ msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
+ if(!msg) return
+
+ log_admin("[key_name(src)] : [msg]")
+
+ if(check_rights(R_DEV,0))
+ msg = "DEV: [key_name(usr, 1)]: [msg]"
+ for(var/client/C in admins)
+ if(R_DEV & C.holder.rights)
+ C << msg
diff --git a/code/setup.dm b/code/setup.dm
index d74845db..e5b9dc35 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -620,8 +620,9 @@ var/list/TAGGERLOCATIONS = list("Disposals",
#define R_SOUNDS 2048
#define R_SPAWN 4096
#define R_MOD 8192
+#define R_DEV 16348
-#define R_MAXPERMISSION 8192 //This holds the maximum value for a permission. It is used in iteration, so keep it updated.
+#define R_MAXPERMISSION 16348 //This holds the maximum value for a permission. It is used in iteration, so keep it updated.
#define R_HOST 65535