Skip to content

About

плагин thcrap для эмуляции ввода с клавиатуры и автоматизации в играх серии Touhou

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

UniversalTouhouInput

Плагин для thcrap, позволяющий играм серии Touhou воспринимать программно сгенерированный ввод с клавиатуры (от SendInput, скриптов автоматизации, ботов, инструментов для TAS, Python, AutoHotkey и т. д.).

Ваша игра Touhou игнорирует имитируемые нажатия клавиш? Возможно, это именно то, что вам нужно.

Плагин не занимается переназначением клавиш. Он не меняет Z/X/Shift/стрелки на другие клавиши и не хранит список разрешённых клавиш. Вместо этого он:

  1. перехватывает GetKeyboardState;
  2. добавляет в него текущее состояние GetAsyncKeyState;
  3. зеркалит тот же объединённый state в DirectInput-клавиатуру (IDirectInputDevice8::GetDeviceState);
  4. также расширяет high-bit состояние для GetAsyncKeyState и GetKeyState.

Это рассчитано прежде всего на ситуацию, когда один путь ввода видит физическое нажатие, а другой — синтетическое.

Что поддерживается

Проверка игры сделана по runconfig_game_get() и разрешает th06–th20, включая варианты вроде th06_custom.

Плагин намеренно не содержит адресов конкретных версий EXE. Поэтому для основной серии не нужно поддерживать отдельные offset-таблицы.

Ограничения

Это не магический способ увидеть вообще любой байтовый пакет от любой программы. Например, PostMessage(WM_KEYDOWN) не обязан менять системное состояние клавиатуры, а KEYEVENTF_UNICODE сообщает VK_PACKET, а не конкретную игровую виртуальную клавишу. Для таких источников может понадобиться отдельный message/raw-input мост.

На практике для игровых автоматизаторов наиболее полезны SendInput в virtual-key или scan-code режиме и обычное физическое нажатие.

Сборка

Самый простой вариант для человека только с VSCode

В репозитории уже лежит GitHub Actions workflow:

.github/workflows/build.yml

После загрузки проекта на GitHub:

  1. откройте вкладку Actions;
  2. выберите Build UniversalTouhouInput;
  3. запустите workflow вручную;
  4. скачайте artifact UniversalTouhouInput-win32.

Сборка использует Visual C++ и целевую платформу Win32, потому что классические Touhou 6–20 — 32-битные приложения.

Локальная сборка

Откройте UniversalTouhouInput.sln в Visual Studio с установленным Desktop C++ и соберите Release | Win32.

Выходной DLL будет:

dist/UniversalTouhouInput.dll

Установка в thcrap

Это именно thcrap plugin DLL, а не обычная JSON-only patch.

Скопируйте:

UniversalTouhouInput.dll

в:

<папка thcrap>\\bin\\

Потом запускайте Touhou через ваш обычный thcrap run configuration.

Отдельно ничего в каталоге игры менять не нужно.

Что смотреть, если не работает

Сначала попробуйте игру с включённым DirectInput и затем с отключённым DirectInput. Плагин рассчитан на оба варианта, но так можно понять, какой из путей реально использует конкретная версия игры.

Если DLL загружается, но поведение не меняется, самый полезный следующий эксперимент — использовать test_sendinput.py и отдельно проверить vk, scancode и unicode режимы.

Если после этого нужен второй этап, можно сделать отдельный bridge для PostMessage/PeekMessage/Raw Input и/или конкретных центральных input-функций игры.

About

плагин thcrap для эмуляции ввода с клавиатуры и автоматизации в играх серии Touhou

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages