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](../assets/analysis/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
```mermaid
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](MB3_DAT.md) and [E02](experiments/converter-2026-10-21.md). 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.