Textures and music¶
Assets under assets/ replace game content by file name. Nothing here
reaches guest RAM: every substitution happens on the host side, so an
asset-only mod is non-mutative.
When several enabled mods ship the same file, the mod listed later in
enabled.txt wins. Mod roots outrank the base asset directory and the
player's own data directory.
Textures¶
assets/textures/<name>.png replaces one texture in the native renderer.
Two name forms match:
| Form | Matches |
|---|---|
<label>-<thash>-<bx>x<by>+<bw>x<bh>-<phash>-<bpp>bpp.png |
One texture by content: the upload hash, the texel box within the upload, the palette hash, and the bit depth. The label is the draw's scene category and is ignored by the matcher. |
<name>.png |
A symbolic identity the game layer annotates, such as title_ui for the title-screen UI atlas. |
To obtain the content names, run the game with
OPENPETE_TEXPACK_DUMP_DIR=<dir> set: every texture drawn is decoded from
VRAM and written once under its content name. Screen-space 2D draws are
written with each texel replicated to square pixels, so a dump can be
edited at its displayed aspect and dropped back in unchanged. World
textures are written at 1:1.
A replacement image is sampled at its own resolution, so a larger PNG is
an HD replacement. Fogged replacement texels blend toward the level's
fog colours; a pack whose art re-grades a level retargets that blend with
api->texpack_fog_shift.
assets/textures/own/<hexid>.png registers a texture under an ID the
mod chooses, for models the mod installs itself.
--texpack-dir DIR or OPENPETE_TEXPACK_DIR points the base pack at a
directory outside any mod; mod roots always join it.
Music¶
assets/music/track_NN.wav replaces music track NN, where NN is the
zero-padded index into the game's music table (track_20.wav is the
title theme). A manifest.txt in the same directory maps other paths to
indices, one <index> <relative path> pair per line; a later line for
the same index wins. Both forms work in a mod's assets/music/ and in
the base directories, and within one directory the manifest mapping is
tried first.
The WAV is PCM 16-bit, mono or stereo, at 11025, 22050, 32000, 44100, or 48000 Hz. It loads whole into RAM.
There is no music census tool; indices come from the game's
m_MusicTable.
Level data¶
assets/wad/level<ID>.WAD replaces one level's data segment and
assets/wad/level<ID>.OVL its code overlay, where ID is the logical
level id (10 = Artisans). The game loads everything from one WAD file by
sector range; the engine serves the mod's bytes to every disc read that
lands inside that level's entry. An overlay replacement must match the
stock size, since code loads into a fixed buffer; a data replacement may
be any size. These files are disc-derived, so a mod ships a generator
that writes them on the player's machine (see
Publishing). Custom levels in their own slot use
assets/levels/ instead, see Levels.