(inSky)

 找回密码
 立即加入

QQ登录

只需一步,快速开始

查看: 1707|回复: 3

【转】Falcon键盘文件的内部工作

[复制链接]
发表于 2010-2-4 19:41:36 | 显示全部楼层 |阅读模式
昨天无法联网,进行了一番硬盘大整理,获得意外之喜,我还以为没有备份,原来只是隐藏得深了一些。

Dunc原贴,海侧卫翻译

好...
某时某人彻底地向我们解释了F4键盘文件的内部工作,下面是FalconAF和espacially多控制器性能的介绍,这些格式是可以再次改变的(或者说可以扩展)。因此我考虑再次了解这个文件、格式和结构可能是一个好注意。或许一些人可以找到有用的信息 。
以下在当前的FalconAF版本(patch 1.05)是可用的,我不希望找到没有写上我的名字张贴的这一文章。

第一部分:在哪儿找到这个文件

谁都知道,FalconAF键盘文件定义了游戏内触发的性能和不同输入设备如你用的键盘和摇杆之间的捆绑。在FalconAF安装文件的"config"文件夹中可以找到你的键盘文件,默认位置是:
"C:\Program Files\Lead Pursuit\Battlefield Operations\config\"
用于游戏的键盘文件全部以".key"为后缀,LP提供了这些文件的备份,后缀是".orig"。
让我们来看这个文件 - 简单的用文本编辑器打开。可以找到许多命令行。每一行描述一个特定的捆绑。现在挑选一行来作为例子...
SimToggleAutopilot 1076 0 0X1E 0 0 0 1 "Ckpit-Autopilot"
基本上,所有的命令行看上去都是这样样子。第一部分命名游戏中描述这一行的一个内部功能名字,然后一些编号是键/输入的捆绑,最后是人们(我们好幸运啊)-可以读懂的实际做什么的功能,让我们进入细节...
回复

使用道具 举报

 楼主| 发表于 2010-2-4 19:43:06 | 显示全部楼层
第二部分:键盘捆绑

