Files
kyoubate-haruka 0e76dd832a diva: input rewrite, dinput/xinput, button alternation, auto-slide, wintouch, printer (#129)
* Rewrote the input handler

Added support for dinput and xinput, full keyboard slider cell binding (#127), hold-takeovers, button alternation and auto-sliding (PS4 behaviour). See segatools.ini for a detailed description about everything.

* Split touch handling into backends and added Wintouch touch emulation

Now you can use actual touchscreens as well as mouse emulation was not the greatest when trying to use an actual touchscreen.

* Fixed input issues

gamebtns was always uninitialized, so good luck trying to do anything. How did nobody ever complain about this? lol

* Fixed resolution issues caused by chaining both gfx hooks

The diva-specific hook is the only one we need. Stacking both has strange effects.

* Added support for the MITSUBISHI CP9550DS printer

Q: Why?
A: /shrug

![https://puu.sh/KQlev/ce2ef0efed.bmp](https://puu.sh/KQlev/ce2ef0efed.bmp)

I am not particularly good at this game (or the pass requirements are insane, 23+12 misses out of ~550 is a fail!?), so if someone could test how this feels as opposed to the PS4 version, that would help a lot!

![https://puu.sh/KQldU/fa4c848ff9.png](https://puu.sh/KQldU/fa4c848ff9.png)

Also something that happens but that I can't reliably reproduce is that my aime card reader randomly becomes NG after a dozen game starts until I delete eeprom.bin.
If that is the case, the only packet sent is SEND_HEX_DATA.

Reviewed-on: https://gitea.tendokyu.moe/TeamTofuShop/segatools/pulls/129
Co-authored-by: kyoubate-haruka <46010460+kyoubate-haruka@users.noreply.github.com>
Co-committed-by: kyoubate-haruka <46010460+kyoubate-haruka@users.noreply.github.com>
2026-08-10 15:41:40 +00:00

60 lines
1.2 KiB
C

#pragma once
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
struct diva_di_config {
wchar_t device_name[64];
uint8_t test;
uint8_t service;
uint8_t start;
uint8_t cross[2];
uint8_t circle[2];
uint8_t square[2];
uint8_t triangle[2];
uint8_t auto_left_button;
uint8_t auto_right_button;
wchar_t auto_left_axis[16];
wchar_t auto_right_axis[16];
bool auto_left_invert;
bool auto_right_invert;
};
struct diva_xi_config {
bool use_select_as_test;
};
struct diva_kb_config {
uint8_t vk_cross;
uint8_t vk_circle;
uint8_t vk_triangle;
uint8_t vk_square;
uint8_t vk_start;
uint8_t vk_slider[32];
uint8_t vk_auto_left;
uint8_t vk_auto_right;
};
struct diva_io_config {
uint8_t vk_test;
uint8_t vk_service;
uint8_t vk_coin;
wchar_t input_mode[16];
wchar_t touch_mode[16];
uint16_t hold_transfer_time_min;
uint16_t hold_transfer_time_max;
uint8_t dropped_input_frames;
struct diva_kb_config kb;
struct diva_di_config di;
struct diva_xi_config xi;
};
void diva_io_config_load(
struct diva_io_config *cfg,
const wchar_t *filename);