diff --git a/doc/dev/journal/2025-02-09-iidx-engine.md b/doc/dev/journal/2025-02-09-iidx-engine.md new file mode 100644 index 0000000..95c3b6a --- /dev/null +++ b/doc/dev/journal/2025-02-09-iidx-engine.md @@ -0,0 +1,319 @@ +# IIDX engine overview and how game-play is impacted by hardware and software + +Date: 2025-02-09 Author: icex2 + +This document provides information and explains the following: + +* A sort-of taxonomy of the different major IIDX game engine versions +* How the core game-play part of the engine works regarding + * Threading model + * Main render loop + * Timing and synchronization + +The goal is to capture key knowledge about how the game's engine works to enable a better +understanding for developing bemanitools and how certain features can impact performance and +synchronization during game-play. + +This document is not claiming to be complete or 100% accurate. It is based on my own personal +research and understanding of the IIDX game engine. It is very likely that some of the information +is wrong or misunderstood. Feel free to raise any questions or concerns in an issue as I want +this document to be as accurate as possible. + +## Taxonomy of IIDX game engine versions + +With every version, there have been numerous changes and improvements to the game engine. The +following is a rough taxonomy that is focused on cabinet and hardware changes. As these are likely +the main driver for key changes to the software and game engine, they create fairly distinct +stages throughout the different versions of the game. The key attributes to be considered here are: + +* Main PCB +* IO board +* Monitor + +All of these had significant impact on key software features appearing or changing. + +### Twinkle hardware era: 1st Style to 8th Style + +* [Twinkle PCB](https://github.com/shizmob/arcade-docs/blob/main/konami/boards.md#twinkle) +* [Original rear projection monitor](https://github.com/shizmob/arcade-docs/blob/main/konami/products.md#iidx-rear-projection-monitor) +* Homogenous hardware and software + +### 1st gen PC-based upgrade only: 9th Style + +* 9th Style came as an upgrade kit only to existing twinkle-based cabinet hardware +* [KNM-845G3-A02 PCB](https://github.com/shizmob/arcade-docs/blob/main/konami/boards.md#knm-845g3-a02) +* [C02 EZUSB FX USB IO board](https://github.com/shizmob/arcade-docs/blob/main/konami/io.md#gec02-pwbaa) +* Magnetic card readers connected to ezusb IO board + +### 1st gen PC-based with dedicated cabinet: 10th Style to DistorteD (13) + +* From here on, old cabinets that received the "Twinkle hardware" upgrade kit could always receive software only + upgrades +* [CRT monitor](https://github.com/shizmob/arcade-docs/blob/main/konami/products.md#iidx-crt-monitor) with new dedicated + cabinets +* [D01 EZUSB FX USB IO board](https://github.com/shizmob/arcade-docs/blob/main/konami/io.md#d01-io) +* Slotted card readers starting version 13 + +### 2nd gen PC: GOLD (14) to Lincle (19) + +* [FAB-e945-KN205](https://github.com/shizmob/arcade-docs/blob/main/konami/boards.md#fab-e945-kn205) +* All prior cabinet configurations can be upgraded with a PCB and software upgrade +* New LCD monitor starting version 15 + * Further variants of the LCD monitor appear starting version 18 +* [IO2 EZUSB FX2 USB IO board](https://github.com/shizmob/arcade-docs/blob/main/konami/io.md#usbio2) introduced with + version 14 +* Switch to wave pass readers on version 19 + +### 3rd gen PC: Tricoro (20) to Sinobuz (24) + +* All prior cabinet configurations can be upgraded with a PCB and software upgrade +* [ADE-HM65](https://github.com/shizmob/arcade-docs/blob/main/konami/boards.md#hm65) +* Game engine supports HD mode (720p) +* Many new LCD monitor variants appear with every new version + +### 4th gen PC: CANNON BALLERS (25) to RESIDENT (30) + +* All prior cabinet configurations can be upgraded with a PCB and software upgrade +* [ADE-6291](https://github.com/shizmob/arcade-docs/blob/main/konami/boards.md#ade-6291) +* [BIO2 IO board](https://github.com/shizmob/arcade-docs/blob/main/konami/boards.md#hm65) + * Upgrade cabinets required the [BIO2 sub-IO board](https://github.com/shizmob/arcade-docs/blob/main/konami/io.md#bio2-ldj-sub-io) +* Drop of SD mode support starting version 27 +* Supporting 120 hz monitors starting version 27 +* Many new LCD monitor variants appear with every new version + * 42" 120 hz for lightning cabinets starting version 27 + * 42" 60 hz for non-lightning cabinets starting version 25 + +### 5th gen PC: RESIDENT (30) to EPOLIS (31) + +* All prior cabinet configurations can be upgraded with a PCB and software upgrade +* [C300-xonarae](https://github.com/shizmob/arcade-docs/blob/main/konami/boards.md#c300-xonarae) +* Game engine supports FHD mode (1080p) + +## Threading model and core responsibilities in PC-based games + +Since the early days of 9th Style to today (as of time of writing this: EPOLIS), the threading model +hasn't changed significantly: + +* Main and rendering thread + * Runs your typical D3D9 render loop + * Using D3D9ex starting version 27 + * Starting and managing other threads + * Any file and game asset loading + * Handles all the core game logic of the different screens starting from the initial boot screen + to the core game-play screen +* IO thread + * Polls the main IO hardware and synchronizes the in-memory input and output state with the + hardware + * Executes commands issued by the main thread to the IO board such as dongle or card reader + commands (ezusb generation of IO only) +* Card reader thread (not applicable to versions 9 to 12) + * Runs the protocol to read/write the hardware of the readers + * Async execution of higher level commands issued by the main thread to the card reader hardware, + e.g. card read, card eject etc. +* Audio thread + * Streaming of audio data to the sound API + * DirectSound for versions 9 to 26 + * WASAPI for versions 27 to 30 for non-lighting cabinets with ADE-6291 hardware + * ASIO for versions 27 and newer for lighting cabinets + * ASIO for version 30/31 and newer for non-lighting cabinets with C300-xonarae hardware + * Async execution of higher level commands issued by the main thread to the audio backend, e.g. + play audio, stop audio, etc. +* Network thread + * Network plumbing with the xrpc protocol + * Async execution of request-response commands issued by the main thread + +## Main and rendering thread + +With the game having transitioning to different screens throughout it's lifecycle, the main render +loop might contain different logic such as asset loading. The following focuses on the main +game-play screen, only. Common rendering logic still applies to other screens. + +This follows your typical D3D9 single threaded rendering loop which boils down to the following: + +* Begin the scene (`BeginScene`) +* Set the render target (`SetRenderTarget`) +* Clear the back buffer (`Clear`) +* Run engine step. This includes and is mixed with + * IO input evaluation + * Game engine state and (re-) drawing the scene + * Commands to the audio playback, e.g. play key sounds + * Setting IO outputs +* End the scene (`EndScene`) +* Target a minimum frame time + * Introduced with version 11 + * Sleep (`Sleep` or `SleepEx`) to fill up the frame up to either 13 ms or 14 ms (depending on the + version) + * This was likely introduced to not have the game run at hundreds of FPS if v-sync was disabled + (probably when running in window mode for development/testing purposes) +* Swapping the back buffers (`Present`) + * D3D9 is configured with v-sync enabled by default and targets 60 hz + * With this configuration, the call to `Present` fills up the remaining frame time to target the + configured 60 hz refresh rate + +### Rendering resolutions + +The game engine went through a couple of different rendering resolutions: + +* 640x240: version 1 to 8 (all twinkle hardware) +* 640x480: version 9 to 19 (1st and 2nd gen PC-based) +* 1280x720 (HD mode) and 640x480 (SD mode): version 20 to 27 (3rd and 4th gen PC-based) +* 1280x720 (HD mode) only for version 28 to 29 (4th gen PC-based) +* 1280x720 (HD mode) and 1920x1080 (FHD mode) for version 30 (4th gen PC-based) +* 1920x1080 (FHD mode) only for version 30+ (5th gen PC-based) + +## Core engine timing and synchronization + +The following outlines and explains the core engine concepts related to timing and synchronization. + +### The origins, twinkle hardware + +* It appears that the game has been on the same codebase since it's inception. +* This can be reasoned by the following observations + * 9th style as the first PC-based game very buggy on initial release + * 9th style threading model very clunky with various thread settings showing they tried to + prioritize different processing on a single core CPU + * Coming from twinkle hardware that is a realtime system vs. a Windows XP system + * Fixed playstation 1 based hardware with a refresh rate of + [59.8260978565 hz](https://github.com/mamedev/mame/blob/bf9df04e005697788ae988ef5aea91a1878fd631/src/devices/video/psx.cpp#L435) + * No need to assume getting anything else if the resource budget per frame is not exceeded + * All sub-systems were driven synchronously to that fixed time step + * No need for the engine to synchronize audio during the song. When the song is started + correctly, it stayed sync throughout the song +* Observations and assumptions + * It appears the developers struggled a lot with the significant platform shift to PC as indicated + by various core engine improvements throughout the years still + * Switches of hardware generations further complicated the situation as these forced them to further + drift away from how the game engine was initially designed on the twinkle system + +### Frame time/timing and engine step + +* The game's engine step and timing is frame based +* The main render loop defines the minimum valid timing window for the game engine to be able to + evaluate + * 60 hz/fps = 16.667 ms (rounded to three decimal places) + * 120 hz/fps = 8.333 ms (rounded to three decimal places), only relevant for lightning cabinets with their 120 hz + screen/mode +* Depending on the GPU hardware and configuration, the GPU might drive the screen not exactly at + perfectly 60 hz/fps = 16.667 ms +* As outlined in the [main render loop](#main-and-rendering-thread), the `Present` call is the + key function call to determine the frame time for the game engine +* Just having v-sync enabled and telling D3D9 to **target** 60 hz, it still depends on how the GPU + driver is implemented and how the GPU driver's implementation of D3D9 executes on the `Present` + call +* This is primarily determined by how the GPU driver is operating and driving connected display + hardware +* The following factors can contribute to that either directly or indirectly + * Different monitor types analog vs. digital (CRT vs. LCD) + * Different monitor connections VGA vs. DVI/HDMI/DP + * Different GPU drivers + * Different GPU hardware and vendors + * Different GPU settings + +### Monitor check screen + +The monitor check screen was introduced with version 14. This was a solution to the problem of not +guaranteeing a single fixed refresh rate throughout different GPU and monitor combinations. See +a detailed explanation in the previous sub-subsection about +[what influences the frame time](#frame-timetiming-and-engine-step) of the game. + +The goal of the monitor check is to measure the frame time of the main render loop and use the +results for [driving the core engine step](#engine-step-and-synchronization). + +The monitor check evolved slightly as different GPU and monitor hardware, and GPU drivers yielded +varying refresh rates that determined the frame times of the main game loop. + +Actual values are outlined further down in the [engine step time](#engine-step-time) section. + +There are two main versions of the monitor check, all of them have always been part of the boot +process: + +* 14 + * Measures a total of 3000 frames + * If total time this took < 50004 ms -> so average of 16.668 ms per frame = 59.9952 hz + * S-Video mode -> 59.95 hz (also shows S-VIDEO when the monitor check completes) + * Otherwise VGA mode -> 60.05 hz + * If VGA is determined, the game patches the chart event data when loading + * `event_timestamp * 0.99817199 + 0.40000001` + * When S-Video no charts are patched and the timing data in the chart is used as is +* 15 to 18 + * Identical to 14 except that chart patching now happens in milliseconds instead of frames + * VGA mode: `16.65279` + * S-Video mode: `16.680567` + * `event_timestamp * (1.0 / frame_time) + 0.40000001)` +* 19 + * Identical to previous version + * Monitor check screen shows current FPS on the last revision of that version. However, it doesn't + use the value shown there by any means. Assuming this was added before the introduction of the + new monitor check on 20. +* 20 to 26 + * Runs on boot or when switching monitor modes SD vs. HD + * Measures only 1200 frames + * Takes the average refresh rate of 1200 frames + * Applies the measured avg. frame time directly to the charts before song +* 27 to 30 + * Frame rate measuring identical to prior versions + * Added additional logic after the frame time measurements for handling of 120 hz displays + * Includes checking the monitor and if the framerate matches as expected +* 30/31 LDJ-010 upgrade + * Added NvDisplayConfigLDJ tool which runs on system start and configures a custom timing in the + NVIDIA GPU driver to ensure a fixed monitor refresh rate +* 31 + * Same code as before + * Consider the first 460 frames of the measurement as warm-up frames + * Discard these for the actual measurement to get more stable frame times + * Use a base avg. value of 119.982 for the 120 hz monitors and 59.9 for 60 hz monitors. Further + frames measured are counted towards the average with the given base value + +### Engine core game-play with visual and audio synchronization + +#### Chart data + +* Chart data encodes note timing and timing window information +* Chart data consists of *note events* encoding a timestamp and note information such as type + and key-sound information +* Timing windows are defined per chart +* Most infamous example: GAMBOL (7Key/Another) +* Game engine timestamp evaluation and note event timestamp encoding + * 9 to 14: Refresh rate in hz + * 15 to 31: Milliseconds (equivalent to assuming 1000 fps) +* Fundamentally, that doesn't change game play experience as it's just a different way of + evaluating the timestamps since refresh rate in hz/frame rate in fps can be converted lossless to + frame time in ms + +#### Engine step time + +The engine uses the following source for frame rate/time to drive internal logic on the following +versions + +* 9 to 13: Hardcoded 59.95 hz +* 14: Either 59.95 hz or 60.05 hz determined by which value is determined to be closer to the + measured one during the monitor check screen on startup +* 15 to 19: 59.95 hz or 60.05 hz + * Monitor check on startup measures the frame time and picks the value closest to what's been + measured + * Monitor check result can be overridden with the *Output Type* setting in the operator menu + * *S-Video* to force to 59.95 hz + * *VGA* to force to 60.05 hz +* 20 to 31: Monitor check on boot determines the frame time and uses the result throughout the + entire game session + +#### Engine step and synchronization + +Per frame engine step advancing and synchronization during game-play + +* Game-play needs synchronization of the following aspects + * Drawn content on the screen + * Background audio playback track + * Key sound effects +* The game engine synchronizes these only at the start of a song + * It takes known/determined refresh rate/frame time as the fixed time for every frame cycle + throughout the entire song + * It starts playback of the background audio track together with playback of the chart data + * With every engine step/frame it advances internal calculations by that fixed amount of time. + Thus, the game engine expects this to be constant/stable throughout an entire song + * The chart data is advanced every frame by the engine + * Key sound events are turned into audio playback on command as the chart advances + * No re-synchronization or check-pointing between main rendering thread and audio is happening + throughout the song +* Remark: The above does not consider any kind of offsetting and timing adjustments for the sake + of keeping this simple and focus on the absolute core concepts \ No newline at end of file diff --git a/doc/iidxhook/iidx-syncbook.md b/doc/iidxhook/iidx-syncbook.md new file mode 100644 index 0000000..e24bb4c --- /dev/null +++ b/doc/iidxhook/iidx-syncbook.md @@ -0,0 +1,224 @@ +# IIDX "Syncbook": A guide to ensuring sync and performant gameplay + +This is a guide applicable to all IIDX versions that are native Windows PC-based. The goal is to +enable proper configuration of those games to ensure the game engine "runs in-sync" with any of its +IO (visual GPU/display output, audio output, user input) resulting in high and stable performance +for smooth game-play. + +This document won't go into the implementation details of the game engine. Please refer to the +[IIDX engine details journal](../dev/journal/2025-02-09-iidx-engine.md) for a more in-depth +information. + +## Understanding the problems and options to address them + +First, let's understand what the key problems are and how they contribute to different issues +that impact game-play. + +### Song de-syncing + +Symptom: Throughout playing a song, the audio is de-syncing even it was fine when the song started. + +Cause: The game engine is fundamentally designed to run on a fixed and consistent frame +rate/time per engine step. A mismatch of expected frame time by the game engine and actually delivered +frame time by the GPU driver. This can come either as a stable frame time that just mismatches in +general or (highly) fluctuating frame times. + +* G-sync on modern displays causes known fluctuations because it adjusts dynamically the monitor + refresh rate +* V-sync not correctly configured/enforced or even vsync-off override in driver is causing + inconsistent frame times +* Incorrect display timings causing refresh rate fluctuations resulting in inconsistent frame times + +Stable frame times but not having the correct ones that the game engine expects is a different +problem that can be addressed by: + +* Knowing the refresh rates expected by the game engine of the different game versions +* Configuring your GPU driver's display timings to match the expected frame times +* Or, patch the game's chart data with your custom display timings so the game engine gets uses + *your* "correct" frame times + * Note: Offline patching the chart data doesn't work for several game versions as the monitor + check does override this data, but not as flexible as required + * Use the chart patch feature of bemanitools instead + +### Micro-stuttering and non-smooth note scrolling + +This is a trickier problem as it can be caused by a few different things. + +* GPU related + * Fluctuating refresh rates result in fluctuating frame times in the main game loop + * GPU power configuration in non-performance mode (e.g. "power saving") causes processing latency + due to sleep states +* Display related + * Display firmware buggy and/or internal scalers that expect to run at very specific refresh rates + and cannot adapt to any custom display timings enforced by the GPU + * A known example is the official + [PENDUAL LCD monitor](https://github.com/shizmob/arcade-docs/blob/6ac99975cdb2bf668362f65fa9fa3ffb2127308b/konami/product/GULDJ-JI.md#notes-and-known-issues) that does not v-sync correctly to any other refresh-rate than 60.000 hz +* CPU related + * CPU power configuration on Windows in non-performance mode (e.g. "power saving") causes + processing latency due to sleep states + * Correct CPU C-states configuration in BIOS/UEFI + * These cannot be configured in Windows and are separate from Windows's power configuration +* Other stuff running in the background of the system causing fluctuations + * (Synchronous) Disk I/O heavy applications stealing CPU time + * Or any other process creating a considerable amount of CPU or GPU load + +## Configuration guide for different game versions + +### Measuring monitor refresh rate + +Let's start with configuring the system to meet the game engine's expectation regarding the +target monitor refresh rate and requiring vsync. + +First, use the [d3d9-monitor-check tool](../tools/d3d9-monitor-check.md) to measure the currently +configured refresh rate of your monitor. Note that your monitor might yield different timings on +different resolutions and different game versions run on +[different rendering resolutions](../dev/journal/2025-02-09-iidx-engine.md#rendering-resolutions). + +For example, the game version is 31 with the rendering resolution of 1920x1080 in FHD mode that you +want to target: + +```bat +d3d9-monitor-check.exe cmdline refresh-rate-test 1920 1080 60 +``` + +The test shows the current monitor refresh rate and the average refresh rate over the course of +the test. Check that the avg. refresh rate is stable during the measuring phase (during warm-up, +it's ok if it fluctuates). + +This test allows you to determine/check: + +* Refresh rate/frame time fluctuations: if you see (high) fluctuations on the first or second + decimal place +* What's your current target refresh rate the GPU is driving your monitor at +* If vsync isn't overridden by some other driver setting as you want to see a refresh rate around + the 60 hz mark + +### Measuring vsync issues + +Some displays or the GPU configuration might lead to vsync issues which can be detected with the +`d3d9-monitor-check.exe` tool as well. + +```bat +d3d9-monitor-check.exe cmdline vsync-test 1920 1080 60 +``` + +This runs a test with a VSYNC text that alternates red and cyan colors. If the text appears grey +all the time, everything's fine. If you spot brief red or cyan text either occasionally or +periodically, your current configuration has vsync issues resulting in skipped frames or old +frames displaying longer. + +### Configuration + +The following are recommended configurations for the different game versions. If any of these +don't work as expected, you have to troubleshoot and tweak these potentially. Please refer to the +[guidelines above](#configuration-guide-for-different-game-versions) to understand how to use +the tooling and test your changes. + +#### Recommended configuration with NVIDIA GPU and driver + +We want to achieve the following configuration on the GPU driver: + +* Turn-off g-sync if you have a monitor that supports it +* Disable power saving mode on GPU driver +* V-sync is not forced off +* Run the display on a target refresh rate of `59.950 hz` which has been determined to be + [the most compatible across all PC-based versions](../dev/journal/2025-02-09-iidx-engine.md#engine-step-time). + +##### Turn-off g-sync + +Create a new GPU profile for IIDX, if it doesn't exist yet: + +```bat +nvgpu.exe profile create iidx +``` + +Add the application names when the profile needs to be applied: + +```bat +:: For iidx versions 9 to 17 +nvgpu.exe profile application-add iidx bm2dx.exe +:: For iidx versions 18+ +nvgpu.exe profile application-add iidx launcher.exe +``` + +Disable G-SYNC for the profile: + +```bat +nvgpu.exe profile gsync-disable iidx +``` + +##### Disable power saving mode + +Set GPU power state to maximum for the profile (assumes you have a +[GPU profile called `iidx` already created](#turn-off-g-sync)): + +```bat +nvgpu.exe profile gpu-power-state-max iidx +``` + +##### Configure and verify target refresh rate of 59.950 hz and vsync + +Get display ID of your primary display: + +```bat +nvgpu.exe display primary-display-id +``` + +Copy the hex-value of the display ID and use it in the following commands. + +Test the custom display timing first, e.g. for versions that run in 1920x1080 +(Replace ` ` with the primary display ID you got): + +```bat +nvgpu.exe display custom-resolution-test 1920 1080 59.95 10 +``` + +This will test it for 10 seconds and then revert. If the result looked good, i.e. the screen didn't +go blank or the display output was garbage, apply it: + +```bat +nvgpu.exe display custom-resolution-set 1920 1080 59.95 +``` + +Test and verify the configuration is applied and works correctly: + +```bat +d3d9-monitor-check.exe cmdline refresh-rate-test 1920 1080 60 +``` + +Test if the enforced refresh rate is compatible with your display and vsync is working correctly: + +```bat +d3d9-monitor-check.exe cmdline vsync-test 1920 1080 60 +``` + +##### Alternative refresh rate configuration + +If for some reason your display doesn't support 59.950 hz properly, i.e. display artifacts or vsync +issues, you can use any other 60 hz compatible refresh rate, e.g. anything between 59.900 hz and +60.100 hz that your display supports properly. + +Follow the same steps [as above](#configure-and-verify-target-refresh-rate-of-59950-hz-and-vsync) +but use a different refresh rate, e.g. 60.000 hz. + +Verify using the `d3d9-monitor-check.exe` with the outlined steps if you need to play around to find +a refresh rate that works for your setup. + +For the game versions 9 to 19, you have to use the chart patch feature of bemanitools to patch +the charts to your custom refresh rate. Otherwise, the game engine will run on your configured +refresh rate, but it will take the non-matching refresh rate from the chart data which causes +song de-syncing. + +For example, to configure a refresh rate of 60.000 hz in the iidxhook config file: + +```text +gfx.monitor_check=60.000 +``` + +##### ATI/AMD + +Currently, there is no tooling provided by bemanitools to configure the AMD GPU driver. The basic +concepts of what needs to be configured still applies as outlined in the NVIDIA sections above +though, e.g. through AMD's GPU control panel. + +Further steps and instructions TBD \ No newline at end of file diff --git a/doc/iidxhook/iidxhook1.md b/doc/iidxhook/iidxhook1.md index f7950d4..868a202 100644 --- a/doc/iidxhook/iidxhook1.md +++ b/doc/iidxhook/iidxhook1.md @@ -146,16 +146,7 @@ This can be related to various issues: 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) that is not - jumping around. Use the timebase feature of one of the newer games to check that or enable - iidxhook's timebase and check the log output for the determined value. Run this a few times and - check if the results differ. -- Use iidxhook's frame rate limiter feature (see further below) to software lock the refresh rate. - This might be necessary on Windows 7 and newer for D3D8 games, e.g. iidx 9 to 12, which seem to - ignore GPU side v-sync. -- Use iidxhook's auto timebase feature (see further below) or set a pre-determined value to cut down - start-up times. +Also refer to the [iidx-syncbook](iidx-syncbook.md). ### The game still stutters (randomly) and drifts off-sync @@ -173,9 +164,7 @@ This can be caused by: ## 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 check/auto timebase - that's built into iidxhook (refer to help/config file) +Refer to the [iidx-syncbook](iidx-syncbook.md). ## The game crashes instantly (10th, RED, HAPPY SKY) @@ -233,6 +222,8 @@ 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 +Refer to the [iidx-syncbook](iidx-syncbook.md) if you haven't already. + 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. Multiple monitor setups can also have a bad impact on a stable refresh rate. Try a setup with just a single monitor you want to use for gameplay diff --git a/doc/iidxhook/iidxhook2.md b/doc/iidxhook/iidxhook2.md index 8fdc784..7377b0f 100644 --- a/doc/iidxhook/iidxhook2.md +++ b/doc/iidxhook/iidxhook2.md @@ -115,16 +115,7 @@ This can be related to various issues: 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) that is not - jumping around. Use the timebase feature of one of the newer games to check that or enable - iidxhook's timebase and check the log output for the determined value. Run this a few times and - check if the results differ. -- Use iidxhook's frame rate limiter feature (see further below) to software lock the refresh rate. - This might be necessary on Windows 7 and newer for D3D8 games, e.g. iidx 9 to 12, which seem to - ignore GPU side v-sync. -- Use iidxhook's auto timebase feature (see further below) or set a pre-determined value to cut down - start-up times. +Also refer to the [iidx-syncbook](iidx-syncbook.md). ### The game still stutters (randomly) and drifts off-sync @@ -142,9 +133,7 @@ This can be caused by: ## 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 check/auto timebase - that's built into iidxhook (refer to help/config file) +Refer to the [iidx-syncbook](iidx-syncbook.md). ## The game crashes instantly @@ -192,6 +181,8 @@ 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 +Refer to the [iidx-syncbook](iidx-syncbook.md) if you haven't already. + 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. Multiple monitor setups can also have a bad impact on a stable refresh rate. Try a setup with just a single monitor you want to use for gameplay diff --git a/doc/iidxhook/iidxhook3.md b/doc/iidxhook/iidxhook3.md index 71cef66..aad294a 100644 --- a/doc/iidxhook/iidxhook3.md +++ b/doc/iidxhook/iidxhook3.md @@ -132,16 +132,7 @@ This can be related to various issues: 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) that is not - jumping around. Use the timebase feature of one of the newer games to check that or enable - iidxhook's timebase and check the log output for the determined value. Run this a few times and - check if the results differ. -- Use iidxhook's frame rate limiter feature (see further below) to software lock the refresh rate. - This might be necessary on Windows 7 and newer for D3D8 games, e.g. iidx 9 to 12, which seem to - ignore GPU side v-sync. -- Use iidxhook's auto timebase feature (see further below) or set a pre-determined value to cut down - start-up times. +Also refer to the [iidx-syncbook](iidx-syncbook.md). ## "NETWORK WARNING" instead of "NETWORK OK" @@ -154,15 +145,7 @@ This can be caused by: ## 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 that runs on (as close as possible) -these values: - -- Make sure your machine's refresh rate is stable, e.g. 60.00x hz. -- 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 to "VGA" to enforce the game to run chart syncing on - 60.04 hz refresh rate (even if your setup does not have that value). Next, use the software - monitor check/auto timebase that's built into iidxhook (refer to cmd help/configfile). +Refer to the [iidx-syncbook](iidx-syncbook.md). ## My game runs too fast @@ -205,6 +188,8 @@ 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 +Refer to the [iidx-syncbook](iidx-syncbook.md) if you haven't already. + 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. Multiple monitor setups can also have a bad impact on a stable refresh rate. Try a setup with just a single monitor you want to use for gameplay diff --git a/doc/iidxhook/iidxhook4.md b/doc/iidxhook/iidxhook4.md index 6f0f17d..5c61c28 100644 --- a/doc/iidxhook/iidxhook4.md +++ b/doc/iidxhook/iidxhook4.md @@ -143,16 +143,7 @@ This can be related to various issues: 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) that is not - jumping around. Use the timebase feature of one of the newer games to check that or enable - iidxhook's timebase and check the log output for the determined value. Run this a few times and - check if the results differ. -- Use iidxhook's frame rate limiter feature (see further below) to software lock the refresh rate. - This might be necessary on Windows 7 and newer for D3D8 games, e.g. iidx 9 to 12, which seem to - ignore GPU side v-sync. -- Use iidxhook's auto timebase feature (see further below) or set a pre-determined value to cut down - start-up times. +Also refer to the [iidx-syncbook](iidx-syncbook.md). ## "NETWORK WARNING" instead of "NETWORK OK" @@ -165,15 +156,7 @@ This can be caused by: ## 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 that runs on (as close as possible) -these values: - -- Make sure your machine's refresh rate is stable, e.g. 60.00x hz. -- 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 to "VGA" to enforce the game to run chart syncing on - 60.04 hz refresh rate (even if your setup does not have that value). Next, use the software - monitor check/auto timebase that's built into iidxhook (refer to cmd help/configfile). +Refer to the [iidx-syncbook](iidx-syncbook.md). ## My game runs too fast @@ -211,6 +194,8 @@ 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 +Refer to the [iidx-syncbook](iidx-syncbook.md) if you haven't already. + 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. Multiple monitor setups can also have a bad impact on a stable refresh rate. Try a setup with just a single monitor you want to use for gameplay diff --git a/doc/iidxhook/iidxhook5.md b/doc/iidxhook/iidxhook5.md index fe14eb3..57e9baf 100644 --- a/doc/iidxhook/iidxhook5.md +++ b/doc/iidxhook/iidxhook5.md @@ -143,16 +143,7 @@ This can be related to various issues: 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) that is not - jumping around. Use the timebase feature of one of the newer games to check that or enable - iidxhook's timebase and check the log output for the determined value. Run this a few times and - check if the results differ. -- Use iidxhook's frame rate limiter feature (see further below) to software lock the refresh rate. - This might be necessary on Windows 7 and newer for D3D8 games, e.g. iidx 9 to 12, which seem to - ignore GPU side v-sync. -- Use iidxhook's auto timebase feature (see further below) or set a pre-determined value to cut down - start-up times. +Also refer to the [iidx-syncbook](iidx-syncbook.md). ## "NETWORK WARNING" instead of "NETWORK OK" @@ -165,11 +156,7 @@ This can be caused by: ## 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 dynamically, detects the refresh rate of -your 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 game should be -able to provide you with a smooth and sync game experience. +Refer to the [iidx-syncbook](iidx-syncbook.md). ## My game runs too fast diff --git a/doc/iidxhook/iidxhook6.md b/doc/iidxhook/iidxhook6.md index 74a5d91..ec23ed9 100644 --- a/doc/iidxhook/iidxhook6.md +++ b/doc/iidxhook/iidxhook6.md @@ -155,11 +155,7 @@ This can be related to various issues: 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) that is not - jumping around. Use the timebase feature of one of the newer games to check that or enable - iidxhook's timebase and check the log output for the determined value. Run this a few times and - check if the results differ. +Also refer to the [iidx-syncbook](iidx-syncbook.md). ## "NETWORK WARNING" instead of "NETWORK OK" @@ -172,11 +168,7 @@ This can be caused by: ## 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 dynamically, detects the refresh rate of your -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 game should be able to -provide you with a smooth and sync game experience. +Refer to the [iidx-syncbook](iidx-syncbook.md). ## My game runs too fast diff --git a/doc/iidxhook/iidxhook7.md b/doc/iidxhook/iidxhook7.md index 309dfc2..4dd4789 100644 --- a/doc/iidxhook/iidxhook7.md +++ b/doc/iidxhook/iidxhook7.md @@ -159,11 +159,7 @@ This can be related to various issues: 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) that is not - jumping around. Use the timebase feature of one of the newer games to check that or enable - iidxhook's timebase and check the log output for the determined value. Run this a few times and - check if the results differ. +Also refer to the [iidx-syncbook](iidx-syncbook.md). ## "NETWORK WARNING" instead of "NETWORK OK" @@ -176,11 +172,7 @@ This can be caused by: ## 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 dynamically, detects the refresh rate of your 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 game should be able to provide -you with a smooth and sync game experience. +Refer to the [iidx-syncbook](iidx-syncbook.md). ## My game runs too fast diff --git a/doc/iidxhook/iidxhook8.md b/doc/iidxhook/iidxhook8.md index 5e5937a..28a4cbb 100644 --- a/doc/iidxhook/iidxhook8.md +++ b/doc/iidxhook/iidxhook8.md @@ -158,11 +158,7 @@ This can be related to various issues: 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) that is not - jumping around. Use the timebase feature of one of the newer games to check that or enable - iidxhook's timebase and check the log output for the determined value. Run this a few times and - check if the results differ. +Also refer to the [iidx-syncbook](iidx-syncbook.md). ## "NETWORK WARNING" instead of "NETWORK OK" @@ -175,11 +171,7 @@ This can be caused by: ## 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 dynamically, detects the refresh rate of your 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 game should be able to provide -you with a smooth and sync game experience. +Refer to the [iidx-syncbook](iidx-syncbook.md). ## My game runs too fast diff --git a/doc/iidxhook/iidxhook9.md b/doc/iidxhook/iidxhook9.md index 4c8e9e5..ad9414f 100644 --- a/doc/iidxhook/iidxhook9.md +++ b/doc/iidxhook/iidxhook9.md @@ -212,11 +212,7 @@ This can be related to various issues: 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) that is not - jumping around. Use the timebase feature of one of the newer games to check that or enable - iidxhook's timebase and check the log output for the determined value. Run this a few times and - check if the results differ. +Also refer to the [iidx-syncbook](iidx-syncbook.md). ## "NETWORK WARNING" instead of "NETWORK OK" @@ -229,11 +225,7 @@ This can be caused by: ## 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 dynamically, detects the refresh rate of your 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 game should be able to provide -you with a smooth and sync game experience. +Refer to the [iidx-syncbook](iidx-syncbook.md). ## My game runs too fast