2.8 KiB
Object-model inventory (from RTTI)
The binary retains full MSVC RTTI — 1,924 type descriptors across 41,411 functions.
Extracted directly from the .?AV/.?AU type-descriptor strings. This is the spine of the
object-model map. Raw list: rtti-raw.txt. Cleaned: classes-game.txt (1,404),
classes-mars.txt (194), serializable-types.txt (179).
Note: Ghidra's headless RTTI analyzer ran but built 0
SymbolType.CLASSnamespaces on our query — a tooling detail to sort out in ReVa (re-run/point the right analyzer, or read the demangled names). The RTTI itself is present and rich; names here come straight from the binary.
Architecture (two namespaces)
Mars— the engine (194 classes). SOTS1's engine is Mars (SOTS2 later used Mercury).- Render:
DrawDevice,Camera,BatchedPrimitiveImpl,Decal,Effect/EffectPool, particle painters (Beam,Billboard,BaseParticlePainter),Dictionary<Mesh|Model|Texture>. - Scene/entity/physics:
EntityBase,EntityFactory,PhysicalEntity,Body,RigidBody,Dynamics,CombatSim,SceneObject. - Serialization:
IStreamable+StreamableHelper<T>/VectorHelper<T>/StreamableEnum(every serializable type is wrapped — seeserializable-types.txt). Asset I/O:Buffer::gobio(the.gobreader/writer). - Net:
BitStreamImpl/BitStreamExt,FNM*(framed network messages). - UI framework:
Control,Button,CheckBox,Dialog,DockablePanel,DropDownList,EditView.
- Render:
Game— game logic + UI (1,404 classes), built on Mars.
High-value targets (object model — goal #1)
The empire is modeled as a Player (SOTS terminology), not "Empire" (that's UI).
- Player/empire:
Game::AIPlayer,Game::ClientPlayer,Game::GameSetup_Player,Game::PlayerAid. - Star map:
Game::StarSystem(+PlayerView@StarSystem),Game::Planet/DOPlanet/Creator::Planet. - Ships/design:
Game::ShipData,Game::ShipDesignDef,Game::DesignList,Game::ObservedDesign. - Fleets:
Game::FleetLayout(+ manager/list UI around it). - Combat:
Game::GameCombatSim, theGame::CombatCommand*hierarchy (~40 command types),Game::Encounter*results,Mars::CombatSim,Mars::CombatSimContactHandler. - Base entity:
Game::Actor→Game::TargetableEntity→Mars::PhysicalEntity→Mars::EntityBase.
Control-flow / renderer anchors
- Entry / bootstrap:
Mars::AppStartup. - Renderer:
Mars::DrawDevice+Camera→ D3D9 device init (Direct3DCreate9/CreateDevice).
How this feeds the campaign
serializable-types.txt ≈ the save/on-disk data model — the ideal cross-reference against the
community save-editor structs (verify layouts against real saves). The Player/StarSystem/Planet/
ShipDesignDef cluster is the first deepen-set; Buffer::gobio anchors the .gob parser for verify/.