# ddrhook1

## Supported games

The following games are supported with this hook library:

- Dance Dance Revolution X
- Dance Dance Revolution X2 (US/EU regions)

The games must be bootstrapped using [inject](../inject.md).

## Data setup

Ensure your folder with your unpacked data looks like this:

- `conf`
- `data`
- `ddr`
- `ddr_YYYYMMDDRR` where `YYYYMMDDRR` corresponds to different datecodes of different versions.
  Multiple folders of these possible

`DDR.exe` files should be in `ddr` and `ddr_YYYYMMDDRR` folders.

Unpack the distribution package `ddr-11.zip` into one of the folders containing a `DDR.exe` file. We
recommend using the one with the latest datecode which denotes the latest version of the game
including bugfixes etc.

`gamestart-11.bat` as well as `ddrhook1.dll` are now expected to be located in the same folder as
(one) `DDR.exe` file.

## Running

Run `gamestart-11.bat` as administrator. For the US version of the game, run `gamestart-11-us.bat`
instead. This can be done by either by double clicking or running it from `cmd.exe`. The latter is
recommended to have any debug output kept on screen after closing the game.

This will run [inject](../inject.md) with the `ddrhook1.dll`. On first run, if you don't have a
conguration file, e.g. `ddr-11.conf`, available in the same folder, a default one will be created
and the game exits. Simply re-run `gamestart-11.bat` again.

## Configuration ddrhook

The hook library can be configured via cmd arguments or a configuration file. The latter is
generated (*ddr-11.conf* in the same directory) on the first start of the game using the
gamestart-XX.bat file. It contains default values for all available parameters and comments
explaining each parameter. Please follow the comments when configuring your setup.

Add the argument *-h* when running gamestart-XX.bat (e.g. *gamestart-XX.bat -h*) to print help/usage
information with a list of all available parameters. Every parameter can be either set as command
line 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

```
gamestart-11.bat -p gfx.windowed=true
```

The syntax for the "key=value" is the same as in the config file. Make sure to have a pre-ceeding
"-p" for every parameter added.

However, if a parameter is specifed in the configuration file and as a command line argument, the
command line argument overrides the config file's value.

## Configure USB memory cards and edit data

You can setup actual USB thumb drives mapped to a drive letter, e.g. `E:\` for player 1 and `F:\`
for player 2, or just have them point to any local directory, e.g. `usbmem_p1` and `usbmem_p2`.

Set-up your folder mappings in the [conf file or via command line args](#configuration-ddrhook) like
follows:

- 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`:
  `ddrhook1.usbmem_path_p1=usbmem_p1`
- Set P1 USB memory data path pointing to local folder `usbmem_p2` next to `DDR.EXE`:
  `ddrhook1.usbmem_path_p1=usbmem_p2`
- 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` (for US
  version) and place it in the `DDR_EDIT` directory.

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.

Note that USB memory cards are not detected by the game and the game stays silent about that if they
do not contain edit data, your path mapping does not resolve or you misplaced or named your edit
data file incorrectly.

## Grey and glitchy arrows

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 issue with
incompatible shader code.

There are solutions to hard-patch the code available elsewhere.

## Troubleshooting and FAQ

### Issues with background videos (not) playing

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 execute. Make
sure to run as Administrator, otherwise you will get errors due to invalid permissions.

### Game crashes during boot

If you have played a newer version of DDR, e.g. DDR 2014+, you might have the `k-clvsd.dll` codec
registered which crashes DDR X and likely X2 (EU/US) as well.

Unregister `k-clvsd.dll`, e.g. `regsvr32 /u k-clvsd.dll`, and
[registering `CLVSD.ax`](#issues-with-background-videos-not-working).

Note that `CLVSD.ax` will likely hang any newer/more recent DDR versions on startup and require you
to use the `k-clvsd.dll` that came with the respective version instead. See
[this section](ddrhook2.md#video-codecs-for-background-videos) for further details.

### 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:

- If not done already, try installing
  [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
- External (USB) audio devices could cause issues. Ensure you are running on on-board/integrated
  sound cards and unplug any external audio devices.
- [Disable fullscreen optimizations](https://devblogs.microsoft.com/directx/demystifying-full-screen-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 boot
  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.
