# VPW Studio – Appendix B: Program Formats

Return to Manual

## Introduction

This appendix explains file formats that originate from VPW Studio.

### Notes

- As VPW Studio is still under development, changes to these formats are likely to happen.
- The source code possibly has more accurate and up-to-date information.

## Table of Contents

1. VPW Studio Palette Format
2. LocationFile Format
3. FileTableDB Format
4. Stable Definition Format
5. Wrestler Definition Format
6. Project File Format

## VPW Studio Palette Format

The VPW Studio Palette format (henceforth "VPWSPal", based on its file extension: `.vpwspal`) is a modification of the text-based JASC Paint Shop Pro palette format. This format was created to handle transparency and "sub-palettes" in a relatively simple manner.

The first line of the file must be `VPWStudio-PAL`. This is what identifies the palette as VPWSPal format, in comparison to the JASC format.

Below that is a four digit number. The first two digits must be `01`, but the two digits after that determine how many sub-palettes are defined. This is currently only used for 16-color palette files. For 256-color palette files, set the last two digits to `00`.

The third line represents the number of colors in the palette, and must be `16` (targeting `Ci4Palette`) or `256` (targeting `Ci8Palette`). Ignore the number of entries added by the existence of sub-palettes.

All remaining lines define the colors in the palette. The order is: `red green blue alpha`

Where `red`, `green`, and `blue` have values between `0` and `255` (inclusive). `alpha` must either be `0` (representing transparent) or `255` (representing opaque).

All colors will be converted from 8 bits (`0`-`255`) to 5 bits (`0`-`31`), for hardware compatibility purposes. It is recommended to use multiples of 8 when choosing palette colors during the design phase.

If the VPWSPal file contains any sub-palettes, their palette entries continue after the first set of colors.

### Example Files

16 colors, no sub-palettes:

    VPWStudio-PAL
    0100
    16
    0 0 0 0
    16 16 16 255
    66 57 66 255
    111 65 61 255
    99 90 99 255
    144 57 78 255
    144 83 32 255
    150 86 75 255
    193 118 85 255
    206 148 123 255
    210 168 71 255
    255 248 96 255
    0 0 0 255
    0 0 0 255
    0 0 0 255
    0 0 0 255

### Comparison between JASC PSP Palette and VPWSPal

In case you'd prefer to see the differences visually, here are some side-by-side comparisons of JASC Paint Shop Pro palette format and the VPW Studio palette format.

16 colors, no sub-palettes
JASC PSP | VPW Studio Palette
--- | ---
    JASC-PAL
    0100
    16
    0 0 0
    16 16 16
    66 57 66
    111 65 61
    99 90 99
    144 57 78
    144 83 32
    150 86 75
    193 118 85
    206 148 123
    210 168 71
    255 248 96
    0 0 0
    0 0 0
    0 0 0
    0 0 0
    VPWStudio-PAL
    0100
    16
    0 0 0 0
    16 16 16 255
    66 57 66 255
    111 65 61 255
    99 90 99 255
    144 57 78 255
    144 83 32 255
    150 86 75 255
    193 118 85 255
    206 148 123 255
    210 168 71 255
    255 248 96 255
    0 0 0 255
    0 0 0 255
    0 0 0 255
    0 0 0 255

## LocationFile Format

The LocationFile format is a plain text database defining locations in ROM and RAM to be used by VPW Studio. Each non-comment line consists of a entry in the LocationFile.

Lines starting with the `#` character are comments, and will be ignored by the LocationFile loader.

### Breakdown

`LocationType:Location,Size;Comment`

### LocationType

Location type can be one of three values:

- `ROM`, representing a ROM location (Z64 format assumed).
- `RAM`, representing a RAM location.
- `FTID`, representing a File Table ID.

### Location

The location for this entry, specified in hex. If this is a RAM entry, it must begin with `80`. Do not use `81` if you are converting a GameShark code to a LocationFile entry; the size is handled in the next section.

For File Table ID entries, this is a four digit hex number representing an index into the File Table.

### Size

The size of this entry, in decimal. For a normal entry, this is how many bytes to read/write.

