# Digimon World 2003: native PC port
The PlayStation game (Europe, SLES-03936) running natively on Windows, built from the
[dw3_decomp](https://github.com/ReGame-Labs/dw3_decomp) C code. It is not an emulator: the game's own code runs as a
PC program, with the console's hardware rewritten around it. It is free; donations are optional.
**Bring your own disc.** None of the game's content ships with the port: no graphics, sound, text or data tables. The
exe holds the game's logic as the decompiled C describes it, compiled anew; everything else comes from your own copy
of the game, read into a disc image.
## A native port, not a recompilation
There are two good ways to bring a PlayStation game to the PC, and both take a lot of work:
- **A static recompilation** translates the game's original MIPS machine code into C, instruction by instruction, and
runs it next to an emulation of the console's hardware (GPU, sound chip, CD drive). It needs no understanding of
the code, so it reaches the whole game quickly and plays it 1:1 from the start. It is the faster, safer road, and
the projects that take it do real, valuable work.
- **A native port**, this one, starts from a *decompilation*: the game rewritten as readable, named C
([dw3_decomp](https://github.com/ReGame-Labs/dw3_decomp), someone else's work, without which this port wouldn't
exist). That C is compiled by a modern compiler, and the console's hardware isn't emulated: the drawing,
sound, files, pad and memory card are rewritten for the PC (OpenGL, SDL).
What the second road gives:
- **The game can be changed as source code**, not only as patched bytes: tables can grow, fields can be added (the
[field editor](https://github.com/Feerdus95/dw3-field-editor) makes new ones), and fixes are written in C.
- **Files by name, of any size.** The game reads `data/files/NNNN.bin`, not sectors of a disc, so a mod's file can be
bigger than the original.
- **Drawing made for the PC.** The 3D is drawn at up to 8 times the resolution with its exact points, and the battle
models through a depth buffer, instead of the console's pixels scaled up.
- **Room to grow.** Nothing in it is tied to the MIPS processor, so other systems are within reach, and nothing of the
game's content is in the exe.
The price is that every difference from the console has to be found and fixed by hand, which is why the port is
tested by playing it through.
## Requirements
- Windows 10 or 11.
- A graphics card with OpenGL 3.3 (any from the last decade).
- About 900 MB free: the game read from your disc goes next to the port.
- Your disc of *Digimon World 2003 (Europe) (En,Fr,De,Es,It)*, as an image. A `.cue`/`.bin` pair is best; an `.iso`
may cause issues (a plain 2048-byte one loses the movies' sound).
### The disc it was tested with
| | |
|---|---|
| Title | Digimon World 2003 (Europe) (En,Fr,De,Es,It) |
| Serial | SLES-03936 |
| Track | 1 data track, MODE2/2352 |
| `.bin` size | 692,146,560 bytes |
| `.bin` CRC32 | `007df18e` |
| `.bin` MD5 | `da76a5685b875c353343102b7587fded` |
| `.bin` SHA-1 | `457cb233349ba841e03b33d8060f8fbcadd45cb3` |
| `SLES_039.36` CRC32 | `3334ed7a` |
| `SLES_039.36` SHA-1 | `d1b7e4d646e3a9c2b88fdb25d20b5f7116bbb06d` |
The port checks the game's executable inside the image (`SLES_039.36`), not the image itself: another good dump of
the same disc works even if its `.bin` hashes differ. The American (*Digimon World 3*) and Japanese versions are
different games for the port and are refused.
## Setup
1. Unzip the port anywhere you can write (a folder of your own, not `Program Files`).
2. Run `dw3launcher.exe` (or `dw2003.exe`, which opens it while there's no data). The first time, it asks for your disc
image: drop the `.cue` (or `.bin`) on it, or click **Browse...**. It checks the version and reads the disc into
`data/` next to the game, in a few seconds. It speaks English, Spanish, French, German and Italian (top right; it
starts in your system's language).
3. From then on, the launcher's **Play** starts the game, and `dw2003.exe` starts it straight away. The image isn't
needed any more.
The launcher's top bar has **Play** (with your team and the last save, read from the memory card), **Settings** (the
options below, before you start, with the controls' keys and buttons and a description of each mod), **Saves** (see
below), a notice when a newer port is out, and **Tools**: the
[model viewer](https://github.com/Feerdus95/dw3-model-viewer) and the
[field editor](https://github.com/Feerdus95/dw3-field-editor), downloaded from GitHub on request into a folder of their
own next to the port, set up to read `data/`, and opened from there. A viewer or editor already beside the port is used
instead of downloading. If `data/` was read by an older version, the viewer asks for the disc image once, for the
file names (`data/names.txt`).
The port's folder then holds:
| | |
|---|---|
| `dw2003.exe`, `SDL3.dll` | the port |
| `dw3launcher.exe`, `launcher.ini`, `launcher.log` | the launcher, its language and what it reports |
| `dw2003.fill` | where the game's own tables are in `data/`: the exe reads them from there at startup. Keep it next to the exe |
| `data/` | the game read from your disc. Yours: don't share it |
| `saves/card1.mcd` | your memory card |
| `saves/backups/` | the cards the launcher kept before an import or a restore |
| `native.ini` | your options, written by the options menu |
Saves go to `saves/card1.mcd`, a standard memory card image, created formatted on the first run. The launcher's **Saves**
page shows what each of the card's slots holds, and can **Export** the card (a backup, or to play on another computer),
**Import** one (a PlayStation or emulator `.mcd`: DuckStation, ePSXe...) and **Restore last copy**; every import or
restore first keeps the card you had in `saves/backups/`.
**Extra Digimon and your saves.** The game's slots stay as the original game writes them, so a card from the port loads
in the original game or an emulator. The Digimon the port adds beyond the game's 44 (BladeGarurumon, Flamedramon...) are
kept in a separate area of the card file, tied to the save they were made with, so the original game doesn't see them.
If a slot is saved again by the original game, an emulator or another card, those Digimon are left out of it (the
launcher marks it) and the port keeps a copy as `saves/card1.pre-stale.mcd` before its next save. Older versions of the port
don't see them either: copy your `saves/` folder before updating.
## Controls
| Keyboard | PlayStation |
|---|---|
| Arrows | D-pad |
| Z / Space | Cross |
| X | Circle |
| A | Square |
| S | Triangle |
| Q / W | L1 / R1 |
| E / R | L2 / R2 |
| Enter | Start |
| Backspace | Select |
| F11 or Alt+Enter | Fullscreen |
| F10 | Performance meter in fights (`perf = 1` starts it on); writes `perf/battle_