forked from Hay1tsme/segatools
ekt: add button i/o
This commit is contained in:
@ -74,7 +74,7 @@ void aime_config_load(struct aime_config *cfg, const wchar_t *filename)
|
||||
cfg->enable = GetPrivateProfileIntW(L"aime", L"enable", 1, filename);
|
||||
cfg->port_no = GetPrivateProfileIntW(L"aime", L"portNo", 0, filename);
|
||||
cfg->high_baudrate = GetPrivateProfileIntW(L"aime", L"highBaud", 1, filename);
|
||||
cfg->gen = GetPrivateProfileIntW(L"aime", L"gen", 0, filename);
|
||||
cfg->gen = GetPrivateProfileIntW(L"aime", L"gen", 3, filename);
|
||||
cfg->proxy_flag = GetPrivateProfileIntW(L"aime", L"proxyFlag", 2, filename);
|
||||
|
||||
GetPrivateProfileStringW(
|
||||
|
8
dist/ekt/config_hook.json
vendored
8
dist/ekt/config_hook.json
vendored
@ -1,5 +1,13 @@
|
||||
{
|
||||
"common": {
|
||||
"language": "english"
|
||||
},
|
||||
"network": {
|
||||
"property": {
|
||||
"dhcp": true
|
||||
}
|
||||
},
|
||||
"allnet_auth": {
|
||||
"type": "1.0"
|
||||
}
|
||||
}
|
11
dist/ekt/launch_satellite.bat
vendored
11
dist/ekt/launch_satellite.bat
vendored
@ -1,15 +1,10 @@
|
||||
@echo off
|
||||
set SEGATOOLS_CONFIG_PATH=..\segatools_satellite.ini
|
||||
set SEGATOOLS_CONFIG_PATH=.\segatools_satellite.ini
|
||||
|
||||
pushd %~dp0
|
||||
|
||||
pushd PackageBase
|
||||
start /min "AM Daemon" ..\inject -d -k ..\ekthook.dll amdaemon.exe -c config_sate.json ..\config_hook.json
|
||||
popd
|
||||
pushd exe
|
||||
..\inject -d -k ..\ekthook.dll ekt.exe -logfile game.log -screen-fullscreen 0 -screen-width 1920 -screen-height 1080 -screen-quality Ultra -silent-crashes
|
||||
popd
|
||||
exit /b 0
|
||||
start /min "AM Daemon" inject -d -k ekthook.dll PackageBase\amdaemon.exe -c PackageBase\config_sate.json config_hook.json
|
||||
inject -d -k ekthook.dll exe\ekt.exe -logfile game.log -screen-fullscreen 0 -screen-width 1920 -screen-height 1080 -screen-quality Ultra -silent-crashes
|
||||
|
||||
taskkill /f /im amdaemon.exe > nul 2>&1
|
||||
|
||||
|
9
dist/ekt/launch_terminal.bat
vendored
9
dist/ekt/launch_terminal.bat
vendored
@ -3,13 +3,8 @@ set SEGATOOLS_CONFIG_PATH=..\segatools_terminal.ini
|
||||
|
||||
pushd %~dp0
|
||||
|
||||
pushd PackageBase
|
||||
start /min "AM Daemon" ..\inject -d -k ..\ekthook.dll amdaemon.exe -c config_sate.json ..\config_hook.json
|
||||
popd
|
||||
pushd exe
|
||||
..\inject -d -k ..\ekthook.dll ekt.exe -logfile game.log -screen-fullscreen 0 -screen-width 1920 -screen-height 1080 -screen-quality Ultra -silent-crashes
|
||||
popd
|
||||
exit /b 0
|
||||
start /min "AM Daemon" inject -d -k ekthook.dll PackageBase\amdaemon.exe -c PackageBase\config_terminal.json config_hook.json
|
||||
inject -d -k ekthook.dll exe\ekt.exe -logfile game.log -screen-fullscreen 0 -screen-width 1920 -screen-height 1080 -screen-quality Ultra -silent-crashes
|
||||
|
||||
taskkill /f /im amdaemon.exe > nul 2>&1
|
||||
|
||||
|
10
dist/ekt/segatools_satellite.ini
vendored
10
dist/ekt/segatools_satellite.ini
vendored
@ -151,6 +151,7 @@ start=0x42
|
||||
stratagem=0x43
|
||||
stratagem_lock=0x44
|
||||
hougu=0x45
|
||||
ryuuha=0x46
|
||||
|
||||
tenkey_0=0x60
|
||||
tenkey_1=0x61
|
||||
@ -165,6 +166,11 @@ tenkey_9=0x69
|
||||
tenkey_clear=0x6E
|
||||
tenkey_enter=0x0D
|
||||
|
||||
vol_down=0x6D
|
||||
vol_up=0x6B
|
||||
vol_up=0x21
|
||||
vol_down=0x22
|
||||
|
||||
trackball_up=0x26
|
||||
trackball_right=0x27
|
||||
trackball_down=0x28
|
||||
trackball_left=0x25
|
||||
speed=1
|
||||
|
@ -24,13 +24,10 @@
|
||||
/*
|
||||
* Eiketsu Taisen
|
||||
*
|
||||
* IP: 192.168.189.0
|
||||
*
|
||||
* SATELLITE: Model Type 1
|
||||
*
|
||||
* COM2: LED
|
||||
* COM3: AIME
|
||||
* COM3: "TM LED"
|
||||
* COM4: FPR / Y3
|
||||
*
|
||||
* TERMINAL: Model Type 2
|
||||
@ -45,7 +42,7 @@ static process_entry_t ekt_startup;
|
||||
static struct ekt_hook_config ekt_hook_cfg;
|
||||
|
||||
static const wchar_t *target_modules[] = {
|
||||
L"Y3CodeReaderNE.dll",
|
||||
L"Y3CodeReaderNE.dll"
|
||||
};
|
||||
|
||||
static const size_t target_modules_len = _countof(target_modules);
|
||||
@ -111,12 +108,14 @@ static DWORD CALLBACK ekt_pre_startup(void)
|
||||
}
|
||||
|
||||
/* Initialize Terminal/Satellite hooks */
|
||||
if (strncmp(ekt_hook_cfg.platform.nusec.platform_id, "AAV1", 4) == 0) {
|
||||
if (strncmp(ekt_hook_cfg.platform.nusec.platform_id, "ACA1", 4) == 0) {
|
||||
// Terminal
|
||||
is_terminal = true;
|
||||
} else if (strncmp(ekt_hook_cfg.platform.nusec.platform_id, "AAV2", 4) == 0) {
|
||||
// Satellite
|
||||
is_terminal = false;
|
||||
dprintf("Mode: Satellite\n");
|
||||
} else if (strncmp(ekt_hook_cfg.platform.nusec.platform_id, "ACA2", 4) == 0) {
|
||||
// Satellite
|
||||
is_terminal = true;
|
||||
dprintf("Mode: Terminal\n");
|
||||
} else {
|
||||
// Unknown
|
||||
dprintf("Unknown platform ID: %s\n", ekt_hook_cfg.platform.nusec.platform_id);
|
||||
@ -154,6 +153,8 @@ static DWORD CALLBACK ekt_pre_startup(void)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
dvd_hook_init(&ekt_hook_cfg.dvd, ekt_hook_mod);
|
||||
|
||||
unity_hook_init(&ekt_hook_cfg.unity, ekt_hook_mod, unity_hook_callback);
|
||||
|
||||
y3_hook_init(&ekt_hook_cfg.y3, ekt_hook_mod);
|
||||
|
@ -7,6 +7,14 @@ EXPORTS
|
||||
aime_io_nfc_get_aime_id
|
||||
aime_io_nfc_get_felica_id
|
||||
aime_io_nfc_poll
|
||||
ekt_io_get_api_version
|
||||
ekt_io_get_gamebtns
|
||||
ekt_io_get_opbtns
|
||||
ekt_io_get_trackball_position
|
||||
ekt_io_init
|
||||
ekt_io_poll
|
||||
ekt_io_led_init
|
||||
ekt_io_led_set_colors
|
||||
API_DLLVersion @1
|
||||
API_GetLastError @2
|
||||
API_GetErrorMessage @3
|
||||
|
@ -1,3 +1,5 @@
|
||||
#include "io4.h"
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include <assert.h>
|
||||
@ -73,11 +75,11 @@ static HRESULT ekt_io4_poll(void *ctx, struct io4_state *state)
|
||||
}
|
||||
|
||||
if (opbtn & EKT_IO_OPBTN_SW1) {
|
||||
state->buttons[0] |= 1 << 0; // TODO
|
||||
state->buttons[0] |= 1 << 2;
|
||||
}
|
||||
|
||||
if (opbtn & EKT_IO_OPBTN_SW2) {
|
||||
state->buttons[0] |= 1 << 0; // TODO
|
||||
state->buttons[0] |= 1 << 3;
|
||||
}
|
||||
|
||||
if (opbtn & EKT_IO_OPBTN_COIN) {
|
||||
@ -85,105 +87,119 @@ static HRESULT ekt_io4_poll(void *ctx, struct io4_state *state)
|
||||
}
|
||||
state->chutes[0] = coins << 8;
|
||||
|
||||
// TODO: indexes
|
||||
|
||||
if (!io_is_terminal) {
|
||||
if (gamebtn & EKT_IO_GAMEBTN_HOUGU) {
|
||||
state->buttons[1] |= 1 << 14;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_RYUUHA) {
|
||||
state->buttons[1] |= 1 << 12;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_MENU) {
|
||||
state->buttons[0] |= 1 << 7;
|
||||
state->buttons[0] |= 1 << 13;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_START) {
|
||||
state->buttons[0] |= 1 << 5;
|
||||
state->buttons[0] |= 1 << 7;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_STRATAGEM) {
|
||||
state->buttons[0] |= 1 << 2;
|
||||
state->buttons[1] |= 1 << 15;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_STRATAGEM_LOCK) {
|
||||
state->buttons[0] |= 1 << 2;
|
||||
state->buttons[1] |= 1 << 13;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_VOL_DOWN) {
|
||||
state->buttons[0] |= 1 << 4;
|
||||
state->buttons[1] |= 1 << 10;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_VOL_UP) {
|
||||
state->buttons[0] |= 1 << 4;
|
||||
state->buttons[1] |= 1 << 11;
|
||||
}
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_NUMPAD_0) {
|
||||
state->buttons[0] |= 1 << (io_is_terminal ? 4 : 4);
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_C2 : EKT_NUMPAD_TERM_C2;
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_R4 : EKT_NUMPAD_TERM_R4;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_NUMPAD_1) {
|
||||
state->buttons[0] |= 1 << (io_is_terminal ? 4 : 4);
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_C1 : EKT_NUMPAD_TERM_C1;
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_R1 : EKT_NUMPAD_TERM_R1;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_NUMPAD_2) {
|
||||
state->buttons[0] |= 1 << (io_is_terminal ? 4 : 4);
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_C2 : EKT_NUMPAD_TERM_C2;
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_R1 : EKT_NUMPAD_TERM_R1;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_NUMPAD_3) {
|
||||
state->buttons[0] |= 1 << (io_is_terminal ? 4 : 4);
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_C3 : EKT_NUMPAD_TERM_C3;
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_R1 : EKT_NUMPAD_TERM_R1;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_NUMPAD_4) {
|
||||
state->buttons[0] |= 1 << (io_is_terminal ? 4 : 4);
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_C1 : EKT_NUMPAD_TERM_C1;
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_R2 : EKT_NUMPAD_TERM_R2;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_NUMPAD_5) {
|
||||
state->buttons[0] |= 1 << (io_is_terminal ? 4 : 4);
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_C2 : EKT_NUMPAD_TERM_C2;
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_R2 : EKT_NUMPAD_TERM_R2;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_NUMPAD_6) {
|
||||
state->buttons[0] |= 1 << (io_is_terminal ? 4 : 4);
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_C3 : EKT_NUMPAD_TERM_C3;
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_R2 : EKT_NUMPAD_TERM_R2;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_NUMPAD_7) {
|
||||
state->buttons[0] |= 1 << (io_is_terminal ? 4 : 4);
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_C1 : EKT_NUMPAD_TERM_C1;
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_R3 : EKT_NUMPAD_TERM_R3;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_NUMPAD_8) {
|
||||
state->buttons[0] |= 1 << (io_is_terminal ? 4 : 4);
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_C2 : EKT_NUMPAD_TERM_C2;
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_R3 : EKT_NUMPAD_TERM_R3;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_NUMPAD_9) {
|
||||
state->buttons[0] |= 1 << (io_is_terminal ? 4 : 4);
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_C3 : EKT_NUMPAD_TERM_C3;
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_R3 : EKT_NUMPAD_TERM_R3;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_NUMPAD_CLEAR) {
|
||||
state->buttons[0] |= 1 << (io_is_terminal ? 4 : 4);
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_C1 : EKT_NUMPAD_TERM_C1;
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_R4 : EKT_NUMPAD_TERM_R4;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_NUMPAD_ENTER) {
|
||||
state->buttons[0] |= 1 << (io_is_terminal ? 4 : 4);
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_C3 : EKT_NUMPAD_TERM_C3;
|
||||
state->buttons[0] |= !io_is_terminal ? EKT_NUMPAD_SATE_R4 : EKT_NUMPAD_TERM_R4;
|
||||
}
|
||||
|
||||
if (io_is_terminal) {
|
||||
if (gamebtn & EKT_IO_GAMEBTN_TERMINAL_CANCEL) {
|
||||
state->buttons[0] |= 1 << 4;
|
||||
state->buttons[1] |= 1 << 0;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_TERMINAL_DECIDE) {
|
||||
state->buttons[0] |= 1 << 4;
|
||||
state->buttons[1] |= 1 << 1;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_TERMINAL_LEFT) {
|
||||
state->buttons[0] |= 1 << 4;
|
||||
state->buttons[0] |= 1 << 3;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_TERMINAL_UP) {
|
||||
state->buttons[0] |= 1 << 4;
|
||||
state->buttons[0] |= 1 << 5;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_TERMINAL_RIGHT) {
|
||||
state->buttons[0] |= 1 << 4;
|
||||
state->buttons[0] |= 1 << 2;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_TERMINAL_DOWN) {
|
||||
@ -191,18 +207,16 @@ static HRESULT ekt_io4_poll(void *ctx, struct io4_state *state)
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_TERMINAL_LEFT_2) {
|
||||
state->buttons[0] |= 1 << 4;
|
||||
state->buttons[1] |= 1 << 3;
|
||||
}
|
||||
|
||||
if (gamebtn & EKT_IO_GAMEBTN_TERMINAL_RIGHT_2) {
|
||||
state->buttons[0] |= 1 << 4;
|
||||
state->buttons[1] |= 1 << 2;
|
||||
}
|
||||
}
|
||||
|
||||
state->adcs[0] = 1;
|
||||
state->adcs[1] = 1;
|
||||
state->adcs[2] = x;
|
||||
state->adcs[3] = y;
|
||||
state->spinners[2] = x;
|
||||
state->spinners[3] = y;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -4,4 +4,21 @@
|
||||
|
||||
#include "board/io4.h"
|
||||
|
||||
enum {
|
||||
EKT_NUMPAD_SATE_R1 = 1 << 1,
|
||||
EKT_NUMPAD_SATE_R2 = 1 << 0,
|
||||
EKT_NUMPAD_SATE_R3 = 1 << 15,
|
||||
EKT_NUMPAD_SATE_R4 = 1 << 14,
|
||||
EKT_NUMPAD_SATE_C1 = 1 << 12,
|
||||
EKT_NUMPAD_SATE_C2 = 1 << 11,
|
||||
EKT_NUMPAD_SATE_C3 = 1 << 10,
|
||||
EKT_NUMPAD_TERM_R1 = 1 << 1,
|
||||
EKT_NUMPAD_TERM_R2 = 1 << 0,
|
||||
EKT_NUMPAD_TERM_R3 = 1 << 15,
|
||||
EKT_NUMPAD_TERM_R4 = 1 << 14,
|
||||
EKT_NUMPAD_TERM_C1 = 1 << 13,
|
||||
EKT_NUMPAD_TERM_C2 = 1 << 12,
|
||||
EKT_NUMPAD_TERM_C3 = 1 << 11,
|
||||
};
|
||||
|
||||
HRESULT ekt_io4_hook_init(const struct io4_config *cfg, bool is_terminal);
|
||||
|
@ -18,6 +18,7 @@ void ekt_kb_config_load(
|
||||
cfg->vk_stratagem = GetPrivateProfileIntW(L"io4", L"stratagem", 'D', filename);
|
||||
cfg->vk_stratagem_lock = GetPrivateProfileIntW(L"io4", L"stratagem_lock", 'F', filename);
|
||||
cfg->vk_hougu = GetPrivateProfileIntW(L"io4", L"hougu", 'G', filename);
|
||||
cfg->vk_ryuuha = GetPrivateProfileIntW(L"io4", L"ryuuha", 'H', filename);
|
||||
|
||||
cfg->vk_tenkey_0 = GetPrivateProfileIntW(L"io4", L"tenkey_0", VK_NUMPAD0, filename);
|
||||
cfg->vk_tenkey_1 = GetPrivateProfileIntW(L"io4", L"tenkey_1", VK_NUMPAD1, filename);
|
||||
@ -32,8 +33,8 @@ void ekt_kb_config_load(
|
||||
cfg->vk_tenkey_clear = GetPrivateProfileIntW(L"io4", L"tenkey_clear", VK_DECIMAL, filename);
|
||||
cfg->vk_tenkey_enter = GetPrivateProfileIntW(L"io4", L"tenkey_enter", VK_RETURN, filename);
|
||||
|
||||
cfg->vk_vol_down = GetPrivateProfileIntW(L"io4", L"vol_down", VK_SUBTRACT, filename);
|
||||
cfg->vk_vol_up = GetPrivateProfileIntW(L"io4", L"vol_up", VK_ADD, filename);
|
||||
cfg->vk_vol_down = GetPrivateProfileIntW(L"io4", L"vol_down", VK_NEXT, filename);
|
||||
cfg->vk_vol_up = GetPrivateProfileIntW(L"io4", L"vol_up", VK_PRIOR, filename);
|
||||
|
||||
cfg->vk_terminal_decide = GetPrivateProfileIntW(L"io4", L"decide", 'A', filename);
|
||||
cfg->vk_terminal_cancel = GetPrivateProfileIntW(L"io4", L"cancel", 'S', filename);
|
||||
|
@ -11,6 +11,7 @@ struct ekt_kb_config {
|
||||
uint8_t vk_stratagem;
|
||||
uint8_t vk_stratagem_lock;
|
||||
uint8_t vk_hougu;
|
||||
uint8_t vk_ryuuha;
|
||||
|
||||
uint8_t vk_tenkey_0;
|
||||
uint8_t vk_tenkey_1;
|
||||
|
@ -18,6 +18,7 @@ enum {
|
||||
EKT_IO_GAMEBTN_STRATAGEM = 0x04,
|
||||
EKT_IO_GAMEBTN_STRATAGEM_LOCK = 0x08,
|
||||
EKT_IO_GAMEBTN_HOUGU = 0x10,
|
||||
EKT_IO_GAMEBTN_RYUUHA = 0x20,
|
||||
EKT_IO_GAMEBTN_NUMPAD_0 = 0x100,
|
||||
EKT_IO_GAMEBTN_NUMPAD_1 = 0x200,
|
||||
EKT_IO_GAMEBTN_NUMPAD_2 = 0x400,
|
||||
|
@ -39,7 +39,7 @@ HRESULT ekt_kb_init(const struct ekt_kb_config* cfg, const struct ekt_io_backend
|
||||
static void ekt_kb_get_gamebtns(uint32_t* gamebtn_out) {
|
||||
assert(gamebtn_out != NULL);
|
||||
|
||||
uint8_t gamebtn = 0;
|
||||
uint32_t gamebtn = 0;
|
||||
|
||||
if (GetAsyncKeyState(config.vk_hougu) & 0x8000) {
|
||||
gamebtn |= EKT_IO_GAMEBTN_HOUGU;
|
||||
@ -61,6 +61,10 @@ static void ekt_kb_get_gamebtns(uint32_t* gamebtn_out) {
|
||||
gamebtn |= EKT_IO_GAMEBTN_STRATAGEM_LOCK;
|
||||
}
|
||||
|
||||
if (GetAsyncKeyState(config.vk_ryuuha) & 0x8000) {
|
||||
gamebtn |= EKT_IO_GAMEBTN_RYUUHA;
|
||||
}
|
||||
|
||||
if (GetAsyncKeyState(config.vk_tenkey_0) & 0x8000) {
|
||||
gamebtn |= EKT_IO_GAMEBTN_NUMPAD_0;
|
||||
}
|
||||
@ -162,9 +166,9 @@ static void ekt_kb_get_trackball(uint8_t* x, uint8_t* y) {
|
||||
current_x += config.speed;
|
||||
}
|
||||
if (GetAsyncKeyState(config.y_down) & 0x8000) {
|
||||
current_y -= config.speed;
|
||||
} else if (GetAsyncKeyState(config.y_up) & 0x8000) {
|
||||
current_y += config.speed;
|
||||
} else if (GetAsyncKeyState(config.y_up) & 0x8000) {
|
||||
current_y -= config.speed;
|
||||
}
|
||||
|
||||
*x = current_x;
|
||||
|
Reference in New Issue
Block a user