30 lines
1.1 KiB
Plaintext
30 lines
1.1 KiB
Plaintext
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; |