diff --git a/campaign/board.md b/campaign/board.md index 9f1759b..ebeb0b4 100644 --- a/campaign/board.md +++ b/campaign/board.md @@ -44,6 +44,7 @@ Status flow: `backlog → in-progress → mapped → verified` (or `blocked`). | engine: mars/text | engine | verified | high | 100% | 2026-09-07 | flat-kv, id-manifest, csv; oracle 64/64 (Strings.csv 5722 rows); ctest green | | engine: game/sim formulas | engine | verified | high | 100% | 2026-09-08 | sim-pin merged: all 5 low-confidence formulas pinned (3.3 on protection limit, old-state bankruptcy decisions, hazard curve, money tail, pop bonus); tests 356->466; + game/effects (196 TechIds, 44 typed effects, 254 checks) | | engine: mars/stream + rng | engine | verified | high | 100% | 2026-09-07 | merging: 100% exact dump agreement on 3 saves; typed shapes round-trip byte-identical whole file; RNG = seed(RSeed)+2 twists confirmed; 4 tag-name fixes for SAVE_FORMAT | +| wire-schema channel (layouts -> engine) | engine | verified | high | 97% | 2026-09-08 | **Lane G.** Lane D's serializer recovery now reaches `sots-engine` as a GENERATED WIRE SCHEMA, not struct layouts: `tools/streams.py` -> `objects/streams.json` (386 classes / 2,042 items, disk order preserved, duplicate tags preserved, **every memory fact dropped** - no off/size/sizeof/gaps/strides) -> `tools/gen_stream_schema.py` -> `include/generated/sots_stream_schema.h`. WHY layouts.json was the wrong input: `build()` sorts fields by `off_abs` (**89 of 386 classes** have offset order != write order) and merges duplicate offsets into `alt_tags` (that IS the JewelsOfTheCrown double-tag trap). The table is a SPEC, not a program - the recovery is a linear pass so it cannot see `Write`'s branches and lists conditional fields (StarShip `BQ2`/`hbq`) unconditionally, and flattens container loops; a codec driven off it desynchronises. So hand-written `io()` stays the codec and a new `SchemaProbe` archive + `test_wire_schema.cpp` CHECK it: **56 shapes bound, 657 items matched, 0 mismatches**. FOUND 4 REAL DEFECTS present in BOTH `save_reader.py` and the engine, invisible to any round-trip test: `SystemParams` field 1 is a **string** not an int (empty string == 4 zero bytes == int 0, so it round-tripped by luck; a named planet would have desynced both readers); `ObservedTech/ObservedWeapon.odet` is a **bool** not an int (byte-safe only because a 4-char tag makes bool and int items both 12 bytes); `SpeciesRatios.nv` and `ShipRecords.srbd` are **counts**, not fields. TWO TRAPS RESOLVED: `ServerTradeManager`'s no-op Read/Write is real but the call is **virtual** - `ServerTradeManagerImpl` has the real serializer (`NumTradeSectors`/`TradeID`/`Trade`/`SctSize`), same shape resolves `IServerSpyManager` -> `ServerSpyManager`; general rule: **when an interface's serializer is the inherited stub, look for the concrete `*Impl`**. `ShipDesign::Write` really does make no stream call, but `ShipDesignDef::Section` is recovered so most of `Des` is typeable anyway. COVERAGE, measured by a new `CoverageArchive` that separates items a field NAMES from items a `Node` merely CARRIES (a byte-identical round trip is not a coverage claim): **37.9% -> 97.1%** typed on turn1 (97.2/97.2/97.6 on the others), round trip still byte-identical on all 4 saves. Typed this round: `TechTree` (both NumTechs sections - the 2nd is per-tech state, field list from `SpyReportTechTree` which streams the same record), `Events` (3 nesting levels), `ShipRecs`, `sprjs`, `civr`, `comms`, `spy2`, `spymgr`, `aid`, `Ojvs`, `AIEnf`, `FNG`, `trdmgr`, `Des` sections + gun banks. STILL OPAQUE: `CD` custom data 744 items (TurnCommands_v5 is a no-orders snapshot - **needs a save with issued turn commands**), `SvSctOb` 147 (8 EncObj variants), `DOpts` 94 (`read_elem` has no std::string branch), `spies2` 56, `RNG` 2 (correctly opaque). Ratchet at 95% so typing can't regress. ctest **34/34**, clean-room OK, `test_save` skips cleanly unset. `findings/objects/wire-schema-channel.md`; sots-engine branch `wip/layouts` | | engine: game/data catalogs | engine | verified | high | 100% | 2026-09-07 | merged: WeaponDef/ShipSectionDef/TurretTable/IdRegistry/TechTree/StringTable + cross_check; oracle 229,042 values 0 diffs; crosslink set reproduced exactly; 34 malformed shipped tokens pinned | | engine: mars/vfs (gob) | engine | verified | high | 100% | 2026-09-07 | merged: ZIP reader + native override; 8352+2035 entries = unzip -l; all 10268 files CRC-clean; byte-equal spot checks; ctest 11/11 | | determinism oracle | verify | verified | high | 100% | 2026-09-07 | BYTE-IDENTICAL across 5 runs incl. cross-process: (Autosave).sav 978041ac…, (Autosave EndTurn).sav bb4fd9ac…; gzip MTIME=0; only loaded-post-turn re-save differs (Player.Status 4->0, Summary.Checksum). findings/subsystems/determinism-oracle.md RE-CONFIRMED 2026-09-08 on engine `cef889e` (lane M's movement fix included) by lane F: `bb4fd9ac…` / `978041ac…` unchanged, and reproduced a further 3x under forced control words that leave the arithmetic alone (0x027f/0x127f/0x137f). | diff --git a/findings/objects/wire-schema-channel.md b/findings/objects/wire-schema-channel.md new file mode 100644 index 0000000..76231f5 --- /dev/null +++ b/findings/objects/wire-schema-channel.md @@ -0,0 +1,177 @@ +# The wire-schema channel: getting lane D's layouts into the engine + +Lane G, 2026-09-08. Host/static only — VM140 was held by lane U and the game was never run. + +Lane D recovered 386 class layouts from the `Mars::IStreamable` serializers. That knowledge lived +only in the notes repo. This lane built the channel that carries it into `sots-engine`, wired the +engine's save codec to it, and used it to find and fix four real defects in the reader. Engine +coverage of a real save went from **37.9 % to 97.1 %** of stream items *typed* (not merely +round-tripped), with the byte-identical round trip preserved throughout. + +--- + +## 1. The design choice: a wire schema, not a struct layout + +`objects/layouts.json` is a **memory-layout** projection and is the wrong shape for a codec. Two +things are lost in `serializers.py`'s `build()`, and both are the substance of the on-disk format: + +* **Order.** `Lab.layout()` returns fields in the program order of `Write` (with base-class and + sub-writer calls spliced in at their call site) — that order *is* the disk order. `build()` then + does `fields.sort(key=lambda x: (x["off_abs"], x["va"]))`. **89 of the 386 classes** have at least + one field whose offset order differs from its write order, so for those the published record does + not describe the stream. +* **Repetition.** `build()` merges two writes of the same offset into `alt_tags`. That is exactly the + `SVSOJewelsOfTheCrown` `JEWELLOCATIONID`-twice trap, and the merge silently drops the second item. + +So this lane added `tools/streams.py`, a second projection of the same recovery that keeps the order +and the repeats — and **drops every memory fact**: no `off`, no `size`, no `sizeof`, no `gaps`, no +`strides`. `sots-engine` is our own C++, not a byte-for-byte decomp; it must read and write the +*format* faithfully and must not inherit the original's ABI in its runtime types. (The shim is the +one component that legitimately needs the original ABI, because it reads the running game's memory. +Those few offsets already have a home: `offset` entries in `ghidra/addresses.json`.) + +The on-disk primitive is **not** `layouts.json`'s `kind`, which is a memory type. It comes from the +stream vftable slot the writer called, or the wrapper helper it called instead: + +| slot | helper | disk | +|---|---|---| +| `+0x18` | `0x8b9d70` | string | +| `+0x1c` | `0x8b9c20` | bool (1 byte) | +| `+0x20` | `0x8b9be0` | float32 | +| `+0x24` | `0x8b9d50`, `0x8b9d00`, `0x816490` | **int32** | +| `+0x28` | — | nested frame | +| `+0x30` | `0x8b9c60` | raw (`n = 8` → int64) | + +A member the original holds as `int16` or `int8` is written by `WriteInt` and is **four bytes on the +wire**. `0x8b9d00` is a distinct `int16` wrapper that widens; `0x816490` is +`Stream::WriteNetworkObjectId`, an id, also int32. Nothing narrow ever reaches the stream. + +`tools/gen_stream_schema.py` then emits `include/generated/sots_stream_schema.h` — a sibling of +`gen_addresses.py` under the same discipline: generated, provenance header, never hand-edited, +regenerated on every merge. 386 classes, 2,042 wire items. + +## 2. Why it is a *check*, not a generator + +**The recovered schema is a specification, not a program.** Two properties make a codec driven +straight off it desynchronise on real data: + +* **It is unconditional.** The recovery is a linear pass over `Write` and cannot see `Write`'s + branches. `StarShip` writes `BQ2` only when `hbq` is set, and `pop`/`ppop` only when `hsp` is set; + the table lists all three unconditionally. The sequence is a **superset** of any single record. +* **Container loops are flattened.** A count item is followed by its element items as siblings, not + nested inside the container. `member == false` marks the elements, and that is the only signal. + +The engine's hand-written `io(Ar&)` shapes therefore stay the codec — they can express the +conditionals and the nesting that the binary facts cannot supply — and the generated table is what +**proves they agree with the binary, item for item, in order**. That is the same relationship +`sots_addresses.h` already has with the shim: it supplies facts that hand-written code consumes; it +does not generate code. + +`sots-engine` grew a fourth archive, `SchemaProbe` (`src/mars/stream/probe.h`), which walks a shape's +`io()` with **every branch taken** — the same "all branches" view the recovery has — and records the +item sequence. `tests/mars_stream/test_wire_schema.cpp` LCS-aligns that against the generated table. +**56 shapes bound, 657 items matched, 0 mismatches.** A tag both sides name with different disk +primitives is a hard build failure; a wire-only item is reported, not fatal. + +## 3. What the check found + +Four defects, all present in **both** `save_reader.py` and the engine, none of which any round-trip +test could have caught: + +1. **`SystemParams` field 1 is a `std::string`, not an int.** Both readers modelled it as `int`. It is + the **empty string in every save available, and an empty string is four zero bytes** — byte-identical + to the int `0`. A save carrying a non-empty name here would have desynchronised both parsers. + The engine now reads it as a string. +2. **`ObservedTech::odet` / `ObservedWeapon::odet` are `bool`, not int.** The binary calls the bool + writer and lane D's own golden table already said `bool` at `+0x08`; `save_reader.py` and the + engine both said int. Byte-safe here **only by coincidence**: with a 4-char tag a bool item and an + int item both occupy 12 bytes and the bool's three pad bytes are zeroed. A shorter tag would not + have been so forgiving. 68 `otch` elements per save exercised this and never showed it. +3. **`SpeciesRatios::nv` is a count, not a field.** The recovery flags `sp` and `va2` as loop-body + writes; the saves agree (`nv==1` frames carry one `(sp, va2)` pair, `nv==0` frames carry nothing). +4. **`ShipRecords::srbd` is a count, not a field** — the second of two counted sections + (`srd, src, srb, srl, sri`, note no `srk`). Values 0, 1, 3 and 4 occur across the players available. + +Applying all four left the byte-identical round trip intact on all four real saves. + +## 4. Two recorded traps resolved + +* **`Game::ServerTradeManager`'s Read/Write really are the inherited no-op — and the `trdmgr` frame + really does have content.** The resolution is that the call is **virtual**: the object is a + `Game::ServerTradeManagerImpl`, and *that* class has a real serializer emitting exactly + `NumTradeSectors` / `TradeID` / `Trade` / `SctSize`, with `Game::ServerTradeSector` giving the + sector body (14 items). The same shape resolves `Game::IServerSpyManager` → `Game::ServerSpyManager`. + **General rule for the next lane: when an interface type's serializer is the inherited stub, look + for the concrete `*Impl` / non-`I` class.** +* **`Game::ShipDesign::Write` makes no stream call**, as recorded — and that is still true. But the + `Des` frame's *section* body is `Game::ShipDesignDef::Section`, which is recovered + (`DSec` frame → `Game::ShipSectionID`, `DGbnk2` carr, `DOpts` carr), so most of the design record + is typeable anyway. Only `DW2`, `Dtc` and `Dwgv` have no recovered serializer and came from the saves. + +## 5. Coverage + +A byte-identical round trip is **not** a coverage claim: the engine reached it partly by typing +fields and partly by carrying whole bodies as generic `Node`s, which round-trip trivially because +they are copied verbatim. `CoverageArchive` (also in `probe.h`) separates the two by walking a +*populated* shape's `io()` and counting items a field names against items only a `Node` carried. + +| save | before | after | +|---|---|---| +| turn1-state | 37.9 % | **97.1 %** | +| turn2-state | 38.8 % | **97.2 %** | +| turn3-state | 39.4 % | **97.2 %** | +| zuul-turn5-species5 | 42.5 % | **97.6 %** | + +The bodies typed this round, all against the recovered schema: `TechTree` (both `NumTechs` sections — +the second is the per-tech state, whose field list and types come from `Game::SpyReportTechTree`, +which streams the same record, and which is where `Tfc` being a bool came from), `Events` +(`EventStorage` → `TurnEvents` → `Event`, three nesting levels), `ShipRecs`, `sprjs`, `civr`/`spe`, +`comms`, `spy2`, `spymgr`, `aid`, `Ojvs`, `AIEnf`, `FNG`, `trdmgr`, and the `Des` section / +gun-bank tree. `DW2` is branch-gated on `bID`: `wid` (an id) when set, `wfn` (a family name) when clear. + +**What is still opaque, and why** (turn1 numbers, of 36,644 items): + +| region | items | why | +|---|---|---| +| `CD` custom-data blocks | 744 | `TurnCommands_v5` is 35 anonymous scalars with 27 trailing zeros — a *no-orders* snapshot. Typing it needs a save with issued turn commands. | +| `SvSctOb` | 147 | Scenario/encounter objects: 8 `EncObj` variants keyed by `EncID`, structure known but each needs its own shape. | +| `DOpts` | 94 | `carr`; `read_elem` has no `std::string` branch yet. | +| `spies2` | 56 | Anonymous container, count 0 in every save — element shape unobservable. | +| `RNG` | 2 | Correctly opaque: the raw MT19937 state block. | +| `Attrib` | 2 | Empty anonymous container in every save. | + +The test carries a **ratchet** (`pct >= 95.0`), so typing a body can never silently regress. + +## 6. Honest limits + +* Coverage is measured in **items**, not bytes, and only over the four saves available. +* `Ojvs`, `aid`, `Attrib`, `comms.nmsg`, `AIEnf.Nas`, `spymgr.nspy` and `spy2.rtc/evc/ttc` are **0 in + every player of every save**. Their containers are typed from the recovery; their *element* shapes + are not verified by any save and are marked as such in `shapes.h`. +* `Game::Plague` and `Game::SpecialProjectImpl` are never emitted (`NumPlgs2` and `NSprj` are 0 + everywhere), so `Plg` and `Sprj` have no ground truth at all. Note the `Plg` name collision: + `/Sim/Sys/.../Plg` is a plague frame, `/Sim/Flt/Ship/Plg` is a plain int (always −1). +* The 176 anonymous-tag classes remain usable but nameless; the conformance check aligns them by + tag, so a class of all-`"."` items aligns only as well as its ordering allows. +* `sizeof` never crossed the channel, so lane D's lower-bound caveat does not apply to anything the + engine now believes. + +## 7. Artifacts + +* `tools/streams.py` — the wire projection (`objects/streams.json`, 386 classes, 2,042 items). + `uv run python3 tools/streams.py Game::StarShip` prints one class readably. +* `tools/gen_stream_schema.py` — emits `sots-engine`'s `include/generated/sots_stream_schema.h`. +* `sots-engine` `wip/layouts`: `src/mars/stream/probe.h` (`SchemaProbe`, `CoverageArchive`), + `tests/mars_stream/test_wire_schema.cpp`, widened `shapes.h`. +* ctest **34/34** (was 33/33), `tools/clean_room_check.sh` **OK**, `test_save` skips cleanly with + `SOTS_SAVES_DIR` unset. + +## 8. Open items for the next lane + +1. **A save with issued turn commands** would unblock `CD`/`TurnCommands_v5` — the single biggest + remaining blob, and the one that matters for a functional reimplementation of orders. +2. `SvSctOb`'s eight `EncObj` variants, one shape each, keyed by `EncID` (3, 4, 5, 9, 17, 10, 20, 1). +3. `read_elem` needs a `std::string` branch so `carr` works (`DOpts`, and any future + string list). +4. Re-run `tools/streams.py` whenever `serializers.py` improves — the generated header regenerates + from it in 0.2 s, and the conformance test will say immediately whether the engine still agrees. diff --git a/objects/streams.json b/objects/streams.json new file mode 100644 index 0000000..06bf4c8 --- /dev/null +++ b/objects/streams.json @@ -0,0 +1,16518 @@ +{ + "Address": { + "anon": 4, + "class": "Address", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 4, + "named": false, + "unresolved": 0 + }, + "Game::AIAutoPeaceRun": { + "anon": 0, + "class": "Game::AIAutoPeaceRun", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "tn0" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "tn1" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::AICombatReport": { + "anon": 0, + "class": "Game::AICombatReport", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "CRTrn" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "CRPce" + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "frame", + "tag": "CRSys" + }, + { + "member": true, + "of": "Game::CombatPlayerStats", + "prim": "frame", + "shape": "frame", + "tag": "CRPlSv2" + } + ], + "n": 4, + "named": true, + "unresolved": 0 + }, + "Game::AIEncounterFlags": { + "anon": 0, + "class": "Game::AIEncounterFlags", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Nas" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "Fid" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "Ast" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::AIRebellion": { + "anon": 0, + "class": "Game::AIRebellion", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Game::AIRebellionImpl": { + "anon": 0, + "class": "Game::AIRebellionImpl", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "St" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Reb" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NSys" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Sys" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::AIRelationRecord": { + "anon": 5, + "class": "Game::AIRelationRecord", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 0 + }, + "Game::AISituation": { + "anon": 0, + "class": "Game::AISituation", + "complete": false, + "fields": [ + { + "member": false, + "of": "Game::Game::VShipSectionID::?$AIWeightMap", + "prim": "frame", + "shape": "frame", + "tag": "AISitSecs", + "unresolved": true + }, + { + "member": true, + "of": "Game::Mars::Game::W4WeaponFamilyID::U?$StreamableEnum::?$AIWeightMap", + "prim": "frame", + "shape": "frame", + "tag": "AISitWeapFams" + } + ], + "n": 2, + "named": true, + "unresolved": 1 + }, + "Game::AISystem": { + "anon": 0, + "class": "Game::AISystem", + "complete": true, + "fields": [ + { + "member": false, + "of": "Game::AISituation", + "prim": "frame", + "shape": "frame", + "tag": "AISysSit" + } + ], + "n": 1, + "named": true, + "unresolved": 0 + }, + "Game::AllianceInvite": { + "anon": 15, + "class": "Game::AllianceInvite", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::AllianceInvite::Response", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::AllianceInvite::Response", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 15, + "named": false, + "unresolved": 0 + }, + "Game::AllianceInvite::Response": { + "anon": 3, + "class": "Game::AllianceInvite::Response", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::AttribMap": { + "anon": 3, + "class": "Game::AttribMap", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::BackEngProject": { + "anon": 0, + "class": "Game::BackEngProject", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Stp" + }, + { + "member": true, + "of": "Game::SpecialProject", + "prim": "frame", + "shape": "frame", + "tag": "SPi" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "AOdd" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "AInc" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "Tch" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "RCst" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "RDn" + } + ], + "n": 7, + "named": true, + "unresolved": 0 + }, + "Game::BerserkerEncounterResult": { + "anon": 1, + "class": "Game::BerserkerEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::BuildQueue": { + "anon": 0, + "class": "Game::BuildQueue", + "complete": true, + "fields": [ + { + "member": false, + "of": "Game::ShipBuildOrderDef", + "prim": "frame", + "shape": "carr", + "tag": "ords" + } + ], + "n": 1, + "named": true, + "unresolved": 0 + }, + "Game::CNMClientNotResponding": { + "anon": 2, + "class": "Game::CNMClientNotResponding", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CNMPlayerJoined": { + "anon": 2, + "class": "Game::CNMPlayerJoined", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CNMPlayerLeft": { + "anon": 1, + "class": "Game::CNMPlayerLeft", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::CNMUpdate": { + "anon": 1, + "class": "Game::CNMUpdate", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::UpdateData", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::CNMUpdateComplete": { + "anon": 1, + "class": "Game::CNMUpdateComplete", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::CNMUserShips": { + "anon": 2, + "class": "Game::CNMUserShips", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::ShipParams", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CivilianRatios": { + "anon": 0, + "class": "Game::CivilianRatios", + "complete": true, + "fields": [ + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "smx" + }, + { + "member": true, + "of": "Game::SpeciesRatios", + "prim": "frame", + "shape": "frame", + "tag": "spe" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::ClientEncounterResults": { + "anon": 3, + "class": "Game::ClientEncounterResults", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::CombatPlayerStats", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::ClientSystem": { + "anon": 0, + "class": "Game::ClientSystem", + "complete": true, + "fields": [ + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "Pos" + } + ], + "n": 1, + "named": true, + "unresolved": 0 + }, + "Game::ClientTradeSector": { + "anon": 0, + "class": "Game::ClientTradeSector", + "complete": true, + "fields": [ + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "Pos" + } + ], + "n": 1, + "named": true, + "unresolved": 0 + }, + "Game::CombatCommandCloak": { + "anon": 1, + "class": "Game::CombatCommandCloak", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandDecloak": { + "anon": 1, + "class": "Game::CombatCommandDecloak", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandFleetSetFacing": { + "anon": 2, + "class": "Game::CombatCommandFleetSetFacing", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandFleetSetHoldFire": { + "anon": 2, + "class": "Game::CombatCommandFleetSetHoldFire", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandFleetSetStance": { + "anon": 2, + "class": "Game::CombatCommandFleetSetStance", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandIntangOff": { + "anon": 1, + "class": "Game::CombatCommandIntangOff", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandIntangOn": { + "anon": 1, + "class": "Game::CombatCommandIntangOn", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandMoveReserves": { + "anon": 3, + "class": "Game::CombatCommandMoveReserves", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "int", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandNull": { + "anon": 0, + "class": "Game::CombatCommandNull", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandPickReserve": { + "anon": 2, + "class": "Game::CombatCommandPickReserve", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandRequestAsylumResponse": { + "anon": 3, + "class": "Game::CombatCommandRequestAsylumResponse", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandSetAEAutoFire": { + "anon": 2, + "class": "Game::CombatCommandSetAEAutoFire", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandSetPlanetAttackMode": { + "anon": 2, + "class": "Game::CombatCommandSetPlanetAttackMode", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandSetPlayerAI": { + "anon": 2, + "class": "Game::CombatCommandSetPlayerAI", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandSetWantEndCombat": { + "anon": 2, + "class": "Game::CombatCommandSetWantEndCombat", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandShipAllStop": { + "anon": 1, + "class": "Game::CombatCommandShipAllStop", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandShipAttack": { + "anon": 5, + "class": "Game::CombatCommandShipAttack", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::CombatCommandShipAttack::ShipData", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandShipClearTargets": { + "anon": 1, + "class": "Game::CombatCommandShipClearTargets", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandShipFireOnce": { + "anon": 2, + "class": "Game::CombatCommandShipFireOnce", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::GunBankSelection", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandShipManeuver": { + "anon": 2, + "class": "Game::CombatCommandShipManeuver", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandShipReleaseGrapple": { + "anon": 1, + "class": "Game::CombatCommandShipReleaseGrapple", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandShipSetFacing": { + "anon": 2, + "class": "Game::CombatCommandShipSetFacing", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandShipSetHoldFire": { + "anon": 3, + "class": "Game::CombatCommandShipSetHoldFire", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::GunBankSelection", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandShipSetOnlyMyTarget": { + "anon": 3, + "class": "Game::CombatCommandShipSetOnlyMyTarget", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::GunBankSelection", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandShipSetStance": { + "anon": 2, + "class": "Game::CombatCommandShipSetStance", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandShipSetWaypoint": { + "anon": 4, + "class": "Game::CombatCommandShipSetWaypoint", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::CombatCommandShipSetWaypoint::ShipData", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Quaternion", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "Vector2", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 4, + "named": false, + "unresolved": 0 + }, + "Game::CombatCommandShipToggleBank": { + "anon": 3, + "class": "Game::CombatCommandShipToggleBank", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::GunBankSelection", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::CombatDamageReport": { + "anon": 0, + "class": "Game::CombatDamageReport", + "complete": false, + "fields": [ + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "nshp", + "unresolved": true + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "did" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "dtak" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "dams" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "damp" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "dami" + }, + { + "member": false, + "prim": "f32", + "shape": "scalar", + "tag": "damt", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "nshp", + "unresolved": true + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "wep" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "dams" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "damp" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "dami" + }, + { + "member": false, + "prim": "f32", + "shape": "scalar", + "tag": "damt", + "unresolved": true + } + ], + "n": 13, + "named": true, + "unresolved": 4 + }, + "Game::CombatLaunchParams": { + "anon": 25, + "class": "Game::CombatLaunchParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::ShipParams", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::CombatPlayerInvariant", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::NodePointParams", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::PlayerMessage", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::PlanetStats", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::CombatEncounterParams", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "Game::DefenceLayout", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 25, + "named": false, + "unresolved": 0 + }, + "Game::CombatPlayerReport": { + "anon": 0, + "class": "Game::CombatPlayerReport", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "ai" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ally" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "status" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mxeng" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mxcls" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mxmsl" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "ncls" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "cls" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "nshp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nsat" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "nshfld" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "nshlst" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nsatl" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "nsec" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "ssec" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "nshp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ndam" + }, + { + "member": true, + "of": "Game::CombatShipReport", + "prim": "frame", + "shape": "carr", + "tag": "srep" + } + ], + "n": 19, + "named": true, + "unresolved": 0 + }, + "Game::CombatPlayerStats": { + "anon": 0, + "class": "Game::CombatPlayerStats", + "complete": true, + "fields": [ + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "RPBon" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "RPBonT" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "SavBonus" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "MaintHF" + }, + { + "member": true, + "of": "Game::TacReport", + "prim": "frame", + "shape": "carr", + "tag": "TacReports" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::CombatReport": { + "anon": 0, + "class": "Game::CombatReport", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "trn" + }, + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "pos" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sid" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "auto" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "dur" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cow" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "cdst" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cpk" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cpt" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "cdt" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "cdi" + }, + { + "member": true, + "of": "Game::CombatPlayerReport", + "prim": "frame", + "shape": "carr", + "tag": "prep" + }, + { + "member": true, + "of": "Game::CombatWeaponReport", + "prim": "frame", + "shape": "carr", + "tag": "wrep" + } + ], + "n": 14, + "named": true, + "unresolved": 0 + }, + "Game::CombatShipReport": { + "anon": 0, + "class": "Game::CombatShipReport", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "name" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "did" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cls" + }, + { + "member": true, + "prim": "i64", + "shape": "scalar", + "tag": "caps2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nshp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nfld" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nlst" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "dtak" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "dams" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "damp" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "dami" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "damt" + } + ], + "n": 12, + "named": true, + "unresolved": 0 + }, + "Game::CombatTechFlags": { + "anon": 2, + "class": "Game::CombatTechFlags", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::CombatWeaponReport": { + "anon": 0, + "class": "Game::CombatWeaponReport", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "wep" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "dams" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "damp" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "dami" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "damt" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::CommDeclareCurse": { + "anon": 0, + "class": "Game::CommDeclareCurse", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommDeclareIDontWant": { + "anon": 0, + "class": "Game::CommDeclareIDontWant", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommDeclareIHate": { + "anon": 0, + "class": "Game::CommDeclareIHate", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommDeclareILike": { + "anon": 0, + "class": "Game::CommDeclareILike", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommDeclareISaw": { + "anon": 0, + "class": "Game::CommDeclareISaw", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommDeclareISeveredAllianceWith": { + "anon": 0, + "class": "Game::CommDeclareISeveredAllianceWith", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommDeclareIWant": { + "anon": 0, + "class": "Game::CommDeclareIWant", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommDeclareShareAllColonyStats": { + "anon": 0, + "class": "Game::CommDeclareShareAllColonyStats", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + } + ], + "n": 6, + "named": true, + "unresolved": 0 + }, + "Game::CommDeclareShareStats": { + "anon": 0, + "class": "Game::CommDeclareShareStats", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommDeclareShareSystemNotes": { + "anon": 0, + "class": "Game::CommDeclareShareSystemNotes", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "notes" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommDeclareShareSystemStats": { + "anon": 0, + "class": "Game::CommDeclareShareSystemStats", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 7, + "named": true, + "unresolved": 0 + }, + "Game::CommDeclareSorry": { + "anon": 0, + "class": "Game::CommDeclareSorry", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommDeclareThanks": { + "anon": 0, + "class": "Game::CommDeclareThanks", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommMessageContainer": { + "anon": 0, + "class": "Game::CommMessageContainer", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "nmsg" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "msgt" + }, + { + "member": false, + "of": "Game::ICommMessage", + "prim": "frame", + "shape": "frame", + "tag": "msg" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestAttackSystem": { + "anon": 0, + "class": "Game::CommRequestAttackSystem", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestDefendSystem": { + "anon": 0, + "class": "Game::CommRequestDefendSystem", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestDisposition": { + "anon": 0, + "class": "Game::CommRequestDisposition", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestHarassPlayer": { + "anon": 0, + "class": "Game::CommRequestHarassPlayer", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestHarassSystem": { + "anon": 0, + "class": "Game::CommRequestHarassSystem", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestMoney": { + "anon": 0, + "class": "Game::CommRequestMoney", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestRallyAtSystem": { + "anon": 0, + "class": "Game::CommRequestRallyAtSystem", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestResearch": { + "anon": 0, + "class": "Game::CommRequestResearch", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestSeverAllianceWith": { + "anon": 0, + "class": "Game::CommRequestSeverAllianceWith", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestShareSystemStats": { + "anon": 0, + "class": "Game::CommRequestShareSystemStats", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestStopColonizing": { + "anon": 0, + "class": "Game::CommRequestStopColonizing", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestStopHarassingMe": { + "anon": 0, + "class": "Game::CommRequestStopHarassingMe", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestStopHarassingPlayer": { + "anon": 0, + "class": "Game::CommRequestStopHarassingPlayer", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestStopHarrassingSystem": { + "anon": 0, + "class": "Game::CommRequestStopHarrassingSystem", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommRequestStopMining": { + "anon": 0, + "class": "Game::CommRequestStopMining", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cid2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "exp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sent" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::CommonPlague": { + "anon": 0, + "class": "Game::CommonPlague", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PlgSys" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PlgCBy" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PlgCByF" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PlgCM" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PlgTurns" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PlgInf" + } + ], + "n": 6, + "named": true, + "unresolved": 0 + }, + "Game::CrowDefendersEncounterResult": { + "anon": 1, + "class": "Game::CrowDefendersEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::CrowRuinsEncounterResult": { + "anon": 1, + "class": "Game::CrowRuinsEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::DefenceFleetAssignment": { + "anon": 0, + "class": "Game::DefenceFleetAssignment", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "fid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "stnid" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "head2" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "ori" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "quota" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::DefenceLayout": { + "anon": 0, + "class": "Game::DefenceLayout", + "complete": false, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sysid" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "ndsa" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "stnid" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "dsid" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "nfa", + "unresolved": true + }, + { + "member": true, + "of": "Game::DefenceFleetAssignment", + "prim": "frame", + "shape": "frame", + "tag": "fa" + } + ], + "n": 6, + "named": true, + "unresolved": 1 + }, + "Game::DefenceSummary": { + "anon": 0, + "class": "Game::DefenceSummary", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "pid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sid" + }, + { + "member": true, + "of": "Game::DefenceLayout", + "prim": "frame", + "shape": "frame", + "tag": "dlay" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "stac" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "stid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "stt" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "satc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "said" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sasc" + } + ], + "n": 9, + "named": true, + "unresolved": 0 + }, + "Game::DerelictEncounterResult": { + "anon": 1, + "class": "Game::DerelictEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::DiplomacyStats": { + "anon": 0, + "class": "Game::DiplomacyStats", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "other" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "lastnap" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "lastnapbty" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "bknnap" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "btynap" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "lastally" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "lastallybty" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "bknally" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "btyally" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "lastcf" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "lastcfbty" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "bkncf" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "btycf" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "deadhome" + } + ], + "n": 14, + "named": true, + "unresolved": 0 + }, + "Game::EncounterQuery": { + "anon": 5, + "class": "Game::EncounterQuery", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 0 + }, + "Game::EncounterResult": { + "anon": 1, + "class": "Game::EncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::EncounterResults": { + "anon": 28, + "class": "Game::EncounterResults", + "complete": true, + "fields": [ + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::CombatPlayerStats", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "int", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::EncounterResults::PrisonerShip", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::EncounterResults::DamagedShip", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::EncounterResults::BoardedShip", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::EncounterResults::RetreatingShip", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::EncounterResults::SpyShip", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::CombatDamageReport", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "of": "Game::EncounterResult", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "Game::PlanetStats", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "Game::PlagueStats", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 28, + "named": false, + "unresolved": 0 + }, + "Game::EncounterResults::BoardedShip": { + "anon": 2, + "class": "Game::EncounterResults::BoardedShip", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::EncounterResults::DamagedShip": { + "anon": 5, + "class": "Game::EncounterResults::DamagedShip", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::ShipHealth", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 0 + }, + "Game::EncounterResults::PrisonerShip": { + "anon": 2, + "class": "Game::EncounterResults::PrisonerShip", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::PrisonerHold", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::EncounterResults::RetreatingShip": { + "anon": 4, + "class": "Game::EncounterResults::RetreatingShip", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 4, + "named": false, + "unresolved": 0 + }, + "Game::EncounterResults::SpyShip": { + "anon": 5, + "class": "Game::EncounterResults::SpyShip", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 0 + }, + "Game::EventStorage": { + "anon": 0, + "class": "Game::EventStorage", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "EvNxID" + }, + { + "member": true, + "of": "Game::EventStorage::TurnEvents", + "prim": "frame", + "shape": "carr", + "tag": "Events" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::EventStorage::Event": { + "anon": 0, + "class": "Game::EventStorage::Event", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "EvEID" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "EvDsc" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "EvMsg" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "EvImg" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "EvLoc" + }, + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "EvPos" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "EvAct" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "EvCID" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::EventStorage::TurnEvents": { + "anon": 0, + "class": "Game::EventStorage::TurnEvents", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "EvTurn" + }, + { + "member": true, + "of": "Game::EventStorage::Event", + "prim": "frame", + "shape": "carr", + "tag": "Events" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::FieldTemplate": { + "anon": 0, + "class": "Game::FieldTemplate", + "complete": false, + "fields": [ + { + "member": false, + "of": "Game::FieldTemplate::Point", + "prim": "frame", + "shape": "carr", + "tag": "FTPnts", + "unresolved": true + } + ], + "n": 1, + "named": true, + "unresolved": 1 + }, + "Game::FieldTemplate::Point": { + "anon": 0, + "class": "Game::FieldTemplate::Point", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FTPShID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FTPDesID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FTPPosX" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FTPPosY" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FTPSqd" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::FleetLayout": { + "anon": 3, + "class": "Game::FleetLayout", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::FieldTemplate", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::FleetNameGenerator": { + "anon": 0, + "class": "Game::FleetNameGenerator", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FNGNum" + } + ], + "n": 1, + "named": true, + "unresolved": 0 + }, + "Game::FlightPlan": { + "anon": 0, + "class": "Game::FlightPlan", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::FlightPlan::Waypoint", + "prim": "frame", + "shape": "carr", + "tag": "wpts" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "FPsp2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FPeta2" + }, + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "FPogn2" + }, + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "FPdpos" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "pnd" + } + ], + "n": 6, + "named": true, + "unresolved": 0 + }, + "Game::FlightPlan::Waypoint": { + "anon": 0, + "class": "Game::FlightPlan::Waypoint", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Wpt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Tp" + }, + { + "member": true, + "of": "Game::NodeRoute", + "prim": "frame", + "shape": "frame", + "tag": "nrt" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::Game::SVSOBrokenEmpire::VPCStat::?$NetworkIDDataMap": { + "anon": 2, + "class": "Game::Game::SVSOBrokenEmpire::VPCStat::?$NetworkIDDataMap", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "siz" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "of": "Game::SVSOBrokenEmpire::PCStat", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::Game::VLocustFleetLogistics::?$NetworkIDDataMap": { + "anon": 2, + "class": "Game::Game::VLocustFleetLogistics::?$NetworkIDDataMap", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "siz" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "of": "Game::LocustFleetLogistics", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::Game::VLocustNestState::?$NetworkIDDataMap": { + "anon": 2, + "class": "Game::Game::VLocustNestState::?$NetworkIDDataMap", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "siz" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "of": "Game::LocustNestState", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::Game::VShipSectionID::?$AIWeightMap": { + "anon": 3, + "class": "Game::Game::VShipSectionID::?$AIWeightMap", + "complete": false, + "fields": [ + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": ".", + "unresolved": true + }, + { + "member": true, + "of": "Game::ShipSectionID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": false, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 1 + }, + "Game::GameTurnHistory": { + "anon": 0, + "class": "Game::GameTurnHistory", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nply" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "ply" + }, + { + "member": false, + "of": "Game::PlayerTurnHistory", + "prim": "frame", + "shape": "frame", + "tag": "hist" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::GunBankSelection": { + "anon": 1, + "class": "Game::GunBankSelection", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::HeraldEncounterResult": { + "anon": 2, + "class": "Game::HeraldEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::IndependenceInfo": { + "anon": 0, + "class": "Game::IndependenceInfo", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "indsp" + }, + { + "member": true, + "of": "Game::PlayerColorID", + "prim": "frame", + "shape": "frame", + "tag": "indcl" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "indnm" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "indav" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "indba" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::JewelsProject": { + "anon": 0, + "class": "Game::JewelsProject", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Stp" + }, + { + "member": true, + "of": "Game::SpecialProject", + "prim": "frame", + "shape": "frame", + "tag": "SPi" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "einv" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "eapp" + } + ], + "n": 4, + "named": true, + "unresolved": 0 + }, + "Game::LocustEncounterParams": { + "anon": 1, + "class": "Game::LocustEncounterParams", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::Game::VLocustNestState::?$NetworkIDDataMap", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::LocustEncounterResult": { + "anon": 2, + "class": "Game::LocustEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::Game::VLocustNestState::?$NetworkIDDataMap", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::LocustFleetLogistics": { + "anon": 0, + "class": "Game::LocustFleetLogistics", + "complete": true, + "fields": [ + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "hav" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "don" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "dsy" + }, + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "dst" + } + ], + "n": 4, + "named": true, + "unresolved": 0 + }, + "Game::Mars::Game::W4AIPurposeID::U?$StreamableEnum::?$AIWeightMap": { + "anon": 3, + "class": "Game::Mars::Game::W4AIPurposeID::U?$StreamableEnum::?$AIWeightMap", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "." + }, + { + "member": false, + "of": "enum:AIPurposeID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::Mars::Game::W4WeaponFamilyID::U?$StreamableEnum::?$AIWeightMap": { + "anon": 3, + "class": "Game::Mars::Game::W4WeaponFamilyID::U?$StreamableEnum::?$AIWeightMap", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "." + }, + { + "member": false, + "of": "enum:eaponFamilyID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::Mars::I::U?$StreamableEnum::?$AIWeightMap": { + "anon": 3, + "class": "Game::Mars::I::U?$StreamableEnum::?$AIWeightMap", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "." + }, + { + "member": false, + "of": "enum:uint", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::MeteorEncounterResult": { + "anon": 1, + "class": "Game::MeteorEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::MonitorEncounterResult": { + "anon": 1, + "class": "Game::MonitorEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::MonitorProject": { + "anon": 0, + "class": "Game::MonitorProject", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Stp" + }, + { + "member": true, + "of": "Game::SpecialProject", + "prim": "frame", + "shape": "frame", + "tag": "SPi" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Sys" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "RMn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "RMx" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "RDn" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "RMd" + } + ], + "n": 7, + "named": true, + "unresolved": 0 + }, + "Game::Morale": { + "anon": 0, + "class": "Game::Morale", + "complete": false, + "fields": [ + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "mnsp", + "unresolved": true + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "msp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mv" + } + ], + "n": 3, + "named": true, + "unresolved": 1 + }, + "Game::MoraleEvent": { + "anon": 0, + "class": "Game::MoraleEvent", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mtr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mtp" + }, + { + "member": true, + "of": "Game::Morale", + "prim": "frame", + "shape": "frame", + "tag": "mfx" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "mdsc" + } + ], + "n": 6, + "named": true, + "unresolved": 0 + }, + "Game::NodePath": { + "anon": 0, + "class": "Game::NodePath", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "npt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "npid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "npfr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "npto" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "npctm" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "npcby" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "npdtn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "npdtf" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "npenp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "npuse" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nptf" + } + ], + "n": 11, + "named": true, + "unresolved": 0 + }, + "Game::NodePointParams": { + "anon": 6, + "class": "Game::NodePointParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 6, + "named": false, + "unresolved": 0 + }, + "Game::NodeRoute": { + "anon": 0, + "class": "Game::NodeRoute", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nrp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nrf" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nrt" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::Objective": { + "anon": 0, + "class": "Game::Objective", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ID" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "Cmp" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "Spr" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "Dsc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NID" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::ObservedDesign": { + "anon": 0, + "class": "Game::ObservedDesign", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "otnF" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "otnL" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "odid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "opid" + } + ], + "n": 4, + "named": true, + "unresolved": 0 + }, + "Game::ObservedTech": { + "anon": 0, + "class": "Game::ObservedTech", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "otnF" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "otnL" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "odet" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "otch" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "owith" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::ObservedWeapon": { + "anon": 0, + "class": "Game::ObservedWeapon", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "otnF" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "otnL" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "odet" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "owep" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "owith" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::OrtgayEncounterResult": { + "anon": 1, + "class": "Game::OrtgayEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::PirateEncounterResult": { + "anon": 1, + "class": "Game::PirateEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::PlagueHit": { + "anon": 3, + "class": "Game::PlagueHit", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::PlagueStats": { + "anon": 1, + "class": "Game::PlagueStats", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::PlagueHit", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::PlanetClientContext": { + "anon": 6, + "class": "Game::PlanetClientContext", + "complete": true, + "fields": [ + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 6, + "named": false, + "unresolved": 0 + }, + "Game::PlanetStats": { + "anon": 6, + "class": "Game::PlanetStats", + "complete": true, + "fields": [ + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i64", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i64", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 6, + "named": false, + "unresolved": 0 + }, + "Game::PlayerAid": { + "anon": 0, + "class": "Game::PlayerAid", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "aidto" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "aidsa" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "aidst" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "aidrai" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "aidrt" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::PlayerAlliances": { + "anon": 0, + "class": "Game::PlayerAlliances", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ALid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "AL" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NA" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "CF" + } + ], + "n": 4, + "named": true, + "unresolved": 0 + }, + "Game::PlayerColorID": { + "anon": 4, + "class": "Game::PlayerColorID", + "complete": false, + "fields": [ + { + "member": true, + "prim": null, + "shape": "scalar", + "tag": ".", + "unresolved": true + }, + { + "member": true, + "prim": null, + "shape": "scalar", + "tag": ".", + "unresolved": true + }, + { + "member": true, + "prim": null, + "shape": "scalar", + "tag": ".", + "unresolved": true + }, + { + "member": true, + "prim": null, + "shape": "scalar", + "tag": ".", + "unresolved": true + } + ], + "n": 4, + "named": false, + "unresolved": 4 + }, + "Game::PlayerEncounterProgress": { + "anon": 3, + "class": "Game::PlayerEncounterProgress", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::PlayerMessage": { + "anon": 4, + "class": "Game::PlayerMessage", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "String", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 4, + "named": false, + "unresolved": 0 + }, + "Game::PlayerNotes": { + "anon": 0, + "class": "Game::PlayerNotes", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NtSys" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "NtTxt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NtTrn" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::PlayerReport": { + "anon": 0, + "class": "Game::PlayerReport", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "oid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "pid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "flds" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sav" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "home" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ncol" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mpwr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mcls" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mmsl" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nshp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nsat" + } + ], + "n": 11, + "named": true, + "unresolved": 0 + }, + "Game::PlayerTurnHistory": { + "anon": 0, + "class": "Game::PlayerTurnHistory", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ply" + }, + { + "member": false, + "of": "Game::PlayerTurnStats", + "prim": "frame", + "shape": "frame", + "tag": "stats" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::PlayerTurnStats": { + "anon": 0, + "class": "Game::PlayerTurnStats", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i64", + "shape": "scalar", + "tag": "pop" + }, + { + "member": true, + "of": "Game::SystemEvent", + "prim": "frame", + "shape": "carr", + "tag": "sacq" + }, + { + "member": true, + "of": "Game::SystemEvent", + "prim": "frame", + "shape": "carr", + "tag": "slost" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "trn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "almem" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "inc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "tdinc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sav" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "col" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "bat" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "tch" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "ncls" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "cls" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "shpt" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "shpl" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "shpk" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "satt" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "satl" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "satk" + } + ], + "n": 19, + "named": true, + "unresolved": 0 + }, + "Game::Population": { + "anon": 0, + "class": "Game::Population", + "complete": false, + "fields": [ + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "PopNG" + }, + { + "member": false, + "of": "Game::PopulationGroup", + "prim": "frame", + "shape": "frame", + "tag": "PopG", + "unresolved": true + } + ], + "n": 2, + "named": true, + "unresolved": 1 + }, + "Game::PopulationGroup": { + "anon": 0, + "class": "Game::PopulationGroup", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PopT" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PopS" + }, + { + "member": true, + "prim": "i64", + "shape": "scalar", + "tag": "PopC" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::PrisonerHold": { + "anon": 0, + "class": "Game::PrisonerHold", + "complete": false, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PrMax" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "PrNSp", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "PrSp" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "PrNum" + } + ], + "n": 4, + "named": true, + "unresolved": 1 + }, + "Game::PuppetMasterEncounterResult": { + "anon": 1, + "class": "Game::PuppetMasterEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::RaidTargets": { + "anon": 0, + "class": "Game::RaidTargets", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rds" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rdv" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rdt" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "dsc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "did" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::RefugeesEncounterParams": { + "anon": 1, + "class": "Game::RefugeesEncounterParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::RefugeesEncounterResult": { + "anon": 2, + "class": "Game::RefugeesEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMAIRelationValues": { + "anon": 1, + "class": "Game::SNMAIRelationValues", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::AIRelationRecord", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMAllCombatDone": { + "anon": 1, + "class": "Game::SNMAllCombatDone", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::EncounterResults", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMAllianceInvite": { + "anon": 3, + "class": "Game::SNMAllianceInvite", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::SNMAllianceInviteChat": { + "anon": 4, + "class": "Game::SNMAllianceInviteChat", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 4, + "named": false, + "unresolved": 0 + }, + "Game::SNMAllianceInviteProgress": { + "anon": 2, + "class": "Game::SNMAllianceInviteProgress", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::AllianceInvite", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMAllianceNotify": { + "anon": 3, + "class": "Game::SNMAllianceNotify", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::SNMAllianceReply": { + "anon": 4, + "class": "Game::SNMAllianceReply", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 4, + "named": false, + "unresolved": 0 + }, + "Game::SNMCancelAllianceInvite": { + "anon": 2, + "class": "Game::SNMCancelAllianceInvite", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMChat": { + "anon": 5, + "class": "Game::SNMChat", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 0 + }, + "Game::SNMCombatTimeRemaining": { + "anon": 2, + "class": "Game::SNMCombatTimeRemaining", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMCommMessage": { + "anon": 2, + "class": "Game::SNMCommMessage", + "complete": true, + "fields": [ + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::ICommMessage", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMDemandEmpireSurrender": { + "anon": 2, + "class": "Game::SNMDemandEmpireSurrender", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMDemandEmpireSurrenderResponse": { + "anon": 3, + "class": "Game::SNMDemandEmpireSurrenderResponse", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::SNMDoEncounterQuery": { + "anon": 1, + "class": "Game::SNMDoEncounterQuery", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMEncounterProgress": { + "anon": 1, + "class": "Game::SNMEncounterProgress", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::PlayerEncounterProgress", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMEncounterQueryResults": { + "anon": 2, + "class": "Game::SNMEncounterQueryResults", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::EncounterQuery", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMEncounterResults": { + "anon": 2, + "class": "Game::SNMEncounterResults", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::EncounterResults", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMEndTurn": { + "anon": 2, + "class": "Game::SNMEndTurn", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::TurnCommands", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "Game::AIEncounterFlags", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMGenericEvent": { + "anon": 2, + "class": "Game::SNMGenericEvent", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMGenericGameMessage": { + "anon": 2, + "class": "Game::SNMGenericGameMessage", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMHostCombat": { + "anon": 7, + "class": "Game::SNMHostCombat", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 7, + "named": false, + "unresolved": 0 + }, + "Game::SNMHostCombatReply": { + "anon": 3, + "class": "Game::SNMHostCombatReply", + "complete": true, + "fields": [ + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Address", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::SNMJoin": { + "anon": 3, + "class": "Game::SNMJoin", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::SNMJoinCombat": { + "anon": 5, + "class": "Game::SNMJoinCombat", + "complete": true, + "fields": [ + { + "member": true, + "of": "Address", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 0 + }, + "Game::SNMJoinCombatReply": { + "anon": 2, + "class": "Game::SNMJoinCombatReply", + "complete": true, + "fields": [ + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMJoinReply": { + "anon": 1, + "class": "Game::SNMJoinReply", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMKillAI": { + "anon": 1, + "class": "Game::SNMKillAI", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMLaunchCombat": { + "anon": 5, + "class": "Game::SNMLaunchCombat", + "complete": false, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::EncounterQuery", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": ".", + "unresolved": true + } + ], + "n": 5, + "named": false, + "unresolved": 1 + }, + "Game::SNMLeaveAlliance": { + "anon": 1, + "class": "Game::SNMLeaveAlliance", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMLeaveCeaseFire": { + "anon": 2, + "class": "Game::SNMLeaveCeaseFire", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMLeaveNonAggression": { + "anon": 2, + "class": "Game::SNMLeaveNonAggression", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMLobbyChat": { + "anon": 3, + "class": "Game::SNMLobbyChat", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::SNMMakePlayerAI": { + "anon": 2, + "class": "Game::SNMMakePlayerAI", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMPendingAlliances": { + "anon": 1, + "class": "Game::SNMPendingAlliances", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::PlayerAlliances", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMPlaySpeechEvent": { + "anon": 3, + "class": "Game::SNMPlaySpeechEvent", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::SNMProgressionWarsConvoyShips": { + "anon": 1, + "class": "Game::SNMProgressionWarsConvoyShips", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMRefreshSlots": { + "anon": 1, + "class": "Game::SNMRefreshSlots", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::SNMRefreshSlots::SlotData", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMRefreshSlots::SlotData": { + "anon": 3, + "class": "Game::SNMRefreshSlots::SlotData", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::SNMRemoveCommMessage": { + "anon": 2, + "class": "Game::SNMRemoveCommMessage", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMRunAI": { + "anon": 3, + "class": "Game::SNMRunAI", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::SNMSetAIPolicy": { + "anon": 2, + "class": "Game::SNMSetAIPolicy", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMSetPlayerStatus": { + "anon": 2, + "class": "Game::SNMSetPlayerStatus", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMSetSlotPassword": { + "anon": 2, + "class": "Game::SNMSetSlotPassword", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMSetTimers": { + "anon": 1, + "class": "Game::SNMSetTimers", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::StrategyTimerParams", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMSlotInit": { + "anon": 10, + "class": "Game::SNMSlotInit", + "complete": true, + "fields": [ + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::Slot", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::StrategyPlayerGameSettings", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 10, + "named": false, + "unresolved": 0 + }, + "Game::SNMSlotInsertClient": { + "anon": 3, + "class": "Game::SNMSlotInsertClient", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::SNMSlotMoveClient": { + "anon": 3, + "class": "Game::SNMSlotMoveClient", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::SNMSlotPWAttempt": { + "anon": 1, + "class": "Game::SNMSlotPWAttempt", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMSlotPWRejected": { + "anon": 1, + "class": "Game::SNMSlotPWRejected", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMSlotRemoveClient": { + "anon": 1, + "class": "Game::SNMSlotRemoveClient", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMSlotReqPW": { + "anon": 2, + "class": "Game::SNMSlotReqPW", + "complete": true, + "fields": [ + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMSlotSetData": { + "anon": 10, + "class": "Game::SNMSlotSetData", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::PlayerColorID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::StrategyPlayerGameSettings", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 10, + "named": false, + "unresolved": 0 + }, + "Game::SNMSlotSetForcedSpecies": { + "anon": 1, + "class": "Game::SNMSlotSetForcedSpecies", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMSlotSetPW": { + "anon": 4, + "class": "Game::SNMSlotSetPW", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 4, + "named": false, + "unresolved": 0 + }, + "Game::SNMSlotSetState": { + "anon": 3, + "class": "Game::SNMSlotSetState", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::SNMTechOffer": { + "anon": 5, + "class": "Game::SNMTechOffer", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 0 + }, + "Game::SNMTransferProgress": { + "anon": 1, + "class": "Game::SNMTransferProgress", + "complete": true, + "fields": [ + { + "member": true, + "of": "char", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMTurnInfo": { + "anon": 1, + "class": "Game::SNMTurnInfo", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::StrategyTurnInfo", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMUpdate": { + "anon": 5, + "class": "Game::SNMUpdate", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::PlayerAlliances", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::TechOffer", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 0 + }, + "Game::SNMUpdateAlliances": { + "anon": 2, + "class": "Game::SNMUpdateAlliances", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::PlayerAlliances", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SNMUpdateComplete": { + "anon": 1, + "class": "Game::SNMUpdateComplete", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SNMUserNames": { + "anon": 2, + "class": "Game::SNMUserNames", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::StrategyUserInfo", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SVSOAntiquarians": { + "anon": 0, + "class": "Game::SVSOAntiquarians", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "wpid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "wpturn" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "narts" + }, + { + "member": false, + "of": "Game::SVSOAntiquarians::Artifact", + "prim": "frame", + "shape": "frame", + "tag": "art" + } + ], + "n": 4, + "named": true, + "unresolved": 0 + }, + "Game::SVSOAntiquarians::Artifact": { + "anon": 0, + "class": "Game::SVSOAntiquarians::Artifact", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "shipid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "salsid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "salpid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "pvis" + } + ], + "n": 4, + "named": true, + "unresolved": 0 + }, + "Game::SVSOBrokenEmpire": { + "anon": 0, + "class": "Game::SVSOBrokenEmpire", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::Game::SVSOBrokenEmpire::VPCStat::?$NetworkIDDataMap", + "prim": "frame", + "shape": "frame", + "tag": "pcs" + } + ], + "n": 1, + "named": true, + "unresolved": 0 + }, + "Game::SVSOCrowDefenders": { + "anon": 0, + "class": "Game::SVSOCrowDefenders", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "ndsys" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "dsys" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "ndes" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "des" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "drad" + } + ], + "n": 6, + "named": true, + "unresolved": 0 + }, + "Game::SVSOCrowRuins": { + "anon": 0, + "class": "Game::SVSOCrowRuins", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NAsg" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Eflt" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "Esys" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NWD" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "wid" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::SVSODerelict": { + "anon": 0, + "class": "Game::SVSODerelict", + "complete": false, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NDsn" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "DsnID" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "Dwght", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "narr", + "tag": "NAsg" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Eflt" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "Esys" + } + ], + "n": 6, + "named": true, + "unresolved": 1 + }, + "Game::SVSOGrandMenaceTrigger": { + "anon": 0, + "class": "Game::SVSOGrandMenaceTrigger", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "gmch" + } + ], + "n": 1, + "named": true, + "unresolved": 0 + }, + "Game::SVSOHolyLands": { + "anon": 0, + "class": "Game::SVSOHolyLands", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Game::SVSOHolyLands::PlayerState": { + "anon": 0, + "class": "Game::SVSOHolyLands::PlayerState", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Game::SVSOJewelsOfTheCrown": { + "anon": 0, + "class": "Game::SVSOJewelsOfTheCrown", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "JEWELLOCATIONID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "JEWELSHIPID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PREVJEWELSHIPID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "JEWELLOCATIONID" + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "prjdone" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::SVSOLandGrab": { + "anon": 0, + "class": "Game::SVSOLandGrab", + "complete": true, + "fields": [ + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "winr" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "nplayers" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nwt" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::SVSOLocust": { + "anon": 0, + "class": "Game::SVSOLocust", + "complete": true, + "fields": [ + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "ini2" + }, + { + "member": true, + "of": "Game::Game::VLocustNestState::?$NetworkIDDataMap", + "prim": "frame", + "shape": "frame", + "tag": "nst" + }, + { + "member": true, + "of": "Game::Game::VLocustFleetLogistics::?$NetworkIDDataMap", + "prim": "frame", + "shape": "frame", + "tag": "flt" + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "vis" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "des" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::SVSOMasterVoice": { + "anon": 0, + "class": "Game::SVSOMasterVoice", + "complete": true, + "fields": [ + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "hom" + }, + { + "member": true, + "of": "enum:HomeState", + "prim": "frame", + "shape": "carr", + "tag": "hmd" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::SVSOMonitor": { + "anon": 0, + "class": "Game::SVSOMonitor", + "complete": false, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NDsn" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "DsnID" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "Dwght", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "narr", + "tag": "NAsg" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Eflt" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "Esys" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "nt", + "unresolved": true + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "scnm" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "spwt" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "rsmd" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "dsgn" + } + ], + "n": 11, + "named": true, + "unresolved": 2 + }, + "Game::SVSOOrtgay": { + "anon": 0, + "class": "Game::SVSOOrtgay", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "state" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "init" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "design" + }, + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "origin" + }, + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "center" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "turnLv" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "turnAn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "spawnturn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "spawnodds" + } + ], + "n": 9, + "named": true, + "unresolved": 0 + }, + "Game::SVSOProgressionWars": { + "anon": 0, + "class": "Game::SVSOProgressionWars", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "stg" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sft" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snec" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ses" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snet" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "snep" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "srsi" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "srs" + }, + { + "member": true, + "of": "String", + "prim": "frame", + "shape": "carr", + "tag": "lts" + } + ], + "n": 10, + "named": true, + "unresolved": 0 + }, + "Game::SVSOPuppetMaster": { + "anon": 0, + "class": "Game::SVSOPuppetMaster", + "complete": true, + "fields": [ + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "Init2" + }, + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "End" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "Des" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Flt" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NSys" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "SID" + } + ], + "n": 6, + "named": true, + "unresolved": 0 + }, + "Game::SVSORefugees": { + "anon": 0, + "class": "Game::SVSORefugees", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rsuc" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "pid" + }, + { + "member": false, + "of": "Game::SVSORefugees::PlayerStatus", + "prim": "frame", + "shape": "frame", + "tag": "rsu" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "didc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "did" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "ini" + } + ], + "n": 6, + "named": true, + "unresolved": 0 + }, + "Game::SVSORefugees::PlayerStatus": { + "anon": 0, + "class": "Game::SVSORefugees::PlayerStatus", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "lr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "lrt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "llc" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "atr" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "asy" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::SVSOSlaversRefuel": { + "anon": 0, + "class": "Game::SVSOSlaversRefuel", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NAsg" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Eflt" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "Esys" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "CDiff" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NTD" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "TDID" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NAD" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "ADID" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::SVSOSots": { + "anon": 0, + "class": "Game::SVSOSots", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ScnID" + }, + { + "member": true, + "of": "Game::SVSOScenarioBase", + "prim": "frame", + "shape": "frame", + "tag": "ScnObj" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "numx" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "xscn" + }, + { + "member": false, + "of": "Game::SVScriptObject", + "prim": "frame", + "shape": "frame", + "tag": "xsc" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NEncObjs" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "EncID" + }, + { + "member": false, + "of": "Game::SVScriptObject", + "prim": "frame", + "shape": "frame", + "tag": "EncObj" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::SVSOSwarm": { + "anon": 0, + "class": "Game::SVSOSwarm", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NAsg" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Eflt" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "Esys" + }, + { + "member": true, + "of": "Game::SVSOSwarm::Infestation", + "prim": "frame", + "shape": "carr", + "tag": "infest" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "deshive" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "deslarva" + } + ], + "n": 6, + "named": true, + "unresolved": 0 + }, + "Game::SVSOSwarm::Infestation": { + "anon": 0, + "class": "Game::SVSOSwarm::Infestation", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sysid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "stg" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "strn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mtrn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "trgtrn" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "canh" + } + ], + "n": 6, + "named": true, + "unresolved": 0 + }, + "Game::SVSOSwarmQueen": { + "anon": 0, + "class": "Game::SVSOSwarmQueen", + "complete": true, + "fields": [ + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "QDesignID" + }, + { + "member": true, + "of": "Game::SVSOSwarmQueen::HiveInfo", + "prim": "frame", + "shape": "carr", + "tag": "Hives" + }, + { + "member": true, + "of": "Game::SVSOSwarmQueen::QueenInfo", + "prim": "frame", + "shape": "carr", + "tag": "Queens" + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "SysMem" + } + ], + "n": 4, + "named": true, + "unresolved": 0 + }, + "Game::SVSOSwarmQueen::HiveInfo": { + "anon": 0, + "class": "Game::SVSOSwarmQueen::HiveInfo", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "HiveID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "QueenID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NextQ" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::SVSOSwarmQueen::QueenInfo": { + "anon": 0, + "class": "Game::SVSOSwarmQueen::QueenInfo", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "QueenID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "QDstID" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::SVSOSystemKiller": { + "anon": 0, + "class": "Game::SVSOSystemKiller", + "complete": true, + "fields": [ + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "Des" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Flt" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "Init2" + }, + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "End" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NSys" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "SID" + } + ], + "n": 6, + "named": true, + "unresolved": 0 + }, + "Game::SVSOTraps": { + "anon": 0, + "class": "Game::SVSOTraps", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::SVSOTraps::Trap", + "prim": "frame", + "shape": "carr", + "tag": "traps" + } + ], + "n": 1, + "named": true, + "unresolved": 0 + }, + "Game::SVSOTraps::Trap": { + "anon": 0, + "class": "Game::SVSOTraps::Trap", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "pid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "trenc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "trgenc" + } + ], + "n": 4, + "named": true, + "unresolved": 0 + }, + "Game::SVSOUpstartApes": { + "anon": 0, + "class": "Game::SVSOUpstartApes", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "EMPIREFLAGS" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "EMPIRESTANDING" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "NUMSHIPCLASSES" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "SHIPCLASS" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NEXTORDERTURN" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "EMPIREORDERID" + }, + { + "member": false, + "of": "Game::SVSOUpstartApes_EmpireOrder", + "prim": "frame", + "shape": "frame", + "tag": "EMPIREORDER" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "EARTHID" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::SVSOUpstartApes_EO_DEMANDS_SHIPS": { + "anon": 0, + "class": "Game::SVSOUpstartApes_EO_DEMANDS_SHIPS", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "OBJECTIVEID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TURNCREATED" + }, + { + "member": true, + "of": "Game::SVSOUpstartApes_EO_DEMANDS_SHIPS::ShipRequest", + "prim": "frame", + "shape": "carr", + "tag": "REQUESTS" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "LASTTURN" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "SUCCESSSTANDING" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FAILURESTANDING" + } + ], + "n": 6, + "named": true, + "unresolved": 0 + }, + "Game::SVSOUpstartApes_EO_DEMANDS_SHIPS::ShipRequest": { + "anon": 0, + "class": "Game::SVSOUpstartApes_EO_DEMANDS_SHIPS::ShipRequest", + "complete": true, + "fields": [ + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "MISSIONSECTION" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NUMREQUIRED" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::SVSOUpstartApes_EO_DEMANDS_TRADE_GOODS": { + "anon": 0, + "class": "Game::SVSOUpstartApes_EO_DEMANDS_TRADE_GOODS", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "OBJECTIVEID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TURNCREATED" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "LASTTURN" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::SVSOUpstartApes_EO_DEMANDS_VICTORY": { + "anon": 0, + "class": "Game::SVSOUpstartApes_EO_DEMANDS_VICTORY", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "OBJECTIVEID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TURNCREATED" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "LASTTURN" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::SVSOUpstartApes_EO_ENERGY_WEAPONS_DECADENT": { + "anon": 0, + "class": "Game::SVSOUpstartApes_EO_ENERGY_WEAPONS_DECADENT", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "OBJECTIVEID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TURNCREATED" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "LASTTURN" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::SVSOUpstartApes_EO_FEARS_YOUR_POWER": { + "anon": 0, + "class": "Game::SVSOUpstartApes_EO_FEARS_YOUR_POWER", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "OBJECTIVEID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TURNCREATED" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "LASTTURN" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::SVSOUpstartApes_EO_GIFTS": { + "anon": 0, + "class": "Game::SVSOUpstartApes_EO_GIFTS", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "OBJECTIVEID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TURNCREATED" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::SVSOUpstartApes_EO_MUST_EXPAND": { + "anon": 0, + "class": "Game::SVSOUpstartApes_EO_MUST_EXPAND", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "OBJECTIVEID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TURNCREATED" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "LASTTURN" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::SVSOUpstartApes_EO_REQUIRES_CASH": { + "anon": 0, + "class": "Game::SVSOUpstartApes_EO_REQUIRES_CASH", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "OBJECTIVEID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TURNCREATED" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "LASTTURN" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::SVSOVonNeumann": { + "anon": 0, + "class": "Game::SVSOVonNeumann", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::SVSOVonNeumann::DefeatRecord", + "prim": "frame", + "shape": "carr", + "tag": "dfts" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rusav" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nenc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nmb" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nml" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nbb" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nbl" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nskb" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nskl" + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "mts" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ntm" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ntb" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "sken" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "skdid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "skhid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "skfid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sktq" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "skt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sktc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mbid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "mbgid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "skgid" + }, + { + "member": true, + "prim": "i64", + "shape": "scalar", + "tag": "vnhp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "vnhw" + }, + { + "member": false, + "of": "String", + "prim": "frame", + "shape": "carr", + "tag": "trev" + } + ], + "n": 25, + "named": true, + "unresolved": 0 + }, + "Game::SVSOVonNeumann::DefeatRecord": { + "anon": 0, + "class": "Game::SVSOVonNeumann::DefeatRecord", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sys" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ndft" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nxrv" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "lstd" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "bkdf" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::ServerNodeGraph": { + "anon": 0, + "class": "Game::ServerNodeGraph", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::NodePath", + "prim": "frame", + "shape": "carr", + "tag": "paths" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nextid" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::ServerNodeGraph::Params": { + "anon": 0, + "class": "Game::ServerNodeGraph::Params", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "RSeed" + }, + { + "member": true, + "of": "int", + "prim": "frame", + "shape": "carr", + "tag": "SSeed" + }, + { + "member": true, + "of": "Game::SimpleNodePath", + "prim": "frame", + "shape": "carr", + "tag": "PSeed" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::ServerPlayer": { + "anon": 0, + "class": "Game::ServerPlayer", + "complete": false, + "fields": [ + { + "member": true, + "of": "Game::TechTree", + "prim": "frame", + "shape": "frame", + "tag": "TechTree" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "HomeSys" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PlyrIdx" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "PlryName" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Species" + }, + { + "member": true, + "of": "Game::PlayerColorID", + "prim": "frame", + "shape": "frame", + "tag": "ClrID" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "Bdg" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "Avt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Team" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Sav" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "IdealSuit" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "SuitTol" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "MaxOH" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "ResRate" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "ResMod" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "ResScl" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "TRM" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TRP" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TRA" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "OutMod" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "RebOutMod" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "ScOutMod" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "IncMod" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "PopMod" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "TerraMod" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "AMine" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "MinPure" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "MinRate" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NGts" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PrGtTrf" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "GTraf" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "CstR" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "CstE" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "CstT" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Maint" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "shrm" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Status" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "Elim" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "NPC" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "RebAI" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "ReqCL" + }, + { + "member": true, + "of": "Game::PlayerAlliances", + "prim": "frame", + "shape": "frame", + "tag": "Team" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "HasVac" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "HasImm" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NPTrk" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "HasDisc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "HasDiscSp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "HasDiscCl" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "HasEnc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "HasEng" + }, + { + "member": true, + "of": "Game::EventStorage", + "prim": "frame", + "shape": "frame", + "tag": "Events" + }, + { + "member": true, + "of": "Game::FleetNameGenerator", + "prim": "frame", + "shape": "frame", + "tag": "FNG" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PvSav" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "PvMA" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "AIBn" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "CnTrd" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "CnRad" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "hgs" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "hadvs" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "harcc" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "CnVItl" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "pddm" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "BnkWrn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "BnkTrn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "BnkPr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "BnkEl" + }, + { + "member": true, + "of": "Game::ShipRecords", + "prim": "frame", + "shape": "frame", + "tag": "ShipRecs" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NextPrjID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "plcy" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "pswd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "lret" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "nmeid" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "cdp" + }, + { + "member": true, + "of": "Game::SpyReport", + "prim": "frame", + "shape": "frame", + "tag": "spy2" + }, + { + "member": true, + "of": "Game::CivilianRatios", + "prim": "frame", + "shape": "frame", + "tag": "civr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "aidf" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "Srn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "SrnTo" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "lboid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "lcid2" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "ResTNm" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "ResErrRoll" + }, + { + "member": false, + "prim": "f32", + "shape": "scalar", + "tag": "ConMod" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "SavMod" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumOwn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "OwnId" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumDes" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "DesID" + }, + { + "member": false, + "of": "Game::ShipDesign", + "prim": "frame", + "shape": "frame", + "tag": "Des" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumLeg" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "DesID" + }, + { + "member": false, + "of": "Game::ShipDesign", + "prim": "frame", + "shape": "frame", + "tag": "Des" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NumNotes" + }, + { + "member": false, + "of": "Game::PlayerNotes", + "prim": "frame", + "shape": "frame", + "tag": "Nts" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumPR" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "PRm" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "PRBt", + "unresolved": true + }, + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "HasAIR" + }, + { + "member": true, + "of": "Game::AIRebellion", + "prim": "frame", + "shape": "frame", + "tag": "AIR" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "cta" + }, + { + "member": true, + "of": "Game::AIEncounterFlags", + "prim": "frame", + "shape": "frame", + "tag": "AIEnf" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NSprj" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "SprjT" + }, + { + "member": false, + "of": "Game::SpecialProjectImpl", + "prim": "frame", + "shape": "frame", + "tag": "Sprj" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "Nexp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "xid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "xmin" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "xmax" + }, + { + "member": false, + "prim": "f32", + "shape": "scalar", + "tag": "xper", + "unresolved": true + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NWeapXcl" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "WeapXcl" + }, + { + "member": true, + "of": "Game::Objective", + "prim": "frame", + "shape": "carr", + "tag": "Ojvs" + }, + { + "member": true, + "of": "Game::DiplomacyStats", + "prim": "frame", + "shape": "carr", + "tag": "dipstats" + }, + { + "member": true, + "of": "Game::CommMessageContainer", + "prim": "frame", + "shape": "frame", + "tag": "comms" + }, + { + "member": true, + "of": "Game::PlayerReport", + "prim": "frame", + "shape": "carr", + "tag": "preps" + }, + { + "member": true, + "of": "Game::ObservedDesign", + "prim": "frame", + "shape": "carr", + "tag": "odes" + }, + { + "member": true, + "of": "Game::ObservedWeapon", + "prim": "frame", + "shape": "carr", + "tag": "owep" + }, + { + "member": true, + "of": "Game::ObservedTech", + "prim": "frame", + "shape": "carr", + "tag": "otch" + }, + { + "member": true, + "of": "Game::PlayerAid", + "prim": "frame", + "shape": "carr", + "tag": "aid" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "ndeflay" + }, + { + "member": false, + "of": "Game::DefenceLayout", + "prim": "frame", + "shape": "frame", + "tag": "deflay" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "rdtc" + }, + { + "member": true, + "of": "Game::RaidTargets", + "prim": "frame", + "shape": "frame", + "tag": "rdt" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "tnc" + } + ], + "n": 124, + "named": true, + "unresolved": 2 + }, + "Game::ServerSpyManager": { + "anon": 0, + "class": "Game::ServerSpyManager", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "xsid" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "nspy" + }, + { + "member": false, + "of": "Game::SpyCraft", + "prim": "frame", + "shape": "frame", + "tag": "spy" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::ServerSystem": { + "anon": 0, + "class": "Game::ServerSystem", + "complete": true, + "fields": [ + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "Pos" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "R" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "G" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "B" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "A" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Idx" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Size" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "Suit" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Res" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ARes2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "MRes" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "NoRebAI" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TRes" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Pop" + }, + { + "member": true, + "of": "Game::Population", + "prim": "frame", + "shape": "frame", + "tag": "Pop2" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "Infra" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PvPop" + }, + { + "member": true, + "of": "Game::Population", + "prim": "frame", + "shape": "frame", + "tag": "PvPop2" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "PvInfra" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "PvSuit" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PvRes" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PvARes2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PvMRes" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "PvNoRebAI" + }, + { + "member": true, + "of": "Game::StarSystem::OutputRates", + "prim": "frame", + "shape": "frame", + "tag": "Rts" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "Abdn" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "Dstyd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TnsOH" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "OutMod" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "RepCur" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "RepMax" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ntdev" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "pbon" + }, + { + "member": true, + "of": "Game::Population", + "prim": "frame", + "shape": "frame", + "tag": "pbon2" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "ibon" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ltis" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rbfl" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rbtn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rbfr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rbwn" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "hsrg" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "haltc" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "haltt" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "haltv" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "vnh" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "vnd" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "vnex3" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "vnpex3" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "Name" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "VFlags" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "EFlags" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "AFlags" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FFlags" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "GFlags" + }, + { + "member": true, + "prim": "i64", + "shape": "scalar", + "tag": "Bats2" + }, + { + "member": true, + "prim": "i64", + "shape": "scalar", + "tag": "rcex" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "MnRFlags" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "RfRFlags" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ClkFlags" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "EggScio" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TerrFl" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TAcq" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TFAcq" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TDst" + }, + { + "member": true, + "of": "Game::Population", + "prim": "frame", + "shape": "frame", + "tag": "dcs" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "dsu" + }, + { + "member": true, + "of": "Game::Morale", + "prim": "frame", + "shape": "frame", + "tag": "cm" + }, + { + "member": true, + "of": "Game::Morale", + "prim": "frame", + "shape": "frame", + "tag": "PvCM" + }, + { + "member": true, + "of": "Game::MoraleEvent", + "prim": "frame", + "shape": "carr", + "tag": "cme2" + }, + { + "member": true, + "of": "int", + "prim": "frame", + "shape": "carr", + "tag": "spies2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "DefF" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "DefSF" + }, + { + "member": true, + "of": "Game::BuildQueue", + "prim": "frame", + "shape": "frame", + "tag": "BQ" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "nadct" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "ads" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "adt" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumPlgs2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PlgT" + }, + { + "member": false, + "of": "Game::Plague", + "prim": "frame", + "shape": "frame", + "tag": "Plg" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumFlts" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Flt" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumGFs" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "GF" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumSnF" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "SnF" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumMnF" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "MnF" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NVO" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PID" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "TShn" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "OID" + }, + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "isind" + }, + { + "member": false, + "of": "Game::IndependenceInfo", + "prim": "frame", + "shape": "frame", + "tag": "indi" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NVE" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "EPid" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "ETS" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "Eid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NVs" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "PID" + }, + { + "member": false, + "of": "Game::StarSystem::PlayerView", + "prim": "frame", + "shape": "frame", + "tag": "pview" + }, + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "hindi" + }, + { + "member": true, + "of": "Game::IndependenceInfo", + "prim": "frame", + "shape": "frame", + "tag": "indi" + } + ], + "n": 103, + "named": true, + "unresolved": 0 + }, + "Game::ServerTradeManager": { + "anon": 0, + "class": "Game::ServerTradeManager", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Game::ServerTradeManagerImpl": { + "anon": 0, + "class": "Game::ServerTradeManagerImpl", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumTradeSectors" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "TradeID" + }, + { + "member": false, + "of": "Game::TradeSector", + "prim": "frame", + "shape": "frame", + "tag": "Trade" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "SctSize" + }, + { + "member": false, + "of": "Game::TradeRoute", + "prim": "frame", + "shape": "frame", + "tag": "rt" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::ServerTradeSector": { + "anon": 0, + "class": "Game::ServerTradeSector", + "complete": true, + "fields": [ + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "Pos" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "tsgridID" + }, + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "tsctr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "tssec" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "tsct" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "tscr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ptssec" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ptsct" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ptscr" + }, + { + "member": true, + "of": "Game::ServerTradeSector::FreighterWarning", + "prim": "frame", + "shape": "carr", + "tag": "fwarn" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "tsnumsys" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "tssys" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "tsnumflt" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "tsflt" + } + ], + "n": 14, + "named": true, + "unresolved": 0 + }, + "Game::ServerTradeSector::FreighterWarning": { + "anon": 0, + "class": "Game::ServerTradeSector::FreighterWarning", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "pid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ntrns" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::ShipBuildOrder": { + "anon": 0, + "class": "Game::ShipBuildOrder", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "desID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "con" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "conleft" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sav" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ordID" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::ShipBuildOrderDef": { + "anon": 0, + "class": "Game::ShipBuildOrderDef", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "desID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "con" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "conleft" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sav" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ordID" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::ShipDesign": { + "anon": 0, + "class": "Game::ShipDesign", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Game::ShipDesignDef::LegacyGunBank": { + "anon": 1, + "class": "Game::ShipDesignDef::LegacyGunBank", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::ShipDesignDef::LegacyWeaponDef": { + "anon": 0, + "class": "Game::ShipDesignDef::LegacyWeaponDef", + "complete": true, + "fields": [ + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "DWu" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "DWi" + }, + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "DWu" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "DWf" + } + ], + "n": 4, + "named": true, + "unresolved": 0 + }, + "Game::ShipDesignDef::Section": { + "anon": 0, + "class": "Game::ShipDesignDef::Section", + "complete": false, + "fields": [ + { + "member": false, + "of": "Game::ShipSectionID", + "prim": "frame", + "shape": "frame", + "tag": "DSec", + "unresolved": true + }, + { + "member": true, + "of": "Game::ShipDesignDef::GunBank", + "prim": "frame", + "shape": "carr", + "tag": "DGbnk2" + }, + { + "member": true, + "of": "String", + "prim": "frame", + "shape": "carr", + "tag": "DOpts" + } + ], + "n": 3, + "named": true, + "unresolved": 1 + }, + "Game::ShipHealth": { + "anon": 1, + "class": "Game::ShipHealth", + "complete": true, + "fields": [ + { + "member": false, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::ShipParams": { + "anon": 22, + "class": "Game::ShipParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::ShipParams::Section", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::ShipHealth", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "Game::PrisonerHold", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::WeaponGroups", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 22, + "named": false, + "unresolved": 0 + }, + "Game::ShipParams::Section": { + "anon": 3, + "class": "Game::ShipParams::Section", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::ShipParams::GunBank", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::CombatTechFlags", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::ShipRecords": { + "anon": 0, + "class": "Game::ShipRecords", + "complete": false, + "fields": [ + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "srnc" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "srb" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "srl" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "srk" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "sri" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "srbd", + "unresolved": true + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "srd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "src" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "srb" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "srl" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "sri", + "unresolved": true + } + ], + "n": 11, + "named": true, + "unresolved": 2 + }, + "Game::ShipSectionID": { + "anon": 2, + "class": "Game::ShipSectionID", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::ShipWeapon": { + "anon": 0, + "class": "Game::ShipWeapon", + "complete": true, + "fields": [ + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "bID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "wid" + }, + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "bID" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "wfn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "did" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::SimpleNodePath": { + "anon": 2, + "class": "Game::SimpleNodePath", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::SlaversRefuelEncounterResult": { + "anon": 1, + "class": "Game::SlaversRefuelEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::Slot": { + "anon": 3, + "class": "Game::Slot", + "complete": false, + "fields": [ + { + "member": false, + "of": "Game::SlotDef", + "prim": "frame", + "shape": "frame", + "tag": ".", + "unresolved": true + }, + { + "member": true, + "of": "Game::SlotUser", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 1 + }, + "Game::SlotDef": { + "anon": 0, + "class": "Game::SlotDef", + "complete": true, + "fields": [ + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "IsPlay" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "IsDead" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "IsReq" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "IsRec" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "IsFxNm" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "FxNm" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "IsFxSp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FxSp" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "IsFxCr" + }, + { + "member": true, + "of": "Game::PlayerColorID", + "prim": "frame", + "shape": "frame", + "tag": "FxCrID" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "IsFxBd" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "FxBd" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "IsFxAv" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "FxAv" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Tag" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "Pwd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Team" + }, + { + "member": true, + "of": "Game::StrategyPlayerGameSettings", + "prim": "frame", + "shape": "frame", + "tag": "Settings" + } + ], + "n": 18, + "named": true, + "unresolved": 0 + }, + "Game::SlotUser": { + "anon": 13, + "class": "Game::SlotUser", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::PlayerColorID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + } + ], + "n": 13, + "named": false, + "unresolved": 0 + }, + "Game::SpecialProject": { + "anon": 0, + "class": "Game::SpecialProject", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "SPid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Sts" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "Cst" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "MxC" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "Nm" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Trns" + } + ], + "n": 6, + "named": true, + "unresolved": 0 + }, + "Game::SpecialProjectImpl": { + "anon": 0, + "class": "Game::SpecialProjectImpl", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Stp" + }, + { + "member": true, + "of": "Game::SpecialProject", + "prim": "frame", + "shape": "frame", + "tag": "SPi" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::SpecialProjectNameGen": { + "anon": 0, + "class": "Game::SpecialProjectNameGen", + "complete": false, + "fields": [ + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "NNms2", + "unresolved": true + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "usnc" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "usp" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "usc", + "unresolved": true + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "Nm" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "Ntg", + "unresolved": true + } + ], + "n": 6, + "named": true, + "unresolved": 3 + }, + "Game::SpeciesRatios": { + "anon": 0, + "class": "Game::SpeciesRatios", + "complete": true, + "fields": [ + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "nv" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "sp" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "va2" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::SpyCraft": { + "anon": 0, + "class": "Game::SpyCraft", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sown" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "atto" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "deat" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "tdep" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "cbh" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "sdo" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sdet" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "spyon" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "spyat" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cm" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "cmo" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "ncp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cpl" + } + ], + "n": 14, + "named": true, + "unresolved": 0 + }, + "Game::SpyReport": { + "anon": 0, + "class": "Game::SpyReport", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "defc2" + }, + { + "member": false, + "of": "Game::SpyReportDefences", + "prim": "frame", + "shape": "frame", + "tag": "def" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rtc" + }, + { + "member": false, + "of": "Game::SpyReportTrade", + "prim": "frame", + "shape": "frame", + "tag": "strd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "evc" + }, + { + "member": false, + "of": "Game::SpyReportEvents", + "prim": "frame", + "shape": "frame", + "tag": "evs" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ttc" + }, + { + "member": false, + "of": "Game::SpyReportTechTree", + "prim": "frame", + "shape": "frame", + "tag": "tt" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::SpyReportDefences": { + "anon": 0, + "class": "Game::SpyReportDefences", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "stn" + }, + { + "member": true, + "of": "Game::DefenceSummary", + "prim": "frame", + "shape": "frame", + "tag": "sdef" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::SpyReportEvents": { + "anon": 0, + "class": "Game::SpyReportEvents", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "spl" + }, + { + "member": true, + "of": "int", + "prim": "frame", + "shape": "carr", + "tag": "ste" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::SpyReportTechTree": { + "anon": 0, + "class": "Game::SpyReportTechTree", + "complete": false, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "stn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "spl" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "NumTechs", + "unresolved": true + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "TNm" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "TNm", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "St" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "TResCost" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "TResDone" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "TAcq" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "TiAcq" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "Tbd" + }, + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "Tfc" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "TUnlck" + } + ], + "n": 13, + "named": true, + "unresolved": 2 + }, + "Game::SpyReportTrade": { + "anon": 0, + "class": "Game::SpyReportTrade", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "stn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "spl" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sctr" + }, + { + "member": true, + "of": "Game::SpyReportTradeRoute", + "prim": "frame", + "shape": "carr", + "tag": "srt" + } + ], + "n": 4, + "named": true, + "unresolved": 0 + }, + "Game::SpyReportTradeRoute": { + "anon": 0, + "class": "Game::SpyReportTradeRoute", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "stn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "spl" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sctr" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "sdgc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "sdg" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Game::StarFleet": { + "anon": 0, + "class": "Game::StarFleet", + "complete": true, + "fields": [ + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "Pos" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "LocID" + }, + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "HFPlan" + }, + { + "member": true, + "of": "Game::FlightPlan", + "prim": "frame", + "shape": "frame", + "tag": "FPlan" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "FtName" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FtTrans" + }, + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "FtOrig" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FtFlg" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Ftae" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Ftpae" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FtEnc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FtMS" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "Perm" + }, + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "PrvPos" + }, + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "HLay" + }, + { + "member": true, + "of": "Game::FleetLayout", + "prim": "frame", + "shape": "frame", + "tag": "Lay" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NShips" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ShipID" + }, + { + "member": false, + "of": "Game::StarShip", + "prim": "frame", + "shape": "frame", + "tag": "Ship" + } + ], + "n": 20, + "named": true, + "unresolved": 0 + }, + "Game::StarMapNode": { + "anon": 0, + "class": "Game::StarMapNode", + "complete": true, + "fields": [ + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "Pos" + } + ], + "n": 1, + "named": true, + "unresolved": 0 + }, + "Game::StarMapParams": { + "anon": 5, + "class": "Game::StarMapParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::SystemParams", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "." + }, + { + "member": true, + "of": "int", + "prim": "frame", + "shape": "carr", + "tag": "." + }, + { + "member": true, + "of": "Game::SimpleNodePath", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 0 + }, + "Game::StarShip": { + "anon": 0, + "class": "Game::StarShip", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "DesID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FltID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PlrID" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "Range" + }, + { + "member": true, + "of": "Game::ShipHealth", + "prim": "frame", + "shape": "frame", + "tag": "Health" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ConCap" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "RefCap" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "RepCap" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "MineCap" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Plg" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Act" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "Dep" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "Atq" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "EncID" + }, + { + "member": true, + "of": "Game::PrisonerHold", + "prim": "frame", + "shape": "frame", + "tag": "PrisH" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "LCT" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "tsd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "atsp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "tblt" + }, + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "hbq" + }, + { + "member": true, + "of": "Game::BuildQueue", + "prim": "frame", + "shape": "frame", + "tag": "BQ2" + }, + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "hsp" + }, + { + "member": true, + "of": "Game::Population", + "prim": "frame", + "shape": "frame", + "tag": "pop" + }, + { + "member": true, + "of": "Game::Population", + "prim": "frame", + "shape": "frame", + "tag": "ppop" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NTH" + }, + { + "member": false, + "prim": "f32", + "shape": "scalar", + "tag": "TH" + }, + { + "member": false, + "prim": "f32", + "shape": "scalar", + "tag": "THM" + } + ], + "n": 27, + "named": true, + "unresolved": 0 + }, + "Game::StarSystem": { + "anon": 0, + "class": "Game::StarSystem", + "complete": true, + "fields": [ + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "Pos" + } + ], + "n": 1, + "named": true, + "unresolved": 0 + }, + "Game::StarSystem::OutputRates": { + "anon": 0, + "class": "Game::StarSystem::OutputRates", + "complete": true, + "fields": [ + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "SRs" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "SRt" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "SRsc" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "SRtf" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "SRi" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "SRoh" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "SRnr" + } + ], + "n": 7, + "named": true, + "unresolved": 0 + }, + "Game::StarSystem::PlayerView": { + "anon": 0, + "class": "Game::StarSystem::PlayerView", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "VTrn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Pop" + }, + { + "member": true, + "of": "Game::Population", + "prim": "frame", + "shape": "frame", + "tag": "Pop2" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "Infra" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "Suit" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Res" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ARes2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "MRes" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "NoRebAI" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "pbon" + }, + { + "member": true, + "of": "Game::Population", + "prim": "frame", + "shape": "frame", + "tag": "pbon2" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "ibon" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TerrFl" + }, + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "footer" + } + ], + "n": 14, + "named": true, + "unresolved": 0 + }, + "Game::StrategyAIAgent::DesignNameGen": { + "anon": 0, + "class": "Game::StrategyAIAgent::DesignNameGen", + "complete": false, + "fields": [ + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "dnnc", + "unresolved": true + }, + { + "member": true, + "of": "Game::ShipSectionID", + "prim": "frame", + "shape": "frame", + "tag": "dnid" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "dnnm", + "unresolved": true + } + ], + "n": 3, + "named": true, + "unresolved": 2 + }, + "Game::StrategyAIAgent::Streamable": { + "anon": 0, + "class": "Game::StrategyAIAgent::Streamable", + "complete": false, + "fields": [ + { + "member": false, + "of": "Game::AttribMap", + "prim": "frame", + "shape": "frame", + "tag": "AIAttr" + }, + { + "member": false, + "of": "Game::Mars::Game::W4AIPurposeID::U?$StreamableEnum::?$AIWeightMap", + "prim": "frame", + "shape": "frame", + "tag": "AITurnPris", + "unresolved": true + }, + { + "member": false, + "of": "Game::AISituation", + "prim": "frame", + "shape": "frame", + "tag": "AISit", + "unresolved": true + }, + { + "member": false, + "of": "Game::Mars::I::U?$StreamableEnum::?$AIWeightMap", + "prim": "frame", + "shape": "frame", + "tag": "AIPlyHat", + "unresolved": true + }, + { + "member": true, + "of": "Game::AIPlayerRequestStamp", + "prim": "frame", + "shape": "carr", + "tag": "prs2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "dsh" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "pid" + }, + { + "member": false, + "of": "int", + "prim": "frame", + "shape": "carr", + "tag": "trns" + }, + { + "member": false, + "prim": "i32", + "shape": "narr", + "tag": "NBStab" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "BStabPl" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "BStabTn" + }, + { + "member": false, + "prim": "i32", + "shape": "narr", + "tag": "NMBlst" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "MBlstSy" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "MBlstTn" + }, + { + "member": false, + "of": "Game::StrategyAIAgent::DesignNameGen", + "prim": "frame", + "shape": "frame", + "tag": "AIDNG" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "AIHivJ" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "SDFlT" + }, + { + "member": false, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "nalat" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "lnat", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "lat", + "unresolved": true + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "AINumSys" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "AISysID" + }, + { + "member": false, + "of": "Game::AISystem", + "prim": "frame", + "shape": "frame", + "tag": "AISys" + }, + { + "member": false, + "prim": "i32", + "shape": "narr", + "tag": "NCmbR" + }, + { + "member": false, + "of": "Game::AICombatReport", + "prim": "frame", + "shape": "frame", + "tag": "CmbR" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "NumCL", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "CLTn", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "CLSyID" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "CLPlID" + }, + { + "member": false, + "prim": "i32", + "shape": "narr", + "tag": "NPrv" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "NPrvId" + }, + { + "member": false, + "prim": "f32", + "shape": "scalar", + "tag": "NPrvVa" + }, + { + "member": false, + "prim": "i32", + "shape": "narr", + "tag": "NTecS" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "TecS" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "fct" + }, + { + "member": false, + "of": "Game::AIAutoPeaceRun", + "prim": "frame", + "shape": "carr", + "tag": "apr", + "unresolved": true + } + ], + "n": 36, + "named": true, + "unresolved": 8 + }, + "Game::StrategyGameCreateParams": { + "anon": 0, + "class": "Game::StrategyGameCreateParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "Name" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ID" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "RSeed" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "AID" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "Key" + }, + { + "member": true, + "of": "Game::StarMapParams", + "prim": "frame", + "shape": "frame", + "tag": "MapP" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "MapS" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "MapF" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NSys" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "REnc" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "SDist" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "SSize" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "SRes" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "SSuit" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "MaxP" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ASpec" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "bAlly" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NTeam" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "tmgrp" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PSav" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PCol" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PTech" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "IncM" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "ResM" + }, + { + "member": true, + "of": "Game::StrategyScriptParams", + "prim": "frame", + "shape": "frame", + "tag": "scrp" + } + ], + "n": 25, + "named": true, + "unresolved": 0 + }, + "Game::StrategyGameInfo": { + "anon": 0, + "class": "Game::StrategyGameInfo", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "GameName" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Turn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NumSys" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Checksum" + }, + { + "member": true, + "of": "Game::StrategyPlayerInfo", + "prim": "frame", + "shape": "carr", + "tag": "Players" + }, + { + "member": true, + "of": "Game::StrategySessionParams", + "prim": "frame", + "shape": "frame", + "tag": "Session" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "MapShape" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "IncMod" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "ResMod" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "Alliances" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "Teams" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "Encounters" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "Scenario" + } + ], + "n": 13, + "named": true, + "unresolved": 0 + }, + "Game::StrategyGameLoadParams": { + "anon": 1, + "class": "Game::StrategyGameLoadParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::StrategyGameLoader::CustomDataTable": { + "anon": 0, + "class": "Game::StrategyGameLoader::CustomDataTable", + "complete": false, + "fields": [ + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "NumIDs", + "unresolved": true + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "ID", + "unresolved": true + } + ], + "n": 2, + "named": true, + "unresolved": 2 + }, + "Game::StrategyGameParams": { + "anon": 2, + "class": "Game::StrategyGameParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::StrategyGameCreateParams", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::StrategyHostParams": { + "anon": 5, + "class": "Game::StrategyHostParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::StrategyGameParams", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "Game::StrategySessionParams", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 0 + }, + "Game::StrategyLaunchParams": { + "anon": 2, + "class": "Game::StrategyLaunchParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::StrategySimParams", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::StrategyPlayerGameSettings": { + "anon": 4, + "class": "Game::StrategyPlayerGameSettings", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 4, + "named": false, + "unresolved": 0 + }, + "Game::StrategyPlayerInfo": { + "anon": 0, + "class": "Game::StrategyPlayerInfo", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::SlotDef", + "prim": "frame", + "shape": "frame", + "tag": "Slot" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Rank" + } + ], + "n": 2, + "named": true, + "unresolved": 0 + }, + "Game::StrategyPlayerParams": { + "anon": 11, + "class": "Game::StrategyPlayerParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::PlayerColorID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::StrategyPlayerGameSettings", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 11, + "named": false, + "unresolved": 0 + }, + "Game::StrategyScriptParams": { + "anon": 0, + "class": "Game::StrategyScriptParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "spc" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "spsn" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "sppn" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "sppv" + } + ], + "n": 4, + "named": true, + "unresolved": 0 + }, + "Game::StrategyServer": { + "anon": 6, + "class": "Game::StrategyServer", + "complete": false, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "KeyPath" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "NMSz", + "unresolved": true + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NMLc" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "NMnx", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "PlayerIDs", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "DesignIDs", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "SystemIDs", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "FleetIDs", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "ShipIDs", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "TradeIDs", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ModCount" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Frame" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "GameID" + }, + { + "member": true, + "of": "Game::AttribMap", + "prim": "frame", + "shape": "frame", + "tag": "Attrib" + }, + { + "member": true, + "of": "RNG", + "prim": "frame", + "shape": "frame", + "tag": "RNG" + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "GameName" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Map" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "IncMod" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "ResMod" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "EnAl" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "EnTm" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "GOTurn" + }, + { + "member": true, + "of": "enum:uint", + "prim": "frame", + "shape": "carr", + "tag": "GOWinPly" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NPCm" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NPCo" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NPCi" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NPCv" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "NPCa" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "szadj" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "rsadj" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "suadj" + }, + { + "member": true, + "of": "Game::SpecialProjectNameGen", + "prim": "frame", + "shape": "frame", + "tag": "sprjs" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "RandEncAdj" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "cmbtid" + }, + { + "member": true, + "of": "Game::GameTurnHistory", + "prim": "frame", + "shape": "frame", + "tag": "turnstats" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "numcreps" + }, + { + "member": false, + "of": "Game::CombatReport", + "prim": "frame", + "shape": "frame", + "tag": "crep" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "ninv" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "invs" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "inve" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "invt" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "invtb", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "AllExc", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "AllExc" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "AllExc" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "AllExc", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "AllExc" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "AllExc" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "AllExcCF", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "AllExcCFp" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "AllExcCFp" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumPlrs" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PlayerID" + }, + { + "member": false, + "of": "Game::ServerPlayer", + "prim": "frame", + "shape": "frame", + "tag": "Player" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "ISsp" + }, + { + "member": false, + "prim": "f32", + "shape": "scalar", + "tag": "ISsu" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumSys" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "SysID" + }, + { + "member": false, + "of": "Game::StarSystem", + "prim": "frame", + "shape": "frame", + "tag": "Sys" + }, + { + "member": true, + "of": "Game::ServerNodeGraph", + "prim": "frame", + "shape": "frame", + "tag": "NdGr2" + }, + { + "member": true, + "of": "Game::ServerTradeManager", + "prim": "frame", + "shape": "frame", + "tag": "trdmgr" + }, + { + "member": true, + "of": "Game::IServerSpyManager", + "prim": "frame", + "shape": "frame", + "tag": "spymgr" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumFlts" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "FltID" + }, + { + "member": false, + "of": "Game::StarFleet", + "prim": "frame", + "shape": "frame", + "tag": "Flt" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "NumActs" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Act" + }, + { + "member": true, + "of": "Game::SVScriptObject", + "prim": "frame", + "shape": "frame", + "tag": "SvSctOb" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "zdsc" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "zdsi" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "zdst" + } + ], + "n": 77, + "named": false, + "unresolved": 12 + }, + "Game::StrategySessionParams": { + "anon": 0, + "class": "Game::StrategySessionParams", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::StrategyTimerParams", + "prim": "frame", + "shape": "frame", + "tag": "TMRS" + } + ], + "n": 1, + "named": true, + "unresolved": 0 + }, + "Game::StrategySimParams": { + "anon": 3, + "class": "Game::StrategySimParams", + "complete": false, + "fields": [ + { + "member": true, + "of": "Game::StrategyGameParams", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": false, + "of": "Game::StrategySessionParams", + "prim": "frame", + "shape": "frame", + "tag": ".", + "unresolved": true + }, + { + "member": true, + "of": "Game::StrategyPlayerParams", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 1 + }, + "Game::StrategyTimerParams": { + "anon": 0, + "class": "Game::StrategyTimerParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "TSTL" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "TCTL" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "TQTL" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "TQTLE" + } + ], + "n": 4, + "named": true, + "unresolved": 0 + }, + "Game::StrategyTurnInfo": { + "anon": 8, + "class": "Game::StrategyTurnInfo", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 8, + "named": false, + "unresolved": 0 + }, + "Game::StrategyUserInfo": { + "anon": 3, + "class": "Game::StrategyUserInfo", + "complete": false, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": null, + "shape": "scalar", + "tag": ".", + "unresolved": true + }, + { + "member": true, + "prim": null, + "shape": "scalar", + "tag": ".", + "unresolved": true + } + ], + "n": 3, + "named": false, + "unresolved": 2 + }, + "Game::SwarmEncounterParams": { + "anon": 1, + "class": "Game::SwarmEncounterParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SwarmEncounterResult": { + "anon": 3, + "class": "Game::SwarmEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::ShipHealth", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Game::SwarmQueenEncounterResult": { + "anon": 1, + "class": "Game::SwarmQueenEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SystemEvent": { + "anon": 0, + "class": "Game::SystemEvent", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "set" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "ses" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "seop" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "senp" + }, + { + "member": true, + "prim": "i32", + "shape": "narr", + "tag": "seno2" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "seot2" + } + ], + "n": 6, + "named": true, + "unresolved": 0 + }, + "Game::SystemKillerEncounterResult": { + "anon": 1, + "class": "Game::SystemKillerEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::SystemParams": { + "anon": 5, + "class": "Game::SystemParams", + "complete": true, + "fields": [ + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 0 + }, + "Game::TacReport": { + "anon": 0, + "class": "Game::TacReport", + "complete": true, + "fields": [ + { + "member": true, + "of": "Game::TacReportEvents", + "prim": "frame", + "shape": "frame", + "tag": "TRby" + }, + { + "member": true, + "of": "Game::TacReportEvents", + "prim": "frame", + "shape": "frame", + "tag": "TRto" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TRid" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TRal" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TRbal" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TRlas" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TRmis" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TRmin" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TRnrg" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TRbio" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TRbrd" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "TRsld" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "TRsldd" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "TRsldc" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "TRsldi" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "TRsldr" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "TRnc" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "TRships" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TRsats" + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "TRshipsL" + } + ], + "n": 20, + "named": true, + "unresolved": 0 + }, + "Game::TacReportEvents": { + "anon": 0, + "class": "Game::TacReportEvents", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TREhd" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "TREhi" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "TREd" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "TREdp" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "TREdi" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "TREdt" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "TREb" + } + ], + "n": 7, + "named": true, + "unresolved": 0 + }, + "Game::TechOffer": { + "anon": 0, + "class": "Game::TechOffer", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "giv" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "tch" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::TechOfferProject": { + "anon": 0, + "class": "Game::TechOfferProject", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Stp" + }, + { + "member": true, + "of": "Game::SpecialProject", + "prim": "frame", + "shape": "frame", + "tag": "SPi" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "AOdd" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "AInc" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "Tch" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "RCst" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "RDn" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "giv" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "rcp" + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "rcpd2" + } + ], + "n": 10, + "named": true, + "unresolved": 0 + }, + "Game::TechProject": { + "anon": 0, + "class": "Game::TechProject", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "Stp" + }, + { + "member": true, + "of": "Game::SpecialProject", + "prim": "frame", + "shape": "frame", + "tag": "SPi" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "AOdd" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "AInc" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "Tch" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "RCst" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "RDn" + } + ], + "n": 7, + "named": true, + "unresolved": 0 + }, + "Game::TechTree": { + "anon": 0, + "class": "Game::TechTree", + "complete": false, + "fields": [ + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "NumTechs", + "unresolved": true + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "TNm" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "TNm", + "unresolved": true + }, + { + "member": false, + "prim": "i32", + "shape": "narr", + "tag": "NumBrs" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "TNm" + }, + { + "member": false, + "prim": "str", + "shape": "scalar", + "tag": "TNm", + "unresolved": true + } + ], + "n": 6, + "named": true, + "unresolved": 3 + }, + "Game::TradeRoute": { + "anon": 0, + "class": "Game::TradeRoute", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "tro" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "trfow" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "trfr" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "trfrs" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "trtow" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "trto" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "trtos" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "trtc" + } + ], + "n": 8, + "named": true, + "unresolved": 0 + }, + "Game::TradeSector": { + "anon": 0, + "class": "Game::TradeSector", + "complete": true, + "fields": [ + { + "member": true, + "of": "Vector3", + "prim": "frame", + "shape": "frame", + "tag": "Pos" + } + ], + "n": 1, + "named": true, + "unresolved": 0 + }, + "Game::TurnCommands": { + "anon": 44, + "class": "Game::TurnCommands", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "Game::CivilianRatios", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "of": "Game::StarSystem::OutputRates", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "narr", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "of": "Game::Population", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "of": "Game::RaidTargets", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 44, + "named": false, + "unresolved": 0 + }, + "Game::UpdateData": { + "anon": 3, + "class": "Game::UpdateData", + "complete": false, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": null, + "shape": "scalar", + "tag": ".", + "unresolved": true + } + ], + "n": 3, + "named": false, + "unresolved": 1 + }, + "Game::VNFinsolEncounterResult": { + "anon": 1, + "class": "Game::VNFinsolEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::VNHomeEncounterParams": { + "anon": 6, + "class": "Game::VNHomeEncounterParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i64", + "shape": "scalar", + "tag": "." + } + ], + "n": 6, + "named": false, + "unresolved": 0 + }, + "Game::VNHomeEncounterResult": { + "anon": 2, + "class": "Game::VNHomeEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i64", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::VonNeumannEncounterParams": { + "anon": 1, + "class": "Game::VonNeumannEncounterParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::VonNeumannEncounterResult": { + "anon": 2, + "class": "Game::VonNeumannEncounterResult", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Game::WeaponGroups": { + "anon": 0, + "class": "Game::WeaponGroups", + "complete": true, + "fields": [ + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "wgng" + }, + { + "computed": true, + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": "wgid" + }, + { + "member": true, + "of": "Game::GunBankSelection", + "prim": "frame", + "shape": "frame", + "tag": "wgb" + } + ], + "n": 3, + "named": true, + "unresolved": 0 + }, + "Game::XenoTechsPerSpecies": { + "anon": 1, + "class": "Game::XenoTechsPerSpecies", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Game::ZuulInfestation": { + "anon": 0, + "class": "Game::ZuulInfestation", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PlgSys" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PlgCBy" + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "PlgCByF" + }, + { + "member": true, + "prim": "i64", + "shape": "scalar", + "tag": "PlgNZ" + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "PlgZdr" + } + ], + "n": 5, + "named": true, + "unresolved": 0 + }, + "Mars::DecalFile": { + "anon": 0, + "class": "Mars::DecalFile", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Mars::DirectionAttractorProxy": { + "anon": 0, + "class": "Mars::DirectionAttractorProxy", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Mars::FNMBase": { + "anon": 2, + "class": "Mars::FNMBase", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Mars::FNMChunk": { + "anon": 5, + "class": "Mars::FNMChunk", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "raw", + "shape": "raw", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 0 + }, + "Mars::FNMChunkReply": { + "anon": 2, + "class": "Mars::FNMChunkReply", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Mars::FNMDone": { + "anon": 4, + "class": "Mars::FNMDone", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 4, + "named": false, + "unresolved": 0 + }, + "Mars::FNMDoneReply": { + "anon": 2, + "class": "Mars::FNMDoneReply", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Mars::FNMError": { + "anon": 3, + "class": "Mars::FNMError", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Mars::FNMSendNotify": { + "anon": 3, + "class": "Mars::FNMSendNotify", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Mars::FNMSendReply": { + "anon": 2, + "class": "Mars::FNMSendReply", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Mars::IStreamable": { + "anon": 0, + "class": "Mars::IStreamable", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Mars::LaunchParams": { + "anon": 1, + "class": "Mars::LaunchParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Mars::NMCommand": { + "anon": 2, + "class": "Mars::NMCommand", + "complete": false, + "fields": [ + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": ".", + "unresolved": true + }, + { + "member": true, + "of": "Command", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 1 + }, + "Mars::NMLoad": { + "anon": 3, + "class": "Mars::NMLoad", + "complete": true, + "fields": [ + { + "member": true, + "of": "SyncParams", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "LaunchParams", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Mars::NMSyncCheck": { + "anon": 1, + "class": "Mars::NMSyncCheck", + "complete": true, + "fields": [ + { + "member": true, + "of": "SyncChecksumBuffer", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Mars::NMSyncError": { + "anon": 1, + "class": "Mars::NMSyncError", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Mars::ParticleAttractor": { + "anon": 0, + "class": "Mars::ParticleAttractor", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Mars::ParticleChannel": { + "anon": 0, + "class": "Mars::ParticleChannel", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Mars::ParticleEmitter": { + "anon": 0, + "class": "Mars::ParticleEmitter", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Mars::ParticleSystem": { + "anon": 0, + "class": "Mars::ParticleSystem", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Mars::ParticleTracker": { + "anon": 0, + "class": "Mars::ParticleTracker", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Mars::PointAttractorProxy": { + "anon": 0, + "class": "Mars::PointAttractorProxy", + "complete": false, + "fields": [], + "n": 0, + "named": false, + "unresolved": 0 + }, + "Mars::RNG": { + "anon": 1, + "class": "Mars::RNG", + "complete": true, + "fields": [ + { + "member": false, + "prim": "raw", + "shape": "raw", + "tag": "." + } + ], + "n": 1, + "named": false, + "unresolved": 0 + }, + "Mars::SyncChecksumBuffer": { + "anon": 3, + "class": "Mars::SyncChecksumBuffer", + "complete": true, + "fields": [ + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "of": "int", + "prim": "frame", + "shape": "carr", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Mars::SyncParams": { + "anon": 6, + "class": "Mars::SyncParams", + "complete": true, + "fields": [ + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "i32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "str", + "shape": "scalar", + "tag": "." + } + ], + "n": 6, + "named": false, + "unresolved": 0 + }, + "Mars::TNMConnect": { + "anon": 4, + "class": "Mars::TNMConnect", + "complete": true, + "fields": [ + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 4, + "named": false, + "unresolved": 0 + }, + "Mars::TNMDisconnect": { + "anon": 3, + "class": "Mars::TNMDisconnect", + "complete": true, + "fields": [ + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Mars::TNMHost": { + "anon": 3, + "class": "Mars::TNMHost", + "complete": true, + "fields": [ + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + }, + "Mars::TNMMessage": { + "anon": 5, + "class": "Mars::TNMMessage", + "complete": false, + "fields": [ + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "prim": "bool", + "shape": "scalar", + "tag": "." + }, + { + "member": false, + "prim": "i32", + "shape": "scalar", + "tag": ".", + "unresolved": true + }, + { + "member": true, + "of": "NetMessage", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 5, + "named": false, + "unresolved": 1 + }, + "Mars::TNMessage": { + "anon": 2, + "class": "Mars::TNMessage", + "complete": true, + "fields": [ + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + }, + { + "member": true, + "of": "TNID", + "prim": "frame", + "shape": "frame", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Quaternion": { + "anon": 4, + "class": "Quaternion", + "complete": true, + "fields": [ + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 4, + "named": false, + "unresolved": 0 + }, + "Vector2": { + "anon": 2, + "class": "Vector2", + "complete": true, + "fields": [ + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 2, + "named": false, + "unresolved": 0 + }, + "Vector3": { + "anon": 3, + "class": "Vector3", + "complete": true, + "fields": [ + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + }, + { + "member": true, + "prim": "f32", + "shape": "scalar", + "tag": "." + } + ], + "n": 3, + "named": false, + "unresolved": 0 + } +} \ No newline at end of file diff --git a/tools/gen_stream_schema.py b/tools/gen_stream_schema.py new file mode 100644 index 0000000..3d6f8e8 --- /dev/null +++ b/tools/gen_stream_schema.py @@ -0,0 +1,210 @@ +#!/usr/bin/env python3 +"""Emit include/generated/sots_stream_schema.h for sots-engine from objects/streams.json. + +Sibling of `tools/gen_addresses.py`, same discipline: a generated file carrying +**facts only**, a provenance header, never hand-edited, regenerated on every +merge. + +What crosses the channel is the *wire schema* -- for each serializable class, the +ordered sequence of items its `Write` puts on the stream: on-disk tag, on-disk +primitive, and how the item is framed. What deliberately does **not** cross is +every memory fact in `objects/layouts.json`: field offsets, `sizeof`, gaps and +container strides. `sots-engine` is our own C++, not a byte-for-byte decomp; it +must read and write the *format* faithfully and must not inherit the original's +ABI in its runtime types. (The shim is the one component that legitimately +needs the original ABI, because it reads the running game's memory -- those few +offsets already have a home, as `offset` entries in `ghidra/addresses.json`.) + +The header is a *specification*, not a program. See the note on +`SOTS_WIRE_UNCONDITIONAL` below and findings/objects/wire-schema-channel.md: +a linear pass over `Write` cannot see its branches, so the recovered sequence is +a **superset** of what any one record contains. The engine's hand-written +`io()` shapes remain the codec; this table is what proves they agree with the +binary, item for item, in order. + +Usage +----- + uv run python3 tools/streams.py # -> objects/streams.json + uv run python3 tools/gen_stream_schema.py \ + ../sots-engine/include/generated/sots_stream_schema.h +""" +import datetime +import json +import os +import subprocess +import sys + +ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..") + +PRIM = {None: "Unknown", "i32": "I32", "i64": "I64", "f32": "F32", + "bool": "Bool", "str": "Str", "frame": "Frame", "raw": "Raw"} +SHAPE = {"scalar": "Scalar", "frame": "Frame", "carr": "CArr", + "narr": "NArr", "raw": "Raw"} + + +def cstr(s): + return '"' + s.replace("\\", "\\\\").replace('"', '\\"') + '"' + + +def main(): + streams = json.load(open(os.path.join(ROOT, "objects", "streams.json"))) + layouts = json.load(open(os.path.join(ROOT, "objects", "layouts.json"))) + try: + rev = subprocess.check_output( + ["git", "-C", ROOT, "rev-parse", "--short", "HEAD"]).decode().strip() + except Exception: + rev = "unknown" + + out = [ + "// GENERATED -- do not edit. Wire schema of Sword of the Stars.exe (GOG 1.8.1).", + f"// Source: sots-re objects/streams.json @ {rev}, generated " + f"{datetime.date.today()} by tools/gen_stream_schema.py", + "//", + "// For each serializable class, the ordered sequence of items its Mars::IStreamable", + "// Write() puts on the stream. Recovered mechanically from the serializers; the", + "// order is the program order of Write, with base-class and sub-writer calls spliced", + "// in at their call site, which is the on-disk order.", + "//", + "// FACTS ONLY. No field offsets, no sizeof, no struct strides: this header describes", + "// the on-disk FORMAT, never the original's memory layout. The engine's own types are", + "// free to be laid out however they like.", + "//", + "// SOTS_WIRE_UNCONDITIONAL -- read this before treating the table as a program.", + "// The recovery is a linear pass over Write, so it cannot see Write's branches. A", + "// field the game emits only under a condition (StarShip's BQ2, gated by hbq) is", + "// listed unconditionally here. The sequence is therefore a SUPERSET of what any", + "// single record contains, and a codec driven straight off it would desynchronise.", + "// Container loops are flattened the same way: a count item is followed by its", + "// element items as siblings, with `member == false` marking the elements, rather", + "// than nested inside the container. Use this table to CHECK a hand-written codec,", + "// not to generate one.", + "//", + "// `grade` is the recovery tier (verified / clean / unnamed / partial / empty) and", + "// read_agree/read_comparable is the class's Read-vs-Write offset cross-check.", + "#pragma once", + "#include ", + "#include ", + "", + "namespace sots::wire {", + "", + "// On-disk primitive, from the Stream vftable slot the writer called:", + "// +0x18 str +0x1c bool +0x20 f32 +0x24 i32 +0x28 frame +0x30 raw (n=8 -> i64)", + "// NOTE this is the DISK type. A member held as int16 or int8 in the original is", + "// written by WriteInt and is I32 on the wire.", + "enum class Prim : uint8_t { Unknown, I32, I64, F32, Bool, Str, Frame, Raw };", + "", + "// How the item is framed on the stream.", + "// Scalar [len][tag][value], padded to 4", + "// Frame [len][tag][pad] BEEFBEEF ... 41104110", + "// CArr a Frame whose first item is a \".\" count, then that many elements", + "// NArr a bare count item at this level, then that many elements follow it", + "// Raw opaque payload whose length only the writer knows", + "enum class Shape : uint8_t { Scalar, Frame, CArr, NArr, Raw };", + "", + "struct Field {", + " const char* tag; // on-disk tag; \".\" when the writer passed NULL", + " Prim prim;", + " Shape shape;", + " const char* of; // frame contents class name, or nullptr", + " bool member; // false: a container element / loop-body write", + " bool computed; // not a member: a count or a constant the writer derived", + " bool unresolved; // the recovery could not type this item", + "};", + "", + "struct Class {", + " const char* name;", + " const Field* fields;", + " uint16_t count;", + " uint16_t anon; // items whose tag is \".\"", + " const char* grade;", + " uint16_t read_agree;", + " uint16_t read_comparable;", + "};", + "", + ] + + names = sorted(streams) + for cls in names: + c = streams[cls] + ident = "k_" + "".join(ch if ch.isalnum() else "_" for ch in cls) + if not c["fields"]: + out.append(f"inline constexpr Field {ident}[1] = " + "{{nullptr, Prim::Unknown, Shape::Scalar, nullptr, false, false, false}};" + f" // {cls}: Write emits no item") + continue + out.append(f"inline constexpr Field {ident}[] = {{ // {cls}") + for f in c["fields"]: + of = cstr(f["of"]) if f.get("of") else "nullptr" + out.append(" {%s, Prim::%s, Shape::%s, %s, %s, %s, %s}," % ( + cstr(f["tag"]), PRIM[f["prim"]], SHAPE[f["shape"]], of, + "true" if f["member"] else "false", + "true" if f.get("computed") else "false", + "true" if f.get("unresolved") else "false")) + out.append("};") + out.append("") + out.append("inline constexpr Class kClasses[] = {") + for cls in names: + c = streams[cls] + L = layouts.get(cls, {}) + ident = "k_" + "".join(ch if ch.isalnum() else "_" for ch in cls) + n = len(c["fields"]) + out.append(" {%s, %s, %d, %d, %s, %d, %d}," % ( + cstr(cls), ident, n, c["anon"], + cstr(L.get("grade") or "unknown"), + L.get("read_agree") or 0, L.get("read_comparable") or 0)) + out.append("};") + out.append(f"inline constexpr size_t kClassCount = {len(names)};") + out += [ + "", + "// Linear lookup by class name. The table is sorted, but it is small and this is", + "// only ever called from tests and tools.", + "inline const Class* find(const char* name) {", + " for (const Class& c : kClasses) {", + " const char* a = c.name;", + " const char* b = name;", + " while (*a && *a == *b) { ++a; ++b; }", + " if (!*a && !*b) return &c;", + " }", + " return nullptr;", + "}", + "", + "inline const char* prim_name(Prim p) {", + " switch (p) {", + " case Prim::Unknown: return \"?\";", + " case Prim::I32: return \"i32\";", + " case Prim::I64: return \"i64\";", + " case Prim::F32: return \"f32\";", + " case Prim::Bool: return \"bool\";", + " case Prim::Str: return \"str\";", + " case Prim::Frame: return \"frame\";", + " case Prim::Raw: return \"raw\";", + " }", + " return \"?\";", + "}", + "", + "inline const char* shape_name(Shape s) {", + " switch (s) {", + " case Shape::Scalar: return \"scalar\";", + " case Shape::Frame: return \"frame\";", + " case Shape::CArr: return \"carr\";", + " case Shape::NArr: return \"narr\";", + " case Shape::Raw: return \"raw\";", + " }", + " return \"?\";", + "}", + "", + "} // namespace sots::wire", + "", + ] + + dest = sys.argv[1] if len(sys.argv) > 1 else os.path.join( + ROOT, "objects", "generated", "sots_stream_schema.h") + os.makedirs(os.path.dirname(dest), exist_ok=True) + open(dest, "w").write("\n".join(out)) + nf = sum(len(c["fields"]) for c in streams.values()) + print(f"wrote {dest} ({len(names)} classes, {nf} wire items)") + return 0 + + +if __name__ == "__main__": + sys.exit(main() or 0) diff --git a/tools/streams.py b/tools/streams.py new file mode 100644 index 0000000..5119909 --- /dev/null +++ b/tools/streams.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python3 +"""The *wire* projection of the serializer recovery -> objects/streams.json. + +`objects/layouts.json` is a **memory-layout** view: `build()` sorts fields by +`off_abs` and merges two writes of the same offset into `alt_tags`. That is the +right shape for a decompiler struct, and the wrong shape for a codec, because it +destroys the two things the on-disk format is made of: + + * **order** -- the stream is a sequence, and its order is the *program* order + of `Write` (with base-class / sub-writer calls spliced in at their call + site). Offset order is not the same thing: 89 of the 386 classes have at + least one field whose offset order differs from its write order. + * **repetition** -- `SVSOJewelsOfTheCrown::Write` emits `JEWELLOCATIONID` + twice, from two different members. The offset merge turns the second one + into an `alt_tags` note and the record loses a field. + +`Lab.layout()` already returns program order; this tool just refuses to throw it +away. It also drops every memory fact (`off`, `size`, `sizeof`, `gaps`, +`strides`, `vftable`): a reimplementation must read and write the *format*, and +must not inherit the original's ABI. What survives is exactly the wire schema -- +ordinal, on-disk tag, on-disk primitive, and for framed fields the class name of +the frame's contents. + +The disk primitive is **not** `layouts.json`'s `kind`, which is a memory type: an +`int16` member and an `int8` member are both written by `Stream::WriteInt` and +are four bytes on disk. It is derived from the stream vftable slot the writer +called, or from the wrapper helper it called instead: + + +0x18 (24) string +0x1c (28) bool +0x20 (32) float + +0x24 (36) int +0x28 (40) frame +0x30 (48) raw (n=8 -> int64) + +Usage +----- + uv run python3 tools/streams.py # -> objects/streams.json + uv run python3 tools/streams.py Game::StarShip # one class, readable +""" +import json +import os +import sys + +HERE = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, HERE) +import serializers as S # noqa: E402 + +OUT = os.path.join(os.path.dirname(HERE), "objects") + +# Wrapper helpers, by the primitive they write. `serializers.HELPERS` has the +# same VAs; naming them here keeps this tool readable and independent of the +# spelling used there. +HELPER_PRIM = { + 0x8B9D50: "i32", # WriteInt wrapper + 0x8B9D00: "i32", # WriteInt16 wrapper -- widened to int32 on the wire + 0x8B9C20: "bool", + 0x8B9BE0: "f32", + 0x8B9D70: "str", + 0x8B9C60: "i64", # raw, n = 8 + 0x816490: "i32", # Stream::WriteNetworkObjectId -- an id, int32 on disk +} +SLOT_PRIM = {24: "str", 28: "bool", 32: "f32", 36: "i32", 40: "frame", 48: "raw"} + + +def disk_prim(f): + """On-disk primitive for one recovered write, or None if undecidable.""" + h = f.get("helper") + if h is not None: + p = HELPER_PRIM.get(h) + if p: + return p + slot = f.get("slot") + if slot in SLOT_PRIM: + p = SLOT_PRIM[slot] + if p == "raw" and f.get("size") == 8: + return "i64" + return p + return None + + +def shape_of(f, prim): + """How the *stream* frames this field. + + scalar one item: [tag][value] + frame one framed item: [tag] BEEFBEEF ... 41104110 + carr framed array: a frame whose first item is a "." count + narr a bare int count at this level, then that many elements follow + raw opaque payload whose length only the writer knows + """ + kind = f.get("kind", "") + if kind == "vector": + # A VectorHelper written through the nested slot is framed (count + # inside); one written through the int wrapper is a bare count with the + # elements following at the same level. + return "carr" if f.get("slot") == 40 else "narr" + if prim == "frame": + return "frame" + if prim == "raw": + return "raw" + return "scalar" + + +def project(lab, cls, info): + """One class -> its ordered wire schema.""" + fields, ok, unknown = [], True, 0 + for f in lab.layout(info["write"]): + # Container element writes and loop-body reads carry `this: false`; they + # describe the *element* type, which the frame's own class already + # names. Computed values (a count, a constant) are not members but they + # ARE items on the wire, so they are kept, tagged as such. + prim = disk_prim(f) + rec = { + "tag": f.get("tag", "."), + "prim": prim, + "shape": shape_of(f, prim), + "member": bool(f.get("this")), + } + if f.get("inner"): + rec["of"] = f["inner"] + if f.get("kind") in ("const",): + rec["computed"] = True + if f.get("unresolved") or prim is None: + rec["unresolved"] = True + unknown += 1 + ok = False + fields.append(rec) + anon = sum(1 for f in fields if f["tag"] == ".") + return { + "class": cls, + "fields": fields, + "n": len(fields), + "anon": anon, + "unresolved": unknown, + "named": anon == 0 and bool(fields), + "complete": ok and bool(fields), + } + + +def run(): + lab = S.Lab() + out = {} + for cls, info in lab.infos.items(): + out[cls] = project(lab, cls, info) + # Helper-only POD types (Vector3, OutputRates, ...) have no vftable of their + # own and are reachable only through a specialised StreamableHelper thunk. + # They are frame contents for other classes, so the codec needs them. + for t, h in lab.helper_writers().items(): + if t in out or not h["write"]: + continue + out[t] = project(lab, t, {"write": h["write"]}) + return out + + +def main(): + if len(sys.argv) > 1 and sys.argv[1] != "-": + lab = S.Lab() + name = sys.argv[1] + info = lab.infos.get(name) or lab.helper_writers().get(name) + if not info: + sys.exit(f"no serializer for {name!r}") + p = project(lab, name, info) + print(f"{name} ({p['n']} items, {p['anon']} anonymous)") + for i, f in enumerate(p["fields"]): + extra = f" <{f['of']}>" if f.get("of") else "" + flag = " UNRESOLVED" if f.get("unresolved") else "" + flag += "" if f["member"] else " [element]" + flag += " [computed]" if f.get("computed") else "" + print(f" {i:3d} {f['tag']!r:<20} {str(f['prim']):<6} " + f"{f['shape']:<6}{extra}{flag}") + return 0 + out = run() + os.makedirs(OUT, exist_ok=True) + dest = os.path.join(OUT, "streams.json") + with open(dest, "w") as fh: + json.dump(out, fh, indent=1, sort_keys=True) + named = sum(1 for v in out.values() if v["named"]) + items = sum(v["n"] for v in out.values()) + print(f"wrote {dest}: {len(out)} classes, {items} wire items, " + f"{named} fully named") + return 0 + + +if __name__ == "__main__": + sys.exit(main() or 0)