new material version

This commit is contained in:
Skillbert
2025-12-08 18:36:31 +01:00
parent a3af98e663
commit 73fc407bc1
7 changed files with 845 additions and 724 deletions

View File

@@ -117,4 +117,69 @@ export type materials = {
unkFFFF: Uint8Array,
endbyte: number,
} | null,
v2: {
flags: number,
opaque_2: number,
flag3: number,
hasDiffuse: number,
hasNormal: number,
hasCompound: number,
hasUVanimU: number,
hasUVanimV: number,
flag10: number,
flag11: number,
flag12: number,
flag13: number,
flag14: number,
flag15: number,
flag16: number,
ignore_vertexcol_17: number,
flag18: number,
flag19: number,
flag20: number,
flag21: number,
diffuse: {
size: number,
texture: number,
} | null,
normal: {
size: number,
texture: number,
} | null,
compound: {
size: number,
texture: number,
} | null,
flag13value: number | null,
flag14value: [
number,
number,
] | null,
flag15value: number | null,
flag18value: number | null,
flag16value: number | null,
flag12value: number | null,
flag11value: [
number,
number,
number,
] | null,
flag19value: [
number,
number,
number,
number,
number,
] | null,
normalScale: number | null,
flag17value: number | null,
uvanim_u: number | null,
uvanim_v: number | null,
always_0x0901: Uint8Array,
unknownbyte0: number,
alphamode: number,
alphacutoff: number | null,
unkFFFF: Uint8Array,
endbyte: number,
} | null,
};

View File

@@ -1,7 +0,0 @@
// GENERATED DO NOT EDIT
// This source data is located at '..\src\opcodes\playerkit.jsonc'
// run `npm run filetypes` to rebuild
export type playerkit = {
name?: string | null
};

View File

@@ -86,8 +86,9 @@ export function convertMaterial(data: Buffer, materialid: number, source: CacheF
mat.baseColor = (raw.extra.baseColor == 0 ? [1, 1, 1] : HSL2RGBfloat(packedHSL2HSL(raw.extra.baseColor)));
}
mat.stripDiffuseAlpha = (mat.alphamode == "opaque");
} else if (rawparsed.v1) {
let raw = rawparsed.v1;
} else if (rawparsed.v1 || rawparsed.v2) {
// currently v1 and v2 have the same structure
let raw = (rawparsed.v1 || rawparsed.v2)!;
//this is very wrong
mat.alphamode = (raw.opaque_2 && !raw.hasUVanimU ? "cutoff" : "blend");
mat.baseColorFraction = 1;

View File

@@ -32,7 +32,7 @@ async function buildFileTypes() {
typesfile += "// " + e.toString().replace(/\n/g, "\n//");
}
//I'm sorry, git made me do this
typesfile = typesfile.replace(/(?<!\r)\n/g, "\r\n");
// typesfile = typesfile.replace(/(?<!\r)\n/g, "\r\n");
let outfile = path.resolve(outdir, objname + ".d.ts");
fs.writeFileSync(outfile, typesfile);
}

View File

@@ -106,6 +106,68 @@
["uvanim_u",["opt",["hasUVanimU",1],"short"]],
["uvanim_v",["opt",["hasUVanimV",1],"short"]],
["always_0x0901",["buffer",2,"hex"]],//only a couple with 0001
["unknownbyte0","ubyte"],//always 0
["alphamode","ubyte"],//0,1,2
["alphacutoff",["opt",["alphamode",1],"ubyte"]],//127 most of the time
["unkFFFF",["buffer",2,"hex"]],
["endbyte","ubyte"]//usually equal to max texture size always 0-4
]]],
// seems to be the same as v1 so far
["v2",["opt",["version",2],["struct",
["flags","uint"],
//0,1 unused
["opaque_2",["ref","flags",[2,1]]],//3061/3250
["flag3",["ref","flags",[3,1]]],//3095 most mats without are never used in a model
//4unused
["hasDiffuse",["ref","flags",[5,1]]],//3250, always true
["hasNormal",["ref","flags",[6,1]]],//2878
["hasCompound",["ref","flags",[7,1]]],//2223
["hasUVanimU",["ref","flags",[8,1]]],//44 uv anim u?
["hasUVanimV",["ref","flags",[9,1]]],//49 uv anim v?
["flag10",["ref","flags",[10,1]]],//282 possibly bloom
["flag11",["ref","flags",[11,1]]],//41 metalic?
["flag12",["ref","flags",[12,1]]],//1 use
["flag13",["ref","flags",[13,1]]],//73 glasslike diffraction/lensing? https://runescape.wiki/w/Altar_of_War
["flag14",["ref","flags",[14,1]]],//3179
["flag15",["ref","flags",[15,1]]],//2 use, skybox and https://runescape.wiki/w/Oathbreaker_Outfit
["flag16",["ref","flags",[16,1]]],//3069
["ignore_vertexcol_17",["ref","flags",[17,1]]],//338
["flag18",["ref","flags",[18,1]]],//24 uses different skybox? ghostlike stuff https://runescape.wiki/w/Closure%27s_robes
["flag19",["ref","flags",[19,1]]],//5 use gives aurora effect https://runescape.wiki/w/Bohr
["flag20",["ref","flags",[20,1]]],//40 seems to be used on flants/leafs
["flag21",["ref","flags",[21,1]]],//3250 all materials
//22+ unused
["diffuse",["opt",["hasDiffuse",1],["struct",
["size","ubyte"],//actual size (some times) equal to 2^(6+size)
["texture","uint"]
]]],
["normal",["opt",["hasNormal",1],["struct",
["size","ubyte"],//actual size (some times) equal to 2^(6+size)
["texture","uint"]
]]],
["compound",["opt",["hasCompound",1],["struct",
["size","ubyte"],//actual size (some times) equal to 2^(6+size)
["texture","uint"]
]]],
["flag13value",["opt",["flag13",1],"float"]],
["flag14value",["opt",["flag14",1],["tuple","ushort","ushort"]]],//0,8520 or 13083 only, referencing other material?
["flag15value",["opt",["flag15",1],"float"]],
["flag18value",["opt",["flag18",1],"float"]],//not sure about location
["flag16value",["opt",["flag16",1],"float"]],
["flag12value",["opt",["flag12",1],"float"]],//not sure about location
["flag11value",["opt",["flag11",1],["tuple","float","float","float"]]],
["flag19value",["opt",["flag19",1],["tuple","float","float","float","float","float"]]],//location unknown
["normalScale",["opt",["hasNormal",1],"float"]],
["flag17value",["opt",["ignore_vertexcol_17",1],"float"]],
["uvanim_u",["opt",["hasUVanimU",1],"short"]],
["uvanim_v",["opt",["hasUVanimV",1],"short"]],
["always_0x0901",["buffer",2,"hex"]],//only a couple with 0001
["unknownbyte0","ubyte"],//always 0
["alphamode","ubyte"],//0,1,2