Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 7 additions & 30 deletions HelperScripts/generate-obj-mappings.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env deno run --allow-read --allow-write
/**
* Generates StdlibObjectMappings.java from WurstStdlib2 object editing wurst files.
* Generates stdlib-obj-mappings.json from WurstStdlib2 object editing wurst files.
* Run this script after stdlib changes to regenerate the mappings used by the compiler
* when producing enriched object editing output.
*
Expand All @@ -14,12 +14,16 @@ function resolveStdlibBase(): string {
return "./de.peeeq.wurstscript/temp/WurstStdlib2/wurst";
}
const STDLIB_BASE = resolveStdlibBase();
const HELPER_ABILITY_FILE = "./HelperScripts/AbilityObjEditing.wurst";
const UNIT_BALANCE_SLK = "./HelperScripts/unitbalance.slk";
function resolveUnitBalanceSlk(): string {
const legacy = "./HelperScripts/unitbalance.slk";
try { Deno.statSync(legacy); return legacy; } catch (_) {}
return `${GAMEDATA_DIR}/unitbalance.slk`;
}
const OUT_FILE =
"./de.peeeq.wurstscript/src/main/resources/stdlib-obj-mappings.json";
const KB_OUT_FILE = "./HelperScripts/wc3-knowledge-base.json";
const GAMEDATA_DIR = "./HelperScripts/gamedata";
const UNIT_BALANCE_SLK = resolveUnitBalanceSlk();

// ---------------------------------------------------------------------------
// Types
Expand Down Expand Up @@ -823,33 +827,6 @@ const abilityClasses = parseObjEditingFile(
);
console.log(`Parsed ${abilityClasses.length} ability class definitions from stdlib`);

// Supplement with HelperScripts generated file: add classes for base IDs not already
// covered by the stdlib (these are abilities with only common fields — no specific fields).
try {
const helperClasses = parseObjEditingFile(Deno.readTextFileSync(HELPER_ABILITY_FILE));
// Collect already-mapped base IDs from stdlib so we don't override them
const stdlibBaseIds = new Set<string>();
for (const cls of abilityClasses) {
if (cls.rawBaseId) stdlibBaseIds.add(cls.rawBaseId);
if (cls.abilityIdsConstant) {
const r = abilityIdMap.get(cls.abilityIdsConstant);
if (r) stdlibBaseIds.add(r);
}
}
let supplemented = 0;
for (const cls of helperClasses) {
const rid = cls.rawBaseId ?? (cls.abilityIdsConstant ? abilityIdMap.get(cls.abilityIdsConstant) : undefined);
if (rid && !stdlibBaseIds.has(rid)) {
abilityClasses.push(cls);
stdlibBaseIds.add(rid);
supplemented++;
}
}
console.log(`Supplemented ${supplemented} base IDs from HelperScripts`);
} catch (_) {
console.log("HelperScripts/AbilityObjEditing.wurst not found, skipping supplement");
}

const unitClasses = parseObjEditingFile(
Deno.readTextFileSync(`${STDLIB_BASE}/objediting/UnitObjEditing.wurst`)
);
Expand Down
Loading
Loading