Плагин для thcrap, позволяющий играм серии Touhou воспринимать программно сгенерированный ввод с клавиатуры (от SendInput, скриптов автоматизации, ботов, инструментов для TAS, Python, AutoHotkey и т. д.).
Ваша игра Touhou игнорирует имитируемые нажатия клавиш? Возможно, это именно то, что вам нужно.
Плагин не занимается переназначением клавиш. Он не меняет Z/X/Shift/стрелки на другие клавиши и не хранит список разрешённых клавиш. Вместо этого он:
- перехватывает
GetKeyboardState; - добавляет в него текущее состояние
GetAsyncKeyState; - зеркалит тот же объединённый state в DirectInput-клавиатуру (
IDirectInputDevice8::GetDeviceState); - также расширяет 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 режиме и обычное физическое нажатие.
В репозитории уже лежит GitHub Actions workflow:
.github/workflows/build.yml
После загрузки проекта на GitHub:
- откройте вкладку Actions;
- выберите Build UniversalTouhouInput;
- запустите workflow вручную;
- скачайте artifact
UniversalTouhouInput-win32.
Сборка использует Visual C++ и целевую платформу Win32, потому что классические Touhou 6–20 — 32-битные приложения.
Откройте UniversalTouhouInput.sln в Visual Studio с установленным Desktop C++ и соберите Release | Win32.
Выходной DLL будет:
dist/UniversalTouhouInput.dll
Это именно 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-функций игры.