type scriptstringlist [display="Script String List"] { u32 raw_count [ui, readonly, display="Raw Count"]; i32 strings_ptr [ui, readonly, display="Strings Ptr"]; // C++ code decrements count by 1 count = raw_count - 1 [ui, readonly, display="Count"]; if (strings_ptr == -1) { // Two-pass parsing (matching C++ XScriptStringList::ParseData) // Pass 1: Read all string pointers repeat(count) { i32 str_ptr; string_ptrs = push("string_ptrs", str_ptr); } // Pass 2: Parse all strings (reads null-terminated string data) // Note: Each string should check if its ptr == -1 before parsing repeat(count) { str = parse_here("scriptstring"); strings = push("strings", str); } strings = strings [ui, table="Strings", columns="ptr,value"]; } }