diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index d11f13827e4..e9d77ca626c 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -80,6 +80,9 @@
var/banappeals
var/wikiurl = "http://example.org"
var/forumurl = "http://example.org"
+ var/rulesurl = "http://example.org"
+ var/donationsurl = "http://example.org"
+ var/repositoryurl = "http://example.org"
var/media_base_url = "http://example.org"
var/overflow_server_url
@@ -338,6 +341,15 @@
if ("forumurl")
config.forumurl = value
+
+ if ("rulesurl")
+ config.rulesurl = value
+
+ if ("donationsurl")
+ config.donationsurl = value
+
+ if ("repositoryurl")
+ config.repositoryurl = value
if ("guest_jobban")
config.guest_jobban = 1
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 4ec840223aa..7703a19b21e 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -519,21 +519,16 @@ var/global/nologevent = 0
if(!check_rights(R_SERVER))
return
- var/confirm = alert("Restart the game world?", "Restart", "Yes", "Cancel")
- if(confirm == "Cancel")
- return
- if(confirm == "Yes")
- var/delay = input("What delay should the restart have (in seconds)?", "Restart Delay", 5) as num
- if(isnull(delay))
- delay = 50
- else
- delay = delay * 10
- message_admins("[key_name_admin(usr)] has initiated a server restart with a delay of [delay/10] seconds")
- log_admin("[key_name(usr)] has initiated a server restart with a delay of [delay/10] seconds")
- ticker.delay_end = 0
- feedback_add_details("admin_verb","R") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", delay)
-
+ var/delay = input("What delay should the restart have (in seconds)?", "Restart Delay", 5) as num|null
+ if(isnull(delay))
+ delay = 50
+ else
+ delay = delay * 10
+ message_admins("[key_name_admin(usr)] has initiated a server restart with a delay of [delay/10] seconds")
+ log_admin("[key_name(usr)] has initiated a server restart with a delay of [delay/10] seconds")
+ ticker.delay_end = 0
+ feedback_add_details("admin_verb","R") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", delay)
/datum/admins/proc/announce()
set category = "Special Verbs"
diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm
index cbfa50f0759..da4c7e33572 100644
--- a/code/modules/client/client defines.dm
+++ b/code/modules/client/client defines.dm
@@ -60,7 +60,7 @@
//adv. hotkey mode vars, code using them in /interface/interface.dm//
/////////////////////////////////////////////////////////////////////
- var/hotkeytype = "QWERTY" //what set of hotkeys is in use(defaulting to QWERTY because I can't be bothered to ake this save on SQL)
+ var/hotkeytype = "QWERTY" //what set of hotkeys is in use(defaulting to QWERTY because I can't be bothered to make this save on SQL)
var/hotkeyon = 0 //is the hotkey on?
var/hotkeylist = list( //list defining hotkey types, look at lists in place for structure if adding any if the future
@@ -69,7 +69,10 @@
"off" = "macro"),
"AZERTY" = list(
"on" = "AZERTYon",
- "off" = "AZERTYoff")
+ "off" = "AZERTYoff"),
+ "Cyborg" = list(
+ "on" = "borghotkeymode",
+ "off" = "borgmacro")
)
var/reset_stretch = 0 //Used by things that fiddle with client's stretch-to-fit.
\ No newline at end of file
diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm
index 7cdbe6ebd50..18025f89b1e 100644
--- a/code/modules/mob/camera/camera.dm
+++ b/code/modules/mob/camera/camera.dm
@@ -17,3 +17,7 @@
/mob/camera/Destroy()
..()
return QDEL_HINT_HARDDEL_NOW
+
+/mob/camera/Login()
+ ..()
+ update_interface()
diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm
index e5041e959c1..f6fcac54798 100644
--- a/code/modules/mob/dead/observer/login.dm
+++ b/code/modules/mob/dead/observer/login.dm
@@ -2,4 +2,6 @@
..()
if (ghostimage)
ghostimage.icon_state = src.icon_state
- updateghostimages()
\ No newline at end of file
+ updateghostimages()
+
+ update_interface()
\ No newline at end of file
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index d4fbd5c1ec0..f7690611e53 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -12,6 +12,8 @@
src << "You can ventcrawl! Use alt+click on vents to quickly travel about the station."
//Should update regardless of if we can ventcrawl, since we can end up in pipes in other ways.
update_pipe_vision()
+
+ update_interface()
//Round specific stuff like hud updates
if(ticker && ticker.mode)
diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm
index 84b31b16766..166680757ba 100644
--- a/code/modules/mob/living/silicon/robot/login.dm
+++ b/code/modules/mob/living/silicon/robot/login.dm
@@ -6,4 +6,14 @@
if(mind) ticker.mode.remove_revolutionary(mind)
if(mind) ticker.mode.remove_thrall(mind,0)
if(mind) ticker.mode.remove_shadowling(mind)
- return
\ No newline at end of file
+ return
+
+/mob/living/silicon/robot/update_hotkey_mode()
+ client.hotkeytype = "Cyborg"
+ client.hotkeyon = 1
+ winset(src, null, "mainwindow.macro=borghotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#F0F0F0")
+
+/mob/living/silicon/robot/update_normal_mode()
+ client.hotkeytype = "Cyborg"
+ client.hotkeyon = 0
+ winset(src, null, "mainwindow.macro=borgmacro hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5")
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 99c3e2b2c08..3a8812a011b 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -377,6 +377,17 @@ var/list/robot_verbs_default = list(
updatename()
update_icons()
+//for borg hotkeys, here module refers to borg inv slot, not core module
+/mob/living/silicon/robot/verb/cmd_toggle_module(module as num)
+ set name = "Toggle Module"
+ set hidden = 1
+ toggle_module(module)
+
+/mob/living/silicon/robot/verb/cmd_unequip_module()
+ set name = "Unequip Module"
+ set hidden = 1
+ uneq_active()
+
// this verb lets cyborgs see the stations manifest
/mob/living/silicon/robot/verb/cmd_station_manifest()
set category = "Robot Commands"
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index e72157aedfb..3d05fb5a815 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -60,3 +60,24 @@
client.verbs |= H.species.abilities
CallHook("Login", list("client" = src.client, "mob" = src))
+
+// Calling update_interface() in /mob/Login() causes the Cyborg to immediately be ghosted; because of winget().
+// Calling it in the overriden Login, such as /mob/living/Login() doesn't cause this.
+/mob/proc/update_interface()
+ if(client)
+ if(winget(src, "mainwindow.hotkey_toggle", "is-checked") == "true")
+ update_hotkey_mode()
+ else
+ update_normal_mode()
+
+/mob/proc/update_hotkey_mode()
+ var/hotkeys = client.hotkeylist[client.hotkeytype]
+ var/hotkeyname = hotkeys[client.hotkeyon ? "on" : "off"]
+ client.hotkeyon = 1
+ winset(src, null, "mainwindow.macro=[hotkeyname] hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#F0F0F0")
+
+/mob/proc/update_normal_mode()
+ var/hotkeys = client.hotkeylist[client.hotkeytype]//get the list containing the hotkey names
+ var/hotkeyname = hotkeys[client.hotkeyon ? "on" : "off"]//get the name of the hotkey, to not clutter winset() to much
+ client.hotkeyon = 0
+ winset(src, null, "mainwindow.macro=[hotkeyname] hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5")
diff --git a/config/example/config.txt b/config/example/config.txt
index a3260d4a04d..33dd8659aae 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -165,7 +165,16 @@ GUEST_BAN
## Wiki address
# WIKIURL http://example.org
-## Ban appeals URL - usually for a forum or wherever people should go to contact your admins.
+## Rules address
+# RULESURL http://example.org
+
+## Donations address
+# DONATIONSURL http://example.org
+
+## Repository address
+# REPOSITORYURL http://example.org
+
+## Ban appeals URL - usually for a forum or wherever people should go to contact your admins
# BANAPPEALS http://example.org
## Media base URL - determines where to pull the jukebox playlist from.
diff --git a/interface/interface.dm b/interface/interface.dm
index 0ec03ffc198..a87302382c7 100644
--- a/interface/interface.dm
+++ b/interface/interface.dm
@@ -13,116 +13,184 @@
src << "The wiki URL is not set in the server configuration."
return
-#define CHANGELOG "https://github.com/ParadiseSS13/Paradise/pulls?q=is%3Apr+is%3Amerged+sort%3Aupdated-desc"
/client/verb/changes()
set name = "Changelog"
- set desc = "Visit Github to check out the commits."
+ set desc = "Visit our repository to check out the changes."
set hidden = 1
-
- if(alert("This will open the changelog in your browser. Are you sure?",,"Yes","No")=="No")
- return
- src << link(CHANGELOG)
+
+ if(config.repositoryurl)
+ if(alert("This will open the changelog in your browser. Are you sure?",,"Yes","No")=="No")
+ return
+ src << link("[config.repositoryurl]/pulls?q=is%3Apr+is%3Aclosed")
+ else
+ src << "The Repository URL is not set in the server configuration."
return
-#undef CHANGELOG
/client/verb/forum()
set name = "forum"
set desc = "Visit the forum."
set hidden = 1
- if( config.forumurl )
+ if(config.forumurl)
if(alert("This will open the forum in your browser. Are you sure?",,"Yes","No")=="No")
return
src << link(config.forumurl)
else
- src << "\red The forum URL is not set in the server configuration."
+ src << "The forum URL is not set in the server configuration."
return
-#define RULES_FILE "config/rules.html"
/client/verb/rules()
set name = "Rules"
- set desc = "Show Server Rules."
+ set desc = "View the server rules."
set hidden = 1
- src << browse(file(RULES_FILE), "window=rules;size=480x320")
-#undef RULES_FILE
+ if(config.rulesurl)
+ if(alert("This will open the rules in your browser. Are you sure?",,"Yes","No")=="No")
+ return
+ src << link(config.rulesurl)
+ else
+ src << "The rules URL is not set in the server configuration."
+ return
-#define DONATE "http://nanotrasen.se/phpBB3/donate.php"
/client/verb/donate()
set name = "Donate"
- set desc = "Donate to help with development costs."
+ set desc = "Donate to help with hosting costs."
set hidden = 1
-
- if(alert("This will open the donation page in your browser. Are you sure?",,"Yes","No")=="No")
- return
- src << link(DONATE)
+ if(config.donationsurl)
+ if(alert("This will open the donation page in your browser. Are you sure?",,"Yes","No")=="No")
+ return
+ src << link(config.donationsurl)
+ else
+ src << "The rules URL is not set in the server configuration."
return
-#undef DONATE
/client/verb/hotkeys_help()
- set name = "Hotkeys Help"
+ set name = "Hotkey Help"
set category = "OOC"
+ var/adminhotkeys = {"
+Admin:
+\tF5 = Asay
+\tF6 = Admin Ghost
+\tF7 = Player Panel
+\tF8 = Admin PM
+\tF9 = Invisimin
+"}
+
+ mob.hotkey_help()
+
+ if(check_rights(0,0))
+ src << adminhotkeys
+
+/mob/proc/hotkey_help()
var/hotkey_mode = {"
Hotkey-Mode: (hotkey-mode must be on)
-\tTAB = toggle hotkey-mode
-\ta = left
-\ts = down
-\td = right
-\tw = up
-\tq = drop item / deselect cyborg module
-\te = equip
-\tr = toggle throw / unequip cyborg module
-\tt = say
-\tx = swap-hand
-\tz = activate held object (or y)
-\tf = cycle-intents-left
-\tg = cycle-intents-right
-\t1 = help-intent
-\t2 = disarm-intent
-\t3 = grab-intent
-\t4 = harm-intent
+\tTAB = Toggle Hotkey Mode
+\ta = Move Left
+\ts = Move Down
+\td = Move Right
+\tw = Move Up
+\tq = Drop Item
+\te = Equip Item
+\tr = Throw Item
+\tm = Me
+\tt = Say
+\to = OOC
+\tb = Resist
+\tx = Swap Hands
+\tz = Activate Held Object (or y)
+\tf = Cycle Intents Left
+\tg = Cycle Intents Right
+\t1 = Help Intent
+\t2 = Disarm Intent
+\t3 = Grab Intent
+\t4 = Harm Intent
"}
var/other = {"
Any-Mode: (hotkey doesn't need to be on)
-\tCtrl+a = left
-\tCtrl+s = down
-\tCtrl+d = right
-\tCtrl+w = up
-\tCtrl+q = drop item / deselect cyborg module
-\tCtrl+e = equip
-\tCtrl+r = toggle throw / unequip cyborg module
-\tCtrl+x = swap-hand
-\tCtrl+z = activate held object (or Ctrl+y)
-\tCtrl+f = cycle-intents-left
-\tCtrl+g = cycle-intents-right
-\tCtrl+1 = help-intent
-\tCtrl+2 = disarm-intent
-\tCtrl+3 = grab-intent
-\tCtrl+4 = harm-intent
-\tDEL = pull
-\tINS = cycle-intents-right
-\tHOME = drop item / deselect cyborg module
-\tPGUP = swap-hand
-\tPGDN = activate held object
-\tEND = toggle throw / unequip cyborg module
-"}
-
- var/admin = {"
-Admin:
-\tF5 = Aghost (admin-ghost)
-\tF6 = player-panel-new
-\tF7 = admin-pm
-\tF8 = Invisimin
+\tCtrl+a = Move Left
+\tCtrl+s = Move Down
+\tCtrl+d = Move Right
+\tCtrl+w = Move Up
+\tCtrl+q = Drop Item
+\tCtrl+e = Equip Item
+\tCtrl+r = Throw Item
+\tCtrl+b = Resist
+\tCtrl+o = OOC
+\tCtrl+x = Swap Hands
+\tCtrl+z = Activate Held Object (or Ctrl+y)
+\tCtrl+f = Cycle Intents Left
+\tCtrl+g = Cycle Intents Right
+\tCtrl+1 = Help Intent
+\tCtrl+2 = Disarm Intent
+\tCtrl+3 = Grab Intent
+\tCtrl+4 = Harm Intent
+\tDEL = Pull
+\tINS = Cycle Intents Right
+\tHOME = Drop Item
+\tPGUP = Swap Hands
+\tPGDN = Activate Held Object
+\tEND = Throw Item
+\tF2 = OOC
+\tF3 = Say
+\tF4 = Me
"}
src << hotkey_mode
src << other
- if(holder)
- src << admin
+/mob/living/silicon/robot/hotkey_help()
+ var/hotkey_mode = {"
+Hotkey-Mode: (hotkey-mode must be on)
+\tTAB = Toggle Hotkey Mode
+\ta = Move Left
+\ts = Move Down
+\td = Move Right
+\tw = Move Up
+\tq = Unequip Active Module
+\tm = Me
+\tt = Say
+\to = OOC
+\tx = Cycle Active Modules
+\tb = Resist
+\tz = Activate Held Object (or y)
+\tf = Cycle Intents Left
+\tg = Cycle Intents Right
+\t1 = Activate Module 1
+\t2 = Activate Module 2
+\t3 = Activate Module 3
+\t4 = Toggle Intents
+"}
+
+ var/other = {"
+Any-Mode: (hotkey doesn't need to be on)
+\tCtrl+a = Move Left
+\tCtrl+s = Move Down
+\tCtrl+d = Move Right
+\tCtrl+w = Move Up
+\tCtrl+q = Unequip Active Module
+\tCtrl+x = Cycle Active Modules
+\tCtrl+b = Resist
+\tCtrl+o = OOC
+\tCtrl+z = Activate Held Object (or Ctrl+y)
+\tCtrl+f = Cycle Intents Left
+\tCtrl+g = Cycle Intents Right
+\tCtrl+1 = Activate Module 1
+\tCtrl+2 = Activate Module 2
+\tCtrl+3 = Activate Module 3
+\tCtrl+4 = Toggle Intents
+\tDEL = Pull
+\tINS = Toggle Intents
+\tPGUP = Cycle Active Modules
+\tPGDN = Activate Held Object
+\tF2 = OOC
+\tF3 = Say
+\tF4 = Me
+"}
+
+ src << hotkey_mode
+ src << other
//adv. hotkey mode verbs, vars located in /code/modules/client/client defines.dm
-
/client/verb/hotkey_toggle()//toggles hotkey mode between on and off, respects selected type
set name = ".Toggle Hotkey Mode"
@@ -140,6 +208,7 @@ Admin:
else
winset(usr, "mainwindow.hotkey_toggle", "is-checked=false")//unchecks the button
winset(usr, "mainwindow.input", "focus=true")//sets focus
+ mob.update_interface()
/client/verb/hotkey_mode()//asks user for the hotkey type and changes the macro accordingly
set name = "Set Hotkey Mode"
diff --git a/interface/skin.dmf b/interface/skin.dmf
index e23a7b994ea..c66843ff071 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -87,6 +87,10 @@ macro "AZERTYoff"
name = "CTRL+D+REP"
command = ".east"
is-disabled = false
+ elem
+ name = "CTRL+B"
+ command = "resist"
+ is-disabled = false
elem
name = "CTRL+E"
command = "quick-equip"
@@ -161,14 +165,18 @@ macro "AZERTYoff"
is-disabled = false
elem
name = "F6"
- command = "Player-Panel-New"
+ command = "Aghost"
is-disabled = false
elem
name = "F7"
- command = "Admin-PM"
+ command = "player-panel-new"
is-disabled = false
elem
name = "F8"
+ command = "admin-pm-key"
+ is-disabled = false
+ elem
+ name = "F9"
command = "Invisimin"
is-disabled = false
elem
@@ -289,6 +297,10 @@ macro "AZERTYon"
name = "CTRL+D+REP"
command = ".east"
is-disabled = false
+ elem
+ name = "CTRL+B"
+ command = "resist"
+ is-disabled = false
elem
name = "E"
command = "quick-equip"
@@ -349,6 +361,14 @@ macro "AZERTYon"
name = "T"
command = ".say"
is-disabled = false
+ elem
+ name = "O"
+ command = "ooc"
+ is-disabled = false
+ elem
+ name = "M"
+ command = ".me"
+ is-disabled = false
elem
name = "W"
command = "Activate-Held-Object"
@@ -415,14 +435,18 @@ macro "AZERTYon"
is-disabled = false
elem
name = "F6"
- command = "Player-Panel-New"
+ command = "Aghost"
is-disabled = false
elem
name = "F7"
- command = "Admin-PM"
+ command = "player-panel-new"
is-disabled = false
elem
name = "F8"
+ command = "admin-pm-key"
+ is-disabled = false
+ elem
+ name = "F9"
command = "Invisimin"
is-disabled = false
elem
@@ -430,6 +454,256 @@ macro "AZERTYon"
command = "F12"
is-disabled = false
+macro "borghotkeymode"
+ elem
+ name = "TAB"
+ command = ".winset \"mainwindow.macro=borgmacro hotkey_toggle.is-checked=false input.focus=true input.background-color=#D3B5B5\""
+ is-disabled = false
+ elem
+ name = "CENTER+REP"
+ command = ".center"
+ is-disabled = false
+ elem
+ name = "NORTHEAST"
+ command = ".northeast"
+ is-disabled = false
+ elem
+ name = "SOUTHEAST"
+ command = ".southeast"
+ is-disabled = false
+ elem
+ name = "NORTHWEST"
+ command = "unequip-module"
+ is-disabled = false
+ elem
+ name = "CTRL+WEST"
+ command = "westface"
+ is-disabled = false
+ elem
+ name = "WEST+REP"
+ command = ".west"
+ is-disabled = false
+ elem
+ name = "CTRL+NORTH"
+ command = "northface"
+ is-disabled = false
+ elem
+ name = "NORTH+REP"
+ command = ".north"
+ is-disabled = false
+ elem
+ name = "CTRL+EAST"
+ command = "eastface"
+ is-disabled = false
+ elem
+ name = "EAST+REP"
+ command = ".east"
+ is-disabled = false
+ elem
+ name = "CTRL+SOUTH"
+ command = "southface"
+ is-disabled = false
+ elem
+ name = "SOUTH+REP"
+ command = ".south"
+ is-disabled = false
+ elem
+ name = "INSERT"
+ command = "a-intent right"
+ is-disabled = false
+ elem
+ name = "DELETE"
+ command = "delete-key-pressed"
+ is-disabled = false
+ elem
+ name = "1"
+ command = "toggle-module 1"
+ is-disabled = false
+ elem
+ name = "CTRL+1"
+ command = "toggle-module 1"
+ is-disabled = false
+ elem
+ name = "2"
+ command = "toggle-module 2"
+ is-disabled = false
+ elem
+ name = "CTRL+2"
+ command = "toggle-module 2"
+ is-disabled = false
+ elem
+ name = "3"
+ command = "toggle-module 3"
+ is-disabled = false
+ elem
+ name = "CTRL+3"
+ command = "toggle-module 3"
+ is-disabled = false
+ elem
+ name = "4"
+ command = "a-intent left"
+ is-disabled = false
+ elem
+ name = "CTRL+4"
+ command = "a-intent left"
+ is-disabled = false
+ elem
+ name = "A+REP"
+ command = ".west"
+ is-disabled = false
+ elem
+ name = "CTRL+A+REP"
+ command = ".west"
+ is-disabled = false
+ elem
+ name = "B"
+ command = "resist"
+ is-disabled = false
+ elem
+ name = "CTRL+B"
+ command = "resist"
+ is-disabled = false
+ elem
+ name = "T"
+ command = ".say"
+ is-disabled = false
+ elem
+ name = "O"
+ command = "ooc"
+ is-disabled = false
+ elem
+ name = "M"
+ command = ".me"
+ is-disabled = false
+ elem
+ name = "CTRL+O"
+ command = "ooc"
+ is-disabled = false
+ elem
+ name = "D+REP"
+ command = ".east"
+ is-disabled = false
+ elem
+ name = "CTRL+D+REP"
+ command = ".east"
+ is-disabled = false
+ elem
+ name = "F"
+ command = "a-intent left"
+ is-disabled = false
+ elem
+ name = "CTRL+F"
+ command = "a-intent left"
+ is-disabled = false
+ elem
+ name = "G"
+ command = "a-intent right"
+ is-disabled = false
+ elem
+ name = "CTRL+G"
+ command = "a-intent right"
+ is-disabled = false
+ elem
+ name = "Q"
+ command = "unequip-module"
+ is-disabled = false
+ elem
+ name = "CTRL+Q"
+ command = "unequip-module"
+ is-disabled = false
+ elem "s_key"
+ name = "S+REP"
+ command = ".south"
+ is-disabled = false
+ elem
+ name = "CTRL+S+REP"
+ command = ".south"
+ is-disabled = false
+ elem "w_key"
+ name = "W+REP"
+ command = ".north"
+ is-disabled = false
+ elem
+ name = "CTRL+W+REP"
+ command = ".north"
+ is-disabled = false
+ elem
+ name = "X"
+ command = ".northeast"
+ is-disabled = false
+ elem
+ name = "CTRL+X"
+ command = ".northeast"
+ is-disabled = false
+ elem
+ name = "Y"
+ command = "Activate-Held-Object"
+ is-disabled = false
+ elem
+ name = "CTRL+Y"
+ command = "Activate-Held-Object"
+ is-disabled = false
+ elem
+ name = "Z"
+ command = "Activate-Held-Object"
+ is-disabled = false
+ elem
+ name = "CTRL+Z"
+ command = "Activate-Held-Object"
+ is-disabled = false
+ elem
+ name = "F1"
+ command = "adminhelp"
+ is-disabled = false
+ elem
+ name = "CTRL+SHIFT+F1+REP"
+ command = ".options"
+ is-disabled = false
+ elem
+ name = "F2"
+ command = "ooc"
+ is-disabled = false
+ elem
+ name = "F2+REP"
+ command = ".screenshot auto"
+ is-disabled = false
+ elem
+ name = "SHIFT+F2+REP"
+ command = ".screenshot"
+ is-disabled = false
+ elem
+ name = "F3"
+ command = ".say"
+ is-disabled = false
+ elem
+ name = "F4"
+ command = ".me"
+ is-disabled = false
+ elem
+ name = "F5"
+ command = "asay"
+ is-disabled = false
+ elem
+ name = "F6"
+ command = "Aghost"
+ is-disabled = false
+ elem
+ name = "F7"
+ command = "player-panel-new"
+ is-disabled = false
+ elem
+ name = "F8"
+ command = "admin-pm-key"
+ is-disabled = false
+ elem
+ name = "F9"
+ command = "Invisimin"
+ is-disabled = false
+ elem
+ name = "F12"
+ command = "F12"
+ is-disabled = false
+
macro "macro"
elem
name = "TAB"
@@ -519,6 +793,10 @@ macro "macro"
name = "CTRL+D+REP"
command = ".east"
is-disabled = false
+ elem
+ name = "CTRL+B"
+ command = "resist"
+ is-disabled = false
elem
name = "CTRL+E"
command = "quick-equip"
@@ -593,14 +871,18 @@ macro "macro"
is-disabled = false
elem
name = "F6"
- command = "Player-Panel-New"
+ command = "Aghost"
is-disabled = false
elem
name = "F7"
- command = "Admin-PM"
+ command = "player-panel-new"
is-disabled = false
elem
name = "F8"
+ command = "admin-pm-key"
+ is-disabled = false
+ elem
+ name = "F9"
command = "Invisimin"
is-disabled = false
elem
@@ -706,7 +988,15 @@ macro "hotkeymode"
command = "a-intent harm"
is-disabled = false
elem
- name = "5"
+ name = "T"
+ command = ".say"
+ is-disabled = false
+ elem
+ name = "O"
+ command = "ooc"
+ is-disabled = false
+ elem
+ name = "M"
command = ".me"
is-disabled = false
elem
@@ -725,6 +1015,14 @@ macro "hotkeymode"
name = "CTRL+D+REP"
command = ".east"
is-disabled = false
+ elem
+ name = "B"
+ command = "resist"
+ is-disabled = false
+ elem
+ name = "CTRL+B"
+ command = "resist"
+ is-disabled = false
elem
name = "E"
command = "quick-equip"
@@ -851,14 +1149,18 @@ macro "hotkeymode"
is-disabled = false
elem
name = "F6"
- command = "Player-Panel-New"
+ command = "Aghost"
is-disabled = false
elem
name = "F7"
- command = "Admin-PM"
+ command = "player-panel-new"
is-disabled = false
elem
name = "F8"
+ command = "admin-pm-key"
+ is-disabled = false
+ elem
+ name = "F9"
command = "Invisimin"
is-disabled = false
elem
@@ -866,6 +1168,183 @@ macro "hotkeymode"
command = "F12"
is-disabled = false
+macro "borgmacro"
+ elem
+ name = "TAB"
+ command = ".winset \"mainwindow.macro=borghotkeymode hotkey_toggle.is-checked=true mapwindow.map.focus=true input.background-color=#F0F0F0\""
+ is-disabled = false
+ elem
+ name = "CENTER+REP"
+ command = ".center"
+ is-disabled = false
+ elem
+ name = "NORTHEAST"
+ command = ".northeast"
+ is-disabled = false
+ elem
+ name = "SOUTHEAST"
+ command = ".southeast"
+ is-disabled = false
+ elem
+ name = "NORTHWEST"
+ command = "unequip-module"
+ is-disabled = false
+ elem
+ name = "CTRL+WEST"
+ command = "westface"
+ is-disabled = false
+ elem
+ name = "WEST+REP"
+ command = ".west"
+ is-disabled = false
+ elem
+ name = "CTRL+NORTH"
+ command = "northface"
+ is-disabled = false
+ elem
+ name = "NORTH+REP"
+ command = ".north"
+ is-disabled = false
+ elem
+ name = "CTRL+EAST"
+ command = "eastface"
+ is-disabled = false
+ elem
+ name = "EAST+REP"
+ command = ".east"
+ is-disabled = false
+ elem
+ name = "CTRL+SOUTH"
+ command = "southface"
+ is-disabled = false
+ elem
+ name = "SOUTH+REP"
+ command = ".south"
+ is-disabled = false
+ elem
+ name = "INSERT"
+ command = "a-intent right"
+ is-disabled = false
+ elem
+ name = "DELETE"
+ command = "delete-key-pressed"
+ is-disabled = false
+ elem
+ name = "CTRL+1"
+ command = "toggle-module 1"
+ is-disabled = false
+ elem
+ name = "CTRL+2"
+ command = "toggle-module 2"
+ is-disabled = false
+ elem
+ name = "CTRL+3"
+ command = "toggle-module 3"
+ is-disabled = false
+ elem
+ name = "CTRL+4"
+ command = "a-intent left"
+ is-disabled = false
+ elem
+ name = "CTRL+A+REP"
+ command = ".west"
+ is-disabled = false
+ elem
+ name = "CTRL+B"
+ command = "resist"
+ is-disabled = false
+ elem
+ name = "CTRL+O"
+ command = "ooc"
+ is-disabled = false
+ elem
+ name = "CTRL+D+REP"
+ command = ".east"
+ is-disabled = false
+ elem
+ name = "CTRL+F"
+ command = "a-intent left"
+ is-disabled = false
+ elem
+ name = "CTRL+G"
+ command = "a-intent right"
+ is-disabled = false
+ elem
+ name = "CTRL+Q"
+ command = "unequip-module"
+ is-disabled = false
+ elem
+ name = "CTRL+S+REP"
+ command = ".south"
+ is-disabled = false
+ elem
+ name = "CTRL+W+REP"
+ command = ".north"
+ is-disabled = false
+ elem
+ name = "CTRL+X"
+ command = ".northeast"
+ is-disabled = false
+ elem
+ name = "CTRL+Y"
+ command = "Activate-Held-Object"
+ is-disabled = false
+ elem
+ name = "CTRL+Z"
+ command = "Activate-Held-Object"
+ is-disabled = false
+ elem
+ name = "F1"
+ command = "adminhelp"
+ is-disabled = false
+ elem
+ name = "CTRL+SHIFT+F1+REP"
+ command = ".options"
+ is-disabled = false
+ elem
+ name = "F2"
+ command = "ooc"
+ is-disabled = false
+ elem
+ name = "F2+REP"
+ command = ".screenshot auto"
+ is-disabled = false
+ elem
+ name = "SHIFT+F2+REP"
+ command = ".screenshot"
+ is-disabled = false
+ elem
+ name = "F3"
+ command = ".say"
+ is-disabled = false
+ elem
+ name = "F4"
+ command = ".me"
+ is-disabled = false
+ elem
+ name = "F5"
+ command = "asay"
+ is-disabled = false
+ elem
+ name = "F6"
+ command = "Aghost"
+ is-disabled = false
+ elem
+ name = "F7"
+ command = "player-panel-new"
+ is-disabled = false
+ elem
+ name = "F8"
+ command = "admin-pm-key"
+ is-disabled = false
+ elem
+ name = "F9"
+ command = "Invisimin"
+ is-disabled = false
+ elem
+ name = "F12"
+ command = "F12"
+ is-disabled = false
menu "menu"
elem