Vault

zappatic MOO1 RE stream — Part 5 notes

Per-part extraction (auto-caption transcript → structured notes). Values are as heard; hex is often caption-garbled — confidence marked per item. Digest: zappatic-re-stream.

Source: part05-pvIsR571sr0.txt — https://www.youtube.com/watch?v=pvIsR571sr0

Source: Vault/raw/videos/moo1-re/part05-pvIsR571sr0.txt (auto-captions; hex values often garbled, recorded as heard).

Summary

Tooling & setup

Method

Findings — data structures & file formats

Save-file order as of this session: planets (108 records) → ships-on-route[260] → transports[100] → players[6] → per-player ship configurations (designs, new-ship-name suggestions, unlocked research, ship counts) → … fleet count and transport count … → player names → partly unknown 30-byte-ish records (from the last stream, includes the current year) → trailing unknowns (scout name, FFs). [0:00:00] [2:25:00] [3:45:00]–[3:55:00]

Item Detail Confidence
Garbage bytes in save Unused buffers are reused for menus and dumped into the save as-is; a pristine launch gives zeros high [0:00:00]
Planet X/Y X/Y is the top-left corner of the star’s selection square; a ship in orbit shares it exactly. Sol was (295,53) in the first game and (177,224) in the later one high [0:05:00] [2:50:00]
Planet twinkle timer Per-planet counter incremented every tick (makes every planet differ in diffs) high [0:05:00]
ShipsOnRoute struct 14 × u16 = 28 bytes (layout below) high [0:15:00]–[0:40:00]
ShipsOnRoute: +0 owner Race enum (0 = Human) high [0:15:00]
ShipsOnRoute: +2 X, +4 Y Current position, u16 high [0:15:00]
ShipsOnRoute: +6 target planet Index into planets[] high [0:10:00]
ShipsOnRoute: +8 travel speed Probably the speed of the slowest ship. Higher means lower ETA; 0 crashes (div-by-zero suspected); unchanged between turns med [0:20:00]–[0:30:00]
ShipsOnRoute: +10..+20 ship count[6] Count per player design slot 0..5 (scout = slot 0, colony ship = slot 4, bomber = slot 3) high [0:20:00]
ShipsOnRoute: last 3 u16 Unknown; often “1 0 0”, one entry showed 256 (maybe 2× u8); changes reverted next turn low [0:25:00] [0:35:00]
ShipsOnRoute array Max 260 entries, one shared array for all players (AI fleets mixed in). Unused slots are zeroed when fleets arrive. A fleet = up to 6 designs, so a group moves as one high [2:10:00]
Fleets-in-flight count u16 in RAM at seg 4756 off 6; in the save next to the end of the ship-configuration block (split out of “unknown 3”); verified across saves (17→9→3) high [0:45:00]–[0:55:00]
ShipTransport struct 9 × u16 = 18 bytes: owner (race), X, Y, target planet ID, population amount (millions), then 4 unknown u16 (mostly 1/0). Zeroing the last one crashes the game and deletes the transport; zeroing the first unknown makes the transport vanish (possibly speed or progress) med (layout) / low (unknowns) [3:10:00]–[3:35:00]
Transport array 100 entries. Gap left after the fleet array = 900 u16 = 100 × 9 high [3:45:00]
Transport count u16 at seg 4756 off 8, right after the fleet count; also adjacent in the save high [3:40:00]–[3:50:00]
Transports not in fleet list Temporary pseudo-ship drawn with a colony-ship icon; not part of the ships-on-route array high [3:10:00] [3:25:00]
“Totally unknown” block 411 × u16, in RAM at 6813:B8E0; in the save it’s the data after the per-player ship counts (last count word heard 1336; starts “28 1E … 4F1 … FF01 … 4D4D”, ends in FFs). Not adjacent to the configs in RAM. One word changed between saves (heard “03 → 506”) med location / low meaning [3:50:00]–[4:10:00]
Earlier “411 is zero” diff An unknown-array element was 0, then 17, then 9 between saves; this led him to the fleet count’s file position low [0:50:00]
Planet “unknown 22” → planetary reserve 32-bit field (held about 1,340,000 when poked). Inbound reserve transfers land here, and excess spending at max population is said to go to “planetary reserve”, but the field stayed 0 in one test med [4:00:00]–[4:10:00]
Player reserve (treasury) 32-bit, in player struct; not recalculated each turn (pokes persist) high [1:15:00] [4:05:00]
Diplomat availability Fields in the player struct, a 4-part group heard as “−2, 220, 8, 3”. Setting to 0 brings the diplomat back med [3:20:00]
Mood slider Per (player, opponent) pair. Edit it in the opponent’s struct (e.g. player 5 vs player 0): player 0’s copy gets overwritten from the opponents’ values med [3:20:00]
Research count arrays Per-field “amount unlocked” count must be bumped when you add a tech (propulsion → 2, construction → 3) or the change is ignored high [2:25:00] [3:35:00]
Planet size → max pop Setting planet size to 80 made max population 80 med [3:10:00]
Player 0 unknown 16 Unknown low [2:00:00]

Findings — game mechanics & formulas

Named code/data

| Name | Address (as heard) | Notes | |—|—|—| | ships_on_route (array of ShipOnRoute) | 6813:0930 | 260 entries; struct type ship on route. [0:10:00] [2:10:00] | | ship_design | — | Existing struct renamed from “ship” to “ship design” (size/icon/space fields). [0:10:00] | | ships-on-route array size | 4756:0006 (u16) | Mistakenly read 4760 first. [0:45:00]–[0:50:00] | | ship transports array size | 4756:0008 (u16) | [3:40:00] | | ship_transports (first called “ships unknown”) | 6813:94F0 | 100 × 9 u16. [2:15:00] [3:10:00] [3:45:00] | | totally_unknown | 6813:B8E0 | 411 × u16. [3:50:00] | | Fleet-count write site | 4E23:1839 (also heard “423839”, “4823 1839”) | inc word [CC86] = FF 06 86 CC; in STARMAP.EXE at file offset ~6C39; not located in Ghidra. [0:55:00]–[1:35:00] | | Read sites | e.g. 4A90:37CF and an offset ending B72 | 3 × inc di; cmp di,[CC86]. [1:35:00]–[1:45:00] | | Ghidra↔RAM delta | RAM 0813:92FC ≡ Ghidra 1468:4B7C → +0x7DD0 linear | [1:10:00] | | Planet field planetary reserve (was unknown 22) | — | Renamed; 32-bit. [4:05:00]–[4:10:00] | | Current planet ID | in game_state | Used throughout as a lookup. [0:10:00] |

Open questions / unresolved