Generate palette projections at module build; never extract them
ci / ci (pull_request) Successful in 3m44s

*palcus.itp files are Toolset-generated snapshots: category skeleton plus
one descriptor per custom blueprint. Treat them as derived data. Module
source now commits only descriptor-free skeletons; build strips any stale
descriptors and re-inserts descriptors computed from the blueprints in the
source tree (name/STRREF, resref, and CR/faction for creatures), so the
DM Creator lists always match what actually ships in the .mod. Compare
applies the same projection. Extract skips *palcus.itp entirely, so local
Toolset palette churn can no longer leak into module source.

Blueprints with PaletteID 255 (hidden) or no PaletteID are omitted, per
engine convention.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-23 11:24:49 +02:00
co-authored by Claude Fable 5
parent 8e7cead5c0
commit 450c3ebc59
5 changed files with 513 additions and 2 deletions
+7
View File
@@ -124,6 +124,13 @@ func extractArchiveResources(p *project.Project, archive erf.Archive, desired ma
skippedCount++
continue
}
// *palcus.itp are Toolset-generated palette projections; the module
// build regenerates them from source blueprints, so extraction never
// writes them back into source.
if ext == "itp" && isPaletteProjectionResref(resource.Name) {
skippedCount++
continue
}
target, data, err := extractedFile(p, resource, ext)
if err != nil {