#include #include #include #include #include #include "ferrumio/ferrumio.h" #include "ferrumio/config.h" #include "util/dprintf.h" static bool ferrum_io_coin = false; static bool ferrum_test_toggle = false; static uint16_t ferrum_coin_ct = 0; static struct ferrum_gamepad_config gamepad_cfg; static struct ferrum_najv4_config najv4_cfg; uint16_t ferrum_io_get_api_version(void) { return 0x0100; } HRESULT ferrum_io_jvs_init(void) { dprintf("Ferrum IO: JVS Init\n"); ferrum_io_najv4_config_load(&najv4_cfg, L".\\bananatools.ini"); return S_OK; } HRESULT ferrum_io_gamepad_init(void) { dprintf("Ferrum IO: Gamepad Init\n"); ferrum_io_gamepad_config_load(&gamepad_cfg, L".\\bananatools.ini"); return S_OK; } HRESULT ferrum_io_jvs_poll(uint8_t *opbtn) { *opbtn = 0; if ((GetAsyncKeyState(najv4_cfg.test) & 0x8000)) { *opbtn |= FERRUM_IO_OPBTN_TEST; } if (GetAsyncKeyState(najv4_cfg.service) & 0x8000) { *opbtn |= FERRUM_IO_OPBTN_SERVICE; } if (GetAsyncKeyState(najv4_cfg.up) & 0x8000) { *opbtn |= FERRUM_IO_OPBTN_UP; } if (GetAsyncKeyState(najv4_cfg.down) & 0x8000) { *opbtn |= FERRUM_IO_OPBTN_DOWN; } if (GetAsyncKeyState(najv4_cfg.enter) & 0x8000) { *opbtn |= FERRUM_IO_OPBTN_ENTER; } return S_OK; } HRESULT ferrum_io_gamepad_poll(uint16_t *gamepad) { *gamepad = 0; if (GetAsyncKeyState(gamepad_cfg.dpad_up) & 0x8000) { *gamepad |= FERRUM_IO_GAMEBTN_UP; } if (GetAsyncKeyState(gamepad_cfg.dpad_left) & 0x8000) { *gamepad |= FERRUM_IO_GAMEBTN_LEFT; } if (GetAsyncKeyState(gamepad_cfg.dpad_down) & 0x8000) { *gamepad |= FERRUM_IO_GAMEBTN_DOWN; } if (GetAsyncKeyState(gamepad_cfg.dpad_right) & 0x8000) { *gamepad |= FERRUM_IO_GAMEBTN_RIGHT; } if (GetAsyncKeyState(gamepad_cfg.trigger_l) & 0x8000) { *gamepad |= FERRUM_IO_GAMEBTN_TRIGGER_L; } if (GetAsyncKeyState(gamepad_cfg.trigger_r) & 0x8000) { *gamepad |= FERRUM_IO_GAMEBTN_TRIGGER_R; } if (GetAsyncKeyState(gamepad_cfg.btn_a) & 0x8000) { *gamepad |= FERRUM_IO_GAMEBTN_A; } if (GetAsyncKeyState(gamepad_cfg.btn_b) & 0x8000) { *gamepad |= FERRUM_IO_GAMEBTN_B; } if (GetAsyncKeyState(gamepad_cfg.btn_x) & 0x8000) { *gamepad |= FERRUM_IO_GAMEBTN_X; } if (GetAsyncKeyState(gamepad_cfg.btn_y) & 0x8000) { *gamepad |= FERRUM_IO_GAMEBTN_Y; } if (GetAsyncKeyState(gamepad_cfg.btn_start) & 0x8000) { *gamepad |= FERRUM_IO_GAMEBTN_START; } return S_OK; } void ferrum_io_jvs_read_coin_counter(uint16_t *coins) { if (GetAsyncKeyState(VK_INSERT) & 0x8000) { if (!ferrum_io_coin) { ferrum_io_coin = true; ferrum_coin_ct++; } } else { ferrum_io_coin = false; } *coins = ferrum_coin_ct; }