现在用我们挑选的命令行来介绍键盘捆绑。这样可以有一个深入的观察(我利用颜色在不同部分间进行区别):
SimToggleAutopilot 1076 0 0X1E 0 0 0 1 \"Ckpit-Autopilot\"
第一部分(SimToggleAutopilot) 描述在这儿定义的游戏功能。这是FalconAF对一些事物的定义,是你不能选择的。大部分可用的功能都能在cockpitbuilders.key文件中找到。
第二部分(1076) 定义在游戏内你看到的2D座舱中的一个ID。这些ID基本上在座舱定义内使用 (在art/ckptart文件内的某处),这儿并不涉及键盘捆绑。只是说明你点击座舱图形(按钮或开关)切换的是哪一个特定的ID。千万注意:你不能调整这个编号。否则就会让某一按钮没有功能,或者你丧失了座舱鼠标功能。
如果这个号码是\"-1\"就意味着这儿没有2D座舱按钮/开关分配到这个功能。
第三部分(0)看上去不会用到,它总是\"0\"表示键盘捆绑。同样不要理它... (在“老”Falcon的日子里,这儿也会使用 \"1\",意味着仅使用鼠标座舱输入(第二部分)来触发功能,同时键盘捆绑不使用。FalconAF中没有使用)。
第四部分(0X1E 0),有趣的来了。基本上你可以看到二组号码:\"0X1E\",描述分配的键盘按钮,而后面的\"0\",则描述需要什么修正才能使用(Alt, Shift, Ctrl或组合键)。
让我们看一下修正键。这儿有8种不同的修正:
\"0\" = (无修正)
\"1\" = Shift
\"2\" = Ctrl
\"3\" = Shift+Ctrl
\"4\" = Alt
\"5\" = Shift+Alt
\"6\" = Ctrl+Alt
\"7\" = Shift+Ctrl+Alt
这样,这些组合键就必须和前面触发功能的定义键一起按下。
好了,下面就是可用键的列表 - 是指US键盘布局(for those of you who *really* want to know it: those are costmized XT keycodes, not AT!):
注:上面提及的“修正键” (Shift, Ctrl, Alt)和在FalconAF中不能修改的单键,在下面的列表中没有显示。呵呵,这就是你为什么不能区别left Shift/Ctrl/Alt和right Shift/Ctrl/Alt的原因。
\"0X1E\" = \"A\"
\"0X30\" = \"B\"
\"0X2E\" = \"C\"
\"0X20\" = \"D\"
\"0X12\" = \"E\"
\"0X21\" = \"F\"
\"0X22\" = \"G\"
\"0X23\" = \"H\"
\"0X17\" = \"I\"
\"0X24\" = \"J\"
\"0X25\" = \"K\"
\"0X26\" = \"L\"
\"0X32\" = \"M\"
\"0X31\" = \"N\"
\"0X18\" = \"O\"
\"0X19\" = \"\"
\"0X10\" = \"Q\"
\"0X13\" = \"R\"
\"0X1F\" = \"S\"
\"0X14\" = \"T\"
\"0X16\" = \"U\"
\"0X2F\" = \"V\"
\"0X11\" = \"W\"
\"0X2D\" = \"X\"
\"0X15\" = \"Y\"
\"0X2C\" = \"Z\"
\"0X1\" = \"Escape\"
\"0X3B\" = \"F1\"
\"0X3C\" = \"F2\"
\"0X3D\" = \"F3\"
\"0X3E\" = \"F4\"
\"0X3F\" = \"F5\"
\"0X40\" = \"F6\"
\"0X41\" = \"F7\"
\"0X42\" = \"F8\"
\"0X43\" = \"F9\"
\"0X44\" = \"F10\"
\"0X57\" = \"F11\"
\"0X58\" = \"F12\"
\"0XB7\" = \"rintScreen\"
\"0X46\" = \"ScrollLock\"
\"0X29\" = \" ~ \"
\"0X2\" = \"1\"
\"0X3\" = \"2\"
\"0X4\" = \"3\"
\"0X5\" = \"4\"
\"0X6\" = \"5\"
\"0X7\" = \"6\"
\"0X8\" = \"7\"
\"0X9\" = \"8\"
\"0XA\" = \"9\"
\"0XB\" = \"0\"
\"0XC\" = \" - \"
\"0XD\" = \" = \"
\"0XE\" = \"Backspace\"
\"0XF\" = \"Tabulator\"
\"0X1A\" = \" [ \"
\"0X1B\" = \" ] \"
\"0X2B\" = \" \\ \"
\"0X3A\" = \"CapsLock\"
\"0X27\" = \" ; \"
\"0X28\" = \" \' \"
\"0X1C\" = \"Enter\"
\"0X33\" = \" , \"
\"0X34\" = \" . \"
\"0X35\" = \" / \"
\"0XDB\" = \"Win(left)\"
\"0X39\" = \"Space\"
\"0XDC\" = \"Win(right)\"
\"0XDD\" = \"Menu\"
\"0XD2\" = \"Insert\"
\"0XD3\" = \"Delete\"
\"0XC7\" = \"Home\"
\"0XCF\" = \"End\"
\"0XC9\" = \"ageUp\"
\"0XD1\" = \"ageDown\"
\"0XC8\" = \"CursorUp\"
\"0XD0\" = \"CursorDown\"
\"0XCB\" = \"CursorLeft\"
\"0XCD\" = \"CursorRight\"
\"0X45\" = \"NumLock\"
\"0XB5\" = \"Num/\"
\"0X37\" = \"Num*\"
\"0X4A\" = \"Num-\"
\"0X4E\" = \"Num+\"
\"0X52\" = \"Num0\"
\"0X4F\" = \"Num1\"
\"0X50\" = \"Num2\"
\"0X51\" = \"Num3\"
\"0X4B\" = \"Num4\"
\"0X4C\" = \"Num5\"
\"0X4D\" = \"Num6\"
\"0X47\" = \"Num7\"
\"0X48\" = \"Num8\"
\"0X49\" = \"Num9\"
\"0X53\" = \"NumDel\"
\"0X9C\" = \"NumEnter\"
\"0XFFFFFFFF\" = \"(未分配)\"
正如你所看到的,有一个可用的未分配键(0XFFFFFFFF)。
对不起,列出了这么一张长长长的列表,我只是为了确定一下...
好,第五部分 (0 0)和第四部分基本上同样工作。第一个号码是键盘,第二个号码是修正。那么这儿有些什么秘密呢?
秘密就是:这个组合键你必须在第四部分定义的组合键按下之前来按。明白?让我们挑选一个例子,因为这次我们要使用基本上不需要第二个组合键的\"0 0\",好吧,这儿有一个不错的例子(只说明有颜色部分):
SaveCockpitDefaults -1 0 0X1F 0 0X2E 4 -1 \"Sim-cockpit setup save\"
第一个组合键是 \"0X1F 0\",现在翻译成\"无修正\"和\"S键\"。或者简单的\"S\"。第二个组合键是\"0X2E 4\",翻译成 \"Alt\"和\"C键\"。
这样就意味着要触发功能,你要这样按:
首先ALT+C然后S
了解?
但是,这儿有一个双组合键的限制。在第五部分你不能什么东西都能选择(我们的例子中是ALT+C)。这个可用的组合键首先必须在键盘文件中定义为常规功能以便使用。这儿的命令行就是默认的定义:
CommandsSetKeyCombo -1 0 0X2C 2 0 0 -1 \"Key-Combination Ctrl-Z\"
CommandsSetKeyCombo -1 0 0X2D 2 0 0 -1 \"Key-Combination Ctrl-X\"
CommandsSetKeyCombo -1 0 0X2E 4 0 0 -1 \"Key-Combination Alt-C\"
这意味着你在其它功能行的第五部分可以使用这三个组合(0X2C 2, 0X2D 2, 0X2E 4)。我从没有定义过不同的组合,但我推测进行修改也应该没问题 。
第六部分(1)定义你在设置屏幕看到并分配的功能。这个数字可能是:
\"1\" = 你可以看到并分配这个功能
\"-1\" = 你可以看到但不能分配(比如Q、W、R、T)
\"-2\" = 你不能看到也不能改变
在看cockpitbuilders.key文件时,你会看到这儿有一些隐藏的功能...
最后也是最少的,第七部分(\"Ckpit-Autopilot\"),就是你在FalconAF设置屏幕看到的功能描述 。
上面这些都是关于键盘的...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-2-4 19:45:05 | 显示全部楼层
第三部分:DirectX捆绑

对,你不仅需要使用键盘捆绑,你也需要使用使用DirectX按钮分配来切换一个功能。可能你已经想到了,DirectX的捆绑行和我们已看到的有很大不同。这样,让我们挑选两个例子,为什么要两个例子?因为随着你的PC链接的是一个DirectX装置还是多个DirextX装置,这儿会有一些差别。
首先,只有一个DirectX装置的命令行例子:
SimTrigger 0 -1 -2 0 0x0 0
第二个命令行例子,多个DirectX装置:
SimTrigger 0 -1 -2 0 0x0 0 {46D7A990-DCF4-11D9-8001-444553540000}
正如你所见,仅有的区别是排在后面的一个长长长长的标识符。让我们从标识符开始,因为两个例子前面的部分是相同的。长标识符不过是标识了用于产生输入的DirectX装置。呵呵,你应该已经想到了,是的,这就是它全部的含义...
现在的问题\"我如何知道哪个装置匹配哪个标识符?\"真的,我不知道在哪儿找到这个定义。我搜索了dxdiag, msinfo...的产品注册码但很不幸运。但是,如果只联接了两个装置,那我就可以试验。上面的标识符{46D7A990- DCF4-11D9-8001-444553540000} 就是我的Cougar。在FalcomAF的设置屏幕中用不同控制器分配一个功能,然后注意一下你的每一个控制器就可以知道了。
注:不必搜索产品注册码或其它东西也能获得控制器的ID。只要在FalconAF设置屏幕分配一个DX按钮,FalconAF就会把这个ID写进键盘文件。打开这个文件,看一下新的输入,这儿就是!
在我们详细介绍DirectX命令行之前,我想你应该明白下面的东东:
如果你分配了一个DX按钮到一个已经有一个键盘输入分配的游戏功能,你就不能再用键盘输入覆盖!代替为,键盘输入和DX输入现在都起作用。是的,这意味着在你的键盘文件中同一个游戏功能名称有两行命令。OK!
现在回到详细解释。我用一个没有标识符的命令行来说明:
SimTrigger 0 -1 -2 0 0x0 0
第一部分(\"SimTrigger\")是触发的游戏功能,没新的东西。
让我们跳到第三部分(\"-1\"),因为这部分和前面已经描述的类似。象第二部分的键盘捆绑一样,第三部分描述点击鼠标触发同样功能的2D座舱ID。在我们的例子中,\"-1\" 意味着没有座舱ID分配。
第二部分(\"0\")是分配到这个功能的DX装置的按钮。要知道FalconAF计数按钮从\"0\"开始, 但是大部分摇杆却是从“1”开始。这样,如果你的摇杆如果有四个按钮1、2、3、4,FalconAF就会将它们标识为0、1、2、3。
注:如果你不只一个控制器,每个控制器的DX按钮都从0开始。FalconAF通过上面说过的命令行末尾的标识符/GUID来区别不同的控制器。
但是,除非第四部分(\"-2\") 是表示DX装置的按钮可被使用的\"-2\",第二部分(\"0\")才会相关。如果第四部分不是\"-2\",第二部分看上去就总是\"0\"。如果第四部分是\"-2\",那么第五部分就一定是\"0\" 。
我只注意到第四部分在一种情况下才是\"-3\"。这意味着你的输入终止使用的不是常规DX按钮,而是控制POV/FOV方向的苦力帽开关。如果在这种情况下,第二部分是不使用的并且总是 \"0\",但是,现在第五部分(\"0\")用于确定苦力帽的方向:
\"0\" = Hat UP
\"2\" = Hat RIGHT
\"4\" = Hat DOWN
\"6\" = Hat LEFT
我推测数字\"1\"导致\"Hat UP-RIGHT\",数字\"3\"导致\"Hat RIGHT-DOWN\"等等,但我没有验证过 。
第六部分(\"0x0 0\")看上去总是\"0x0 0\",我从没有看到其它的数字。
最后也是最少的,如果你有第七部分,那就是你摇杆的标识符。

迷糊了吧?好,如果你看到一个完整的例子就不难了。这儿是我那很老老老老的僚机可以做些什么的命令(请忽视下面例子中实际的游戏功能,我只是胡乱分配了一些东西):
\"僚机触发(按钮1)\"
SimLeftHptOff 0 -1 -2 0 0x0 0 {CB7F0BB0-8F1F-11DA-8001-444553540000}
\"僚机按钮2\"
SimLeftHptOn 1 -1 -2 0 0x0 0 {CB7F0BB0-8F1F-11DA-8001-444553540000}
\"僚机按钮3\"
SimMAPOff 2 -1 -2 0 0x0 0 {CB7F0BB0-8F1F-11DA-8001-444553540000}
\"僚机按钮4\"
SimMAPOn 3 -1 -2 0 0x0 0 {CB7F0BB0-8F1F-11DA-8001-444553540000}
\"僚机按钮5\"
SimDLOff 4 -1 -2 0 0x0 0 {CB7F0BB0-8F1F-11DA-8001-444553540000}
\"僚机按钮6\"
SimDLOn 5 -1 -2 0 0x0 0 {CB7F0BB0-8F1F-11DA-8001-444553540000}
\"僚机按钮7\"
SimGPSOff 6 -1 -2 0 0x0 0 {CB7F0BB0-8F1F-11DA-8001-444553540000}
\"僚机苦力帽向上\"
SimUFCOff 0 -1 -3 0 0x0 0 {CB7F0BB0-8F1F-11DA-8001-444553540000}
\"僚机苦力帽向右\"
SimMFDOn 0 -1 -3 2 0x0 0 {CB7F0BB0-8F1F-11DA-8001-444553540000}
\"僚机苦力帽向下\"
SimUFCOn 0 -1 -3 4 0x0 0 {CB7F0BB0-8F1F-11DA-8001-444553540000}
\"僚机苦力帽向左\"
SimMFDOff 0 -1 -3 6 0x0 0 {CB7F0BB0-8F1F-11DA-8001-444553540000}

第四部分:关于多控制器支持的好事情

随着DX捆绑的装置标识符的增加,FalconAF现在能就每个DX装置使用32个DX按钮!这样如果你有三个联接的装置,你就能分配最大到3x32 = 96个DX功能!这意味着全部使用DirectX座舱控制现在变成了可能。
---

好了,说完了。我希望你能找到一些有用的信息。如果里面有一些错误或者你有一些其它的反馈,请让我知道。

干杯!
dunc.
回复 支持 反对

使用道具 举报

发表于 2010-2-5 12:01:07 | 显示全部楼层
GOOD,非常好的文章,很有用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

小黑屋|手机版|Archiver|(inSky)

GMT+8, 2025-4-26 23:10 , Processed in 0.024902 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表