Jump to content

[SOLVED][QUERY] Unbind vanilla hot keys and leave them blank


Recommended Posts

Posted (edited)

I want to unbind Quick Load hot key from anything. I don't use it, I don't want it and I could really use the extra key because, frankly, I've ran out.

By unbinding, I mean I do not want this key to be assigned to anything. Blank, null, neutered, whatever.

 

I've looked at ControlMap_Custom.txt but that file is not even in plain text format and I can't make anything out of it.

 

I've  extracted interface\controls\pc\controlmap.txt file from Skyrim - Interface.bsa file, found a line

 

Quickload            0x43                0xff    0xff                1    0    0

 

Changed it to:

 

Quickload            0xff                0xff    0xff                1    0    0

 

and placed it as loose file in appropriate path in Data folder.

 

That didn't work.

The default F9 is still listed in Control settings after booting up the game and functional.

 

So how am I to go about it?

I could really do without mods that overhaul whole control schematic. I want one key, just one, not the whole fucking framework for this one, specific task. I'm not going to take a bloody M230 cannon to a M1911 shooting competition (that last sentence is so the Americans understand).

Edited by belegost
Posted (edited)

You can't trust key rebinding in modern (i.e. past 20 years) games. As you stated:

 

1 hour ago, belegost said:

The default F9 is still listed in Control settings...

 

Which would mean that's just hardcoded, it's not actually reading the settings for that.

 

1 hour ago, belegost said:

...and functional.

 

Oh ok so the UI is correct, but its still not reading the settings file.

 

1 hour ago, belegost said:

So how am I to go about it?

 

I tried changing mine from 0x43 to 0x40 (F6) and the game ignored it. The key however can be changed in the in-game options. That tells me the entry in controlmap.txt is leftovers from a previous game or only used as a default value for when some other setting is not overriding it. This suggests that this specific setting is now stored somewhere else.

 

Using ProcMon to log all ini and txt files accessed by the game reveals that when it saves changes made in the in-game controls menu, it writes them to this file:

...\path\to\Skyrim Special Edition\ControlMap_Custom.txt

 

This, like you already stated is a binary file. Easiest way to quickly map out a binary file is to store a copy of it, make a change in the program that writes to it, then compare the bytes in a hex editor.

 

Using my hex editor to compare the files reveals that 2 bytes were changed at offset 122. 0x43 at 122 became 0x40, and 0x7 at 123 became 0x6. We can assume the byte at 122 is the scancode, just like in the controlmap.txt file, but byte 123 is unfortunate, unless you can figure out why F9 would be associated with the number "6", and why F6 would be associated with "7".

 

Looking at the other bytes in this file, especially the ones set to 0xff, the byte immediately after seems to always be different: 0x27 0x29 0x2a 0x28 and so on. So based on that I'd set the following:

 

Byte at offset 122: 0xff

Byte at offset 123: 0x6

 

Then see what the game says about that.

 

If you can't make this edit yourself, upload your ControlMap_Custom.txt.

Edited by traison
Posted (edited)
2 hours ago, traison said:

hex editor

Last time I used a hex editor was back in the DOS days when I would edit my soldier's start in UFO: Enemy Unknown.

 

I am vaguely familiar with the process, though I ahven't used it in... forever. I'm goign to try doing that myself.

 

EDIT: nvm, got one.

 

Any free and simple hex editors you can recommend? Ideally ones that don't need actually installation and can be run just from executable. I don't need to clog up my registry with stuff I'm going to use once.

 

Edited by belegost
Posted (edited)

Nope.

 

Both bytes were actually empty (00 00). But changing them to what you said (FF 06) did nothing.

Edited by belegost
Posted (edited)
2 hours ago, belegost said:

Any free and simple hex editors...

 

XVI32, but its hardly enough for any serious editing work. I made my own (because of course I did).

 

2 hours ago, belegost said:

Both bytes were actually empty

 

