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; 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. files: # ================================================================ # Asset pack identification files # ================================================================ - name: "_meta.ini" category: game_data required: false source_ref: "src/main/asset_pack.cpp:125, 131-181, 318-319" note: "Archive pack descriptor. [content] engine=TheXTech, platform, pack-id. An archive without it is skipped." - name: "gameinfo.ini" category: game_data 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." # ================================================================ # Images of the pack-selection menu # ================================================================ - name: "thextech_128.png" category: game_data path: "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: "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; GFX_t::load requires it as well." - name: "background2-2.png" category: game_data path: "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 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; GFX_t::load rejects the pack when a required UI image is missing." - name: "sound/" type: directory category: game_data 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 required: false source_ref: "src/sound.cpp:1318" note: "Music tracks, files named by music.ini." - name: "sounds.ini" category: game_data 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 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: "intro.lvlx" category: game_data required: true source_ref: "src/game_main.cpp:172-185, 224-250, 1095-1106" note: "Level shown behind the main menu. intro.lvl and a level picked from introset/ take its place; with none of the three the game exits on a fatal error." - name: "intro.lvl" category: game_data required: false source_ref: "src/game_main.cpp:176-177" note: "Read when intro.lvlx is absent." - name: "introset/" type: directory category: game_data required: false source_ref: "src/game_main.cpp:194-222, 247" note: "Directory of .lvl/.lvlx intro levels; one is picked at random when present." - name: "outro.lvlx" category: game_data required: false source_ref: "src/game_main.cpp:857-869" note: "Level shown behind the credits, unless the episode names its own." - name: "outro.lvl" category: game_data required: false source_ref: "src/game_main.cpp:865-866" note: "Read when outro.lvlx is absent." - name: "worlds/" type: directory category: game_data 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 required: false source_ref: "src/main/menu_main.cpp:701-706" note: "Battle mode levels shipped with the pack."