Version 1.08 with public source code release.

This commit is contained in:
icex2
2020-10-03 20:56:55 +02:00
parent 656148121d
commit 762bf140c0
555 changed files with 55502 additions and 3 deletions
+10
View File
@@ -0,0 +1,10 @@
# Pumptools documentation
This folder contains all documentation for pumptools in markdown format.
Index:
* [api](api/api.md): Various documentation about the API, using and configuring the provided API implementations, e.g.
PIUIO, PIUBTN
* [development](development/development.md): Get started with developing for pumptools, development setup, architecture
and notes about various efforts for future reference.
* [game](game/game.md): Information about the games including trivia, pad codes, unlocks etc.
* [hook](hook/hook.md): How to setup and configure pumptools with the games supported.
+8
View File
@@ -0,0 +1,8 @@
# Pumptools API
The *api* sub-folder contains various headers that allow you to develop your own libraries to hook into various places
inside pumptools.
## IO
* [PIUBTN](io/piubtn.md): The button board introduced with Pump It Up Pro
* [PIUIO](io/piuio.md): Also known as the MK6 IO, the main IO board for pads and lights
* [X11 input hook](io/x11-input-hook.md): Hook input processing to X11 to receive keyboard events
+58
View File
@@ -0,0 +1,58 @@
# PIUBTN API
This contains various PIUBTN related tools and libraries. PIUBTN is the button board that was first introduced with
Pump PRO and officially works as an optional peripheral on all classic pump games starting Fiesta.
## Pumptools PIUBTN API implementations
The following libraries implement pumptool's PIUBTN API interface. Set the configuration value `patch.piubtn.emu_lib`
in your hook configuration to point to the library you want to use, e.g.
`patch.piubtn.emu_lib=./ptapi-io-piubtn-null.so`.
### Null: ptapi-io-piubtn-null.so
A null implementation for API dummy testing against libraries/applications calling API implementations.
### Real PIUIO: ptapi-io-piubtn-real.so
Support for a real USB PIUBTN. This library is not useful for games that already support the hardware natively.
However, games that require an emulation layer need this.
### Joystick/Gamepad: ptapi-io-piubtn-joystick.so
Support all (USB) Joysticks and Gamepads that are detected by the Linux kernel. This uses the Kernel's joystick API.
Button mappings are configured by using the `ptapi-io-piubtn-joystick-conf` (this is an executable!) tool. You might
have to `chmod +x ptapi-io-piubtn-joystick-conf` it prior being able to run it: `./ptapi-io-piubtn-joystick-conf`. Run
the tool and follow the instructions. Once successfully completed, a `piubtn-joystick-conf.bin` configuration file is
located in the same folder. This must be located next to the `ptapi-io-piubtn-joystick.so` file which should be located
next to your `piu` executable.
Configure your `hook.conf` file accordingly:
```
patch.piubtn.emu_lib=./ptapi-io-piubtn-joystick.so
```
### Keyboard: ptapi-io-piubtn-keyboard.so
Support for inputs via your standard keyboard using the X11 API.
Button mappings are configured by using the `ptapi-io-piubtn-keyboard-conf` (this is an executable!) tool. You might
have to `chmod +x ptapi-io-piubtn-keyboard-conf` it prior being able to run it: `./ptapi-io-piubtn-keyboard-conf`. Run
the tool and follow the instructions. Once successfully completed, a `piubtn-keyboard-conf.bin` configuration file is
located in the same folder. This must be located next to the `ptapi-io-piubtn-keyboard.so` file which should be located
next to your `piu` executable.
Configure your `hook.conf` file accordingly:
```
patch.piubtn.emu_lib=./ptapi-io-piubtn-keyboard.so
patch_hook_main_loop.x11_input_handler=./ptapi-io-piubtn-keyboard.so
```
Setting the key `patch_hook_main_loop.x11_input_handler` is important. Otherwise, the library does not receive any
input events from X11 and your configured keyboard input does not work in the game.
## Pumptools PIUBTN API tester: ptapi-io-piubtn-test
The tool *ptapi-io-piubtn-test* lets you easily test and debug your library implementing pumptool's piubtn API without
having to setup and/or run any games.
## Development
The [piubtn header](../../src/api/ptapi/io/piubtn.h) contains all the prototypes to be implemented by your library to
provide your own implementation for a PIUBTN. Checkout the header file for documentation.
Checkout the [stub implementation](../../dist/api/ptapi-io-piubtn-stub.c) to get started with a simple example.
Instructions are located in the header comment of the file.
+57
View File
@@ -0,0 +1,57 @@
# PIUIO API
This contains various MK6 USB PIUIO related tools and libraries. The hardware was first introduced with Exceed 2 and
is supported by all games up to this day.
## Pumptools PIUIO API implementations
The following libraries implement pumptool's PIUIO API interface. Set the configuration value `patch.piuio.emu_lib`
in your hook configuration to point to the library you want to use, e.g. `patch.piuio.emu_lib=./ptapi-io-piuio-null.so`.
### Null: ptapi-io-piuio-null.so
A null implementation for API dummy testing against libraries/applications calling API implementations.
### Real PIUIO: ptapi-io-piuio-real.so
Support for a real USB PIUIO. This library is not useful for games that already support the hardware natively.
However, games that require an emulation layer need this to run on real PIUIO hardware, e.g. Exceed (1).
### Joystick/Gamepad: ptapi-io-piuio-joystick.so
Support all (USB) Joysticks and Gamepads that are detected by the Linux kernel. This uses the Kernel's joystick API.
Button mappings are configured by using the `ptapi-io-piuio-joystick-conf` (this is an executable!) tool. You might have
to `chmod +x ptapi-io-piuio-joystick-conf` it prior being able to run it: `./ptapi-io-piuio-joystick-conf`. Run the tool
and follow the instructions. Once successfully completed, a `piuio-joystick-conf.bin` configuration file is located in
the same folder. This must be located next to the `ptapi-io-piuio-joystick.so` file which should be located next to your
`piu` executable.
Configure your `hook.conf` file accordingly:
```
patch.piuio.emu_lib=./ptapi-io-piuio-joystick.so
```
### Keyboard: ptapi-io-piuio-keyboard.so
Support for inputs via your standard keyboard using the X11 API.
Button mappings are configured by using the `ptapi-io-piuio-keyboard-conf` (this is an executable!) tool. You might have
to `chmod +x ptapi-io-piuio-keyboard-conf` it prior being able to run it: `./ptapi-io-piuio-keyboard-conf`. Run the tool
and follow the instructions. Once successfully completed, a `piuio-keyboard-conf.bin` configuration file is located in
the same folder. This must be located next to the `ptapi-io-piuio-keyboard.so` file which should be located next to your
`piu` executable.
Configure your `hook.conf` file accordingly:
```
patch.piuio.emu_lib=./ptapi-io-piuio-keyboard.so
patch_hook_main_loop.x11_input_handler=./ptapi-io-piuio-keyboard.so
```
Setting the key `patch_hook_main_loop.x11_input_handler` is important. Otherwise, the library does not receive any
input events from X11 and your configured keyboard input does not work in the game.
## Pumptools PIUIO API tester: ptapi-io-piuio-test
The tool *ptapi-io-piuio-test* lets you easily test and debug your library implementing pumptool's piuio API without
having to setup and/or run any games.
## Development
The [piuio header](../../src/api/ptapi/io/piuio.h) contains all the prototypes to be implemented by your library to
provide your own implementation for a PIUIO. Checkout the header file for documentation.
Checkout the [stub implementation](../../dist/api/ptapi-io-piuio-stub.c) to get started with a simple example.
Instructions are located in the header comment of the file.
+9
View File
@@ -0,0 +1,9 @@
# X11 input hook API
The [x11-input-hook header](../../src/api/ptapi/io/x11-input-hook.h) allows you to hook into the main loop of the game
to receive X11 keyboard inputs. This might be useful for implementations of other APIs, e.g. PIUIO, to trigger PIUIO
inputs when pressing keys on the keyboard.
You have to configure your `hook.conf` accordingly that your implementation gets loaded by the hook library:
```
patch_hook_main_loop.x11_input_handler=./ptapi-io-my-x11-input-hook.so
```
+43
View File
@@ -0,0 +1,43 @@
# Architecture
The follow image shows a rough outline of pumptools's architecture based on the project's namespacing. Arrows indicate
architectural dependencies. Modules in red colored boxes expose APIs and blue colored boxes expose application/library
binaries.
![](images/architecture.png)
## util
The kitchen sink, basically used by everything. Not going to elaborate the details here as it is quite self-explanatory
when taking a look at its modules.
## crypt
Kitchen sink for everything crypto related. Could be with `util` but I somewhat felt the need to have this separated.
## asset
Modules for handling various types of asserts from pump games, e.g. usb profiles.
## pumpnet
Modules to talk to pumpnet for usb profiles over sockets. Used by NX2 to Fiesta 2.
## sec
Contains several sub-modules for security/dongle related topics such as full software emulation.
## capnhook
This is the heart of pumptools to enable hooking of system and library calls. `capnhook` has two sub-modules, `hook`
and `hooklib`. `hook` provides the foundation for hooking various things, typically IO related, such as files,
filesystem, hardware IO (e.g. USB), signal handlers. `hooklib` provides helper modules based on `hook` that take care
of common tasks such as path based redirects, USB device emulation and IO call monitoring.
## ptapi
Pumptools's API package exposing APIs to the end-user. Also contains any libraries and tools used by the APIs.
## io
Contains modules to talk to real IO hardware, e.g. `piuio`, `piubtn`.
## patch
`patch` is a common package for various modules that are shared with multiple pump versions. A patch module takes care
of patching, i.e. hooking and detouring usually, a single aspect like fixing a API quirk, enabling window mode etc.
# game hooks
`game hooks` are composed of multiple `patch` modules making up the final hook library that you preload to the target
application. The structure of each `game hook` is identical and only the patches and hooks applied differ per game
version.
+163
View File
@@ -0,0 +1,163 @@
# Development
This document covers various aspects of developing for pumptools. For developing using the API, see
[the dedicated readme](../api/api.md).
## Architecture
[This document](architecture.md) gives an introduction to the architecture of pumptools. This helps you to get familiar
with the codebase and its features, definitely recommended to read this first.
## Development environment setup
Pumptools is written entirely in C and built using cmake. Various helper scripts are written as bash/shell scripts.
Therefore, you need the following tools on your development setup:
* gcc
* cmake
* make
* bash or compatible shell
Pumptools requires the following dependencies to be installed on your development OS:
* libcurl4 i386
* libusb 1.0 i386
Furthermore, header files, which come with the development packages of the libs, of the following libraries are
required:
* fmodex
* libconfig
* X11
* libalsa
* libusb-0.1 (**not** 1.0)
The project does not depend on any specific IDE. However, if you use CLion, the project can be imported easily.
## Code style
The main style guidelines are defined by the `.clang-format` file and the code style can be easily applied to the
whole `src` directory using the following command from the root folder:
```shell script
make clang-format
```
Make sure that your contributions follow the style and apply it before submitting your changes.
For other source files like shell scripts, cmake, makefile or markdown documents, please follow the already established
style in the existing documents.
## Building
See the [main readme](../../README.md#building).
## Compatibility issues with newer glibc versions
We have experienced various issues with different glibc versions which had a major impact on the builds. The following
table gives you a list of tested glibc versions and issues that are either present or not with each version listed.
"ok" indicates that the specified glibc version is compatible and the specific issue does not occur, "bad" indicates
incompatibility and that the specific issue does occur when using a binary compiled with that glibc version.
| Issue/glibc version | 2.23 | 2.30 |
|---------------------|------|------|
| Issue 1 | ok | bad |
| Issue 2 | ok | bad |
The issues are further described in the following sub-sections
### Issue 1: Crash during static initialization
For a detailed report on this issue, see the [dedicated notes](notes/f2-crashing-on-modern-linux-post-mortem.md).
Summarized: Fiesta 2 and newer will segfault before even running the application's main method. The application fails
on runtime initialization when initializing the static context. This is caused by ABI incompatibility of inlined code
of C++'s STL, first occurring with string allocations during static initialization.
### Issue 2: sscanf not being detoured
With NX2, Andamiro locked the USB drives to be used to a specific brand which they sold back then. That lock is patched
out by detouring `sscanf` and manipulating the VID/PID and serial number parsing logic in the game to always return
the values, the game wants to see to accept the connected USB drive.
However, some incompatibility on newer glibc versions does not setup the `sscanf` detour properly. The detour function
is there and gets called by various parts of the game code in the beginning, but later calls to `sscanf` always go
to the real function instead. Thus, the usb unlock feature does not work.
## Unit tests
Unfortunately, this was started very late in the development of pumptools, but it's not too late to keep extending this
with every change to ensure existing features don't break and future ones work.
When you have a change to commit, check if there is an existing unit-test which needs to be aligned with your change(s).
If not, create one.
For testing code that gets hooked, there is a specific pattern that needs to be applied in order to allow testing
hooks without having to actually hook them. As an example, you can take a look at the
[usb-fix module](../../src/main/hook/propatch/usb-fix.h) for piu pro and the
[corresponding test](../../src/test/hook/propatch/usb-fix/main.c). It shows you how to setup the hooks and create
mocks for the functions that you can trap the calls to the real detoured functions to check if they are getting called
or return fixed values for testing.
## Debugging
### Pumptool's built-in tooling
Pumptools has a few basic debugging features built in which helps analyzing common issues very quickly without the
need of external tools.
#### Help and usage message of hook library
When running a game with any of pumptools's `hook.so` libs attached, you can always add the parameter `-h` to display a
help/usage message with all available command line and configuration parameters.
For example, when using `piueb` for bootstrapping:
```
./piueb run -h
```
The `-h` is passed on as a parameter and appended to the execution command. You can make use of that with other
available cmd parameters as well (see usage information).
#### Logging
Logging to console and file as well as the level of verbosity can be controlled using the `hook.conf` configuration file
or via command line arguments provided on execution.
All hooks implement various sanity checks for parameters provided, file checks etc. so there is a good coverage of
common mistakes and misconfiguration that can be easily detected by watching out for any ERROR or WARNING level messages
showing up in the log.
Example in configuration file:
```
util.log.file=pumptools.log
util.log.level=4
```
Furthermore, `piueb` outputs a separate log file `piueb.log` which contains logging data of the environment setup
process of `piueb`.
#### File and IO hook monitoring
In the configuration file or via cmd args, you can enable monitoring of file, filesystem, usb and/or open system calls
for tracing and debugging. This can be useful, to check if the game cannot find certain files like game assets.
Example in configuration file:
```
patch.hook_mon.file=0
patch.hook_mon.fs=0
patch.hook_mon.io=0
patch.hook_mon.open=1
patch.hook_mon.usb=0
```
#### Halt on SIGSEGV and attach debugger
Also enabled via configuration or cmd args, the application is halted on SIGSEGV to allow attaching a debugger.
Example in configuration file:
```
patch.sigsegv.halt_on_segv=1
```
### External tooling
#### Remote debugging
You can run the application with `gdbserver` using `piueb`:
```shell script
./piueb debug
```
And connect with your favorite debugger (e.g. IDA).
#### strace
You can run the application with `strace` using `piueb`:
```shell script
./piueb strace
```
#### valgrind
You can run the application with `valgrind` using `piueb`:
```shell script
./piueb valgrind
```
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

@@ -0,0 +1,55 @@
# Notes about Exceed's implementation of a sound manager
## Pre-face
To understand what the developers of AM did here, you should have some knowledge about how they had to handle sound on
the MK3 hardware which is the predecessor of the MK5 hardware that was used with Exceed. Exceed builds on the codebase
of the previous game(s), Prex 3 and Premiere 3, that ran on MK3/MK5. However, moving from Dos (MK3)/Windows XP Embedded
(MK5) to Linux (MK5), the code had to be adjusted to work on the different kind of hardware and operating system.
Their engine was targeted and optimized for the MK3 hardware platform and had to use various pieces of custom hardware
to implement stuff like: security using the lock chip, MP3 decoding and effect playback and IO.
## Sound playback, higher level view
For sound playback, the game had the following requirements:
1. For playing a song, menu background music, title screen intro music or any other music tracks, sound data encoded as
MP3 files are used. These needed to be loaded, decoded and played back whenever the game reaches certain points in the
game scene.
1. Various short sound effects, e.g. to give the user confirmation about hitting a button, have to be played back when
a certain event is triggered, e.g. user input or a scripted event in a scene. On exceed, these are stored as WAV files.
1. Audio played back by the above two items needs to be mixed because playback of both can happen simultaneously.
## MK3 hardware for decoding and audio playback
The MK3 hardware came with a dedicated piece of hardware, a [MP3 decoder and playback chip](hardware.md). Therefore,
audio data from disc was streamed encoded to the hardware for decoding and playback, and effects were triggered by
commands to the appropriate chips as their audio data is stored in a ROM chip on the board.
## Exceed's sound manager
With the move to Linux and less specialized hardware closer to a normal PC, the audio pipeline changed a lot. On Linux,
alsa/libasound is used for sending data to the underlying audio driver. Decoding of the MP3 song data is done by the
CPU. Effects are stored as WAV files and also played back using libasound.
The sound manager relies on hardware mixing using the same sound device, e.g. hw:0. This device is opened once on game
init for playing back sound effects and another time for every song/background music to be played back for the current
scene.
### Hardware sound tracks specs
#### Effect track
* Channels: 2
* Buffer size in frames: 4096
* Periods: 2
* Sample format: 16-bit signed LE
* Sample rate: 44100
* Sample order: FL, FR
#### Song track
* Channels: 2
* Buffer size in frames: 16384
* Periods: 8
* Sample format: 16-bit signed LE
* Sample rate: 44100
* Sample order: FL, FR
### Issues on todays distros
However, this way of mixing is not supported anymore by alsa. Instead, you have to use software mixing using dmix which
is supported by alsa's built in plugin system today. But, that doesn't seem to work properly with different
configurations from different versions of alsa on today's available distros.
Fortunately, this got fixed already on Exceed 2 which implements its own software mixer in the pump engine.
+217
View File
@@ -0,0 +1,217 @@
# Notes about song unlocks in Exceed 2
Executable of v1.02, build 7th December 2004.
A bunch of copy-pastes from IDA checking which songs can be unlocked permanently.
## Internal song list and state structure
```
00000000 SongList struc ; (sizeof=0x48, mappedto_187) ; XREF: .data:songList/r
00000000 trackNum dd ?
00000004 ptrArtistNameKr dd ?
00000008 ptrArtistNameEn dd ?
0000000C ptrSongNameKr dd ? ; XREF: sub_805186E+7A/r
0000000C ; sub_805186E+B4/r ...
00000010 ptrSongNameEn dd ?
00000014 ptrBpm dd ?
00000018 channelInfo dd ?
0000001C level dd 6 dup(?)
00000034 enableSong db ?
00000035 hiddenSong db ?
00000036 enableDemoPlay db ?
00000037 censor db ?
00000038 pad db ?
00000039 censorLock db ?
0000003A enable_play db ?
0000003B hidden_play db ?
0000003C enableMode db 6 dup(?) ; string(C)
00000042 enableMode_play db 6 dup(?) ; string(C)
00000048 SongList ends
```
## Internal song list
```
.data:080890E4 ; SongList songList
.data:080890E4 songList dd 101h ; trackNum
.data:080890E4 ; DATA XREF: sub_8062D22+38o
.data:080890E4 ; GetSongRealIndex+33o ...
.data:080890E4 dd 807BC28h ; ptrArtistNameKr
.data:080890E4 dd 807BC2Dh ; ptrArtistNameEn
.data:080890E4 dd 807BC33h ; ptrSongNameKr
.data:080890E4 dd 0 ; ptrSongNameEn
.data:080890E4 dd 0 ; ptrBpm
.data:080890E4 dd 40624000h ; channelInfo
.data:080890E4 dd 0, 0FFFFFFFFh, 6, 0Ch, 7, 0FFFFFFFFh; level
.data:080890E4 db 1 ; enableSong
.data:080890E4 db 0 ; hiddenSong
.data:080890E4 db 1 ; enableDemoPlay
.data:080890E4 db 0 ; censor
.data:080890E4 db 0FFh ; pad
.data:080890E4 db 0FFh ; censorLock
.data:080890E4 db 0FFh ; enable_play
.data:080890E4 db 0FFh ; hidden_play
.data:080890E4 db 0,0,0,0,0,0 ; enableMode
.data:080890E4 db 0,0,1,0,0,0 ; enableMode_play
.data:080890E4 dd 102h ; trackNum
.data:080890E4 dd 807BC28h ; ptrArtistNameKr
.data:080890E4 dd 807BC2Dh ; ptrArtistNameEn
.data:080890E4 dd 807BC44h ; ptrSongNameKr
.data:080890E4 dd 0 ; ptrSongNameEn
.data:080890E4 dd 0 ; ptrBpm
.data:080890E4 dd 40668000h ; channelInfo
.data:080890E4 dd 0, 0FFFFFFFFh, 6, 0Ch, 7, 0Fh; level
.data:080890E4 db 1 ; enableSong
.data:080890E4 db 0 ; hiddenSong
.data:080890E4 db 1 ; enableDemoPlay
.data:080890E4 db 0 ; censor
.data:080890E4 db 0FFh ; pad
.data:080890E4 db 0FFh ; censorLock
.data:080890E4 db 0FFh ; enable_play
.data:080890E4 db 0FFh ; hidden_play
.data:080890E4 db 0,0,0,0,0,0 ; enableMode
.data:080890E4 db 0,0,2,0,0,0 ; enableMode_play
...
```
## Settings struct first few fields
```
00000000 settings_struct struc ; (sizeof=0x162B, mappedto_186)
00000000 ff_area db 1307 dup(?) ; string(C)
0000051B unlocks_maybe db 16 dup(?) ; string(C)
0000052B blacklist db 139 dup(?) ; string(C)
000005B6 unkn2 db 117 dup(?) ; string(C)
0000062B remain db 4096 dup(?) ; string(C)
0000162B settings_struct ends
```
## Function that checks for song unlocks
Located at 0x0806307E
```
int __usercall unlock_song@<eax>(int a1@<esi>, _DWORD *arg_0, _DWORD *songid)
{
int v3; // eax@1
int v4; // ecx@1
signed int v5; // edi@3
int v6; // eax@6
signed int v7; // eax@16
signed int v8; // eax@23
signed int v9; // eax@30
signed int v10; // eax@37
signed int v11; // eax@42
int v13; // [sp+0h] [bp-18h]@3
char result_unlocked_song; // [sp+7h] [bp-11h]@1
result_unlocked_song = 0;
v3 = sub_8061C62(dword_80BED54, "PLAY");
v4 = v3 - 200696;
if ( !v3 )
v4 = 0;
v5 = 0;
v13 = v4;
do
{
if ( v5 )
{
if ( v5 != 1 )
goto LABEL_11;
if ( !(dword_80BECD4 & 2) )
goto LABEL_43;
v6 = sub_8056E76(v13, 1);
}
else
{
if ( !(dword_80BECD4 & 1) )
goto LABEL_43;
v6 = sub_8056E76(v13, 0);
}
a1 = v6;
LABEL_11:
if ( currentStateCount > 2
&& !stationCurrentlySelected // 0 = arcade station
&& *(&songList.trackNum + 18 * sub_8062DC6(dword_80BECE4)) == 0xB13// ill give you all my love
&& byte_80BECF5 & 2
&& *(_DWORD *)(a1 + 456) <= 10 )
{
v7 = GetSongRealIndex(0xB19); // canon-d
*arg_0 = 0;
result_unlocked_song = 1;
*songid = 0xB19; // canon-d
songList.enableMode[72 * v7 + 4] = 0; // +4 mode offset = nightmare
}
if ( currentStateCount == 1 )
{
if ( stationCurrentlySelected == 1 // 1 = remix station
&& *(&songList.trackNum + 18 * sub_8062DC6(dword_80BECDC)) == 0xB31// diva's remix
&& *(_DWORD *)(a1 + 400) <= 20
&& !*(_DWORD *)(a1 + 448)
&& *(float *)(a1 + 368) >= 1.0 )
{
v8 = GetSongRealIndex(0xB54); // 2nd hidden remix
*arg_0 = 3;
result_unlocked_song = 1;
*songid = 0xB54; // 2nd hidden remix
songList.enableMode[72 * v8 + 4] = 0; // +4 mode offset = nightmare
}
if ( currentStateCount == 1 )
{
if ( stationCurrentlySelected == 1
&& *(&songList.trackNum + 18 * sub_8062DC6(dword_80BECDC)) == 0xB30// deux remix
&& *(_DWORD *)(a1 + 400) <= 20
&& !*(_DWORD *)(a1 + 448)
&& *(float *)(a1 + 368) >= 1.0 )
{
v9 = GetSongRealIndex(0xB29); // banya classic remix
*arg_0 = 3;
result_unlocked_song = 1;
*songid = 0xB29; // banya classic remix
songList.enableMode[72 * v9 + 4] = 0; // +4 mode offset = nightmare
}
if ( currentStateCount == 1 )
{
if ( stationCurrentlySelected == 1
&& *(&songList.trackNum + 18 * sub_8062DC6(dword_80BECDC)) == 0xB29// banya classic remix
&& *(_DWORD *)(a1 + 400) <= 20
&& !*(_DWORD *)(a1 + 448)
&& *(float *)(a1 + 368) >= 1.0 )
{
v10 = GetSongRealIndex(0xB51); // dignity full remix
*arg_0 = 3;
result_unlocked_song = 1;
*songid = 0xB51; // dignity full remix
songList.enableMode[72 * v10 + 2] = 0;// +2 mode offset = crazy
}
if ( currentStateCount == 1
&& stationCurrentlySelected == 1
&& *(&songList.trackNum + 18 * sub_8062DC6(dword_80BECDC)) == 0xB28// treme vook of the war
&& byte_80BECED & 2 )
{
*(&songList.hiddenSong + 72 * GetSongRealIndex(0xB58)) = 0;// disable this song as a hidden song
v11 = GetSongRealIndex(0xB58); // treme of the vook war another
*arg_0 = 3;
result_unlocked_song = 1;
*(&songList.enableSong + 72 * v11) = 1;
*songid = 0xB58;
}
}
}
}
LABEL_43:
++v5;
}
while ( v5 <= 1 );
if ( result_unlocked_song )
sub_8074CA8(9, 0);
if ( settings->unlocks_maybe[10] == 1 && stationCurrentlySelected == 1 )
{
*(&songList.hiddenSong + 0x48 * GetSongRealIndex(0xB57)) = 0;// disable this song as a hidden song
*(&songList.enableSong + 0x48 * GetSongRealIndex(0xB57)) = 1;
if ( !result_unlocked_song )
{
*arg_0 = 3;
*songid = 0xB57; // canon-d full mix
}
result_unlocked_song = 1;
}
return (unsigned __int8)result_unlocked_song;
}
```
+141
View File
@@ -0,0 +1,141 @@
# Extracting song list from game
## NX2 and NXA
The song list is compiled into the game's executable as a big table with the following structure:
```c
struct SongList_t
{
int IndexNum; // Index in the song list array
int TrackNum; // Song ID
int szArtistName_kr; // const char* to the null terminated string
int szArtistName_en; // const char* to the null terminated string
int szSongName_kr; // const char* to the null terminated string
int szSongName_en; // const char* to the null terminated string
int BPM;
int ChannelInfo;
int Level[6]; // Array indices correspond to the following and the content is the difficulty level for that mode
// See GetRandomTrack()
// 0 - eStepNormal
// 1 - eStepHard
// 2 - eStepCrazy
// 3 - eStepHalfDouble
// 4 - eStepFreestyle
// 5 - eStepNightmare
bool bEnable_m;
bool bHidden_m;
bool bEnableDemoPlay; // Allow playing in attract mode
bool bCensor; // Don't show song in game (configurable)
bool bPad;
bool bCensorLock; // Permanently censored (not configurable)
bool bEnable_play;
bool bHidden_play;
int TexID;
bool bEnableMode_m[6]; // Modes where this song is allowed
bool bEnableMode_play[6];
short unknown1;
short time; // Time value used to calculate kcal and VO2
short SongMileage; // Cost to unlock this song
short ModeMileage[3]; // Mileage required to play this song on the different modes
} __attribute__((packed));
```
Probably the easiest method to locate that table is to find a string that any of the entries points to using your
favorite decompiler. Song names are good candidates as most of them should be unique and easy to locate when your tool
can expose all strings of the binary. Follow any references to the string and you should easily find a chunk of that
that looks like this:
```text
.data:08130FDF db 0
.data:08130FE0 ; int g_songListWithouBlazeEmotion[]
.data:08130FE0 g_songListWithouBlazeEmotion dd 0F02h ; DATA XREF: HandleSongUnlocksMaybe:loc_806A5B5r
.data:08130FE0 ; HandleSongUnlocksMaybe+26Br ...
.data:08130FE4 dd offset aACn ; "8¥¦ 8ûì "
.data:08130FE8 dd offset aYahpp ; "YAHPP "
.data:08130FEC dd offset aRieX_1 ; "8¦Édà+ X.1 "
.data:08130FF0 dd offset aCannonX_1 ; "Cannon X.1 "
.data:08130FF4 dd offset a185 ; "185 "
.data:08130FF8 dd 0
.data:08130FFC dd 3
.data:08131000 dd 0Ah
.data:08131004 dd 14h
.data:08131008 dd 0Dh
.data:0813100C dd 16h
.data:08131010 db 1
.data:08131011 db 1
.data:08131012 db 0
.data:08131013 db 1
.data:08131014 db 0
.data:08131015 db 1
.data:08131016 db 0
.data:08131017 db 0
.data:08131018 dd 0FFFFFFFFh
.data:0813101C db 1
.data:0813101D db 1
.data:0813101E db 1
.data:0813101F db 1
.data:08131020 db 1
.data:08131021 db 0
.data:08131022 db 0
.data:08131023 db 0
.data:08131024 db 0
.data:08131025 db 0
.data:08131026 db 0
.data:08131027 db 0
.data:08131028 dw 79h
.data:0813102A dw 0
.data:0813102C dw 0
.data:0813102E dw 0
.data:08131030 dw 0
.data:08131032 dw 0
.data:08131034 dw 0
.data:08131036 dw 0
.data:08131038 dw 2
.data:0813103A dw 0
.data:0813103C dd 0F03h
```
Find the beginning by going backwards and checking where the first valid entry with pointers to artist, title etc
start. Usually, the first entry is also the primary reference for the game to address the song list.
This should allow you to find the function `GetSongRealIndex`. From there, you can easily find out the total length
of the song list.
```c
int __cdecl GetSongRealIndex(int songNo)
{
signed int v1; // ebx@1
int v2; // ecx@2
int v3; // edx@3
int v4; // eax@4
v1 = GetTotalTrackNum(); // 324
if ( v1 <= 0 )
return -1;
v2 = 0;
if ( g_songIdBlazingEmotion[0] != songNo )
{
v2 = 0;
v3 = 0;
while ( 1 )
{
++v2;
if ( v2 == v1 )
break;
v4 = g_songListWithouBlazeEmotion[v3];
v3 += 23;
if ( v4 == songNo )
return *(&g_songList[0].TrackNum + 23 * v2);
}
return -1;
}
return *(&g_songList[0].TrackNum + 23 * v2);
}
```
With that info, you can dump the list straight from the binary, e.g. using `dd`:
```shell script
dd if=./piu bs=1 skip=954240 count=31200 of=songlist.bin
```
Requires you to manually calculate the size by using the above struct as reference.
Note: This part does not cover the dumping of the referenced strings to build a full song list. This process was mainly
used to get a song index mapping table for mapping absolute indices of the song table array to the song IDs and vice
versa (for pumpnet).
@@ -0,0 +1,255 @@
# Post mortem: Fiesta 2 crashing on modern linux
Date of writing: 17th November 2019
This is a port mortem about an issue that was puzzling me for months. In the following sections, I am documenting the
whole story as detailed as possible hoping this is going to be useful for anyone else (or even myself) in the future.
## What happened?
I have been running a multidisk setup with all pump games on it for a few years now and have been maintaining and
improving pumptools in the process. I always kept things quite up to date because once you need some more tooling
even on something like a dedicated machine, updating the system after it has not been updated for months or years
becomes very difficult. Furthermore, things might stop working that have worked before because of one or even multiple
issues that got introduced with the update.
Anyway, my cabinet with the multidisk setup yields the following on `uname -a`:
`Linux piumd 4.15.11-1-ARCH #1 SMP PREEMPT Mon Mar 19 18:21:03 UTC 2018 x86_64 GNU/Linux`
My workstation is a bit more up-to-date with (though, I am behind a few months...):
`Linux ambient 5.2.3-arch1-1-ARCH #1 SMP PREEMPT Fri Jul 26 08:13:47 UTC 2019 x86_64 GNU/Linux`
In the past, like more than a year ago, my workstation was also running a newer kernel, version of runtime libraries
etc. but running Fiesta 2 and newer with pumptools wasn't an issue. However, Fiesta 2 and newer stopped working when
I was continuing with my development efforts and just crashed with a segmentation fault. All old versions prior
Fiesta 2 were still working perfectly fine.
## Error analysis: first information and debugging steps
First, I enabled f2hooks built in logging to yield more output `util.log.level=4` and enabled halting on crashes to
be able to attach a debugger `patch.sigsegv.halt_on_segv=1`. This is the output I got:
```
[I][f2hook][main.c:155]: Hooking finished
[M][f2hook][main.c:168]: Calling orig_init
[E][patch-sigsegv][sigsegv.c:18]: ===================
[E][patch-sigsegv][sigsegv.c:19]: !!!!! SIGSEGV !!!!!
[E][patch-sigsegv][sigsegv.c:28]: Backtrace (3 frames):
[E][patch-sigsegv][sigsegv.c:31]: ./f2hook.so(+0x6a02) [0xf7e20a02]
[E][patch-sigsegv][sigsegv.c:31]: ./f2hook.so(+0xf827) [0xf7e29827]
[E][patch-sigsegv][sigsegv.c:31]: linux-gate.so.1(__kernel_sigreturn+0) [0xf7f07940]
[E][patch-sigsegv][sigsegv.c:37]: Halting for debugger...
```
Ok, so it seems like something crashed in f2hook.so. However, hooking up the debugger did not yield anything useful
and this was just pointing to the sigsegv handler (thought it worked with debugging other issues and actually pointed
to the location where it crashed...strange).
Next, I started removing stuff from f2hook to get a minimal version which still boots up to that point, no changes.
Then, I hooked up gdb, set a breakpoint before the crash happened and stepped my way through the whole libc
runtime setup. I figured out, that the crash happens when the libc runtime is calling handler functions of the
target application which setup various parts of the runtime environment, like static initialization.
And this is the place where the crash happened. There is one function in the piu executable which setups up all static
variables, for example constructing static strings or other objects. Once it tried to construct the first static string
of that static setup function, it crashed. To be more precise, it crashed in the string constructor when allocating
memory for the string.
Great, we found the root cause for that. Let's figure out why that happens and what's different now that it crashes
there.
## Tracing the bug down to libstdc++ and being totally mislead by various things
Because there have been issues with incompatible libc/libcstd++ versions previously, I quickly came to the idea of
comparing the version that worked on my cabinet and the version that did not work on my workstation. Indeed, these
were different versions (considering the age gap of the two OSes, that wasn't very surprising).
I started digging into the libstdc++ source code, especially looking at what is going on when strings are allocated.
Navigating the libstdc++ source is not a nice task. The naming is very confusing and, imo, non intuitive. With
templating all over the place, this makes it even worse.
Finally, I found something that sounded very related to what I have discovered so far:
In the file include/bits/basic_string.h, search for
```
_GLIBCXX_RESOLVE_LIB_DEFECTS
3076. basic_string CTAD ambiguity
```
and you will end up at a string constructor call. From that, I concluded that something was fixed related to
constructor calls. I compared the string allocation call of both versions, the non working and working ones. The
allocation for strings has changed.
Going back to the location of the crash in the piu executable, I saw that the string allocation was even inlined and
not going to a library call of...boost filesystem. The first static object created is the path "../" which is used by
a path object by boost filesystem. Because boost filesystem is a header only library, I assume that's why this got
inlined.
However, I was using the libstdc++ version of my local machine where the string allocation scheme was different. This
still did not truly explain why it crashed there with a jump to address 0, but things aligned pretty well so far.
So, the first idea for a solution was to use the old libstdc++ version from the machine where everything was fine
and working. However, using it did not change anything. I went on and grabbed more libraries from the machine until
I had all of them on my workstation and hooked them up with a `LD_LIBRARY_PATH`. But now, the application did crash
very early and did not even get to setting up the runtime at all. I did some poking but could not figure out what
was happening there. It just crashed with another jump to 0 very early in launching the elf.
Debugging continued for a bunch of weeks, on and off. I got more focused on digging deeper into the string allocation
thing as this was giving me a direction and was aligning with my findings so far. I came up with a "solution" to hook
and overwrite the string constructor calls of the newer libstdc++ version.
I started replacing them one by one to re-implement the old allocation scheme. However, this was not enough as many
function calls that are working with string objects rely on the used allocation scheme, too. Therefore, I also started
patching these until I realized that I have to re-implement, at least, everything basic_string related.
At that point, I was quite sure that this is the wrong way to go and stopped with this approach.
A few more months passed, I got back at this multiple times but couldn't come up with another solution or even
direction.
## AppImage
In a talk with a buddy, I had the idea of using some sort of sandboxing or environment boxing to pack things up nicely
into a single blob to make it easier to handle, even distributable and maybe even more platform independent.
After some internet research, I found a solution that looked like it fits the pump game use-case very well which was
AppImage. AppImage packs all your stuff into a single binary blob which is basically just a sqash fs image with a
special runtime bootstrapping the whole image and running a bash script once the image is mounted. The provided features
are very minimalistic but solve all our needs for packing pump games nicely.
The reference documentation also pointed out a few things about packing runtime libraries and how to set them up using
`LD_LIBRARY_PATH` which I was already doing but just using a naked bash script. However, this reading was starting to
point me into the right direction.
## Providing a platform/distro independent environment for your application down to the linker
I started playing around with the libraries I used for Fiesta 2. First, I grabbed _all_ libraries from my cabinet which
are required to run the game (using `ldd`). Then I started trying different combinations of including them using
`LD_LIBRARY_PATH` and some used by my native system. Nope, either I was running into the static init crashing issue
or things crashed even earlier on.
Wait, have I ever looked into why the application crashed so early, even before spinning up the runtime environment?
After working on this on and off for months and totally losing track by getting to deep into this libstdc++ thing, I
realized I didn't.
I set up the application to use all libraries from my cabinet and started debugging. First, I tried my luck with `gdb`
but didn't get very far as it just showed me a jump to 0, again. Next, I got pointed out to using `valgrind`. This was
a great hint as valgrind hooks into the bootstrapping process of the application and even displays a lot of information
about library loading and setting up the environment even way before the runtime is set up. Recommendation: Use
`valgrind -v -v -v` to get a lot of output.
However, in the end, valgrind also just pointed out the jump to 0 being the reason for the crash but not why this
happened. The additional information was good to figure out the steps happening in the application setup process but
did not yield any additional insights.
After giving this some more thought and making sure I used all runtime libraries from the cabinet, I did some
internet research again and tried go get more information on how ELFs are bootstrapped and what happens. It turned out
that information on that topic very sparse and difficult to find. However, this brought me to the following thread
from the gnu mailing list:
```
Hi all;
I have a need to use a different runtime linker (ld-linux.so) for some
of my applications. I _don't_ want to change the executables themselves
(changing the path to the runtime linker in the ELF image for example).
I know that I can just run my application as an argument to ld-linux.so,
and that actually does work very well. But, I am left with two
problems:
* Some of my applications fork/exec other programs, and those other
programs also need to use the other runtime linker. Just as I don't
want to change the ELF image, I certainly don't want to have to
recompile the programs to exec the runtime linker!
* Debugging: I can't debug because I can't find a way to convince GDB
to invoke the program-to-be-debugged using an alternative runtime
linker.
I was wondering if anyone has any ideas about how to do this? I checked
the man pages and didn't see anything (I was looking for something like
an environment variable that ld-linux.so might obey to re-exec a
different version, or some such thing--not likely, I know).
If there's nothing like that available another idea is to use LD_PRELOAD
to install a private version of the execve() system call, which would
set the alternative ld-linux.so as the first argument. Any thoughts on
this approach? Do you think it would solve the GDB problem as well?
I'm going to proceed to work on this idea but I wanted to see if anyone
had other thoughts about it.
PS. In case anyone's curious, I'm trying to run some programs natively
on my desktop system which were actually compiled for a different
system, and the native and target systems have different versions of
glibc installed. I can't change either of the versions of glibc,
but I do have the complete root filesystem of the target box in a
subdirectory of my native box and I can use LD_LIBRARY_PATH, etc. to
use them... I just need a way to get the runtime environment to
initialize properly.
--
-------------------------------------------------------------------------------
Paul D. Smith <address@hidden> HASMAT--HA Software Mthds & Tools
"Please remain calm...I may be mad, but I am a professional." --Mad Scientist
-------------------------------------------------------------------------------
These are my opinions---Nortel Networks takes no responsibility for them.
```
Source: https://lists.gnu.org/archive/html/help-gnu-utils/2004-06/msg00020.html
Oh, wow. I was amazed that someone else was having a very similar use-case of running applications from legacy systems
on a newer machine with different library versions and conflicts.
Reading on, this answer was finally revealing the last piece of the puzzle to understand the issue I was facing with
Fiesta 2:
```
If you have an old a.elf main executable program that was linked
to run with libc.so.6, and you want to run that a.elf on a machine
whose libc.so.6 differs from the one which a.elf was linked against,
and you want a reasonable guarantee that it will work, then it may
be necessary to use something like rtldi to choose the matching
ld-linux.so.2 and libc.so.6 and other libraries as of the time of
static binding of a.elf. In theory, libc.so.6 is backwards compatibile
(a given a.elf should run the same under any subsequent libc.so.6),
but in practice there have been too many bugs in {ld-linux.so.2,
libc.so.6, ...}. For example, many programs linked for libc.so.6
under RedHat Linux 7.2 and earlier won't run under glibc-2.3.2.
The most effective way to run such a program may be to install the
old glibc-x.y.z[.rpm] in a different location, binary edit the PT_INTERP
string of the a.elf, and use rtldi. This makes the old [edited] a.elf
simultaneously interoperable with other programs from different
libc.so.6 generations, and only the "oddball" program has to know.
...
ld-linux.so.2, libc.so.6, libdl.so, libnss*.so, and _many_ other shared
libraries of a given released version, are a matched set. They must be
used together, all from the same release, or not at all. Mixing and
matching pieces from different glibc-x.y.z need not work. In order to
use a consistent set that differs from the default set, you must invoke
the ld-linux.so.2 using "--library-path PATH" to specify the location
of the rest of the set. Using --library-path supersedes LD_LIBRARY_PATH
for one execve() only, and does not interfere with chilren, execve()
with no fork(), or other processes.
```
Oh, I was not aware about ld-linux.so being THAT important to this set of libc.sp, libdl.so etc. Therefore, I grabbed
the ld-linux.so file from my cabinet and ran the application with all libraries (except the GPU driver specific ones)
on my workstation like this:
```
LD_PRELOAD="./f2hook.so" ./ld-linux.so.2 --library-path ./lib ./piu ./game/ --options ./hook.conf
```
And the application starts up, passes runtime initializing, hits main and the game works.
I don't think there is anything else to add to the copy-pasted explanations above. Make sure to read them carefully to
understand the whole issue. Once you know what is going on, the whole thing is not even super complex.
## Conclusions
I would consider this being one of the major issues I have resolved so far for pumptools as this was so misleading,
difficult to debug and find any general information on. The reason behind that and the solution are super simple, once
you know them.
As we have already discussed various times in the past, this issue further points out how important proper solutions
for sandboxing, containerizing or how you want to call it for legacy applications like pump games are. The naked
bash script setting up everything is already quite good and doing the job. AppImage further enhances this by making
the whole application more portable.
However, understanding the whole process behind ELF loading, library linking, setting up the process environment and
setting up the runtime environment is very important. Otherwise, rather simple incompatibilities are the result which
have a major impact on running the application.
+107
View File
@@ -0,0 +1,107 @@
# Hardware used by Pump It Up Games
## Main PC/CPU hardware
### MK 1
We have not seen this piece of hardware and the chances these boards still exist and are sold somewhere is rather low.
However, there are pointers in the code of the game and the evolution of the hardware that it existed for the first
few versions of PIU:
* Songs were played back entirely from CD requiring to store them as 16-bit PCM audio. Therefore, the hardware did not
have a chip for decoding MP3.
* Absence of hardware security/lockchip.
We assume that this hardware was shipped and used with 1st, 2nd and 3rd. Starting 3rd SE, song files were stored as
encoded MP3 files on the CD requiring a MP3 decoder available with [MK3 hardware](###MK 3).
### MK 3
All games from 1st to Prex3/Premiere 3 are running on this revision of hardware. 1st to 3rd are compatible with this
hardware.
System configuration dump using PC-DOCTOR DOS 3.0
```
SYSTEM CONFIGURATION=====================================================
Operating System - DOS 7.10 in HMA
CPU Type - 333 MHz Intel Celeron 333
CPUID - "GenuineIntel", Family 6, Model 6, Step 5
- MMX available
Coprocessor Type - 686
Expansion Bus Type - ISA, PCI
ROM BIOS Date - 04/20/99
ROM BIOS Copyright - COPYRIGHT Award Software Inc.
Additional ROM - C800[8kB]
Base Memory - 640 kB
Expanded Memory - N/A
Extended Memory - 64512 kB (CMOS Configuration)
XMS Memory - 62400 kB (XMS 3.00, Driver 3.95) A20=ON
Serial Ports - None Installed
Parallel Ports - None Installed
Video Adapter - VGA: 3Dfx Interactive, Inc.
- Total Memory : 8192 kB
Fixed Disk Drives - 42 MB
Floppy Disk Drives - 1 - 1=3.5"/1.44M
Mouse - No Mouse
Joysticks - None
Sound Card - N/A
CAS Fax/Modem Card - N/A
Disk Compression - N/A
CD-ROM Driver Version - MSCDEX V2.25, Drive: D:
Disk Cache - Smartdrive 5.02, Hits 76%, Size 2048 kB
Primary IDE Master - ATAPI: HL-DT-STDVD-ROM GDR8164B
Primary IDE Slave - IDE: QUANTUM FIREBALL_TM1280A, S/N:692708422782
Secondary IDE Master - No Drive
Secondary IDE Slave - No Drive
SCSI - N/A
Network - N/A
Power Management - APM V1.2, Power On
USB Port - Installed on IRQ 10
Chipset Type - Intel 440BX
L2 Cache Type - 128 kB
DRAM Row 0 - 64 MB
DRAM Row 1 - Empty
DRAM Row 2 - Empty
DRAM Row 3 - Empty
DRAM Row 4 - Empty
DRAM Row 5 - Empty
DRAM Row 6 - Empty
DRAM Row 7 - Empty
PC-DOCTOR DOS 3.0 Copyr 2004 PC-Doctor, Inc. 16:15 9/25/2000
```
A bunch of custom chips for handling the following:
* Sound
* YAMAHA YMZ280B-F (8-Channel PCM/ADPCM Decoder)
* 16-bit PCM sound effects are played from external memory
* YAMAHA YAC516 (Delta Sigma Modulation D/A Converter with 8 times Over-sampling Filter)
* MICRONAS DAC3550A C2 (Stereo Audio DAC)
* MICRONAS MAS3507D F10 (MPEG 1/2 Layer 2/3 Audio Decoder)
* Songs are stored MP3 encoded
### MK 5
### MK 6
### MK 7
### MK 9
### MK X
## IO hardware
### ISA PIUIO
### USB PIUIO
### USB PIUIO 2
### PIUBTN
### XX Card reader
## Security
### Lockchip
### USB dongles
### ds1963s
Used for Pro 1/2 (and ITG 1/2).
@@ -0,0 +1,141 @@
# Notes about how NX2 handles saving and loading usb profile data
Executable of v1.54.
This document outlines the relevant parts regarding how NX2 loads and stores profiles and how this had an impact on the
design of the patch module `net-profile`, that hooks up usb profile loading over socket to a remote server.
## Syscall flow
The game calls the following system calls in order per player, here player 1 (id 0), when loading usb profile data
(assume all calls are successful here):
```c
// Simplified pseudo-like C code omitting non relevant parameters
fopen("/mnt/0/nx2save.bin")
fread(fd_save) // stats area
fread(fd_save) // encrypted area
fclose(fd_save)
fopen("/mnt/0/nx2rank.bin")
fread(fd_rank) // encrypted area
fclose(fd_rank)
```
For saving the profile, this is the call flow:
```c
// Simplified pseudo-like C code omitting non relevant parameters
fopen("/mnt/0/nx2save.bin")
fseek(fd_save) // beginning
fwrite(fd_save) // stats area
fwrite(fd_save) // encrypted area
fclose(fd_save)
fopen("/mnt/0/nx2rank.bin")
fseek(fd_rank) // beginning
fwrite(fd_rank) // encrypted area
fclose(fd_rank)
```
We can see that in both scenarios, for loading and saving, the game first takes care of a single file before moving on
to the next one.
There is another flow that is slightly different when playing World Max. After playing a song in World Max, the game
writes the changes of the `nx2save.bin` file back:
```c
// Simplified pseudo-like C code omitting non relevant parameters
fopen("/mnt/0/nx2save.bin")
fseek(fd_save) // beginning
fwrite(fd_save) // stats area
fwrite(fd_save) // encrypted area
fclose(fd_save)
```
## Pumpnet RPCs
The above set the requirements for how pumpnet needs to handle file loading and storing.
### First solution
The initial solution was combining the loading and storing process of both files, `nx2save.bin` and `nx2rank.bin`
into a single download/upload call.
Load phase:
```c
// Simplified pseudo-like C code omitting non relevant parameters
fopen("/mnt/0/nx2save.bin")
pumpnet_download_profiles()
fread(fd_save) // read from buffered data
fread(fd_save) // read from buffered data
fclose(fd_save)
fopen("/mnt/0/nx2rank.bin") // skip, data already buffered
fread(fd_rank) // read from buffered data
fclose(fd_rank) // clear all buffers and reset internal state
```
Save phase:
```c
// Simplified pseudo-like C code omitting non relevant parameters
fopen("/mnt/0/nx2save.bin")
pumpnet_download_profiles()
fseek(fd_save) // seek for buffers
fwrite(fd_save) // write to buffers
fwrite(fd_save) // write to buffers
fclose(fd_save) // skip, do nothing
fopen("/mnt/0/nx2rank.bin") // skip, data already buffered
fseek(fd_rank) // seek for buffers
fwrite(fd_rank) // write to buffers
pumpnet_upload_profiles()
fclose(fd_rank) // clear all buffers and reset internal state
```
However, with the additional flow during World Max, this solution didn't work and broke internal state handling.
Modifying this solution to incorporate saving just the `nx2save.bin` file wasn't feasible with the above architecture.
### Second solution
Therefore, the pumpnet backend was re-designed to operate on on a single file level and separate for saving and
loading.
Load phase:
```c
// Simplified pseudo-like C code omitting non relevant parameters
fopen("/mnt/0/nx2save.bin")
pumpnet_download_save()
fread(fd_save) // read from buffered data
fread(fd_save) // read from buffered data
fclose(fd_save)
pumpnet_clear_save_cache()
fopen("/mnt/0/nx2rank.bin")
pumpnet_download_rank()
fread(fd_rank) // read from buffered data
fclose(fd_rank)
pumpnet_clear_rank_cache()
```
Save phase:
```c
// Simplified pseudo-like C code omitting non relevant parameters
fopen("/mnt/0/nx2save.bin")
pumpnet_download_save()
fseek(fd_save) // seek for buffers
fwrite(fd_save) // write to buffers
fwrite(fd_save) // write to buffers
fclose(fd_save)
pumpnet_upload_save()
pumpnet_clear_save_cache()
fopen("/mnt/0/nx2rank.bin")
fseek(fd_rank) // seek for buffers
fwrite(fd_rank) // write to buffers
fclose(fd_rank)
pumpnet_upload_rank()
pumpnet_clear_rank_cache()
```
Buffer modifications are detected when `fwrite` is called and flagged accordingly that the module is aware of having
to write back dirty data on the call to `fclose`.
State handling is also simplified as it only needs to be taken care of on a file level between `fopen` and `fclose`
calls and not on a multi-file level.
This solution is definitely more robust and flexible than the previous one that operated on a full profile level.
However, the call overhead to the remote server is four times higher compared to the previous solution. Considering
that these calls are not being issued on a high frequency, server load is unlikely to be an issue.
@@ -0,0 +1,448 @@
# Pad command codes notes
Raw data and notes about pad command codes which were extracted directly from the games because I could not find a
complete and 100% accurate list per game.
All codes extracted from the MK3 games are based on the Linux port executables.
How did I find these? I used the `ac_sound_play_effect` with the second parameter set to the value `3` as my entry
point. This plays the sound effect that you can hear when you entered the modifier code correctly. After I have found
the right call, it's next to some code like this (taken from 03_3rd):
```
...
if ( modFlags & 1 )
{
if ( modFlagsSpeed1P & 1 )
result = func_2a2dc(0, 1);
if ( modFlagsSpeed1P & 2 )
result = func_2a2dc(0, 2);
if ( modFlagsSpeed1P & 4 )
result = func_2a2dc(0, 4);
if ( modFlagsSpeed1P & 8 )
result = func_2a2dc(0, 8);
if ( modFlagsSpeed1P & 0x10 )
result = func_2a2dc(0, 16);
}
if ( modFlags & 2 )
{
if ( modFlagsSpeed2P & 1 )
result = func_2a2dc(1, 1);
if ( modFlagsSpeed2P & 2 )
result = func_2a2dc(1, 2);
if ( modFlagsSpeed2P & 4 )
result = func_2a2dc(1, 4);
if ( modFlagsSpeed2P & 8 )
result = func_2a2dc(1, 8);
if ( modFlagsSpeed2P & 0x10 )
result = func_2a2dc(1, 16);
}
if ( modFlagsSpeed1P & 0x1F )
{
checkIfModifierSet2();
result = ac_sound_play_effect(0, 3u, 2u);
}
if ( modFlagsSpeed2P & 0x1F )
{
checkIfModifierSet();
result = ac_sound_play_effect(0, 3u, 2u);
}
return result;
}
```
I already renamed the function that is called prior the `ac_sound_play_effect` to `checkIfModifierSet` here. That
function checks the last eight pad inputs from a list against a list of command codes. Once a code matches, flags are
set accordingly.
Excerpt, again from 03_3rd:
```
signed int checkIfModifierSet()
{
const char *v0; // edx@1
int v1; // ebp@1
signed int v2; // ebx@1
const char *v3; // edx@19
unsigned int v4; // ebx@19
signed int result; // eax@41
signed int v6; // [sp+0h] [bp-1Ch]@1
v0 = (const char *)&codeList; // THIS is the code list
v1 = *(_DWORD *)&modFlags;
v2 = 0;
v6 = *(_DWORD *)&data_3299a4;
while ( memcmp((const char *)&data_44e9e8, v0, 8) )// iterate command list and currently post 8 inputs
{
++v2;
v0 += 8; // each modifier code is 8 commands
if ( v2 >= 13 ) // beyond command list size
goto jump_2a17f;
}
switch ( v2 ) // found command id
{
case 0:
*(_DWORD *)&data_3299a4 = 0;
*(_DWORD *)&modFlags = *(_WORD *)&modFlags & 0xFFF;
break;
```
## 03_3rd
```
1 = DL
2 = DR
4 = C
8 = UL
16 = UR
-- cancel
.data:0810833A db 4
.data:0810833B db 4
.data:0810833C db 4
.data:0810833D db 4
.data:0810833E db 4
.data:0810833F db 4
.data:08108340 db 4
.data:08108341 db 4
--------------------------- vanish
.data:08108342 db 4 center
.data:08108343 db 4 center
.data:08108344 db 10h up right
.data:08108345 db 8 up left
.data:08108346 db 4 center
.data:08108347 db 2 down right
.data:08108348 db 1 down left
.data:08108349 db 4 center
----------------- mirror
.data:0810834A db 4
.data:0810834B db 4
.data:0810834C db 1
.data:0810834D db 4
.data:0810834E db 10h
.data:0810834F db 2
.data:08108350 db 4
.data:08108351 db 8
---- 8X
.data:08108352 db 4
.data:08108353 db 4
.data:08108354 db 1
.data:08108355 db 4
.data:08108356 db 2
.data:08108357 db 4
.data:08108358 db 4
.data:08108359 db 4
- 4 X
.data:0810835A db 4
.data:0810835B db 4
.data:0810835C db 2
.data:0810835D db 4
.data:0810835E db 4
.data:0810835F db 8
.data:08108360 db 4
.data:08108361 db 4
2X
.data:08108362 db 4
.data:08108363 db 4
.data:08108364 db 8
.data:08108365 db 4
.data:08108366 db 4
.data:08108367 db 4
.data:08108368 db 10h
.data:08108369 db 4
random step
.data:0810836A db 4
.data:0810836B db 1
.data:0810836C db 4
.data:0810836D db 2
.data:0810836E db 4
.data:0810836F db 10h
.data:08108370 db 4
.data:08108371 db 8
nonstep
.data:08108372 db 8
.data:08108373 db 10h
.data:08108374 db 4
.data:08108375 db 8
.data:08108376 db 10h
.data:08108377 db 4
.data:08108378 db 8
.data:08108379 db 10h
synchro
.data:0810837A db 4
.data:0810837B db 4
.data:0810837C db 8
.data:0810837D db 10h
.data:0810837E db 8
.data:0810837F db 10h
.data:08108380 db 4
.data:08108381 db 4
couple
.data:08108382 db 4
.data:08108383 db 4
.data:08108384 db 10h
.data:08108385 db 8
.data:08108386 db 10h
.data:08108387 db 8
.data:08108388 db 4
.data:08108389 db 4
union
.data:0810838A db 1
.data:0810838B db 2
.data:0810838C db 4
.data:0810838D db 8
.data:0810838E db 2
.data:0810838F db 1
.data:08108390 db 4
.data:08108391 db 10h
random vanish
.data:08108392 db 8
.data:08108393 db 10h
.data:08108394 db 4
.data:08108395 db 1
.data:08108396 db 2
.data:08108397 db 4
.data:08108398 db 8
.data:08108399 db 10h
random speed
.data:0810839A db 8
.data:0810839B db 10h
.data:0810839C db 2
.data:0810839D db 4
.data:0810839E db 1
.data:0810839F db 4
.data:081083A0 db 2
.data:081083A1 db 1
```
Looking further into the code, there seems to be another command list with three entries right after that and it's
checked in the same function. This time, the number of inputs are 10 instead of 8:
```
v3 = (const char *)&data_108d84; // THIS is the code list
v4 = 0;
while ( memcmp(data_44e9f8, v3, 10) )
{
++v4;
v3 += 10;
if ( (signed int)v4 >= 3 )
goto jump_2a289;
}
if ( v4 < 1 )
{
if ( !v4 && data_44ea30 == 2 )
data_108bad |= 0x80u;
}
else if ( v4 <= 1 )
{
if ( data_108bad & 4 )
{
*(_WORD *)&modFlags |= 0x820u;
qmemcpy(data_44e488, &data_388e00[20 * (4 * data_108ba8 + 52)], 0x50u);
}
}
else if ( v4 == 2
&& (data_108bad & 2 && data_108ba8 >= 2 || data_108bad & 4 && !(modFlags & 0x20) && data_108ba8 == 1) )
{
data_108bae |= 1u;
}
```
Code list:
```
1 = DL
2 = DR
4 = C
8 = UL
16 = UR
.data:081083A2 data_108d84 db 2 ; DATA XREF: func_29ce8:jump_29e70o
.data:081083A2 ; checkIfModifierSet:jump_2a17fo
.data:081083A3 db 1
.data:081083A4 db 8
.data:081083A5 db 10h
.data:081083A6 db 18h
.data:081083A7 db 20h
.data:081083A8 db 12h
.data:081083A9 db 11h
.data:081083AA db 10h
.data:081083AB db 18h
.data:081083AC db 12h
.data:081083AD db 18h
.data:081083AE db 10h
.data:081083AF db 1
.data:081083B0 db 8
.data:081083B1 db 2
.data:081083B2 db 11h
.data:081083B3 db 20h
.data:081083B4 db 11h
.data:081083B5 db 10h
.data:081083B6 db 8
.data:081083B7 db 2
.data:081083B8 db 18h
.data:081083B9 db 12h
.data:081083BA db 1
.data:081083BB db 10h
.data:081083BC db 11h
.data:081083BD db 20h
.data:081083BE db 2
.data:081083BF db 18h
```
However, the code list seems to have inputs with multiple bit fields set, e.g. 0x12, 0x11. Untested.
## 04_3se
List of previous version extended by 3 more codes (last ones in the list).
```
1 = DL
2 = DR
4 = C
8 = UL
16 = UR
data_12ae8c db 4 ; DATA XREF: func_2a8c0+23o
.data:08123643 ; func_2ab98+23o
.data:08123644 db 4
.data:08123645 db 4
.data:08123646 db 4
.data:08123647 db 4
.data:08123648 db 4
.data:08123649 db 4
.data:0812364A db 4
.data:0812364B db 4
.data:0812364C db 4
.data:0812364D db 10h
.data:0812364E db 8
.data:0812364F db 4
.data:08123650 db 2
.data:08123651 db 1
.data:08123652 db 4
.data:08123653 db 4
.data:08123654 db 4
.data:08123655 db 1
.data:08123656 db 4
.data:08123657 db 10h
.data:08123658 db 2
.data:08123659 db 4
.data:0812365A db 8
.data:0812365B db 4
.data:0812365C db 4
.data:0812365D db 1
.data:0812365E db 4
.data:0812365F db 2
.data:08123660 db 4
.data:08123661 db 4
.data:08123662 db 4
.data:08123663 db 4
.data:08123664 db 4
.data:08123665 db 2
.data:08123666 db 4
.data:08123667 db 4
.data:08123668 db 8
.data:08123669 db 4
.data:0812366A db 4
.data:0812366B db 4
.data:0812366C db 4
.data:0812366D db 8
.data:0812366E db 4
.data:0812366F db 4
.data:08123670 db 4
.data:08123671 db 10h
.data:08123672 db 4
.data:08123673 db 4
.data:08123674 db 1
.data:08123675 db 4
.data:08123676 db 2
.data:08123677 db 4
.data:08123678 db 10h
.data:08123679 db 4
.data:0812367A db 8
.data:0812367B db 8
.data:0812367C db 10h
.data:0812367D db 4
.data:0812367E db 8
.data:0812367F db 10h
.data:08123680 db 4
.data:08123681 db 8
.data:08123682 db 10h
.data:08123683 db 4
.data:08123684 db 4
.data:08123685 db 8
.data:08123686 db 10h
.data:08123687 db 8
.data:08123688 db 10h
.data:08123689 db 4
.data:0812368A db 4
.data:0812368B db 4
.data:0812368C db 4
.data:0812368D db 10h
.data:0812368E db 8
.data:0812368F db 10h
.data:08123690 db 8
.data:08123691 db 4
.data:08123692 db 4
.data:08123693 db 1
.data:08123694 db 2
.data:08123695 db 4
.data:08123696 db 8
.data:08123697 db 2
.data:08123698 db 1
.data:08123699 db 4
.data:0812369A db 10h
.data:0812369B db 8
.data:0812369C db 10h
.data:0812369D db 4
.data:0812369E db 1
.data:0812369F db 2
.data:081236A0 db 4
.data:081236A1 db 8
.data:081236A2 db 10h
.data:081236A3 db 8
.data:081236A4 db 10h
.data:081236A5 db 2
.data:081236A6 db 4
.data:081236A7 db 1
.data:081236A8 db 4
.data:081236A9 db 2
.data:081236AA db 1
--- remix double
.data:081236AB db 1
.data:081236AC db 8
.data:081236AD db 1
.data:081236AE db 4
.data:081236AF db 10h
.data:081236B0 db 2
.data:081236B1 db 10h
.data:081236B2 db 4
---- crazy mode
.data:081236B3 db 4
.data:081236B4 db 1
.data:081236B5 db 4
.data:081236B6 db 2
.data:081236B7 db 4
.data:081236B8 db 1
.data:081236B9 db 4
.data:081236BA db 2
--- all select code? doesn't make sense and doesn't seem to work, probably unused
.data:081236BB db 10h
.data:081236BC db 4
.data:081236BD db 1
.data:081236BE db 10h
.data:081236BF db 8
.data:081236C0 db 4
.data:081236C1 data_12af0a db 2 ; DATA XREF: func_2c380+139r
.data:081236C1 ; func_2c51c+559r
.data:081236C2 db 8
```
+9
View File
@@ -0,0 +1,9 @@
# Notes about working with Pump It Up Pro
## Enable game's log output in arcade mode
Go to `data0.zip/Data/Static/ini` and change the following lines under the category `[Options-arcade]`:
```text
LogToDisk=1
ShowLogOutput=1
```
The game logs all log levels including trace level.
+134
View File
@@ -0,0 +1,134 @@
# Pump it Up: The 1st Dance Floor
This document collects various information about the game itself.
## Trivia
* Release: September 1999
* Korea exclusive
* First game in the series
* 15 songs
* 4 non-stop remixes
* 4 battle songs
## Game modes
* Easy
* Hard
* Double
* Non-stop remix
* Battle: When player 2 joins in the mode select screen, battle mode becomes visible by replacing double mode.
## Unlock and modifier codes
All codes must be entered in the song select menu (after selecting easy, hard, double, non-stop remix or battle). When
a code was entered successfully, a sound effect is played. For some modifiers, an icon is also displayed on left side
of the screen for player 1 and on the right side of the screen for player 2.
### Velocity 2x
Arrow scroll speed 2x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Velocity 4x
Arrow scroll speed 4x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Velocity 8x
Arrow scroll speed 8x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Mirror
All steps are mirrored along the "x axis", i.e. arrows <br>
![](image/arrow/ul.png) <-> ![](image/arrow/ur.png)
<br>and<br>
![](image/arrow/dl.png) <-> ![](image/arrow/dr.png)
<br> are switched.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
### Synchro
???
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Couple
???
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Random step
Randomizes the step chart.
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
+188
View File
@@ -0,0 +1,188 @@
# Pump it Up: The 2nd Dance Floor
This document collects various information about the game itself.
## Trivia
* Release: December 1999
* Korea exclusive
* Only 4 songs and one remix taken over from previous version
* 17 new songs
* 6 new non-stop remixes
# Game modes
* Easy
* Hard
* Double
* Non-stop remix
* Battle: When player 2 joins in the mode select screen, battle mode becomes visible by replacing double mode.
* Non-stop remix double: Needs to be unlocked [using a code](###Non-stop remix double) which needs to be entered on the
non-stop remix screen.
When the second player joined by also pressing the center panel, battle modes is available on the mode select screen
instead of double.
## Unlock and modifier codes
All codes must be entered in the song select menu (after selecting easy, hard, double, non-stop remix or battle) except
the [non-stop remix double code](###Non-stop remix double). When a code was entered successfully, a sound effect is
played. For some modifiers, an icon is also displayed on left side of the screen for player 1 and on the right side of
the screen for player 2.
### Velocity 2x
Arrow scroll speed 2x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Velocity 4x
Arrow scroll speed 4x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Velocity 8x
Arrow scroll speed 8x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Mirror
All steps are mirrored along the "x axis", i.e. arrows <br>
![](image/arrow/ul.png) <-> ![](image/arrow/ur.png)
<br>and<br>
![](image/arrow/dl.png) <-> ![](image/arrow/dr.png)
<br> are switched.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
### Synchro
???
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Couple
???
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Random step
Randomizes the step chart.
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Non-stop remix double
Must be entered on the non-step remix select screen.
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
### Union
???
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
### All Select
Enter this code on the select mode screen (easy, hard, double, non-stop). When entered correctly, the game transitions
automatically to a selection screen with all available songs.
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
+182
View File
@@ -0,0 +1,182 @@
# Pump it Up The O.B.G: The 3rd Dance Floor
This document collects various information about the game itself.
## Trivia
* Release: May 2000
* Korea exclusive
* 23 new songs but only 2 old songs taken over
# Game modes
* Easy
* Hard
* Double
* Non-stop remix
* Battle: When player 2 joins in the mode select screen, battle mode becomes visible by replacing double mode.
When the second player joined by also pressing the center panel, battle modes is available on the mode select screen
instead of double.
## Unlock and modifier codes
All codes must be entered in the song select menu (after selecting easy, hard, double, non-stop remix or battle). When a
code was entered successfully, a sound effect is played. For some modifiers, an icon is also displayed on left side of
the screen for player 1 and on the right side of the screen for player 2.
### Velocity 2x
Arrow scroll speed 2x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Velocity 4x
Arrow scroll speed 4x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Velocity 8x
Arrow scroll speed 8x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Mirror
All steps are mirrored along the "x axis", i.e. arrows <br>
![](image/arrow/ul.png) <-> ![](image/arrow/ur.png)
<br>and<br>
![](image/arrow/dl.png) <-> ![](image/arrow/dr.png)
<br> are switched.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
### Synchro
???
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Couple
???
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Random step
Randomizes the step chart.
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
### Union
???
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
### Random Vanish
???
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
### Random Speed
???
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
+211
View File
@@ -0,0 +1,211 @@
# Pump it Up The O.B.G: The Season Evolution Dance Floor
This document collects various information about the game itself.
## Trivia
* Release: September 2000
* Korea exclusive
* First version to feature the `Crazy` game mode
* 14 new songs, 1 new remix
* First game to introduce a non-unlockable songwheel
# Game modes
* Easy
* Hard
* Crazy: Must be unlocked [using a code](#crazy-mode)
* Double
* Non-stop remix double: Needs to be unlocked [using a code](#non-stop-remix-double) which needs to be entered on the
non-stop remix screen.
* Battle: When player 2 joins in the mode select screen, battle mode becomes visible by replacing double mode.
When the second player joined by also pressing the center panel, battle modes is available on the mode select screen
instead of double.
## Unlock and modifier codes
All codes must be entered in the song select menu (after selecting easy, hard, double, non-stop remix or battle) except
the [non-stop remix double code](#non-stop-remix-double). When a code was entered successfully, a sound effect is
played. For some modifiers, an icon is also displayed on left side of the screen for player 1 and on the right side of
the screen for player 2.
### Velocity 2x
Arrow scroll speed 2x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Velocity 4x
Arrow scroll speed 4x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Velocity 8x
Arrow scroll speed 8x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Mirror
All steps are mirrored along the "x axis", i.e. arrows <br>
![](image/arrow/ul.png) <-> ![](image/arrow/ur.png)
<br>and<br>
![](image/arrow/dl.png) <-> ![](image/arrow/dr.png)
<br> are switched.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
### Synchro
???
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Couple
???
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Random step
Randomizes the step chart.
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
### Union
???
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
### Random Vanish
???
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
### Random Speed
???
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
### Non-stop remix double
Must be entered on the non-step remix select screen.
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Crazy mode
Must be entered on the mode select screen. When entered successful, the "Non-stop remix" panel is replaced with "Crazy".
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
+211
View File
@@ -0,0 +1,211 @@
# Pump it Up: The Collection
This document collects various information about the game itself.
## Trivia
* Release: November 2000
* Korea exclusive
* As the name implies, this game is a collection of all the songs of the past versions except for the song "Kiss"
* Same interface as O.B.G SE
* A total of 66 songs and 18 non-stop remixes
# Game modes
* Easy
* Hard
* Crazy: Must be unlocked [using a code](#crazy-mode)
* Double
* Non-stop remix double: Needs to be unlocked [using a code](#non-stop-remix-double) which needs to be entered on the
non-stop remix screen.
* Battle: When player 2 joins in the mode select screen, battle mode becomes visible by replacing double mode.
When the second player joined by also pressing the center panel, battle modes is available on the mode select screen
instead of double.
## Unlock and modifier codes
All codes must be entered in the song select menu (after selecting easy, hard, double, non-stop remix or battle) except
the [non-stop remix double code](#non-stop-remix-double). When a code was entered successfully, a sound effect is
played. For some modifiers, an icon is also displayed on left side of the screen for player 1 and on the right side of
the screen for player 2.
### Velocity 2x
Arrow scroll speed 2x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Velocity 4x
Arrow scroll speed 4x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Velocity 8x
Arrow scroll speed 8x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Mirror
All steps are mirrored along the "x axis", i.e. arrows <br>
![](image/arrow/ul.png) <-> ![](image/arrow/ur.png)
<br>and<br>
![](image/arrow/dl.png) <-> ![](image/arrow/dr.png)
<br> are switched.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
### Synchro
???
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Couple
???
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Random step
Randomizes the step chart.
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
### Union
???
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
### Random Vanish
???
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
### Random Speed
???
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
### Non-stop remix double
Must be entered on the non-step remix select screen.
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Crazy mode
Must be entered on the mode select screen. When entered successful, the "Non-stop remix" panel is replaced with "Crazy".
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
+199
View File
@@ -0,0 +1,199 @@
# Pump it Up: The Perfect Collection
This document collects various information about the game itself.
## Trivia
* Release: December 2000
* Korea exclusive
* As the name implies, this game extends the previous version "The Collection" by adding 17 new songs
* Game mode select re-designed to allow selecting `Crazy` mode without a code.
* A total of 83 songs and 18 non-stop remixes
# Game modes
* Easy
* Hard
* Crazy
* Double
* Non-stop remix double: Needs to be unlocked [using a code](#non-stop-remix-double) which needs to be entered on the
non-stop remix screen.
* Battle: When player 2 joins in the mode select screen, battle mode becomes visible by replacing double mode.
When the second player joined by also pressing the center panel, battle modes is available on the mode select screen
instead of double.
## Unlock and modifier codes
All codes must be entered in the song select menu (after selecting easy, hard, double, non-stop remix or battle) except
the [non-stop remix double code](#non-stop-remix-double). When a code was entered successfully, a sound effect is
played. For some modifiers, an icon is also displayed on left side of the screen for player 1 and on the right side of
the screen for player 2.
### Velocity 2x
Arrow scroll speed 2x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Velocity 4x
Arrow scroll speed 4x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Velocity 8x
Arrow scroll speed 8x the BPM.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Mirror
All steps are mirrored along the "x axis", i.e. arrows <br>
![](image/arrow/ul.png) <-> ![](image/arrow/ur.png)
<br>and<br>
![](image/arrow/dl.png) <-> ![](image/arrow/dr.png)
<br> are switched.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
### Synchro
???
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Couple
???
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Random step
Randomizes the step chart.
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
### Union
???
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
### Random Vanish
???
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
### Random Speed
???
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
### Non-stop remix double
Must be entered on the non-step remix select screen.
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
+183
View File
@@ -0,0 +1,183 @@
# Pump it Up Extra
This document collects various information about the game itself.
## Trivia
* Release: February 2001
* Korea exclusive
* Crazy-mode was renamed to "Extra Expert" (XX)
* Introduction of hold/long arrows
* Double charts for Extra Expert and Non-stop Remix are available in the songwheel (no unlock code needed)
* New interface and pad navigation
* A game mode does not have to be selected prior selecting a song but can be switched on a per song basis
* This version of the game was produced by F2System, a partner of Andamiro. F2System also produced Techno Motion
* 58 songs and 9 non-stop remixes
# Game modes
* Normal
* Hard
* Extra Expert
* Double
* Non-stop remix
## Unlock and modifier codes
All codes must be entered in the song select menu. When a code was entered successfully, a sound effect is played. When
a modifier was activated, an icon is displayed either on the left side of the screen for player 1 and on the right side
of the screen for player 2.
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
### Velocity 2x, 4x, 8x
Arrow scroll speed 2x, 4x or 8x the BPM. The following code must be entered one time for 2x, two times for 4x,
three times for 8x.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Mirror
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Synchro
???
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Random step
Randomizes the step chart.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Random Speed
???
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Random Vanish
???
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Rush
???
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Noteskin select
Select a different noteskin. For the blank (second to last arrow), fill in one of the four directions to get a different
noteskin. There are two noteskin select codes.
#### Code 1
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/qm.png)
![](image/arrow/c.png)
For blank:<br>
![](image/arrow/dl.png): Star and moon<br>
![](image/arrow/dr.png): UFO<br>
![](image/arrow/ul.png): Snowman<br>
![](image/arrow/ur.png): Restroom sign and poop (yep, poop)<br>
#### Code 2:
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/qm.png)
![](image/arrow/c.png)
For blank:<br>
![](image/arrow/dl.png): Octopus and fish<br>
![](image/arrow/dr.png): Card<br>
![](image/arrow/ul.png): Pineapple <br>
![](image/arrow/ur.png): Disk jockey<br>
+113
View File
@@ -0,0 +1,113 @@
# Pump it Up The Premiere: The International Dance Floor
This document collects various information about the game itself.
## Trivia
* Release: June 2001
* First official international release
* New interface
* 87 songs
# Game modes
* Normal
* Hard
* Crazy
* Double
* Battle: When player 2 joins in the mode select screen, battle mode becomes visible by replacing double mode.
## Unlock and modifier codes
All codes must be entered in the song select menu. When a code was entered successfully, a sound effect is played. When
a modifier was activated, an icon is displayed either on the left side of the screen for player 1 and on the right side
of the screen for player 2.
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
### Change arrow scroll speed
Using the two codes below, you cycle through the following scroll speeds: off (1x), 2x, 4x, 8x, random
Random changes the scroll speed during the song to any of the four speeds above.
#### Next/increase scroll speed
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ul.png)
#### Previous/decrease scroll speed
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
### Vanish
The steps fade out about halfway to the target.
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
### Mirror
All steps are mirrored along the "x axis", i.e. arrows <br>
![](image/arrow/ul.png) <-> ![](image/arrow/ur.png)
<br>and<br>
![](image/arrow/dl.png) <-> ![](image/arrow/dr.png)
<br> are switched.
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Synchro
When choosing a single player game mode and a second player joins, this plays the same step chart on the other players
side. If this is not activated, no step chart is played for the second player.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Couple
When choosing a single player game mode and a second player joins, this plays the same step chart on the other players
side by mirrored along the "y axis". If this or [synchro](#synchro) is not activated, no step chart is played for the
second player.
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Random step
Randomizes the step chart.
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Random Vanish
Steps are visible at the bottom of the screen, disappear midfield and re-appear before hitting the targets.
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
+112
View File
@@ -0,0 +1,112 @@
# Pump it Up The PREX: The International Dance Floor
This document collects various information about the game itself.
## Trivia
* Release: November 2001
* PREX = The **PR**emiere and **EX**tra
* 87 songs
# Game modes
* Normal
* Hard
* Crazy
* Double
* Battle: When player 2 joins in the mode select screen, battle mode becomes visible by replacing double mode.
## Unlock and modifier codes
All codes must be entered in the song select menu. When a code was entered successfully, a sound effect is played. When
a modifier was activated, an icon is displayed either on the left side of the screen for player 1 and on the right side
of the screen for player 2.
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
### Change arrow scroll speed
Using the two codes below, you cycle through the following scroll speeds: off (1x), 2x, 4x, 8x, random
Random changes the scroll speed during the song to any of the four speeds above.
#### Next/increase scroll speed
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ul.png)
#### Previous/decrease scroll speed
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
### Vanish
The steps fade out about halfway to the target.
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
### Mirror
All steps are mirrored along the "x axis", i.e. arrows <br>
![](image/arrow/ul.png) <-> ![](image/arrow/ur.png)
<br>and<br>
![](image/arrow/dl.png) <-> ![](image/arrow/dr.png)
<br> are switched.
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Synchro
When choosing a single player game mode and a second player joins, this plays the same step chart on the other players
side. If this is not activated, no step chart is played for the second player.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Couple
When choosing a single player game mode and a second player joins, this plays the same step chart on the other players
side by mirrored along the "y axis". If this or [synchro](#synchro) is not activated, no step chart is played for the
second player.
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Random step
Randomizes the step chart.
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Random Vanish
Steps are visible at the bottom of the screen, disappear midfield and re-appear before hitting the targets.
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
+92
View File
@@ -0,0 +1,92 @@
# Pump it Up The Rebirth: The 8th Dance Floor
This document collects various information about the game itself.
## Trivia
* Release: January 2002
* Korea exclusive version
* 87 songs
# Game modes
* Normal
* Hard
* Crazy
* Double
* Half-Double
* Division
* Battle: When player 2 joins in the mode select screen, battle mode becomes visible by replacing double mode.
## Unlock and modifier codes
All codes must be entered in the song select menu. When a code was entered successfully, a sound effect is played. When
a modifier was activated, an icon is displayed either on the left side of the screen for player 1 and on the right side
of the screen for player 2.
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
#### Change arrow scroll speed: Next/increase scroll speed
Using this code to cycle through the following scroll speeds: off (1x), 2x, 3x, 4x.
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ul.png)
#### Random arrow scroll speed
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
#### Change difficulty
Allows you to change the difficulty on the song select screen.
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
### Vanish
The steps fade out about halfway to the target.
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
### Mirror
All steps are mirrored along the "x axis", i.e. arrows <br>
![](image/arrow/ul.png) <-> ![](image/arrow/ur.png)
<br>and<br>
![](image/arrow/dl.png) <-> ![](image/arrow/dr.png)
<br> are switched.
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
### Random step
Randomizes the step chart.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
+92
View File
@@ -0,0 +1,92 @@
# Pump it Up The Premiere 2: The International 2nd Dance Floor
This document collects various information about the game itself.
## Trivia
* Release: March 2002
* International version of Rebirth
* 102 songs
# Game modes
* Normal
* Hard
* Crazy
* Double
* Half-Double
* Division
* Battle: When player 2 joins in the mode select screen, battle mode becomes visible by replacing double mode.
## Unlock and modifier codes
All codes must be entered in the song select menu. When a code was entered successfully, a sound effect is played. When
a modifier was activated, an icon is displayed either on the left side of the screen for player 1 and on the right side
of the screen for player 2.
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
#### Change arrow scroll speed: Next/increase scroll speed
Using this code to cycle through the following scroll speeds: off (1x), 2x, 3x, 4x.
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ul.png)
#### Random arrow scroll speed
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
#### Change difficulty
Allows you to change the difficulty on the song select screen.
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
### Vanish
The steps fade out about halfway to the target.
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
### Mirror
All steps are mirrored along the "x axis", i.e. arrows <br>
![](image/arrow/ul.png) <-> ![](image/arrow/ur.png)
<br>and<br>
![](image/arrow/dl.png) <-> ![](image/arrow/dr.png)
<br> are switched.
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
### Random step
Randomizes the step chart.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
+98
View File
@@ -0,0 +1,98 @@
# Pump it Up The PREX 2
This document collects various information about the game itself.
## Trivia
* Release: November 2002
* 93 songs
# Game modes/difficulties
* Normal
* Hard
* Crazy
* Double
* Battle: Can be selected once player 2 joined the game
## Unlock and modifier codes
All codes must be entered in the song select menu. When a code was entered successfully, a sound effect is played. For
some modifiers, an icon is also displayed on left side of the screen for player 1 and on the right side of the screen
for player 2.
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
### Velocity 2x, 3x, 4x
Arrow scroll speed 2x, 3x or 4x or 8x the BPM. The following code must be entered one time for 2x, two times for 3x and
three times for 4x.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Mirror
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Random Step
Randomizes the step chart.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Random Velocity
The arrow scroll speed changes randomly during the song.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
+99
View File
@@ -0,0 +1,99 @@
# Pump it Up The Premiere 3: The International 3rd Dance Floor
This document collects various information about the game itself.
## Trivia
* Release: May 2003
* 56 songs
# Game modes/difficulties
* Normal
* Hard
* Crazy
* Double
* Half-Double
* Battle: Can be selected once player 2 joined the game
## Unlock and modifier codes
All codes must be entered in the song select menu. When a code was entered successfully, a sound effect is played. For
some modifiers, an icon is also displayed on left side of the screen for player 1 and on the right side of the screen
for player 2.
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
### Velocity 2x, 3x, 4x
Arrow scroll speed 2x, 3x or 4x or 8x the BPM. The following code must be entered one time for 2x, two times for 3x and
three times for 4x.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Mirror
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Random Step
Randomizes the step chart.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Random Velocity
The arrow scroll speed changes randomly during the song.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
+100
View File
@@ -0,0 +1,100 @@
# Pump it Up The PREX 3: The International 4th Dance Floor
This document collects various information about the game itself.
## Trivia
* Release: October 2003
* 77 songs
# Game modes/difficulties
* Normal
* Hard
* Crazy
* Freestyle
* Nightmare
* Half-Double
* Battle: Can be selected once player 2 joined the game
## Unlock and modifier codes
All codes must be entered in the song select menu. When a code was entered successfully, a sound effect is played. For
some modifiers, an icon is also displayed on left side of the screen for player 1 and on the right side of the screen
for player 2.
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
### Velocity 2x, 3x, 4x
Arrow scroll speed 2x, 3x or 4x or 8x the BPM. The following code must be entered one time for 2x, two times for 3x and
three times for 4x.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Mirror
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Random Step
Randomizes the step chart.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Random Velocity
The arrow scroll speed changes randomly during the song.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
+145
View File
@@ -0,0 +1,145 @@
# Pump it Up Exceed: The International 5th Dance Floor
This document collects various information about the game itself.
## Trivia
* Release: April 2004
* First game to run on Linux and MK5 hardware
* 24 new songs
* 102 songs total
* Songs are separated into channels: Banya, Pop and K-Pop
* Three hidden songs that have to be [unlocked using a code](#hidden-songs-unlock)
# Game modes/difficulties
* Normal
* Hard
* Crazy
* Freestyle
* Nightmare
* Battle: Can be selected once player 2 joined the game
## Unlock and modifier codes
All codes must be entered in the song select menu. When a code was entered successfully, a sound effect is played. For
some modifiers, an icon is also displayed on left side of the screen for player 1 and on the right side of the screen
for player 2.
### Hidden songs unlock
This code unlocks the following songs:
* Monkey Fingers
* Oh Rosa (same song/steps on the select screen but music switchd to spanish version)
* First Love (same song/steps on the select screen but music switchd to spanish version)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
### Velocity 2x, 3x, 4x
Arrow scroll speed 2x, 3x, 4x or 8x the BPM. The following code must be entered one time for 2x, two times for 3x,
three times for 4x and four times for 8x.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Mirror
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Random Step
Randomizes the step chart.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Random Velocity
The arrow scroll speed changes randomly during the song.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Earthworm
Makes the arrows wave back and fourth as they scroll to the top.
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Exceed Mode
Arrows travel diagonally towards the top.
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
+295
View File
@@ -0,0 +1,295 @@
# Pump it Up Exceed 2: The International 6th Dance Floor
This document collects various information about the game itself.
## Trivia
* Release: November 2004
* First game to run on Linux, MK6 hardware and the USB PIUIO
* 18 new songs
* 136 songs total
* Based on Exceed's interface
# Game modes/difficulties
* Normal
* Hard
* Crazy
* Freestyle
* Nightmare
* Battle: Can be selected once player 2 joined the game
* Remix Station
## Game play unlocks
The following songs are unlockable by fulfilling the described conditions.
### Arcade station: Canon-D, nightmare
Naturally, this only works as a single player. This unlock is not permanent.
1. Select arcade station
1. Play any two songs and get an A ranking on both
1. Play "I'll Give You All My Love" on crazy difficulty as your 3rd song and get an A ranking with less than 10 misses
1. You will receive a bonus stage and the nightmare difficulty on Canon-D is unlocked
### Remix station: 2nd Hidden Remix, nightmare
Naturally, this only works as a single player. This unlock is only temporary.
1. Select remix station
1. Play "Diva Remix" on freestyle difficult and get an S ranking
1. The nightmare difficulty on "2nd Hidden Remix" is unlocked
### Remix station: Raw, nightmare
Raw (as it's known) is the same song (and background movie) as the opening movie of Exceed 2. Auto-fail (Stage Break)
is not on during this song, and the game will not stop if you get a 50+ miss combo. This song is not a selectable song
(ever), and you cannot choose your modifiers or difficulties before this song, as the game will bleed into it after your
last remix song and will start automatically after giving you a greeting screen for the song. It is set on double mode.
This unlock is not permanent.
1. Select remix station
1. Play any remix songs and get an S ranking on all of them
1. The game automatically starts the song "Raw" as your last song
### Remix station: Banya Classic Remix, nightmare
Naturally, this only works as a single player. This unlock is only temporary.
1. Select remix station
1. Play "Deux Remix" on fresstyle and get an S ranking
1. The nightmare difficulty on "Banya Classic Remix" is unlocked
### Remix station: Dignity Remix, crazy
Naturally, this only works as a single player. This unlock is only temporary.
1. Select remix station
1. Play "Banya Classic Remix" on hard and get an S ranking with a full combo
1. The crazy difficulty on "Dignity Remix" is unlocked
### Remix station: Treme Vook of the War Another
Naturally, this only works as a single player. This unlock is only temporary.
1. Select remix station
1. Play "Treme Vook of the War" on crazy and get an A ranking
1. The songs "Treme Vook of the War Another" is unlocked
### Remix station: Turbo Remix, nightmare
Naturally, this only works as a single player. This unlock is only temporary.
1. Select remix station
1. Play "Diva Remix" on crazy and get an S ranking, without any goods or bads
1. The nightmare difficulty on "Turbo Remix" is unlocked
## Unlock and modifier codes
All codes must be entered in the song select menu. When a code was entered successfully, a sound effect is played. For
some modifiers, an icon is also displayed on left side of the screen for player 1 and on the right side of the screen
for player 2.
### Unlock: Solitary 2
This code unlocks the song "Solitary 2" and must be entered in the song select menu. When entered correctly, the song
appears immediately. This unlock is only temporary.
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Unlock: Canon-D Full Mix
This code unlocks the song "Canon-D Full Mix" and must be entered on the select screen of the **Remix Station**. When
entered correctly. This unlock is permanent.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
### Velocity 2x, 3x, 4x, 8x
Arrow scroll speed 2x, 3x, 4x or 8x the BPM. The following code must be entered one time for 2x, two times for 3x,
three times for 4x and four times for 8x.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Mirror
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Random Step
Randomizes the step chart.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Random Velocity
The arrow scroll speed changes randomly during the song.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Earthworm
Makes the arrows wave back and fourth as they scroll to the top.
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Exceed Mode
Arrows travel diagonally towards the top.
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Freedom
Stationary arrows at the top are invisible.
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Acceleration
Arrows start scrolling slowly at the bottom of the screen and accelerate when scrolling towards the top stationary
arrows.
![](image/arrow/dl.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Deceleration
Arrows start scrolling fast at the bottom of the screen and decelerate when scrolling towards the top stationary
arrows.
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Extra mix noteskin
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Flower card noteskin
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
+312
View File
@@ -0,0 +1,312 @@
# Pump it Up Zero: International 7th Dance Floor
This document collects various information about the game itself.
## Trivia
* Release: February 2006
* Entirely new interface. First mix to feature BG video preview playback on the song select screen. Furthermore, when
playing with a second player, each player can select a different difficulty level.
* 130 songs total
# Game modes
* Arcade Station: Separated into 4 channels. Each channel contains songs with chart difficulties Normal, Hard, Crazy, Freestyle,
Nightmare
* Banya
* K-Pop
* Pop
* Another: Many songs/charts of this channel must be unlocked, first.
* Easy Station
* Remix Station
* Mission Station: Clear missions to unlock content
## Game play unlocks
The game has an internal point system. Points are earned by simply playing the game, passing songs etc. A lot of
content can be unlocked using this point system. However, certain content is bound to specific missions and cannot be
unlocked by earning points.
### Point unlocks
These are either unlocked by just playing the game or once a certain mission becomes available.
* Eres Para Mi - Another Freestyle - unlocked upon unlock of Another station
* Final Audition 2 - Another Crazy - unlocked upon unlock of Another station
* Final Audition 3 U.F - Another Nightmare - unlocked upon unlock of Another station
* Mexi Mexi - Another Nightmare - unlocked upon unlock of Another station
* My Friend - Another Freestyle - unlocked upon unlock of Another station
* Solitary 2 - Another Crazy - unlocked upon unlock of Another station
* Extravaganza - Another Crazy - time/point-release unlock - after opening of mission 7
* Final Audition 2 - Another Nightmare - time/point-release unlock - after opening of mission 11
* Love is a Danger Zone 2 - Another Hard - time/point-release unlock - after opening of mission 13
* Love is a Danger Zone 2 - Another Crazy - time/point-release unlock - after opening of mission 13
* Love is a Danger Zone 2 - Another Nightmare - time/point-release unlock - after opening of mission 13
* Naissance 2 - Another Nightmare - time/point-release unlock - after opening of mission 15
* Final Audition - Another Nightmare - time/point-release unlock - after opening of mission 17
* Do it Yourself - Another Nightmare - time/point-release unlock - after opening of mission 19
* Solitary 2 - Another Nightmare - time/point-release unlock - after opening of mission 21
* Mr. Larpus - Another Nightmare - time/point-release unlock - after opening of mission 23
* Extravaganza - Another Nightmare - time/point-release unlock - after opening of mission 25
* Another Truth - Another Nightmare - time/point-release unlock - after opening of mission 27
* Witch Doctor - Another Nightmare - time/point-release unlock - after opening of mission 29
### Mission station unlocks
The following songs/step charts can only be unlocked by unlocking specific missions.
* [New arrow skin](#new-arrow-skin) - clear mission 9
* [Music note skin](#musical-note-skin) - clear mission 10
* [Extra mix skin](#extra-mix-skin) - clear mission 11
* [Grade reverse modifier](#grade-reverse) - clear mission 12
* Love is a Danger Zone - Another Freestyle - mission unlock (mission 16)
* Love is a Danger Zone - Another Nightmare - mission unlock (mission 16)
* Witch Doctor - Another Crazy - mission unlock (mission 17)
* [Canon-D eye skin](#canon-d-eye-skin) - clear mission 18
* Final Audition - Another Crazy - mission unlock (mission 19)
* Join The Party - Another Nightmare - mission unlock (mission 20)
* [Flower card skin](#flower-card-skin) - clear mission 24
* Circus Magic - Another Nightmare - mission unlock (mission 26), note: only mode playable for this song in the entire
game
* Vook - Another Freestyle - mission unlock (mission 27)
* Vook - Another Nightmare - mission unlock (mission 27)
* I'll Give You All My Love - Another Nightmare - mission unlock (mission 28)
## Unlock and modifier codes
All codes must be entered in the song select menu. When a code was entered successfully, a sound effect is played. An
icon on the left/right side of the screen indicates if the modifier is active for player 1/2.
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
### Velocity 2x, 3x, 4x, 8x
Arrow scroll speed 2x, 3x, 4x or 8x the BPM. The following code must be entered one time for 2x, two times for 3x,
three times for 4x and four times for 8x.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Mirror
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Random Step
Randomizes the step chart.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Random Velocity
The arrow scroll speed changes randomly during the song.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Earthworm
Makes the arrows wave back and fourth as they scroll to the top.
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Exceed Mode
Arrows travel diagonally towards the top.
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Freedom
Stationary arrows at the top are invisible.
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Acceleration
Arrows start scrolling slowly at the bottom of the screen and accelerate when scrolling towards the top stationary
arrows.
![](image/arrow/dl.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Deceleration
Arrows start scrolling fast at the bottom of the screen and decelerate when scrolling towards the top stationary
arrows.
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Battle mode
In arcade station, player 2 must have joined that the game shows "1P + 2P mode" at the top left. Entering the code
below actives battle mode and shows "1P VS. 2P mode" at the top left.
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Grade reverse
Shows inverse judgements during game play, i.e. perfect = miss, great = bad
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### New arrow skin
Requirement: Clear mission 9
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
### Musical note skin
Requirement: Clear mission 10
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
### Extra mix skin
Requirement: Clear mission 11
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Canon-D eye skin
Requirement: Clear mission 18
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
### Flower card skin
Requirement: Clear mission 24
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
+281
View File
@@ -0,0 +1,281 @@
# Pump it Up NX: New Xenesis
This document collects various information about the game itself.
## Trivia
* Release: December 2006
# Game modes
* Arcade Station: Separated into 3 channels. Each channel contains songs with chart difficulties Normal, Hard, Crazy,
Freestyle, Nightmare
* New Tunes
* Banya
* K-Pop
* Pop
* Training Station
* Special Station: Full versions, remixes and another step (charts)
* World Tour: Clear missions to unlock further locked missions and content in Special Station
## Game play unlocks
The song *Final Audition Episode 2-2* is the only locked song in the whole game. This song can be unlocked by playing
the song *Final Audition Episode 2-1* 100 times. You do not have to pass the song, failing the song also counts
towards this play count.
Clearing missions in World Tour unlocks further missions and content in Special Zone. However, all locked content of
World Tour and Special Station is also unlocked when the total play count on the machine reaches about 20000 plays.
## Unlock and modifier codes
All codes must be entered in the song select menu. When a code was entered successfully, a sound effect is played. An
icon on the left/right side of the screen indicates if the modifier is active for player 1/2. These codes do not work
on World Tour (Station).
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
### Velocity 2x, 3x, 4x, 8x
Arrow scroll speed 2x, 3x, 4x or 8x the BPM. The following code must be entered one time for 2x, two times for 3x,
three times for 4x and four times for 8x.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Mirror
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Random Step
Randomizes the step chart.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Random Velocity
The arrow scroll speed changes randomly during the song.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Earthworm
Makes the arrows wave back and fourth as they scroll to the top.
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Exceed Mode
Arrows travel diagonally towards the top.
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Freedom
Stationary arrows at the top are invisible.
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Acceleration
Arrows start scrolling slowly at the bottom of the screen and accelerate when scrolling towards the top stationary
arrows.
![](image/arrow/dl.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Deceleration
Arrows start scrolling fast at the bottom of the screen and decelerate when scrolling towards the top stationary
arrows.
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Battle mode
In arcade station, player 2 must have joined that the game shows "1P + 2P mode" at the top left. Entering the code
below actives battle mode and shows "1P VS. 2P mode" at the top left.
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Under attack
Point mirror the target (grey) area with the center of the screen as the origin. This results in the P1 target area
positioned upside down in bottom right corner and the P2 target area positioned upside down in the bottom left corner.
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Flash
Arrows are disappearing and appearing in short intervals ("flashing") when moving towards the top.
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### NX mode
Tilts the perspective of the arrows scrolling towards the targets from an "overhead" perspective to a "distant"
perspective.
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
### Grade reverse
Shows inverse judgements during game play, i.e. perfect = miss, great = bad
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Extra mix skin
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Canon-D eye skin
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
### Flower card skin
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
+295
View File
@@ -0,0 +1,295 @@
# Pump it Up NX2: Next Xenesis
This document collects various information about the game itself.
## Trivia
* Release: October 2007
* First version to allow storing player scores and unlock state on a usb thumb drive. The original game only allows
special brand of usb thumb drives. Other drives are not accepted by the game. Profiles were managed and uploaded by
the player using a proprietary software called "PUMBI" which is no longer supported.
# Game modes
* Arcade Station: Separated into 3 channels. Each channel contains songs with chart difficulties Normal, Hard, Crazy,
Freestyle, Nightmare
* New Tunes
* Banya
* K-Pop
* Pop
* Training Station
* Special Station: Full versions, remixes and another step (charts)
* World Max: Clear missions to unlock further locked missions and content in Special Station
## World max guide and unlocks
Either take a look at the `missions.txt` file in the `game` data folder or use [Turkeyslam's guide](guide/nx2.pdf) which
was published on ph-online back in the days.
### Cancel
Clear all modifiers previously enabled.
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
### Increase arrow scroll speed
Arrow scroll speed 2x, 3x, 4x or 8x the BPM. The following code must be entered one time for 2x, two times for 3x,
three times for 4x and four times for 8x.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Decrease arrow scroll speed
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Vanish
The arrows vanish before reaching the target at the top.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Nonstep
Hide all steps.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Mirror
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Random Step
Randomizes the step chart.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
### Random Velocity
The arrow scroll speed changes randomly during the song.
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Earthworm
Makes the arrows wave back and fourth as they scroll to the top.
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Exceed Mode
Arrows travel diagonally towards the top.
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Freedom
Stationary arrows at the top are invisible.
![](image/arrow/ul.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Acceleration
Arrows start scrolling slowly at the bottom of the screen and accelerate when scrolling towards the top stationary
arrows.
![](image/arrow/dl.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Deceleration
Arrows start scrolling fast at the bottom of the screen and decelerate when scrolling towards the top stationary
arrows.
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Under attack
Point mirror the target (grey) area with the center of the screen as the origin. This results in the P1 target area
positioned upside down in bottom right corner and the P2 target area positioned upside down in the bottom left corner.
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### Flash
Arrows are disappearing and appearing in short intervals ("flashing") when moving towards the top.
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
### NX mode
Tilts the perspective of the arrows scrolling towards the targets from an "overhead" perspective to a "distant"
perspective.
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
### Grade reverse
Shows inverse judgements during game play, i.e. perfect = miss, great = bad
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/ur.png)
![](image/arrow/ul.png)
![](image/arrow/c.png)
### Extra mix skin
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
### Canon-D eye skin
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/c.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
### Flower card skin
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
### Playing card skin
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/ur.png)
### Random skin
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ul.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/ur.png)
![](image/arrow/dl.png)
![](image/arrow/dl.png)
![](image/arrow/dl.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/dr.png)
![](image/arrow/c.png)
+23
View File
@@ -0,0 +1,23 @@
# Game Documentations
This kind of documentation provides various information about the game itself like some trivia, available features like
game modes, unlock and modifier codes etc.
* [The 1st Dance Floor](01-1st.md)
* [The 2nd Dance Floor](02-2nd.md)
* [The O.B.G: The 3rd Dance Floor](03-3rd.md)
* [The O.B.G: The Season Evolution Dance Floor](04-3se.md)
* [The Collection](05-tc.md)
* [The Perfect Collection](06-pc.md)
* [Extra](07-extra.md)
* [The Premiere: The International Dance Floor](08-prem1.md)
* [The PREX: The International Dance Floor](09-prex1.md)
* [The Rebirth: The 8th Dance Floor](10-reb.md)
* [The Premiere 2: The International 2nd Dance Floor](11-prem2.md)
* [The PREX 2](12-prex2.md)
* [The Premiere 3: The International 3rd Dance Floor](13-prem3.md)
* [The PREX 3: The International 4th Dance Floor](14-prex3.md)
* [Exceed: The International 5th Dance Floor](15-exc.md)
* [Exceed 2: The International 6th Dance Floor](16-exc2.md)
* [Pump it Up Zero: International 7th Dance Floor](17-zero.md)
* [Pump it Up NX: New Xenesis](18-nx.md)
* [Pump it Up NX2: Next Xenesis](20-nx2.md)
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+54
View File
@@ -0,0 +1,54 @@
# exchook: Exceed
This readme covers any matters that are relevant for this hook, only. Anything that applies to **all** hooks is covered
in a [main hook readme file](../hook.md) including general data setup and a quick start guide.
## Additional notable features
* Full MK5IO emulation with API hook: Keyboard, MK6 PIUIO or your own custom IO
* Fixed infamous hold glitch, i.e. make the damn game playable, finally
## Versions supported
* 20040325
* 20040408
Any other version won't work, period. Pumptools has to memory patch various things like I/O because hooking them is not
possible (at least not right now).
## Dependencies
Make sure to read the different methods of dependency resolution available in the [main hook readme file](../hook.md),
first.
The following **direct** dependencies (cmd: `readelf -d piu`) are required:
* libGL.so.1
* libGLU.so.1
* libpthread.so.0
* libasound.so.2
* libz.so.1
* libpng12.so.0
* libc.so.6
* libm.so.6
* libX11.so.6
* libstdc++.so.5
Additionally, when using `piuio.so`, you need the following library as well:
* libusb-1.0.so.0
As for method 1, when using Ubuntu, the dependencies can be found in the following packages:
* libc-bin (or gcc-multilib on a 64-bit platform)
* libusb-1.0-0
* libx11-6
* zlib1g
* libasound2
## Data setup
In additional to the [general information applying to **all** hooks](../hook.md#data-setup), this game requires all
files and folders in the `game` folder to be in **UPPERCASE** on a case-sensitive file system.
## Troubleshooting and FAQ
Make sure to also check the
[troubleshooting and FAQ section of the main hook readme](../hook.md#troubleshooting-and-faq). This covers various
things that apply to **all** hooks. The following sub-sections apply mainly to this hook.
### The game crashes when using the sound device hw:0
The game's sound manager relies on hardware mixing using the same device which is not supported by newer versions of
alsa anymore. Instead, you have to use software mixing using the `dmix` device,
[see here](#the-game's-music-plays-too-fast-or-sounds-weird).
+96
View File
@@ -0,0 +1,96 @@
# Notable features
* Runs on recent kernel versions thanks to various fixes
* Runs on 32-bit and 64-bit distros (64-bit distros require additional 32-bit libs to be installed)
* Full dongle emulation
* Remove HDD checks to run this on "non legit" drives
* Full MK6IO emulation with API hook: Keyboard or your own custom IO
* Real IO passthrough (for MK6 usb io)
# Versions supported
All known versions supported.
# Data setup
You are expected to get a clean set of data from a prestine drive. Ensure that
the game version matches one of the supported versions listed.
You need two main folders:
* data
* settings
## Data folder
Contents of the folder:
* game: The binaries of the custom "AMFS". File names must be lower case.
* lib: Put any libraries (especially older versions of libraries that can't be
installed anymore using the package manager) the game uses and aren't installed
on your system in here.
* piu: The piu executable
## Settings folder
The contents of the folder are auto generated if the files don't exist.
Otherwise, this folder contains:
* PIUFESTA2.INI
* RANK.DATA
## Executable dependencies
All dependencies must be compiled as 32-bit binaries. Here is a list of
dependencies (with versions) required to run the game:
* libGL.so.1
* libGLU.so.1
* libasound.so.2
* libusb-0.1.so.4
* libmad.so.0
* libmpeg2.so.0
* libmpeg2convert.so.0
* libftgl.so.2
* libstdc++.so.6
* libgcc_s.so.1
* libc.so.6
* libm.so.6
* libX11.so.6
* libpthread.so.0
* libdl.so.2
* librt.so.1
* libnvidia-tls.so.340.96
* libnvidia-glcore.so.340.96
* libXext.so.6
* libusb-1.0.so.0
* libfreetype.so.6
* libxcb.so.1
* libudev.so.1
* libz.so.1
* libbz2.so.1.0
* libpng16.so.16
* libharfbuzz.so.0
* libXau.so.6
* libXdmcp.so.6
* libcap.so.2
* libresolv.so.2
* libglib-2.0.so.0
* libgraphite2.so.3
* libpcre.so.1
# Hook module configuration file
Checkout the usage information of the hook and set the option values according
to your needs. Here is an example option configuration file:
```
log_file_path=/tmp/pumptools.log
log_level=3
enable_file_monitor=0
enable_io_monitor=0
piuio_emu_lib_path=/pumptools/lib/piuio-emu.so
piuio_exit_test_service=1
game_settings_path=/save/f2
sound_device=hw:0
keyboard_dev=/dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-mouse
halt_on_segv=0
```
# Run the game
Ensure you are running an X screen. Otherwise, you have to start one along with the game. Various library/system-calls
require root privileges. Make sure to run the game as root or with sudo (otherwise you get various sorts of errors,
typically permission denied). Use the included *run.sh* file to start the game on a desktop environment.
# Further notes
## Vsync
The game is required to run with vsync on.
+88
View File
@@ -0,0 +1,88 @@
# Notable features
* Runs on recent kernel versions thanks to various fixes
* Runs on 32-bit and 64-bit distros (64-bit distros require additional 32-bit libs to be installed)
* Full dongle emulation
* Remove HDD checks to run this on "non legit" drives
* Full MK6IO emulation with API hook: Keyboard or your own custom IO
* Real IO passthrough (for MK6 usb io)
# Versions supported
All known versions supported.
# Data setup
You are expected to get a clean set of data from a prestine drive. Ensure that
the game version matches one of the supported versions listed.
You need two main folders:
* data
* settings
## Data folder
Contents of the folder:
* game: The binaries of the custom "Fiesta FS". These are stored in raw areas
of the HDD and have to be extraced. File names must be lower case.
* lib: Put any libraries (especially older versions of libraries that can't be
installed anymore using the package manager) the game uses and aren't installed
on your system in here.
* piu: The piu executable
## Settings folder
The contents of the folder are auto generated if the files don't exist.
Otherwise, this folder contains:
* PIUFESTAEX.INI
* RANK.DATA
## Executable dependencies
All dependencies must be compiled as 32-bit binaries. Here is a list of
dependencies (with versions) required to run the game:
* libGL.so.1
* libGLU.so.1
* libasound.so.2
* libusb-0.1.so.4
* libmad.so.0
* libmpeg2.so.0
* libmpeg2convert.so.0
* libstdc++.so.6
* libm.so.6
* libgcc_s.so.1
* libc.so.6
* libX11.so.6
* libpthread.so.0
* libdl.so.2
* librt.so.1
* libnvidia-tls.so.340.96
* libnvidia-glcore.so.340.96
* libXext.so.6
* libusb-1.0.so.0
* libxcb.so.1
* libudev.so.1
* libXau.so.6
* libXdmcp.so.6
* libcap.so.2
* libresolv.so.2
# Hook module configuration file
Checkout the usage information of the hook and set the option values according
to your needs. Here is an example option configuration file:
```
log_file_path=/tmp/pumptools.log
log_level=3
enable_file_monitor=0
enable_io_monitor=0
piuio_emu_lib_path=/pumptools/lib/piuio-emu.so
piuio_exit_test_service=1
game_settings_path=/save/fex
sound_device=hw:0
keyboard_dev=/dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-mouse
halt_on_segv=0
```
# Run the game
Ensure you are running an X screen. Otherwise, you have to start one along with the game. Various library/system-calls
require root privileges. Make sure to run the game as root or with sudo (otherwise you get various sorts of errors,
typically permission denied). Use the included *run.sh* file to start the game on a desktop environment.
# Further notes
## Vsync
The game is required to run with vsync on.
+89
View File
@@ -0,0 +1,89 @@
# Notable features
* Runs on recent kernel versions thanks to various fixes
* Runs on 32-bit and 64-bit distros (64-bit distros require additional 32-bit libs to be installed)
* Full dongle emulation
* Remove HDD checks to run this on "non legit" drives
* Full MK6IO emulation with API hook: Keyboard or your own custom IO
* Real IO passthrough (for MK6 usb io)
# Versions supported
All known versions supported.
# Data setup
You are expected to get a clean set of data from a prestine drive. Ensure that
the game version matches one of the supported versions listed.
You need two main folders:
* data
* settings
## Data folder
Contents of the folder:
* game: The binaries of the custom "Fiesta FS". These are stored in raw areas
of the HDD and have to be extraced. File names must be lower case.
* lib: Put any libraries (especially older versions of libraries that can't be
installed anymore using the package manager) the game uses and aren't installed
on your system in here.
* piu: The piu executable
## Settings folder
The contents of the folder are auto generated if the files don't exist.
Otherwise, this folder contains:
* PIUFESTA.INI
* RANK.DATA
## Executable dependencies
All dependencies must be compiled as 32-bit binaries. Here is a list of
dependencies (with versions) required to run the game:
* libGL.so.1
* libGLU.so.1
* libasound.so.2
* libusb-0.1.so.4
* libmad.so.0
* libmpeg2.so.0
* libmpeg2convert.so.0
* libstdc++.so.6
* libm.so.6
* libgcc_s.so.1
* libc.so.6
* libX11.so.6
* libpthread.so.0
* libdl.so.2
* librt.so.1
* libnvidia-tls.so.340.96
* libnvidia-glcore.so.340.96
* libXext.so.6
* libusb-1.0.so.0
* libxcb.so.1
* libudev.so.1
* libXau.so.6
* libXdmcp.so.6
* libcap.so.2
* libresolv.so.2
# Hook module configuration file
Checkout the usage information of the hook and set the option values according
to your needs. Here is an example option configuration file:
```
log_file_path=/tmp/pumptools.log
log_level=3
enable_file_monitor=0
enable_io_monitor=0
piuio_emu_lib_path=/pumptools/lib/piuio-emu.so
piuio_exit_test_service=1
game_settings_path=/save/fst
sound_device=hw:0
keyboard_dev=/dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-mouse
halt_on_segv=0
```
# Run the game
Ensure you are running an X screen. Run the game using
Ensure you are running an X screen. Otherwise, you have to start one along with the game. Various library/system-calls
require root privileges. Make sure to run the game as root or with sudo (otherwise you get various sorts of errors,
typically permission denied). Use the included *run.sh* file to start the game on a desktop environment.
# Further notes
## Vsync
The game is required to run with vsync on.
+201
View File
@@ -0,0 +1,201 @@
# Pumptool's hook libraries
A collection of libraries that need to be pre-loaded when running vanilla dumps of Pump It Up games. These hooks allow
you to run any of the supported games on any* Linux distribution and hardware.
Each game might require a different hook library as the software evolved as well as the hardware and original
operating system changed a few times as well.
## General features
A few notable features:
* Run any supported gam on recent kernel versions thanks to various fixes
* Run any supported game on 32-bit and 64-bit distros (64-bit distros require additional 32-bit libs to be installed)
* Full dongle emulation
* Remove HDD checks to run this on "non legit" drives
* Full IO hardware emulation: MK6 PIUIO, Pro Button board (PIUBTN)
* Real IO passthrough
* API: Implement support for your own custom IO
## Supported games and versions
Check each of the dedicated hook readmes which games and versions are supported.
## Hardware, operating system and environment
A general outline is given by [this readme](os.md) if you want to setup something yourself. Otherwise, you should
checkout the `pumpos` project in a repository nearby which takes care of installing a fully configured OS to a physical
disk to run the games on dedicated hardware for cabinets.
## Quick start: how to run (official release)
The following steps apply to any game of the "officially" supported release data.
1. Install the required dependencies which can vary per game. Check the section "required dependencies" in the dedicated
readme files of each hook.
1. Unpack `game.zip` and `lib-local.zip` to a folder of your choice.
1. Your folder should contain the following files and folders: `game`, `lib`, `piu`, `version`
1. Unpack the hook which supports the game you have chosen, e.g. for Exceed use `exchook.zip`, from the
`pumptools-X.XX.zip` release package next to the `piu` executable
1. Unpack the `piuio.zip` from the `pumptools-X.XX.zip` release package next to the `piu` executable
1. Rename the hook library, e.g. for Exceed `exchook.so`, to `hook.so` and the hook configuration file, e.g. for
Exceed `exchook.conf`, to `hook.conf`
1. Open `hook.conf` with a text editor and set the `patch.piuio.emu_lib` property accordingly:
* For keyboard usage: `patch.piuio.emu_lib=./ptapi-io-piuio-keyboard.so` and
`patch_hook_main_loop.x11_input_handler=./ptapi-io-piuio-keyboard.so"`
* Configure your keyboard mappings using `./ptapi-io-piuio-keyboard-conf`
* For USB PIUIO usage: Do not set the `patch.piuio.emu_lib` property and have the hardware plugged in.
1. Run the game as logged in root user: `./piueb run` or if you have `sudo` installed and configured: `sudo ./piueb run`
Details to specific games are given in the hook read files dedicated to each supported version. Further general
configuration and technical details as well as troubleshooting known issues are described in following sections.
## Dependencies
A list of dependencies is provided in the dedicated hook readme files for each game. The following is a general guide
on how dependencies of the games can be resolved to run them.
Right now, there are two methods for resolving the dependencies and which dependencies to use for the game:
* __Method 1__: Install as many dependencies as possible using the package manager of your distribution. Usually, you want
to go for method 1 and if the game runs, you don't have to bother with method 2. A few less common libraries are
provided with the official data release and are loaded from the local `lib` folder instead.
* __Method 2__: Provide **all** libraries except GPU related ones and a dedicated ld-linux loader with the game
independent from your system. Theoretically, this gives you full distribution independence but it is more complicated
and comes with a few unresolved issues so far. If method 1 doesn't work for you, try this method. For details, see the
[following section](#local-data-folder).
## Data setup
You are expected to get a clean set of data from a pristine drive. Ensure that the game is supported by one of the
hook libraries coming with pumptools and the game's version is on the list supported versions.
You are not required to have the pulled data in the same locations as on the original drive as the hook library can
be configured to have everything in a single local folder. These settings can be found and tweaked in the `hook.conf`
file which is created after you started the game once.
### Local data folder
Your local data folder must contain the following folders and files:
* `game`: The `game` asset folder from the HDD. Filename casing depends on the games and is relevant on case-sensitive
file systems. Exact requirements are explained in the readme files of each hook. Otherwise, the game crashes because of
files/folders it cannot find. Furthermore, put any additional files/folders that are game assets and not located in
the original `game` folder into the `game` folder, e.g. `mission.txt`, `SCRIPT` folder etc. which are located in
the cramfs on some games.
* `lib`: Put any libraries (especially older versions of libraries that can't be installed anymore using the package
manager) the game uses and aren't installed on your system in here. Using piueb, you have two options with potential
different (in-)compatibility issues:
1. Have **all** libraries the game requires to run (except GPU driver specific libs) with compatible version in that
folder including a dedicated `ld-linux.so`. See [piueb script header documentation](../../dist/piueb).
1. Have only additional libraries that are not common/available on with your package manager **without** a dedicated
`ld-linux.so`.
* `save`: Empty folder where the the game stores configuration. These files are created by the game automatically and
contain default values if missing.
* `piu`: The Linux port `piu` executable.
## Configure IO
The hooks allow you to hook any implementation of [pumptools's API](../api/api.md) to the game to drive any type of IO
hardware. See the [dedicated readme](../api/io/piuio.md) on how to configure the PIUIO with the different types
of implementations available, e.g. keyboard, joystick, ...
## Troubleshooting and FAQ
The following sub-sections apply to all hooks.
### USB 3.0 vs 2.0 issues with USB thumb drives/profiles
This affects *ALL* games that make use of USB thumb drives for storing player profile related data.
Due to how the Linux kernel treats bus-port mappings for USB 3.0 and USB 2.0 different, it is recommended to limit the
usage of USB thumb drives either to 3.0 or 2.0 drives only after having configured the port assignment for the affected
games.
For example, you use a USB 2.0 thumb drive to assign one physical USB ports on your machine to each player side using
NX2's operator menu configuration option. However, the configured assignment is only working for USB 2.0 drives. If
you repeat this configuration step with a USB 3.0 drive (if your mainboard supports them because it has a USB 3.0
host controller), you will get different `bus:port` values shown on the configuration screen. Keep this in mind when
setting up the game, assigning the ports and using USB thumb drives with the games.
### My USB thumb drive is not detected by the game at all
Which means you cannot use it to even map the USB ports in the test menu.
Make sure to try at least another one by a different brand. There have been reports of some thumb drives simply not
working, e.g. a fairly old Kingston 1GB. In general, everything that gets detected fine by Linux should work.
### My USB thumb drive works when mapping the ports in the test menu but is not recognized on the game login screen
Might be the same issue as [here](#my-usb-thumb-drive-is-not-detected-by-the-game-at-all). Try out different USB thumb
drives. Be aware of the [USB 3.0 vs 2.0 issue](#usb-30-vs-20-issues-with-usb-thumb-drivesprofiles) as well.
### The game enters the operator menu when I start it
This is known to happen consistently on NX but was observed on other versions like Exceed 2 and Zero in the past. The
cause for this is unknown so far. Even with all usb emulation layers removed from pumptools and a real MK6 PIUIO
attached this still happens. If the game is run without the PIUIO attached, everything's fine. Therefore, we suspect
this is a bug within the game's PIUIO driver, likely some uninitialized buffers (due to the randomness of this bug
being triggered).
### How to I generate a fresh configuration file with default values
If you deleted your `hook.conf` file or you just want a clean start with default values, the hook creates a clean
`hook.conf` file if none exists once you run `piueb`.
### What are the command line arguments supported by the hook
Just run `piueb run -h` to get help output from the hook library. This also provides you with shortened command line
parameters for all options available from the configuration file.
### How do I provide command line arguments to quickly change configuration settings for the game
Just run `piueb run` with the shortened command line parameter, e.g. `piueb run -w`.
### The game's music plays too fast, too slow, or sounds weird
Depending on the game version you play, the audio subsystem is set to either render to an output device with a
frequency of 44100hz or 48000hz in SE16_LE format. Alsa needs to be configured accordingly to play back the audio
data at the right sample rate to make it sound right.
Games and audio settings required:
* 44100hz: MK3 Linux ports 1st to Prex 3, Exceed (1), Pro 1 and Pro 2
* 48000hz: Exceed 2 and newer
One possibility to fix that is change the values in your config, e.g. `/usr/share/alsa/pcm/dmix.conf` when using the
`dmix` device (the location and config can differ depending on your setup). In case you have to set them to 48000hz,
search for the following configuration values and replace them with these values:
```
format S16_LE
rate 48000
```
If the contents of the files are just variables, check `/usr/share/alsa/alsa.conf` something similar like this:
```text
defaults.pcm.dmix.rate 44100
defaults.pcm.dmix.format "S16_LE"
```
The same method applies to replacing 44100hz with 48000hz.
### How do I figure out which sound device to select
You can list the currently connected devices/sound cards using the following command:
```shell script
cat /proc/asound/cards
```
Example output:
```text
0 [PCH ]: HDA-Intel - HDA Intel PCH
HDA Intel PCH at 0xfb610000 irq 51
1 [NVidia ]: HDA-Intel - HDA NVidia
HDA NVidia at 0xfb080000 irq 52
```
You can see two audio devices available: `0` being the built-in sound chip and `1` the audio output on the installed
GPU (i.e. HDMI audio out).
To route the audio to the device of your choice, e.g. device `0`, add the number to the `hw:` path: `hw:0` for device
`0`. Set `hw:0` in the configuration file:
```text
patch.sound.device=hw:0
```
### The game plays/renders too fast
The game relies on vsync to lock to the target framerate of 60 FPS. Ensure vsync is turned on in your GPU settings.
### libGL.so.1: cannot open shared object file: No such file or directory
Install your GPU drivers. This library depends on the GPU driver and is not included with the distributed data.
### There's no sound at all, even with the correct sound device selected
On certain setups, the sound output only seems to work after already having attempted to use the sound device once.
In a shell, try running the following command twice:
```shell script
aplay -q /usr/share/sounds/alsa/Front_Center.wav
```
If after a fresh boot the sound plays after the second attempt, your setup suffers from this issue.
Simply putting the above command once in a boot script will make sure the sound device is activated.
+283
View File
@@ -0,0 +1,283 @@
# mk3hook: 1st to Prex 3/Premiere 3 Linux ports
This readme covers any matters that are relevant for this hook, only. Anything that applies to **all** hooks is covered
in a [main hook readme file](../hook.md) including general data setup and a quick start guide.
First and foremost, the MK3 Linux ports are runnable without this hook as well. The ports were created from the original
fully disassembled DOS binaries and reassembled for 32-bit Linux. To make the games run on modern non-MK3 hardware,
additional features were added to the disassembly:
* Software lockchip emulation
* ISA PIUIO to USB PIUIO (over libusb)
* MP3 audio decoding and playback using fmodex
* Software sound effect playback
* Software EEPROM data reading/writing
However, since modifying the (decompiled) source code is a very complex task, various additional features and fixes
are applied using a hook library. This lacks certain flexibility but is so far sufficient to fix various bugs and add
some more quality of life features.
## Additional notable features
* Audio subsystem using fmodex: Bugfixes and audio device selection
* Relocate game data to `game` sub-folder to have identical data layout to newer generation games
* Additional development/debugging features, e.g. file, io, open logging and tracing
* Hardcoded OpenGL bugfix
* Utilize pumptools configuration infrastructure to unify configuration of all games
## Versions supported
Basically, "all" versions are supported considering there was only one Linux binary per game released so far.
## Quick start: how to run (official release), additional steps
Start with the quick start guide from the [main hook readme](../hook.md#quick-start-how-to-run-official-release) and
add the additional steps at the very end:
1. **1st and 2nd only**: Open the `hook.conf` file and set the following property: `game.1st_2nd_fs=1`. For details, see
[this section](#1st-or-2nd-errors-about-failed-resource-loading)
1. **1st only**: Go straight to the operator menu by pressing `G` on your keyboard. Go to `GAME OPTION`, select and
confirm `DEFAULT SETTING` and `SAVE AND EXIT`. Next, go to `COIN OPTION`, `DEFAULT SETTING` and `SAVE AND EXIT`. See
[this section](#1st-crashes-right-after-the-andamiro-logo-or-the-intro-sequence-when-i-should-see-the-title-screen-with-a-floating-point-exception)
for details.
## Dependencies
Make sure to read the different methods of dependency resolution available in the [main hook readme file](../hook.md),
first.
The following **direct** dependencies (cmd: `readelf -d piu`) are required by all Linux ports:
* libGL.so.1
* libX11.so.6
* libXxf86vm.so.1
* libXrandr.so.2
* libpthread.so.0
* libXi.so.6
* libXcursor.so.1
* libXinerama.so.1
* libm.so.6
* libncurses.so.5
* libtinfo.so.5
* libfmodex.so
* libconfig.so.9
* libusb-0.1.so.4
* libc.so.6
As for method 1, when using Ubuntu, the dependencies can be found in the following packages:
* libc-bin (or gcc-multilib on a 64-bit platform)
* libusb-0.1-4
* libconfig++9v5
* tinfo5
* ncurses5
* libxcursor1
* libxinerama1
* libxi6
* libxrandr2
* libxxf86vm1
* libx11-6
* libasound2
## Data setup
In additional to the [general information applying to **all** hooks](../hook.md#data-setup), the following information
goes for a clean set of data from a pristine/non-bootleg CD.
If you have the official release, this might not be relevant to you as it just explains some important technical details
about the data.
In general, get a clean set of data from a pristine/non-bootleg CD.
However, 1st, 2nd and 3rd and Extra (IIRC) are the exception here. These games have their textures packed in an odd
format (IIRC something about an odd color format and/or textures being flipped) that cannot be used with the Linux port
versions. These versions require file modification and repacking to make everything look correct with the linux
binaries.
Furthermore, because the old games ran on case-insensitive file systems, everything goes with file naming depending on
the version of the game, e.g. full upper/lower-case files, folders and even mixed ones, e.g. Stage.cfg (*sigh*).
In order to make this less painful for the the hook library, some file names were modified to create some sort of
consistency.
You are not required to have the pulled data in the same location and layout as given by the original layout on the
disc as this can be configured with the hook library. Everything can be located locally in a single folder. The settings
for this can be found and tweaked in the `hook.conf` file which is created after you started the game once
([see below](#mk3hook-features)).
#### The game data subfolder
This differs slightly from newer generation games, i.e. MK6-based and newer. The hook library takes care of this by
implementing a consistent directory structure on all versions of the game. Therefore, all game data from the CD of MK3
games goes into a `game` folder as well. Example of `games` contents for Prex 3:
* `AUDIO`
* `BGA`
* `STEP`
* `TITLE`
* `PIU.BIN`
* `STAGE.CFG`
Furthermore, the game needs to have the sound effects available as files. These were stored on a ROM chip on the MK3
hardware. Luckily, newer PC-based games have these as normal files with the correct naming in the `game/WAVE` subfolder.
These also go into `game/EFFECTS`.
Some other and older versions come with different files and folders but the process is identical. The first three games,
1st, 2nd and 3rd, had their audio files stored on disc as PCM audio data next to the other game assets. These audio
files need to be ripped and provided as MP3 encoded audio files in the sub-folder `game/track`.
## Linux port features
This section covers the features that were added to the Linux ports and therefore not available on the original DOS
versions.
### Configuration file
A configuration file with different options can be provided to the game's bare executable. The configuration is provided
as a command line argument when running the game, e.g.
```
./piu ./save/config.cfg
```
Example contents:
```
fullscreen = 1;
allow_exit = 1;
save_file = "./save/EEPROM.BIN";
effect_path = "./EFFECTS/";
track_path = "./track/";
sync_offset = 115;
sync_multiplier = 4.16666666666666696272613990004;
music_volume = 1.0;
sfx_volume = 1.0;
```
Most entries are self-explanatory. However, there are two parameters that can be tweaked to control synchronisation of
the stepchart to the music.
The `sync_offset` parameter (in ms) is used to offset the stepchart to the music. However, as you might be used to such
a parameter from other music games, this offset is **NOT** entirely identical to adjusting the music to your sound
system's latency. You can use this value to shift the synchronisation point forward and backward but keep in mind that
it will not match any other offset values you determined in other games.
The `sync_multiplier` is also a variable that was depending on the sound hardware of the target platform. It was
already determined and there should be **NO** reason to change it unless you know what it does and how it is used in
synchronizing the stepchart to the song in the engine.
All these configuration values are exposed via the `hook.conf` file and hooked to the pumptools configuration
infrastructure. Usually, there is no need to deal with this directly, so this is section is mainly for documenting its
presence.
### Built-in keyboard controls
Ignore this section if you are using the `mk3hook` because it will disable this feature entirely. See
[this section](#configure-io).
The following keyboard controls are available with the Linux ports.
PIUIO hooked controls:
```
Test: Key G
Service: Key H
Clear: Key J
Coin 1: Key K
Coin 2: Key L
Pads (Player 2 on numpad):
Q E 7 9
S 5
Z C 1 3
```
Keyboard controls supported by the game engine (won't work on very early versions of the game, e.g. 1st, 2nd, 3rd):
```
Test: F1
Service: F2
Clear: F3
```
### USB PIUIO
Ignore this section if you are using the `mk3hook` because it will disable this feature entirely. See
[this section](#configure-io).
When a USB PIUIO is plugged it, the game will automatically detect and use it.
### Exit the game
Use `Test` + `Service` on the USB PIUIO (controls) to exit the game. This can also be blocked in the configuration.
## mk3hook features
Check the `hook.conf` file which is located in the same folder as the `piu` executable once you have started the game.
The available settings are explained in the `hook.conf` file.
### Configure IO
See [this section of the main hook readme](../hook.md#configure-io).
### Select another audio device
If the default sound card is not working, e.g. see [here](#no-sound-and-fmod-errors-in-log), you might want to
select another audio device/card instead.
In order to find out which cards are available and which configuration value to set, you have to run the game once.
Check the log and you will see a list of available devices printed somewhere at the beginning of the log, for example:
```
Output type: 11
Num available drivers 43
Driver 0: default
Driver 1: null
Driver 2: jack
Driver 3: sysdefault:CARD=PCH
Driver 4: front:CARD=PCH,DEV=0
...
```
By default and if you have not configured any sound device, yet, this will pick the first, usually, `default` device.
Pick another one by copying the name, e.g. `sysdefault:CARD=PCH`, and setting it in the `hook.conf` file:
```
patch.sound.device=sysdefault:CARD=PCH
```
When you restart the game, check the log if the device got picked up properly. This is indicated by a log message
right after the device list is printed.
### Debugging fmodex issues
You can also debug issues with fmodex, e.g. why
[the selected sound device does not work](#no-sound-and-fmod-errors-in-log).
You need to replace the normal `fmodex.so` library in the game local `lib` folder with a `fmodexL.so` version. Just
rename the "L"-version to `fmodex.so` and have it in the game local `lib` folder. Furthermore, you have to enable
debug output by setting the following configuration value in the `hook.conf` file:
```
patch.sound.debug_output=0
```
After that's done, you should see additional log output by fmodex on the console.
## Troubleshooting and FAQ
Make sure to also check the
[troubleshooting and FAQ section of the main hook readme](../hook.md#troubleshooting-and-faq). This covers various
things that apply to **all** hooks. The following sub-sections apply mainly to this hook.
### No sound and FMOD errors in log
If you see one or multiple of the following error messages in the log output
```
FMOD error! (60) Error initializing output device.
FMOD error! (79) This command failed because System::init or System::setDriver was not called.
FMOD error! (37) An invalid parameter was passed to this function.
```
it is very likely that fmod cannot use the default/currently selected audio device for playback. This can have various
reasons from non suitable configuration to device being used by another process and therefore blocked if not supporting
software mixing.
Choose another device for playback instead, see [this section](#select-another-audio-device), or you can enable
fmodex debug output to further debug this issue, see [this section](#debugging-fmodex-issues).
### 1st/2nd is missing the "Insert Coin" text on the title screen and several other graphics, e.g. life bar during gameplay
This is a known bug and we do not have a fix for this so far. However, this is not always triggered and if you keep
restarting the game (with a few seconds of waiting between restarts), you will start the game without this bug being
active eventually.
### 1st or 2nd errors about failed resource loading
For example:
```
FAIL: res_load( piu.dat )
```
This error indicates that one or multiple game files are not placed in the right location(s), your configured `game`
sub-directory path is not correct or you forgot to switch on the "1st/2nd filesystem" feature switch in the hook
configuration. For the latter, set the following in your `hook.conf` file:
```
game.1st_2nd_fs=1
```
### 1st crashes right after the Andamiro logo or the intro sequence when I should see the title screen with a floating point exception
1st does not detect if no EEPROM data is available and does not write defaults on first start or when you deleted the
`save/EEPROM.BIN` file. Therefore, all settings values for the game are considered "0". This is fine with all settings
except the coin settings. This causes the floating point exception though I assume it was actually caused by a division
by zero.
To fix this, go right to the operator menu when you booted up the game and are still on the Andamiro logo screen. Go
to `GAME OPTION`, select and confirm `DEFAULT SETTING` and `SAVE AND EXIT`. Next, go to `COIN OPTION`, `DEFAULT SETTING`
and `SAVE AND EXIT`. This writes a fresh `EEPROM.bin` file with all default settings and you are good to go.
+154
View File
@@ -0,0 +1,154 @@
# nx2hook: NX2
This readme covers any matters that are relevant for this hook, only. Anything that applies to **all** hooks is covered
in a [main hook readme file](../hook.md) including general data setup and a quick start guide.
## Additional notable features
* Removed USB flash drive vendor lock, i.e. use _ANY_ USB flash drive to store game profiles
* Auto generate new profiles if no profile is found on the connected USB flash drive
## Versions supported
All known versions supported.
## Dependencies
Make sure to read the different methods of dependency resolution available in the [main hook readme file](../hook.md),
first.
The following **direct** dependencies (cmd: `readelf -d piu`) are required:
* libfreetype.so.6
* librt.so.1
* libGL.so.1
* libGLU.so.1
* libusb-0.1.so.4
* libpthread.so.0
* libXxf86vm.so.1
* libpng12.so.0
* libasound.so.2
* libmad.so.0
* libgcc_s.so.1
* libc.so.6
* libm.so.6
* libX11.so.6
* libstdc++.so.6
* libz.so.1
As for method 1, when using Ubuntu, the dependencies can be found in the following packages:
* libc-bin (or gcc-multilib on a 64-bit platform)
* libx11-6
* zlib1g
* libusb-0.1-4
* libasound2
## Data setup
In additional to the [general information applying to **all** hooks](../hook.md#data-setup), this game requires all
files and folders from the original `game` folder to be in **UPPERCASE** on a case-sensitive file system with the
exception of `*.txt` and `*.ttf` files in the root of game. Further game asset files and folders from cramfs need to be
copied to the `game` directory. `nx.ttf`, `nxcn.ttf`, `nxpt.ttf`, `nxtw.ttf` and `mission.txt` must be **lowercase** but
`SCRIPT` and its contents must be **UPPERCASE**.
## Pumpnet setup
Instead of using plain usb profiles like on the vanilla version without pumptools (which is still possible with
pumptools), pumptools provides a patch module to upload/download usb profiles to/from a remote server over TCP IP
networks.
This feature can be enabled by setting the following configuration properties in the `hook.conf` file:
```text
patch.net_profile.server=<put the server address of the pumpnet server here>
patch.net_profile.machine_id=<put your machine id that's registered with the server here>
```
If the network offers or even requires secure communication using https, you should have received a package with a
client certificate, a client key and a certificate authority bundle. Place the files named `ca-bundle-crt.pem`,
`client-crt.pem` and `client-key.pem` in a folder, e.g. `cert` next to the `piu` executable and configure the hook
to use these for the encrypted communication by setting the property key `patch.net_profile.cert_dir_path`
accordingly, e.g. `patch.net_profile.cert_dir_path=./cert`. Note: The server URL that you set for the properties key
`patch.net_profile.server` has to be a https based URL in order to work correctly, e.g. `https://localhost`. Your
network provided of your choice should provide you the URL you have to use.
When everything's configured correctly, the log tells you so:
```text
Initialized pumpnet for game 20, serveraddr localhost:8080, main endpoint version /usbprofile/v1
Initialized: game 20, server XXXXXXX, machine id XXXXXXX
```
How you acquire an address to a remote server and a machine ID is out of this document's scope.
Once these parameters are present, pumptools is looking for a file called `pumpnet.bin` on connected usb sticks. As
long as this file is in the root directory of your usb drive, the game will ignore the the regular `nx2save.bin` and
`nx2rank.bin` files and always try to connect to the remote server. When you remove `pumpnet.bin`, it will pick up the
local profiles and not connect to the server, even if enabled.
`pumpnet.bin` contains an identifier for the player to login. This file needs to be provided by the network service
somehow. The how is out of the scope of this document.
Ensure you have mapped the usb ports in the game correctly. Go to the operator menu and the "usb drive" item. Plug
**exactly one** usb thumb drive into the usb port you want to assign as P1 and hit the test button. The menu item
should change from `---` to a numerical value, e.g. `03:00` which describes the bus and port the drive got detected on.
Repeat this for P2.
When you start the game, have your usb stick plugged in and it is recognized correctly by the game, the log output
tells you if it found the `pumpnet.bin` file and connected to the server correctly for downloading your profile data:
```text
Found pumpnet profile file /mnt/0/pumpnet.bin
Profile file player 0, file_type 0, refId XXXXXXXXXXXXXX downloading from server...
Downloading file player 0, file_type 0, refId XXXXXXXXXXXXXX successful
```
If it cannot connect to the server, the log tells you that as well and retries to connect to it a few times before
giving up:
```text
Performing curl request failed: Couldn't connect to server
Failed, http code 0, retrying (0)...
...
```
## Troubleshooting and FAQ
Make sure to also check the
[troubleshooting and FAQ section of the main hook readme](../hook.md#troubleshooting-and-faq). This covers various
things that apply to **all** hooks. The following sub-sections apply mainly to this hook.
### How do I unlock 'Tell Me' on the non korean version?
Put an empty file called `KEY.LUA` into the `game/SCRIPT` folder and change the language to korean in the operator menu.
This loads the korean version of the game (yes, that's how it actually worked originally) and 'Tell Me' will be
available.
Note: You can't switch back to English unless you delete the file `game/SCRIPT/KEY.LUA`.
### When using pumpnet, the game does not detect any usb sticks
Make sure that you have configured the usb ports in the game's operator menu `USB DRIVE` menu item. For instructions,
refer to the [above section](#pumpnet-setup).
### When using pumpnet, the game tells me to register my usb drive on login
If you see the message "Please REGISTER your USB drive at www.piugame.com prior to using the product." when logging in
with pumpnet enable, your login got rejected for one of the following reasons:
* Your machine ID is invalid or not whitelisted on the server
* Your player ID is invalid or no such player exists on the server
* No NX2 profile was created for the player ID on the server
On any of the above cases, verify that you ensured you have configured everything correctly on the user web interface
of pumpnet. Otherwise, contact the server administrator.
### When using pumpnet, the game apparently gets stuck on the usb drive login screen
This can happen if the game cannot reach the server or on some other errors that might be temporarily. Therefore, the
game retries for up to ten times currently to reach the server or complete an outstanding operation. This is also
reflected in the logs with warning messages telling you the game is retrying.
### Curl requests fail: Problem with the SSL CA cert
When you get the following error message:
```text
Performing curl request failed: Problem with the SSL CA cert (path? access rights?)
```
Make sure the path you configured for the property key `patch.net_profile.cert_dir_path` is pointing to an existing
directory containing the files `ca-bundle-crt.pem`, `client-crt.pem` and `client-key.pem` that you received from the
the network you are trying to connect to.
### Curl requests fail: SSL peer certificate or SSH remote key was not OK
When you get the following error message:
```text
Performing curl request failed: SSL peer certificate or SSH remote key was not OK
```
Make sure that you have the files `ca-bundle-crt.pem`, `client-crt.pem` and `client-key.pem` that you have received
from the network you are trying to connect to placed in a directory. The path to the **directory** needs to be set in
the hook configuration file by setting the key `patch.net_profile.cert_dir_path`, e.g.
`patch.net_profile.cert_dir_path=./cert` if the files are placed next to the `piu` exec in the folder `cert`.
+55
View File
@@ -0,0 +1,55 @@
# nxahook: NXA
This readme covers any matters that are relevant for this hook, only. Anything that applies to **all** hooks is covered
in a [main hook readme file](../hook.md) including general data setup and a quick start guide.
## Additional notable features
* Removed USB flash drive vendor lock, i.e. use _ANY_ USB flash drive to store game profiles
* Auto generate new profiles if no profile is found on the connected USB flash drive
# Versions supported
All known versions supported.
## Dependencies
Make sure to read the different methods of dependency resolution available in the [main hook readme file](../hook.md),
first.
The following **direct** dependencies (cmd: `readelf -d piu`) are required:
* libfreetype.so.6
* librt.so.1
* libGL.so.1
* libGLU.so.1
* libusb-0.1.so.4
* libpthread.so.0
* libXxf86vm.so.1
* libpng12.so.0
* libasound.so.2
* libmad.so.0
* libboost_regex-mt.so.3
* libgcc_s.so.1
* libc.so.6
* libm.so.6
* libX11.so.6
* libdl.so.2
* libstdc++.so.6
* libz.so.1
As for method 1, when using Ubuntu, the dependencies can be found in the following packages:
* libc-bin (or gcc-multilib on a 64-bit platform)
* libx11-6
* zlib1g
* libusb-0.1-4
* libasound2
## Data setup
In additional to the [general information applying to **all** hooks](../hook.md#data-setup), this game requires all
files and folders from the original `game` folder to be in **UPPERCASE** on a case-sensitive file system. Further game
asset files and folders from cramfs need to be copied to the `game` directory. `nx.ttf`, `nxcn.ttf`, `nxpt.ttf`,
`nxtw.ttf`, `mission.txt` and `ufo.txt` must be **lowercase** but `SCRIPT` and its contents must be **UPPERCASE**.
The `config` (or `CONFIG`) folder and its contents must be available in **UPPER** _AND_ **lowercase**. The `BrainQuest`
folder name must be kept like this and its contents must be **lowercase**.
## Troubleshooting and FAQ
Make sure to also check the
[troubleshooting and FAQ section of the main hook readme](../hook.md#troubleshooting-and-faq). This covers various
things that apply to **all** hooks. The following sub-sections apply mainly to this hook.
+52
View File
@@ -0,0 +1,52 @@
# nxhook: NX
This readme covers any matters that are relevant for this hook, only. Anything that applies to **all** hooks is covered
in a [main hook readme file](../hook.md) including general data setup and a quick start guide.
## Versions supported
All known versions supported.
## Dependencies
Make sure to read the different methods of dependency resolution available in the [main hook readme file](../hook.md),
first.
The following **direct** dependencies (cmd: `readelf -d piu`) are required:
* librt.so.1
* liblua50.so.5.0
* liblualib50.so.5.0
* libGL.so.1
* libGLU.so.1
* libusb-0.1.so.4
* libpthread.so.0
* libpng12.so.0
* libasound.so.2
* libgcc_s.so.1
* libc.so.6
* libm.so.6
* libXext.so.6
* libX11.so.6
* libstdc++.so.5
* libz.so.1
As for method 1, when using Ubuntu, the dependencies can be found in the following packages:
* libc-bin (or gcc-multilib on a 64-bit platform)
* libx11-6
* zlib1g
* libusb-0.1-4
* libasound2
## Data setup
In additional to the [general information applying to **all** hooks](../hook.md#data-setup), this game requires all
files and folders in the `game` folder to be in **UPPERCASE** on a case-sensitive file system.
## Troubleshooting and FAQ
Make sure to also check the
[troubleshooting and FAQ section of the main hook readme](../hook.md#troubleshooting-and-faq). This covers various
things that apply to **all** hooks. The following sub-sections apply mainly to this hook.
### Fully unlock the game
This hook has an option to fully unlock the game by setting the following property in the configuration file:
```text
game.force_unlock=1
```
This will unlock all missions in "World Tour" as well any locked songs in "Special Zone", and the song "FAEP 2-2".
+59
View File
@@ -0,0 +1,59 @@
# Hardware
Everything runs on original hardware MK6 and up. However, newer games might be slightly more demanding and will not
run smoothly on the old MK6 anymore.
As for custom hardware, everything that's at least of MK6 specs should do the job. GPU-wise you are not bound to nVidia
cards. Though, the card of your choice has to support at least the OpenGL 2.0 standard.
However, not that we have seen graphical glitches on AMD and Intel GPUs with NX2 which we haven't seen on older pump
versions. The game starts and runs but after some time you might encounter graphical glitches.
You can also run the games in a VM. Recommended settings: 2 vCPUs, 2 GB RAM, OpenGL 2.0 hardware acceleration enabled
(requires installing drivers/kernel modules on your guest).
# Operating system and environment setup
This document outlines common stuff that is required to run any of the games supported by pumptools. Make sure to follow
these properly and have your system prepared for the hooks before you continue with their dedicated readme files.
## Linux distributions supported
If you have the required knowledge, you should be able to get this to run on any distribution available. However, there
are a few things to consider:
* The game is a 32-bit binary, you need to be able to run 32-bit binaries
* Naturally, the game requires 32-bit versions of the libraries it depends on
* The game is built with glibc. You might have a hard time on distributions not shipping with them by default, e.g.
Alpine Linux
* Kernel-wise, the latest kernels and everything that's not pre 2.6 should work. Due to various hook sub-modules, many
quirks in different games have been fixed to run all games on the latest upstream kernel versions of Linux.
Recommendation: Use a 64-bit Linux distribution of your choice. You can also use a 32-bit distribution as this is the
arch these games were built for but it does not come with any benefits. Prepare yourself to upgrade to 64-bit once any
of the newer games (finally) moves to that target architecture.
## Dependencies
Each game and hook comes with a list of dependencies you might have to install. This depends on which type of dependency
resolution you pick.
When running this on a 64-bit Ubuntu, all packages must be installed as lib32 packages! When you are on Debian/Ubuntu
(based) distros and you are using apt, you have to enable multiarch support first:
```shell script
sudo dpkg --add-architecture i386
apt update
```
Then, install the 32-bit packages like this where `<pkgname>` must be replaced accordingly:
```shell script
apt install pkgname:i386
```
Note: The `:386` postfix does not apply to packages like `gccmultilib` as this already covers the i386 part.
## GPU drivers
For `libGL`, you need to install a GPU driver and have hardware acceleration enabled. The `libGL` library provided also
needs to be 32-bit compatible.
To check if everything's installed and HW acceleration is working, just run `glxgears`. If that doesn't error and you
see the rendered gears spinning, you should be fine.
## Sound drivers
Naturally, you also have to have sound stuff installed. Having alsa with its libraries available is sufficient. Pulse
and similar audio systems are not required, e.g. when running on a cabinet.
+108
View File
@@ -0,0 +1,108 @@
# Notable features
* Runs on recent kernel versions thanks to various fixes
* Runs on 32-bit and 64-bit distros (64-bit distros require additional 32-bit libs to be installed)
* Full dongle emulation
* Remove HDD checks to run this on "non legit" drives
* Full MK6IO emulation with API hook: Keyboard or your own custom IO
* Real IO passthrough (for MK6 usb io)
# Versions supported
All known versions supported.
# Data setup
You are expected to get a clean set of data from a prestine drive. Ensure that
the game version matches one of the supported versions listed.
You need two main folders:
* data
* settings
## Data folder
Contents of the folder:
* game: The binaries of the custom "AMFS". File names must be lower case.
* lib: Put any libraries (especially older versions of libraries that can't be
installed anymore using the package manager) the game uses and aren't installed
on your system in here.
* piu: The piu executable
## Settings folder
The contents of the folder are auto generated if the files don't exist.
Otherwise, this folder contains:
* PIUPRIME.INI
* RANK.DATA
## Executable dependencies
All dependencies must be compiled as 32-bit binaries. Here is a list of
dependencies (with versions) required to run the game:
* libGL.so.1
* libGLU.so.1
* libasound.so.2
* libcurl.so.4
* libsodium.so.13
* libusb-0.1.so.4
* libmad.so.0
* libmpeg2.so.0
* libmpeg2convert.so.0
* libftgl.so.2
* libstdc++.so.6
* libgcc_s.so.1
* libc.so.6
* libm.so.6
* libXext.so.6
* libX11.so.6
* libpthread.so.0
* libdl.so.2
* librt.so.1
* libnvidia-tls.so.340.96
* libnvidia-glcore.so.340.96
* libidn.so.11
* libssh2.so.1
* libssl.so.1.0.0
* libcrypto.so.1.0.0
* libgssapi_krb5.so.2
* libkrb5.so.3
* libk5crypto.so.3
* libcom_err.so.2
* libz.so.1
* libusb-1.0.so.0
* libfreetype.so.6
* libxcb.so.1
* libkrb5support.so.0
* libkeyutils.so.1
* libresolv.so.2
* libudev.so.1
* libbz2.so.1.0
* libpng16.so.16
* libharfbuzz.so.0
* libXau.so.6
* libXdmcp.so.6
* libcap.so.2
* libglib-2.0.so.0
* libgraphite2.so.3
* libpcre.so.1
# Hook module configuration file
Checkout the usage information of the hook and set the option values according
to your needs. Here is an example option configuration file:
```
log_file_path=/tmp/pumptools.log
log_level=3
enable_file_monitor=0
enable_io_monitor=0
piuio_emu_lib_path=/pumptools/lib/piuio-emu.so
piuio_exit_test_service=1
game_settings_path=/save/pri
sound_device=hw:0
keyboard_dev=/dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-mouse
halt_on_segv=0
```
# Run the game
Ensure you are running an X screen. Otherwise, you have to start one along with the game. Various library/system-calls
require root privileges. Make sure to run the game as root or with sudo (otherwise you get various sorts of errors,
typically permission denied). Use the included *run.sh* file to start the game on a desktop environment.
# Further notes
## Vsync
The game is required to run with vsync on.
+91
View File
@@ -0,0 +1,91 @@
# Notable features
* Runs on recent kernel versions
* Runs on 32-bit and 64-bit distros (64-bit distros require additional 32-bit libs to be installed)
* Dongle stuff must be patched out
* You need decrypted data zips to run this
* Full MK6IO emulation with API hook: Keyboard or your own custom IO
* Full PIUBTN emulation with API hook: Keyboard or your own custom IO
* Real IO passthrough (for MK6 usb io and PIUBTN)
# Versions supported
Currently, only the latest revision is supported (I think that's R5?)
# Data setup
A clean set of data won't work here. Glenn protected the data with his own life
(pretty much) and made it as obnoxious as possible to unpack it. So good luck
getting the original data out of a drive image (if you didn't get it already
from somewhere).
All access to files and folders are detoured to two folders which makes setting
up everything easier.
You need one main folder:
* game/pro2 (contains all the game data, stepmania layout)
## Executable dependencies
All dependencies must be compiled as 32-bit binaries. Here is a list of
dependencies (with versions) required to run the game:
* libXtst.so.6
* libXrandr.so.2
* libGL.so.1
* libGLU.so.1
* libdl.so.2
* libavformat.so.51
* libavcodec.so.51
* libavutil.so.49
* libusb-0.1.so.4
* libpthread.so.0
* librt.so.1
* libstdc++.so.5
* libm.so.6
* libgcc_s.so.1
* libc.so.6
* libX11.so.6
* libXext.so.6
* libXi.so.6
* libXrender.so.1
* libnvidia-tls.so.340.106
* libnvidia-glcore.so.340.106
* libstdc++.so.6
* libxcb.so.1
* libXau.so.6
* libXdmcp.so.6
# Hook module configuration file
Checkout the usage information of the hook and set the option values according
to your needs. Here is an example option configuration file:
```
log_file_path=./pumptools.log
log_level=3
enable_file_monitor=0
enable_io_monitor=0
piubtn_emu_lib_path=
piubtn_real_passthrough=1
piuio_emu_lib_path=./piuio.so
piuio_real_passthrough=1
piuio_exit_test_service=1
game_data_path=./game
```
# Run the game
Ensure you are running an X screen. Run the game using
Ensure you are running an X screen. Otherwise, you have to start one along with the game. Various library/system-calls
require root privileges. Make sure to run the game as root or with sudo (otherwise you get various sorts of errors,
typically permission denied). Use the included *run.sh* file to start the game on a desktop environment.
# Further notes
## ITG2 PIUIO kernel module hack
If you don't have the original kernel module installed and you are running a
real PIUIO, you have to hook the *piuio.so* lib which implements the piuio api.
The "emulation" part which simply calls back to a real piuio driver takes
care of handling the kernel hack path then. If you run on a real IO without
hooking that module, you won't get an inputs or outputs.
## The game is crashing very early
This is probably due to not having the right IO hardware connected/emulated.
The game doesn't have any proper error handling if either the PIUIO or the
button IO is missing/not connected (or not emulated).
## Vsync
The game is required to run with vsync on.
+107
View File
@@ -0,0 +1,107 @@
# prohook: Pro (1)
This readme covers any matters that are relevant for this hook, only. Anything that applies to **all** hooks is covered
in a [main hook readme file](../hook.md) including general data setup and a quick start guide.
## Versions supported
All known versions supported if no-dongle patched at this time.
## Dependencies
Make sure to read the different methods of dependency resolution available in the [main hook readme file](../hook.md),
first.
The following **direct** dependencies (cmd: `readelf -d piu`) are required:
* libXtst.so.6
* libXrandr.so.2
* libGL.so.1
* libGLU.so.1
* libdl.so.2
* libavformat.so.51
* libavcodec.so.51
* libavutil.so.49
* libusb-0.1.so.4
* libpthread.so.0
* librt.so.1
* libstdc++.so.5
* libm.so.6
* libgcc_s.so.1
* libc.so.6
* libX11.so.6
As for method 1, when using Ubuntu, the dependencies can be found in the following packages:
* libc-bin (or gcc-multilib on a 64-bit platform)
* libx11-6
* libusb-0.1-4
* libasound2
## Data setup
A clean set of data won't work here. You need the decrypted data zip files and a patched executable that uses plain zip
files instead of encrypted ones.
All access to files and folders are detoured to two folders which makes setting up everything easier.
You need two main folders:
* `game` folder with the following contents
* All data zip files (e.g. `data0.zip`, `data1.zip`, ..., `encore.zip`)
* An empty file `FX` (if you run this on a FX or other cabinet with a widescreen monitor)
* `save ` folder. Contents are generated automatically if empty.
## USB thumb drive/profile support
Without any patches, the game's way of handling USB thumb drives is incompatible to the kernels of the last years.
This is fixed by prohook but requires some additional configuration effort.
1. Decide which physical USB ports of your machine you are going to use for the player 1 and player 2 sides.
1. Plug in *one* USB thumb drive into the player 1 port. Now you have to figure out two things:
1. The device node the drive got assigned to by the kernel, e.g. `sdb`. For example, use the command `fdisk` or
`lsblk` for this and take a note.
1. The USB bus and port number the thumb drive is plugged into. `ls -la /sys/block` shows you all currently
available block devices, including USB thumb drives. Find the thumb drive you plugged into the physical port and
check the path the symlink gets resolved to. For example:
`sdc -> ../devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1:1.0/host7/target7:0:0/7:0:0:0/block/sdd`
You can identify the bus and port by taking a look at the part after the `usb2` directory here: `2-2`. The format
is `bus-port` which means that in this example the drive is plugged into port 1 of bus 2. Take a note of that.
1. Repeat the previous step for the physical port you consider using for player 2.
1. Create two folders that will serve as mount points for the two player sides in the `/mnt` directory, e.g.
`mkdir /mnt/0 && mkdir /mnt/1` (or re-using these folders if they already exist from other piu games).
1. Add the following entry to the `/etc/fstab` file on the machine you want to run the game on:
```text
/dev/sdb1 /mnt/0 auto noauto,owner 0 0
/dev/sdc1 /mnt/1 auto noauto,owner 0 0
```
Note: This does not create a fixed assignment of `/dev/sdb1` or `/dev/sdc1` to a specific physical USB port. It just
ensures that any block device that gets enumerated as `/dev/sdb` will get its first partition mounted to `/mnt/0`
(same concept applies to `/dev/sdc1/`).
1. Modify the `hook.conf` file used with `prohook.so` by inserting the device nodes and bus-port combinations into the
respective fields, for example:
```text
patch.usb_profile.p1.bus_port=2-1
patch.usb_profile.p2.bus_port=2-2
# Note: No partitions, e.g. sdb1, here
patch.usb_profile.dev_nodes=sdb,sdc
```
Once you plug-in a USB thumb drive to the configured ports, it should show up on the correct player side.
## Troubleshooting and FAQ
Make sure to also check the
[troubleshooting and FAQ section of the main hook readme](../hook.md#troubleshooting-and-faq). This covers various
things that apply to **all** hooks. The following sub-sections apply mainly to this hook.
## Enable log output from the game
If you run into any issues, consider enabling the game's log output to console which might help you figuring out
what's going on. This can be done by editing the `data.Static.ini` file in the `data0.zip` file. Go to the section
`[Options-arcade]` and change the property `ShowLogOutput=0` to `ShowLogOutput=1`.
## Switch screen aspect ratio: 4:3 and 16:9
The game supports 4:3 and 16:9 aspect ratios. To enable 16:9 mode, ensure that an empty file called `FX` is placed
next to the data zip files inside the `game` directory. For 4:3 mode, simply delete the `FX` file if it exists.
## ITG2 PIUIO kernel module hack
If you don't have the original kernel module installed and you are running a real PIUIO, you have to hook the
`ptapi-io-piuio-real.so` lib which implements the piuio api. The "emulation" part which simply calls back to a real
piuio driver takes care of handling the kernel hack path then. If you run on a real IO without hooking that module,
you won't get any inputs or outputs.
## The game is crashing very early
The log might show something about "ptrace failing" and not being able to "load libformat". However, the actual problem
is probably not having all the necessary IO hardware connected (or emulation enabled). The game doesn't have any proper
error handling if either the PIUIO or the button IO is missing/not connected (or not emulated).
+60
View File
@@ -0,0 +1,60 @@
# x2hook: Exceed 2
This readme covers any matters that are relevant for this hook, only. Anything that applies to **all** hooks is covered
in a [main hook readme file](../hook.md) including general data setup and a quick start guide.
## Versions supported
* 102
Any other version won't work, period. The hook has to memory patch a weird bug causing the sound thread to crash.
## Dependencies
Make sure to read the different methods of dependency resolution available in the [main hook readme file](../hook.md),
first.
The following **direct** dependencies (cmd: `readelf -d piu`) are required:
* libGL.so.1
* libGLU.so.1
* libpthread.so.0
* libmad.so.0
* libasound.so.2
* libz.so.1
* libpng12.so.0
* libmpeg2.so.0
* libmpeg2convert.so.0
* libusb-0.1.so.4
* liblua50.so.5.0
* liblualib50.so.5.0
* libgcc_s.so.1
* libc.so.6
* libm.so.6
* libX11.so.6
* libstdc++.so.5
As for method 1, when using Ubuntu, the dependencies can be found in the following packages:
* libc-bin (or gcc-multilib on a 64-bit platform)
* libx11-6
* zlib1g
* libusb-0.1-4
* libasound2
## Data setup
In additional to the [general information applying to **all** hooks](../hook.md#data-setup), this game requires all
files and folders in the `game` folder to be in **UPPERCASE** on a case-sensitive file system.
## Troubleshooting and FAQ
Make sure to also check the
[troubleshooting and FAQ section of the main hook readme](../hook.md#troubleshooting-and-faq). This covers various
things that apply to **all** hooks. The following sub-sections apply mainly to this hook.
### Fully unlock the game
This hook has an option to fully unlock the game (well, unlock Canon-D Full Mix without entering the code because that's
the only permanent unlock) by setting the following property in the configuration file:
```text
game.force_unlock=1
```
### Using the unlock option to unlock Canon-D full remix does not work when enabled
When the game cannot read from an existing `PIUEXCEED.INI` file, the settings are created in-memory and written to disk.
Therefore, the unlock mechanism of the hook cannot apply this to the contents in-memory but only when the
`PIUEXCEED.INI` file is re-loaded. To achieve this, once you started the game to create a new `PIUEXCEED.INI` with
default values, simply quit the game and restart.
+50
View File
@@ -0,0 +1,50 @@
# zerohook: Zero
This readme covers any matters that are relevant for this hook, only. Anything that applies to **all** hooks is covered
in a [main hook readme file](../hook.md) including general data setup and a quick start guide.
## Versions supported
All known versions supported.
## Dependencies
Make sure to read the different methods of dependency resolution available in the [main hook readme file](../hook.md),
first.
The following **direct** dependencies (cmd: `readelf -d piu`) are required:
* libGL.so.1
* libGLU.so.1
* libpthread.so.0
* libasound.so.2
* libz.so.1
* libpng12.so.0
* libusb-0.1.so.4
* liblua50.so.5.0
* liblualib50.so.5.0
* libgcc_s.so.1
* libc.so.6
* libm.so.6
* libX11.so.6
* libstdc++.so.5
As for method 1, when using Ubuntu, the dependencies can be found in the following packages:
* libc-bin (or gcc-multilib on a 64-bit platform)
* libx11-6
* zlib1g
* libusb-0.1-4
* libasound2
## Data setup
In additional to the [general information applying to **all** hooks](../hook.md#data-setup), this game requires all
files and folders in the `game` folder to be in **UPPERCASE** on a case-sensitive file system.
## Troubleshooting and FAQ
Make sure to also check the
[troubleshooting and FAQ section of the main hook readme](../hook.md#troubleshooting-and-faq). This covers various
things that apply to **all** hooks. The following sub-sections apply mainly to this hook.
### Fully unlock the game
This hook has an option to fully unlock the game by setting the following property in the configuration file:
```text
game.force_unlock=1
```
This will unlock all missions on mission station as well as any locked songs and stepcharts.