Maybe a game version difference. Search for 0x43 and start editing from that byte offset onwards, instead of 122.

 

Edit: This is assuming you haven't changed the in-game options to something other than F9. Otherwise change it back, then do the search.

 

Edit again: Or, like previously, upload the file here.

Edited by traison
Posted (edited)
1 hour ago, traison said:

This is assuming you haven't changed the in-game options to something other than F9

I haven't. But there is no 43. Assuming of course, it should show up as 43 in hex editor. Which I doubt.

 

I could probably make a copy, change the string and compare the new file, but uh... I no longer possess the skill to work with hexadecimals. It's been a while.

 

Anyway, here's the file:

 

ControlMap_Custom.txt

Edited by belegost
Posted (edited)
1 hour ago, traison said:

See what the game says about this one.

 

Well, what do you know, it fucking works! Thank you.

 

SkyrimSE2025-03-0320-55-40-10.png.24da8bc0f376b2d9debde2494f13b067.png

 

Now, I do wonder if that extracted controlmap.txt file is still needed.

Edited by belegost
  • belegost changed the title to [SOLVED][QUERY] Unbind vanilla hot keys and leave them blank
Posted (edited)
8 minutes ago, belegost said:

Now, I do wonder if that extracted controlmap.txt file is still needed.

 

I use it to unmap the numpad from favourites, so that I can use those 9+ keys for other stuff.

 

Edit: Also, quite interesting that the key disappeared entirely from the menu too.

Edited by traison
Posted
1 hour ago, traison said:

I use it to unmap the numpad from favourites

Oh? Please, tell me more.

 

1 hour ago, traison said:

quite interesting that the key disappeared entirely

Nothing of value was lost.

Posted
Hotkey1				0x02    			0xff	0x0004				0	0	0	0x908
Hotkey2				0x03    			0xff	0x0008				0	0	0	0x908
Hotkey3				0x04    			0xff	0xff				0	0	0	0x908
Hotkey4				0x05    			0xff	0xff				0	0	0	0x908
Hotkey5				0x06    			0xff	0xff				0	0	0	0x908
Hotkey6				0x07    			0xff	0xff				0	0	0	0x908
Hotkey7				0x08    			0xff	0xff				0	0	0	0x908
Hotkey8				0x09    			0xff	0xff				0	0	0	0x908

 

Posted
2 minutes ago, traison said:
Hotkey1				0x02    			0xff	0x0004				0	0	0	0x908
Hotkey2				0x03    			0xff	0x0008				0	0	0	0x908
Hotkey3				0x04    			0xff	0xff				0	0	0	0x908
Hotkey4				0x05    			0xff	0xff				0	0	0	0x908
Hotkey5				0x06    			0xff	0xff				0	0	0	0x908
Hotkey6				0x07    			0xff	0xff				0	0	0	0x908
Hotkey7				0x08    			0xff	0xff				0	0	0	0x908
Hotkey8				0x09    			0xff	0xff				0	0	0	0x908

 

 

Awesome.

 

Dude/lass/Apache helicopter, if you ever travel around my parts, hit me up, maybe we can arrange for a drink. I owe you for this one.

Posted
22 minutes ago, Dm0n said:

Sooo,

I can use this to unmap F5 and prevent unvoluntary quicksaving? Mara bless you.

Why would you do that, when you can make it so pressing Quicksave will create a regular, hard save instead?

Posted (edited)
5 hours ago, Dm0n said:

Sooo,

I can use this to unmap F5 and prevent unvoluntary quicksaving? Mara bless you.

 

Maybe. Considering we (or I certainly) don't know anything about the file format in the ControlMap_Custom.txt file, its entirely possible the fix would have to be game version specific or perhaps even personal. I'd suggest you edit your file yourself, rather than use any of the offsets I've posted in this thread. All you need is the hex value of the scancode you currently have bound to the action you want to disable. These can be found online, but keep in mind that scancodes may change with the make and model of your keyboard. For the most part they stay the same I'd say, but there could be differences. Find this byte in the ControlMap_Custom.txt file and change it to 0xff.

 

