Skip to content

spice2x features

sp2xdev edited this page May 1, 2024 · 46 revisions

This page documents various features of spice2x, including new functionality added in spice2x and what was in original branch of spicetools.

General tips - PLEASE READ FIRST

If you hover over the (?) icon in SpiceCfg - such as the ones on the left side of each menu item - a tooltip will show up and gives you a detailed explanation.

Input tabs (Buttons, Analogs)

Buttons

  • Press Bind, and press a button on your controller to bind keys.
    • This method uses the Windows raw input API, which can detect any HID device (mouse, keyboard, joystick, MIDI) and more responsive.
  • Press Naive (instead of Bind) for device-independent keyboard binding.
    • This method uses GetAsyncKeyState API, which only works for keyboards and slightly less responsive in theory, but probably not enough for you to notice.
    • Depending on your keyboard, this method may be better (or worse) if you have issues with NKRO.
    • Additionally, if you have software simulating keyboard strokes (e.g., AutoHotKey, SliderShim, joy2key, etc) then Naive will pick it up, while Bind will not. Just make sure that the software generating the simulated keystrokes is running as administrator, as Spice always run as admin, and it's required to be at the same privilege level.
  • You can bind multiple buttons for the same input. At the bottom of the UI, there is page navigation (Page 0), you just move to a different page and bind more controls.
  • Check Bind Many at the bottom of this page to bind multiple things in a row, instead of click on Bind over and over.
  • Press Edit after binding a button for more options, such as inverting the button press to a release.

Buttons-as-analog

If you're NOT using a proper controller, but instead using a keyboard (or controller with only buttons), Spice can translate digital input to analog for some games. For example, turntables in IIDX, spinners in Museca, knobs in SDVX, and so on.

Additionally,

  • In IIDX, there is TT+/- Alternate which can be used as an alternative scratch button, which makes IIDX play more like BMS on keyboard.
  • You can use IIDX Digital TT Sensitivity (-sp2x-iidxdigitalsens) to adjust how much the turntable moves for each button press.
  • In SDVX, similarly, there is SDVX Digital Knob Sensitivity (-sp2x-sdvxdigitalknobsens) to adjust how much the knob turns for each button press.

Keypad buttons

By default, they are bound to the numpad. You can rebind them to top row number keys if you wish.

Note that IIDX in TDJ mode is an exception and does not accept any keypad input, and requires you to use the touch screen (or subscreen overlay in spice, using your mouse). Insert Card will still work though.

Analog

