The executable: what it is and where its code lives
- Source
docs/executable/overview.md- SHA-256
740f95b0…9b444e74
Packing · Build · What's in the executable · Source modules · Which code opens which file · Leads
What we know about Tactics Ogre Reborn.exe as a whole: how it's packed and built, how its code is organized, and which code opens which game file. How the game reads each format is in that format's doc, like filetable.md; how to run the tools is in Ghidra and rea.
| Based on | Tactics Ogre Reborn.exe in local/game/, SHA-256 da6504e9079ca6901569cb0fa4d0bc6eac72f6769996a8146e8be6581d9650dc, and its unpacked copy, SHA-256 7b0230a11498f40396c9048345e7cfe0ef442cb7ca8faffc6f197920d2669599 (unpacking); FileTable.bin (filetable.md). |
| Checked | 2026-10-10 |
| Method | rea 6.3.0 with its Hopper and Ghidra 12.1.4 providers; the Ghidra project in local/exe/ and the indexes exported from it to data/exe/, queried with DuckDB (the indexes); the region map and the decompiled code of every function, read by agents for What's in the executable; Steamless's unpacker log; Ghidra's analysis logs; xxd and grep -a over the executable. Static analysis only, so a fact about what the code does is at most likely. |
Packing
| Fact | Confidence | How found |
|---|---|---|
A 64-bit (x86_64) Windows PE executable. |
confirmed | rea open_binary |
Wrapped in SteamStub 3.1 (x64), Valve's DRM layer, which encrypts .text and decrypts it at launch. The wrapper also carries a payload and a SteamDRMP.dll. |
confirmed | Steamless's 3.1 x64 unpacker: "File is packed with SteamStub Variant 3.1 (x64)!", ".text section is encrypted"; the unpacked copy decompiles to working code |
In the packed executable .text decompiles to nonsense, such as in al, 0xd7; xlatb in the function at 0x1400d5550. |
confirmed | rea procedure_pseudo_code (Hopper); Ghidra's application.log from a GUI import |
Segments of the packed executable: .text (0x140001000, 6,656,494 bytes), .rdata, .data, .pdata, _RDATA, .rsrc, .reloc, .bind (0x14109c000, 211,224 bytes). Unpacking removes .bind, the section SteamStub's code lives in. |
confirmed | rea binary_overview (Hopper); Steamless's log: ".bind section was removed from the file" |
The packed executable has 23,745 functions, found mostly from .pdata's unwind table, which isn't encrypted. |
likely | rea binary_overview (Hopper) |
The DOS stub and Rich header are gone: in the original, SteamStub's own header (starting VLV) sits at 0x40; in the unpacked copy bytes 0x40 to 0x157 are zero, and e_lfanew is 0x158. This is why Ghidra can't tell the compiler on import (the compiler fix). |
confirmed | xxd of both files |
Build
| Fact | Confidence | How found |
|---|---|---|
| Built with Microsoft Visual C++: the optional header gives linker version 14.16, Visual Studio 2017's. | likely | xxd of the optional header (0b02 0e10 at 0x170) |
Built with a PDB, Tactics Ogre Reborn.pdb, GUID b57641f7-9678-46a6-ae59-c200b8708f1f, age 1, which isn't shipped. |
likely | Ghidra's PDB analyzer log |
Built from a source tree at h:\tacos\mainline\programs\ on the developer's machine, with taco\application\ (game code), taco\framework\, taco\platform\ and mxframeworks\ under it. |
likely | exe.strings: assert paths such as H:\Tacos\mainline\Programs\Taco\Application/Battle/BattleJob.h |
It has C++ RTTI: 2,452 class namespaces after recovery, mostly in std (626), bl (519), Taco (468), SQEX (328) and Mx (123), plus Bullet physics classes (btCollisionWorld, …). |
likely | exe.classes, grouped by first namespace; Ghidra's RecoverClassesFromRTTIScript |
| After auto-analysis and class recovery the unpacked executable has 21,778 functions and 88,387 direct calls between them. | likely | exe.functions, exe.calls |
What's in the executable
Every part of the code, one row per system, to choose what to reverse engineer next. Built on 2026-10-10 in two steps: the region map (exe.regions) assigned every function to an address region, then agents read each region's decompiled code (DecompileScript, in local/exe/decomp/) with the indexes and named what it does. Every row is static analysis, so likely at best, and "probably" marks an inference. Rows are grouped by source folder for game code, by namespace for engine code. Sizes are summed from the regions each row covers.
| Kind | Systems | Functions | Code |
|---|---|---|---|
Game (Taco::, source folders) |
187 | 11,453 | 2,835 KB |
Engine (Mx, bl, SQEX::CDev) |
41 | 5,109 | 1,556 KB |
| Libraries (sead, FreeType, libjpeg, Bullet, …) | 18 | 3,866 | 1,696 KB |
| C/C++ runtime | 6 | 1,083 | 56 KB |
| Unknown | 3 | 238 | 49 KB |
| Total | 255 | 21,749 of 21,778 | 6,192 KB |
Query for the totals: SELECT count(*), sum(size) FROM exe.functions. Every region has a row; the 29 functions missing from the row sums are the agents' rounding at region edges. The region map alone named 75.9% of the code bytes; reading the code named the rest. That found libraries the map couldn't see: libjpeg 9 (the 190 KB at 0x1401aec50), libvorbis (the 90 KB at 0x14062f230), LZ4 1.9.2, CRI's HCA audio decoder, and Sony's PC pad library. It also corrected the map where it was wrong: 0x14054ffa0 is the C runtime, not Bullet; the regions after 0x140646540 labeled Win32++, system/activity.cpp and bl::fnd are exception-unwind code; and the 144 KB at the start of the code is static initializers that hash shader names.
App and TacosGame
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| App + WinMain (Mx::Blade::BladeFramework subclass, creates TacosGame) | Program entry and application shell. 0x140036500 is the WinMain the CRT calls: it sets up an identity with "Tactics Ogre Reborn"/"Steam", raises thread priority, calls CoInitializeEx, starts the memory system, then runs App (0x1400362c0 builds App and its TacosGame with the command line) and tears everything down. App::vfunction25 is App init: step timer, "thread-pool-memory" thread pool, reading config.ini, worker counts from the CPU count, a 1920x1080 FrameBuffer, and TacosGame::vfunction2. App::vfunction27 is probably the per-frame tick that calls TacosGame::vfunction4. | config.ini (scans for the line GraphicDeviceId=), path built from a global base-directory string; process command line; GetSystemInfo CPU count; QueryPerformanceCounter; IsDebuggerPresent; COM (CoInitializeEx) | — | 0x140036500 (WinMain); App init 0x140034d30 | 23 functions, 7.2 KB |
| TacosGame (implements Mx::IGame) | The game object the framework runs. It starts the 'MainUpdate' fiber (1 MB stack) that drives the game loop and draws each frame through the scene traversal. vfunction4 at 0x1401deb30 uses the 'Tactics Ogre: Reborn' string, probably as the window title. | window title 'Tactics Ogre: Reborn' | — | 0x1401de6e0 | 14 functions, 3.2 KB |
| gamemain.cpp / TacosGame | Starts the game: gamemain.cpp mounts the file table and creates the InputDeviceManager, ModelContainer and SystemSaveData. The TacosGame code holds the top-level game object and sets up sound from an embedded config text. Also covers the SoundNotifyEventHandler and WorldmapObjectManager stubs and a few std::function thunks. | FileTable_Mount; embedded sound config text (MAX_SOUND 48, MAX_BUS 7, MAX_BANK 48, buses WEATHER/BGM/MENU/BATTLE/EVENT/EFFECT/EFFECT_READ, STREAM_READ_THREAD_PRIORITY 30) | — | 0x1402c1970 | 32 functions, 7.9 KB |
system/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| Game flow / scene control (unnamed) | Probably the global game-mode state machine (switch on DAT_140d52060) and scene changes. 0x1402d1dc0 changes scene and loads the map through BgManager (0x1402dd2f0); 0x1402d2960 starts a battle through battle/entry.cpp (0x1402ef910). eventdata.cpp calls it heavily. | — | Indirect: bg maps via 0x1402dd2f0, battle entry via 0x1402ef910 | 0x1402d2310 | 67 functions, 12.6 KB |
| menu/menusavedata.cpp + game progress state (save data) | The game's save state (a global struct at DAT_140d520a0 / 0x140ce5b00): scenario flags and variables read through a flag-definition table (0x1402cdbd0: bit, nibble, byte or word types), roster and party data, and serialization to and from the save stream (0x1402cbe90, 0x1402c4e60, 0x1402c64f0). The 0x1402c72a0 run, labeled TacosGame, uses the same struct. | — | Save files (via system/saveload.cpp); flag definitions from a loaded table (DAT_140d68150) | 0x1402cbe90 | 219 functions, 43.8 KB |
| network/msgdialog.cpp | Probably platform message dialogs (state at DAT_140d69da8). TacosGame calls it. | — | — | 0x1402d8730 | 4 functions, 0.3 KB |
| system/systemdata.cpp (+ icon name helpers) | Loads the system data file. Also builds texture names for icons: skills, spells, finishing blows, items, elements, weather, status, fortune and badges. | Icon name formats: iconskill%04d, iconspell%04d, iconfinishblow%04d, itemicon%04d*%02d, bt_weather00*%04d00, st_icon01%04d00, com_icon%04d_00 and others | system/system_data.dat (group 0x12c, file 0x0, at 0x1402bd9a0); other files by ID (0x1402bdc60) | 0x1402bd9a0 | 32 functions, 3.4 KB |
| system/systemsavedata.cpp (SystemSaveData, SystemSaveDataEvent) | System save data (global DAT_140ce4e30): option defaults, display resolution text ('%d x %d'), unlock bits, and serialization with magic 0x1a1b2c2d. MenuOptionWindow and saveload read and write it. | Save name 'SystemSaveData'; options and config values; resolution list | System save file (platform save) | 0x1402d58a0 | 47 functions, 8.9 KB |
| Key config / button mapping (unnamed) | Probably maps keyboard keys and pad buttons to game actions through Mx::Input::Pad callbacks. 0x1402c07f0 returns the bound button for an action, and input reads it (0x14028f330). MenuKeyConfig uses it. | Key bindings (stored in system save data) | — | 0x1402c07f0 | 37 functions, 10.5 KB |
| system/keyconfigiconutil.cpp | Picks the button and key icon to show for each bound action. | Key bindings | — | 0x1402d7990 | 11 functions, 2.8 KB |
| system/saveloadmanager.cpp (Taco::Framework::SaveLoadManager) | Platform save and load operations as op objects: SaveOp, LoadOp, DeleteOp, EnumGameDataOp, SystemLoadOp and TransPS4GameDataOp (PS4 save transfer). The tail (0x1402d9bf0 onward) is probably sprite-animation table helpers used by BattleData and the unit sprite renderer. | Platform save storage | Save files | 0x1402d95e0 | 41 functions, 4 KB |
| system/transitionstack.cpp and lock bitmasks | An 8-entry stack of transition callbacks (0x58 bytes each). Also 18 bitmask lock flags at 0x140f22440 that menus, battle and save code set (0x1403295e0), clear (0x1403294d0) and read (0x140329560); probably input or menu locks. | — | — | 0x140329660 | 8 functions, 0.5 KB |
| system/saveload.cpp (Taco::Framework::SaveLoadManager: SaveOp, LoadOp, DeleteOp, EnumGameDataOp, SystemSaveOp, SystemLoadOp, TransPS4GameDataOp) | Writes and reads the save file. 0x14032beb0 writes 13 numbered sections (format 0x81000103): party, game progress, units, fortune ring and others. Runs the save, load, delete and enumerate operations through Mx::IO. | platform save storage through Mx::IO (SaveIoError, LoadGameInfoResult); a PS4 save data transfer operation | — | 0x14032beb0 | 50 functions, 11.2 KB |
| system/systeminitdata.cpp (SystemInitData), display mode and config.ini | Default system settings (ScreenMode: Window or FullScreen; Window is forced when a debugger is attached), display adapter and resolution choice (minimum 800x450, the fullscreen mode list, borderless), and loading and saving the settings file (config.ini). Also checks a flag named auto_test (auto_test). | config.ini (in the user data folder named at 0x140f6c770+0x48); key ScreenMode (Window, FullScreen); auto_test | — | 0x14032ce60 | 15 functions, 4.1 KB |
| system/activity.cpp | Reports progress to a platform activity service: starts, ends and resumes named activities from a list of 11 (Activity_C1_tutorial ...; Activity_NONE, Invalid_ActivityId), under a mutex. | platform activity service (object at 0x140f6c778+0x98) | — | 0x14032ddc0 | 11 functions, 2.1 KB |
| system/savedatabase.cpp (save section helpers) | Bookkeeping for the save buffer at 0x140c9c280: begin and end each numbered section, and finish the file. Called by system/saveload.cpp and the title. | — | — | 0x140378f90 | 11 functions, 1.1 KB |
| System message dialog (unnamed) | A state machine that pauses the movie, looks up a text entry by ID, and shows a confirm window with sound. Called from TacosGame, the title and AttackTeamList, and registered in the effect manager's callback table; probably a system error or quit prompt. | — | — | 0x140314600 | 4 functions, 1 KB |
| Scene switcher and boot-time init (unnamed) | At startup loads ScreenShot/s2_data.dat, choosing between two value pairs from a table. Keeps an 8-entry stack of scene callbacks and switches the top-level game mode (worldmap, battle, title, TextSeq credits, Warren Report...) by scene ID. | — | ScreenShot/s2_data.dat (group 0x12c, file 0x4) at 0x140317600 | 0x140317850 | 10 functions, 1.3 KB |
| system/savedata.cpp and save/load helpers | Save-slot data: allocates 102 slot thumbnail buffers (0x19000 bytes each) and reads and writes the slot header with save-version checks (>=0x10000000). Also holds the save/load result message boxes used by SystemSaveWindow and SystemLoadWindow, plus a few small helpers for WorldmapManager and the screenshot code (0x140425ca0 range). | savethumb%d | save files (slot headers and thumbnails) | 0x140420dc0 | 42 functions, 6.6 KB |
battle/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| battle/battledata.cpp (BattleData) | Loads battle_data_release.dat and turns about 70 header offsets (0x08-0x164) into table pointers, rebasing the pointers inside some tables. About 70 accessors read rows by ID and fetch their names and descriptions from TextManager (0x1402b95d0). Also holds battle helpers such as an LCG random roll (0x1402d2e50) and a direction calculation (0x1402d2ee0). | — | battle/battle_data_release.dat (group 0x3e8, file 0x1, at 0x1402d4a30) | 0x1402d4a30 | 78 functions, 9.6 KB |
| battle/battlemanager.cpp + Taco::Application::BattleJobs | Runs battles: BattleJobs and the battle state jobs (BattleStateCompositeJob), plus BattleManager, which loads object files for the battle map. The source files BattleJob.h, BattleManager.h and Battle.h are referenced here. | — | object/ (group 0x14, at 0x1402eef20) | 0x1402ec9c0 | 87 functions, 11.8 KB |
| battle/entry.cpp | Probably loads a battle's entry file (unit placement and setup) and the objects it needs. The game-flow code calls it when a battle starts. | — | battle/entry/ (group 0x3e9, at 0x1402ef7b0, 0x1402ef910); object/ (groups 0x14 and 0x1e, at 0x1402efac0, 0x1402efd90) | 0x1402ef910 | 77 functions, 10.5 KB |
| PopUpBar (PopUpBarWindow, PopUpBarManager, NumStatusData) | Pop-up numbers and bars over units ('UnitNumPopup'), probably damage and HP changes in battle, plus nearby status windows (0x1402e91f0 calls WaitTurnListMenu and MenuSStatus). | — | — | 0x1402e77e0 | 31 functions, 10.7 KB |
| DropItemMenu | Probably the menu shown for items dropped in battle. | — | — | 0x1402eba90 | 9 functions, 2.3 KB |
| battle/army.cpp (party roster; name_detail::UnionNameConverter, UnitNameConverter) | The player's party: up to 105 member slots (0x7e0 bytes each) plus the party name (49 bytes, converted by UnionNameConverter). The save file reads and writes it in a version-checked format (0x81000103). It also prefetches unit sprites and faces into the sprite cache and the face cache. | save stream (section 0 of the save, written from 0x14032beb0) | object/ (groups 0x1e and 0x14, file ID = the unit's sprite ID) at 0x14031eeb0; battle/entry/ (group 0x3e9, file IDs 0x235 and 0x236) at 0x140320ad0 | 0x14031c150 | 129 functions, 23.7 KB |
| Taco::Application::UNIT | The battle unit object. Heavily used by BattleJobs, VfxJob, MenuSStatus, MAP_OBJECT, BattleGameOver and PERFORM_MOVE. vfunction10 (3.5 KB) is probably its per-frame update or state handler. | — | — | 0x14033e6c0 (UNIT::vfunction10) | 160 functions, 34.9 KB |
| Taco::Application::BattleMenuRoot | Root of the in-battle command menu. On open it gathers the battle globals and sets lock flags 4/0xc/0xd; its update reads the lock flags and battle state to decide whether the menu may act. | — | — | 0x1403460b0 (BattleMenuRoot::vfunction4) | 34 functions, 9.1 KB |
| battle/battle.cpp and battle object classes (OBJECT, MAP_OBJECT, DROP_ITEM, BattleStateJob, BattleStateJobDecorator, CommentJob, AiCommandJob, InitFlashbackATJob, LookUnitPosJob base functions) | Constructors and small virtual functions for the battle map object hierarchy (OBJECT, MAP_OBJECT, DROP_ITEM) and for several battle job classes. Includes one battle.cpp function that creates a menu window, and helpers called by MAP_OBJECT and VfxJob. | — | — | 0x14035d610 | 26 functions, 5.3 KB |
| Taco::Application::BattleJobs (about 100 job classes) | Battle turn flow as a tree of jobs. Covers user control (UserContorlMove/SelectRange/Action...), AI (AiThinkJob, AiMoveJob, AiActionJob...), AT and turn order (InitATJob, UpdateAllATUnitsJob, TurnEndJob...), buff cards and item pickups, Chariot Tarot rewind (FlashbackUnitUpdateATJob, SaveFortuneRingJob, TurnEndRewindJob), weather, and camera modes. | — | — | 0x140368cb0 (largest job function) | 214 functions, 60 KB |
| battle/fortuneringmanager.cpp (Chariot Tarot snapshots) | Allocates a 1.5 MB store (0x16f278 bytes) of up to 50 battle snapshots (0x73fc bytes each) linked as a tree, probably the Chariot Tarot turn-rewind history. Also has the code that writes it to and reads it from the save (save section 3, 0x14036e9b0). | save stream (section 3) | — | 0x14036e1a0 | 46 functions, 9.7 KB |
| battle/menu/battleresultmanager.cpp (BattleResultManager; BattleResult::ClearStage, Evaluation, Exp, UnitAddExpulsion and StageEnd sequences) | The end-of-battle results flow, run as a sequence of stages: clear, evaluation, experience, units joining or leaving, and stage end. | — | — | 0x140371100 (BattleResultManager::vfunction4) | 44 functions, 10.9 KB |
| Taco::Application::BattleGameOver | The game-over screen (layout mn_bt_gameover, MenuOpen and MenuClose animations). It is called from BattleJobs, event data, the worldmap and the attack team code, so it probably also routes the player to retry, load or the title. | — | — | 0x140373450 (BattleGameOver::vfunction4) | 68 functions, 16.4 KB |
| Battle AI planner (unnamed) | Battle AI thinking. AiThinkJob and UserTurnEndPrecedeThinkingJob call it (0x1402f55a0). It scans the 30 unit slots, scores move, target and action candidates against the AI tables, and writes the chosen command; the context lives at 0x140e90870. | — | — | 0x1402f55a0 | 23 functions, 10.3 KB |
| Camera control helpers (unnamed) | Camera state for the object at 0x140f22a80, driven by the effect manager: focus target, push and pop of camera locks, and panning when the mouse is near the screen edge (0x14032e350); probably the battle camera. | mouse position | — | 0x14032e580 | 11 functions, 2.3 KB |
| Item-by-level tables (unnamed) | Built when battle data loads (called from 0x1402d4a30): for 19 item categories it collects items by field +0x8e (category), sorts them by +0x60 (level), and fills a 51-level table of ratios from field +0x19. Probably used to pick or scale equipment by level. Also has stat-curve helpers. | — | battle/battle_data_release.dat (item table through 0x140d68290; table at 0x140d68400) | 0x1403788c0 | 8 functions, 2.3 KB |
| Taco::Application::MenuSStatus (battle unit status panel) + status helpers | MenuSStatus is a battle-side unit status window: it builds panes from btparts03%04d00, element icons, word%04d and levelsync_%04d_00 parts, with y_line_in/out and flash_loop animations. The same region holds unit status drawing helpers that Organize screens call (OrganizeClassList, OrganizeUnitList, OrganizeStatusArmsSkillList, OrganizeStatusCondition, ShopEmployClassStatusWindow), plus small helpers that the WT/AT and buff-card battle jobs call (0x140393e30, 7 fns). | — | — (only layout pane and animation names) | 0x14038fe40 (MenuSStatus::vfunction4) | 121 functions, 47.1 KB |
| Battle panel windows (PanelStatusMenuBGWindow, PanelStatusMenuWindow, StepMenuWindow) | Small battle menu windows that open and close a status panel (PanelOpen/PanelClose) and a step window on layout mn_bt_common. It also holds shared MenuWindowWrap construction helpers (0x140394290) that many menus call, among them BattleMenuRoot, MenuCommand, OrganizeUnitList, the shop sequences and WarrenReport::MasterControl. | — | — | 0x1403949c0 (PanelStatusMenuWindow::vfunction4) | 20 functions, 3.2 KB |
| Taco::Application::WaitTurnListMenu | The battle wait-turn (WT) order list. It is a MenuUnitListEventListener built on the MenuUnitList widget (mn_wt_list), and BattleMenuRoot opens it. | — | — | 0x140395720 (WaitTurnListMenu::vfunction4) | 22 functions, 3.9 KB |
| Taco::Application::BattleSystemMenu | Probably the in-battle system or touch-button menu: it loads layout mn_bt_touch_area and dispatches a selection callback that takes an unsigned short command ID. | — | — | 0x140396000 (BattleSystemMenu::vfunction4) | 2 functions, 1.5 KB |
| Taco::Application::OBJECT (map object base) + cursor/camera input helpers | Base class of UNIT, MAP_OBJECT, DROP_ITEM and EventObject: constructor, per-frame offset/shake update (0x1403a2ea0) and shared virtuals. The unnamed functions after it (0x1403a2e30, 52 fns) do sin/cos/atan2 math and read pad state, probably battle cursor and camera input (0x1403a7cc0, called by UserContorlSelectDirJob). 0x1403aab80 sets up a heap or block named "SaveData". | pad/input state globals (0x140ce1a20…) | — | 0x1403a2560 (OBJECT::OBJECT); update 0x1403a2ea0 | 68 functions, 33 KB |
| Battle state job framework (BattleStateCompositeJob, BattleStateQueueJob, BattleStateStackJob, BattleStateJobDecorator) | The generic job containers that run battle flow as composite, queued or stacked jobs. The run and push helpers at 0x1403ab5d0 are called by about 46 BattleJobs. The tail of the region (0x1403ab8b0 onward) is float/vertex code just before battle/panelrender.cpp, probably part of the panel renderer. | — | — | 0x1403ab3b0 (BattleStateStackJob::vfunction2) | 33 functions, 7.8 KB |
| battle/panelrender.cpp | Allocates the battle panel renderer object (source string Battle\PanelRender.cpp). Probably draws the tile panels (move or attack range) on the battle map. | — | — | 0x1403acbe0 | 1 functions, 0.7 KB |
| Taco::Application::BattleJobs (Application/Battle/BattleJob.h) | About 110 job classes that make up the battle turn flow: AT/WT updates, attack turns, user control (move, select range, direction, teleport), AI jobs (AiThink, AiMove, AiCommand), pickups (buff cards, treasure, drop items), turn-end checks, flashback (Chariot) variants, weather, camera and comment jobs. | — | — | 0x1403b5010 (AttackTurnJob); 0x1403b4860 (AiCommandJob::vfunction5) | 257 functions, 44.6 KB |
| Taco::Application::MAP_OBJECT + battle command checks | Starts with MAP_OBJECT virtuals, but most of its 318 functions are unnamed battle rules code that AiCommandJob, BattleActionThirdMenu, PERFORM_ACTION and VfxJob call. Examples: 0x1403c15c0 returns reason codes for whether a skill (type 3) or item (type 4) command is usable, and 0x1403c6450 computes an effect amount by effect type. Probably command usability, range/target and effect calculation. | — | probably battle/battle_data_release.dat tables, read through the global battle-data object at 0x140d68290 (loader 0x1402d4a30); skill table pointer 0x140d68348 | 0x1403b88f0 (MAP_OBJECT::vfunction10); rules: 0x1403c15c0 | 318 functions, 60.1 KB |
| AI squad objectives + AI think (AiSquadObjective, AiSquadRescueObjective, AiSquadFlankObjective, AiSquadDefaultObjective) | Squad AI objective classes, then 98 unnamed functions called by AiThinkJob, AiAfterMoveJob, UserTurnEndPrecedeThinkingJob, UpdateBattleFrontlineJob and code at 0x1402f5xxx. They sort candidates by a static priority table (0x14068d6c0) and evaluate actions. Probably AI target and action selection. | — | — (static priority table in the executable at 0x14068d6c0) | 0x1403ca750 (largest AI evaluation function, 7978 bytes) | 104 functions, 35 KB |
| Battle command list builders (unnamed) | Builds the entries of the battle command menus (skills, spells, items): each entry gets its name text, usability state and target preview. Called by BattleActionMenu, BattleActionSecondMenu, BattleActionThirdMenu, BattleCommandSub and BattleMenuRoot, and by SneakInRootJob. | text IDs via the text table (e.g. 0x1c3f) | — | 0x140421340 | 36 functions, 11.1 KB |
| Taco::Application::VfxJob and action resolution | Probably resolves a battle action against its targets: 0x140449570 uses a ~22 KB stack and checks each target unit, and the 7.8 KB 0x14044e9f0 is probably per-target result math. VfxJob plays the action's effect at a map tile. Called by BattleJobs (AfterActionJob, FlashbackNoEffectJob) and the UNIT code. | — | — | 0x140449570 | 95 functions, 43.3 KB |
| PERFORM, PERFORM_REACTION and battle-job helpers | Plays battle sequences: PERFORM_REACTION performs reactions (probably counters and similar), and the unnamed helpers serve BattleJobs (ActionProcJob, AfterActionJob, SearchDeadJob, UpdateBattleFrontlineJob) and PERFORM_MOVE. | — | — | 0x140454bf0 (PERFORM_REACTION::vfunction2) | 67 functions, 18 KB |
| Battle log and Chariot Tarot (FortuneRing) windows | Covers LogWindow, SCommandLogWindow, DetailButtonWindow, FortuneRingIconsMenu and FortuneRingTreeMenu. These are probably the in-battle action log and the Chariot Tarot (turn rewind) tree and icon UI; both log windows load the mn_bt_fortune layout. | layout mn_bt_fortune | — | 0x14045a170 (LogWindow::vfunction4) | 35 functions, 13.4 KB |
| Battle HUD menus | Covers LineStringMenu, CameraControlMenuMenuWindow, InterventionMenuWindow, MenuWeather, MapStatusMenu, SneakInMenu, ContextMenu, ElementMenu and SElementMenu. These are the in-battle overlay menus: camera control, intervention prompt, weather, map status, element display and the main battle context menu (mn_bt_main). | layouts mnbt_main; anims interrupt_in/interrupt_out; icon com_parts00_element_64%04d_00 | — | 0x14045ee60 (ContextMenu) | 95 functions, 16.9 KB |
| BattleMenuRoot helpers (unnamed) | Small out-of-line helpers called almost entirely from BattleMenuRoot code (0x140349xxx-0x14034fxxx), plus a few from BattleJobs and VfxJob. They probably query unit or command state for the battle menu. | — | — | 0x14046c390 | 42 functions, 6.6 KB |
| Taco::Application::BattleActionHeader | The header window that shows the name of the action being performed in battle. | layout mn_battle_action_header | — | 0x14046cf60 | 2 functions, 0.8 KB |
| battle/panelmisc.cpp and battle map helpers | Holds PanelMisc's per-panel buffer allocator (1 KB per map panel) and large unnamed helpers that walk the battle's units to build panel/range and target sets (0x140471680). The start of the range also has BattleActionHeader text helpers. Mostly called by BattleJobs, MAP_OBJECT, VfxJob and the battle command menus. | — | — | 0x140471680 | 214 functions, 32.7 KB |
| Taco::Application::DROP_ITEM | Items dropped on the battle map (treasure that units leave behind) and picking them up. Used by BattleJobs, PERFORM_FIND and PERFORM_DEAD. | — | — | 0x140476c80 (DROP_ITEM::vfunction11) | 30 functions, 8.6 KB |
| Battle action record accessors (unnamed) | Many small getters and setters on a battle action/turn record. They are called by BattleJobs, battle/fortuneringmanager.cpp, VfxJob and FortuneRingTreeMenu, so the record is probably what the Chariot turn history stores. | — | — | 0x140478490 | 53 functions, 6.2 KB |
| Taco::Application::BattleResult::* result menus | The after-battle result screens: total EXP, EXP, EXP-boost items, dropped items, skills learned and bonus. They are built by 0x140372c90 and driven by the EvaluationStageSequence and ExpStageSequence classes. | layouts mn_bt_result_total_exp, mn_bt_result_exp, mn_bt_result_bonus, mn_bt_result_item, mn_bt_result_skill | — | 0x14047c2b0 (BonusResultMenu::vfunction5) | 88 functions, 28 KB |
| PERFORM_FIND, PerformFindJob, PERFORM_ANIM and helpers | Plays the find sequence (searching for and finding a hidden or dropped item) and unit animation sequences. The unnamed helpers are called by BattleJobs code around 0x1403bxxxx and 0x1403cxxxx. | — | — | 0x140484ab0 (PERFORM_FIND::vfunction2) | 40 functions, 8 KB |
| PERFORM_* (battle unit performances) | Unit performance steps that battle code queues: PERFORM_IDLE, MOVE, ACTION, LINE_MOVE, TELEPORT_MOVE, FADE and DEAD. All are subclasses of Taco::Application::PERFORM (RTTI also lists ANIM, REACTION and FIND). They probably drive a unit's movement, attack and death animations on the field. | — | — | 0x1404cd5c0 (PERFORM_ACTION::vfunction3) | 34 functions, 16.6 KB |
| FortuneRing* (FortuneRingUnit, IconLine, IconsMenu, TreeMenu, TreeScroll) | Battle menus on layout mn_bt_fortune that show a scrollable tree or ring of entries with unit icons. RTTI has a battle job named SaveFortuneRingJob, so this is probably the Chariot Tarot (turn rewind) history view. | menu layout mn_bt_fortune | — | 0x1404d1a40 (FortuneRingTreeMenu::vfunction4) | 42 functions, 20.1 KB |
| BattleCommandMain + BattleCommandSub | The battle command menu shown on a unit's turn (main list and sub list), built on MenuCommandPanel and closed with a MenuFadeOut animation. | MenuFadeOut animation | — | 0x1404d9b50 (BattleCommandMain::BattleCommandMain) | 44 functions, 19.2 KB |
| BattleActionMenu, BattleActionSecondMenu, ThirdMenu, FourthMenu + ContextReturnMenu | Nested battle action selection menus, four levels deep, probably for picking an action, then a skill or spell, then its target or option, plus a small context 'return' menu. | MenuFadeOut animation | — | 0x1404dbea0 (BattleActionMenu::BattleActionMenu) | 76 functions, 25.7 KB |
| MenuBtMerits | Battle window on layout mn_bt_merits with AtStart/AtStart01/AtStart02 animations. It fills a list of text rows and values from game text IDs (0x1fdd, 0x20a6), probably the battle's merit or bonus conditions shown when a battle starts. | menu layout mn_bt_merits | — | 0x1404f39e0 (MenuBtMerits::vfunction4) | 8 functions, 4.4 KB |
unit/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| unit/unitimage.cpp + unit sprite renderer | Unit sprite images: allocates large image buffers (0x1402e54c0) and draws cell-animated 2D sprites part by part, with flips and UVs (0x1402e0ce0). UNIT and MAP_OBJECT call it. | — | — (textures through menuresource) | 0x1402e54c0 | 66 functions, 21.4 KB |
| unit/weapon.cpp | Probably weapon image objects for units: double-buffered image slots and setters. | — | — | 0x1402e6500 | 17 functions, 1.3 KB |
| Unit lookup by ID (unnamed) | Probably looks up unit and character data by unit ID (ID/1000 picks the category) in a 0x2a178-byte singleton. MenuSStatus, name_detail (UnitNameConverter) and MAP_OBJECT use it. | — | — | 0x1402e6ab0 | 18 functions, 3 KB |
| unit/face.cpp (face cache) | Cache of unit portraits: 105 slots of raw face data (0x28000 bytes each) and two double-buffered decode slots (0x48000 bytes). It decodes faces into textures, optionally tinted through the CLUT helpers, and counts references to them. Army fills it. | — | — (face data comes from battle/entry/ files that battle/army.cpp opens) | 0x1402f2210 | 9 functions, 2.7 KB |
| Unit record and item, class and skill accessors (unnamed) | Code for the per-unit record (class, level, equipment, skills, stats): reads and writes it in the save (0x14032f910, version-checked), builds it from a template row (0x1403359e0), and provides hundreds of small getters. Item-ID helpers split IDs by thousands into categories. Called by almost every menu, shop, battle and organize system. | save stream | battle/battle_data_release.dat tables through the battle data object at 0x140d68290 (table pointers 0x140d68280-0x140d68428) | 0x14032f910 | 245 functions, 34.1 KB |
| Party, class and roster helpers (unnamed) | Helpers used by organize, shops (blend, employ), the worldmap, auction and TopMenu code. Among them: building a list of up to 80 class entries from the class table (field +0xa8) and other party and class queries. | — | battle data table at 0x140d68338 (probably the class table) | 0x140348900 | 39 functions, 10.5 KB |
| Unit/party data helpers (name_detail::UnitNameConverter, UnionNameConverter) | Converts unit names and union (clan) names to IDs and back (union names are text IDs 0x4a6b-0x4a79). Also holds version-gated stream read/write helpers (the format changes above version 0x81000068), probably for save (de)serializing unit data. Callers are the party/unit code at 0x14031xxxx and 0x1403bcxxx, plus ItemUpgradeSequence. | — | unit name table through the battle-data object 0x140d68290 (probably battle/battle_data_release.dat); text via 0x1402bc2a0 | 0x140385c80 (UnitNameConverter::vfunction1) | 50 functions, 9.2 KB |
| Unit record and game-state helpers (regions label: name_detail) | Mixed, unnamed game-data code with no strings. It reads and writes unit records (0x46c bytes, with save-version checks 0x81000020-0x81000088 and per-language unit names), has std::sort instantiations and a key=value text parser that skips // comments (0x1404458f0). It also holds an ICF-folded sprintf_s used by SQEX sound code. | — | save data (unit records) | 0x140440070 | 217 functions, 45.8 KB |
event/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| event/eventobject.cpp (EventObject, EventUnit, OBJECT base) | Event actors: up to 78 event objects or units (0x130 bytes each) placed on the map from an event table, with their sprites, positions and flags. Many menus and BattleJobs call into it. | — | event table at 0x140d68210 (row stride from its header); event data object at 0x140d68120 | 0x1403235e0 | 145 functions, 28.7 KB |
| event/eventdata.cpp | Loads and indexes event data: the chapter-level event file and per-scene files. It relocates their tables and looks entries up by type (eight ID bases: 0x8000, 0x10000, 0x50000...). It also builds event text strings, joining parts with the separator bytes EF A3 BF 86. The largest code in this range (45 KB). | — | event/ (group 0x384, file ID = n+9) at 0x140350600; group 0x384+n (file ID from the scene record, probably event/chapter or event/scene) at 0x140350940; group 0x384 file 0x14 through 0x1402bdc60 at 0x1403504a0 | 0x140350600 | 236 functions, 45.3 KB |
| Taco::Application::CinemaScopeWindow | Letterbox (cinema-scope) bars for event scenes, plus 8 helper functions that call the effect manager and bg manager during events. | — | — | 0x14035c2a0 (CinemaScopeWindow::vfunction4) | 28 functions, 3.3 KB |
| Taco::Application::EventPause | The pause menu shown during events (layout mn_event). | — | — | 0x14035c780 (EventPause::vfunction4) | 8 functions, 2.3 KB |
| Script VM (bytecode interpreter, unnamed) | A stack-based bytecode interpreter: an opcode switch in a 12 KB function with a 0x10000-step limit, and a 63-slot value stack of typed int and float values. Script contexts (0x148 bytes each at 0x140f2ca90) load modules and apply relocations (0x14034e9d0). About 240 command functions near 0x1404eb500 pop their arguments through 0x14034e220. It runs the event scripts: Event scripts. | — | script modules (source file not identified) | 0x14034a1b0 | 52 functions, 21.3 KB |
| event/message/messagewindow.cpp (MessageWindow, BattleMessageWindow, CommonMessageWindow, ShopMessageWindow, MessageWindowLayoutInitializer) | Dialogue and message windows for events, battle comments (PERFORMACTION, PERFORM_DEAD and PERFORM_REACTION, CommentJob) and shop talk. It handles layout setup, open/close and the speech-bubble tails (hige_up%02d, higedown%02d). | — | — | 0x1403d3e30 (MessageWindow::vfunction4) | 106 functions, 25.8 KB |
| Event script command handlers (unnamed) | About 300 small handlers, one per script command. Each pops its arguments from a typed int/float VM stack (pop 0x14034e220, push 0x14034e2b0) and calls the event object manager (DAT_140d5c9b0, event/eventobject.cpp), event data objects (DAT_140d517a0, DAT_140d518b0, event/eventdata.cpp) or the event effect slots (DAT_140d51ec0; the CinemaScopeWindow itself is at 0x140f2d288). They are the event script natives, dispatched through the table at 0x140c9ff80: Natives. | — | — (event/ scripts are loaded elsewhere) | 0x1404eb500 (first handler); VM stack pop 0x14034e220 | 308 functions, 28.6 KB |
worldmap/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| worldmap/object/worldmapobject.cpp | Worldmap data and objects: loads Worldmap.dat and per-map worldmap files into WorldmapMemory and answers location and route queries. MinimapMenu, WorldmapMenu, WorldmapManager, the cursor, camera and route objects use it. | — | worldmap/Worldmap.dat (group 0x320, file 0x0) at 0x14031ac80; worldmap/ (group 0x352, any file) at 0x14031ae40 | 0x14031ac80 | 88 functions, 14.9 KB |
| Taco::Application::WorldmapManager + WorldmapSub | Runs the world map screen. Its update state machine (0x1403e5d50) triggers the world map data loads and its update (vfunction4) starts the Warren Report loads; it also draws through Mx::Graphics command contexts. MinimapMenu, WorldmapMenu and the shop sequences call into it. | — | worldmap/Worldmap.dat and worldmap/ (45 files) via 0x14031ac80/0x14031ae40; WarrenReport/WarrenReport.dat and WarrenReport/WarrenReportText.dat via 0x140488530/0x14048adf0 | 0x1403e5520 (WorldmapManager::vfunction4); state machine 0x1403e5d50 | 64 functions, 21.8 KB |
| Taco::Application::WorldmapCursor | The world-map cursor and the location UI tied to it. | layout mn_world | — | 0x140432ff0 (WorldmapCursor::vfunction1) | 30 functions, 7.5 KB |
| Worldmap scene objects | The world map's scene objects, with constructors, updates and draws: WorldmapModelObject, WorldmapMainModelObject, WorldmapMemory, BasePointObject, WorldmapImageObject, WorldmapSpriteObject, WorldmapActorObject, WorldmapBasePointObject, WorldmapCursorObject, WorldmapRouteObject, WorldmapSelectArrowObject, WorldmapCharacterObject and WorldmapCameraObject. | — | — | 0x140436340 (WorldmapBasePointObject::vfunction5) | 81 functions, 24.1 KB |
| Minimap objects and object layers | MinimapBasePointObject, MinimapShadowObject and the BasePointObjectLayer, RouteObjectLayer and WorldmapObjectLayer layers that hold world and minimap objects. | — | — | 0x14043c9d0 (WorldmapObjectLayer::vfunction7) | 41 functions, 7.8 KB |
| WorldmapMenu, MinimapMenu, WorldMapPopMenu, MenuWarFund | World-map menus: the main world-map menu, the minimap menu, location pop-up menus, and the war-funds (money) window. The war-funds window is also used by shops and TopMenuSequence. | anims TextFadeIn/TextFadeOut | — | 0x14048ca10 (WorldmapMenu::vfunction4) | 45 functions, 17.6 KB |
worldmap/menu/ (shop)
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| worldmap/menu/shopmenu.cpp (ShopMenu, ShopCommon, ShopPriceWindow, ShopCommandBGWindow, ShopBlendSelectWindow, ShopBlendWeaponSelectWindow, ShopEmploy* windows) | The town shop: buy and sell, item blending (crafting), and hiring units (pick alignment, element and class), with shared helpers that the Auction, TopMenu, Employ, ItemUpgrade and ItemBlend sequences use. It loads its menu sequence files on open. | — | menu/sequence/shop_owner_smoke.dat (0x1f4/0x280b) and menu/sequence/shop_item_blend_tubo.dat (0x1f4/0x280c), plus 4 more menu/ files with computed IDs, all at 0x14030c300 | 0x14030d0c0 (ShopMenu::vfunction4) | 89 functions, 16.2 KB |
| Shop windows (MoneyWindow, ShopSellOldCoinsWindow, ShopBlendSelectWindow, ShopBlendWeaponSelectWindow, ShopCommandBGWindow, ShopEmployAlignSelectWindow, ShopEmployClassSelectWindow, ShopEmployClassStatusWindow, ShopEmployElementSelectWindow, ShopPriceWindow) | The shop's sub-windows: money and price display, selling old coins, crafting (blend) material and weapon selection, and the recruit (employ) flow that picks class, alignment, element and gender. Includes a UnitNameConverter instance (0x1403fa470), probably for naming recruits, and 65 unnamed pane-setup helpers (0x1403fe190). | — | — | 0x1403fc760 (ShopEmployClassSelectWindow::vfunction4) | 103 functions, 24.6 KB |
| Taco::Application::ShopCommon | Shared shop list screen logic: item lists by body category, item icons, unit faces and sub-category handling. | — | — | 0x140401c40 (ShopCommon::vfunction4) | 77 functions, 23 KB |
| Item upgrade windows (InfoPreviewWindow, SelectArmsWindow) | Preview and weapon-selection windows for the item upgrade shop (mn_shop_upgrade), with race, element and attack-type icons. ItemUpgradeSequence drives them. | — | — | 0x140405f70 (InfoPreviewWindow::vfunction4) | 30 functions, 7.8 KB |
| Shop sequences (ShopPopMenu, TopMenuSequence, BuyListMenuSequence, SellMenuSequence, EmployMenuSequence, ItemBlendSequence, ItemUpgradeSequence, AuctionSequence, OrganizeSequence, DebugSequence) | State machines for each shop mode: the top menu, buy, sell, recruit, crafting (blend), upgrade and auction, plus a jump into organize and a debug sequence no shop offers (The shop's debug sequence). They open shop message windows and money windows. | — | — | 0x14040e430 (TopMenuSequence::vfunction6) | 79 functions, 28.2 KB |
| Taco::Application::ShopBuySell | The shop's buy and sell screen. | icon item_icon_0999_00 | — | 0x14049a770 | 22 functions, 7.2 KB |
| ShopBlendInput, ShopBlendItemInfo | The crafting (blend) screens: choosing quantities and showing the info of the item to be crafted. | face comunit_face%s_%02d; anim FadeFrame | — | 0x14049dde0 (ShopBlendItemInfo ctor) | 50 functions, 16.8 KB |
organize/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| organize/menu/organizesortmenu.cpp (OrganizeSort, OrganizeSortItemDragDrop) | The organize screen's sort dialog and drag-and-drop reordering of units and items (layout mn_organize_dialogs). | mouse drag | — | 0x1403388b0 (OrganizeSort::vfunction4) | 33 functions, 7.3 KB |
| organize/attackteam.cpp | Attack-team (battle deployment) setup: resets the team state, clears the sprite and face caches, builds the list of units that can deploy, and loads a menu file in the background. Called from AttackTeamTop and AttackTeamList. | game language (0x14026ca60) | one menu/ file (group 0x1f4, file ID = mode*8 + language - 0x3cb0) at 0x1403780d0 | 0x1403782d0 | 26 functions, 3.3 KB |
| Taco::Application::OrganizeFade | Fade overlay for the organize unit-detail screens (mn_organize_unit_detail). The helpers that follow (0x1403d8fe0) are called by OrganizeTop, OrganizeUnitList, OrganizeClassList, OrganizeUnitDetail and MenuConfirmWindow. | — | — | 0x1403d8da0 (OrganizeFade::vfunction4) | 11 functions, 1.8 KB |
| Taco::Application::OrganizeItemInfo | Item and unit info panel for organize and shop (mn_organize_unit_detail_lists, mn_shop2). It draws class info, race, element and attack-type icons, unit faces, area icons and the key guide. | — | — | 0x1403f2420 (OrganizeItemInfo::vfunction4) | 71 functions, 34.7 KB |
| OrganizeTop, OrganizeUnionName, OrganizeBG, OrganizeFoundation, OrganizeKeySignal | The top level of the Organize (party) screen and its background, base, key-input and union-name parts. | layouts mn_organize_class_list, mn_organize_unit_list, mn_organize_unit_detail | — | 0x140460b80 (OrganizeTop::vfunction1) | 23 functions, 5.6 KB |
| Inventory and item helpers (unnamed) | Queries and changes the party inventory (global 0x140ed3960): counting, adding and removing items and checking which items the current shop stocks (shop_stock, pointer 0x140ce4a80, and auction_stock). Item ID 1999 is handled as a special 'all' case. Shared by Organize, shop, crafting, auction and sortie screens. | — | menu/menu_data.dat #26 and #29 (shop stock) |
0x140461fb0 | 115 functions, 28.2 KB |
| Organize shared UI helpers (UnionNameConverter) | Shared helpers for unit and item list UIs (equipment-part and body-category icons, name conversion). Called by OrganizeEquipSelectDialog, OrganizeUnitDetail, AttackTeamList, shop screens and class change. | icons btparts02%04d00, body_category%04d_00 | — | 0x140469bb0 (UnionNameConverter) | 29 functions, 6.6 KB |
| AttackTeamTop, AttackTeamList (sortie screen) | The pre-battle sortie screen where the player picks which units deploy. RTTI shows team panels, a unit-drag control, reserved units, the map name, filter and context menus. | icon orgicon00_element_s%04d_00; anims HighlightFrameOpen/Close | — | 0x140493be0 (AttackTeamList::vfunction4) | 125 functions, 31.4 KB |
| OrganizeStatusCondition, OrganizeStatusEquipArms, OrganizeStatusBuffCardList | Pages of the unit status screen: conditions and buff cards, and equipped arms. Called from OrganizeUnitDetail::MenuMediator. | layout mn_organize_unit_detail | — | 0x140482d30 | 57 functions, 14 KB |
| OrganizeUnitList | The Organize screen's unit list (layout mn_organize_unit_list), with element icons per unit. | menu layout mnorganize_unit_list; sprites org_icon00_element_s%04d_00 | — | 0x1404df920 | 43 functions, 16.4 KB |
| organize/menu/organizeunitdetailmenu.cpp (OrganizeUnitDetail, MenuMediator, ContextMenu, FocusJumpMediator, OrganizeMenuCommand) | The unit detail screen in Organize (layout mn_organize_unit_detail): its window, command list, context menu, focus moves between panels, and the arms highlight filter. Also holds OrganizeStatusFace::vfunction1 and three small unlabeled helpers. | menu layout mn_organize_unit_detail; animations HighlightFilterOpen/Close; org_highlight_filter_arms | — | 0x1404e34b0 (OrganizeUnitDetail::OrganizeUnitDetail) | 129 functions, 32.3 KB |
| OrganizeClassList | List of classes with per-class unit sprites (layout mn_organize_class_list), probably for filtering or browsing units by class. | menu layout mn_organize_class_list; sprites com_class00_unit%04d_00 | — | 0x1404e9700 | 21 functions, 7.1 KB |
| OrganizeStatusEquip* (Arms, Item, Magic, Skill, Finisher) + equip-slot helpers | Unit-detail panels that list a unit's equipment, items, spells, skills and finishers. The helpers at 0x1404eaf80-0x1404eb4ff read each slot group: group 0 has 7 equipment slots, groups 1-3 have 4 slots each, group 4 has 8 slots. | menu layout mnorganize_unit_detail; sprites body_category%04d_00 | — | 0x140523250 (OrganizeStatusEquipArms); slot reader 0x1404eb1a0 | 73 functions, 16.2 KB |
| OrganizeEquipSelectDialog + OrganizeNumInput, OrganizeSortParamContextMenu, OrgEquipContextMenu, OrgEquipSlctDlgContextMenu | Dialog for choosing equipment for a slot (layouts mn_organize_dialogs and mn_organize_unit_detail_lists). It shows body-category sprites and stat-change effects (param_effect), and has sort-by-parameter, context menus and a number-input dialog. | menu layouts mn_organize_dialogs, mn_organize_unit_detail_lists | — | 0x14051a840 (OrganizeEquipSelectDialog::OrganizeEquipSelectDialog) | 133 functions, 30.2 KB |
| OrganizeClassChange | The class change screen in unit detail: a class list with unit sprites and an open/close window. | menu layout mn_organize_unit_detail; animations WindowOpen/WindowClose; sprites com_class00_unit%04d_00 | — | 0x140520cf0 | 25 functions, 8.2 KB |
| OrganizeStatusParam, VariousInfo, name_detail, BuffCardList, ArmsSkillList, Face; OrganizeWarning | Unit status panels: parameters with stat-change and level/EXP popup effects, various info, the name header (name, class, level, element, union name through name_detail::UnionNameConverter), buff card list, weapon skill list, face, and a desertion warning. | menu layout mnorganize_unit_detail; parts org_param_icon_01/02, org_parts00_nlc%04d00, word%04d_%02d, org_word_desertion! | — | 0x140526f90 (OrganizeStatusParam::vfunction1); name header 0x14052ab80 | 64 functions, 30.1 KB |
| OrganizeCharm + OrganizeCharmUseSequence | Using charm items on a unit and the sequence that plays afterwards. The popup names (PopupLvAndSkillCharm, grp_level_skill) suggest these charms raise a unit's level or skills. | menu layout mn_organize_unit_detail; animations WindowOpen/WindowClose | — | 0x14052e990 (OrganizeCharm::vfunction1) | 37 functions, 9.1 KB |
| OrganizeItemMenu + OrganizeItemListMenu + OrganizeItemListDragDrop | Item screen in Organize: an item list with body-category sprites and drag-and-drop of items. | menu layout mnorganize_unit_detail_lists; sprites body_category%04d_00 | — | 0x140531dd0 (OrganizeItemMenu::OrganizeItemMenu) | 96 functions, 27.7 KB |
| AttackTeam* (Panel, PanelUnit, DragUnit, ReservedUnit, Cursor, PanelCursor, BG, FG, MapName, Number, ButtonWindow, SelectButtonWindow, FilterSubMenu, ContextMenu) | Attack team formation screen: numbered team panels with a map name, guest backgrounds, drag-and-drop unit panels, reserved units, a filter submenu and a context menu. It is driven by AttackTeamList and AttackTeamTop elsewhere and is also called from OrganizeUnitList and the Warren Report. | parts at_guest_bg01/02, at_org_panel_0/2; animations MapNameOpen/MapNameClose | — (images through file/cacheslot.cpp) | 0x1404fcae0 (AttackTeamPanel::vfunction4) | 177 functions, 48.4 KB |
menu/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| menu/menuobject.cpp and Taco::Framework::Menu*DrawObject (Button, Gauge, Group, Image, List, Num, Text) and text_pane_extension | Builds a menu screen's draw objects from a layout record (group, image, text, number, gauge and list entries, counted by a short at its start) and draws each kind: gauges, images, numbers and text panes. The region also holds container helpers used by the menu code. | — | — (layout records come from the caller via FUN_140270ce0; probably menu/ layout files) | 0x14025eb00 | 45 functions, 13.4 KB |
| Menu draw objects (menu/menuobject.cpp; MenuDrawObject, MenuGauge/Group/Image/List/Num/TextDrawObject, text_pane_extension) | The drawable pieces of every menu: text, numbers, gauges, images, lists and groups, bound to bl::lyt layout panes. 0x140265d70 is a factory that builds each type. Most of the code is unnamed helpers that look up children and set values; nearly every menu screen calls them. | — | — | 0x140265d70 | 253 functions, 41.2 KB |
| menu/menuresource.cpp | Loads and manages menu resources: layouts (MN_COMMON, MN_BT_MAIN, MN_WORLD, MN_ORGANIZE, MN_STATUS and others), common textures, parts and font sets, and looks up textures by name (strings _aura, _mask, bt_parts). | Layout names MN_BT_RESULT, MN_WORLD, MN_OPTION, MN_BT_MAIN, MN_ORGANIZE, MN_EVENT, MN_COMMON, MN_STATUS, MN_COMMONWIN, MN_ITEMICON, MN_INPUT | menu/menu_layout.dat (0x1402725d0); menu/menu_parts.dat, menu/texture_x4/tex_common_x4.dat, menu/fontset/fontset.dat (0x140271250); other menu/ files (0x140271250, 0x140272450) | 0x140271250 | 168 functions, 28.4 KB |
| menu/menuwindow.cpp (MenuWindow, MenuWindowWrap, LytGlobalEventHandler, MenuUtil) | The menu window framework: window open and close (MenuWindowOpen and MenuWindowClose animations), active state (MenuUtil::UpdateActiveState), and layout event handling that probably plays menu sounds (0x1402741d0 calls SoundManager). | — | — | 0x140276700 | 142 functions, 32.1 KB |
| MenuListTable / scrolling list control (MenuObject) | Scrolling list and grid menus: cursor index, rows and columns, ScrollPane scrolling, and the scroll-edge fade quads (scaled from a 1920x1080 base). Used by WarrenReport, shops, MenuCommandPanel and organize lists. | — | — | 0x140280e40 | 68 functions, 26.9 KB |
| Taco::Framework::MenuCursor | The menu cursor object, built on a MenuWindowWrap. | — | — | 0x14028e1e0 | 19 functions, 4.2 KB |
| menu/menudata.cpp | Loads the menu data tables, the class-change sequence and the class face data. | SYSTEM_DIALOGUE_SHOP text key | menu/menu_data.dat and menu/sequence/classchange.dat (0x1402bc560); menu/menu_classface.dat (0x1402bd080) | 0x1402bc560 | 50 functions, 10.3 KB |
| MenuHelp | The help window: help icons (comparts00_com_parts00_helpicon%d) and scrolling help text (HelpScrollStart, HelpScrollEnd, HelpScrollReset). EventPause, MenuCommandPanel and name input use it. | — | — | 0x1402ea300 | 36 functions, 5.6 KB |
| Taco::Framework::MenuMouseCursor | The on-screen mouse cursor for menus (layout mn_mouse_cursor): position, animation and drawing. | mouse input | — | 0x1402f4400 (MenuMouseCursor::vfunction4) | 18 functions, 4.7 KB |
| MenuIcon and MenuGaugeIcon (unit gauges, buff and arrow icons, item icons) | Small icon widgets. Covers the HP-style unit gauges over units (btchr_gauge_base_00, cover, bt_chr_gauge%04d00), the buff icon bt_chr_buff_01, the AtArrowAnim01 arrows, and item icons (mn_itemicon, item_icon%04d_%02d). Used by UNIT and the battle command menus. | — | — | 0x1402f8120 (MenuGaugeIcon::vfunction4) | 27 functions, 2.3 KB |
| Taco::Application::MenuSystemButton | System buttons in menus, including a speed toggle (pane speed_on), with std::function click handlers. | — | — | 0x1402f8de0 (MenuSystemButton::vfunction4) | 34 functions, 4.6 KB |
| menu/menuconfirm.cpp (MenuConfirmWindow, MenuConfirmListener) | The shared yes/no confirmation dialog (layout mn_commonwin_confirm). Its helpers at 0x1402f9ba0 are called from save/load, the title, shops, events, the options screen and name input. | — | — | 0x1402f9ea0 (MenuConfirmWindow::vfunction4) | 36 functions, 11 KB |
| Taco::Application::MenuInformation | A general information message window. | — | — | 0x1402fc800 (MenuInformation::vfunction4) | 6 functions, 1.7 KB |
| menu/menunameinput.cpp (MenuNameInput, MenuNameInputWindow, name_detail::UnionNameConverter) | Text entry for unit and party names (layout mn_input2), with a character grid, the help panel and the confirm dialog. Opens akw/akw.dat when it starts, probably a word list used to check names. The string "Flamescale" appears in its code. | keyboard and pad text input | akw/akw.dat (group 0x2774, file 0x1) at 0x1402fe530 | 0x1402fe530 (MenuNameInput::vfunction4) | 80 functions, 28.4 KB |
| Taco::Application::MenuOptionWindow | The options / settings screen (GrpSettingFadeIn and GrpSettingFadeOut animations, "%s %d" value labels). It calls the config.ini code at 0x14032d070, probably to apply and save settings. | config.ini (through 0x14032d070), probably | — | 0x140305970 (MenuOptionWindow::vfunction4) | 54 functions, 21.2 KB |
| Taco::Application::MenuNoticeWindow | A slide-in notice banner with an icon (layout mnnotice, notice_icon%04d_00, MenuSlideIn and MenuSlideOut). Its helpers are used by shops, the worldmap pop-up menu, organize item menus, event pause and TextSeq. | — | — | 0x140309a10 (MenuNoticeWindow::vfunction4) | 16 functions, 4.6 KB |
| MenuSelectHelp, MenuSelectHelpIcon and MenuSelectHelpText | The help panel that shows an icon and a text line for the highlighted menu entry (comparts00_select_icon%04d_00). | — | — | 0x14030fe60 (MenuSelectHelp::vfunction4) | 25 functions, 6.7 KB |
| Taco::Application::MenuLoadingIcon | The loading indicator (layout mn_loading_icon, Start animation). | — | — | 0x140317200 (MenuLoadingIcon::vfunction4) | 4 functions, 1 KB |
| menu/saveload/* (MenuSaveLoadManager plus the Suspend, Auto, Continue, Error and System managers; SuspendSaveWindow, AutoSaveWindow, ContinueWindow, SystemLoadWindow, SystemSaveWindow; menusaveloadresource.cpp) | Save and load screens and their flows: manual, suspend, auto and continue saves, system data, and error prompts. They call system/saveload.cpp and the thumbnail code. | save slots, through system/saveload.cpp | — (SaveThumb/common/SaveCommon.dat is opened elsewhere, at 0x14041f000) | 0x1403149a0 | 64 functions, 9.5 KB |
| HUD message overlay and message parameter builders (unnamed) | A fading HUD message image guarded by a semaphore named HUDMessageSema; it counts down from 180 frames. Also builders for message-window parameter blocks (32 entries), and a function that copies 15 values from a table global at 0x140ce4ae0 into settings globals. Callers include the title, BattleJobs, CinemaScopeWindow and VfxJob. | — | table at 0x140ce4ae0 (unknown source file) | 0x140310e90 | 28 functions, 3.1 KB |
| Taco::Application::MenuFilter | A menu window with WindowOpen, WindowOpenSlow, WindowOpenAccent and WindowClose animations. Probably the list filter or sort popup. | — | — | 0x1403d8870 (MenuFilter::vfunction4) | 8 functions, 2.1 KB |
| Taco::Application::MenuCommand | The generic command-list menu (layout mn_command) with CommandOpen/Close/Slow and TextFadeOut animations. OrganizeMenuCommand derives from it. | — | — | 0x1403dadb0 (MenuCommand::vfunction4) | 82 functions, 17.3 KB |
| Context menus (Taco::Framework::MenuContextMenu, NameinputContextMenu, OrgEquipContextMenu, ContextReturnMenu, OrganizeUnitDetailContextMenu, Taco::Framework::ImeDialog) | The framework popup context menu (layout mn_command_menu, MenuFadeIn/Out) and its small subclasses for name input, equipment, unit detail and return, plus the IME text-input dialog stub. | IME dialog (platform text input) | — | 0x1403e8610 (MenuContextMenu::vfunction4) | 85 functions, 18 KB |
| menu/menusubcategory.cpp (MenuSubCategory) | Sub-category list window (mn_sub_category_list, OptionOpen/OptionClose) whose items are MenuSubCategoryItemWork. MenuOptionWindow, ShopCommon, OrganizeItemMenu and OrganizeEquipSelectDialog use it. | — | — | 0x1403deb10 (MenuSubCategory::vfunction4) | 41 functions, 7.6 KB |
| Taco::Application::MenuKeyConfig | The key or button configuration screen (GrpConfigFadeIn/Out), with callbacks that take a key index (short or unsigned short). | probably the button bindings (no setting strings found) | — | 0x1403dff80 (MenuKeyConfig::MenuKeyConfig) | 37 functions, 7.9 KB |
| MenuSaveLoad (MenuSaveLoadWindow, MenuSaveLoadBackground, MenuSaveLoadProgressIcon) | The save and load slot screen (layout mnsave_load). It formats each slot's date and time in regional formats (%d/%02d/%02d, %02d.%02d.%d, %02d:%02d), shows save_thumb%d thumbnails and the saving progress icon (mn_save_load_progress_icon, SaveIconOpen/Update/Close). Related classes are SuspendSaveWindow, AutoSaveWindow, ContinueWindow and SystemWindow. | save slots (via the save system) | — | 0x1404184b0 (MenuSaveLoadWindow::vfunction4) | 89 functions, 33 KB |
| menu/menuunitlist.cpp (MenuUnitList, MenuUnitListParam, MenuUnitCursor) | Scrolling unit list widget (mn_wt_list, mn_wt_list_cursor, AtArrowAnim01) used by WaitTurnListMenu, OrganizeTop, OrganizeClassChange, AttackTeamList, ShopMenu and ItemBlendSequence. | — | — | 0x1403ede40 (MenuUnitListParam::vfunction4) | 73 functions, 14.5 KB |
| Taco::Application::MenuSelectHelpText | Help-text line window shown with MenuSelectHelp. | — | — | 0x14040f350 (MenuSelectHelpText::vfunction4) | 5 functions, 1.2 KB |
| menu/saveload/menusaveloadthumbnail.cpp + menusaveloadthumbnaildecoder.cpp | Captures the screen into a render target (thumbnailRtt) and encodes it as a save thumbnail (tasks MenuSaveLoadThumbnail::CaptureCopy and ::Encode). It decodes thumbnails for display and loads the thumbnail base files. The 12 functions after it (0x14041fa10) are a mutex and condition-variable worker that MenuSaveLoadWindow uses. | — | SaveThumb/common/SaveCommon.dat (group 0x12c, file 6) and file 2 in group 0x15e + a language index (probably a per-language SaveThumb file), both from 0x14041f000 | 0x14041f000 (thumbnail file loader) | 44 functions, 8.8 KB |
| Menu widgets: MenuMainCommandItem, MenuNameWindow, MenuCalendarWindow, MenuZoomSlider, EvantMessageTextListener | Small reusable menu parts: main-menu command items, the name window, calendar window, zoom slider, open/close animation helpers for MenuCommand, and shared window helpers used by many menus. EvantMessageTextListener is an event-message text listener. | layouts mn_command, mn_name_window; anims TitleOpen/TitleClose, MoveOpen/MoveClose, IconLoop | — | 0x140486e10 (MenuMainCommandItem::vfunction4) | 41 functions, 5.5 KB |
| menu/menumaincategory.cpp (MenuMainCategory) | The main menu's category list, the top level of the camp menu. | layout mn_main_category_list | — | 0x140498f80 | 26 functions, 7 KB |
| Taco::Framework::MenuCommandPanel | Generic command-panel widget with category and item open delays and fade in/out (layout mn_command_panel). The battle command menus are built on it. | menu layout mn_command_panel; keys OpenCtgDelay, OpenDelay | — | 0x1404d5210 (MenuCommandPanel::MenuCommandPanel) | 76 functions, 19.1 KB |
| Menu widgets (MenuListTable, MenuWindowFx, MenuScrollBar, MenuScrollBarType2) | Shared menu building blocks: a list table, a window effects layer and scroll bars. | — | — | 0x14050e800 (MenuWindowFx::MenuWindowFx) | 10 functions, 3.1 KB |
title/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| title/titlemastercontrol.cpp (Title::MasterControl) | The title-screen state machine: resets game state, then opens the TopMenu, ChrMake (new game), MenuGallery and MenuAdvertise windows. | MN_TITLE (hashed) | — | 0x140424a30 (MasterControl::vfunction4) | 12 functions, 6.7 KB |
| Taco::Application::Title::BirthDayInputMenu | Birthday entry during character creation for a new game. | layout mnbirthday; words cm_word00_1%04d_00 | — | 0x1404a14a0 | 26 functions, 8.6 KB |
| title/common/common.cpp and title helpers | Loads the title data file and the title music (a 0x156000-byte buffer from sound/), keeps an 8 MB title work heap, and gives accessors into the title data. Also hashes the names MN_TITLE and MN_NETWORK. | MN_TITLE, MN_NETWORK (FNV hashes) | title/title.dat (0x1404abce0); sound/ (group 0x190, 0x1404ac080) | 0x1404abce0 | 21 functions, 2.2 KB |
| Title::TopMenu, TitleBG, ChrMake, MenuTarot, MenuElement | The title top menu with its background and intro movie, and new-game character creation: tarot card questions, the deity image and element choice. | layouts mntitle_bg, mn_chrmake; images chmake_god%.4d_%.2d, card_normal; params MovieNonSkipTime, MovieEndTime | — | 0x1404acf90 (TopMenu::vfunction4) | 34 functions, 19.1 KB |
| Title character creation (Title::ChrMake, MenuTarot, MenuElement, MenuElementBG, MenuTimeline) | New-game character creation on the title screen: tarot questions with answers (mn_tarot), then element and god selection with blur transitions and god images (mn_element). Includes the god-image animation code at 0x140548720-0x140548fc8. | menu layouts mntarot, mn_element; sprites chmake_element_select%04d00, img_god%02d | — | 0x14050ee80 (mn_tarot); element flow 0x14050f810 | 58 functions, 13.5 KB |
| MenuAdvertise | Start-up logo or advertisement screen (layout mn_advertise) with logo, fade and skip-interval timing. | menu layout mn_advertise; keys AdvertiseFrame, LogoFrame, FadeFrame, SkipInterval | — | 0x1404b12c0 | 4 functions, 2.3 KB |
| Gallery (title/menu/menugalleryviewer.cpp: MenuGallery, MenuGalleryList, MenuGalleryViewer, ViewerBg, ViewerdBlur, MenuGalleryMovie) | The title-screen gallery: a list of entries, an image viewer with blurred background and UI open/close, and a movie entry. The viewer loads pictures from the Gallery folder. | menu layout mn_gallery; animations MenuIn/MenuOut, UIOpen/UIClose | Gallery/ (group 0x2f8), opened at 0x140513e60 | 0x140513e60 (Gallery file load); menu 0x1404b1d00 | 48 functions, 10.9 KB |
warrenreport/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| Taco::Application::WarrenReport::* menus | The Warren Report screens: MasterControl, TopMenu, achievements, chart, character info, Diva, event and movie players, public list, reputation and text windows. | anims MenuWindowOpen, ChangePageOpen/Close | — | 0x140428210 (MasterControl::vfunction4) | 37 functions, 15 KB |
| warrenreport/common/wrcommon.cpp | Loads the Warren Report data and text files and resolves the sub-table offsets in their headers (0x140489eb0) for the WarrenReport menus. | — | WarrenReport/WarrenReport.dat (0x140488530); WarrenReport/WarrenReportText.dat (0x14048adf0) | 0x140488530 | 78 functions, 13.9 KB |
| WarrenReport front and top menus (FrontMenu, EventPlayerMenu, TopMenu, TopMenuAchievement, InvokeTimemachineMenu, Listner) | Entry and top-level menus of the Warren Report, including the achievement or completion icons (complete_icon%03d) and the menu that starts the time machine (World Tarot). | menu layouts mn_warrenreport_world, mn_event; sprites complete_icon%03d | WarrenReport/WarrenReport.dat and WarrenReportText.dat are loaded outside this range (0x140488530, 0x14048adf0) | 0x1404c7830 (TopMenu::vfunction4) | 52 functions, 12.5 KB |
| warrenreport/menu/gadget/chartcommon.cpp + ChartMenu | The Warren Report chart (story flowchart): it draws chart nodes and lines, culls them to the screen, and scrolls. Node drawing reads a shared object (DAT_140f32e20) that is probably the loaded Warren Report data. | source file WarrenReport\Menu\Gadget\ChartCommon.cpp; layout mn_warrenreport_world | WarrenReport/WarrenReport.dat through DAT_140f32e20: #31, the chart's layout (0x1404b3ef0 by 0x1404894e0), and #1, its chart nodes |
0x1404bcb60 (ChartMenu::vfunction4) | 66 functions, 31.1 KB |
| WarrenReport text windows (TextWindowCommon, TextWindowMenu, TextWindowChrMenu) | Text pages of the Warren Report (general entries and character entries) with TextFadeIn. | animation TextFadeIn | probably WarrenReport/WarrenReportText.dat (loaded elsewhere) | 0x1404b8fc0 (TextWindowMenu::vfunction4_for_MenuWindowWrap) | 64 functions, 23.3 KB |
| WarrenReport lists (ChrInfoMenu, DivaMenu, MoviePlayerMenu, PublicListMenu, ReputationMenu) | Warren Report list screens: character info, Diva, a movie player, public lists with icons and new-entry markers, and reputation (wrparts01_icon%04d). | sprites wrparts00_list_icon%04d, new*%02d, wr_parts01_icon*%04d | — | 0x1404c0770 (ChrInfoMenu::vfunction4) | 78 functions, 23.2 KB |
textseq/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| textseq/textseqcredit.cpp (TextSeq::Credit, GameCredit, TitleCredit, TextSeqCredit, PauseWindow, BGWindow) | Plays the staff roll and credits, both from the title screen and at the game's end, with a pause window and background. | layout mn_staffroll; anims CreditChangeIn/Out, FadeIn/FadeOut | textseq/ (group 0xa8c, file ID passed by the caller) | 0x14042b620 | 90 functions, 24 KB |
| textseq/textseqcaption.cpp (TextSeqCaption, LytTimeline, ObjTimeline) | Shows timed captions (subtitles) over movies, driven by layout and object timelines. | layouts mnmovie, mn_opmovie; text key prefix SEQTEXTDATA | textseq/ (group 0xa8c, file ID = language index + 1) from 0x140431490 | 0x140431490 | 34 functions, 8.9 KB |
| textseq/bgseq.cpp + TextSeq::PauseWindow | Text-sequence scenes: a pause window (layout mn_event) and a background-image sequencer. The sequencer streams the next background through double buffers with FileTable_OpenById, where the group comes from an object field, and fades between them. | menu layout mn_event; source file TextSeq\BGSeq.cpp | probably textseq/ (group 0xa8c); group not constant at the 0x1404ca1c6 call | 0x1404c9f40 (BG stream update) | 35 functions, 8.1 KB |
effect/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| effect/effectmanager.cpp | Sets up the effect system (Effects): fills the effect player's callback table, loads effect/EffectMaterialData.bin, effect/global/common/indices.bin and effect/global/common/c_all.efz (MLZ0), and sets 28 effect parameters from row 0 of EffectMaterialData.bin. It also queues coloured effect primitives and drives the battle camera object at 0x140f22a80. |
— | group 0xc8 (200) = effect/: file 0x0 EffectMaterialData.bin, 0x1 global/common/indices.bin, 0x2 global/common/c_all.efz, all opened in 0x140311b20 |
0x140311b20 | 50 functions, 10.2 KB |
Vfx runtime (VfxFile_* and VfxCommon_*: loaded .efz files and c_all.efz sets) + vfx math |
Three parts. 0x14040f4a0+ is 3D vector and matrix helpers (rotation, cross product) used by vfx code at 0x1405xxxxx. 0x140410f80-0x140415110 loads vfx resources on demand by ID (VfxFile_*, VfxCommon_*, Effects); EffectManager init (0x140311b20) calls into it. 0x1404151f0+ are effect handle helpers used by VfxJob and battle code. |
— | files in group 0xc8 (200) by ID, via FileTable_OpenById at 0x140414930; the group variable 0x140c9db38 is set to 200 by effect/effectmanager.cpp, which opens files 0, 1 and 2 there. Group 200 is effect/ (every effect/ file, Effects). |
0x140414bc0 (allocate slot + load effect by ID) | 134 functions, 25 KB |
libra/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| libra/tsmalloc.cpp and the Libra effect (EFX) player | TsMalloc wraps the engine allocator for Libra. The rest of the range is probably an effect player: 0x1404ab460 parses a buffer that starts with the magic 'EFX0011', and 0x1404a2d90 advances frame-timed tracks with up to 16 child objects. Called from three unnamed systems (0x14040f490, 0x140500d60, 0x140536bb0) and the title code. | magic EFX0011 | the effect/ .efz files once unpacked from MLZ0: all 2,085 start EFX0011\0 (EFX0011) |
0x1404ab460 | 139 functions, 33.4 KB |
| Libra effect runtime (unnamed parts) | Keyframed effect and particle runtime. It evaluates value curves over time (0x140502190, 0x1405020d0), builds emitter and particle matrices with sin, cos, atan2 and rand, and has a switch that runs one command of an EFX0011 chunk of type 0x1000 (0x14050dfe0, 21 opcodes); no shipped effect file has such a chunk. These are the 73 KB unlabeled run at 0x140536e20 and the 52 KB run at 0x140500d60. They are called only from Libra code at 0x1404a2c60-0x1404aba48 (Libra\TsMalloc.cpp), where 0x1404ab460 checks the 8-byte header 'EFX0011\0', so they play the effect/ files. |
— | effect/ files (EFX0011 header check at 0x1404ab460, outside this range) | 0x14050dfe0 (one command of an EFX 0x1000 chunk); per-frame emitter update 0x140505240 | 219 functions, 120.5 KB |
bg/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| bg/bgmanager.cpp (BgManager, BgResourceProxy) | Loads and renders battle and world backgrounds (maps): the common bg data, back images, and map files picked by ID or name. Holds a RenderObject, and a map-grid lookup at 0x1402da320. Contains the strings 021_04 and 020_39, probably special-cased maps. | — | bg/bg_common.dat (group 0x64, file 0x3e7, at 0x1402dcba0); bg/back/ (group 0x96, at 0x1402dd720); map files by computed ID and by name (at 0x1402dd2f0) | 0x1402dd2f0 | 107 functions, 25.5 KB |
| Taco::Platform Bg classes (BgResourceProxy, BgTexAnime, BgColorMimeAnime) and Taco::Framework::BgFixedAfterMemoryObject | Battle and map background resources: texture animation, colour-mimic animation and fixed background objects, plus the std::vector code they use. Called almost only by bg/bgmanager.cpp. Holds the largest function in this range (0x14037f4f0, 7.6 KB). | — | — (bg/ files are opened by bg/bgmanager.cpp at 0x1402dcba0 and 0x1402dd720; these classes probably consume them) | 0x14037af10 (BgResourceProxy::BgResourceProxy) | 68 functions, 37.4 KB |
| bg/bgresourceproxy.cpp + memory/bg/bgmemoryobject.cpp | Background (map) resource proxy and BG memory object allocation. The 17 unnamed functions between them are called by the bg loader code (0x1402ddxxx-0x1402e0xxx) and BgFixedAfterMemoryObject, probably the rest of these two files. | — | — directly (its callers in 0x1402dd… load bg/back/ and bg/bg_common.dat) | 0x140382bc0 | 19 functions, 8.6 KB |
sound/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| sound/soundmanager.cpp (SoundManager) | The sound manager on the SQEX Sd driver: banks, buses, reverb, the SDSema semaphore, and stream setup. It classifies sounds by text-key prefix (SCENARIO, SPEECH*, D_DIALOGUE*, DLG_*, SYSTEM_DIALOGUE), probably to choose voice lines. | — | sound/bin/SECommon.dat (group 400 file 0, 0x140287fd0), sound/sound.dat, sound_ja.dat, sound_en.dat (group 400 files 500–502, 0x140288200), voice_DAMAGE.sab (group 401 file 0x1ff or 402 file 0x200, 0x140288140); music and voices streamed by file ID from group 400 or 401/402 (0x140288700). DAT_140ce1aa8+0x20 is the sound group, 400 (set by 0x1402c2110), not a language group. See sabf.md | 0x140287200 | 82 functions, 18.5 KB |
| sound/soundstream.cpp + sound/saftyringbuffer.cpp (SoundStream, SaftyRingBuffer, Sd IStreamReader) | Streams audio (probably BGM and voice) from game files into a ring buffer, 64 KB at a time, for the Sd driver. The first two functions at 0x140292fb0 are MenuWindowWrap event callbacks. | — | Streamed sound files by ID (0x140290290, flags 0) | 0x14028fdb0 | 37 functions, 5.3 KB |
text/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| text/textmanager.cpp | Loads text tables by group and file ID and looks up strings by key (0x1402b95d0, which BattleData accessors and menus use). | — | Text files by ID (0x1402b94a0) | 0x1402b94a0 | 30 functions, 8.3 KB |
file/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| file/filedesc.cpp (FileDesc_OpenPath, FileDesc_ReadAll) | Low-level file descriptors: open by path, read under a mutex and condition variable (async), read all, and close (0x140295370). One step calls a decompressor (0x1402c1710). | File_GetDataRoot (data root path) | Any file (the layer below FileTable) | 0x140295760 | 21 functions, 3.4 KB |
| file/filesystem.cpp | The file system front end: stream reads, reads, and decompression (strings FileSystem::ReadStream, FileSystem::Read, FileSystem::Decomp), queued to a worker with mutex and condition variables. 0x1402af780 probably reports loading state (MenuLoadingIcon calls it). | — | Any file through FileTable_FindEntry and FileTable_GetEntryPath | 0x1402ae340 | 16 functions, 5.5 KB |
| file/filetable.cpp + file/filecache.cpp | Loads FileTable.bin / FileTable.EDAT and opens game files by group and file ID or by name (FileTable_OpenById, FileTable_OpenByName, FindFileRecord, GetFileSize, GetFilePath, Mount), with a file cache. About 20 small vector-math helpers at 0x1402b0960-0x1402b0dab are probably misplaced in this row. | FileTable.bin, FileTable.EDAT | FileTable.bin / FileTable.EDAT (at FileTable_Load 0x1402b1490); all ID-based opens go through FileTable_OpenById | 0x1402b1490 | 57 functions, 8.8 KB |
| file/cacheslot.cpp | Cache of open game files keyed by (group, file ID) with least-recently-used eviction. On a miss it calls FileTable_OpenById with the caller's group and file, and it waits for slots to close when freed. Used by the Warren Report and AttackTeamPanel for images. | source file File\CacheSlot.cpp | any file, by group and file ID from the caller (FileTable_OpenById call at 0x1404b2669) | 0x1404b2550 (open or look up a slot) | 14 functions, 1.4 KB |
graphics/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| graphics/ordertable.cpp (OrderTable) + ProhibitionCopyObject | Probably a draw-order (sort) table for render submissions; it uses qsort. | — | — | 0x140294160 | 11 functions, 1.2 KB |
| Screen fade / color utilities (unnamed) | Probably screen fades: 16 fade slots, where FUN_140294a70(6) asks whether all fades are done. Also has color lerp and blend helpers (0x140294cb0) used by menus and the title screen. | — | — | 0x140294a70 | 18 functions, 3.1 KB |
| Matrix / vector math (unnamed) | Matrix and vector routines: multiply, look-at and perspective builders, and a world-to-screen projection (0x140296b70) used by the camera and menu code. The first function (0x140295d50) is probably the tail of filedesc. | — | — | 0x140296b70 | 25 functions, 7 KB |
| graphics/graphicsdevice.cpp | A wrapper around the render device, probably for screen size and render targets. gamemain, key config and others call it. | — | — | 0x1402981b0 | 22 functions, 2.6 KB |
| Taco::Platform::TextObject / ArgCodeListener / ITextDrawListener | Text objects: strings with inline argument and control codes that are parsed through ArgCodeListener before drawing. This code builds and lays out those strings for menus and messages. | — | — | 0x1402989e0 | 136 functions, 22.9 KB |
| graphics/font/basefontrenderer.cpp (BaseFontRenderer, FontRenderer) | The font renderer: loads font data and draws glyphs. It includes four large text draw and layout routines (about 5.5 KB each, 0x1402a4a00-0x1402aa8d0) that handle private-use control codes (0xf8fc), and a '@debug font' (not a debug feature). | '@debug font' | Font/FontAllFilePackage.dat (group 600, ID 0, read and discarded, 0x1402a3770) and Font/<lang>.dat (600, 0x14 + language, 0x1402a3860 → 0x1402a3f00 → 0x1402ac010); see font.md |
0x14029e550 | 154 functions, 62.6 KB |
| Screen blur and shake effect (BlurManagerTexture, unnamed) | A full-screen post effect: creates a 1920x1080 render target named BlurManagerTexture, then fades colour and alpha over frames and draws a rotated, randomly jittered copy of the screen; probably blur or shake transitions. Used by the title, worldmap, Warren Report and organize screens. | — | — | 0x1402f3400 | 18 functions, 3.4 KB |
common/
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| Video decoders (common/decoder/moviedecoder.cpp, movievideotheoradecoder.cpp; VideoDecoder, VideoTheoraDecoder, VideoNullDecoder) | Plays movies with Theora. The movie decoder opens the movie entry by ID through the file table. The Theora decoder then reads the file straight from disk with _fsopen, fread and fseek, removing the XOR obfuscation in its read callback (0x14026c260), using a 'movie pool' allocator. | _fsopen(path,"rb") on the movie's path | movie/*.pmf by file ID in group 2000 (pmf.md); the movie's sound bank by the sound ID in system/system_data.dat#6 (the voice-language group 401 or 402 from 0x1402860d0, or the sound group 400 at DAT_140ce1aa8+0x20 for sound IDs 71 and 100; at 0x14026b0f0) | 0x14026b0f0 | 48 functions, 7 KB |
| Taco::Framework::ModelContainer + common/resource/modelresource.cpp | A container for 3D models and their resources. Created at startup and used by TacosGame and WorldmapModelObject. | — | — | 0x1402d8860 | 15 functions, 1.8 KB |
| common/resource/clutresourceproxy.cpp and CLUT helpers | CLUT operations on 32-bit colour tables: blend two cluts, tint to grayscale or sepia (0x140339fb0, 0x14033a470), copy, and upload to a draw call. Ends with four large clut-effect functions (0x14033a5e0-0x14033b7b0). Used by face drawing, battle/entry, the bg manager and event objects. | — | — | 0x140339c00 | 19 functions, 9 KB |
| Movie playback wrappers (unnamed) | Thin wrappers around the movie decoder object at 0x140cde960: play, stop and pause, query state, and draw the current video frame as a full-screen quad. | movie stream reader (SQEX Sd IStreamReader) | — (movie/ files are opened by common/decoder/moviedecoder.cpp) | 0x1402f3b00 | 9 functions, 0.6 KB |
Taco::Framework
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| Input devices (InputDeviceManager, Pad, HardPad, SoftPad, KeyboardInput, MouseInput) | Reads input devices through the platform input object (DAT_140f6c790) and keeps pad button state as pressed, held, released and repeat masks (0x14028d070). Maps keys through the key config (0x14028f330). | Platform pad, keyboard and mouse; key bindings from system save data | — | 0x140283570 | 48 functions, 9.9 KB |
| Background worker threads (unnamed) | Creates the named worker threads and semaphores ('bg thread', 'bg sema', 'main sema', 'bg func access') and runs queued std::function jobs. SoundManager, FileSystem and SoundStream use it. | — | — | 0x140283a80 | 23 functions, 5.1 KB |
| Resource load helper (unnamed) | Opens a game file by ID (flags 0x2000000) and hands it to a virtual load. Also has a string-keyed hash map (FNV-1a). SoundManager and TextManager call it. | — | Files by ID (0x140284f80) | 0x140284f80 | 9 functions, 2.1 KB |
| Camera / 3D view (unnamed) | Global camera state and view and projection matrices (0x14028a4c0 onward), and camera objects with per-mode updates (0x1402914a0). The first region also holds a 32-slot request pool (0x14028bd80-0x14028c919) that probably loads menu resources by ID. | — | Menu resources by ID via the request pool (0x14028c740) | 0x1402914a0 | 77 functions, 17.1 KB |
unknown
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| Unknown small global list | Four tiny functions that keep a global pointer, count and index list (DAT_140d69d50, DAT_140d69d78). saveload, BattleMenuRoot and gamemain call them; purpose unclear. | — | — | 0x1402d80a0 | 4 functions, 0.1 KB |
| Unknown: angle and byte-stream helpers | An atan2 wrapper used by worldmap actors and menus, and the ashg decompressor (0x140384ff0, with its method decoders 0x140385610 and 0x1403852b0 and the size helper 0x140385900; ashg.md). It is called by the unit sprite (0x1402e5220), weapon sprite (0x1402e62b0), face (0x1402f24c0, 0x1402f28f0) and shop (0x14030c300) loaders. |
— | every ashg: object/, event/scene/, battle/battle_data_release.dat #1, menu/menu_classface.dat, menu/face/, menu/shopbg/ |
0x140384ff0 | 5 functions, 2.8 KB |
| Unknown: shared game helpers (mixed, unnamed) | 229 small helpers that code all over the game calls. They include item-icon pane setup (pt_itemicon_back_rare, text_skill_lv, gray_out_filter) for shop and organize lists, and battle camera and view-mode helpers called by ChangeActionCameraModeJob, ChangeInputCameraModeJob, ClearTargetSelectViewModeJob and CameraControlMenuMenuWindow. Many others are accessors for unit, party and battle code (callers at 0x14031x, 0x14035x-0x14036x, 0x1403bx, 0x14044x, 0x14047x). Probably several source files with no path strings. | — | — | 0x1403971e0 (item icon setup) | 229 functions, 46.5 KB |
Mx
Focused rendering findings and remaining questions: Rendering.
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| Shader and shader-parameter name hash constants (static initializers) | This is not real logic. It is MSVC dynamic-initializer code from a shader-names header compiled into 8 translation units. Each function computes the FNV-1a 64-bit hash of one name into a global {name, hash} pair. The 20 shader names are default, psp, psp_simple, blur_tacos, psp_dof, movie, unit, unit_aura, unit_outline, bg, bg_2, bg_obj, copy, ripple, draw_blur_back, box_filter, unit_outline_2d, crowley_tacos, tarot_card_eff and effect. The 55 parameter names include RenderState, TextureFilter, vPalletColor, tIndexTexture, vAuraColorStart/End, vBg*, tBlendTexture0-7, RippleColor, vColorCorrectParam, tEffTexture1-3 and others. The only copy referenced elsewhere is copy 2 (globals 0x140cac488-0x140cac918): Mx::Graphics::blGraphics::BladeGraphicsManager::vfunction130 (0x140163d10) looks up the hashes and builds one ShaderBlade per shader name. The other copies appear unused. | — | — | Consumer: BladeGraphicsManager::vfunction130 0x140163d10. First initializer: 0x1400074c0 | 544 functions, 131.7 KB |
| Mx::Blade framework and main window (BladeFramework, ViewFramework, MainWindow, WinAPIException, Util, UniversalDataSystem, PowerManagement) | Starts the PC game: works out the exe folder, sets the data root to |
GetModuleFileNameW (exe dir); Data\ root; \SaveData\ fallback save dir; window class Direct3DWindowClass; GetWindowPlacement / AdjustWindowRect / GetSystemMetrics; registers a Steam callback (SteamAPI_RegisterCallback) | — (sets the Data\ root only) | 0x14015d120 | 101 functions, 19.9 KB |
| Mx::Graphics::blGraphics::BladeGraphicsManager (with the Mx::Graphics base classes Texture, Model, SceneObject, Font, and commandgraphics.cpp) | The main renderer. At startup it loads the shader package and inflates it with zlib (raw deflate, windowBits -15). It builds render targets (tacos_mainRTT, tacos_GameMainRTT, CommonRTT, distortionRtt, blur buffers) and runs the post effects: blur, depth of field (psp_dof), ripple, distortion, color_adjust, layoutBlur. Named shaders include crowley_tacos, unit_outline, unit_aura, tarot_card_eff and bg_obj. It also sets up a TTF font and has probably-debug .bmp texture dumps. | Data/Shaders/ + Shader.dat (read by path, not through FileTable.bin); Data/Fonts/MeiryoRegular.ttf (the shipped Data has Font/, not Fonts/, so probably a dev or fallback path); %s/%s.bmp and %s/%d.bmp dump names; shader parameter names (TextureFilter, RenderState, BlendColor, RippleColor, FocusPosY, vBlurSize, …) | Shaders/Shader.dat | 0x140163d10 | 196 functions, 71.5 KB |
| Mx::Graphics text fonts (TextFontProviderBlade, TextFontBlade, TextFontAssetBlade, TextBitmapFontAssetBlade) | Provides fonts to the text system: wraps bl::text font and bitmap-font assets as Mx text fonts, and probably caches glyphs. It also holds shared_ptr control blocks for the other blGraphics classes (Shader, Model, CommandContextBuffer). | — | — (the fonts from Font/<lang>.dat, made through TextFontProviderBlade 0x140174ed0, 0x140175290, 0x140174af0 by 0x1402ac010; font.md) |
0x140174a70 | 106 functions, 16.5 KB |
| Mx::IO files (File, BladeFile, BladeFileManager, FileManager, IOException) | File access over bl::fio::FileLoader: it opens files, creates directories and reads a whole file into a buffer that a callback allocates. 0x1401973b0 is that whole-file reader, used for Shader.dat, sead.config and by 0x140445ed0. | error strings: invalid open mode, failed to create directory | Shaders/Shader.dat, sound/sead.config (through its callers) | 0x1401973b0 | 36 functions, 6.9 KB |
| Mx::TextService (TextServiceManager, Blade::TTsfTextStore, CTextEditSink) | A Windows Text Services Framework (TSF) text store, so IME and keyboard text entry works. It is probably used for typed names such as unit names. | Windows TSF / IME | — | 0x14017a450 | 102 functions, 21 KB |
| Mx::Input (InputManager, Pad, Mouse, Keyboard and their Blade versions) | Reads input devices for the game: gamepad, keyboard, and mouse through GetCursorPos/ScreenToClient. HID.DLL import thunks sit at 0x1401fbf64. | mouse cursor position; HID devices (HidD_* imports) | — | 0x140180170 | 61 functions, 5.8 KB |
| Mx::Platform::Blade::BladePlatformManager (Steam) | Starts Steam with SteamAPI_RestartAppIfNecessary(1451090) and SteamAPI_Init, and runs the Steam callbacks each frame. It builds the save path Documents\My Games\Tactics Ogre Reborn\Steam<SteamID>, detects Big Picture mode (SteamTenfoot), and maps the Steam language to the game language. | SHGetKnownFolderPath (Documents); env SteamTenfoot; Steam app id 0x162452 (1451090); Steam UI language (japanese, french, german, spanish, tchinese, schinese, koreana); SteamUser021, STEAMAPPS_INTERFACE_VERSION008 and STEAMSCREENSHOTS_INTERFACE_VERSION003 interfaces | — (save folder path only) | 0x140180c80 | 18 functions, 1.7 KB |
| Mx::Collision (TaCollision, Blade::CollisionBlade, CollisionBodyBlade, PhyshicsJob) | The game's collision API over bl::collision (Bullet). It creates bodies and the dynamics world, runs the physics step as a job ('physicsRunTrigger', 'collisionSim', 'physcjob') and returns TaCollisionResult hits. It is probably used for ray and pick tests on maps. | — | — | 0x140181910 | 41 functions, 11.6 KB |
| Mx::Trophy::Blade::BladeTrophyManager (Steam achievements) | Unlocks Steam achievements by index from a table of ACHIEVEMENT_xx names (0x140ca5b28, entries 0x198 bytes apart). It probably awards ACHIEVEMENT_00 once all the others are unlocked, and it handles the UserStatsReceived callback. | SteamUserStats (STEAMUSERSTATS_INTERFACE_VERSION012, SteamUtils010); achievement names ACHIEVEMENT_00… | — | 0x1401843b0 | 11 functions, 1 KB |
| Mx::Threading, StepTimer and memory heaps (Fiber, BladeFiberManager, Event, Semaphore, Thread, BladeThreadManager, Mutex, StepTimerImpl) | Fibers, threads, events and semaphores for the game's jobs and main-update fiber, plus a fixed-step frame timer built on QueryPerformanceCounter. The 0x1401985d0 run is the Mx heap allocator: 128 heaps, allocations tagged with a source file, as in Menu\MenuObject.cpp. | QueryPerformanceCounter/Frequency; SwitchToThread | — | 0x140184ac0 | 82 functions, 11.3 KB |
| Mx::AKW::Blade::BladeAKWManager | Probably a banned-word (NG word) filter for text the player types. It builds up to 8 per-language word tables. Its check normalizes a UTF-16 string (full-width to half-width, upper case, per-language character maps) and matches it against those tables using three match modes. | current language (FUN_14026ca60) | probably akw/akw.dat (name match only; the loader is not in this range) | 0x140187480 | 17 functions, 8.3 KB |
| Mx::Jpeg::Blade::BladeCodec | Encodes JPEGs with custom quantization tables (vfunction2) and decodes them (vfunction3), using the bundled libjpeg. It is probably used for save thumbnails or screenshots. | — | — (possibly SaveThumb/ or ScreenShot/; not confirmed) | 0x140188e00 | 7 functions, 5.9 KB |
| Mx::Graphics renderers and batch makers (TaPrimitiveRenderer, TaRectRenderer, TaGeometryRenderer, TaModelRenderer, FilterRenderer, *BatchMaker) | Builds draw batches: primitives and rectangles, geometry with the game's shader constants (unit aura, panel state, BG effect, ripple, clut), models, text, the 'Crowley' renderer, screen capture, region copy, filters, render-target changes, viewport and clear. | shader constant names (tIndexTexture, vAuraColorStart, panelState, vBgEnvColor, RippleColor, …) | — | 0x14018a570 | 35 functions, 18.4 KB |
| Mx::IO save system (BladeSaveIoManager, BladeSaveIoWinManager, SaveIoWorkerThread, Save/Load/Enum/Delete ops, saveio/bladesaveio.cpp) | Reads and writes the save files on a worker thread: save, system load, game load, enumerate game saves, load save info and delete. It uses an EventTransactor to report results to the game. | save folder (Steam My Games path or |
save files SYSTEM-*.SAV and GAME-nnnnnnnn.SAV (outside Data/) | 0x14018fd50 | 96 functions, 26.5 KB |
| Mx::ScreenShot::Blade::ScreenShotManagerWin | Hooks Steam screenshots (OnScreenshotRequested/OnScreenshotReady callbacks) and probably supplies the game's own capture to Steam. | SteamScreenshots callbacks | — | 0x140191d20 | 18 functions, 2.9 KB |
| Mx::Graphics GraphicsManager, TaGraphics and scene drawing (Model, SceneObject, CommandContextBuffer, helpers) | The game-facing graphics manager. It has a font loader that opens <name>.fontmeta by path (0x14019c890; BladeGraphicsManager's override 0x14016f000 opens Data/Fonts/<name>), a path the shipped game has no files for; the game's fonts come from Font/<lang>.dat instead (font.md), keeps models and scene objects, and walks the render tree each frame; TacosGame's draw calls 0x1401a19c0. It also holds a raw-inflate helper (0x1401a2a00, called from 0x1402c16c0), a depth sort of 64-byte draw items, quad-vertex writers and shared_ptr helpers used across the game. |
.fontmeta files beside font files | — (font files plus .fontmeta; the exact paths are not resolved here) | 0x1401a19c0 | 121 functions, 30.1 KB |
| Mx::Text (TextParserBlade, TextFormatterBlade, TextObjectBlade, TacosTextParser) | Parses and formats the game's text strings, probably including Tactics Ogre's inline control codes, and builds text objects to draw. | — | — | 0x1401eed50 | 12 functions, 4.1 KB |
SQEX::CDev
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| SQEX::CDev::Engine::Sd sound driver (BankController, SoundController, ReverbController, Sound/Stream event handlers, SoundSystem.cpp, Driver\BankController.cpp) | The game's wrapper over Square Enix's SEAD audio engine. Sound system init reads sead.config and creates the bank, sound and reverb controllers. The wrapper also handles sound and stream events, sets the playback-speed snapshot (Play1xSpeed…Play4xSpeed, probably the battle speed setting) and fades sound volume by sound id. | Data/sound/sead.config; snapshot names Play1xSpeed, Play2xSpeed, Play3xSpeed, Play4xSpeed | sound/sead.config (by path); sound banks from memory or streamed (sabf.md) | 0x1401a9020 | 72 functions, 11.1 KB |
bl
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| bl::memory::MemorySys | Engine memory system. 0x140036e10 registers about 28 named heaps (BATTLE, OBJECT, EFFRAM, EFFROM, EFFMGC, SOUND, SOUND_LIB, FILESYSTEM, STAGE, EVENT, NETWORK, SAVELOAD, GRAPHICS, DEBUG, DEBUG_MENU, layout, collision, movie, debug, …; the debug heaps). It also holds the allocate/free entry points that hundreds of callers use (0x140037650 has 195 callers) and std::string helpers that assert from mxframeworks\common\Memory.h. | source file h:\tacos\mainline\programs\mxframeworks\common\Memory.h | — | 0x140036e10 (heap table setup) | 23 functions, 5.8 KB |
| bl::archive | Reads the engine's ARC archives (arc.md): header ARC\0 version 0x100, an offset table, named typed records found by type and ID, type and index, or file name (Traverser_type_id/index/filename/counter_type, walk 0x14005bfa0). The chunk chain with a size at +4, a flag byte at +9 (bit 0 means byte-swap) and an alignment at +10 (0x140037f40) is a separate format, inside BMAR models. It also unpacks CompressibleData: 0x140087190 tries two decompressors chosen by a 4-byte tag, 'zlib' (zlib 1.2.11) or 'lzma'. Also holds model and animation chunk parsing, with tags BMAR, ANMS, ANSK, ANMT, ANVS and POF0 (0x14004c5b0, 0x14004c6e0). The unnamed node-walk function at 0x140037f40 is folded in here. | — | Shaders/Shader.dat (0x1401646f0 → 0x1400b1240), and the menu/ layout, font-set, text-preset and texture-pack files (0x140271250); worldmap/Worldmap.dat#28 (BMAR). The file-name traverser 0x14008b740 looks up the entry named 'fontset' in menu/fontset/fontset.dat. | 0x140087190 (picks the zlib or lzma decompressor by tag) | 80 functions, 24.2 KB |
| bl::fnd | Foundation templates: SingletonPtr |
— | — | bl::fnd::BitSet (0x14003cb70) | 243 functions, 58.4 KB |
| bl::gfx | The Direct3D 11 renderer. Covers device creation (D3D11CreateDevice and DXGI, with 'D3D initialize error' and feature-level messages, at 0x1400815d0) and RenderDev/RenderDevBase. Shaders: DX11 vertex, geometry and fragment shaders reflected with D3DReflect, plus ShaderDb, ShaderSymbolManager, and the built-in uniform names table (0x140077af0). Also textures (the texture database 0x140063760 and its one loader, for btx: btx.md), models and animation (Model, ModelAnim, mdl::Skeleton/Material/Mesh/VisibilityAnimator, morph textures, chunk tags MTXP/BMAR/TXTR/MESH/MATE/INFO), deferred lighting (GBufferManager, point and spot light volumes, shadow casters, occlusion queries, SSAO, refraction), filter and post-process renderers, screen capture, and window and monitor placement. Unnamed helpers folded in by position include a depth sort (0x14004a930) and float-to-half packing (0x14014a760). | Display adapters and monitors (EnumDisplayDevicesA, EnumDisplayMonitors, CreateDXGIFactory), window placement and fullscreen (Get/SetWindowPlacement, SetWindowLongA), D3DCompiler_47 D3DReflect. The adapter is probably the one picked by config.ini GraphicDeviceId, which is read outside this range in App::vfunction25 (0x140034d30). | Shaders/Shader.dat: game code 0x1401646f0 reads it by path, decrypts and inflates it, and registers its shader groups through 0x1400b1240 (arc.md). | 0x140052c80 (Gfx setup, called by bl::fw::GfxSystemModule::vfunction3); device creation at 0x1400815d0 | 853 functions, 305.6 KB |
| bl::util | General utilities: incremental buffers (IncrementalBuffer, StaticIncrementalBuffer<1048576>, IncrementalMultiBuffer<2>) and EventTransactor<...> handler lists for gfx, lyt, efx, fio and system events. Also the text-encoding parsers (SJISParser, UTF8Parser, PackedUTF8Parser, UTF16Parser, StringParser), BinaryTree/RangeMap, ImageSource/Bitmap, and the setup of worker pools ('gfx process', 'dma_transfer', 'fileio callback pool'). The unnamed string helpers at 0x140086f90 (strip a file extension, format a number with digit grouping) are folded in. | — | — | 0x14009f640 (bl::util::SJISParser and the other text-encoding parsers) | 71 functions, 21.2 KB |
| bl::thread | Threading on top of Win32: Thread, ThreadBase and Runnable (CreateThread, SetThreadPriority, process affinity, events and mutexes; threads named '%08x_%s'), plus the JobProcessor worker pool. | — | — | 0x14005e3e0 (bl::thread::ThreadBase::ThreadBase); job workers at 0x14007be30 | 38 functions, 5.5 KB |
| bl::memory | Engine memory: the MemorySys global allocator (0x14003e970, called from nearly every system), dlmalloc pools (MemoryPoolDl), TLSF pools (MemoryPoolTlsf, with 'tlsf_create' messages), MemoryPoolGlobal and DMATransfer. Region 0x14003e970 also holds the crash handler (0x14003ee50): it writes a minidump with MiniDumpWriteDump, shows 'Sorry, an error has occurred...', and 0x14003f0e0 deletes old .dmp files. | Crash dumps go to %TEMP%<exe name><name>-YYYYMMDD-hhmmss- |
— | 0x14003e970 (MemorySys allocate); crash handler 0x14003ee50 | 105 functions, 24.6 KB |
| bl::fw | Engine framework. It builds the engine modules from a startup config struct: FileSystemModule, TaskSystemModule, GfxSystemModule, LayoutModule, FontModule, TextModule, EffectModule, SaveDataModule and InputControlModule. It also runs their per-frame processes and threads ('lyt process', 'efx process', 'FileIOThread', 'TextModule Job'). | The module on/off flags and pool sizes in the config struct passed by App::vfunction25 (0x140034d30, outside this range, which also reads config.ini). | — | 0x140041450 (creates all modules; called by App::vfunction25) | 79 functions, 18.1 KB |
| Unknown | Tiny unplaced code. 0x1400431f0 holds one-line virtual stubs named after Bullet physics classes (btHashedSimplePairCache, btDefaultCollisionConfiguration, btTriangleIndexVertexArray), MemoryPoolBase and Mx::ViewFramework, probably identical code folded together. 0x140043970 holds two array constructor wrappers. 0x14005c8e0 writes to a std::ostream (probably debug log output). | — | — | 0x14005c8e0 | 11 functions, 0.7 KB |
| bl::system | bl::system::System and TimeSys: frame timing with QueryPerformanceCounter/Frequency, and process affinity. Many functions in the last region are named TimeSys constructors, probably because identical code was folded together, so those names are unreliable. | — | — | 0x1400435c0 (bl::system::TimeSys) | 14 functions, 5.1 KB |
| bl::math | MathSys setup (called from MathSys, EffectModule and MemorySys), plus the unnamed matrix helpers at 0x14005af10, including a 4x4 matrix inverse (0x14005af80), folded in by content. | — | — | 0x140088150 (bl::math::MathSys) | 10 functions, 4.3 KB |
| bl::lyt | The UI layout engine for menus and HUD. Panes: Root, Group, Image, Text, Window, Button, Slider, Gauge, Scroll, List, Numeric, Mask and Parts, each with a *Param class. Animations: Transform, Color, Tex, Text, Scroll, Transition, Button_AutoCreateAnim. Also responders that turn input into UI events, sprite, nine-slice and number-texture renderers, layout filters (blur, outline, mask and image composite, plus the 'lyt_work' blur buffers at 0x140088760, folded in), TextFont/FontManager, and ResourceManager for layout, parts-texture, common-texture and text-preset resources. | — | The layout resources in menu/ (menu/menu_layout.dat, menu/menu_parts.dat, menu/fontset/fontset.dat, menu/text/, menu/texture_x4/), opened by game code 0x140271250 and 0x1402725d0 and passed to bl::lyt's ResourceManager (arc.md). The archive entry name 'fontset' is at 0x14008b740. | 0x14008a230 (bl::lyt::ResourceManager); pane code starts at 0x1400be1e0 (called by LayoutModule::vfunction5) | 957 functions, 282.6 KB |
| bl::efx | The visual effects engine. Root, Group, Emitter and Particle instances; renderers for particles, GPU particles (update and draw), trails, rings, decals, models and traces; force fields (Gravity, Wind, Homing, Quake, Spin, Circulation, Accel, Random, Reflection); and ResourceManager, InstanceManager and TraceManager. Effect shader parameter names are at 0x1400f21b0 (gs*, vTexRot, vDecalParam), and vertex-animation textures tVatP/N/R at 0x1401494e0. | — | Not the effect/ files: those are read by the Libra player (0x1404ab460, Effects). What bl::efx plays is open. | 0x1400a00d0 (bl::efx::ResourceManager) | 366 functions, 193 KB |
| bl::fio | File I/O. FileIO and FileStream sit on the CRT (fsopen, fread, fwrite, fseek, rename, remove, _rmdir, MakeSureDirectoryPathExists). FileLoader/FileLoaderImpl load asynchronously on a FileIOThread and report through FileIONotify. Game code reaches it from Mx::IO::Blade::BladeFileManager and BladeGraphicsManager. 0x14010dca0 writes BMP images named '%s/%s |
BMP output names '%s/%s.bmp', '%s/%s*%04d%02d%02d%02d%02d%04u.bmp', '%s/%s*%04u.bmp'. | No file of its own: it opens whatever path the game's file layer passes in. | 0x1400e4430 (bl::fio::FileIO::vfunction1, called by Mx::IO::Blade::BladeFileManager) | 74 functions, 22.2 KB |
| bl::font | Low-level font data: FreeType and bitmap font data accessors (FontDataAccessorFreeType, FontDataAccessorBitmap), the glyph geometry renderer (FontGeometryRenderer), and the font outline and blur shaders ('font_outline', '_font_outline_blur'). The unread region 0x140091380 is folded in by position. | — | 'Meiryo_Regular.ttf' is named by game code 0x14016f000 (BladeGraphicsManager::vfunction135), which calls 0x140090850. The game's own fonts come from Font/<lang>.dat, whose TrueType data reaches FreeType from memory (FT_New_Memory_Face 0x1401fef50); Font/FontAllFilePackage.dat is read and discarded (font.md). |
0x140090850 (called by BladeGraphicsManager::vfunction135) | 47 functions, 17.3 KB |
| bl::text | Text system. TextParser, StandardTextParser and NumberTextParser parse message strings, and the game's Mx::Text TacosTextParser and TextParserBlade build on them. Also Text and TextFormatter; font assets (FreeTypeFontAsset, BitmapFontAsset, DynamicFontAsset), FontCache and the threaded FontRenderingQueue/Job; and TextShaderDatabase with text effects (outline, shadow, emboss, gradation, mask) at 0x14009eeb0. | — | — (text comes from callers) | 0x14009c2c0 (bl::text::TextParser::TextParser) | 152 functions, 51.9 KB |
| bl::savedata | Save data: SaveDataManager, SaveDataBody, and a platform layer (SaveDataImplPlatform) that runs Save, Load, Copy, Remove, Exist and List processes in the background. Load and remove go through bl::fio (FileLoaderImpl, FileIO). | Save paths come from callers (none in this range). | — | 0x140101a30 (bl::savedata::platform SaveProcess::vfunction1); shared process code at 0x1401016e0 | 37 functions, 5.1 KB |
| bl::peripheral | Input: InputManager with an 'InputSynchronizer' thread, and the LowInput device layer. Devices: keyboard (layout names, key names like 'ZIRKUMFLEX'), mouse, touch, and gamepads (XInput, DirectInput8, PlayStation pads over HID, Steam). It identifies pads by VID/PID through SetupAPI, HID and WMI Win32_PNPEntity, and does rumble with XInputSetState. | XInput, DirectInput8, HID/SetupAPI device enumeration, WMI (\.\root\cimv2 Win32_PNPEntity), RegisterTouchWindow, keyboard layout (GetKeyboardLayoutNameA). | — | 0x1400a4850 (InputManager, starts InputSynchronizer); device detection at 0x1400b5e00 | 103 functions, 26.6 KB |
| bl::text (TextFormatter, TextRenderer, TextGeometryRenderer, font::Font, FontTexture, BitmapFontAsset) | Lays out text, builds text vertex geometry, and manages font glyph textures and bitmap font assets. It is probably the base under the Mx text and font classes. | — | — (bitmap fonts from Font/<lang>.dat, made by 0x140175290; font.md) |
0x140150730 | 39 functions, 18.2 KB |
| bl::gfx, bl::lyt and bl::efx (VertexStream, Ssbo, Sob/SobBase, ModelRenderer, FrameBuffer, lyt::Asset/TextureAsset, efx::RendererBase) | Low-level engine graphics: vertex streams and buffers (with delayed disposal), the model renderer ('DrawingBatch', 'Model'), framebuffers, layout texture assets and the base effect renderer, including effect ray tests. | — | — | 0x140159880 | 69 functions, 32.9 KB |
| bl foundation (bl::fnd DynamicBitSet/BitSet/IntrusiveRefCounter, bl::memory::MemorySys, bl::util::json::Value, bl::thread Fiber/FiberContext) | Engine utilities: bit sets, reference counting, the memory system allocator, a JSON value type, and fiber contexts with fiber switching. | — | — | 0x140162640 | 22 functions, 9.9 KB |
| bl::collision (DynamicsWorld, DynamicsBody, DynamicsShapeMesh/Box/Capsule, DynamicsMesh, ray callbacks, debug Drawer) | The engine's physics layer over Bullet. It builds shapes (mesh, box, capsule, sphere), bodies with custom motion states and the dynamics world, runs all-hits ray and convex tests, and has a debug drawer. | — | — | 0x1401e5520 | 40 functions, 16.6 KB |
SQEX::Sd
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| sead: public API and sound/bank driver | Square Enix's sound engine (sead): its public C-style API (initialize, create and destroy banks, play and stop sounds), the Driver::Sound object (volume, pitch, pan and lowpass setters with range checks), SoundManager and ActionManager command queues, and the vtable stubs of the SabFile/MabFile sound objects. The game's wrapper (SQEX::CDev::Engine::Sd::Driver::SoundController and BankController around 0x1401a7000-0x1401aa000) calls into here. | Logs '[sead][info]%s version %X.%X.%X.%X'; requires malloc and free callbacks from the host; starts a 'SeadUpdate' thread | Sound banks (.sab) that the game hands over from memory: sound/bin/bgm/tacoBGM01-84.sab, sound/bin/en|ja/voice*/, sound/bin/event/, sound/bin/OPN_movie/chapter1.sab (loaders: sabf.md) | 0x1405b9020 | 259 functions, 53.5 KB |
| sead: Magi interactive music (MabFile music) | Interactive music engine (SQEX::Sd::Magi::Music, MusicManager, InstrumentManager). It plays MAB music data with modes, sections, markers, meters, layers, volume automation, transition macros and bar/beat sync points, and handles mode and section changes and next-music transitions. | — | MAB music chunks inside the BGM banks (probably sound/bin/bgm/*.sab) | 0x1405d0f00 | 176 functions, 78.1 KB |
| sead: bank and file-format readers | Chunk readers for sead's binary formats: SabFile (sounds, sequences, tracks, materials, effects, zero-one params), MabFile (music, instruments, sections, markers, meters, modes) and ConfigFile (buses, categories, curves, events, macros, effect presets, HCA-MX and platform settings). Also covers Driver::Bank, BankManager, NameBuffer and the Lay action queue ('LayAction exhausted'). This is the code to read when documenting the .sab layout. | — | sabf banks (sabf.md); sound/sead.config (ConfigFile, scnf.md); no game file is a MAB (mabf) | 0x1405d9920 | 159 functions, 18.7 KB |
| sead: mixer core, buses, categories, events and macros | The runtime side of sead: audio render threads ('AudioRenderSlave%d', device-change handling), Environment and external parameters, the bus graph and its routing, effect presets, CategoryManager/Category (priority and overflow limits), Sequence/Track/Voice/Event managers, the config-driven EventManager (trigger and range events by name), MacroManager and DelegateManager. The tail at 0x14062aee0 is Driver::Event and its command interpreter (Event::Update). | Event names from sead config ('Can't find event name from config'), external parameters, effect preset numbers | sead config (buses, categories, events, macros, effect presets); file not traced | 0x1405dddd0 | 228 functions, 95.8 KB |
| sead: voices, sound types, streaming and tracks | Plays sound data. Covers StreamingBank/AudioStream (streamed bank reads and seeks), OnMemoryBank, sequences, the sound types RandomSound, VariationSound, OrderSound, CycleSound and SwitchSound, meter and timing conversion, and Driver::Voice, which decodes CRI HCA (HCADecoder_*) and MSADPCM materials into source voices. Also the Track, MaterialTrack and SoundTrack players. | — | Materials of sabf banks: the voice plays codecs 1 (PCM), 2 (MSADPCM) and 7 (HCA); every game material is HCA (sabf.md) | 0x1405faf80 | 239 functions, 59.5 KB |
| sead: WASAPI audio output and capture | Windows audio backend (SQEX::Sd::Driver::WASAPI::WASAPIDevice, AudioRenderer, AudioCapturer, DeviceEventHandler, MockDevice). It opens the default render and capture endpoints through IMMDeviceEnumerator and IAudioClient, follows device changes, and can route audio to a DualSense 'Wireless Controller' speaker through the pad library (scePadSetAudioOutPath, scePadSetVolumeGain). | Windows MMDevice/WASAPI endpoints; DualSense audio endpoint 'Wireless Controller'; pad library speaker calls | — | 0x140600720 | 50 functions, 14 KB |
| sead: core voices and DSP bus effects | Mixing voices (Core::CoreMasterVoice, CoreSubmixVoice, CoreSourceVoice::Render) and the bus effects built from config params: SurroundReverb, BuildReverb, FaithReverb, VelvetNoiseReverb, SurroundEarlyReflection, Diffusion, Compressor, SideChainInput, SimpleFilter, Equalizer4Band, Delay, Flanger, WahWah, HilbertFilter, FourierAnalysis, GranularPitchShift, GranularTimeStretch, HeliumVoiceChanger, MultichannelFader and PS5HapticsEmulator. The second range is a SIMD sin/cos helper that FaithReverb and another sead function call. | CONFIGBUSEFFECT* parameter blocks from sead config | — | 0x140602d60 | 350 functions, 148.6 KB |
libraries
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| CRI HCA decoder (CRI Middleware, (c) 2009-2010) | CRI's HCA audio codec, which decodes HCA streams to float PCM. 0x140003fd0 parses the header chunks HCA/fmt/comp/dec/ath/loop/ciph/rva/comm, with masked chunk tags (& 0x7f7f7f7f) for encrypted headers. The rest is block decode, channel and volume matrices, and refcounted init/finalize. Its only callers are the Square Enix SEAD sound engine (SQEX::Sd::MabFile::Music::Music, SQEX::Sd::Driver::Voice, AudioBinaryFile::Material), whose error strings name the API: HCADecoder_Create, _DecodeHeader, _SetFrameData, _DecodeBlockFloat32, _SetDecodeRegion, _GetFrameSequenceInfo, _IsDataEmpty, _IsEndOfDecodeRegion. | — | No direct file opens. It decodes HCA audio held in SEAD sound banks (probably the .sab/.mab sound files). | 0x1400012f0 (HCADecoder_Create, called by MabFile::Music); header parse 0x140003fd0 | 45 functions, 14.6 KB |
| Win32++ | The open-source Win32++ windowing library: registers and creates windows ('Win32++ Window'), handles window messages and painting, ReBar, and monitor info, and throws CWinException. Probably the game's main window. | USER32/GDI32 window APIs; monitor info (MonitorFromWindow, GetMonitorInfoA). | — | 0x1400840d0 (window class registration and CreateWindowEx) | 79 functions, 18.3 KB |
| zlib 1.2.11 | Inflate (decompression). The engine uses it to raw-inflate Shader.dat and other compressed blobs (0x1401a2a00). | — | — (decompresses Shaders/Shader.dat for its caller) | 0x140199170 | 31 functions, 22.3 KB |
| libtheora and libogg with a threaded playback wrapper | Decodes Theora video: frame reconstruction, 8x8 IDCT (Theora constants at 0x1401fafd0, also called from code at 0x14063c4b0-0x140644500), and a wrapper that copies YCbCr planes on worker threads ('copy ycbr'). It is driven by Taco::Framework::VideoTheoraDecoder (0x14026b960, outside this range) for the movies. | — | movie/*.pmf through VideoTheoraDecoder (pmf.md) | 0x1401e29f0 | 131 functions, 65.1 KB |
| libjpeg 9 (IJG) | Full JPEG compress and decompress: marker reading and writing, Huffman coding, color conversion, memory manager (JPEGMEM), and the scaled forward and inverse DCTs (the 68 large functions at 0x1401c3a00 are forward_DCT plus the jfdctint/jidctint size variants). Only Mx::Jpeg::BladeCodec calls into it. This is the 190 KB that the region map left unlabeled at 0x1401aec50-0x1401de573. | env JPEGMEM | — | 0x1401ac7b0 | 280 functions, 205.7 KB |
| Bullet physics: debug draw and basic shapes | The statically linked Bullet pieces used by bl::collision: the debug-draw routines (lines, spheres, boxes, capsules and so on), ray and convex result callbacks, and basic shapes. | — | — | 0x1401e80f0 | 37 functions, 19.3 KB |
| FreeType (with its bundled zlib 1.1.4 gzip and LZW modules) | The full FreeType font engine: TrueType, CFF/CID, Type1, Type42, PCF/BDF drivers, the autofitter and PostScript hinter, plus its own zlib 1.1.4 copy (0x140257750) and the .Z/LZW decompressor (0x14025a180, magic 1F 9D). It rasterizes the game's TTF fonts. | FreeType module properties (hinting-engine, no-stem-darkening, …) | — | 0x1401fbf80 | 853 functions, 369.8 KB |
| LZ4 1.9.2 | The LZ4 compression library (compress and decompress, safe, fast and streaming forms). Version string '1.9.2'. | — | Probably the LZ4-compressed entries decompressed by FileSystem::Decomp | 0x1402b6e50 | 41 functions, 27 KB |
| Sony pad library for PC (libScePad, probably) | Statically linked Sony controller library returning SCE_PAD error codes (0x8092xxxx). It finds HID devices through SetupAPI, reads and writes reports with overlapped I/O on its own thread, and handles DualShock 4 (PID 0x05C4/0x09CC), DualSense (0x0CE6), DualSense Edge (0x0DF2) and the wireless adapter (0x0BA0): touchpad info (1920x942), controller type, light and vibration features. bl::peripheral::LowInputDevicePadPS (0x140107aa0-0x140107e70), FUN_1400b71a0 and sead's WASAPI device call it. The second range holds the pad audio entry points (speaker support check, volume gain, audio output path) that sead uses. | HID devices via SetupDi*/HidD_*/HidP_*, Sony VID 0x054C; WinMM timer (timeBeginPeriod) | — | 0x140552d70 | 136 functions, 51.8 KB |
| Bullet physics | Bullet collision and dynamics library, probably 2.8x (predictive contacts, bugs@continuousphysics.com string): btDiscreteDynamicsWorld, btCollisionWorld ray and convex sweep tests, the btAxisSweep3 and btDbvt broadphases, btSequentialImpulseConstraintSolver, collision algorithms for box, sphere, capsule, triangle-mesh/BVH, compound and convex shapes, GJK/EPA, and convex-hull/polyhedron code at the tail. The game uses it through bl::collision::DynamicsWorld/Body/Mesh/ShapeMesh (world set up at 0x1401e5ba0) and Mx::Collision::Blade::CollisionBlade. | — | — (meshes come from the game's bl::collision code) | 0x14056d1e0 | 652 functions, 343.9 KB |
| libvorbis (decoder) | This is the 90 KB unlabeled block. It is Xiph libvorbis decoding: vorbis_synthesis_headerin (0x140631000, checks the 'vorbis' magic and returns OV_ENOTVORBIS/OV_EBADHEADER), _vds_shared_init/vorbis_synthesis_init (0x14062f230/0x14062f790), vorbis_block_init and _vorbis_block_alloc, plus codebook, floor, residue and MDCT code. Its only outside caller is the Theora video player at 0x1401e0ae0, so it decodes movie audio. The Ogg bit-packer it calls (0x1401fbe40) lives outside this range. | — | Vorbis streams in movie/*.pmf through the Theora player, but no shipped .pmf has one, and decoded audio is discarded (0x14026c300); movie sound comes from sabf banks (pmf.md) | 0x140631000 | 120 functions, 89.5 KB |
runtime
| System | What it does | Settings, files and inputs | Game data | Start here | Size |
|---|---|---|---|---|---|
| C++ static initializers (CRT dynamic-init functions for global objects) | Constructors for global variables, run once at startup from the CRT's initializer table. None of them has a direct caller. They appear in link order. Engine side: a named mutex "%08x_exception", bl::archive zlib/LZMA decompressor registration, precomputed 15-tap Gaussian blur weight tables, cos and ramp tables, and bl::gfx/bl::lyt/bl::efx globals (TextureUnit pool, RayTestInfo lambda). Game side: Taco::Framework HardPad/SoftPad, bl::gfx samplers, MenuWindow/menuresource, BattleJobs, UNIT, MAP_OBJECT, BattleMenuRoot, DropItemMenu and event data globals. Library side (0x14002c4f0 onward): libra tsmalloc pools, SEAD sound critical sections, two std::list lookup tables, and two large tables of records with IDs 0xffff00NN, purpose unknown. | — | — | 0x140005b10 (bl::archive decompressor registration); each function is independent | 146 functions, 16.6 KB |
| MSVC runtime pieces in the engine | Small runtime pieces: scalar-deleting destructors labeled as the Concurrency Runtime (probably identical tiny destructors folded together), and std::exception (0x1400822c0). | — | — | 0x1400822c0 (std::exception) | 15 functions, 1.1 KB |
| Concurrency Runtime (MSVC) | MSVC Concurrency Runtime support code. | — | — | 0x140293800 | 6 functions, 1.2 KB |
| MSVC C runtime startup and import thunks | MSVC CRT startup (entry, _scrt*, security cookie, thread-safe static init, atexit, GS handlers, _com_error) and the import thunks into VCRUNTIME140, the api-ms-win-crt DLLs, HID.DLL and KERNEL32, plus _guard_dispatch_icall (Control Flow Guard). The first region starts at 0x14054ffa0, just below this range, and is mislabeled 'Bullet physics' in regions.jsonl. | Process command line and environment (CRT init) | — | 0x140550c94 | 134 functions, 5.7 KB |
| C++ exception unwind and catch funclets | Compiler-generated EH funclets (.text$x) for functions all over the executable. Each takes (exception, frame) and destroys locals or frees buffers during unwinding, and some are catch blocks. Regions here labeled Win32++, system/activity.cpp and bl::fnd are these funclets for those systems, not the systems' own code. The catch blocks at 0x14064c590/0x14064c5de show a MessageBox ('error' / 'unknown exception'), and 0x140648bc0 logs Win32++ CWinException with OutputDebugString: the top-level error handlers. | — | — | 0x14064c590 | 627 functions, 24.8 KB |
| Static object destructors (atexit) | Dynamic atexit destructors for global and static objects, run at shutdown. They reset vtables and free global vectors and arrays for bl::memory::MemorySys, TimeSys, MathSys, BitSet, bl::util::BinaryTree, bl::thread::Runnable, bl::gfx::IndexStreamImpl, bl::efx InstanceAllocator, Taco::Framework MenuDrawObject/KeyboardInput/MouseInput, AiActionKicker, AiSquadObjective, PERFORM, and sead singleton handles (critical-section-guarded refcounts, 0x140659460 onwards). They hold no game logic, but each one names a global's address. | — | — | 0x140657a00 | 155 functions, 6.8 KB |
Source modules
The executable's assert and log strings name 98 of its source files, so the functions that use those strings can be grouped by file and game system (exe.source_files, the source files). Each row is a lead (likely at best): a function can carry an inlined helper's string from another file, and only 472 functions reference any source file. The .cpp paths are relative (battle/battledata.cpp), the headers full (taco/framework/menu/menuwindow.h).
| Source folder | Functions | Files |
|---|---|---|
battle/ |
18 | battledata.cpp, battlemanager.cpp, battle.cpp, entry.cpp, army.cpp, panelrender.cpp, panelmisc.cpp, fortuneringmanager.cpp; menu/battleresultmanager.cpp |
bg/ |
10 | bgmanager.cpp, bgresourceproxy.cpp |
event/ |
8 | eventdata.cpp, eventobject.cpp, message/messagewindow.cpp |
file/ |
7 | filetable.cpp, filesystem.cpp, filecache.cpp, cacheslot.cpp, filedesc.cpp |
menu/ |
41 | menudata.cpp, menuresource.cpp, menuobject.cpp, menuwindow.cpp, menuunitlist.cpp, menunameinput.cpp, … and 9 files in saveload/ |
sound/, driver/, soundsystem.cpp |
17 | soundmanager.cpp, soundstream.cpp, soundcontroller.cpp, bankcontroller.cpp, … |
system/ |
23 | saveload.cpp, savedata.cpp, systemdata.cpp, activity.cpp, transitionstack.cpp, … |
text/ |
2 | textmanager.cpp |
textseq/ |
7 | textseqcaption.cpp, textseqcredit.cpp, bgseq.cpp |
unit/ |
3 | unitimage.cpp, weapon.cpp, face.cpp |
worldmap/ |
11 | menu/shopmenu.cpp, object/worldmapobject.cpp |
organize/, warrenreport/, title/ |
15 | attackteam.cpp, organizeunitdetailmenu.cpp, wrcommon.cpp, titlemastercontrol.cpp, … |
| others | 20 | effect/, graphics/, common/decoder/ (Theora movies), common/resource/, libra/, network/, saveio/, gamemain.cpp, … |
| headers | 297 | mostly taco/framework/menu/menuwindow.h (178), taco/application/battle/battlejob.h (65) and mxframeworks/common/memory.h (36) |
Query: SELECT regexp_replace(source_file, '/[^/]+$', '') AS dir, count(DISTINCT function_address) FROM exe.source_files GROUP BY 1.
Which code opens which file
- confirmed: the strings
FileTable.EDAT(0x14067dba8),FileTable.bin(0x14067dbb8) andFile\FileTable.cpp(0x14067dbd0) are in.rdata;0x1402b1490(FileTable_Load) references the first two. Source: reasearch_stringsandxrefs(Ghidra);grep -aover the executable. - likely: the game opens its files by group ID and file ID through
FileTable_OpenById(0x1402af860), not by name: the only game file names among its strings areShader.dat,FileTable.binandFileTable.EDAT. Source:exe.stringsmatched against every file name inFileTable.bin; how the game reads FileTable.bin. - likely:
FileTable_OpenByIdtakes (this, group, file ID, flags); flags is0x20at 60 of its 65 calls. Source:exe.file_open_calls(the decompiler's arguments at each call). - likely: the format tags
pakd,xlce,txte,ashgandMLZ0appear nowhere in the executable, as text or as a 4-byte constant;sabfappears once, as data. So most loaders don't recognize formats by their tags, and a format's reader is found from the code that opens its files, below. Two compare first bytes one at a time, which neither search finds:0x1402e62b0checksa,s,h(unpack anashgor copy), and0x14026f4b0checksp,a,k(a sprite pack) andbtx\0as the u320x787462. The text loader'sstrncmp(entry, "txt", 3)is a third (containers.md). Source:grep -a -bover the unpacked executable;exe.fourcc; ashg.md.
42 of the 65 calls to FileTable_OpenById have a constant group, and 19 of them a constant file ID too (exe.file_open_calls, joined to the decoded FileTable.bin by the exe.file_opens view, The indexes). Where the file ID isn't constant, the call opens some file in that group, chosen at run time. These callers are where each file's loader starts:
| Group | File ID | File | Opened from |
|---|---|---|---|
0x14 |
any | object/ (132 files) |
0x1402eef20, 0x1402efac0, 0x14031eeb0 |
0x1e |
any | object/ (699 files) |
0x1402efac0, 0x1402efd90, 0x14031eeb0 |
0x64 |
0x3e7 |
bg/bg_common.dat |
0x1402dcba0 |
0x96 |
any | bg/back/ (110 files) |
0x1402dd720 |
0x12c |
0x0 |
system/system_data.dat |
0x1402bd9a0 |
0x12c |
0x4 |
ScreenShot/s2_data.dat |
0x140317600 |
0x12c |
0x6 |
SaveThumb/common/SaveCommon.dat |
0x14041f000 |
0x190 |
any | sound/ (89 files) |
0x1404ac080 |
0x1f4 |
0x2801 |
menu/menu_data.dat |
0x1402bc560 |
0x1f4 |
0x2802 |
menu/menu_layout.dat |
0x1402725d0 |
0x1f4 |
0x2803 |
menu/sequence/classchange.dat |
0x1402bc560 |
0x1f4 |
0x280b |
menu/sequence/shop_owner_smoke.dat |
0x14030c300 |
0x1f4 |
0x280c |
menu/sequence/shop_item_blend_tubo.dat |
0x14030c300 |
0x1f4 |
0x2810 |
menu/menu_classface.dat |
0x1402bd080 |
0x1f4 |
0x2811 |
menu/menu_parts.dat |
0x140271250 |
0x1f4 |
0x2813 |
menu/texture_x4/tex_common_x4.dat |
0x140271250 |
0x1f4 |
0x2817 |
menu/fontset/fontset.dat |
0x140271250 |
0x1f4 |
any | menu/ (2,861 files) |
0x140271250, 0x140272450, 0x14030c300, 0x1403780d0 |
0x258 |
0x0 |
Font/FontAllFilePackage.dat |
0x1402a3770 (called from 0x1402c2110 via 0x1402d8220) |
0x258 |
any | Font/ (8 files: 0x14 + language) |
0x1402a3860 (called from 0x1402c2110 via 0x1402d8230) |
0x2bc |
0x0 |
WarrenReport/WarrenReport.dat |
0x140488530 |
0x2bc |
0x1 |
WarrenReport/WarrenReportText.dat |
0x14048adf0 |
0x2f8 |
any | Gallery/ (13 files) |
0x140513e60 |
0x320 |
0x0 |
worldmap/Worldmap.dat |
0x14031ac80 |
0x352 |
any | worldmap/ (45 files) |
0x14031ae40 |
0x384 |
any | event/ (10 files) |
0x140350600 |
0x3e8 |
0x1 |
battle/battle_data_release.dat |
0x1402d4a30 |
0x3e9 |
any | battle/entry/ (538 files) |
0x1402ef7b0, 0x1402ef910, 0x140320ad0 |
0x9c4 |
0x0 |
title/title.dat |
0x1404abce0 |
0xa8c |
any | textseq/ (9 files) |
0x14042b620, 0x140431490 |
0x2774 |
0x1 |
akw/akw.dat |
0x1402fe530 (Taco::Application::MenuNameInput::vfunction4) |
Every row but the two 0x258 (Font/) ones, whose calls have no constant group in exe.file_open_calls, is this query over exe.file_opens (2026-10-12, R18, the same 29 rows):
SELECT group_id, coalesce(args[3], 'any') AS file_id, count(DISTINCT path) AS files, min(path) AS first_path,
string_agg(DISTINCT caller_address, ', ' ORDER BY caller_address) AS opened_from
FROM exe.file_opens WHERE path IS NOT NULL GROUP BY ALL ORDER BY group_id, file_id;
Leads
- The other 23 calls to
FileTable_OpenByIdpass a group the decompiler doesn't see as a constant (a field, or a wrapper's argument); their callers and wrappers would complete the table above.0x140311b20passes constant file IDs0x0,0x1,0x2with a computed group: 200,effect/(Effects). The twoFont/rows above are such calls: the thunks pass the group, and0x1402c2110passes 600 (font.md). - Which code opens the files that no call here reaches:
screenshot/and most ofsystem/(effect/is group 200, opened by0x140311b20and0x140414930, Effects). They may go throughFileTable_OpenByName(4 calls) orFileDesc_OpenPath(3 calls), or a wrapper. - How a loader tells a
pakdarchive or anxlcetable apart without its tag (plan steps 4 and 5).