1
0
mirror of synced 2024-11-30 18:24:35 +01:00

Add jp layout keyboard support

This commit is contained in:
esuo1198 2024-04-27 12:29:38 +09:00
parent 3376184a76
commit 200fba19d3
7 changed files with 161 additions and 14 deletions

View File

@ -37,8 +37,6 @@ res = { x = 1920, y = 1080 }
windowed = false
# vertical sync
vsync = false
# auto change to english ime mode
auto_ime = false
# unlock all songs
unlock_songs = true
@ -82,10 +80,16 @@ image_path = ""
song_no = []
[drum]
# input interval (if you are using taiko drum controller, it should be set to 0)
# input interval (if using taiko drum controller, should be set to 0)
wait_period = 4
[controller]
# use analog input
analog_input = false
[keyboard]
# auto change to english ime mode
auto_ime = false
# use jp layout scan code (if using jp layout keyboard, must be set to true)
jp_layout = false
```

5
dist/config.toml vendored
View File

@ -11,7 +11,6 @@ version = "auto"
res = { x = 1920, y = 1080 }
windowed = false
vsync = false
auto_ime = false
unlock_songs = true
[patches.chn00]
@ -42,3 +41,7 @@ wait_period = 4
[controller]
analog_input = false
[keyboard]
auto_ime = false
jp_layout = false

6
dist/keyconfig.toml vendored
View File

@ -22,9 +22,9 @@ P2_RIGHT_RED = []
P2_RIGHT_BLUE = []
# ESCAPE F1 through F12
# ` 1 through 0 -= BACKSPACE
# TAB QWERTYUIOP [ ] BACKSLASH
# CAPS_LOCK ASDFGHJKL ;' ENTER
# ` 1 through 0 -= BACKSPACE ^ YEN
# TAB QWERTYUIOP [ ] BACKSLASH @
# CAPS_LOCK ASDFGHJKL ;' ENTER :
# SHIFT ZXCVBNM , . SLASH
# CONTROL L_WIN ALT SPACE R_WIN MENU
# SCROLL_LOCK PAUSE INSERT DELETE HOME END PAGE_UP PAGE_DOWN

View File

