namespace Age.Engine.Model; public sealed class Script { public string Name { get; init; } = ""; /// Raw packed SYS4/AAI resource id used as this script's native ReadTextDB key. public uint PackedId { get; init; } public required ScriptHeader Header { get; init; } public required IReadOnlyList Instructions { get; init; } public required IReadOnlyDictionary IndexByOffset { get; init; } public required IReadOnlyDictionary Strings { get; init; } /// Unmodified SYS4 body dwords, retained for inline data operands such as opcode 0x64. public IReadOnlyList BodyDwords { get; init; } = Array.Empty(); /// T1 entries: code DWORD offsets of op-0x71 message boundaries. public IReadOnlyList ReadMessageOffsets { get; init; } = Array.Empty(); public string GetString(int offset) => Strings.TryGetValue(offset, out var s) ? s : ""; }