Files
libretro/emulators/thextech.yml
T
Abdessamad Derraz 4231902a6c docs: write prose without dashes or semicolons
Profiles, the wiki, comments, docstrings, command output and schema descriptions carried em-dashes, clause-joining semicolons, unicode arrows, box-drawing banners and check-mark glyphs. Each sentence was rewritten rather than having its character swapped. Hashes, paths, source_ref values and every cited file:line are unchanged, which a comparison of each parsed profile against the previous revision confirms.

validate_pr comments now say PASS and FAIL in words, and source_ref values in a profile's structured blocks render as code. test_prose_style fails if any of these comes back, in tracked files or in the generated site.
2026-10-19 06:47:31 +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: "a72915cd9a2c811f2388423775f20d75bb2107bd"
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:120-123"
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:962, 979, src/main/translate.cpp:888"
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:321-339"
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."