#include #include #include #include #include #include "kizunaio/kizunaio.h" #include "kizunaio/config.h" #include "util/dprintf.h" static bool kizuna_io_coin = false; static bool kizuna_io_service = false; static bool kizuna_test_toggle = false; static bool kizuna_test_last_state = false; static uint16_t kizuna_coin_ct = 0; static uint16_t kizuna_service_ct = 0; static struct kizuna_input_config cfg; uint16_t kizuna_io_get_api_version(void) { return 0x0100; } HRESULT kizuna_io_init(void) { dprintf("Kizuna IO: Init\n"); kizuna_io_config_load(&cfg, L".\\bananatools.ini"); return S_OK; } void kizuna_io_get_opbtns(uint8_t *opbtn) { if ((GetAsyncKeyState(cfg.test) & 0x8000)) { if (!kizuna_test_last_state) { kizuna_test_toggle = !kizuna_test_toggle; } kizuna_test_last_state = true; } else { kizuna_test_last_state = false; } if (GetAsyncKeyState(cfg.service) & 0x8000) { *opbtn |= KIZUNA_IO_OPBTN_SERVICE; } if (GetAsyncKeyState(cfg.up) & 0x8000) { *opbtn |= KIZUNA_IO_OPBTN_UP; } if (GetAsyncKeyState(cfg.down) & 0x8000) { *opbtn |= KIZUNA_IO_OPBTN_DOWN; } if (GetAsyncKeyState(cfg.enter) & 0x8000) { *opbtn |= KIZUNA_IO_OPBTN_ENTER; } if (kizuna_test_toggle) { *opbtn |= KIZUNA_IO_OPBTN_TEST; } } void kizuna_io_get_gamebtns(uint8_t *gamebtns) { *gamebtns = 0; if (GetAsyncKeyState(cfg.btn1) & 0x8000) { *gamebtns |= KIZUNA_IO_GAMEBTN_1; } if (GetAsyncKeyState(cfg.btn2) & 0x8000) { *gamebtns |= KIZUNA_IO_GAMEBTN_2; } if (GetAsyncKeyState(cfg.btn3) & 0x8000) { *gamebtns |= KIZUNA_IO_GAMEBTN_3; } if (GetAsyncKeyState(cfg.stick_btn1) & 0x8000) { *gamebtns |= KIZUNA_IO_GAMEBTN_STICK1; } if (GetAsyncKeyState(cfg.stick_btn2) & 0x8000) { *gamebtns |= KIZUNA_IO_GAMEBTN_STICK2; } if (GetAsyncKeyState(cfg.stick_btn3) & 0x8000) { *gamebtns |= KIZUNA_IO_GAMEBTN_STICK3; } } void kizuna_io_get_analog(uint8_t *x, uint8_t *y) { *x = 128; *y = 128; if (GetAsyncKeyState(cfg.stick_up) & 0x8000) { *y += 127; } if (GetAsyncKeyState(cfg.stick_down) & 0x8000) { *y -= 128; } if (GetAsyncKeyState(cfg.stick_right) & 0x8000) { *x += 127; } if (GetAsyncKeyState(cfg.stick_left) & 0x8000) { *x -= 128; } } void kizuna_io_read_coin_counter(uint16_t *coins, uint16_t *services) { if (GetAsyncKeyState(cfg.coin) & 0x8000) { if (!kizuna_io_coin) { kizuna_io_coin = true; kizuna_coin_ct++; } } else { kizuna_io_coin = false; } if (GetAsyncKeyState(cfg.service) & 0x8000) { if (!kizuna_io_service) { kizuna_io_service = true; kizuna_service_ct++; } } else { kizuna_io_service = false; } *coins = kizuna_coin_ct; *services = kizuna_service_ct; }