66 lines
1.7 KiB
Plaintext
66 lines
1.7 KiB
Plaintext
type materialtechniqueset [display="Material Technique Set"]
|
|
{
|
|
i32 technique_set_name_ptr [ui, readonly, display="Technique Set Name Ptr"];
|
|
|
|
u8 world_vert_format [ui, readonly, display="World Vert Format"];
|
|
u8 has_been_uploaded [ui, readonly, display="Has Been Uploaded"];
|
|
|
|
skip(2); // padding
|
|
skip(4); // more padding
|
|
|
|
// Technique count depends on game/platform
|
|
technique_count = 0;
|
|
if (game == "COD4") {
|
|
if (platform == "PC") {
|
|
technique_count = 34;
|
|
}
|
|
if (platform == "XBOX360") {
|
|
technique_count = 26;
|
|
}
|
|
if (platform == "PS3") {
|
|
technique_count = 26;
|
|
}
|
|
}
|
|
if (game == "COD5") {
|
|
if (platform == "PC") {
|
|
technique_count = 59;
|
|
}
|
|
if (platform == "XBOX360") {
|
|
technique_count = 51;
|
|
}
|
|
if (platform == "PS3") {
|
|
technique_count = 51;
|
|
}
|
|
}
|
|
|
|
technique_count = technique_count [ui, readonly, display="Technique Count"];
|
|
|
|
// Save position after technique count
|
|
_ptrs_start_pos = pos();
|
|
|
|
// Read technique pointers as raw bytes
|
|
if (technique_count > 0) {
|
|
_ptrs_size = technique_count * 4;
|
|
_technique_ptrs_raw = read(_ptrs_size);
|
|
}
|
|
|
|
// Parse technique set name if inline
|
|
if (technique_set_name_ptr == -1) {
|
|
technique_set_name = cstring() [ui, readonly, display="Technique Set Name"];
|
|
_name = technique_set_name;
|
|
}
|
|
|
|
// Second pass: Parse each technique if ptr == -1 (inline)
|
|
techniques = 0;
|
|
if (technique_count > 0) {
|
|
repeat(technique_count) {
|
|
_ptr_offset = _ptrs_start_pos + (_i * 4);
|
|
_ptr = u32at(_ptr_offset);
|
|
if (_ptr == 4294967295) { // -1 as u32
|
|
_technique = parse_here("materialtechnique") [ui];
|
|
techniques = push("techniques", _technique);
|
|
}
|
|
}
|
|
}
|
|
}
|