When handling a Code Change entry (see below), the Size value represents the number of bytes between the first and second change.

In some games, the `$WRESTLERDEFS` size is set to 1. This is often the case when the wrestler definitions are a list of pointers. VPW Studio manually handles the "list of pointers" case in the code (which is admittedly not the best option).

All `FTID` entry types have this value set to 1. It is currently ignored by the program.

### Comment

The comment section is typically used to provide a note about the location, but comments starting with special characters have different meanings.

Special characters currently handled:

- `$` – Data Location: Specific locations VPW Studio looks for to handle ROM reads/writes.
- `%` – Code Change: Locations used for modifying game code.

Special location strings are mapped in the program, so you can't make things up and expect VPW Studio to understand them. The current list of handled special location strings:

Data Locations

- `$FILETABLE` – Location of the FileTable in ROM.
- `$FIRSTFILE` – Location of the first file described by the FileTable in ROM. (Size field does not matter.)
- `$WRESTLERDEFS` – Location of Wrestler Definitions.
- `$STABLEDEFS` – Location of Stable Definitions.
- `$BODYTYPEDEFS` – Location of Body Type Definitions. (World Tour, VPW64, Revenge)
- `$COSTUMEDEFS` – Location of Costume Definitions. (World Tour, Revenge)
- `$HEADDEFS` – Location of Head/Mask Definitions. (World Tour, VPW64, Revenge)
- `$CHAMPIONSHIPDEFS` – Location of Championship Definitions (World Tour, VPW64, Revenge)

VPW64 Costume Definitions

- `$VPW64COSTUMES_SMALL` – Location of costumes for the "Small" body type.
- `$VPW64COSTUMES_MED` – Location of costumes for the "Medium" body type.
- `$VPW64COSTUMES_LARGE` – Location of costumes for the "Large" body type.
- `$VPW64COSTUMES_SALADIN` – Location of costumes for Saladin/Abdullah the Butcher.
- `$VPW64COSTUMES_BABA` – Location of costumes for Giant Baba.
- `$VPW64COSTUMES_JUDOKA` – Location of costumes for the Judoka body type.
- `$VPW64COSTUMES_FEMALE` – Location of costumes for BlackWidow/Pretty Tomoko/Manami Toyota.
- `$VPW64COSTUMES_UNUSED` – Location of costumes for an unused(?) body type.

Introduction Sequence Locations

WCW/nWo Revenge and later only. Ending sequences use the same formats, but are not yet handled.

- `$INTRODEFS_LATER_ANIMS` – Location of introduction sequence animation definitions.
- `$INTRODEFS_LATER_IMAGES` – Location of introduction sequence image definitions.
- `$INTRODEFS_LATER_SEQUENCE` – Location of sequence data for introduction sequence.

Facial Hair, Facepaint, and Face Accessories

"Might be shared between WM2K, VPW2, No Mercy"

- `$DEFAULTFACE_FACIALHAIR_VERTDISPLACEMENT` – Location of per-face table for facial hair vertical displacement.
- `$DEFAULTFACE_PAINTACCESSORIES_VERTDISPLACEMENT` – Location of per-face table for facepaint and accessory vertical displacement.
- `$FACIALHAIR_VERTDISPLACEMENT` – Location of per-facial hair item vertical displacement.
- `$FACEPAINT_VERTDISPLACEMENT` – Location of per-facepaint item vertical displacement.
- `$FACEPAINT_TYPE` – Location of per-facepaint item type/display flags.
- `$FACEACCESSORIES_VERTDISPLACEMENT` – Location of per-face accessory item vertical displacement.
- `$FACEACCESSORIES_TYPE` – Location of per-face accessory item type/display flags.

WrestleMania 2000 and VPW2 Story Mode

- `$STORY_MODE_SINGLES_PARTICIPANTS` – Location of story mode singles participants.
- `$STORY_MODE_SINGLE_GROUPS` – Location of story mode singles groupings.
- `$STORY_MODE_TEAMS` – Location of story mode tag teams.
- `$STORY_MODE_TEAM_GROUPS` – Location of story mode tag team groupings.
- `$STORY_MODE_SCHEDULE` – Location of story mode schedule data.
- `$STORY_MODE_BOOKING_INSTRUCTIONS` – Location of story mode booking instructions.
- `$DEFAULT_CHAMPIONS` – Location of default champions.

