Release Healer Man 0.1.13
This commit is contained in:
1 parent
65e24f644e
commit
67d7a8ebe7
324 files changed
+917
-48
No files matched your search
@@ -3,10 +3,28 @@ import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import test from "node:test";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { decodeWotlkM2Effects, parseDbc, parseRunewakerImageRecords } from "./generate-manifest.mjs";
|
||||
import {
|
||||
decodeWotlkM2Effects,
|
||||
decodeWotlkSpellVisualKitRow,
|
||||
parseDbc,
|
||||
parseRunewakerImageRecords,
|
||||
} from "./generate-manifest.mjs";
|
||||
|
||||
const projectRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
|
||||
|
||||
test("keeps WotLK SpellVisualKit SoundID out of the model effect list", () => {
|
||||
const fields = Array.from({ length: 17 }, () => 0);
|
||||
fields[3] = 101;
|
||||
fields[14] = 112;
|
||||
fields[15] = 3_085;
|
||||
fields[16] = 999;
|
||||
|
||||
assert.deepEqual(decodeWotlkSpellVisualKitRow({ uint: (field) => fields[field] ?? 0 }), {
|
||||
effects: [101, 112],
|
||||
soundId: 3_085,
|
||||
});
|
||||
});
|
||||
|
||||
function tinyDbc() {
|
||||
const strings = Buffer.from("\0hello\0", "utf8");
|
||||
const buffer = Buffer.alloc(20 + 8 + strings.length);
|
||||
@@ -257,6 +275,38 @@ test("decodes real local WotLK Holy Smite particles and ribbons", {
|
||||
assert.ok(decoded.ribbons[0].tracks.visibility.firstSequence.samples.length > 0);
|
||||
});
|
||||
|
||||
test("generated Priest mappings keep SpellVisualKit sounds out of visual phases", () => {
|
||||
const manifest = JSON.parse(fs.readFileSync(
|
||||
path.join(projectRoot, "public", "assets", "game", "combat-effects", "manifest.json"),
|
||||
"utf8",
|
||||
));
|
||||
const entry = (spellId) => manifest.entries.find((candidate) => (
|
||||
candidate.source === "wow335" && candidate.spellId === spellId
|
||||
));
|
||||
const models = (spellId, phase) => (entry(spellId)?.phases?.[phase] ?? []).map((asset) => asset.model);
|
||||
const smiteRanks = [585, 591, 598, 984, 1004, 6060, 10933, 10934, 25363, 25364, 48122, 48123];
|
||||
const shadowWordPainRanks = [589, 594, 970, 992, 2767, 10892, 10893, 10894, 25367, 25368, 48124, 48125];
|
||||
|
||||
for (const spellId of smiteRanks) {
|
||||
assert.deepEqual(models(spellId, "cast-start"), ["Spells/Holy_Precast_Low_Hand.mdx"]);
|
||||
assert.deepEqual(models(spellId, "impact"), ["Spells/HolySmite_Low_Chest.mdx"]);
|
||||
}
|
||||
for (const spellId of shadowWordPainRanks) {
|
||||
assert.deepEqual(models(spellId, "cast-start"), ["Spells/Shadow_Precast_Low_Hand.mdx"]);
|
||||
assert.deepEqual(models(spellId, "impact"), ["Spells/ShadowWordPain_Chest.mdx"]);
|
||||
}
|
||||
assert.deepEqual(models(17, "aura-start"), ["Spells/HolyDivineShield_State_Base.mdx"]);
|
||||
|
||||
const smite = entry(585);
|
||||
assert.equal(smite.phases.impact[0].effectGraphUrl,
|
||||
"/assets/game/combat-effects/original/wow335/priest/graphs/holysmite-low-chest-5e638a90a1be.json");
|
||||
assert.ok((smite.sounds ?? []).some((sound) => sound.sourcePath === "Sound/Spells/HolyBolt.wav"));
|
||||
const pain = entry(589);
|
||||
assert.equal(pain.phases.impact[0].effectGraphUrl,
|
||||
"/assets/game/combat-effects/original/wow335/priest/graphs/shadowwordpain-chest-8c57a0056fda.json");
|
||||
assert.ok((pain.sounds ?? []).some((sound) => sound.sourcePath === "Sound/Spells/ShadowWordPainTarget.wav"));
|
||||
});
|
||||
|
||||
test("generated coverage packages every referenced source sound", () => {
|
||||
const manifest = JSON.parse(fs.readFileSync(path.join(projectRoot, "public", "assets", "game", "combat-effects", "manifest.json"), "utf8"));
|
||||
assert.equal(manifest.coverage.requested, manifest.coverage.authentic + manifest.coverage.fallback);
|
||||
|
||||
Reference in new issue
Block a user