Rebinding Controls to Play Better!

Many people have complained about the way the controls are laid out in Arcane Odyssey, so here is a guide to fix some of the problematic controls using AutoHotKey. AHK is a macro program with its own programming language specifically for creating macros. Immediately you may be wondering if this is banned, due to macros being disallowed in the rules. The answer is that macros are only really banned if they give you an unfair advantage, hence the reason macros are banned in the first place, autofishing. All this script does is rebind keys, so it is completely allowed.

First you will need to install AutoHotKey, which you can find on their appropriately named website. Make sure to download the v1.1 version of AHK and not v2, as this script will not work if you only install v2. If you already have AHK you can install both and this will still work. After installing you will need to create an AutoHotKey script (ex. test.ahk) to paste my code into.

note: you must switch your dash key from double-tap to shift for this to work.

!Tab::!Tab ;Makes sure Alt Tab still works.
#If WinActive("ahk_exe RobloxPlayerBeta.exe") ;these binds will only work when you are tabbed into roblox
#InstallKeybdHook
#InstallMouseHook


*MButton::g ;rebinds middle mouse to block

*~;::Tab ;rebinds the semi colon to opening the inventory menu.

*Tab:: ;Tab to charge magic
loop
  {
     if getkeystate("Tab", "p") ;checks if "Tab" is being held down
      {

        send, {w up},{a up},{s up},{d up} ;prevents dashing instead of charging
        send, {LShift Down}
       }
    else
      {
        send, {LShift Up}
        break ;If the key is no longer being held down stop charging magic.
      }
  }
  return

*XButton1:: ;Mouse 5 to dash
  loop
    {
       if getkeystate("XButton1", "p") ;checks if "Mouse5" is being held down
        {
          send, {LShift Up},{LShift Down}
          send, {LShift Up}
        }
      else
        {
          break ;If the key is no longer being held down then s1top dashing.
        }
    }
    return

#If
^End::Suspend ;Ctrl + End to disable/reenable binds

This script will make Tab your charge magic button, “;” your inventory button, Mouse5 your dash button, and Middlemouse becomes your block button. Keep in mind that this will run in all roblox games, so if you want to turn it off you can press Ctrl + End together to either disable or reenable the rebinds. Please let me know if you like these binds by commenting or liking, and let me know if you need help with something related to these binds in the comments.

4 Likes

I understand some people may want to change some of these keys, so I’ll include common rebinds here:

~q:: ;changes q to dash key
  loop
    {
       if getkeystate("q", "p") ;checks if "q" is being held down
        {
          send, {LShift Down}
          send, {LShift Up}
        }
      else
        {
          break ;If the key is no longer being held down then stop dashing.
        }
    }
    return

Personally I do not recommend q for dashing but that’s what many people prefer so I put it here. Using q for dashing means you cannot use it to cast spells.


Here is a rebind for magic charging that only works while you have shiftlock on, meaning you can use it for opening your inventory when shiftlock is off. In my experience this is really just an inconvenience and a by-product from an old version of this script. Using semi-colon to open inventory works fine.

~Tab:: ;Tab to charge magic
loop
  {
     if getkeystate("Tab", "p") ;checks if "Tab" is being held down
      {

        send, {w up},{a up},{s up},{d up}
        send, {LShift Down}
       }
    else
      {
        send, {LShift Up}
        break ;If the key is no longer being held down stop charging magic.
      }
  }
  return

Another alternate dash button for people who don’t have extra mouse buttons. This bind uses your middle mouse button (mouse 3) to dash.

*MButton:: ;Mouse 3 to dash
  loop
    {
       if getkeystate("MButton", "p") ;checks if "Mouse3" is being held down
        {
          send, {LShift Down}
          send, {LShift Up}
        }
      else
        {
          break ;If the key is no longer being held down then stop dashing.
        }
    }
    return

Some people either don’t have a Middle Mouse button or prefer to block with right click, so if you’d rather block while holding right click you can replace:

*MButton::g

at the top of the script with:

~RButton::g

You will still be able to move your camera, but whenever you rightclick you will start blocking.

You can also use the alternative bind ~*XButton2::g for mouse4 to block and ~*XButton1::g to bind mouse5 to block.


An alternative bind to this is only using right click to block while shiftlocked. The drawback to this is it is a bit harder to set up, requiring you to do some work to get it working. First here is the code you will be working off of:

*~RButton:: ;Right Mouse to block
MouseGetPos, xpos, ypos 
if ((xpos = 1920) and (ypos = 1080)) or ((xpos = 1931) and (ypos = 1078))
  {
loop
  {
     if getkeystate("RButton", "p") ;checks if "Right Mouse" is being held down
      {
        send, {g Down}
       }
    else
      {
        send, {g Up}
        break ;If the key is no longer being held down stop blocking
      }
  }
}
  return

Unless you have a 3,840 x 2,160 monitor, this will not work. Therefore you must replace the numbers at the top of the script, if ((xpos = 1920) and (ypos = 1080)) or ((xpos = 1931) and (ypos = 1078)), with numbers that fit your monitor size. To find these, check your computer for a program that comes with AutoHotKey, called Window Spy. Upon opening window spy you’ll want to open Arcane Odyssey and shiftlock to see where it puts your mouse. You will want to use the numbers from the “Window” category:

Put the two numbers here into the first pair of numbers in the line. To get the other pair of numbers you will need to go into fullscreen and then check the window category again for the new numbers. Now you will be able to block just by pressing right click, and not block while trying to move your camera while not shiftlocked.

1 Like

hence the reason macros are banned in the first place, autofishing. All this script does is rebind keys, so it is completely allowed.

dw maple uses hotkeys too >:)

t’was a joke I don’t think it’s illegal or anything

1 Like

bumped due to a bug in the script that could make it not function correctly, everything works perfectly now. If you did install the first version I’d recommend replacing it

1 Like

bumped as a couple alternate binds have been added in the comments, some of which are much better binds than in the original post.

Bumped, I have finalized the script and bind scheme as well as added new alternative binds in the top comment. This will likely be the final revision of this post, as all the bugs have been patched and I believe this bind scheme is very very good.

aww damn I was gonna make this tutorial, just found this post. this is amazing though, way more indepth than I would have gone! great job!

1 Like

Bumped, fixed a minor bug in the main script and added more alternative binds.