|
|
(29 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| Change Populous default keys using programming or hex editor. The file was decoded on November 23rd 2013.
| | #REDIRECT [[Keys_Configuration_Format]] |
| | |
| All the addresses are correct, but my typing is not. If there is a typo or wrong address let me know or correct it!
| |
| | |
| == Introduction ==
| |
| Key def.dat is a file that you have to create by using the Populous Key editor included in the game ([http://www.brandanlasley.com/releases/Thread/Popre/Best%20Patches/key_def.dat Key def download]). Once you save, the file is created and located in ./save/Key def.dat. The file is structured similar to the [[header format|Header Format]]. Each key is stored in a single hexadecimal address, the combination key is always 1 in front of it. So if 0x1 is pause 0x2 will be the combination key. The combination key is like shift + key but in the file format it reads key + shift.
| |
| | |
| Each key needs to be converted to hexadecimal to a integer. This can be done in programming by simply reading information from the address, else if you're using a hex editor (like HxD) you'll have to do it by hand using a converter like [http://home.paulschou.net/tools/xlate/ Paulschou] (use the values from CHAR), once you got the number it should range from 1-105, if it exceeds that, you're reading the wrong location or you got your math wrong. In [[#In Programming]] you will be told how to convert the values from keycode (the integer number you just got) to ASCII using programming methods. If you want to change them by hand without programming, all the key definitions are on this list [http://www.penticoff.com/nb/kbds/ibm104kb.htm keycode list for US QWERTY], remember that you have to convert those numbers back to hex from the [http://home.paulschou.net/tools/xlate/ Paulschou]'s link, or by programming.
| |
| | |
| This is not a complete decode of the file, however its most of the common key commands for Populous, if you find more, feel free to add them!
| |
| | |
| == Combination keys ==
| |
| The combination keys use a different keycode format. I don't know if there is a pattern to this or if the game has custom keycodes for these.
| |
| | |
| Not all of these are tested.
| |
| | |
| No Combo key = 0
| |
| Shift = 1
| |
| Shift + CTRL (or App button?) = 3
| |
| CTRL = 4
| |
| Shift + ALT = 5
| |
| Ctrl + alt = 6
| |
| Shift + ctrl + alt = 7
| |
| Alt = 20
| |
| == Available keys ==
| |
| | |
| === Toggle view key ===
| |
| 0x23 = Key
| |
| 0x24 = Combo key
| |
| | |
| === Encyclopaedia key ===
| |
| 0x38 = Key
| |
| 0x39 = Combo key
| |
| | |
| | |
| === Set Map Marker 1 key ===
| |
| 0x35 = Key
| |
| 0x36 = Combo key
| |
| | |
| | |
| === Set Map Marker 2 key ===
| |
| 0x68 = Key
| |
| 0x69 = Combo key
| |
| | |
| | |
| === Set Map Marker 3 key ===
| |
| 0x83 = Key
| |
| 0x84 = Combo key
| |
| | |
| | |
| === Set Map Marker 4 key ===
| |
| 0x88 = Key
| |
| 0x99 = Combo key
| |
| | |
| | |
| === Goto Map Marker 1 ===
| |
| 0x113 = Key
| |
| 0x114 = Combo key
| |
| | |
| | |
| === Goto Map Marker 2 ===
| |
| 0x128 = Key
| |
| 0x129 = Combo key
| |
| | |
| | |
| === Goto Map Marker 3 ===
| |
| 0x143 = Key
| |
| 0x144 = Combo key
| |
| | |
| | |
| === Goto Map Marker 4 ===
| |
| 0x158 = Key
| |
| 0x159 = Combo key
| |
| | |
| | |
| === Zoom view in key ===
| |
| 0x173 = Key
| |
| 0x174 = Combo key
| |
| | |
| | |
| === Zoom view out key ===
| |
| 0x188 = Key
| |
| 0x189 = Combo key
| |
| | |
| | |
| === Quick Load key ===
| |
| 0x203 = Key
| |
| 0x204 = Combo key
| |
| | |
| | |
| === Quick Save key ===
| |
| 0x218 = Key
| |
| 0x219 = Combo key
| |
| | |
| | |
| === Zoom to shaman key ===
| |
| 0x233 = Key
| |
| 0x234 = Combo key
| |
| | |
| | |
| === Chat message key ===
| |
| 0x248 = Key
| |
| 0x249 = Combo key
| |
| | |
| | |
| === Command Tracking key ===
| |
| 0x263 = Key
| |
| 0x264 = Combo key
| |
| * Had problems w/ this key
| |
| | |
| | |
| === Release guarding people key ===
| |
| 0x278 = Key
| |
| 0x279 = Combo key
| |
| | |
| | |
| === Toggle Level Stats key ===
| |
| 0x293 = Key
| |
| 0x294 = Combo key
| |
| | |
| | |
| === Rotate building key ===
| |
| 0x308 = Key
| |
| 0x309 = Combo key
| |
| | |
| | |
| === Assign people to group 1 key ===
| |
| 0x323 = Key
| |
| 0x324 = Combo key
| |
| | |
| | |
| === Assign people to group 2 key ===
| |
| 0x338 = Key
| |
| 0x339 = Combo key
| |
| | |
| | |
| === Assign people to group 3 key ===
| |
| 0x353 = Key
| |
| 0x354 = Combo key
| |
| | |
| | |
| === Assign people to group 4 key ===
| |
| 0x368 = Key
| |
| 0x369 = Combo key
| |
| | |
| | |
| === Assign people to group 5 key ===
| |
| 0x383 = Key
| |
| 0x384 = Combo key
| |
| | |
| | |
| === Assign people to group 6 key ===
| |
| 0x398 = Key
| |
| 0x399 = Combo key
| |
| | |
| | |
| === Select people in group 1 key ===
| |
| 0x413 = Key
| |
| 0x414 = Combo key
| |
| | |
| | |
| === Select people in group 2 key ===
| |
| 0x428 = Key
| |
| 0x429 = Combo key
| |
| | |
| | |
| === Select people in group 3 key ===
| |
| 0x443 = Key
| |
| 0x444 = Combo key
| |
| | |
| === Select people in group 4 key ===
| |
| 0x458 = Key
| |
| 0x459 = Combo key
| |
| | |
| === Select people in group 5 key ===
| |
| 0x473 = Key
| |
| 0x474 = Combo key
| |
| | |
| | |
| === Select people in group 6 key ===
| |
| 0x488 = Key
| |
| 0x489 = Combo key
| |
| | |
| | |
| === Zoom to people in group 1 key ===
| |
| 0x503 = Key
| |
| 0x504 = Combo key
| |
| | |
| | |
| === Zoom to people in group 2 key ===
| |
| 0x518 = Key
| |
| 0x519 = Combo key
| |
| | |
| | |
| === Zoom to people in group 3 key ===
| |
| 0x533 = Key
| |
| 0x534 = Combo key
| |
| | |
| | |
| === Zoom to people in group 4 key ===
| |
| 0x548 = Key
| |
| 0x549 = Combo key
| |
| | |
| | |
| === Zoom to people in group 5 key ===
| |
| 0x563 = Key
| |
| 0x564 = Combo key
| |
| | |
| | |
| === Zoom to people in group 6 key ===
| |
| 0x578 = Key
| |
| 0x579 = Combo key
| |
| | |
| | |
| === Zoom to Reincarnation site key ===
| |
| 0x593 = Key
| |
| 0x594 = Combo key
| |
| | |
| | |
| === Toggle Local Selection key ===
| |
| 0x608 = Key
| |
| 0x609 = Combo key
| |
| | |
| | |
| === Reselect last selection key ===
| |
| 0x623 = Key
| |
| 0x624 = Combo key
| |
| | |
| | |
| === Reorient view key ===
| |
| 0x638 = Key
| |
| 0x639 = Combo key
| |
| | |
| | |
| === Display last dialog key ===
| |
| 0x653 = Key
| |
| 0x654 = Combo key
| |
| | |
| | |
| === Toggle auto deselect key ===
| |
| 0x668 = Key
| |
| 0x669 = Combo key
| |
| | |
| | |
| === Call to arms key ===
| |
| 0x683 = Key
| |
| 0x684 = Combo key
| |
| | |
| | |
| === Scatter people key ===
| |
| 0x698 = Key
| |
| 0x699 = Combo key
| |
| | |
| == In Programming ==
| |
| | |
| === VB .NET ===
| |
| This is code that will decode all the unknown keys seen above to ACSII, [http://www.theasciicode.com.ar/|ASCII table]
| |
| | |
| <source lang="vb">
| |
| Imports System.Runtime.InteropServices
| |
| Imports System.IO
| |
| | |
| Module Module1
| |
| Public Declare Function GetKeyboardLayout Lib "user32" (ByVal idThread As UInteger) As IntPtr
| |
| | |
| <DllImport("User32.dll")> _
| |
| Public Function GetKeyboardLayout(idThread As Integer) As IntPtr
| |
| End Function
| |
| | |
| <DllImport("user32.dll")> _
| |
| Public Function MapVirtualKeyEx(uCode As Integer, uMapType As Integer, dwhkl As Integer) As Integer
| |
| End Function
| |
| | |
| <DllImport("user32.dll")> _
| |
| Private Function GetKeyboardState(ByVal keyState() As Byte) As Boolean
| |
| End Function
| |
| | |
| <DllImport("user32.dll")> _
| |
| Public Function ToAsciiEx(uVirtKey As Integer, uScanCode As Integer, lpKeyState As Byte, lpChar As Integer, uFlags As Integer, dwhkl As Integer) As Integer
| |
| End Function
| |
| | |
| Dim strings = New String() {"Pause", _
| |
| "Toggle View", _
| |
| "Encyclopaedia", _
| |
| "Set map marker 1", _
| |
| "Set map marker 2", _
| |
| "Set map marker 3", _
| |
| "Set map marker 4", _
| |
| "Goto map marker 1", _
| |
| "Goto map marker 2", _
| |
| "Goto map marker 3", _
| |
| "Goto map marker 4", _
| |
| "Zoom in", _
| |
| "Zoom out", _
| |
| "Quick load", _
| |
| "Quick save", _
| |
| "Goto shaman", _
| |
| "Chat/Message", _
| |
| "Command tracking", _
| |
| "Release Guarding", _
| |
| "Toggle level stats", _
| |
| "Rotate building", _
| |
| "Assign units to group 1", _
| |
| "Assign units to group 2", _
| |
| "Assign units to group 3", _
| |
| "Assign units to group 4", _
| |
| "Assign units to group 5", _
| |
| "Assign units to group 6", _
| |
| "Select units to group 1", _
| |
| "Select units to group 2", _
| |
| "Select units to group 3", _
| |
| "Select units to group 4", _
| |
| "Select units to group 5", _
| |
| "Select units to group 6", _
| |
| "Goto units to group 1", _
| |
| "Goto units to group 2", _
| |
| "Goto units to group 3", _
| |
| "Goto units to group 4", _
| |
| "Goto units to group 5", _
| |
| "Goto units to group 6", _
| |
| "Goto reincarnation site", _
| |
| "Toggle local selection", _
| |
| "Reselect last selection", _
| |
| "Reorient view", _
| |
| "Display last dialog", _
| |
| "Toggle auto deselect", _
| |
| "Call to arms", _
| |
| "Scatter people"}
| |
| | |
| Dim keys = New Integer() {8, 23, 38, 53, 68, 83, 98, 113, 128, 143, _
| |
| 158, 173, 188, 203, 218, 233, 248, 263, 278, _
| |
| 293, 308, 323, 338, 353, 368, 383, 398, 413, _
| |
| 428, 443, 458, 473, 488, 503, 518, 533, 548, _
| |
| 563, 578, 593, 608, 623, 638, 653, 668, 683, _
| |
| 698}
| |
| | |
| Dim populousin As String = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Bullfrog Productions Ltd\Populous: The Beginning", "InstallPath", "")
| |
| | |
| Sub Main()
| |
| | |
| Dim i = 0
| |
| For Each Strs In strings
| |
| | |
| Dim combokey = Reader(keys(i) + 1).ToString
| |
| On Error Resume Next
| |
| If combokey = 0 Then
| |
| combokey = "NONE"
| |
| ElseIf combokey = 2 Then
| |
| combokey = "CTRL"
| |
| ElseIf combokey = 3 Then
| |
| combokey = "SHIFT + CTRL"
| |
| ElseIf combokey = 5 Then
| |
| combokey = "SHIFT + ALT"
| |
| ElseIf combokey = 6 Then
| |
| combokey = "CTRL + ALT"
| |
| ElseIf combokey = 7 Then
| |
| combokey = "SHIFT + CTRL + ALT"
| |
| ElseIf combokey = 3 Then
| |
| combokey = "APP"
| |
| ElseIf combokey = 20 Then
| |
| combokey = "ALT"
| |
| ElseIf combokey = 1 Then
| |
| combokey = "SHIFT"
| |
| Else
| |
| combokey = "NONE"
| |
| End If
| |
| Console.WriteLine(Strs & " = " & combokey & " + " & (scan2ascii(Reader(keys(i)))).ToString & vbNewLine)
| |
| i = i + 1
| |
| Next
| |
| | |
| Console.ReadLine()
| |
| End Sub
| |
| | |
| Public Function scan2ascii(ByVal scancode)
| |
| Dim hKL As IntPtr = GetKeyboardLayout(0)
| |
| | |
| Dim State = New Byte(255) {}
| |
| | |
| If GetKeyboardState(State) = False Then
| |
| Return 0
| |
| End If
| |
| | |
| Return MapVirtualKeyEx(scancode, 1, hKL)
| |
| End Function
| |
| | |
| Private Sub Writer(ByVal value As Byte, ByVal position As Integer)
| |
| Dim Keysconfig As Boolean = My.Computer.FileSystem.FileExists(populousin & "\SAVE\key_def.dat")
| |
| | |
| If Keysconfig = False Then
| |
| Console.Write("Error: Populous keys configuration file could not be loaded, download it off the wiki and place it into ./saves/ file of pop.")
| |
| Console.ReadLine()
| |
| End
| |
| End If
| |
| | |
| Dim writer As New BinaryWriter(New FileStream(populousin & "\SAVE\key_def.dat", FileMode.Open))
| |
| writer.BaseStream.Position = position
| |
| writer.Write(value)
| |
| writer.Close()
| |
| End Sub
| |
| | |
| Function Reader(ByVal position As Integer)
| |
| Dim Keysconfig As Boolean = My.Computer.FileSystem.FileExists(populousin & "\SAVE\key_def.dat")
| |
| | |
| If Keysconfig = False Then
| |
| Console.Write("Error: Populous keys configuration file could not be loaded, download it off the wiki and place it into ./saves/ file of pop.")
| |
| Console.ReadLine()
| |
| End
| |
| End If
| |
| | |
| Dim breader As New BinaryReader(New FileStream(populousin & "\SAVE\key_def.dat", FileMode.Open))
| |
| breader.BaseStream.Position = position
| |
| Dim output = breader.Read
| |
| breader.Close()
| |
| Return output
| |
| End Function
| |
| | |
| End Module
| |
| </source>
| |
| | |
| === C++ ===
| |
| To be added
| |