doom2d.org

Главная база плоских морпехов
It is currently 12 Sep 2024, 18:56

All times are UTC + 3 hours




Post new topic Reply to topic  [ 11 posts ] 
Author Message
PostPosted: 10 Jan 2011, 03:34 
Offline

Joined: 10 Jan 2011, 03:00
Posts: 5
Хорошего времени суток, 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", чего никак нет при "программном подходе".
Если же перестроить конфиги на "незалипаемые" комбинации, страдает удобство и привычность. (впрочем, оно и так страдает при клавиатуре: к примеру, стрельбу под углом/рокетджамп в этой игре делать с контроллера в сотню лучше)
Вынос же хотя бы одного игрока на контроллер делает нашу жизнь полной смысла, хе-хе


Top
 Profile  
 
PostPosted: 10 Jan 2011, 04:30 
Offline

Joined: 10 Jan 2011, 03:00
Posts: 5
viewtopic.php?f=12&t=292&start=0
Как и подозревал, вопрос-1 лишний и стар ~как тема по ссылке.
Dystopia был "невнимателен" от недостатка кофеина с никотином и общей ленивой перегрузки, от которой пост написан неполно и даже примитивный код тестирован в VB, у которого предельно простой/быстрый синтаксис.

Но вопрос о вторжении в direct input все еще остается.
Впринципе, очевидно что гугл очевидное решение.
Но мне настолько понравился ваш дум (особенно, стартовая заставка / муз. сопровождение / качество исполнения в целом) что написал сюда изначально


Top
 Profile  
 
PostPosted: 10 Jan 2011, 08:18 
Offline

Joined: 10 Jan 2011, 03:00
Posts: 5
Тема исчерпана.

На прикладном уровне:
osk.exe -- эта хернь использует парочку недокументированных вызовов, и у нее получается эмулировать под direct input злоедный.
Парсинг, мониторинг, отладка. И успех почти с гарантией, если хватит терпения выковырять параметры этих "недокументированных вызовов" (а может и нагуглить)

На системном уровне:
DDK. Счасс вспоминаю писанины Руссиновича немного, и возьмусь за переписывание стандартного драйвера клавиатуры под своей xp-sp3. Суть примерно в добавлении в него своей функции, которую вызывало бы приложение-клиент, и которая на основе входных параметров выполняла бы действия как при активности "живой" клавиатуры.
Сие позволит наеыбавьт практически любой код, стоящий выше драйвера клавиатуры, а потому этот вариант предпочтителен. Так что курить табак, выпить кофе и поссмотреть на зимний рассвет... а после писать и разбирать эти строгие исходники, работающие в режиме x86-бога. Почти.
Good luck, troopers. We are entering dimensions..Behind space.

P.S. Jabberwock, приношу извинения, если тема покажется не совсем идущей с форумом (прочел что программист проекта в армии, а стало быть некому особо отвечать по этой теме)


Top
 Profile  
 
PostPosted: 10 Jan 2011, 09:47 
Offline
User avatar

Joined: 18 Oct 2009, 09:19
Posts: 108
Возможно глупость (я не до конца вкурил всё что написано), но разве прога Joy2Key не поможет? Тем более дрова для подключение приставочных геймпадов через LPT есть на emu-land.net. По моему с теми драйверами Joy2Key должен работать.
А так конечно да, я тоже люблю поизвращаться.


Top
 Profile  
 
PostPosted: 10 Jan 2011, 19:17 
Offline

Joined: 10 Jan 2011, 03:00
Posts: 5
Закончил играться с исходниками kbdclass.sys (успев насмотреться на БСОДы, и раз сделать откат системы), но уже вроде можно порадоваться очередному "научному удовлетворению" и считать что вопрос решен абсолютно, ибо таки работает (во многом благодаря wasm.ru. бгг)

Посмотрел Joy2Key, работает как требовалость + качество написания хорошее + c++. Полностью подошла бы, одолей меня лень ранее, но с-час уже свои велосипеды есть.

В целом, все решено и в качестве аддона припомню еще о связке функций SendInput и MapVirtualKey - это пожалуй лучший (или "оптимальный") вариант и на втором месте после всесильной и геморрной переделки драйвера.


