The Gold Road Chapter – which includes the Scribing system – and Update 42 is now available to test on the PTS! You can read the latest patch notes here: https://forums.elderscrollsonline.com/en/discussion/656454/
Maintenance for the week of April 22:
• [IN PROGRESS] PC/Mac: NA megaserver for maintenance – April 25, 6:00AM EDT (10:00 UTC) - 2:00PM EDT (18:00 UTC)
https://forums.elderscrollsonline.com/en/discussion/comment/8098811/#Comment_8098811

Alternative/Work-Around found for Mouselook (Works great for laptops with touchpads!)

ZombieTech
ZombieTech
✭✭
(Re-posting this since I wasn't sure which section it fit best in...)

For starters, to address the powers-that-be and the mods, please know that this method doesn't alter or change the game in any way, nor should it hopefully violate any rules/regulations since it works in the same exact principle as Xpadder or Pinnacle does to allow a person to use a gamepad/joystick in a keyboard/mouse game. It's merely re-macroing keys/inputs for different functionality.

For the community, this is probably at the moderate to intermediate computer-user level; however, I plan to lay out each step as simply as possible, so as long as you follow the steps, everything should be fine. NOTE: I take no responsibility for anything that may occur from using this. (Which that "anything" should hopefully be "nothing". :P )

Also for the community: I'm posting this as non-copyright, non-exclusive, and completely open-source -- my hopes are that others that are good with scripting can put their heads together on what I've started, help to improve and/or streamline -- possibly even make optional alternative control-schemes that could improve the game even more, perhaps even for setups beyond just mouselook and such. (Even though I've done lots of scripting on several other platforms and in various other languages; also noting that nobody is perfect, much including and referencing myself with that, and this is actually and admittedly my first attempt at making an AutoHotKey script, which I will get to after the preface. ^_^ )

With that, on to the nitty-gritty...

PREFACE

For the record, I have ZERO issues myself personally with the mouselook and reticle/targeting interface -- I honestly love action-based reticle/targeting MMORPGs and wish there were plenty more of them to go around. There were two reasons I went ahead and tackled this issue.

First reason is the fact that I had bought two copies of ESO/TU a week or two ago, and had meant to play this game along side the missus, as we both love to game together. However, due to the fact she's a bit more of a casual gamer, as well as has played WoW for quite a chunk of their 11-year span, and has a laptop -- the mouselook and side-strafing interface was just too jarring for her to make the transition, thus for the last week, I've pretty much had to play solo. (Yep, I'm a total rookie at ESO, my "main" is only lvl15, lol. But for what it's worth, this has to be one of my most favorite MMORPGs to date, definitely tied with FFXIV... and in some ways ESO goes even a bit above that, since it so readily reminds me, in storyline-essence of Ultima 9, which was an insanley awesome RPG for its time! xD)

Second reason is the community, I've chatted with some of you regularly in game, in zone-chat, and it's a blast. But even before that, when the missus first had the transitional issue, I had decided to Google search everything I could, hoping to find a quick way to turn off mouselook-mode , perhaps by changing a simple variable in a config file by means of a text-editor or something... but it turned out it wouldn't be anything quite so simple... at least until now. :dizzy:

So, after this preface, will lay it out like this: Setup/installation steps; Explanation of what the script is doing and how it works; Description of what's being done and line-by-line explanation of the script; History (to document and recollect some of the speed-bumps and hiccups I ran into and have fixed while writing this script) -- so that should anybody else take a jab at fine-tuning this beast, they don't trip in the same ways that I did, and finally Known Issues -- where I cover some small hiccups that are still in the script, as well as ways to work around them. Here we go! :wink:

SETUP/INSTALLATION

Step 1: As had been mentioned above, first thing you'll need is a FREE program called AutoHotKey. I didn't write or create this program, in fact, this program has been around and updated since November 10, 2003 when it's first public Beta released. So it's not like it's any new top-of-the-line rocket-science, nor should you need anything beyond what your system already has -- trust me, if you can run ESO, you can run this. You can get AutoHotKey here: http://www.autohotkey.com/.

Click on where it says right at the top: "Download AutoHotKey 1.1". It should download quickly as it's fairly small, run the program, and just use the defaults that come with it, unless you're a more advanced user and wish for it to be installed elsewhere than default. Default location is: "C:\Program Files\AutoHotKey".

Please note: AutoHotKey is actually pretty handy for several different uses and applications, not just gaming. Anything from Operating-System navigation, to production-suites, to graphic-editing, word-processing, various other applications, even setting up "swipe" abilities with your mouse (much like finger-swiping on tablets); so don't be shy to check it out and tweak your system up a bit with it.

Step 2: With the biggest requirement out of the way, onto the script source. Now, AutoHotKey has the ability to compile self-written script into self-running executables, aka: .EXE-format. I had contemplated going that route, except for two issues. First, the whole issue with never knowing if there's viruses or other malware in .exe's downloaded off the internet, and figured this way would be safer and more trustworthy. And secondly, if compiled into a .EXE it wouldn't be as easily open-sourced by the rest of the community.

This is the code you'll need for the script (select everything in the box, copy it, paste it into a notepad, and then click "File", "Save As", and name it whatever you want as well as save it to wherever you want (just make sure to remember where you save it to), BUT, and this next part is IMPORTANT... make SURE you make the file-extension .ahk. To do that, with the "Save As" dialog open, you'd surround what you're naming it as in quotes, so before you click "Save" at the bottom, the box next to where it says "File name:" should be something like "example.ahk" or "ESO-mouselook-free.ahk" or even just "ESO.ahk". The quotes allow it to use the full string to name it with, ignoring the default extension of .txt.

AutoHotKey Script Code:
MsgBox, Tamriel Awaits Your Presence, Adventurer!
#ifWinActive ahk_class EsoClientWndClass
#InstallKeybdHook

#Persistent

SetTimer, Check, 1000

~Left::MouseMove, -500, 0, 0, R
~Right::MouseMove, 500, 0, 0, R
~A::MouseMove, -500, 0, 0, R
~D::MouseMove, 500, 0, 0, R
+Tab::Pause

Check:
If (A_TimeIdlePhysical>1) and (A_TimeIdlePhysical<1199) and (GetKeyState("Up","P") != 1) and (GetKeyState("Down","P") != 1) and (GetKeyState("Left","P") != 1) and (GetKeyState("Right","P") != 1) and (GetKeyState("W","P") != 1) and (GetKeyState("A","P") != 1) and (GetKeyState("S","P") != 1) and (GetKeyState("D","P") != 1) and (GetKeyState("Escape","P") != 1) and (GetKeyState("Alt","P") != 1) and (GetKeyState("I","P") != 1) and (GetKeyState("M","P") != 1) and (GetKeyState("L","P") != 1) and WinActive("ahk_class EsoClientWndClass") {
  Send {.}
}
else {
  return
}

Step 3: Double-click the .ahk file you made in step 2 (as long as you installed AutoHotKey correctly, it should just compile and execute); you should be greeted with a popup that reads, "Tamriel Awaits Your Presence, Adventurer!"; if you do, with no errors, and have a green square with a white-H in it, in your task-tray, then you're good to go. That's it... have fun in Tamriel with a different control-scheme and a lot less mouselook. ^_^

PLEASE NOTE: There's a small issue that I've found, where if you try to open up inventory, campaign, map, etc screens (as well as trying to chat) while script is running -- the way the script works, they'll close right after (or in chat, typing won't be that much fun while script is running, lol). There's two easy fixes for this... first is easiest, I scripted in a "script pause" control, by pressing shift+tab the script will pause, you can then do anything in sub-screens or chatting you need to, when you want the script to run again, just press shift+tab again. Should you forget to turn off the script, I have hard-coded the if-check to watch for "Escape", "Alt", "I", "M", "L", and arrows/WASD as pressed, if they are, it won't kick in an interrupt what you're doing -- however, once the key is pressed and released it stops noticing, so as a strange alternative, you can hold the key down, like "Escape" for example, while still being able to scroll your mouse through the menu and clicking everything same as typical.

EXPLANATION OF CODE

It's not like the script-code is any real form of rocket-science. Here I'll give a quick laymen's explanation, where under the description I'll get a bit more under the hood and tech-descriptive of what's happening.

So this script, assuming that most still have the period-key, ".", as their default to toggle off mouselook, will watch both for how long you've been idle, as well as certain keys not being pressed, if the requirements are met, it just sends a "." to the game, turning off mouselook mode. So in essence, as a player runs through the game, explores, jumps, etc... as soon as they stop, instead of having a mouselook reticle, they should be automatically tossed into cursor-mode instead of mouselook-mode. Emphasis on should -- no real issues, just a minor hiccup I'll cover in the Known Issues section.

Another thing changed with this script, is side-strafing, which is another thing the missus couldn't transition into. So W and D or left-arrow and right-arrow will now rotate the camera. If standing still, it'll rotate the camera around the character, and if moving it'll turn the character to the direction pressed allowing a person to keyboard-navigate much more easily -- note, should probably tap A and D and/or left/right arrows as opposed to holding them down... as neat as it looks when you hold them down, can get a tad dizzy after a bit, lol.

And that's pretty much all this script does and wraps up the laymen's explanation. Now, for the hardcore curious techie-sorts, will see you below in the "Description" section. xD

DESCRIPTION OF EXECUTION

Okay, so line-by-line, here's a quick breakdown...

1. As had been stated, flashes a popup to let the user know the script ran okay, and to welcome them into Tamriel.
2. A simple check to have the controls trigger if the window-class of EsoClientWndClass is located and to localize the functionality to that window.
3. Calls the reference-file InstallKeybdHook -- in case I decide to make this script anymore advanced and may utilize deeper keyboard functionality found in this reference-file. (Quote from AutoHotKey: The keyboard hook monitors keystrokes for the purpose of activating hotstrings and any keyboard hotkeys not supported by RegisterHotkey (which is a function built into the operating system). It also supports a few other features such as the Input command.)
4. Persistent header tells AutoHotKey that the script is to be run again and again, rather than just a one-time quick execution.
5. Setting a looping timer for function "Check".
6. Re-Configuring the Left-Arrow to rotate the mouse. (The ~ allows the key to not be locked, which allows the character's animation to rotate into the turn, otherwise without ~ it looks like character is always running straight ahead while camera turns.)
7. Re-Configuring the Right-Arrow to rotate the mouse. (The ~ allows the key to not be locked, which allows the character's animation to rotate into the turn, otherwise without ~ it looks like character is always running straight ahead while camera turns.)
8. Re-Configuring the A-Key to rotate the mouse. (The ~ allows the key to not be locked, which allows the character's animation to rotate into the turn, otherwise without ~ it looks like character is always running straight ahead while camera turns.)
9. Re-Configuring the D-Key to rotate the mouse. (The ~ allows the key to not be locked, which allows the character's animation to rotate into the turn, otherwise without ~ it looks like character is always running straight ahead while camera turns.)
10. Hotkey configuration to allow shift("+") + tab to act as a pause-function for the script.
11. The function start for "Check:".
12. The really long IF statement that checks for the following -- "A_TimeIdlePhysical" to be BOTH greater than one AND less than 1199 [feel free to tweak the latter for tighter triggering if you wish] -- the state of the following keys: UP, DOWN, LEFT, RIGHT, W, A, S, D, ESCAPE, ALT, I, M, L are NOT currently pressed -- and that again the window ahk_class of EsoClientWndClass is found to make sure it's only triggering in the ESO window. (Took a bit of tinkering but 1199 as A_TimeIdlePhysical usually keeps only one period being sent, every now and again there's 2, referenced in Known Issues.)
13. If all criteria in 12 is found to be TRUE, a single "." is sent.
14. If any of those criteria are FALSE, a "return" is triggered, to exit out of the function.

And that's it.

HISTORY

Script took probably 30-60 minutes to figure out and write, and an additional 2-3+ hours tweaking and testing.

Random scribbles of things to keep in mind when tweaking the script:

- Originally started with function-property A_TimeIdle until it dawned on me that A_TimeIdle watches for BOTH physical activity as well as virtual/artificial sends, thus the idle time constantly being reset when the ".", when I finally switched to function-property A_TimeIdlePhysical to watch for ONLY physical activity (which also means botters need not apply to using this script, heh), the world became that much more beautiful! :)

- The ~ before the hotkey in the script is sometimes beneficial. Otherwise the key becomes locked to whatever function you give it while ignoring the base-function. So for example, if you made a hotkey out of PageDown, without the ~, it'd do whatever you specify, but no longer scroll a page down when being pressed as long as the script is being run, and if specified, if it's within the window/class-of-window it's being regulated to.

- Might be a better way of doing the "IF" line without so many checks, but wasn't sure I felt like having a bunch of nested checks inside one another, wanted to keep it, for now, short, sweet, and simple.

- When setting/tweaking the Timer command, be VERY careful what you set the number at the end to. For reference, each thousand is one second. So right now this script is checking each second, aka: "1000", never did test going below 1000, but might not be that recommended -- or if you do, be sure to also shift the values in the IF check appropriately to match the timer.

- Even without the Persistent header, all hotkeys work... however, Persistent is definitely required for continuous checks of key-states, idle-time, etc.

KNOWN ISSUES

Only have a few known issues...

1. As stated above, best to PAUSE the script with shift+tab before attempting to chat or open frames such as inventory, map, campaign, etc -- if you forget to pause, just get used to holding down "I" for instance when opening inventory... as long as the key is depressed so that the script can detect that it's being held down, the "." shouldn't trigger.

2. Occasionally the timing is off by a millisecond or so, and every once in awhile two "."'s can fire, you'll notice this if the target-reticle, becomes a cursor, to quickly become a target-reticle again. If this happens, just move a tiny bit in either direction, or pop open inventory or another frame, etc, and it should quickly rectify itself. Working to tweak this to not happen, but gets a bit tricky when working in the sub-second timing ranges.

3. Had an issue the day after I wrote the script, where I went to test it, and for some strange reason, was able to get the script to fire in every other window (after commenting (";") out the ESO-window/class-check, except for ESO (even though the popup would still show and the script would load perfectly). Tinkered with a lot of things, couldn't get it to work -- after a system-reboot however, it started working again. Hadn't thought to check in the process-manager before rebooting, but I'm assuming I might have had an old stuck-ESO session that the script was probably targeting, rather than the more newly-executed one. So should you ever fire the script, and nothing's happening in game, and you're certain you've done everything correctly, try a quick reboot of your system to make sure everything is cleaned out and ready to go. ^_^

With all of that, enjoy -- and make sure to bring back any friends, family-members, and associates that were unable to transition to Tamriel simply because of the mouselook issues and/or side-strafing! Tamriel misses them and would love to have them back for another adventure! :blush:
S ▫ i ▪ M ▫ i ▪ L ▫ a ▪ R -^†^- C ▪ r ▫ E ▪ a ▫ T ▪ u ▫ R ▪ e ▫ S

★☆★☆★ ♪ 32 Year \☺/ Gaming-Veteran ♫ ★☆★☆★ [Confucius says]: ボウタイされている根本的な ~and~ 不要惊慌实际男子爱耶稣

My RIG: { FX-6300 3.5ghz [OC-able to 4+ghz] 6-Core (Tower), 8gb Ram, AMD Radeon HD R7 250 /w 2gb vRam, Win 8.1 64-Bit & Ubuntu 14.04 Dual-Boot/VirtualBox, 46" Samsung ultra-conversion 3D HDTV, & PS3 Gamepad + XPadder FTW! }
  • ZombieTech
    ZombieTech
    ✭✭
    The missus found an issue with the combat reticle disappearing, so can either use shift+Tab before combat to pause script, or replace the really long IF line with the following: (right-click the .ahk script-file, the one you normally double-click to launch it, and select "Edit Script".)
    If (A_TimeIdlePhysical>1) and (A_TimeIdlePhysical<1199) and (GetKeyState("Up","P") != 1) and (GetKeyState("Down","P") != 1) and (GetKeyState("Left","P") != 1) and (GetKeyState("Right","P") != 1) and (GetKeyState("W","P") != 1) and (GetKeyState("A","P") != 1) and (GetKeyState("S","P") != 1) and (GetKeyState("D","P") != 1) and (GetKeyState("Escape","P") != 1) and (GetKeyState("Alt","P") != 1) and (GetKeyState("I","P") != 1) and (GetKeyState("M","P") != 1) and (GetKeyState("L","P") != 1) and (GetKeyState("LButton","P") != 1) and (GetKeyState("RButton","P") != 1) and (GetKeyState("1","P") != 1) and (GetKeyState("2","P") != 1) and (GetKeyState("3","P") != 1) and (GetKeyState("4","P") != 1) and (GetKeyState("5","P") != 1) and (GetKeyState("R","P") != 1) and WinActive("ahk_class EsoClientWndClass") {
    
    EDIT: As a bonus, decided to make it a tad easier for those using the arrow keys, so they don't have to reach all the way across the keyboard to pause, so directly under the line that reads "+Tab", add these lines:
    Home & End::Pause
    End & Home::Pause
    
    It'll allow using either Home+End OR End+Home to also pause the script.

    So the overall code should look something like this:
    MsgBox, Tamriel Awaits Your Presence, Adventurer!
    #ifWinActive ahk_class EsoClientWndClass
    #InstallKeybdHook
    
    #Persistent
    
    SetTimer, Check, 1000
    
    ~Left::MouseMove, -500, 0, 0, R
    ~Right::MouseMove, 500, 0, 0, R
    ~A::MouseMove, -500, 0, 0, R
    ~D::MouseMove, 500, 0, 0, R
    +Tab::Pause
    Home & End::Pause
    End & Home::Pause
    
    Check:
    If (A_TimeIdlePhysical>1) and (A_TimeIdlePhysical<1199) and (GetKeyState("Up","P") != 1) and (GetKeyState("Down","P") != 1) and (GetKeyState("Left","P") != 1) and (GetKeyState("Right","P") != 1) and (GetKeyState("W","P") != 1) and (GetKeyState("A","P") != 1) and (GetKeyState("S","P") != 1) and (GetKeyState("D","P") != 1) and (GetKeyState("Escape","P") != 1) and (GetKeyState("Alt","P") != 1) and (GetKeyState("I","P") != 1) and (GetKeyState("M","P") != 1) and (GetKeyState("L","P") != 1) and (GetKeyState("LButton","P") != 1) and (GetKeyState("RButton","P") != 1) and (GetKeyState("1","P") != 1) and (GetKeyState("2","P") != 1) and (GetKeyState("3","P") != 1) and (GetKeyState("4","P") != 1) and (GetKeyState("5","P") != 1) and (GetKeyState("R","P") != 1) and WinActive("ahk_class EsoClientWndClass") 
    {
      Send {.}
    }
    else {
      return
    }
    
    Edited by ZombieTech on June 20, 2015 12:49AM
    S ▫ i ▪ M ▫ i ▪ L ▫ a ▪ R -^†^- C ▪ r ▫ E ▪ a ▫ T ▪ u ▫ R ▪ e ▫ S

    ★☆★☆★ ♪ 32 Year \☺/ Gaming-Veteran ♫ ★☆★☆★ [Confucius says]: ボウタイされている根本的な ~and~ 不要惊慌实际男子爱耶稣

    My RIG: { FX-6300 3.5ghz [OC-able to 4+ghz] 6-Core (Tower), 8gb Ram, AMD Radeon HD R7 250 /w 2gb vRam, Win 8.1 64-Bit & Ubuntu 14.04 Dual-Boot/VirtualBox, 46" Samsung ultra-conversion 3D HDTV, & PS3 Gamepad + XPadder FTW! }
Sign In or Register to comment.