Хорошего времени суток, doom2d.org/forum. Два дня назад открыл себе D2D-F, и у меня два вопроса (скорее всего, к falcon). 1. Будет ли включена поддержка игровых устройств в игре? 2. Если "нет" (или хз, или да, но хз когда) то: Имеются 2 контроллера от 8-битки, высящие на LPT (висят они там ибо ностальжи, а играть ромы в эмуляторе с клавиатуры (особенно вдвоем) -- чертовски кривое дело). Позже была написана программка, снимающая ввод с этих контроллеров и преобразующая его в клавиатурные нажатия/перемещение-нажатия мыши/контроль самой винды или всяких AIMP/Light Alloy/ICE BR и т.д. и т.п. Это сделало из данных контроллеров "превосходные ДУ-устройства", а также позволило пользовать их в небольших играх, которые не требуют слишком многих забинденных клавиш управления, не имеют прямой поддержки "игровых устройств", но ведутся на APIшную эмуляцию. Но. "Глубокие познания" такой вещи как direct input задохрена отсутствуют у меня сейчас (впрочем, как и любые другие сколь-нибудь проф-познания в OpenGL или DX), а D2D-F, судя по импорту, именно ее и использует.
Собственно, вопрос этот в сильно общих словах звучит: "Как сэмулировать работу клавиатуры в D2d-f?" Не просиживая для этого в олли и вообще "чтобы все легально, чотко и по правилам": вроде "получить указатель на созданный прогой объект, и способы воздействия на его через апи". Или как-то так.
Тестовый пример: Option Explicit Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Const WM_KEYDOWN = &H100
Private Sub Timer1_Timer() Dim lHandle&: lHandle = FindWindow("OpenGL", "Doom 2D: Forever v.06.1") If Not lHandle = 0& Then Debug.Print PostMessage(lHandle, WM_KEYDOWN, vbKeyDown, 0&) End If End Sub -- как и keybd_event, сия тривиальщина работает только в главном меню, когда игра не начата еще.
Все это интересно затем, что при игре на двоих за одной машиной часты "залипания клавиш"; "игрок1 так жостко убивал кибердемона шо у игрок2 парализовало левую клавишу и он похоронен под забором DIE", чего никак нет при "программном подходе". Если же перестроить конфиги на "незалипаемые" комбинации, страдает удобство и привычность. (впрочем, оно и так страдает при клавиатуре: к примеру, стрельбу под углом/рокетджамп в этой игре делать с контроллера в сотню лучше) Вынос же хотя бы одного игрока на контроллер делает нашу жизнь полной смысла, хе-хе
|