Fix Windows Wrappers and Extensions

This commit is contained in:
2026-04-10 08:13:09 +02:00
parent febd109041
commit 3a0d4eb990
4 changed files with 108 additions and 4 deletions
+10
View File
@@ -0,0 +1,10 @@
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$repoRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location $repoRoot
$env:GOCACHE = Join-Path $repoRoot ".cache/go-build"
$outputPath = Join-Path $repoRoot "tools/sow-toolkit.exe"
go build -o $outputPath ./cmd/nwn-tool
+60 -4
View File
@@ -114,13 +114,69 @@ var extensionTypes = map[string]uint16{
"png": 0x083E, "png": 0x083E,
} }
var typeExtensions map[uint16]string var typeExtensions = map[uint16]string{
0x0000: "res",
0x0001: "bmp",
0x0002: "mve",
0x0003: "tga",
0x0004: "wav",
0x0006: "plt",
0x0007: "ini",
0x000A: "txt",
0x07D2: "mdl",
0x07D9: "nss",
0x07DA: "ncs",
0x07DC: "are",
0x07DD: "set",
0x07DE: "ifo",
0x07DF: "bic",
0x07E1: "wok",
0x07E2: "2da",
0x07E3: "tlk",
0x07E6: "txi",
0x07E7: "git",
0x07E9: "uti",
0x07EA: "utt",
0x07EB: "utc",
0x07ED: "dlg",
0x07EE: "itp",
0x07F0: "uts",
0x07F1: "dds",
0x07F6: "fac",
0x07F7: "gff",
0x07F9: "ute",
0x07FB: "utd",
0x07FC: "utp",
0x07FD: "dfa",
0x07FE: "gic",
0x07FF: "gui",
0x0800: "utm",
0x0804: "dwk",
0x0805: "pwk",
0x0808: "jrl",
0x080A: "utw",
0x080C: "ssf",
0x080D: "hak",
0x080E: "nwm",
0x080F: "bik",
0x0810: "ndb",
0x0811: "ptm",
0x0812: "ptt",
0x0813: "ltr",
0x0815: "shd",
0x0818: "mtr",
0x081E: "lod",
0x083E: "png",
}
func init() { func init() {
typeExtensions = make(map[uint16]string, len(extensionTypes))
for ext, resourceType := range extensionTypes { for ext, resourceType := range extensionTypes {
if _, exists := typeExtensions[resourceType]; !exists { canonicalExt, ok := typeExtensions[resourceType]
typeExtensions[resourceType] = ext if !ok {
panic(fmt.Sprintf("missing canonical extension for resource type 0x%04X", resourceType))
}
if canonicalExt == ext {
continue
} }
} }
} }
+28
View File
@@ -28,3 +28,31 @@ func TestArchiveRoundTrip(t *testing.T) {
t.Fatalf("unexpected first resource: %#v", decoded.Resources[0]) t.Fatalf("unexpected first resource: %#v", decoded.Resources[0])
} }
} }
func TestExtensionMappingsKeep2DAAndTLKDistinct(t *testing.T) {
resourceType, ok := ResourceTypeForExtension("2da")
if !ok {
t.Fatal("expected 2da resource type")
}
if resourceType != 0x07E2 {
t.Fatalf("expected 2da type 0x07E2, got 0x%04X", resourceType)
}
extension, ok := ExtensionForResourceType(resourceType)
if !ok {
t.Fatal("expected canonical extension for 2da type")
}
if extension != "2da" {
t.Fatalf("expected 2da extension, got %q", extension)
}
tlkType, ok := ResourceTypeForExtension("tlk")
if !ok {
t.Fatal("expected tlk resource type")
}
if tlkType != 0x07E3 {
t.Fatalf("expected tlk type 0x07E3, got 0x%04X", tlkType)
}
if tlkType == resourceType {
t.Fatal("expected 2da and tlk resource types to stay distinct")
}
}
+10
View File
@@ -8303,15 +8303,22 @@ func TestBuildAndPackageIncludesCompiled2DAAndTopAssets(t *testing.T) {
} }
found2DA := false found2DA := false
foundAsset := false foundAsset := false
foundTLK := false
for _, resource := range archive.Resources { for _, resource := range archive.Resources {
ext, _ := erf.ExtensionForResourceType(resource.Type) ext, _ := erf.ExtensionForResourceType(resource.Type)
key := strings.ToLower(resource.Name) + "." + ext key := strings.ToLower(resource.Name) + "." + ext
if key == "repadjust.2da" { if key == "repadjust.2da" {
if resource.Type != 0x07E2 {
t.Fatalf("expected repadjust.2da to keep resource type 0x07E2, got 0x%04X", resource.Type)
}
found2DA = true found2DA = true
} }
if key == "testicon.png" { if key == "testicon.png" {
foundAsset = true foundAsset = true
} }
if ext == "tlk" {
foundTLK = true
}
} }
if !found2DA { if !found2DA {
t.Fatalf("expected repadjust.2da in top package") t.Fatalf("expected repadjust.2da in top package")
@@ -8319,6 +8326,9 @@ func TestBuildAndPackageIncludesCompiled2DAAndTopAssets(t *testing.T) {
if !foundAsset { if !foundAsset {
t.Fatalf("expected testicon.png in top package") t.Fatalf("expected testicon.png in top package")
} }
if foundTLK {
t.Fatalf("expected top package hak to exclude tlk resources")
}
if _, err := os.Stat(result.OutputTLKPath); err != nil { if _, err := os.Stat(result.OutputTLKPath); err != nil {
t.Fatalf("expected packaged tlk output: %v", err) t.Fatalf("expected packaged tlk output: %v", err)
} }