Post subject: Проблема с хуком мышки в 3д шутере (COD4 MW)
Joined: 5/14/2020
Posts: 1
Здравствуйте уважаемые ТАСеры) Немного предыстории: Загорелся я как-то идеей сделать свой ТАС (или же повторитель действий) для игры Call of Duty 4 MW на РС (windows). Почитал, изучил инфу как можно отследить сообщения от клавиатуры и мышке. Сделал в итоге программку которая может устанавливать хук на клавиши, мышку перед тем как само сообщение отправится в процесс игры. Могу все действия клавиатуры записать к примеру, по таймеру (минимум 15 мс интервал) или по мере поступления сообщений и потом их воспроизвести в таком же порядке и с такой же скоростью. С мышкой немного посложнее было так как там есть 2 способа имитации движения мышки: абсолютный и относительны. Оба варианта реализовал. Все тесты провожу не в игре, а так в системе или в паинте напишу, нарисую (так по мне проще). Все работает найс. Теперь настало дело тестить в игре записывать действие и воспроизводить. Клавиши записывают/воспроизводятся корректно. А вот мышкой жуть полная. А теперь суть проблемы: В игре используется 2 режима мышки относительный и абсолютный. Абсолютный используется в меню и везде, где есть указатель мышки. Относительный используется для ориентации персонажа в пространстве игры. Абсолютный режим удается записать и воспроизвести, а вот относительный нет. Каждый определенный цикл в игре значения положения мышки всегда возвращается к центру окна игры. При 125 фпс получается что этот цикл срабатывает каждые 8 миллисекунд (1000 мс / 125 фпс = 8 ). При всей текущей возможности могу отслеживать мышку только каждые 15 мс. Даже при записи по мере поступления сообщений не удается корректно отследить мышь. 125 фпс это мой минимальный фпс для записи в дальнейшем нужен даже будет еще больше. Так же имею в распоряжении координаты и угол по горизонтали и вертикали куда смотрю в игре. В память игры залез и могу без проблем их записывать, но 1 градус в игре не равен 1 пройденному значению по х или у мышки. Вопрос: Делал ли кто запись движения мышки в 3д играх с относительным движением мыши? Поделитесь логикой как правильно записать мышь или что-то другое. Или направьте меня в нужную сторону. Может я вообще неправильно мыслю. У меня в голове только одно решение: Сделать так, чтобы значения пройденное мышкой было равно отклонению угла в игре. В таком случае я буду записывать углы в игре. Высчитывать текущее значение из прошлого это и будет значением для имитации в режиме относительного движения мыши. Спасибо.
Dimon12321
He/Him
Active player (478)
Joined: 4/5/2014
Posts: 1120
Location: Ukraine
Я не делал такого. Вообще, в Колде 4 вроде как есть запись реплеев и возможность установить нужный таймскейл (то бишь, замедление времени). Не знаю, куда делся тот длинный видос с ТАСом (как и сам канал-родоначальник), но в оригинале там каждая миссия записывалась по отдельности (и без сохранений), а потом все видосы автор объединил в один.
TASing is like making a film: only the best takes are shown in the final movie.
YaLTeR
He/Him
Joined: 12/2/2011
Posts: 129
Location: Moscow, Russia
Привет! Я делал инструменты для Half-Life 1 (http://tasvideos.org/forum/viewtopic.php?t=17062). Там принцип немного другой, библиотека сидит в игре, считает оптимальное движение каждый кадр и передаёт его игре в виде консольных команд. Это достаточно удобный способ (можно читать состояние игры и на основе него что-то считать, так же см. редактор, который я запилил на основе этого), но требует большого количества реверс-инжиниринга. Другой способ сейчас — это libTAS (http://tasvideos.org/forum/viewforum.php?f=71), но там нужен линукс. Под винду был Hourglass (http://tasvideos.org/forum/viewforum.php?f=61), но ввиду серьёзных технических ограничений его разработка была остановлена, и скорее всего он не сможет запустить COD.
Senior Moderator
Joined: 8/4/2005
Posts: 5769
Location: Away
Да, Hourglass не подойдёт для игр, которым требуется мышь и/или версии Windows новее XP.
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Player (96)
Joined: 12/12/2013
Posts: 376
Location: Russia
Хочу лишь подчеркнуть, что если ты просто будешь передавать клавиши из соседнего процесса симуляцией нажатий, то не факт что это даст детерминированный эффект. Что значит детерминированный? Ну это значит воспроизводимый. Так что надо или реплеи встроенные менять, или всё же встраиваться в приложение чтобы подсовывать кнопки в нужный момент.
Joined: 7/3/2021
Posts: 1
Может есть у кого какие-нибудь наработки по теме поста? Нужна такая штука для стрейфджамп мода по данной игре для идеальных стрейфов. Как пример https://youtu.be/ONh77Shovc8 Спасибо.