Edit: Also keep in mind that since the option disappears from the menu, doing this edit in reverse is considerably more difficult. Make sure you have a way to undo the changes if you don't want to have to reset your controls for it.

Edited by traison
Posted (edited)
40 minutes ago, traison said:

the option disappears from the menu

I have found a side-effect of this. F9 is now not available in RaceMenu. Load Colour and Load Preset buttons are unbound. They can still be clicked with a mouse though. Minor inconvenience, but I do wonder what else will pop-up.

 

rm_f9_01.jpg.9976d07d6957a5686e80aae4a49973fa.jpg rm_f9_02.jpg.01afc3954d854e48b98aa67b44cc4ba5.jpg

 

 

 

Anyway, I am still immensely satisfied, especially with the fact you showed me how to free up numerical keybindings.

I went looking for one button, but found 10.

 

tumblr_mduuu2yXpz1r1qffbo5_500.gifv

Edited by belegost
Posted (edited)

I mapped out the file format of controlmap_custom.txt. Here's a py parser:

Spoiler
import sys, struct, os, win32api

LEN_HEADER = 3 # Presumed header size
LEN_TERMINATOR = 1 # Last byte in file
LEN_RECORD = 5 # Size of a keybind record

MAPVK_VSC_TO_VK_EX = 3

def main(argv):
    #argc = len(argv)
    
    for arg in argv[1:]:
        parse(arg)

def parse(file):
    lenFile = os.path.getsize(file)
    lenData = lenFile - LEN_HEADER - LEN_TERMINATOR
    
    test = lenData % LEN_RECORD
    if test != 0:
        print('Unexpected data length.')
        return
    
    numRecords = int(lenData / LEN_RECORD)
    records = []
    
    with open(file, 'rb') as f:
        magic, unk1 = struct.unpack('hB', f.read(LEN_HEADER))
        
        for i in range(numRecords):
            actionId, unk2, unk3, unk4, scancode = struct.unpack('BBBBB', f.read(LEN_RECORD))
            
            vk = win32api.MapVirtualKey(scancode, MAPVK_VSC_TO_VK_EX)
            
            records.append({
                'actionId': actionId,
                'scancode': hex(scancode),
                'virtualkey': hex(vk)
            })
    
    print('magic', magic)
    print('unk1', unk1)
    
    for record in records:
        print(record)

if __name__ == '__main__':
    main(sys.argv)

 

I do not see any way to unbind quicksave/quickload without it also affecting RaceMenu. I suspect what's going on here is that we unbind a key from an action, and this action is used in different ways depending on the situation. Without a game engine edit to separate the actions, there's nothing we can do from this controlmap file. It is still useful for rebinding keys; if you for instance want to use the function keys for something else, you can move quickload/save out of the way with this.

 

No credit needed for using code or ideas from the parser above. If you're making a tool for this and expand upon the idea, or perhaps even solve some of the issues in this thread, post a link to your tool when its done.

 

Edit: I'll consider making a GUI for editing keybinds in this file if there's interest for it. If this is something you want, give this post a like or something to show interest.

Edited by traison
Posted (edited)
16 minutes ago, traison said:

I'll consider making a GUI for editing keybinds in this file if there's interest for it.

If you ever do it, make it a regular mod with a download page and all the bells and whistles please, not a download that's lost in a random thread.

Otherwise nobody will find it.

Edited by belegost
  • 7 months later...
Posted (edited)

Goddammit I forgot to bookmark this thread for myself and spent 2 days searching for it, because after switching to new Skyrim installation I needed to remind myself how to unbind numpad keys. No F9 issues for now, but I may or may not revisit this thread in the future to kindly ask for a fix.

 

@traison I reiterate: if you're ever traveling, hit me up, and if you happen to be traveling around my parts, I'll buy you a drink. Yes, I am that grateful for that one, single advice.

Edited by belegost

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...