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: "48f15208ff2857985d3534f191dab494ea3cd3d0" display_name: "TheXTech" cores: [] systems: [smbx] notes: | C++ reimplementation of the SMBX 1.3 engine. The engine itself ships no game assets; an asset pack is probed at startup from AppPathManager::assetsSearchPath() and the first pack with a valid graphics/ui/ directory is used. ref: src/main/asset_pack.cpp:249-340 (s_find_asset_packs, s_scan_asset_pack), lib/AppPath/private/app_path.cpp:135-170 A pack is accepted when it carries graphics/ui/ plus an identification file. Two schemas are recognized: _meta.ini modern asset pack (engine field "TheXTech", platform field matching the running target, pack-id) gameinfo.ini legacy SMBX-style descriptor read under [android] ref: src/main/asset_pack.cpp:138-212 Three images are loaded unconditionally to render the pack-selection menu; without them the pack is rejected ("Could not load UI assets from possible asset pack"). ref: src/main/asset_pack.cpp:115-117, 285-291 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 (one of the two is required) # ================================================================ - name: "_meta.ini" category: game_data required: false source_ref: "src/main/asset_pack.cpp:138-168 (modern asset pack schema)" note: "Modern asset pack descriptor. [content] engine=TheXTech + pack-id." - name: "gameinfo.ini" category: game_data required: false source_ref: "src/main/asset_pack.cpp:169-180 (legacy schema)" note: "Legacy SMBX descriptor. [game] id + [android] logo/background." # ================================================================ # UI assets probed to validate an asset pack # ================================================================ - name: "thextech_128.png" category: game_data path: "graphics/ui/icon/thextech_128.png" required: true source_ref: "src/main/asset_pack.cpp:115 (assets_icon)" note: "Pack icon. Loaded during pack scan." - name: "MenuGFX2.png" category: game_data path: "graphics/ui/MenuGFX2.png" required: true source_ref: "src/main/asset_pack.cpp:116 (logo_image_path_default), 285-291" note: "Main menu logo. Pack rejected if this image fails to load." - name: "background2-2.png" category: game_data path: "graphics/background2/background2-2.png" required: true source_ref: "src/main/asset_pack.cpp:117 (bg_image_path_default)" note: "Menu background. Covered by the UI-assets gate." # ================================================================ # Core content directories (engine iterates on disk, filenames are # the pack's own; the directory contract is what the engine checks) # ================================================================ - name: "graphics/" category: game_data required: true source_ref: "src/main/asset_pack.cpp:275-291 (DirMan::exists(root + \"graphics/ui/\"))" note: "Pack validation requires graphics/ui/ to exist." - name: "sound/" category: game_data required: false source_ref: "src/load_gfx.cpp:443 (LoadGFXFromList), src/sound.h" note: "SFX directory read from sounds.ini. Game runs without sounds." - name: "music/" category: game_data required: false source_ref: "src/sound.cpp (music loader)" note: "Music tracks read from music.ini." - name: "sounds.ini" category: game_data required: false source_ref: "src/sound.cpp (SFX index file)" - name: "music.ini" category: game_data required: false source_ref: "src/sound.cpp (music index file)" - name: "intro/" category: game_data required: false source_ref: "src/main/game_main.cpp (intro level loader)" note: "Intro level episode; played before the main menu when present." - name: "outro/" category: game_data required: false source_ref: "src/main/game_main.cpp (outro episode)" - name: "worlds/" category: game_data required: false source_ref: "src/main/game_main.cpp (world loader)" note: "Default world episodes shipped with the pack." - name: "battle/" category: game_data required: false source_ref: "src/main/game_main.cpp (battle mode levels)"