The paths changed for 18 and again for 19. Refactor and improve
the detection logic to consider this. This also should make
the code more maintainable.
The synchronization block was too coarse and kept the lock
acquired even when the hooked call continued traversing because
it skipped the chart patch trap code. This was apparently fine
on several games but caused very flaky deadlocking on iidx18
during the boot screens and even crashed iidx19 consistently
before showing the boot screen.
Applies to iidx18 and iidx19 when using the recently extended
redirect feature for settings paths, mixing / and \ crashes the
game in some operator sub-menus when trying to save settings.
The fedora image was already quite old but also took ages to
initially install the dependencies. Being more familiar with debian,
initial container building with package installation being rather
quick, and assuming most folks being more familiar debian as well,
I decided to shift to make this easier to maintain.
- Use static assert to verify struct sizes
- Replace "magic numbers" with proper sizeof's
- Allocate largest size buffer for message response to address
compiler warnings which indicates potential out of bounds
reads/writes
This removes the need to copy all the data into the docker container
and outputs from the build process out of the container. In
hindsight, this was a poor design decision as it created docker
images that were very large with data, that you don't have to
keep stored once the build finished, e.g. the build output.
Therefore, mount the local folder, keep the checkouts also local
which is good for debugging and also re-using them to build without
the docker container (no second checkout required).
Build output is also written directly to the build/ output folder
Overall, the docker container is more lightweight and actually
a "build environment" only not tainted with specific versions
of the dependencies to build.
Provide an option for non final lincle revisions and
if the "modern" monitor check is not delivering stable
results on the final lincle revision, e.g. using the
original "pendual lcd" monitor.
The default should be targeting emulation on a "normal
desktop pc". The default confits for 28 and 29 refeclt
that already, but it seems that 27 was missed out here.
When the process requests to exit, the debugger thread attached
from inject swallowed that event simply without taking action
of actually terminating the process. Handle this accordingly
when the debugger loop is running and terminate the process
Chinese IIDX styles will hang if bemanitools can't mount the dev\\nvram and dev\\raw folders. This simply adds commands to their gamestart.bat files to create those directories if they don't exist, preventing the game from hanging.
Affects all games based on version 18 and 19 which includes
the chinese versions
This code is based on the toastertools implementation.
Credits to the original authors.