Moveset and Parameters Bit Packing/Unpacking

- `$BITPACKING_MAINTABLE` – ROM location of "menu item to number of bits" table.
- `$BITPACKING_MOVEGROUP_WRESTLING` – ROM location of wrestling moveset move groups.
- `$BITPACKING_MOVEGROUP_COMBO` – ROM location of combo moveset move groups.
- `$BITPACKING_MOVEGROUP_SHOOT` – ROM location of shootfighting moveset move groups.

Currently Ungrouped

- `$DEFAULT_RULESETS` – Default ruleset data (at least in VPW2 and No Mercy; might be in other games)
- `$ATTRACT_MODE_DEMO_MATCHES` – Location of Demo Match data (VPW2 and No Mercy only; both use slightly different formats)
- `$MASTER_MOVE_MODS` – "Master Move Mods" values

Code Changes

- `%SETUPFT_FTSIZE1` – Location of the first filetable size value in the game's `SetupFiletable` routine.
- `%SETUPFT_FTLOCATION` –
- `%SETUPFT_FTSIZE2` – Location of the second filetable size value in the game's `SetupFiletable` routine.
- `%SETUPFT_FTSIZE2_MINUS1` –
- `%SETUPFT_FTBEGINS` – Location of the beginning address of the file table in the game's `SetupFiletable` routine.
- `%SETUPFT_MAXFILES_MINUS1` – Location of "maximum file count minus 1" in the game's `SetupFiletable` routine.
- `%GETFILELOC_MAXFILES` – Location of the maximum file count in the game's "Get File Location" routine.
- `%GETFILELOC_FTBEGINS` – Location of the beginning address of the file table in the game's "Get File Location" routine.
- `%LOADFILE_MAXFILES` – Location of the maximum file count in the game's `LoadFile` routine.
- `%LOADFILE_FTBEGINS` – Location of the beginning address of the file table in the game's `LoadFile` routine.

## FileTableDB Format

The FileTableDB format is a plain text database mapping File IDs to types and notes.

Lines starting with the `#` character are comments, and will be ignored by the FileTableDB loader.

### Breakdown

`FileID=Type;Notes|Settings`

### FileID

The ID file for this entry. Entries are in hex and should have 4 digits. Entries start from 0001, as 0000 is used as a "no file" index.

### Type

(This is the challenging part.)

Currently supported values:

- `Binary` – Default file type.
- `AkiAnimation` – Animation data.
- `AkiArchive` – An archive of files. Zoinkity's Midwaydec uses "`TEXarchive`" for this format, but not all archives exclusively contain TEX files.
- `AkiModel` – Model data.
- `AkiTexture` – AKI texture wrapper (a.k.a. "TEX")
- `AkiText` – AKI text archive.
- `AkiLargeFont` – Large font data (24px wide)
- `AkiSmallFont` – Small font data (16px wide)
- `AkiFontChars` – Font Characters (typically Shift-JIS)
- `MenuBackground` – Menu Background (use on first file in sequence only)
- `Ci4Palette` – CI4 palette (16 colors * 2 bytes)
- `Ci8Palette` – CI8 palette (256 colors * 2 bytes)
- `I4Texture` – I4 texture (4BPP)
- `Ci4Texture` – CI4 texture (4BPP)
- `Ci8Texture` – CI8 texture (8BPP)
- `RawCi4TexPal` – Raw CI4 texture and palette data (4BPP)
- `RawCi8Texture` – Raw CI8 texture using external palette (8BPP)
- `OneBppTexture` – Headered 1BPP data texture data
- `DoubleTex` – WCW/nWo Revenge credits faces (two TEX files, one after another)
- `MenuBackground` – Used for the first file of a multi-part background image.
- `Ci4Background` – Raw CI4 image used for some backgrounds in WWF No Mercy.
- `MenuItems_NoGroup` – WWF No Mercy-specific menu item text (no groups).
- `MenuItems_Shop` – WWF No Mercy-specific menu item text (Smackdown Mall Shop items).