Top
 Profile  
 
PostPosted: 14 Jan 2011, 22:45 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 7559
Location: \\HULK
Зато тебе было интересно )
Тут где-то была здоровенная тема про контроллеры, надо будет ее отправить в FAQ.

Кстати, как вообще можно играть в ДФ на контроллере с восьмибитки?
Кнопок-то не хватает! Как ты стрейфишься, как меняешь оружие?

_________________
И неважно, что нет морей на Марсе, каждый морпех носит море в сердце.


Top
 Profile  
 
PostPosted: 17 Jan 2011, 00:16 
Offline

Joined: 10 Jan 2011, 03:00
Posts: 5
Вверх-низ-лево-право + производные
А = прыжок
B = огонь
Start = действие
Select = след оружие

Этого вполне хватает вроде) Действие в игре обычным путем биндится на какую-то клавишу, которая генерируется и отсылается игре при сигнале от контроллера.
Да и если не хватало бы, можно выстроить еще вещи вида А=прыжок, Select = оружие, но А + Select это уже что-то третье, и т.д.

Кста, был замечен баг: если эмулировать клавиатуру на уровне приложений (через ту же Joy2Key, например), то при _виртуальном зажатии "неправильного" сочетания клавиш (например, одновременно A+S+D+C) D2DF бесшумно вылетает.
При обычном их зажатии с клавиатуры (или через драйвер), все ок.

Другие игры не мрут от подобного, отсюда вывод что это в думе упущен "обработчик исключений" где-то. Но... вряд ли сие будет "актуально" когда появится встроенная поддержка контроллеров, поэтому "мелочь и забить".


Top
 Profile  
 
 Post subject: DF и геймпад
PostPosted: 16 Jan 2013, 14:41 
Offline
Приколист
User avatar

Joined: 10 May 2010, 18:36
Posts: 1365
Location: Киев
Что ж, не нашел я никакой поддержки геймпада в дф, затестил при помощи Xpadder'а. Тестил на Logitech F710. Поначалу было непривычное управление, а затем стало даже удобно. Ибо на геймпаде нет залипания, как на клавиатуре и я могу использовать хоть все кнопки сразу. больше всего меня огорчило то, что на нем нельзя сделать "лунную походку", для этого пришлось ставить перемещение на оба стика. Все остальное очень хорошо, так что поддержка геймпада в игре должна быть, игра с ним отлично сочетается.

UPD: игра вдвоем также намного удобнее, ибо не нужно двум игрокам ютиться за одной клавой.

_________________
Image
Total Destruction Project --> [ Mod --> Resources --> Campaign --> DM-Maps ]


Top
 Profile  
 
 Post subject: Re: DF и геймпад
PostPosted: 20 Jan 2013, 18:06 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 7559
Location: \\HULK
Такие темы возникают постоянно. На старом форуме была отличная статья...
Я использую joy2key, для стрейфа продублировал Влево и Вправо на плечах джойстика.
А удобнее всего, мне кажется, использовать вторую USB-клавиатуру.

Кстати, если подрубить несколько доп. устройств ввода, в теории можно было бы сделать и такое:


Attachments:
df_4pl_mockup.png
df_4pl_mockup.png [ 621.45 KiB | Viewed 9939 times ]

_________________
И неважно, что нет морей на Марсе, каждый морпех носит море в сердце.
Top
 Profile  
 
PostPosted: 26 Mar 2019, 20:15 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 7559
Location: \\HULK
Кто-нибудь играет в DF на аналоговых джойстиках геймпада?

_________________
И неважно, что нет морей на Марсе, каждый морпех носит море в сердце.


Top
 Profile  
 
PostPosted: 02 Aug 2019, 11:40 
Offline
Приколист
User avatar

Joined: 01 Jan 2011, 00:39
Posts: 1945
Location: Полигон НТИИМ
Точно не я, но всё равно выкладывай, что у тебя на уме.

_________________
Image DM2002 testing
Image Total Destruction - F
EDODLΔ


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 11 posts ] 

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
doom2d.org, since 2007