Files
libretro/emulators/thextech.yml
T
Abdessamad Derraz 8458e92281 chore: advance 135 profile pins to upstream HEAD
Every cited block was read again at HEAD: no ref left to review, no
file name or hash literal added to a cited file since the pin
(--detect-new-files --watch-hashes), refs recaled with their pins.
Profiles built by a platform at a fixed commit, or whose bump would
leave prose under an older pin, stay where they were.
2026-10-23 15:51:08 +02:00

208 lines
8.7 KiB
YAML

emulator: TheXTech
type: standalone
core_classification: game_engine
source: "https://github.com/TheXTech/TheXTech"
upstream: "https://github.com/TheXTech/TheXTech"
profiled_date: "2026-10-04"
source_commit: "3ad66cb1896ea9f255e8104862e4e17c2e8a8ded"
display_name: "TheXTech"
cores: []
systems: [smbx]
notes: |
C++ reimplementation of the SMBX 1.3 engine. The engine itself ships
no game assets. Asset packs are searched at startup under every root
of AppPathManager::assetsSearchPath(): the root itself (legacy
layout), then each directory or archive of its assets/ folder.
ref: src/main/asset_pack.cpp:249-378 (s_find_asset_packs),
lib/AppPath/private/app_path.cpp:135-181
A directory is scanned when it carries graphics/ui/, an archive when
it carries _meta.ini. Two descriptors are recognized:
_meta.ini archive pack ([content] engine "TheXTech", platform
matching the running target, pack-id)
gameinfo.ini directory pack ([game] id, menu images under
[android])
A pack under assets/ is ignored when no id could be read, while the legacy
root pack needs none.
ref: src/main/asset_pack.cpp:125-207, 334-339
The pack-selection menu loads an icon, a logo and a background. Only
the logo is checked: without it the pack is ignored ("Could not load
UI assets from possible asset pack").
ref: src/main/asset_pack.cpp:115-117, 225-233, 282-283
The selected pack is then loaded by GFX_t::load, which fails when one
of the UI images it requires from graphics/ui/ is missing.
ref: src/gfx.cpp:121-229, src/main/asset_pack.cpp:415-438
TheXTech is content-agnostic. The reference packs that TheXTech
releases alongside the engine are the SMBX 1.3 asset pack
(`thextech-assets-smbx13`) and the free Adventures of Demo pack
(`thextech-assets-adventures-of-demo`). Any pack that satisfies the
structure above runs.
Paths below are written from a search root. TheXTech/ is the name the
build gives its user directory (THEXTECH_DIRECTORY_PREFIX) and its
system directory, and the application directory is searched the same way.
ref: CMakeLists.txt:297, lib/AppPath/private/app_path_unix.cpp:46, 103,
lib/AppPath/private/app_path.cpp:87
files:
# ================================================================
# Pack discovery
# ================================================================
- name: "assets/"
type: directory
category: game_data
path: "TheXTech/assets/"
required: false
source_ref: "src/main/asset_pack.cpp:131-181, 290-300, 313-319"
note: "Every file directly under assets/ is opened as an archive and kept as a pack when it holds _meta.ini, and every subdirectory is kept when it holds graphics/ui/. _meta.ini is read only through the archive prefix: [content] engine must be TheXTech, platform must match the build, pack-id names the pack."
- name: "gameinfo.ini"
category: game_data
path: "TheXTech/gameinfo.ini"
required: false
source_ref: "src/main/asset_pack.cpp:126, 182-190, src/main/game_info.cpp:143"
note: "Directory pack descriptor. [game] id names the pack, [android] logo/background override the menu images."
- name: "thextech.ini"
category: game_data
path: "TheXTech/thextech.ini"
required: false
source_ref: "lib/AppPath/private/app_path.cpp:98, 196-222"
note: "Read from the application directory at startup. [Main] force-portable = true makes that directory the user directory, so settings and saves stay next to the executable."
# ================================================================
# Images of the pack-selection menu
# ================================================================
- name: "thextech_128.png"
category: game_data
path: "TheXTech/graphics/ui/icon/thextech_128.png"
required: false
source_ref: "src/main/asset_pack.cpp:115, 225"
note: "Pack icon. Loaded during pack scan, result not checked."
- name: "MenuGFX2.png"
category: game_data
path: "TheXTech/graphics/ui/MenuGFX2.png"
required: true
source_ref: "src/main/asset_pack.cpp:116, 226-230, 334-335, src/gfx.cpp:201"
note: "Main menu logo. Pack ignored if no logo loads, and GFX_t::load requires it as well."
- name: "background2-2.png"
category: game_data
path: "TheXTech/graphics/background2/background2-2.png"
required: false
source_ref: "src/main/asset_pack.cpp:117, 227-233"
note: "Menu background. Loaded during pack scan, result not checked."
# ================================================================
# Core content (engine iterates on disk, filenames are the pack's
# own, the directory contract is what the engine checks)
# ================================================================
- name: "graphics/"
type: directory
category: game_data
path: "TheXTech/graphics/"
required: true
source_ref: "src/main/asset_pack.cpp:274, 326-327, src/gfx.cpp:121-229, src/load_gfx.cpp:117-120"
note: "graphics/ui/ must exist for a directory to be scanned as a pack, and GFX_t::load rejects the pack when a required UI image is missing."
- name: "fonts/"
type: directory
category: game_data
path: "TheXTech/fonts/"
required: false
source_ref: "src/fontman/font_manager.cpp:270, 477-499"
note: "Raster fonts described by *.font.ini files. Without the directory, or with no font in it, the built-in fallback fonts are loaded."
- name: "languages/"
type: directory
category: game_data
path: "TheXTech/languages/"
required: false
source_ref: "lib/AppPath/private/app_path.cpp:311-315, src/core/language/language_common.cpp:72-83, 104-122"
note: "thextech_<lang>.json and assets_<lang>.json translations. Without the directory no translation is listed."
- name: "sound/"
type: directory
category: game_data
path: "TheXTech/sound/"
required: false
source_ref: "src/sound.cpp:1319"
note: "SFX directory, files named by sounds.ini. Game runs without sounds."
- name: "music/"
type: directory
category: game_data
path: "TheXTech/music/"
required: false
source_ref: "src/sound.cpp:1318"
note: "Music tracks, files named by music.ini."
- name: "sounds.ini"
category: game_data
path: "TheXTech/sounds.ini"
required: false
source_ref: "src/sound.cpp:1322, 1348-1354, 1363"
note: "SFX index. A message box reports its absence and the game runs without SFX."
- name: "music.ini"
category: game_data
path: "TheXTech/music.ini"
required: false
source_ref: "src/sound.cpp:1321, 1341-1347, 1356"
note: "Music index. A message box reports its absence and the game runs without default music."
- name: "editor.ini"
category: game_data
path: "TheXTech/editor.ini"
required: false
source_ref: "src/editor/editor_custom.cpp:969, src/editor/editor_custom.cpp:986, src/main/translate.cpp:889"
note: "Item lists of the built-in editor, read when the translation table is built."
- name: "intro.lvlx"
category: game_data
path: "TheXTech/intro.lvlx"
aliases: ["intro.lvl"]
required: true
source_ref: "src/game_main.cpp:172-185, 224-250, 1095-1106"
note: "Level shown behind the main menu. intro.lvl is opened when intro.lvlx is absent, and a level picked from introset/ takes the place of both. With none of the three the game exits on a fatal error."
- name: "introset/"
type: directory
category: game_data
path: "TheXTech/introset/"
required: false
source_ref: "src/game_main.cpp:194-222, 247, src/main/level_file.cpp:314-332"
note: "Directory of .lvl/.lvlx intro levels. One is picked at random when present, otherwise the root intro level is opened. The Adventures of Demo pack carries none, and these 19 levels come from the introset/ of the Nostalgic Paradise pack (Blue Edition 0.2.8b, nostalgic-paradise-stable.7z). A level reads custom graphics from introset/ and from the subfolder named after it (07/, 08/, 10/), and every other block, BGO, NPC and background ID they use is present in the Adventures of Demo graphics."
- name: "outro.lvlx"
category: game_data
path: "TheXTech/outro.lvlx"
aliases: ["outro.lvl"]
required: false
source_ref: "src/game_main.cpp:857-869"
note: "Level shown behind the credits, unless the episode names its own. outro.lvl is opened when outro.lvlx is absent."
- name: "worlds/"
type: directory
category: game_data
path: "TheXTech/worlds/"
required: false
source_ref: "src/main/menu_main.cpp:361-370"
note: "Episodes shipped with the pack, listed next to the user's worlds directory."
- name: "battle/"
type: directory
category: game_data
path: "TheXTech/battle/"
required: false
source_ref: "src/main/menu_main.cpp:701-706"
note: "Battle mode levels shipped with the pack."