1
0
mirror of https://github.com/djhackersdev/bemanitools.git synced 2024-11-23 22:30:56 +01:00

chore: Apply formatting to all markdown docs

This commit is contained in:
icex2 2024-01-29 23:18:21 +01:00 committed by icex2
parent 0897a25174
commit 0a29e031ff
75 changed files with 3200 additions and 2786 deletions

View File

@ -22,10 +22,11 @@ necessary -->
<!-- Try running the game with a default configuration as well. If that also causes issues, please point that out here in the report. This might speed up the debugging process.--> <!-- Try running the game with a default configuration as well. If that also causes issues, please point that out here in the report. This might speed up the debugging process.-->
<!--- Provide a detailed step by step description how to reproduce this issue --> <!--- Provide a detailed step by step description how to reproduce this issue -->
1.
1.
1.
1. 1.
2.
3.
4.
## Possible solution ## Possible solution
@ -35,11 +36,11 @@ necessary -->
### Bemanitools version(s) affected ### Bemanitools version(s) affected
* <!--- Add one or multiple versions as a bullet list --> - <!--- Add one or multiple versions as a bullet list -->
### Game(s) and version(s) affected ### Game(s) and version(s) affected
* <!--- Add one or multiple game versions as a bullet list --> - <!--- Add one or multiple game versions as a bullet list -->
### Log output ### Log output
@ -88,7 +89,7 @@ used if you altered it. -->
### APIs used ### APIs used
* <!--- List all APIs you used as a bullet list, e.g. iidxio-keyboard, eamio-keyboard --> - <!--- List all APIs you used as a bullet list, e.g. iidxio-keyboard, eamio-keyboard -->
### OS version ### OS version
@ -96,7 +97,7 @@ used if you altered it. -->
### Hardware specs ### Hardware specs
* CPU: <!--- Insert, e.g. Core i7 2600k 3.20ghz --> - CPU: <!--- Insert, e.g. Core i7 2600k 3.20ghz -->
* RAM: <!--- Insert, e.g. 16 GB --> - RAM: <!--- Insert, e.g. 16 GB -->
* GPU: <!--- Insert, e.g. Nvidia GeForce GTX 970, 4GB --> - GPU: <!--- Insert, e.g. Nvidia GeForce GTX 970, 4GB -->
* Controllers/IO: <!--- Insert, e.g. DJ Dao RE over USB --> - Controllers/IO: <!--- Insert, e.g. DJ Dao RE over USB -->

View File

@ -11,25 +11,31 @@
## Related Issue ## Related Issue
<!--- This project only accepts pull requests related to open issues --> <!--- This project only accepts pull requests related to open issues -->
<!--- If suggesting a new feature or change, please discuss it in an issue first --> <!--- If suggesting a new feature or change, please discuss it in an issue first -->
<!--- If fixing a bug, there should be an issue describing it with steps to reproduce --> <!--- If fixing a bug, there should be an issue describing it with steps to reproduce -->
<!--- Please link to the issue here: --> <!--- Please link to the issue here: -->
## How Has This Been Tested? ## How Has This Been Tested?
<!--- Please describe in detail how you tested your changes. --> <!--- Please describe in detail how you tested your changes. -->
<!--- Include details of your testing environment, and the tests you ran to --> <!--- Include details of your testing environment, and the tests you ran to -->
<!--- see how your change affects other areas of the code, etc. --> <!--- see how your change affects other areas of the code, etc. -->
## Checklist ## Checklist
<!-- Make sure you covered all items, which apply, of the checklist below. --> <!-- Make sure you covered all items, which apply, of the checklist below. -->
<!-- Strikethrough items that do not apply and provide a brief description why. --> <!-- Strikethrough items that do not apply and provide a brief description why. -->
* [ ] Implemented (unit) test(s) which prove that the introduced changes are working as expected. - \[ \] Implemented (unit) test(s) which prove that the introduced changes are working as expected.
* Tested with the following games: - Tested with the following games:
* [ ] ... <!-- insert game name 1--> - \[ \] ... <!-- insert game name 1-->
* [ ] ... <!-- insert game name 2---> - \[ \] ... \<!-- insert game name 2--->
* [ ] Followed the developer (style) guidelines. - \[ \] Followed the developer (style) guidelines.
* [ ] Updated existing doc of or add new doc to README file(s). - \[ \] Updated existing doc of or add new doc to README file(s).
* [ ] Updated development documentation. - \[ \] Updated development documentation.

View File

@ -1,364 +1,420 @@
# Release history # Release history
Note for CI/CD: Ensure the version formatting in the sections is kept identical to the versions Note for CI/CD: Ensure the version formatting in the sections is kept identical to the versions
given in tags. The pipeline will pick this up and cuts out the relevant section for release notes. given in tags. The pipeline will pick this up and cuts out the relevant section for release notes.
## 5.49 ## 5.49
### Features ### Features
### Fixes ### Fixes
## 5.48 ## 5.48
### Features ### Features
* feat(config): Add invert analog input option. Remark: The old configuration file format is
upgraded but downgrading is not possible anymore. The new saves are using a new filename - feat(config): Add invert analog input option. Remark: The old configuration file format is
and it doesn't delete the old files, see `C:\Users\<YOUR_USERNAME>\AppData\Roaming\DJHACKERS` upgraded but downgrading is not possible anymore. The new saves are using a new filename and it
doesn't delete the old files, see `C:\Users\<YOUR_USERNAME>\AppData\Roaming\DJHACKERS`
### Fixes ### Fixes
## 5.47 ## 5.47
### Features ### Features
N/A N/A
### Fixes ### Fixes
* fix(ddr/p3ioemu): Handle unknown 2B command to fix DDR X IO errors
* fix(ddr/p3io): Crash on all supported DDR games due to incorrect p3io message size validation - fix(ddr/p3ioemu): Handle unknown 2B command to fix DDR X IO errors
* fix(geninput): Sony DualShock 4 not working - fix(ddr/p3io): Crash on all supported DDR games due to incorrect p3io message size validation
- fix(geninput): Sony DualShock 4 not working
## 5.46 ## 5.46
### Features ### Features
* feat(ddrio): Wrapper/shim library to drive another ddrio in a dedicated IO thread. Improves performance for highly IO
bound ddrio implementations, e.g. ddrio-p3io - feat(ddrio): Wrapper/shim library to drive another ddrio in a dedicated IO thread. Improves
* feat(iidxiotest): bi2a-iidx support performance for highly IO bound ddrio implementations, e.g. ddrio-p3io
- feat(iidxiotest): bi2a-iidx support
### Fixes ### Fixes
* fix(jb03/04): Missing XML in gamestart script
* fix(jbhook1): Rotate error message box when screen is rotated - fix(jb03/04): Missing XML in gamestart script
* fix(jbhook1): Improve/fix automatic config/nvram fs initialization - fix(jbhook1): Rotate error message box when screen is rotated
- fix(jbhook1): Improve/fix automatic config/nvram fs initialization
## 5.45 ## 5.45
### Features ### Features
* feat(iidx 30): Added support
* feat(ddr): Add ddrio implementation with P3IO driver backend - feat(iidx 30): Added support
* feat(ddr): Add p3io-ddr-tool for testing/debugging real P3IO devices with EXTIO - feat(ddr): Add ddrio implementation with P3IO driver backend
* feat(ddr): Add testing tool for real EXTIO devices - feat(ddr): Add p3io-ddr-tool for testing/debugging real P3IO devices with EXTIO
* feat(ddr): Add extio driver - feat(ddr): Add testing tool for real EXTIO devices
* feat(ddr): Add p3io driver - feat(ddr): Add extio driver
* feat(iidx 20-26): New/fixed gfx up-/downscaling feature, old one was broken - feat(ddr): Add p3io driver
* feat(ddr): Vigem driver for ddrio - feat(iidx 20-26): New/fixed gfx up-/downscaling feature, old one was broken
* feat(iidx 25-30): The user can now set a custom camera device override of "SKIP" to leave that camera unassigned - feat(ddr): Vigem driver for ddrio
- feat(iidx 25-30): The user can now set a custom camera device override of "SKIP" to leave that
camera unassigned
### Fixes ### Fixes
* fix(iidx 09/10): Fix stretched BGAs on 1st and 3rd style videos
- fix(iidx 09/10): Fix stretched BGAs on 1st and 3rd style videos
## 5.44 ## 5.44
### Features ### Features
* feat(doc): ezusb dev journal entry, 10th style ezusb boot up and security setup
* feat(iidx 09/10): ezusb API call monitoring module and configuration flag - feat(doc): ezusb dev journal entry, 10th style ezusb boot up and security setup
* feat(iidx 19): Add back btools monitor check for iidxhook5 - feat(iidx 09/10): ezusb API call monitoring module and configuration flag
* feat(iidx 9-19): Add configurable settings path hook. Redirect settings paths, i.e. `d/`, `e/` and - feat(iidx 19): Add back btools monitor check for iidxhook5
- feat(iidx 9-19): Add configurable settings path hook. Redirect settings paths, i.e. `d/`, `e/` and
`f/` drive "folders" to an arbitrary path on any partition, e.g. writable partition `f/` drive "folders" to an arbitrary path on any partition, e.g. writable partition
* feat(iidx 9/10): Improve commandline script for irbeat-patch 09 and 10, add interactive mode - feat(iidx 9/10): Improve commandline script for irbeat-patch 09 and 10, add interactive mode
### Fixes ### Fixes
* fix(iidx 10): SQ-INIT error caused by incorrect security configuration
* fix(iidx 9-24): Wire up coin input in ezusb1/2 IO emulation layer - fix(iidx 10): SQ-INIT error caused by incorrect security configuration
* fix(pnm 15-18): Fix IO buffer inconsistency causing random input misfiring - fix(iidx 9-24): Wire up coin input in ezusb1/2 IO emulation layer
* fix(jb 1-8): Fix IO buffer inconsistency causing random input misfiring - fix(pnm 15-18): Fix IO buffer inconsistency causing random input misfiring
* fix(iidx 9-24): Fix IO buffer inconsistency causing random input misfiring - fix(jb 1-8): Fix IO buffer inconsistency causing random input misfiring
* fix(iidx 19): imagefs override strategy with local file redir. Required to enable monitor-check - fix(iidx 9-24): Fix IO buffer inconsistency causing random input misfiring
on all chart files - fix(iidx 19): imagefs override strategy with local file redir. Required to enable monitor-check on
* fix(iidx 9-19): Code synchronization issue causing deadlock resulting in game hang/stuck on boot all chart files
* fix(iidx 9-19): Fix broken settings path handling with mixed / and \ - fix(iidx 9-19): Code synchronization issue causing deadlock resulting in game hang/stuck on boot
* fix(iidx 27): Align disabled cam connection config defaults with 28/29 - fix(iidx 9-19): Fix broken settings path handling with mixed / and \\
* fix(inject): Fix missing forwarding of exit code - fix(iidx 27): Align disabled cam connection config defaults with 28/29
* fix(inject): Getting stuck when game exits cleanly due to locked up debugger thread. - fix(inject): Fix missing forwarding of exit code
* fix(iidx 18/19 CN): gamestart.bat creating dev/nvram and dev/raw folders - fix(inject): Getting stuck when game exits cleanly due to locked up debugger thread.
- fix(iidx 18/19 CN): gamestart.bat creating dev/nvram and dev/raw folders
## 5.43 ## 5.43
* iidx29: (Officially) support IIDX CASTHOUR
* Code structure maintenance - iidx29: (Officially) support IIDX CASTHOUR
* Various documentation improvements - Code structure maintenance
- Various documentation improvements
## 5.42 ## 5.42
* Bugfix: Fix diagonal texture tearing on IIDX 18 and 19 based games
* Feature: Add support for IIDX Resort Anthem CN using iidxhook4-cn - Bugfix: Fix diagonal texture tearing on IIDX 18 and 19 based games
* Feature/bugfix: Enable "nvidia fix" for iidxhook4, 5 and 5-cn. Should fix crashing on some/all - Feature: Add support for IIDX Resort Anthem CN using iidxhook4-cn
- Feature/bugfix: Enable "nvidia fix" for iidxhook4, 5 and 5-cn. Should fix crashing on some/all
nvidia cards nvidia cards
* Various minor fixes - Various minor fixes
## 5.41 ## 5.41
* Feature: Support pop'n music 15-18 using popnhook1
* Feature: Support IIDX tricoro CN using iidxhook5-cn - Feature: Support pop'n music 15-18 using popnhook1
* Various documentation improvements - Feature: Support IIDX tricoro CN using iidxhook5-cn
- Various documentation improvements
## 5.40 ## 5.40
* Feature: Support DDR X and X2 US/EU using ddrhook1 including memory card emulation
* Fix: sdvxhook2 crashing on some OS versions - Feature: Support DDR X and X2 US/EU using ddrhook1 including memory card emulation
* Feature: Support sdvx generator lights in sdvxio - Fix: sdvxhook2 crashing on some OS versions
- Feature: Support sdvx generator lights in sdvxio
## 5.39 ## 5.39
* jbhook3: Fix window mode, remove window frame option, add show cursor on window option
* Code simplification and cleanup round plug modules - jbhook3: Fix window mode, remove window frame option, add show cursor on window option
* Code structure improvements p3io jubeat - Code simplification and cleanup round plug modules
- Code structure improvements p3io jubeat
## 5.38 ## 5.38
* sdvxhook2: Support sound voltex exceed gear
- sdvxhook2: Support sound voltex exceed gear
## 5.37 ## 5.37
* jbhook1: Support jubeat (1) and ripples
* jbhook2: Support jubeat knit and copious - jbhook1: Support jubeat (1) and ripples
* jbhook3: Support jubeat saucer, prop, qubell, clan and festo - jbhook2: Support jubeat knit and copious
- jbhook3: Support jubeat saucer, prop, qubell, clan and festo
## 5.36 ## 5.36
* iidxhook9: Support for IIDX28
* Various bugfixes - iidxhook9: Support for IIDX28
- Various bugfixes
## 5.35 ## 5.35
* Jubeat: Add jbio-p4io
* Nostalgia: Add nostio-panb - Jubeat: Add jbio-p4io
* Misc: Add wavepass support to aciodrv-icca (and eamio-icca) - Nostalgia: Add nostio-panb
* Misc: Refactor aciodrv to support multiple devices using the same port (with aciomgr) - Misc: Add wavepass support to aciodrv-icca (and eamio-icca)
* Misc: Fix d3d9ex windowed hook not behaving correctly (size/framed) - Misc: Refactor aciodrv to support multiple devices using the same port (with aciomgr)
* Misc: Fix docs not being included with release - Misc: Fix d3d9ex windowed hook not behaving correctly (size/framed)
* Various bugfixes - Misc: Fix docs not being included with release
- Various bugfixes
## 5.34 ## 5.34
* IIDX: Support IO and card reader feature switches to disable emulation in iidxhook4-7
* Jubeat: jbio implementation for magicbox hardware - IIDX: Support IO and card reader feature switches to disable emulation in iidxhook4-7
* Misc: Various documentation improvements - Jubeat: jbio implementation for magicbox hardware
* IIDX: Turntable multiplier (can also be used as inverted) for iidxhook9 - Misc: Various documentation improvements
* IIDX: iidxhook9, add force screen resolution option to fix sometimes wrong auto res detection by - IIDX: Turntable multiplier (can also be used as inverted) for iidxhook9
iidx27 causing inaccurate/wrong refresh rates on monitor check - IIDX: iidxhook9, add force screen resolution option to fix sometimes wrong auto res detection by
* IIDX: iidxio BIO2 implementation -> Use BIO2 hardware with any iidxhook or other software iidx27 causing inaccurate/wrong refresh rates on monitor check
supporting BT5's iidxio interface - IIDX: iidxio BIO2 implementation -> Use BIO2 hardware with any iidxhook or other software
* IIDX: BIO2 exit hook, exit the game pressing Start P1 + Start P2, Effect and VEFX supporting BT5's iidxio interface
* launcher: Allow overriding service URL from command line - IIDX: BIO2 exit hook, exit the game pressing Start P1 + Start P2, Effect and VEFX
* IIDX: vigem-iidxio, tool to allow using iidxio (ezusb, ezusb2 or bio2) to emulate XBOX controllers - launcher: Allow overriding service URL from command line
to play other non arcade games that support xinput, e.g. Lunatic Rave (note: Infinitas does not - IIDX: vigem-iidxio, tool to allow using iidxio (ezusb, ezusb2 or bio2) to emulate XBOX controllers
work with this since it only supports direct input) to play other non arcade games that support xinput, e.g. Lunatic Rave (note: Infinitas does not
work with this since it only supports direct input)
## 5.33 ## 5.33
* iidxhook9: Support for IIDX27
* sdvxio-bio2: Driver for real sdvx5 cabinet IO hardware - iidxhook9: Support for IIDX27
* vigem-sdvxio: Tool to allow using sdvxio (kfca or bio2) to emulate an xbox controller - sdvxio-bio2: Driver for real sdvx5 cabinet IO hardware
* Various bugfixes and refactoring for inject and launcher - vigem-sdvxio: Tool to allow using sdvxio (kfca or bio2) to emulate an xbox controller
- Various bugfixes and refactoring for inject and launcher
## 5.32 ## 5.32
* Various bugfixes
- Various bugfixes
## 5.31 ## 5.31
* DDR: Fix p3io and extio lights not working / being swapped when using geninput
* DDR: Add HDXS light support - DDR: Fix p3io and extio lights not working / being swapped when using geninput
* DDR: Add 64 bit support - DDR: Add HDXS light support
* DDR: Add option to use COM4 as the p3io rs232 port instead of emulating (for use with acrealio etc.) - DDR: Add 64 bit support
* Jubeat: Add network adapter hook - DDR: Add option to use COM4 as the p3io rs232 port instead of emulating (for use with acrealio
* Misc: Fix aciodrv sometimes hanging on boot (eamio-icca and sdvxio-kfca) etc.)
- Jubeat: Add network adapter hook
- Misc: Fix aciodrv sometimes hanging on boot (eamio-icca and sdvxio-kfca)
## 5.30 ## 5.30
* SDVX: sdvxhook2 headphone force and cursor confining config options
* DDR: Add light support for SMX gen 4 pads - SDVX: sdvxhook2 headphone force and cursor confining config options
- DDR: Add light support for SMX gen 4 pads
## 5.29 ## 5.29
* SDVX: Add option for monitor rotation
* SDVX: Add option to allow overriding network adapter IP - SDVX: Add option for monitor rotation
* IIDX: Add force display adapter and refresh rate configuration - SDVX: Add option to allow overriding network adapter IP
* SDVX: Allow specifying display adapter to open for d3d9ex hook - IIDX: Add force display adapter and refresh rate configuration
* IIDX/SDVX camerahooks bugfix: Camera sometimes not detected on some older machines - SDVX: Allow specifying display adapter to open for d3d9ex hook
- IIDX/SDVX camerahooks bugfix: Camera sometimes not detected on some older machines
## 5.28 ## 5.28
* Improve documentation in various places
* Automatic code formatting in build pipeline - Improve documentation in various places
* Bugfix: Recursive config.bat script - Automatic code formatting in build pipeline
* Enable automatic building on pushes to master - Bugfix: Recursive config.bat script
* Bugfix: Stop SDVX hanging on thankyou for playing - Enable automatic building on pushes to master
* sdvx2: Support for Vivid Wave using sdvxhook2 - Bugfix: Stop SDVX hanging on thankyou for playing
* sdvxio-kfca: Driver for real sdvx cabinet IO hardware - sdvx2: Support for Vivid Wave using sdvxhook2
- sdvxio-kfca: Driver for real sdvx cabinet IO hardware
## 5.27 ## 5.27
* Various documentation updates regarding development and how to contribute
* KFCA emulation accuracy fixes - Various documentation updates regarding development and how to contribute
* Fix passthrough of serial calls when using real hardware (e.g. card reader passthrough IIDX25+/SDVX5+) - KFCA emulation accuracy fixes
* Add sdvxio-kfca driver to talk to real SDVX hardware - Fix passthrough of serial calls when using real hardware (e.g. card reader passthrough
* Refactor d3d9 hook module to improve maintainability. Also fixes upscaling not working on IIDX20+. IIDX25+/SDVX5+)
* Remove d3d8 hook module to improve maintainability. Make old d3d8 based games, e.g. iidxhook1/2, use d3d9 instead. - Add sdvxio-kfca driver to talk to real SDVX hardware
Requires usage of d3d8to9 wrapper library to use gfx patching features. - Refactor d3d9 hook module to improve maintainability. Also fixes upscaling not working on IIDX20+.
* Add dev doc about IIDX rendering loops - Remove d3d8 hook module to improve maintainability. Make old d3d8 based games, e.g. iidxhook1/2,
* Add an initial draft of an architecture document (will be worked on in iterations) use d3d9 instead. Requires usage of d3d8to9 wrapper library to use gfx patching features.
* Refactor BIO2 emulation to make it re-usable by other games - Add dev doc about IIDX rendering loops
- Add an initial draft of an architecture document (will be worked on in iterations)
- Refactor BIO2 emulation to make it re-usable by other games
## 5.26 ## 5.26
* iidxio-ezusb: Reduce sleep time to Sleep(1) to avoid framerate issues on some versions of iidx.
* Bugfix: iidx d3d9 games, mainly the newer ones iidx 20-25, freezing. Happened on boot, during song selection or during the song. - iidxio-ezusb: Reduce sleep time to Sleep(1) to avoid framerate issues on some versions of iidx.
* Bugfix: log_server_init deadlock on iidxhook4-7. This caused games like iidx24 to hang before even showing a render window. - Bugfix: iidx d3d9 games, mainly the newer ones iidx 20-25, freezing. Happened on boot, during song
* iidxhook: Add feature to allow GPU based up-/downscaling of rendered frame. This gives selection or during the song.
you the possibility to upscale the resolution of old SD (640x480) games to your monitor's/TV's - Bugfix: log_server_init deadlock on iidxhook4-7. This caused games like iidx24 to hang before even
native resolution which can have a few advantages: better image quality if the monitor's upscaler showing a render window.
is not doing a good job, especially on resolutions that are not a multiple of its native resolution; - iidxhook: Add feature to allow GPU based up-/downscaling of rendered frame. This gives you the
Reduce display latency if the upscaler is slow, avoid over-/underscan which cannot always be fixed possibility to upscale the resolution of old SD (640x480) games to your monitor's/TV's native
entirely or at all (depending on your GPU and monitor model). See the iidxhook configuration file resolution which can have a few advantages: better image quality if the monitor's upscaler is not
for the new parameters available. doing a good job, especially on resolutions that are not a multiple of its native resolution;
* Major readme cleanup. Add development documentation like style guide, guidelines, development setup. Reduce display latency if the upscaler is slow, avoid over-/underscan which cannot always be fixed
entirely or at all (depending on your GPU and monitor model). See the iidxhook configuration file
for the new parameters available.
- Major readme cleanup. Add development documentation like style guide, guidelines, development
setup.
## 5.25 ## 5.25
* Bugfix: iidx14 and 15 crashing on Windows 10
* Bugfix: IO2 driver not using correct package sizes on reads/write -> iidxio-ezusb2.dll now working - Bugfix: iidx14 and 15 crashing on Windows 10
* Improve ezusb2-boot.bat script to handle flashing of IO2 firmware - Bugfix: IO2 driver not using correct package sizes on reads/write -> iidxio-ezusb2.dll now working
* Remove broken x64 builds of ezusb1/2 tools -> Just use the x86 tool versions instead - Improve ezusb2-boot.bat script to handle flashing of IO2 firmware
(use the x64 versions of iidxio-ezusb.dll and iidxio-ezusb2.dll with iidx25) - Remove broken x64 builds of ezusb1/2 tools -> Just use the x86 tool versions instead (use the x64
* iidxhook1-8: Allow floating point values for frame rate limiting, e.g. 59.95 (hz). versions of iidxio-ezusb.dll and iidxio-ezusb2.dll with iidx25)
* Improve timing with ezusb (C02) driver - iidxhook1-8: Allow floating point values for frame rate limiting, e.g. 59.95 (hz).
- Improve timing with ezusb (C02) driver
## v5.24 ## v5.24
* Bugfix: iidxhook8 hangs very early on startup (race condition in log-server module)
- Bugfix: iidxhook8 hangs very early on startup (race condition in log-server module)
## v5.23 ## v5.23
* Refactored configurion (file) handling for iidxhooks, RE-READ THE DOCUMENTATION.
This gets rid of the "short cmd parameters", e.g. -w for windowed mode, and replaces - Refactored configurion (file) handling for iidxhooks, RE-READ THE DOCUMENTATION. This gets rid of
them with full name parameters, e.g. -p gfx.windowed=true, which improves handling the "short cmd parameters", e.g. -w for windowed mode, and replaces them with full name
of configuration files/values. parameters, e.g. -p gfx.windowed=true, which improves handling of configuration files/values.
* Add a lot of unit tests to the codebase - Add a lot of unit tests to the codebase
* Refactored round plug security infrastructure, shared with IIDX and jubeat (1) - Refactored round plug security infrastructure, shared with IIDX and jubeat (1)
* Move shared utility modules between iidxhook modules to a separate utilty module 'iidxhook-util' - Move shared utility modules between iidxhook modules to a separate utilty module 'iidxhook-util'
* Add experimental jubeat (1) support (buggy IO emulation) - Add experimental jubeat (1) support (buggy IO emulation)
* Various fixes to improve all iidxhooks when running on Windows 10 - Various fixes to improve all iidxhooks when running on Windows 10
* Bugfix: iidxio-ezusb getting stuck on newer Windows platforms - Bugfix: iidxio-ezusb getting stuck on newer Windows platforms
* Update iidxhook docs, e.g. how to get old IIDX versions sync on Windows 10 - Update iidxhook docs, e.g. how to get old IIDX versions sync on Windows 10
* Various documentation updates - Various documentation updates
* Various code cleanup - Various code cleanup
* Various other minor bugfixes - Various other minor bugfixes
## v5.22 ## v5.22
* Added a lot of documentation and readme stuff (READ IT!!11)
* Re-numbering iidxhook implementations to make room for missing games
* Support for IIDX 18 -> iidxhook4
* Support for IIDX 19 -> iidxhook5
* Support for IIDX 20 -> iidxhook6
* A lot of code refactoring and cleanup
* Refactor p3io emulation
* Remove obsolete BT4 DDR stuff
* iidxhook: Refactored software monitor check and bugfixes. You can use the
auto monitor check to determine your machine's refresh rate or (new) set the
refresh rate yourself in the configuration file, e.g. when you already have
determined it using one of the newer IIDX games and want to skip that monitor
check or if BT5's software monitor check doesn't work properly (e.g. on Win 7).
* iidxhook1-3: Check if eamuse server is reachable and log a warning otherwise.
This should make debugging invalid URLs or connection issues easier.
* iidxhook: Revised ezusb and ezusb2 emulation layer. Translucent support
removed, all IO emulation goes through BT5's iidxio interface.
* iidxio: Add implementations for ezusb (C02 IO) and ezusb2 (IO2) hardware. This
allows you to run _ANY_ IIDX game supported by BT5 either with real C02 or IO2
hardware.
* iidxhook: Remove translucent card reader feature. Again, to create a unified
interface for _ALL_ versions, use the eamio-icca.dll if you want to run on
real ICCA (slotted or wavepass) readers.
* Various other bugfixes
Again, read the various markdown (.md) readme files. We tried to document - Added a lot of documentation and readme stuff (READ IT!!11)
everything to the best of our knowledge. If you are missing something, please - Re-numbering iidxhook implementations to make room for missing games
contribute by adding that information and submitting a patch to us. - Support for IIDX 18 -> iidxhook4
- Support for IIDX 19 -> iidxhook5
- Support for IIDX 20 -> iidxhook6
- A lot of code refactoring and cleanup
- Refactor p3io emulation
- Remove obsolete BT4 DDR stuff
- iidxhook: Refactored software monitor check and bugfixes. You can use the auto monitor check to
determine your machine's refresh rate or (new) set the refresh rate yourself in the configuration
file, e.g. when you already have determined it using one of the newer IIDX games and want to skip
that monitor check or if BT5's software monitor check doesn't work properly (e.g. on Win 7).
- iidxhook1-3: Check if eamuse server is reachable and log a warning otherwise. This should make
debugging invalid URLs or connection issues easier.
- iidxhook: Revised ezusb and ezusb2 emulation layer. Translucent support removed, all IO emulation
goes through BT5's iidxio interface.
- iidxio: Add implementations for ezusb (C02 IO) and ezusb2 (IO2) hardware. This allows you to run
_ANY_ IIDX game supported by BT5 either with real C02 or IO2 hardware.
- iidxhook: Remove translucent card reader feature. Again, to create a unified interface for _ALL_
versions, use the eamio-icca.dll if you want to run on real ICCA (slotted or wavepass) readers.
- Various other bugfixes
Again, read the various markdown (.md) readme files. We tried to document everything to the best of
our knowledge. If you are missing something, please contribute by adding that information and
submitting a patch to us.
## v5.21 ## v5.21
* Camera hook for IIDX 25 (use any UVC webcam in-game), by Xyen
* *deep breath* Source code release - Camera hook for IIDX 25 (use any UVC webcam in-game), by Xyen
- *deep breath* Source code release
## v5.20 ## v5.20
* Support for the new IIDX 25 IO board (xyen)
* New IO hook system with better multi-threading behavior - Support for the new IIDX 25 IO board (xyen)
* Add a replaceable "vefxio" backend dll for IIDX (xyen) - New IO hook system with better multi-threading behavior
* Card reader emulation can now be disabled in iidxhook (xyen) - Add a replaceable "vefxio" backend dll for IIDX (xyen)
* Add jbhook (xyen, mon) - Card reader emulation can now be disabled in iidxhook (xyen)
* Add ddrhook (ported from Bemanitools 4 by mon) - Add jbhook (xyen, mon)
* Various ICCA emulation improvements (xyen, mon) - Add ddrhook (ported from Bemanitools 4 by mon)
* QoL improvements to config.exe (xyen, mon) - Various ICCA emulation improvements (xyen, mon)
* Other bug fixes (various contributors) - QoL improvements to config.exe (xyen, mon)
- Other bug fixes (various contributors)
## a19 ## a19
* iidx 17 support
* Bugfix: forums.php?action=viewthread&threadid=51257&postid=1425861#post1425861 - iidx 17 support
* iidx 14-17: Improved monitor check and new monitor check screen which shows - Bugfix: forums.php?action=viewthread&threadid=51257&postid=1425861#post1425861
the current frame rate instead of just a white screen - iidx 14-17: Improved monitor check and new monitor check screen which shows the current frame rate
* iidx 09-13: Improved monitor check (but still white screen when in progress. instead of just a white screen
d3d8 doesn't offer any text render out of the box) - iidx 09-13: Improved monitor check (but still white screen when in progress. d3d8 doesn't offer
* iidxfx(2)-exit-hook: Switch off lights on shutdown any text render out of the box)
* Various other bugfixes - iidxfx(2)-exit-hook: Switch off lights on shutdown
- Various other bugfixes
## a18 ## a18
* Bugfix: forums.php?action=viewthread&threadid=51063
* Various other bugfixes - Bugfix: forums.php?action=viewthread&threadid=51063
- Various other bugfixes
## a17 ## a17
* IIDX 16 support
* Fix broken debug output to file (for iidxhook1-3 and all games using launcher) - IIDX 16 support
* Improve debug output - Fix broken debug output to file (for iidxhook1-3 and all games using launcher)
* Various minor bugfixes - Improve debug output
- Various minor bugfixes
## a16 ## a16
* Add tools.zip which contains various tools for development: ezusb IO related,
bemanitools API testing, acio related - Add tools.zip which contains various tools for development: ezusb IO related, bemanitools API
* Add documentation (.md files) for tools testing, acio related
* Add iidxfx(2)-exit-hook.dll: Hook this using either inject or launcher - Add documentation (.md files) for tools
(depending on the game version) and exit the game by pressing Start P1 + Start - Add iidxfx(2)-exit-hook.dll: Hook this using either inject or launcher (depending on the game
P2 + VEFX + Effect simultaneously version) and exit the game by pressing Start P1 + Start P2 + VEFX + Effect simultaneously
* Bugfix iidxio API: 16seg not working on IIDX games with FX2 emulation - Bugfix iidxio API: 16seg not working on IIDX games with FX2 emulation
* Bugfix iidxio API: return value of init call not getting checked in hook - Bugfix iidxio API: return value of init call not getting checked in hook libraries
libraries - SDVX input emulation fixes
* SDVX input emulation fixes - Various other bugfixes
* Various other bugfixes
## a15 ## a15
* Select best network adapter if having multiple
* Add Felica card detection - Select best network adapter if having multiple
* Fix SDVX HID lighting - Add Felica card detection
* Fix IIDX FX2 deck lighting - Fix SDVX HID lighting
- Fix IIDX FX2 deck lighting
## a13 ## a13
* iidx 15 (DJ Troopers) support
* Fix BG video triangle seam on old games - iidx 15 (DJ Troopers) support
* New options handling: cmd args and options file - Fix BG video triangle seam on old games
- New options handling: cmd args and options file
## a11 ## a11
* Fix nVidia crash on GOLD
- Fix nVidia crash on GOLD
## a10 ## a10
* Adds IO2 emulation for Gold
* Add IO2 translucent mode for Gold ONLY atm (untested due to lack of hardware) - Adds IO2 emulation for Gold
* Random input bug resolved (also kinda untested, so maybe?) - Add IO2 translucent mode for Gold ONLY atm (untested due to lack of hardware)
- Random input bug resolved (also kinda untested, so maybe?)
## a09 ## a09
* Add IIDX 14 support
- Add IIDX 14 support
## a08 ## a08
* Add experimental KFCA (SDVX PCB) support
* Add Sound Voltex and BeatStream builds - Add experimental KFCA (SDVX PCB) support
- Add Sound Voltex and BeatStream builds
## a07 ## a07
* Add IIDX 13 DistorteD support
* Add option to use real card readers with IIDX 13 - Add IIDX 13 DistorteD support
- Add option to use real card readers with IIDX 13
## a06 ## a06
* Fixes bug in chart data loader interception code
- Fixes bug in chart data loader interception code
## a05 ## a05
* Fix broken card reader emulation on Copula
* Add monitor check/auto timebase for old IIDX games (9-12) -> refer to the - Fix broken card reader emulation on Copula
readme file on how to use it - Add monitor check/auto timebase for old IIDX games (9-12) -> refer to the readme file on how to
use it
## a04 ## a04
* Add software frame rate limiter for all D3D8 based games (-g option).
- Add software frame rate limiter for all D3D8 based games (-g option).
## a03 ## a03
* Add support for IIDX 9-12
* Translucent mode: Use real C02 EZUSB IO hardware - Add support for IIDX 9-12
* eamio-real.dll: Use real slotted or wave pass card readers - Translucent mode: Use real C02 EZUSB IO hardware
* Setup guide, advanced features and FAQ: see readme file iidxhook1.md - eamio-real.dll: Use real slotted or wave pass card readers
- Setup guide, advanced features and FAQ: see readme file iidxhook1.md
## a02 ## a02
* Fonts are always correct irrespective of system locale! (Make sure you
install East Asian fonts tho) - Fonts are always correct irrespective of system locale! (Make sure you install East Asian fonts
* No longer crashes shitty gaming mice that don't follow the USB spec! (will tho)
backport this to bt4) - No longer crashes shitty gaming mice that don't follow the USB spec! (will backport this to bt4)
* launcher.exe now has a UAC manifest! (because 2006 called and told me to get - launcher.exe now has a UAC manifest! (because 2006 called and told me to get with the fucking
with the fucking program) program)
## a01 ## a01
* Initial Alpha, only supports IIDX 21 and 22 for now.
- Initial Alpha, only supports IIDX 21 and 22 for now.

View File

@ -1,36 +1,39 @@
# Contributing # Contributing
This document outlines different types of contributions and how YOU can help us to improve the This document outlines different types of contributions and how YOU can help us to improve the
project. Read it, as it provides guidelines that are there to help you and the maintainers. project. Read it, as it provides guidelines that are there to help you and the maintainers.
## Reporting and discussions: Issues section on gitlab ## Reporting and discussions: Issues section on gitlab
In order to avoid having to manage ongoing discussions and bug reports on different communication In order to avoid having to manage ongoing discussions and bug reports on different communication
channels, e.g. forums, messangers or other closed groups, we ask everyone to treat the issue channels, e.g. forums, messangers or other closed groups, we ask everyone to treat the issue section
section on gitlab as the place to open their relevant discussions and bug reports regarding the on gitlab as the place to open their relevant discussions and bug reports regarding the project.
project.
The maintainers of the project do not have the time nor motivation to micromanage on the various The maintainers of the project do not have the time nor motivation to micromanage on the various
channels and enter all data here to have it collected. This is a simple task that *ANYONE* can do channels and enter all data here to have it collected. This is a simple task that *ANYONE* can do
allowing the maintainers and developers to spend their time on the codebase. allowing the maintainers and developers to spend their time on the codebase.
## Bug reports ## Bug reports
Follow these steps when reporting bugs to ensure you provide all information we *always* need and Follow these steps when reporting bugs to ensure you provide all information we *always* need and
make your report valuable and actionable. make your report valuable and actionable.
1. On the bemanitools repository, go `Issues` on the left-hand sidebar. 1. On the bemanitools repository, go `Issues` on the left-hand sidebar.
1. Use the search function to check if there is an already open issue regarding what you want to 1. Use the search function to check if there is an already open issue regarding what you want to
report report
1. If that applies, read the open issue to check what's already covered regarding the bug 1. If that applies, read the open issue to check what's already covered regarding the bug
1. Provide additional information or things that are missing. Upload your log files, 1. Provide additional information or things that are missing. Upload your log files, screenshots,
screenshots, videos etc. Be careful to remove sensitive information like PCBIDs videos etc. Be careful to remove sensitive information like PCBIDs
1. Give a thumbs up to the issue to show you are interested/affected as well 1. Give a thumbs up to the issue to show you are interested/affected as well
1. If no existing issue avilable, create a new one 1. If no existing issue avilable, create a new one
1. Come up with a descriptive title 1. Come up with a descriptive title
1. **USE OUR BUG REPORTING TEMPLATE**: Pick it by selecting `Bug` on the `Description` section 1. **USE OUR BUG REPORTING TEMPLATE**: Pick it by selecting `Bug` on the `Description` section
1. Follow the sections and their instructions provided by the template and fill them in. All fields 1. Follow the sections and their instructions provided by the template and fill them in. All fields
are mandatory to provide a comprehensive report if not stated otherwise are mandatory to provide a comprehensive report if not stated otherwise
1. When finished, submit the issue 1. When finished, submit the issue
## Pull requests: bugfixes, new features or other code contributions ## Pull requests: bugfixes, new features or other code contributions
Pull requests are welcome! May it be a merge request to an already known issue or a new feature that Pull requests are welcome! May it be a merge request to an already known issue or a new feature that
you consider as a valuable contribution, please open a MR. you consider as a valuable contribution, please open a MR.
@ -47,31 +50,32 @@ that your contribution meets our standards. This is not meant to annoy people bu
consistency that the project stays maintainable for everyone. consistency that the project stays maintainable for everyone.
Steps for contributing to the repository using a merge request: Steps for contributing to the repository using a merge request:
1. If you are new to git, take a bit of time to learn the basics which are very simple, e.g. Google 1. If you are new to git, take a bit of time to learn the basics which are very simple, e.g. Google
for "git tutorial for non-programmers" for "git tutorial for non-programmers"
1. Fork the upstream repository (Fork button on the top right on the main page of the repository) 1. Fork the upstream repository (Fork button on the top right on the main page of the repository)
1. You can start editing files like documentation easily inside gitlab which might be the prefered 1. You can start editing files like documentation easily inside gitlab which might be the prefered
option for many non-coders option for many non-coders
1. Clone your fork to your local machine and start working on stuff 1. Clone your fork to your local machine and start working on stuff
1. Ensure you push your changes to your fork on gitlab 1. Ensure you push your changes to your fork on gitlab
1. When done, go to the `Merge Requests` section on the left sidebar of the upstream repository 1. When done, go to the `Merge Requests` section on the left sidebar of the upstream repository
1. Hit the `New merge request` button 1. Hit the `New merge request` button
1. Select the `master` branch as the source branch 1. Select the `master` branch as the source branch
1. Select whatever branch you worked, likely `master` if you didn't change that, as the target 1. Select whatever branch you worked, likely `master` if you didn't change that, as the target
branch branch
1. Hit `Compare branches and continue` 1. Hit `Compare branches and continue`
1. Provide a descriptive title of what your change is about 1. Provide a descriptive title of what your change is about
1. **USE OUR MR TEMPLATES** 1. **USE OUR MR TEMPLATES**
1. If you submit a bugfix, use the `Bugfix` tempalte and fill in the sections 1. If you submit a bugfix, use the `Bugfix` tempalte and fill in the sections
1. If you submit a new feature, use the `Feature` template and fill in the sections 1. If you submit a new feature, use the `Feature` template and fill in the sections
1. If you submit some minor fixes or documentation improvements, there is no template for that. 1. If you submit some minor fixes or documentation improvements, there is no template for that.
Please provide a expressive description what you did and *why* you did that Please provide a expressive description what you did and *why* you did that
1. If any of your changes are tied to one or multiple issues, link them in the description 1. If any of your changes are tied to one or multiple issues, link them in the description
1. When done, hit `Submit merge request` 1. When done, hit `Submit merge request`
The maintainers will take a look at your submission and provide their feedback. The intention of The maintainers will take a look at your submission and provide their feedback. The intention of
this process is to ensure the contribution meets the quality standards. Please also see this is this process is to ensure the contribution meets the quality standards. Please also see this is a
a learning opportunity, especially with your first contribution, if a lot of comments and change learning opportunity, especially with your first contribution, if a lot of comments and change
requests are being made. The maintainers are open to discuss their suggestions/feedback if requests are being made. The maintainers are open to discuss their suggestions/feedback if
reasonable feedback is given back to them. reasonable feedback is given back to them.
@ -79,5 +83,6 @@ Once all discussion is resolved and the involved maintainers approved your submi
merged into master and also included in the next release. merged into master and also included in the next release.
## Roadmap ## Roadmap
No concrete roadmap or timeline exists. We want to continue adding support for new games as well as No concrete roadmap or timeline exists. We want to continue adding support for new games as well as
old games (some of the old games supported by BT4 are not supported, yet). old games (some of the old games supported by BT4 are not supported, yet).

248
README.md
View File

@ -6,169 +6,181 @@ Version: `5.49`
A collection of tools to run [various Bemani arcade games](#supported-games). A collection of tools to run [various Bemani arcade games](#supported-games).
Bemanitools 5 (BT5) is the successor to Bemanitools 4 which introduces a big code cleanup and support for newer games. Bemanitools 5 (BT5) is the successor to Bemanitools 4 which introduces a big code cleanup and
BT5 uses a cleaner approach than BT4 did; specifically, all input and lighting is handled by emulating the protocols support for newer games. BT5 uses a cleaner approach than BT4 did; specifically, all input and
spoken by the real IO PCBs, instead of replacing chunks of game code like BT4. The benefits of this approach are a more lighting is handled by emulating the protocols spoken by the real IO PCBs, instead of replacing
authentic gameplay experience, and easier support for a broader range of releases from each game series. chunks of game code like BT4. The benefits of this approach are a more authentic gameplay
experience, and easier support for a broader range of releases from each game series.
## Documentation ## Documentation
Browse our [documentation](doc/README.md) as it might already cover various questions and concerns Browse our [documentation](doc/README.md) as it might already cover various questions and concerns
you are looking for or about to ask. you are looking for or about to ask.
## Contributions and bug reporting ## Contributions and bug reporting
[Read the dedicated CONTRIBUTING.md documentation](CONTRIBUTING.md). [Read the dedicated CONTRIBUTING.md documentation](CONTRIBUTING.md).
The tl;dr version and golden rules of the sections in the document: The tl;dr version and golden rules of the sections in the document:
* **EVERYONE** can contribute, this is **NOT** limited to people coding
* [Open an issue on gitlab for discussions, feature requests and bug reports](CONTRIBUTING.md#reporting-and-discussions-issues-section-on-github) - **EVERYONE** can contribute, this is **NOT** limited to people coding
* [ALWAYS report bugs as issues and ALWAYS use the available bug template](CONTRIBUTING.md#bug-reports) - [Open an issue on gitlab for discussions, feature requests and bug reports](CONTRIBUTING.md#reporting-and-discussions-issues-section-on-github)
* [Everyone is allowed to submit changes which are not just limited to code by opening merge requests](CONTRIBUTING.md#pull-requests-bugfixes-new-features-or-other-code-contributions) - [ALWAYS report bugs as issues and ALWAYS use the available bug template](CONTRIBUTING.md#bug-reports)
* [Documentation improvements can and even should be contributed by non developers](CONTRIBUTING.md#pull-requests-bugfixes-new-features-or-other-code-contributions) - [Everyone is allowed to submit changes which are not just limited to code by opening merge requests](CONTRIBUTING.md#pull-requests-bugfixes-new-features-or-other-code-contributions)
- [Documentation improvements can and even should be contributed by non developers](CONTRIBUTING.md#pull-requests-bugfixes-new-features-or-other-code-contributions)
## Supported games ## Supported games
The following games are supported with their corresponding hook-libraries. The following games are supported with their corresponding hook-libraries.
* BeatStream - BeatStream
* BeatStream (`bst.zip`): bsthook - BeatStream (`bst.zip`): bsthook
* BeatStream アニムトライヴ (`bst.zip`): bsthook - BeatStream アニムトライヴ (`bst.zip`): bsthook
* [Dance Dance Revolution](doc/ddrhook/README.md) - [Dance Dance Revolution](doc/ddrhook/README.md)
* Dance Dance Revolution X (`ddr-11.zip`): [ddrhook1](doc/ddrhook/ddrhook1.md) - Dance Dance Revolution X (`ddr-11.zip`): [ddrhook1](doc/ddrhook/ddrhook1.md)
* Dance Dance Revolution X2 (US/EU regions) (`ddr-12-us.zip`): [ddrhook1](doc/ddrhook/ddrhook1.md) - Dance Dance Revolution X2 (US/EU regions) (`ddr-12-us.zip`): [ddrhook1](doc/ddrhook/ddrhook1.md)
* Dance Dance Revolution X2 (JP region) (`ddr-12.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md) - Dance Dance Revolution X2 (JP region) (`ddr-12.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
* Dance Dance Revolution 2013 (`ddr-14-to-16.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md) - Dance Dance Revolution 2013 (`ddr-14-to-16.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
* Dance Dance Revolution 2014 (`ddr-14-to-16.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md) - Dance Dance Revolution 2014 (`ddr-14-to-16.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
* Dance Dance Revolution A (`ddr-14-to-16.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md) - Dance Dance Revolution A (`ddr-14-to-16.zip`): [ddrhook2](doc/ddrhook/ddrhook2.md)
* [Beatmania IIDX](doc/iidxhook/README.md) - [Beatmania IIDX](doc/iidxhook/README.md)
* Beatmania IIDX 9th Style (`iidx-09-to-12.zip`): [iidxhook1](doc/iidxhook/iidxhook1.md) - Beatmania IIDX 9th Style (`iidx-09-to-12.zip`): [iidxhook1](doc/iidxhook/iidxhook1.md)
* Beatmania IIDX 10th Style (`iidx-09-to-12.zip`): [iidxhook1](doc/iidxhook/iidxhook1.md) - Beatmania IIDX 10th Style (`iidx-09-to-12.zip`): [iidxhook1](doc/iidxhook/iidxhook1.md)
* Beatmania IIDX 11 IIDX RED (`iidx-09-to-12.zip`): [iidxhook1](doc/iidxhook/iidxhook1.md) - Beatmania IIDX 11 IIDX RED (`iidx-09-to-12.zip`): [iidxhook1](doc/iidxhook/iidxhook1.md)
* Beatmania IIDX 12 HAPPY SKY (`iidx-09-to-12.zip`): [iidxhook1](doc/iidxhook/iidxhook1.md) - Beatmania IIDX 12 HAPPY SKY (`iidx-09-to-12.zip`): [iidxhook1](doc/iidxhook/iidxhook1.md)
* Beatmania IIDX 13 DistorteD (`iidx-13.zip`): [iidxhook2](doc/iidxhook/iidxhook2.md) - Beatmania IIDX 13 DistorteD (`iidx-13.zip`): [iidxhook2](doc/iidxhook/iidxhook2.md)
* Beatmania IIDX 14 GOLD (`iidx-14-to-17.zip`): [iidxhook3](doc/iidxhook/iidxhook3.md) - Beatmania IIDX 14 GOLD (`iidx-14-to-17.zip`): [iidxhook3](doc/iidxhook/iidxhook3.md)
* Beatmania IIDX 15 DJ TROOPERS (`iidx-14-to-17.zip`): [iidxhook3](doc/iidxhook/iidxhook3.md) - Beatmania IIDX 15 DJ TROOPERS (`iidx-14-to-17.zip`): [iidxhook3](doc/iidxhook/iidxhook3.md)
* Beatmania IIDX 16 EMPRESS (`iidx-14-to-17.zip`): [iidxhook3](doc/iidxhook/iidxhook3.md) - Beatmania IIDX 16 EMPRESS (`iidx-14-to-17.zip`): [iidxhook3](doc/iidxhook/iidxhook3.md)
* Beatmania IIDX 17 SIRIUS (`iidx-14-to-17.zip`): [iidxhook3](doc/iidxhook/iidxhook3.md) - Beatmania IIDX 17 SIRIUS (`iidx-14-to-17.zip`): [iidxhook3](doc/iidxhook/iidxhook3.md)
* Beatmania IIDX 18 Resort Anthem (`iidx-18.zip`): [iidxhook4](doc/iidxhook/iidxhook4.md) - Beatmania IIDX 18 Resort Anthem (`iidx-18.zip`): [iidxhook4](doc/iidxhook/iidxhook4.md)
* Beatmania IIDX 19 Lincle (`iidx-19.zip`): [iidxhook5](doc/iidxhook/iidxhook5.md) - Beatmania IIDX 19 Lincle (`iidx-19.zip`): [iidxhook5](doc/iidxhook/iidxhook5.md)
* Beatmania IIDX tricoro CN (狂热节拍 IIDX 2) (`iidx-20-cn.zip`): [iidxhook5-cn](doc/iidxhook/iidxhook5-cn.md) - Beatmania IIDX tricoro CN (狂热节拍 IIDX 2) (`iidx-20-cn.zip`):
* Beatmania IIDX 20 Tricoro (`iidx-20.zip`): [iidxhook6](doc/iidxhook/iidxhook6.md) [iidxhook5-cn](doc/iidxhook/iidxhook5-cn.md)
* Beatmania IIDX 21 SPADA (`iidx-21-to-24.zip`): [iidxhook7](doc/iidxhook/iidxhook7.md) - Beatmania IIDX 20 Tricoro (`iidx-20.zip`): [iidxhook6](doc/iidxhook/iidxhook6.md)
* Beatmania IIDX 22 PENDUAL (`iidx-21-to-24.zip`): [iidxhook7](doc/iidxhook/iidxhook7.md) - Beatmania IIDX 21 SPADA (`iidx-21-to-24.zip`): [iidxhook7](doc/iidxhook/iidxhook7.md)
* Beatmania IIDX 23 copula (`iidx-21-to-24.zip`): [iidxhook7](doc/iidxhook/iidxhook7.md) - Beatmania IIDX 22 PENDUAL (`iidx-21-to-24.zip`): [iidxhook7](doc/iidxhook/iidxhook7.md)
* Beatmania IIDX 24 SINOBUZ (`iidx-21-to-24.zip`): [iidxhook7](doc/iidxhook/iidxhook7.md) - Beatmania IIDX 23 copula (`iidx-21-to-24.zip`): [iidxhook7](doc/iidxhook/iidxhook7.md)
* Beatmania IIDX 25 CANNON BALLERS (`iidx-25-to-26.zip`): [iidxhook8](doc/iidxhook/iidxhook8.md) - Beatmania IIDX 24 SINOBUZ (`iidx-21-to-24.zip`): [iidxhook7](doc/iidxhook/iidxhook7.md)
* Beatmania IIDX 26 Rootage (`iidx-25-to-26.zip`): [iidxhook8](doc/iidxhook/iidxhook8.md) - Beatmania IIDX 25 CANNON BALLERS (`iidx-25-to-26.zip`): [iidxhook8](doc/iidxhook/iidxhook8.md)
* Beatmania IIDX 27 Heroic Verse (`iidx-27-to-30.zip`): [iidxhook9](doc/iidxhook/iidxhook9.md) - Beatmania IIDX 26 Rootage (`iidx-25-to-26.zip`): [iidxhook8](doc/iidxhook/iidxhook8.md)
* Beatmania IIDX 28 BISTROVER (`iidx-27-to-30.zip`): [iidxhook9](doc/iidxhook/iidxhook9.md) - Beatmania IIDX 27 Heroic Verse (`iidx-27-to-30.zip`): [iidxhook9](doc/iidxhook/iidxhook9.md)
* Beatmania IIDX 29 CASTHOUR (`iidx-27-to-30.zip`): [iidxhook9](doc/iidxhook/iidxhook9.md) - Beatmania IIDX 28 BISTROVER (`iidx-27-to-30.zip`): [iidxhook9](doc/iidxhook/iidxhook9.md)
* Beatmania IIDX 30 RESIDENT (`iidx-27-to-30.zip`): [iidxhook9](doc/iidxhook/iidxhook9.md) - Beatmania IIDX 29 CASTHOUR (`iidx-27-to-30.zip`): [iidxhook9](doc/iidxhook/iidxhook9.md)
* [jubeat](doc/jbhook/README.md) - Beatmania IIDX 30 RESIDENT (`iidx-27-to-30.zip`): [iidxhook9](doc/iidxhook/iidxhook9.md)
* jubeat (`jb-01.zip`): [jbhook1](doc/jbhook/jbhook1.md) - [jubeat](doc/jbhook/README.md)
* jubeat ripples (`jb-02.zip`): [jbhook1](doc/jbhook/jbhook1.md) - jubeat (`jb-01.zip`): [jbhook1](doc/jbhook/jbhook1.md)
* jubeat knit (`jb-03.zip`): [jbhook2](doc/jbhook/jbhook2.md) - jubeat ripples (`jb-02.zip`): [jbhook1](doc/jbhook/jbhook1.md)
* jubeat copious (`jb-04.zip`): [jbhook2](doc/jbhook/jbhook2.md) - jubeat knit (`jb-03.zip`): [jbhook2](doc/jbhook/jbhook2.md)
* jubeat saucer (fulfill) (`jb-05-to-07.zip`): [jbhook3](doc/jbhook/jbhook3.md) - jubeat copious (`jb-04.zip`): [jbhook2](doc/jbhook/jbhook2.md)
* jubeat prop (`jb-05-to-07.zip`): [jbhook3](doc/jbhook/jbhook3.md) - jubeat saucer (fulfill) (`jb-05-to-07.zip`): [jbhook3](doc/jbhook/jbhook3.md)
* jubeat qubell (`jb-05-to-07.zip`): [jbhook3](doc/jbhook/jbhook3.md) - jubeat prop (`jb-05-to-07.zip`): [jbhook3](doc/jbhook/jbhook3.md)
* jubeat clan (`jb-08.zip`): [jbhook3](doc/jbhook/jbhook3.md) - jubeat qubell (`jb-05-to-07.zip`): [jbhook3](doc/jbhook/jbhook3.md)
* jubeat festo (`jb-08.zip`): [jbhook3](doc/jbhook/jbhook3.md) - jubeat clan (`jb-08.zip`): [jbhook3](doc/jbhook/jbhook3.md)
* [pop'n music](doc/popnhook/README.md) - jubeat festo (`jb-08.zip`): [jbhook3](doc/jbhook/jbhook3.md)
* pop'n music 15 ADVENTURE (`popn-15-to-18.zip`) using [popnhook1](doc/popnhook/popnhook1.md) - [pop'n music](doc/popnhook/README.md)
* pop'n music 16 PARTY♪ (`popn-15-to-18.zip`) using [popnhook1](doc/popnhook/popnhook1.md) - pop'n music 15 ADVENTURE (`popn-15-to-18.zip`) using [popnhook1](doc/popnhook/popnhook1.md)
* pop'n music 17 THE MOVIE (`popn-15-to-18.zip`) using [popnhook1](doc/popnhook/popnhook1.md) - pop'n music 16 PARTY♪ (`popn-15-to-18.zip`) using [popnhook1](doc/popnhook/popnhook1.md)
* pop'n music 18 せんごく列伝 (`popn-15-to-18.zip`) using [popnhook1](doc/popnhook/popnhook1.md) - pop'n music 17 THE MOVIE (`popn-15-to-18.zip`) using [popnhook1](doc/popnhook/popnhook1.md)
* SOUND VOLTEX - pop'n music 18 せんごく列伝 (`popn-15-to-18.zip`) using [popnhook1](doc/popnhook/popnhook1.md)
* SOUND VOLTEX BOOTH (`sdvx-01-to-04.zip`): sdvxhook - SOUND VOLTEX
* SOUND VOLTEX II -infinite infection- (`sdvx-01-to-04.zip`): sdvxhook - SOUND VOLTEX BOOTH (`sdvx-01-to-04.zip`): sdvxhook
* SOUND VOLTEX III GRAVITY WARS (`sdvx-01-to-04.zip`): sdvxhook - SOUND VOLTEX II -infinite infection- (`sdvx-01-to-04.zip`): sdvxhook
* SOUND VOLTEX IV HEAVENLY HAVEN (`sdvx-01-to-04.zip`): sdvxhook - SOUND VOLTEX III GRAVITY WARS (`sdvx-01-to-04.zip`): sdvxhook
* SOUND VOLTEX Vivid Wave (`sdvx-05-to-06`): sdvxhook2 - SOUND VOLTEX IV HEAVENLY HAVEN (`sdvx-01-to-04.zip`): sdvxhook
* SOUND VOLTEX EXCEED GEAR (`sdvx-05-to-06`): sdvxhook2 - SOUND VOLTEX Vivid Wave (`sdvx-05-to-06`): sdvxhook2
- SOUND VOLTEX EXCEED GEAR (`sdvx-05-to-06`): sdvxhook2
## Auxiliary tooling ## Auxiliary tooling
* Bootstrapping
* [inject](doc/inject.md): Inject arbitrary hooking libraries into a target application process. - Bootstrapping
* [launcher](doc/launcher.md): Bootstrap Konami's AVS environment and launch a target application with arbitrary - [inject](doc/inject.md): Inject arbitrary hooking libraries into a target application process.
injected hooking libraries. - [launcher](doc/launcher.md): Bootstrap Konami's AVS environment and launch a target application
* Beatmnia IIDX Ezusb IO board with arbitrary injected hooking libraries.
* [ezusb-iidx-fpga-flash](doc/tools/ezusb-iidx-fpga-flash.md): Flash a binary blob with FPGA firmware to a target - Beatmnia IIDX Ezusb IO board
ezusb FX IO board - [ezusb-iidx-fpga-flash](doc/tools/ezusb-iidx-fpga-flash.md): Flash a binary blob with FPGA
* [ezusb-iidx-sram-flash](doc/tools/ezusb-iidx-sram-flash.md): Flash a binary blob with SRAM contents to a target firmware to a target ezusb FX IO board
ezusb FX2 IO board - [ezusb-iidx-sram-flash](doc/tools/ezusb-iidx-sram-flash.md): Flash a binary blob with SRAM
* Exit hooks: Exit the game with a button combination using native cabinet inputs contents to a target ezusb FX2 IO board
* [iidx-ezusb-exit-hook](doc/tools/iidx-ezusb-exit-hook.md): For IIDX with ezusb IO - Exit hooks: Exit the game with a button combination using native cabinet inputs
* [iidx-bio2-exit-hook](doc/tools/iidx-bio2-exit-hook.md): For IIDX with BIO2 IO - [iidx-ezusb-exit-hook](doc/tools/iidx-ezusb-exit-hook.md): For IIDX with ezusb IO
* [iidx-ezusb2-exit-hook](doc/tools/iidx-ezusb-exit-hook.md): For IIDX with ezusb FX2 IO - [iidx-bio2-exit-hook](doc/tools/iidx-bio2-exit-hook.md): For IIDX with BIO2 IO
* Bemanitools API testing: Tools for testing bemanitools API implementations - [iidx-ezusb2-exit-hook](doc/tools/iidx-ezusb-exit-hook.md): For IIDX with ezusb FX2 IO
* [ddriotest](doc/tools/ddriotest.md): For [ddrio API](doc/api.md#io-boards) - Bemanitools API testing: Tools for testing bemanitools API implementations
* [eamiotest](doc/tools/eamiotest.md): For [eamio API](doc/api.md#eamuse-readers) - [ddriotest](doc/tools/ddriotest.md): For [ddrio API](doc/api.md#io-boards)
* [iidxiotest](doc/tools/iidxiotest.md): For [iidxio API](doc/api.md#io-boards) - [eamiotest](doc/tools/eamiotest.md): For [eamio API](doc/api.md#eamuse-readers)
* [jbiotest](doc/tools/jbiotest.md): For [jbio API](doc/api.md#io-boards) - [iidxiotest](doc/tools/iidxiotest.md): For [iidxio API](doc/api.md#io-boards)
* DDR IO testing: Tools for testing hardware of a real DDR cabinet - [jbiotest](doc/tools/jbiotest.md): For [jbio API](doc/api.md#io-boards)
* [p3io-ddr-tool](doc/tools/p3io-ddr-tool.md) - DDR IO testing: Tools for testing hardware of a real DDR cabinet
* [extiotest](doc/tools/extiotest.md) - [p3io-ddr-tool](doc/tools/p3io-ddr-tool.md)
* [aciotest](doc/tools/aciotest.md): Command line tool to quickly test ACIO devices - [extiotest](doc/tools/extiotest.md)
* config: UI input/output configuration tool when using the default bemanitools API (geninput) - [aciotest](doc/tools/aciotest.md): Command line tool to quickly test ACIO devices
* ir-beat-patch-9/10: Patch the IR beat phase on IIDX 9 and 10 - config: UI input/output configuration tool when using the default bemanitools API (geninput)
* [mempatch-hook](doc/tools/mempatch-hook.md): Patch raw memory locations in the target process based on the provided - ir-beat-patch-9/10: Patch the IR beat phase on IIDX 9 and 10
configuration - [mempatch-hook](doc/tools/mempatch-hook.md): Patch raw memory locations in the target process
* [pcbidgen](doc/tools/pcbidgen.md): Konami PCBID generator tool based on the provided configuration
* [ViGEm clients](doc/vigem/README.md): Expose BT5 APIs as XBOX game controllers to play any games with real cabinet - [pcbidgen](doc/tools/pcbidgen.md): Konami PCBID generator tool
hardware. - [ViGEm clients](doc/vigem/README.md): Expose BT5 APIs as XBOX game controllers to play any games
with real cabinet hardware.
## Pre-requisites ## Pre-requisites
### Supported platforms ### Supported platforms
Our main platforms are currently Windows XP and Windows 7 which are also the target platforms on the original hardware
of those games. However, as it gets more difficult to get and maintain hardware comptible with Windows XP, this might Our main platforms are currently Windows XP and Windows 7 which are also the target platforms on the
change in the future. Many games also run on very recent Windows 10 builds but bear with us that it's hard to keep up original hardware of those games. However, as it gets more difficult to get and maintain hardware
with Windows updates breaking legacy software. comptible with Windows XP, this might change in the future. Many games also run on very recent
Windows 10 builds but bear with us that it's hard to keep up with Windows updates breaking legacy
software.
### Distribution contents ### Distribution contents
Check the [list of supported games](#supported-games) to grab the right files for your game. BT5 also includes
a *tools* subpackage (tools.zip) as well as the full source code (src.zip).
You will find *.md files in various sub-packages that give you further instructions for setup, usage, error information Check the [list of supported games](#supported-games) to grab the right files for your game. BT5
or FAQ. We advice you to read them as your questions and concerns might already be answered by them. If not, let us also includes a *tools* subpackage (tools.zip) as well as the full source code (src.zip).
know if there is any information that you consider helpful or important to know and should be added.
You will find \*.md files in various sub-packages that give you further instructions for setup,
usage, error information or FAQ. We advice you to read them as your questions and concerns might
already be answered by them. If not, let us know if there is any information that you consider
helpful or important to know and should be added.
### Setup and dependencies ### Setup and dependencies
Most (older generation) games were developed for Windows XP Embedded but should run fine on any Most (older generation) games were developed for Windows XP Embedded but should run fine on any
consumer version of Windows XP. Newer versions of Windows, e.g. Windows 7, 8 and 10, should be fine consumer version of Windows XP. Newer versions of Windows, e.g. Windows 7, 8 and 10, should be fine
as well. Some hooks also include fixes required to run the games on a more recent version. as well. Some hooks also include fixes required to run the games on a more recent version.
Depending on the game, you also need the following dependencies installed: Depending on the game, you also need the following dependencies installed:
* The 32-bit (x86) version of - The 32-bit (x86) version of
[Microsoft Visual C++ 2010 Service Pack 1 Redistributable Package MFC Security Update](https://www.microsoft.com/en-sg/download/details.aspx?id=26999) [Microsoft Visual C++ 2010 Service Pack 1 Redistributable Package MFC Security Update](https://www.microsoft.com/en-sg/download/details.aspx?id=26999)
* The 32-bit (x86) and 64-bit (x64) versions of - The 32-bit (x86) and 64-bit (x64) versions of
[Microsoft Visual C++ Redistributable Packages for Visual Studio 2013](https://www.microsoft.com/en-sg/download/details.aspx?id=40784) [Microsoft Visual C++ Redistributable Packages for Visual Studio 2013](https://www.microsoft.com/en-sg/download/details.aspx?id=40784)
* The [DirectX 9 End-User Runtimes (June 2010)](https://www.microsoft.com/en-us/download/details.aspx?id=8109) - The
[DirectX 9 End-User Runtimes (June 2010)](https://www.microsoft.com/en-us/download/details.aspx?id=8109)
See also See also [bemanitools-supplement](https://www.github.com/djhackersdev/bemanitools-supplement/) for
[bemanitools-supplement](https://www.github.com/djhackersdev/bemanitools-supplement/) files.
for files.
## Development ## Development
### Building ### Building
See the [development document](doc/development.md). See the [development document](doc/development.md).
### Architecture ### Architecture
A dedicate [architecture document](doc/architecture.md) outlines the architecture of Bemanitools and points out the most
important aspects you should know before you get started with development. A dedicate [architecture document](doc/architecture.md) outlines the architecture of Bemanitools and
points out the most important aspects you should know before you get started with development.
### API ### API
Please refer to the [API documentation](doc/api.md). Please refer to the [API documentation](doc/api.md).
## Release process ## Release process
Please refer to the [dedicated documentation](doc/release-process.md). Please refer to the [dedicated documentation](doc/release-process.md).
## License ## License
Source code license is the Unlicense; you are permitted to do with this as thou wilt. For details, please refer to the
[LICENSE file](LICENSE) included with the source code.
Source code license is the Unlicense; you are permitted to do with this as thou wilt. For details,
please refer to the [LICENSE file](LICENSE) included with the source code.

View File

@ -4,31 +4,31 @@ This folder contains various types of documentation.
Table of contents: Table of contents:
* Game - Game
* [Error codes](game-error-codes.md): List of bemani game specific error codes that you might - [Error codes](game-error-codes.md): List of bemani game specific error codes that you might
encounter during boot or gameplay with troubleshooting information encounter during boot or gameplay with troubleshooting information
* Key tools - Key tools
* [Inject](inject.md): Readme for one of BT5's key applications, `inject.exe` - [Inject](inject.md): Readme for one of BT5's key applications, `inject.exe`
* [Launcher](launcher.md): Readme for another one of BT5's key applications, `launcher.exe` - [Launcher](launcher.md): Readme for another one of BT5's key applications, `launcher.exe`
* [Tools](tools/README.md): Documentation for additional user and development tooling - [Tools](tools/README.md): Documentation for additional user and development tooling
* Game hooks - Game hooks
* [ddrhook](ddrhook/README.md): Documentation relevant to `ddrhook` implementations - [ddrhook](ddrhook/README.md): Documentation relevant to `ddrhook` implementations
* [iidxhook](iidxhook/README.md): Documentation relevant to `iidxhook` implementations - [iidxhook](iidxhook/README.md): Documentation relevant to `iidxhook` implementations
* [jbhook](jbhook/README.md): Documentation relevant to `jbhook` implementations - [jbhook](jbhook/README.md): Documentation relevant to `jbhook` implementations
* [popnhook](popnhook/README.md): Documentation relevant to `popnhook` implementations - [popnhook](popnhook/README.md): Documentation relevant to `popnhook` implementations
* [sdvxhook](sdvxhook/README.md): Documentation relevant to `sdvxhook` implementations - [sdvxhook](sdvxhook/README.md): Documentation relevant to `sdvxhook` implementations
* Development - Development
* [API](api.md): Available APIs and IO (hardware) implementations for BT5 and instructions how - [API](api.md): Available APIs and IO (hardware) implementations for BT5 and instructions how to
to use them use them
* [Architecture](architecture.md): Outline of BT5's architecture, how things are designed and why - [Architecture](architecture.md): Outline of BT5's architecture, how things are designed and why
* [Development](development.md): Development environment, building, releasing, etc. - [Development](development.md): Development environment, building, releasing, etc.
* [Developer documentation](dev/README.md): Various lose documentation/notes by developers - [Developer documentation](dev/README.md): Various lose documentation/notes by developers
* [Tools](tools/README.md): Documentation for additional user and development tooling - [Tools](tools/README.md): Documentation for additional user and development tooling
## Further external documentation ## Further external documentation
A list of external documentation that can be useful when dealing with bemanitools, A list of external documentation that can be useful when dealing with bemanitools, supported data
supported data and hardware. and hardware.
* [arcade-docs](https://github.com/Shizmob/arcade-docs): An open (to read and contribute) repository - [arcade-docs](https://github.com/Shizmob/arcade-docs): An open (to read and contribute) repository
of arcade hardware and software documentation of arcade hardware and software documentation

View File

@ -1,16 +1,16 @@
# Bemanitools API # Bemanitools API
Bemanitools introduces interfaces abstracting the IO hardware of many games. This is used to implement support for Bemanitools introduces interfaces abstracting the IO hardware of many games. This is used to
non-intended IO devices from simple keyboard support, standard gamecontrollers to custom IO boards or using real implement support for non-intended IO devices from simple keyboard support, standard gamecontrollers
hardware with the games (e.g. support for real legacy hardware). to custom IO boards or using real hardware with the games (e.g. support for real legacy hardware).
For a list of already supported and included hardware by game, see the next section. For a list of already supported and included hardware by game, see the next section.
The BT5 API separates main game IO hardware like buttons, turn tables, spinners, lights etc. (bstio, iidxio, ...) from The BT5 API separates main game IO hardware like buttons, turn tables, spinners, lights etc. (bstio,
eamuse hardware like 10-key pads and card readers (eamio). iidxio, ...) from eamuse hardware like 10-key pads and card readers (eamio).
If you want to write an implementation for your own custom piece of hardware, check out the SDK (*bemanitools* If you want to write an implementation for your own custom piece of hardware, check out the SDK
sub-folder) in the source code (src.zip). (*bemanitools* sub-folder) in the source code (src.zip).
## Implementations ## Implementations
@ -18,35 +18,35 @@ sub-folder) in the source code (src.zip).
The following implementations are already shipped with BT5. The following implementations are already shipped with BT5.
* BeatStream - BeatStream
* bstio.dll (default): Keyboard, joystick and mouse input - bstio.dll (default): Keyboard, joystick and mouse input
* Dance Dance Revolution - Dance Dance Revolution
* ddrio.dll (default): Keyboard, joystick and mouse input - ddrio.dll (default): Keyboard, joystick and mouse input
* [ddrio-p3io.dll](ddrhook/ddrio-p3io.md): DDR P3IO (Dragon PCB) + EXTIO hardware - [ddrio-p3io.dll](ddrhook/ddrio-p3io.md): DDR P3IO (Dragon PCB) + EXTIO hardware
* ddrio-mm.dll: Minimaid hardware - ddrio-mm.dll: Minimaid hardware
* [ddrio-smx.dll](ddrhook/ddrio-smx.md): StepManiaX platforms - [ddrio-smx.dll](ddrhook/ddrio-smx.md): StepManiaX platforms
* [ddrio-async](ddrhook/ddrio-async.md): Wrapper/shim library to drive another ddrio in - [ddrio-async](ddrhook/ddrio-async.md): Wrapper/shim library to drive another ddrio in a
a dedicated IO thread dedicated IO thread
* Beatmania IIDX - Beatmania IIDX
* iidxio.dll (default): Keyboard, joystick and mouse input - iidxio.dll (default): Keyboard, joystick and mouse input
* [iidxio-bio2.dll](iidxhook/iidxio-bio2.md): BIO2 driver - [iidxio-bio2.dll](iidxhook/iidxio-bio2.md): BIO2 driver
* [iidxio-ezusb.dll](iidxhook/iidxio-ezusb.md): Ezusb (C02 IO) driver - [iidxio-ezusb.dll](iidxhook/iidxio-ezusb.md): Ezusb (C02 IO) driver
* [iidxio-ezusb2.dll](iidxhook/iidxio-ezusb2.md): Ezusb FX2 (IO2) driver - [iidxio-ezusb2.dll](iidxhook/iidxio-ezusb2.md): Ezusb FX2 (IO2) driver
* jubeat - jubeat
* jbio.dll (default): Keyboard, joystick and mouse input - jbio.dll (default): Keyboard, joystick and mouse input
* pop'n music - pop'n music
* popnio.dll (default): Keyboard, joystick and mouse input - popnio.dll (default): Keyboard, joystick and mouse input
* SOUND VOLTEX - SOUND VOLTEX
* sdvxio.dll (default): Keyboard, joystick and mouse input - sdvxio.dll (default): Keyboard, joystick and mouse input
* [sdvxio-bio2.dll](sdvxhook/sdvxio-bio2.md): BIO2 driver - [sdvxio-bio2.dll](sdvxhook/sdvxio-bio2.md): BIO2 driver
* [sdvxio-kfca.dll](sdvxhook/sdvxio-kfca.md): KFCA IO board driver - [sdvxio-kfca.dll](sdvxhook/sdvxio-kfca.md): KFCA IO board driver
### Eamuse readers ### Eamuse readers
Eamuse hardware support is implemented separately: Eamuse hardware support is implemented separately:
* eamio.dll (default): Keyboard and joystick input - eamio.dll (default): Keyboard and joystick input
* eamio-icca.dll: Slotted/wave pass readers, required for old games with magnetic stripe cards - eamio-icca.dll: Slotted/wave pass readers, required for old games with magnetic stripe cards
#### ICCA readers for IIDX and port config in device manager #### ICCA readers for IIDX and port config in device manager
@ -57,22 +57,25 @@ bemanitools wants to operate them.
Use built-in ports on your mainboard if available but an external USB to serial port dongle also Use built-in ports on your mainboard if available but an external USB to serial port dongle also
works. works.
* Assign `COM1` to the COM port the card readers are connected to. - Assign `COM1` to the COM port the card readers are connected to.
* Ensure that the following settings for the COM port you are going to use are - Ensure that the following settings for the COM port you are going to use are set
set - BAUD rate 57600
* BAUD rate 57600 - Data bits 8
* Data bits 8 - Parity None
* Parity None - Stop bits 1
* Stop bits 1 - Flow control None.
* Flow control None.
## Development notes ## Development notes
A DEF file for geninput.dll is included. To convert the DEF into an import library suitable for use with Visual C++, run A DEF file for geninput.dll is included. To convert the DEF into an import library suitable for use
with Visual C++, run
``` ```
lib /machine:i386 /def:geninput.def lib /machine:i386 /def:geninput.def
``` ```
from the Visual C++ command line. If you're using mingw then use dlltool: from the Visual C++ command line. If you're using mingw then use dlltool:
``` ```
dlltool -d geninput.def -l geninput.a dlltool -d geninput.def -l geninput.a
``` ```

View File

@ -1,203 +1,239 @@
# Bemanitools architecture # Bemanitools architecture
This document gives you an overview of the architecture of Bemanitools (5). Why do we need this? This helps document the
various design decisions and how everything comes together, in the end. At some point when things are evolving and other
developers want to pick up the project, this might give them answers to why some things were done well or not so well.
This allows them to iterate on the current design (document) to analyze if a change they want to apply might work out
or not.
Anway, enough preface...I guess you got the idea. This document will be split into several sections which address This document gives you an overview of the architecture of Bemanitools (5). Why do we need this?
different aspects of the architecture. This helps document the various design decisions and how everything comes together, in the end. At
some point when things are evolving and other developers want to pick up the project, this might
give them answers to why some things were done well or not so well. This allows them to iterate on
the current design (document) to analyze if a change they want to apply might work out or not.
Anway, enough preface...I guess you got the idea. This document will be split into several sections
which address different aspects of the architecture.
## The big picture ## The big picture
TODO create a graphic that presents the key modules and ideas. TODO create a graphic that presents the key modules and ideas.
## Detouring library functions, IAT hooking ## Detouring library functions, IAT hooking
One of Bemanitools's goals is to avoid patching of executables, libraries or any game data and instead rely on
intercepting calls to libraries to patch bugs or introduce new features. To support a game on a non native platform
transparently, e.g. your home desktop, this allows us to intercept I/O communication to emulate hardware or
files/filesystem features the game expects to be available.
We create a so called "hook library/hook.dll" which gets injected to the target process (the game) before the game One of Bemanitools's goals is to avoid patching of executables, libraries or any game data and
runs any of its application code. This is well known by the terms of dll injection and will not be further discussed instead rely on intercepting calls to libraries to patch bugs or introduce new features. To support
here (google it). The injected dll will replace the function addresses in the IATs to detour any calls to our own a game on a non native platform transparently, e.g. your home desktop, this allows us to intercept
handler functions before, eventually, calling the real function. This way, we can intercept the call and do cool things. I/O communication to emulate hardware or files/filesystem features the game expects to be available.
We create a so called "hook library/hook.dll" which gets injected to the target process (the game)
before the game runs any of its application code. This is well known by the terms of dll injection
and will not be further discussed here (google it). The injected dll will replace the function
addresses in the IATs to detour any calls to our own handler functions before, eventually, calling
the real function. This way, we can intercept the call and do cool things.
These features are covered by the modules in the following subfolders in src/main: These features are covered by the modules in the following subfolders in src/main:
* hook: Essentially, this is capnhook: https://github.com/decafcode/capnhook. General tools for hooking Win32 API calls.
* hooklib: Some additional helper modules to take care of specific issues in Bemanitools, e.g. rs232 related stuff for - hook: Essentially, this is capnhook: https://github.com/decafcode/capnhook. General tools for
ACIO. hooking Win32 API calls.
- hooklib: Some additional helper modules to take care of specific issues in Bemanitools, e.g. rs232
related stuff for ACIO.
Check the modules for details. Check the modules for details.
## Hooking and IRP ## Hooking and IRP
IRP stands for "I/O request packet" and is a kernel mode structure used in Windows drivers for communication with the
OS. The data structure describes an I/O request with parameters for that request avoiding function calls with large
number of arguments to a driver.
We make use of that "IRP pattern" by creating a flexible and maintainable abstraction layer for the following hooking IRP stands for "I/O request packet" and is a kernel mode structure used in Windows drivers for
modules: communication with the OS. The data structure describes an I/O request with parameters for that
* iohook: Hook I/O (e.g. file) related calls request avoiding function calls with large number of arguments to a driver.
* d3d9: Hook d3d9 graphics API calls
An IRP handler is implemented to handle selected IRP calls based on the specified operation type. IRP handlers can be We make use of that "IRP pattern" by creating a flexible and maintainable abstraction layer for the
chained which allows splitting up different features/interceptors to different functions and modules allowing you to following hooking modules:
create a clear structure. At the end of the forwarding chain, you the real API function that maps to the abstracted
operation is called. However, a handler can decide at any time to not forward calls which allows you to implement - iohook: Hook I/O (e.g. file) related calls
emulation of access to selected files or I/O devices. - d3d9: Hook d3d9 graphics API calls
An IRP handler is implemented to handle selected IRP calls based on the specified operation type.
IRP handlers can be chained which allows splitting up different features/interceptors to different
functions and modules allowing you to create a clear structure. At the end of the forwarding chain,
you the real API function that maps to the abstracted operation is called. However, a handler can
decide at any time to not forward calls which allows you to implement emulation of access to
selected files or I/O devices.
Modules that make use of this: Modules that make use of this:
* iidxhook-util/d3d9
* ezusb-emu/device - iidxhook-util/d3d9
* ezusb2-emu/device - ezusb-emu/device
* acioemu/emu - ezusb2-emu/device
- acioemu/emu
## Bemanitools's hook libraries, let's glue everything together ## Bemanitools's hook libraries, let's glue everything together
Bemanitools dlls to be injected into target game processes are refered to as "hook dlls" and come in different flavours
targetting different games and often different versions of the same game (series), for example:
* ddrhook: Hook dll for Dance Dance Revolution games
* iidxhook1-8: Hook dlls for Beatmania IIDX, we are currently at 8 different implementations due to the various
iterations the game went through, related to software and hardware.
* sdvxhook: Hook dll for SoundVoltex series
The following sub-sections will give you some brief insights on each hook implementation and what modules were used. Bemanitools dlls to be injected into target game processes are refered to as "hook dlls" and come in
different flavours targetting different games and often different versions of the same game
(series), for example:
- ddrhook: Hook dll for Dance Dance Revolution games
- iidxhook1-8: Hook dlls for Beatmania IIDX, we are currently at 8 different implementations due to
the various iterations the game went through, related to software and hardware.
- sdvxhook: Hook dll for SoundVoltex series
The following sub-sections will give you some brief insights on each hook implementation and what
modules were used.
### bsthook ### bsthook
TODO TODO
### ddrhook ### ddrhook
TODO TODO
### iidxhook ### iidxhook
IIDX went through so many hard- and software iterations, it's actually amazing that the development team(s) refactored
and improved parts of the game and hardware with each iteration. However, when facing emulation and supporting
compatibility to legacy OS platforms, it can't get any worse. On the bright side, IIDX helped shaping Bemanitools a lot
and created a solid foundation other games can build on.
Because of that, we have 8 iidxhook implementations supporting sometimes different software features/fixes and IIDX went through so many hard- and software iterations, it's actually amazing that the development
hardware. The following sub-sub-sections list the most relevant aspects and modules to point out common and different team(s) refactored and improved parts of the game and hardware with each iteration. However, when
higher level features. facing emulation and supporting compatibility to legacy OS platforms, it can't get any worse. On the
bright side, IIDX helped shaping Bemanitools a lot and created a solid foundation other games can
build on.
Essentially, the main module file of each iidxhook implementation just glues the APIs of the modules it requires Because of that, we have 8 iidxhook implementations supporting sometimes different software
together. An additional configuration layer allows users to tweak some of the features. features/fixes and hardware. The following sub-sub-sections list the most relevant aspects and
modules to point out common and different higher level features.
TODO go into some more detail about some differences in the hook modules, e.g. 18 to 19 look identical Essentially, the main module file of each iidxhook implementation just glues the APIs of the modules
-> but different AVS versions it requires together. An additional configuration layer allows users to tweak some of the features.
TODO go into some more detail about some differences in the hook modules, e.g. 18 to 19 look
identical -> but different AVS versions
#### iidxhook1 (9-12) #### iidxhook1 (9-12)
* Ezusb C02 I/O emulation
* Setupapi emulation - Ezusb C02 I/O emulation
* Full security emulation with SRAM and round plugs - Setupapi emulation
* Full serial emulation for magstripe card readers - Full security emulation with SRAM and round plugs
* Full game essential I/O emulation - Full serial emulation for magstripe card readers
* d3d8 patching and extended features (superseded by d3d9 hook module + d3d8to9 wrapper) - Full game essential I/O emulation
* clock patching - d3d8 patching and extended features (superseded by d3d9 hook module + d3d8to9 wrapper)
* Font patching for Japanese chars - clock patching
* Network related patches to enable eamuse to custom servers - Font patching for Japanese chars
* Filesystem patches to detour E and F backup drives for settings - Network related patches to enable eamuse to custom servers
- Filesystem patches to detour E and F backup drives for settings
#### iidxhook2 (13) #### iidxhook2 (13)
* Ezusb C02 I/O emulation
* Setupapi emulation - Ezusb C02 I/O emulation
* Full security emulation with SRAM and round plugs - Setupapi emulation
* Full game essential I/O emulation - Full security emulation with SRAM and round plugs
* ACIO ICCA card reader emulation, slotted readers - Full game essential I/O emulation
* d3d8 patching and extended features (superseded by d3d9 hook module + d3d8to9 wrapper) - ACIO ICCA card reader emulation, slotted readers
* clock patching - d3d8 patching and extended features (superseded by d3d9 hook module + d3d8to9 wrapper)
* Font patching for Japanese chars - clock patching
* Network related patches to enable eamuse to custom servers - Font patching for Japanese chars
* Filesystem patches to detour E and F backup drives for settings - Network related patches to enable eamuse to custom servers
- Filesystem patches to detour E and F backup drives for settings
#### iidxhook3 (14-17) #### iidxhook3 (14-17)
* Ezusb IO2 I/O emulation
* Setupapi emulation - Ezusb IO2 I/O emulation
* Full security emulation with SRAM and round plugs - Setupapi emulation
* Full game essential I/O emulation - Full security emulation with SRAM and round plugs
* ACIO ICCA card reader emulation, slotted readers - Full game essential I/O emulation
* d3d9 patching and extended features - ACIO ICCA card reader emulation, slotted readers
* Font patching for Japanese chars - d3d9 patching and extended features
* Network related patches to enable eamuse to custom servers - Font patching for Japanese chars
* Filesystem patches to detour E and F backup drives for settings - Network related patches to enable eamuse to custom servers
- Filesystem patches to detour E and F backup drives for settings
#### iidxhook4 (18) #### iidxhook4 (18)
* Ezusb IO2 I/O emulation
* Setupapi emulation - Ezusb IO2 I/O emulation
* Full game essential I/O emulation - Setupapi emulation
* ACIO ICCA card reader emulation, slotted readers - Full game essential I/O emulation
* d3d9 patching and extended features - ACIO ICCA card reader emulation, slotted readers
* Font patching for Japanese chars - d3d9 patching and extended features
* Filesystem patches to detour E and F backup drives for settings - Font patching for Japanese chars
- Filesystem patches to detour E and F backup drives for settings
#### iidxhook4-cn (18 CN) #### iidxhook4-cn (18 CN)
* Ezusb IO2 I/O emulation
* Setupapi emulation - Ezusb IO2 I/O emulation
* Full security emulation with SRAM and round plugs - Setupapi emulation
* Full game essential I/O emulation - Full security emulation with SRAM and round plugs
* d3d9 patching and extended features - Full game essential I/O emulation
* Font patching for Japanese chars - d3d9 patching and extended features
* Filesystem patches to detour E and F backup drives for settings - Font patching for Japanese chars
- Filesystem patches to detour E and F backup drives for settings
#### iidxhook5 (19) #### iidxhook5 (19)
* Ezusb IO2 I/O emulation
* Setupapi emulation - Ezusb IO2 I/O emulation
* Full game essential I/O emulation - Setupapi emulation
* ACIO ICCA card reader emulation, wave pass readers - Full game essential I/O emulation
* d3d9 patching and extended features - ACIO ICCA card reader emulation, wave pass readers
* Font patching for Japanese chars - d3d9 patching and extended features
* Filesystem patches to detour E and F backup drives for settings - Font patching for Japanese chars
- Filesystem patches to detour E and F backup drives for settings
#### iidxhook5-cn (20 CN) #### iidxhook5-cn (20 CN)
* Ezusb IO2 I/O emulation
* Setupapi emulation - Ezusb IO2 I/O emulation
* Full security emulation with SRAM and round plugs - Setupapi emulation
* Full game essential I/O emulation - Full security emulation with SRAM and round plugs
* d3d9 patching and extended features - Full game essential I/O emulation
* Font patching for Japanese chars - d3d9 patching and extended features
* Filesystem patches to detour E and F backup drives for settings - Font patching for Japanese chars
- Filesystem patches to detour E and F backup drives for settings
#### iidxhook6 (20) #### iidxhook6 (20)
* Ezusb IO2 I/O emulation
* Setupapi emulation - Ezusb IO2 I/O emulation
* Full game essential I/O emulation - Setupapi emulation
* ACIO ICCA card reader emulation, wave pass readers - Full game essential I/O emulation
* d3d9 patching and extended features - ACIO ICCA card reader emulation, wave pass readers
* Font patching for Japanese chars - d3d9 patching and extended features
- Font patching for Japanese chars
#### iidxhook7 (21-24) #### iidxhook7 (21-24)
* Ezusb IO2 I/O emulation
* Setupapi emulation - Ezusb IO2 I/O emulation
* Full game essential I/O emulation - Setupapi emulation
* ACIO ICCA card reader emulation, wave pass readers - Full game essential I/O emulation
* d3d9 patching and extended features - ACIO ICCA card reader emulation, wave pass readers
* Font patching for Japanese chars - d3d9 patching and extended features
- Font patching for Japanese chars
#### iidxhook8 (25-26) #### iidxhook8 (25-26)
* ACIO BIO2 I/O emulation
* Setupapi emulation - ACIO BIO2 I/O emulation
* Full game essential I/O emulation - Setupapi emulation
* ACIO ICCA card reader emulation, wave pass readers - Full game essential I/O emulation
* d3d9 patching and extended features - ACIO ICCA card reader emulation, wave pass readers
* Font patching for Japanese chars - d3d9 patching and extended features
- Font patching for Japanese chars
### jbhook ### jbhook
TODO TODO
### popnhook ### popnhook
TODO TODO
### sdvxhook ### sdvxhook
TODO TODO
## The ezusb (emulation) stack ## The ezusb (emulation) stack
TODO TODO
## The ACIO (emulation) stack ## The ACIO (emulation) stack
TODO TODO
## BT5 API ## BT5 API
TODO TODO
## AVS and launcher ## AVS and launcher
TODO TODO
## Inject ## Inject
TODO TODO

View File

@ -1,55 +1,49 @@
# ddrhook # ddrhook
ddrhook is a collection of hook libraries for "Dance Dance Revoluion" providing ddrhook is a collection of hook libraries for "Dance Dance Revoluion" providing emulation and
emulation and various patches to run these games on non BemaniPC hardware and various patches to run these games on non BemaniPC hardware and newer Windows versions.
newer Windows versions.
The hook libraries must be bootstrapped either using [inject](../inject.md) or The hook libraries must be bootstrapped either using [inject](../inject.md) or
[launcher](../launcher.md) depending on the version you want to run. Further [launcher](../launcher.md) depending on the version you want to run. Further instructions are given
instructions are given in dedicated readme files for each ddrhook version in dedicated readme files for each ddrhook version (see below).
(see below).
## Versions ## Versions
ddrhook comes in a few different flavors. The game and its engine changed over ddrhook comes in a few different flavors. The game and its engine changed over the years. Some game
the years. Some game versions might require patches/parameters enabled which versions might require patches/parameters enabled which others don't need or have different AVS
others don't need or have different AVS versions. Here is the list of supported versions. Here is the list of supported games:
games:
* [ddrhook1](ddrhook1.md): X, X2 (US/EU regions) - [ddrhook1](ddrhook1.md): X, X2 (US/EU regions)
* [ddrhook2](ddrhook2.md): X2 (JP region), X3 vs. 2ndMIX, 2013, 2014, A - [ddrhook2](ddrhook2.md): X2 (JP region), X3 vs. 2ndMIX, 2013, 2014, A
When building bemanitools, independent packages are created for each set of games When building bemanitools, independent packages are created for each set of games which are ready to
which are ready to be dropped on top of vanilla AC data dumps. We recommend be dropped on top of vanilla AC data dumps. We recommend using pristine dumps to avoid any conflicts
using pristine dumps to avoid any conflicts with other hardcoded hacks or with other hardcoded hacks or binary patches.
binary patches.
## How to run ## How to run
To run your game with ddrhook, you have to use the inject tool to inject the To run your game with ddrhook, you have to use the inject tool to inject the DLL to the game
DLL to the game process. `dist/ddr` contains bat scripts with all the process. `dist/ddr` contains bat scripts with all the important parameters configured. Further
important parameters configured. Further parameters can be added but might not parameters can be added but might not be required to run the game with default settings. Further
be required to run the game with default settings. information on how to setup the data for each specific version are elaborated in their dedicated
Further information on how to setup the data for each specific version are readme files.
elaborated in their dedicated readme files.
## Command line options ## Command line options
Add the argument *-h* when running inject with ddrhook to print help/usage Add the argument *-h* when running inject with ddrhook to print help/usage information with a list
information with a list of parameters you can apply to tweak various things. of parameters you can apply to tweak various things.
## ddrio API ## ddrio API
Available implementations that can be swapped out depending on which kind of Available implementations that can be swapped out depending on which kind of IO hardware you want to
IO hardware you want to use: use:
* `ddrio`: Default implementation supporting keyboard, mouse and USB - `ddrio`: Default implementation supporting keyboard, mouse and USB game controllers
game controllers - ddrio-mm: Support Minimaid custom interface
* ddrio-mm: Support Minimaid custom interface - [ddrio-smx](ddrio-smx.md): Support for StepManiaX dance platforms
* [ddrio-smx](ddrio-smx.md): Support for StepManiaX dance platforms - [ddrio-p3io](ddrio-p3io.md): P3IO + EXTIO driver implementation
* [ddrio-p3io](ddrio-p3io.md): P3IO + EXTIO driver implementation - [ddrio-async](ddrio-async.md): Wrapper/shim library to drive another ddrio in a dedicated IO
* [ddrio-async](ddrio-async.md): Wrapper/shim library to drive another ddrio in thread
a dedicated IO thread
## Unicorntail ## Unicorntail

View File

@ -4,8 +4,8 @@
The following games are supported with this hook library: The following games are supported with this hook library:
* Dance Dance Revolution X - Dance Dance Revolution X
* Dance Dance Revolution X2 (US/EU regions) - Dance Dance Revolution X2 (US/EU regions)
The games must be bootstrapped using [inject](../inject.md). The games must be bootstrapped using [inject](../inject.md).
@ -13,90 +13,84 @@ The games must be bootstrapped using [inject](../inject.md).
Ensure your folder with your unpacked data looks like this: Ensure your folder with your unpacked data looks like this:
* `conf` - `conf`
* `data` - `data`
* `ddr` - `ddr`
* `ddr_YYYYMMDDRR` where `YYYYMMDDRR` corresponds to different datecodes of - `ddr_YYYYMMDDRR` where `YYYYMMDDRR` corresponds to different datecodes of different versions.
different versions. Multiple folders of these possible Multiple folders of these possible
`DDR.exe` files should be in `ddr` and `ddr_YYYYMMDDRR` folders. `DDR.exe` files should be in `ddr` and `ddr_YYYYMMDDRR` folders.
Unpack the distribution package `ddr-11.zip` into one of the folders containing Unpack the distribution package `ddr-11.zip` into one of the folders containing a `DDR.exe` file. We
a `DDR.exe` file. We recommend using the one with the latest datecode which recommend using the one with the latest datecode which denotes the latest version of the game
denotes the latest version of the game including bugfixes etc. including bugfixes etc.
`gamestart-11.bat` as well as `ddrhook1.dll` are now expected to be located `gamestart-11.bat` as well as `ddrhook1.dll` are now expected to be located in the same folder as
in the same folder as (one) `DDR.exe` file. (one) `DDR.exe` file.
## Running ## Running
Run `gamestart-11.bat` as administrator. For the US version of the game, run Run `gamestart-11.bat` as administrator. For the US version of the game, run `gamestart-11-us.bat`
`gamestart-11-us.bat` instead. This can be done by either by double instead. This can be done by either by double clicking or running it from `cmd.exe`. The latter is
clicking or running it from `cmd.exe`. The latter is recommended to have recommended to have any debug output kept on screen after closing the game.
any debug output kept on screen after closing the game.
This will run [inject](../inject.md) with the `ddrhook1.dll`. On first run, This will run [inject](../inject.md) with the `ddrhook1.dll`. On first run, if you don't have a
if you don't have a conguration file, e.g. `ddr-11.conf`, available in the conguration file, e.g. `ddr-11.conf`, available in the same folder, a default one will be created
same folder, a default one will be created and the game exits. Simply re-run and the game exits. Simply re-run `gamestart-11.bat` again.
`gamestart-11.bat` again.
## Configuration ddrhook ## Configuration ddrhook
The hook library can be configured via cmd arguments or a configuration file. The hook library can be configured via cmd arguments or a configuration file. The latter is
The latter is generated (*ddr-11.conf* in the same directory) on the first generated (*ddr-11.conf* in the same directory) on the first start of the game using the
start of the game using the gamestart-XX.bat file. It contains default values gamestart-XX.bat file. It contains default values for all available parameters and comments
for all available parameters and comments explaining each parameter. Please explaining each parameter. Please follow the comments when configuring your setup.
follow the comments when configuring your setup.
Add the argument *-h* when running gamestart-XX.bat Add the argument *-h* when running gamestart-XX.bat (e.g. *gamestart-XX.bat -h*) to print help/usage
(e.g. *gamestart-XX.bat -h*) to print help/usage information with a list of information with a list of all available parameters. Every parameter can be either set as command
all available parameters. Every parameter can be either set as command line line argument or using a configuration file.
argument or using a configuration file.
To set a parameter from the command line, just add it as an argument after To set a parameter from the command line, just add it as an argument after the bat file like this
the bat file like this
``` ```
gamestart-11.bat -p gfx.windowed=true gamestart-11.bat -p gfx.windowed=true
``` ```
The syntax for the "key=value" is the same as in the config file. Make sure The syntax for the "key=value" is the same as in the config file. Make sure to have a pre-ceeding
to have a pre-ceeding "-p" for every parameter added. "-p" for every parameter added.
However, if a parameter is specifed in the configuration file and as a command However, if a parameter is specifed in the configuration file and as a command line argument, the
line argument, the command line argument overrides the config file's value. command line argument overrides the config file's value.
## Configure USB memory cards and edit data ## Configure USB memory cards and edit data
You can setup actual USB thumb drives mapped to a drive letter, e.g. `E:\` for You can setup actual USB thumb drives mapped to a drive letter, e.g. `E:\` for player 1 and `F:\`
player 1 and `F:\` for player 2, or just have them point to any local directory, for player 2, or just have them point to any local directory, e.g. `usbmem_p1` and `usbmem_p2`.
e.g. `usbmem_p1` and `usbmem_p2`.
Set-up your folder mappings in the Set-up your folder mappings in the [conf file or via command line args](#configuration-ddrhook) like
[conf file or via command line args](#configuration-ddrhook) like follows: follows:
* Enable USB memory data emulation: `ddrhook1.usbmem_enabled=true` - Enable USB memory data emulation: `ddrhook1.usbmem_enabled=true`
* Set P1 USB memory data path pointing to local folder `usbmem_p1` next to `DDR.EXE`: - Set P1 USB memory data path pointing to local folder `usbmem_p1` next to `DDR.EXE`:
`ddrhook1.usbmem_path_p1=usbmem_p1` `ddrhook1.usbmem_path_p1=usbmem_p1`
* Set P1 USB memory data path pointing to local folder `usbmem_p2` next to `DDR.EXE`: - Set P1 USB memory data path pointing to local folder `usbmem_p2` next to `DDR.EXE`:
`ddrhook1.usbmem_path_p1=usbmem_p2` `ddrhook1.usbmem_path_p1=usbmem_p2`
* Have/create a subfolder called `DDR_EDIT` on any location/USB drive you want to use - Have/create a subfolder called `DDR_EDIT` on any location/USB drive you want to use
* Name your edit data file either `DDR_EDIT_J.DAT` (for JP version) or `DDR_EDIT_U.DAT` - Name your edit data file either `DDR_EDIT_J.DAT` (for JP version) or `DDR_EDIT_U.DAT` (for US
(for US version) and place it in the `DDR_EDIT` directory. version) and place it in the `DDR_EDIT` directory.
For the example setup above, the full relative path of the edit file should be For the example setup above, the full relative path of the edit file should be
`usbmem_p1\DDR_EDIT\DDR_EDIT_J.DAT` for player 1. `usbmem_p1\DDR_EDIT\DDR_EDIT_J.DAT` for player 1.
Note that USB memory cards are not detected by the game and the game stays Note that USB memory cards are not detected by the game and the game stays silent about that if they
silent about that if they do not contain edit data, your path mapping does not resolve do not contain edit data, your path mapping does not resolve or you misplaced or named your edit
or you misplaced or named your edit data file incorrectly. data file incorrectly.
## Grey and glitchy arrows ## Grey and glitchy arrows
This is a known issue with many GPUs, typically non-Radeon GPUs. This is a known issue with many GPUs, typically non-Radeon GPUs.
There is currently not patch available in Bemanitools for that. We assume this is an There is currently not patch available in Bemanitools for that. We assume this is an issue with
issue with incompatible shader code. incompatible shader code.
There are solutions to hard-patch the code available elsewhere. There are solutions to hard-patch the code available elsewhere.
@ -106,34 +100,32 @@ There are solutions to hard-patch the code available elsewhere.
The game expects you have the `CLVSD.ax` file registered for decoding videos. The game expects you have the `CLVSD.ax` file registered for decoding videos.
Grab the `CLVSD.ax` file and go to *Start* > *Run* > enter `regsvr32 clvsd.ax` and Grab the `CLVSD.ax` file and go to *Start* > *Run* > enter `regsvr32 clvsd.ax` and execute. Make
execute. Make sure to run as Administrator, otherwise you will get errors due to sure to run as Administrator, otherwise you will get errors due to invalid permissions.
invalid permissions.
### Game crashes during boot ### Game crashes during boot
If you have played a newer version of DDR, e.g. DDR 2014+, you might have the If you have played a newer version of DDR, e.g. DDR 2014+, you might have the `k-clvsd.dll` codec
`k-clvsd.dll` codec registered which crashes DDR X and likely X2 (EU/US) as well. registered which crashes DDR X and likely X2 (EU/US) as well.
Unregister `k-clvsd.dll`, e.g. `regsvr32 /u k-clvsd.dll`, and Unregister `k-clvsd.dll`, e.g. `regsvr32 /u k-clvsd.dll`, and
[registering `CLVSD.ax`](#issues-with-background-videos-not-working). [registering `CLVSD.ax`](#issues-with-background-videos-not-working).
Note that `CLVSD.ax` will likely hang any newer/more recent DDR versions on startup Note that `CLVSD.ax` will likely hang any newer/more recent DDR versions on startup and require you
and require you to use the `k-clvsd.dll` that came with the respective version to use the `k-clvsd.dll` that came with the respective version instead. See
instead. See [this section](ddrhook2.md#video-codecs-for-background-videos) for [this section](ddrhook2.md#video-codecs-for-background-videos) for further details.
further details.
### Black screen/render window without a response ### Black screen/render window without a response
This symptom might have many causes, here is a list of known issues and what can be done: This symptom might have many causes, here is a list of known issues and what can be done:
* If not done already, try installing - If not done already, try installing
[DirectX Redist (June 2010)](https://www.microsoft.com/en-us/download/details.aspx?id=8109) [DirectX Redist (June 2010)](https://www.microsoft.com/en-us/download/details.aspx?id=8109)
* If you have an integrated/second GPU, ensure it is disabled - If you have an integrated/second GPU, ensure it is disabled
* External (USB) audio devices could cause issues. Ensure you are running on on-board/integrated - External (USB) audio devices could cause issues. Ensure you are running on on-board/integrated
sound cards and unplug any external audio devices. sound cards and unplug any external audio devices.
* [Disable fullscreen optimizations](https://devblogs.microsoft.com/directx/demystifying-full-screen-optimizations/): - [Disable fullscreen optimizations](https://devblogs.microsoft.com/directx/demystifying-full-screen-optimizations/):
Right click on `DDR.exe`, *Properties* > *Compatibility* > *Disable fullscreen optimizations* Right click on `DDR.exe`, *Properties* > *Compatibility* > *Disable fullscreen optimizations*
* Check if you can run `DDR.exe` without Bemanitools by simply launching it. It should at least - Check if you can run `DDR.exe` without Bemanitools by simply launching it. It should at least boot
boot into a startup screen. If that isn't even possible, then it's likely not an issue with into a startup screen. If that isn't even possible, then it's likely not an issue with
Bemanitools. Note that your data path needs to be `D:\HDX` for that to work though. Bemanitools. Note that your data path needs to be `D:\HDX` for that to work though.

View File

@ -4,25 +4,24 @@
The following games are supported by this hook library: The following games are supported by this hook library:
* Dance Dance Revolution X2 (JP region) - Dance Dance Revolution X2 (JP region)
* Dance Dance Revolution X3 vs. 2ndMIX - Dance Dance Revolution X3 vs. 2ndMIX
* Dance Dance Revolution 2013 - Dance Dance Revolution 2013
* Dance Dance Revolution 2014 - Dance Dance Revolution 2014
* Dance Dance Revolution A - Dance Dance Revolution A
Note that different builds of the same hook library are required to run the Note that different builds of the same hook library are required to run the different versions. See
different versions. See different distribution packages, e.g. `ddr-12.zip`, different distribution packages, e.g. `ddr-12.zip`, `ddr-13.zip` etc.
`ddr-13.zip` etc.
Depending on the game version, earlier versions are bootstrapped using Depending on the game version, earlier versions are bootstrapped using [inject](../inject.md) while
[inject](../inject.md) while later versions require [launcher](../launcher.md). later versions require [launcher](../launcher.md).
## Setup A20+ ## Setup A20+
### Data and folder structure ### Data and folder structure
The following assumes you are using vanilla and unpacked/decrypted data. Copy/unpack the data The following assumes you are using vanilla and unpacked/decrypted data. Copy/unpack the data to a
to a destination of your choice. Expect to have the following root folder structure: destination of your choice. Expect to have the following root folder structure:
``` ```
arkdata arkdata
@ -33,10 +32,10 @@ modules
prop prop
``` ```
* Copy the contents of `modules` to the root folder that the dll-files are next to the folders - Copy the contents of `modules` to the root folder that the dll-files are next to the folders
`arkdata`, `com`, etc. `arkdata`, `com`, etc.
* Unpack the contents of `ddr-14-to-16.zip` to the root folder. `luncher.exe` should be located - Unpack the contents of `ddr-14-to-16.zip` to the root folder. `luncher.exe` should be located next
next to `arkdata`, `com` and all the dll-files to `arkdata`, `com` and all the dll-files
#### Configuring eamuse settings #### Configuring eamuse settings
@ -86,65 +85,62 @@ URL, further settings like ssl etc.
## Running ## Running
Run `gamestart-XX.bat`, where `XX` corresponds to the version of the game you Run `gamestart-XX.bat`, where `XX` corresponds to the version of the game you want to run, as
want to run, as administrator. For the US version of X2, run administrator. For the US version of X2, run `gamestart-12-us.bat` instead. This can be done by
`gamestart-12-us.bat` instead. This can be done by either by double either by double clicking or running it from `cmd.exe`. The latter is recommended to have any debug
clicking or running it from `cmd.exe`. The latter is recommended to have output kept on screen after closing the game.
any debug output kept on screen after closing the game.
This will run [inject](../inject.md) or [launcher](../launcher.md), depending This will run [inject](../inject.md) or [launcher](../launcher.md), depending on the version of the
on the version of the game, with the `ddrhook2.dll`. On first run, if you don't game, with the `ddrhook2.dll`. On first run, if you don't have a conguration file, e.g.
have a conguration file, e.g. `ddr-12.conf`, available in the same folder, a `ddr-12.conf`, available in the same folder, a default one will be created and the game exits.
default one will be created and the game exits. Simply re-run `gamestart-XX.bat` Simply re-run `gamestart-XX.bat` again.
again.
## Configure USB memory cards and edit data (DDR X2) ## Configure USB memory cards and edit data (DDR X2)
You can setup actual USB thumb drives mapped to a drive letter, e.g. `E:\` for You can setup actual USB thumb drives mapped to a drive letter, e.g. `E:\` for player 1 and `F:\`
player 1 and `F:\` for player 2, or just have them point to any local directory, for player 2, or just have them point to any local directory, e.g. `usbmem_p1` and `usbmem_p2`.
e.g. `usbmem_p1` and `usbmem_p2`.
Set-up your folder mappings in the Set-up your folder mappings in the [conf file or via command line args](#configuration-ddrhook) like
[conf file or via command line args](#configuration-ddrhook) like follows: follows:
* Enable USB memory data emulation: `ddrhook1.usbmem_enabled=true` - Enable USB memory data emulation: `ddrhook1.usbmem_enabled=true`
* Set P1 USB memory data path pointing to local folder `usbmem_p1` next to `DDR.EXE`: - Set P1 USB memory data path pointing to local folder `usbmem_p1` next to `DDR.EXE`:
`ddrhook1.usbmem_path_p1=usbmem_p1` `ddrhook1.usbmem_path_p1=usbmem_p1`
* Set P1 USB memory data path pointing to local folder `usbmem_p2` next to `DDR.EXE`: - Set P1 USB memory data path pointing to local folder `usbmem_p2` next to `DDR.EXE`:
`ddrhook1.usbmem_path_p1=usbmem_p2` `ddrhook1.usbmem_path_p1=usbmem_p2`
* Have/create a subfolder called `DDR_EDIT` on any location/USB drive you want to use - Have/create a subfolder called `DDR_EDIT` on any location/USB drive you want to use
* Name your edit data file either `DDR_EDIT_J.DAT` (for JP version) or `DDR_EDIT_US.DAT` - Name your edit data file either `DDR_EDIT_J.DAT` (for JP version) or `DDR_EDIT_US.DAT` (for US
(for US version) and place it in the `DDR_EDIT` directory. version) and place it in the `DDR_EDIT` directory.
For the example setup above, the full relative path of the edit file should be For the example setup above, the full relative path of the edit file should be
`usbmem_p1\DDR_EDIT\DDR_EDIT_J.DAT` for player 1. `usbmem_p1\DDR_EDIT\DDR_EDIT_J.DAT` for player 1.
Note that USB memory cards are not detected by the game and the game stays Note that USB memory cards are not detected by the game and the game stays silent about that if they
silent about that if they do not contain edit data, your path mapping does not resolve do not contain edit data, your path mapping does not resolve or you misplaced or named your edit
or you misplaced or named your edit data file incorrectly. data file incorrectly.
## Troubleshooting and FAQ ## Troubleshooting and FAQ
### Video codecs for background videos ### Video codecs for background videos
For DDR 2014 and newer (maybe also earlier?), you need to register `k-clvsd.dll` and For DDR 2014 and newer (maybe also earlier?), you need to register `k-clvsd.dll` and
`xactengine2_10.dll` to make background videos work. These files are included with `xactengine2_10.dll` to make background videos work. These files are included with respective
respective versions of the games. versions of the games.
Run the following commands either from a command line (`cmd.exe`) or from Run the following commands either from a command line (`cmd.exe`) or from *Start* > *Run*. Adjust
*Start* > *Run*. Adjust the path to files accordingly pointing to the correct files. the path to files accordingly pointing to the correct files.
* Register `regsvr32 D:\MDX\contents\k-clvsd.dll` - Register `regsvr32 D:\MDX\contents\k-clvsd.dll`
* Register `regsvr32 D:\MDX\contents\xactengine2_10.dll` - Register `regsvr32 D:\MDX\contents\xactengine2_10.dll`
The `gamestart-XX.bat` scripts should already take care of this by executing the listed commands The `gamestart-XX.bat` scripts should already take care of this by executing the listed commands
when launched. when launched.
Note: The one that comes with IIDX will hang DDR at startup. The opposite is not true: Note: The one that comes with IIDX will hang DDR at startup. The opposite is not true: IIDX works
IIDX works just fine with this CLVSD. just fine with this CLVSD.
### Laggy audio ### Laggy audio
If you're running on Windows XP, go to the sound devices control panel, select your If you're running on Windows XP, go to the sound devices control panel, select your sound card,
sound card, click Advanced Options and turn Hardware Acceleration down to basic. This click Advanced Options and turn Hardware Acceleration down to basic. This will make the audio much
will make the audio much less laggy.. less laggy..

View File

@ -1,29 +1,26 @@
# Asynchronous proxy wrapper for other ddrio implementations # Asynchronous proxy wrapper for other ddrio implementations
This implementation of the Bemanitools API is not implementing support for any This implementation of the Bemanitools API is not implementing support for any specific IO hardware.
specific IO hardware. It is a proxy/shim library that loads another ddrio It is a proxy/shim library that loads another ddrio library, e.g. ddrio-p3io, and drives the entire
library, e.g. ddrio-p3io, and drives the entire backend in a dedicated IO backend in a dedicated IO thread. By implementing this behind the ddrio API, it is fully transparent
thread. By implementing this behind the ddrio API, it is fully transparent to to any existing application using it.
any existing application using it.
The main benefit is the improved IO polling performance depending on how The main benefit is the improved IO polling performance depending on how expensive the synchronous
expensive the synchronous calls of the actual hardware are. For example, calls of the actual hardware are. For example, *ddrio-p3io* has very expensive write calls with ~12
*ddrio-p3io* has very expensive write calls with ~12 ms duration while read ms duration while read calls take ~4 ms. Therefore, a full update cycle is already about as costly
calls take ~4 ms. Therefore, a full update cycle is already about as costly
as rendering an entire frame (at 60 fps). as rendering an entire frame (at 60 fps).
## Setup ## Setup
For hook libraries, i.e. ddrhookX, but likely applicable to 3rd party For hook libraries, i.e. ddrhookX, but likely applicable to 3rd party applications (consolidate
applications (consolidate their manuals). their manuals).
* Have `ddrio-async.dll` in the same folder as your `ddrhookX.dll` - Have `ddrio-async.dll` in the same folder as your `ddrhookX.dll`
* Rename `ddrio-async.dll` to `ddrio.dll` - Rename `ddrio-async.dll` to `ddrio.dll`
* Pick another ddrio library as the backend of your choice, e.g. `ddrio-p3io.dl` - Pick another ddrio library as the backend of your choice, e.g. `ddrio-p3io.dl` and put it next to
and put it next to the async `ddrio.dll` the async `ddrio.dll`
* Rename it to `ddrio-async-child.dll`, ddrio-async is looking for that filename - Rename it to `ddrio-async-child.dll`, ddrio-async is looking for that filename in the same folder
in the same folder - Ensure that your `gamestart.bat` actually injects the appropriate `ddrhook.dll`, for example:
* Ensure that your `gamestart.bat` actually injects the appropriate `ddrhook.dll`, for example:
```bat ```bat
inject ddrhook1.dll ddr.exe ...* inject ddrhook1.dll ddr.exe ...*

View File

@ -1,27 +1,29 @@
# ddrio API implementation with DDR P3IO (Dragon) and EXTIO # ddrio API implementation with DDR P3IO (Dragon) and EXTIO
This implementation of BT5's ddrio API allows you to use the native DDR P3IO This implementation of BT5's ddrio API allows you to use the native DDR P3IO of a "Dragon PCB" plus
of a "Dragon PCB" plus the EXTIO with anything the ddrio API supports. the EXTIO with anything the ddrio API supports.
This is not required to run the actual games supporting the hardware natively. This is not required to run the actual games supporting the hardware natively. However, there are
However, there are various 3rd party applications using the ddrio API where you various 3rd party applications using the ddrio API where you might benefit from using actual SD
might benefit from using actual SD cabinet hardware, e.g. cabinet hardware, e.g. [vigem-ddrio](../vigem/README.md).
[vigem-ddrio](../vigem/README.md).
## Setup ## Setup
For hooks, but likely applicable to 3rd party applications (consolidate their For hooks, but likely applicable to 3rd party applications (consolidate their manuals).
manuals).
- Driver: You must have the P3IO driver intalled on your system
- Driver from
[bemanitools-supplements](https://github.com/djhackersdev/bemanitools-supplement/blob/master/ddr/p3io/README.md)
- Have `ddrio-p3io.dll` in the same folder as your `ddrhookX.dll`
- Rename `ddrio-p3io.dll` to `ddrio.dll`
- Ensure that your `gamestart.bat` actually injects the appropriate ddrhook dll, for example:
* Driver: You must have the P3IO driver intalled on your system
* Driver from [bemanitools-supplements](https://github.com/djhackersdev/bemanitools-supplement/blob/master/ddr/p3io/README.md)
* Have `ddrio-p3io.dll` in the same folder as your `ddrhookX.dll`
* Rename `ddrio-p3io.dll` to `ddrio.dll`
* Ensure that your `gamestart.bat` actually injects the appropriate ddrhook dll, for example:
```bat ```bat
inject ddrhook1.dll ddr.exe ...* inject ddrhook1.dll ddr.exe ...*
``` ```
or or
```bat ```bat
launcher -K ddrhook2.dll arkmdxp3.dll ...* launcher -K ddrhook2.dll arkmdxp3.dll ...*
``` ```

View File

@ -1,14 +1,30 @@
# Using SMX pads with BemaniTools (DDR Ace and higher) # Using SMX pads with BemaniTools (DDR Ace and higher)
If you are looking to use StepManiaX pads with DDR, these are supported **natively** for Gen 1 through Gen 5.(And theoretically beyond!) Steps and info below
If you are looking to use StepManiaX pads with DDR, these are supported **natively** for Gen 1
through Gen 5.(And theoretically beyond!) Steps and info below
## Step-by-Step ## Step-by-Step
1. Ensure that you have the latest `SMX.dll` copied to your contents folder. The easiest way to get this is to download and install the latest SMX Config program on [StepManiaX.com](https://data.stepmaniax.com/docs/SMXConfigInstaller-2020-04-03-01.exe). `SMX.dll`'s default install location is `C:\Program Files (x86)\SMXConfig`
2. After bemanitools has been copied to your contents folder, rename the regular `ddrio.dll` to something like `ddrio-orig.dll`. 1. Ensure that you have the latest `SMX.dll` copied to your contents folder. The easiest way to get
3. Rename `ddrio-smx.dll` to `ddrio.dll`. this is to download and install the latest SMX Config program on
4. Use the config tool to set up the usual stuff.(cards, network, etc.) Be sure to map menu, test, service, and start buttons to your keyboard or other controllers. You **cannot** map SMX panels as joystick inputs. [StepManiaX.com](https://data.stepmaniax.com/docs/SMXConfigInstaller-2020-04-03-01.exe).
5. Start the game. If everything works properly, the game will boot and your panels will light up when stepped on during gameplay and song selection. `SMX.dll`'s default install location is `C:\Program Files (x86)\SMXConfig`
1. After bemanitools has been copied to your contents folder, rename the regular `ddrio.dll` to
something like `ddrio-orig.dll`.
1. Rename `ddrio-smx.dll` to `ddrio.dll`.
1. Use the config tool to set up the usual stuff.(cards, network, etc.) Be sure to map menu, test,
service, and start buttons to your keyboard or other controllers. You **cannot** map SMX panels
as joystick inputs.
1. Start the game. If everything works properly, the game will boot and your panels will light up
when stepped on during gameplay and song selection.
## Important Things ## Important Things
* Pad panel inputs (UDLR on P1 and P2) are mapped automatically. If you've purchased a single pad from StepManiaX, this jumper is installed and will set your pad to P2 by default. If you want to change to P1, you'll need to open up your pads and remove this jumper in the [MCU box](https://data.stepmaniax.com/docs/Stage%20-%20Gen%205%20Manual%20Rev1.pdf).
* Panel colors set in the SMX config tool are not used. Colors are set internally by Bemanitools. - Pad panel inputs (UDLR on P1 and P2) are mapped automatically. If you've purchased a single pad
* If you get a warning about setlights2 when starting the game, your `SMX.dll` is likely out of date. Make sure you've downloaded the latest version of the StepManiaX config tool from stepmaniax.com and have copied the `SMX.dll` to your contents folder. from StepManiaX, this jumper is installed and will set your pad to P2 by default. If you want to
change to P1, you'll need to open up your pads and remove this jumper in the
[MCU box](https://data.stepmaniax.com/docs/Stage%20-%20Gen%205%20Manual%20Rev1.pdf).
- Panel colors set in the SMX config tool are not used. Colors are set internally by Bemanitools.
- If you get a warning about setlights2 when starting the game, your `SMX.dll` is likely out of
date. Make sure you've downloaded the latest version of the StepManiaX config tool from
stepmaniax.com and have copied the `SMX.dll` to your contents folder.

View File

@ -19,9 +19,9 @@ is used to communicate with the card readers. Note that these are actual serial
directly by the P3IO microcontroller, these are NOT just passed through to the motherboard like the directly by the P3IO microcontroller, these are NOT just passed through to the motherboard like the
proprietary COM1 and COM2 connectors. proprietary COM1 and COM2 connectors.
Unicorn Tail intercepts serial port IO commands being sent to the P3IO and redirects them to a Unicorn Tail intercepts serial port IO commands being sent to the P3IO and redirects them to a COM4
COM4 in Windows instead, where two readers can be connected via the motherboard's RS232 port or in Windows instead, where two readers can be connected via the motherboard's RS232 port or a usb
a usb RS232 adapter. RS232 adapter.
## Drivers ## Drivers
@ -33,11 +33,10 @@ HDD or grabbed from
Using Device Manager in Windows, ensure the following COM ports are connected and setup. Using Device Manager in Windows, ensure the following COM ports are connected and setup.
COM1: EXTIO COM1: EXTIO COM4: Two readers
COM4: Two readers
Windows is often poor about saving the COM port number, so ewf commit (if applicable) and Windows is often poor about saving the COM port number, so ewf commit (if applicable) and reboot
reboot after saving this setting to ensure it sticks. after saving this setting to ensure it sticks.
## Setup and run ## Setup and run
@ -48,8 +47,8 @@ e.g.:
launcher.exe -H 33554432 -K unicorntail.dll arkmdxp3.dll %* launcher.exe -H 33554432 -K unicorntail.dll arkmdxp3.dll %*
``` ```
If you want to use any ddrhook library in addition, you have to have the hooks in the right order If you want to use any ddrhook library in addition, you have to have the hooks in the right order to
to make everything work correctly, e.g.: make everything work correctly, e.g.:
```shell ```shell
launcher.exe -H 33554432 -K unicorntail.dll -K ddrhook2.dll arkmdxp3.dll %* launcher.exe -H 33554432 -K unicorntail.dll -K ddrhook2.dll arkmdxp3.dll %*

View File

@ -1,3 +1,4 @@
# Development documentation and notes # Development documentation and notes
This folder contains various lose documentation snippets created by the developers. These can be This folder contains various lose documentation snippets created by the developers. These can be
helpful as future reference. helpful as future reference.

View File

@ -6,21 +6,20 @@
Separate boxed unit containing with one card reader slot and pin key pad Separate boxed unit containing with one card reader slot and pin key pad
- BeatmaniaIIDX DistorteD to Lincle: grey slotted readers hanging below the - BeatmaniaIIDX DistorteD to Lincle: grey slotted readers hanging below the side speakers next to
side speakers next to the monitor the monitor
- DDR SN 1/2: slotted readers red/black supernova cover mounted to the side of - DDR SN 1/2: slotted readers red/black supernova cover mounted to the side of the cabinet next to
the cabinet next to the monitor (left and right) the monitor (left and right)
# ICCB # ICCB
Single card reader slot (no separate pin pad) built into the cabinet. Single card reader slot (no separate pin pad) built into the cabinet. Pin entry using game controls.
Pin entry using game controls.
- (First gen) Jubeat cabinets before replaced with wave pass readers - (First gen) Jubeat cabinets before replaced with wave pass readers
# ICCC # ICCC
Single card reader wave pass unit without separate pin pad. Pin entry using Single card reader wave pass unit without separate pin pad. Pin entry using game controls. Still
game controls. Still supported by newer versions. supported by newer versions.
- (Second gen) Jubeat cabinets with wave pass readers - (Second gen) Jubeat cabinets with wave pass readers

View File

@ -2,75 +2,116 @@ Copy/pasted from chat with tau (2018/02/10):
alright then. so for modern iidx. alright then. so for modern iidx.
we want to do logging inside iidxhook and we also want to pass AVS-style log functions to iidxio which in turn passes them on to geninput in order for those to do logging too we want to do logging inside iidxhook and we also want to pass AVS-style log functions to iidxio
which in turn passes them on to geninput in order for those to do logging too
so iidxhook connects to the AVS log API: log_body_misc and friends, which I assume are invoked using a log_misc() macro in Konami's source code that adds some sort of module tag. so iidxhook connects to the AVS log API: log_body_misc and friends, which I assume are invoked using
a log_misc() macro in Konami's source code that adds some sort of module tag.
anyway yeah this we already know. anyway yeah this we already know.
libutil has four function ptrs: log_impl_misc and co. These are static variables which are statically initialized to some no-op functions. Except log_impl_fatal, whose implementation just calls libc abort() libutil has four function ptrs: log_impl_misc and co. These are static variables which are
statically initialized to some no-op functions. Except log_impl_fatal, whose implementation just
calls libc abort()
at startup you call log_to_external(), supplying four function ptrs to wire these up to. As the name suggests, this causes Bemanitools libutil to talk to something that is compatible with the AVS log sink API. at startup you call log_to_external(), supplying four function ptrs to wire these up to. As the name
suggests, this causes Bemanitools libutil to talk to something that is compatible with the AVS log
sink API.
alternatively you can log_to_writer(), which initializes Bemanitools to use its own, internal logging system, and you give it a log writer function that takes strings and writes them somewhere. alternatively you can log_to_writer(), which initializes Bemanitools to use its own, internal
logging system, and you give it a log writer function that takes strings and writes them somewhere.
So you have log sinks and you have log writers. The path is [application code] -> [log sink] -> [logging engine] -> [log writer] So you have log sinks and you have log writers. The path is \[application code\] -> \[log sink\] ->
19:29 \[logging engine\] -> \[log writer\] 19:29
inside config.exe (or generally outside of modern AVS games) this path looks like [bemanitools application code] -> [log sinks passed across dlls] -> [bemanitools logging engine] -> [bemanitools log writer] inside config.exe (or generally outside of modern AVS games) this path looks like \[bemanitools
application code\] -> \[log sinks passed across dlls\] -> \[bemanitools logging engine\] ->
\[bemanitools log writer\]
inside modern AVS game the path looks like [bt hook dll / bt iodev dll] -> [avs log_body_whatever log sinks] -> [avs logging engine] -> [launcher.exe log writer] inside modern AVS game the path looks like \[bt hook dll / bt iodev dll\] -> \[avs log_body_whatever
log sinks\] -> \[avs logging engine\] -> \[launcher.exe log writer\]
note that I tried to keep the log writer API consistent with the AVS log writer API but then Konami went and broke it repeatedly so now Bemanitools has its own stable log writer API. Launcher tracks the AVS log writer API, which breaks constantly, so that's not the same thing. note that I tried to keep the log writer API consistent with the AVS log writer API but then Konami
went and broke it repeatedly so now Bemanitools has its own stable log writer API. Launcher tracks
the AVS log writer API, which breaks constantly, so that's not the same thing.
anyway that's the background story. Now for the details about IIDX in particular. anyway that's the background story. Now for the details about IIDX in particular.
up until about iidx19 we did things the obvious way: iidxhook would log_to_external() to hook into the AVS log sinks and then call those directly and all was well. Then one fine day I was given a IIDX19 data dump and tried running iidxhook and it crashed with a stack overflow. hmm. up until about iidx19 we did things the obvious way: iidxhook would log_to_external() to hook into
the AVS log sinks and then call those directly and all was well. Then one fine day I was given a
IIDX19 data dump and tried running iidxhook and it crashed with a stack overflow. hmm.
the problem boils down to this: iidx19 AVS added those log timestamps. And for for whatever reason the AVS logging engine needs to access some mutexes and condition variables to make this work properly the problem boils down to this: iidx19 AVS added those log timestamps. And for for whatever reason
the AVS logging engine needs to access some mutexes and condition variables to make this work
properly
but AVS of course in grand Konami tradition has its own threading and concurrency primitive API which wraps the Win32 API. tbf this is kind of understandable in some sense, because win32 actually did not have condition variables until Windows Vista! in 2006! seriously, I'm not kidding. but AVS of course in grand Konami tradition has its own threading and concurrency primitive API
which wraps the Win32 API. tbf this is kind of understandable in some sense, because win32 actually
did not have condition variables until Windows Vista! in 2006! seriously, I'm not kidding.
there's all sorts of articles out there describing in fine detail how to use Win32's event objects to implement your own condition variables and the multitudinous pitfalls that this entails there's all sorts of articles out there describing in fine detail how to use Win32's event objects
to implement your own condition variables and the multitudinous pitfalls that this entails
but anyway one fun thing about the AVS concurrency API is that you can't actually use concurrency primitives unless you're calling that API from a thread launched using the AVS threading API but anyway one fun thing about the AVS concurrency API is that you can't actually use concurrency
primitives unless you're calling that API from a thread launched using the AVS threading API
and that's a problem in the case of iidxhook, because iidx is old as balls relatively speaking and its EZUSB driver code has I think two worker threads, which it launches using the MS libc's _beginthreadex() function and that's a problem in the case of iidxhook, because iidx is old as balls relatively speaking and
its EZUSB driver code has I think two worker threads, which it launches using the MS libc's
\_beginthreadex() function
this in turn is a wrapper around the win32 CreateThread function, but it also boots up stdio on whatever new thread gets launched and basically is responsible for guaranteeing that the libc will operate correctly on the newly launched thread this in turn is a wrapper around the win32 CreateThread function, but it also boots up stdio on
whatever new thread gets launched and basically is responsible for guaranteeing that the libc will
operate correctly on the newly launched thread
so yeah when you do windows programming, never call CreateThread, always call _beginthreadex. otherwise stuff will break. maybe. so yeah when you do windows programming, never call CreateThread, always call \_beginthreadex.
otherwise stuff will break. maybe.
point is, IIDX predates modern AVS so it just uses Windows threading directly. So, IIDX worker thread starts up, iidxhook does its thing, writes a log message, calls into AVS logging, which in turn grabs an AVS mutex, the implementation of which says "omg this isn't an AVS thread aaaaaa" and ... attempts to call back into the logging system to log this fact. whereupon a stack overflow condition proceeds in a predictable manner. point is, IIDX predates modern AVS so it just uses Windows threading directly. So, IIDX worker
thread starts up, iidxhook does its thing, writes a log message, calls into AVS logging, which in
turn grabs an AVS mutex, the implementation of which says "omg this isn't an AVS thread aaaaaa" and
... attempts to call back into the logging system to log this fact. whereupon a stack overflow
condition proceeds in a predictable manner.
so, there are a few ways to deal with this problem. bemanitools 4 dealt with it in a fairly stupid way. so, there are a few ways to deal with this problem. bemanitools 4 dealt with it in a fairly stupid
way.
and very elaborate way too and very elaborate way too
bt4 intercepted IIDX's calls to create Windows threads and then redirected those calls to go via the AVS threading API bt4 intercepted IIDX's calls to create Windows threads and then redirected those calls to go via the
AVS threading API
so now the worker threads are AVS threads and logging works as expected so now the worker threads are AVS threads and logging works as expected
which is all well and good but the problem is that these threads are quite timing critical. it probably worked fine, but i didn't want to risk affecting those threads in a weird way and introducing latency and jitter. i wanted to keep the threading pristine and not mess with it just for the sake of diagnostic messages which is all well and good but the problem is that these threads are quite timing critical. it
probably worked fine, but i didn't want to risk affecting those threads in a weird way and
introducing latency and jitter. i wanted to keep the threading pristine and not mess with it just
for the sake of diagnostic messages
so bemanitools 5 uses the log server approach so bemanitools 5 uses the log server approach
at an appropriate time, it creates its own AVS thread, the logging server. Since it is an AVS thread, it can call the AVS logging API at an appropriate time, it creates its own AVS thread, the logging server. Since it is an AVS
thread, it can call the AVS logging API
and then we have log_post_misc() and friends, implemented in log-server.c and then we have log_post_misc() and friends, implemented in log-server.c
we initialize the Bemanitools logging system to log "externally" to those funcs and we also propagate those to iidxio.dll and eamio.dll which in turn pass them to geninput.dll we initialize the Bemanitools logging system to log "externally" to those funcs and we also
propagate those to iidxio.dll and eamio.dll which in turn pass them to geninput.dll
so what do log_post_misc and friends do so what do log_post_misc and friends do
they lock a "mailbox" using the win32 concurrency primitives and write the log severity and a pointer to the string to be logged into the mailbox, then signal the log server thread, again using win32 concurrency primitives they lock a "mailbox" using the win32 concurrency primitives and write the log severity and a
pointer to the string to be logged into the mailbox, then signal the log server thread, again using
win32 concurrency primitives
then they do a synchronous wait for an acknowledgement from the logging server: since we're holding a string pointer, we cannot return until that string pointer has been consumed or it may be concurrently invalidated then they do a synchronous wait for an acknowledgement from the logging server: since we're holding
a string pointer, we cannot return until that string pointer has been consumed or it may be
concurrently invalidated
so the log server wakes up, locks the mailbox, calls AVS log_body_misc() to write the log message, then once that returns it asserts a signal in the mailbox (again, win32 event object because lol what are condition variables) and releases the lock. so the log server wakes up, locks the mailbox, calls AVS log_body_misc() to write the log message,
then once that returns it asserts a signal in the mailbox (again, win32 event object because lol
what are condition variables) and releases the lock.
the caller gets the signal, wakes up, and returns to whatever Bemanitools code is running on the IIDX IO worker thread that wanted to write a log message. the caller gets the signal, wakes up, and returns to whatever Bemanitools code is running on the
IIDX IO worker thread that wanted to write a log message.
end of essay. end of essay.

View File

@ -1,68 +1,86 @@
# Follow-up (14th August 2019) # Follow-up (14th August 2019)
After publishing this post-mortem, I got messaged by a user on sows who was able to shed some more light on this issue.
The user was experiencing the same symptoms on a Win7 setup: blue screen once the firmware was flashed to the C02 IO. After publishing this post-mortem, I got messaged by a user on sows who was able to shed some more
This user's solutions was to use the USB2 ports on the PC instead of the USB3 ones. This is good to know and kinda light on this issue. The user was experiencing the same symptoms on a Win7 setup: blue screen once
aligns with the weird things happening in the driver (see below). the firmware was flashed to the C02 IO. This user's solutions was to use the USB2 ports on the PC
instead of the USB3 ones. This is good to know and kinda aligns with the weird things happening in
the driver (see below).
# Post-mortem: C02 IO kernel module crash on Windows 7 (29th July 2019) by icex2 # Post-mortem: C02 IO kernel module crash on Windows 7 (29th July 2019) by icex2
## Background ## Background
The original ezusbsys.sys kernel module, which is required to run the C02 IO, was compiled for Windows XP 32-bit, only.
There is a newer driver by Cypress, cyusb3.sys, which could be used to IO2 boards on newer Windows platforms, but does The original ezusbsys.sys kernel module, which is required to run the C02 IO, was compiled for
not work with the C02 IO in combination with Konami's propriatery firmware. Thus, it was not possible to run the C02 IO Windows XP 32-bit, only. There is a newer driver by Cypress, cyusb3.sys, which could be used to IO2
on anything than Windows XP 32-bit. But, with newer IIDX games running on Windows 7 64-bit, the C02 IO wasn't usable boards on newer Windows platforms, but does not work with the C02 IO in combination with Konami's
anymore. Leaving aside, that the newer games actually require a BIO2 board and do not support C02 nor IO2 boards propriatery firmware. Thus, it was not possible to run the C02 IO on anything than Windows XP
anymore. 32-bit. But, with newer IIDX games running on Windows 7 64-bit, the C02 IO wasn't usable anymore.
Leaving aside, that the newer games actually require a BIO2 board and do not support C02 nor IO2
boards anymore.
## The goal ## The goal
I still wanted to use my cabinet with a C02 board on newer games which is possible with BT5 adding an emulation layer
and an interface (iidxio). This IO interface can be used to implement a driver that talks to a real IO again. Thus,
implementing a ezusb iidxio driver library, we can run newer games with an C02 IO as well.
However, there was no ezusbsys.sys driver that works on newer platforms required to run the newer games. But, Cypress I still wanted to use my cabinet with a C02 board on newer games which is possible with BT5 adding
was nice and included the source code of the ezusbsys kernel module. With a few tweaks and a very recent version of an emulation layer and an interface (iidxio). This IO interface can be used to implement a driver
visual studio, it was quite easy to build this driver for newer platforms, including Windows 7, 8 and 10 in both that talks to a real IO again. Thus, implementing a ezusb iidxio driver library, we can run newer
32-bit and 64-bit variants. games with an C02 IO as well.
However, there was no ezusbsys.sys driver that works on newer platforms required to run the newer
games. But, Cypress was nice and included the source code of the ezusbsys kernel module. With a few
tweaks and a very recent version of visual studio, it was quite easy to build this driver for newer
platforms, including Windows 7, 8 and 10 in both 32-bit and 64-bit variants.
## The problem ## The problem
But, when using this driver on certain combinations of newer hardware (max. 1-2 years old) and Windows 7, the kernel
module might crash after the Konami C02 firmware got flashed to the ezusb board. The result was a bluescreen and reboot.
However, the hardware was fine and the kernel module worked fine on another piece of hardware, the stock PC that was But, when using this driver on certain combinations of newer hardware (max. 1-2 years old) and
used with iidx 20 to 24. However, this hardware is not powerful enough to run iidx 25 and newer without stuttering Windows 7, the kernel module might crash after the Konami C02 firmware got flashed to the ezusb
issues. board. The result was a bluescreen and reboot.
However, the hardware was fine and the kernel module worked fine on another piece of hardware, the
stock PC that was used with iidx 20 to 24. However, this hardware is not powerful enough to run iidx
25 and newer without stuttering issues.
## The analysis/debugging ## The analysis/debugging
Note: The full source code can be found in the bemanitools-supplement package. Note: The full source code can be found in the bemanitools-supplement package.
Setup: Setup:
* Native hardware with Windows 7 that was crashing
* Vmware with Windows 10 and Visual Studio 2019 to compile the kernel module. Target platform Windows 7 64-bit
* Booting Windows 7 in test mode to allow unsigned kernel modules to run and with debug output turned on
* dbgview on Windows 7 machine to get local kernel dbg output
Because I wanted to stick to Windows 7 in the beginning (refer to the solution section), I started debugging the kernel - Native hardware with Windows 7 that was crashing
module by enabling the debug message output that was already available in the code. However, since kernel debug message - Vmware with Windows 10 and Visual Studio 2019 to compile the kernel module. Target platform
printing can be very delayed, the kernel could not print various messages before the kernel crashed. Windows 7 64-bit
- Booting Windows 7 in test mode to allow unsigned kernel modules to run and with debug output
turned on
- dbgview on Windows 7 machine to get local kernel dbg output
Thus, I started stripping the kernel module step by step to narrow down the possible spots causing the crash. After a Because I wanted to stick to Windows 7 in the beginning (refer to the solution section), I started
few hours, I got the (first) issue tracked down: debugging the kernel module by enabling the debug message output that was already available in the
code. However, since kernel debug message printing can be very delayed, the kernel could not print
various messages before the kernel crashed.
After the firmware was flashed, the device had to re-enumerate. When this happens, the function *Ezusb_PnPAddDevice* Thus, I started stripping the kernel module step by step to narrow down the possible spots causing
is called to create a new instance of the device. Since this kernel module is acting as a filter driver, it has to the crash. After a few hours, I got the (first) issue tracked down:
trap this call, and add a filter device before the real device in the device stack. Thus, each call to the ezusb device
hits the filter device first and the filter device calls the real device after doing some magic.
*Ezusb_PnPAddDevice* calls *Ezusb_CreateDeviceObject*. Afterwards, it checks the status of the call to After the firmware was flashed, the device had to re-enumerate. When this happens, the function
*Ezusb_CreateDeviceObject* and if successful, it tries attaching the device to the device stack. However, instead of *Ezusb_PnPAddDevice* is called to create a new instance of the device. Since this kernel module is
using *IoAttachDeviceToDeviceStackSafe* it uses the unsafe variant *IoAttachDeviceToDeviceStack* which can lead to a acting as a filter driver, it has to trap this call, and add a filter device before the real device
race condition on newer Windows Systems. Furthermore, all initialization of further variables of the *deviceObject* in the device stack. Thus, each call to the ezusb device hits the filter device first and the filter
needs to happen BEFORE doing that. Again, this is a race condition. device calls the real device after doing some magic.
*Ezusb_PnPAddDevice* calls *Ezusb_CreateDeviceObject*. Afterwards, it checks the status of the call
to *Ezusb_CreateDeviceObject* and if successful, it tries attaching the device to the device stack.
However, instead of using *IoAttachDeviceToDeviceStackSafe* it uses the unsafe variant
*IoAttachDeviceToDeviceStack* which can lead to a race condition on newer Windows Systems.
Furthermore, all initialization of further variables of the *deviceObject* needs to happen BEFORE
doing that. Again, this is a race condition.
Next issue: Once the kernel calls *Ezusb_StartDevice* -> *Ezusb_ConfigureDevice* ->
*Ezusb_SelectInterfaces*, it tries to use *USBD_ParseConfigurationDescriptorEx* to get the interface
from the configuration descriptor. However, that fails for some unknown reason. I checked the data
structure and it is perfectly fine and everything is there. Thus, I wrote my own version
*Ezusb_GetInterfaceFromConfigurationDescriptor* which does all the magic required to get this part
fixed:
Next issue: Once the kernel calls *Ezusb_StartDevice* -> *Ezusb_ConfigureDevice* -> *Ezusb_SelectInterfaces*, it tries
to use *USBD_ParseConfigurationDescriptorEx* to get the interface from the configuration descriptor. However, that
fails for some unknown reason. I checked the data structure and it is perfectly fine and everything is there. Thus,
I wrote my own version *Ezusb_GetInterfaceFromConfigurationDescriptor* which does all the magic required to get this
part fixed:
``` ```
PUSB_INTERFACE_DESCRIPTOR Ezusb_GetInterfaceFromConfigurationDescriptor( PUSB_INTERFACE_DESCRIPTOR Ezusb_GetInterfaceFromConfigurationDescriptor(
IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor
@ -89,15 +107,17 @@ PUSB_INTERFACE_DESCRIPTOR Ezusb_GetInterfaceFromConfigurationDescriptor(
} }
``` ```
And next issue is just up ahead: Following the above, we have to call *Ezusb_USBD_CreateConfigurationRequestEx* to And next issue is just up ahead: Following the above, we have to call
create a USB configuration request to set the interface we want to use. This is executed with a *Ezusb_CallUSBD* call *Ezusb_USBD_CreateConfigurationRequestEx* to create a USB configuration request to set the interface
which sends request to the real hardware. However, this request always fails. The call *IoCallDriver* inside we want to use. This is executed with a *Ezusb_CallUSBD* call which sends request to the real
*Ezusb_CallUSBD* always returns an NTSTATUS code that is not documented anywhere (can't find the exact status code hardware. However, this request always fails. The call *IoCallDriver* inside *Ezusb_CallUSBD* always
anymore, but once you get it, try to find it in the header file). returns an NTSTATUS code that is not documented anywhere (can't find the exact status code anymore,
but once you get it, try to find it in the header file).
At this point, I had to give up. I already wasted too many hours and this is clearly a dead end. At this point, I had to give up. I already wasted too many hours and this is clearly a dead end.
## The solution ## The solution
Once I realized that I got stuck with Windows 7 and I didn't want to buy (more) new hardware, I gave Windows 10 a try.
Surprisingly, this solved all the issues and the kernel module runs fine. The C02 board is flashable without crashing Once I realized that I got stuck with Windows 7 and I didn't want to buy (more) new hardware, I gave
and works with newer IIDX games. Windows 10 a try. Surprisingly, this solved all the issues and the kernel module runs fine. The C02
board is flashable without crashing and works with newer IIDX games.

View File

@ -1,25 +1,31 @@
# Notes outlining some aspects of the DirectX calls which were required to know to implement a up-/downscaling feature # Notes outlining some aspects of the DirectX calls which were required to know to implement a up-/downscaling feature
As the title says, this outlines some aspects I needed to figure out in order to implement a up-/downscaling feature
within the d3d9 hook module that works on all currently available IIDX versions (9 to 26).
To analyze the rendering loops, I have used a tool called apitrace which traces the calls of many graphic APIs: As the title says, this outlines some aspects I needed to figure out in order to implement a
https://github.com/apitrace/apitrace up-/downscaling feature within the d3d9 hook module that works on all currently available IIDX
versions (9 to 26).
Defintely recommended to quickly figure out what is going on regarding rendering. It also allows you to let you render To analyze the rendering loops, I have used a tool called apitrace which traces the calls of many
parts of a scene after the application exited because it records all API calls and data passed to them. graphic APIs: https://github.com/apitrace/apitrace
Anyway, considering the various iterations in (GPU) hardware the game had to undergo combined with weird quirks and Defintely recommended to quickly figure out what is going on regarding rendering. It also allows you
"fixes" Bemanitools is undoing, I wouldn't have guessed that their rendering engine was nearly the same until IIDX 20. to let you render parts of a scene after the application exited because it records all API calls and
That's when they introduced SD/HD mode. data passed to them.
In this case, that's great news because I had to craft a solution that allows up-/downscaling the final frame to Anyway, considering the various iterations in (GPU) hardware the game had to undergo combined with
different resolutions (see the iidxhook-util/d3d9 module for more details about the feature). weird quirks and "fixes" Bemanitools is undoing, I wouldn't have guessed that their rendering engine
was nearly the same until IIDX 20. That's when they introduced SD/HD mode.
In this case, that's great news because I had to craft a solution that allows up-/downscaling the
final frame to different resolutions (see the iidxhook-util/d3d9 module for more details about the
feature).
But first, we need a breakdown of the render loop's most relevant parts for this: But first, we need a breakdown of the render loop's most relevant parts for this:
## IIDX pre 20 ## IIDX pre 20
Using apitrace, we can see the following outline of a frame (not counting the first one that does a lot of setup in
the beginning): Using apitrace, we can see the following outline of a frame (not counting the first one that does a
lot of setup in the beginning):
``` ```
BeginScene BeginScene
Clear Clear
@ -31,12 +37,14 @@ Present
No render target switching, simply render everything to the back buffer...plain and simple. No render target switching, simply render everything to the back buffer...plain and simple.
Note: The viewport size is determined by the size returned by GetClientRect, wtf. Note: The viewport size is determined by the size returned by GetClientRect, wtf. Welp, no official
Welp, no official Konmai seal of approval without that. ¯\_(ツ)_/¯ Konmai seal of approval without that. ¯\_(ツ)\_/¯
## IIDX 20+ ## IIDX 20+
Using apitrace, we can see the following outline of a frame (not counting the first one that does a lot of setup in
the beginning): Using apitrace, we can see the following outline of a frame (not counting the first one that does a
lot of setup in the beginning):
``` ```
BeginScene BeginScene
// tex1 is a render target texture with size 1280x720 (also in SD mode) // tex1 is a render target texture with size 1280x720 (also in SD mode)
@ -63,26 +71,30 @@ EndScene -> ErrInvalidCall return code
Present Present
``` ```
This is quite a different flow to implement HD and SD mode but the solution to solve that particular problem is straight This is quite a different flow to implement HD and SD mode but the solution to solve that particular
forward and easy to understand. This means that the game will always render in HD mode and only downscale the final problem is straight forward and easy to understand. This means that the game will always render in
frame to SD resolution for 640x480 output. HD mode and only downscale the final frame to SD resolution for 640x480 output.
Also, why the fuck do they call BeginScene and EndScene twice? Looks like they wanted to do this in two separate scenes Also, why the fuck do they call BeginScene and EndScene twice? Looks like they wanted to do this in
for some reason. Checking the return values would have revealed to them that something's not right...lucky them that two separate scenes for some reason. Checking the return values would have revealed to them that
this code works nevertheless. something's not right...lucky them that this code works nevertheless. Another Konmai seal of
Another Konmai seal of approval, a job well done. ¯\_(ツ)_/¯ approval, a job well done. ¯\_(ツ)\_/¯
## iidxhook's up-/downscaling solution ## iidxhook's up-/downscaling solution
The initial solution simply hooked into BeginScene and EndScene and let the game render to an intermediate render
target texture. The texture was scaled according to the actual target frame buffer size before getting presented. This
solution worked fine for pre IIDX 20 games but created a black screen on IIDX 20+.
In order to avoid two different scaling flows, the final solution that works for both does the following: The initial solution simply hooked into BeginScene and EndScene and let the game render to an
* Create a render target texture with native resolution and let the game render to it intermediate render target texture. The texture was scaled according to the actual target frame
* Set the render target to that intermediate render target texture on BeginScene buffer size before getting presented. This solution worked fine for pre IIDX 20 games but created a
* Before Present black screen on IIDX 20+.
* Scale the intermediate render target texture to the back buffer
* Set the back buffer as the render target In order to avoid two different scaling flows, the final solution that works for both does the
* Present frame following:
- Create a render target texture with native resolution and let the game render to it
- Set the render target to that intermediate render target texture on BeginScene
- Before Present
- Scale the intermediate render target texture to the back buffer
- Set the back buffer as the render target
- Present frame
Just an outline which follows the actual implementation that you can find in the iidxhook-util/d3d9. Just an outline which follows the actual implementation that you can find in the iidxhook-util/d3d9.

View File

@ -1,21 +1,25 @@
# ACIO BIO2 IIDX package dump # ACIO BIO2 IIDX package dump
Package dump excerpt of the init sequence of a original Konami IIDX BIO2 with sub IO connected.
This was used to identify a missing piece of information that needs to be communicated to the BIO2 Package dump excerpt of the init sequence of a original Konami IIDX BIO2 with sub IO connected. This
for IIDX to initialize the sub IO correctly. was used to identify a missing piece of information that needs to be communicated to the BIO2 for
IIDX to initialize the sub IO correctly.
The dump was cut off after two polls as the sequence just keeps on repeating from that point on. The dump was cut off after two polls as the sequence just keeps on repeating from that point on.
## Findings for problem to solve ## Findings for problem to solve
With the previous implemention of the BIO2 driver, which was created off references of SDVX KFCA,
a BIO2 used with IIDX and the sub IO (to upgrade older C02, IO2 cabinets) connected didn't With the previous implemention of the BIO2 driver, which was created off references of SDVX KFCA, a
initialize properly. This resulted in no inputs/outputs other than 14 keys working. BIO2 used with IIDX and the sub IO (to upgrade older C02, IO2 cabinets) connected didn't initialize
properly. This resulted in no inputs/outputs other than 14 keys working.
The problem identified was a different byte, exact meaning not known, that is sent in The problem identified was a different byte, exact meaning not known, that is sent in
[exchange 4](#exchange-4-ac-io-cmd-clear). Instead of `0x3B` from the SDVX KFCA based [exchange 4](#exchange-4-ac-io-cmd-clear). Instead of `0x3B` from the SDVX KFCA based
implementation, it needs to be set to `0x2D`. implementation, it needs to be set to `0x2D`.
## Exchange 1: AC_IO_CMD_ASSIGN_ADDRS ## Exchange 1: AC_IO_CMD_ASSIGN_ADDRS
### Write ### Write
```text ```text
AA 00 00 01 00 01 00 02 AA 00 00 01 00 01 00 02
@ -29,6 +33,7 @@ data: 00
``` ```
### Read ### Read
``` ```
AA AA 00 00 01 00 01 01 03 AA AA 00 00 01 00 01 01 03
@ -43,7 +48,9 @@ AA: SOF
``` ```
## Exchange 2: AC_IO_CMD_GET_VERSION ## Exchange 2: AC_IO_CMD_GET_VERSION
### Write ### Write
``` ```
AA 01 00 02 00 00 03 AA 01 00 02 00 00 03
@ -56,6 +63,7 @@ AA: SOF
``` ```
### Read ### Read
``` ```
AA AA 81 00 02 00 2C 0D 06 00 00 ... AA AA 81 00 02 00 2C 0D 06 00 00 ...
@ -70,7 +78,9 @@ XX: checksum
``` ```
## Exchange 3: AC_IO_CMD_START_UP ## Exchange 3: AC_IO_CMD_START_UP
### Write ### Write
``` ```
AA 01 00 03 00 00 04 AA 01 00 03 00 00 04
@ -83,6 +93,7 @@ AA: SOF
``` ```
### Read ### Read
``` ```
AA AA 81 00 03 00 01 00 85 AA AA 81 00 03 00 01 00 85
@ -97,7 +108,9 @@ AA: SOF
``` ```
## Exchange 4: AC_IO_CMD_CLEAR ## Exchange 4: AC_IO_CMD_CLEAR
### Write ### Write
``` ```
AA 01 01 00 00 01 2D 30 AA 01 01 00 00 01 2D 30
@ -111,6 +124,7 @@ AA: SOF
``` ```
### Read ### Read
``` ```
AA AA 81 01 00 00 01 00 83 AA AA 81 01 00 00 01 00 83
@ -125,7 +139,9 @@ AA: SOF
``` ```
## Exchange 5: BIO2_BI2A_CMD_WATCHDOG ## Exchange 5: BIO2_BI2A_CMD_WATCHDOG
### Write ### Write
``` ```
AA 01 01 20 00 02 00 00 24 AA 01 01 20 00 02 00 00 24
@ -139,6 +155,7 @@ AA: SOF
``` ```
### Read ### Read
``` ```
AA AA 81 01 20 00 01 00 A3 AA AA 81 01 20 00 01 00 A3
@ -153,7 +170,9 @@ A3: checksum
``` ```
## Exchange 6: BIO2_BI2A_CMD_POLL ## Exchange 6: BIO2_BI2A_CMD_POLL
### Write ### Write
``` ```
AA 01 01 52 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 84 AA 01 01 52 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 84
@ -167,6 +186,7 @@ AA: SOF
``` ```
### Read ### Read
``` ```
AA AA 81 01 52 00 2E 00 00 B0 00 F0 00 F0 F0 00 00 00 00 00 02 00 5F 11 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F3 AA AA 81 01 52 00 2E 00 00 B0 00 F0 00 F0 F0 00 00 00 00 00 02 00 5F 11 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F3
@ -181,12 +201,15 @@ F3: checksum
``` ```
## Exchange 7: BIO2_BI2A_CMD_POLL ## Exchange 7: BIO2_BI2A_CMD_POLL
### Write ### Write
``` ```
AA 01 01 52 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 84 AA 01 01 52 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 84
``` ```
### Read ### Read
``` ```
AA AA 81 01 52 00 2E 00 00 B0 00 F0 00 F0 F0 00 00 00 00 00 02 00 64 11 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F8 AA AA 81 01 52 00 2E 00 00 B0 00 F0 00 F0 F0 00 00 00 00 00 02 00 64 11 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F8
``` ```

View File

@ -1,30 +1,29 @@
# Beatmania IIDX 10th Style - D01 IO boot code and security init # Beatmania IIDX 10th Style - D01 IO boot code and security init
Date: 2023-04-03 Date: 2023-04-03 Author: icex2
Author: icex2
Documenting decompiled and reverse engineered code snippets from the D01 JAE `bm2dx.exe`. These Documenting decompiled and reverse engineered code snippets from the D01 JAE `bm2dx.exe`. These
helped me figuring out the two different security boot modes the game supports. helped me figuring out the two different security boot modes the game supports.
In summary, it supports booting with the C02 IO with a C02 black dongle and a D01 IO board with In summary, it supports booting with the C02 IO with a C02 black dongle and a D01 IO board with a
a D01 dongle. No other combination is valid because they didn't make sense back then. You either D01 dongle. No other combination is valid because they didn't make sense back then. You either had
had an upgraded old style/twinkle cabinet to C02 (GEC02) or you bought a new dedicated cabinet an upgraded old style/twinkle cabinet to C02 (GEC02) or you bought a new dedicated cabinet (GQD01).
(GQD01). With 10th style supporting the old C02 dongle, it appears that all owners of a C02 cabinet With 10th style supporting the old C02 dongle, it appears that all owners of a C02 cabinet with IO
with IO board and C02 dongle received a free software update/HDD. This might make sense considering board and C02 dongle received a free software update/HDD. This might make sense considering the
the short life span of C02 and the game being super buggy, especially in earlier/initial revisions. short life span of C02 and the game being super buggy, especially in earlier/initial revisions.
The game expects the following "configurations" from bemanitools: The game expects the following "configurations" from bemanitools:
* Booting as upgraded C02 with free D01 upgrade - Booting as upgraded C02 with free D01 upgrade
* `sec.boot_version=GEC02 ` - `sec.boot_version=GEC02 `
* `sec.boot_seeds=0:0:1` - `sec.boot_seeds=0:0:1`
* `sec.black_plug_mcode=GEC02JAA` - `sec.black_plug_mcode=GEC02JAA`
* "D01 IO pin" on IO board not active - "D01 IO pin" on IO board not active
* Booting as dedicated - Booting as dedicated
* `sec.boot_version=GEC02 ` - `sec.boot_version=GEC02 `
* `sec.boot_seeds=0:1:1` - `sec.boot_seeds=0:1:1`
* `sec.black_plug_mcode=GQD01JAA` - `sec.black_plug_mcode=GQD01JAA`
* "D01 IO pin" on IO board ACTIVE - "D01 IO pin" on IO board ACTIVE
All the above was derived from reading and understanding the documented code excerpts below. All the above was derived from reading and understanding the documented code excerpts below.

View File

@ -1,18 +1,17 @@
# IIDX 24 GFX upscaling notes # IIDX 24 GFX upscaling notes
Date: 2023-04-15 Date: 2023-04-15 Author: icex2
Author: icex2
Notes about my work on fixing the upscaling/downscaling feature of bemanitools for IIDX 20 to 26. Notes about my work on fixing the upscaling/downscaling feature of bemanitools for IIDX 20 to 26. I
I realized that the render backend changed significantly that the old method that worked fine realized that the render backend changed significantly that the old method that worked fine doesn't
doesn't work anymore. work anymore.
The tool used in the screenshots is [apitrace](https://github.com/apitrace/apitrace). The tool used in the screenshots is [apitrace](https://github.com/apitrace/apitrace).
## IIDX 24 ## IIDX 24
The GFX engine in IIDX from 20 to 26 has a changed render loop that includes built-in scaling to The GFX engine in IIDX from 20 to 26 has a changed render loop that includes built-in scaling to
implement the SD and HD/HD* screen settings that are selectable in the operator menu implement the SD and HD/HD\* screen settings that are selectable in the operator menu
### Frame 0 - GFX init part ### Frame 0 - GFX init part
@ -28,15 +27,15 @@ Start the scene and set the render target to the intermediate texture.
![](2023-04-13-iidx-24-gfx-upscaling/beginscene.png) ![](2023-04-13-iidx-24-gfx-upscaling/beginscene.png)
After done drawing the scene, the intermediate texture is blended to the framebuffer. With a target After done drawing the scene, the intermediate texture is blended to the framebuffer. With a target
2D plane having the size of the target resolution, the blending applies linear scaling to either 2D plane having the size of the target resolution, the blending applies linear scaling to either up-
up- or downscale the final image. or downscale the final image.
![](2023-04-13-iidx-24-gfx-upscaling/scaling.png) ![](2023-04-13-iidx-24-gfx-upscaling/scaling.png)
## IIDX 10 ## IIDX 10
A recap of the old stuff, see also [my previous notes](2019-10-07-iidx-gfx-rendering-loops.md), A recap of the old stuff, see also [my previous notes](2019-10-07-iidx-gfx-rendering-loops.md), as I
as I had to look at everything again to properly understand the differences. had to look at everything again to properly understand the differences.
### Frame 0 - GFX init part ### Frame 0 - GFX init part
@ -47,8 +46,8 @@ buffer.
### Frame 1 - A clean main render path ### Frame 1 - A clean main render path
Beginning the scene excerpt. The viewport needs to match the target resolution to display the Beginning the scene excerpt. The viewport needs to match the target resolution to display the final
final image correctly. image correctly.
![](2023-04-13-iidx-24-gfx-upscaling/beginscene10.png) ![](2023-04-13-iidx-24-gfx-upscaling/beginscene10.png)

View File

@ -1,7 +1,6 @@
# DDR p3io driver work, various notes # DDR p3io driver work, various notes
Date: 2023-05-28 Date: 2023-05-28 Author: icex2
Author: icex2
Notes about my work on writing a DDR P3io driver. Notes about my work on writing a DDR P3io driver.
@ -13,114 +12,116 @@ PCB breakout interfaces/connectors on the side of the boards.
Descriptions assume cabinet hardware of an upgraded DDR "black SD cabinet" Descriptions assume cabinet hardware of an upgraded DDR "black SD cabinet"
* `LINE OUT 1`: Primary audio out to amplifier - `LINE OUT 1`: Primary audio out to amplifier
* `LINE OUT 2`: N.C. - `LINE OUT 2`: N.C.
* `RGB`: Video out to monitor, supports 15khz/31khz based on hardware switch for video freq/mode selection - `RGB`: Video out to monitor, supports 15khz/31khz based on hardware switch for video freq/mode
* `COM1`: Virtual com port that connects to the EXTIO selection
* `COM2`: Virtual com port that connects to a pair of ICCA card readers - `COM1`: Virtual com port that connects to the EXTIO
* `LAN`: Network connection - `COM2`: Virtual com port that connects to a pair of ICCA card readers
* `PWR`: 100V power in - `LAN`: Network connection
* `ANALOG`: N.C. - `PWR`: 100V power in
* `PORT 1`: Lights output for cabinet lights, e.g. menu button lights, top header lights - `ANALOG`: N.C.
* `PORT 2`: N.C. - `PORT 1`: Lights output for cabinet lights, e.g. menu button lights, top header lights
* `DIPSW` - `PORT 2`: N.C.
* `1`: ??? - `DIPSW`
* `2`: On = force all sensor polling mode and allow running the game without an EXTIO - `1`: ???
* `3`: ??? - `2`: On = force all sensor polling mode and allow running the game without an EXTIO
* `4`: On = force 15 khz monitor output - `3`: ???
* `PLUG 1`: Black dongle - `4`: On = force 15 khz monitor output
* `PLUG 2`: White dongle - `PLUG 1`: Black dongle
- `PLUG 2`: White dongle
### P3IO GF/DM ### P3IO GF/DM
Descriptions assume usage of a P3IO from a GF/DM in a "chimera style PCB build" on an upgraded Descriptions assume usage of a P3IO from a GF/DM in a "chimera style PCB build" on an upgraded DDR
DDR "black SD cabinet" "black SD cabinet"
* `PWR`: 100V power in - `PWR`: 100V power in
* `12V-OUT`: +12V out for external devices - `12V-OUT`: +12V out for external devices
* `PORT 1`: Lights output for cabinet lights, e.g. menu button lights, top header lights - `PORT 1`: Lights output for cabinet lights, e.g. menu button lights, top header lights
* `PORT 2`: N.C. - `PORT 2`: N.C.
* `COM1`: To EXTIO - `COM1`: To EXTIO
* `COM2`: To card readers - `COM2`: To card readers
* `RGB`: Video out to monitor, supports 15khz/31khz based on hardware switch for video freq/mode selection - `RGB`: Video out to monitor, supports 15khz/31khz based on hardware switch for video freq/mode
* `LINE OUT 1`: Primary audio out to amplifier selection
* `LINE OUT 2`: N.C. - `LINE OUT 1`: Primary audio out to amplifier
* `DIPSW` - `LINE OUT 2`: N.C.
* `1`: - `DIPSW`
* `2`: - `1`:
* `3`: - `2`:
* `4`: On = force 15 khz monitor output - `3`:
* `PLUG 1`: Roundplug black dongle - `4`: On = force 15 khz monitor output
* `PLUG 2`: Roundplug white dongle - `PLUG 1`: Roundplug black dongle
- `PLUG 2`: Roundplug white dongle
### P3IO DDR(X) ### P3IO DDR(X)
Descriptions assume cabinet hardware of an upgraded DDR "black SD cabinet" Descriptions assume cabinet hardware of an upgraded DDR "black SD cabinet"
* `PWR`: 100V power in - `PWR`: 100V power in
* `USB`: USB memory card readers on cabinet - `USB`: USB memory card readers on cabinet
* `PORT 1`: Lights output for cabinet lights, e.g. menu button lights, top header lights - `PORT 1`: Lights output for cabinet lights, e.g. menu button lights, top header lights
* `COM3-4`: Virtual COM ports - `COM3-4`: Virtual COM ports
* COM3 (VCOM1): Pins 1,3,5 on connector -> To card readers - COM3 (VCOM1): Pins 1,3,5 on connector -> To card readers
* COM4 (VCOM0): Pins 2,4,6 on connector -> N.C. - COM4 (VCOM0): Pins 2,4,6 on connector -> N.C.
* `PLUG`: Breakout to security round plugs (black and white dongles) - `PLUG`: Breakout to security round plugs (black and white dongles)
* `COM1`: To EXTIO - `COM1`: To EXTIO
* Pinout (pins left to right) - Pinout (pins left to right)
* 1: TXD1 - 1: TXD1
* 2: RXD1 - 2: RXD1
* 3: N.C. - 3: N.C.
* 4: N.C. - 4: N.C.
* 5: GND - 5: GND
* `COM2`: N/A (light spires on black HD cabinet) - `COM2`: N/A (light spires on black HD cabinet)
* Pinout (pins left to right) - Pinout (pins left to right)
* 1: TXD2 - 1: TXD2
* 2: RXD2 - 2: RXD2
* 3: GND - 3: GND
* `RGB`: Video out to monitor, supports 15khz/31khz based on hardware switch for video freq/mode selection - `RGB`: Video out to monitor, supports 15khz/31khz based on hardware switch for video freq/mode
* `LINE OUT1`: Primary audio out to amplifier selection
* `LINE OUT2`: N.C. - `LINE OUT1`: Primary audio out to amplifier
* `LAN`: Network - `LINE OUT2`: N.C.
* `DIP SW` - `LAN`: Network
* `1`: - `DIP SW`
* `2`: - `1`:
* `3`: - `2`:
* `4`: On = force 15 khz monitor output - `3`:
- `4`: On = force 15 khz monitor output
## Python IO boards and differences ## Python IO boards and differences
### P3IO DDR(X) ### P3IO DDR(X)
* Connects to USB and actually enumerates as a USB device and not a virtual COM port - Connects to USB and actually enumerates as a USB device and not a virtual COM port
* COM ports 1-4 on breakout of the PCB are being passed through as actual COM ports to the operating system - COM ports 1-4 on breakout of the PCB are being passed through as actual COM ports to the operating
system
### P3IO GF/DM ### P3IO GF/DM
* Connects to USB and actually enumerates as a USB device and not a virtual COM port - Connects to USB and actually enumerates as a USB device and not a virtual COM port
* COM ports 1-2 on breakout of the PCB are just virtual COM ports - COM ports 1-2 on breakout of the PCB are just virtual COM ports
* These do not show up as COM ports on the operating system - These do not show up as COM ports on the operating system
* The game drives the COM ports through the main P3IO protocol with additional P3IO commands - The game drives the COM ports through the main P3IO protocol with additional P3IO commands to
to open, read, write and close these virtual COM ports open, read, write and close these virtual COM ports
### P2IO DDR ### P2IO DDR
* Connects to USB and actually enumerates as a USB device and not a virtual COM port - Connects to USB and actually enumerates as a USB device and not a virtual COM port
* COM ports 1-2 on breakout of the PCB are just virtual COM ports - COM ports 1-2 on breakout of the PCB are just virtual COM ports
* These do not show up as COM ports on the operating system - These do not show up as COM ports on the operating system
* The game drives the COM ports through the main P3IO protocol with additional P3IO commands - The game drives the COM ports through the main P3IO protocol with additional P3IO commands to
to open, read, write and close these virtual COM ports open, read, write and close these virtual COM ports
## Pinout card reader P1 -> P2 mini din8 male to mini din8 male ## Pinout card reader P1 -> P2 mini din8 male to mini din8 male
Port 1 2 and 3: Port 1 2 and 3:
* Pin 3: TX - Pin 3: TX
* Pin 4: GND - Pin 4: GND
* Pin 5 : RX - Pin 5 : RX
Pin 3 and 5 need to be reversed inbetween readers Pin 3 and 5 need to be reversed inbetween readers They are all the same, so your cable needs to
They are all the same, so your cable needs to bridge them over. bridge them over. A standard male to male mini din 8 cable does not do that.
A standard male to male mini din 8 cable does not do that.
### Pinout card reader stock cable s-sub9 to round pin9 ### Pinout card reader stock cable s-sub9 to round pin9
@ -135,16 +136,16 @@ dsub-9 female -> mini-din8 male
Default or incorrectly configured? Default or incorrectly configured?
* `COM1` -> on mainboard - `COM1` -> on mainboard
* `COM2` -> COM2 on P3IO breakout - `COM2` -> COM2 on P3IO breakout
* `COM3` -> ??? - `COM3` -> ???
* `COM4` -> COM1 on P3IO breakout - `COM4` -> COM1 on P3IO breakout
## P3IO command init sequence on DDR 18 ## P3IO command init sequence on DDR 18
From the ddrio-python23 library From the ddrio-python23 library
```text ````text
.data:1002D5D0 g_init_pakets db 0AAh, 2, 0, 1, 29h dup(0); field_0.field_0 .data:1002D5D0 g_init_pakets db 0AAh, 2, 0, 1, 29h dup(0); field_0.field_0
.data:1002D5D0 ; DATA XREF: initialize_and_send_pakets+5↑o .data:1002D5D0 ; DATA XREF: initialize_and_send_pakets+5↑o
.data:1002D5D0 db 0AAh, 2, 0, 2Fh, 29h dup(0); field_0.field_0 .data:1002D5D0 db 0AAh, 2, 0, 2Fh, 29h dup(0); field_0.field_0
@ -191,4 +192,4 @@ From the ddrio-python23 library
// 29: get video freq // 29: get video freq
// 5: set watchdog // 5: set watchdog
// 27: get cab type or dipsw // 27: get cab type or dipsw
``` ````

View File

@ -1,50 +1,62 @@
# Development # Development
This document is intended for developers interested in contributing to Bemanitools. Please read this document before
you start developing. This document is intended for developers interested in contributing to Bemanitools. Please read this
document before you start developing.
## Goals ## Goals
We want you to understand what this project is about and its goals. The following list serves as a guidance for all
developers to identify valuable contributions for this project. As the project evolves, these gaols might do as well.
* Allow running Konami arcade rhythm games, i.e. games of the Bemani series, on arbitrary hardware. We want you to understand what this project is about and its goals. The following list serves as a
* Emulate required software and hardware features. guidance for all developers to identify valuable contributions for this project. As the project
* Provide means to cope with incompatibility issues resulting from using a different software platform (e.g. version evolves, these gaols might do as well.
of Windows).
* Provide an API for custom interfaces and configuring fundamental application features. - Allow running Konami arcade rhythm games, i.e. games of the Bemani series, on arbitrary hardware.
- Emulate required software and hardware features.
- Provide means to cope with incompatibility issues resulting from using a different software
platform (e.g. version of Windows).
- Provide an API for custom interfaces and configuring fundamental application features.
## Development environment ## Development environment
The following tooling is required in order to build this project. The following tooling is required in order to build this project.
### Tooling ### Tooling
#### Linux / MacOSX #### Linux / MacOSX
* git
* make - git
* mingw-w64 - make
* clang-format - mingw-w64
* wine (optional, for running tests or some quick testing without requiring a VM) - clang-format
- wine (optional, for running tests or some quick testing without requiring a VM)
On MacOSX, you can use homebrew or macports to install these packages. On MacOSX, you can use homebrew or macports to install these packages.
#### Windows #### Windows
TODO TODO
### IDE ### IDE
Ultimately, you are free to use whatever you feel comfortable with for development. The following is our preferred
development environment which we run on a Linux distribution of our choice: Ultimately, you are free to use whatever you feel comfortable with for development. The following is
* Visual Studio Code with the following extensions our preferred development environment which we run on a Linux distribution of our choice:
* C/C++
* C++ Intellisense - Visual Studio Code with the following extensions
* Clang-Format - C/C++
- C++ Intellisense
- Clang-Format
### Further tools for testing and debugging ### Further tools for testing and debugging
* Debugger: Can be part of your reverse engineering IDE of your choice or stand-along like
[OllyDbg](http://www.ollydbg.de/). - Debugger: Can be part of your reverse engineering IDE of your choice or stand-along like
* [apitrace](https://apitrace.github.io/): Trace render calls to graphics APIs like D3D and OpenGL. [OllyDbg](http://www.ollydbg.de/).
This tool allows you to record and re-play render calls of an application with frame-by-frame - [apitrace](https://apitrace.github.io/): Trace render calls to graphics APIs like D3D and OpenGL.
debugging. Very useful to analyze the render pipeline or debug graphicial glitches. This tool allows you to record and re-play render calls of an application with frame-by-frame
debugging. Very useful to analyze the render pipeline or debug graphicial glitches.
## Building ## Building
Simply run make in the root folder: Simply run make in the root folder:
``` ```
make make
``` ```
@ -52,17 +64,20 @@ make
All output is located in the *build* folder including the final *bemanitools.zip* package. All output is located in the *build* folder including the final *bemanitools.zip* package.
Note about using `-j n` option on make: This is currently considered broken/unreliable. Expect to Note about using `-j n` option on make: This is currently considered broken/unreliable. Expect to
run into odd issues like randomly changing unresolved dependency errors. If you attempted this, run into odd issues like randomly changing unresolved dependency errors. If you attempted this, run
run a `make clean` before running `make` again. a `make clean` before running `make` again.
### Release building ### Release building
A release build is a clean build including code formatting and testing. This can be executed by running the following
command: A release build is a clean build including code formatting and testing. This can be executed by
running the following command:
``` ```
make release make release
``` ```
## Building with docker ## Building with docker
You can also build bemanitools using docker which avoids having to setup a full development You can also build bemanitools using docker which avoids having to setup a full development
environment if you are just interested in building binaries for the latest changes. Naturally, this environment if you are just interested in building binaries for the latest changes. Naturally, this
requires you to have the docker daemon installed. Then, run the following command from the root requires you to have the docker daemon installed. Then, run the following command from the root
@ -75,28 +90,35 @@ make build-docker
Once completed successfully, the build output is located in the `build/docker` sub-folder. Once completed successfully, the build output is located in the `build/docker` sub-folder.
## Creating releases ## Creating releases
For developers to create official releases with major and minor versioning: For developers to create official releases with major and minor versioning:
1. Ensure that all everything you want to have for this release is merged into master. 1. Ensure that all everything you want to have for this release is merged into master.
1. Create a [changelog](CHANGELOG.md) based on aggregating and summerizing commit messages of 1. Create a [changelog](CHANGELOG.md) based on aggregating and summerizing commit messages of
whatever got added starting from the tag of the current version to the current head of master. whatever got added starting from the tag of the current version to the current head of master.
Commit that changelog and push to master. Commit that changelog and push to master.
1. Create a tag with the next version number, e.g. for 5.28: 1. Create a tag with the next version number, e.g. for 5.28:
```bash ```bash
git tag v5.28 git tag v5.28
``` ```
1. Push the tag upstream: 1. Push the tag upstream:
```bash ```bash
git push origin v5.28 git push origin v5.28
``` ```
1. Wait for the CI pipeline to finish building the release and check if everything's ok. 1. Wait for the CI pipeline to finish building the release and check if everything's ok.
1. On GitLab, go to "Tags" in the repository, click on the commit ID below the tag in the list you 1. On GitLab, go to "Tags" in the repository, click on the commit ID below the tag in the list you
just created. just created.
1. Click on the "Pipelines" tab and click on the download button on the right and on "Download 1. Click on the "Pipelines" tab and click on the download button on the right and on "Download
release artifacts". release artifacts".
1. Rename the downloaded zip to "bemanitools-v5.28.zip" and the replace v5.28 with the version 1. Rename the downloaded zip to "bemanitools-v5.28.zip" and the replace v5.28 with the version you
you want to release. want to release.
1. Upload the release. 1. Upload the release.
1. For publishing the release, create a post with the following contents: 1. For publishing the release, create a post with the following contents:
``` ```
v5.28 v5.28
<insert link to uploaded zip here> <insert link to uploaded zip here>
@ -108,53 +130,66 @@ Changelog copy-paste:
``` ```
## Code formatting ## Code formatting
To apply our code style using clang-format, simply run the following command: To apply our code style using clang-format, simply run the following command:
``` ```
make code-format make code-format
``` ```
Please also refer to the [section about](###Additional-code-style-guidelines) which cannot be covered using Please also refer to the [section about](###Additional-code-style-guidelines) which cannot be
clang-format. covered using clang-format.
## Testing ## Testing
This still needs to be improved/implemented properly to run the unit-tests easily. Currently, you have to be on either
a Linux/MacOSX system and run This still needs to be improved/implemented properly to run the unit-tests easily. Currently, you
have to be on either a Linux/MacOSX system and run
``` ```
make run-tests make run-tests
``` ```
This executes all currently available unit-tests and reports to the terminal any errors. This requires wine to be
installed. This executes all currently available unit-tests and reports to the terminal any errors. This
requires wine to be installed.
## Project structure ## Project structure
Now that your setup is ready to go, here is brief big picture of what you find in this project. Now that your setup is ready to go, here is brief big picture of what you find in this project.
* build: This folder will be generated once you have run the build process. - build: This folder will be generated once you have run the build process.
* dist: Distribution related files such as (default) configuration files, shell scripts, etc. - dist: Distribution related files such as (default) configuration files, shell scripts, etc.
* doc: Documentation for the tools and hooks as well as some development related docs. - doc: Documentation for the tools and hooks as well as some development related docs.
* src: The source code - src: The source code
* imports: Provides headers and import definitions for AVS libs and a few other dependencies. - imports: Provides headers and import definitions for AVS libs and a few other dependencies.
* main: The main source code with game specific hook libraries, hardware emulation and application fixes. - main: The main source code with game specific hook libraries, hardware emulation and application
* test: Unit tests for modules that are not required for hooking or the presence of a piece of hardware. fixes.
* .clang-format: Code style for clang-format. - test: Unit tests for modules that are not required for hooking or the presence of a piece of
* GNUmakefile: Our makefile to build this project. hardware.
* Module.mk: Defines the various libraries and exe files to build for the distribution packages. - .clang-format: Code style for clang-format.
- GNUmakefile: Our makefile to build this project.
- Module.mk: Defines the various libraries and exe files to build for the distribution packages.
## Code style and guidelines ## Code style and guidelines
Please follow these guidelines to keep a consistent style for the code base. Furthermore, we provide some best practices
that have shown to be helpful. Please read them and reach out to us if you have any concerns or valuable Please follow these guidelines to keep a consistent style for the code base. Furthermore, we provide
additions/changes. some best practices that have shown to be helpful. Please read them and reach out to us if you have
any concerns or valuable additions/changes.
### Clang-format ### Clang-format
The style we agreed on is provided as a clang-format file. Therefore, we use clang-format for autoformatting our code.
You can use clang-format from your terminal but when using Visual Studio Code, just install the extension. Apply The style we agreed on is provided as a clang-format file. Therefore, we use clang-format for
formatting manually at the end or enable the "reformat on save" feature. autoformatting our code.
However, clang-format cannot provide guidance to cover all our style rules. Therefore, we ask you to stick to the You can use clang-format from your terminal but when using Visual Studio Code, just install the
"additional" guidelines in the following sections. extension. Apply formatting manually at the end or enable the "reformat on save" feature.
However, clang-format cannot provide guidance to cover all our style rules. Therefore, we ask you to
stick to the "additional" guidelines in the following sections.
### Additional code style guidelines ### Additional code style guidelines
#### No trailing comments #### No trailing comments
``` ```
// NOPE // NOPE
int var = 1; // this is a variable int var = 1; // this is a variable
@ -165,11 +200,13 @@ int var = 1;
``` ```
#### Comment style #### Comment style
* Use either // or /* ... */ for single line.
* Use /* ... */ for multiline comments. - Use either // or /\* ... \*/ for single line.
* Use /* ... */ for documentation. - Use /\* ... \*/ for multiline comments.
- Use /\* ... \*/ for documentation.
Examples: Examples:
``` ```
// single line comment // single line comment
int var = 1; int var = 1;
@ -188,9 +225,12 @@ int func(int a, int b);
``` ```
#### Include guards #### Include guards
Provide include guards for every header file. The naming follows the namespacing of the module and the module name.
Provide include guards for every header file. The naming follows the namespacing of the module and
the module name.
Example for bsthook/acio.h file: Example for bsthook/acio.h file:
``` ```
#ifndef BSTHOOK_ACIO_H #ifndef BSTHOOK_ACIO_H
#define BSTHOOK_ACIO_H #define BSTHOOK_ACIO_H
@ -201,11 +241,13 @@ Example for bsthook/acio.h file:
``` ```
#### Empty line before and after control blocks #### Empty line before and after control blocks
Control blocks include: if, if-else, for, while, do-while, switch Control blocks include: if, if-else, for, while, do-while, switch
Makes the code more readible with control blocks being easily visible. Makes the code more readible with control blocks being easily visible.
Example Example
``` ```
int var = 1; int var = 1;
@ -217,7 +259,10 @@ printf("%d\n", var);
``` ```
#### Empty line at the start of blocks #### Empty line at the start of blocks
There are situations when you want to have an empty line at the start of the block to enhance readability, for example:
There are situations when you want to have an empty line at the start of the block to enhance
readability, for example:
``` ```
if (a && if (a &&
b && b &&
@ -227,6 +272,7 @@ if (a &&
``` ```
Here the assignment aligns with the conditions of the if-black making it hard to read. Better: Here the assignment aligns with the conditions of the if-black making it hard to read. Better:
``` ```
if (a && if (a &&
b && b &&
@ -237,20 +283,22 @@ if (a &&
``` ```
#### Includes #### Includes
* Always keep all includes at the top of a header and source file. Exception: Documentation before include guards on
header file. - Always keep all includes at the top of a header and source file. Exception: Documentation before
* Use *< >* for system-based includes, e.g. <stdio.h>. include guards on header file.
* Use *" "* for project-based includes, e.g. "util/log.h". - Use *\< >* for system-based includes, e.g. \<stdio.h>.
* For project-based includes, always use the full path relative to the root folder (src/main, src/test), e.g. - Use *" "* for project-based includes, e.g. "util/log.h".
"util/log.h" and not "log.h" when being in another module in the "util" namespace. - For project-based includes, always use the full path relative to the root folder (src/main,
* Sorting src/test), e.g. "util/log.h" and not "log.h" when being in another module in the "util" namespace.
* System-based includes before project-based includes - Sorting
* Block group them by different namespaces - System-based includes before project-based includes
* Lex sort block groups - Block group them by different namespaces
* Because windows header files are a mess, the sorting on system-based includes is not always applicable. Please add - Lex sort block groups
a comment when applicable and apply the necessary order. - Because windows header files are a mess, the sorting on system-based includes is not always
applicable. Please add a comment when applicable and apply the necessary order.
Example for sorting Example for sorting
``` ```
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -264,25 +312,30 @@ Example for sorting
``` ```
### Documentation ### Documentation
In general, add comments where required to explain a certain piece of code. If is not self-explanatory about:
* Why is it implemented like this
* Very important details to understand how and why it is working that only you know
* A complex algorithm/logic
Make sure to add some comments or even an extended document. Avoid comments that explain trivial and obvious things In general, add comments where required to explain a certain piece of code. If is not
like "enable feature X" before an if-block with a feature switch. self-explanatory about:
Especially if it comes to reverse-engineering efforts, comments or even a separate document is crucial to allow others - Why is it implemented like this
to understand the depths you dived into. - Very important details to understand how and why it is working that only you know
- A complex algorithm/logic
Any extended notes about documentation some hardware, protocol, reverse-engineering a feature etc. can be stored in Make sure to add some comments or even an extended document. Avoid comments that explain trivial and
the *doc/dev* folder and stay with the repository. Make good use of that! obvious things like "enable feature X" before an if-block with a feature switch.
Especially if it comes to reverse-engineering efforts, comments or even a separate document is
crucial to allow others to understand the depths you dived into.
Any extended notes about documentation some hardware, protocol, reverse-engineering a feature etc.
can be stored in the *doc/dev* folder and stay with the repository. Make good use of that!
#### Header files #### Header files
Document any enum, struct or function exposed by a header file. Documentation of static functions or variables in
source modules is not required. Also provide documentation for the module. Document any enum, struct or function exposed by a header file. Documentation of static functions or
variables in source modules is not required. Also provide documentation for the module.
Example for my-namespace/my-module.h Example for my-namespace/my-module.h
``` ```
/** /**
* Some example module to show you where documentation is expected. * Some example module to show you where documentation is expected.
@ -323,22 +376,28 @@ int my_namespace_my_module_func(int a, int b);
``` ```
### Naming conventions ### Naming conventions
In general, try to keep names short but don't overdo it by using abbrevations of things you created. Sometimes this is
not possible and we accept exceptions if there are no proper alternatives. In general, try to keep names short but don't overdo it by using abbrevations of things you created.
Sometimes this is not possible and we accept exceptions if there are no proper alternatives.
#### Namespacing #### Namespacing
The folder names use lower-case names with dashes *-* as seperators, e.g. *my-namespace*. The folder names use lower-case names with dashes *-* as seperators, e.g. *my-namespace*.
#### Modules #### Modules
Header and source files of modules use lower-case names with dashes *-* as seperators, e.g. *my-module.c*, *my-module.h.
The include guards contain the name of the namespace and module, see [here](#### Include guards). Header and source files of modules use lower-case names with dashes *-* as seperators, e.g.
*my-module.c*, \*my-module.h.
The include guards contain the name of the namespace and module, see \[here\](#### Include guards).
Variables, functions, structs, enums and macros are namespace accordingly. Variables, functions, structs, enums and macros are namespace accordingly.
#### Variables #### Variables
Snake-case with proper namespacing to namespace and module. Namespacing applies to static and global variables. Local
variables are not namespaced. Snake-case with proper namespacing to namespace and module. Namespacing applies to static and global
variables. Local variables are not namespaced.
``` ```
// For namespace "ezusb", module "device", static variable in module // For namespace "ezusb", module "device", static variable in module
static HANDLE ezusb_device_handle; static HANDLE ezusb_device_handle;
@ -348,7 +407,10 @@ int buffer_size = 256;
``` ```
#### Functions #### Functions
Snake-case with proper namespacing to namespace and module for all functions that are not hook functions.
Snake-case with proper namespacing to namespace and module for all functions that are not hook
functions.
``` ```
// For namespace "ezusb", module "device", static variable in module, init function // For namespace "ezusb", module "device", static variable in module, init function
void ezusb_device_init(...); void ezusb_device_init(...);
@ -361,7 +423,9 @@ HANDLE my_CreateFileA(...)
``` ```
#### Structs #### Structs
Snake-case with proper namespacing to namespace and module. Snake-case with proper namespacing to namespace and module.
``` ```
// For namespace "ezusb", module "device" ctx struct // For namespace "ezusb", module "device" ctx struct
struct ezusb_device_ctx { struct ezusb_device_ctx {
@ -370,7 +434,9 @@ struct ezusb_device_ctx {
``` ```
#### Enums #### Enums
Snake-case with proper namespacing to namespace and module. Upper-case for enum entries Snake-case with proper namespacing to namespace and module. Upper-case for enum entries
``` ```
// For namespace "ezusb", module "device" state enum // For namespace "ezusb", module "device" state enum
struct EZUSB_DEVICE_STATE { struct EZUSB_DEVICE_STATE {
@ -381,14 +447,18 @@ struct EZUSB_DEVICE_STATE {
``` ```
#### Macros #### Macros
Upper-case with underscore as spacing, proper namespacing to namespace and module. Upper-case with underscore as spacing, proper namespacing to namespace and module.
``` ```
// For namespace "ezusb", module "device" vid // For namespace "ezusb", module "device" vid
#define EZUSB_DEVICE_VID 0xFFFF #define EZUSB_DEVICE_VID 0xFFFF
``` ```
#### Multiple variable declarations #### Multiple variable declarations
Only one declaration per line which also avoids various errors, for example: Only one declaration per line which also avoids various errors, for example:
``` ```
// Nope // Nope
char a, b, b; char a, b, b;
@ -402,24 +472,30 @@ char c;
``` ```
### Testing ### Testing
We advice you to write unit tests for all modules that allow proper unit testing. This applies to modules that are not
part of the actual hooking process and do not rely on external devices to be available. Add these tests to the
*src/test* sub-folder.
This does not only speed up your own development but hardens the code base and avoids having to test these things by We advice you to write unit tests for all modules that allow proper unit testing. This applies to
running the real applications, hence saving a lot of time and trouble. modules that are not part of the actual hooking process and do not rely on external devices to be
available. Add these tests to the *src/test* sub-folder.
This does not only speed up your own development but hardens the code base and avoids having to test
these things by running the real applications, hence saving a lot of time and trouble.
### Further best practices ### Further best practices
* Avoid external dependencies like additional libraries. Bemanitools is extremely self-contained which enables high
portability and control which is important for implementing various "hacks" to just make things work. - Avoid external dependencies like additional libraries. Bemanitools is extremely self-contained
* If you see some module/function lacking documentation that you have to use/understand, add documentation once you which enables high portability and control which is important for implementing various "hacks" to
figured out what the function/module is doing. This does not only help your future you but others reading the code. just make things work.
* Keep documentation and readme files up-to-date. When introducing changes/adding new features, review existing - If you see some module/function lacking documentation that you have to use/understand, add
documentation and apply necessary changes. documentation once you figured out what the function/module is doing. This does not only help your
future you but others reading the code.
- Keep documentation and readme files up-to-date. When introducing changes/adding new features,
review existing documentation and apply necessary changes.
## Misc ## Misc
The core API interception code was ripped out, cleaned up a tiny bit and released on GitHub. BT5 will eventually be
ported to use this external library in order to avoid maintaining the same code in two places at once. The core API interception code was ripped out, cleaned up a tiny bit and released on GitHub. BT5
will eventually be ported to use this external library in order to avoid maintaining the same code
in two places at once.
https://github.com/decafcode/capnhook https://github.com/decafcode/capnhook

View File

@ -27,9 +27,9 @@ N/A
#### How to fix #### How to fix
* Make sure your data is not set to read only, especially the dev folder. - Make sure your data is not set to read only, especially the dev folder.
* Disable all network adapters other than the one used to connect to the Internet. - Disable all network adapters other than the one used to connect to the Internet.
* Check for hidden network adapters in Device Manager. - Check for hidden network adapters in Device Manager.
## 5-1500 series errors ## 5-1500 series errors
@ -41,7 +41,7 @@ IO ERROR
#### Known occurances #### Known occurances
* Pop'n Music 15 - Pop'n Music 15
#### How to fix #### How to fix
@ -59,8 +59,8 @@ N/A
#### How to fix #### How to fix
* Check the integrity of the data you have, i.e. some files might be corrupted - Check the integrity of the data you have, i.e. some files might be corrupted
* Check your physical drive. Is it failing? - Check your physical drive. Is it failing?
## 5-1501 series errors ## 5-1501 series errors
@ -76,9 +76,9 @@ N/A
#### How to fix #### How to fix
* Recopy Bemanitools. - Recopy Bemanitools.
* For Reflec Beat, make sure you are not missing device.dll. (This seems to apply to some older - For Reflec Beat, make sure you are not missing device.dll. (This seems to apply to some older
version of bemanitools) version of bemanitools)
## 5-1502 series errors ## 5-1502 series errors
@ -90,13 +90,13 @@ BACKUP CHECK ERROR
#### Known occurances #### Known occurances
* Pop'n'Music 21 Sunny Park - Pop'n'Music 21 Sunny Park
#### How to fix #### How to fix
* Give access to gamestart.bat and launcher.exe from Windows Firewall if enabled. - Give access to gamestart.bat and launcher.exe from Windows Firewall if enabled.
* Make sure no antivirus software firewall is blocking access to those files. - Make sure no antivirus software firewall is blocking access to those files.
* Start gamestart.bat as Administrator. - Start gamestart.bat as Administrator.
### 5-1502-0000 ### 5-1502-0000
@ -110,7 +110,7 @@ N/A
#### How to fix #### How to fix
* Make sure `/dev/` isn't read-only. - Make sure `/dev/` isn't read-only.
### 5-1502-0002 ### 5-1502-0002
@ -120,7 +120,7 @@ HDD READ ERROR
#### Known occurances #### Known occurances
* GFDM V4 - GFDM V4
#### How to fix #### How to fix
@ -146,22 +146,22 @@ timeouts making this code prone to fail.
#### Known occurances #### Known occurances
* IIDX - IIDX
#### How to fix #### How to fix
#### FPGA WRITE ERROR #### FPGA WRITE ERROR
* Restart the game - Restart the game
* Re-copy bemanitools - Re-copy bemanitools
#### FW TRNS-OUT #### FW TRNS-OUT
* Restart the game - Restart the game
* Re-copy bemanitools - Re-copy bemanitools
* Running the process on high priority and with admin rights - Running the process on high priority and with admin rights
* If you attached a debugger, that might have messed with the timing and caused this. Try a - If you attached a debugger, that might have messed with the timing and caused this. Try a
different debugger or attach it later in the boot process different debugger or attach it later in the boot process
### 5-1503-0001 ### 5-1503-0001
@ -179,10 +179,10 @@ N/A
#### How to fix #### How to fix
* Check the integrity of the data you have, i.e. some files might be corrupted - Check the integrity of the data you have, i.e. some files might be corrupted
* If the data came in an archive format, try extracting it again with another application. - If the data came in an archive format, try extracting it again with another application.
* Make sure your game is up to date with the current data available. - Make sure your game is up to date with the current data available.
* Check your physical drive. Is it failing? - Check your physical drive. Is it failing?
### 5-1503-0004 ### 5-1503-0004
@ -202,13 +202,13 @@ N/A
Real hardware: Real hardware:
* Check the USB cable between the PC and the IO board is okay. - Check the USB cable between the PC and the IO board is okay.
* Make sure the IO board is getting enough of a clean supply of power. - Make sure the IO board is getting enough of a clean supply of power.
Bemanitools: Bemanitools:
* Don't attempt to put your computer to sleep while playing rhythm games. - Don't attempt to put your computer to sleep while playing rhythm games.
* Change launcher.exe process priority to High when starting the game. - Change launcher.exe process priority to High when starting the game.
### 5-1503-0006 ### 5-1503-0006
@ -222,7 +222,7 @@ N/A
#### How do I fix it? #### How do I fix it?
* Recopy Bemanitools. - Recopy Bemanitools.
### 5-1503-0007 ### 5-1503-0007
@ -236,7 +236,7 @@ N/A
#### How do I fix it? #### How do I fix it?
* Run the game using gamestart.bat, don't just drag and drop the game dll onto launcher.exe - Run the game using gamestart.bat, don't just drag and drop the game dll onto launcher.exe
### 5-1503-0008 ### 5-1503-0008
@ -246,7 +246,7 @@ FPGA Write error
#### Known occurances #### Known occurances
* IIDX Tricoro - IIDX Tricoro
Seen in Tricoro Omnimix RC1. Seen in Tricoro Omnimix RC1.
@ -266,7 +266,7 @@ N/A
#### How do I fix it? #### How do I fix it?
* Make sure your AC(real)IO board is on the correct COM port. - Make sure your AC(real)IO board is on the correct COM port.
## 5-1504 series errors ## 5-1504 series errors
@ -286,8 +286,8 @@ N/A
Real hardware: Real hardware:
* Make sure your readers are connected and powered on. - Make sure your readers are connected and powered on.
* Check your serial cables are good. - Check your serial cables are good.
### 5-1504-0003 ### 5-1504-0003
@ -330,13 +330,13 @@ the game may take 1-3 minutes longer to boot as it regenerates backup data.
#### Known occurances #### Known occurances
* Jubeat Ripples - Jubeat Ripples
#### How do I fix it? #### How do I fix it?
* Check the integrity of the data you have, i.e. some files might be corrupted - Check the integrity of the data you have, i.e. some files might be corrupted
* If the data came in an archive format, try extracting it again with another application. - If the data came in an archive format, try extracting it again with another application.
* Check your physical drive. Is it failing? - Check your physical drive. Is it failing?
### 5-1505-0001 ### 5-1505-0001
@ -350,9 +350,9 @@ N/A
#### How do I fix it? #### How do I fix it?
* Check the integrity of the data you have, i.e. some files might be corrupted - Check the integrity of the data you have, i.e. some files might be corrupted
* If the data came in an archive format, try extracting it again with another application. - If the data came in an archive format, try extracting it again with another application.
* Check your physical drive. Is it failing? - Check your physical drive. Is it failing?
### 5-1505-0002 ### 5-1505-0002
@ -371,9 +371,9 @@ N/A
##### Real hardware ##### Real hardware
* There may be a coin stuck, check. - There may be a coin stuck, check.
* The coin mechanism may be stuck, check. - The coin mechanism may be stuck, check.
* Don't hold down the coin line so long. - Don't hold down the coin line so long.
### 5-1505-0006 ### 5-1505-0006
@ -387,9 +387,9 @@ N/A
#### How do I fix it? #### How do I fix it?
* Check the integrity of the data you have, i.e. some files might be corrupted - Check the integrity of the data you have, i.e. some files might be corrupted
* If the data came in an archive format, try extracting it again with another application. - If the data came in an archive format, try extracting it again with another application.
* Check your physical drive. Is it failing? - Check your physical drive. Is it failing?
### 5-1505-0025 ### 5-1505-0025
@ -399,11 +399,11 @@ N/A
#### Known occurances #### Known occurances
* Jubeat Saucer Fullfill - Jubeat Saucer Fullfill
#### How do I fix it? #### How do I fix it?
* Disable excess network adapters - Disable excess network adapters
## 5-1506 series errors ## 5-1506 series errors
@ -419,7 +419,7 @@ The backup data is corrupted. Press the test button to re-initialize it.
#### Known occurances #### Known occurances
* IIDX 15 (BACKUP DATA ERROR) - IIDX 15 (BACKUP DATA ERROR)
#### How do I fix it? #### How do I fix it?
@ -442,7 +442,7 @@ This error may happen before the monitor check on IIDX.
#### Known occurances #### Known occurances
* IIDX (version?) - IIDX (version?)
#### How do I fix it? #### How do I fix it?
@ -460,8 +460,8 @@ N/A
#### How do I fix it? #### How do I fix it?
* "Set" and save the clock date and time in the test menu - "Set" and save the clock date and time in the test menu
* Recopy Bemanitools - Recopy Bemanitools
## 5-1507 series errors ## 5-1507 series errors
@ -509,7 +509,7 @@ LAMP CHECK ERROR
#### Known occurances #### Known occurances
* Pop'n Music 20 Fantasia - Pop'n Music 20 Fantasia
#### How do I fix it? #### How do I fix it?
@ -527,7 +527,7 @@ The original message in Japanese: 電源を再投入して下さい
#### Known occurances #### Known occurances
* Pop'n Music 22 Lapistoria - Pop'n Music 22 Lapistoria
#### How do I fix it? #### How do I fix it?
@ -551,12 +551,12 @@ N/A
#### How do I fix it? #### How do I fix it?
* Restart your game. - Restart your game.
* Check if your computer is connected to the Internet at all. - Check if your computer is connected to the Internet at all.
* Make sure the services URL is correct. - Make sure the services URL is correct.
* Disable all network adapters other than the one used to connect to the Internet. Alternatively, - Disable all network adapters other than the one used to connect to the Internet. Alternatively,
setting that adapter to have the highest affinity also works. setting that adapter to have the highest affinity also works.
* If none of the above work, reinstall a newer or older version of your network drivers. - If none of the above work, reinstall a newer or older version of your network drivers.
### 5-2002-0000 ### 5-2002-0000
@ -570,7 +570,7 @@ N/A
#### How do I fix it? #### How do I fix it?
* Make sure you're editing the right file for network configuration settings. - Make sure you're editing the right file for network configuration settings.
### 5-2002-0916 ### 5-2002-0916
@ -602,18 +602,18 @@ Press the service button to start the game.
#### Known occurances #### Known occurances
* IIDX, probably all known versions - IIDX, probably all known versions
#### How do I fix it? #### How do I fix it?
The original message is already telling you what is going on: The original message is already telling you what is going on:
* Check if your machine/pc has an internet connection - Check if your machine/pc has an internet connection
* Check your firewall settings - Check your firewall settings
* Check that the server address is configured and correct in `iidxhook.conf` (old games) or - Check that the server address is configured and correct in `iidxhook.conf` (old games) or
`ea3-config.xml` `ea3-config.xml`
* You can disable the network in the operator menu to just boot the game first. Note that this is - You can disable the network in the operator menu to just boot the game first. Note that this is
not possible on any versions starting IIDX 20 (tricoro). not possible on any versions starting IIDX 20 (tricoro).
### 5-2002-2301 ### 5-2002-2301
@ -669,7 +669,7 @@ N/A
#### How do I fix it? #### How do I fix it?
* Check that there is a valid PCBID in ea3-config.xml. - Check that there is a valid PCBID in ea3-config.xml.
### 5-2002-2400 ### 5-2002-2400
@ -698,19 +698,19 @@ N/A
#### How do I fix it? #### How do I fix it?
* Check your services URL in `ea3-config.xml`. Make sure to remove any slash at the end of the URL - Check your services URL in `ea3-config.xml`. Make sure to remove any slash at the end of the URL
and check for https/http. and check for https/http.
* If you are running Spada, ensure to use a service URL that supports that older game (check with - If you are running Spada, ensure to use a service URL that supports that older game (check with
your private server provider) your private server provider)
* If you are running Tune Street, ensure to use a service URL that supports that older game (check - If you are running Tune Street, ensure to use a service URL that supports that older game (check
with your private server provider) with your private server provider)
### 5-2003-2404 ### 5-2003-2404
#### Description #### Description
Malformed `<network>` section. The `<network>` section in your `ea3-config.xml` file is malformed Malformed `<network>` section. The `<network>` section in your `ea3-config.xml` file is malformed in
in some way. some way.
#### Known occurances #### Known occurances
@ -758,15 +758,15 @@ N/A
#### How do I fix it? #### How do I fix it?
Check if your `hosts` file has any DNS redirects to other private servers that might interfere Check if your `hosts` file has any DNS redirects to other private servers that might interfere with
with this this
### 5-2016-0000 ### 5-2016-0000
#### Description #### Description
"apsmanager" is a special eAM Participation system for Korean machines(XXX:K). This system "apsmanager" is a special eAM Participation system for Korean machines(XXX:K). This system is maybe
is maybe not supported by private servers. not supported by private servers.
#### Known occurances #### Known occurances

View File

@ -1,52 +1,53 @@
# iidxhook # iidxhook
iidxhook is a collection of hook libraries for BeatmaniaIIDX providing
emulation and various patches to run these games on non BemaniPC hardware and iidxhook is a collection of hook libraries for BeatmaniaIIDX providing emulation and various patches
newer Windows versions. to run these games on non BemaniPC hardware and newer Windows versions.
The hook libraries must be bootstrapped either using [inject](../inject.md) or The hook libraries must be bootstrapped either using [inject](../inject.md) or
[launcher](../launcher.md) depending on the version you want to run. Further [launcher](../launcher.md) depending on the version you want to run. Further instructions are given
instructions are given in dedicated readme files for each iidxhook version in dedicated readme files for each iidxhook version (see below).
(see below).
## Versions ## Versions
iidxhook comes in a few different flavors. The game and its engine changed over
the years. Some game versions might require patches/parameters enabled which
others don't need or have different AVS versions. Here is the list of supported
games:
* [iidxhook1](iidxhook1.md): 9th, 10th, RED, HAPPY SKY
* [iidxhook2](iidxhook2.md): DistorteD
* [iidxhook3](iidxhook3.md): GOLD, DJ TROOPERS, EMPRESS, SIRIUS
* [iidxhook4](iidxhook4.md): Resort Anthem
* [iidxhook4-cn](iidxhook4-cn.md): Resort Anthem CN (狂热节拍 IIDX)
* [iidxhook5](iidxhook5.md): Lincle
* [iidxhook5-cn](iidxhook5-cn.md): tricoro CN (狂热节拍 IIDX 2)
* [iidxhook6](iidxhook6.md): Tricoro
* [iidxhook7](iidxhook7.md): SPADA, PENDUAL, copula, SINOBUZ
* [iidxhook8](iidxhook8.md): CANNON BALLERS, Rootage
* [iidxhook8](iidxhook9.md): Heroic Verse
When building bemanitools, independent packages are created for each set of games iidxhook comes in a few different flavors. The game and its engine changed over the years. Some game
which are ready to be dropped on top of vanilla AC data dumps. We recommend versions might require patches/parameters enabled which others don't need or have different AVS
using pristine dumps to avoid any conflicts with other hardcoded hacks or versions. Here is the list of supported games:
binary patches.
- [iidxhook1](iidxhook1.md): 9th, 10th, RED, HAPPY SKY
- [iidxhook2](iidxhook2.md): DistorteD
- [iidxhook3](iidxhook3.md): GOLD, DJ TROOPERS, EMPRESS, SIRIUS
- [iidxhook4](iidxhook4.md): Resort Anthem
- [iidxhook4-cn](iidxhook4-cn.md): Resort Anthem CN (狂热节拍 IIDX)
- [iidxhook5](iidxhook5.md): Lincle
- [iidxhook5-cn](iidxhook5-cn.md): tricoro CN (狂热节拍 IIDX 2)
- [iidxhook6](iidxhook6.md): Tricoro
- [iidxhook7](iidxhook7.md): SPADA, PENDUAL, copula, SINOBUZ
- [iidxhook8](iidxhook8.md): CANNON BALLERS, Rootage
- [iidxhook8](iidxhook9.md): Heroic Verse
When building bemanitools, independent packages are created for each set of games which are ready to
be dropped on top of vanilla AC data dumps. We recommend using pristine dumps to avoid any conflicts
with other hardcoded hacks or binary patches.
## How to run ## How to run
To run your game with iidxhook, you have to use the inject tool to inject the
DLL to the game process. `dist/iidx` contains bat scripts with all the To run your game with iidxhook, you have to use the inject tool to inject the DLL to the game
important parameters configured. Further parameters can be added but might not process. `dist/iidx` contains bat scripts with all the important parameters configured. Further
be required to run the game with default settings. parameters can be added but might not be required to run the game with default settings. Further
Further information on how to setup the data for each specific version are information on how to setup the data for each specific version are elaborated in their dedicated
elaborated in their dedicated readme files. readme files.
## Command line options ## Command line options
Add the argument *-h* when running inject with iidxhook to print help/usage
information with a list of parameters you can apply to tweak various things. Add the argument *-h* when running inject with iidxhook to print help/usage information with a list
of parameters you can apply to tweak various things.
## iidxio API ## iidxio API
Available implementations that can be swapped out depending on which kind of
IO hardware you want to use: Available implementations that can be swapped out depending on which kind of IO hardware you want to
* `iidxio`: Default implementation supporting keyboard, mouse and USB use:
game controllers
* [iidxio-bio2](iidxhook/iidxio-bio2.md): Support BIO2 hardware - `iidxio`: Default implementation supporting keyboard, mouse and USB game controllers
* [iidxio-ezusb](iidxhook/iidxio-ezusb.md): Support C02 ezusb FX hardware - [iidxio-bio2](iidxhook/iidxio-bio2.md): Support BIO2 hardware
* [iidxio-ezusb2](iidxhook/iidxio-ezusb2.md): Support IO2 ezusb FX2 hardware - [iidxio-ezusb](iidxhook/iidxio-ezusb.md): Support C02 ezusb FX hardware
- [iidxio-ezusb2](iidxhook/iidxio-ezusb2.md): Support IO2 ezusb FX2 hardware

View File

@ -1,244 +1,250 @@
# Game list # Game list
The following games are compatible with this version of iidxhook: The following games are compatible with this version of iidxhook:
* 9th Style
* 10th Style - 9th Style
* RED - 10th Style
* HAPPY SKY - RED
- HAPPY SKY
The games must be bootstrapped using [inject](../inject.md). The games must be bootstrapped using [inject](../inject.md).
# Data setup and running the game # Data setup and running the game
Ensure your folder with your unpacked data looks like this: Ensure your folder with your unpacked data looks like this:
- JAx (Game binary revision folder where 'x' can be A, B, C, D, E, F, G) - JAx (Game binary revision folder where 'x' can be A, B, C, D, E, F, G)
- data - data
- sidcode.txt - sidcode.txt
Any further files are optional and not required to run the game. Any further files are optional and not required to run the game.
Unpack the package containing iidxhook1 into the revision folder of your choice. Unpack the package containing iidxhook1 into the revision folder of your choice. Most likely, you
Most likely, you want to target the latest revision you have to run the latest want to target the latest revision you have to run the latest binary of the game with any bugfixes
binary of the game with any bugfixes by developers. by developers.
If you don't run this on old hardware that uses an analog version of a Realtek If you don't run this on old hardware that uses an analog version of a Realtek integrated sound
integrated sound chip, you have to replace RtEffect.dll with a stubbed/patched chip, you have to replace RtEffect.dll with a stubbed/patched version (RtEffect_patched.dll).
version (RtEffect_patched.dll). Otherwise, the game might crash instantly when Otherwise, the game might crash instantly when trying to start it.
trying to start it.
Run the appropriate gamestart-XX.bat file as admin, where XX is either Run the appropriate gamestart-XX.bat file as admin, where XX is either 09, 10, 11, 12.
09, 10, 11, 12.
# Configuring iidxhook # Configuring iidxhook
The hook library can be configured via cmd arguments or a configuration file. The hook library can be configured via cmd arguments or a configuration file. The latter is
The latter is generated (*iidxhook.conf* in the same directory) on the first generated (*iidxhook.conf* in the same directory) on the first start of the game using the
start of the game using the gamestart-XX.bat file. It contains default values gamestart-XX.bat file. It contains default values for all available parameters and comments
for all available parameters and comments explaining each parameter. Please explaining each parameter. Please follow the comments when configuring your setup.
follow the comments when configuring your setup.
Add the argument *-h* when running gamestart-XX.bat Add the argument *-h* when running gamestart-XX.bat (e.g. *gamestart-XX.bat -h*) to print help/usage
(e.g. *gamestart-XX.bat -h*) to print help/usage information with a list of information with a list of all available parameters. Every parameter can be either set as command
all available parameters. Every parameter can be either set as command line line argument or using a configuration file.
argument or using a configuration file.
To set a parameter from the command line, just add it as an argument after the bat file like this
To set a parameter from the command line, just add it as an argument after
the bat file like this
``` ```
gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true
``` ```
The syntax for the "key=value" is the same as in the config file. Make sure The syntax for the "key=value" is the same as in the config file. Make sure to have a pre-ceeding
to have a pre-ceeding "-p" for every parameter added. "-p" for every parameter added.
However, if a parameter is specifed in the configuration file and as a command However, if a parameter is specifed in the configuration file and as a command line argument, the
line argument, the command line argument overrides the config file's value. command line argument overrides the config file's value.
# Use d3d8to9 wrapper # Use d3d8to9 wrapper
In order to use the gfx feature patches, e.g. window mode, monitor check, In order to use the gfx feature patches, e.g. window mode, monitor check, frame rate locking,
frame rate locking, framebuffer up/-downscaling etc. you **must** use the framebuffer up/-downscaling etc. you **must** use the d3d8to9 wrapper library (get it from the
d3d8to9 wrapper library (get it from the bemanitools-supplement package). bemanitools-supplement package). Bemanitools removed the old d3d8 hooking module to provide native
Bemanitools removed the old d3d8 hooking module to provide native d3d8 hooks d3d8 hooks due to compatibility and maintainability reasons.
due to compatibility and maintainability reasons.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you have to set a valid PCBID in the If you want to run the games online, you have to set a valid PCBID in the configuration file or as a
configuration file or as a command line argument. You also have to set the url command line argument. You also have to set the url of the eamuse server you want to connect to.
of the eamuse server you want to connect to.
Run the game with the gamestart-XX.bat file and enable network on the operator Run the game with the gamestart-XX.bat file and enable network on the operator menu. When enabled,
menu. When enabled, the game seems to hang and expects you to power the game seems to hang and expects you to power cycle the machine (i.e. quit the game and restart
cycle the machine (i.e. quit the game and restart it). it).
# Switching beat phases 9th and 10th Style # Switching beat phases 9th and 10th Style
9th Style offers internet ranking phases 1 and 2, 10th Style phases 1, 2 and 3. 9th Style offers internet ranking phases 1 and 2, 10th Style phases 1, 2 and 3. On both games, the
On both games, the phases are not controlled by the eamuse server the game is phases are not controlled by the eamuse server the game is connected to (this started with RED).
connected to (this started with RED). Thus, the game was unlocked by binary Thus, the game was unlocked by binary updates back then. The higher the beat phase, the more expert
updates back then. courses and songs got unlocked. Furthermore, the "real" ES and OMES are only available on beat#1.
The higher the beat phase, the more expert courses and songs got unlocked. Use the iidx-irbeat-patch-XX.bat to patch to a different beat phase if you want to play on a
Furthermore, the "real" ES and OMES are only available on beat#1. different beat phase. The default phase is beat#1. To unlock everything, patch the game to beat#3.
Use the iidx-irbeat-patch-XX.bat to patch to a different beat phase if you want
to play on a different beat phase. The default phase is beat#1.
To unlock everything, patch the game to beat#3.
Example: "iidx-irbeat-patch-10.bat 2" to patch to beat#3 on 10th Style Example: "iidx-irbeat-patch-10.bat 2" to patch to beat#3 on 10th Style
# Real hardware support # Real hardware support
## USB IO (ezusb) ## USB IO (ezusb)
Use the specific iidxio API implementations, e.g. iidxio-ezusb.dll to use Use the specific iidxio API implementations, e.g. iidxio-ezusb.dll to use an old C02 EZUSB IO board,
an old C02 EZUSB IO board, to run the game on real hardware. Thanks to a common to run the game on real hardware. Thanks to a common abstraction layer, you can also use more modern
abstraction layer, you can also use more modern IO, e.g. IO2 boards with IO, e.g. IO2 boards with iidxio-ezusb2.dll, even with old games that do not support them.
iidxio-ezusb2.dll, even with old games that do not support them.
## Slotted/Wave pass card readers ## Slotted/Wave pass card readers
Replace the default *eamio.dll* with the *eamio-icca.dll* and have either your Replace the default *eamio.dll* with the *eamio-icca.dll* and have either your slotted (IIDX, DDR
slotted (IIDX, DDR Supernova or GF/DM type) or new wave pass card readers Supernova or GF/DM type) or new wave pass card readers conencted and and assigned to *COM1*.
conencted and and assigned to *COM1*.
### ICCA device settings (device manager) ### ICCA device settings (device manager)
* Port: COM1
* BAUD rate: 57600
* Data bits: 8
* Parity: None
* Stop bits: 1
* Flow control: None
If you encounter issues after the game opened the device, e.g. application - Port: COM1
stuck, try a USB <-> COM dongle instead of using one of the COM ports of the - BAUD rate: 57600
mainboard. - Data bits: 8
- Parity: None
- Stop bits: 1
- Flow control: None
If you encounter issues after the game opened the device, e.g. application stuck, try a USB \<-> COM
dongle instead of using one of the COM ports of the mainboard.
# Known bugs # Known bugs
## avs00000.bin file on D drive ## avs00000.bin file on D drive
All other settings data is remapped to the local folders d, e and f. But, for
the avs00000.bin file that's not possible. Once the avs.dll is initialized All other settings data is remapped to the local folders d, e and f. But, for the avs00000.bin file
(DllMain called), it creates that file if it doesn't exist. Currently, we can't that's not possible. Once the avs.dll is initialized (DllMain called), it creates that file if it
fix this because iidxhook is injected after avs.dll is loaded and can't be doesn't exist. Currently, we can't fix this because iidxhook is injected after avs.dll is loaded and
injected before it is loaded to patch the path for the file. can't be injected before it is loaded to patch the path for the file.
## USBIO (FM-DL TIMEOUT) ## USBIO (FM-DL TIMEOUT)
IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this
happens, run the game again. IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this happens, run the game
again.
# Troubleshooting and FAQ # Troubleshooting and FAQ
## The game is running (very) slow in fullscreen mode but is fine in window mode ## The game is running (very) slow in fullscreen mode but is fine in window mode
If you are using a AMD GPU, try disabling "GPU scaling" which you can find in AMD
settings UI under "Settings" -> "Display". If you are using a AMD GPU, try disabling "GPU scaling" which you can find in AMD settings UI under
"Settings" -> "Display".
This issue only observed on 9th Style so far. This issue only observed on 9th Style so far.
Use Use
[bemanitool's built in upscaling feature](#over-underscan-bad-image-quality-or-latency-caused-by-my-monitorsTV-upscaler) if the game is not [bemanitool's built in upscaling feature](#over-underscan-bad-image-quality-or-latency-caused-by-my-monitorsTV-upscaler)
scaled properly in full screen. if the game is not scaled properly in full screen.
## Window mode or any other gfx related options do not work when changing them in the config file or using cmd args ## Window mode or any other gfx related options do not work when changing them in the config file or using cmd args
See [this](#Use-d3d8to9-wrapper) section. See [this](#Use-d3d8to9-wrapper) section.
## The game does not run "well" (frame drops, drifting offsync etc) ## The game does not run "well" (frame drops, drifting offsync etc)
This can be related to various issues: This can be related to various issues:
* Make sure to run the game as (true) Administrator especially on Windows 7 and
newer. This will also get rid of various other errors (see below) that are - Make sure to run the game as (true) Administrator especially on Windows 7 and newer. This will
related to permission issues. also get rid of various other errors (see below) that are related to permission issues.
* Run the game's process with a higher priority: - Run the game's process with a higher priority:
``` ```
start "" /relatime "gamestart.bat" start "" /relatime "gamestart.bat"
``` ```
* Enforce v-sync enabled in your GPU settings.
* Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) - Enforce v-sync enabled in your GPU settings.
that is not jumping around. Use the timebase feature of one of the newer games to - Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) that is not
check that or enable iidxhook's timebase and check the log output for the jumping around. Use the timebase feature of one of the newer games to check that or enable
determined value. Run this a few times and check if the results differ. iidxhook's timebase and check the log output for the determined value. Run this a few times and
* Use iidxhook's frame rate limiter feature (see further below) to software lock check if the results differ.
the refresh rate. This might be necessary on Windows 7 and newer for D3D8 games, - Use iidxhook's frame rate limiter feature (see further below) to software lock the refresh rate.
e.g. iidx 9 to 12, which seem to ignore GPU side v-sync. This might be necessary on Windows 7 and newer for D3D8 games, e.g. iidx 9 to 12, which seem to
* Use iidxhook's auto timebase feature (see further below) or set a pre-determined ignore GPU side v-sync.
value to cut down start-up times. - Use iidxhook's auto timebase feature (see further below) or set a pre-determined value to cut down
start-up times.
### The game still stutters (randomly) and drifts off-sync ### The game still stutters (randomly) and drifts off-sync
If this concerns a d3d8 based game, i.e. IIDX 9 to 13, use the d3d8to9 wrapper from
the bemanitools-supplement package (follow the included instructions). If this concerns a d3d8 based game, i.e. IIDX 9 to 13, use the d3d8to9 wrapper from the
bemanitools-supplement package (follow the included instructions).
## "NETWORK WARNING" instead of "NETWORK OK" ## "NETWORK WARNING" instead of "NETWORK OK"
This can be caused by: This can be caused by:
* Invalid PCBID
* Firewall blocking connections - Invalid PCBID
* Invalid eamuse url or port specified - Firewall blocking connections
* Game is not run using the Administrator account - Invalid eamuse url or port specified
Make sure to check these things first - Game is not run using the Administrator account Make sure to check these things first
## My songs are offsync ## My songs are offsync
* Make sure your machine's refresh rate is stable
* If you don't get a close to 59.94hz refresh rate, use the software monitor - Make sure your machine's refresh rate is stable
check/auto timebase that's built into iidxhook (refer to help/config file) - If you don't get a close to 59.94hz refresh rate, use the software monitor check/auto timebase
that's built into iidxhook (refer to help/config file)
## The game crashes instantly (10th, RED, HAPPY SKY) ## The game crashes instantly (10th, RED, HAPPY SKY)
Replace the original RtEffects.dll with the patched version
RtEffects_patched.dll from utils (for explanation see above). Replace the original RtEffects.dll with the patched version RtEffects_patched.dll from utils (for
explanation see above).
## The game errors with "PROG CHECKSUM" on boot (10th Style only) ## The game errors with "PROG CHECKSUM" on boot (10th Style only)
10th Style does some checksum tests on boot that have to be removed in order
to boot it with iidxhook injected. Use a patched executable that removed the 10th Style does some checksum tests on boot that have to be removed in order to boot it with
checksum tests. iidxhook injected. Use a patched executable that removed the checksum tests.
## My game runs too fast ## My game runs too fast
iidxhook can limit the frame rate for you (refer to help/config file) iidxhook can limit the frame rate for you (refer to help/config file)
## My game crashes when I try fullscreen ## My game crashes when I try fullscreen
Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only" Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only"
## 10key input (card reader keyboard) seems unresponsive ## 10key input (card reader keyboard) seems unresponsive
10key pad emulation for the old magnetic card readers is quite a mess and
can't be refreshed very often to make it feel unresponsive. Solution: 10key pad emulation for the old magnetic card readers is quite a mess and can't be refreshed very
hit your 10key/numpad slower than normal often to make it feel unresponsive. Solution: hit your 10key/numpad slower than normal
## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears (RED, HAPPY SKY) ## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears (RED, HAPPY SKY)
If you are running in window mode, you can see an error pop-up window with the title If you are running in window mode, you can see an error pop-up window with the title
`DirectShow Texture3D Sample` and error message `DirectShow Texture3D Sample` and error message
`Could not create source filter to graph! hr=<some number>`. `Could not create source filter to graph! hr=<some number>`.
When running fullscreen, you only hear a windows error sound and the game appears to be frozen When running fullscreen, you only hear a windows error sound and the game appears to be frozen when
when trying to play a background video. trying to play a background video.
You are missing a codec to decode and play the videos. There are different You are missing a codec to decode and play the videos. There are different methods available to get
methods available to get background videos working. Probably, the easiest background videos working. Probably, the easiest solution: grab the CLVSD.ax file and go to Start ->
solution: grab the CLVSD.ax file and go to Start -> Run -> regsvr32 clvsd.ax Run -> regsvr32 clvsd.ax Make sure to run cmd.exe as Administrator, otherwise you will get errors
Make sure to run cmd.exe as Administrator, otherwise you will get errors caused caused by invalid permissions.
by invalid permissions.
## All background videos are looking streched (starting with HAPPY SKY) ## All background videos are looking streched (starting with HAPPY SKY)
The game requires a hardware feature that is not present on newer GPUs.
Refer to the help/config file and turn on the UV fix. The game requires a hardware feature that is not present on newer GPUs. Refer to the help/config
file and turn on the UV fix.
## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger ## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger
If songs keep crashing upon start and you get an error message that says If songs keep crashing upon start and you get an error message that says
``` ```
DirectShow Texture3D Sample DirectShow Texture3D Sample
Could not create source filter to graph! hr=0x80040266 Could not create source filter to graph! hr=0x80040266
``` ```
despite having the codec (CLVSD.ax) installed, turn off debugging output
(refer to the help/config file) or use a CLVSD.ax codec which has the debugger despite having the codec (CLVSD.ax) installed, turn off debugging output (refer to the help/config
checks removed. file) or use a CLVSD.ax codec which has the debugger checks removed.
## I used the auto timebase option and/or limited my refresh rate but the songs are still going offsync ## I used the auto timebase option and/or limited my refresh rate but the songs are still going offsync
There aren't many options left. The old games were developed for specific
hardware and are not guaranteed to work well on (especially) newer hardware. There aren't many options left. The old games were developed for specific hardware and are not
Multiple monitor setups can also have a bad impact on a stable refresh rate. guaranteed to work well on (especially) newer hardware. Multiple monitor setups can also have a bad
Try a setup with just a single monitor you want to use for gameplay physically impact on a stable refresh rate. Try a setup with just a single monitor you want to use for gameplay
connected. Furthermore, dedicated and tested/verified hardware by other users physically connected. Furthermore, dedicated and tested/verified hardware by other users is
is recommended if you want to save yourself a lot of fiddling. recommended if you want to save yourself a lot of fiddling.
## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler ## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler
Many modern monitors/TVs cannot upscale 640x480 output properly. This can lead to
over-/underscan, bad image quality or even latency caused by the upscaler of the device Many modern monitors/TVs cannot upscale 640x480 output properly. This can lead to over-/underscan,
you are using. bad image quality or even latency caused by the upscaler of the device you are using. If one or
If one or multiple of these issues apply, use the built in scaling options by setting multiple of these issues apply, use the built in scaling options by setting
*gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution *gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution to scale to.
to scale to. Usually, you want to set this to the monitor's native resolution, e.g. Usually, you want to set this to the monitor's native resolution, e.g. 1920x1080 for full HD. You
1920x1080 for full HD. You can play around with a few different filters using can play around with a few different filters using *gfx.scale_back_buffer_filter* which impacts
*gfx.scale_back_buffer_filter* which impacts image quality/blurriness on upscaling. image quality/blurriness on upscaling.

View File

@ -1,104 +1,101 @@
# Game list # Game list
The following games are compatible with this version of iidxhook: The following games are compatible with this version of iidxhook:
* DistorteD
- DistorteD
The games must be bootstrapped using [inject](../inject.md). The games must be bootstrapped using [inject](../inject.md).
# Data setup and running the game # Data setup and running the game
Ensure your folder with your unpacked data looks like this: Ensure your folder with your unpacked data looks like this:
- JAx (Game binary revision folder where 'x' can be A, B, C, D, E, F, G) - JAx (Game binary revision folder where 'x' can be A, B, C, D, E, F, G)
- data - data
- sidcode.txt - sidcode.txt
Any further files are optional and not required to just run the game. Any further files are optional and not required to just run the game.
Unpack the package containing iidxhook2 into the revision folder of your choice. Unpack the package containing iidxhook2 into the revision folder of your choice. Most likely, you
Most likely, you want to target the latest revision you have to run the latest want to target the latest revision you have to run the latest binary of the game with any bugfixes
binary of the game with any bugfixes by developers. by developers.
If you don't run this on old hardware that uses an analog version of a Realtek If you don't run this on old hardware that uses an analog version of a Realtek integrated sound
integrated sound chip, you have to replace RtEffect.dll with a stubbed/patched chip, you have to replace RtEffect.dll with a stubbed/patched version (RtEffect_patched.dll).
version (RtEffect_patched.dll). Otherwise, the game might crash instantly when Otherwise, the game might crash instantly when trying to start it.
trying to start it.
Run the gamestart-13.bat file as admin. Run the gamestart-13.bat file as admin.
# Configuring iidxhook # Configuring iidxhook
The hook library can be configured via cmd arguments or a configuration file. The hook library can be configured via cmd arguments or a configuration file. The latter is
The latter is generated (*iidxhook.conf* in the same directory) on the first generated (*iidxhook.conf* in the same directory) on the first start of the game using the
start of the game using the gamestart-13.bat file. It contains default values gamestart-13.bat file. It contains default values for all available parameters and comments
for all available parameters and comments explaining each parameter. Please explaining each parameter. Please follow the comments when configuring your setup.
follow the comments when configuring your setup.
Add the argument *-h* when running gamestart-13.bat Add the argument *-h* when running gamestart-13.bat (e.g. *gamestart-13.bat -h*) to print help/usage
(e.g. *gamestart-13.bat -h*) to print help/usage information with a list of information with a list of all available parameters. Every parameter can be either set as command
all available parameters. Every parameter can be either set as command line line argument or using a configuration file.
argument or using a configuration file.
To set a parameter from the command line, just add it as an argument after the bat file like this
To set a parameter from the command line, just add it as an argument after
the bat file like this
``` ```
gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true
``` ```
The syntax for the "key=value" is the same as in the config file. Make sure The syntax for the "key=value" is the same as in the config file. Make sure to have a pre-ceeding
to have a pre-ceeding "-p" for every parameter added. "-p" for every parameter added.
However, if a parameter is specifed in the configuration file and as a command However, if a parameter is specifed in the configuration file and as a command line argument, the
line argument, the command line argument overrides the config file's value. command line argument overrides the config file's value.
# Use d3d8to9 wrapper # Use d3d8to9 wrapper
In order to use the gfx feature patches, e.g. window mode, monitor check, In order to use the gfx feature patches, e.g. window mode, monitor check, frame rate locking,
frame rate locking, framebuffer up/-downscaling etc. you **must** use the framebuffer up/-downscaling etc. you **must** use the d3d8to9 wrapper library (get it from the
d3d8to9 wrapper library (get it from the bemanitools-supplement package). bemanitools-supplement package). Bemanitools removed the old d3d8 hooking module to provide native
Bemanitools removed the old d3d8 hooking module to provide native d3d8 hooks d3d8 hooks due to compatibility and maintainability reasons.
due to compatibility and maintainability reasons.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you have to set a valid PCBID in the If you want to run the games online, you have to set a valid PCBID in the configuration file or as a
configuration file or as a command line argument. You also have to set the command line argument. You also have to set the url of the eamuse server you want to connect to.
url of the eamuse server you want to connect to.
Run the game with the gamestart-13.bat file and enable network on the operator Run the game with the gamestart-13.bat file and enable network on the operator menu. When enabled,
menu. When enabled, the game seems to hang and expects you to power the game seems to hang and expects you to power cycle the machine (i.e. quit the game and restart
cycle the machine (i.e. quit the game and restart it). it).
# Real hardware support # Real hardware support
## USB IO (ezusb) ## USB IO (ezusb)
Use the specific iidxio API implementations, e.g. iidxio-ezusb.dll to use Use the specific iidxio API implementations, e.g. iidxio-ezusb.dll to use an old C02 EZUSB IO board,
an old C02 EZUSB IO board, to run the game on real hardware. Thanks to a common to run the game on real hardware. Thanks to a common abstraction layer, you can also use more modern
abstraction layer, you can also use more modern IO, e.g. IO2 boards with IO, e.g. IO2 boards with iidxio-ezusb2.dll, even with old games that do not support them.
iidxio-ezusb2.dll, even with old games that do not support them.
## Slotted/Wave pass card readers ## Slotted/Wave pass card readers
Replace the default *eamio.dll* with the *eamio-icca.dll* and have either your Replace the default *eamio.dll* with the *eamio-icca.dll* and have either your slotted (IIDX, DDR
slotted (IIDX, DDR Supernova or GF/DM type) or new wave pass card readers Supernova or GF/DM type) or new wave pass card readers conencted and and assigned to *COM1*.
conencted and and assigned to *COM1*.
### ICCA device settings (device manager) ### ICCA device settings (device manager)
* Port: COM1
* BAUD rate: 57600
* Data bits: 8
* Parity: None
* Stop bits: 1
* Flow control: None
If you encounter issues after the game opened the device, e.g. application - Port: COM1
stuck, try a USB <-> COM dongle instead of using one of the COM ports of the - BAUD rate: 57600
mainboard. - Data bits: 8
- Parity: None
- Stop bits: 1
- Flow control: None
If you encounter issues after the game opened the device, e.g. application stuck, try a USB \<-> COM
dongle instead of using one of the COM ports of the mainboard.
# Known bugs # Known bugs
## USBIO (FM-DL TIMEOUT) ## USBIO (FM-DL TIMEOUT)
IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this
happens, run the game again. IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this happens, run the game
again.
# Troubleshooting and FAQ # Troubleshooting and FAQ
@ -107,93 +104,106 @@ happens, run the game again.
See [this](#Use-d3d8to9-wrapper) section. See [this](#Use-d3d8to9-wrapper) section.
## The game does not run "well" (frame drops, drifting offsync etc) ## The game does not run "well" (frame drops, drifting offsync etc)
This can be related to various issues: This can be related to various issues:
* Make sure to run the game as (true) Administrator especially on Windows 7 and
newer. This will also get rid of various other errors (see below) that are - Make sure to run the game as (true) Administrator especially on Windows 7 and newer. This will
related to permission issues. also get rid of various other errors (see below) that are related to permission issues.
* Run the game's process with a higher priority: - Run the game's process with a higher priority:
``` ```
start "" /relatime "gamestart.bat" start "" /relatime "gamestart.bat"
``` ```
* Enforce v-sync enabled in your GPU settings.
* Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) - Enforce v-sync enabled in your GPU settings.
that is not jumping around. Use the timebase feature of one of the newer games to - Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) that is not
check that or enable iidxhook's timebase and check the log output for the jumping around. Use the timebase feature of one of the newer games to check that or enable
determined value. Run this a few times and check if the results differ. iidxhook's timebase and check the log output for the determined value. Run this a few times and
* Use iidxhook's frame rate limiter feature (see further below) to software lock check if the results differ.
the refresh rate. This might be necessary on Windows 7 and newer for D3D8 games, - Use iidxhook's frame rate limiter feature (see further below) to software lock the refresh rate.
e.g. iidx 9 to 12, which seem to ignore GPU side v-sync. This might be necessary on Windows 7 and newer for D3D8 games, e.g. iidx 9 to 12, which seem to
* Use iidxhook's auto timebase feature (see further below) or set a pre-determined ignore GPU side v-sync.
value to cut down start-up times. - Use iidxhook's auto timebase feature (see further below) or set a pre-determined value to cut down
start-up times.
### The game still stutters (randomly) and drifts off-sync ### The game still stutters (randomly) and drifts off-sync
If this concerns a d3d8 based game, i.e. IIDX 9 to 13, use the d3d8to9 wrapper from
the bemanitools-supplement package (follow the included instructions). If this concerns a d3d8 based game, i.e. IIDX 9 to 13, use the d3d8to9 wrapper from the
bemanitools-supplement package (follow the included instructions).
## "NETWORK WARNING" instead of "NETWORK OK" ## "NETWORK WARNING" instead of "NETWORK OK"
This can be caused by: This can be caused by:
* Invalid PCBID
* Firewall blocking connections - Invalid PCBID
* Invalid eamuse url or port specified - Firewall blocking connections
* Game is not run using the Administrator account - Invalid eamuse url or port specified
Make sure to check these things first - Game is not run using the Administrator account Make sure to check these things first
## My songs are offsync ## My songs are offsync
* Make sure your machine's refresh rate is stable
* If you don't get a close to 59.94hz refresh rate, use the software monitor - Make sure your machine's refresh rate is stable
check/auto timebase that's built into iidxhook (refer to help/config file) - If you don't get a close to 59.94hz refresh rate, use the software monitor check/auto timebase
that's built into iidxhook (refer to help/config file)
## The game crashes instantly ## The game crashes instantly
Replace the original RtEffects.dll with the patched version
RtEffects_patched.dll from utils (for explanation see above). Replace the original RtEffects.dll with the patched version RtEffects_patched.dll from utils (for
explanation see above).
## My game runs too fast ## My game runs too fast
iidxhook can limit the frame rate for you (refer to help/config file) iidxhook can limit the frame rate for you (refer to help/config file)
## My game crashes when I try fullscreen ## My game crashes when I try fullscreen
Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only" Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only"
## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears ## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears
If you are running in window mode, you can see an error pop-up window with the title If you are running in window mode, you can see an error pop-up window with the title
`DirectShow Texture3D Sample` and error message `DirectShow Texture3D Sample` and error message
`Could not create source filter to graph! hr=<some number>`. `Could not create source filter to graph! hr=<some number>`.
When running fullscreen, you only hear a windows error sound and the game appears to be frozen When running fullscreen, you only hear a windows error sound and the game appears to be frozen when
when trying to play a background video. trying to play a background video.
You are missing a codec to decode and play the videos. There are different You are missing a codec to decode and play the videos. There are different methods available to get
methods available to get background videos working. Probably, the easiest background videos working. Probably, the easiest solution: grab the CLVSD.ax file and go to Start ->
solution: grab the CLVSD.ax file and go to Start -> Run -> regsvr32 clvsd.ax Run -> regsvr32 clvsd.ax Make sure to run cmd.exe as Administrator, otherwise you will get errors
Make sure to run cmd.exe as Administrator, otherwise you will get errors caused caused by invalid permissions.
by invalid permissions.
## All background videos are looking streched (starting with HAPPY SKY) ## All background videos are looking streched (starting with HAPPY SKY)
The game requires on a hardware feature that is not present on newer GPUs.
Refer to the help/config file and turn on the UV fix. The game requires on a hardware feature that is not present on newer GPUs. Refer to the help/config
file and turn on the UV fix.
## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger ## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger
If songs keep crashing upon start and you get an error message that says If songs keep crashing upon start and you get an error message that says
``` ```
DirectShow Texture3D Sample DirectShow Texture3D Sample
Could not create source filter to graph! hr=0x80040266 Could not create source filter to graph! hr=0x80040266
``` ```
despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*)
from gamestart or use a CLVSD.ax codec which has the debugger checks removed. despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*) from gamestart or use a
CLVSD.ax codec which has the debugger checks removed.
## I used the auto timebase option and/or limited my refresh rate but the songs are still going offsync ## I used the auto timebase option and/or limited my refresh rate but the songs are still going offsync
There aren't many options left. The old games were developed for specific
hardware and are not guaranteed to work well on (especially) newer hardware. There aren't many options left. The old games were developed for specific hardware and are not
Multiple monitor setups can also have a bad impact on a stable refresh rate. guaranteed to work well on (especially) newer hardware. Multiple monitor setups can also have a bad
Try a setup with just a single monitor you want to use for gameplay physically impact on a stable refresh rate. Try a setup with just a single monitor you want to use for gameplay
connected. Furthermore, dedicated and tested/verified hardware by other users physically connected. Furthermore, dedicated and tested/verified hardware by other users is
is recommended if you want to save yourself a lot of fiddling. recommended if you want to save yourself a lot of fiddling.
## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler ## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler
Many modern monitors/TVs cannot upscale 640x480 output properly. This can lead to
over-/underscan, bad image quality or even latency caused by the upscaler of the device Many modern monitors/TVs cannot upscale 640x480 output properly. This can lead to over-/underscan,
you are using. bad image quality or even latency caused by the upscaler of the device you are using. If one or
If one or multiple of these issues apply, use the built in scaling options by setting multiple of these issues apply, use the built in scaling options by setting
*gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution *gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution to scale to.
to scale to. Usually, you want to set this to the monitor's native resolution, e.g. Usually, you want to set this to the monitor's native resolution, e.g. 1920x1080 for full HD. You
1920x1080 for full HD. You can play around with a few different filters using can play around with a few different filters using *gfx.scale_back_buffer_filter* which impacts
*gfx.scale_back_buffer_filter* which impacts image quality/blurriness on upscaling. image quality/blurriness on upscaling.

View File

@ -1,225 +1,238 @@
# Game list # Game list
The following games are compatible with this version of iidxhook: The following games are compatible with this version of iidxhook:
* GOLD
* DJ Troopers - GOLD
* EMPRESS - DJ Troopers
* SIRIUS - EMPRESS
- SIRIUS
The games must be bootstrapped using [inject](../inject.md). The games must be bootstrapped using [inject](../inject.md).
# Data setup and running the game # Data setup and running the game
Ensure your folder with your unpacked data looks like this: Ensure your folder with your unpacked data looks like this:
- yyyymmddrr (y = year digit, m = month digit, d = day digit, r = revision digit)
revision folder containing game binary and libraries - yyyymmddrr (y = year digit, m = month digit, d = day digit, r = revision digit) revision folder
containing game binary and libraries
- data - data
- sidcode.txt - sidcode.txt
Any further files are optional and not required to just run the game. Any further files are optional and not required to just run the game.
Unpack the package containing iidxhook3 into the revision folder of your choice. Unpack the package containing iidxhook3 into the revision folder of your choice. Most likely, you
Most likely, you want to target the latest revision you have to run the latest want to target the latest revision you have to run the latest binary of the game with any bugfixes
binary of the game with any bugfixes by developers. by developers.
Run the gamestart-XX.bat file as admin where XX is the version of your choice Run the gamestart-XX.bat file as admin where XX is the version of your choice that's supported by
that's supported by this hook. this hook.
# Configuring iidxhook # Configuring iidxhook
The hook library can be configured via cmd arguments or a configuration file. The hook library can be configured via cmd arguments or a configuration file. The latter is
The latter is generated (*iidxhook.conf* in the same directory) on the first generated (*iidxhook.conf* in the same directory) on the first start of the game using the
start of the game using the gamestart-XX.bat file. It contains default values gamestart-XX.bat file. It contains default values for all available parameters and comments
for all available parameters and comments explaining each parameter. Please explaining each parameter. Please follow the comments when configuring your setup.
follow the comments when configuring your setup.
Add the argument *-h* when running gamestart-XX.bat Add the argument *-h* when running gamestart-XX.bat (e.g. *gamestart-XX.bat -h*) to print help/usage
(e.g. *gamestart-XX.bat -h*) to print help/usage information with a list of information with a list of all available parameters. Every parameter can be either set as command
all available parameters. Every parameter can be either set as command line line argument or using a configuration file.
argument or using a configuration file.
To set a parameter from the command line, just add it as an argument after the bat file like this
To set a parameter from the command line, just add it as an argument after
the bat file like this
``` ```
gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true
``` ```
The syntax for the "key=value" is the same as in the config file. Make sure The syntax for the "key=value" is the same as in the config file. Make sure to have a pre-ceeding
to have a pre-ceeding "-p" for every parameter added. "-p" for every parameter added.
However, if a parameter is specifed in the configuration file and as a command However, if a parameter is specifed in the configuration file and as a command line argument, the
line argument, the command line argument overrides the config file's value. command line argument overrides the config file's value.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you have to set a valid PCBID and EAMID If you want to run the games online, you have to set a valid PCBID and EAMID (use the PCBID as the
(use the PCBID as the EAMID) in the configuration file or as a command line EAMID) in the configuration file or as a command line argument. You also have to set the url of the
argument. You also have to set the url of the eamuse server you want to eamuse server you want to connect to.
connect to.
Additional note regarding EAMID: This is new compared to the prior games and Additional note regarding EAMID: This is new compared to the prior games and is provided as the
is provided as the identifier of the "eamuse license" to the server. Depending identifier of the "eamuse license" to the server. Depending on the implementation of the server,
on the implementation of the server, this can lead to authentication failure this can lead to authentication failure resulting in
resulting in
[a network error on boot or warning during gameplay](#network-warning-instead-of-network-ok). [a network error on boot or warning during gameplay](#network-warning-instead-of-network-ok).
Run the game with the gamestart-XX.bat file and enable network on the operator Run the game with the gamestart-XX.bat file and enable network on the operator menu. When enabled,
menu. When enabled, the game seems to hang and expects you to power the game seems to hang and expects you to power cycle the machine (i.e. quit the game and restart
cycle the machine (i.e. quit the game and restart it). it).
# Real hardware support # Real hardware support
## USB IO (ezusb) ## USB IO (ezusb)
Use the specific iidxio API implementations, e.g. iidxio-ezusb2.dll to use Use the specific iidxio API implementations, e.g. iidxio-ezusb2.dll to use the IO2 EZUSB board, to
the IO2 EZUSB board, to run the game on real hardware. Thanks to a common run the game on real hardware. Thanks to a common abstraction layer, you can also use custom IO
abstraction layer, you can also use custom IO boards or whatever Konami hardware boards or whatever Konami hardware is going to be available in the future. Obviously, someone has to
is going to be available in the future. Obviously, someone has to write a write a driver, first.
driver, first.
## Slotted/Wave pass card readers ## Slotted/Wave pass card readers
Replace the default *eamio.dll* with the *eamio-icca.dll* and have either your Replace the default *eamio.dll* with the *eamio-icca.dll* and have either your slotted (IIDX, DDR
slotted (IIDX, DDR Supernova or GF/DM type) or new wave pass card readers Supernova or GF/DM type) or new wave pass card readers conencted and and assigned to *COM1*.
conencted and and assigned to *COM1*.
### ICCA device settings (device manager) ### ICCA device settings (device manager)
* Port: COM1
* BAUD rate: 57600
* Data bits: 8
* Parity: None
* Stop bits: 1
* Flow control: None
If you encounter issues after the game opened the device, e.g. application - Port: COM1
stuck, try a USB <-> COM dongle instead of using one of the COM ports of the - BAUD rate: 57600
mainboard. - Data bits: 8
- Parity: None
- Stop bits: 1
- Flow control: None
If you encounter issues after the game opened the device, e.g. application stuck, try a USB \<-> COM
dongle instead of using one of the COM ports of the mainboard.
# Known bugs # Known bugs
## USBIO (FM-DL TIMEOUT) ## USBIO (FM-DL TIMEOUT)
IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this
happens, run the game again. IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this happens, run the game
again.
# Troubleshooting and FAQ # Troubleshooting and FAQ
## The game does not start at all ## The game does not start at all
If you try to run iidx16 or iidx17 and you see one of the following outputs when
running the gamestart-XX.bat script: If you try to run iidx16 or iidx17 and you see one of the following outputs when running the
gamestart-XX.bat script:
``` ```
Failed to launch hook EXE: 00000002 Failed to launch hook EXE: 00000002
``` ```
or or
``` ```
Injecting: iidxhook3.dll Injecting: iidxhook3.dll
Debug active process Debug active process
Resuming remote process... Resuming remote process...
``` ```
Make sure to check if you are using non htpac'd executables on iidx16 and iidx17 Make sure to check if you are using non htpac'd executables on iidx16 and iidx17 and also non
and also non htpac'd libraries/dll files on iidx17. These won't work with BT htpac'd libraries/dll files on iidx17. These won't work with BT and injecting the hook libraries.
and injecting the hook libraries.
## The game does not run "well" (frame drops, drifting offsync etc) ## The game does not run "well" (frame drops, drifting offsync etc)
This can be related to various issues: This can be related to various issues:
* Make sure to run the game as (true) Administrator especially on Windows 7 and
newer. This will also get rid of various other errors (see below) that are - Make sure to run the game as (true) Administrator especially on Windows 7 and newer. This will
related to permission issues. also get rid of various other errors (see below) that are related to permission issues.
* Run the game's process with a higher priority: - Run the game's process with a higher priority:
``` ```
start "" /relatime "gamestart.bat" start "" /relatime "gamestart.bat"
``` ```
* Enforce v-sync enabled in your GPU settings.
* Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) - Enforce v-sync enabled in your GPU settings.
that is not jumping around. Use the timebase feature of one of the newer games to - Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) that is not
check that or enable iidxhook's timebase and check the log output for the jumping around. Use the timebase feature of one of the newer games to check that or enable
determined value. Run this a few times and check if the results differ. iidxhook's timebase and check the log output for the determined value. Run this a few times and
* Use iidxhook's frame rate limiter feature (see further below) to software lock check if the results differ.
the refresh rate. This might be necessary on Windows 7 and newer for D3D8 games, - Use iidxhook's frame rate limiter feature (see further below) to software lock the refresh rate.
e.g. iidx 9 to 12, which seem to ignore GPU side v-sync. This might be necessary on Windows 7 and newer for D3D8 games, e.g. iidx 9 to 12, which seem to
* Use iidxhook's auto timebase feature (see further below) or set a pre-determined ignore GPU side v-sync.
value to cut down start-up times. - Use iidxhook's auto timebase feature (see further below) or set a pre-determined value to cut down
start-up times.
## "NETWORK WARNING" instead of "NETWORK OK" ## "NETWORK WARNING" instead of "NETWORK OK"
This can be caused by: This can be caused by:
* Invalid PCBID/EAMID: Ensure both are [set to the same ID](#eamuse-network-setup)
* Firewall blocking connections - Invalid PCBID/EAMID: Ensure both are [set to the same ID](#eamuse-network-setup)
* Invalid eamuse url or port specified - Firewall blocking connections
* Game is not run using the Administrator account - Invalid eamuse url or port specified
Make sure to check these things first - Game is not run using the Administrator account Make sure to check these things first
## My songs are offsync ## My songs are offsync
The built-in monitor check just determines if the game should sync to either
59.94 hz (S-Video setting) or 60.04 hz (VGA setting). If you don't have a setup The built-in monitor check just determines if the game should sync to either 59.94 hz (S-Video
that runs on (as close as possible) these values: setting) or 60.04 hz (VGA setting). If you don't have a setup that runs on (as close as possible)
* Make sure your machine's refresh rate is stable, e.g. 60.00x hz. these values:
* If you don't get a close to 59.94hz (S-Video setting) or 60.04 hz
(VGA setting) refresh rate, go an set the output mode in the operator menu - Make sure your machine's refresh rate is stable, e.g. 60.00x hz.
to "VGA" to enforce the game to run chart syncing on 60.04 hz refresh - If you don't get a close to 59.94hz (S-Video setting) or 60.04 hz (VGA setting) refresh rate, go
rate (even if your setup does not have that value). Next, use the software an set the output mode in the operator menu to "VGA" to enforce the game to run chart syncing on
monitor check/auto timebase that's built into iidxhook (refer to cmd 60.04 hz refresh rate (even if your setup does not have that value). Next, use the software
help/configfile). monitor check/auto timebase that's built into iidxhook (refer to cmd help/configfile).
## My game runs too fast ## My game runs too fast
iidxhook can limit the frame rate for you (refer to help/config file) iidxhook can limit the frame rate for you (refer to help/config file)
## My game crashes when I try fullscreen ## My game crashes when I try fullscreen
Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only" Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only"
## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears ## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears
If you are running in window mode, you can see an error pop-up window with the title If you are running in window mode, you can see an error pop-up window with the title
`DirectShow Texture3D Sample` and error message `DirectShow Texture3D Sample` and error message
`Could not create source filter to graph! hr=<some number>`. `Could not create source filter to graph! hr=<some number>`.
When running fullscreen, you only hear a windows error sound and the game appears to be frozen When running fullscreen, you only hear a windows error sound and the game appears to be frozen when
when trying to play a background video. trying to play a background video.
You are missing a codec to decode and play the videos. There are different You are missing a codec to decode and play the videos. There are different methods available to get
methods available to get background videos working. Probably, the easiest background videos working. Probably, the easiest solution: grab the CLVSD.ax file and go to Start ->
solution: grab the CLVSD.ax file and go to Start -> Run -> regsvr32 clvsd.ax Run -> regsvr32 clvsd.ax Make sure to run cmd.exe as Administrator, otherwise you will get errors
Make sure to run cmd.exe as Administrator, otherwise you will get errors caused caused by invalid permissions.
by invalid permissions.
## All background videos are looking streched (starting with HAPPY SKY) ## All background videos are looking streched (starting with HAPPY SKY)
The game requires on a hardware feature that is not present on newer GPUs.
Refer to the help/config file and turn on the UV fix. The game requires on a hardware feature that is not present on newer GPUs. Refer to the help/config
file and turn on the UV fix.
## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger ## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger
If songs keep crashing upon start and you get an error message that says If songs keep crashing upon start and you get an error message that says
``` ```
DirectShow Texture3D Sample DirectShow Texture3D Sample
Could not create source filter to graph! hr=0x80040266 Could not create source filter to graph! hr=0x80040266
``` ```
despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*)
from gamestart or use a CLVSD.ax codec which has the debugger checks removed. despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*) from gamestart or use a
CLVSD.ax codec which has the debugger checks removed.
## I used the auto timebase option and/or limited my refresh rate but the songs are still going offsync ## I used the auto timebase option and/or limited my refresh rate but the songs are still going offsync
There aren't many options left. The old games were developed for specific
hardware and are not guaranteed to work well on (especially) newer hardware. There aren't many options left. The old games were developed for specific hardware and are not
Multiple monitor setups can also have a bad impact on a stable refresh rate. guaranteed to work well on (especially) newer hardware. Multiple monitor setups can also have a bad
Try a setup with just a single monitor you want to use for gameplay physically impact on a stable refresh rate. Try a setup with just a single monitor you want to use for gameplay
connected. Furthermore, dedicated and tested/verified hardware by other users physically connected. Furthermore, dedicated and tested/verified hardware by other users is
is recommended if you want to save yourself a lot of fiddling. recommended if you want to save yourself a lot of fiddling.
## I am getting a message box with a japanese error message and a black window immediately after starting the game ## I am getting a message box with a japanese error message and a black window immediately after starting the game
The game checks the vendor and product ID of your GPU installed. If it doesn't
match a hardcoded whitelist, the game won't boot. Use the option *gfx.pci_id* The game checks the vendor and product ID of your GPU installed. If it doesn't match a hardcoded
either in the config file or as a cmd argument to spoof these IDs. See the whitelist, the game won't boot. Use the option *gfx.pci_id* either in the config file or as a cmd
help message for instructions and possible IDs. argument to spoof these IDs. See the help message for instructions and possible IDs.
## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler ## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler
Many modern monitors/TVs cannot upscale 640x480 output properly. This can lead to
over-/underscan, bad image quality or even latency caused by the upscaler of the device Many modern monitors/TVs cannot upscale 640x480 output properly. This can lead to over-/underscan,
you are using. bad image quality or even latency caused by the upscaler of the device you are using. If one or
If one or multiple of these issues apply, use the built in scaling options by setting multiple of these issues apply, use the built in scaling options by setting
*gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution *gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution to scale to.
to scale to. Usually, you want to set this to the monitor's native resolution, e.g. Usually, you want to set this to the monitor's native resolution, e.g. 1920x1080 for full HD. You
1920x1080 for full HD. You can play around with a few different filters using can play around with a few different filters using *gfx.scale_back_buffer_filter* which impacts
*gfx.scale_back_buffer_filter* which impacts image quality/blurriness on upscaling. image quality/blurriness on upscaling.
## DJTroopers crashes on boot ## DJTroopers crashes on boot
The stock game is buggy and cannot create default backup data correctly. This
can be fixed by using existing backup data from a stock drive or by using The stock game is buggy and cannot create default backup data correctly. This can be fixed by using
the pre-generated backup data for the `e:\` and `f:\` drives provided by existing backup data from a stock drive or by using the pre-generated backup data for the `e:\` and
`f:\` drives provided by
[bemanitools-supplement](https://github.com/djhackersdev/bemanitools-supplement/tree/master/iidx/15#default-backup-data). [bemanitools-supplement](https://github.com/djhackersdev/bemanitools-supplement/tree/master/iidx/15#default-backup-data).
Copy those files to your target location that you have configured to store this Copy those files to your target location that you have configured to store this data, e.g. local
data, e.g. local `e\` and `f\` folders or the target `e:\` and `f:\` volumes. `e\` and `f\` folders or the target `e:\` and `f:\` volumes.

View File

@ -1,7 +1,8 @@
# Game list # Game list
The following games are compatible with this version of iidxhook: The following games are compatible with this version of iidxhook:
* Resort Anthem CN (狂热节拍 IIDX)
- Resort Anthem CN (狂热节拍 IIDX)
The games must be bootstrapped using [inject.exe](../inject.md). The games must be bootstrapped using [inject.exe](../inject.md).
@ -9,5 +10,5 @@ The games must be bootstrapped using [inject.exe](../inject.md).
Resort Anthem CN (狂热节拍 IIDX): Resort Anthem CN (狂热节拍 IIDX):
* Does not have NETWORK function - Does not have NETWORK function
* Game doesn't used card readers - Game doesn't used card readers

View File

@ -1,29 +1,33 @@
# Game list # Game list
The following games are compatible with this version of iidxhook: The following games are compatible with this version of iidxhook:
* Resort Anthem
- Resort Anthem
The games must be bootstrapped using [launcher](../launcher.md). The games must be bootstrapped using [launcher](../launcher.md).
# Data setup and running the game # Data setup and running the game
We assume that you are using a clean/vanilla data dump. Ensure your ("concents") We assume that you are using a clean/vanilla data dump. Ensure your ("concents") folder with your
folder with your unpacked data looks like this: unpacked data looks like this:
- data - data
- modules - modules
- prop - prop
* Copy/Move all files from the *modules* directory to the root folder, so they * Copy/Move all files from the *modules* directory to the root folder, so they are located next to
are located next to the *data* and *prop* folders. the *data* and *prop* folders.
* Copy all files from *prop/defaults* to the *prop* folder. * Copy all files from *prop/defaults* to the *prop* folder.
* Create a new file *app-config.xml* in the *prop* folder with the following * Create a new file *app-config.xml* in the *prop* folder with the following content:
content:
``` ```
<?xml version="1.0"?> <?xml version="1.0"?>
<param></param> <param></param>
``` ```
* Setup proper paths for *dev/nvram* and *dev/raw* in *prop/avs-config.xml* by
replacing the *<fs>*-block in that file with the following block: - Setup proper paths for *dev/nvram* and *dev/raw* in *prop/avs-config.xml* by replacing the
*<fs>*-block in that file with the following block:
``` ```
<fs> <fs>
<root> <root>
@ -41,182 +45,190 @@ replacing the *<fs>*-block in that file with the following block:
<nr_filedesc __type="u16">256</nr_filedesc> <nr_filedesc __type="u16">256</nr_filedesc>
</fs> </fs>
``` ```
* Unpack the package containing iidxhook4 into the root folder so iidxhook4.dll
and all other files are located in the same folder as *data*, *prop*, - Unpack the package containing iidxhook4 into the root folder so iidxhook4.dll and all other files
*bm2dx.dll*, etc. are located in the same folder as *data*, *prop*, *bm2dx.dll*, etc.
* Run the gamestart-18.bat file as admin. - Run the gamestart-18.bat file as admin.
# Configuring iidxhook # Configuring iidxhook
The hook library can be configured via cmd arguments or a configuration file. The hook library can be configured via cmd arguments or a configuration file. The latter is
The latter is generated (*iidxhook-18.conf* in the same directory) on the first generated (*iidxhook-18.conf* in the same directory) on the first start of the game using the
start of the game using the gamestart-18.bat file. It contains default values gamestart-18.bat file. It contains default values for all available parameters and comments
for all available parameters and comments explaining each parameter. Please explaining each parameter. Please follow the comments when configuring your setup.
follow the comments when configuring your setup.
Add the argument *-h* when running gamestart-18.bat Add the argument *-h* when running gamestart-18.bat (e.g. *gamestart-18.bat -h*) to print help/usage
(e.g. *gamestart-18.bat -h*) to print help/usage information with a list of information with a list of all available parameters. Every parameter can be either set as command
all available parameters. Every parameter can be either set as command line line argument or using a configuration file.
argument or using a configuration file.
To set a parameter from the command line, just add it as an argument after the bat file like this
To set a parameter from the command line, just add it as an argument after
the bat file like this
``` ```
gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true
``` ```
The syntax for the "key=value" is the same as in the config file. Make sure The syntax for the "key=value" is the same as in the config file. Make sure to have a pre-ceeding
to have a pre-ceeding "-p" for every parameter added. "-p" for every parameter added.
However, if a parameter is specifed in the configuration file and as a command However, if a parameter is specifed in the configuration file and as a command line argument, the
line argument, the command line argument overrides the config file's value. command line argument overrides the config file's value.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you need a valid PCBID and the service URL. If you want to run the games online, you need a valid PCBID and the service URL. Open
Open *prop/ea3-config.xml* and set the values of the *ea3/id/pcbid* and *prop/ea3-config.xml* and set the values of the *ea3/id/pcbid* and *ea3/network/services* nodes
*ea3/network/services* nodes accordingly. accordingly.
Run the game with the gamestart-18.bat file and enable network on the operator Run the game with the gamestart-18.bat file and enable network on the operator menu. When enabled,
menu. When enabled, the game seems to hang and expects you to power the game seems to hang and expects you to power cycle the machine (i.e. quit the game and restart
cycle the machine (i.e. quit the game and restart it). it).
# Real hardware support # Real hardware support
## USB IO (ezusb) ## USB IO (ezusb)
You have the following options: You have the following options:
* Set `io.disable_io_emu=true` in the `iidxhook.conf` file to not hook ezusb
IO communication with an emulation layer. The game will directly talk to the IO. - Set `io.disable_io_emu=true` in the `iidxhook.conf` file to not hook ezusb IO communication with
The game supports the ezusb (C02) as well as ezusb FX2 (IO2) boards. an emulation layer. The game will directly talk to the IO. The game supports the ezusb (C02) as
* Set `io.disable_io_emu=false` in the `iidxhook.conf` file. well as ezusb FX2 (IO2) boards.
Use the specific iidxio API implementations, e.g. `iidxio-ezusb2.dll` to use - Set `io.disable_io_emu=false` in the `iidxhook.conf` file. Use the specific iidxio API
the IO2 EZUSB board. The common `iidxio` abstraction layer also allows you to implementations, e.g. `iidxio-ezusb2.dll` to use the IO2 EZUSB board. The common `iidxio`
use custom IO boards or whatever Konami hardware is going to be available in abstraction layer also allows you to use custom IO boards or whatever Konami hardware is going to
the future. Obviously, someone has to write an imlementation of the `iidxio` be available in the future. Obviously, someone has to write an imlementation of the `iidxio` API,
API, first. first.
## Slotted/Wave pass card readers ## Slotted/Wave pass card readers
You have the following options: You have the following options:
* Set `io.disable_card_reader_emu=true` in the `iidxhook.conf` file to not hook
card reader communication with an emulation layer. The game will directly talk - Set `io.disable_card_reader_emu=true` in the `iidxhook.conf` file to not hook card reader
to the real readers though this only supports whatever readers the game communication with an emulation layer. The game will directly talk to the real readers though this
directly supports (slotted readers) only supports whatever readers the game directly supports (slotted readers)
* Set `io.disable_card_reader_emu=false` in the `iidxhook.conf` file. - Set `io.disable_card_reader_emu=false` in the `iidxhook.conf` file. Replace the default
Replace the default `eamio.dll` with the `eamio-icca.dll` and have either your `eamio.dll` with the `eamio-icca.dll` and have either your slotted (IIDX, DDR Supernova or GF/DM
slotted (IIDX, DDR Supernova or GF/DM type) or new wave pass card readers type) or new wave pass card readers conencted and and assigned to `COM1`. Other custom
conencted and and assigned to `COM1`. Other custom implementations of of the implementations of of the `eamio` API also work.
`eamio` API also work.
### ICCA device settings (device manager) ### ICCA device settings (device manager)
* Port: COM1
* BAUD rate: 57600
* Data bits: 8
* Parity: None
* Stop bits: 1
* Flow control: None
If you encounter issues after the game opened the device, e.g. application - Port: COM1
stuck, try a USB <-> COM dongle instead of using one of the COM ports of the - BAUD rate: 57600
mainboard. - Data bits: 8
- Parity: None
- Stop bits: 1
- Flow control: None
If you encounter issues after the game opened the device, e.g. application stuck, try a USB \<-> COM
dongle instead of using one of the COM ports of the mainboard.
# Known bugs # Known bugs
## USBIO (FM-DL TIMEOUT) ## USBIO (FM-DL TIMEOUT)
IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this
happens, run the game again. IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this happens, run the game
again.
# Troubleshooting and FAQ # Troubleshooting and FAQ
## The game does not run "well" (frame drops, drifting offsync etc) ## The game does not run "well" (frame drops, drifting offsync etc)
This can be related to various issues: This can be related to various issues:
* Make sure to run the game as (true) Administrator especially on Windows 7 and
newer. This will also get rid of various other errors (see below) that are - Make sure to run the game as (true) Administrator especially on Windows 7 and newer. This will
related to permission issues. also get rid of various other errors (see below) that are related to permission issues.
* Run the game's process with a higher priority: - Run the game's process with a higher priority:
``` ```
start "" /relatime "gamestart.bat" start "" /relatime "gamestart.bat"
``` ```
* Enforce v-sync enabled in your GPU settings.
* Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) - Enforce v-sync enabled in your GPU settings.
that is not jumping around. Use the timebase feature of one of the newer games to - Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) that is not
check that or enable iidxhook's timebase and check the log output for the jumping around. Use the timebase feature of one of the newer games to check that or enable
determined value. Run this a few times and check if the results differ. iidxhook's timebase and check the log output for the determined value. Run this a few times and
* Use iidxhook's frame rate limiter feature (see further below) to software lock check if the results differ.
the refresh rate. This might be necessary on Windows 7 and newer for D3D8 games, - Use iidxhook's frame rate limiter feature (see further below) to software lock the refresh rate.
e.g. iidx 9 to 12, which seem to ignore GPU side v-sync. This might be necessary on Windows 7 and newer for D3D8 games, e.g. iidx 9 to 12, which seem to
* Use iidxhook's auto timebase feature (see further below) or set a pre-determined ignore GPU side v-sync.
value to cut down start-up times. - Use iidxhook's auto timebase feature (see further below) or set a pre-determined value to cut down
start-up times.
## "NETWORK WARNING" instead of "NETWORK OK" ## "NETWORK WARNING" instead of "NETWORK OK"
This can be caused by: This can be caused by:
* Invalid PCBID
* Firewall blocking connections - Invalid PCBID
* Invalid eamuse url or port specified - Firewall blocking connections
* Game is not run using the Administrator account - Invalid eamuse url or port specified
Make sure to check these things first - Game is not run using the Administrator account Make sure to check these things first
## My songs are offsync ## My songs are offsync
The built-in monitor check just determines if the game should sync to either
59.94 hz (S-Video setting) or 60.04 hz (VGA setting). If you don't have a setup The built-in monitor check just determines if the game should sync to either 59.94 hz (S-Video
that runs on (as close as possible) these values: setting) or 60.04 hz (VGA setting). If you don't have a setup that runs on (as close as possible)
* Make sure your machine's refresh rate is stable, e.g. 60.00x hz. these values:
* If you don't get a close to 59.94hz (S-Video setting) or 60.04 hz
(VGA setting) refresh rate, go an set the output mode in the operator menu - Make sure your machine's refresh rate is stable, e.g. 60.00x hz.
to "VGA" to enforce the game to run chart syncing on 60.04 hz refresh - If you don't get a close to 59.94hz (S-Video setting) or 60.04 hz (VGA setting) refresh rate, go
rate (even if your setup does not have that value). Next, use the software an set the output mode in the operator menu to "VGA" to enforce the game to run chart syncing on
monitor check/auto timebase that's built into iidxhook (refer to cmd 60.04 hz refresh rate (even if your setup does not have that value). Next, use the software
help/configfile). monitor check/auto timebase that's built into iidxhook (refer to cmd help/configfile).
## My game runs too fast ## My game runs too fast
iidxhook can limit the frame rate for you (refer to help/config file) iidxhook can limit the frame rate for you (refer to help/config file)
## My game crashes when I try fullscreen ## My game crashes when I try fullscreen
Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only" Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only"
## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears ## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears
If you are running in window mode, you can see an error pop-up window with the title If you are running in window mode, you can see an error pop-up window with the title
`DirectShow Texture3D Sample` and error message `DirectShow Texture3D Sample` and error message
`Could not create source filter to graph! hr=<some number>`. `Could not create source filter to graph! hr=<some number>`.
When running fullscreen, you only hear a windows error sound and the game appears to be frozen When running fullscreen, you only hear a windows error sound and the game appears to be frozen when
when trying to play a background video. trying to play a background video.
You are missing a codec to decode and play the videos. There are different You are missing a codec to decode and play the videos. There are different methods available to get
methods available to get background videos working. Probably, the easiest background videos working. Probably, the easiest solution: grab the CLVSD.ax file and go to Start ->
solution: grab the CLVSD.ax file and go to Start -> Run -> regsvr32 clvsd.ax Run -> regsvr32 clvsd.ax Make sure to run cmd.exe as Administrator, otherwise you will get errors
Make sure to run cmd.exe as Administrator, otherwise you will get errors caused caused by invalid permissions.
by invalid permissions.
## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger ## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger
If songs keep crashing upon start and you get an error message that says If songs keep crashing upon start and you get an error message that says
``` ```
DirectShow Texture3D Sample DirectShow Texture3D Sample
Could not create source filter to graph! hr=0x80040266 Could not create source filter to graph! hr=0x80040266
``` ```
despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*)
from gamestart or use a CLVSD.ax codec which has the debugger checks removed. despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*) from gamestart or use a
CLVSD.ax codec which has the debugger checks removed.
## I used the auto timebase option and/or limited my refresh rate but the songs are still going offsync ## I used the auto timebase option and/or limited my refresh rate but the songs are still going offsync
There aren't many options left. The old games were developed for specific
hardware and are not guaranteed to work well on (especially) newer hardware. There aren't many options left. The old games were developed for specific hardware and are not
Multiple monitor setups can also have a bad impact on a stable refresh rate. guaranteed to work well on (especially) newer hardware. Multiple monitor setups can also have a bad
Try a setup with just a single monitor you want to use for gameplay physically impact on a stable refresh rate. Try a setup with just a single monitor you want to use for gameplay
connected. Furthermore, dedicated and tested/verified hardware by other users physically connected. Furthermore, dedicated and tested/verified hardware by other users is
is recommended if you want to save yourself a lot of fiddling. recommended if you want to save yourself a lot of fiddling.
## I am getting a message box with a japanese error message and a black window immediately after starting the game ## I am getting a message box with a japanese error message and a black window immediately after starting the game
The game checks the vendor and product ID of your GPU installed. If it doesn't
match a hardcoded whitelist, the game won't boot. Use the option *gfx.pci_id* The game checks the vendor and product ID of your GPU installed. If it doesn't match a hardcoded
either in the config file or as a cmd argument to spoof these IDs. See the whitelist, the game won't boot. Use the option *gfx.pci_id* either in the config file or as a cmd
help message for instructions and possible IDs. argument to spoof these IDs. See the help message for instructions and possible IDs.
## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler ## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler
Many modern monitors/TVs cannot upscale 640x480 output properly. This can lead to
over-/underscan, bad image quality or even latency caused by the upscaler of the device Many modern monitors/TVs cannot upscale 640x480 output properly. This can lead to over-/underscan,
you are using. bad image quality or even latency caused by the upscaler of the device you are using. If one or
If one or multiple of these issues apply, use the built in scaling options by setting multiple of these issues apply, use the built in scaling options by setting
*gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution *gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution to scale to.
to scale to. Usually, you want to set this to the monitor's native resolution, e.g. Usually, you want to set this to the monitor's native resolution, e.g. 1920x1080 for full HD. You
1920x1080 for full HD. You can play around with a few different filters using can play around with a few different filters using *gfx.scale_back_buffer_filter* which impacts
*gfx.scale_back_buffer_filter* which impacts image quality/blurriness on upscaling. image quality/blurriness on upscaling.

View File

@ -1,7 +1,8 @@
# Game list # Game list
The following games are compatible with this version of iidxhook: The following games are compatible with this version of iidxhook:
* tricoro CN (狂热节拍 IIDX 2)
- tricoro CN (狂热节拍 IIDX 2)
The games must be bootstrapped using [inject.exe](../inject.md). The games must be bootstrapped using [inject.exe](../inject.md).
@ -9,7 +10,7 @@ The games must be bootstrapped using [inject.exe](../inject.md).
tricoro CN (狂热节拍 IIDX 2): tricoro CN (狂热节拍 IIDX 2):
* Game uses Lincle engine - Game uses Lincle engine
* Identifier being JDZ - Identifier being JDZ
* Does not have NETWORK function - Does not have NETWORK function
* Game doesn't used card readers - Game doesn't used card readers

View File

@ -1,29 +1,33 @@
# Game list # Game list
The following games are compatible with this version of iidxhook: The following games are compatible with this version of iidxhook:
* Lincle
- Lincle
The games must be bootstrapped using [launcher](../launcher.md). The games must be bootstrapped using [launcher](../launcher.md).
# Data setup and running the game # Data setup and running the game
We assume that you are using a clean/vanilla data dump. Ensure your ("concents") We assume that you are using a clean/vanilla data dump. Ensure your ("concents") folder with your
folder with your unpacked data looks like this: unpacked data looks like this:
- data - data
- modules - modules
- prop - prop
* Copy/Move all files from the *modules* directory to the root folder, so they * Copy/Move all files from the *modules* directory to the root folder, so they are located next to
are located next to the *data* and *prop* folders. the *data* and *prop* folders.
* Copy all files from *prop/defaults* to the *prop* folder. * Copy all files from *prop/defaults* to the *prop* folder.
* Create a new file *app-config.xml* in the *prop* folder with the following * Create a new file *app-config.xml* in the *prop* folder with the following content:
content:
``` ```
<?xml version="1.0"?> <?xml version="1.0"?>
<param></param> <param></param>
``` ```
* Setup proper paths for *dev/nvram* and *dev/raw* in *prop/avs-config.xml* by
replacing the *<fs>*-block in that file with the following block: - Setup proper paths for *dev/nvram* and *dev/raw* in *prop/avs-config.xml* by replacing the
*<fs>*-block in that file with the following block:
``` ```
<fs> <fs>
<root> <root>
@ -41,170 +45,178 @@ replacing the *<fs>*-block in that file with the following block:
<nr_filedesc __type="u16">256</nr_filedesc> <nr_filedesc __type="u16">256</nr_filedesc>
</fs> </fs>
``` ```
* Unpack the package containing iidxhook5 into the root folder so iidxhook5.dll
and all other files are located in the same folder as *data*, *prop*, - Unpack the package containing iidxhook5 into the root folder so iidxhook5.dll and all other files
*bm2dx.dll*, etc. are located in the same folder as *data*, *prop*, *bm2dx.dll*, etc.
* Run the gamestart-19.bat file as admin. - Run the gamestart-19.bat file as admin.
# Configuring iidxhook # Configuring iidxhook
The hook library can be configured via cmd arguments or a configuration file. The hook library can be configured via cmd arguments or a configuration file. The latter is
The latter is generated (*iidxhook-19.conf* in the same directory) on the first generated (*iidxhook-19.conf* in the same directory) on the first start of the game using the
start of the game using the gamestart-19.bat file. It contains default values gamestart-19.bat file. It contains default values for all available parameters and comments
for all available parameters and comments explaining each parameter. Please explaining each parameter. Please follow the comments when configuring your setup.
follow the comments when configuring your setup.
Add the argument *-h* when running gamestart-19.bat Add the argument *-h* when running gamestart-19.bat (e.g. *gamestart-19.bat -h*) to print help/usage
(e.g. *gamestart-19.bat -h*) to print help/usage information with a list of information with a list of all available parameters. Every parameter can be either set as command
all available parameters. Every parameter can be either set as command line line argument or using a configuration file.
argument or using a configuration file.
To set a parameter from the command line, just add it as an argument after the bat file like this
To set a parameter from the command line, just add it as an argument after
the bat file like this
``` ```
gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true
``` ```
The syntax for the "key=value" is the same as in the config file. Make sure The syntax for the "key=value" is the same as in the config file. Make sure to have a pre-ceeding
to have a pre-ceeding "-p" for every parameter added. "-p" for every parameter added.
However, if a parameter is specifed in the configuration file and as a command However, if a parameter is specifed in the configuration file and as a command line argument, the
line argument, the command line argument overrides the config file's value. command line argument overrides the config file's value.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you need a valid PCBID and the service URL. If you want to run the games online, you need a valid PCBID and the service URL. Open
Open *prop/ea3-config.xml* and set the values of the *ea3/id/pcbid* and *prop/ea3-config.xml* and set the values of the *ea3/id/pcbid* and *ea3/network/services* nodes
*ea3/network/services* nodes accordingly. accordingly.
Run the game with the gamestart-19.bat file and enable network on the operator Run the game with the gamestart-19.bat file and enable network on the operator menu. When enabled,
menu. When enabled, the game seems to hang and expects you to power the game seems to hang and expects you to power cycle the machine (i.e. quit the game and restart
cycle the machine (i.e. quit the game and restart it). it).
# Real hardware support # Real hardware support
## USB IO (ezusb) ## USB IO (ezusb)
You have the following options: You have the following options:
* Set `io.disable_io_emu=true` in the `iidxhook.conf` file to not hook ezusb
IO communication with an emulation layer. The game will directly talk to the IO. - Set `io.disable_io_emu=true` in the `iidxhook.conf` file to not hook ezusb IO communication with
The game supports the ezusb (C02) as well as ezusb FX2 (IO2) boards. an emulation layer. The game will directly talk to the IO. The game supports the ezusb (C02) as
* Set `io.disable_io_emu=false` in the `iidxhook.conf` file. well as ezusb FX2 (IO2) boards.
Use the specific iidxio API implementations, e.g. `iidxio-ezusb2.dll` to use - Set `io.disable_io_emu=false` in the `iidxhook.conf` file. Use the specific iidxio API
the IO2 EZUSB board. The common `iidxio` abstraction layer also allows you to implementations, e.g. `iidxio-ezusb2.dll` to use the IO2 EZUSB board. The common `iidxio`
use custom IO boards or whatever Konami hardware is going to be available in abstraction layer also allows you to use custom IO boards or whatever Konami hardware is going to
the future. Obviously, someone has to write an imlementation of the `iidxio` be available in the future. Obviously, someone has to write an imlementation of the `iidxio` API,
API, first. first.
## Slotted/Wave pass card readers ## Slotted/Wave pass card readers
You have the following options: You have the following options:
* Set `io.disable_card_reader_emu=true` in the `iidxhook.conf` file to not hook
card reader communication with an emulation layer. The game will directly talk - Set `io.disable_card_reader_emu=true` in the `iidxhook.conf` file to not hook card reader
to the real readers though this only supports whatever readers the game communication with an emulation layer. The game will directly talk to the real readers though this
directly supports (wave pass readers) only supports whatever readers the game directly supports (wave pass readers)
* Set `io.disable_card_reader_emu=false` in the `iidxhook.conf` file. - Set `io.disable_card_reader_emu=false` in the `iidxhook.conf` file. Replace the default
Replace the default `eamio.dll` with the `eamio-icca.dll` and have either your `eamio.dll` with the `eamio-icca.dll` and have either your slotted (IIDX, DDR Supernova or GF/DM
slotted (IIDX, DDR Supernova or GF/DM type) or new wave pass card readers type) or new wave pass card readers conencted and and assigned to `COM1`. Other custom
conencted and and assigned to `COM1`. Other custom implementations of of the implementations of of the `eamio` API also work.
`eamio` API also work.
### ICCA device settings (device manager) ### ICCA device settings (device manager)
* Port: COM1
* BAUD rate: 57600
* Data bits: 8
* Parity: None
* Stop bits: 1
* Flow control: None
If you encounter issues after the game opened the device, e.g. application - Port: COM1
stuck, try a USB <-> COM dongle instead of using one of the COM ports of the - BAUD rate: 57600
mainboard. - Data bits: 8
- Parity: None
- Stop bits: 1
- Flow control: None
If you encounter issues after the game opened the device, e.g. application stuck, try a USB \<-> COM
dongle instead of using one of the COM ports of the mainboard.
# Known bugs # Known bugs
## USBIO (FM-DL TIMEOUT) ## USBIO (FM-DL TIMEOUT)
IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this
happens, run the game again. IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this happens, run the game
again.
# Troubleshooting and FAQ # Troubleshooting and FAQ
## The game does not run "well" (frame drops, drifting offsync etc) ## The game does not run "well" (frame drops, drifting offsync etc)
This can be related to various issues: This can be related to various issues:
* Make sure to run the game as (true) Administrator especially on Windows 7 and
newer. This will also get rid of various other errors (see below) that are - Make sure to run the game as (true) Administrator especially on Windows 7 and newer. This will
related to permission issues. also get rid of various other errors (see below) that are related to permission issues.
* Run the game's process with a higher priority: - Run the game's process with a higher priority:
``` ```
start "" /relatime "gamestart.bat" start "" /relatime "gamestart.bat"
``` ```
* Enforce v-sync enabled in your GPU settings.
* Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) - Enforce v-sync enabled in your GPU settings.
that is not jumping around. Use the timebase feature of one of the newer games to - Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) that is not
check that or enable iidxhook's timebase and check the log output for the jumping around. Use the timebase feature of one of the newer games to check that or enable
determined value. Run this a few times and check if the results differ. iidxhook's timebase and check the log output for the determined value. Run this a few times and
* Use iidxhook's frame rate limiter feature (see further below) to software lock check if the results differ.
the refresh rate. This might be necessary on Windows 7 and newer for D3D8 games, - Use iidxhook's frame rate limiter feature (see further below) to software lock the refresh rate.
e.g. iidx 9 to 12, which seem to ignore GPU side v-sync. This might be necessary on Windows 7 and newer for D3D8 games, e.g. iidx 9 to 12, which seem to
* Use iidxhook's auto timebase feature (see further below) or set a pre-determined ignore GPU side v-sync.
value to cut down start-up times. - Use iidxhook's auto timebase feature (see further below) or set a pre-determined value to cut down
start-up times.
## "NETWORK WARNING" instead of "NETWORK OK" ## "NETWORK WARNING" instead of "NETWORK OK"
This can be caused by: This can be caused by:
* Invalid PCBID
* Firewall blocking connections - Invalid PCBID
* Invalid eamuse url or port specified - Firewall blocking connections
* Game is not run using the Administrator account - Invalid eamuse url or port specified
Make sure to check these things first - Game is not run using the Administrator account Make sure to check these things first
## My songs are offsync ## My songs are offsync
From this version onwards (if you use the very final data of Lincle), the game
comes with a built-in auto timebase option ("monitor check" on startup) which From this version onwards (if you use the very final data of Lincle), the game comes with a built-in
dynamically, detects the refresh rate of your current setup. Thus, BT5's auto timebase option ("monitor check" on startup) which dynamically, detects the refresh rate of
timebase option is not included from this hook version onwards, anymore. your current setup. Thus, BT5's timebase option is not included from this hook version onwards,
Ensure that refresh rate displayed is very stable, e.g. 60.00x hz, and the anymore. Ensure that refresh rate displayed is very stable, e.g. 60.00x hz, and the game should be
game should be able to provide you with a smooth and sync game experience. able to provide you with a smooth and sync game experience.
## My game runs too fast ## My game runs too fast
iidxhook can limit the frame rate for you (refer to help/config file) iidxhook can limit the frame rate for you (refer to help/config file)
## My game crashes when I try fullscreen ## My game crashes when I try fullscreen
Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only" Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only"
## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears ## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears
If you are running in window mode, you can see an error pop-up window with the title If you are running in window mode, you can see an error pop-up window with the title
`DirectShow Texture3D Sample` and error message `DirectShow Texture3D Sample` and error message
`Could not create source filter to graph! hr=<some number>`. `Could not create source filter to graph! hr=<some number>`.
When running fullscreen, you only hear a windows error sound and the game appears to be frozen When running fullscreen, you only hear a windows error sound and the game appears to be frozen when
when trying to play a background video. trying to play a background video.
You are missing a codec to decode and play the videos. There are different You are missing a codec to decode and play the videos. There are different methods available to get
methods available to get background videos working. Probably, the easiest background videos working. Probably, the easiest solution: grab the CLVSD.ax file and go to Start ->
solution: grab the CLVSD.ax file and go to Start -> Run -> regsvr32 clvsd.ax Run -> regsvr32 clvsd.ax Make sure to run cmd.exe as Administrator, otherwise you will get errors
Make sure to run cmd.exe as Administrator, otherwise you will get errors caused caused by invalid permissions.
by invalid permissions.
## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger ## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger
If songs keep crashing upon start and you get an error message that says If songs keep crashing upon start and you get an error message that says
``` ```
DirectShow Texture3D Sample DirectShow Texture3D Sample
Could not create source filter to graph! hr=0x80040266 Could not create source filter to graph! hr=0x80040266
``` ```
despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*)
from gamestart or use a CLVSD.ax codec which has the debugger checks removed. despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*) from gamestart or use a
CLVSD.ax codec which has the debugger checks removed.
## I am getting a message box with a japanese error message and a black window immediately after starting the game ## I am getting a message box with a japanese error message and a black window immediately after starting the game
The game checks the vendor and product ID of your GPU installed. If it doesn't
match a hardcoded whitelist, the game won't boot. Use the option *gfx.pci_id* The game checks the vendor and product ID of your GPU installed. If it doesn't match a hardcoded
either in the config file or as a cmd argument to spoof these IDs. See the whitelist, the game won't boot. Use the option *gfx.pci_id* either in the config file or as a cmd
help message for instructions and possible IDs. argument to spoof these IDs. See the help message for instructions and possible IDs.
## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler ## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler
Many modern monitors/TVs cannot upscale 640x480 output properly. This can lead to
over-/underscan, bad image quality or even latency caused by the upscaler of the device Many modern monitors/TVs cannot upscale 640x480 output properly. This can lead to over-/underscan,
you are using. bad image quality or even latency caused by the upscaler of the device you are using. If one or
If one or multiple of these issues apply, use the built in scaling options by setting multiple of these issues apply, use the built in scaling options by setting
*gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution *gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution to scale to.
to scale to. Usually, you want to set this to the monitor's native resolution, e.g. Usually, you want to set this to the monitor's native resolution, e.g. 1920x1080 for full HD. You
1920x1080 for full HD. You can play around with a few different filters using can play around with a few different filters using *gfx.scale_back_buffer_filter* which impacts
*gfx.scale_back_buffer_filter* which impacts image quality/blurriness on upscaling. image quality/blurriness on upscaling.

View File

@ -1,29 +1,33 @@
# Game list # Game list
The following games are compatible with this version of iidxhook: The following games are compatible with this version of iidxhook:
* Tricoro
- Tricoro
The games must be bootstrapped using [launcher](../launcher.md). The games must be bootstrapped using [launcher](../launcher.md).
# Data setup and running the game # Data setup and running the game
We assume that you are using a clean/vanilla data dump. Ensure your ("concents") We assume that you are using a clean/vanilla data dump. Ensure your ("concents") folder with your
folder with your unpacked data looks like this: unpacked data looks like this:
- data - data
- modules - modules
- prop - prop
* Copy/Move all files from the *modules* directory to the root folder, so they * Copy/Move all files from the *modules* directory to the root folder, so they are located next to
are located next to the *data* and *prop* folders. the *data* and *prop* folders.
* Copy all files from *prop/defaults* to the *prop* folder. * Copy all files from *prop/defaults* to the *prop* folder.
* Create a new file *app-config.xml* in the *prop* folder with the following * Create a new file *app-config.xml* in the *prop* folder with the following content:
content:
``` ```
<?xml version="1.0"?> <?xml version="1.0"?>
<param></param> <param></param>
``` ```
* Setup proper paths for *dev/nvram* and *dev/raw* in *prop/avs-config.xml* by
replacing the *<fs>*-block in that file with the following block: - Setup proper paths for *dev/nvram* and *dev/raw* in *prop/avs-config.xml* by replacing the
*<fs>*-block in that file with the following block:
``` ```
<fs> <fs>
<root> <root>
@ -41,8 +45,9 @@ replacing the *<fs>*-block in that file with the following block:
<nr_filedesc __type="u16">256</nr_filedesc> <nr_filedesc __type="u16">256</nr_filedesc>
</fs> </fs>
``` ```
* Setup valid logger configuration by replacing the *<log>*-block in
*prop/avs-config.xml* with: - Setup valid logger configuration by replacing the *<log>*-block in *prop/avs-config.xml* with:
``` ```
<log> <log>
<netsci> <netsci>
@ -52,165 +57,173 @@ replacing the *<fs>*-block in that file with the following block:
<level __type="str">misc</level> <level __type="str">misc</level>
</log> </log>
``` ```
* Unpack the package containing iidxhook6 into the root folder so iidxhook6.dll
and all other files are located in the same folder as *data*, *prop*, - Unpack the package containing iidxhook6 into the root folder so iidxhook6.dll and all other files
*bm2dx.dll*, etc. are located in the same folder as *data*, *prop*, *bm2dx.dll*, etc.
* Run the gamestart-20.bat file as admin. - Run the gamestart-20.bat file as admin.
# Configuring iidxhook # Configuring iidxhook
The hook library can be configured via cmd arguments or a configuration file. The hook library can be configured via cmd arguments or a configuration file. The latter is
The latter is generated (*iidxhook-20.conf* in the same directory) on the first generated (*iidxhook-20.conf* in the same directory) on the first start of the game using the
start of the game using the gamestart-20.bat file. It contains default values gamestart-20.bat file. It contains default values for all available parameters and comments
for all available parameters and comments explaining each parameter. Please explaining each parameter. Please follow the comments when configuring your setup.
follow the comments when configuring your setup.
Add the argument *-h* when running gamestart-20.bat Add the argument *-h* when running gamestart-20.bat (e.g. *gamestart-20.bat -h*) to print help/usage
(e.g. *gamestart-20.bat -h*) to print help/usage information with a list of information with a list of all available parameters. Every parameter can be either set as command
all available parameters. Every parameter can be either set as command line line argument or using a configuration file.
argument or using a configuration file.
To set a parameter from the command line, just add it as an argument after the bat file like this
To set a parameter from the command line, just add it as an argument after
the bat file like this
``` ```
gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true
``` ```
The syntax for the "key=value" is the same as in the config file. Make sure The syntax for the "key=value" is the same as in the config file. Make sure to have a pre-ceeding
to have a pre-ceeding "-p" for every parameter added. "-p" for every parameter added.
However, if a parameter is specifed in the configuration file and as a command However, if a parameter is specifed in the configuration file and as a command line argument, the
line argument, the command line argument overrides the config file's value. command line argument overrides the config file's value.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you need a valid PCBID and the service URL. If you want to run the games online, you need a valid PCBID and the service URL. Open
Open *prop/ea3-config.xml* and set the values of the *ea3/id/pcbid* and *prop/ea3-config.xml* and set the values of the *ea3/id/pcbid* and *ea3/network/services* nodes
*ea3/network/services* nodes accordingly. accordingly.
Run the game with the gamestart-20.bat file and enable network on the operator Run the game with the gamestart-20.bat file and enable network on the operator menu. When enabled,
menu. When enabled, the game seems to hang and expects you to power the game seems to hang and expects you to power cycle the machine (i.e. quit the game and restart
cycle the machine (i.e. quit the game and restart it). it).
# Real hardware support # Real hardware support
## USB IO (ezusb) ## USB IO (ezusb)
You have the following options: You have the following options:
* Set `io.disable_io_emu=true` in the `iidxhook.conf` file to not hook ezusb
IO communication with an emulation layer. The game will directly talk to the IO. - Set `io.disable_io_emu=true` in the `iidxhook.conf` file to not hook ezusb IO communication with
The game supports the ezusb (C02) as well as ezusb FX2 (IO2) boards. an emulation layer. The game will directly talk to the IO. The game supports the ezusb (C02) as
* Set `io.disable_io_emu=false` in the `iidxhook.conf` file. well as ezusb FX2 (IO2) boards.
Use the specific iidxio API implementations, e.g. `iidxio-ezusb2.dll` to use - Set `io.disable_io_emu=false` in the `iidxhook.conf` file. Use the specific iidxio API
the IO2 EZUSB board. The common `iidxio` abstraction layer also allows you to implementations, e.g. `iidxio-ezusb2.dll` to use the IO2 EZUSB board. The common `iidxio`
use custom IO boards or whatever Konami hardware is going to be available in abstraction layer also allows you to use custom IO boards or whatever Konami hardware is going to
the future. Obviously, someone has to write an imlementation of the `iidxio` be available in the future. Obviously, someone has to write an imlementation of the `iidxio` API,
API, first. first.
## Slotted/Wave pass card readers ## Slotted/Wave pass card readers
You have the following options: You have the following options:
* Set `io.disable_card_reader_emu=true` in the `iidxhook.conf` file to not hook
card reader communication with an emulation layer. The game will directly talk - Set `io.disable_card_reader_emu=true` in the `iidxhook.conf` file to not hook card reader
to the real readers though this only supports whatever readers the game communication with an emulation layer. The game will directly talk to the real readers though this
directly supports (wave pass readers) only supports whatever readers the game directly supports (wave pass readers)
* Set `io.disable_card_reader_emu=false` in the `iidxhook.conf` file. - Set `io.disable_card_reader_emu=false` in the `iidxhook.conf` file. Replace the default
Replace the default `eamio.dll` with the `eamio-icca.dll` and have either your `eamio.dll` with the `eamio-icca.dll` and have either your slotted (IIDX, DDR Supernova or GF/DM
slotted (IIDX, DDR Supernova or GF/DM type) or new wave pass card readers type) or new wave pass card readers conencted and and assigned to `COM1`. Other custom
conencted and and assigned to `COM1`. Other custom implementations of of the implementations of of the `eamio` API also work.
`eamio` API also work.
### ICCA device settings (device manager) ### ICCA device settings (device manager)
* Port: COM1
* BAUD rate: 57600
* Data bits: 8
* Parity: None
* Stop bits: 1
* Flow control: None
If you encounter issues after the game opened the device, e.g. application - Port: COM1
stuck, try a USB <-> COM dongle instead of using one of the COM ports of the - BAUD rate: 57600
mainboard. - Data bits: 8
- Parity: None
- Stop bits: 1
- Flow control: None
If you encounter issues after the game opened the device, e.g. application stuck, try a USB \<-> COM
dongle instead of using one of the COM ports of the mainboard.
# Known bugs # Known bugs
## USBIO (FM-DL TIMEOUT) ## USBIO (FM-DL TIMEOUT)
IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this
happens, run the game again. IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this happens, run the game
again.
# Troubleshooting and FAQ # Troubleshooting and FAQ
## The game does not run "well" (frame drops, drifting offsync etc) ## The game does not run "well" (frame drops, drifting offsync etc)
This can be related to various issues: This can be related to various issues:
* Make sure to run the game as (true) Administrator especially on Windows 7 and
newer. This will also get rid of various other errors (see below) that are - Make sure to run the game as (true) Administrator especially on Windows 7 and newer. This will
related to permission issues. also get rid of various other errors (see below) that are related to permission issues.
* Run the game's process with a higher priority: - Run the game's process with a higher priority:
``` ```
start "" /relatime "gamestart.bat" start "" /relatime "gamestart.bat"
``` ```
* Enforce v-sync enabled in your GPU settings.
* Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) - Enforce v-sync enabled in your GPU settings.
that is not jumping around. Use the timebase feature of one of the newer games to - Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) that is not
check that or enable iidxhook's timebase and check the log output for the jumping around. Use the timebase feature of one of the newer games to check that or enable
determined value. Run this a few times and check if the results differ. iidxhook's timebase and check the log output for the determined value. Run this a few times and
check if the results differ.
## "NETWORK WARNING" instead of "NETWORK OK" ## "NETWORK WARNING" instead of "NETWORK OK"
This can be caused by: This can be caused by:
* Invalid PCBID
* Firewall blocking connections - Invalid PCBID
* Invalid eamuse url or port specified - Firewall blocking connections
* Game is not run using the Administrator account - Invalid eamuse url or port specified
Make sure to check these things first - Game is not run using the Administrator account Make sure to check these things first
## My songs are offsync ## My songs are offsync
From this version onwards (or Lincle very final revision), the game comes with
a built-in auto timebase option ("monitor check" on startup) which From this version onwards (or Lincle very final revision), the game comes with a built-in auto
dynamically, detects the refresh rate of your current setup. Thus, BT5's timebase option ("monitor check" on startup) which dynamically, detects the refresh rate of your
timebase option is not included from this hook version onwards, anymore. current setup. Thus, BT5's timebase option is not included from this hook version onwards, anymore.
Ensure that refresh rate displayed is very stable, e.g. 60.00x hz, and the Ensure that refresh rate displayed is very stable, e.g. 60.00x hz, and the game should be able to
game should be able to provide you with a smooth and sync game experience. provide you with a smooth and sync game experience.
## My game runs too fast ## My game runs too fast
iidxhook can limit the frame rate for you (refer to help/config file) iidxhook can limit the frame rate for you (refer to help/config file)
## My game crashes when I try fullscreen ## My game crashes when I try fullscreen
Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only" Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only"
## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears ## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears
If you are running in window mode, you can see an error pop-up window with the title If you are running in window mode, you can see an error pop-up window with the title
`DirectShow Texture3D Sample` and error message `DirectShow Texture3D Sample` and error message
`Could not create source filter to graph! hr=<some number>`. `Could not create source filter to graph! hr=<some number>`.
When running fullscreen, you only hear a windows error sound and the game appears to be frozen When running fullscreen, you only hear a windows error sound and the game appears to be frozen when
when trying to play a background video. trying to play a background video.
You are missing a codec to decode and play the videos. There are different You are missing a codec to decode and play the videos. There are different methods available to get
methods available to get background videos working. Probably, the easiest background videos working. Probably, the easiest solution: grab the CLVSD.ax file and go to Start ->
solution: grab the CLVSD.ax file and go to Start -> Run -> regsvr32 clvsd.ax Run -> regsvr32 clvsd.ax Make sure to run cmd.exe as Administrator, otherwise you will get errors
Make sure to run cmd.exe as Administrator, otherwise you will get errors caused caused by invalid permissions.
by invalid permissions.
## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger ## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger
If songs keep crashing upon start and you get an error message that says If songs keep crashing upon start and you get an error message that says
``` ```
DirectShow Texture3D Sample DirectShow Texture3D Sample
Could not create source filter to graph! hr=0x80040266 Could not create source filter to graph! hr=0x80040266
``` ```
despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*)
from gamestart or use a CLVSD.ax codec which has the debugger checks removed. despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*) from gamestart or use a
CLVSD.ax codec which has the debugger checks removed.
## I am getting a message box with a japanese error message and a black window immediately after starting the game ## I am getting a message box with a japanese error message and a black window immediately after starting the game
The game checks the vendor and product ID of your GPU installed. If it doesn't
match a hardcoded whitelist, the game won't boot. Use the option *gfx.pci_id* The game checks the vendor and product ID of your GPU installed. If it doesn't match a hardcoded
either in the config file or as a cmd argument to spoof these IDs. See the whitelist, the game won't boot. Use the option *gfx.pci_id* either in the config file or as a cmd
help message for instructions and possible IDs. argument to spoof these IDs. See the help message for instructions and possible IDs.
## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler ## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler
Many modern monitors/TVs cannot upscale some lower resolutions, e.g. 640x480, properly.
This can lead to over-/underscan, bad image quality or even latency caused by the upscaler Many modern monitors/TVs cannot upscale some lower resolutions, e.g. 640x480, properly. This can
of the device you are using. lead to over-/underscan, bad image quality or even latency caused by the upscaler of the device you
If one or multiple of these issues apply, use the built in scaling options by setting are using. If one or multiple of these issues apply, use the built in scaling options by setting
*gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution *gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution to scale to.
to scale to. Usually, you want to set this to the monitor's native resolution, e.g. Usually, you want to set this to the monitor's native resolution, e.g. 1920x1080 for full HD. You
1920x1080 for full HD. You can play around with a few different filters using can play around with a few different filters using *gfx.scale_back_buffer_filter* which impacts
*gfx.scale_back_buffer_filter* which impacts image quality/blurriness on upscaling. image quality/blurriness on upscaling.

View File

@ -1,32 +1,36 @@
# Game list # Game list
The following games are compatible with this version of iidxhook: The following games are compatible with this version of iidxhook:
* SPADA
* PENDUAL - SPADA
* copula - PENDUAL
* SINOBUZ - copula
- SINOBUZ
The games must be bootstrapped using [launcher](../launcher.md). The games must be bootstrapped using [launcher](../launcher.md).
# Data setup and running the game # Data setup and running the game
We assume that you are using a clean/vanilla data dump. Ensure your ("concents") We assume that you are using a clean/vanilla data dump. Ensure your ("concents") folder with your
folder with your unpacked data looks like this: unpacked data looks like this:
- data - data
- modules - modules
- prop - prop
* Copy/Move all files from the *modules* directory to the root folder, so they * Copy/Move all files from the *modules* directory to the root folder, so they are located next to
are located next to the *data* and *prop* folders. the *data* and *prop* folders.
* Copy all files from *prop/defaults* to the *prop* folder. * Copy all files from *prop/defaults* to the *prop* folder.
* Create a new file *app-config.xml* in the *prop* folder with the following * Create a new file *app-config.xml* in the *prop* folder with the following content:
content:
``` ```
<?xml version="1.0"?> <?xml version="1.0"?>
<param></param> <param></param>
``` ```
* Setup proper paths for *dev/nvram* and *dev/raw* in *prop/avs-config.xml* by
replacing the *<fs>*-block in that file with the following block: - Setup proper paths for *dev/nvram* and *dev/raw* in *prop/avs-config.xml* by replacing the
*<fs>*-block in that file with the following block:
``` ```
<fs> <fs>
<root> <root>
@ -44,8 +48,9 @@ replacing the *<fs>*-block in that file with the following block:
<nr_filedesc __type="u16">256</nr_filedesc> <nr_filedesc __type="u16">256</nr_filedesc>
</fs> </fs>
``` ```
* Setup valid logger configuration by replacing the *<log>*-block in
*prop/avs-config.xml* with: - Setup valid logger configuration by replacing the *<log>*-block in *prop/avs-config.xml* with:
``` ```
<log> <log>
<netsci> <netsci>
@ -55,168 +60,174 @@ replacing the *<fs>*-block in that file with the following block:
<level __type="str">misc</level> <level __type="str">misc</level>
</log> </log>
``` ```
* Unpack the package containing iidxhook7 into the root folder so iidxhook7.dll
and all other files are located in the same folder as *data*, *prop*, - Unpack the package containing iidxhook7 into the root folder so iidxhook7.dll and all other files
*bm2dx.dll*, etc. are located in the same folder as *data*, *prop*, *bm2dx.dll*, etc.
* Run the gamestart-XX.bat file as admin. Where XX matches the version you - Run the gamestart-XX.bat file as admin. Where XX matches the version you want to run.
want to run.
# Configuring iidxhook # Configuring iidxhook
The hook library can be configured via cmd arguments or a configuration file. The hook library can be configured via cmd arguments or a configuration file. The latter is
The latter is generated (*iidxhook-XX.conf* in the same directory) on the first generated (*iidxhook-XX.conf* in the same directory) on the first start of the game using the
start of the game using the gamestart-XX.bat file (again, XX matches your target gamestart-XX.bat file (again, XX matches your target game version). It contains default values for
game version). It contains default values for all available parameters and all available parameters and comments explaining each parameter. Please follow the comments when
comments explaining each parameter. Please follow the comments when configuring configuring your setup.
your setup.
Add the argument *-h* when running gamestart-XX.bat Add the argument *-h* when running gamestart-XX.bat (e.g. *gamestart-XX.bat -h*) to print help/usage
(e.g. *gamestart-XX.bat -h*) to print help/usage information with a list of information with a list of all available parameters. Every parameter can be either set as command
all available parameters. Every parameter can be either set as command line line argument or using a configuration file.
argument or using a configuration file.
To set a parameter from the command line, just add it as an argument after the bat file like this
To set a parameter from the command line, just add it as an argument after
the bat file like this
``` ```
gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true
``` ```
The syntax for the "key=value" is the same as in the config file. Make sure The syntax for the "key=value" is the same as in the config file. Make sure to have a pre-ceeding
to have a pre-ceeding "-p" for every parameter added. "-p" for every parameter added.
However, if a parameter is specifed in the configuration file and as a command However, if a parameter is specifed in the configuration file and as a command line argument, the
line argument, the command line argument overrides the config file's value. command line argument overrides the config file's value.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you need a valid PCBID and the service URL. If you want to run the games online, you need a valid PCBID and the service URL. Open
Open *prop/ea3-config.xml* and set the values of the *ea3/id/pcbid* and *prop/ea3-config.xml* and set the values of the *ea3/id/pcbid* and *ea3/network/services* nodes
*ea3/network/services* nodes accordingly. accordingly.
Run the game with the gamestart-XX.bat file and enable network on the operator Run the game with the gamestart-XX.bat file and enable network on the operator menu. When enabled,
menu. When enabled, the game seems to hang and expects you to power the game seems to hang and expects you to power cycle the machine (i.e. quit the game and restart
cycle the machine (i.e. quit the game and restart it). it).
# Real hardware support # Real hardware support
## USB IO (ezusb) ## USB IO (ezusb)
You have the following options: You have the following options:
* Set `io.disable_io_emu=true` in the `iidxhook.conf` file to not hook ezusb
IO communication with an emulation layer. The game will directly talk to the IO. - Set `io.disable_io_emu=true` in the `iidxhook.conf` file to not hook ezusb IO communication with
The game supports the ezusb (C02) as well as ezusb FX2 (IO2) boards. an emulation layer. The game will directly talk to the IO. The game supports the ezusb (C02) as
* Set `io.disable_io_emu=false` in the `iidxhook.conf` file. well as ezusb FX2 (IO2) boards.
Use the specific iidxio API implementations, e.g. `iidxio-ezusb2.dll` to use - Set `io.disable_io_emu=false` in the `iidxhook.conf` file. Use the specific iidxio API
the IO2 EZUSB board. The common `iidxio` abstraction layer also allows you to implementations, e.g. `iidxio-ezusb2.dll` to use the IO2 EZUSB board. The common `iidxio`
use custom IO boards or whatever Konami hardware is going to be available in abstraction layer also allows you to use custom IO boards or whatever Konami hardware is going to
the future. Obviously, someone has to write an imlementation of the `iidxio` be available in the future. Obviously, someone has to write an imlementation of the `iidxio` API,
API, first. first.
## Slotted/Wave pass card readers ## Slotted/Wave pass card readers
You have the following options: You have the following options:
* Set `io.disable_card_reader_emu=true` in the `iidxhook.conf` file to not hook
card reader communication with an emulation layer. The game will directly talk - Set `io.disable_card_reader_emu=true` in the `iidxhook.conf` file to not hook card reader
to the real readers though this only supports whatever readers the game communication with an emulation layer. The game will directly talk to the real readers though this
directly supports (wave pass readers) only supports whatever readers the game directly supports (wave pass readers)
* Set `io.disable_card_reader_emu=false` in the `iidxhook.conf` file. - Set `io.disable_card_reader_emu=false` in the `iidxhook.conf` file. Replace the default
Replace the default `eamio.dll` with the `eamio-icca.dll` and have either your `eamio.dll` with the `eamio-icca.dll` and have either your slotted (IIDX, DDR Supernova or GF/DM
slotted (IIDX, DDR Supernova or GF/DM type) or new wave pass card readers type) or new wave pass card readers conencted and and assigned to `COM1`. Other custom
conencted and and assigned to `COM1`. Other custom implementations of of the implementations of of the `eamio` API also work.
`eamio` API also work.
### ICCA device settings (device manager) ### ICCA device settings (device manager)
* Port: COM1
* BAUD rate: 57600
* Data bits: 8
* Parity: None
* Stop bits: 1
* Flow control: None
If you encounter issues after the game opened the device, e.g. application - Port: COM1
stuck, try a USB <-> COM dongle instead of using one of the COM ports of the - BAUD rate: 57600
mainboard. - Data bits: 8
- Parity: None
- Stop bits: 1
- Flow control: None
If you encounter issues after the game opened the device, e.g. application stuck, try a USB \<-> COM
dongle instead of using one of the COM ports of the mainboard.
# Known bugs # Known bugs
## USBIO (FM-DL TIMEOUT) ## USBIO (FM-DL TIMEOUT)
IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this
happens, run the game again. IIDX occasionally fails to boot with a "USBIO (FM-DL TIMEOUT)" error. If this happens, run the game
again.
# Troubleshooting and FAQ # Troubleshooting and FAQ
## The game does not run "well" (frame drops, drifting offsync etc) ## The game does not run "well" (frame drops, drifting offsync etc)
This can be related to various issues: This can be related to various issues:
* Make sure to run the game as (true) Administrator especially on Windows 7 and
newer. This will also get rid of various other errors (see below) that are - Make sure to run the game as (true) Administrator especially on Windows 7 and newer. This will
related to permission issues. also get rid of various other errors (see below) that are related to permission issues.
* Run the game's process with a higher priority: - Run the game's process with a higher priority:
``` ```
start "" /relatime "gamestart.bat" start "" /relatime "gamestart.bat"
``` ```
* Enforce v-sync enabled in your GPU settings.
* Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) - Enforce v-sync enabled in your GPU settings.
that is not jumping around. Use the timebase feature of one of the newer games to - Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) that is not
check that or enable iidxhook's timebase and check the log output for the jumping around. Use the timebase feature of one of the newer games to check that or enable
determined value. Run this a few times and check if the results differ. iidxhook's timebase and check the log output for the determined value. Run this a few times and
check if the results differ.
## "NETWORK WARNING" instead of "NETWORK OK" ## "NETWORK WARNING" instead of "NETWORK OK"
This can be caused by: This can be caused by:
* Invalid PCBID
* Firewall blocking connections - Invalid PCBID
* Invalid eamuse url or port specified - Firewall blocking connections
* Game is not run using the Administrator account - Invalid eamuse url or port specified
Make sure to check these things first - Game is not run using the Administrator account Make sure to check these things first
## My songs are offsync ## My songs are offsync
From IIDX 20 (or Lincle very final revision) onwards, the game comes with
a built-in auto timebase option ("monitor check" on startup) which From IIDX 20 (or Lincle very final revision) onwards, the game comes with a built-in auto timebase
dynamically, detects the refresh rate of your current setup. Thus, BT5's option ("monitor check" on startup) which dynamically, detects the refresh rate of your current
timebase option is not included from this hook version onwards, anymore. setup. Thus, BT5's timebase option is not included from this hook version onwards, anymore. Ensure
Ensure that refresh rate displayed is very stable, e.g. 60.00x hz, and the that refresh rate displayed is very stable, e.g. 60.00x hz, and the game should be able to provide
game should be able to provide you with a smooth and sync game experience. you with a smooth and sync game experience.
## My game runs too fast ## My game runs too fast
iidxhook can limit the frame rate for you (refer to help/config file) iidxhook can limit the frame rate for you (refer to help/config file)
## My game crashes when I try fullscreen ## My game crashes when I try fullscreen
Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only" Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only"
## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears ## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears
If you are running in window mode, you can see an error pop-up window with the title If you are running in window mode, you can see an error pop-up window with the title
`DirectShow Texture3D Sample` and error message `DirectShow Texture3D Sample` and error message
`Could not create source filter to graph! hr=<some number>`. `Could not create source filter to graph! hr=<some number>`.
When running fullscreen, you only hear a windows error sound and the game appears to be frozen When running fullscreen, you only hear a windows error sound and the game appears to be frozen when
when trying to play a background video. trying to play a background video.
You are missing a codec to decode and play the videos. There are different You are missing a codec to decode and play the videos. There are different methods available to get
methods available to get background videos working. Probably, the easiest background videos working. Probably, the easiest solution: grab the CLVSD.ax file and go to Start ->
solution: grab the CLVSD.ax file and go to Start -> Run -> regsvr32 clvsd.ax Run -> regsvr32 clvsd.ax Make sure to run cmd.exe as Administrator, otherwise you will get errors
Make sure to run cmd.exe as Administrator, otherwise you will get errors caused caused by invalid permissions.
by invalid permissions.
## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger ## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger
If songs keep crashing upon start and you get an error message that says If songs keep crashing upon start and you get an error message that says
``` ```
DirectShow Texture3D Sample DirectShow Texture3D Sample
Could not create source filter to graph! hr=0x80040266 Could not create source filter to graph! hr=0x80040266
``` ```
despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*)
from gamestart or use a CLVSD.ax codec which has the debugger checks removed. despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*) from gamestart or use a
CLVSD.ax codec which has the debugger checks removed.
## I am getting a message box with a japanese error message and a black window immediately after starting the game ## I am getting a message box with a japanese error message and a black window immediately after starting the game
The game checks the vendor and product ID of your GPU installed. If it doesn't
match a hardcoded whitelist, the game won't boot. Use the option *gfx.pci_id* The game checks the vendor and product ID of your GPU installed. If it doesn't match a hardcoded
either in the config file or as a cmd argument to spoof these IDs. See the whitelist, the game won't boot. Use the option *gfx.pci_id* either in the config file or as a cmd
help message for instructions and possible IDs. argument to spoof these IDs. See the help message for instructions and possible IDs.
## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler ## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler
Many modern monitors/TVs cannot upscale some lower resolutions, e.g. 640x480, properly.
This can lead to over-/underscan, bad image quality or even latency caused by the upscaler
of the device you are using.
If one or multiple of these issues apply, use the built in scaling options by setting
*gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution
to scale to. Usually, you want to set this to the monitor's native resolution, e.g.
1920x1080 for full HD. You can play around with a few different filters using
*gfx.scale_back_buffer_filter* which impacts image quality/blurriness on upscaling.
Many modern monitors/TVs cannot upscale some lower resolutions, e.g. 640x480, properly. This can
lead to over-/underscan, bad image quality or even latency caused by the upscaler of the device you
are using. If one or multiple of these issues apply, use the built in scaling options by setting
*gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution to scale to.
Usually, you want to set this to the monitor's native resolution, e.g. 1920x1080 for full HD. You
can play around with a few different filters using *gfx.scale_back_buffer_filter* which impacts
image quality/blurriness on upscaling.

View File

@ -1,8 +1,9 @@
# Game list # Game list
The following games are compatible with this version of iidxhook: The following games are compatible with this version of iidxhook:
* CANNON BALLERS
* Rootage - CANNON BALLERS
- Rootage
The games must be bootstrapped using [launcher](../launcher.md). The games must be bootstrapped using [launcher](../launcher.md).
@ -10,34 +11,37 @@ The games must be bootstrapped using [launcher](../launcher.md).
## Supported versions of Windows ## Supported versions of Windows
This version requires at least Win 7 x64 and will not run, like the This version requires at least Win 7 x64 and will not run, like the former versions, on Win XP x86!
former versions, on Win XP x86!
## Dependencies ## Dependencies
Make sure to have the following dependencies installed: Make sure to have the following dependencies installed:
* DirectX 9
* Visual C++ 2010 Redistributable Package (x64) - DirectX 9
- Visual C++ 2010 Redistributable Package (x64)
## Data setup ## Data setup
We assume that you are using a clean/vanilla data dump. Ensure your ("concents") We assume that you are using a clean/vanilla data dump. Ensure your ("concents") folder with your
folder with your unpacked data looks like this: unpacked data looks like this:
- data - data
- modules - modules
- prop - prop
* Copy/Move all files from the *modules* directory to the root folder, so they * Copy/Move all files from the *modules* directory to the root folder, so they are located next to
are located next to the *data* and *prop* folders. the *data* and *prop* folders.
* Copy all files from *prop/defaults* to the *prop* folder. * Copy all files from *prop/defaults* to the *prop* folder.
* Create a new file *app-config.xml* in the *prop* folder with the following * Create a new file *app-config.xml* in the *prop* folder with the following content:
content:
``` ```
<?xml version="1.0"?> <?xml version="1.0"?>
<param></param> <param></param>
``` ```
* Setup proper paths for *dev/nvram* and *dev/raw* in *prop/avs-config.xml* by
replacing the *<fs>*-block in that file with the following block: - Setup proper paths for *dev/nvram* and *dev/raw* in *prop/avs-config.xml* by replacing the
*<fs>*-block in that file with the following block:
``` ```
<fs> <fs>
<root> <root>
@ -51,174 +55,178 @@ replacing the *<fs>*-block in that file with the following block:
<nr_filedesc __type="u16">256</nr_filedesc> <nr_filedesc __type="u16">256</nr_filedesc>
</fs> </fs>
``` ```
* Unpack the package containing iidxhook8 into the root folder so iidxhook8.dll
and all other files are located in the same folder as *data*, *prop*, - Unpack the package containing iidxhook8 into the root folder so iidxhook8.dll and all other files
*bm2dx.dll*, etc. are located in the same folder as *data*, *prop*, *bm2dx.dll*, etc.
* Run the gamestart-XX.bat file as admin. Where XX matches the version you - Run the gamestart-XX.bat file as admin. Where XX matches the version you want to run.
want to run.
# Configuring iidxhook # Configuring iidxhook
The hook library can be configured via cmd arguments or a configuration file. The hook library can be configured via cmd arguments or a configuration file. The latter is
The latter is generated (*iidxhook-XX.conf* in the same directory) on the first generated (*iidxhook-XX.conf* in the same directory) on the first start of the game using the
start of the game using the gamestart-XX.bat file (again, XX matches your target gamestart-XX.bat file (again, XX matches your target game version). It contains default values for
game version). It contains default values for all available parameters and all available parameters and comments explaining each parameter. Please follow the comments when
comments explaining each parameter. Please follow the comments when configuring configuring your setup.
your setup.
Add the argument *-h* when running gamestart-XX.bat Add the argument *-h* when running gamestart-XX.bat (e.g. *gamestart-XX.bat -h*) to print help/usage
(e.g. *gamestart-XX.bat -h*) to print help/usage information with a list of information with a list of all available parameters. Every parameter can be either set as command
all available parameters. Every parameter can be either set as command line line argument or using a configuration file.
argument or using a configuration file.
To set a parameter from the command line, just add it as an argument after the bat file like this
To set a parameter from the command line, just add it as an argument after
the bat file like this
``` ```
gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true
``` ```
The syntax for the "key=value" is the same as in the config file. Make sure The syntax for the "key=value" is the same as in the config file. Make sure to have a pre-ceeding
to have a pre-ceeding "-p" for every parameter added. "-p" for every parameter added.
However, if a parameter is specifed in the configuration file and as a command However, if a parameter is specifed in the configuration file and as a command line argument, the
line argument, the command line argument overrides the config file's value. command line argument overrides the config file's value.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you need a valid PCBID and the service URL. If you want to run the games online, you need a valid PCBID and the service URL. Open
Open *prop/ea3-config.xml* and set the values of the *ea3/id/pcbid* and *prop/ea3-config.xml* and set the values of the *ea3/id/pcbid* and *ea3/network/services* nodes
*ea3/network/services* nodes accordingly. accordingly.
Run the game with the gamestart-XX.bat file and enable network on the operator Run the game with the gamestart-XX.bat file and enable network on the operator menu. When enabled,
menu. When enabled, the game seems to hang and expects you to power the game seems to hang and expects you to power cycle the machine (i.e. quit the game and restart
cycle the machine (i.e. quit the game and restart it). it).
# Real hardware support # Real hardware support
### BIO2 hardware ### BIO2 hardware
Set `io.disable_bio2_emu=true` in the `iidxhook.conf` file to not hook the BIO2 Set `io.disable_bio2_emu=true` in the `iidxhook.conf` file to not hook the BIO2 communication with
communication with an emulation layer. The game will directly talk to the IO. an emulation layer. The game will directly talk to the IO. In this mode, tthe game supports the BIO2
In this mode, tthe game supports the BIO2 board only. board only.
### Ezusb and other ### Ezusb and other
Set `io.disable_bio2_emu=false` in the `iidxhook.conf` file. Set `io.disable_bio2_emu=false` in the `iidxhook.conf` file. Use the specific iidxio API
Use the specific iidxio API implementations, e.g. `iidxio-ezusb2.dll` to use implementations, e.g. `iidxio-ezusb2.dll` to use the IO2 EZUSB board. The common `iidxio`
the IO2 EZUSB board. The common `iidxio` abstraction layer also allows you to abstraction layer also allows you to use custom IO boards or whatever Konami hardware is going to be
use custom IO boards or whatever Konami hardware is going to be available in available in the future. Obviously, someone has to write an imlementation of the `iidxio` API,
the future. Obviously, someone has to write an imlementation of the `iidxio` first.
API, first.
## Slotted/Wave pass card readers ## Slotted/Wave pass card readers
You have the following options: You have the following options:
* Set `io.disable_card_reader_emu=true` in the `iidxhook.conf` file to not hook
card reader communication with an emulation layer. The game will directly talk - Set `io.disable_card_reader_emu=true` in the `iidxhook.conf` file to not hook card reader
to the real readers though this only supports whatever readers the game communication with an emulation layer. The game will directly talk to the real readers though this
directly supports (wave pass readers) only supports whatever readers the game directly supports (wave pass readers)
* Set `io.disable_card_reader_emu=false` in the `iidxhook.conf` file. - Set `io.disable_card_reader_emu=false` in the `iidxhook.conf` file. Replace the default
Replace the default `eamio.dll` with the `eamio-icca.dll` and have either your `eamio.dll` with the `eamio-icca.dll` and have either your slotted (IIDX, DDR Supernova or GF/DM
slotted (IIDX, DDR Supernova or GF/DM type) or new wave pass card readers type) or new wave pass card readers conencted and and assigned to `COM1`. Other custom
conencted and and assigned to `COM1`. Other custom implementations of of the implementations of of the `eamio` API also work.
`eamio` API also work.
### ICCA device settings (device manager) ### ICCA device settings (device manager)
* Port: COM1
* BAUD rate: 57600
* Data bits: 8
* Parity: None
* Stop bits: 1
* Flow control: None
If you encounter issues after the game opened the device, e.g. application - Port: COM1
stuck, try a USB <-> COM dongle instead of using one of the COM ports of the - BAUD rate: 57600
mainboard. - Data bits: 8
- Parity: None
- Stop bits: 1
- Flow control: None
If you encounter issues after the game opened the device, e.g. application stuck, try a USB \<-> COM
dongle instead of using one of the COM ports of the mainboard.
# Troubleshooting and FAQ # Troubleshooting and FAQ
## The monitor check is showing high fps and I am using a monitor with high refresh rate features, e.g. 120/144hz ## The monitor check is showing high fps and I am using a monitor with high refresh rate features, e.g. 120/144hz
Sync and timing might be screwed up since the game was never meant to run on
such refresh rates. Try setting the option `gfx.forced_refresh_rate` to either
`59` or `60`.
Note: Your GPU driver settings must be configured to allow application overrides Sync and timing might be screwed up since the game was never meant to run on such refresh rates. Try
on vertical sync/refresh rate options. setting the option `gfx.forced_refresh_rate` to either `59` or `60`.
Note: Your GPU driver settings must be configured to allow application overrides on vertical
sync/refresh rate options.
On AMD GPUs, set the "V-Sync" option to `On, unless application specifies`. On AMD GPUs, set the "V-Sync" option to `On, unless application specifies`.
## The game does not run "well" (frame drops, drifting offsync etc) ## The game does not run "well" (frame drops, drifting offsync etc)
This can be related to various issues: This can be related to various issues:
* Make sure to run the game as (true) Administrator especially on Windows 7 and
newer. This will also get rid of various other errors (see below) that are - Make sure to run the game as (true) Administrator especially on Windows 7 and newer. This will
related to permission issues. also get rid of various other errors (see below) that are related to permission issues.
* Run the game's process with a higher priority: - Run the game's process with a higher priority:
``` ```
start "" /relatime "gamestart.bat" start "" /relatime "gamestart.bat"
``` ```
* Enforce v-sync enabled in your GPU settings.
* Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) - Enforce v-sync enabled in your GPU settings.
that is not jumping around. Use the timebase feature of one of the newer games to - Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) that is not
check that or enable iidxhook's timebase and check the log output for the jumping around. Use the timebase feature of one of the newer games to check that or enable
determined value. Run this a few times and check if the results differ. iidxhook's timebase and check the log output for the determined value. Run this a few times and
check if the results differ.
## "NETWORK WARNING" instead of "NETWORK OK" ## "NETWORK WARNING" instead of "NETWORK OK"
This can be caused by: This can be caused by:
* Invalid PCBID
* Firewall blocking connections - Invalid PCBID
* Invalid eamuse url or port specified - Firewall blocking connections
* Game is not run using the Administrator account - Invalid eamuse url or port specified
Make sure to check these things first - Game is not run using the Administrator account Make sure to check these things first
## My songs are offsync ## My songs are offsync
From IIDX 20 (or Lincle very final revision) onwards, the game comes with
a built-in auto timebase option ("monitor check" on startup) which From IIDX 20 (or Lincle very final revision) onwards, the game comes with a built-in auto timebase
dynamically, detects the refresh rate of your current setup. Thus, BT5's option ("monitor check" on startup) which dynamically, detects the refresh rate of your current
timebase option is not included from this hook version onwards, anymore. setup. Thus, BT5's timebase option is not included from this hook version onwards, anymore. Ensure
Ensure that refresh rate displayed is very stable, e.g. 60.00x hz, and the that refresh rate displayed is very stable, e.g. 60.00x hz, and the game should be able to provide
game should be able to provide you with a smooth and sync game experience. you with a smooth and sync game experience.
## My game runs too fast ## My game runs too fast
iidxhook can limit the frame rate for you (refer to help/config file) iidxhook can limit the frame rate for you (refer to help/config file)
## My game crashes when I try fullscreen ## My game crashes when I try fullscreen
Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only" Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only"
## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears ## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears
If you are running in window mode, you can see an error pop-up window with the title If you are running in window mode, you can see an error pop-up window with the title
`DirectShow Texture3D Sample` and error message `DirectShow Texture3D Sample` and error message
`Could not create source filter to graph! hr=<some number>`. `Could not create source filter to graph! hr=<some number>`.
When running fullscreen, you only hear a windows error sound and the game appears to be frozen When running fullscreen, you only hear a windows error sound and the game appears to be frozen when
when trying to play a background video. trying to play a background video.
You are missing a codec to decode and play the videos. There are different You are missing a codec to decode and play the videos. There are different methods available to get
methods available to get background videos working. Probably, the easiest background videos working. Probably, the easiest solution: grab the CLVSD.ax file and go to Start ->
solution: grab the CLVSD.ax file and go to Start -> Run -> regsvr32 clvsd.ax Run -> regsvr32 clvsd.ax Make sure to run cmd.exe as Administrator, otherwise you will get errors
Make sure to run cmd.exe as Administrator, otherwise you will get errors caused caused by invalid permissions.
by invalid permissions.
## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger ## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger
If songs keep crashing upon start and you get an error message that says If songs keep crashing upon start and you get an error message that says
``` ```
DirectShow Texture3D Sample DirectShow Texture3D Sample
Could not create source filter to graph! hr=0x80040266 Could not create source filter to graph! hr=0x80040266
``` ```
despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*)
from gamestart or use a CLVSD.ax codec which has the debugger checks removed. despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*) from gamestart or use a
CLVSD.ax codec which has the debugger checks removed.
## I am getting a message box with a japanese error message and a black window immediately after starting the game ## I am getting a message box with a japanese error message and a black window immediately after starting the game
The game checks the vendor and product ID of your GPU installed. If it doesn't
match a hardcoded whitelist, the game won't boot. Use the option *gfx.pci_id* The game checks the vendor and product ID of your GPU installed. If it doesn't match a hardcoded
either in the config file or as a cmd argument to spoof these IDs. See the whitelist, the game won't boot. Use the option *gfx.pci_id* either in the config file or as a cmd
help message for instructions and possible IDs. argument to spoof these IDs. See the help message for instructions and possible IDs.
## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler ## Over-/underscan, bad image quality or latency caused by my monitor's/TV's upscaler
Many modern monitors/TVs cannot upscale some lower resolutions, e.g. 640x480, properly.
This can lead to over-/underscan, bad image quality or even latency caused by the upscaler Many modern monitors/TVs cannot upscale some lower resolutions, e.g. 640x480, properly. This can
of the device you are using. lead to over-/underscan, bad image quality or even latency caused by the upscaler of the device you
If one or multiple of these issues apply, use the built in scaling options by setting are using. If one or multiple of these issues apply, use the built in scaling options by setting
*gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution *gfx.scale_back_buffer_width* and *gfx.scale_back_buffer_height* to a target resolution to scale to.
to scale to. Usually, you want to set this to the monitor's native resolution, e.g. Usually, you want to set this to the monitor's native resolution, e.g. 1920x1080 for full HD. You
1920x1080 for full HD. You can play around with a few different filters using can play around with a few different filters using *gfx.scale_back_buffer_filter* which impacts
*gfx.scale_back_buffer_filter* which impacts image quality/blurriness on upscaling. image quality/blurriness on upscaling.

View File

@ -1,10 +1,11 @@
# Game list # Game list
The following games are compatible with this version of iidxhook: The following games are compatible with this version of iidxhook:
* Heroic Verse
* BISTROVER - Heroic Verse
* CASTHOUR - BISTROVER
* RESIDENT - CASTHOUR
- RESIDENT
The games must be bootstrapped using [launcher](../launcher.md). The games must be bootstrapped using [launcher](../launcher.md).
@ -12,29 +13,30 @@ The games must be bootstrapped using [launcher](../launcher.md).
## Supported versions of Windows ## Supported versions of Windows
This version requires at least Win 7 x64 and will not run, like the This version requires at least Win 7 x64 and will not run, like the former versions, on Win XP x86!
former versions, on Win XP x86!
## Dependencies ## Dependencies
Make sure to have the following dependencies installed: Make sure to have the following dependencies installed:
* DirectX 9
* Visual C++ 2010 Redistributable Package (x64) - DirectX 9
- Visual C++ 2010 Redistributable Package (x64)
## Data setup ## Data setup
We assume that you are using a clean/vanilla data dump. Ensure your ("contents") We assume that you are using a clean/vanilla data dump. Ensure your ("contents") folder with your
folder with your unpacked data looks like this: unpacked data looks like this:
- data - data
- modules - modules
- prop - prop
* For versions 27-29, only * For versions 27-29, only
* Copy/Move all files from the *modules* directory to the root folder, so they - Copy/Move all files from the *modules* directory to the root folder, so they are located next to
are located next to the *data* and *prop* folders. the *data* and *prop* folders.
* Copy all files from *prop/defaults* to the *prop* folder. * Copy all files from *prop/defaults* to the *prop* folder.
* Setup proper paths for *dev/nvram* and *dev/raw* in *prop/avs-config.xml* by * Setup proper paths for *dev/nvram* and *dev/raw* in *prop/avs-config.xml* by replacing the
replacing the *<fs>*-block in that file with the following block: *<fs>*-block in that file with the following block:
``` ```
<fs> <fs>
@ -50,207 +52,212 @@ replacing the *<fs>*-block in that file with the following block:
</fs> </fs>
``` ```
* For versions 27-29, only - For versions 27-29, only
* Unpack the package containing iidxhook9 into the root folder so iidxhook9.dll
and all other files are located in the same folder as *data*, *prop*,
*bm2dx.dll*, etc.
* For version 30
* Unpack the package containing iidxhook9 into the `modules` folder so iidxhook9.dll
and all other files are located in the same folder as the game's DLLs, e.g.
*bm2dx.dll*, etc.
* Move the `gamestart-30.bat` to the root folder so it is located next to the
`modules`, `data` and `prop` folders
* Run the gamestart-XX.bat file as admin. Where XX matches the version you
want to run.
* Note: if you know what you're doing and would like to keep all the dlls in the - Unpack the package containing iidxhook9 into the root folder so iidxhook9.dll and all other
*modules* folder then you extract iidxhook9 into that directory, move files are located in the same folder as *data*, *prop*, *bm2dx.dll*, etc.
gamestart-XX.bat up, and edit the paths.
- For version 30
- Unpack the package containing iidxhook9 into the `modules` folder so iidxhook9.dll and all other
files are located in the same folder as the game's DLLs, e.g. *bm2dx.dll*, etc.
- Move the `gamestart-30.bat` to the root folder so it is located next to the `modules`, `data`
and `prop` folders
- Run the gamestart-XX.bat file as admin. Where XX matches the version you want to run.
- Note: if you know what you're doing and would like to keep all the dlls in the *modules* folder
then you extract iidxhook9 into that directory, move gamestart-XX.bat up, and edit the paths.
# Configuring iidxhook # Configuring iidxhook
The hook library can be configured via cmd arguments or a configuration file. The hook library can be configured via cmd arguments or a configuration file. The latter is
The latter is generated (*iidxhook-XX.conf* in the same directory) on the first generated (*iidxhook-XX.conf* in the same directory) on the first start of the game using the
start of the game using the gamestart-XX.bat file (again, XX matches your target gamestart-XX.bat file (again, XX matches your target game version). It contains default values for
game version). It contains default values for all available parameters and all available parameters and comments explaining each parameter. Please follow the comments when
comments explaining each parameter. Please follow the comments when configuring configuring your setup.
your setup.
Add the argument *-h* when running gamestart-XX.bat Add the argument *-h* when running gamestart-XX.bat (e.g. *gamestart-XX.bat -h*) to print help/usage
(e.g. *gamestart-XX.bat -h*) to print help/usage information with a list of information with a list of all available parameters. Every parameter can be either set as command
all available parameters. Every parameter can be either set as command line line argument or using a configuration file.
argument or using a configuration file.
To set a parameter from the command line, just add it as an argument after the bat file like this
To set a parameter from the command line, just add it as an argument after
the bat file like this
``` ```
gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true gamestart-09.bat -p gfx.windowed=true -p gfx.framed=true
``` ```
The syntax for the "key=value" is the same as in the config file. Make sure The syntax for the "key=value" is the same as in the config file. Make sure to have a pre-ceeding
to have a pre-ceeding "-p" for every parameter added. "-p" for every parameter added.
However, if a parameter is specifed in the configuration file and as a command However, if a parameter is specifed in the configuration file and as a command line argument, the
line argument, the command line argument overrides the config file's value. command line argument overrides the config file's value.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you need a valid PCBID and the service URL. If you want to run the games online, you need a valid PCBID and the service URL. Open
Open *prop/ea3-config.xml* and set the values of the *ea3/id/pcbid* and *prop/ea3-config.xml* and set the values of the *ea3/id/pcbid* and *ea3/network/services* nodes
*ea3/network/services* nodes accordingly. accordingly.
Run the game with the gamestart-XX.bat file and enable network on the operator Run the game with the gamestart-XX.bat file and enable network on the operator menu. When enabled,
menu. When enabled, the game seems to hang and expects you to power the game seems to hang and expects you to power cycle the machine (i.e. quit the game and restart
cycle the machine (i.e. quit the game and restart it). it).
# Real hardware support # Real hardware support
## The game does not go into either 640x480 (SD) or 1280x720 (HD) as expected but rather picks a resolution like 1386x768 ## The game does not go into either 640x480 (SD) or 1280x720 (HD) as expected but rather picks a resolution like 1386x768
The graphics backend of the game is auto detecting the resolution and refresh
rate based on the supported specs reported by the monitor. Depending on that
output, this can lead to the game picking some "odd" resolution like 1386x768
even the game is set to HD mode (expecting 1280x720).
Furthermore, this can lead to different refresh rate values on the automatic The graphics backend of the game is auto detecting the resolution and refresh rate based on the
monitor check, e.g. compared to previous versions (59.94 on Rootage but 60.02 supported specs reported by the monitor. Depending on that output, this can lead to the game picking
on Heroic Verse). Ultimately, the result can be a very offsync gameplay some "odd" resolution like 1386x768 even the game is set to HD mode (expecting 1280x720).
experience with extremely delayed input.
If that happens, try forcing the resolution to `1280x720` when the game is Furthermore, this can lead to different refresh rate values on the automatic monitor check, e.g.
set to HD mode in the operator menu. Note: Your monitor must also be capable compared to previous versions (59.94 on Rootage but 60.02 on Heroic Verse). Ultimately, the result
of handling the resolution. can be a very offsync gameplay experience with extremely delayed input.
If that happens, try forcing the resolution to `1280x720` when the game is set to HD mode in the
operator menu. Note: Your monitor must also be capable of handling the resolution.
iidxhook.conf: iidxhook.conf:
```text ```text
gfx.force_screen_res.width=1280 gfx.force_screen_res.width=1280
gfx.force_screen_res.height=720 gfx.force_screen_res.height=720
``` ```
## The monitor check is showing high fps and I am using a monitor with high refresh rate features, e.g. 120/144hz ## The monitor check is showing high fps and I am using a monitor with high refresh rate features, e.g. 120/144hz
Sync and timing might be screwed up since the game was never meant to run on
such refresh rates. Try setting the option `gfx.forced_refresh_rate` to either
`59` or `60`.
Note: Your GPU driver settings must be configured to allow application overrides Sync and timing might be screwed up since the game was never meant to run on such refresh rates. Try
on vertical sync/refresh rate options. setting the option `gfx.forced_refresh_rate` to either `59` or `60`.
Note: Your GPU driver settings must be configured to allow application overrides on vertical
sync/refresh rate options.
On AMD GPUs, set the "V-Sync" option to `On, unless application specifies`. On AMD GPUs, set the "V-Sync" option to `On, unless application specifies`.
### BIO2 hardware ### BIO2 hardware
Set `io.disable_bio2_emu=true` in the `iidxhook.conf` file to not hook the BIO2 Set `io.disable_bio2_emu=true` in the `iidxhook.conf` file to not hook the BIO2 communication with
communication with an emulation layer. The game will directly talk to the IO. an emulation layer. The game will directly talk to the IO. In this mode, the game supports the BIO2
In this mode, the game supports the BIO2 board only. board only.
## Driver notes ## Driver notes
You can use the default driver that Windows (7/10) automatically installs once
you connect the BIO2 board via USB to your host. However, these drivers will You can use the default driver that Windows (7/10) automatically installs once you connect the BIO2
not allow the game to detect the board correctly, throwing an IO error. board via USB to your host. However, these drivers will not allow the game to detect the board
The drivers will work fine when using the iidxio API implementation correctly, throwing an IO error. The drivers will work fine when using the iidxio API implementation
[iidxio-bio2](iidxio-bio2.md). [iidxio-bio2](iidxio-bio2.md).
If you want to use the BIO2 with the game without the emulation layer, as If you want to use the BIO2 with the game without the emulation layer, as suggested above, you need
suggested above, you need to install Konami's original driver which is to install Konami's original driver which is identical to the stock Windows driver except the device
identical to the stock Windows driver except the device name is different name is different (which is the crucial part for the stock game's automatic detection).
(which is the crucial part for the stock game's automatic detection).
The driver is available in the bemanitools-supplement repository. The driver is available in the bemanitools-supplement repository.
### Ezusb and other ### Ezusb and other
Set `io.disable_bio2_emu=false` in the `iidxhook.conf` file. Set `io.disable_bio2_emu=false` in the `iidxhook.conf` file. Use the specific iidxio API
Use the specific iidxio API implementations, e.g. `iidxio-ezusb2.dll` to use implementations, e.g. `iidxio-ezusb2.dll` to use the IO2 EZUSB board. The common `iidxio`
the IO2 EZUSB board. The common `iidxio` abstraction layer also allows you to abstraction layer also allows you to use custom IO boards or whatever Konami hardware is going to be
use custom IO boards or whatever Konami hardware is going to be available in available in the future. Obviously, someone has to write an imlementation of the `iidxio` API,
the future. Obviously, someone has to write an imlementation of the `iidxio` first.
API, first.
## Slotted/Wave pass card readers ## Slotted/Wave pass card readers
You have the following options: You have the following options:
* Set `io.disable_card_reader_emu=true` in the `iidxhook.conf` file to not hook
card reader communication with an emulation layer. The game will directly talk - Set `io.disable_card_reader_emu=true` in the `iidxhook.conf` file to not hook card reader
to the real readers though this only supports whatever readers the game communication with an emulation layer. The game will directly talk to the real readers though this
directly supports (wave pass readers) only supports whatever readers the game directly supports (wave pass readers)
* Set `io.disable_card_reader_emu=false` in the `iidxhook.conf` file. - Set `io.disable_card_reader_emu=false` in the `iidxhook.conf` file. Replace the default
Replace the default `eamio.dll` with the `eamio-icca.dll` and have either your `eamio.dll` with the `eamio-icca.dll` and have either your slotted (IIDX, DDR Supernova or GF/DM
slotted (IIDX, DDR Supernova or GF/DM type) or new wave pass card readers type) or new wave pass card readers conencted and and assigned to `COM1`. Other custom
conencted and and assigned to `COM1`. Other custom implementations of of the implementations of of the `eamio` API also work.
`eamio` API also work.
### ICCA device settings (device manager) ### ICCA device settings (device manager)
* Port: COM1
* BAUD rate: 57600
* Data bits: 8
* Parity: None
* Stop bits: 1
* Flow control: None
If you encounter issues after the game opened the device, e.g. application - Port: COM1
stuck, try a USB <-> COM dongle instead of using one of the COM ports of the - BAUD rate: 57600
mainboard. - Data bits: 8
- Parity: None
- Stop bits: 1
- Flow control: None
If you encounter issues after the game opened the device, e.g. application stuck, try a USB \<-> COM
dongle instead of using one of the COM ports of the mainboard.
# Troubleshooting and FAQ # Troubleshooting and FAQ
## The turntable input feels laggy/delayed with my BIO2 + sub IO ## The turntable input feels laggy/delayed with my BIO2 + sub IO
See the [this readme](hardware/bio2-sub-io-turntable-bypass-cable.md) for
information about the bypass cable. See the [this readme](hardware/bio2-sub-io-turntable-bypass-cable.md) for information about the
bypass cable.
## The game does not run "well" (frame drops, drifting offsync etc) ## The game does not run "well" (frame drops, drifting offsync etc)
This can be related to various issues: This can be related to various issues:
* Make sure to run the game as (true) Administrator especially on Windows 7 and
newer. This will also get rid of various other errors (see below) that are - Make sure to run the game as (true) Administrator especially on Windows 7 and newer. This will
related to permission issues. also get rid of various other errors (see below) that are related to permission issues.
* Run the game's process with a higher priority: - Run the game's process with a higher priority:
``` ```
start "" /relatime "gamestart.bat" start "" /relatime "gamestart.bat"
``` ```
* Enforce v-sync enabled in your GPU settings.
* Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) - Enforce v-sync enabled in your GPU settings.
that is not jumping around. Use the timebase feature of one of the newer games to - Ensure that you have a constant refresh rate around the 60 hz (59.9xx or 60.0xx) that is not
check that or enable iidxhook's timebase and check the log output for the jumping around. Use the timebase feature of one of the newer games to check that or enable
determined value. Run this a few times and check if the results differ. iidxhook's timebase and check the log output for the determined value. Run this a few times and
check if the results differ.
## "NETWORK WARNING" instead of "NETWORK OK" ## "NETWORK WARNING" instead of "NETWORK OK"
This can be caused by: This can be caused by:
* Invalid PCBID
* Firewall blocking connections - Invalid PCBID
* Invalid eamuse url or port specified - Firewall blocking connections
* Game is not run using the Administrator account - Invalid eamuse url or port specified
Make sure to check these things first - Game is not run using the Administrator account Make sure to check these things first
## My songs are offsync ## My songs are offsync
From IIDX 20 (or Lincle very final revision) onwards, the game comes with
a built-in auto timebase option ("monitor check" on startup) which From IIDX 20 (or Lincle very final revision) onwards, the game comes with a built-in auto timebase
dynamically, detects the refresh rate of your current setup. Thus, BT5's option ("monitor check" on startup) which dynamically, detects the refresh rate of your current
timebase option is not included from this hook version onwards, anymore. setup. Thus, BT5's timebase option is not included from this hook version onwards, anymore. Ensure
Ensure that refresh rate displayed is very stable, e.g. 60.00x hz, and the that refresh rate displayed is very stable, e.g. 60.00x hz, and the game should be able to provide
game should be able to provide you with a smooth and sync game experience. you with a smooth and sync game experience.
## My game runs too fast ## My game runs too fast
iidxhook can limit the frame rate for you (refer to help/config file) iidxhook can limit the frame rate for you (refer to help/config file)
## My game crashes when I try fullscreen ## My game crashes when I try fullscreen
Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only" Use dxwnd and set settings like "Acquire admin caps" and "Fullscreen only"
## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears ## Background videos aren't working. When starting a song, windows is playing the error sound and a message box appears
If you are running in window mode, you can see an error pop-up window with the title If you are running in window mode, you can see an error pop-up window with the title
`DirectShow Texture3D Sample` and error message `DirectShow Texture3D Sample` and error message
`Could not create source filter to graph! hr=<some number>`. `Could not create source filter to graph! hr=<some number>`.
When running fullscreen, you only hear a windows error sound and the game appears to be frozen When running fullscreen, you only hear a windows error sound and the game appears to be frozen when
when trying to play a background video. trying to play a background video.
You are missing a codec to decode and play the videos. There are different You are missing a codec to decode and play the videos. There are different methods available to get
methods available to get background videos working. Probably, the easiest background videos working. Probably, the easiest solution: grab the CLVSD.ax file and go to Start ->
solution: grab the CLVSD.ax file and go to Start -> Run -> regsvr32 clvsd.ax Run -> regsvr32 clvsd.ax Make sure to run cmd.exe as Administrator, otherwise you will get errors
Make sure to run cmd.exe as Administrator, otherwise you will get errors caused caused by invalid permissions.
by invalid permissions.
## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger ## I installed the CLVSD.ax codec but the game crashes or displays a message box that tells me to disable my debugger
If songs keep crashing upon start and you get an error message that says If songs keep crashing upon start and you get an error message that says
``` ```
DirectShow Texture3D Sample DirectShow Texture3D Sample
Could not create source filter to graph! hr=0x80040266 Could not create source filter to graph! hr=0x80040266
``` ```
despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*)
from gamestart or use a CLVSD.ax codec which has the debugger checks removed. despite having the codec (CLVSD.ax) installed, remove the debug flag (*-D*) from gamestart or use a
CLVSD.ax codec which has the debugger checks removed.

View File

@ -1,21 +1,28 @@
# IIDXIO API implementation with BIO2 driver # IIDXIO API implementation with BIO2 driver
This implementation of BT5's iidxio API allows you to use native BIO2 hardware with anything that This implementation of BT5's iidxio API allows you to use native BIO2 hardware with anything that
supports BT5's iidxio API, e.g. all iidxhooks of BT5. Thus, you can play your favorite old IIDX supports BT5's iidxio API, e.g. all iidxhooks of BT5. Thus, you can play your favorite old IIDX
games with the latest generation of hardware.5. games with the latest generation of hardware.5.
## Setup ## Setup
* Have `iidxio-bio2.dll` in the same folder as your `iidxhookX.dll`
* Rename `iidxio-bio2.dll` to `iidxio.dll` - Have `iidxio-bio2.dll` in the same folder as your `iidxhookX.dll`
* Ensure that your `gamestart.bat` actually injects the appropriate iidxhook dll, for example: - Rename `iidxio-bio2.dll` to `iidxio.dll`
- Ensure that your `gamestart.bat` actually injects the appropriate iidxhook dll, for example:
```bat ```bat
inject iidxhook3.dll bm2dx.exe ...* inject iidxhook3.dll bm2dx.exe ...*
``` ```
or or
```bat ```bat
launcher -K iidxhook4.dll bm2dx.dll ...* launcher -K iidxhook4.dll bm2dx.dll ...*
``` ```
* This assumes that the BIO2 is already flashed to the correct firmware. The firmware perists once
flashed and does not need to be re-flashed after a power cycle. - This assumes that the BIO2 is already flashed to the correct firmware. The firmware perists once
flashed and does not need to be re-flashed after a power cycle.
## Driver notes ## Driver notes
See [here](iidxhook9.md#driver-notes). See [here](iidxhook9.md#driver-notes).

View File

@ -1,30 +1,31 @@
This library drives a "legacy" ezusb IO board, also known as C02/D01 IO, and This library drives a "legacy" ezusb IO board, also known as C02/D01 IO, and implements the iidxio
implements the iidxio API of BT5. Thus, it allows you to use this IO board with API of BT5. Thus, it allows you to use this IO board with *any* version of IIDX that is supported by
*any* version of IIDX that is supported by BT5. BT5.
# Setup # Setup
* Rename iidxio-ezusb.dll to iidxio.dll.
* Ensure that your gamestart.bat actually injects the appropriate iidxhook dll, - Rename iidxio-ezusb.dll to iidxio.dll.
for example: - Ensure that your gamestart.bat actually injects the appropriate iidxhook dll, for example:
``` ```
*inject iidxhook3.dll bm2dx.exe ...* *inject iidxhook3.dll bm2dx.exe ...*
``` ```
or or
``` ```
launcher -K iidxhook4.dll bm2dx.dll ...* launcher -K iidxhook4.dll bm2dx.dll ...*
``` ```
* Before running the game, you have to flash a set of binaries to your IO board
(base firmware and FPGA). The iidxio-ezusb.dll does NOT take care of this and - Before running the game, you have to flash a set of binaries to your IO board (base firmware and
only drives the hardware during gameplay. The binary images required are not FPGA). The iidxio-ezusb.dll does NOT take care of this and only drives the hardware during
included with BT5. gameplay. The binary images required are not included with BT5.
* Use the ezusb-tool.exe binary included in the tools sub-package to flash the - Use the ezusb-tool.exe binary included in the tools sub-package to flash the appropriate ezusb
appropriate ezusb base firmware. Once the firmware is flashed successfully, base firmware. Once the firmware is flashed successfully, the status LEDs on the side of the board
the status LEDs on the side of the board should show a blinking pattern. should show a blinking pattern.
* Use the ezusb-iidx-fpga-flash.exe binary to flash the appropriate FPGA binary - Use the ezusb-iidx-fpga-flash.exe binary to flash the appropriate FPGA binary dump to the FPGA.
dump to the FPGA. - There is a script called ezusb-boot.bat which combines the two steps above and can be integrated
* There is a script called ezusb-boot.bat which combines the two steps above into the startup process of a dedicated setup.
and can be integrated into the startup process of a dedicated setup. - If you are using a D01 IO board, use the `fpga-d01.bin` file instead of the `fpga.bin` file.
* If you are using a D01 IO board, use the `fpga-d01.bin` file instead of the - If you ignore these steps, you will either run into errors or parts of the IO board won't work
`fpga.bin` file. (e.g. lights).
* If you ignore these steps, you will either run into errors or parts of the
IO board won't work (e.g. lights).

View File

@ -1,27 +1,28 @@
This library drives the ezusb FX2 IO board, also known as IO2, and This library drives the ezusb FX2 IO board, also known as IO2, and implements the iidxio API of BT5.
implements the iidxio API of BT5. Thus, it allows you to use this IO2 board with Thus, it allows you to use this IO2 board with *any* version of IIDX that is supported by BT5.
*any* version of IIDX that is supported by BT5.
# Setup # Setup
* Rename iidxio-ezusb2.dll to iidxio.dll.
* Ensure that your gamestart.bat actually injects the appropriate iidxhook dll, - Rename iidxio-ezusb2.dll to iidxio.dll.
for example: - Ensure that your gamestart.bat actually injects the appropriate iidxhook dll, for example:
``` ```
*inject iidxhook3.dll bm2dx.exe ...* *inject iidxhook3.dll bm2dx.exe ...*
``` ```
or or
``` ```
launcher -K iidxhook4.dll bm2dx.dll ...* launcher -K iidxhook4.dll bm2dx.dll ...*
``` ```
* Before running the game, you have to flash the appropriate firmware to your
IO board. The iidxio-ezusb2.dll does NOT take care of this and only drives the - Before running the game, you have to flash the appropriate firmware to your IO board. The
hardware during gameplay. The binary image required is not included with BT5. iidxio-ezusb2.dll does NOT take care of this and only drives the hardware during gameplay. The
* Use the ezusb2-tool.exe binary included in the tools sub-package to first scan binary image required is not included with BT5.
for the device path of your connected hardware. Then, use the device path to - Use the ezusb2-tool.exe binary included in the tools sub-package to first scan for the device path
flash the appropriate ezusb base firmware. Once the firmware is flashed of your connected hardware. Then, use the device path to flash the appropriate ezusb base
successfully, the status LEDs on the side of the board should show a blinking firmware. Once the firmware is flashed successfully, the status LEDs on the side of the board
pattern. should show a blinking pattern.
* There is a script called ezusb2-boot.bat which combines the two steps above - There is a script called ezusb2-boot.bat which combines the two steps above and can be integrated
and can be integrated into the startup process of a dedicated setup. into the startup process of a dedicated setup.
* If you ignore these steps, your IO board won't work with our iidxio - If you ignore these steps, your IO board won't work with our iidxio implementation.
implementation.

View File

@ -1,18 +1,17 @@
# Inject # Inject
Inject is a tool that creates a process for a specified application executable Inject is a tool that creates a process for a specified application executable file and injects a
file and injects a specified list of library/dll files into the process before specified list of library/dll files into the process before it is kicked off.
it is kicked off.
Typically, the tool is run when you use one of the bat script files to start Typically, the tool is run when you use one of the bat script files to start any of the games that
any of the games that require its usage, e.g. older IIDX games. require its usage, e.g. older IIDX games.
It comes with further option switches for development, e.g. Halting until a debugger is attached,
outputting debug output to a logfile etc. Just run the application without any parameters to get a
usage message:
It comes with further option switches for development, e.g. Halting until
a debugger is attached, outputting debug output to a logfile etc.
Just run the application without any parameters to get a usage message:
``` ```
inject.exe inject.exe
``` ```
How inject.exe is used can be taken from the bat script files of various How inject.exe is used can be taken from the bat script files of various (typically older) games.
(typically older) games.

View File

@ -1,59 +1,54 @@
# jbhook # jbhook
jbhook is a collection of hook libraries for jubeat providing jbhook is a collection of hook libraries for jubeat providing emulation and various patches to run
emulation and various patches to run these games on non BemaniPC hardware and these games on non BemaniPC hardware and newer Windows versions.
newer Windows versions.
The hook libraries must be bootstrapped either using [inject](../inject.md) or The hook libraries must be bootstrapped either using [inject](../inject.md) or
[launcher](../launcher.md) depending on the version you want to run. Further [launcher](../launcher.md) depending on the version you want to run. Further instructions are given
instructions are given in dedicated readme files for each jbhook version in dedicated readme files for each jbhook version (see below).
(see below).
# Versions # Versions
jbhook comes in a few different flavors. The game and its engine changed over jbhook comes in a few different flavors. The game and its engine changed over the years. Some game
the years. Some game versions might require patches/parameters enabled which versions might require patches/parameters enabled which others don't need or have different AVS
others don't need or have different AVS versions. Here is the list of supported versions. Here is the list of supported games:
games:
* [jbhook1](jbhook1.md): jubeat, ripples
* [jbhook2](jbhook2.md): knit, copious
* [jbhook3](jbhook3.md): saucer, prop, qubell, clan, festo
I sure have trouble remembering which jubeat version is which, here's a handy - [jbhook1](jbhook1.md): jubeat, ripples
guide: - [jbhook2](jbhook2.md): knit, copious
* 01 - jubeat - [jbhook3](jbhook3.md): saucer, prop, qubell, clan, festo
* 02 - ripples
* 03 - knit
* 04 - copious
* 05 - saucer
* 06 - prop
* 07 - qubell
* 08 - clan
* 09 - festo
When building bemanitools, independent packages are created for each set of games I sure have trouble remembering which jubeat version is which, here's a handy guide:
which are ready to be dropped on top of vanilla AC data dumps. We recommend
using pristine dumps to avoid any conflicts with other hardcoded hacks or - 01 - jubeat
binary patches. - 02 - ripples
- 03 - knit
- 04 - copious
- 05 - saucer
- 06 - prop
- 07 - qubell
- 08 - clan
- 09 - festo
When building bemanitools, independent packages are created for each set of games which are ready to
be dropped on top of vanilla AC data dumps. We recommend using pristine dumps to avoid any conflicts
with other hardcoded hacks or binary patches.
# How to run # How to run
To run your game with jbhook, you have to use the inject tool to inject the To run your game with jbhook, you have to use the inject tool to inject the DLL to the game process.
DLL to the game process. `dist/jb` contains bat scripts with all the `dist/jb` contains bat scripts with all the important parameters configured. Further parameters can
important parameters configured. Further parameters can be added but might not be added but might not be required to run the game with default settings. Further information on how
be required to run the game with default settings. to setup the data for each specific version are elaborated in their dedicated readme files.
Further information on how to setup the data for each specific version are
elaborated in their dedicated readme files.
# Data setup and running the game # Data setup and running the game
Ensure your folder with your unpacked data looks like this: Ensure your folder with your unpacked data looks like this:
- `data` - `data`
- `prop` - `prop`
- Various dll files including `jubeat.dll` **OR** `jubeat.exe` - Various dll files including `jubeat.dll` **OR** `jubeat.exe`
Unpack the package containing jbhook into the folder containing the jubeat Unpack the package containing jbhook into the folder containing the jubeat binary file.
binary file.
Run the `gamestart-XX.bat` file where `XX` denotes the version of the game you want to run. Run the `gamestart-XX.bat` file where `XX` denotes the version of the game you want to run.
@ -62,10 +57,11 @@ Run the `gamestart-XX.bat` file where `XX` denotes the version of the game you w
Running jubeat or ripples? Modify jbhook-01.conf or jbhook-02.conf. Running jubeat or ripples? Modify jbhook-01.conf or jbhook-02.conf.
Running anything newer? Running anything newer?
* Open the `prop/ea3-config.xml`
* Replace the `ea3/network/services` URL with network service URL of your - Open the `prop/ea3-config.xml`
choice (for example http://my.eamuse.com) - Replace the `ea3/network/services` URL with network service URL of your choice (for example
* Edit the `ea3/id/pcbid` http://my.eamuse.com)
- Edit the `ea3/id/pcbid`
# Real hardware support # Real hardware support
@ -73,5 +69,5 @@ Run the launcher without the hook dll: `launcher jubeat.dll`
# Command line options # Command line options
Add the argument *-h* when running inject with jbhook to print help/usage Add the argument *-h* when running inject with jbhook to print help/usage information with a list of
information with a list of parameters you can apply to tweak various things. parameters you can apply to tweak various things.

View File

@ -1,19 +1,21 @@
# Game list # Game list
The following games are compatible with this version of jbhook: The following games are compatible with this version of jbhook:
* jubeat
* jubeat ripples - jubeat
- jubeat ripples
The games must be bootstrapped using [inject](../inject.md). The games must be bootstrapped using [inject](../inject.md).
# Data setup and running the game # Data setup and running the game
Unpack the package containing jbhook1 into the revision folder of your choice. Unpack the package containing jbhook1 into the revision folder of your choice. Most likely, you want
Most likely, you want to target the latest revision you have to run the latest to target the latest revision you have to run the latest binary of the game with any bugfixes by
binary of the game with any bugfixes by developers. developers.
The DLLs in this package should be in the same location as the game DLLs and executable - i.e. all
these files should be in the same folder:
The DLLs in this package should be in the same location as the game DLLs and
executable - i.e. all these files should be in the same folder:
- `inject.exe` - `inject.exe`
- `jubeat.exe` - `jubeat.exe`
- `jbhook-01.conf` - `jbhook-01.conf`
@ -25,18 +27,15 @@ Run the `gamestart-01.bat` file as admin.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you have to set a valid PCBID in the If you want to run the games online, you have to set a valid PCBID in the configuration file. You
configuration file. You also have to set the url of the eamuse server you want also have to set the url of the eamuse server you want to connect to.
to connect to.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you have to set a valid PCBID and EAMID If you want to run the games online, you have to set a valid PCBID and EAMID (use the PCBID as the
(use the PCBID as the EAMID) in the configuration file or as a command line EAMID) in the configuration file or as a command line argument. You also have to set the url of the
argument. You also have to set the url of the eamuse server you want to eamuse server you want to connect to.
connect to.
Additional note regarding EAMID: This is provided as the identifier of the Additional note regarding EAMID: This is provided as the identifier of the "eamuse license" to the
"eamuse license" to the server. Depending on the implementation of the server, server. Depending on the implementation of the server, this can lead to authentication failure
this can lead to authentication failure resulting in a network error on boot or resulting in a network error on boot or warning during gameplay.
warning during gameplay.

View File

@ -1,19 +1,21 @@
# Game list # Game list
The following games are compatible with this version of jbhook: The following games are compatible with this version of jbhook:
* jubeat knit
* jubeat copious - jubeat knit
- jubeat copious
The games must be bootstrapped using [launcher](../launcher.md). The games must be bootstrapped using [launcher](../launcher.md).
# Data setup and running the game # Data setup and running the game
Unpack the package containing jbhook2 into the revision folder of your choice. Unpack the package containing jbhook2 into the revision folder of your choice. Most likely, you want
Most likely, you want to target the latest revision you have to run the latest to target the latest revision you have to run the latest binary of the game with any bugfixes by
binary of the game with any bugfixes by developers. developers.
The DLLs in this package should be in the same location as the game DLLs and executable - i.e. all
these files should be in the same folder:
The DLLs in this package should be in the same location as the game DLLs and
executable - i.e. all these files should be in the same folder:
- `launcher.exe` - `launcher.exe`
- `jubeat.dll` - `jubeat.dll`
- `eamio.dll` - `eamio.dll`
@ -25,18 +27,15 @@ Run the `gamestart-02.bat` file as admin.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you have to set a valid PCBID in the If you want to run the games online, you have to set a valid PCBID in the configuration file. You
configuration file. You also have to set the url of the eamuse server you want also have to set the url of the eamuse server you want to connect to.
to connect to.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you have to set a valid PCBID and EAMID If you want to run the games online, you have to set a valid PCBID and EAMID (use the PCBID as the
(use the PCBID as the EAMID) in the configuration file or as a command line EAMID) in the configuration file or as a command line argument. You also have to set the url of the
argument. You also have to set the url of the eamuse server you want to eamuse server you want to connect to.
connect to.
Additional note regarding EAMID: This is provided as the identifier of the Additional note regarding EAMID: This is provided as the identifier of the "eamuse license" to the
"eamuse license" to the server. Depending on the implementation of the server, server. Depending on the implementation of the server, this can lead to authentication failure
this can lead to authentication failure resulting in a network error on boot or resulting in a network error on boot or warning during gameplay.
warning during gameplay.

View File

@ -1,18 +1,19 @@
# Game list # Game list
The following games are compatible with this version of jbhook: The following games are compatible with this version of jbhook:
* jubeat saucer
* jubeat prop - jubeat saucer
* jubeat qubell - jubeat prop
* jubeat clan - jubeat qubell
* jubeat festo - jubeat clan
- jubeat festo
The games must be bootstrapped using [launcher](../launcher.md). The games must be bootstrapped using [launcher](../launcher.md).
# Data setup and running the game # Data setup and running the game
Unpack the package containing jbhook3 into the revision folder of your choice. Unpack the package containing jbhook3 into the revision folder of your choice. Most likely, you want
Most likely, you want to target the latest revision you have to run the latest to target the latest revision you have to run the latest binary of the game with any bugfixes by
binary of the game with any bugfixes by developers. developers.
Run the `gamestart-03.bat` file as admin. Run the `gamestart-03.bat` file as admin.

View File

@ -1,13 +1,15 @@
This library talks to a MagicBox cab's IO and implements the jbio API of BT5. This library talks to a MagicBox cab's IO and implements the jbio API of BT5. Thus, it allows you to
Thus, it allows you to use a MagicBox cab with *any* version of jubeat that is supported by BT5. use a MagicBox cab with *any* version of jubeat that is supported by BT5.
# Setup # Setup
* Rename `jbio-magicbox.dll` to `jbio.dll`.
* Make sure `jbio.dll` is in the same folder as both `jbhook.dll` and `jubeat.dll` - Rename `jbio-magicbox.dll` to `jbio.dll`.
* Make sure that you have a copy of the `ch341dll.dll` that comes with MagicBox. - Make sure `jbio.dll` is in the same folder as both `jbhook.dll` and `jubeat.dll`
* Ensure that your `gamestart.bat` actually injects the appropriate jbhook dll - Make sure that you have a copy of the `ch341dll.dll` that comes with MagicBox.
for example: - Ensure that your `gamestart.bat` actually injects the appropriate jbhook dll for example:
``` ```
launcher -K jbhook.dll jubeat.dll ...* launcher -K jbhook.dll jubeat.dll ...*
``` ```
or that the application otherwise uses `jbio.dll` or that the application otherwise uses `jbio.dll`

View File

@ -1,18 +1,22 @@
This library talks to a P4IO (panel) and H44B through ACIO (lights) of a jubeat cab and implements the jbio API of BT5. This library talks to a P4IO (panel) and H44B through ACIO (lights) of a jubeat cab and implements
Thus, it allows you to use a modern jubeat cab with *any* version of jubeat that is supported by BT5. the jbio API of BT5. Thus, it allows you to use a modern jubeat cab with *any* version of jubeat
that is supported by BT5.
# Setup # Setup
* Rename `jbio-p4io.dll` to `jbio.dll`.
* Make sure `jbio.dll` is in the same folder as both `jbhook.dll`, `aciomgr.dll` and `jubeat.dll` - Rename `jbio-p4io.dll` to `jbio.dll`.
* If you want IC card support via eamio-icca, ensure you also rename `eamio-icca.dll` to `eamio.dll` - Make sure `jbio.dll` is in the same folder as both `jbhook.dll`, `aciomgr.dll` and `jubeat.dll`
* Ensure that your `gamestart.bat` actually injects the appropriate jbhook dll - If you want IC card support via eamio-icca, ensure you also rename `eamio-icca.dll` to `eamio.dll`
for example: - Ensure that your `gamestart.bat` actually injects the appropriate jbhook dll for example:
``` ```
launcher -K jbhook.dll jubeat.dll ...* launcher -K jbhook.dll jubeat.dll ...*
``` ```
or that the application otherwise uses `jbio.dll` or that the application otherwise uses `jbio.dll`
* If you have P4IO but no H44B, lights will be disabled - If you have P4IO but no H44B, lights will be disabled
* You can change the port and baudrate of the H44B node by editing the `jbio-h44b.conf` that should be created by default - You can change the port and baudrate of the H44B node by editing the `jbio-h44b.conf` that should
* If you are using IC card support, you can edit `eamio-icc.conf` to change the port and baudrate be created by default
* If you are playing on a real cab, the port and baud of H44B and ICCA should be identical - If you are using IC card support, you can edit `eamio-icc.conf` to change the port and baudrate
- If you are playing on a real cab, the port and baud of H44B and ICCA should be identical

View File

@ -1,15 +1,15 @@
# Launcher # Launcher
Launcher is a tool which is required to run the more recent titles. It sets up Launcher is a tool which is required to run the more recent titles. It sets up the AVS environment
the AVS environment for the target game to boot before it runs the it. for the target game to boot before it runs the it.
Typically, the tool is run when you use one of the bat script files to start Typically, the tool is run when you use one of the bat script files to start any of the games that
any of the games that require its usage, e.g. newer IIDX games. require its usage, e.g. newer IIDX games.
It comes with option switches to configure the AVS environment and for development, e.g. Halting
until a debugger is attached, outputting debug output to a logfile etc. Just run the application
without any parameters to get a usage message:
It comes with option switches to configure the AVS environment and for
development, e.g. Halting until a debugger is attached, outputting debug
output to a logfile etc.
Just run the application without any parameters to get a usage message:
``` ```
launcher.exe launcher.exe
``` ```

View File

@ -1,35 +1,31 @@
# popnhook # popnhook
popnhook is a collection of hook libraries for pop'n music providing popnhook is a collection of hook libraries for pop'n music providing emulation and various patches
emulation and various patches to run these games on non BemaniPC hardware and to run these games on non BemaniPC hardware and newer Windows versions.
newer Windows versions.
The hook libraries must be bootstrapped either using [inject](../inject.md) or The hook libraries must be bootstrapped either using [inject](../inject.md) or
[launcher](../launcher.md) depending on the version you want to run. Further [launcher](../launcher.md) depending on the version you want to run. Further instructions are given
instructions are given in dedicated readme files for each popnhook version in dedicated readme files for each popnhook version (see below).
(see below).
# Versions # Versions
popnhook comes in a few different flavors. The game and its engine changed over popnhook comes in a few different flavors. The game and its engine changed over the years. Some game
the years. Some game versions might require patches/parameters enabled which versions might require patches/parameters enabled which others don't need or have different AVS
others don't need or have different AVS versions. Here is the list of supported versions. Here is the list of supported games:
games:
* [popnhook1](popnhook1.md): 15 ADVENTURE, 16 PARTY♪, 17 THE MOVIE, 18 せんごく列伝
When building bemanitools, independent packages are created for each set of games - [popnhook1](popnhook1.md): 15 ADVENTURE, 16 PARTY♪, 17 THE MOVIE, 18 せんごく列伝
which are ready to be dropped on top of vanilla AC data dumps. We recommend
using pristine dumps to avoid any conflicts with other hardcoded hacks or When building bemanitools, independent packages are created for each set of games which are ready to
binary patches. be dropped on top of vanilla AC data dumps. We recommend using pristine dumps to avoid any conflicts
with other hardcoded hacks or binary patches.
# How to run # How to run
To run your game with popnhook, you have to use the inject tool to inject the To run your game with popnhook, you have to use the inject tool to inject the DLL to the game
DLL to the game process. `dist/popn` contains bat scripts with all the process. `dist/popn` contains bat scripts with all the important parameters configured. Further
important parameters configured. Further parameters can be added but might not parameters can be added but might not be required to run the game with default settings. Further
be required to run the game with default settings. information on how to setup the data for each specific version are elaborated in their dedicated
Further information on how to setup the data for each specific version are readme files.
elaborated in their dedicated readme files.
# Eamuse network setup # Eamuse network setup
@ -37,12 +33,13 @@ Running pop'n music 15 through 18? Modify the appropriate popnhook-15.conf, popn
popnhook-17.conf, or popnhook-18.conf. popnhook-17.conf, or popnhook-18.conf.
Running anything newer? Running anything newer?
* Open the `prop/ea3-config.xml`
* Replace the `ea3/network/services` URL with network service URL of your - Open the `prop/ea3-config.xml`
choice (for example http://my.eamuse.com) - Replace the `ea3/network/services` URL with network service URL of your choice (for example
* Edit the `ea3/id/pcbid` http://my.eamuse.com)
- Edit the `ea3/id/pcbid`
# Command line options # Command line options
Add the argument *-h* when running inject with popnhook to print help/usage Add the argument *-h* when running inject with popnhook to print help/usage information with a list
information with a list of parameters you can apply to tweak various things. of parameters you can apply to tweak various things.

View File

@ -1,21 +1,23 @@
# Game list # Game list
The following games are compatible with this version of popnhook: The following games are compatible with this version of popnhook:
* pop'n music 15 ADVENTURE
* pop'n music 16 PARTY♪ - pop'n music 15 ADVENTURE
* pop'n music 17 THE MOVIE - pop'n music 16 PARTY♪
* pop'n music 18 せんごく列伝 - pop'n music 17 THE MOVIE
- pop'n music 18 せんごく列伝
The games must be bootstrapped using [inject](../inject.md). The games must be bootstrapped using [inject](../inject.md).
# Data setup and running the game # Data setup and running the game
Unpack the package containing popnhook1 into the revision folder of your choice. Unpack the package containing popnhook1 into the revision folder of your choice. Most likely, you
Most likely, you want to target the latest revision you have to run the latest want to target the latest revision you have to run the latest binary of the game with any bugfixes
binary of the game with any bugfixes by developers. by developers.
The DLLs in this package should be in the same location as the game DLLs and executable - i.e. all
these files should be in the same folder:
The DLLs in this package should be in the same location as the game DLLs and
executable - i.e. all these files should be in the same folder:
- `inject.exe` - `inject.exe`
- `popn15.exe` or `popn16.exe` or `popn17.exe` or `popn18.exe` - `popn15.exe` or `popn16.exe` or `popn17.exe` or `popn18.exe`
- `popnhook-15.conf` or `popnhook-16.conf` or `popnhook-17.conf` or `popnhook-18.conf` - `popnhook-15.conf` or `popnhook-16.conf` or `popnhook-17.conf` or `popnhook-18.conf`
@ -24,22 +26,20 @@ executable - i.e. all these files should be in the same folder:
- `libavs-win32.dll` - `libavs-win32.dll`
- etc - etc
Run the `gamestart-15.bat` or `gamestart-16.bat` or `gamestart-17.bat` or `gamestart-18.bat` file as admin. Run the `gamestart-15.bat` or `gamestart-16.bat` or `gamestart-17.bat` or `gamestart-18.bat` file as
admin.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you have to set a valid PCBID in the If you want to run the games online, you have to set a valid PCBID in the configuration file. You
configuration file. You also have to set the url of the eamuse server you want also have to set the url of the eamuse server you want to connect to.
to connect to.
# Eamuse network setup # Eamuse network setup
If you want to run the games online, you have to set a valid PCBID and EAMID If you want to run the games online, you have to set a valid PCBID and EAMID (use the PCBID as the
(use the PCBID as the EAMID) in the configuration file or as a command line EAMID) in the configuration file or as a command line argument. You also have to set the url of the
argument. You also have to set the url of the eamuse server you want to eamuse server you want to connect to.
connect to.
Additional note regarding EAMID: This is provided as the identifier of the Additional note regarding EAMID: This is provided as the identifier of the "eamuse license" to the
"eamuse license" to the server. Depending on the implementation of the server, server. Depending on the implementation of the server, this can lead to authentication failure
this can lead to authentication failure resulting in a network error on boot or resulting in a network error on boot or warning during gameplay.
warning during gameplay.

View File

@ -4,21 +4,33 @@ For maintainers, steps for the release process:
1. Update the corresponding section in the [changelog](CHANGELOG.md) with bullet points reflecting 1. Update the corresponding section in the [changelog](CHANGELOG.md) with bullet points reflecting
major features merged into master since the previous release major features merged into master since the previous release
1. Make sure you have the latest `master` state pulled to your local copy 1. Make sure you have the latest `master` state pulled to your local copy
1. Tag the release with the next release number which also be found at the 1. Tag the release with the next release number which also be found at the
[top of the readme](../README.md) as it always reflects the current version being worked on [top of the readme](../README.md) as it always reflects the current version being worked on on
on the `master` branch , e.g. 0.04: `git tag 5.35` the `master` branch , e.g. 0.04: `git tag 5.35`
1. Push the tag to upstream: `git push origin 5.35` 1. Push the tag to upstream: `git push origin 5.35`
1. The [build pipeline](https://github.com/djhackersdev/bemanitools/actions) should start 1. The [build pipeline](https://github.com/djhackersdev/bemanitools/actions) should start
automatically once the tag is pushed including the steps `build` and `publish-release` automatically once the tag is pushed including the steps `build` and `publish-release`
1. Once completed successfully, the release is published on the 1. Once completed successfully, the release is published on the
[releases page](https://github.com/djhackersdev/bemanitools/releases/) [releases page](https://github.com/djhackersdev/bemanitools/releases/)
1. Edit the latest release 1. Edit the latest release
1. Copy-pate the change log section of the respective version into the description 1. Copy-pate the change log section of the respective version into the description
1. Un-check *Set as pre-release* 1. Un-check *Set as pre-release*
1. Check *Set as the latest release* 1. Check *Set as the latest release*
1. Click *Update release* 1. Click *Update release*
1. Notify any other channels, e.g. the pigs in the stall, about the latest release: 1. Notify any other channels, e.g. the pigs in the stall, about the latest release:
1. New post in thread 1. New post in thread
``` ```
<insert version here> released: <direct link to published version> <insert version here> released: <direct link to published version>
@ -29,7 +41,8 @@ For maintainers, steps for the release process:
1. Update the OP title by bumping the version number in it 1. Update the OP title by bumping the version number in it
1. Update the OP post by extending it accordingly (see previous entries) 1. Update the OP post by extending it accordingly (see previous entries)
1. Bump the version number at the [top of the readme](../README.md) and add a new empty section 1. Bump the version number at the [top of the readme](../README.md) and add a new empty section in
in the [changelog](../CHANGELOG.md) with the new version number as title. Commit changes and push to the [changelog](../CHANGELOG.md) with the new version number as title. Commit changes and push to
`master` branch `master` branch
1. Continue developing and merging PRs until you decide its time for another release 1. Continue developing and merging PRs until you decide its time for another release

View File

@ -1,18 +1,24 @@
This library talks to a BIO2 BI2A node and implements the sdvxio API of BT5. This library talks to a BIO2 BI2A node and implements the sdvxio API of BT5. Thus, it allows you to
Thus, it allows you to use a BIO2 SDVX device board with *any* version of SDVX that is supported by BT5. use a BIO2 SDVX device board with *any* version of SDVX that is supported by BT5.
# Setup # Setup
* Make sure that your BIO2 is flashed with a SDVX firmware (if you can boot SDVX5 with it, it's already the right firmware)
* The firmware persists between boots, so as long as it's flashed to the correct firmware, you no longer need to do this step - Make sure that your BIO2 is flashed with a SDVX firmware (if you can boot SDVX5 with it, it's
* Rename sdvxio-kfca.dll to sdvxio.dll. already the right firmware)
* Ensure that your gamestart.bat actually injects the appropriate sdvxhook dll - The firmware persists between boots, so as long as it's flashed to the correct firmware, you no
for example: longer need to do this step
- Rename sdvxio-kfca.dll to sdvxio.dll.
- Ensure that your gamestart.bat actually injects the appropriate sdvxhook dll for example:
``` ```
launcher -K sdvxhook.dll soundvoltex.dll ...* launcher -K sdvxhook.dll soundvoltex.dll ...*
``` ```
or that the application otherwise uses sdvxio.dll or that the application otherwise uses sdvxio.dll
* sdvxio-bio2 implements BIO2 device autodetection - sdvxio-bio2 implements BIO2 device autodetection
* if this fails please make a bug report, and set the port manually in the config - if this fails please make a bug report, and set the port manually in the config
* You can change the port and baudrate by editing the sdvxio-bio2.conf that should be created by default - You can change the port and baudrate by editing the sdvxio-bio2.conf that should be created by
* Please connect any additional acio devices to their own port (ex: SDVX5 expects an ICCA by itself on COM2) default
- Please connect any additional acio devices to their own port (ex: SDVX5 expects an ICCA by itself
on COM2)

View File

@ -1,16 +1,21 @@
This library talks to a KFCA node through ACIO and implements the sdvxio API of BT5. This library talks to a KFCA node through ACIO and implements the sdvxio API of BT5. Thus, it allows
Thus, it allows you to use a KFCA device board with *any* version of SDVX that is supported by BT5. you to use a KFCA device board with *any* version of SDVX that is supported by BT5.
# Setup # Setup
* Rename sdvxio-kfca.dll to sdvxio.dll.
* Ensure that your gamestart.bat actually injects the appropriate sdvxhook dll - Rename sdvxio-kfca.dll to sdvxio.dll.
for example: - Ensure that your gamestart.bat actually injects the appropriate sdvxhook dll for example:
``` ```
launcher -K sdvxhook2.dll soundvoltex.dll ...* launcher -K sdvxhook2.dll soundvoltex.dll ...*
``` ```
or that the application otherwise uses sdvxio.dll or that the application otherwise uses sdvxio.dll
* sdvxio-kfca expects a KFCA device on COM3 by default - sdvxio-kfca expects a KFCA device on COM3 by default
* You can change the port and baudrate by editing the sdvxio-kfca.conf that should be created by default - You can change the port and baudrate by editing the sdvxio-kfca.conf that should be created by
* If there is also an ICCA device on the same ACIO bus, it cannot be used with eamio-icca at this time default
* Please connect any additional acio devices to their own port (ex: SDVX5 expects an ICCA by itself on COM2) - If there is also an ICCA device on the same ACIO bus, it cannot be used with eamio-icca at this
time
- Please connect any additional acio devices to their own port (ex: SDVX5 expects an ICCA by itself
on COM2)

View File

@ -1,43 +1,52 @@
# Tools # Tools
Documentation about various additional tooling that is fundamentally not required to run any of Documentation about various additional tooling that is fundamentally not required to run any of
BT5's supported games, but provides additional features for users and developers alike. BT5's supported games, but provides additional features for users and developers alike.
## BT5 API ## BT5 API
Various command line tools for quick and easy testing of BT5 API implementations witohut having
to run any target games.
* [ddriotest](ddriotest.md): `ddrio` API Various command line tools for quick and easy testing of BT5 API implementations witohut having to
* [eamiotest](eamiotest.md): `eamio` API run any target games.
* [iidxiotest](iidxiotest.md): `iidxio` API
* [jbiotest](jbiotest.md): `jbio` API - [ddriotest](ddriotest.md): `ddrio` API
- [eamiotest](eamiotest.md): `eamio` API
- [iidxiotest](iidxiotest.md): `iidxio` API
- [jbiotest](jbiotest.md): `jbio` API
## IO related ## IO related
### ACIO ### ACIO
* [aciotest](aciotest.md): Command line tool for quick and easy testing of ACIO devices without
having to run a game. - [aciotest](aciotest.md): Command line tool for quick and easy testing of ACIO devices without
having to run a game.
### P3IO DDR testing tool ### P3IO DDR testing tool
* [p3io-ddr-tool](p3io-ddr-tool.md): Extensive command line tool to test and debug a real P3IO DDR
- [p3io-ddr-tool](p3io-ddr-tool.md): Extensive command line tool to test and debug a real P3IO DDR
(Dragon PCB) IO board + EXTIO (Dragon PCB) IO board + EXTIO
### Ezusb ### Ezusb
* [ezusb-iidx-fpga-flash](ezusb-iidx-fpga-flash.md): Tool for flashing the FPGA on ezusb 1 boards.
Required if you want to run games without native ezusb support using BT5's iidxio API. - [ezusb-iidx-fpga-flash](ezusb-iidx-fpga-flash.md): Tool for flashing the FPGA on ezusb 1 boards.
* [ezusb-iidx-sram-flash](ezusb-iidx-sram-flash.md): Tool for flashing data to the SRAM of ezusb Required if you want to run games without native ezusb support using BT5's iidxio API.
FX 2 boards. Required if you want to run games without native ezusb FX 2 support using BT5's iidxio - [ezusb-iidx-sram-flash](ezusb-iidx-sram-flash.md): Tool for flashing data to the SRAM of ezusb FX
API. 2 boards. Required if you want to run games without native ezusb FX 2 support using BT5's iidxio
* [ezusb-tool](ezusb-tool.md): Fundamental tool for flashing the base firmware to ezusb 1/2 boards. API.
Required if you want to run games without native ezusb 1/2 support using BT5's iidxio API. - [ezusb-tool](ezusb-tool.md): Fundamental tool for flashing the base firmware to ezusb 1/2 boards.
Required if you want to run games without native ezusb 1/2 support using BT5's iidxio API.
### IIDX exit hooks ### IIDX exit hooks
Exit hooks allow you to exit the game using a combination of inputs on native IO hardware. Exit hooks allow you to exit the game using a combination of inputs on native IO hardware.
Supported IO hardware: Supported IO hardware:
* [ezusb](iidx-ezusb-exit-hook.md)
* [ezusb 2](iidx-ezusb2-exit-hook.md) - [ezusb](iidx-ezusb-exit-hook.md)
* [bio2](iidx-bio2-exit-hook.md) - [ezusb 2](iidx-ezusb2-exit-hook.md)
- [bio2](iidx-bio2-exit-hook.md)
## Misc ## Misc
* [mempatch-hook]: Hook library to dynamically apply memory address patches during runtime before
your application starts execution. Should be prefered over hardcoded hex-edits if applicable. - \[mempatch-hook\]: Hook library to dynamically apply memory address patches during runtime before
* [pcbidgen]: Command line tool to generate random PCBIDs your application starts execution. Should be prefered over hardcoded hex-edits if applicable.
- \[pcbidgen\]: Command line tool to generate random PCBIDs

View File

@ -1,2 +1,2 @@
Test your real ACIO hardware connected to your machine using this tool. Just Test your real ACIO hardware connected to your machine using this tool. Just execute it and follow
execute it and follow the usage instructions. the usage instructions.

View File

@ -1,3 +1,3 @@
Testing tool for development of ddrio libraries used for emulating the main io Testing tool for development of ddrio libraries used for emulating the main io hardware on
hardware on bemanitools for DanceDanceRevoluion. Just place ddriotest.exe and your bemanitools for DanceDanceRevoluion. Just place ddriotest.exe and your custom ddrio.dll in the same
custom ddrio.dll in the same folder and run ddriotest.exe. folder and run ddriotest.exe.

View File

@ -1,3 +1,3 @@
Testing tool for development of eamio libraries used for emulating card reader Testing tool for development of eamio libraries used for emulating card reader hardware on
hardware on bemanitools. Just place eamiotest.exe and the eamio.dll your bemanitools. Just place eamiotest.exe and the eamio.dll your custom eamio.dll in the same folder and
custom eamio.dll in the same folder and run eamiotest.exe. run eamiotest.exe.

View File

@ -1,6 +1,5 @@
Flash a binary FPGA binary (not hex) firmware image to the FPGA of a EZUSB Flash a binary FPGA binary (not hex) firmware image to the FPGA of a EZUSB board. This assumes that
board. This assumes that your IO board is already flashed using a base your IO board is already flashed using a base firmware image (either by the game itself or using the
firmware image (either by the game itself or using the *ezusb-tool* *ezusb-tool* application). Just call the executable and follow the usage instructions. The type *v1*
application). Just call the executable and follow the usage instructions. refers to the first gen protocol used from iidx 9 to 13 and *v2* to the second gen protocol used
The type *v1* refers to the first gen protocol used from iidx 9 to 13 and *v2* from iidx 14 onwards.
to the second gen protocol used from iidx 14 onwards.

View File

@ -1,4 +1,3 @@
Tool to write a binary (not hex) image to the SRAM of a ezusb board. Tool to write a binary (not hex) image to the SRAM of a ezusb board. Just run the executable and
Just run the executable and follow the usage instructions. Ensure that the follow the usage instructions. Ensure that the correct base firmware supporting SRAM is flashed to
correct base firmware supporting SRAM is flashed to the board prior using this the board prior using this (either by the game or using the *ezusb-tool* application).
(either by the game or using the *ezusb-tool* application).

View File

@ -1,6 +1,5 @@
Tool for fundamental legacy EZUSB management tasks, e.g. scanning for connected Tool for fundamental legacy EZUSB management tasks, e.g. scanning for connected devices, querying
devices, querying basic device info (vid, pid, name) and flashing firmware. basic device info (vid, pid, name) and flashing firmware. This tool requires the "cyusb" driver to
This tool requires the "cyusb" driver to be installed and does NOT work with the be installed and does NOT work with the "cyusb3" driver and thus not on anything newer than WinXP.
"cyusb3" driver and thus not on anything newer than WinXP.
Just run the tool without any arguments to get usage information. Just run the tool without any arguments to get usage information.

View File

@ -1,22 +1,17 @@
A hook library for debugging and dumping usb requests of games that use the A hook library for debugging and dumping usb requests of games that use the ezusb IO board (IIDX
ezusb IO board (IIDX C02, IIDX IO2, Pop'n Music IO2). The library creates C02, IIDX IO2, Pop'n Music IO2). The library creates a log file *ezusbdbg.log* in the same directory
a log file *ezusbdbg.log* in the same directory as your library/executable as your library/executable which contains data dumps of the usb device's traffic.
which contains data dumps of the usb device's traffic.
Example usage: Example usage: *inject iidxhook1.dll ezusbdbg-hook.dll bm2dx.exe ...* *launcher -K ezusbdbg-hook.dll
*inject iidxhook1.dll ezusbdbg-hook.dll bm2dx.exe ...* bm2dx.dll ...*
*launcher -K ezusbdbg-hook.dll bm2dx.dll ...*
Make sure to provide the following additional arguments: Make sure to provide the following additional arguments: *--ezusbdbg_path <device path>* The device
*--ezusbdbg_path <device path>* path points to the path to open the device, e.g. on the old IIDX games that was *"\\\\.\\Ezusb-0"*.
The device path points to the path to open the device, e.g. on the old IIDX If you don't know the path, you can run the hook with dummy data, e.g. *--ezusbdbg_path asdfgqwer*
games that was *"\\\\.\\Ezusb-0"*. If you don't know the path, you can run and check the log for any logged open calls with paths to find your ezusb device.
the hook with dummy data, e.g. *--ezusbdbg_path asdfgqwer* and check the log
for any logged open calls with paths to find your ezusb device.
--ezusbdbg_type <1 or 2> --ezusbdbg_type \<1 or 2> Specify the type of device to debug. *1* is for the legacy ezusb device,
Specify the type of device to debug. *1* is for the legacy ezusb device, e.g. e.g. IIDX C02, and *2* for the FX2 type device, e.g. IIDX IO2, Pop'n IO2.
IIDX C02, and *2* for the FX2 type device, e.g. IIDX IO2, Pop'n IO2.
Both parameters must be specified, otherwise the hook will error. Make sure Both parameters must be specified, otherwise the hook will error. Make sure to check the logfile for
to check the logfile for any errors or warnings as well. any errors or warnings as well.

View File

@ -1,6 +1,5 @@
Tool for fundamental EZUSB FX2 management tasks, e.g. scanning for connected Tool for fundamental EZUSB FX2 management tasks, e.g. scanning for connected devices, querying basic
devices, querying basic device info (vid, pid, name) and flashing firmware. This device info (vid, pid, name) and flashing firmware. This tool requires the newer "cyusb3" driver and
tool requires the newer "cyusb3" driver and does NOT work with the old "ezusb" does NOT work with the old "ezusb" driver.
driver.
Just run the tool without any arguments to get usage information. Just run the tool without any arguments to get usage information.

View File

@ -1,15 +1,21 @@
# IIDX BIO2 exit hook # IIDX BIO2 exit hook
A hook library that can be used with BeatmaniaIIDX games that run the BIO2 IO board either natively,
e.g. 25+, or using the [iidxio-bio2 backend](../iidxhook/iidx-bio2.md). It allows the player to
exit the game by pressing the buttons `Start P1 + Start P2 + VEFX + Effect` simultaneously. This can
be useful if you want an option to exit back to your desktop without having a keyboard attached.
The exit hook lib must be loaded like any other hook lib you are already injecting to the game A hook library that can be used with BeatmaniaIIDX games that run the BIO2 IO board either natively,
using either `inject` or `launcher` (depending on the game version). The order for the hook libs is important as they are loaded in the order specified for the inject/launcher call. The entry in the `gamestart.bat` file should look like this for inject: e.g. 25+, or using the [iidxio-bio2 backend](../iidxhook/iidx-bio2.md). It allows the player to exit
the game by pressing the buttons `Start P1 + Start P2 + VEFX + Effect` simultaneously. This can be
useful if you want an option to exit back to your desktop without having a keyboard attached.
The exit hook lib must be loaded like any other hook lib you are already injecting to the game using
either `inject` or `launcher` (depending on the game version). The order for the hook libs is
important as they are loaded in the order specified for the inject/launcher call. The entry in the
`gamestart.bat` file should look like this for inject:
```bat ```bat
inject iidxhook3.dll -K iidx-bio2-exit-hook.dll bm2dx.exe ... inject iidxhook3.dll -K iidx-bio2-exit-hook.dll bm2dx.exe ...
``` ```
...and for launcher: ...and for launcher:
```bat ```bat
launcher -K iidxhook8.dll -K iidx-bio2-exit-hook.dll bm2dx.dll ... launcher -K iidxhook8.dll -K iidx-bio2-exit-hook.dll bm2dx.dll ...
``` ```

View File

@ -1,12 +1,11 @@
A hook library that can be used with BeatmaniaIIDX games that run the old ezusb A hook library that can be used with BeatmaniaIIDX games that run the old ezusb IO board (e.g.
IO board (e.g. 9-13). It allows you to exit the game by pressing Start P1 + 9-13). It allows you to exit the game by pressing Start P1 + Start P2 + VEFX + Effect
Start P2 + VEFX + Effect simultaneously. This is very useful if you want an simultaneously. This is very useful if you want an option to exit back to your desktop without
option to exit back to your desktop without having a keyboard attached. having a keyboard attached.
The exit hook lib must be loaded like any other hook lib you are already The exit hook lib must be loaded like any other hook lib you are already injecting to the game using
injecting to the game using *inject*. The order for the hook libs is important *inject*. The order for the hook libs is important as they are loaded in the order specified for the
as they are loaded in the order specified for the inject call. The entry in inject call. The entry in the *gamestart.bat* file should look like this: *inject iidxhook1.dll
the *gamestart.bat* file should look like this: iidx-ezusb-exit-hook.dll bm2dx.exe ...*
*inject iidxhook1.dll iidx-ezusb-exit-hook.dll bm2dx.exe ...*
Where iidxhook1 is used for version 9-12. Use iidxhook2 for version 13. Where iidxhook1 is used for version 9-12. Use iidxhook2 for version 13.

View File

@ -1,15 +1,13 @@
A hook library that can be used with BeatmaniaIIDX games that run the ezusb A hook library that can be used with BeatmaniaIIDX games that run the ezusb FX2 IO board (e.g.
FX2 IO board (e.g. 14-24). It allows you to exit the game by pressing Start P1 + 14-24). It allows you to exit the game by pressing Start P1 + Start P2 + VEFX + Effect
Start P2 + VEFX + Effect simultaneously. This is very useful if you want an simultaneously. This is very useful if you want an option to exit back to your desktop without
option to exit back to your desktop without having a keyboard attached. having a keyboard attached.
The exit hook lib must be loaded like any other hook lib you are already The exit hook lib must be loaded like any other hook lib you are already injecting to the game using
injecting to the game using either *inject* or *launcher* (depending on the game either *inject* or *launcher* (depending on the game version). The order for the hook libs is
version). The order for the hook libs is important as they are loaded in the important as they are loaded in the order specified for the inject/launcher call. The entry in the
order specified for the inject/launcher call. The entry in the *gamestart.bat* *gamestart.bat* file should look like this for inject: *inject iidxhook3.dll -K
file should look like this for inject: iidx-ezusb2-exit-hook.dll bm2dx.exe ...* ...and for launcher: *launcher -K iidxhook4.dll -K
*inject iidxhook3.dll -K iidx-ezusb2-exit-hook.dll bm2dx.exe ...* iidx-ezusb2-exit-hook.dll bm2dx.dll ...*
...and for launcher:
*launcher -K iidxhook4.dll -K iidx-ezusb2-exit-hook.dll bm2dx.dll ...*
Where iidxhook3 is used for 14-15 and iidxhook4 for 20-24. Where iidxhook3 is used for 14-15 and iidxhook4 for 20-24.

View File

@ -1,3 +1,3 @@
Testing tool for development of iidxio libraries used for emulating the main io Testing tool for development of iidxio libraries used for emulating the main io hardware on
hardware on bemanitools for BeatmaniaIIDX. Just place iidxiotest.exe and your bemanitools for BeatmaniaIIDX. Just place iidxiotest.exe and your custom iidxio.dll in the same
custom iidxio.dll in the same folder and run iidxiotest.exe. folder and run iidxiotest.exe.

View File

@ -1,3 +1,3 @@
Testing tool for development of jbio libraries used for emulating the main io Testing tool for development of jbio libraries used for emulating the main io hardware on
hardware on bemanitools for jubeat. Just place jbiotest.exe and your bemanitools for jubeat. Just place jbiotest.exe and your custom jbio.dll in the same folder and run
custom jbio.dll in the same folder and run jbiotest.exe. jbiotest.exe.

View File

@ -1,36 +1,36 @@
# A simple memory patching hook # A simple memory patching hook
This is a hook which can be passed along with other hooks to be injected into This is a hook which can be passed along with other hooks to be injected into the target application
the target application of your choice (e.g. when using inject or launcher). It of your choice (e.g. when using inject or launcher). It allows you to patch raw memory contents of
allows you to patch raw memory contents of either the target application or either the target application or any libraries loaded with it. No static hex-edits anymore. Instead,
any libraries loaded with it. No static hex-edits anymore. Instead, create a create a simple script file and also document your patches for others which allows them to easily
simple script file and also document your patches for others which allows them disable/enable them.
to easily disable/enable them.
# Setup # Setup
Copy the *mempatch-hook.dll* to the target application of your choice and add Copy the *mempatch-hook.dll* to the target application of your choice and add it to the list of
it to the list of libraries to inject: libraries to inject:
Example when using *inject.exe*: Example when using *inject.exe*:
``` ```
inject iidxhook3.dll mempatch-hook.dll bm2dx.exe --config iidxhook-16.conf --mempatch myPatch.mph %* inject iidxhook3.dll mempatch-hook.dll bm2dx.exe --config iidxhook-16.conf --mempatch myPatch.mph %*
``` ```
When using *launcher.exe*: When using *launcher.exe*:
``` ```
launcher -K iidxhook4.dll -K mempatch-hook.dll bm2dx.dll --config iidxhook.conf --mempatch myPatch.mph %* launcher -K iidxhook4.dll -K mempatch-hook.dll bm2dx.dll --config iidxhook.conf --mempatch myPatch.mph %*
``` ```
To load a patch script, add the *--mempatch <path to patch script>* argument (as To load a patch script, add the *--mempatch <path to patch script>* argument (as shown above in the
shown above in the example). You can specify this more than once which allows example). You can specify this more than once which allows you to apply multiple scripts in order,
you to apply multiple scripts in order, e.g. e.g. *--mempatch myPatch1.mph --mempatch myPatch1.mph*.
*--mempatch myPatch1.mph --mempatch myPatch1.mph*.
# Patch script format # Patch script format
A patch script is a simple list of items seperated by a newline character A patch script is a simple list of items seperated by a newline character (i.e. one item = one
(i.e. one item = one line). Example script file: line). Example script file:
``` ```
# This is a comment # This is a comment

View File

@ -1,2 +1,2 @@
Test your real DDR P3IO (Dragon) + EXTIO hardware connected to your machine Test your real DDR P3IO (Dragon) + EXTIO hardware connected to your machine using this tool. Just
using this tool. Just execute it and follow the usage instructions. execute it and follow the usage instructions.

View File

@ -1,2 +1 @@
Tool to generate random and (checksum) valid PCBIDs used on various Konami Tool to generate random and (checksum) valid PCBIDs used on various Konami Arcade games.
Arcade games.

View File

@ -1,13 +1,16 @@
# ViGEm: Virtual Gamepad Emulation Framework # ViGEm: Virtual Gamepad Emulation Framework
Virtual game controller emulation library. Allows us to create in code emulated XBOX controllers. Virtual game controller emulation library. Allows us to create in code emulated XBOX controllers.
This is used to hook up BT5's various IO API libraries allowing you to use any of their This is used to hook up BT5's various IO API libraries allowing you to use any of their
implemtations as a game controller on Windows. implemtations as a game controller on Windows.
References: References:
* [ViGEmBus](https://github.com/ViGEm/ViGEmBus)
* [ViGEmClient](https://github.com/ViGEm/ViGEmClient) - [ViGEmBus](https://github.com/ViGEm/ViGEmBus)
- [ViGEmClient](https://github.com/ViGEm/ViGEmClient)
Available ViGEm client implementations: Available ViGEm client implementations:
* [vigem-iidxio](vigem-iidxio.md): Exposes inputs provided by the iidxio API as three XBOX gamepads
* [vigem-sdvxio](vigem-sdvxio.md): Exposes inputs provided by the sdvxio API as one XBOX gamepad - [vigem-iidxio](vigem-iidxio.md): Exposes inputs provided by the iidxio API as three XBOX gamepads
- [vigem-sdvxio](vigem-sdvxio.md): Exposes inputs provided by the sdvxio API as one XBOX gamepad

View File

@ -1,4 +1,5 @@
# ViGEm IIDXIO # ViGEm IIDXIO
This application allows you to use any iidxio backend, e.g. `iidxio-ezusb.dll`, `iidxio-ezusb2.dll` This application allows you to use any iidxio backend, e.g. `iidxio-ezusb.dll`, `iidxio-ezusb2.dll`
or `iidxio-bio2.dll`, to be exposed as three XBOX 360 game controller on Windows. or `iidxio-bio2.dll`, to be exposed as three XBOX 360 game controller on Windows.
@ -7,56 +8,45 @@ Thus, it allows you to use a real cabinet with all its IO with *any* game that s
Note: This will not work with games that require Direct Input (dinput), e.g. IIDX Infinitas. Note: This will not work with games that require Direct Input (dinput), e.g. IIDX Infinitas.
## Setup ## Setup
* Install [ViGEmBus](https://github.com/ViGEm/ViGEmBus/releases)
* Source for compiled binaries: [bemanitools-supplement](https://dev.s-ul.eu/djhackers/bemanitools-supplement) - Install [ViGEmBus](https://github.com/ViGEm/ViGEmBus/releases)
* Place the following in the same folder as `vigem-iidxio.exe`: - Source for compiled binaries:
* Get a copy of [ViGEmClient.dll](https://bin.jvnv.net/file/ZgMJK/ViGEmClient.zip) (or from bemanitools-supplements) [bemanitools-supplement](https://dev.s-ul.eu/djhackers/bemanitools-supplement)
* Rename your corresponding `iidxio-XXX.dll`, e.g. `iidxio-bio2.dll`, to `iidxio.dll`. - Place the following in the same folder as `vigem-iidxio.exe`:
* Run `vigem-iidxio.exe` so that the config file gets created (on first start) - Get a copy of [ViGEmClient.dll](https://bin.jvnv.net/file/ZgMJK/ViGEmClient.zip) (or from
* Edit `vigem-iidxio.conf` if needed. Available options are explained in the file bemanitools-supplements)
- Rename your corresponding `iidxio-XXX.dll`, e.g. `iidxio-bio2.dll`, to `iidxio.dll`.
- Run `vigem-iidxio.exe` so that the config file gets created (on first start)
- Edit `vigem-iidxio.conf` if needed. Available options are explained in the file
## Usage ## Usage
* Depending on the iidxio implementation used, you might have to do some setup, e.g. flashing your
IO board for [ezusb](../iidxhook/iidxio-ezusb.md#setup) or - Depending on the iidxio implementation used, you might have to do some setup, e.g. flashing your
[ezusb2](../iidxhook/iidxio-ezusb2.md#setup) IO board for [ezusb](../iidxhook/iidxio-ezusb.md#setup) or
* Run `vigem-iidxio.exe` and keep it open/running [ezusb2](../iidxhook/iidxio-ezusb2.md#setup)
* To quit the program, hit the `TEST` and `SERVICE` buttons at the same time - Run `vigem-iidxio.exe` and keep it open/running
- To quit the program, hit the `TEST` and `SERVICE` buttons at the same time
## Input mappings ## Input mappings
| Cabinet | XBOX Gamepad 1 | XBOX Gamepad 2 | XBOX Gamepad 3 | | Cabinet | XBOX Gamepad 1 | XBOX Gamepad 2 | XBOX Gamepad 3 |
|------------|--------------------|--------------------|--------------------| |------------|--------------------|--------------------|--------------------| | P1 Key 1 | A | | | |
| P1 Key 1 | A | | | P1 Key 2 | B | | | | P1 Key 3 | X | | | | P1 Key 4 | Y | | | | P1 Key 5 | Left shoulder | | | | P1
| P1 Key 2 | B | | | Key 6 | Rights houlder | | | | P1 Key 7 | Start | | | | P2 Key 1 | | A | | | P2 Key 2 | | B | | | P2
| P1 Key 3 | X | | | Key 3 | | X | | | P2 Key 4 | | Y | | | P2 Key 5 | | Left shoulder | | | P2 Key 6 | | Rights houlder
| P1 Key 4 | Y | | | | | | P2 Key 7 | | Start | | | Start P1 | Back | | | | Start P2 | | Back | | | VEFX | | | B | |
| P1 Key 5 | Left shoulder | | | Effect | | | A | | Test | | | X | | Service | | | Y | | Coin | | | Start | | TT P1 Up | Thumbstick X
| P1 Key 6 | Rights houlder | | | axis+ | | | | TT P1 Down | Thumbstick X axis- | | | | TT P2 Up | | Thumbstick X axis+ | | | TT P2
| P1 Key 7 | Start | | | Down | | Thumbstick X axis- | |
| P2 Key 1 | | A | |
| P2 Key 2 | | B | |
| P2 Key 3 | | X | |
| P2 Key 4 | | Y | |
| P2 Key 5 | | Left shoulder | |
| P2 Key 6 | | Rights houlder | |
| P2 Key 7 | | Start | |
| Start P1 | Back | | |
| Start P2 | | Back | |
| VEFX | | | B |
| Effect | | | A |
| Test | | | X |
| Service | | | Y |
| Coin | | | Start |
| TT P1 Up | Thumbstick X axis+ | | |
| TT P1 Down | Thumbstick X axis- | | |
| TT P2 Up | | Thumbstick X axis+ | |
| TT P2 Down | | Thumbstick X axis- | |
Turntables are either in absolute or relative mode depending on how it's defined in the Turntables are either in absolute or relative mode depending on how it's defined in the
`vigem-iidxio.conf`. `vigem-iidxio.conf`.
## Additional Notes For Cabinets (Running on embedded Windows 7): ## Additional Notes For Cabinets (Running on embedded Windows 7):
* Make sure that you follow the instructions exactly from the release page
([Prerequisites for Windows 7](https://github.com/ViGEm/ViGEmBus/wiki/Prerequisites-for-Windows-7)) - Make sure that you follow the instructions exactly from the release page
* If you get an error while trying to install KB3033929, re-enable windows update ([Prerequisites for Windows 7](https://github.com/ViGEm/ViGEmBus/wiki/Prerequisites-for-Windows-7))
* If you can't find some of these files, see bemanitools-supplements - If you get an error while trying to install KB3033929, re-enable windows update
* Make sure to ewfmgr C: -commit and reboot after installing the drivers (this only needs to be done once) - If you can't find some of these files, see bemanitools-supplements
- Make sure to ewfmgr C: -commit and reboot after installing the drivers (this only needs to be done
once)

View File

@ -1,26 +1,34 @@
This application allows you to use any sdvxio backend, e.g. `sdvxio-kfca.dll`, to be available as a XBOX 360 game controller on windows. This application allows you to use any sdvxio backend, e.g. `sdvxio-kfca.dll`, to be available as a
Thus, it allows you to use a real cab with *any* game that supports xinput. XBOX 360 game controller on windows. Thus, it allows you to use a real cab with *any* game that
supports xinput.
# Setup # Setup
* Install [ViGEmBus](https://github.com/ViGEm/ViGEmBus/releases)
* Place the following in the same folder as vigem-sdvxio: - Install [ViGEmBus](https://github.com/ViGEm/ViGEmBus/releases)
* Get a copy of [ViGEmClient.dll](https://bin.jvnv.net/file/ZgMJK/ViGEmClient.zip) (or from bemanitools-supplements) - Place the following in the same folder as vigem-sdvxio:
* Rename your corresponding `sdvxio-XXX.dll`, e.g. `sdvxio-kfca.dll`, to `sdvxio.dll`. - Get a copy of [ViGEmClient.dll](https://bin.jvnv.net/file/ZgMJK/ViGEmClient.zip) (or from
* Run `vigem-sdvxio.exe` so that the config file gets created bemanitools-supplements)
* Edit `vigem-sdvxio.conf` so that the config file gets created as needed - Rename your corresponding `sdvxio-XXX.dll`, e.g. `sdvxio-kfca.dll`, to `sdvxio.dll`.
- Run `vigem-sdvxio.exe` so that the config file gets created
- Edit `vigem-sdvxio.conf` so that the config file gets created as needed
# Usage # Usage
* Run `vigem-sdvxio.exe`
* To quit the program, hit the TEST + SERVICE button at the same time - Run `vigem-sdvxio.exe`
- To quit the program, hit the TEST + SERVICE button at the same time
# Mapping # Mapping
* BT ABCD are mapped to ABXY
* FX LR are mapped to LB/RB - BT ABCD are mapped to ABXY
* VOL LR are mapped to L thumbstick X/Y (either in absolute or relative mode depending on the config) - FX LR are mapped to LB/RB
- VOL LR are mapped to L thumbstick X/Y (either in absolute or relative mode depending on the
config)
# Additional Notes For Cabinets (Running on embedded Windows 7): # Additional Notes For Cabinets (Running on embedded Windows 7):
* Make sure that you follow the instructions exactly from the release page
([Prerequisites for Windows 7](https://github.com/ViGEm/ViGEmBus/wiki/Prerequisites-for-Windows-7)) - Make sure that you follow the instructions exactly from the release page
* If you get an error while trying to install KB3033929, re-enable windows update ([Prerequisites for Windows 7](https://github.com/ViGEm/ViGEmBus/wiki/Prerequisites-for-Windows-7))
* If you can't find some of these files, see bemanitools-supplements - If you get an error while trying to install KB3033929, re-enable windows update
* Make sure to ewfmgr C: -commit and reboot after installing the drivers (this only needs to be done once) - If you can't find some of these files, see bemanitools-supplements
- Make sure to ewfmgr C: -commit and reboot after installing the drivers (this only needs to be done
once)