struct Header { u16 scriptPointersTableOffset; u16 scriptStartOffset; u16 textPointersTableOffset; u16 textStartOffset; }; Header header @ 0x00; // Важно: вычитание двух u16 может дать underflow → результат интерпретируется как большое положительное число // Поэтому лучше сразу привести к u32, чтобы избежать проблем u32 scriptCount = (u32(header.scriptStartOffset) - u32(header.scriptPointersTableOffset)) / 2; u32 textCount = (u32(header.textStartOffset) - u32(header.textPointersTableOffset)) / 2; struct ScriptEntry { u16 relativeOffset; // Явно приводим к u32 перед сложением — на всякий случай u16 firstWord @ (u32(header.scriptStartOffset) + this.relativeOffset); }; ScriptEntry scripts[scriptCount] @ header.scriptPointersTableOffset; struct TextEntry { u16 relativeOffset; u16 firstWord @ (u32(header.textStartOffset) + this.relativeOffset); }; TextEntry texts[textCount] @ header.textPointersTableOffset;