Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

311 lines
15 KiB

  1. #define __DEBUG_MODULE_IN_USE__ CIC_DEVICEDESCRIPTIONS_CPP
  2. #include "stdhdrs.h"
  3. // @doc
  4. /**********************************************************************
  5. *
  6. * @module DeviceDescriptions.cpp |
  7. *
  8. * Tables for parsing HID on specific devices
  9. *
  10. * History
  11. * ----------------------------------------------------------
  12. * Mitchell S. Dernis Original
  13. *
  14. * (c) 1986-1998 Microsoft Corporation. All right reserved.
  15. *
  16. *
  17. **********************************************************************/
  18. using namespace ControlItemConst;
  19. #define HID_USAGE_RESERVED (static_cast<USAGE>(0))
  20. //
  21. // Freestyle Pro - Modifier Table
  22. //
  23. MODIFIER_ITEM_DESC rgFSModifierItems[] =
  24. {
  25. { HID_USAGE_PAGE_BUTTON, (USAGE)10, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 6, ControlItemConst::ucReportTypeInput, 0},
  26. { ControlItemConst::HID_VENDOR_PAGE, ControlItemConst::HID_VENDOR_TILT_SENSOR, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 0, ControlItemConst::ucReportTypeInput, 0}
  27. };
  28. MODIFIER_DESC_TABLE FSModifierDescTable = { 2, 1, rgFSModifierItems};
  29. //
  30. // Freestyle Pro - Axes range table
  31. //
  32. AXES_RANGE_TABLE FSAxesRangeTable = { -512L, 0L, 511L, -512L, 0L, 511L, -256L, 256L, -256L, 256L};
  33. //
  34. // Freestyle Pro - List of ControlItemDesc
  35. //
  36. RAW_CONTROL_ITEM_DESC rgFSControlItems[] =
  37. {
  38. {1L, usButton, HID_USAGE_PAGE_BUTTON, 1, HID_USAGE_GENERIC_POINTER, HID_USAGE_PAGE_GENERIC,
  39. 1, 4, &FSModifierDescTable, (USAGE)1, (USAGE)4, 0L, 0L},
  40. {2L, usButton, HID_USAGE_PAGE_BUTTON, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  41. 1, 6, &FSModifierDescTable, (USAGE)5, (USAGE)9, 0L, 0L},
  42. {3L, usPOV, HID_USAGE_PAGE_GENERIC, 1, HID_USAGE_GENERIC_POINTER, HID_USAGE_PAGE_GENERIC,
  43. 4, 1, &FSModifierDescTable, HID_USAGE_GENERIC_HATSWITCH, HID_USAGE_RESERVED, 0L, 7L},
  44. {4L, usPropDPAD, HID_USAGE_PAGE_GENERIC, 1, HID_USAGE_GENERIC_POINTER, HID_USAGE_PAGE_GENERIC,
  45. 10, 1, &FSModifierDescTable, HID_USAGE_GENERIC_X, HID_USAGE_GENERIC_Y, (LONG)&FSAxesRangeTable, 0L},
  46. {5L, usThrottle, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  47. 6, 1, &FSModifierDescTable, HID_USAGE_GENERIC_SLIDER, HID_USAGE_RESERVED, -32L, 31L}
  48. };
  49. //
  50. // Precision Pro - Modifier Table
  51. //
  52. MODIFIER_ITEM_DESC rgPPModifierItems[] =
  53. {
  54. { HID_USAGE_PAGE_BUTTON, (USAGE)9, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 5, ControlItemConst::ucReportTypeInput, 0}
  55. };
  56. MODIFIER_DESC_TABLE PPModifierDescTable = { 1, 1, rgPPModifierItems};
  57. //
  58. // Precision Pro - Axes range table
  59. //
  60. AXES_RANGE_TABLE PPAxesRangeTable = { -512L, 0L, 511L, -512L, 0L, 511L, -256L, 256L, -256L, 256L};
  61. //
  62. // Precision Pro - List of ControlItemDesc
  63. //
  64. RAW_CONTROL_ITEM_DESC rgPPControlItems[] =
  65. {
  66. {1L, usButton, HID_USAGE_PAGE_BUTTON, 1, HID_USAGE_GENERIC_POINTER, HID_USAGE_PAGE_GENERIC,
  67. 1, 4, &PPModifierDescTable, (USAGE)1, (USAGE)4, 0L, 0L},
  68. {2L, usButton, HID_USAGE_PAGE_BUTTON, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  69. 1, 5, &PPModifierDescTable, (USAGE)5, (USAGE)8, 0L, 0L},
  70. {3L, usPOV, HID_USAGE_PAGE_GENERIC, 1, HID_USAGE_GENERIC_POINTER, HID_USAGE_PAGE_GENERIC,
  71. 4, 1, &PPModifierDescTable, HID_USAGE_GENERIC_HATSWITCH, HID_USAGE_RESERVED, 0L, 7L},
  72. {4L, usAxes, HID_USAGE_PAGE_GENERIC, 1, HID_USAGE_GENERIC_POINTER, HID_USAGE_PAGE_GENERIC,
  73. 10, 1, &PPModifierDescTable, HID_USAGE_GENERIC_X, HID_USAGE_GENERIC_Y, (LONG)&PPAxesRangeTable, 0L},
  74. {5L, usRudder, HID_USAGE_PAGE_GENERIC, 1, HID_USAGE_GENERIC_POINTER, HID_USAGE_PAGE_GENERIC,
  75. 6, 1, &PPModifierDescTable, HID_USAGE_GENERIC_RZ, HID_USAGE_RESERVED, -32L, 31L},
  76. {6L, usThrottle, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  77. 7, 1, &PPModifierDescTable, HID_USAGE_GENERIC_SLIDER, HID_USAGE_RESERVED, -64L, 63L}
  78. };
  79. //
  80. // Zorro - Modifier Table
  81. //
  82. MODIFIER_ITEM_DESC rgZRModifierItems[] =
  83. {
  84. { HID_USAGE_PAGE_BUTTON, (USAGE)9, 0, HID_USAGE_GENERIC_GAMEPAD, HID_USAGE_PAGE_GENERIC, 9, ControlItemConst::ucReportTypeInput, 0},
  85. { ControlItemConst::HID_VENDOR_PAGE, ControlItemConst::HID_VENDOR_PROPDPAD_MODE, 0, HID_USAGE_GENERIC_GAMEPAD, HID_USAGE_PAGE_GENERIC, 1, ControlItemConst::ucReportTypeInput, 0},
  86. { ControlItemConst::HID_VENDOR_PAGE, ControlItemConst::HID_VENDOR_PROPDPAD_SWITCH, 2, 0, ControlItemConst::HID_VENDOR_PAGE, 1, ControlItemConst::ucReportTypeFeatureRW, 0}
  87. };
  88. MODIFIER_DESC_TABLE ZRModifierDescTable = { 3, 1, rgZRModifierItems};
  89. //
  90. // Zorro - Axes range table
  91. //
  92. AXES_RANGE_TABLE ZRAxesRangeTable = { -128L, 0L, 127L, -128L, 0L, 127L, -64L, 64L, -64L, 64L};
  93. //
  94. // Zorro - List of ControlItemDesc
  95. //
  96. RAW_CONTROL_ITEM_DESC rgZRControlItems[] =
  97. {
  98. {1L, usButton, HID_USAGE_PAGE_BUTTON, 0, HID_USAGE_GENERIC_GAMEPAD, HID_USAGE_PAGE_GENERIC,
  99. 1, 9, &ZRModifierDescTable, (USAGE)1, (USAGE)8, 0L, 0L},
  100. {2L, usPropDPAD, HID_USAGE_PAGE_GENERIC, 1, HID_USAGE_GENERIC_POINTER, HID_USAGE_PAGE_GENERIC,
  101. 8, 1, &ZRModifierDescTable, HID_USAGE_GENERIC_X, HID_USAGE_GENERIC_Y, (LONG)&ZRAxesRangeTable, 0L}
  102. };
  103. //
  104. // Zulu - Modifier Table
  105. //
  106. MODIFIER_ITEM_DESC rgZLModifierItems[] =
  107. {
  108. { HID_USAGE_PAGE_BUTTON, (USAGE)9, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 9, ControlItemConst::ucReportTypeInput, 0}
  109. };
  110. MODIFIER_DESC_TABLE ZLModifierDescTable = { 1, 1, rgZLModifierItems};
  111. //
  112. // Zulu - Axes range table
  113. //
  114. AXES_RANGE_TABLE ZLAxesRangeTable = { -512L, 0L, 511L, -512L, 0L, 511L, -256L, 256L, -256L, 256L};
  115. //
  116. // Zulu - List of ControlItemDesc
  117. //
  118. RAW_CONTROL_ITEM_DESC rgZLControlItems[] =
  119. {
  120. {1L, usButton, HID_USAGE_PAGE_BUTTON, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  121. 1, 9, &ZLModifierDescTable, (USAGE)1, (USAGE)8, 0L, 0L},
  122. {2L, usPOV, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  123. 4, 1, &ZLModifierDescTable, HID_USAGE_GENERIC_HATSWITCH, HID_USAGE_RESERVED, 0L, 7L},
  124. {3L, usAxes, HID_USAGE_PAGE_GENERIC, 1, HID_USAGE_GENERIC_POINTER, HID_USAGE_PAGE_GENERIC,
  125. 10, 1, &ZLModifierDescTable, HID_USAGE_GENERIC_X, HID_USAGE_GENERIC_Y, (LONG)&ZLAxesRangeTable, 0L},
  126. {4L, usZoneIndicator, ControlItemConst::HID_VENDOR_PAGE, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  127. 1, 2, &ZLModifierDescTable, HID_VENDOR_ZONE_INDICATOR_X, HID_USAGE_RESERVED, 0x00000003, 0L}
  128. };
  129. //
  130. // ZepLite - Modifier Table
  131. //
  132. MODIFIER_ITEM_DESC rgZPLModifierItems[] =
  133. {
  134. { ControlItemConst::HID_VENDOR_PAGE, ControlItemConst::HID_VENDOR_PEDALS_PRESENT, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 1, ControlItemConst::ucReportTypeInput, 0}
  135. };
  136. MODIFIER_DESC_TABLE ZPLModifierDescTable = { 1, 0, rgZPLModifierItems};
  137. //
  138. // ZepLite - List of ControlItemDesc
  139. //
  140. RAW_CONTROL_ITEM_DESC rgZPLControlItems[] =
  141. {
  142. {1L, usButton, HID_USAGE_PAGE_BUTTON, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  143. 1, 8, &ZPLModifierDescTable, (USAGE)1, (USAGE)8, 0L, 0L},
  144. {2L, usPedal, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  145. 6, 1, &ZPLModifierDescTable, HID_USAGE_GENERIC_Y, HID_USAGE_RESERVED, 0L, 63L},
  146. {3L, usPedal, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  147. 6, 1, &ZPLModifierDescTable, HID_USAGE_GENERIC_RZ, HID_USAGE_RESERVED, 0L, 63L},
  148. {4L, usWheel, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  149. 10, 1, &ZPLModifierDescTable, HID_USAGE_GENERIC_X, HID_USAGE_RESERVED, -512L, 511L},
  150. };
  151. //
  152. // SparkyZep - Modifier Table
  153. //
  154. MODIFIER_ITEM_DESC rgSZPModifierItems[] =
  155. {
  156. { ControlItemConst::HID_VENDOR_PAGE, ControlItemConst::HID_VENDOR_PEDALS_PRESENT, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 1, ControlItemConst::ucReportTypeInput, 1}
  157. };
  158. MODIFIER_DESC_TABLE SZPModifierDescTable = { 1, 0, rgSZPModifierItems};
  159. //
  160. // SparkyZep - List of ControlItemDesc
  161. //
  162. RAW_CONTROL_ITEM_DESC rgSZPControlItems[] =
  163. {
  164. {1L, usButton, HID_USAGE_PAGE_BUTTON, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  165. 1, 8, &SZPModifierDescTable, (USAGE)1, (USAGE)8, 0L, 0L},
  166. {2L, usPedal, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  167. 6, 1, &SZPModifierDescTable, HID_USAGE_GENERIC_Y, HID_USAGE_RESERVED, 0L, 63L},
  168. {3L, usPedal, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  169. 6, 1, &SZPModifierDescTable, HID_USAGE_GENERIC_RZ, HID_USAGE_RESERVED, 0L, 63L},
  170. {4L, usWheel, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  171. 10, 1, &SZPModifierDescTable, HID_USAGE_GENERIC_X, HID_USAGE_RESERVED, -512L, 511L},
  172. {5L, usForceMap,HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  173. 0, 0, &SZPModifierDescTable, 0, 0, 0L, 10000L}
  174. };
  175. //
  176. // Tilt 2.0 TT2
  177. //
  178. //
  179. // Mothra MOH
  180. //
  181. //
  182. // Mothra - Axes range table
  183. //
  184. AXES_RANGE_TABLE MOHAxesRangeTable = { 0L, 128L, 255L, 0L, 128L, 255L, 64L, 192L, 64L, 192L};
  185. //
  186. // Mothra - List of ControlItemDesc
  187. //
  188. RAW_CONTROL_ITEM_DESC rgMOHControlItems[] =
  189. {
  190. {1L, usButton, HID_USAGE_PAGE_BUTTON, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 1, 8, NULL, (USAGE)1, (USAGE)8, 0L, 0L},
  191. {2L, usAxes, HID_USAGE_PAGE_GENERIC, 1, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 8, 2, NULL, HID_USAGE_GENERIC_X, HID_USAGE_GENERIC_Y, (LONG)&MOHAxesRangeTable, 0L},
  192. {3L, usRudder, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 8, 1, NULL, HID_USAGE_GENERIC_RZ, HID_USAGE_RESERVED, 0L, 255L},
  193. {4L, usPOV, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_POINTER, HID_USAGE_PAGE_GENERIC, 4, 1, NULL, HID_USAGE_GENERIC_HATSWITCH, HID_USAGE_RESERVED, 0L, 7L},
  194. {5L, usThrottle, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 7, 1, NULL, HID_USAGE_GENERIC_SLIDER, HID_USAGE_RESERVED, 0L, 255L}
  195. };
  196. //
  197. // Godzilla GOD
  198. // Ungraciously ripped from Mothra!
  199. // TODO: The force feedback stuff needs to be added by MCOILL
  200. //
  201. // Godzilla - Axes range table
  202. //
  203. AXES_RANGE_TABLE GODAxesRangeTable = { -512L, 0L, 511L, -512L, 0L, 511L, -256L, 256L, -256L, 256L};
  204. //
  205. // Godzilla - List of ControlItemDesc
  206. //
  207. RAW_CONTROL_ITEM_DESC rgGODControlItems[] =
  208. {
  209. {1L, usButton, HID_USAGE_PAGE_BUTTON, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 1, 8, NULL, (USAGE)1, (USAGE)8, 0L, 0L},
  210. {2L, usAxes, HID_USAGE_PAGE_GENERIC, 1, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 10, 2, NULL, HID_USAGE_GENERIC_X, HID_USAGE_GENERIC_Y, (LONG)&GODAxesRangeTable, 0L},
  211. {3L, usRudder, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 6, 1, NULL, HID_USAGE_GENERIC_RZ, HID_USAGE_RESERVED, -32L, 31L},
  212. {4L, usPOV, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_POINTER, HID_USAGE_PAGE_GENERIC, 4, 1, NULL, HID_USAGE_GENERIC_HATSWITCH, HID_USAGE_RESERVED, 0L, 7L},
  213. {5L, usThrottle, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 7, 1, NULL, HID_USAGE_GENERIC_SLIDER, HID_USAGE_RESERVED, 0L, 127L},
  214. {6L, usForceMap, HID_USAGE_PAGE_GENERIC, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 0, 0, NULL, 0, 0, 0L, 10000L }
  215. };
  216. //
  217. // Attila - Modifier Table ATT
  218. //
  219. // There are three shift buttons.
  220. MODIFIER_ITEM_DESC rgATTModifierItems[] =
  221. {
  222. { HID_USAGE_PAGE_BUTTON, (USAGE) 9, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 15, ControlItemConst::ucReportTypeInput, 0},
  223. { HID_USAGE_PAGE_BUTTON, (USAGE)10, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 15, ControlItemConst::ucReportTypeInput, 0},
  224. { HID_USAGE_PAGE_BUTTON, (USAGE)11, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC, 15, ControlItemConst::ucReportTypeInput, 0}
  225. };
  226. MODIFIER_DESC_TABLE ATTModifierDescTable = { 3, 3, rgATTModifierItems};
  227. //
  228. // Attila - Axes range table
  229. //
  230. // These may need changes. I found this in the control panel calibration window.
  231. DUALZONE_RANGE_TABLE ATTXYZoneRangeTable = { { -512L, -512L }, { 0L, 0L }, { 511L, 511L}, {70L, 70L} };
  232. DUALZONE_RANGE_TABLE ATTRudderZoneRangeTable = { {-512L, 0L}, { 0L, 0L}, { 511L, 0L }, {70L, 0L} };
  233. //
  234. // Attila - List of ControlItemDesc
  235. //
  236. RAW_CONTROL_ITEM_DESC rgATTControlItems[] =
  237. {
  238. {1L, usButton, HID_USAGE_PAGE_BUTTON, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  239. 1, 15, &ATTModifierDescTable, (USAGE)1, (USAGE)6, 0L, 0L},
  240. {2L, usButton, HID_USAGE_PAGE_BUTTON, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  241. 1, 15, NULL, (USAGE)7, (USAGE)8, 0L, 0L},
  242. {3L, usButton, HID_USAGE_PAGE_BUTTON, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  243. 1, 15, NULL, (USAGE)0xC, (USAGE)0xC, 0L, 0L},
  244. {4L, usDualZoneIndicator, HID_USAGE_PAGE_GENERIC, 1, HID_USAGE_GENERIC_POINTER, HID_USAGE_PAGE_GENERIC,
  245. 10, 1, 0, HID_USAGE_GENERIC_X, HID_USAGE_GENERIC_Y, (LONG)&ATTXYZoneRangeTable, 8L},
  246. {5L, usDualZoneIndicator, HID_USAGE_PAGE_GENERIC, 1, HID_USAGE_GENERIC_POINTER, HID_USAGE_PAGE_GENERIC,
  247. 10, 1, 0, HID_USAGE_GENERIC_RZ, 0, (LONG)&ATTRudderZoneRangeTable, 2L},
  248. {6L, usButtonLED, HID_USAGE_PAGE_LED, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  249. 2, 6, &ATTModifierDescTable, USAGE(1), USAGE(ucReportTypeFeatureRW),
  250. ULONG((0 << 24) | (1 << 16) | (ControlItemConst::LED_DEFAULT_MODE_CORRESPOND_ON << 8) | (0)),
  251. 0
  252. },
  253. {7L, usProfileSelectors, HID_USAGE_PAGE_BUTTON, 0, HID_USAGE_GENERIC_JOYSTICK, HID_USAGE_PAGE_GENERIC,
  254. 1, 15, NULL, (USAGE)0xD, (USAGE)0xF, (ULONG)2, (ULONG)0
  255. }
  256. };
  257. #undef HID_USAGE_RESERVED
  258. //
  259. // List of supported devices
  260. //
  261. //NEWDEVICE
  262. DEVICE_CONTROLS_DESC DeviceControlsDescList[] =
  263. {
  264. {0x045E000E, 5, rgFSControlItems, &FSModifierDescTable}, //Freestyle Pro (USB)
  265. {0x045E0008, 6, rgPPControlItems, &PPModifierDescTable}, //Precision Pro (USB)
  266. {0x045E0026, 2, rgZRControlItems, &ZRModifierDescTable}, //Zorro
  267. {0x045E0028, 4, rgZLControlItems, &ZLModifierDescTable}, //Zulu
  268. {0x045E001A, 4, rgZPLControlItems, &ZPLModifierDescTable}, //Zep Lite
  269. {0x045E0034, 5, rgSZPControlItems, &SZPModifierDescTable}, //SparkyZep
  270. // {0x045Effff, 0, NULL, NULL}, //Tilt2 Dev11 TT2
  271. {0x045E0038, 5, rgMOHControlItems, NULL}, //Mothra Dev12 MOH
  272. {0x045E001B, 6, rgGODControlItems, NULL}, //Godzilla Dev13 GOD
  273. {0x045E0033, 7, rgATTControlItems, &ATTModifierDescTable}, //Attila Dev14 ATT
  274. {0x00000000, 0, 0x00000000}
  275. };