Release Healer Man 0.1.9

This commit is contained in:
phenom committed 2026-08-30 14:16:56 -04:00
1 parent c245a199b6
commit d060296ade
74 files changed
+5901 -334

No files matched your search

@@ -3,6 +3,19 @@ import path from "node:path";
import { describe, expect, it } from "vitest";
import type { AvatarManifest } from "./characterManifest";
interface RunewakerGlbDocument {
readonly animations?: readonly { readonly name?: string }[];
readonly nodes?: readonly { readonly name?: string }[];
}
function readGlbDocument(glb: Buffer): RunewakerGlbDocument {
expect(glb.readUInt32LE(0)).toBe(0x46546c67);
const jsonLength = glb.readUInt32LE(12);
return JSON.parse(
glb.subarray(20, 20 + jsonLength).toString("utf8").trimEnd(),
) as RunewakerGlbDocument;
}
const manifestFile = path.resolve("public/assets/characters/runewaker-v1/manifest.json");
describe("runewaker-v1 playable avatar pack", () => {
@@ -32,6 +45,17 @@ describe("runewaker-v1 playable avatar pack", () => {
});
const model = path.resolve("public", entry.model.replace(/^\//, ""));
expect((await stat(model)).size).toBe(entry.bytes);
const document = readGlbDocument(await readFile(model));
const animationNames = new Set(
document.animations?.map((animation) => animation.name ?? "") ?? [],
);
for (const animationName of ["Idle - 1h_idle", "Idle - 2h_idle", "Idle - bow_idle"]) {
expect(animationNames.has(animationName), `${entry.model} ${animationName}`).toBe(true);
}
const nodeNames = new Set(document.nodes?.map((node) => node.name ?? "") ?? []);
for (const nodeName of ["p_left_hand", "p_right_hand", "p_hand_shield"]) {
expect(nodeNames.has(nodeName), `${entry.model} ${nodeName}`).toBe(true);
}
}
});
});