### Notes

A note displayed in the FileTable dialog. If you are not adding any Settings to this item, you do not need to do anything special, aside from avoiding the "`|`" character in your description.

### Settings

Settings (also known as "ExtraData") are optional, but are recommended for some file types. The beginning of the Settings string is denoted by a "`|`" at the end of the Note.

Currently supported values:

- `w:` (number) – Image width
- `h:` (number) – Image height
- `p:` (hex number) – Intended Palette File ID
- `mh:` (`true` or `false`) – Horizontally mirror image
- `mv:` (`true` or `false`) – Vertically mirror image

Currently unsupported values:

- `t:` (number) – Transparent color index (not implemented)

## Stable Definition Format

The Stable Definition file is a text file following a specific pattern. Each game in the series defines Stable data differently, requiring the creation of an intermediate format.

Generally, the format consists of:

- Game identifier on the first line.
- One line per stable, defining all necessary data.

The stable number is decimal. Most other values are hexadecimal, with the exception of "Number of Championships" for World Tour and VPW64, which is decimal.
"Max Wrestlers in Stable" assumes that the wrestler select screen(s) have not been hacked to display more wrestlers.

### WCW vs. nWo World Tour

- Game Identifier – `WorldTour`
- Max Wrestlers in Stable – 16 (theoretically, based on wrestler select screen layout)

Stable Number@Wrestler pointer list location={wrestler pointers},Championship text pointer,Number of Championships

Example stable definition: `0@80037068={80036444,80036498,800364EC,80036558,800365C8,80036624,80036688,800366E8,8003674C,800367B4,80036818,80036878,800368E8},80037278,3`

### Virtual Pro-Wrestling 64

- Game Identifier – `VPW64`
- Max Wrestlers in Stable – 16

Stable Number@Wrestler pointer list location={wrestler pointers},Championship text pointer,Number of Championships

Example stable definition: `0@80048920={80047298,800473A4,8004828C,80048308,8004742C,800474B4,80048380,80048410,80048494,80048520,80048070,80045B2C},80048C8C,1`

### WCW/nWo Revenge

- Game Identifier – `Revenge`
- Max Wrestlers in Stable – 9

Stable Number@Wrestler pointer list location={wrestler pointers},Stable graphic File ID

Example stable definition: `0@8003A1EC={80039390,80038EBC,800395E4,8003945C,800395A4,8003949C,80039628,800394E4,80039524},00BE`

### WWF WrestleMania 2000

- Game Identifier – `WM2K`
- Max Wrestlers in Stable – 8

Stable Number@Wrestler ID2 list pointer={wrestlers},Stable Name pointer

Example stable definition: `0@8004115C={01,02,07,11,06,17,10,00},8004AC20`

### Virtual Pro-Wrestling 2

- Game Identifier – `VPW2`
- Max Wrestlers in Stable – 8

Stable Number@Wrestler ID2 list pointer={wrestlers},Stable Name text index

Example stable definition: `0@8003FA0C={01,02,03,04,05,06,07,00},00E6`

### WWF No Mercy

- Game Identifier – `NoMercy`
- Max Wrestlers in Stable – 9

Stable Number@Wrestler ID2 list pointer={wrestlers},Stable Name text index

Example stable definition: `0@80047150={01,0A,02,03,04,06,12,13,0E},0126`

## Wrestler Definition Format

The Wrestler Definition file is a text file that stores game-specific information about wrestler definitions. If this sounds similar to the Stable Definition format, that's because it is. Much like stables, each game stores wrestler data differently.

The format consists of:

- Game identifier on the first line.
- One line per wrestler, defining all necessary data.

All values are hexadecimal.

### WCW vs. nWo World Tour

Game Identifier – `WorldTour`

Wrestler ID4/Wrestler ID2=unknown1,flags1,unknown2,namePointer,profilePointer,heightPointer,weightPointer

(todo)

- namePointer – Pointer to wrestler's name. (4 bytes)
- profilePointer – Pointer to wrestler's profile string. (4 bytes)
- heightPointer – Pointer to wrestler's height string. (4 bytes)
- weightPointer – Pointer to wrestler's weight string. (4 bytes)

