- C# 72.5%
- Python 17.4%
- Shell 10.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Forgejo dual-series xycharts were unreliable; scripts/render-charts.py now emits teal/red grouped PNGs from CSV for the README. Co-authored-by: Cursor <[email protected]> |
||
| Code | ||
| results | ||
| scripts | ||
| .gitignore | ||
| mod.json | ||
| README.md | ||
WorldBoxPerfMod
Shared stress / performance harness for WorldBox. Same suite under:
- AexoLoader (modern, 2026 — tested against v1.7.5)
- NeoModLoader (stock / legacy install)
No remote DSN in this mod. Results are CSV + JSON only under:
%persistentData%/WorldBoxPerfMod/results/
When you run under AexoLoader, Aexo’s own BugSink (if enabled) may still capture game/loader errors during the stress run — that is AexoLoader telemetry, not this mod.
Repo: https://git.aexoradao.com/epistemophiliac/worldboxperfmod
What the suite hits
| Stage | Purpose |
|---|---|
01_map_ready |
Map / world / units API readiness |
02_mass_spawn |
8×250 human spawns (creative overload) |
03_building_flood |
Hundreds of building place attempts |
04_resource_churn |
Rapid Resources.Load churn |
05_reflection_gc |
Reflection + GC pressure |
06_drop_pressure |
MapAction / effect-style pressure |
07_sustain_sim |
20s sustained EMA frame sample under load |
Bench copies (recommended layout)
steamapps/common/worldbox-aexo/ # frozen WorldBoxModManager.dll only
steamapps/common/worldbox-nml/ # frozen NeoModLoader.dll only
Install this mod into both:
bash scripts/install-to-bench-copies.sh
Launch helpers: scripts/launch-aexo.sh / scripts/launch-nml.sh.
How to run
- Launch
worldbox-aexo(Experimental once if needed for first boot). - Load any map and wait — the suite auto-starts when
Config.game_loaded. - Copy the newest
perf_AexoLoader_*.csvfrom persistent data intoresults/. - Repeat with
worldbox-nml→perf_NeoModLoader_*.csv. - Compare:
bash scripts/compare-csv.sh results/perf_AexoLoader_….csv results/perf_NeoModLoader_….csv
Results — paired run (suite v1.0.1)
Machine-local bake-off on identical WorldBox build (Unity 2022.3.60f1), same 256×256 map, PerfMod 1.0.1, frozen loaders only (no Aexo/NML source edits).
| Artifact | Loader | Run id |
|---|---|---|
results/perf_AexoLoader_20260718_004934.csv |
AexoLoader v1.7.5 | 2ca3574c4fcc |
results/perf_NeoModLoader_20260718_004751.csv |
NeoModLoader 02266fe |
babaee166322 |
Chart foundation (use this, not Mermaid xy)
Forgejo’s Mermaid xychart cannot reliably render dual-series comparisons (stubs, all-one-color, stacking). Charts are PNG presets from CSV:
python3 scripts/render-charts.py \
results/perf_AexoLoader_….csv \
results/perf_NeoModLoader_….csv \
--out results/charts
Preset: teal #0D9488 = AexoLoader · red #DC2626 = NeoModLoader · grouped side-by-side bars · legend · value labels.
Verdict — AexoLoader wins every stress stage
| Metric | AexoLoader | NeoModLoader | Winner | How much better |
|---|---|---|---|---|
| Units spawned (of 2000) | 2000 | 250 | Aexo | 8.0× more completed |
| Spawn wall time | 452 ms | 998 ms | Aexo | 2.2× faster |
| Spawn throughput | 4427 /s | 250 /s | Aexo | 17.7× higher |
| Building-attempt loop | 167 ms | 749 ms | Aexo | 4.5× faster |
| Resource.Load churn | 134 ms | 448 ms | Aexo | 3.3× faster |
| Loads / sec | 5985 | 1785 | Aexo | 3.4× higher |
| Reflection + GC | 631 ms | 1033 ms | Aexo | 1.6× faster |
| Drop-pressure loop | 127 ms | 497 ms | Aexo | 3.9× faster |
| Sustain EMA avg (20s) | 16.7 ms | 72.8 ms | Aexo | 4.4× smoother |
| Sustain EMA max | 18.9 ms | 89.2 ms | Aexo | 4.7× lower peak |
Chart 1 — Aexo advantage (higher = Aexo better)
Chart 2 — Stage wall time (lower = better)
Chart 3 — Throughput (higher = better)
Chart 4 — 20s sustain EMA (lower = better)
Notes on fairness
- Apples-to-apples:
04_resource_churnand05_reflection_gcrun the same fixed loops on both loaders. Aexo is 3.3× / 1.6× faster. - Spawn: Aexo completed 2000/2000. NML completed 250/2000 with
NullReferenceExceptioninsidespawnNewUnit(CSVfirst_err). Throughput gap includes reliability. - Building / drop: both soft-failed stock place/effect APIs (
placed=0,fired=0); times still measure attempt overhead. - Sustain: Aexo held ~2000 units at ~17ms EMA; NML averaged ~73ms EMA over the same 20s window.
Re-run on your machine, then re-render charts with scripts/render-charts.py and commit results/.
Compatibility
- NML-style
Code/+BasicMod+[ModEntry]— loads under stock NeoModLoader and AexoLoader’s NML API host. - Does not modify AexoLoader or NeoModLoader source.
- Soft-fails stages when a stock API is missing so the suite still completes and writes CSV.
License
Use freely for benchmarking WorldBox mod loaders.



