4.2 KiB
4.2 KiB
Family Export Differences
This note summarizes the first run of the renderer-side family comparison script and points to the generated artifacts for deeper inspection.
How to Regenerate
- Run
npm run compare-family-export-datafromk:\ghidra\crusader_map_viewer\map_renderer - Generated artifacts:
k:\ghidra\crusader_map_viewer\map_renderer\generated\version-differences\family-export-differences.jsonk:\ghidra\crusader_map_viewer\map_renderer\generated\version-differences\family-export-differences.md
Normalization Rules
- The script compares the same
scene.jsonpayload thatexport-staticemits for each map. - It strips build metadata before hashing:
build.*metadata.gamemetadata.gameLabelmetadata.usage.notemetadata.usage.tableAddress
- Result: matching hashes mean the exported scene payload is content-identical after removing packaging-only metadata. Differing hashes mean something in the exported map payload changed, even if the high-level item counts stayed the same.
No Remorse Family
- Map presence:
- retail,
1.01, and JP all expose the same63detected maps - demo exposes only map
1
- retail,
- Shared-map headline:
- no shared Remorse-family map hashed identically across compared versions in this first run
- that does not mean every map has large layout changes; many differences are below the top-line counters
- Retail vs
1.01:- this is the clearest structural delta in the family
- many shared maps have small but real count changes in raw fixed rows, rendered items, or sprite totals
- representative examples from the generated report:
- map
1: raw7547 -> 7530, rendered17584 -> 17567, sprites790 -> 791 - map
15: raw7473 -> 7486, rendered13667 -> 13680, sprites686 -> 687 - map
24: raw2296 -> 2285, rendered5028 -> 5020, sprites517 -> 520
- map
- Retail vs JP:
- all
63shared maps differ at the normalized payload level - the top-line counts stayed the same in the summary lines sampled from the generated report, which suggests the interesting deltas are likely deeper in the serialized scene payload rather than simple map-size changes
- that makes JP a good candidate for focused scene-structure or sprite-definition diffing rather than another map-count pass
- all
- Retail vs demo:
- only map
1is shared - map
1differs in normalized payload, but the headline counts remained the same in the first-pass summary (raw 7547,render 17584,sprites 790on both sides) - that again points to deeper scene-serialization or resource differences instead of a broad layout mismatch
- only map
1.01vs JP:- the maps with visible count deltas line up with the retail-vs-
1.01changes, which is consistent with JP often tracking retail more closely than1.01does for top-line counts
- the maps with visible count deltas line up with the retail-vs-
No Regret Family
- Map presence:
- retail exposes
38detected maps - demo exposes only maps
1and2
- retail exposes
- Shared-map headline:
- maps
1and2both differ between retail and demo
- maps
- Concrete count deltas from the generated report:
- map
1: raw5073 -> 5104, rendered8809 -> 8840, sprites629 -> 639 - map
2: raw3078 -> 3093, rendered5544 -> 5559, sprites523 -> 531
- map
- Category shift pattern:
- both shared demo maps gained fixed-source rows and editor records relative to retail
- map
1also shifts the base/editor/terrain mix slightly, which makes it a strong candidate for targeted scene-item diff tooling later
Practical Hunting Order
- First: Regret retail vs demo maps
1and2, because the delta set is small and the count changes are obvious - Second: Remorse retail vs
1.01on maps with visible count deltas such as1,15,24,29,40, and41 - Third: Remorse retail vs JP on maps where counts stay identical, because those likely hide more subtle structural or resource-order differences
Notes
- The Regret demo export path now depends on per-entry
SHAPES.FLXfallback to retail Regret art for sparse demo archives. That fallback is intentional and currently required for successful export. - This report is meant to narrow the search space. When a pair/map looks interesting, the next pass should diff the specific exported
scene.jsonentries or inspect the underlyingFIXED.DATrows and shape references directly.