## Link to GitHub Issue, if one exists
n/a
## Description of change
When an exception is caught during ACIO hook init, print a special
message to suggest the user to disable RTSS and MSI Afterburner, since
they are known to cause issues.
## Testing
Tried with RTSS enabled with High detection and with it disabled. Also
tried to crash the game a different way and check that the message is
not printed and the callstack is shown propeerly.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Fix an issue when clicking on the TDJ windowed subscreen with overlay
active will occasionally drop all future mouse clicks, until the overlay
is completely hidden.
## Testing
Tested TDJ windowed subscreen, with poke, with auto-pin, and with
spicecompanion.
SDVX: this was never an issue for UFC mode, but this change doesn't make
any functional difference either.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Add `Help` menu.
Move Licenses and About dialog under Help.
Add links to the wiki.
Make game selection drop-down slightly wider to make better use of space
that has been freed up.
## Testing
tested in cfg (with/without game), and in-game overlay
## Link to GitHub Issue, if one exists
n/a
## Description of change
Complain if nvcuda.dll, nvcuvid.dll, or nvEncodeAPI64.dll are found in
modules or in root directory. This would complain for spice-provided
stubs as well.
## Testing
## Link to GitHub Issue, if one exists
Fixes#190
## Description of change
When `-cmdoverride` is specified, any command line arguments are taken
first before merging with what is in the config file.
## Testing
Still testing...
## Link to GitHub Issue, if one exists
n/a
## Description of change
Rotate the printer output so that it's the correct orientation
(portrait, not landscape).
## Testing
Tested via test image, and also in-game, for LP and SDVX.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Add a stub for `cpusbxpkm.dll`. The stub doesn't work, it's only enough
to allow the game to load; but that is irrelevant since spice hooks the
printer at runtime.
## Testing
Observed the game boot, and was able to print out the test image from
test menu. Will do more testing on a real server.
## Link to GitHub Issue, if one exists
Fixes#322
## Description of change
Ensure game launches in full screen when windowed mode setting is off.
Before this PR, the game always launched in windowed mode.
## Testing
Seems to run fine in fullscreen with the monitor in portrait mode.
It does seem to run at even lower framerate (around 24fps, vs. 30fps in
windowed) but it might be expected.
Some weirdness with the mouse cursor when the overlay is active (two
cursors).
## Link to GitHub Issue, if one exists
Fixes#320
## Description of change
Replacing the existing logic that searches for game window to hook touch
on.
Eventually, we should fix all the other games that hook touch by
matching on window title with a call to `FindProcessWindowBeginsWith`.
## Testing
Tested with notepad open that was also titled `LovePlusAC`. Game hooked
correctly when the game was in focus during boot, and also when notepad
was in focus.
## Link to GitHub Issue, if one exists
#316
(this does not fix the issue!)
## Description of change
Add an option to omit `-noCamera` option. Doing so allows the game to
boot and search for a compatible camera using KS API, but will likely
fail since we don't know what cameras are compatible. You end up with a
camera error during boot, which can be ignored by flipping a switch in
the test menu to disable the camera.
No hooks are currently done to make the camera work!
## Testing
Tested to see that turning this on triggers the camera error. No known
camera at the moment.
## Link to GitHub Issue, if one exists
Fixes#139
## Description of change
Add an option for detecting window focus when accepting input.
The new default will be to have the following:
* naive bindings will check for window focus
* rawinput binds are not affected, will continue to be accepted
regardless of focus
Other options (always / never choices) can be picked by the user to
tweak the behavior if needed.
Clean up usage of `0xff` constant to represent invalid naive vkey.
## Testing
Still in progress, especially in regards to performance.
On a i7-9700 system, 10000 calls to `superexit::has_focus()` takes
250-350 microseconds, so this should not be a big deal at all.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Dump monitor resolution and refresh rate to the log on launch.
## Testing
Tested with two monitors.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Allow the server to override client's quality options for screen
mirroring.
On Windows / Android versions (flutter-based) clients, this is already
in the options of those apps. However, the iOS version lacks the quality
options.
## Testing
Tested with iOS and Windows clients.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Mark the option as "sensitive" which censors the option value (adapter's
IP address)
Remove the log entry from spice
This isn't perfect because most of the games like to log the IP address
and subnet anyway, but at least spice itself will stop doing it.
## Testing
Tested 64 bit LDJ with parameter set.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Always log the DLL identifier string in patch manager, even if there are
no patches.
## Testing
Tested 32 / 64 bits.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Log a message if d3d9.dll (and friends) are found in the game root or
the modules directory.
This is to help with troubleshooting in cases where the user is unaware
that d3d9 is being used to inject other DLLs (e.g., ifs_layeredfs), or
when DX9 reimplementation is causing issues / crashes (e.g., dxvk).
## Testing
Observed the new messages being logged in both modules / root directory.
## Link to GitHub Issue, if one exists
Fixes#307
## Description of change
Add an option for making TDJ/UFC subscreen window borderless in windowed
mode
Add another option for keeping the subscreen "always on top".
Add size / position arguments to SDVX windowed subscreen, exactly the
same as what is allowed for IIDX.
## Testing
Seems to work....
## Link to GitHub Issue, if one exists
#304
## Description of change
Complain loudly about DLL conflicts. Show warnings for each DLL that
exists in both modules directory and the root.
This is not based on LoadLibrary hooks, just enumerating DLLs via
filesystem access.
Deliberately not using `log_fatal` since these are not necessarily going
to crash the game. Some people just love to have messy installs and if
the game booted fine before, it should continue to boot.
## Testing
Tested with/without `-modules`, with/without duplicate DLLs.
## Link to GitHub Issue, if one exists
n/a
## Description of change
The check to warn the user about potential MAX_PATH violation should be
stricter. Saw a user with 150 characters run into a crash during boot
for SDVX3.
## Testing
Tested paths under 130 / over 130, in both 32/64 bits.
## Link to GitHub Issue, if one exists
n/a
## Description of change
For JSON config files of the following features:
* patch manager
* screen resize
* IIDX camera hook
* card manager
when saving a new file, store them in %appdata%\spice2x instead of
%appdata%.
On load:
1. If the JSON file exists in %appdata%\spice2x, use that (new path)
1. If the JSON file exists in %appdata%, continue to use that (legacy
path)
It's common for people to have mixed versions of spicetools/spice2x so
we'll continue to read from the %appdata% root if the files are there,
but with a preference for the new path. We will not forcibly move files.
spicetools.xml will continue to live in the %appdata% root. Moving this
will confuse a lot of people, so I'm avoiding this.
Also, this fixes `-patchcfgpath` and `-resizecfgpath` to create
directories as needed (previously the parent directory must have existed
first)
## Testing
Tested -
* existing config files are continued to be read from %appdata%
* new files get created in %appdata%\spice2x\... (both in spicecfg and
in overlay)
* can provide custom path for `-patchcfgpath` `-resizecfgpath` and
observe directories + file created in custom path, try absolute or local
relative paths
## Link to GitHub Issue, if one exists
Fixes#280
## Description of change
Introduce a variant of 32bit spice.exe that is large address aware.
## Compiling
👍
## Testing
Minimal testing has been done to see if the LAA variant can boot
existing 32 bit games.
## Link to GitHub Issue, if one exists
Fixes#277
## Description of change
To avoid confusion, temporarily remove `-sdvxlandscape` because of the
issue described in the bug above.
`forceresswap` is still kept, so there is still a way to do exactly what
`-sdvxlandscape` used to do, if someone really wants it.
## Testing
Checked that `-sdvxlandscape` is ignored, and that `-sdvxlandscape`
continues to be honored.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Previously, the artifact produced by the CI action was `spice2x.zip`.
With this change, it will be `spice2x-ci-1234567.zip` where 1234567 is
the first 7 chars of the commit hash.
Note that for PRs, github produces a merge commit before queueing the
action, so the commit hash won't match up with the HEAD of a fork. The
goal is to just generate unique-ish filenames so this is not a huge
deal.
## Compiling
## Testing
Action has been run in the fork.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Change the usage pattern for Card Manager UI.
### Previous behavior
Previously, it was a list of cards that you select, and click a button
to insert as P1 or P2.
This is fine, but users got confused when they pressed `Insert Card`
overlay key and got a different card inserted, or when auto-insert
didn't work as expected.
Additionally, if you play a game without continue (IIDX/DDR for
example), then it's cumbersome to bring up the overlay and click on
insert card every time.
### New behavior
Insert Card overlay now lets you pick a card and *slot* it into P1 or P2
side.
From that point on, the slotted card number is used as the override,
replacing what was previously passed to `-card0` or `-card1`. This means
that `Insert Card` button and auto-insert will pick up the new card and
use that instead.
## Compiling
👍
## Testing
Tested 1p-only game (popn) and 2p games (DDR, IIDX).
## Link to GitHub Issue, if one exists
Fixes#295
## Description of change
Add missing `Start` and `10KEY` lights output, as see in the test menu.
## Compiling
👍
## Testing
Seems fine in museca test mode.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Update tooltip for `-monitor` option. Move to `Graphics (Full Screen)`
to reduce clutter.
## Compilin
👍
## Testing
n/a
## Link to GitHub Issue, if one exists
Fixes#120
## Description of change
Don't call `is_touch_available` in launcher before RawInput stack is
initialized. This causes us to incorrectly fall back to the Win7/Win8
touch handler.
The desired behavior is to use rawinput touch by default for all games,
unless overridden by the user via `-wintouch`.
Add a bunch of logging so we can spot who's calling
`is_touch_available`.
As a side effect, a handful of games that previously used Win7/8 touch
will now use RawInput touch instead. If this causes any issues, they can
turn `-wintouch` on to force Win7/8 touch logic again.
## Compiling
👍
## Testing
Test:
* RB
* -wintouch
* TDJ, UFC subscreen and native touch
* overlay, especially in multi-mon
## Link to GitHub Issue, if one exists
n/a
## Description of change
No one uses this, remove them to reduce clutter. This is in preparation
to migrate from deprecated ImGui IO model to new one, and this is part
of that.
## Compiling
👍
## Testing
## Link to GitHub Issue, if one exists
n/a
## Description of change
Update ImGui to `v1.91.4`. We can't update to `v1.91.5` or newer just
yet because impl_spice depends on the old IO model of ImGui which got
removed in `v1.91.5`.
We also can't update the DX9 renderer right now, because at some point
overlay breaks in TDJ (and only in TDJ...)
Enable the new debug logging functionality in ImGui. Add a button in
overlay to toggle debug log window.
Fix some minor bugs spotted by the new ImGui debug log: mismatched API
calls, font loading issues.
## Compiling
👍
## Testing
In progress.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Functionally, no change.
Move ImGui library files around so that they mirror how they are
structured in imgui releases. This will make it easier to migrate to a
future version of ImGui.
Add a handful of static asserts to check that we have the necessary
features enabled / disabled in imgui header.
## Compiling
👍
## Testing
Tested 32-bit overlay, 64-bit overlay, TDJ, and UFC overlays, and
spicecfg.
Interesting finds during ImGui testing (not part of this PR, but for
future reference when upgrading imgui version):
* Updating dx9 backend to the newest causes TDJ to stop rendering the
overlay completely (fine in UFC or any other game)
* Omitting `IMGUI_USE_BGRA_PACKED_COLOR` causes spicecfg software
renderer to use the wrong color (RGB format parsing error probably)
* At some point - v1.90? the `About` and `Licenses` buttons in spicecfg
stop responding after an upgrade, maybe our improper usage of MenuItem?
* Using the docking branch of ImGui is not required but we should just
stick to it for multi-viewport functionality which we may want to use
later.
## Link to GitHub Issue, if one exists
n/a
## Description of change
`ImGui::Columns` is a deprecated component with many issues. Migrate
Buttons/Analog/Overlay/Lights/Options... tabs to the new table API.
Clean up some UI elements around it to reduce clutter.
Note: there are still other usages of Columns API (MIDI debug output,
ACIO viewer, window manager) but no one hardly ever sees those.
Eventually they will need to be migrated if ImGui ever drops support for
them.
## Compiling
👍
## Testing
Testing all games in spicecfg and overlay.
## Link to GitHub Issue, if one exists
Fixes#27
## Description of change
In standalone configurator mode, when a mouse cursor moves outside the
window and comes back, it may get stuck in the wrong cursor type (e.g.,
get stuck in horizontal resize mode). This is a side effect of software
rendering we do that doesn't deal nicely with mouse events (i.e., not at
all).
## Compiling
Should be fine.
## Testing
Testing spicecfg, spice -cfg, spice64 -cfg, and in-game overlay.
## Link to GitHub Issue, if one exists
#0
## Description of change
When patcher URL returns an invalid response (as in, cannot be parsed as
JSON), show an error message to user.
Add a "copy text" button to copy the error message.
Fix WarnTooltip so that can handle the case where description is an
empty string for a patch - previously this was just showing as multiple
lines of empty space and then the warning.
## Compiling
It's fine except Docker build currently fails due to cmake version
issue.
## Testing
Tested valid / invalid datecodes and checked against responses.
## Link to GitHub Issue, if one exists
n/a
## Description of change
In Options (and in Advanced/API/Search tabs), remove the help marker
`(?)` and instead add a tooltip to the option name label and the control
widgets like the checkbox, text input, and combo. This is to help with
discoverability as many users failed to discover the `(?)` widget.
Similarly, update the Patches tab to remove `(?)` and add tooltips to
widgets. Patches with warnings `(!)` will continue to show it to
distinguish it from other patches.
Update styling for the tooltip (dark red background -> dark gray) so
that it stands out from other widgets.
Remove the purple option text used for game-specific options.
## Compiling
👍
## Testing
Tested in spicecfg, and in-game overlay.
## Link to GitHub Issue, if one exists
Fixes#276
## Description of change
Note: this change is not compatible with previous screen resize config;
i.e., if you had the zoom setting dialed into a certain view, after this
change it won't be the same area, so you'll have to set up a scene
again. I think this is a worthwhile cost since the old logic is just
broken in weird ways, and preserving old settings is really tedious math
(for a feature that not many people use). Besides, this change will only
use the new Scenes values from the JSON.
Rewrite the DX9 image scaler logic.
* Previously, the rendering surface was fixed at `4096*4096 px`. Now,
this is relative to the backbuffer dimensions, which depends on the game
& respects user provided `-forceres`.
* Remove "center" option, make it the default.
Above two changes fix the aspect ratio issue (scaling in portrait games
not respecting screen ratio) and things breaking at higher res (1080p
when zoomed out far enough, or when forced to run at 4k resolution for
example)
* Use `scenes` leaf of screen resize JSON config for Scene 1 as well,
completely removing ourselves from being compatible with older spice2x
versions for these values.
* Add additional bounds check before calling `StretchRect` to avoid
users getting stuck with a bad layout, which can kill performance.
## Compiling
🦾
## Testing
Tested 32 bit (popn / ddr), 64 bit (ldj), portrait and landscape modes
(kfc)
## Link to GitHub Issue, if one exists
n/a
## Description of change
Add `SDVX Landscape Mode` option, allowing you to play SDVX in landscape
monitor orientation, with black borders on left and right - similar to
how EAC does it. This is meant to be an alternative to what people do
today, which is launching in windowed mode.
By default, with just `-sdvxlandscape` enabled, EG will launch at
1920x1080 (transposed from the original 1080x1920 resolution).
It is possible to combine with `-forceres` to launch at higher
resolutions. At some point though, when rendering at large resolutions
past 1440p, at some point scaling may break due to #276.
Disabled on 32-bit SDVX since dx9 `CreateDeviceEx` call is required;
`CreateDevice` won't work. For the same reason this isn't being made a
generic option for museca/rb/etc. In theory you can supply
`-sdvxlandscape` to games like IIDX and play landscape games in portrait
mode, although again, scaling my break due to #276.
Also, add new options (bottomleft/right) for subscreen overlay position
so that they don't overlap with the main screen in landscape mode.
## Compiling
🙂
## Testing
Tested a couple versions of VW and EG.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Adds a new option to forcibly set the full screen resolution.
Same idea as -windowscale.
## Compiling
🔺
## Testing
Seems to be showing similar results as -windowscale:
* Works GREAT for IIDX/SDVX
* popn launches at correct resolution but only draws a small image (at
native res) - can be scaled with F11 menu
* nostalgia is broken in weird ways, image is drawn correctly but bottom
`credits` text draws at wrong offset, game's wintouch logic broken
(perhaps expectedly)
## Other notes
In theory this could enable "play sdvx in landscape mode" option but the
image scaling doesn't quite work with extreme values.
## Link to GitHub Issue, if one exists
Fixes https://github.com/spice2x/spice2x.github.io/issues/193
## Description of change
Merges guardianblue's changes plus some code review feedback.
Adds the ability to automatically type out the digits of a PIN when an
overlay shortcut is pressed.
## Compiling
💯
## Testing
Tested:
* 32 bit popn
* TDJ, 1p/2p
* KFC, UFC
## Link to GitHub Issue, if one exists
n/a
## Description of change
When RegOpenKey* hooks fail when substituting user's ASIO driver, log a
warning message.
This can happen when the user types in the wrong value for `-iidxasio`
or `-sdvxasio`, which is a common issue.
## Compiling
🥇
## Testing
Tested LDJ/KFC
## Link to GitHub Issue, if one exists
Fixes https://github.com/spice2x/spice2x.github.io/issues/179
## Description of change
Previously, lights.read() did not accept any parameters, instead it
returned all lights implemented by the current game.
Problem is that this is too large for some embedded implementations;
also just inefficient.
Add code to accept light names as strings and only return those in the
result.
For performance, use `robin_hood::unordered_map` to speed up the lookup
operation, which was previously a linear search.
Add this to Python wrapper library. Did not bother with others.
Also, as a bonus - update lights.write_reset() to also accept a flat
list of strings, as opposed to array containing a string, which was
silly.
## Compiling
➕
## Testing
Tested using spiceremote and writing a short Python program.
## Link to GitHub Issue, if one exists
Fixes#263
## Description of change
Add "scenes" to screen resize.
* UI changes - F11 menu now has a "scene switcher" for `Scene 1/2/3/4`.
Clean up other UI bits.
* Add hotkeys for `Screen Resize Scene 1`, `Screen Resize 2`, and so on.
* Detect hot key and trigger resizes.
* Add additional objects to screen_resize.json for saving and loading
the new scene settings.
* Existing screen resize data is backwards compatible (can be
loaded/saved to JSON), and is treated as `Scene 1`.
* Add API endpoint for `Resize`, allow toggling resize on/off, switching
active scene
* Add Python wrapper. Did not bother with the other wrappers (Dart, C++,
etc)...
## Compiling
🥇
## Testing
Still testing, but seems to work fine for TDJ.
## Link to GitHub Issue, if one exists
#264
## Description of change
When spice2x is compiled with UCRT, fix up `__argc` and `__argv` for
msvcrt since some DLL hooks rely on them.
## Compiling
👍
## Testing
Tested on Win10 LTSC, Win11, and Win7.
## Link to GitHub Issue, if one exists
n/a
## Description of change
Previously, F11 menu just provided text-based hint on how to enable
-windowscale option.
Instead, show a disabled checkbox that correctly reflects the current
state, nudging the user to read the tooltip.
Elaborate the option tooltip for -windowscale as well for consistency &
explain *why* you might want to enable this.
## Compiling
💯
## Testing
Tested 32/64 bit.
## Link to GitHub Issue, if one exists
n/a, user reported
## Description of change
When copying text to clipboard, the last character was being dropped due
to incorrect string buffer size calculation.
Also, clean up callers to just pass std:string by reference instead of
going back and forth between C-style strings.
Lastly, fix `git archive` in `build_all.sh` which broke after github
migration.
## Compiling
Yes
## Testing
Tested all three callers - IIDX cam hook, scard reader in Cards tab, and
patch manager datecode.