type materialpass [display="Material Pass"] { // Pointers first (header) i32 vertex_decl_ptr [ui, readonly, display="Vertex Decl Ptr"]; i32 vertex_shader_ptr [ui, readonly, display="Vertex Shader Ptr"]; i32 pixel_shader_ptr [ui, readonly, display="Pixel Shader Ptr"]; // Arg counts (COD4 uses u8) u8 per_prim_arg_count [ui, readonly, display="Per Prim Arg Count"]; u8 per_obj_arg_count [ui, readonly, display="Per Obj Arg Count"]; u8 stable_arg_count [ui, readonly, display="Stable Arg Count"]; u8 custom_sampler_flags [ui, readonly, display="Custom Sampler Flags"]; i32 args_ptr [ui, readonly, display="Args Ptr"]; // Now parse inline data if pointers are -1 if (vertex_decl_ptr == -1) { vertex_decl = parse_here("materialvertexdeclaration"); } if (vertex_shader_ptr == -1) { vertex_shader = parse_here("materialvertexshader"); } if (pixel_shader_ptr == -1) { pixel_shader = parse_here("pixelshader"); } // Parse args if ptr is -1 (inline) _arg_count = stable_arg_count + per_obj_arg_count + per_prim_arg_count; if (args_ptr == -1 && _arg_count > 0) { arguments = 0; repeat(_arg_count) { _arg = parse_here("materialshaderargument"); arguments = push("arguments", _arg); } } }