## Link to GitHub Issue or related Pull Request, if one exists
n/a
## Description of change
To make plugin development easier, add `get_module_info` and
`get_plugin_directory` to deal with common tasks for hooking DLLs and
reading INI files.
Also, add the ability to register for d3d9 present callbacks via
`register_d3d9`, which makes it significantly easier for plugins to draw
things on screen.
## Testing
See sample code.
## Link to GitHub Issue or related Pull Request, if one exists
Continues #899
## Description of change
#899 added the ability to display the gitadora subscreen in lanscape
mode with black bars on the side. With the new option the black bars can
instead display the LEFT / RIGHT screens, completing the two-monitor
full screen use case for arena model.
## Testing
## Link to GitHub Issue or related Pull Request, if one exists
Fixes#114
## Description of change
Initial support for Silent Scope: Bone Eater, enough to be playable;
doesn't include QoS work needed to make this a smoother experience.
* Game detection
* Fix DX11 overlay to work with non-Unity games
* Implements sub monitor i/o (only really needed to get past I/O check)
* Try to make the game reasonably playable with a mouse
* Ignore the game's attempt to move windows, position them in a
reasonable place
* Fix language hook
## Testing
## Link to GitHub Issue or related Pull Request, if one exists
#0
## Description of change
MSE method of streaming video needs the dimensions up front. This new
api delivers that. Also provides an easier way to determine which
screens are available and a way to discover port number.
## Testing
See pending changes in substream project
## Link to GitHub Issue or related Pull Request, if one exists
fixes#875
## Description of change
Adds `-apistream`, an optional HTTP video stream of the mirrored screen.
It listens on the API port +2.
Two endpoints, sharing the same `screen`, `fps` and `q` parameters:
/stream.mjpg JPEG frames, for clients with no container support
/stream.h264 H.264 annex-b, for an app driving MediaCodec or
VideoToolbox itself
One encoder per connection, fed by a per-screen pump that always hands
over the newest frame, so a slow reader drops frames instead of building
a backlog. `capture.get_jpg` behaviour is unchanged.
Additional documentation for developers:
https://github.com/spice2x/spice2x.github.io/wiki/Video-Stream
## Testing
## Link to GitHub Issue or related Pull Request, if one exists
#0
## Description of change
Significantly speeds up API screen capture and D3D9 screenshots saving.
Two reasons for doing this:
1. We now have a 4K game (GITADORA) and existing capture code was taking
multiple seconds.
2. Renewed user interest on streaming as we have a couple more companion
apps in active development.
**API screen capture (streaming), 1280x720:** 14.3ms -> 6.3ms per frame.
Back buffer copies go to pooled `D3DPOOL_SYSTEMMEM` surfaces via
`GetRenderTargetData` instead of allocating a lockable render target
every frame, and TooJpeg is replaced with libjpeg-turbo (encode 9.8ms ->
3.0ms). MSAA remains unsupported
**Screenshots for GITADORA arena model, across 4 screens with one of
them 4K**: 4068ms -> 124ms. `D3DXSaveSurfaceToFileA` is replaced with
fpng (encode 4043ms -> 76ms) and the screens encode in parallel.
Dropping D3DX also removes the `d3dx9_43.dll` ... `d3dx9_24.dll` probing
loop, so screenshots no longer fail outright on machines with no D3DX9
runtime installed.
Screenshot surfaces are read on the present thread, so no D3D call
reaches another thread for screenshots. This fixes a hang in DDR X2
introduced earlier in the branch: its device has no internal locking,
and reading the surface on a pool thread while the present thread sat
inside `GetRenderTargetData` left the game's own render thread
deadlocked.
## Testing
- **GITADORA** (arena model, D3D9Ex, 4K main plus three subscreens,
windowed) with
`-screenshotsub`: three sets of four screenshots, images verified
correct. Completion
order differs between sets, so the screens really are encoding in
parallel.
- **LovePlus** (KLP, plain D3D9, 768x1360): covers the inline path used
by games whose
image processing must not leave the present thread.
- **API screen capture** through a companion app: live video correct
throughout.
- **Print Screen** bound as the screenshot key: the clipboard copy
succeeded on every shot.
- Quitting the game after capturing leaves no `IDirect3DDevice9`
reference count warning,
so the pooled readback surfaces are released along with the device.
## Link to GitHub Issue or related Pull Request, if one exists
Related: #859 and #862.
## Description of change
Three SDVX (Valkyrie model) fixes:
* **API touch went to the wrong window.** SDVX registers touch on both
its Main Screen and Sub Screen windows, and the native injector kept
whichever attached last. The touch surface is now published explicitly:
sub screen window when windowed, main window in fullscreen.
* **Landscape never rotated API coordinates.** Synthetic contacts bypass
`transform::hardware_to_game`, so they missed the rotation a real finger
gets. Applied before injection now, as portrait already did. Extracted
to `sdvx_landscape_rotate` so both paths share it; gated on the native
path since `wintouchemu` rotates via the subscreen overlay instead.
* **`-sdvxnosub` didn't hide the sub window in fullscreen.**
`ShowWindow_hook` had branches for GITADORA, pop'n and IIDX but not
SDVX. Added the missing one.
## Testing
Tested Nabla
## Link to GitHub Issue or related Pull Request, if one exists
#0
## Description of change
Fix mouse and touch API handling for gitadora.
* hook native touch in every arena window mode (previously only using
wintouchemu for 1 windowed mode)
* publish the touch window (SMALL panel, or the main window drawing the
overlay) and only attach injection there
* route touch on the SMALL window straight through instead of the
overlay transform, and accept the mouse only there
* fix spiceapi by forcing 800x1280 touch canvas size
* run API capture before the subscreen present to fix api not showing
sub image
## Testing
Test:
gitadora 1/2/4 windowed mode, fullscreen
iidx /sdvx / popn windowed/fullscreen for regressions
## Link to GitHub Issue or related Pull Request, if one exists
#0
## Description of change
Adds `-screenshotsub`. Off by default. When on, screenshots include the
subscreens. All subscreens are captured, even if they are hidden from
view. Works for all four screens of gitadora arena model as well.
This should also fix an issue with API / companion app not capturing
gitadora subscreen correctly.
Note: only done for DX9... DX11 will need another PR to make this work.
Unrelated to this PR, there seems to be a bug with gitadora not
accepting mouse or api touch input.
## Testing
## Link to GitHub Issue or related Pull Request, if one exists
#0
## Description of change
Adds the `-screenshotoverlay` option.
By default, file screenshots exclude the Spice overlay. Enabling this
option captures screenshots after the overlay is rendered.
Also updates DX11 backend to allow screenshots even when overlay is
disabled.
## Testing
## Link to GitHub Issue or related Pull Request, if one exists
n/a
## Description of change
Create a new thread that polls for the following hotkeys:
* super exit (both alt+f4 and bound key)
* coin insert
* screenshot
The goal is to make the capture of these more reliable, because before
this PR it wasn't.
## Testing
## Link to GitHub Issue or related Pull Request, if one exists
n/a
## Description of change
Un-deprecate SDVX landscape mode. The game calls `GetViewport` to figure
out the camera position, so if we return a sane value the game goes back
to rendering correctly.
## Testing
Tested nabla only
## Link to GitHub Issue or related Pull Request, if one exists
Fixed https://github.com/spice2x/spice2x.github.io/issues/740
## Description of change
- Enable native D3D9 adapter-group dual fullscreen for the GITADORA
Arena model when the two-screen MAIN + SMALL configuration is selected
without windowed mode.
- Present MAIN and SMALL on their respective monitor heads while keeping
the invisible LEFT and RIGHT targets offscreen.
- Scope the new fake-swap-chain query behavior to the hidden GITADORA
two-head targets, preserving existing behavior for other games and
configurations.
The existing borderless-windowed two-screen path could not consistently
keep input and game timing synchronized and also reduced rendering
performance. Native dual fullscreen avoids that windowed composition
path.
## Testing
- Manually tested GITADORA Arena with separate MAIN and SMALL monitors
in fullscreen mode. Windowed mode still works if the user chooses to use
that.
- Confirmed both displays render correctly, touch input works on the
SMALL screen, gameplay input stays synchronized, and gameplay holds a
steady 60 FPS.
- Built `spicetools_spice64` at commit `e4a98e9` with the repository
Docker toolchain.
- Confirmed no new compiler warnings.
- Confirmed the forbidden static DLL import check passes.
- Confirmed the Windows 7 DLL compatibility check reports `All DLLs
OK!`.
---------
Co-authored-by: vgod <428979+vgod@users.noreply.github.com>
## Link to GitHub Issue or related Pull Request, if one exists
Fixes#833
## Description of change
Last couple PRs - such as #820#827#828 - made the native touch hook &
touch injection using `InjectTouchInput` the default path, since it
performs much more reliably with both real touch screens and mouse (or
any other synthetic source).
However, user has reported that WINE lacks `InjectTouchInput` which
means this won't work.
As a fix, revive the old wintouchemu code. Native touch is still the
default, but under following circumstances:
1. if `-touchemuforce` is set, or
2. if any of the required Windows touch APIs are unavailable
then we fail over from native touch to wintouchemu code.
For Linux, condition #2 would be hit during init, and gracefully switch
over.
Caveat: the poke code for IIDX and Nost will continue to require native
touch, I do not want to maintain two paths for this. This means that
iidx poke will stop working on Linux, unfortunately.
## Testing
Tested on Windows with `-touchemuforce` set. This is mostly reverting
Linux code path back to where we were last release, so this should just
work with wine.
## Link to GitHub Issue or related Pull Request, if one exists
n/a
## Description of change
Prevent the game from launching a blank window when launching fullscreen
with sub disabled.
## Testing
## Link to GitHub Issue or related Pull Request, if one exists
#814
## Description of change
Make gitadora arena model use native touch instead of wintouchemu. Only
single window mode with overlay is affected.
This removes the last consumer of `INJECT_MOUSE_AS_WM_TOUCH` so all of
that code can be deleted.
## Testing
Tested touch screen and mouse interaction with single window mode.
## Link to GitHub Issue or related Pull Request, if one exists
Fixes#814
## Description of change
Remove iidx/sdvx/popon `native touch` options.
Remove dead code in wintouchemu that deals with these games.
Native touch is now at feature-parity with wintouchemu. Native touch
options work better with touch screens, while rawinput-based wintouchemu
has compat issues on some touchscreens. For these subscreen games
deprecate the usage of wintouchemu and make them use native touch stack
by default.
### For future consideration
Gitadora - not sure what to do with this one. We only use wintouchemu
for the single window case. For all other configurations, the game
accepts mouse and touch input without any hooks, so perhaps nothing
needs to be done here.
Nostalgia - consider moving away from wintouchemu and adopt native touch
hook here as well.
## Testing
WIP
## Link to GitHub Issue or related Pull Request, if one exists
User reported
## Description of change
Sometimes the game moved the main window after `CreateWindowExA`
returned but before D3D initialization called
`graphics_capture_initial_window`. During this gap,
`GRAPHICS_HOOKED_WINDOW` was not set, so the placement hooks could not
identify the main window and preserve its monitor override. GITADORA
main, LEFT, and RIGHT windows are now registered immediately after
creation so later placement calls cannot undo their overrides.
This also adds `-gdwsmallsize` and `-gdwsmallpos` for explicitly setting
the SMALL window size and position. Explicit values override the
corresponding monitor-derived geometry, allowing the SMALL window's
10:16 aspect ratio to be preserved instead of stretching it to fill a
monitor.
## Testing
## Link to GitHub Issue or related Pull Request, if one exists
Part 1 of many fixes for #814.
## Description of change
For the native touch hook - add code to inject synthetic touches using
Windows API (`InjectTouchInput`).
Note that this is Windows 8+ only, but we can make an assumption that we
are running on Win10+ for these games (TDJ/UFC/High Cheers) since the
cabs assume Win10.
Detect mouse events and allow IIDX poke to call into this to inject
synthetic touches.
Also, update the nativetouchhook to independently calculate window size
and rotation, instead of relying on rawinput layer.
## Testing
Tested to work with native touch option on IIDX, SDVX, POPN, all full
screen / windowed / sub on/off combinations.
Edge cases:
* sdvx main monitor rotated 270 deg
* touch invert option
* windowed mode resize / moved
All seem to work.
## Link to GitHub Issue or related Pull Request, if one exists
n/a
## Description of change
Adds an option to disable Live2D. Can be disabled everywhere, or just
during a song.
## Testing
Tested EG final and recent Nabla.
Only affects the caption bar.
Should work for:
- [x] standalone configurator
- [x] dx9 games, including multi-window games like gitadora
- [x] Unity games
Add a timeout and skip signalling to the D3D9 capture path so the API
thread no longer waits indefinitely when Present stops during loading.
Return the last successful JPEG frame as a fallback.
## Link to GitHub Issue or related Pull Request, if one exists
#746
## Description of change
* Fix `capture.get_jpg` blocking indefinitely when D3D9 screen capture
cannot
complete during game loading (e.g. no Present calls).
* Add a 2-second timeout to `graphics_capture_receive_jpeg()` and cancel
pending capture requests on timeout.
* Signal capture skip from D3D9 failure paths via
`graphics_capture_skip()`.
* Cache the last successful JPEG per screen and return it as a fallback
when a new capture fails.
Tested with **stock iOS Spice Companion** only. I have not tested
Android or
other Companion clients. The iOS client implementation differs from the
others; this fix is server-side only.
No config file, CLI option, or API schema changes.
## Testing
* Built locally with llvm-mingw cross-compiler (WSL).
* Docker build (`src/spice2x/build_docker.sh`): Pending
* Tested with stock iOS Spice Companion on iPad: Mirror remains
connected
during game loading instead of returning to KeyPad.
## Link to GitHub Issue or related Pull Request, if one exists
N/A
## Description of change
Adds GITADORA Arena windowed monitor layout options for the GITADORA,
LEFT, RIGHT, and SMALL windows.
This also applies the selected window border style to all four GITADORA
Arena windows, and allows the SMALL touch window to be resized in
windowed mode while keeping touch coordinates updated.
## Testing
- Manually tested GITADORA Arena windowed mode:
- default, resizable, and borderless window styles
- per-window monitor placement
- SMALL resize
- SMALL touch coordinate mapping after resize
## Link to GitHub Issue or related Pull Request, if one exists
Fixes#134
## Description of change
Add ImGui DX11 backend implementation, and integrate into the spice
overlay.
The tricky part is that some of the Unity games:
1. Launch multiple windows, and
2. Can be resized (even full screen games launch at a certain resolution
and then expand to fit desktop resolution)
3. lazy load DX11 DLLs
This PR also adds screenshot functionality, but screen resize is not
implemented.
## Testing
Seems to be working for most games. Need to do final tests for:
- [x] CCJ (attract movie plays as well)
- [x] Busou Shinki (title movie plays)
- [x] MFG
- [x] QuizKnock
- [x] Polaris Chord
- [x] check dx9 for regression
## Link to GitHub Issue or related Pull Request, if one exists
#0
## Description of change
Combine the two layout options into one
## Testing
- [x] windowed, x4
- [x] windowed, x2
- [x] windowed, x1 with sub
- [x] fs
## Description of change
Added an option to only disable the left/right screens of gitadora gw
delta while exposing the touch panel screen.
## Testing
Tested by hand on CachyOS + hyprland + gamescope + wine + vnc + phone +
cat 🐈⬛
<img width="2560" height="1707" alt="image"
src="https://github.com/user-attachments/assets/a2ef0172-68e2-43c2-89c3-4863698f2f00"
/>
## Link to GitHub Issue or related Pull Request, if one exists
#477
## Description of change
By default the game needs 4 monitors.
With the new option to disable subscreens, you can now boot fullscreen
with a single 4K monitor, with subscreen overlay enabled. Side monitors
are not shown in the overlay; only the touch screen is emulated.
## Future work
- [ ] custom resolution (-forceres) doesn't work properly (hooking
ResetEx does allow the game to boot but will render incorrectly;
probably needs hex edits)
- [x] enable this automatically if the user has fewer than 4 monitors
- [ ] ability to boot with a 4k main screen + small subscreen (with no
side screens which do nothing gameplay wise), but this whole display
emulation is a nightmare to work with & test thoroughly so it'll have to
be in the future.
## Testing
Checklist:
- [x] fs on 1 monitor with option set
- [x] fs on 2 monitor with option set
- [x] windowed - default (4 windows, no overlay)
- [x] windowed - with option set (1 window, overlay)
- [x] fs with 4 monitors?
- [x] check popn hc for regression
## Link to GitHub Issue or related Pull Request, if one exists
n/a
## Description of change
When booting in fullscreen, hide the subscreen from the alt+tab list and
from the task bar. Alt-tabbing to it does nothing, so this is just to
avoid confusion.
No change to windowed mode.
## Testing
Tested TDJ/SDVX/Popn. Didn't test Gitadora but it's probably fine..
## Link to GitHub Issue or related Pull Request, if one exists
n/a
## Description of change
Add a new option under `Monitor` group to change the monitor resolution
before booting the game, very similar to how orientation / refresh rate
options work.
This would be useful for games like Polaris Chord that boots at current
resolution but manages to have graphical issues when not in 1080p.
## Testing
## Link to GitHub Issue or related Pull Request, if one exists
Fixes#562
## Description of change
### rawinput touch fixes
In rawinput touch handler, if the mouse events (`WM_LBUTTONDOWN`,
`WM_MOUSEMOVE`, `WM_LBUTTONUP`) originated from a touch screen, drop
them on the floor instead of treating them as touch events.
This is an attempt to fix phantom touch issues we see with some screens.
Fix another issue where, if mouse is clicked inside the window, and then
dragged outside the window and button is released, touch point (id 0)
continues to be held.
### wintouchemu fixes
If we detected a touch input recently (500ms), ignore new mouse clicks.
This isn't perfect, but hopefully it helps with filtering out mouse
clicks originating from touch screens.
Also, switch over to detecting the primary mouse button correctly, not
just the left mouse button.
### notes
Future investigation: are there really touchscreens that report a mouse
HID capability & insert mouse events? We could have a way to filter them
at rawinput level but it'll be ugly.
## Testing
Tried jubeat, beatstream..
## Link to GitHub Issue or related Pull Request, if one exists
Fixes#675
Yet another regression from #604
## Description of change
When overlay was hidden (not visible) it was still accepting keyboard
input, so when it became visible again the queued up keystrokes got
processed all at once.
Also, fix a bug with monitor settings update kicking in when in windowed
mode - this really should have been only for full screen.
## Testing
Tested DDR windowed / full screen, TDJ with subscreen overlay windowed /
fullscreen.
## Link to GitHub Issue or related Pull Request, if one exists
Fixes#663
## Description of change
Apply monitor rotation and refresh rate again when fullscreen focus is
regained.
## Testing
Tested with sdvx7
## Description of change
This code adds a window title to FutureTomTom when running in windowed
mode and allows the windowed graphics hooks to take effect.
## Testing
I ran the game and made sure fullscreen mode still worked as well as all
window move/resize functionality.
## Description of change
This adds a toggleable option to remove the rounded window corners when
running a game, or a subscreen, in a window on Windows 11 and upwards.
## Testing
On Windows 11: Resort Anthem, MÚSECA and EPOLIS were tested and the
window corners were removed from both main windows and the TDJ subscreen
when running in windowed mode, with no change in fullscreen mode.
On Windows 7: IIDX18 was tested with no change, the call to
`DwmSetWindowAttribute` is ignored as `DWMWA_WINDOW_CORNER_PREFERENCE`
doesn't exist.
For XP builds, the call is compiled out to avoid linking against dwmapi
and windows_dll_compat_checker returns successfully when testing against
the XP Embedded image. I can't test it on XP, but it ran on Vista.
## Link to GitHub Issue or related Pull Request, if one exists
#618
## Description of change
The game insists on having two monitors. Hook various DX9 and Win32
monitor APIs to fake a monitor if the user only has one. This correctly
convinces the game that it needs to draw two screens instead of just
one.
## Testing
WIP
## Link to GitHub Issue or related Pull Request, if one exists
#618
## Description of change
Add overlay for subscreen.
Add an option for no subscreen window.
Use the same "force redraw subscreen" logic we used in SDVX to fix the
same issue.
Known issues:
* still crashing when running windowed if there is only one monitor
* having only one monitor causes sunscreen overlay to not work
(NumberOfAdaptersInGroup issue?)
## Testing
## Link to GitHub Issue or related Pull Request, if one exists
#618
## Description of change
Before calling `CreateWindowEx[A/W]`, check dimensions of the window
about to be created, and check if it will be out of bounds (completely
or partially).
If it's completely out of bounds, move it to `(0, 0)` to prevent crashes
or rendering issues.
## Testing
Tested popn and sdvx.
## Link to GitHub Issue or related Pull Request, if one exists
#618
## Description of change
Get windowed mode to work.
## Testing
tbd... i/o doesn't work right now but it launches two windows at
least...
This was a lot more background work than expected, but that is the
nature of unnecessary hobbies I guess. Most things in here are obvious,
so here's the non-obvious thoughts and notes:
1. All the XP stuff is optional, if the toolchain isn't available it
won't even try
2. The docker build is the "known good" build and now has all the
required tools for XP and checking binaries
a. If you're OK with it, can add the XP_MUST_BUILD flag to
build_docker.sh
4. New `SPICE_XP` flag to comment out blocks
5. We could technically build using the Docker image I've made for my XP
compatible LLVM toolchain, but combining the binaries into a single zip
at the end of it is somewhat tedious, so I've chosen to grab the
binaries from my release
6. I also wrote a DLL checker to make sure the final binaries are
_actually_ XP compatible, which found some issues on x86_64 (I don't
know a single game that runs on 64 bit XP, but it wasn't too much effort
so whatever). This also won't run if missing, just to save the trouble.
7. The build script is still pretty shit, I've made some minor
improvements
a. `/usr/bin/env bash` instead of `/bin/bash` as it's more correct
b. Adding `-it` to the docker build, so Ctrl+C actually halts it
c. Main issue is that failures don't halt, because of the custom error
catching function. This has caused a lot of frustration, maybe we can
change that
## Testing
It runs on 32 and 64 bit installs of XP. My jubeat cab is on Win10 these
days and I haven't got around to testing an actual game, but I've
distributed test builds of this to people who *have* confirmed it works
as expected.
## Description of change
Adds `-mainmonitor` option which changes the monitor layout before
launching the game. This is much more reliable than the old `-monitor`
option which operated at DX9 level. This works for TDJ/UFC subscreens,
for example.
Rename `-monitor` option to `-dx9mainadapter` to discourage use.
`-monitor` will continue to work, of course.
Changing of primary monitor happens first before any orientation changes
/ refresh rate changes, which means those options will result in the
logically correct configuration.
Create a new option category for `Monitor` (rotate, refresh rate, etc).
Add a monitor selection widget for `-mainmonitor` option in the
configurator.
Improve how we log names of monitors in the log during boot - should be
less of "Generic PnP Monitor" after this.
## Description of change
Rotate monitor & change the refresh rate **well before** the game is
launched.
This is much faster and more reliable compared to what we do now, which
is trying to do monitor changes during CreateWindow hooks. For example,
SDVX makes a bunch of OS / NVAPI calls to figure out monitor geometry
while it's booting, and by the time CreateWindow is called, the game
already made up its mind, which leads to weird graphical issues.
This affects both windowed mode and full screen.
In addition, add options for normal orientation (landscape) and upside
down (landscape, flipped) options. This can be used if the monitor is
normally rotated to portrait, but the game needs to be in landscape.
Fix stale frame returned by capture API on rapid successive calls
> [!NOTE]
> Before submitting code changes...
> * Please do note that this is a GPL v3.0 open source project.
> * Please read the
[CONTRIBUTING](https://github.com/spice2x/spice2x.github.io/blob/main/CONTRIBUTING.md)
guide.
> * Maintainers reserve the right to reject or modify your submission
without reason.
> * No new compiler warnings must be introduced. Check the CI build
results.
>
> Feel free to remove this section after you have read it.
## Link to GitHub Issue or related Pull Request, if one exists
https://github.com/spice2x/spice2x.github.io/issues/582
## Description of change
When using the SpiceAPI `capture` endpoint for taking screenshots, if
you call multiple times in a row in a short period, there's a good
chance for duplicate / stale data to be returned, and you end up with
multiple identical screenshots. This is due to a race condition in the
graphics capture pipeline because the capture data is never reset to
null between invocations.
`graphics_capture_receive_jpeg()` never resets the capture buffer's data
pointer to `nullptr` after consuming it. The condition variable wait
predicate checks `data != nullptr`, so subsequent calls find the
predicate already satisfied and return immediately with the previous
frame instead of waiting for the render thread to produce a fresh one.
Fix: null out `capture.data` after copying the shared_ptr (which keeps
the pixel data alive via refcount) but before releasing the lock.
## Testing
Tested this locally and invoked the capture API 10+ times in a row
without any duplicates. Previously, every other invocation would be a
duplicate, basically.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Allow user to specify a custom resolution for the sub monitor, in
addition to the existing refresh rate option
This would allow practically any touch monitor (including ones with
weird resolution / aspect ratio / refresh rate) to be used with
IIDX/SDVX.
## Testing
Tested with various resolution / refresh rate combinations on IIDX /
SDVX.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Need to filter out system-created windows (such as `CicMarshalWnd`) when
looking up which window to mess with when user interacts with F11 menu.
While I'm here, clean up the hack for gfdm arena model that remembers
the main window.
## Testing
Tested:
DDR
gfdm arena 4 / 1 window modes
iidx (windowed mode, with/without nosub option)
sdvx with sub windows
Need to check:
full screen games
## Link to GitHub Issue, if one exists
Fixes#341
## Description of change
fix monitor auto-rotate for reflec beat
## Testing
Tested KBR, LBR, MBR (volzza2), MBR (reflesia)
## Link to GitHub Issue, if one exists
#477
## Description of change
This is a work in progress.
What works:
- [x] subscreen overlay shows the touch screen image (in windowed mode)
- [x] touch works in the overlay
- [x] only the main window is shown, other windows are not launched
What doesn't:
- [ ] game occasionally crashes when entering test menu?
- [ ] full screen mode is not tested at all due to monitor requirements
- [ ] need more polish (various options to control the behavior)
## Description of change
Add an option that forces requested refresh rate value for the second
monitor; i.e., instead of 60Hz allow the user to override the adapter to
be 70Hz.
Useful for people who have a touch screen that can't do 60Hz.
I don't know if this would cause any timing issues in IIDX or SDVX, but
it seems to boot and monitor check is unaffected.
## Testing
Tested TDJ And UFC mode with a submonitor that can only do 61Hz.
## Link to GitHub Issue, if one exists
#477
## Description of change
F11 menu (window settings) did not work for arena model because the game
engine races to create many windows, so our logic of grabbing the first
window created doesn't always get the main window.
## Testing