@ -314,6 +314,8 @@ HOOK (u64, bngrw_reqWaitTouch, PROC_ADDRESS ("bngrw.dll", "BngRwReqWaitTouch"),
void
Init () {
SetKeyboardButtons ();
auto configPath = std::filesystem::current_path () / "config.toml";
std::unique_ptr<toml_table_t, void (*) (toml_table_t *)> config_ptr (openConfig (configPath), toml_free);
if (config_ptr) {

View File

@ -22,6 +22,7 @@ char accessCode2[21] = "00000000000000000002";
char chipId1[33] = "00000000000000000000000000000001";
char chipId2[33] = "00000000000000000000000000000002";
bool autoIME = false;
bool jpLayout = false;
HOOK (i32, ShowMouse, PROC_ADDRESS ("user32.dll", "ShowCursor"), bool) { return originalShowMouse (true); }
HOOK (i32, ExitWindows, PROC_ADDRESS ("user32.dll", "ExitWindowsEx")) { ExitProcess (0); }
@ -125,9 +126,11 @@ DllMain (HMODULE module, DWORD reason, LPVOID reserved) {
std::strcat (placeId, "0FF0");
}
auto patches = openConfigSection (config, "patches");
if (patches) {
version = readConfigString (patches, "version", version);
autoIME = readConfigBool (patches, "auto_ime", autoIME);
if (patches) version = readConfigString (patches, "version", version);
auto keyboard = openConfigSection (config, "keyboard");
if (keyboard) {
autoIME = readConfigBool (keyboard, "auto_ime", autoIME);
jpLayout = readConfigBool (keyboard, "jp_layout", jpLayout);
}
}

View File

@ -2,10 +2,15 @@
#include "helpers.h"
#include <windows.h>
struct {
extern bool jpLayout;
struct KeyCodePair {
const char *string;
uint8_t keycode;
} ConfigKeyboardButtons[] = {
};
size_t ConfigKeyboardButtonsCount = 0;
KeyCodePair *ConfigKeyboardButtons = nullptr;
KeyCodePair ConfigKeyboardButtons_US[] = {
// Reference:https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
// Wayback Machine:https://web.archive.org/web/20231223135232/https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
// Row 1
@ -126,7 +131,129 @@ struct {
{"NUM3", VK_NUMPAD3},
{"NUM0", VK_NUMPAD0},
{"DECIMAL", VK_DECIMAL},
};
KeyCodePair ConfigKeyboardButtons_JP[] = {
// Reference:https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
// Wayback Machine:https://web.archive.org/web/20231223135232/https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
// Row 1
{"ESCAPE", VK_ESCAPE},
{"F1", VK_F1},
{"F2", VK_F2},
{"F3", VK_F3},
{"F4", VK_F4},
{"F5", VK_F5},
{"F6", VK_F6},
{"F7", VK_F7},
{"F8", VK_F8},
{"F9", VK_F9},
{"F10", VK_F10},
{"F11", VK_F11},
{"F12", VK_F12},
// Row 2
{"1", '1'},
{"2", '2'},
{"3", '3'},
{"4", '4'},
{"5", '5'},
{"6", '6'},
{"7", '7'},
{"8", '8'},
{"9", '9'},
{"0", '0'},
{"-", VK_OEM_MINUS},
{"^", VK_OEM_7},
{"YEN", VK_OEM_5},
{"BACKSPACE", VK_BACK},
// Row 3
{"TAB", VK_TAB},
{"Q", 'Q'},
{"W", 'W'},
{"E", 'E'},
{"R", 'R'},
{"T", 'T'},
{"Y", 'Y'},
{"U", 'U'},
{"I", 'I'},
{"O", 'O'},
{"P", 'P'},
{"@", VK_OEM_3},
{"[", VK_OEM_4},
// Row 4
{"CAPS_LOCK", VK_CAPITAL},
{"A", 'A'},
{"S", 'S'},
{"D", 'D'},
{"F", 'F'},
{"G", 'G'},
{"H", 'H'},
{"J", 'J'},
{"K", 'K'},
{"L", 'L'},
{";", VK_OEM_PLUS},
{":", VK_OEM_1},
{"]", VK_OEM_6},
{"ENTER", VK_RETURN},
// Row 5
{"SHIFT", VK_SHIFT},
{"Z", 'Z'},
{"X", 'X'},
{"C", 'C'},
{"V", 'V'},
{"B", 'B'},
{"N", 'N'},
{"M", 'M'},
{",", VK_OEM_COMMA},
{".", VK_OEM_PERIOD},
{"SLASH", VK_OEM_2},
{"BACKSLASH", VK_OEM_102},
// Row 6
{"CONTROL", VK_CONTROL},
{"L_WIN", VK_LWIN},
{"ALT", VK_MENU},
{"SPACE", VK_SPACE},
{"R_WIN", VK_RWIN},
{"MENU", VK_APPS},
// Other Keys
// PrtSc is more important when making snapshots, therefore comment it as reserved
//{"PRINT_SCREEN", VK_SNAPSHOT},
{"SCROLL_LOCK", VK_SCROLL},
{"PAUSE", VK_PAUSE},
{"INSERT", VK_INSERT},
{"DELETE", VK_DELETE},
{"HOME", VK_HOME},
{"END", VK_END},
{"PAGE_UP", VK_PRIOR},
{"PAGE_DOWN", VK_NEXT},
// Arrow Keys
{"UPARROW", VK_UP},
{"LEFTARROW", VK_LEFT},
{"DOWNARROW", VK_DOWN},
{"RIGHTARROW", VK_RIGHT},
// NUMPAD Keys
{"NUM_LOCK", VK_NUMLOCK},
{"DIVIDE", VK_DIVIDE},
{"MULTIPLY", VK_MULTIPLY},
{"SUBTRACT", VK_SUBTRACT},
{"NUM7", VK_NUMPAD7},
{"NUM8", VK_NUMPAD8},
{"NUM9", VK_NUMPAD9},
{"ADD", VK_ADD},
{"NUM4", VK_NUMPAD4},
{"NUM5", VK_NUMPAD5},
{"NUM6", VK_NUMPAD6},
{"NUM1", VK_NUMPAD1},
{"NUM2", VK_NUMPAD2},
{"NUM3", VK_NUMPAD3},
{"NUM0", VK_NUMPAD0},
{"DECIMAL", VK_DECIMAL},
};
struct {
@ -192,6 +319,13 @@ SDLAxisState lastControllerAxisState;
SDL_Window *window;
SDL_GameController *controllers[255];
void
SetKeyboardButtons () {
ConfigKeyboardButtonsCount = jpLayout ? COUNTOFARR (ConfigKeyboardButtons_JP) : COUNTOFARR (ConfigKeyboardButtons_US);
ConfigKeyboardButtons = (KeyCodePair *)malloc (ConfigKeyboardButtonsCount * sizeof (KeyCodePair));
memcpy (ConfigKeyboardButtons, jpLayout ? ConfigKeyboardButtons_JP : ConfigKeyboardButtons_US, ConfigKeyboardButtonsCount * sizeof (KeyCodePair));
}
void
SetConfigValue (toml_table_t *table, const char *key, Keybindings *keybind) {
toml_array_t *array = toml_array_in (table, key);
@ -389,7 +523,7 @@ DisposePoll () {
ConfigValue
StringToConfigEnum (const char *value) {
ConfigValue rval;
for (size_t i = 0; i < COUNTOFARR (ConfigKeyboardButtons); ++i)
for (size_t i = 0; i < ConfigKeyboardButtonsCount; ++i)
if (!strcmp (value, ConfigKeyboardButtons[i].string)) {
rval.type = keycode;
rval.keycode = ConfigKeyboardButtons[i].keycode;
@ -422,7 +556,7 @@ InternalButtonState
GetInternalButtonState (Keybindings bindings) {
InternalButtonState buttons = {0};
for (size_t i = 0; i < COUNTOFARR (ConfigKeyboardButtons); i++) {
for (size_t i = 0; i < ConfigKeyboardButtonsCount; i++) {
if (bindings.keycodes[i] == 0) continue;
if (KeyboardIsReleased (bindings.keycodes[i])) buttons.Released = 1;
if (KeyboardIsDown (bindings.keycodes[i])) buttons.Down = 1;

View File

@ -63,6 +63,7 @@ struct InternalButtonState {
bool InitializePoll (HWND windowHandle);
void UpdatePoll (HWND windowHandle);
void DisposePoll ();
void SetKeyboardButtons ();
ConfigValue StringToConfigEnum (const char *value);
void SetConfigValue (toml_table_t *table, const char *key, Keybindings *keybind);
InternalButtonState GetInternalButtonState (Keybindings bindings);