nanobrush / docs /DEPENDENCIES.md
nmarshall's picture
formats: map dat converter
543c8e8
|
Raw History Blame Contribute Delete
6.62 kB

Dependency and build map

Source-level finding F22, 2026-10-21. Baseline paths are relative to assets/references/extracted/2016-03-10-c/. All five builds are indexed in source-map.json; source hashes and line anchors accompany each edge.

Compile-time include graph

tools/includePaths.txt declares five search directories relative to tools: data/sources/include/core, include/IXPL, include/IXPL/general, include/IXPL/files, and include. The index additionally considers a source-local file candidate. Actual compiler search precedence is unmeasured.

Build IXPL files Include directives Missing or ambiguous candidate sets
2015-10-03 42 91 0
2015-11-15 42 91 0
2015-11-24 42 91 0
2015-12-08 43 96 0
2016-03-10-c 47 118 0

Every directive has exactly one existing candidate in this corpus. This establishes source closure under the stated candidate policy, not successful compilation. The index retains direct/transitive include edges and plugin-qualified Core method references; virtual calls, branches and dynamic handler invocations are not a typed execution graph.

Build and execution boundaries

flowchart TD
  Start[First-start BAT] --> ModelBuild[IXPL cxo model build]
  Start --> PluginBuild[IXPL cso plugin build]
  ModelBuild --> IXM[Generated models/ixm]
  PluginBuild --> Plugin[Generated plugins/plugin]
  Editor[Native editor / Akula host] --> Plugin
  Editor --> IXM
  Plugin --> API[Core interrupt APIs]
  Plugin --> Tasks[Named task interfaces]
  Menu[Main-menu plugin] --> Batch[Conversion BAT wrappers]
  Batch --> Converter[Managed file-formats tool]
  Converter --> DAT[MB3 DAT intermediates]
  Editor --> DAT

Arrows represent source/build dependencies, not a measured temporal load order.

The first-start script compiles top-level model and plugin sources before moving the editor executable to the archive root. Model BAT wrappers use IXPL.exe cxo <source> <output.ixm>; plugin wrappers use cso <source> <output.plugin>. Top-level build all.bat enumerates only *.ixpl in its current directory; experimental sources in extra stuff/ require manual promotion. The runtime plugin enumeration and exact ordering are still host implementation questions.

GPU configuration BAT files only switch the presence of root ATI.ix-workaround-marker / NVIDIA.ix-workaround-marker; they do not themselves run a graphics probe or modify shader source. The cache-clear BAT deletes data/shaders/*.cache. Sources: the two configure scripts and clear shader cache.bat, all lines 1–3.

The three EXEs are separately inventoried native-editor/managed-tool artifacts, as recorded in F03. E01 did not identify PE imports, CLR target versions, external DLL resolution or executable resource tables. E02 now maps both converter assemblies: .NET Framework 4.0, PE bootstrap import mscoree.dll!_CorExeMain, references to mscorlib/System/System.Core 4.0.0.0, no managed resources or P/Invoke entries, and successful unmodified Mono 6.14.1 execution on ARM64 macOS. See F24 and E02. Editor and IXPL compiler executable dependencies remain open. The historical Wine/.NET recipe remains reported evidence.

File/resource edge classification

The machine index records a literal expression and same-name archive candidates for config/text/texture/process/world-file calls. It keeps dynamically computed names unresolved. Same-name matches are candidate dependencies, not proof of host path resolution.

Resource family Observation Disposition
Plugin settings Most literal CFG names have bundled settings files Map consumer rules and generated saves before porting
main menu.cfg Requested by main menu.ixpl:261,301, absent in the latest archive Optional/generated settings candidate; loader declaration says missing config is silent, not automatically a startup failure
Three icon atlases Calls request names without the shipped 56 suffix Loader naming rule unresolved; retain both requested and shipped names
conversion.log, load.mb3dat, save.mb3dat Absent as archive members but created/used by conversion workflows Expected generated intermediates, not missing distribution downloads
content textures/index.cfg Named by root MB3 config but absent External/optional content dependency; effect unknown
SIL font notice ReadMe names a file absent from every ZIP Unresolved provenance/redistribution requirement
Compiled plugins/models/shader caches No regular compiled plugin/model samples bundled Generated build/runtime products; keep separate from immutable sources

The source map does not classify every literal as a resource. Translation keys, tool names and help text are separate domains. It also does not treat a missing exact-name candidate as proof of an error.

Version differences

Adjacent builds change as follows (regular paths; byte hashes):

Transition Added Removed Changed same-path files
October 3 → November 15 0 1 8
November 15 → November 24 1 0 8
November 24 → December 8 1 0 24
December 8 → March 10-c 21 7 72

No adjacent transition has an identical-byte removed-to-added rename candidate. The latest has several identical-copy candidates for minimal main.shown=false settings, which do not imply a shared implementation or semantic equivalence. The older Mb3 tools and base-window modules change names/content and need semantic comparison. The report records hash identity separately from same-basename candidates.

Native rewrite dependency cuts

  1. Specify Core/world/grid semantics independently of Akula's original execution engine.
  2. Replace BAT/process conversion with native codecs and isolated CLI tools.
  3. Replace cursor/model generation with deterministic native geometry after IXModel contracts are validated.
  4. Port bundled plugin functionality into Rust modules/services; decide third-party IXPL compatibility separately.
  5. Keep preferences, view state, document data, derived meshes and task messages distinct.
  6. Validate missing-resource fallbacks and plugin service ordering before promoting source declarations to runtime contracts.

Next: P2.11 resource lookup semantics and semantic version diffs; P3.06 executable dependencies; P4.04/P4.05 lifecycle; P9 shader/asset integration. No target-native Rust implementation is introduced by this pass.