{
 "schema": 1,
 "platform": "c64",
 "game": "space-rogue",
 "part": "hive",
 "build": "",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    0,
    16383,
    "Engine"
   ],
   [
    24064,
    25087,
    "Bases"
   ],
   [
    25088,
    42239,
    "Engine"
   ],
   [
    42240,
    48383,
    "Bases"
   ],
   [
    48384,
    58367,
    "Engine"
   ],
   [
    58368,
    60159,
    "Bases"
   ],
   [
    60160,
    65535,
    "Engine"
   ]
  ],
  "extra": [],
  "elsewhere": [
   [
    0,
    16383,
    "Engine"
   ],
   [
    24064,
    25087,
    "Bases"
   ],
   [
    25088,
    42239,
    "Engine"
   ],
   [
    42240,
    48383,
    "Bases"
   ],
   [
    48384,
    58367,
    "Engine"
   ],
   [
    58368,
    60159,
    "Bases"
   ],
   [
    60160,
    65535,
    "Engine"
   ]
  ]
 },
 "blocks": [
  {
   "start": 16384,
   "end": 22271,
   "type": "Byte"
  },
  {
   "start": 22272,
   "end": 22603,
   "type": "Code"
  },
  {
   "start": 22604,
   "end": 22783,
   "type": "Byte"
  },
  {
   "start": 22784,
   "end": 23648,
   "type": "Code"
  },
  {
   "start": 23649,
   "end": 23807,
   "type": "Byte"
  },
  {
   "start": 23808,
   "end": 23958,
   "type": "Code"
  },
  {
   "start": 23959,
   "end": 24063,
   "type": "Byte"
  }
 ],
 "symbols": [
  {
   "address": 16384,
   "name": "hive_tile_pixels",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 17408,
   "name": "hive_tile_pixels_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18432,
   "name": "hive_tile_pixels_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19456,
   "name": "hive_tile_pixels_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20224,
   "name": "hive_tile_row15_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20352,
   "name": "hive_tile_row15_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20480,
   "name": "hive_tile_kinds",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20608,
   "name": "hive_tile_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20736,
   "name": "hive_grid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20864,
   "name": "hive_grid_y27",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21760,
   "name": "hive_map_header",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21776,
   "name": "hive_map_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21777,
   "name": "hive_shot_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21808,
   "name": "hive_map_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21809,
   "name": "hive_shot_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21840,
   "name": "hive_map_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21872,
   "name": "hive_map_picture",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21904,
   "name": "hive_map_type",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21936,
   "name": "hive_map_extra",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21968,
   "name": "hive_map_messages",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22040,
   "name": "hive_mound_of",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22272,
   "name": "hive_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22319,
   "name": "hive_menu",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 22402,
   "name": "hive_quit",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 22462,
   "name": "hive_game",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 22466,
   "name": "b_57C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22520,
   "name": "hive_game_over",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 22561,
   "name": "b_5821",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22568,
   "name": "j_5828",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22577,
   "name": "hive_clear_view",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22604,
   "name": "hive_blank_line",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22615,
   "name": "str_h_til",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22621,
   "name": "str_h_map",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22627,
   "name": "hcode_padding",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22784,
   "name": "hive_drop",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22790,
   "name": "b_5906",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22807,
   "name": "j_5917",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22830,
   "name": "b_592E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22855,
   "name": "hive_caught",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22861,
   "name": "b_594D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22879,
   "name": "b_595F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22883,
   "name": "b_5963",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22902,
   "name": "hive_mood",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22914,
   "name": "b_5982",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22936,
   "name": "b_5998",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22942,
   "name": "b_599E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22944,
   "name": "b_59A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22966,
   "name": "b_59B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22969,
   "name": "r_59B9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 22970,
   "name": "hive_raise_mound",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22976,
   "name": "b_59C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22982,
   "name": "b_59C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22996,
   "name": "b_59D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23000,
   "name": "b_59D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23016,
   "name": "b_59E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23027,
   "name": "b_59F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23061,
   "name": "b_5A15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23138,
   "name": "hive_mound_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23151,
   "name": "b_5A6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23156,
   "name": "hive_breed",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23160,
   "name": "b_5A78",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23174,
   "name": "b_5A86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23180,
   "name": "b_5A8C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23189,
   "name": "b_5A95",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23195,
   "name": "r_5A9B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 23196,
   "name": "hive_breed_one",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23200,
   "name": "b_5AA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23223,
   "name": "b_5AB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23259,
   "name": "r_5ADB",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 23260,
   "name": "hive_shoot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23272,
   "name": "b_5AE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23280,
   "name": "b_5AF0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23289,
   "name": "b_5AF9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23310,
   "name": "j_5B0E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23393,
   "name": "b_5B61",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23405,
   "name": "b_5B6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23434,
   "name": "b_5B8A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23441,
   "name": "b_5B91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23449,
   "name": "b_5B99",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23452,
   "name": "b_5B9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23459,
   "name": "b_5BA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23465,
   "name": "hive_show_mounds",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23489,
   "name": "b_5BC1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23501,
   "name": "hive_recall",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23523,
   "name": "r_5BE3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 23524,
   "name": "hive_draw",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23544,
   "name": "hive_sees",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23558,
   "name": "b_5C06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23572,
   "name": "b_5C14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23573,
   "name": "b_5C15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23593,
   "name": "b_5C29",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23594,
   "name": "b_5C2A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23627,
   "name": "b_5C4B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23647,
   "name": "b_5C5F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23649,
   "name": "str_mounds",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 23808,
   "name": "hive_moves",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23814,
   "name": "b_5D06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23857,
   "name": "a_5D31",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 23858,
   "name": "a_5D32",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 23868,
   "name": "b_5D3C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23899,
   "name": "b_5D5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23923,
   "name": "r_5D73",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 23924,
   "name": "hive_wander",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23947,
   "name": "b_5D8B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23957,
   "name": "f_5D95",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 23958,
   "name": "f_5D96",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 23959,
   "name": "hive_motion_table",
   "type": "UserDefined",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 16384,
   "type": "line",
   "text": "H.TIL's 128 tiles, laid out as LAND.TIL's: pixel row r of tile t has its left byte at $4080 + $100 * r + t and its right byte at $4000 + $100 * r + t. Tiles 0-15 the Manchi (0-7 calm, 8-15 angry), 16-27 brush, 28-39 brush burnt, 40-56 rock, 57-65 and 114-119 water, 66-84 bare ground, 85-92 the trooper, 93 the shot, 95-97 a mound rising and 98 the mound, 100-112 the drop ship. Rows 0-3 from here"
  },
  {
   "address": 17408,
   "type": "line",
   "text": "The island tiles' pixel rows 4-7, in the same layout"
  },
  {
   "address": 18432,
   "type": "line",
   "text": "The island tiles' pixel rows 8-11"
  },
  {
   "address": 19456,
   "type": "line",
   "text": "The island tiles' pixel rows 12-14; row 15 from $4F00"
  },
  {
   "address": 20224,
   "type": "line",
   "text": "The island tiles' last pixel row, right bytes; draw_chart's patched load at $8711 was left pointing here"
  },
  {
   "address": 20352,
   "type": "line",
   "text": "The last pixel row's left bytes, where draw_chart's load at $871A was left"
  },
  {
   "address": 20480,
   "type": "line",
   "text": "Each island tile's kind, with the bits of LAND.TIL's: the Manchi's even tiles $81, brush $10 (it slows a Manchi's sight and burns when shot), burnt brush and bare ground 0, rock $84 (it blocks the way and sight), water $A0 ($A8 for tile $72), the trooper's tiles $85 and $04, the mound $80, the drop ship $80 and $84, and its hatch, tile $67, $0C (it hides the trooper standing in it, from sight and from the chart)"
  },
  {
   "address": 20606,
   "type": "line",
   "text": "Tile $7E's kind, where draw_brackets' right-half mask pointer was left in this load"
  },
  {
   "address": 20607,
   "type": "line",
   "text": "Tile $7F's kind, where the right-half pattern pointer was left in this load"
  },
  {
   "address": 20608,
   "type": "line",
   "text": "Each island tile's two colours for draw_chart's screen matrix: the high nybble for bit pair 01, the low for 10 (brush $5F, green on light grey)"
  },
  {
   "address": 20734,
   "type": "line",
   "text": "Tile $7E's colours; draw_brackets' left-half mask pointer was left here in this load"
  },
  {
   "address": 20735,
   "type": "line",
   "text": "Tile $7F's colours, the last byte of H.TIL, where the left-half pattern pointer was left in this load"
  },
  {
   "address": 20736,
   "type": "line",
   "text": "The island, 32 by 32 tiles of H.TIL, a row at a time from the top (Y = 31): the tile at X, Y is at $5100 + 32 * (31 - Y) + X. Water all round, brush and rock across it, and the drop ship at columns 16-19, rows 12-15, its hatch at 18, 14. The shot writes burnt brush back into it ($5B5F); hive_menu loads it afresh for every game"
  },
  {
   "address": 20864,
   "type": "line",
   "text": "Row 4 of the island's grid (Y = 27), where sector_kind's patched LDY at $2F95 was left"
  },
  {
   "address": 21760,
   "type": "line",
   "text": "2 in H.MAP, a byte no code reads (bases have 1, system maps 0), then zeros: the island has no name"
  },
  {
   "address": 21776,
   "type": "line",
   "text": "Each of the 32 entries' column ($FF free): entry 0 the trooper, who lands at 19, 14 beside the ship; entry 1 his shot; 2-31 the mounds and Manchi, cleared at each drop"
  },
  {
   "address": 21777,
   "type": "line",
   "text": "The shot's column, $7F (off the map, so never drawn) while none flies"
  },
  {
   "address": 21808,
   "type": "line",
   "text": "Each entry's row, counted from the bottom: the trooper starts on row 14"
  },
  {
   "address": 21809,
   "type": "line",
   "text": "The shot's row while it flies"
  },
  {
   "address": 21840,
   "type": "line",
   "text": "Each entry's flags as in a base map: $80 the trooper and the mounds (solid, still), $81 a wandering Manchi, $83 a chasing one, plus the heading in bits 3-4 and the still bit 5"
  },
  {
   "address": 21872,
   "type": "line",
   "text": "Each entry's picture: $55 the trooper, $5D the shot, $62 a mound, 0 a calm Manchi and 8 an angry one ($FF none)"
  },
  {
   "address": 21904,
   "type": "line",
   "text": "Each entry's type: 1 a Manchi, $FF anything else (the trooper, the shot, a mound)"
  },
  {
   "address": 21936,
   "type": "line",
   "text": "The entries' extra bytes, zeros in H.MAP; nothing in HCODE reads them, and remove_entry clears them"
  },
  {
   "address": 21968,
   "type": "line",
   "text": "The entries' messages, all $FFFF (none) in H.MAP"
  },
  {
   "address": 21969,
   "type": "line",
   "text": "The high byte of the trooper's message word"
  },
  {
   "address": 22032,
   "type": "line",
   "text": "Zero in H.MAP: a base map's kind byte, which HCODE never reads; zeros run on to $5617"
  },
  {
   "address": 22033,
   "type": "line",
   "text": "Zero here; in a base map the column where a visitor turns up, read only on arriving at a base"
  },
  {
   "address": 22034,
   "type": "line",
   "text": "Zero here; in a base map the visitor's row, in a system map the danger level"
  },
  {
   "address": 22040,
   "type": "line",
   "text": "Each entry's action byte: for a Manchi, the number of the mound entry that bred it (hive_breed_one), so that a mound keeps no more than four"
  },
  {
   "address": 22048,
   "type": "line",
   "text": "Entry 8's mound number; in a system map the bases' map file names start here ($16B2)"
  },
  {
   "address": 22049,
   "type": "line",
   "text": "Entry 9's mound number; in a system map a base file name's second character"
  },
  {
   "address": 22050,
   "type": "line",
   "text": "Entry 10's mound number; in a system map a base file name's third character"
  },
  {
   "address": 22064,
   "type": "line",
   "text": "Entry 24's mound number; in a system map the gates' data starts here ($7188)"
  },
  {
   "address": 22065,
   "type": "line",
   "text": "Entry 25's mound number; a system map gate's second byte"
  },
  {
   "address": 22066,
   "type": "line",
   "text": "Entry 26's mound number; a gate's third byte"
  },
  {
   "address": 22067,
   "type": "line",
   "text": "Entry 27's mound number; a gate's fourth byte"
  },
  {
   "address": 22072,
   "type": "line",
   "text": "Zero in H.MAP, where a base map has its cargo prices (cargo_price); unused by HIVE!"
  },
  {
   "address": 22077,
   "type": "line",
   "text": "Zero in H.MAP, where a base map's cargo availability lies; the file's zeros run to $56FF"
  },
  {
   "address": 22272,
   "type": "line",
   "text": "HIVE!'s start, called by the cabinet's action (act_hive, $AAE5). The base map's entries ($5500-$56FF) are saved at $6200, the cabinet's picture H.PAC is shown (load_picture 3) and H.TIL is loaded over LAND.TIL at $4000"
  },
  {
   "address": 22273,
   "type": "line",
   "text": "The LDA's operand; when TALK is loaded here, the talk interpreter reads $5701 as the high byte of script 0's offset"
  },
  {
   "address": 22319,
   "type": "line",
   "text": "The cabinet's menu. H.MAP is loaded to $5100, again before every game, so each starts on the same untouched island; the chart is set to show it and \"Welcome to HIVE!, the arcade game of the century... INSERT CREDIT, QUIT GAME\" printed ($CF33). INSERT CREDIT takes 1 credit and starts a game; QUIT GAME, or INSERT CREDIT with no credit, leaves"
  },
  {
   "address": 22402,
   "type": "line",
   "text": "Back to the base: its screen ($A55D), its map file (the name kept at $0778) loaded back to $5100, the chart put back on it, and the entries saved at $6200 copied over the fresh file's, so the people and items stand where they were"
  },
  {
   "address": 22462,
   "type": "line",
   "text": "A game, from combat drop 1 ($D0 keeps the drop's number). Each drop: \"Combat drop #n is under way. Prepare to deploy on planet's surface.\" ($CF31, $CF30), a key, and the drop played ($5900) at level n with 3 * n mounds to destroy. A drop won says \"Drop successful!\" ($CF2F), waits ten ticks, and the next begins"
  },
  {
   "address": 22520,
   "type": "line",
   "text": "The trooper was caught on drop n. From drop 5 on he wins (n - 4) * 8 credits: \"You have displayed extreme valor by surviving more than four combat drops. The Star Force rewards your feat with a n Cr prize. Congratulations trooper!\" ($CF2E, $CF2D). Before that: \"A pair of Manchi grab hold of your battle suit and rip you in half. You lose.\" ($CF32). A key, the view cleared, and the menu again"
  },
  {
   "address": 22577,
   "type": "line",
   "text": "Fills the chart window with tile $7C, far from the map, and draws it; then prints the ten spaces at $584C over the MOUNDS line (column 15, row 16)"
  },
  {
   "address": 22604,
   "type": "line",
   "text": "Ten spaces and a zero, printed over the MOUNDS line between games"
  },
  {
   "address": 22615,
   "type": "line",
   "text": "\"H.TIL\", the tiles' file name, zero-ended; \"H.MAP\" follows at $585D"
  },
  {
   "address": 22621,
   "type": "line",
   "text": "\"H.MAP\", the island's map file, zero-ended"
  },
  {
   "address": 22627,
   "type": "line",
   "text": "Zeros to $58FF, filling HCODE's first part out to the page; no code reads them"
  },
  {
   "address": 22784,
   "type": "line",
   "text": "One combat drop, at level X ($CE) with A mounds to destroy ($CC). Every map entry but the trooper (0) and his shot (1) is taken off, the next mound's timer ($CD) set to 30 and the count shown. Then each pass: the Manchi and the trooper move ($5D00), the shot flies ($5ADC), the recall is checked ($5BCD), a mound may rise ($59BA), every 32nd pass each mound breeds ($5A74), the chart is drawn around the trooper, a tick waited, the Manchi's mood set ($5976) and the trooper's fate checked ($5947). It ends with A = $FF (minus) when the drop is won, 0 when he is caught"
  },
  {
   "address": 22855,
   "type": "line",
   "text": "The trooper is caught when two Manchi at once stand next to him (entry_distance under 2, diagonals included; one alone does nothing): the chart drawn, sound 9, and the drop ended with A = 0, the caller's return dropped"
  },
  {
   "address": 22902,
   "type": "line",
   "text": "The Manchi's mood: when any Manchi can see the trooper ($5BF8), every Manchi gets motion kind 3, chasing, and picture 8, the angry Manchi; otherwise all get kind 1, wandering, and picture 0"
  },
  {
   "address": 22970,
   "type": "line",
   "text": "Raises mounds. With five on the map, nothing. Otherwise the timer ($CD) counts down, twice as fast while there are none, and at zero it is set again from the level: 150 - 8 * level, worked out in one byte, is kept only when the subtraction goes below zero (the BCC at $59E4, which looks reversed), otherwise 1; then a random 0-90 is added with random_upto's carry, which is set only when it gives 90. So every level up to 18 waits 1 to 90 passes, or 92, and from level 19 the wrapped result is kept. Then a mound is put on a random square that holds no entry, is not the drop ship's hatch (18, 14), and whose tile has none of kind bits 7, 4 and 5 (no water, rock or brush)"
  },
  {
   "address": 23061,
   "type": "line",
   "text": "The square's tile must neither block (bit 7) nor carry bits 4-5 (brush and water); the hatch's tile ($67, kind $0C) passes this test, hence its own check above"
  },
  {
   "address": 23070,
   "type": "line",
   "text": "A free entry becomes the mound: its square, picture $62 and flags $80 (solid, still); sound 10. When the square is in the chart window, the mound is shown rising: tiles $5F, $60 and $61 in its cell in turn, two ticks each"
  },
  {
   "address": 23138,
   "type": "line",
   "text": "One frame of the rising mound: the chart refilled around the trooper ($5BE4), the tile number in $C7 put in the mound's cell of the chart buffer ($FA00 plus the cell index in $95), the chart drawn and two ticks waited. Called for $5F and $60, then run on into for $61"
  },
  {
   "address": 23156,
   "type": "line",
   "text": "Every 32nd pass each mound (picture $62) breeds: when fewer than four entries carry its number in their action byte ($5618), one more Manchi is made on the mound's square ($5A9C). A dead Manchi's byte is cleared (remove_entry), so a mound breeds again as its brood is shot"
  },
  {
   "address": 23196,
   "type": "line",
   "text": "One Manchi for mound $C6, unless a Manchi still stands on the mound's square: a free entry gets the square, the mound's number in its action byte ($5618), flags $81 (solid, wandering) and type 1; its picture is set on the next pass ($5976)"
  },
  {
   "address": 23260,
   "type": "line",
   "text": "The trooper's shot. A nonzero step X, Y from the keys becomes the aim ($CA, $CB). ESC waits for a key, a pause. Space or the fire button fires: sound 8, and the shot (entry 1) leaves the trooper's square and flies up to five squares along the aim, drawn at each"
  },
  {
   "address": 23334,
   "type": "line",
   "text": "A square whose tile blocks (kind bit 7: water, rock, the ship) stops the shot. Brush (kind $10) is burnt: its tile in the grid at $5100 + 32 * (31 - y) + x becomes the one 12 on ($1C-$27, kind 0), and the shot flies on"
  },
  {
   "address": 23393,
   "type": "line",
   "text": "The entries on the square ($3030): the first Manchi there (type 1) is killed (remove_entry) and stops the shot. A mound (picture $62) is destroyed only from the square next to it, the first of the five, with the count lowered and shown again ($5BA9); further off it just stops the shot"
  },
  {
   "address": 23459,
   "type": "line",
   "text": "The shot's column set to $7F, off the map, so it is not drawn"
  },
  {
   "address": 23465,
   "type": "line",
   "text": "Prints \"MOUNDS: \" and the number left ($CC) at column 15, row 16; at none, \"! RECALL !\" and sound 3: the trooper must get back to the drop ship"
  },
  {
   "address": 23501,
   "type": "line",
   "text": "The drop is won when no mound is left and the trooper stands on the drop ship's hatch, the square 18, 14: the caller's return is dropped and A = $FF goes back to the drop's caller"
  },
  {
   "address": 23524,
   "type": "line",
   "text": "Fills the chart window around the trooper (cells off the map get tile $39, water) and puts the map's entries in ($2F9C)"
  },
  {
   "address": 23544,
   "type": "line",
   "text": "Carry clear when Manchi Y can see the trooper. A line is walked from the Manchi a square at a time, each step a single move across and down toward him, with five steps to spend: a tile with kind bit 2 (rock, parts of the ship, and the hatch he can stand in) hides him, and brush (kind $10) costs two more steps. Carry set when the steps run out first"
  },
  {
   "address": 23649,
   "type": "line",
   "text": "\"MOUNDS: \", zero-ended, then \"! RECALL !\" at $5C6A; zeros from $5C75 to the page's end, which no code reads"
  },
  {
   "address": 23808,
   "type": "line",
   "text": "The Manchi's moves and the trooper's. Each Manchi (type 1) moves on a pass when a random 0 to level + 10 is 9 or more, so (level + 2) times in level + 11: by its motion kind's routine from the table at $5D95 (kind 1 $5D74, kind 3 move_chase in SEG1), patched into the JSR at $5D30, and its heading set. Then the keys or joystick: unless fire is held the trooper steps (try_step, sliding along a wall when blocked), his heading and still bit set. Returns the key in A and the step in X, Y"
  },
  {
   "address": 23857,
   "type": "line",
   "text": "The low byte of the JSR's address, patched with the Manchi's move routine"
  },
  {
   "address": 23858,
   "type": "line",
   "text": "The high byte of the patched JSR's address"
  },
  {
   "address": 23924,
   "type": "line",
   "text": "Motion kind 1, a wandering Manchi: one sharing its square with another entry always takes a random step; one alone does so one pass in four"
  },
  {
   "address": 23957,
   "type": "line",
   "text": "The last two bytes of the JMP: hive_moves reads the motion table at $5D95 + 2 * kind, so kind 0 would read them"
  },
  {
   "address": 23958,
   "type": "line",
   "text": "The JMP's high byte, read as kind 0's high byte"
  },
  {
   "address": 23959,
   "type": "line",
   "text": "The motion kinds' routines, a word each from kind 1: $5D74 wander, $5D73 (an RTS: kind 2 stands still, never given here) and $A785 (move_chase in SEG1, kind 3). Zeros follow to $5DFF; no code reads them"
  }
 ]
}