Analog input is bound here, such as knobs, turntables, sliders, etc.

  • It is indeed possible to adjust the sensitivity of analog HID devices by applying a multiplier. The multiplier is a squared value of the displayed number (e.g., setting sensitivity to 2.0 means 4x the speed compared to normal).
    • However, a hardware solution (adjusting the sensitivity in your controller) is better than this software-based solution. Therefore, it is recommended that you use 1.0x, unless you have a strong need to adjust the sensitivity.
    • Spice cannot compensate for deadzones in the hardware, no matter how hard you try.
  • Smooth Axis option applies a smoothing algorithm (in software of course) to the analog input. It only really works for rotational movement, such as turntable or knobs. It removes jitter from bad analog sensors, but it also adds a tiny bit of latency (because that's how averaging filters work in control theory).

Overlay tab

Default key bindings are shown inside parentheses below, but you can rebind them in the Overlay tab.

Screenshot (Print Screen)

Takes a screenshot. By default, files are saved to Screenshots folder next to Spice. You can change the path using Screenshot Folder Path (-screenshotpath).

Overlay is not captured in the image.

Subscreen overlay (Page Up)

Some games use multiple monitors. Instead of requiring multiple monitors, Spice can show you the subscreen in a overlay window on your primary monitor. For subscreens that require touch screens, Spice can also emulate touch input by taking in your mouse input (i.e., you can just click on the subscreen overlay instead of having to purchase a separate touch screen monitor)

Depending on the game, you can adjust subscreen window settings in the Options tab, under Overlay, such as automatically showing the window on launch, resizing or moving the window, setting the font size for IIDX ticker, and so on.

The following games have subscreen overlays with touch:

  • IIDX TDJ - shows the secondary touch screen seen on LM cabs.
  • SDVX VM - shows the secondary touch screen seen on VM cabs.

The following game also has a subscreen overlay (not interactive):

  • IIDX LDJ - shows the LED segmented display (aka the LED ticker).

I/O window (F2)

Press F2 to show the I/O window, which will show you a series of widgets found on the cab. All games will have the test and service buttons, some games will have more; e.g., arrow menu buttons for DDR/Gitadora, VEFX buttons and sliders for IIDX, and so on.

Config overlay (F3)

Bring up the config window in the game, similar to what is shown in spicecfg.exe, except usable while the game is running.

Virutal keypad (F5, F6)

Show a virtual keypad (PIN pad) for P1 or P2. You can also insert the default card.

Card Manager (F7)

You can browse a list of cards and insert them as needed. To configure the list of cards, edit %appdata%\spicetools_card_manager.json on disk.

Control (F9)

Shows a set of tools for displaying various I/O states, AVS information, CPU/GPU status, and so on.

Patch Manager (F10)

See Patches section below.

Screen Resize (F11)

See Image Resize section below.

Overlay Toggle / FPS display (F12)

Toggles all of Spice Overlay on/off. You can also see the FPS counter widget, which contains the current FPS, time, and uptime (session timer).

Hotkeys

By default, overlay keys will just work (e.g., if you bound F7 to Toggle Card Manager, a single press of F7 will show you the Card Manager window).

If you bind a key to Hotkey Enable 1, it will be required to be pressed in addition to the overlay key (e.g., if you bound Control to Hotkey Enable 1, you will now have to press CTRL+F7 instead of just F7)

If you bind a key to Hotkey Enable 2, now you have to press three buttons (e.g., if you bound Shift to Hotkey Enable 2 in addition to above, now you have to press CTRL+SHIFT+F7).

Lastly, if you bind a key to Hotkey Toggle - then you can use it to switch between activating the overlay bindings or completely disabling them (e.g., if you bound Caps Lock to Hotkey Toggle, when Caps Lock is on, F7 works, and when Caps Lock is off, F7 doesn't work).

This can be used for:

  1. preventing accidental presses of overlay buttons
  2. using buttons on a controller as overlay keys (e.g., START+SELECT+1 to take a screenshot)

Patches tab

See this page.

Cards tab

card0.txt / card1.txt

You can place card0.txt (P1) or card1.txt (P2) next to spice executables to use as cards. The text files should contain the E004 card number. They will be used when you press the Insert Card button.

It is also possible to change the directory in which the text files are read from using the Cards tab.

Card number generation

Press Generate button and a new card number will be issued to you, and then saved as card0.txt / card1.txt.

USB drives as cards

If you plug in a storage device (such as a thumb drive), spice will read the root and look for card0.txt and card1.txt. If present, they will be treated as if you just inserted a card.

Overriding cards as command line parameters

You can also use Player 1 Card (-card0) or Player 2 Card (-card1) options to set the card number.

More card reader support

Check the Advanced options tab for ICCA reader (NFC readers used on real cabinets connected over serial), CardIO (community HID standard), and HID Smartcard reader (industry standard). There is support for BemaniTools5 API as well for card readers, as well as SpiceAPI-over-serial.

Options tab / Advanced options tab

Graphics

(Note that graphics-related features do not work some games, such as Jubeat, Chase Chase Jokers, Busou Shinki)

Windowed mode adjustments

Most games can be run in Windowed Mode (-w). But you can also specify the following:

  • Window Border Style (-sp2x-windowborder) - such as making a window borderless
  • Window Size (-sp2x-windowsize) - specify exact width/height in pixels
  • Window Position (-sp2x-windowspos) - specify exact x/y coordinates of the window
  • Window Always On Top (-sp2x-windowalwasyontop)

Can also be accessed by pressing Toggle Screen Resize overlay button (F11 by default).

Image resize

Accessed by pressing Toggle Screen Resize overlay button (F11 by default).

You can freely move and resize the game's image being displayed on the screen, mostly designed for full screen mode. This can be useful for:

  1. Compensating for CRT overscan
  2. Making the game smaller than your monitor (if your monitor is too big)
  3. Zooming into specific part of the screen (if your monitor is too small and you want to see better)

and so on.

You can also bind a key to Screen Resize button. This gives you the abilty to toggle the resize feature on and off using a key, which can be useful (e.g., you only want to zoom into a specific part of the screen during the game, but zoom out in the menu).

DirectX 9on12

Most of the supported games use DirectX 9. AMD cards at known to have less than perfect support for DX9. Some GPUs - such as Intel dGPUs - don't out don't support DX9. In these cases, you may want to enable DirectX 9 on 12 (-9on12) flag which enables the D3D9On12 translation layer to run DX9 games using DX12.

Force Refresh Rate

If the game boots into the wrong refresh rate for whatever reason, you can use Force Refresh Rate (-graphics-force-refresh) and manually override the monitor refresh rate that will be used in full screen (in Hz).

Most games will launch will the correct refresh rate, but there are some games (such as popn) that will just keep the refresh rate that was being used before launching the game, which can be annoying, but this option can be used to fix that.

Only Use One Display

Some multi-monitor games will take over all of your screens, which may not be desirable if you want to see other windows while the game is running.

You can use Only Use One Monitor (-graphics-force-single-adapter) option to restrict the game to only use the primary monitor.

Subscreens overlay will still work with this.

Auto-rotate Display

Some games require your monitor to be in portrait mode.

You can use Auto-rotate Display (-sp2x-autoorientation) option to automatically rotate the screen when the game launches.

It's not perfect, due to DirectX9 jank. Hover over the (?) marker next to this option to see more tips if it doesn't work properly.

Disable D3D9 device hooks

Caution

Do not enable this unless you know exactly what you are doing. If things don't work after turning this on, turn it back off.

Disable D3D9 Device Hook (-sp2x-nod3d9devhook) disables various DirectX9 hooks. It doesn't disable everything; e.g., force refresh rate option still works... but it does disable other key features like Spice Overlay (including subscreen overlay), screenshot feature, resize function, video streaming to SpiceCompanion, and so on.

If you want to use the built-in gameplay recording function in IIDX28+, you need to turn this on. It's needed to make the video encoder not crash when the recording starts. Losing overlay features does mean you're going to need a secondary touch screen to card in.

NVIDIA profile optimization

Applies to NVIDIA GPUs only.

When a game is launched with this option set, a new 3D application profile is added for spice.exe / spice64.exe, depending on what was launched. The profile is then modified to disable G-SYNC, and set power management to Prefer maximum performance.

Sometimes, due to unknown NVIDIA issues, G-SYNC doesn't get disabled properly. This seems to happen occasionally for SDVX, for example. If this happens, try enabling FSO (full screen optimizations) for spice, or just disable G-SYNC globally in NVIDIA settings.

It should be noted that unchecking the option does not remove the 3D application profile! This is an intentional choice to avoid destructive behavior. To manually revert the changes made, open NVIDIA Control Panel, go to 3D Settings, Program Settings, find spice.exe / spice64.exe, and delete the profiles.

Audio

Read this page which goes into detail about various audio options.

Read this page for Asus Xonar AE specific instructions.

SpiceCompanion and API

API server can be started by specifying API TCP Port number (-api) and optionally, API Password (-apipass).

The API server will start automatically when a game launches and become available on the local network.

SpiceCompanion apps require that you set up the API server. Get Android and iOS versions, install them onto your device, and connect to your PC that is hosting the API server, using the host server's local IP address, port, and password. Do note that those apps are owned and published by independent developers and not associated with spice2x dev team.

Spice API is also available over the serial port (-apiserial and -apiserialbaud).

Performance

Process Priority, Process Affinity and Log Level options are touched on over here.

Others

Auto Card Insert - continuously insert card(s); equivalent to taping a card to the card reader on a cabinet. SDVX is an exception where the card is only inserted in the first few minutes of boot, as it waits forever on the Game Over screen if a card is present.

VR - enables the VR subsystem, which can be used for feet input in DRS. It does not display anything on the headset's display, nor does it do anything for other games. Very experimental feature that was left over from the original spicetools branch.

Discord Rich Presence - when enabled, allows Discord to detect the running game and set as your current activity (Now playing). Remember that this is a per-game setting, so you must enable it for every game you want Discord to detect. App ID can be overridden using Discord RPC AppID Override (-discordappid) option.

Misc. information

Bonus features for games

  • These games that are not normally touch games can be played with a touch screen: DANCERUSH, Jubeat.

Config files

The config files for Spice are stored in %appdata%:

  • %appdata%\spicetools.xml
  • %appdata%\spicetools_card_manager.json
  • %appdata%\spicetools_screen_resize.json.json
  • %appdata%\spicetools_patch_manager.json.json

NVIDIA SDK stubs for AMD GPU / Intel GPU users

Stub implementation of nvcuda.dll, nvcuvid.dll, nvEncodeAPI64.dll are distributed with each release, starting with 23-12-27 (check inside /stubs/64 directory).

  • If you have a non-NVIDIA GPU, you can use these files for IIDX and SDVX - place next to other DLL files (usually in modules directory).
  • If you have NVIDIA GPU with drivers installed, you should not use these stubs, as your system already has proper implementations (most likely in system32).

These stubs will be updated over time, so if a newer version of a game fails to launch due to missing dependencies, please file a bug in the issue tracker.