## Link to GitHub Issue or related Pull Request, if one exists
#345
Hoping that #180 is also addressed by this change, but I can't test it.
## Description of change
IIDX (TDJ) and SDVX (Valk) will now be able to boot in full screen even
with 3 or more monitors attached.
spice will "hide" from the game any monitors other than the primary
monitor and one other monitor for subscreen, allowing it to boot without
crashing - accomplished by clearing `DISPLAY_DEVICE_ATTACHED_TO_DESKTOP`
flag when monitors are enumerated over `EnumDisplayDevicesA`, and
fortunately both games seem to respect that flag.
Add options (one for IIDX, another for SDVX) that lets you specify the
monitor ID of the second monitor.
When the option is set, user-specified monitor will be used as the
subscreen. When the option is not set, spice will just pick the
lowest-indexed monitor as the subscreen, not counting the primary one of
course.
## Testing
Tested both games with three monitors. Should probably work for four or
more.
## Link to GitHub Issue or related Pull Request, if one exists
#0
## Description of change
Fix random crashes with CCJ.
This should remove the need to add `d3d10warp.dll` to `
preload_libraries` in `ee-config.xml`.
## Testing
Tried a couple games and didn't run into the crash..
## 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.
## Link to GitHub Issue or related Pull Request, if one exists
#287
## Description of change
Switch over to new event-based I/O system in ImGui so that we can keep
up with ImGui updates.
Unlike #287, this change does not modify how mouse position is handled.
That continues to be supported by newer versions of ImGui.
## Testing
wip
## Link to GitHub Issue or related Pull Request, if one exists
#593
## Description of change
* Display a confirmation dialog when clicking on `Generate` for the
first time (to prevent accidental loss of card number)
* If `cardN.txt` contents are read back successfully, show card number
in green to indicate success, and red in case of failure.
## Description of change
Merge option name and command line parameter columns.
Expand the size of widget column.
In Search tab, add a new column to display the category.
Add a highlight effect to rows when hovered over - apply this to all
tables in the configurator UI.
## Link to GitHub Issue or related Pull Request, if one exists
#592
## Description of change
* when custom DLLs are detected (`d3d9.dll`) print out some basic data
from the PE header
* for our own NVIDIA DLL stubs, add manifest files to identify ourselves
* as a bonus, when DLL hooks are loaded from `-k`, print DLL info there
as well
This is mainly to detect when DXVK is in use.
Show better warning message when `ea3-config.xml` / `eamuse-config.xml`
is missing. Right now we just say `failed to load prop/eamuseconfig.xml`
which is really confusing when people look for `eamuse-config.xml` that
never existed in the first place.
## Link to GitHub Issue or related Pull Request, if one exists
#345
## Description of change
When X or Y axis is being bound to any button labeled `TT` or `Knob` or
`VOL-`, show a warning and ask if the user really meant to do that,
encouraging them to use the Analog tab instead.
* add `-card0` `-card1` options at the top of Cards tab to clearly
indicate that they take precedence over card files
* reorganize UI / clean up
* remove ability to directly edit the contents of `card0.txt` /
`card1.txt` as that wasn't very intuitive; instead, encourage users to
use overrides directly or use an external text editor (`Edit` button
opens notepad)
## Link to GitHub Issue or related Pull Request, if one exists
For #587
## Description of change
`Invert Touch` option is now honored by the IIDX/SDVX touch handler.
## Link to GitHub Issue or related Pull Request, if one exists
#579
## Description of change
* Fix profiles being loaded twice on tab switch
* Add more default profiles for some controllers
* Remove borders from tables since they look broken in software renderer
* Add check boxes to import/export only certain parts of of a profile
* Show device identifier string in drop down when applying profiles
since some controllers have multiple identically named interfaces
* Show completion message when action buttons are clicked (`Apply`
button, `Clear all bindings` button both become disabled & shows `done`
message)
## Link to GitHub Issue or related Pull Request, if one exists
#578
## Description of change
Use `Clear All` when there are no defaults, and `Reset All` when there
are defaults.
Clearing analogs should reset values to 0.5, not 0.
## Link to GitHub Issue or related Pull Request, if one exists
#576
## Description of change
Add `Reset All` buttons to these tabs which clears out bindings to none
/ default.
For keypads, introduce a special `Use Preset` button which lets users
pick between numpad and top row number keys.
Update UI-visible string used for vKeys, especially the numpad ones
(e.g., `.` is now `Numpad .` to distinguish from the regular `.`
period).
Breaking change: if the user never had `P1 Keypad 00` set, the default
will change from `Enter` to `Numpad -` since both enter keys trigger the
same. This will affect a small number of popn/ddr players. They can just
change it back.
## Testing
*how was the code tested?*
## Link to GitHub Issue or related Pull Request, if one exists
#574
## Description of change
Refactor so that grouping of lights are in common I/O code. Add this to
IIDX/SDVX/DDR/GitaDora.
## Testing
## Link to GitHub Issue or related Pull Request, if one exists
#574
## Description of change
* Add binds for Nostroller
* Update matching logic to ignore common device-side output names like
"Button" "Light" and "LED" (e.g., `Button 1` from a device now matches
on `P1 1`)
* For RGB matching, in addition to `Light R` on the device also try
`LightR` (Nostroller needs this)
* Add a confirmation dialog for `Clear All`
* Address minor bugs
## Testing
Seems to work on arcin, and Nostroller. Still need to retest Faucetwo.
Hopefully I didn't break Phoenixwan.
## Link to GitHub Issue or related Pull Request, if one exists
related to #154 though this PR doesn't fix it
## Description of change
1. Add an option for cam hook so that the game can be launched without
any camera
1. Rotate image printed out by print-to-file so that it's right side up
(portrait orientation)
## Testing
Able to boot the game without any cameras, and tested printing in test
menu.
"Holo" printing remains broken.
## Link to GitHub Issue or related Pull Request, if one exists
n/a
## Description of change
Hide the ImGui-rendered cursor in the overlay when the mouse is idle for
more than 2 seconds.
## Testing
Tested windowed and fullscreen.
## Description of change
* Show more descriptive error when connection fails (for
`ERROR_WINHTTP_NAME_NOT_RESOLVED`)
* ensure patches are reloaded even if importing fails, since existing
checkboxes get reset
## Link to GitHub Issue or related Pull Request, if one exists
Fixes#563
## Description of change
When buttons are presented as NotRange and instead an array of single
buttons, we are calling `HidP_GetUsages` expecting at most one result
back, but in reality we need to expect all possible buttons on that
usage page since `HidP_GetUsages` returns all buttons in the usage page
+ link collection which would be the entire array of buttons - see
documentation for `HidP_GetUsages` on MSDN.
## Testing
Tested with my own controller modifying USB descriptors... more
controller testing is needed.
## Link to GitHub Issue or related Pull Request, if one exists
## Description of change
Introduce a new modal dialog for picking out some of the options to
improve UX.
Implemented a few for now:
1. UI for picking ASIO drivers from a list (for -iidxasio, -sdvxasio,
-asioconvert, etc)
2. Button to generate card numbers for -card0 and card1
3. Processor Affinity selector (very similar to what's in Windows Task
Manager, list of checkboxes)
4. file selector (file open dialog for various file path overrides like
log file)
5. folder selector (folder override)
I wrote a selector for COM ports as well but how we use the value was
inconsistent (\\\\.\\COMx vs. COMx) and didn't see a huge point in it so
I didn't check it in.
## Testing
## Link to GitHub Issue or related Pull Request, if one exists
## Description of change
Deprecate backend conversion options and replace with one unified option
for enabling WASAPI exclusive conversion to ASIO.
The new option takes in a string (ASIO driver name) and when filled out,
it automatically enables the ASIO backend.
This is to avoid confusion that was caused by the previous option - the
fact that it was split into two (one to enable the conversion, another
to optionally pick which ASIO driver to use) and that user needed to
specify an integer as opposed to the driver name.
## Testing
Tested on IIDX33. Old options should continue to work.
## Link to GitHub Issue or related Pull Request, if one exists
#558
## Description of change
Same as #558 but this PR fixes the non-native touch cases (when
wintouchemu is active).
## Testing
Tested 90 and 270 degree rotation, 1080p and 1440p.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Game expects primary monitor to be in 90 deg rotation, and does the
touch calculation accordingly.
If the user does 270 deg rotation ("portrait, flipped") then the game's
touch calculation is flipped upside down. Detect this and provide the
fixed up values in the touch hook.
## Testing
Tested with SDVX in 90 deg, 270 deg rotation, and 1080p, forced 1440p.
## Link to GitHub Issue, if one exists
#345
## Description of change
When DLL is configured to use TDJ I/O but spice is in LDJ mode, show an
error in LED ticker suggesting the user to turn on `-iidxtdj`.
When DLL is configured to use LDJ I/O but spice is in TDJ mode, show an
error in TDJ overaly suggesting the user to fix the DLL.
Fix a small bug that caused a white window to be created when `-w` is
enabled even when `-iidxtdj` is not, but DLL is using TDJ I/O.
## 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
## Description of change
Some parts of the UI (e.g., Card tab) rely on early auto detection of
the game, which relies on file hints and not the game code. Two games
(PC and MFG) rely on directory presence and not file presence.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Some people have weird DLLs that keep calling
`AddVectoredExceptionHandler` which ends up spamming the log.
## Testing
Tested IIDX with error + signaldisable to confirm the warning message
being shown, ran Polaris Chord once to check "hook hit" message.
The old pages UI was not intuitive and often led to questions like:
* How do I bind multiple controllers to a single input?? (failure to
discover)
* I have a ghost input that won't go away, how do I fix this? Is this a
bug? (non-intuitive UI - there are too many pages and finding out where
each binding is potentially requires scrolling through 100 pages)
* Potential perf issue - user binds too many by accident, or puts
bindings all the way in page 99, requiring us to walk each element in
the vector, wasting precious CPU cycles during an input poll.
This PR removes the multiple pages, and puts everything on a single
page, showing multiple binds in a tree structure.
It also puts a hard limit on how many alternate bindings can be made (8
for buttons, 16 for lights), though if the user has configured more in
older version they will be respected.
## Link to GitHub Issue, if one exists
#0
## Description of change
Occasionally we would read a bad "vKey" for an analog axis and end up
accessing invalid memory (beyond the size of a vector) and potentially
crash or read junk values.
## Testing
Fixed based on minidump, this was a rare repro though.
* Make a custom widget for truncated text that shows a tooltip only when
truncated
* Use the above widget more consistently in various places
* Ensure tooltips still show even when the preceding widget is disabled
## Description of change
Three bugs:
* Some keys are IME-dependent. Right Alt can be IME mode switch for
Japanese / Korean, and Right Ctrl is often the Kanji button.
* If you press modifiers like Ctrl during bind-many-naive, it will skip
over a button, because of broken for loop logic that ends up calling
`inc_buttons_many_index` too many times
* trying to cancel out of bind-many-naive with left and right mouse
buttons swap doesn't work
## Testing
Validating various IME. I don't have a keyboard in another language
though..
## Description of change
* Add a red `x` button to replace `Clear` button in binding tabs
(Buttons/Analog/Lights).
* Add a gray `x` button to replace `Clear` button in options tabs next
to input widgets
* Add helper for truncating text and adding ellipsis (...) to deal with
text overflow in tables.
* Reword some UI text for clarity
## Link to GitHub Issue, if one exists
n/a
## Description of change
Improper bounds check resulting in crash when binding mouse buttons
beyond Mouse 5.
## Testing
Tested with `Edit` function.
## Link to GitHub Issue, if one exists
n/a
## Description of change
For buttons and lights, it's possible to have multiple alternatives.
When you create alternatives and then clear then, the config files
continue to have stale entries. This is because alternatives are stored
in a vector and elements are never deleted when unbound; they get
written out to the XML on modification.
These stale XML entries live forever, and get loaded on next startup of
spice.
This PR fixes that by deleting stale entries - basically, XML nodes will
be kept only until the last valid node (properly bound button or light),
trimming the trailing invalid entries.
## Testing
Manual testing, validating XML.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Disable all window options that change dimensions or position as they
cause problems with touch overlay in windowed mode. Always On Top is the
only thing that's still possible.
## Testing
## Link to GitHub Issue, if one exists
n/a
## Description of change
Before this PR, drums were in the order they appear in test menu.
This is really confusing. Change it so that they appear in the order
they do in default drummania layout.
## Testing
validated manually in gw
## 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
n/a
## Description of change
Gitadora (pre-Delta) tends to soft lock, have graphical issues (menu bg
render as black), or take a long time (minutes) between scene
transitions when window is resized.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Adds an option to pick from four algorithms for guitar picking input.
The default behavior is being switched from legacy (rising edge only,
always 1 frame of input) to SOCD "prefer recent" algorithm. This makes
it slightly easier to navigate the menu with the guitar.
## Testing
Validated gw, gwdelta, and sdvx just in case.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Before this change, if user changes `dest`/`spec`/`rev`, then the "auto
enable patches" settings doesn't get loaded. This is because the patch
manager config file relies on having an exact match of
`model+dest+spec+rev+ext`.
This causes a lot of confusion for:
* people who edit prop files - e.g., to switch between sdvx nemsys/valk
cab modes - and forget to re-enable patches
* people who use batch scripts to change xml files on launch - e.g., for
gitadora, omnimix, etc - even if they checked auto-apply in spicecfg,
when they use the batch script to launch the game, the setting won't be
loaded
This PR solves this by just ignoring the `dest`/`spec`/`rev` fields when
checking if patches should be auto applied on launch. Yes, this may
cause false positive cases, but probably very unlikely, and it's pretty
harmless anyway.
For future consideration: should we fix up gitadora XG disparity (K32 vs
K33 etc)?
## Testing
Manually validated
## Link to GitHub Issue, if one exists
n/a
## Description of change
Add plug&play hooks for RGB camera in DRS.
## Testing
Seems to work with my crappy Logitech C270
Camera options (brightness etc) seem to work in test menu as well).
Tested by another user with realsense camera + logitech camera, both
cams were detected correctly.
## Link to GitHub Issue, if one exists
similar issue as #499
## Description of change
Fix broken bi2x_hook implementations that did not properly allocate I/O
buffers with correct sizes.
People keep copy-pasting other implementation that allocate 0 bytes of
memory, but we run the risk of memory corruption or/or game crashes if
we keep doing this.
We've seen some mystery crashes with CCJ for example, maybe this will
fix that.
While I'm here, implement SOCD cleaner for Polaris Chord.
## Testing
Tested I/O menu with CCJ, play through tutorial (didn't test matches)
Tested GWDelta (test menu and a few songs in guitar)
Tested PC (played a credit)
Tested QKS (still can't get past the title screen)
## 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
Just like the old `sys_code_get_cmdline`, override command line
parameters in `app-config*` so that we can control windowed mode / full
screen.
## Testing
Tested both GF and DM.
Technically both games can boot into the correct mode using `-d -DM` but
we'll try to use the right one just in case.
## 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)
## Link to GitHub Issue, if one exists
Fixes#512
## Description of change
Fix digital wailing not being recognized consistently.
Also address the fact that wailing was completely broken when lefty mode
was on. This requires a new option that the user needs to check off in
the configurator since we can't magically guess if the user is holding
the guitar in lefty mode.
- [x] fix downward wail
- [x] digital lefty mode
- [x] implement all of this for arena model i/o
- [x] test dx cab 2p
- [x] lefty toggle in overlay
- [x] fix analog not working for 2p guitar
- [ ] analog lefty mode?
## Testing
Checked GW and GW Delta
## Link to GitHub Issue, if one exists
Fixes#509
## Description of change
Implement `WrappedIAudioClient3`.
For now, we have only seen SDVX use it (EG final) and only when the
shared mode patch is enabled. Exclusive still goes through version 1.
This means that for V3 we can forego implementing backend conversion
logic (for now).
Only significant addition is `InitializeSharedAudioStream` and this IS
called by SDVX when shared mode patch is enabled.
## Testing
Tested EG final, tested year 1 data, also IIDX shared/exclusive wasapi.
## 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
n/a
## Description of change
Use fmt library for formatting time
Round down sub-second units so that the FPS counter only updates once
per second (instead of Time and Uptime ticking independently)
clean up usage of `localtime` in `logging.cpp`
## Link to GitHub Issue, if one exists
Regressed by #401
## Description of change
Two things from testing SDVX Live2D -
1. ColorFill is almost always too expensive and will lead to drops
1. Scale factor of 0.5 causes GPU to sync and causes drops
(ARGB/XRGB doesn't matter, linear filtering doesn't matter)
1 is fixed by removing ColorFill calls on every frame - instead only do
this once when the user changes the duplicate option (on the next frame)
2 is fixed by updating the UI (limit the slider) though people can
ctrl+click to override these slider limits.
The warning label will be kept with slightly reworded text.
## Testing
tested in sdvx eg final (sudden death) - on my RTX 4070, my FPS is rock
solid 120 fps even with image resize on now.
## Link to GitHub Issue, if one exists
#345
## Description of change
Turn existing warnings for DDR codec issues into deferred error
messages.
## Testing
Tested DDR World with faked codec issues.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Turning on Image Resize feature completely tanks performance of Live2D
in some SDVX songs. Add a giant warning next to the UI.
On my system with RTX 4070, Sudden Death is normally a rock solid
120FPS, but drops to 30-40FPS when resizing is on.
* linear filter does not affect this at all
* window resize options also have no effect
It's really just rendering on a larger surface + calling `StretchRect`
that does this.
Additionally, hide the resolution swap option since it sees very low
usage & has potential gotchas likes this.