### Virtual Pro-Wrestling 64

Game Identifier – `VPW64`

Wrestler ID4/Wrestler ID2=unknown1,flags1,unknown2,namePointer,profilePointer,heightPointer,weightPointer

(todo)

- namePointer – Pointer to wrestler's name. (4 bytes)
- profilePointer – Pointer to wrestler's profile string. (4 bytes)
- heightPointer – Pointer to wrestler's height string. (4 bytes)
- weightPointer – Pointer to wrestler's weight string. (4 bytes)

### WCW/nWo Revenge

Game Identifier – `Revenge`

Wrestler ID4/Wrestler ID2=unknown1,unknown2,unknown3,namePointer,heightPointer,weightPointer,unknown4,managerID2,unknown5,unknown6

(todo)

- namePointer – Pointer to wrestler's name. (4 bytes)
- heightPointer – Pointer to wrestler's height string. (4 bytes)
- weightPointer – Pointer to wrestler's weight string. (4 bytes)
- managerID2 – ID2 value of the wrestler's manager. (1 byte)

### WWF WrestleMania 2000

Game Identifier – `WM2K`

Wrestler ID4/Wrestler ID2=namePointer,height,weight,movesetIndex,paramsIndex,theme,video,unknown,costumePointer1,costumePointer2,costumePointer3,costumePointer4

(todo)

- namePointer – Pointer to wrestler's name. (4 bytes)
- height – Wrestler height. (1 byte)
- weight – Wrestler weight. (1 byte)
- movesetIndex – File ID of the wrestler's moveset. (2 bytes)
- paramsIndex – File ID of the wrestler's parameters. (2 bytes)
- theme – Theme song for this wrestler. (1 byte)
- video – Titantron video for this wrestler. (1 byte)
- unknown –
- costumePointer1 – Pointer to costume data for the wrestler's first costume slot. (4 bytes)
- costumePointer2 – Pointer to costume data for the wrestler's second costume slot. (4 bytes)
- costumePointer3 – Pointer to costume data for the wrestler's third costume slot. (4 bytes)
- costumePointer4 – Pointer to costume data for the wrestler's fourth costume slot. (4 bytes)

### Virtual Pro-Wrestling 2

Game Identifier – `VPW2`

Wrestler ID4/Wrestler ID2=theme,namecall,height,weight,voiceA,voiceB,movesetIndex,paramsIndex,appearanceIndex,profileIndex

Example wrestler definition: `0001/01=02,02,23,2D,01,00,02EE,02ED,0000,0002`

- theme – Theme song for this wrestler. (1 byte)
- namecall –
- height – Wrestler height. (1 byte)
- weight – Wrestler weight. (1 byte)
- voiceA –
- voiceB –
- movesetIndex – File ID of the wrestler's moveset. (2 bytes)
- paramsIndex – File ID of the wrestler's parameters. (2 bytes)
- appearanceIndex – Starting index for wrestler's costume in the default costumes file. (2 bytes)
- profileIndex – Index of the wrestler's profile information in the default names file. (2 bytes)

### WWF No Mercy

Game Identifier – `NoMercy`

Wrestler ID4/Wrestler ID2=theme,video,height,unknown,weight,movesetIndex,paramsIndex,appearanceIndex,profileIndex

Example wrestler definition: `0001/01=25,1D,11,00,00AF,01FA,01F9,0000,0003`

- theme – Theme song for this wrestler. (1 byte)
- video – Titantron video for this wrestler. (1 byte)
- height – Wrestler height. (1 byte)
- unknown – Unknown value, possibly for alignment. (1 byte)
- weight – Wrestler weight. (2 bytes)
- movesetIndex – File ID of the wrestler's moveset. (2 bytes)
- paramsIndex – File ID of the wrestler's parameters. (2 bytes)
- appearanceIndex – Index of the wrestler's costume in the default costume data for this slot. (2 bytes)
- profileIndex – Index of the wrestler's profile information in the default names file for this slot. (2 bytes)

## Project File Format

`.vpwsproj` is an XML file.

(todo: this is perpetually changing and is not worth documenting until it's reached a stable state.)