feat: build engine data at pinned commits

This commit is contained in:
Abdessamad Derraz committed 2026-10-05 02:51:22 +02:00
1 parent 0d3a2b87ed
commit a116192b3d
30 files changed
+96 -46

No files matched your search

+21 -13
View File
@@ -39,14 +39,22 @@ notes: |
devilutionx.mpq is a build artefact packed from the repo's assets/
directory with the smpq tool (CMake option BUILD_ASSETS_MPQ,
CMakeLists.txt:192-204). The compiled binary expects it next to the
executable on every platform except Android, Apple and 3DS/Switch
(:509-516), where its contents are shipped loose. After loading the
core archives the engine reads the asset ASSETS_VERSION and aborts
with "Failed to load UI resources" unless its content is "1\n"
(Source/init.cpp:54, 79-85, Source/diablo.cpp:1225-1239). The same
test on fonts\VERSION applies to fonts.mpq when it is loaded
(Source/init.cpp:98-114).
CMakeLists.txt:192-204). CMake/Assets.cmake:46-238 lists the packed
files (ASSETS_VERSION, arena, data, fonts, gendata, levels, lua,
plrgfx, txtdata and ui_art, plus data/inv/objcurs-widths.txt and the
ui_art PNGs outside SDL1 and Vita builds); each Translations/<lang>.po
is compiled with msgfmt to <lang>.gmo and appended
(CMake/Assets.cmake:8-29, 268-272). The archive is written with
"smpq -A -M 1 -C BZIP2 -c" from the staged assets directory
(CMake/Assets.cmake:287-294). mods/hf.mpq is built the same way from
the mods/hf file list (CMake/Mods.cmake:8-33, 58-67). The compiled
binary expects devilutionx.mpq next to the executable on every
platform except Android, Apple and 3DS/Switch (:509-516), where its
contents are shipped loose. After loading the core archives the engine
reads the asset ASSETS_VERSION and aborts with "Failed to load UI
resources" unless its content is "1\n" (Source/init.cpp:54, 79-85,
Source/diablo.cpp:1225-1239). The same test on fonts\VERSION applies
to fonts.mpq when it is loaded (Source/init.cpp:98-114).
fonts.mpq is the CJK + language assets add-on from the
devilutionx-assets release; English installs do not need it.
@@ -124,9 +132,9 @@ files:
system: diablo
category: game_data
required: true
description: "Engine assets (UI art, fonts, data tables, Lua scripts) packed from the repository's assets/ directory"
note: "Loaded first on every platform except Android, Apple, 3DS and Switch. Its files are also found in an assets/ directory next to the binary when the build installs them loose. The engine aborts when the asset ASSETS_VERSION is absent or is not \"1\\n\"."
source_ref: "Source/engine/assets.cpp:509-516, 223-226, Source/init.cpp:79-85, Source/diablo.cpp:1225-1239"
description: "Engine assets (UI art, fonts, data tables, Lua scripts, compiled translations) packed from the repository's assets/ directory"
note: "Loaded first on every platform except Android, Apple, 3DS and Switch. Its files are also found in an assets/ directory next to the binary when the build installs them loose. The engine aborts when the asset ASSETS_VERSION is absent or is not \"1\\n\". Built by CMake with smpq (MPQ version 1, BZIP2, no attributes) from the file list of CMake/Assets.cmake plus one <lang>.gmo per translation."
source_ref: "Source/engine/assets.cpp:509-516, 223-226, Source/init.cpp:54, 79-85, Source/diablo.cpp:1225-1239, CMake/Assets.cmake:46-224, 287-294"
- name: "fonts.mpq"
path: "devilutionx/fonts.mpq"
@@ -169,5 +177,5 @@ files:
category: game_data
required: false
description: "Hellfire mod archive packed from the repository's mods/hf directory"
note: "mods/<name>.mpq is opened for each active mod; hf is activated when hellfire.mpq is present. A mod with no archive and no loose directory is served from the core archives."
source_ref: "Source/engine/assets.cpp:748-764, Source/options.cpp:77-79, CMakeLists.txt:204"
note: "mods/<name>.mpq is opened for each active mod; hf is activated when hellfire.mpq is present. A mod with no archive and no loose directory is served from the core archives. Built by CMake with smpq (MPQ version 1, BZIP2, no attributes) from the hellfire_mod file list."
source_ref: "Source/engine/assets.cpp:748-764, Source/options.cpp:77-79, CMakeLists.txt:204, CMake/Mods.cmake:8-33, 58-66"
+2 -1
View File
@@ -343,7 +343,8 @@ files:
category: game_data
system: doom
required: false
source_ref: "wadsrc_extra/static/iwadinfo.txt:71, 699"
source_ref: "wadsrc_extra/static/iwadinfo.txt:65-75, 699, src/d_iwad.cpp:351-394, src/common/filesystem/source/resourcefile.cpp:156-174"
note: "Identified by the MAP01 map and the HACX-E lump, whatever the container: every candidate is opened by its magic, so a zip under this name is read as a pk3. The Hacx 2.0 repository builds that zip from src/, where hacx-e.txt is the HACX-E lump and maps/MAP01.wad the first map."
- name: "action2.wad"
category: game_data
+39 -20
View File
@@ -38,15 +38,33 @@ notes: |
Oxygen/sonic3air/source/sonic3air/ConfigurationImpl.cpp:33-47,
Oxygen/sonic3air/oxygenproject.json:9-20
The engine ships four data packages built from Oxygen/sonic3air/data/
(enginedata.bin, gamedata.bin, audiodata.bin, audioremaster.bin). Three
are required and part of the release; audioremaster.bin is optional and
downloaded on demand from https://sonic3air.org/download/audioremaster.bin
when the user enables the remastered soundtrack.
The engine ships four data packages (enginedata.bin, gamedata.bin,
audiodata.bin, audioremaster.bin). Three are required and part of the
release; audioremaster.bin is optional and downloaded on demand from
https://sonic3air.org/download/audioremaster.bin when the user enables
the remastered soundtrack.
ref: Oxygen/sonic3air/oxygenproject.json:32-38,
Oxygen/sonic3air/source/sonic3air/EngineDelegate.cpp:115-118,
Oxygen/sonic3air/source/sonic3air/audio/RemasteredMusicDownload.cpp:48-62
The packages are written by the game binary itself when run with -pack
from Oxygen/sonic3air/ (PackageBuilder::performPacking), which the
mastering scripts call before copying the results to the release image.
gamedata.bin data/ without data/audio/ and data/metadata.json
audiodata.bin data/audio/original/
audioremaster.bin data/audio/remastered/
enginedata.bin ../oxygenengine/data/
Each package is a flat container: "OPCK", format version 3, content
version BUILD_NUMBER, then one entry per file keyed by its path relative
to the base directory, in std::map order. Packing reads the data
directories only; the ROM is not involved.
ref: Oxygen/sonic3air/source/sonic3air/main.cpp:92-97,
Oxygen/sonic3air/source/sonic3air/helper/PackageBuilder.cpp:16-63,
Oxygen/oxygenengine/source/oxygen/file/FilePackage.cpp:44-151,
Oxygen/oxygenengine/source/oxygen/file/FilePackage.h:28-30,
Oxygen/sonic3air/source/sonic3air/version.inc:1,
Oxygen/sonic3air/___internal/mastering/mastering_linux.sh:48-52
Each package is opened from the game data directory, data/ under the
install directory, then from data/ under the app-data directory, where
the downloader saves audioremaster.bin. Package paths below are written
@@ -81,24 +99,25 @@ files:
category: game_data
system: sonic3-air
required: true
bundled: true
source_ref: "Oxygen/sonic3air/source/sonic3air/EngineDelegate.cpp:115, Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:603-617, Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:643-651"
source_ref: "Oxygen/sonic3air/source/sonic3air/EngineDelegate.cpp:115, Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:603-617, Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:643-651, Oxygen/sonic3air/source/sonic3air/helper/PackageBuilder.cpp:57-62"
note: |
Oxygen Engine data package. A required package that cannot be opened
closes the application, unless the data is present unpacked
(data/images/icon.png exists). The engine then checks for
oxygen_icon.png in the engine data and stops when it is absent
(EngineMain.cpp:584-593).
Oxygen Engine data package, packed from Oxygen/oxygenengine/data/
(fonts, images, shaders, sprites, oxygen_icon.png). A required
package that cannot be opened closes the application, unless the
data is present unpacked (data/images/icon.png exists). The engine
then checks for oxygen_icon.png in the engine data and stops when it
is absent (EngineMain.cpp:584-593).
- name: "gamedata.bin"
path: "sonic3-air/data/gamedata.bin"
category: game_data
system: sonic3-air
required: true
bundled: true
source_ref: "Oxygen/sonic3air/source/sonic3air/EngineDelegate.cpp:116, Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:603-617, Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:643-651"
source_ref: "Oxygen/sonic3air/source/sonic3air/EngineDelegate.cpp:116, Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:603-617, Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:643-651, Oxygen/sonic3air/source/sonic3air/helper/PackageBuilder.cpp:36-41"
note: |
Game data package. A required package that cannot be opened closes
Game data package, packed from Oxygen/sonic3air/data/ without the
audio directory and metadata.json (binary tables, fonts, images,
rawdata, sprites). A required package that cannot be opened closes
the application, unless the data is present unpacked
(data/images/icon.png exists).
@@ -107,12 +126,12 @@ files:
category: game_data
system: sonic3-air
required: true
bundled: true
source_ref: "Oxygen/sonic3air/source/sonic3air/EngineDelegate.cpp:117, Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:603-617, Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:643-651"
source_ref: "Oxygen/sonic3air/source/sonic3air/EngineDelegate.cpp:117, Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:603-617, Oxygen/oxygenengine/source/oxygen/engine/EngineMain.cpp:643-651, Oxygen/sonic3air/source/sonic3air/helper/PackageBuilder.cpp:43-48"
note: |
Audio data package. A required package that cannot be opened closes
the application, unless the data is present unpacked
(data/images/icon.png exists).
Audio data package, packed from Oxygen/sonic3air/data/audio/original/
(emulated soundtrack definitions and prototype SMPS tracks). A
required package that cannot be opened closes the application,
unless the data is present unpacked (data/images/icon.png exists).
- name: "audioremaster.bin"
path: "sonic3-air/data/audioremaster.bin"
+18 -10
View File
@@ -43,6 +43,7 @@ files:
# Enumerated by data/trx/ship/games/tr1/gameflow.json5 "levels" array.
- name: "title.phd"
path: "games/tr1/levels/title.phd"
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr1/gameflow.json5:38"
@@ -62,6 +63,7 @@ files:
- name: "level2.phd"
path: "games/tr1/levels/level2.phd"
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr1/gameflow.json5:116"
@@ -631,46 +633,52 @@ files:
# Known game tr1-ub, extends tr1 (src/trx/game/shell/mod.c:30-31).
# Enumerated by data/trx/ship/games/tr1-ub/gameflow.json5 "levels" array.
# Its title, FMVs and music fall back to games/tr1.
# The project's installer downloads the levels from its own host as
# tr1-ub-vanilla.zip (original edition) or tr1-ub-music.zip (fan-patched
# edition) and copies data/*.phd to games/tr1-ub/levels/; tools/download_assets
# fetches tr1-ub.zip, which carries the expansion's images only.
- name: "egypt.phd"
path: "games/tr1-ub/levels/egypt.phd"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr1-ub/gameflow.json5:63"
note: "Return to Egypt"
source_ref: "data/trx/ship/games/tr1-ub/gameflow.json5:63, tools/installer/TRX_Installer/InstallComponentFactory.cs:72-81, tools/installer/TRX_Installer/InstallMappings.cs:18-22"
note: "Return to Egypt. The installer offers the original edition and a fan-patched edition of the level set."
- name: "cat.phd"
path: "games/tr1-ub/levels/cat.phd"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr1-ub/gameflow.json5:87"
note: "Temple of the Cat"
source_ref: "data/trx/ship/games/tr1-ub/gameflow.json5:87, tools/installer/TRX_Installer/InstallComponentFactory.cs:72-81, tools/installer/TRX_Installer/InstallMappings.cs:18-22"
note: "Temple of the Cat. The installer offers the original edition and a fan-patched edition of the level set."
- name: "end.phd"
path: "games/tr1-ub/levels/end.phd"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr1-ub/gameflow.json5:110"
note: "Atlantean Stronghold"
source_ref: "data/trx/ship/games/tr1-ub/gameflow.json5:110, tools/installer/TRX_Installer/InstallComponentFactory.cs:72-81, tools/installer/TRX_Installer/InstallMappings.cs:18-22"
note: "Atlantean Stronghold. The installer offers the original edition and a fan-patched edition of the level set."
- name: "end2.phd"
path: "games/tr1-ub/levels/end2.phd"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr1-ub/gameflow.json5:132"
note: "The Hive"
source_ref: "data/trx/ship/games/tr1-ub/gameflow.json5:132, tools/installer/TRX_Installer/InstallComponentFactory.cs:72-81, tools/installer/TRX_Installer/InstallMappings.cs:18-22"
note: "The Hive. The installer offers the original edition and a fan-patched edition of the level set."
# PC demo
# Known game tr1-demo-pc, extends tr1 (src/trx/game/shell/mod.c:32-33).
# tools/download_assets and the installer fetch tr1-demo-pc.zip from the
# project's host; it holds games/tr1-demo-pc/levels/{title,level2}.phd.
- name: "title.phd"
path: "games/tr1-demo-pc/levels/title.phd"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr1-demo-pc/gameflow.json5:38, src/trx/game/game_flow/reader.c:903-909, src/trx/game/paths.c:123-132"
source_ref: "data/trx/ship/games/tr1-demo-pc/gameflow.json5:38, src/trx/game/game_flow/reader.c:903-909, src/trx/game/paths.c:123-132, tools/download_assets:67, tools/installer/TRX_Installer/InstallComponentFactory.cs:83-87"
note: "Title level of the PC demo. A title level is also looked up in the levels directory of the game it extends, so games/tr1/levels/title.phd is used when this one is absent."
- name: "level2.phd"
path: "games/tr1-demo-pc/levels/level2.phd"
required: false
category: game_data
source_ref: "data/trx/ship/games/tr1-demo-pc/gameflow.json5:56, src/trx/game/level/format/format_tr1.c:74-99, 186-191"
source_ref: "data/trx/ship/games/tr1-demo-pc/gameflow.json5:56, src/trx/game/level/format/format_tr1.c:74-99, 186-191, tools/download_assets:67, tools/installer/TRX_Installer/InstallComponentFactory.cs:83-87"
note: "City of Vilcabamba in the PC demo layout, which stores the palette before the cameras. The demo game does not load without it."
+8 -2
View File
@@ -46,6 +46,7 @@ files:
# Soundbank
- name: "main.sfx"
path: "games/tr2/main.sfx"
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:33"
@@ -55,6 +56,7 @@ files:
# Enumerated by data/trx/ship/games/tr2/gameflow.json5 "levels" array.
- name: "title.tr2"
path: "games/tr2/levels/title.tr2"
unsourceable: "retail data the collection does not hold; a same-named file of another game must not stand in"
required: true
category: game_data
source_ref: "data/trx/ship/games/tr2/gameflow.json5:15"
@@ -649,12 +651,16 @@ files:
# Known game tr2-gm, extends tr2 (src/trx/game/shell/mod.c:37-38).
# Enumerated by data/trx/ship/games/tr2-gm/gameflow.json5 "levels" array.
# Its FMVs and music fall back to games/tr2.
# tools/download_assets and the installer fetch tr2-gm.zip from the
# project's host; it holds games/tr2-gm/main.sfx and games/tr2-gm/levels/*.tr2.
# Installing from a retail directory maps data/main_gm.sfx to
# games/tr2-gm/main_gm.sfx and data/*.tr2 to games/tr2-gm/levels/.
- name: "main.sfx"
path: "games/tr2-gm/main.sfx"
aliases: ["main_gm.sfx"]
required: false
category: game_data
source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:34, src/trx/game/game_flow/reader.c:198-219, src/trx/game/paths.c:203-212"
source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:34, src/trx/game/game_flow/reader.c:198-219, src/trx/game/paths.c:203-212, tools/download_assets:71, tools/installer/TRX_Installer/InstallMappings.cs:35-40"
note: "Sample bank of the expansion. main_gm.sfx is tried first, each name in the expansion directory then in games/tr2."
- name: "title.tr2"
@@ -662,7 +668,7 @@ files:
aliases: ["title_gm.tr2"]
required: false
category: game_data
source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:16, src/trx/game/game_flow/reader.c:198-219, 903-909, src/trx/game/paths.c:123-132"
source_ref: "data/trx/ship/games/tr2-gm/gameflow.json5:16, src/trx/game/game_flow/reader.c:198-219, 903-909, src/trx/game/paths.c:123-132, tools/download_assets:71, tools/installer/TRX_Installer/InstallMappings.cs:35-40"
note: "Title level of the expansion. title_gm.tr2 is tried first, each name in the expansion levels directory then in games/tr2/levels."
- name: "level1.tr2"